yaks 0.8.3 → 0.9.0
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/README.md +12 -0
- data/lib/yaks.rb +4 -2
- data/lib/yaks/attributes.rb +1 -1
- data/lib/yaks/builder.rb +10 -10
- data/lib/yaks/collection_mapper.rb +1 -1
- data/lib/yaks/config.rb +1 -1
- data/lib/yaks/configurable.rb +41 -2
- data/lib/yaks/format/json_api.rb +21 -35
- data/lib/yaks/mapper.rb +2 -1
- data/lib/yaks/mapper/form.rb +6 -29
- data/lib/yaks/mapper/form/config.rb +37 -3
- data/lib/yaks/mapper/form/dynamic_field.rb +17 -0
- data/lib/yaks/mapper/form/field.rb +13 -10
- data/lib/yaks/mapper/form/field/option.rb +2 -1
- data/lib/yaks/mapper/form/fieldset.rb +7 -29
- data/lib/yaks/reader/hal.rb +0 -1
- data/lib/yaks/reader/json_api.rb +49 -0
- data/lib/yaks/version.rb +1 -1
- data/spec/acceptance/acceptance_spec.rb +1 -0
- data/spec/json/confucius.json_api.json +19 -20
- data/spec/unit/yaks/attributes_spec.rb +37 -1
- data/spec/unit/yaks/builder_spec.rb +34 -3
- data/spec/unit/yaks/collection_mapper_spec.rb +20 -1
- data/spec/unit/yaks/collection_resource_spec.rb +7 -0
- data/spec/unit/yaks/configurable_spec.rb +84 -0
- data/spec/unit/yaks/format/json_api_spec.rb +91 -2
- data/spec/unit/yaks/mapper/form/field_spec.rb +63 -5
- data/spec/unit/yaks/mapper/form/fieldset_spec.rb +30 -0
- data/spec/unit/yaks/mapper/form_spec.rb +25 -1
- metadata +8 -2
@@ -7,7 +7,7 @@ RSpec.describe Yaks::Format::JsonAPI do
|
|
7
7
|
|
8
8
|
it 'should not include a "linked" key' do
|
9
9
|
expect(format.call(resource)).to eql(
|
10
|
-
{
|
10
|
+
{data: [{type: :wizards, foo: :bar}]}
|
11
11
|
)
|
12
12
|
end
|
13
13
|
end
|
@@ -28,8 +28,9 @@ RSpec.describe Yaks::Format::JsonAPI do
|
|
28
28
|
# TODO should it really behave this way? better to give preference to self link.
|
29
29
|
it 'should give preference to the href attribute' do
|
30
30
|
expect(format.call(resource)).to eql(
|
31
|
-
{
|
31
|
+
{data: [
|
32
32
|
{
|
33
|
+
type: :wizards,
|
33
34
|
href: '/the/href'
|
34
35
|
}
|
35
36
|
]
|
@@ -38,4 +39,92 @@ RSpec.describe Yaks::Format::JsonAPI do
|
|
38
39
|
end
|
39
40
|
end
|
40
41
|
|
42
|
+
context 'with a self link' do
|
43
|
+
let(:resource) {
|
44
|
+
Yaks::Resource.new(
|
45
|
+
type: 'wizard',
|
46
|
+
links: [
|
47
|
+
Yaks::Resource::Link.new(rel: :self, uri: '/the/self/link')
|
48
|
+
]
|
49
|
+
)
|
50
|
+
}
|
51
|
+
it 'should use the self link in output' do
|
52
|
+
expect(format.call(resource)).to eql(
|
53
|
+
{data: [
|
54
|
+
{
|
55
|
+
type: :wizards,
|
56
|
+
href: '/the/self/link'
|
57
|
+
}
|
58
|
+
]
|
59
|
+
}
|
60
|
+
)
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'with subresources' do
|
66
|
+
let(:resource) {
|
67
|
+
Yaks::Resource.new(
|
68
|
+
type: 'wizard',
|
69
|
+
subresources: [
|
70
|
+
Yaks::Resource.new(type: 'spell', attributes: {id: 777, name: 'Lucky Sevens'})
|
71
|
+
]
|
72
|
+
)
|
73
|
+
}
|
74
|
+
it 'should include links and linked' do
|
75
|
+
expect(format.call(resource)).to eql(
|
76
|
+
{
|
77
|
+
data: [
|
78
|
+
{
|
79
|
+
type: :wizards,
|
80
|
+
links: {'spell' => {type: 'spells', id: 777}}
|
81
|
+
}
|
82
|
+
],
|
83
|
+
linked: [{type: :spells, id: 777, name: 'Lucky Sevens'}]
|
84
|
+
}
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'with null subresources' do
|
91
|
+
let(:resource) {
|
92
|
+
Yaks::Resource.new(
|
93
|
+
type: 'wizard',
|
94
|
+
subresources: [
|
95
|
+
Yaks::NullResource.new
|
96
|
+
]
|
97
|
+
)
|
98
|
+
}
|
99
|
+
it 'should not include links' do
|
100
|
+
expect(format.call(resource)).to eql(
|
101
|
+
{data: [
|
102
|
+
{
|
103
|
+
type: :wizards,
|
104
|
+
}
|
105
|
+
]
|
106
|
+
}
|
107
|
+
)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'with no subresources or links' do
|
112
|
+
let(:resource) {
|
113
|
+
Yaks::Resource.new(
|
114
|
+
type: 'wizard',
|
115
|
+
subresources: []
|
116
|
+
)
|
117
|
+
}
|
118
|
+
it 'should not include links' do
|
119
|
+
expect(format.call(resource)).to eql(
|
120
|
+
{data: [
|
121
|
+
{
|
122
|
+
type: :wizards
|
123
|
+
}
|
124
|
+
]
|
125
|
+
}
|
126
|
+
)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
41
130
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
RSpec.describe Yaks::Mapper::Form::Field do
|
2
2
|
include_context 'yaks context'
|
3
3
|
|
4
|
-
let(:field)
|
4
|
+
let(:field) { described_class.new( full_args ) }
|
5
5
|
let(:name) { :the_field }
|
6
|
-
let(:full_args) { {name: name}.merge(args) }
|
6
|
+
let(:full_args) { {name: name, options: options}.merge(args) }
|
7
|
+
let(:options) { [] }
|
7
8
|
let(:args) {
|
8
9
|
{
|
9
10
|
label: 'a label',
|
@@ -12,7 +13,11 @@ RSpec.describe Yaks::Mapper::Form::Field do
|
|
12
13
|
}
|
13
14
|
}
|
14
15
|
|
15
|
-
let(:mapper)
|
16
|
+
let(:mapper) do
|
17
|
+
Class.new(Yaks::Mapper) do
|
18
|
+
def month ; 'January' ; end
|
19
|
+
end.new(yaks_context)
|
20
|
+
end
|
16
21
|
|
17
22
|
describe '.create' do
|
18
23
|
it 'can take all args as a hash' do
|
@@ -28,9 +33,62 @@ RSpec.describe Yaks::Mapper::Form::Field do
|
|
28
33
|
end
|
29
34
|
end
|
30
35
|
|
31
|
-
describe '#
|
36
|
+
describe '#to_resource_fields' do
|
32
37
|
it 'creates a Yaks::Resource::Form::Field with the same attributes' do
|
33
|
-
expect(field.
|
38
|
+
expect(field.to_resource_fields(mapper)).to eql [Yaks::Resource::Form::Field.new(full_args)]
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'with dynamic attributes' do
|
42
|
+
let(:name) { ->{ month } }
|
43
|
+
|
44
|
+
it 'should expand attributes using the mapper' do
|
45
|
+
expect(field.to_resource_fields(mapper).first.name).to eql 'January'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'with a falsey if condition' do
|
50
|
+
let(:args) { super().merge(if: ->{ false })}
|
51
|
+
it 'returns an empty array' do
|
52
|
+
expect(field.to_resource_fields(mapper)).to eql []
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with a truthy if condition' do
|
57
|
+
let(:args) { super().merge(if: ->{ true })}
|
58
|
+
it 'returns a field' do
|
59
|
+
expect(field.to_resource_fields(mapper).first).to be_a Yaks::Resource::Form::Field
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'with select optons' do
|
64
|
+
let(:options) {
|
65
|
+
[
|
66
|
+
Yaks::Mapper::Form::Field::Option.new(
|
67
|
+
label: 'Jan',
|
68
|
+
value: ->{ 'January' },
|
69
|
+
selected: ->{ month == 'January' }
|
70
|
+
),
|
71
|
+
Yaks::Mapper::Form::Field::Option.new(
|
72
|
+
label: 'Feb',
|
73
|
+
value: ->{ 'February' },
|
74
|
+
selected: ->{ month == 'February' }
|
75
|
+
)
|
76
|
+
]
|
77
|
+
}
|
78
|
+
|
79
|
+
it 'should convert them to Yaks::Form* objects' do
|
80
|
+
form_field = Yaks::Resource::Form::Field.new(
|
81
|
+
name: :the_field,
|
82
|
+
label: "a label",
|
83
|
+
options: [
|
84
|
+
Yaks::Resource::Form::Field::Option.new(value: "January", label: "Jan", selected: true),
|
85
|
+
Yaks::Resource::Form::Field::Option.new(value: "February", label: "Feb")
|
86
|
+
],
|
87
|
+
type: "text",
|
88
|
+
value: "hello"
|
89
|
+
)
|
90
|
+
expect(field.to_resource_fields(mapper)).to eql [form_field]
|
91
|
+
end
|
34
92
|
end
|
35
93
|
end
|
36
94
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
RSpec.describe Yaks::Mapper::Form::Fieldset do
|
2
|
+
include_context 'yaks context'
|
3
|
+
let(:mapper) { Yaks::Mapper.new(yaks_context) }
|
4
|
+
|
5
|
+
describe '#to_resource_fields' do
|
6
|
+
context 'with dynamic elements' do
|
7
|
+
let(:fieldset) do
|
8
|
+
described_class.create({}) do
|
9
|
+
dynamic do |object|
|
10
|
+
text object.name
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should render them based on the mapped object' do
|
16
|
+
mapper.call(fake(name: :anthony)) # hack to set the mapper's object
|
17
|
+
expect(fieldset.to_resource_fields(mapper)).to eql(
|
18
|
+
[
|
19
|
+
Yaks::Resource::Form::Fieldset.new(
|
20
|
+
fields: [
|
21
|
+
Yaks::Resource::Form::Field.new(name: :anthony, type: :text)
|
22
|
+
]
|
23
|
+
)
|
24
|
+
]
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -14,6 +14,7 @@ RSpec.describe Yaks::Mapper::Form do
|
|
14
14
|
}
|
15
15
|
}
|
16
16
|
let(:fields) { [] }
|
17
|
+
let(:mapper) { Yaks::Mapper.new(yaks_context) }
|
17
18
|
|
18
19
|
describe '.create' do
|
19
20
|
it 'should have a name of nil when ommitted' do
|
@@ -22,7 +23,6 @@ RSpec.describe Yaks::Mapper::Form do
|
|
22
23
|
end
|
23
24
|
|
24
25
|
describe '#add_to_resource' do
|
25
|
-
let(:mapper) { Yaks::Mapper.new(yaks_context) }
|
26
26
|
let(:resource) { form.new.add_to_resource(Yaks::Resource.new, mapper, nil) }
|
27
27
|
|
28
28
|
context 'with fields' do
|
@@ -54,5 +54,29 @@ RSpec.describe Yaks::Mapper::Form do
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
+
describe '#to_resource_form' do
|
58
|
+
context 'with dynamic elements' do
|
59
|
+
let(:form) do
|
60
|
+
described_class.create(name) do
|
61
|
+
dynamic do |object|
|
62
|
+
text object.name
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should render them based on the mapped object' do
|
68
|
+
mapper.call(fake(name: :anthony)) # hack to set the mapper's object
|
69
|
+
expect(form.to_resource_form(mapper)).to eql(
|
70
|
+
Yaks::Resource::Form.new(
|
71
|
+
name: :the_name,
|
72
|
+
fields: [
|
73
|
+
Yaks::Resource::Form::Field.new(name: :anthony, type: :text)
|
74
|
+
]
|
75
|
+
)
|
76
|
+
)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
57
81
|
end
|
58
82
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arne Brasseur
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inflection
|
@@ -272,6 +272,7 @@ files:
|
|
272
272
|
- lib/yaks/mapper/config.rb
|
273
273
|
- lib/yaks/mapper/form.rb
|
274
274
|
- lib/yaks/mapper/form/config.rb
|
275
|
+
- lib/yaks/mapper/form/dynamic_field.rb
|
275
276
|
- lib/yaks/mapper/form/field.rb
|
276
277
|
- lib/yaks/mapper/form/field/option.rb
|
277
278
|
- lib/yaks/mapper/form/fieldset.rb
|
@@ -282,6 +283,7 @@ files:
|
|
282
283
|
- lib/yaks/pipeline.rb
|
283
284
|
- lib/yaks/primitivize.rb
|
284
285
|
- lib/yaks/reader/hal.rb
|
286
|
+
- lib/yaks/reader/json_api.rb
|
285
287
|
- lib/yaks/resource.rb
|
286
288
|
- lib/yaks/resource/form.rb
|
287
289
|
- lib/yaks/resource/form/field.rb
|
@@ -325,6 +327,7 @@ files:
|
|
325
327
|
- spec/unit/yaks/collection_mapper_spec.rb
|
326
328
|
- spec/unit/yaks/collection_resource_spec.rb
|
327
329
|
- spec/unit/yaks/config_spec.rb
|
330
|
+
- spec/unit/yaks/configurable_spec.rb
|
328
331
|
- spec/unit/yaks/default_policy/derive_mapper_from_object_spec.rb
|
329
332
|
- spec/unit/yaks/default_policy_spec.rb
|
330
333
|
- spec/unit/yaks/format/collection_json_spec.rb
|
@@ -341,6 +344,7 @@ files:
|
|
341
344
|
- spec/unit/yaks/mapper/config_spec.rb
|
342
345
|
- spec/unit/yaks/mapper/form/field/option_spec.rb
|
343
346
|
- spec/unit/yaks/mapper/form/field_spec.rb
|
347
|
+
- spec/unit/yaks/mapper/form/fieldset_spec.rb
|
344
348
|
- spec/unit/yaks/mapper/form_spec.rb
|
345
349
|
- spec/unit/yaks/mapper/has_many_spec.rb
|
346
350
|
- spec/unit/yaks/mapper/has_one_spec.rb
|
@@ -416,6 +420,7 @@ test_files:
|
|
416
420
|
- spec/unit/yaks/collection_mapper_spec.rb
|
417
421
|
- spec/unit/yaks/collection_resource_spec.rb
|
418
422
|
- spec/unit/yaks/config_spec.rb
|
423
|
+
- spec/unit/yaks/configurable_spec.rb
|
419
424
|
- spec/unit/yaks/default_policy/derive_mapper_from_object_spec.rb
|
420
425
|
- spec/unit/yaks/default_policy_spec.rb
|
421
426
|
- spec/unit/yaks/format/collection_json_spec.rb
|
@@ -432,6 +437,7 @@ test_files:
|
|
432
437
|
- spec/unit/yaks/mapper/config_spec.rb
|
433
438
|
- spec/unit/yaks/mapper/form/field/option_spec.rb
|
434
439
|
- spec/unit/yaks/mapper/form/field_spec.rb
|
440
|
+
- spec/unit/yaks/mapper/form/fieldset_spec.rb
|
435
441
|
- spec/unit/yaks/mapper/form_spec.rb
|
436
442
|
- spec/unit/yaks/mapper/has_many_spec.rb
|
437
443
|
- spec/unit/yaks/mapper/has_one_spec.rb
|