class TLAW::ResponseProcessor
@private FIXME: everything is awfully dirty here
Attributes
parent[RW]
post_processors[R]
Public Class Methods
new(post_processors = [])
click to toggle source
# File lib/tlaw/response_processor.rb, line 57 def initialize(post_processors = []) @post_processors = post_processors end
Public Instance Methods
add_item_post_processor(key, subkey = nil, &block)
click to toggle source
# File lib/tlaw/response_processor.rb, line 69 def add_item_post_processor(key, subkey = nil, &block) @post_processors << Items.new(key, subkey, &block) end
add_post_processor(key = nil, &block)
click to toggle source
# File lib/tlaw/response_processor.rb, line 61 def add_post_processor(key = nil, &block) @post_processors << (key ? Key.new(key, &block) : Base.new(&block)) end
add_replacer(&block)
click to toggle source
# File lib/tlaw/response_processor.rb, line 65 def add_replacer(&block) @post_processors << Replace.new(&block) end
all_post_processors()
click to toggle source
# File lib/tlaw/response_processor.rb, line 77 def all_post_processors [*(parent ? parent.all_post_processors : nil), *@post_processors] end
process(hash)
click to toggle source
# File lib/tlaw/response_processor.rb, line 73 def process(hash) flatten(hash).derp(&method(:post_process)).derp(&method(:datablize)) end
Private Instance Methods
datablize(value)
click to toggle source
# File lib/tlaw/response_processor.rb, line 111 def datablize(value) case value when Hash value.map { |k, v| [k, datablize(v)] }.to_h when Array if !value.empty? && value.all? { |el| el.is_a?(Hash) } DataTable.new(value) else value end else value end end
flatten(value)
click to toggle source
# File lib/tlaw/response_processor.rb, line 83 def flatten(value) case value when Hash flatten_hash(value) when Array value.map(&method(:flatten)) else value end end
flatten_hash(hash)
click to toggle source
# File lib/tlaw/response_processor.rb, line 94 def flatten_hash(hash) hash.flat_map { |k, v| v = flatten(v) if v.is_a?(Hash) v.map { |k1, v1| ["#{k}.#{k1}", v1] } else [[k, v]] end }.reject { |_, v| v.nil? }.to_h end
post_process(hash)
click to toggle source
# File lib/tlaw/response_processor.rb, line 105 def post_process(hash) all_post_processors.inject(hash) { |res, processor| processor.call(res).derp(&method(:flatten)) } end