Module: SchemaTools::Modules::Attributes::ClassMethods
- Defined in:
- lib/schema_tools/modules/attributes.rb
Instance Method Summary collapse
-
#from_json(json) ⇒ Object
Create a new object from a json string.
- #has_schema_attrs(schema_name, opts = {}) ⇒ Object
- #schema ⇒ Object
- #schema=(schema_hash) ⇒ Object
Instance Method Details
#from_json(json) ⇒ Object
Create a new object from a 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" }}')
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/schema_tools/modules/attributes.rb', line 59 def from_json(json) hash = JSON.parse(json) # 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 |
#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
81 82 83 |
# File 'lib/schema_tools/modules/attributes.rb', line 81 def schema @schema end |
#schema=(schema_hash) ⇒ Object
78 79 80 |
# File 'lib/schema_tools/modules/attributes.rb', line 78 def schema= schema_hash @schema = schema_hash end |