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
@@ -1,11 +1,9 @@
1
1
  require_relative '../spec_helper'
2
2
 
3
- describe RestfulObjects::Object do
3
+ describe '=> /objects/:type/' do
4
4
  before :each do
5
5
  RestfulObjects::DomainModel.current.reset
6
- end
7
6
 
8
- it 'generates json representation for a complex object' do
9
7
  class Address
10
8
  end
11
9
 
@@ -24,7 +22,9 @@ describe RestfulObjects::Object do
24
22
  super
25
23
  end
26
24
  end
25
+ end
27
26
 
27
+ it 'generates json representation for a complex object' do
28
28
  object = ObjectTest.new
29
29
  object.password = 'secret_key'
30
30
  address = Address.new
@@ -98,5 +98,13 @@ describe RestfulObjects::Object do
98
98
  expect(last_response.content_type).to eq CONTENT_TYPE
99
99
  expect(last_response.body).to match_json_expression expected
100
100
  end
101
- end
102
101
 
102
+ describe 'properties interactions,' do
103
+ it 'returns "404 Not Found" when property is not registered' do
104
+ object = ObjectTest.new
105
+ get "/objects/ObjectTest/#{object.object_id}/properties/invalid_property"
106
+ expect(last_response.status).to eq 404
107
+ expect(last_response.headers['Warning']).to eq "No such property invalid_property"
108
+ end
109
+ end
110
+ end
@@ -193,7 +193,7 @@ describe RestfulObjects::ObjectActions do
193
193
  'href' => "http://localhost/objects/ActionsTest/#{@object.object_id}/actions/get_nil_scalar/invoke",
194
194
  'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/action-result"',
195
195
  'method' => 'GET',
196
- 'arguments' => nil }
196
+ 'arguments' => { } }
197
197
  ],
198
198
  'resultType' => 'scalar',
199
199
  'result' => nil,
@@ -214,7 +214,7 @@ describe RestfulObjects::ObjectActions do
214
214
  'href' => "http://localhost/objects/ActionsTest/#{@object.object_id}/actions/get_object/invoke",
215
215
  'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/action-result"',
216
216
  'method' => 'GET',
217
- 'arguments' => nil }
217
+ 'arguments' => { } }
218
218
  ],
219
219
  'resultType' => 'object',
220
220
  'result' => {
@@ -245,7 +245,7 @@ describe RestfulObjects::ObjectActions do
245
245
  'href' => "http://localhost/objects/ActionsTest/#{@object.object_id}/actions/get_nil_object/invoke",
246
246
  'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/action-result"',
247
247
  'method' => 'GET',
248
- 'arguments' => nil }
248
+ 'arguments' => { } }
249
249
  ],
250
250
  'resultType' => 'object',
251
251
  'result' => nil,
@@ -266,7 +266,7 @@ describe RestfulObjects::ObjectActions do
266
266
  'href' => "http://localhost/objects/ActionsTest/#{@object.object_id}/actions/get_list/invoke",
267
267
  'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/action-result"',
268
268
  'method' => 'GET',
269
- 'arguments' => nil }
269
+ 'arguments' => { } }
270
270
  ],
271
271
  'resultType' => 'list',
272
272
  'result' => {
@@ -302,7 +302,7 @@ describe RestfulObjects::ObjectActions do
302
302
  'href' => "http://localhost/objects/ActionsTest/#{@object.object_id}/actions/get_nil_list/invoke",
303
303
  'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/action-result"',
304
304
  'method' => 'GET',
305
- 'arguments' => nil }
305
+ 'arguments' => { } }
306
306
  ],
307
307
  'resultType' => 'list',
308
308
  'result' => nil,
@@ -166,7 +166,7 @@ describe RestfulObjects::ObjectActions do
166
166
  end
167
167
 
168
168
  it 'should generate metadata in extensions' do
169
- collection = @object.rs_type.collections['collection_full_metadata']
169
+ collection = @object.ro_domain_type.collections['collection_full_metadata']
170
170
  collection.friendly_name = 'Friendly Collection'
171
171
  collection.description = 'Collection Description'
172
172
  collection.plural_form = 'Collections'
@@ -139,12 +139,12 @@ describe RestfulObjects::ObjectProperties do
139
139
  put "/objects/PropertiesTest/#{@object.object_id}/properties/#{name}", { 'value' => value }.to_json
140
140
  end
141
141
 
142
- @object.string_prop.should eq 'A string'
143
- @object.int_prop.should eq 1234
144
- @object.bool_prop.should eq true
145
- @object.decimal_prop.should eq 333.33
146
- @object.date_prop.should eq Date.new(2012, 2, 29)
147
- @object.blob_prop.should eq "\xE5\xA5\xB4\x30\xF2\x8C\x71\xD9".force_encoding('ASCII-8BIT')
142
+ expect(@object.string_prop).to eq 'A string'
143
+ expect(@object.int_prop).to eq 1234
144
+ expect(@object.bool_prop).to eq true
145
+ expect(@object.decimal_prop).to eq 333.33
146
+ expect(@object.date_prop).to eq Date.new(2012, 2, 29)
147
+ expect(@object.blob_prop).to eq "\xE5\xA5\xB4\x30\xF2\x8C\x71\xD9".force_encoding('ASCII-8BIT')
148
148
  end
149
149
 
150
150
  it 'should process a property put with json' do
@@ -60,9 +60,9 @@ describe RestfulObjects::Object do
60
60
  end
61
61
 
62
62
  it 'should generate metadata in extensions' do
63
- @object.rs_type.plural_name = 'Test Objects'
64
- @object.rs_type.friendly_name = 'Test Object Friendly'
65
- @object.rs_type.description = 'An object to test'
63
+ @object.ro_domain_type.plural_name = 'Test Objects'
64
+ @object.ro_domain_type.friendly_name = 'Test Object Friendly'
65
+ @object.ro_domain_type.description = 'An object to test'
66
66
 
67
67
  expected = {
68
68
  'instanceId' => @object.object_id.to_s,
@@ -87,12 +87,12 @@ describe RestfulObjects::Object do
87
87
  def initialize
88
88
  super
89
89
  @init_called = true
90
- @title = 'A title'
90
+ @ro_title = 'A title'
91
91
  end
92
92
  end
93
93
  obj = InitializedObject.new
94
94
  obj.init_called.should be_true
95
- obj.title.should eq 'A title'
95
+ obj.ro_title.should eq 'A title'
96
96
  end
97
97
 
98
98
  it 'should send on_after_create callback when object is created' do
@@ -133,7 +133,7 @@ describe RestfulObjects::Object do
133
133
  end
134
134
 
135
135
  it 'should send on_after_delete callback when object is deleted' do
136
- class DeletedObject
136
+ class TestDeleted
137
137
  include RestfulObjects::Object
138
138
  attr_reader :destroyed
139
139
  def on_after_delete
@@ -141,14 +141,14 @@ describe RestfulObjects::Object do
141
141
  end
142
142
  end
143
143
 
144
- obj = DeletedObject.new
144
+ obj = TestDeleted.new
145
145
 
146
- obj.deleted?.should_not be_true
146
+ obj.ro_deleted?.should_not be_true
147
147
  obj.destroyed.should_not be_true
148
148
 
149
149
  delete "/objects/DeletedObject/#{obj.object_id}"
150
150
 
151
- obj.deleted?.should be_true
151
+ obj.ro_deleted?.should be_true
152
152
  obj.destroyed.should be_true
153
153
  end
154
154
  end
@@ -18,12 +18,12 @@ describe RestfulObjects::Service do
18
18
  it 'should be registered and created automatically ' do
19
19
  RestfulObjects::DomainModel.current.services.include?('ServiceTest').should be_true
20
20
  RestfulObjects::DomainModel.current.services['ServiceTest'].should_not be_nil
21
- RestfulObjects::DomainModel.current.services['ServiceTest'].is_service.should be_true
21
+ RestfulObjects::DomainModel.current.services['ServiceTest'].ro_is_service?.should be_true
22
22
  end
23
23
 
24
24
  it 'should generate json for the service' do
25
25
  service = RestfulObjects::DomainModel.current.services['ServiceTest']
26
- service.title = 'Test Service'
26
+ service.ro_title = 'Test Service'
27
27
 
28
28
  expected = {
29
29
  'serviceId' => 'ServiceTest',
@@ -60,7 +60,7 @@ describe RestfulObjects::Service do
60
60
  class ServiceTest
61
61
  include RestfulObjects::Service
62
62
  end
63
- instance_id = model.services['ServiceTest'].rs_instance_id
63
+ instance_id = model.services['ServiceTest'].ro_instance_id
64
64
  model.objects.include?(instance_id).should_not be_true
65
65
  end
66
66
 
@@ -115,11 +115,11 @@ describe RestfulObjects::Service do
115
115
  def initialize
116
116
  super
117
117
  @init_called = true
118
- @title = 'A title'
118
+ @ro_title = 'A title'
119
119
  end
120
120
  end
121
121
  model.services['InitializedService'].init_called.should be_true
122
- model.services['InitializedService'].title.should eq 'A title'
122
+ model.services['InitializedService'].ro_title.should eq 'A title'
123
123
  end
124
124
  end
125
125
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restful_objects
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Vizcay
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-21 00:00:00.000000000 Z
11
+ date: 2016-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.8.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry-byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 3.4.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 3.4.0
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: sinatra
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -103,41 +117,44 @@ extensions: []
103
117
  extra_rdoc_files: []
104
118
  files:
105
119
  - bin/restful_server
106
- - lib/restful_objects/router/domain_type_resources.rb
107
- - lib/restful_objects/router/domain_object_resources.rb
108
- - lib/restful_objects/router/supporting_resources.rb
109
- - lib/restful_objects/router/base.rb
110
- - lib/restful_objects/version.rb
111
- - lib/restful_objects/domain_model/types/property_description.rb
112
- - lib/restful_objects/domain_model/types/parameter_description_list.rb
113
- - lib/restful_objects/domain_model/types/domain_type.rb
114
- - lib/restful_objects/domain_model/types/action_description.rb
115
- - lib/restful_objects/domain_model/types/parameter_description.rb
116
- - lib/restful_objects/domain_model/types/collection_description.rb
120
+ - lib/restful_objects/domain_model/domain_model.rb
121
+ - lib/restful_objects/domain_model/helpers/link_generator.rb
122
+ - lib/restful_objects/domain_model/mixins/object.rb
123
+ - lib/restful_objects/domain_model/mixins/object_actions.rb
124
+ - lib/restful_objects/domain_model/mixins/object_base.rb
125
+ - lib/restful_objects/domain_model/mixins/object_collections.rb
117
126
  - lib/restful_objects/domain_model/mixins/object_macros.rb
118
127
  - lib/restful_objects/domain_model/mixins/object_properties.rb
119
128
  - lib/restful_objects/domain_model/mixins/service.rb
120
- - lib/restful_objects/domain_model/mixins/object_collections.rb
121
- - lib/restful_objects/domain_model/mixins/object_base.rb
122
- - lib/restful_objects/domain_model/mixins/object_actions.rb
123
- - lib/restful_objects/domain_model/mixins/object.rb
129
+ - lib/restful_objects/domain_model/types/action_description.rb
130
+ - lib/restful_objects/domain_model/types/collection_description.rb
131
+ - lib/restful_objects/domain_model/types/domain_type.rb
132
+ - lib/restful_objects/domain_model/types/parameter_description.rb
133
+ - lib/restful_objects/domain_model/types/parameter_description_list.rb
134
+ - lib/restful_objects/domain_model/types/property_description.rb
124
135
  - lib/restful_objects/domain_model/user.rb
125
- - lib/restful_objects/domain_model/domain_model.rb
126
- - lib/restful_objects/domain_model/helpers/link_generator.rb
136
+ - lib/restful_objects/router/base.rb
137
+ - lib/restful_objects/router/domain_object_resources.rb
138
+ - lib/restful_objects/router/domain_type_resources.rb
139
+ - lib/restful_objects/router/supporting_resources.rb
140
+ - lib/restful_objects/router.rb
141
+ - lib/restful_objects/version.rb
127
142
  - lib/restful_objects.rb
128
- - spec/integration/domain_model_spec.rb
129
- - spec/integration/domain-types_properties_spec.rb
130
- - spec/integration/domain-types_collections_spec.rb
131
143
  - spec/integration/domain-types_actions_spec.rb
132
- - spec/integration/server-root_spec.rb
133
- - spec/acceptance/generate_json_representations_spec.rb
144
+ - spec/integration/domain-types_collections_spec.rb
145
+ - spec/integration/domain-types_properties_spec.rb
146
+ - spec/integration/domain-types_spec.rb
147
+ - spec/integration/homepage_spec.rb
148
+ - spec/integration/objects_actions_spec.rb
149
+ - spec/integration/objects_collections_spec.rb
150
+ - spec/integration/objects_properties_spec.rb
151
+ - spec/integration/objects_spec.rb
134
152
  - spec/spec_helper.rb
135
- - spec/unit/service_spec.rb
153
+ - spec/unit/object_actions_spec.rb
136
154
  - spec/unit/object_collections_spec.rb
137
155
  - spec/unit/object_properties_spec.rb
138
156
  - spec/unit/object_spec.rb
139
- - spec/unit/type_list_spec.rb
140
- - spec/unit/object_actions_spec.rb
157
+ - spec/unit/service_spec.rb
141
158
  - LICENSE
142
159
  - README.md
143
160
  homepage: https://github.com/vizcay/RestfulObjectsRuby
@@ -165,16 +182,18 @@ signing_key:
165
182
  specification_version: 4
166
183
  summary: This gem is a framework for implementing Restful Objects servers.
167
184
  test_files:
168
- - spec/integration/domain_model_spec.rb
169
- - spec/integration/domain-types_properties_spec.rb
170
- - spec/integration/domain-types_collections_spec.rb
171
185
  - spec/integration/domain-types_actions_spec.rb
172
- - spec/integration/server-root_spec.rb
173
- - spec/acceptance/generate_json_representations_spec.rb
186
+ - spec/integration/domain-types_collections_spec.rb
187
+ - spec/integration/domain-types_properties_spec.rb
188
+ - spec/integration/domain-types_spec.rb
189
+ - spec/integration/homepage_spec.rb
190
+ - spec/integration/objects_actions_spec.rb
191
+ - spec/integration/objects_collections_spec.rb
192
+ - spec/integration/objects_properties_spec.rb
193
+ - spec/integration/objects_spec.rb
174
194
  - spec/spec_helper.rb
175
- - spec/unit/service_spec.rb
195
+ - spec/unit/object_actions_spec.rb
176
196
  - spec/unit/object_collections_spec.rb
177
197
  - spec/unit/object_properties_spec.rb
178
198
  - spec/unit/object_spec.rb
179
- - spec/unit/type_list_spec.rb
180
- - spec/unit/object_actions_spec.rb
199
+ - spec/unit/service_spec.rb
@@ -1,35 +0,0 @@
1
- require_relative '../spec_helper'
2
-
3
- describe RestfulObjects::Object do
4
- describe '#put_properties_and_get_representation' do
5
- it 'updates simple property' do
6
- class TestObject
7
- include RestfulObjects::Object
8
- property :name, :string
9
- end
10
- test_object = TestObject.new
11
- response = test_object.put_properties_and_get_representation({ 'name' => { 'value' => 'john smith' } }.to_json)
12
- expect(response.body).to match_json_expression({ 'members' => { 'name' => { 'value' => 'john smith' } } })
13
- end
14
-
15
- it 'updates multiple properties' do
16
- class TestObject
17
- include RestfulObjects::Object
18
- property :name, :string
19
- property :age, :int
20
- property :weight, :decimal
21
- end
22
- test_object = TestObject.new
23
- response = test_object.put_properties_and_get_representation({ 'name' => { 'value' => 'john smith' },
24
- 'age' => { 'value' => '29' },
25
- 'weight' => { 'value' => '71.5' } }.to_json)
26
- expect(response.body).to match_json_expression({ 'members' => {
27
- 'name' => { 'value' => 'john smith' },
28
- 'age' => { 'value' => 29 },
29
- 'weight' => { 'value' => 71.5 }
30
- }
31
- })
32
- end
33
- end
34
- end
35
-
@@ -1,37 +0,0 @@
1
- # encoding: utf-8
2
- require_relative '../spec_helper'
3
-
4
- describe RestfulObjects::DomainModel do
5
- before(:all) do
6
- RestfulObjects::DomainModel.current.reset
7
-
8
- class DomainObject
9
- include RestfulObjects::Object
10
- end
11
- end
12
-
13
- it 'should generate domain types list resource' do
14
- expected = {
15
- 'links' => [
16
- { 'rel' => 'self',
17
- 'href' => 'http://localhost/domain-types',
18
- 'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/type-list"',
19
- 'method' => 'GET' },
20
- { 'rel' => 'up',
21
- 'href' => 'http://localhost/',
22
- 'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/homepage"',
23
- 'method' => 'GET' }
24
- ],
25
- 'value' => [
26
- { 'rel' => 'urn:org.restfulobjects:rels/domain-type',
27
- 'href' => "http://localhost/domain-types/#{DomainObject}",
28
- 'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/domain-type"',
29
- 'method' => 'GET' }
30
- ],
31
- 'extensions' => {}
32
- }.to_json
33
-
34
- RestfulObjects::DomainModel.current.get_type_list_representation
35
- end
36
- end
37
-