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.
- checksums.yaml +4 -4
- data/lib/restful_objects.rb +1 -2
- data/lib/restful_objects/domain_model/domain_model.rb +14 -11
- data/lib/restful_objects/domain_model/helpers/link_generator.rb +102 -90
- data/lib/restful_objects/domain_model/mixins/object.rb +10 -13
- data/lib/restful_objects/domain_model/mixins/object_actions.rb +106 -117
- data/lib/restful_objects/domain_model/mixins/object_base.rb +175 -131
- data/lib/restful_objects/domain_model/mixins/object_collections.rb +58 -71
- data/lib/restful_objects/domain_model/mixins/object_macros.rb +20 -26
- data/lib/restful_objects/domain_model/mixins/object_properties.rb +85 -98
- data/lib/restful_objects/domain_model/mixins/service.rb +9 -17
- data/lib/restful_objects/domain_model/types/action_description.rb +80 -82
- data/lib/restful_objects/domain_model/types/collection_description.rb +39 -40
- data/lib/restful_objects/domain_model/types/domain_type.rb +102 -105
- data/lib/restful_objects/domain_model/types/parameter_description.rb +42 -47
- data/lib/restful_objects/domain_model/types/parameter_description_list.rb +9 -12
- data/lib/restful_objects/domain_model/types/property_description.rb +62 -64
- data/lib/restful_objects/router.rb +6 -0
- data/lib/restful_objects/router/base.rb +23 -32
- data/lib/restful_objects/router/domain_object_resources.rb +89 -94
- data/lib/restful_objects/router/domain_type_resources.rb +24 -29
- data/lib/restful_objects/router/supporting_resources.rb +26 -31
- data/lib/restful_objects/version.rb +1 -1
- data/spec/integration/domain-types_actions_spec.rb +1 -3
- data/spec/integration/domain-types_collections_spec.rb +1 -39
- data/spec/integration/domain-types_properties_spec.rb +1 -78
- data/spec/integration/domain-types_spec.rb +39 -0
- data/spec/integration/{server-root_spec.rb → homepage_spec.rb} +2 -3
- data/spec/integration/objects_actions_spec.rb +7 -0
- data/spec/integration/objects_collections_spec.rb +169 -0
- data/spec/integration/objects_properties_spec.rb +122 -0
- data/spec/{acceptance/generate_json_representations_spec.rb → integration/objects_spec.rb} +12 -4
- data/spec/unit/object_actions_spec.rb +5 -5
- data/spec/unit/object_collections_spec.rb +1 -1
- data/spec/unit/object_properties_spec.rb +6 -6
- data/spec/unit/object_spec.rb +9 -9
- data/spec/unit/service_spec.rb +5 -5
- metadata +54 -35
- data/spec/integration/domain_model_spec.rb +0 -35
- data/spec/unit/type_list_spec.rb +0 -37
@@ -1,7 +1,6 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
require_relative '../spec_helper'
|
3
2
|
|
4
|
-
describe '
|
3
|
+
describe '=> /domain-types/:type/properties/' do
|
5
4
|
before(:all) do
|
6
5
|
RestfulObjects::DomainModel.current.reset
|
7
6
|
end
|
@@ -37,80 +36,4 @@ describe 'DomainObject properties' do
|
|
37
36
|
get '/domain-types/PropertyTest/properties/name'
|
38
37
|
last_response.body.should match_json_expression expected
|
39
38
|
end
|
40
|
-
|
41
|
-
describe 'json representation of property reference' do
|
42
|
-
before :each do
|
43
|
-
class ReferenceType
|
44
|
-
include RestfulObjects::Object
|
45
|
-
end
|
46
|
-
class PropertyRefTest
|
47
|
-
include RestfulObjects::Object
|
48
|
-
property :reference, { object: ReferenceType }
|
49
|
-
end
|
50
|
-
@referenced = ReferenceType.new
|
51
|
-
@object = PropertyRefTest.new
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'gets representation' do
|
55
|
-
@object.reference = @referenced
|
56
|
-
expect(@object.get_property_as_json(:reference)).to match_json_expression(
|
57
|
-
{ 'reference' =>
|
58
|
-
{ 'value' =>
|
59
|
-
{ 'rel' => 'urn:org.restfulobjects:rels/value;property="reference"',
|
60
|
-
'href' => "http://localhost/objects/ReferenceType/#{@referenced.object_id}",
|
61
|
-
'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/object"',
|
62
|
-
'method' => 'GET',
|
63
|
-
'title' => @referenced.title
|
64
|
-
}
|
65
|
-
}
|
66
|
-
}
|
67
|
-
)
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'lists choices' do
|
71
|
-
choices = [ReferenceType.new, ReferenceType.new, ReferenceType.new]
|
72
|
-
@object.define_singleton_method(:reference_choices) { choices }
|
73
|
-
expect(@object.get_property_as_json(:reference)).to match_json_expression(
|
74
|
-
{ 'reference' =>
|
75
|
-
{ 'value' => nil,
|
76
|
-
'choices' => [
|
77
|
-
{ 'rel' => 'urn:org.restfulobjects:rels/value;property="reference"',
|
78
|
-
'href' => "http://localhost/objects/ReferenceType/#{choices[0].object_id}",
|
79
|
-
'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/object"',
|
80
|
-
'method' => 'GET',
|
81
|
-
'title' => choices[0].title },
|
82
|
-
{ 'rel' => 'urn:org.restfulobjects:rels/value;property="reference"',
|
83
|
-
'href' => "http://localhost/objects/ReferenceType/#{choices[1].object_id}",
|
84
|
-
'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/object"',
|
85
|
-
'method' => 'GET',
|
86
|
-
'title' => choices[1].title },
|
87
|
-
{ 'rel' => 'urn:org.restfulobjects:rels/value;property="reference"',
|
88
|
-
'href' => "http://localhost/objects/ReferenceType/#{choices[2].object_id}",
|
89
|
-
'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/object"',
|
90
|
-
'method' => 'GET',
|
91
|
-
'title' => choices[2].title }
|
92
|
-
]
|
93
|
-
}
|
94
|
-
}
|
95
|
-
)
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'puts representation' do
|
99
|
-
json = { 'value' => { 'href' => @referenced.ro_absolute_url } }.to_json
|
100
|
-
expect(@object.put_property_as_json(:reference, json)).to match_json_expression(
|
101
|
-
{ 'reference' =>
|
102
|
-
{ 'value' =>
|
103
|
-
{ 'rel' => 'urn:org.restfulobjects:rels/value;property="reference"',
|
104
|
-
'href' => "http://localhost/objects/ReferenceType/#{@referenced.object_id}",
|
105
|
-
'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/object"',
|
106
|
-
'method' => 'GET',
|
107
|
-
'title' => @referenced.title
|
108
|
-
}
|
109
|
-
}
|
110
|
-
}
|
111
|
-
)
|
112
|
-
expect(@object.reference).to eq @referenced
|
113
|
-
end
|
114
|
-
end
|
115
39
|
end
|
116
|
-
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe '=> /domain-types' do
|
4
|
+
before(:all) do
|
5
|
+
RestfulObjects::DomainModel.current.reset
|
6
|
+
|
7
|
+
class DomainObject
|
8
|
+
include RestfulObjects::Object
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'GET /domain-types' do
|
13
|
+
it 'generates response with a domain types in value arrray' do
|
14
|
+
get '/domain-types'
|
15
|
+
last_response.body.should match_json_expression(
|
16
|
+
{ value:
|
17
|
+
[ { rel: 'urn:org.restfulobjects:rels/domain-type',
|
18
|
+
href: "http://localhost/domain-types/DomainObject",
|
19
|
+
type: 'application/json;profile="urn:org.restfulobjects:repr-types/domain-type"',
|
20
|
+
method: 'GET' } ]
|
21
|
+
})
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'generates response links to homepage & sellf' do
|
25
|
+
get '/domain-types'
|
26
|
+
last_response.body.should match_json_expression(
|
27
|
+
{ links: [
|
28
|
+
{ rel: 'self',
|
29
|
+
href: 'http://localhost/domain-types',
|
30
|
+
type: 'application/json;profile="urn:org.restfulobjects:repr-types/type-list"',
|
31
|
+
method: 'GET' },
|
32
|
+
{ rel: 'up',
|
33
|
+
href: 'http://localhost/',
|
34
|
+
type: 'application/json;profile="urn:org.restfulobjects:repr-types/homepage"',
|
35
|
+
method: 'GET' } ]
|
36
|
+
})
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
require_relative '../spec_helper'
|
3
2
|
|
4
|
-
describe '/' do
|
3
|
+
describe '=> /' do
|
5
4
|
before(:all) do
|
6
5
|
RestfulObjects::DomainModel.current.reset
|
7
6
|
end
|
@@ -69,7 +68,7 @@ describe '/' do
|
|
69
68
|
include RestfulObjects::Service
|
70
69
|
end
|
71
70
|
|
72
|
-
RestfulObjects::DomainModel.current.services['ServiceTest'].
|
71
|
+
RestfulObjects::DomainModel.current.services['ServiceTest'].ro_title = 'Service Test Title'
|
73
72
|
|
74
73
|
services_list = {
|
75
74
|
'links' => [
|
@@ -0,0 +1,169 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe '=> /objects/:type/:instance_id/collections/' do
|
4
|
+
before(:all) do
|
5
|
+
RestfulObjects::DomainModel.current.reset
|
6
|
+
|
7
|
+
class ItemClass
|
8
|
+
include RestfulObjects::Object
|
9
|
+
end
|
10
|
+
|
11
|
+
class CollectionTest
|
12
|
+
include RestfulObjects::Object
|
13
|
+
collection :items, 'ItemClass', friendly_name: 'item collection', description: 'a collection description'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
before(:each) do
|
18
|
+
@collection_object = CollectionTest.new
|
19
|
+
@item_a, @item_b, @item_c = ItemClass.new, ItemClass.new, ItemClass.new
|
20
|
+
@item_a.ro_title = 'Item A'
|
21
|
+
@item_b.ro_title = 'Item B'
|
22
|
+
@item_c.ro_title = 'Item C'
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'GET /objects/:type/collections/:collection' do
|
26
|
+
it 'generates response with status code 200' do
|
27
|
+
get "/objects/CollectionTest/#{@collection_object.ro_instance_id}/collections/items"
|
28
|
+
expect(last_response.status).to eq 200
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'generates response with header Content-Type of object-collection' do
|
32
|
+
get "/objects/CollectionTest/#{@collection_object.ro_instance_id}/collections/items"
|
33
|
+
expect(last_response.headers['Content-Type']).to eq(
|
34
|
+
'application/json;profile="urn:org.restfulobjects:repr-types/object-collection";x-ro-element-type="ItemClass"')
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when collection is empty,' do
|
38
|
+
it 'generates response with an empty value array' do
|
39
|
+
get "/objects/CollectionTest/#{@collection_object.ro_instance_id}/collections/items"
|
40
|
+
expect(last_response.body).to match_json_expression({ value: [] })
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'when there are items in the collection,' do
|
45
|
+
it 'generates response with a value array with the item list' do
|
46
|
+
@collection_object.items << @item_a << @item_b << @item_c
|
47
|
+
|
48
|
+
get "/objects/CollectionTest/#{@collection_object.ro_instance_id}/collections/items"
|
49
|
+
|
50
|
+
expect(last_response.body).to match_json_expression({
|
51
|
+
value: [
|
52
|
+
{ href: "http://localhost/objects/ItemClass/#{@item_a.ro_instance_id}" },
|
53
|
+
{ href: "http://localhost/objects/ItemClass/#{@item_b.ro_instance_id}" },
|
54
|
+
{ href: "http://localhost/objects/ItemClass/#{@item_c.ro_instance_id}" },
|
55
|
+
]
|
56
|
+
})
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'generates response with a value array with the item metadata' do
|
60
|
+
item = ItemClass.new
|
61
|
+
item.ro_title = 'An item'
|
62
|
+
object = CollectionTest.new
|
63
|
+
object.items << item
|
64
|
+
|
65
|
+
get "/objects/CollectionTest/#{object.ro_instance_id}/collections/items"
|
66
|
+
|
67
|
+
expect(last_response.body).to match_json_expression({
|
68
|
+
value: [ {
|
69
|
+
rel: 'urn:org.restfulobjects:rels/value;collection="items"',
|
70
|
+
href: "http://localhost/objects/ItemClass/#{item.ro_instance_id}",
|
71
|
+
method: 'GET',
|
72
|
+
type: 'application/json;profile="urn:org.restfulobjects:repr-types/object"',
|
73
|
+
title: 'An item'
|
74
|
+
} ]
|
75
|
+
})
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'generates response with object list' do
|
79
|
+
a, b = ItemClass.new, ItemClass.new
|
80
|
+
object = CollectionTest.new
|
81
|
+
object.items << a << b
|
82
|
+
|
83
|
+
get '/domain-types/CollectionTest/collections/items'
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
it 'generates response with links' do
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe 'POST /objects/:type/:instance_id/collections/:collection' do
|
94
|
+
it 'appends objecto to collection with list semantics' do
|
95
|
+
collection = CollectionTest.new
|
96
|
+
item = ItemClass.new
|
97
|
+
|
98
|
+
post "/objects/CollectionTest/#{collection.ro_instance_id}/collections/items",
|
99
|
+
'{ "value": { "href": "/objects/ItemClass/' + item.ro_instance_id.to_s + '" } }'
|
100
|
+
|
101
|
+
expect(collection.items).to include(item)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe 'PUT /objects/:type/:instance_id/collections/:collection' do
|
106
|
+
it 'appends object to collection with set semantics' do
|
107
|
+
collection = CollectionTest.new
|
108
|
+
item = ItemClass.new
|
109
|
+
|
110
|
+
put "/objects/CollectionTest/#{collection.ro_instance_id}/collections/items",
|
111
|
+
'{ "value": { "href": "/objects/ItemClass/' + item.ro_instance_id.to_s + '" } }'
|
112
|
+
|
113
|
+
expect(collection.items).to include(item)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe 'DELETE /objects/:type/:instance_id/collections/:collection' do
|
118
|
+
it 'removes object from to collection' do
|
119
|
+
collection = CollectionTest.new
|
120
|
+
item = ItemClass.new
|
121
|
+
collection.items << item
|
122
|
+
|
123
|
+
delete "/objects/CollectionTest/#{collection.ro_instance_id}/collections/items",
|
124
|
+
'{ "value": { "href": "/objects/ItemClass/' + item.ro_instance_id.to_s + '" } }'
|
125
|
+
|
126
|
+
expect(collection.items).not_to include(item)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe '=> /domain-types/:type/collections/' do
|
132
|
+
before(:all) do
|
133
|
+
RestfulObjects::DomainModel.current.reset
|
134
|
+
|
135
|
+
class CollectionTest
|
136
|
+
include RestfulObjects::Object
|
137
|
+
collection :items, 'ItemClass', friendly_name: 'item collection', description: 'a collection description'
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'generates response with collection metadata' do
|
142
|
+
get '/domain-types/CollectionTest/collections/items'
|
143
|
+
|
144
|
+
last_response.body.should match_json_expression({
|
145
|
+
'id' => 'items',
|
146
|
+
'friendlyName' => 'item collection',
|
147
|
+
'description' => 'a collection description',
|
148
|
+
'memberOrder' => 1,
|
149
|
+
'links' => [
|
150
|
+
{ 'rel' => 'self',
|
151
|
+
'href' => 'http://localhost/domain-types/CollectionTest/collections/items',
|
152
|
+
'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/collection-description"',
|
153
|
+
'method' => 'GET' },
|
154
|
+
{ 'rel' => 'up',
|
155
|
+
'href' => 'http://localhost/domain-types/CollectionTest',
|
156
|
+
'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/domain-type"',
|
157
|
+
'method' => 'GET' },
|
158
|
+
{ 'rel' => 'urn:org.restfulobjects:rels/return-type',
|
159
|
+
'href' => 'http://localhost/domain-types/list',
|
160
|
+
'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/domain-type"',
|
161
|
+
'method' => 'GET' },
|
162
|
+
{ 'rel' => 'urn:org.restfulobjects:rels/element-type',
|
163
|
+
'href' => 'http://localhost/domain-types/ItemClass',
|
164
|
+
'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/domain-type"',
|
165
|
+
'method' => 'GET' }
|
166
|
+
]
|
167
|
+
})
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe '=> /objects/:type/:instance_id/properties/' do
|
4
|
+
describe 'simple properties,' 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
|
+
|
12
|
+
put "/objects/TestObject/#{test_object.ro_instance_id}", { 'name' => { 'value' => 'john smith' } }.to_json
|
13
|
+
|
14
|
+
expect(last_response.body).to match_json_expression({ members: { name: { value: 'john smith' } } })
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'updates multiple properties' do
|
18
|
+
class TestObject
|
19
|
+
include RestfulObjects::Object
|
20
|
+
property :name, :string
|
21
|
+
property :age, :int
|
22
|
+
property :weight, :decimal
|
23
|
+
end
|
24
|
+
test_object = TestObject.new
|
25
|
+
|
26
|
+
json = { 'name' => { 'value' => 'john smith' }, 'age' => { 'value' => '29' }, 'weight' => { 'value' => '71.5' } }.to_json
|
27
|
+
|
28
|
+
put "/objects/TestObject/#{test_object.ro_instance_id}", json
|
29
|
+
|
30
|
+
expect(last_response.body).to match_json_expression({
|
31
|
+
members: {
|
32
|
+
name: { value: 'john smith' },
|
33
|
+
age: { value: 29 },
|
34
|
+
weight: { value: 71.5 }
|
35
|
+
}
|
36
|
+
})
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe 'reference properties,' do
|
41
|
+
before(:each) do
|
42
|
+
class ReferenceType
|
43
|
+
include RestfulObjects::Object
|
44
|
+
end
|
45
|
+
|
46
|
+
class PropertyRefTest
|
47
|
+
include RestfulObjects::Object
|
48
|
+
property :reference, { object: ReferenceType }
|
49
|
+
end
|
50
|
+
|
51
|
+
@referenced = ReferenceType.new
|
52
|
+
@object = PropertyRefTest.new
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'gets representation' do
|
56
|
+
@object.reference = @referenced
|
57
|
+
|
58
|
+
get "/objects/PropertyRefTest/#{@object.ro_instance_id}/properties/reference"
|
59
|
+
|
60
|
+
expect(last_response.body).to match_json_expression(
|
61
|
+
{ reference:
|
62
|
+
{ value:
|
63
|
+
{ rel: 'urn:org.restfulobjects:rels/value;property="reference"',
|
64
|
+
href: "http://localhost/objects/ReferenceType/#{@referenced.object_id}",
|
65
|
+
type: 'application/json;profile="urn:org.restfulobjects:repr-types/object"',
|
66
|
+
method: 'GET',
|
67
|
+
title: @referenced.ro_title
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'lists choices' do
|
75
|
+
choices = [ReferenceType.new, ReferenceType.new, ReferenceType.new]
|
76
|
+
@object.define_singleton_method(:reference_choices) { choices }
|
77
|
+
|
78
|
+
get "/objects/PropertyRefTest/#{@object.ro_instance_id}/properties/reference"
|
79
|
+
|
80
|
+
expect(last_response.body).to match_json_expression(
|
81
|
+
{ reference:
|
82
|
+
{ value: nil,
|
83
|
+
choices: [
|
84
|
+
{ rel: 'urn:org.restfulobjects:rels/value;property="reference"',
|
85
|
+
href: "http://localhost/objects/ReferenceType/#{choices[0].object_id}",
|
86
|
+
type: 'application/json;profile="urn:org.restfulobjects:repr-types/object"',
|
87
|
+
method: 'GET',
|
88
|
+
title: choices[0].ro_title },
|
89
|
+
{ rel: 'urn:org.restfulobjects:rels/value;property="reference"',
|
90
|
+
href: "http://localhost/objects/ReferenceType/#{choices[1].object_id}",
|
91
|
+
type: 'application/json;profile="urn:org.restfulobjects:repr-types/object"',
|
92
|
+
method: 'GET',
|
93
|
+
title: choices[1].ro_title },
|
94
|
+
{ rel: 'urn:org.restfulobjects:rels/value;property="reference"',
|
95
|
+
href: "http://localhost/objects/ReferenceType/#{choices[2].object_id}",
|
96
|
+
type: 'application/json;profile="urn:org.restfulobjects:repr-types/object"',
|
97
|
+
method: 'GET',
|
98
|
+
title: choices[2].ro_title }
|
99
|
+
]
|
100
|
+
}
|
101
|
+
}
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'puts representation' do
|
106
|
+
json = { 'value' => { 'href' => @referenced.ro_absolute_url } }.to_json
|
107
|
+
expect(@object.ro_put_property_and_get_response(:reference, json).last).to match_json_expression(
|
108
|
+
{ 'reference' =>
|
109
|
+
{ 'value' =>
|
110
|
+
{ 'rel' => 'urn:org.restfulobjects:rels/value;property="reference"',
|
111
|
+
'href' => "http://localhost/objects/ReferenceType/#{@referenced.object_id}",
|
112
|
+
'type' => 'application/json;profile="urn:org.restfulobjects:repr-types/object"',
|
113
|
+
'method' => 'GET',
|
114
|
+
'title' => @referenced.ro_title
|
115
|
+
}
|
116
|
+
}
|
117
|
+
}
|
118
|
+
)
|
119
|
+
expect(@object.reference).to eq @referenced
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|