Module: RestfulObjects::ObjectProperties

Defined in:
lib/restful_objects/object_properties.rb

Instance Method Summary collapse

Instance Method Details

#clear_property(property) ⇒ Object



57
58
59
60
61
62
63
64
# File 'lib/restful_objects/object_properties.rb', line 57

def clear_property(property)
  raise "property not exists" if not rs_model.types[self.class.name].properties.include?(property)
  raise "read-only property" if rs_model.types[self.class.name].properties[property].read_only

  send("#{property}=".to_sym, nil)
  on_after_update if respond_to? :on_after_update
  get_property_as_json(property)
end

#get_property_as_json(property) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/restful_objects/object_properties.rb', line 20

def get_property_as_json(property)
  raise "Property not exists" if not rs_model.types[self.class.name].properties.include?(property)

  representation = {
    property =>
      { 'value' => get_property_value(property),
        'links' => [
          link_to(:self, "/objects/#{self.class.name}/#{object_id}/properties/#{property}", :object_property),
          link_to(:up, "/objects/#{self.class.name}/#{object_id}", :object) ],
        'extensions' => rs_model.types[self.class.name].properties[property].
      }
  }

  if not rs_model.types[self.class.name].properties[property].read_only then
    representation[property]['links'].concat [
      link_to(:modify, "/objects/#{self.class.name}/#{object_id}/properties/#{property}", :object_property,
        { property: property, method: 'PUT', arguments: { 'value' => nil } }),
      link_to(:clear, "/objects/#{self.class.name}/#{object_id}/properties/#{property}", :object_property,
        { property: property, method: 'DELETE'} ) ]
  else
    representation[property]['disabledReason'] =
      rs_model.types[self.class.name].properties[property].disabled_reason
  end

  representation.to_json
end

#get_property_value(property) ⇒ Object



70
71
72
# File 'lib/restful_objects/object_properties.rb', line 70

def get_property_value(property)
  encode_value(send(property.to_sym), property_type(property))
end

#properties_membersObject



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/restful_objects/object_properties.rb', line 3

def properties_members
  members = {}
  rs_type.properties.each do |name, property|
    members[name] = {
      'memberType' => 'property',
      'value' => get_property_value(name),
      'links' => [
        link_to(:details, "/objects/#{self.class.name}/#{object_id}/properties/#{name}", :object_property, property: name)
      ],
      'extensions' => property.
    }

    members[name]['disabledReason'] = property.disabled_reason if property.read_only
  end
  members
end

#property_type(property) ⇒ Object



66
67
68
# File 'lib/restful_objects/object_properties.rb', line 66

def property_type(property)
  rs_model.types[self.class.name].properties[property].return_type
end

#put_property_as_json(property, json) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/restful_objects/object_properties.rb', line 47

def put_property_as_json(property, json)
  raise "property not exists" if not rs_model.types[self.class.name].properties.include?(property)
  raise "read-only property" if rs_model.types[self.class.name].properties[property].read_only

  value = JSON.parse(json)['value']
  set_property_value(property, value)
  on_after_update if respond_to? :on_after_update
  get_property_as_json(property)
end

#set_property_value(property, value) ⇒ Object



74
75
76
# File 'lib/restful_objects/object_properties.rb', line 74

def set_property_value(property, value)
  send("#{property}=".to_sym, decode_value(value, property_type(property)))
end