class Jerakia::Answer

Attributes

datatype[RW]
lookup_type[R]
merge_strategy[R]
payload[RW]

Public Class Methods

new(lookup_type = :first, merge_strategy = :array) click to toggle source
# File lib/jerakia/answer.rb, line 10
def initialize(lookup_type = :first, merge_strategy = :array)
  @lookup_type = lookup_type
  @merge_strategy = merge_strategy
  @found = false
  case lookup_type
  when :first
    @payload = nil
  when :cascade
    @payload = []
    @datatype = 'array'
  end
end

Public Instance Methods

consolidate() click to toggle source
# File lib/jerakia/answer.rb, line 47
def consolidate
  if lookup_type == :cascade && payload.is_a?(Array)
    case merge_strategy
    when :array
      flatten_payload!
    when :hash, :deep_hash
      merge_payload!
    end
  end
end
flatten_payload!() click to toggle source
# File lib/jerakia/answer.rb, line 59
def flatten_payload!
  @payload.flatten!
end
found?() click to toggle source
# File lib/jerakia/answer.rb, line 43
def found?
  @found
end
merge_payload!() click to toggle source

TODO: consolidate this into less lines

# File lib/jerakia/answer.rb, line 65
def merge_payload! # rubocop:disable Metrics/MethodLength
  payload_hash = {}
  @payload.each do |p|
    next unless p.is_a?(Hash)
    case merge_strategy
    when :hash
      payload_hash = p.merge(payload_hash)
    when :deep_hash
      payload_hash = p.deep_merge!(payload_hash)
    end
  end
  @payload = payload_hash
  set_data_type
end
process_response(response_entries) click to toggle source
# File lib/jerakia/answer.rb, line 23
def process_response(response_entries)
  responses = response_entries.flatten.compact

  return nil if responses.empty?
  @found = true

  responses.each do |res|
    case lookup_type
    when :first
      @payload = res.value
      @datatype = res.datatype
      Jerakia.log.debug("Registered answer as #{payload}")
      break
    when :cascade
      @payload << res.value
    end
  end
  consolidate
end
set_data_type() click to toggle source
# File lib/jerakia/answer.rb, line 80
def set_data_type
  @data_type = @payload.class.to_s.downcase
end