module FavroApi::Parser

Public Instance Methods

new(*args) click to toggle source
Calls superclass method
# File lib/favro_api/parser.rb, line 5
def new(*args)
  if args.any?
    return parse(*args)
  end
  super
end
parse(data) click to toggle source
# File lib/favro_api/parser.rb, line 12
def parse(data)
  case data
  when Array
    parse_array(data)
  when Hash
    parse_hash(data)
  else
    raise ParserError, "Can't parse #{data.class.name}"
  end
end

Private Instance Methods

parse_array(array) click to toggle source
# File lib/favro_api/parser.rb, line 34
def parse_array(array)
  array.map do |data|
    parse(data)
  end
end
parse_field(field, value = nil) click to toggle source
# File lib/favro_api/parser.rb, line 40
def parse_field(field, value = nil)
  if field[:type].is_a?(Array) && array_field = field[:type][0]
    return value.to_a.map {|val| array_field.new(val) }
  end
  field[:type].new(value)
end
parse_hash(hash) click to toggle source
# File lib/favro_api/parser.rb, line 25
def parse_hash(hash)
  instance = new
  fields.each do |field|
    value = hash[field[:name].to_s]
    instance.send("#{field[:name]}=", parse_field(field, value))
  end
  instance
end