Module: SchemaTools::Modules::Attributes::ClassMethods

Defined in:
lib/schema_tools/modules/attributes.rb

Instance Method Summary collapse

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" }}')

Parameters:

  • json (String)


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

Parameters:

  • schema (Symbol|String)

    name

  • opts (Hash<Symbol|String>) (defaults to: {})


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

#schemaObject



81
82
83
# File 'lib/schema_tools/modules/attributes.rb', line 81

def schema
  @schema
end

#schema=(schema_hash) ⇒ Object

Parameters:

  • schema_hash (Hash)


78
79
80
# File 'lib/schema_tools/modules/attributes.rb', line 78

def schema= schema_hash
  @schema = schema_hash
end