class Lol::DynamicModel
DynamicModel
extends OpenStruct adding the following features:
-
nested generation ({a: {}}) results in DynamicModel(a:
DynamicModel
) -
parsing of date/time when property name ends with _at or _date and the value is a number
Attributes
raw[R]
Public Class Methods
new(hash={})
click to toggle source
# File lib/lol/dynamic_model.rb, line 11 def initialize(hash={}) raise ArgumentError, 'An hash is required as parameter' unless hash.is_a? Hash @raw = hash @table = {} @hash_table = {} hash.each do |k,v| key = k.to_s.underscore set_property key, v new_ostruct_member(key) end end
Public Instance Methods
as_json(opts={})
click to toggle source
# File lib/lol/dynamic_model.rb, line 28 def as_json opts={} @table.as_json end
to_h()
click to toggle source
# File lib/lol/dynamic_model.rb, line 24 def to_h @hash_table end
Protected Instance Methods
class_for_property(property)
click to toggle source
# File lib/lol/dynamic_model.rb, line 34 def class_for_property property self.class end
Private Instance Methods
convert_object(obj, property: if obj.is_a? Hash)
click to toggle source
# File lib/lol/dynamic_model.rb, line 57 def convert_object obj, property: if obj.is_a? Hash class_for_property(property).new obj elsif obj.respond_to?(:map) obj.map { |o| convert_object o, property: property } else obj end
date_key?(key)
click to toggle source
# File lib/lol/dynamic_model.rb, line 40 def date_key? key key.match(/^(.+_)?(at|date)$/) end
set_property(key, v)
click to toggle source
# File lib/lol/dynamic_model.rb, line 44 def set_property key, v if date_key?(key) && v.is_a?(Integer) @table[key.to_sym] = @hash_table[key.to_sym] = value_to_date v else @table[key.to_sym] = convert_object v, property: key.to_sym @hash_table[key.to_sym] = v end end
value_to_date(v)
click to toggle source
# File lib/lol/dynamic_model.rb, line 53 def value_to_date v Time.at(v / 1000) end