module RestfulObjects::ObjectBase
Constants
- HTTP_OK
Attributes
ro_title[RW]
Public Class Methods
new()
click to toggle source
Calls superclass method
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 6 def initialize super @ro_deleted = false @ro_is_service = self.class.ancestors.include?(RestfulObjects::Service) @ro_title = "#{self.class.name} (#{object_id})" ro_domain_model.register_object(self) unless @ro_is_service ro_domain_type.collections.each_value do |collection| instance_variable_set("@#{collection.id}".to_sym, Array.new) end on_after_create if respond_to?(:on_after_create) end
Public Instance Methods
decode_value(value, type)
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 74 def decode_value(value, type) return nil if value.nil? case type when :string value.to_s when :int value.to_i when :bool if [true, 'true'].include?(value) true elsif [false, 'false'].include?(value) false else raise ArgumentError.new "invalid boolean value: #{value}" end when :decimal Float(value) when :date Date.parse(value) when :blob Base64.decode64(value) else raise "decode_value unsupported property type: #{type}" end end
encode_value(value, type, property_name = '')
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 50 def encode_value(value, type, property_name = '') return nil if value.nil? case type when :string value.to_s when :int value.to_i when :bool value.to_s when :decimal value.to_f when :date value.strftime('%Y-%m-%d') when :blob Base64.encode64(value).strip else if value.respond_to?(:ro_property_relation_representation, true) value.ro_property_relation_representation(property_name) else raise "encode_value unsupported property type: #{type}" end end end
get_self_link()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 108 def get_self_link link_to(:self, ro_relative_url, :object) end
ro_absolute_url()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 104 def ro_absolute_url "#{ro_domain_model.base_url}#{ro_relative_url}" end
ro_delete()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 35 def ro_delete on_before_delete if respond_to?(:on_before_delete) @ro_deleted = true on_after_delete if respond_to?(:on_after_delete) {}.to_json end
ro_deleted?()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 42 def ro_deleted? @ro_deleted end
ro_domain_model()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 19 def ro_domain_model RestfulObjects::DomainModel.current end
ro_domain_type()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 23 def ro_domain_type @ro_domain_type ||= ro_domain_model.types[self.class.name] end
ro_get_representation_response()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 46 def ro_get_representation_response [HTTP_OK, { 'Content-Type' => ro_content_type_for_object(ro_domain_type.id) }, ro_get_representation.to_json] end
ro_instance_id()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 31 def ro_instance_id object_id end
ro_is_service?()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 27 def ro_is_service? @ro_is_service end
ro_relative_url()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 100 def ro_relative_url "/objects/#{self.class.name}/#{self.object_id}" end
Protected Instance Methods
actions_members()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 189 def actions_members members = {} ro_domain_type.actions.each do |name, action| members[name] = { 'memberType' => 'action', 'links' => [ !ro_is_service? ? link_to(:details, "/objects/#{self.class.name}/#{object_id}/actions/#{name}", :object_action, action: name) : link_to(:details, "/services/#{self.class.name}/actions/#{name}", :object_action, action: name) ], 'extensions' => action.metadata } end members end
collections_members()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 174 def collections_members members = {} ro_domain_type.collections.each do |name, collection| members[name] = { 'memberType' => 'collection', 'size' => ro_domain_type.collections.count, 'links' => [ link_to(:details, "/objects/#{self.class.name}/#{object_id}/collections/#{name}", :object_collection, collection: name) ], 'extensions' => collection.metadata } end members end
ro_generate_members()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 130 def ro_generate_members if ro_is_service? actions_members else ro_properties_members.merge(collections_members.merge(actions_members)) end end
ro_get_representation(include_self_link = true)
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 114 def ro_get_representation(include_self_link = true) result = { 'title' => ro_title, 'members' => ro_generate_members, 'links' => [ link_to(:described_by, "/domain-types/#{ro_domain_type.id}", :domain_type) ], 'extensions' => ro_domain_type.metadata } if ro_is_service? result['serviceId'] = ro_domain_type.id result['links'] << link_to(:self, "/services/#{ro_domain_type.id}", :object) if include_self_link else result['instanceId'] = ro_instance_id.to_s result['links'] << link_to(:self, "/objects/#{ro_domain_type.id}/#{ro_instance_id}", :object) if include_self_link end result end
ro_properties_members()
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 144 def ro_properties_members members = {} ro_domain_type.properties.each do |name, property| members[name] = { 'memberType' => 'property', 'value' => ro_get_property_as_json(name), 'links' => [ link_to(:details, "/objects/#{self.class.name}/#{object_id}/properties/#{name}", :object_property, property: name) ], 'extensions' => property.metadata } if property.read_only members[name]['disabledReason'] = property.disabled_reason else if self.respond_to?("#{name}_choices") choices = self.send("#{name}_choices") raise "value returned by #{name}_choices method should be an Array" unless choices.is_a?(Array) if ro_get_property_metadata(name).is_reference choices_json = choices.map { |object| object.ro_property_relation_representation(name) } else choices_json = choices.map { |value| decode_value(value, ro_get_property_metadata(name).return_type) } end members[name]['choices'] = choices_json end end end members end
ro_property_relation_representation(property_name)
click to toggle source
# File lib/restful_objects/domain_model/mixins/object_base.rb, line 138 def ro_property_relation_representation(property_name) representation = link_to(:value, "/objects/#{self.class.name}/#{object_id}", :object, property: property_name) representation['title'] = ro_title representation end