yaks 0.7.7 → 0.8.0.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/Rakefile +1 -1
- data/lib/yaks/attributes.rb +17 -11
- data/lib/yaks/builder.rb +43 -0
- data/lib/yaks/changelog.rb +2 -2
- data/lib/yaks/collection_mapper.rb +0 -2
- data/lib/yaks/config.rb +52 -32
- data/lib/yaks/configurable.rb +43 -14
- data/lib/yaks/errors.rb +1 -0
- data/lib/yaks/format/collection_json.rb +37 -5
- data/lib/yaks/format/hal.rb +8 -2
- data/lib/yaks/format/halo.rb +16 -9
- data/lib/yaks/format/json_api.rb +21 -2
- data/lib/yaks/format.rb +21 -15
- data/lib/yaks/html5_forms.rb +3 -2
- data/lib/yaks/identifier/link_relation.rb +17 -0
- data/lib/yaks/mapper/attribute.rb +2 -2
- data/lib/yaks/mapper/config.rb +1 -15
- data/lib/yaks/mapper/form/config.rb +21 -0
- data/lib/yaks/mapper/form/field/option.rb +20 -0
- data/lib/yaks/mapper/form/field.rb +13 -26
- data/lib/yaks/mapper/form/fieldset.rb +43 -0
- data/lib/yaks/mapper/form.rb +41 -16
- data/lib/yaks/mapper/link.rb +9 -7
- data/lib/yaks/mapper.rb +15 -7
- data/lib/yaks/null_resource.rb +2 -1
- data/lib/yaks/pipeline.rb +42 -0
- data/lib/yaks/primitivize.rb +0 -1
- data/lib/yaks/reader/hal.rb +63 -0
- data/lib/yaks/resource/form/field.rb +19 -0
- data/lib/yaks/resource/form/fieldset.rb +13 -0
- data/lib/yaks/resource/form.rb +6 -10
- data/lib/yaks/resource.rb +19 -2
- data/lib/yaks/runner.rb +13 -38
- data/lib/yaks/serializer.rb +34 -1
- data/lib/yaks/util.rb +8 -2
- data/lib/yaks/version.rb +1 -1
- data/lib/yaks.rb +37 -10
- data/resources/iana-link-relations.csv +152 -0
- data/spec/acceptance/acceptance_spec.rb +4 -3
- data/spec/acceptance/json_shared_examples.rb +11 -0
- data/spec/acceptance/models.rb +1 -1
- data/spec/integration/dynamic_form_fields_spec.rb +36 -0
- data/spec/integration/fieldset_spec.rb +62 -0
- data/spec/integration/map_to_resource_spec.rb +0 -2
- data/spec/json/confucius.halo.json +0 -1
- data/spec/sanity_spec.rb +0 -2
- data/spec/spec_helper.rb +3 -3
- data/spec/unit/yaks/attributes_spec.rb +3 -5
- data/spec/unit/yaks/{stateful_builder_spec.rb → builder_spec.rb} +8 -10
- data/spec/unit/yaks/collection_mapper_spec.rb +0 -2
- data/spec/unit/yaks/collection_resource_spec.rb +0 -2
- data/spec/unit/yaks/config_spec.rb +9 -15
- data/spec/unit/yaks/default_policy/derive_mapper_from_object_spec.rb +0 -2
- data/spec/unit/yaks/default_policy_spec.rb +0 -2
- data/spec/unit/yaks/format/collection_json_spec.rb +195 -3
- data/spec/unit/yaks/format/hal_spec.rb +0 -2
- data/spec/unit/yaks/format/halo_spec.rb +0 -1
- data/spec/unit/yaks/format/html_spec.rb +0 -2
- data/spec/unit/yaks/format/json_api_spec.rb +0 -2
- data/spec/unit/yaks/format_spec.rb +4 -6
- data/spec/unit/yaks/fp/callable_spec.rb +0 -2
- data/spec/unit/yaks/fp_spec.rb +0 -2
- data/spec/unit/yaks/mapper/association_mapper_spec.rb +0 -2
- data/spec/unit/yaks/mapper/association_spec.rb +0 -2
- data/spec/unit/yaks/mapper/attribute_spec.rb +0 -2
- data/spec/unit/yaks/mapper/config_spec.rb +6 -167
- data/spec/unit/yaks/mapper/form/field_spec.rb +0 -2
- data/spec/unit/yaks/mapper/form_spec.rb +2 -26
- data/spec/unit/yaks/mapper/has_many_spec.rb +0 -2
- data/spec/unit/yaks/mapper/has_one_spec.rb +0 -2
- data/spec/unit/yaks/mapper/link_spec.rb +13 -2
- data/spec/unit/yaks/mapper_spec.rb +2 -10
- data/spec/unit/yaks/null_resource_spec.rb +2 -4
- data/spec/unit/yaks/pipeline_spec.rb +140 -0
- data/spec/unit/yaks/primitivize_spec.rb +0 -2
- data/spec/unit/yaks/resource/link_spec.rb +0 -2
- data/spec/unit/yaks/resource_spec.rb +2 -4
- data/spec/unit/yaks/runner_spec.rb +52 -92
- data/spec/unit/yaks/serializer_spec.rb +0 -2
- data/spec/unit/yaks/util_spec.rb +12 -2
- metadata +58 -23
- data/lib/yaks/config/dsl.rb +0 -174
- data/lib/yaks/mapper/class_methods.rb +0 -47
- data/lib/yaks/stateful_builder.rb +0 -63
- data/spec/unit/yaks/config/dsl_spec.rb +0 -92
- data/spec/unit/yaks/configurable_spec.rb +0 -55
- data/spec/unit/yaks/mapper/class_methods_spec.rb +0 -83
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe Yaks::Format::CollectionJson do
|
4
2
|
context 'with the plant collection resource' do
|
5
3
|
include_context 'plant collection resource'
|
@@ -9,7 +7,110 @@ RSpec.describe Yaks::Format::CollectionJson do
|
|
9
7
|
it { should deep_eql(load_json_fixture('plant_collection.collection')) }
|
10
8
|
end
|
11
9
|
|
12
|
-
context '
|
10
|
+
context '#links?' do
|
11
|
+
context 'when resource is not a collection' do
|
12
|
+
let(:resource) {
|
13
|
+
Yaks::Resource.new(
|
14
|
+
attributes: {foo: 'fooval', bar: 'barval'},
|
15
|
+
links: [Yaks::Resource::Link.new(rel: 'the_rel', uri: 'the_uri')]
|
16
|
+
)
|
17
|
+
}
|
18
|
+
|
19
|
+
let(:cj) { Yaks::Format::CollectionJson.new(resource) }
|
20
|
+
|
21
|
+
it 'should return false' do
|
22
|
+
expect(cj.links?(resource)).to eq false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when resource is a collection' do
|
27
|
+
let(:cj) { Yaks::Format::CollectionJson.new(resource) }
|
28
|
+
|
29
|
+
context 'and has links' do
|
30
|
+
let(:resource) {
|
31
|
+
Yaks::CollectionResource.new(
|
32
|
+
links: [Yaks::Resource::Link.new(rel: 'the_rel', uri: 'the_uri')]
|
33
|
+
)
|
34
|
+
}
|
35
|
+
|
36
|
+
it 'should return true' do
|
37
|
+
expect(cj.links?(resource)).to eq true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'and has no links' do
|
42
|
+
let(:resource) {
|
43
|
+
Yaks::CollectionResource.new(
|
44
|
+
links: []
|
45
|
+
)
|
46
|
+
}
|
47
|
+
|
48
|
+
it 'should return false' do
|
49
|
+
expect(cj.links?(resource)).to eq false
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context '#queries?' do
|
56
|
+
let(:resource) {
|
57
|
+
Yaks::Resource.new(
|
58
|
+
attributes: {foo: 'fooval', bar: 'barval'},
|
59
|
+
forms: [Yaks::Resource::Form.new(full_args)]
|
60
|
+
)
|
61
|
+
}
|
62
|
+
|
63
|
+
subject {
|
64
|
+
Yaks::Primitivize.create.call(described_class.new.call(resource))
|
65
|
+
}
|
66
|
+
|
67
|
+
context 'when resource has GET forms' do
|
68
|
+
context 'and form has an action' do
|
69
|
+
let(:full_args) {
|
70
|
+
{
|
71
|
+
name: :search,
|
72
|
+
method: 'GET',
|
73
|
+
action: '/foo'
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
it 'should return true' do
|
78
|
+
cj = Yaks::Format::CollectionJson.new(resource)
|
79
|
+
expect(cj.queries?(resource)).to eq true
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'and form has no action' do
|
84
|
+
let(:full_args) {
|
85
|
+
{
|
86
|
+
name: :search,
|
87
|
+
method: 'GET'
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
it 'should return false' do
|
92
|
+
cj = Yaks::Format::CollectionJson.new(resource)
|
93
|
+
expect(cj.queries?(resource)).to eq false
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'when resource has not GET forms' do
|
99
|
+
let(:full_args) {
|
100
|
+
{
|
101
|
+
name: :search,
|
102
|
+
method: 'POST'
|
103
|
+
}
|
104
|
+
}
|
105
|
+
|
106
|
+
it 'should return false' do
|
107
|
+
cj = Yaks::Format::CollectionJson.new(resource)
|
108
|
+
expect(cj.queries?(resource)).to eq false
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'serialize_links' do
|
13
114
|
context 'without title' do
|
14
115
|
let(:resource) {
|
15
116
|
Yaks::Resource.new(
|
@@ -70,4 +171,95 @@ RSpec.describe Yaks::Format::CollectionJson do
|
|
70
171
|
end
|
71
172
|
end
|
72
173
|
end
|
174
|
+
|
175
|
+
context 'serialize_queries' do
|
176
|
+
let(:resource) {
|
177
|
+
Yaks::Resource.new(
|
178
|
+
attributes: {foo: 'fooval', bar: 'barval'},
|
179
|
+
forms: [
|
180
|
+
Yaks::Resource::Form.new(full_args),
|
181
|
+
Yaks::Resource::Form.new(name: :no_render, action: '/foo', method: 'POST')
|
182
|
+
]
|
183
|
+
)
|
184
|
+
}
|
185
|
+
|
186
|
+
subject {
|
187
|
+
Yaks::Primitivize.create.call(described_class.new.call(resource))
|
188
|
+
}
|
189
|
+
|
190
|
+
context 'when form method is GET' do
|
191
|
+
context "form uses only required fields" do
|
192
|
+
let(:full_args) {
|
193
|
+
{
|
194
|
+
name: :search,
|
195
|
+
action: '/foo',
|
196
|
+
method: 'GET'
|
197
|
+
}
|
198
|
+
}
|
199
|
+
|
200
|
+
it 'should render the queries array' do
|
201
|
+
should deep_eql(
|
202
|
+
"collection" => {
|
203
|
+
"version" => "1.0",
|
204
|
+
"items" => [
|
205
|
+
{
|
206
|
+
"data" => [
|
207
|
+
{ "name"=>"foo", "value"=>"fooval" },
|
208
|
+
{ "name"=>"bar", "value"=>"barval" }
|
209
|
+
]
|
210
|
+
}
|
211
|
+
],
|
212
|
+
"queries" => [
|
213
|
+
{ "href"=>"/foo", "rel"=>"search" }
|
214
|
+
]
|
215
|
+
}
|
216
|
+
)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
context "form uses optional fields" do
|
221
|
+
let(:fields) {
|
222
|
+
[
|
223
|
+
Yaks::Resource::Form::Field.new(name: 'foo'),
|
224
|
+
Yaks::Resource::Form::Field.new(name: 'bar', label: 'My Bar Field')
|
225
|
+
]
|
226
|
+
}
|
227
|
+
|
228
|
+
let(:full_args) {
|
229
|
+
{
|
230
|
+
name: :search,
|
231
|
+
action: '/foo',
|
232
|
+
method: 'GET',
|
233
|
+
title: 'My query prompt',
|
234
|
+
fields: fields
|
235
|
+
}
|
236
|
+
}
|
237
|
+
|
238
|
+
it 'should render the queries array with optional fields' do
|
239
|
+
should deep_eql(
|
240
|
+
"collection" => {
|
241
|
+
"version" => "1.0",
|
242
|
+
"items" => [
|
243
|
+
{
|
244
|
+
"data" => [
|
245
|
+
{ "name"=>"foo", "value"=>"fooval" },
|
246
|
+
{ "name"=>"bar", "value"=>"barval" }
|
247
|
+
]
|
248
|
+
}
|
249
|
+
],
|
250
|
+
"queries" => [
|
251
|
+
{ "href"=>"/foo", "rel"=>"search", "prompt"=>"My query prompt",
|
252
|
+
"data"=>
|
253
|
+
[
|
254
|
+
{ "name"=>"foo", "value"=>"" },
|
255
|
+
{ "name"=>"bar", "value"=>"", "prompt"=>"My Bar Field" }
|
256
|
+
]
|
257
|
+
}
|
258
|
+
]
|
259
|
+
}
|
260
|
+
)
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
end
|
73
265
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe Yaks::Format do
|
4
2
|
describe '.by_name' do
|
5
3
|
specify do
|
@@ -10,9 +8,9 @@ RSpec.describe Yaks::Format do
|
|
10
8
|
end
|
11
9
|
end
|
12
10
|
|
13
|
-
describe '.
|
11
|
+
describe '.by_media_type' do
|
14
12
|
specify do
|
15
|
-
expect(Yaks::Format.
|
13
|
+
expect(Yaks::Format.by_media_type('application/hal+json')).to eql Yaks::Format::Hal
|
16
14
|
end
|
17
15
|
end
|
18
16
|
|
@@ -25,9 +23,9 @@ RSpec.describe Yaks::Format do
|
|
25
23
|
end
|
26
24
|
end
|
27
25
|
|
28
|
-
describe '.
|
26
|
+
describe '.media_types' do
|
29
27
|
specify do
|
30
|
-
expect(Yaks::Format.
|
28
|
+
expect(Yaks::Format.media_types.values_at(:collection_json, :hal, :json_api)).to eql(["application/vnd.collection+json", "application/hal+json", "application/vnd.api+json"])
|
31
29
|
end
|
32
30
|
end
|
33
31
|
end
|
data/spec/unit/yaks/fp_spec.rb
CHANGED
@@ -1,174 +1,13 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe Yaks::Mapper::Config do
|
4
|
-
Undefined = Yaks::Undefined
|
5
|
-
|
6
|
-
subject(:config) { described_class.new }
|
7
|
-
|
8
|
-
describe '#initialize' do
|
9
|
-
subject(:config) do
|
10
|
-
described_class.new(
|
11
|
-
type: 'foo',
|
12
|
-
attributes: [:a],
|
13
|
-
links: [:b],
|
14
|
-
associations: [:c]
|
15
|
-
)
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
its(:type) { should eql 'foo' }
|
20
|
-
its(:attributes) { should eql [:a] }
|
21
|
-
its(:links) { should eql [:b] }
|
22
|
-
its(:associations) { should eql [:c] }
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '#attributes' do
|
26
|
-
context 'an empty config' do
|
27
|
-
it 'should return an empty attributes list' do
|
28
|
-
expect(config.attributes).to eq []
|
29
|
-
end
|
30
|
-
end
|
31
2
|
|
3
|
+
describe '#add_attributes' do
|
32
4
|
it 'should add attributes' do
|
33
|
-
expect(
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
]
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'should be chainable' do
|
41
|
-
expect(
|
42
|
-
config
|
43
|
-
.attributes(:foo, :bar)
|
44
|
-
.attributes(:baz)
|
45
|
-
.attributes
|
46
|
-
).to eq [
|
47
|
-
Yaks::Mapper::Attribute.new(:foo),
|
48
|
-
Yaks::Mapper::Attribute.new(:bar),
|
49
|
-
Yaks::Mapper::Attribute.new(:baz)
|
50
|
-
]
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe '#links' do
|
55
|
-
context 'an empty config' do
|
56
|
-
it 'should have an empty link list' do
|
57
|
-
expect(config.links).to eq []
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe 'adding links' do
|
62
|
-
let(:config) {
|
63
|
-
subject
|
64
|
-
.link(:self, '/foo/bar/{id}')
|
65
|
-
.link(:profile, '/profile/foo')
|
66
|
-
}
|
67
|
-
|
68
|
-
it 'should have the links in the link list' do
|
69
|
-
expect(config.links).to include Yaks::Mapper::Link.new(rel: :profile, template: '/profile/foo')
|
70
|
-
expect(config.links).to include Yaks::Mapper::Link.new(rel: :self, template: '/foo/bar/{id}')
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
describe 'links with the same rel' do
|
75
|
-
let(:config) {
|
76
|
-
subject
|
77
|
-
.link(:self, '/foo/self')
|
78
|
-
.link(:self, '/foo/me')
|
79
|
-
}
|
80
|
-
|
81
|
-
it 'should have the links in the defined order' do
|
82
|
-
expect(config.links).to eql [
|
83
|
-
Yaks::Mapper::Link.new(rel: :self, template: '/foo/self'),
|
84
|
-
Yaks::Mapper::Link.new(rel: :self, template: '/foo/me')
|
85
|
-
]
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
describe '#has_one' do
|
91
|
-
context 'with a mapper specified' do
|
92
|
-
let(:config) { subject.has_one :mother, mapper: Yaks::Mapper }
|
93
|
-
|
94
|
-
it 'should have the association configured' do
|
95
|
-
expect(config.associations).to eq [
|
96
|
-
Yaks::Mapper::HasOne.new(name: :mother, item_mapper: Yaks::Mapper)
|
97
|
-
]
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
context 'with no options' do
|
102
|
-
let(:config) { subject.has_one :mother }
|
103
|
-
|
104
|
-
it 'should have undefined mapper, rel, collection_mapper' do
|
105
|
-
expect(config.associations).to eq [
|
106
|
-
Yaks::Mapper::HasOne.new(name: :mother)
|
107
|
-
]
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
context 'with a rel specified' do
|
112
|
-
let(:config) { subject.has_one :mother, rel: '/api/rels/mother' }
|
113
|
-
|
114
|
-
it 'should have the rel' do
|
115
|
-
expect(config.associations).to eq [
|
116
|
-
Yaks::Mapper::HasOne.new(name: :mother, rel: '/api/rels/mother')
|
117
|
-
]
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
describe '#has_many' do
|
124
|
-
context 'with a mapper specified' do
|
125
|
-
let(:config) { subject.has_many :shoes, mapper: Yaks::Mapper }
|
126
|
-
|
127
|
-
it 'should have the association configured' do
|
128
|
-
expect(config.associations).to eq [
|
129
|
-
Yaks::Mapper::HasMany.new(name: :shoes, item_mapper: Yaks::Mapper)
|
130
|
-
]
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
context 'with no options' do
|
135
|
-
let(:config) { subject.has_many :shoes }
|
136
|
-
|
137
|
-
it 'should have undefined mapper, rel, collection_mapper' do
|
138
|
-
expect(config.associations).to eq [
|
139
|
-
Yaks::Mapper::HasMany.new(name: :shoes)
|
5
|
+
expect(subject.add_attributes(:bar).add_attributes(:baz)).to eql described_class.new(
|
6
|
+
attributes: [
|
7
|
+
Yaks::Mapper::Attribute.new(:bar),
|
8
|
+
Yaks::Mapper::Attribute.new(:baz),
|
140
9
|
]
|
141
|
-
|
142
|
-
end
|
143
|
-
|
144
|
-
context 'with a collection mapper set' do
|
145
|
-
let(:config) { subject.has_many :shoes, collection_mapper: :a_collection_mapper }
|
146
|
-
|
147
|
-
it 'should have the association configured' do
|
148
|
-
expect(config.associations).to eq [
|
149
|
-
Yaks::Mapper::HasMany.new(name: :shoes, collection_mapper: :a_collection_mapper)
|
150
|
-
]
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
describe "#type" do
|
156
|
-
it "should update the type" do
|
157
|
-
config = config().type :shoe
|
158
|
-
expect(config.type).to be :shoe
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
context 'multiple associations' do
|
163
|
-
let(:config) {
|
164
|
-
subject
|
165
|
-
.has_many(:shoes)
|
166
|
-
.has_one(:mother)
|
167
|
-
}
|
168
|
-
|
169
|
-
it 'should have them all present' do
|
170
|
-
expect(config.associations).to include Yaks::Mapper::HasOne.new(name: :mother)
|
171
|
-
expect(config.associations).to include Yaks::Mapper::HasMany.new(name: :shoes)
|
10
|
+
)
|
172
11
|
end
|
173
12
|
end
|
174
13
|
end
|
@@ -1,7 +1,5 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe Yaks::Mapper::Form do
|
4
|
-
let(:form) { described_class.
|
2
|
+
let(:form) { described_class.create( full_args ) }
|
5
3
|
let(:name) { :the_name }
|
6
4
|
let(:full_args) { {name: name}.merge(args) }
|
7
5
|
let(:args) {
|
@@ -16,26 +14,14 @@ RSpec.describe Yaks::Mapper::Form do
|
|
16
14
|
let(:fields) { [] }
|
17
15
|
|
18
16
|
describe '.create' do
|
19
|
-
it 'should create an instance, first arg is the name' do
|
20
|
-
|
21
|
-
expect( described_class.create(name, args) ).to eql form
|
22
|
-
end
|
23
|
-
|
24
17
|
it 'should have a name of nil when ommitted' do
|
25
18
|
expect(described_class.create.name).to be_nil
|
26
19
|
end
|
27
20
|
end
|
28
21
|
|
29
22
|
describe '#add_to_resource' do
|
30
|
-
let(:resource) { form.add_to_resource(Yaks::Resource.new, Yaks::Mapper.new(nil), nil) }
|
23
|
+
let(:resource) { form.new.add_to_resource(Yaks::Resource.new, Yaks::Mapper.new(nil), nil) }
|
31
24
|
|
32
|
-
it 'should add a form to the resource' do
|
33
|
-
expect(resource.forms.length).to be 1
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should create a Yaks::Resource::Form with corresponding fields' do
|
37
|
-
expect(resource.forms.first).to eql Yaks::Resource::Form.new( full_args )
|
38
|
-
end
|
39
25
|
|
40
26
|
context 'with fields' do
|
41
27
|
let(:fields) {
|
@@ -49,16 +35,6 @@ RSpec.describe Yaks::Mapper::Form do
|
|
49
35
|
]
|
50
36
|
}
|
51
37
|
|
52
|
-
it 'should map to Yaks::Resource::Form::Field instances' do
|
53
|
-
expect(resource.forms.first.fields).to eql [
|
54
|
-
Yaks::Resource::Form::Field.new(
|
55
|
-
name: 'field name',
|
56
|
-
label: 'field label',
|
57
|
-
type: 'text',
|
58
|
-
value: 7
|
59
|
-
)
|
60
|
-
]
|
61
|
-
end
|
62
38
|
end
|
63
39
|
end
|
64
40
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe Yaks::Mapper::Link do
|
4
2
|
include_context 'yaks context'
|
5
3
|
|
@@ -45,6 +43,19 @@ RSpec.describe Yaks::Mapper::Link do
|
|
45
43
|
end
|
46
44
|
end
|
47
45
|
|
46
|
+
context 'with :replace => true' do
|
47
|
+
let(:options) { { remove: true } }
|
48
|
+
let(:resource) {
|
49
|
+
Yaks::Resource.new.add_link(Yaks::Resource::Link.new(rel: :next, uri: '/api/next'))
|
50
|
+
}
|
51
|
+
|
52
|
+
it 'should remove earlier links of the same rel' do
|
53
|
+
expect(link.add_to_resource(resource, mapper, yaks_context)).to eql(
|
54
|
+
Yaks::Resource.new
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
48
59
|
context 'with :replace => true' do
|
49
60
|
let(:options) { { replace: true } }
|
50
61
|
let(:resource) {
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe Yaks::Mapper do
|
4
2
|
include_context 'yaks context'
|
5
3
|
|
@@ -306,19 +304,13 @@ RSpec.describe Yaks::Mapper do
|
|
306
304
|
|
307
305
|
describe '#map_links' do
|
308
306
|
let(:object) { fake('Link') }
|
309
|
-
before {
|
307
|
+
before { mapper_class.config = mapper.config.append_to(:links, object) }
|
310
308
|
it_should_behave_like 'something that can be added to a resource'
|
311
309
|
end
|
312
310
|
|
313
311
|
describe '#map_subresources' do
|
314
312
|
let(:object) { fake('Association') }
|
315
|
-
before {
|
316
|
-
it_should_behave_like 'something that can be added to a resource'
|
317
|
-
end
|
318
|
-
|
319
|
-
describe '#map_forms' do
|
320
|
-
let(:object) { fake('Form') }
|
321
|
-
before { mapper.config(mapper.config.append_to(:forms, object)) }
|
313
|
+
before { mapper_class.config = mapper.config.append_to(:associations, object) }
|
322
314
|
it_should_behave_like 'something that can be added to a resource'
|
323
315
|
end
|
324
316
|
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe Yaks::NullResource do
|
4
2
|
subject(:null_resource) { described_class.new }
|
5
3
|
|
@@ -33,8 +31,8 @@ RSpec.describe Yaks::NullResource do
|
|
33
31
|
end
|
34
32
|
|
35
33
|
it 'should not allow updating attributes' do
|
36
|
-
expect { null_resource.
|
37
|
-
Yaks::UnsupportedOperationError, "Operation
|
34
|
+
expect { null_resource.merge_attributes({}) }.to raise_error(
|
35
|
+
Yaks::UnsupportedOperationError, "Operation merge_attributes not supported on Yaks::NullResource"
|
38
36
|
)
|
39
37
|
end
|
40
38
|
|