restful_objects 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/lib/restful_objects.rb +1 -2
  3. data/lib/restful_objects/domain_model/domain_model.rb +14 -11
  4. data/lib/restful_objects/domain_model/helpers/link_generator.rb +102 -90
  5. data/lib/restful_objects/domain_model/mixins/object.rb +10 -13
  6. data/lib/restful_objects/domain_model/mixins/object_actions.rb +106 -117
  7. data/lib/restful_objects/domain_model/mixins/object_base.rb +175 -131
  8. data/lib/restful_objects/domain_model/mixins/object_collections.rb +58 -71
  9. data/lib/restful_objects/domain_model/mixins/object_macros.rb +20 -26
  10. data/lib/restful_objects/domain_model/mixins/object_properties.rb +85 -98
  11. data/lib/restful_objects/domain_model/mixins/service.rb +9 -17
  12. data/lib/restful_objects/domain_model/types/action_description.rb +80 -82
  13. data/lib/restful_objects/domain_model/types/collection_description.rb +39 -40
  14. data/lib/restful_objects/domain_model/types/domain_type.rb +102 -105
  15. data/lib/restful_objects/domain_model/types/parameter_description.rb +42 -47
  16. data/lib/restful_objects/domain_model/types/parameter_description_list.rb +9 -12
  17. data/lib/restful_objects/domain_model/types/property_description.rb +62 -64
  18. data/lib/restful_objects/router.rb +6 -0
  19. data/lib/restful_objects/router/base.rb +23 -32
  20. data/lib/restful_objects/router/domain_object_resources.rb +89 -94
  21. data/lib/restful_objects/router/domain_type_resources.rb +24 -29
  22. data/lib/restful_objects/router/supporting_resources.rb +26 -31
  23. data/lib/restful_objects/version.rb +1 -1
  24. data/spec/integration/domain-types_actions_spec.rb +1 -3
  25. data/spec/integration/domain-types_collections_spec.rb +1 -39
  26. data/spec/integration/domain-types_properties_spec.rb +1 -78
  27. data/spec/integration/domain-types_spec.rb +39 -0
  28. data/spec/integration/{server-root_spec.rb → homepage_spec.rb} +2 -3
  29. data/spec/integration/objects_actions_spec.rb +7 -0
  30. data/spec/integration/objects_collections_spec.rb +169 -0
  31. data/spec/integration/objects_properties_spec.rb +122 -0
  32. data/spec/{acceptance/generate_json_representations_spec.rb → integration/objects_spec.rb} +12 -4
  33. data/spec/unit/object_actions_spec.rb +5 -5
  34. data/spec/unit/object_collections_spec.rb +1 -1
  35. data/spec/unit/object_properties_spec.rb +6 -6
  36. data/spec/unit/object_spec.rb +9 -9
  37. data/spec/unit/service_spec.rb +5 -5
  38. metadata +54 -35
  39. data/spec/integration/domain_model_spec.rb +0 -35
  40. data/spec/unit/type_list_spec.rb +0 -37
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab9347453b22d38c76c2ab4c8711d1c1bd825ea4
4
- data.tar.gz: 85549e79dde2126e2871841d00d8ea64dfeced79
3
+ metadata.gz: 6daedde1839a6d282abef3882e0611a409206afc
4
+ data.tar.gz: b787995164e0c9beffde4e8cab005110daba1ffd
5
5
  SHA512:
6
- metadata.gz: 935b685a0063195caa79387cb71c7cd51377c93de88dde3a285df92413a3c5289ef3586173d67da34a2e1ea41b840036de54e1a5f7bf90ea5b1efcb18703b3b7
7
- data.tar.gz: d68969dfe27106b61abd847c742244e34160d498a1da0c44a6b0e34615aed0940edbd8c3cc3c53232e045f558384a285db4e15f44c10f32d80c712f17b516ee6
6
+ metadata.gz: ab0df304178a6f7b0a15915e13d9d8f84f279e454b1b59e374516ee6517523506d372058bd8a63fdd0fbcbc5aa78349840e24a648853c7aaabe91ea2ecb12152
7
+ data.tar.gz: d04efcf54e7e54c066117529ac0410efe3bc4c8b5cdfa56d65e8f926e0c789fb88a67c191dec05811c8aff0ce8fea076582729f6a18a98484ac781f9248cf0f6
@@ -7,6 +7,5 @@ require 'forwardable'
7
7
  require 'sinatra/base'
8
8
 
9
9
  require_relative 'restful_objects/version'
10
- require_relative 'restful_objects/router/base'
10
+ require_relative 'restful_objects/router'
11
11
  require_relative 'restful_objects/domain_model/domain_model'
12
-
@@ -54,7 +54,11 @@ module RestfulObjects
54
54
  @types[name] = DomainType.new(name)
55
55
  end
56
56
 
57
- def get_homepage
57
+ def get_homepage_representation_response
58
+ [HTTP_OK, { 'Content-Type' => 'application/json' }, get_homepage_representation.to_json]
59
+ end
60
+
61
+ def get_homepage_representation
58
62
  { 'links' => [
59
63
  link_to(:self, '/', :homepage),
60
64
  link_to(:user, '/user', :user),
@@ -62,15 +66,15 @@ module RestfulObjects
62
66
  link_to(:version, '/version', :version),
63
67
  link_to(:domain_types, '/domain-types', :type_list)
64
68
  ],
65
- 'extensions' => {}
66
- }.to_json
69
+ 'extensions' => {} }
67
70
  end
68
71
 
69
- def get_version
70
- { 'links' => [
71
- link_to(:self, '/version', :version),
72
- link_to(:up, '/', :homepage),
73
- ],
72
+ def get_version_representation_response
73
+ [HTTP_OK, { 'Content-Type' => 'application/json' }, get_version_representation.to_json]
74
+ end
75
+
76
+ def get_version_representation
77
+ { 'links' => [ link_to(:self, '/version', :version), link_to(:up, '/', :homepage) ],
74
78
  'specVersion' => '1.0',
75
79
  'optionalCapabilities' => {
76
80
  'blobsClobs' => true,
@@ -79,8 +83,7 @@ module RestfulObjects
79
83
  'protoPersistentObjects' => true,
80
84
  'validateOnly' => false
81
85
  },
82
- 'extensions' => {}
83
- }.to_json
86
+ 'extensions' => {} }
84
87
  end
85
88
 
86
89
  def get_user
@@ -130,7 +133,7 @@ module RestfulObjects
130
133
  values = []
131
134
  @services.each do |name, service|
132
135
  element = link_to(:service, "/services/#{name}", :object, service_id: name)
133
- element['title'] = service.title
136
+ element['title'] = service.ro_title
134
137
  values << element
135
138
  end
136
139
  values
@@ -1,104 +1,116 @@
1
- module RestfulObjects
2
- module LinkGenerator
3
- def link_to(rel, href, type, options = {})
4
- link = {
5
- 'rel' => generate_rel(rel, options),
6
- 'href' => RestfulObjects::DomainModel.current.base_url + href,
7
- 'type' => generate_repr_type(type, options[:domain_type], options[:element_type]),
8
- 'method' => options[:method] || 'GET' }
1
+ module RestfulObjects::LinkGenerator
2
+ HTTP_OK = 200
9
3
 
10
- link['arguments'] = options[:arguments] if options[:arguments]
4
+ def link_to(rel, href, type, options = {})
5
+ link = {
6
+ 'rel' => generate_rel(rel, options),
7
+ 'href' => RestfulObjects::DomainModel.current.base_url + href,
8
+ 'type' => generate_repr_type(type, options[:domain_type], options[:element_type]),
9
+ 'method' => options[:method] || 'GET' }
11
10
 
12
- link
13
- end
11
+ link['arguments'] = options[:arguments] if options[:arguments]
12
+
13
+ link
14
+ end
14
15
 
15
- def generate_rel(rel, options = {})
16
- if [:self, :up, :next, :previous, :icon, :help].include?(rel)
17
- rel.to_s
18
- elsif rel == :described_by
19
- 'describedby'
20
- else
21
- if [:action, :action_param, :collection, :delete, :domain_type, :domain_types, :element, :element_type, :persist,
22
- :property, :return_type, :services, :update, :user, :version].include?(rel)
23
- 'urn:org.restfulobjects:rels/' + underscore_to_hyphen_string(rel)
24
- else
25
- 'urn:org.restfulobjects:rels/' +
26
- case rel
27
- when :add_to
28
- 'add-to;collection="' + options[:collection] + '"'
29
- when :attachment
30
- 'attachment;property="' + options[:property] + '"'
31
- when :choice
32
- if options[:property]
33
- 'choice;property="' + options[:property] + '"'
34
- elsif options[:action]
35
- 'choice;action="' + options[:action] + '"'
36
- elsif options[:param]
37
- 'choice;param="' + options[:param] + '"'
38
- else
39
- raise 'option not found for choice rel'
40
- end
41
- when :clear
42
- 'clear;property="' + options[:property] + '"'
43
- when :details
44
- if options[:property]
45
- 'details;property="' + options[:property] + '"'
46
- elsif options[:collection]
47
- 'details;collection="' + options[:collection] + '"'
48
- elsif options[:action]
49
- 'details;action="' + options[:action] + '"'
50
- else
51
- raise 'option not found for details rel'
52
- end
53
- when :invoke
54
- if options[:action]
55
- 'invoke;action="' + options[:action] + '"'
56
- elsif options[:type_action]
57
- 'invoke;typeaction="' + options[:type_action] + '"'
58
- else
59
- raise 'option not found for invoke rel'
60
- end
61
- when :modify
62
- 'modify;property="' + options[:property] + '"'
63
- when :remove_from
64
- 'remove-from;collection="' + options[:collection] + '"'
65
- when :service
66
- 'service;serviceId="' + options[:service_id] + '"'
67
- when :value
68
- if options[:property]
69
- 'value;property="' + options[:property] + '"'
70
- elsif options[:collection]
71
- 'value;collection="' + options[:collection] + '"'
72
- else
73
- raise 'option not found for value rel'
74
- end
75
- else
76
- raise "rel invalid: #{rel}"
16
+ def generate_rel(rel, options = {})
17
+ if [:self, :up, :next, :previous, :icon, :help].include?(rel)
18
+ rel.to_s
19
+ elsif rel == :described_by
20
+ 'describedby'
21
+ else
22
+ if [:action, :action_param, :collection, :delete, :domain_type, :domain_types, :element, :element_type, :persist,
23
+ :property, :return_type, :services, :update, :user, :version].include?(rel)
24
+ 'urn:org.restfulobjects:rels/' + underscore_to_hyphen_string(rel)
25
+ else
26
+ 'urn:org.restfulobjects:rels/' +
27
+ case rel
28
+ when :add_to
29
+ 'add-to;collection="' + options[:collection] + '"'
30
+ when :attachment
31
+ 'attachment;property="' + options[:property] + '"'
32
+ when :choice
33
+ if options[:property]
34
+ 'choice;property="' + options[:property] + '"'
35
+ elsif options[:action]
36
+ 'choice;action="' + options[:action] + '"'
37
+ elsif options[:param]
38
+ 'choice;param="' + options[:param] + '"'
39
+ else
40
+ raise 'option not found for choice rel'
41
+ end
42
+ when :clear
43
+ 'clear;property="' + options[:property] + '"'
44
+ when :details
45
+ if options[:property]
46
+ 'details;property="' + options[:property] + '"'
47
+ elsif options[:collection]
48
+ 'details;collection="' + options[:collection] + '"'
49
+ elsif options[:action]
50
+ 'details;action="' + options[:action] + '"'
51
+ else
52
+ raise 'option not found for details rel'
77
53
  end
54
+ when :invoke
55
+ if options[:action]
56
+ 'invoke;action="' + options[:action] + '"'
57
+ elsif options[:type_action]
58
+ 'invoke;typeaction="' + options[:type_action] + '"'
59
+ else
60
+ raise 'option not found for invoke rel'
61
+ end
62
+ when :modify
63
+ 'modify;property="' + options[:property] + '"'
64
+ when :remove_from
65
+ 'remove-from;collection="' + options[:collection] + '"'
66
+ when :service
67
+ 'service;serviceId="' + options[:service_id] + '"'
68
+ when :value
69
+ if options[:property]
70
+ 'value;property="' + options[:property] + '"'
71
+ elsif options[:collection]
72
+ 'value;collection="' + options[:collection] + '"'
73
+ else
74
+ raise 'option not found for value rel'
75
+ end
76
+ else
77
+ raise "rel invalid: #{rel}"
78
78
  end
79
- end
80
79
  end
80
+ end
81
+ end
81
82
 
82
- def generate_repr_type(type, domain_type = nil, element_type = nil)
83
- valid_repr = [:homepage, :user, :version, :list, :object, :object_property, :object_collection, :object_action,
84
- :object_result, :action_result, :type_list, :domain_type, :property_description, :collection_description,
85
- :action_description, :action_param_description, :type_action_result, :error, :services]
83
+ def generate_repr_type(type, domain_type = nil, element_type = nil)
84
+ valid_repr = [:homepage, :user, :version, :list, :object, :object_property, :object_collection, :object_action,
85
+ :object_result, :action_result, :type_list, :domain_type, :property_description, :collection_description,
86
+ :action_description, :action_param_description, :type_action_result, :error, :services]
86
87
 
87
- raise "repr-type invalid: #{type.to_s}" if not valid_repr.include?(type)
88
+ raise "repr-type invalid: #{type.to_s}" if not valid_repr.include?(type)
88
89
 
89
- repr = 'application/json;profile="urn:org.restfulobjects:repr-types/' + underscore_to_hyphen_string(type) + '"'
90
+ repr = 'application/json;profile="urn:org.restfulobjects:repr-types/' + underscore_to_hyphen_string(type) + '"'
90
91
 
91
- if domain_type && [:object, :action].include?(type)
92
- repr += ';x-ro-domain-type="' + domain_type + '"'
93
- elsif element_type && [:object_collection, :action].include?(type)
94
- repr +=';x-ro-element-type="' + element_type + '"'
95
- end
92
+ if domain_type && [:object, :action].include?(type)
93
+ repr += ';x-ro-domain-type="' + domain_type + '"'
94
+ elsif element_type && [:object_collection, :action].include?(type)
95
+ repr +=';x-ro-element-type="' + element_type + '"'
96
+ end
96
97
 
97
- repr
98
- end
98
+ repr
99
+ end
99
100
 
100
- def underscore_to_hyphen_string(symbol)
101
- symbol.to_s.sub('_', '-')
102
- end
101
+ def underscore_to_hyphen_string(symbol)
102
+ symbol.to_s.sub('_', '-')
103
+ end
104
+
105
+ def ro_content_type_for_object(domain_type)
106
+ "application/json;profile=\"urn:org.restfulobjects:repr-types/object\";x-ro-domain-type=\"#{domain_type}\""
107
+ end
108
+
109
+ def ro_content_type_for_property
110
+ "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
111
+ end
112
+
113
+ def ro_content_type_for_object_collection(element_type)
114
+ "application/json;profile=\"urn:org.restfulobjects:repr-types/object-collection\";x-ro-element-type=\"#{element_type}\""
103
115
  end
104
116
  end
@@ -4,21 +4,18 @@ require_relative 'object_properties'
4
4
  require_relative 'object_collections'
5
5
  require_relative 'object_actions'
6
6
 
7
- module RestfulObjects
8
- module Object
9
- include LinkGenerator
7
+ module RestfulObjects::Object
8
+ include RestfulObjects::LinkGenerator
10
9
 
11
- def self.included(base)
12
- RestfulObjects::DomainModel.current.register_type(base.name)
10
+ def self.included(base)
11
+ RestfulObjects::DomainModel.current.register_type(base.name)
13
12
 
14
- base.class_eval do
15
- extend ObjectMacros
16
- include ObjectBase
17
- include ObjectProperties
18
- include ObjectCollections
19
- include ObjectActions
20
- end
13
+ base.class_eval do
14
+ extend RestfulObjects::ObjectMacros
15
+ include RestfulObjects::ObjectBase
16
+ include RestfulObjects::ObjectProperties
17
+ include RestfulObjects::ObjectCollections
18
+ include RestfulObjects::ObjectActions
21
19
  end
22
20
  end
23
21
  end
24
-
@@ -1,135 +1,124 @@
1
- module RestfulObjects
2
- module ObjectActions
3
- def actions_members
4
- members = {}
5
- rs_type.actions.each do |name, action|
6
- members[name] = {
7
- 'memberType' => 'action',
8
- 'links' => [
9
- !is_service ?
10
- link_to(:details, "/objects/#{self.class.name}/#{object_id}/actions/#{name}", :object_action, action: name)
11
- :
12
- link_to(:details, "/services/#{self.class.name}/actions/#{name}", :object_action, action: name)
13
- ],
14
- 'extensions' => action.metadata
15
- }
16
- end
17
- members
18
- end
1
+ module RestfulObjects::ObjectActions
2
+ def ro_get_action_type(name)
3
+ ro_domain_type.actions[name]
4
+ end
19
5
 
20
- def get_action(action)
21
- { 'id' => action,
22
- 'parameters' => generate_parameters(action),
23
- 'links' => [ rs_action_link(action), rs_action_up_link, rs_invoke_link(action) ],
24
- 'extensions' => rs_type.actions[action].metadata
25
- }.to_json
26
- end
6
+ def ro_get_action_response(name)
7
+ { 'id' => name,
8
+ 'parameters' => generate_parameters(name),
9
+ 'links' => [ rs_action_link(name), rs_action_up_link, rs_invoke_link(name) ],
10
+ 'extensions' => ro_get_action_type(name).metadata
11
+ }.to_json
12
+ end
27
13
 
28
- def generate_parameters(action)
29
- parameters = Hash.new
30
- rs_type.actions[action].parameters.each do |name, parameter|
31
- parameters[name] = {
32
- 'links' => [],
33
- 'extensions' => parameter.metadata
34
- }
14
+ def ro_parse_action_arguments(name, arguments, json)
15
+ result = []
16
+ ro_get_action_type(name).parameters.each do |name, parameter|
17
+ case parameter.type
18
+ when :int
19
+ result << arguments[name.to_s]['value'].to_i
20
+ else
21
+ result << arguments[name.to_s]['value']
35
22
  end
36
- parameters
37
23
  end
24
+ result
25
+ end
38
26
 
39
- def get_action_invoke(action, json)
40
- raise 'action does not exists' if not rs_type.actions.include?(action)
41
- action_description = rs_type.actions[action]
42
- json == '' ? {} : arguments = JSON.parse(json)
43
- parameters = []
44
- action_description.parameters.each do |name, parameter|
45
- case parameter.type
46
- when :int
47
- parameters << arguments[name.to_s]['value'].to_i
48
- else
49
- parameters << arguments[name.to_s]['value']
50
- end
51
- end
27
+ def ro_encode_action_result
52
28
 
53
- result = send(action.to_sym, *parameters)
29
+ end
30
+
31
+ def ro_invoke_action_and_get_response(name, json)
32
+ raise 'action does not exists' unless ro_get_action_type(name)
33
+
34
+ arguments = json == '' ? {} : JSON.parse(json)
35
+
36
+ result = send(name, *ro_parse_action_arguments(name, arguments, json))
54
37
 
55
- action_link = link_to(:self, "/objects/#{self.class.name}/#{object_id}/actions/#{action}/invoke", :action_result)
56
- action_link['arguments'] = arguments
38
+ action_link = link_to(:self, "/objects/#{self.class.name}/#{object_id}/actions/#{name}/invoke", :action_result)
39
+ action_link['arguments'] = arguments
57
40
 
58
- response = {
59
- 'links' => [ action_link ],
60
- 'resultType' => 'scalar',
61
- 'result' => {
62
- 'links' => [],
63
- 'extensions' => { }
64
- },
41
+ response = {
42
+ 'links' => [ action_link ],
43
+ 'resultType' => 'scalar',
44
+ 'result' => {
45
+ 'links' => [],
65
46
  'extensions' => { }
66
- }
67
-
68
- response['resultType'] = action_description.kind_result_type.to_s
69
- if result.nil?
70
- response['result'] = nil
71
- else
72
- case action_description.kind_result_type
73
- when :scalar
74
- response['resultType'] = 'scalar'
75
- response['result']['value'] = encode_value(result, action_description.result_type)
76
- response['result']['links'] = [ link_to(:return_type, '/domain-types/int', :domain_type) ]
77
- when :object
78
- response['resultType'] = 'object'
79
- response['result'] = result.representation
80
- when :proto_object
81
- response['resultType'] = 'object'
82
- response['result'] = result
83
- when :list
84
- response['resultType'] = 'list'
85
- response['result']['links'] =
86
- [ link_to(:element_type, "/domain-types/#{action_description.result_type.to_s}", :domain_type) ]
87
- list = []
88
- result.each do |member|
89
- member_link = link_to(:element, "/objects/#{action_description.result_type.to_s}/#{member.rs_instance_id}", :object)
90
- member_link['title'] = member.title
91
- list << member_link
92
- end
93
- response['result']['value'] = list
94
- end
95
- end
47
+ },
48
+ 'extensions' => { }
49
+ }
96
50
 
97
- response.to_json
51
+ response['resultType'] = ro_get_action_type(name).kind_result_type.to_s
52
+ if result.nil?
53
+ response['result'] = nil
54
+ else
55
+ case ro_get_action_type(name).kind_result_type
56
+ when :scalar
57
+ response['resultType'] = 'scalar'
58
+ response['result']['value'] = encode_value(result, ro_get_action_type(name).result_type)
59
+ response['result']['links'] = [ link_to(:return_type, '/domain-types/int', :domain_type) ]
60
+ when :object
61
+ response['resultType'] = 'object'
62
+ response['result'] = result.ro_get_representation
63
+ when :proto_object
64
+ response['resultType'] = 'object'
65
+ response['result'] = result
66
+ when :list
67
+ response['resultType'] = 'list'
68
+ response['result']['links'] =
69
+ [ link_to(:element_type, "/domain-types/#{ro_get_action_type(name).result_type.to_s}", :domain_type) ]
70
+ list = []
71
+ result.each do |member|
72
+ member_link = link_to(:element, "/objects/#{ro_get_action_type(name).result_type.to_s}/#{member.ro_instance_id}", :object)
73
+ member_link['title'] = member.ro_title
74
+ list << member_link
75
+ end
76
+ response['result']['value'] = list
77
+ end
98
78
  end
99
79
 
100
- def action_return_type(action)
101
- RestfulObjects::DomainModel.current.types[self.class.name].actions[action].result_type
80
+ response.to_json
81
+ end
82
+
83
+ # def action_return_type(name)
84
+ # ro_get_action_type(name).result_type
85
+ # end
86
+
87
+ protected
88
+
89
+ def generate_parameters(action_name)
90
+ result = {}
91
+ ro_get_action_type(action_name).parameters.each do |name, parameter|
92
+ result[name] = { 'links' => [], 'extensions' => parameter.metadata }
102
93
  end
94
+ result
95
+ end
103
96
 
104
- private
105
-
106
- def rs_invoke_link(action)
107
- invoke_link = is_service ?
108
- link_to(:invoke, "/services/#{rs_type.id}/actions/#{action}/invoke", :action_result, action: action)
109
- :
110
- link_to(:invoke, "/objects/#{rs_type.id}/#{object_id}/actions/#{action}/invoke", :action_result, action: action)
111
- invoke_link['arguments'] = {}
112
- rs_type.actions[action].parameters.each do |name, action|
113
- invoke_link['arguments'][name] = { 'value' => nil }
114
- end
115
- invoke_link
116
- end
97
+ def rs_invoke_link(action)
98
+ invoke_link = ro_is_service? ?
99
+ link_to(:invoke, "/services/#{ro_domain_type.id}/actions/#{action}/invoke", :action_result, action: action)
100
+ :
101
+ link_to(:invoke, "/objects/#{ro_domain_type.id}/#{object_id}/actions/#{action}/invoke", :action_result, action: action)
102
+ invoke_link['arguments'] = {}
103
+ ro_domain_type.actions[action].parameters.each do |name, action|
104
+ invoke_link['arguments'][name] = { 'value' => nil }
105
+ end
106
+ invoke_link
107
+ end
117
108
 
118
- def rs_action_link(action)
119
- if is_service
120
- link_to(:self, "/services/#{self.class.name}/actions/#{action}", :object_action)
121
- else
122
- link_to(:self, "/objects/#{self.class.name}/#{object_id}/actions/#{action}", :object_action)
123
- end
124
- end
109
+ def rs_action_link(action)
110
+ if ro_is_service?
111
+ link_to(:self, "/services/#{self.class.name}/actions/#{action}", :object_action)
112
+ else
113
+ link_to(:self, "/objects/#{self.class.name}/#{object_id}/actions/#{action}", :object_action)
114
+ end
115
+ end
125
116
 
126
- def rs_action_up_link
127
- if is_service
128
- link_to(:up, "/services/#{rs_type.id}", :object)
129
- else
130
- link_to(:up, "/objects/#{self.class.name}/#{object_id}", :object)
131
- end
132
- end
117
+ def rs_action_up_link
118
+ if ro_is_service?
119
+ link_to(:up, "/services/#{ro_domain_type.id}", :object)
120
+ else
121
+ link_to(:up, "/objects/#{self.class.name}/#{object_id}", :object)
122
+ end
133
123
  end
134
124
  end
135
-