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