class RestfulObjects::DomainType

Attributes

actions[R]
collections[R]
description[RW]
friendly_name[RW]
id[R]
is_service[R]
plural_name[RW]
properties[R]

Public Class Methods

new(id) click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 11
def initialize(id)
  @id            = id
  @properties    = {}
  @collections   = {}
  @actions       = {}
  @is_service    = false
  @friendly_name = ''
  @plural_name   = ''
  @description   = ''
end

Public Instance Methods

get_representation() click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 37
def get_representation
  { 'name' => @id,
    'domainType' => @id,
    'friendlyName' => @friendly_name,
    'pluralName' => @plural_name,
    'description' => @description,
    'isService' => @is_service,
    'members' => get_members,
    'typeActions' => get_type_actions,
    'links' => [ link_to(:self, "/domain-types/#{@id}", :domain_type) ],
    'extensions' => {}
  }.to_json
end
metadata() click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 86
def metadata
  { 'domainType' => id,
    'friendlyName' => friendly_name,
    'pluralName' => plural_name,
    'description' => description,
    'isService' => is_service }
end
new_proto_persistent_object() click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 51
def new_proto_persistent_object
  persist_link = link_to(:persist, "/objects/#{id}", :object, method: 'POST')
  persist_link['arguments'] = { 'members' => {} }
  members = {}
  properties.each do |name, property|
    if not property.optional
      persist_link['arguments']['members'][name] = {
        'value' => nil,
        'extensions' => property.metadata }
    end
    members[name] = { 'value' => nil }
  end

  { 'title' => "New #{id}",
    'members' => members,
    'links' => [ persist_link ],
    'extensions' => {} }
end
post_prototype_object(members_json) click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 70
def post_prototype_object(members_json)
  members = JSON.parse(members_json)['members']

  new_object = Object.const_get(@id.to_sym).new

  members.each do |name, value|
    if properties.include?(name) then
      new_object.ro_put_property_and_get_response(name, value.to_json)
    else
      raise "member of property '#{name}' not found in type '#{@id}'"
    end
  end

  new_object.ro_get_representation_response
end
register_action(name, options = {}) click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 32
def register_action(name, options = {})
  options[:member_order] ||= @actions.count + 1
  @actions[name]           = RestfulObjects::ActionDescription.new(name, @id, options)
end
register_collection(name, type, options = {}) click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 27
def register_collection(name, type, options = {})
  options[:member_order] ||= @collections.count + 1
  @collections[name]       = RestfulObjects::CollectionDescription.new(name, type, @id, options)
end
register_property(name, return_type, options = {}) click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 22
def register_property(name, return_type, options = {})
  options[:member_order] ||= @properties.count + 1
  @properties[name]        = RestfulObjects::PropertyDescription.new(name, @id, return_type, options)
end

Protected Instance Methods

actions_members() click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 116
def actions_members
  result = {}
  @actions.each do |name, action|
    result[name] = link_to(:action, "/domain-types/#{@id}/actions/#{name}", :action_description)
  end
  result
end
collections_members() click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 108
def collections_members
  result = {}
  @collections.each do |name, collection|
    result[name] = link_to(:collection, "/domain-types/#{@id}/collections/#{name}", :collection_description)
  end
  result
end
get_members() click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 96
def get_members
  ro_properties_members.merge(collections_members.merge(actions_members))
end
get_type_actions() click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 124
def get_type_actions
  {}
end
properties_members() click to toggle source
# File lib/restful_objects/domain_model/types/domain_type.rb, line 100
def properties_members
  result = {}
  @properties.each do |name, property|
    result[name] = link_to(:property, "/domain-types/#{@id}/properties/#{name}", :property_description)
  end
  result
end