module BetfairApiNgRails::Api::Data::Concerns::Jsonable::ClassMethods

Public Instance Methods

from_json(data = {}) click to toggle source
# File lib/betfair_api_ng_rails/api/data/concerns/jsonable.rb, line 13
def from_json(data = {})
  return nil unless self.respond_to?(:class_attrs)
  self.new set_attributes(data)
end

Private Instance Methods

get_attr_value(data, name, options) click to toggle source
# File lib/betfair_api_ng_rails/api/data/concerns/jsonable.rb, line 30
def get_attr_value(data, name, options)
  j_data = data[json_key(name)]
  return nil unless j_data
  options[:array] ? j_data.map { |r| prepare_value(options[:type], r) } : prepare_value(options[:type], j_data)
end
json_key(attrib) click to toggle source
# File lib/betfair_api_ng_rails/api/data/concerns/jsonable.rb, line 26
def json_key(attrib)
  attrib.to_s.camelize(:lower)
end
prepare_value(type, data) click to toggle source
# File lib/betfair_api_ng_rails/api/data/concerns/jsonable.rb, line 36
def prepare_value(type, data)
  type == String ? data : type.from_json(data)
end
set_attributes(data) click to toggle source
# File lib/betfair_api_ng_rails/api/data/concerns/jsonable.rb, line 20
def set_attributes(data)
  self.class_attrs.each_with_object({}) do |(name, options), h|
    h[name] = get_attr_value(data, name, options)
  end
end