class RegApi2::ResultContract

Contract for API results. Waits for answer field and returns it only by default. @see SymHash

Constants

BOOL_FIELDS

Fields that will be converted to {Boolean}. @see convert

FLOAT_FIELDS

Fields that will be converted to {Float}. @see convert

INT_FIELDS

Fields that will be converted to {Fixnum}. @see convert

Attributes

opts[R]

Options of contract. @return [Hash] Options hash.

Public Class Methods

new(opts = {}) click to toggle source
# File lib/reg_api2/result_contract.rb, line 49
def initialize(opts = {})
  @opts = opts
end

Public Instance Methods

convert(answer) click to toggle source

Reworks answer to translate {INT_FIELDS}, {FLOAT_FIELDS} and {BOOL_FIELDS}. @param answer API answer field. @return Translated answer.

# File lib/reg_api2/result_contract.rb, line 99
def convert(answer)
  case answer
  when Hash
    convert_hash(answer)
  when Array
    convert_array(answer)
  else
    answer
  end
end
handle_answer(answer) click to toggle source

Handles API answer. Take in care ‘:field` option. @param answer API answer field. @return Converted answer by default. @see convert @see opts

# File lib/reg_api2/result_contract.rb, line 115
def handle_answer(answer)
  return nil  if answer.nil?
  answer = convert(answer)
  field = opts[:field]
  if field
    answer = answer[field]
  end
  answer
end
handle_result(result) click to toggle source

Extracts answer field and returns it wrapped by {#handle_answer}. Result is unified using {SymHash.from}. @param [Hash] result API result. @return Reworked API answer field. @see SymHash

# File lib/reg_api2/result_contract.rb, line 58
def handle_result(result)
  result = SymHash.from(result)
  handle_answer(result[:answer])
end

Private Instance Methods

convert_array(answer) click to toggle source
# File lib/reg_api2/result_contract.rb, line 83
def convert_array(answer)
  answer.map do |value|
    case value
    when Hash
      convert_hash(value)
    when Array
      convert_array(value)
    else
      value
    end
  end
end
convert_hash(answer) click to toggle source
# File lib/reg_api2/result_contract.rb, line 63
def convert_hash(answer)
  answer.each_pair do |key, value|
    case value
    when String
      if INT_FIELDS.include?(key.to_s)
        answer[key] = value.to_i
      elsif FLOAT_FIELDS.include?(key.to_s)
        answer[key] = value.to_f
      elsif BOOL_FIELDS.include?(key.to_s)
        answer[key] = value.to_i.nonzero? ? true : false
      end
    when Hash
      answer[key] = convert_hash(value)
    when Array
      answer[key] = convert_array(value)
    end
  end
  answer
end