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.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/Rakefile +1 -1
  4. data/lib/yaks/attributes.rb +17 -11
  5. data/lib/yaks/builder.rb +43 -0
  6. data/lib/yaks/changelog.rb +2 -2
  7. data/lib/yaks/collection_mapper.rb +0 -2
  8. data/lib/yaks/config.rb +52 -32
  9. data/lib/yaks/configurable.rb +43 -14
  10. data/lib/yaks/errors.rb +1 -0
  11. data/lib/yaks/format/collection_json.rb +37 -5
  12. data/lib/yaks/format/hal.rb +8 -2
  13. data/lib/yaks/format/halo.rb +16 -9
  14. data/lib/yaks/format/json_api.rb +21 -2
  15. data/lib/yaks/format.rb +21 -15
  16. data/lib/yaks/html5_forms.rb +3 -2
  17. data/lib/yaks/identifier/link_relation.rb +17 -0
  18. data/lib/yaks/mapper/attribute.rb +2 -2
  19. data/lib/yaks/mapper/config.rb +1 -15
  20. data/lib/yaks/mapper/form/config.rb +21 -0
  21. data/lib/yaks/mapper/form/field/option.rb +20 -0
  22. data/lib/yaks/mapper/form/field.rb +13 -26
  23. data/lib/yaks/mapper/form/fieldset.rb +43 -0
  24. data/lib/yaks/mapper/form.rb +41 -16
  25. data/lib/yaks/mapper/link.rb +9 -7
  26. data/lib/yaks/mapper.rb +15 -7
  27. data/lib/yaks/null_resource.rb +2 -1
  28. data/lib/yaks/pipeline.rb +42 -0
  29. data/lib/yaks/primitivize.rb +0 -1
  30. data/lib/yaks/reader/hal.rb +63 -0
  31. data/lib/yaks/resource/form/field.rb +19 -0
  32. data/lib/yaks/resource/form/fieldset.rb +13 -0
  33. data/lib/yaks/resource/form.rb +6 -10
  34. data/lib/yaks/resource.rb +19 -2
  35. data/lib/yaks/runner.rb +13 -38
  36. data/lib/yaks/serializer.rb +34 -1
  37. data/lib/yaks/util.rb +8 -2
  38. data/lib/yaks/version.rb +1 -1
  39. data/lib/yaks.rb +37 -10
  40. data/resources/iana-link-relations.csv +152 -0
  41. data/spec/acceptance/acceptance_spec.rb +4 -3
  42. data/spec/acceptance/json_shared_examples.rb +11 -0
  43. data/spec/acceptance/models.rb +1 -1
  44. data/spec/integration/dynamic_form_fields_spec.rb +36 -0
  45. data/spec/integration/fieldset_spec.rb +62 -0
  46. data/spec/integration/map_to_resource_spec.rb +0 -2
  47. data/spec/json/confucius.halo.json +0 -1
  48. data/spec/sanity_spec.rb +0 -2
  49. data/spec/spec_helper.rb +3 -3
  50. data/spec/unit/yaks/attributes_spec.rb +3 -5
  51. data/spec/unit/yaks/{stateful_builder_spec.rb → builder_spec.rb} +8 -10
  52. data/spec/unit/yaks/collection_mapper_spec.rb +0 -2
  53. data/spec/unit/yaks/collection_resource_spec.rb +0 -2
  54. data/spec/unit/yaks/config_spec.rb +9 -15
  55. data/spec/unit/yaks/default_policy/derive_mapper_from_object_spec.rb +0 -2
  56. data/spec/unit/yaks/default_policy_spec.rb +0 -2
  57. data/spec/unit/yaks/format/collection_json_spec.rb +195 -3
  58. data/spec/unit/yaks/format/hal_spec.rb +0 -2
  59. data/spec/unit/yaks/format/halo_spec.rb +0 -1
  60. data/spec/unit/yaks/format/html_spec.rb +0 -2
  61. data/spec/unit/yaks/format/json_api_spec.rb +0 -2
  62. data/spec/unit/yaks/format_spec.rb +4 -6
  63. data/spec/unit/yaks/fp/callable_spec.rb +0 -2
  64. data/spec/unit/yaks/fp_spec.rb +0 -2
  65. data/spec/unit/yaks/mapper/association_mapper_spec.rb +0 -2
  66. data/spec/unit/yaks/mapper/association_spec.rb +0 -2
  67. data/spec/unit/yaks/mapper/attribute_spec.rb +0 -2
  68. data/spec/unit/yaks/mapper/config_spec.rb +6 -167
  69. data/spec/unit/yaks/mapper/form/field_spec.rb +0 -2
  70. data/spec/unit/yaks/mapper/form_spec.rb +2 -26
  71. data/spec/unit/yaks/mapper/has_many_spec.rb +0 -2
  72. data/spec/unit/yaks/mapper/has_one_spec.rb +0 -2
  73. data/spec/unit/yaks/mapper/link_spec.rb +13 -2
  74. data/spec/unit/yaks/mapper_spec.rb +2 -10
  75. data/spec/unit/yaks/null_resource_spec.rb +2 -4
  76. data/spec/unit/yaks/pipeline_spec.rb +140 -0
  77. data/spec/unit/yaks/primitivize_spec.rb +0 -2
  78. data/spec/unit/yaks/resource/link_spec.rb +0 -2
  79. data/spec/unit/yaks/resource_spec.rb +2 -4
  80. data/spec/unit/yaks/runner_spec.rb +52 -92
  81. data/spec/unit/yaks/serializer_spec.rb +0 -2
  82. data/spec/unit/yaks/util_spec.rb +12 -2
  83. metadata +58 -23
  84. data/lib/yaks/config/dsl.rb +0 -174
  85. data/lib/yaks/mapper/class_methods.rb +0 -47
  86. data/lib/yaks/stateful_builder.rb +0 -63
  87. data/spec/unit/yaks/config/dsl_spec.rb +0 -92
  88. data/spec/unit/yaks/configurable_spec.rb +0 -55
  89. data/spec/unit/yaks/mapper/class_methods_spec.rb +0 -83
@@ -0,0 +1,140 @@
1
+ RSpec.describe Yaks::Pipeline do
2
+ subject(:pipeline) { described_class.new(steps) }
3
+ let(:steps) {
4
+ [
5
+ [:step1, ->(i, e) { i + 1 }],
6
+ [:step2, ->(i, e) { i + 10 }],
7
+ [:step3, ->(i, e) { i + e[:foo] }],
8
+ ]
9
+ }
10
+ let(:env) {{ foo: 100 }}
11
+
12
+ describe '#call' do
13
+ it 'should call steps in turn, passing in the last result and env' do
14
+ expect(pipeline.call(1000, env)).to equal 1111
15
+ end
16
+ end
17
+
18
+ describe '#insert_hooks' do
19
+ let(:hooks) { [] }
20
+
21
+ describe 'before' do
22
+ let(:hooks) { [[:before, :step2, :before_step2, ->(i, e) { i - (i % 100) }]] }
23
+
24
+ it 'should insert a hook before the step' do
25
+ expect(pipeline.insert_hooks(hooks).call(1000, env)).to equal 1110
26
+ end
27
+ end
28
+
29
+ describe 'after' do
30
+ let(:hooks) { [[:after, :step2, :after_step2, ->(i, e) { i - (i % 100) }]] }
31
+
32
+ it 'should insert a hook after the step' do
33
+ expect(pipeline.insert_hooks(hooks).call(1000, env)).to equal 1100
34
+ end
35
+ end
36
+
37
+ describe 'around' do
38
+ let(:hooks) { [[:around, :step2, :after_step2, ->(i, e, &b) { e[:foo] + b[i, e] + b[i, e] }]] }
39
+
40
+ it 'should insert a hook after the step' do
41
+ expect(pipeline.insert_hooks(hooks).call(1000, env)).to equal 2222
42
+ end
43
+ end
44
+
45
+ describe 'skip' do
46
+ let(:hooks) { [[:skip, :step2 ]] }
47
+
48
+ it 'should insert a hook after the step' do
49
+ expect(pipeline.insert_hooks(hooks).call(1000, env)).to equal 1101
50
+ end
51
+ end
52
+
53
+ describe 'multiple hooks' do
54
+ let(:hooks) {
55
+ [
56
+ [:after, :step2, :after_step2, ->(i, e) { i % 10 }],
57
+ [:skip, :step3]
58
+ ]
59
+ }
60
+
61
+ it 'should insert the hooks' do
62
+ expect(pipeline.insert_hooks(hooks).call(1000, env)).to equal 1
63
+ end
64
+ end
65
+
66
+ it 'should return a pipeline with the right step names' do
67
+ expect(pipeline
68
+ .insert_hooks([[:before, :step2, :step1_1, ->(i, e) { i+1 }]])
69
+ .insert_hooks([[:before, :step1_1, :step1_0, ->(i, e) { i+10 }]])
70
+ .insert_hooks([[:after, :step1_1, :step1_2, ->(i, e) { i+100 }]])
71
+ .insert_hooks([[:around, :step1_1, :step1_1_0, ->(i, e, &b) { b.call(i, e)+1000 }]])
72
+ .insert_hooks([[:around, :step1_2, :step1_3, ->(i, e, &b) { b.call(i, e)+1000 }]])
73
+ .insert_hooks([[:after, :step1_3, :step1_4, ->(i, e) { i + 10000 }]])
74
+ .call(1000, env)
75
+ ).to equal 13222
76
+ end
77
+
78
+ end
79
+ end
80
+
81
+
82
+ # describe 'after' do
83
+ # let(:hooks) { proc { after(:format) { :after_format_impl } } }
84
+
85
+ # it 'should insert a hook after the step' do
86
+ # expect(runner.steps.map(&:first)).to eql [
87
+ # :map, :format, :after_format, :primitivize, :serialize
88
+ # ]
89
+ # expect(runner.steps[1].last).to be runner.formatter
90
+ # expect(runner.steps[2].last.call).to be :after_format_impl
91
+ # end
92
+ # end
93
+
94
+ # describe 'around' do
95
+ # let(:hooks) do
96
+ # proc {
97
+ # around(:serialize) do |res, env, &block|
98
+ # "serialized[#{env}][#{block.call(res, env)}]"
99
+ # end
100
+ # }
101
+ # end
102
+
103
+ # it 'should insert a hook around the step' do
104
+ # expect(runner.steps.map(&:first)).to eql [
105
+ # :map, :format, :primitivize, :serialize
106
+ # ]
107
+ # expect(runner.steps.assoc(:serialize).last.call(["res1"], "env1")).to eql(
108
+ # "serialized[env1][[\n \"res1\"\n]]"
109
+ # )
110
+ # end
111
+ # end
112
+
113
+ # describe 'around' do
114
+ # let(:hooks) { ->(*) { skip(:serialize) } }
115
+
116
+ # it 'should skip a certain step' do
117
+ # expect(runner.steps.map(&:first)).to eql [
118
+ # :map, :format, :primitivize
119
+ # ]
120
+ # end
121
+ # end
122
+
123
+ # describe 'multiple hooks' do
124
+ # let(:hooks) {
125
+ # proc {
126
+ # after(:format) { :after_format_impl }
127
+ # skip(:serialize)
128
+ # }
129
+ # }
130
+
131
+ # it 'should insert the hooks' do
132
+ # expect(runner.steps.map(&:first)).to eql [
133
+ # :map, :format, :after_format, :primitivize
134
+ # ]
135
+ # end
136
+
137
+ # it 'should pass on unchanged steps' do
138
+ # expect(runner.steps.assoc(:map)[1]).to eql runner.mapper
139
+ # end
140
+ # end
@@ -1,5 +1,3 @@
1
- require 'spec_helper'
2
-
3
1
  RSpec.describe Yaks::Primitivize do
4
2
  subject(:primitivizer) { described_class.create }
5
3
 
@@ -1,5 +1,3 @@
1
- require 'spec_helper'
2
-
3
1
  RSpec.describe Yaks::Resource::Link do
4
2
  subject(:link) { described_class.new(rel: rel, uri: uri, options: options) }
5
3
 
@@ -1,5 +1,3 @@
1
- require 'spec_helper'
2
-
3
1
  RSpec.describe Yaks::Resource do
4
2
  subject(:resource) { described_class.new(init_opts) }
5
3
  let(:init_opts) { {} }
@@ -72,10 +70,10 @@ RSpec.describe Yaks::Resource do
72
70
  it 'should do updates without modifying the original' do
73
71
  expect(
74
72
  resource
75
- .update_attributes(foo: :bar)
73
+ .merge_attributes(foo: :bar)
76
74
  .add_link(:a_link)
77
75
  .add_subresource(:a_subresource)
78
- .update_attributes(foo: :baz)
76
+ .merge_attributes(foo: :baz)
79
77
  ).to eq Yaks::Resource.new(
80
78
  attributes: {x: :y, foo: :baz},
81
79
  links: [:one, :a_link],
@@ -1,20 +1,19 @@
1
- require 'spec_helper'
2
-
3
1
  RSpec.describe Yaks::Runner do
4
2
  subject(:runner) {
5
3
  described_class.new(object: object, config: config, options: options)
6
4
  }
7
5
 
8
6
  let(:object) { Object.new }
9
- let(:config) { Yaks::Config.new }
7
+ let(:config) { Yaks.new }
10
8
  let(:options) { {} }
11
9
 
12
- describe '#call' do
10
+ shared_examples 'high-level runner test' do
11
+ let(:options) { {env: {foo: "from_env"}} }
13
12
  let(:runner) {
14
13
  Class.new(described_class) do
15
14
  def steps
16
15
  [ [:step1, proc { |x| x + 35 }],
17
- [:step2, proc { |x| "#{x} #{x}" }] ]
16
+ [:step2, proc { |x, env| "#{env[:foo]}[#{x} #{x}]" }] ]
18
17
  end
19
18
  end.new(object: object, config: config, options: options)
20
19
  }
@@ -22,10 +21,18 @@ RSpec.describe Yaks::Runner do
22
21
  let(:object) { 7 }
23
22
 
24
23
  it 'should go through all the steps' do
25
- expect(runner.call).to eql "42 42"
24
+ expect(runner.call).to eql "from_env[42 42]"
26
25
  end
27
26
  end
28
27
 
28
+ describe '#call' do
29
+ include_examples 'high-level runner test'
30
+ end
31
+
32
+ describe '#process' do
33
+ include_examples 'high-level runner test'
34
+ end
35
+
29
36
  describe '#context' do
30
37
  it 'should contain the policy, env, and an empty mapper_stack' do
31
38
  expect(runner.context).to eql(policy: config.policy, env: {}, mapper_stack: [])
@@ -42,7 +49,7 @@ RSpec.describe Yaks::Runner do
42
49
 
43
50
  describe '#format_class' do
44
51
  let(:config) do
45
- Yaks::Config.new do
52
+ Yaks.new do
46
53
  default_format :collection_json
47
54
  end
48
55
  end
@@ -89,7 +96,7 @@ RSpec.describe Yaks::Runner do
89
96
  end
90
97
 
91
98
  context 'with a default format specified' do
92
- let(:config) { Yaks::Config.new { default_format :collection_json } }
99
+ let(:config) { Yaks.new { default_format :collection_json } }
93
100
 
94
101
  context 'with a format in the options' do
95
102
  let(:options) { { format: :json_api } }
@@ -108,7 +115,7 @@ RSpec.describe Yaks::Runner do
108
115
 
109
116
  describe '#formatter' do
110
117
  let(:config) {
111
- Yaks::Config.new do
118
+ Yaks.new do
112
119
  default_format :json_api
113
120
  format_options :json_api, {format_option: [:foo]}
114
121
  end
@@ -142,69 +149,6 @@ RSpec.describe Yaks::Runner do
142
149
  end
143
150
  end
144
151
 
145
- describe '#insert_hooks' do
146
- let(:options) { { mapper: Yaks::Mapper } }
147
- let(:config) { Yaks::Config.new(&hooks) }
148
-
149
- describe 'before' do
150
- let(:hooks) { proc { before(:map) { :before_map_impl } } }
151
-
152
- it 'should insert a hook before the step' do
153
- expect(runner.steps.map(&:first)).to eql [
154
- :before_map, :map, :format, :primitivize, :serialize
155
- ]
156
- expect(runner.steps.assoc(:before_map).last.call).to be :before_map_impl
157
- end
158
- end
159
-
160
- describe 'after' do
161
- let(:hooks) { proc { after(:format) { :after_format_impl } } }
162
-
163
- it 'should insert a hook after the step' do
164
- expect(runner.steps.map(&:first)).to eql [
165
- :map, :format, :after_format, :primitivize, :serialize
166
- ]
167
- expect(runner.steps.assoc(:after_format).last.call).to be :after_format_impl
168
- end
169
- end
170
-
171
- describe 'around' do
172
- let(:hooks) { proc { around(:format) { :around_format_impl } } }
173
-
174
- it 'should insert a hook around the step' do
175
- expect(runner.steps.map(&:first)).to eql [
176
- :map, :format, :primitivize, :serialize
177
- ]
178
- expect(runner.steps.assoc(:format).last.call(nil, nil)).to be :around_format_impl
179
- end
180
- end
181
-
182
- describe 'around' do
183
- let(:hooks) { proc { skip(:serialize) } }
184
-
185
- it 'should insert a hook before the step' do
186
- expect(runner.steps.map(&:first)).to eql [
187
- :map, :format, :primitivize
188
- ]
189
- end
190
- end
191
-
192
- describe 'multiple hooks' do
193
- let(:hooks) {
194
- proc {
195
- after(:format) { :after_format_impl }
196
- skip(:serialize)
197
- }
198
- }
199
-
200
- it 'should insert the hooks' do
201
- expect(runner.steps.map(&:first)).to eql [
202
- :map, :format, :after_format, :primitivize
203
- ]
204
- end
205
- end
206
- end
207
-
208
152
  describe '#mapper' do
209
153
  context 'with an explicit mapper in the options' do
210
154
  let(:mapper_class) { Class.new(Yaks::Mapper) }
@@ -231,8 +175,8 @@ RSpec.describe Yaks::Runner do
231
175
  describe '#serializer' do
232
176
  context 'with a serializer configured' do
233
177
  let(:config) {
234
- Yaks::Config.new do
235
- json_serializer do |input|
178
+ Yaks.new do
179
+ serializer(:json) do |input|
236
180
  "serialized #{input}"
237
181
  end
238
182
  end
@@ -259,24 +203,12 @@ RSpec.describe Yaks::Runner do
259
203
  [ :serialize, runner.serializer ]
260
204
  ]
261
205
  end
262
-
263
- context 'with hooks' do
264
- let(:config) {
265
- Yaks::Config.new do
266
- after(:format, :my_hook) { :foo }
267
- end
268
- }
269
-
270
- it 'should insert hooks' do
271
- expect(runner.steps.map(&:first)).to eql [:map, :format, :my_hook, :primitivize, :serialize]
272
- end
273
- end
274
206
  end
275
207
 
276
208
  describe '#primitivizer' do
277
209
  describe 'with a non json based format' do
278
210
  let(:config) do
279
- Yaks::Config.new do
211
+ Yaks.new do
280
212
  default_format :html
281
213
  end
282
214
  end
@@ -294,11 +226,9 @@ RSpec.describe Yaks::Runner do
294
226
  end
295
227
 
296
228
  describe '#hooks' do
297
- before do
298
- Yaks::Config::DSL.new(config) do
299
- after(:map, :this_happens_after_map)
300
- end
301
- end
229
+ let(:config) {
230
+ super().after(:map, :this_happens_after_map)
231
+ }
302
232
 
303
233
  it 'should contain the hooks from the config' do
304
234
  expect(runner.hooks).to eql [[:after, :map, :this_happens_after_map, nil]]
@@ -313,4 +243,34 @@ RSpec.describe Yaks::Runner do
313
243
  end
314
244
  end
315
245
 
246
+ describe '#map' do
247
+ let(:mapper_class) do
248
+ Struct.new(:options) do
249
+ include Yaks::FP::Callable
250
+ def call(obj, env) "mapped[#{obj}]" end
251
+ end
252
+ end
253
+
254
+ let(:options) { { mapper: mapper_class } }
255
+ let(:object) { "foo" }
256
+
257
+ it 'should only run the mapper' do
258
+ expect(runner.map).to eql "mapped[foo]"
259
+ end
260
+
261
+ context 'with a hook on the :map step' do
262
+ let(:config) do
263
+ Yaks.new do
264
+ around(:map) do |res, env, &block|
265
+ "around[#{block.call(res, env)}]"
266
+ end
267
+ end
268
+ end
269
+
270
+ it 'should invoke the hook as well' do
271
+ expect(runner.map).to eql "around[mapped[foo]]"
272
+ end
273
+ end
274
+ end
275
+
316
276
  end
@@ -1,5 +1,3 @@
1
- require 'spec_helper'
2
-
3
1
  RSpec.describe Yaks::Serializer do
4
2
  after do
5
3
  Yaks::Serializer.instance_variable_set("@serializers", nil)
@@ -1,5 +1,3 @@
1
- require 'spec_helper'
2
-
3
1
  RSpec.describe Yaks::Util do
4
2
  include Yaks::Util
5
3
 
@@ -55,6 +53,18 @@ RSpec.describe Yaks::Util do
55
53
  end
56
54
  end
57
55
 
56
+ describe '#extract_options' do
57
+ it 'should extract a final hash' do
58
+ args, opts = extract_options([:a, :b, {hello: :world}])
59
+ expect([args, opts]).to eql [[:a, :b], {hello: :world}]
60
+ end
61
+
62
+ it 'should provide an empty hash if none was given' do
63
+ args, opts = extract_options([:a, :b])
64
+ expect([args, opts]).to eql [[:a, :b], {}]
65
+ end
66
+ end
67
+
58
68
  end
59
69
 
60
70
  RSpec.describe Yaks::Util::Deprecated do
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.7.7
4
+ version: 0.8.0.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arne Brasseur
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-02 00:00:00.000000000 Z
11
+ date: 2014-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: inflection
@@ -242,16 +242,17 @@ extensions: []
242
242
  extra_rdoc_files:
243
243
  - README.md
244
244
  files:
245
+ - ".rspec"
245
246
  - README.md
246
247
  - Rakefile
247
248
  - lib/yaks.rb
248
249
  - lib/yaks/attributes.rb
249
250
  - lib/yaks/breaking_changes.rb
251
+ - lib/yaks/builder.rb
250
252
  - lib/yaks/changelog.rb
251
253
  - lib/yaks/collection_mapper.rb
252
254
  - lib/yaks/collection_resource.rb
253
255
  - lib/yaks/config.rb
254
- - lib/yaks/config/dsl.rb
255
256
  - lib/yaks/configurable.rb
256
257
  - lib/yaks/default_policy.rb
257
258
  - lib/yaks/errors.rb
@@ -263,31 +264,40 @@ files:
263
264
  - lib/yaks/fp.rb
264
265
  - lib/yaks/fp/callable.rb
265
266
  - lib/yaks/html5_forms.rb
267
+ - lib/yaks/identifier/link_relation.rb
266
268
  - lib/yaks/mapper.rb
267
269
  - lib/yaks/mapper/association.rb
268
270
  - lib/yaks/mapper/association_mapper.rb
269
271
  - lib/yaks/mapper/attribute.rb
270
- - lib/yaks/mapper/class_methods.rb
271
272
  - lib/yaks/mapper/config.rb
272
273
  - lib/yaks/mapper/form.rb
274
+ - lib/yaks/mapper/form/config.rb
273
275
  - lib/yaks/mapper/form/field.rb
276
+ - lib/yaks/mapper/form/field/option.rb
277
+ - lib/yaks/mapper/form/fieldset.rb
274
278
  - lib/yaks/mapper/has_many.rb
275
279
  - lib/yaks/mapper/has_one.rb
276
280
  - lib/yaks/mapper/link.rb
277
281
  - lib/yaks/null_resource.rb
282
+ - lib/yaks/pipeline.rb
278
283
  - lib/yaks/primitivize.rb
284
+ - lib/yaks/reader/hal.rb
279
285
  - lib/yaks/resource.rb
280
286
  - lib/yaks/resource/form.rb
287
+ - lib/yaks/resource/form/field.rb
288
+ - lib/yaks/resource/form/fieldset.rb
281
289
  - lib/yaks/resource/link.rb
282
290
  - lib/yaks/runner.rb
283
291
  - lib/yaks/serializer.rb
284
- - lib/yaks/stateful_builder.rb
285
292
  - lib/yaks/util.rb
286
293
  - lib/yaks/version.rb
294
+ - resources/iana-link-relations.csv
287
295
  - spec/acceptance/acceptance_spec.rb
288
296
  - spec/acceptance/json_shared_examples.rb
289
297
  - spec/acceptance/models.rb
290
298
  - spec/fixture_helpers.rb
299
+ - spec/integration/dynamic_form_fields_spec.rb
300
+ - spec/integration/fieldset_spec.rb
291
301
  - spec/integration/map_to_resource_spec.rb
292
302
  - spec/json/confucius.collection.json
293
303
  - spec/json/confucius.hal.json
@@ -309,11 +319,10 @@ files:
309
319
  - spec/support/shared_contexts.rb
310
320
  - spec/support/youtypeit_models_mappers.rb
311
321
  - spec/unit/yaks/attributes_spec.rb
322
+ - spec/unit/yaks/builder_spec.rb
312
323
  - spec/unit/yaks/collection_mapper_spec.rb
313
324
  - spec/unit/yaks/collection_resource_spec.rb
314
- - spec/unit/yaks/config/dsl_spec.rb
315
325
  - spec/unit/yaks/config_spec.rb
316
- - spec/unit/yaks/configurable_spec.rb
317
326
  - spec/unit/yaks/default_policy/derive_mapper_from_object_spec.rb
318
327
  - spec/unit/yaks/default_policy_spec.rb
319
328
  - spec/unit/yaks/format/collection_json_spec.rb
@@ -327,7 +336,6 @@ files:
327
336
  - spec/unit/yaks/mapper/association_mapper_spec.rb
328
337
  - spec/unit/yaks/mapper/association_spec.rb
329
338
  - spec/unit/yaks/mapper/attribute_spec.rb
330
- - spec/unit/yaks/mapper/class_methods_spec.rb
331
339
  - spec/unit/yaks/mapper/config_spec.rb
332
340
  - spec/unit/yaks/mapper/form/field_spec.rb
333
341
  - spec/unit/yaks/mapper/form_spec.rb
@@ -336,12 +344,12 @@ files:
336
344
  - spec/unit/yaks/mapper/link_spec.rb
337
345
  - spec/unit/yaks/mapper_spec.rb
338
346
  - spec/unit/yaks/null_resource_spec.rb
347
+ - spec/unit/yaks/pipeline_spec.rb
339
348
  - spec/unit/yaks/primitivize_spec.rb
340
349
  - spec/unit/yaks/resource/link_spec.rb
341
350
  - spec/unit/yaks/resource_spec.rb
342
351
  - spec/unit/yaks/runner_spec.rb
343
352
  - spec/unit/yaks/serializer_spec.rb
344
- - spec/unit/yaks/stateful_builder_spec.rb
345
353
  - spec/unit/yaks/util_spec.rb
346
354
  - spec/yaml/confucius.yaml
347
355
  - spec/yaml/youtypeitwepostit.yaml
@@ -351,18 +359,45 @@ licenses:
351
359
  - MIT
352
360
  metadata:
353
361
  changelog: |-
354
- General extension and improvements to form handling.
362
+ Improved Collection+JSON support, dynamically generated form fields.
355
363
 
356
- Add top level links in Collection+JSON (Carles Jove i Buxeda)
364
+ #### Collection+JSON
357
365
 
358
- The mapper DSL method "control" has been renamed to "form". There is a
359
- deprecated alias available.
366
+ Carles Jove i Buxeda has done some great work to improve support for Collection+JSON, GET forms are now rendered as CJ queries.
360
367
 
361
- Add Yaks::Resource#find_form for querying a resource for an embedded
362
- form by name.
368
+ #### Dynamic Form Fields
363
369
 
364
- Introduce yaks.map() so you can only call the mapping step without
365
- running the whole pipeline.
370
+ A new introduction are "dynamic" form fields. Up to now it was hard to generate forms based on the object being serialized. Now it's possible to add dynamic sections to a Form definition. These will be evaluated at map-time, they receive the object being mapped, and inside the syntax for defining form fields can be used.
371
+
372
+ ```
373
+ form :checkout do
374
+ text :name
375
+ text :lastname
376
+
377
+ dynamic do |object|
378
+ object.shipping_options.each do |shipping|
379
+ radio shipping.type_name, title: shipping.description
380
+ end
381
+ end
382
+ end
383
+ ```
384
+
385
+ #### Fieldset and Legend
386
+
387
+ Support for the fieldset element type has been added, which works as you would expect
388
+
389
+ ```
390
+ form :foo do
391
+ fieldset do
392
+ legend "Hello"
393
+ text :field_1
394
+ end
395
+ end
396
+ ```
397
+
398
+ #### Remove links
399
+
400
+ A link de
366
401
  post_install_message:
367
402
  rdoc_options: []
368
403
  require_paths:
@@ -374,9 +409,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
374
409
  version: '0'
375
410
  required_rubygems_version: !ruby/object:Gem::Requirement
376
411
  requirements:
377
- - - ">="
412
+ - - ">"
378
413
  - !ruby/object:Gem::Version
379
- version: '0'
414
+ version: 1.3.1
380
415
  requirements: []
381
416
  rubyforge_project:
382
417
  rubygems_version: 2.2.2
@@ -388,6 +423,8 @@ test_files:
388
423
  - spec/acceptance/json_shared_examples.rb
389
424
  - spec/acceptance/models.rb
390
425
  - spec/fixture_helpers.rb
426
+ - spec/integration/dynamic_form_fields_spec.rb
427
+ - spec/integration/fieldset_spec.rb
391
428
  - spec/integration/map_to_resource_spec.rb
392
429
  - spec/json/confucius.collection.json
393
430
  - spec/json/confucius.hal.json
@@ -409,11 +446,10 @@ test_files:
409
446
  - spec/support/shared_contexts.rb
410
447
  - spec/support/youtypeit_models_mappers.rb
411
448
  - spec/unit/yaks/attributes_spec.rb
449
+ - spec/unit/yaks/builder_spec.rb
412
450
  - spec/unit/yaks/collection_mapper_spec.rb
413
451
  - spec/unit/yaks/collection_resource_spec.rb
414
- - spec/unit/yaks/config/dsl_spec.rb
415
452
  - spec/unit/yaks/config_spec.rb
416
- - spec/unit/yaks/configurable_spec.rb
417
453
  - spec/unit/yaks/default_policy/derive_mapper_from_object_spec.rb
418
454
  - spec/unit/yaks/default_policy_spec.rb
419
455
  - spec/unit/yaks/format/collection_json_spec.rb
@@ -427,7 +463,6 @@ test_files:
427
463
  - spec/unit/yaks/mapper/association_mapper_spec.rb
428
464
  - spec/unit/yaks/mapper/association_spec.rb
429
465
  - spec/unit/yaks/mapper/attribute_spec.rb
430
- - spec/unit/yaks/mapper/class_methods_spec.rb
431
466
  - spec/unit/yaks/mapper/config_spec.rb
432
467
  - spec/unit/yaks/mapper/form/field_spec.rb
433
468
  - spec/unit/yaks/mapper/form_spec.rb
@@ -436,12 +471,12 @@ test_files:
436
471
  - spec/unit/yaks/mapper/link_spec.rb
437
472
  - spec/unit/yaks/mapper_spec.rb
438
473
  - spec/unit/yaks/null_resource_spec.rb
474
+ - spec/unit/yaks/pipeline_spec.rb
439
475
  - spec/unit/yaks/primitivize_spec.rb
440
476
  - spec/unit/yaks/resource/link_spec.rb
441
477
  - spec/unit/yaks/resource_spec.rb
442
478
  - spec/unit/yaks/runner_spec.rb
443
479
  - spec/unit/yaks/serializer_spec.rb
444
- - spec/unit/yaks/stateful_builder_spec.rb
445
480
  - spec/unit/yaks/util_spec.rb
446
481
  - spec/yaml/confucius.yaml
447
482
  - spec/yaml/youtypeitwepostit.yaml