Module: SchemaTools::Modules::Attributes::ClassMethods
- Defined in:
- lib/schema_tools/modules/attributes.rb
Instance Method Summary collapse
-
#from_hash(hash) ⇒ Object
Create a new object from a ruby hash (e.g parsed from json string).
-
#from_json(json) ⇒ Object
Create a new object from a json string or a ruby hash (already created from json string).
- #has_schema_attrs(schema_name, opts = {}) ⇒ Object
- #schema ⇒ Object
- #schema=(schema_hash) ⇒ Object
Instance Method Details
#from_hash(hash) ⇒ Object
Create a new object from a ruby hash (e.g parsed from json string). Auto-detects nesting by checking for a hash key with the same name as the schema_name:
class Contact
include SchemaTools::Modules::Attributes
has_schema_attrs :contact
end
c = Contact.from_hash( {'contact'=>{ "id=>"123456", "last_name"=>"Meier" }} )
c.id #=>123456
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/schema_tools/modules/attributes.rb', line 77 def from_hash(hash) # test if hash is nested and shift up if hash.length == 1 && hash["#{schema_name}"] hash = hash["#{schema_name}"] end obj = new hash.each do |key, val| next unless obj.respond_to?(key) # set values to raw schema attributes, even if there are no setters # assuming this objects comes from a remote site # TODO type conversion string/integer/number/date/datetime? obj.schema_attrs[key] = val # TODO if val is a hash / array => look for nested class end obj end |
#from_json(json) ⇒ Object
Create a new object from a json string or a ruby hash (already created from json string). Auto-detects nesting by checking for a hash key with the same name as the schema_name:
class Contact
include SchemaTools::Modules::Attributes
has_schema_attrs :contact
end
c = Contact.from_json('{ "id": "123456", "last_name": "Meier" }')
c.id #=>123456
c = Contact.from_json( {'contact'=>{ "id=>"123456", "last_name"=>"Meier" }} )
60 61 62 63 |
# File 'lib/schema_tools/modules/attributes.rb', line 60 def from_json(json) hash = JSON.parse(json) from_hash(hash) end |
#has_schema_attrs(schema_name, opts = {}) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/schema_tools/modules/attributes.rb', line 33 def has_schema_attrs(schema_name, opts={}) reader = opts[:reader] || SchemaTools::Reader schema_location = opts[:path] || opts[:schema] # remember schema + name on class level self.schema= reader.read(schema_name, schema_location) self.schema_name(schema_name) # make getter / setter methods self.schema[:properties].each do |key, prop| define_method(key) { schema_attrs[key] } define_method("#{key}=") { |value| schema_attrs[key] = value } unless prop[:readonly] end end |
#schema ⇒ Object
98 99 100 |
# File 'lib/schema_tools/modules/attributes.rb', line 98 def schema @schema end |
#schema=(schema_hash) ⇒ Object
95 96 97 |
# File 'lib/schema_tools/modules/attributes.rb', line 95 def schema= schema_hash @schema = schema_hash end |