Class: SonJay::ObjectModel::Properties::Abstract

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/son_jay/object_model/properties/abstract.rb

Direct Known Subclasses

PropertiesWithExtra, PropertiesWithoutExtra

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(property_definitions) ⇒ Abstract

Returns a new instance of Abstract.



12
13
14
15
16
17
18
19
20
21
# File 'lib/son_jay/object_model/properties/abstract.rb', line 12

def initialize(property_definitions)
  @property_definitions = property_definitions
  @data = {}
  @model_properties = Set.new
  property_definitions.each do |d|
    is_model_property = !! d.model_class
    @data[d.name] = is_model_property ? d.model_class.new : nil
    @model_properties << d.name if is_model_property
  end
end

Instance Attribute Details

#model_propertiesObject (readonly)

Returns the value of attribute model_properties.



10
11
12
# File 'lib/son_jay/object_model/properties/abstract.rb', line 10

def model_properties
  @model_properties
end

Instance Method Details

#[](name) ⇒ Object



28
29
30
31
# File 'lib/son_jay/object_model/properties/abstract.rb', line 28

def [](name)
  name = property_definitions.name_from(name)
  @data[name]
end

#[]=(name, value) ⇒ Object

Raises:



40
41
42
43
44
# File 'lib/son_jay/object_model/properties/abstract.rb', line 40

def []=(name, value)
  name = property_definitions.name_from(name)
  raise PropertyNameError.new(name) unless @data.has_key?(name)
  @data[name] = value
end

#extraObject

Raises:

  • (NotImplementedError)


61
62
63
# File 'lib/son_jay/object_model/properties/abstract.rb', line 61

def extra
  raise NotImplementedError, "Subclass responsibility"
end

#fetch(name) ⇒ Object



33
34
35
36
37
38
# File 'lib/son_jay/object_model/properties/abstract.rb', line 33

def fetch(name)
  name = property_definitions.name_from(name)
  @data.fetch(name)
rescue KeyError
  raise PropertyNameError.new(name)
end

#load_data(data) ⇒ Object



46
47
48
49
50
# File 'lib/son_jay/object_model/properties/abstract.rb', line 46

def load_data(data)
  data.each_pair do |name, value|
    load_property name, value
  end
end

#load_property(name, value) ⇒ Object



52
53
54
55
56
57
58
59
# File 'lib/son_jay/object_model/properties/abstract.rb', line 52

def load_property(name, value)
  name = property_definitions.name_from(name)
  if @data.has_key?( name )
    load_defined_property name, value
  else
    load_extra_property name, value
  end
end

#to_json(options = ::JSON::State.new) ⇒ Object



65
66
67
68
# File 'lib/son_jay/object_model/properties/abstract.rb', line 65

def to_json(options = ::JSON::State.new)
  options = ::JSON::State.new(options) unless options.kind_of?(::JSON::State)
  hash_for_json.to_json( options )
end