reform 2.3.3 → 2.6.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.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +17 -0
  3. data/.gitignore +1 -1
  4. data/CHANGES.md +15 -0
  5. data/Gemfile +1 -1
  6. data/LICENSE.txt +1 -1
  7. data/README.md +5 -5
  8. data/Rakefile +1 -12
  9. data/lib/reform/contract/validate.rb +1 -1
  10. data/lib/reform/form/dry.rb +47 -9
  11. data/lib/reform/form/populator.rb +13 -3
  12. data/lib/reform/form/prepopulate.rb +1 -1
  13. data/lib/reform/form/validate.rb +3 -3
  14. data/lib/reform/validation/groups.rb +0 -1
  15. data/lib/reform/version.rb +1 -1
  16. data/reform.gemspec +2 -2
  17. data/test/call_test.rb +23 -0
  18. data/test/changed_test.rb +6 -6
  19. data/test/coercion_test.rb +17 -17
  20. data/test/{composition_new_api.rb → composition_test.rb} +27 -28
  21. data/test/{contract_new_api.rb → contract_test.rb} +8 -8
  22. data/test/default_test.rb +2 -2
  23. data/test/deserialize_test.rb +8 -8
  24. data/test/docs/validation_test.rb +134 -0
  25. data/test/{errors_new_api.rb → errors_test.rb} +41 -41
  26. data/test/feature_test.rb +2 -2
  27. data/test/fixtures/dry_error_messages.yml +64 -54
  28. data/test/{form_option_new_api.rb → form_option_test.rb} +1 -1
  29. data/test/{form_new_api.rb → form_test.rb} +3 -3
  30. data/test/from_test.rb +10 -10
  31. data/test/{inherit_new_api.rb → inherit_test.rb} +17 -17
  32. data/test/{module_new_api.rb → module_test.rb} +10 -10
  33. data/test/parse_option_test.rb +7 -7
  34. data/test/parse_pipeline_test.rb +1 -1
  35. data/test/{populate_new_api.rb → populate_test.rb} +136 -53
  36. data/test/populator_skip_test.rb +2 -2
  37. data/test/prepopulator_test.rb +16 -16
  38. data/test/read_only_test.rb +2 -2
  39. data/test/readable_test.rb +3 -3
  40. data/test/{reform_new_api.rb → reform_test.rb} +19 -19
  41. data/test/{save_new_api.rb → save_test.rb} +4 -4
  42. data/test/setup_test.rb +9 -9
  43. data/test/{skip_if_new_api.rb → skip_if_test.rb} +12 -12
  44. data/test/skip_setter_and_getter_test.rb +6 -6
  45. data/test/test_helper.rb +5 -6
  46. data/test/{validate_new_api.rb → validate_test.rb} +65 -78
  47. data/test/validation/{dry_validation_new_api.rb → dry_validation_test.rb} +124 -123
  48. data/test/validation/result_test.rb +14 -14
  49. data/test/virtual_test.rb +7 -7
  50. data/test/writeable_test.rb +8 -8
  51. metadata +43 -82
  52. data/.travis.yml +0 -16
  53. data/Appraisals +0 -8
  54. data/gemfiles/0.13.0.gemfile +0 -8
  55. data/gemfiles/1.5.0.gemfile +0 -9
  56. data/lib/reform/form/dry/new_api.rb +0 -45
  57. data/lib/reform/form/dry/old_api.rb +0 -61
  58. data/test/call_new_api.rb +0 -23
  59. data/test/call_old_api.rb +0 -23
  60. data/test/composition_old_api.rb +0 -184
  61. data/test/contract_old_api.rb +0 -77
  62. data/test/errors_old_api.rb +0 -230
  63. data/test/fixtures/dry_new_api_error_messages.yml +0 -104
  64. data/test/form_old_api.rb +0 -57
  65. data/test/form_option_old_api.rb +0 -24
  66. data/test/inherit_old_api.rb +0 -105
  67. data/test/module_old_api.rb +0 -146
  68. data/test/populate_old_api.rb +0 -304
  69. data/test/reform_old_api.rb +0 -202
  70. data/test/save_old_api.rb +0 -101
  71. data/test/skip_if_old_api.rb +0 -92
  72. data/test/validate_old_api.rb +0 -410
  73. data/test/validation/dry_validation_old_api.rb +0 -772
@@ -11,10 +11,10 @@ class ErrorsResultTest < Minitest::Spec
11
11
  let(:failed) { MyResult.new(false) }
12
12
  let(:succeeded) { MyResult.new(true) }
13
13
 
14
- it { _(Reform::Contract::Result.new([failed, failed]).success?).must_equal false }
15
- it { _(Reform::Contract::Result.new([succeeded, failed]).success?).must_equal false }
16
- it { _(Reform::Contract::Result.new([failed, succeeded]).success?).must_equal false }
17
- it { _(Reform::Contract::Result.new([succeeded, succeeded]).success?).must_equal true }
14
+ it { assert_equal Reform::Contract::Result.new([failed, failed]).success?, false }
15
+ it { assert_equal Reform::Contract::Result.new([succeeded, failed]).success?, false }
16
+ it { assert_equal Reform::Contract::Result.new([failed, succeeded]).success?, false }
17
+ it { assert Reform::Contract::Result.new([succeeded, succeeded]).success? }
18
18
  end
19
19
 
20
20
  describe "Contract::Result#errors" do
@@ -27,7 +27,7 @@ class ErrorsResultTest < Minitest::Spec
27
27
  ]
28
28
  end
29
29
 
30
- it { _(Reform::Contract::Result.new(results).errors).must_equal({title: ["must be filled", "something more"], length: ["no Int"]}) }
30
+ it { assert_equal Reform::Contract::Result.new(results).errors, {title: ["must be filled", "something more"], length: ["no Int"]} }
31
31
  end
32
32
 
33
33
  describe "Result::Pointer" do
@@ -44,24 +44,24 @@ class ErrorsResultTest < Minitest::Spec
44
44
  end
45
45
 
46
46
  let(:top) { Reform::Contract::Result::Pointer.new(MyResult.new(false, errors), []) }
47
- it { _(top.success?).must_equal false }
48
- it { _(top.errors).must_equal errors }
47
+ it { assert_equal top.success?, false }
48
+ it { assert_equal top.errors, errors }
49
49
 
50
50
  let(:artist) { Reform::Contract::Result::Pointer.new(MyResult.new(false, errors), [:artist]) }
51
- it { _(artist.success?).must_equal false }
52
- it { _(artist.errors).must_equal({age: ["too old"], bands: {0 => {name: "too new school"}, 1 => {name: "too boring"}}}) }
51
+ it { assert_equal artist.success?, false }
52
+ it { assert_equal artist.errors,({age: ["too old"], bands: {0 => {name: "too new school"}, 1 => {name: "too boring"}}}) }
53
53
 
54
54
  let(:band) { Reform::Contract::Result::Pointer.new(MyResult.new(false, errors), [:artist, :bands, 1]) }
55
- it { _(band.success?).must_equal false }
56
- it { _(band.errors).must_equal({name: "too boring"}) }
55
+ it { assert_equal band.success?, false }
56
+ it { assert_equal band.errors,({name: "too boring"}) }
57
57
 
58
58
  describe "advance" do
59
59
  let(:advanced) { artist.advance(:bands, 1) }
60
60
 
61
- it { _(advanced.success?).must_equal false }
62
- it { _(advanced.errors).must_equal({name: "too boring"}) }
61
+ it { assert_equal advanced.success?, false }
62
+ it { assert_equal advanced.errors,({name: "too boring"}) }
63
63
 
64
- it { _(artist.advance(%i[absolute nonsense])).must_be_nil }
64
+ it { assert_nil artist.advance(%i[absolute nonsense]) }
65
65
  end
66
66
  end
67
67
  end
data/test/virtual_test.rb CHANGED
@@ -13,8 +13,8 @@ class VirtualTest < MiniTest::Spec
13
13
  it {
14
14
  form.validate(credit_card_number: "123", transactions: [id: 1])
15
15
 
16
- _(form.credit_card_number).must_equal "123" # this is still readable in the UI.
17
- _(form.transactions.first.id).must_equal 1 # this is still readable in the UI.
16
+ assert_equal form.credit_card_number, "123" # this is still readable in the UI.
17
+ assert_equal form.transactions.first.id, 1 # this is still readable in the UI.
18
18
 
19
19
  form.sync
20
20
 
@@ -23,7 +23,7 @@ class VirtualTest < MiniTest::Spec
23
23
  hash = nested
24
24
  end
25
25
 
26
- _(hash).must_equal("credit_card_number" => "123", "transactions" => ["id" => 1])
26
+ assert_equal hash, "credit_card_number" => "123", "transactions" => ["id" => 1]
27
27
  }
28
28
  end
29
29
 
@@ -49,16 +49,16 @@ class VirtualAndDefaultTest < MiniTest::Spec
49
49
  form = CreditCardForm.new(Object.new)
50
50
  form.validate({})
51
51
 
52
- _(hash(form)).must_equal("credit_card_number" => "123", "transactions" => ["id" => 2])
52
+ assert_equal hash(form), "credit_card_number" => "123", "transactions" => ["id" => 2]
53
53
 
54
54
  form = CreditCardForm.new(Object.new)
55
55
  form.validate(credit_card_number: "123", transactions: [id: 1])
56
56
 
57
- _(form.credit_card_number).must_equal "123" # this is still readable in the UI.
58
- _(form.transactions.first.id).must_equal 1 # this is still readable in the UI.
57
+ assert_equal form.credit_card_number, "123" # this is still readable in the UI.
58
+ assert_equal form.transactions.first.id, 1 # this is still readable in the UI.
59
59
 
60
60
  form.sync
61
61
 
62
- _(hash(form)).must_equal("credit_card_number" => "123", "transactions" => ["id" => 1])
62
+ assert_equal hash(form), "credit_card_number" => "123", "transactions" => ["id" => 1]
63
63
  }
64
64
  end
@@ -11,20 +11,20 @@ class WriteableTest < MiniTest::Spec
11
11
  let(:form) { LocationForm.new(loc) }
12
12
 
13
13
  it do
14
- _(form.country).must_equal "Australia"
14
+ assert_equal form.country, "Australia"
15
15
 
16
16
  form.validate("country" => "Germany") # this usually won't change when submitting.
17
- _(form.country).must_equal "Germany"
17
+ assert_equal form.country, "Germany"
18
18
 
19
19
  form.sync
20
- _(loc.country).must_equal "Australia" # the writer wasn't called.
20
+ assert_equal loc.country, "Australia" # the writer wasn't called.
21
21
 
22
22
  hash = {}
23
23
  form.save do |nested|
24
24
  hash = nested
25
25
  end
26
26
 
27
- _(hash).must_equal("country" => "Germany")
27
+ assert_equal hash, "country" => "Germany"
28
28
  end
29
29
  end
30
30
 
@@ -40,19 +40,19 @@ class WritableTest < MiniTest::Spec
40
40
  let(:form) { LocationForm.new(loc) }
41
41
 
42
42
  it do
43
- _(form.country).must_equal "Australia"
43
+ assert_equal form.country, "Australia"
44
44
 
45
45
  form.validate("country" => "Germany") # this usually won't change when submitting.
46
- _(form.country).must_equal "Germany"
46
+ assert_equal form.country, "Germany"
47
47
 
48
48
  form.sync
49
- _(loc.country).must_equal "Australia" # the writer wasn't called.
49
+ assert_equal loc.country, "Australia" # the writer wasn't called.
50
50
 
51
51
  hash = {}
52
52
  form.save do |nested|
53
53
  hash = nested
54
54
  end
55
55
 
56
- _(hash).must_equal("country" => "Germany")
56
+ assert_equal hash, "country" => "Germany"
57
57
  end
58
58
  end
metadata CHANGED
@@ -1,34 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reform
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.3
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  - Fran Worley
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-07-09 00:00:00.000000000 Z
12
+ date: 2021-04-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: disposable
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
19
- - !ruby/object:Gem::Version
20
- version: 0.4.2
21
- - - "<"
18
+ - - "~>"
22
19
  - !ruby/object:Gem::Version
23
20
  version: 0.5.0
24
21
  type: :runtime
25
22
  prerelease: false
26
23
  version_requirements: !ruby/object:Gem::Requirement
27
24
  requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- version: 0.4.2
31
- - - "<"
25
+ - - "~>"
32
26
  - !ruby/object:Gem::Version
33
27
  version: 0.5.0
34
28
  - !ruby/object:Gem::Dependency
@@ -37,20 +31,20 @@ dependencies:
37
31
  requirements:
38
32
  - - ">="
39
33
  - !ruby/object:Gem::Version
40
- version: 2.4.0
34
+ version: 3.1.1
41
35
  - - "<"
42
36
  - !ruby/object:Gem::Version
43
- version: 3.1.0
37
+ version: 3.2.0
44
38
  type: :runtime
45
39
  prerelease: false
46
40
  version_requirements: !ruby/object:Gem::Requirement
47
41
  requirements:
48
42
  - - ">="
49
43
  - !ruby/object:Gem::Version
50
- version: 2.4.0
44
+ version: 3.1.1
51
45
  - - "<"
52
46
  - !ruby/object:Gem::Version
53
- version: 3.1.0
47
+ version: 3.2.0
54
48
  - !ruby/object:Gem::Dependency
55
49
  name: uber
56
50
  requirement: !ruby/object:Gem::Requirement
@@ -157,9 +151,8 @@ executables: []
157
151
  extensions: []
158
152
  extra_rdoc_files: []
159
153
  files:
154
+ - ".github/workflows/ci.yml"
160
155
  - ".gitignore"
161
- - ".travis.yml"
162
- - Appraisals
163
156
  - CHANGES.md
164
157
  - CONTRIBUTING.md
165
158
  - Gemfile
@@ -168,8 +161,6 @@ files:
168
161
  - README.md
169
162
  - Rakefile
170
163
  - TODO.md
171
- - gemfiles/0.13.0.gemfile
172
- - gemfiles/1.5.0.gemfile
173
164
  - lib/reform.rb
174
165
  - lib/reform/contract.rb
175
166
  - lib/reform/contract/custom_error.rb
@@ -181,8 +172,6 @@ files:
181
172
  - lib/reform/form/composition.rb
182
173
  - lib/reform/form/dry.rb
183
174
  - lib/reform/form/dry/input_hash.rb
184
- - lib/reform/form/dry/new_api.rb
185
- - lib/reform/form/dry/old_api.rb
186
175
  - lib/reform/form/module.rb
187
176
  - lib/reform/form/populator.rb
188
177
  - lib/reform/form/prepopulate.rb
@@ -193,52 +182,38 @@ files:
193
182
  - lib/reform/version.rb
194
183
  - reform.gemspec
195
184
  - test/benchmarking.rb
196
- - test/call_new_api.rb
197
- - test/call_old_api.rb
185
+ - test/call_test.rb
198
186
  - test/changed_test.rb
199
187
  - test/coercion_test.rb
200
- - test/composition_new_api.rb
201
- - test/composition_old_api.rb
188
+ - test/composition_test.rb
202
189
  - test/contract/custom_error_test.rb
203
- - test/contract_new_api.rb
204
- - test/contract_old_api.rb
190
+ - test/contract_test.rb
205
191
  - test/default_test.rb
206
192
  - test/deserialize_test.rb
207
- - test/errors_new_api.rb
208
- - test/errors_old_api.rb
193
+ - test/docs/validation_test.rb
194
+ - test/errors_test.rb
209
195
  - test/feature_test.rb
210
196
  - test/fixtures/dry_error_messages.yml
211
- - test/fixtures/dry_new_api_error_messages.yml
212
- - test/form_new_api.rb
213
- - test/form_old_api.rb
214
- - test/form_option_new_api.rb
215
- - test/form_option_old_api.rb
197
+ - test/form_option_test.rb
198
+ - test/form_test.rb
216
199
  - test/from_test.rb
217
- - test/inherit_new_api.rb
218
- - test/inherit_old_api.rb
219
- - test/module_new_api.rb
220
- - test/module_old_api.rb
200
+ - test/inherit_test.rb
201
+ - test/module_test.rb
221
202
  - test/parse_option_test.rb
222
203
  - test/parse_pipeline_test.rb
223
- - test/populate_new_api.rb
224
- - test/populate_old_api.rb
204
+ - test/populate_test.rb
225
205
  - test/populator_skip_test.rb
226
206
  - test/prepopulator_test.rb
227
207
  - test/read_only_test.rb
228
208
  - test/readable_test.rb
229
- - test/reform_new_api.rb
230
- - test/reform_old_api.rb
231
- - test/save_new_api.rb
232
- - test/save_old_api.rb
209
+ - test/reform_test.rb
210
+ - test/save_test.rb
233
211
  - test/setup_test.rb
234
- - test/skip_if_new_api.rb
235
- - test/skip_if_old_api.rb
212
+ - test/skip_if_test.rb
236
213
  - test/skip_setter_and_getter_test.rb
237
214
  - test/test_helper.rb
238
- - test/validate_new_api.rb
239
- - test/validate_old_api.rb
240
- - test/validation/dry_validation_new_api.rb
241
- - test/validation/dry_validation_old_api.rb
215
+ - test/validate_test.rb
216
+ - test/validation/dry_validation_test.rb
242
217
  - test/validation/result_test.rb
243
218
  - test/validation_library_provided_test.rb
244
219
  - test/virtual_test.rb
@@ -247,7 +222,7 @@ homepage: https://github.com/trailblazer/reform
247
222
  licenses:
248
223
  - MIT
249
224
  metadata: {}
250
- post_install_message:
225
+ post_install_message:
251
226
  rdoc_options: []
252
227
  require_paths:
253
228
  - lib
@@ -262,58 +237,44 @@ required_rubygems_version: !ruby/object:Gem::Requirement
262
237
  - !ruby/object:Gem::Version
263
238
  version: '0'
264
239
  requirements: []
265
- rubygems_version: 3.0.3
266
- signing_key:
240
+ rubygems_version: 3.2.3
241
+ signing_key:
267
242
  specification_version: 4
268
243
  summary: Form object decoupled from models with validation, population and presentation.
269
244
  test_files:
270
245
  - test/benchmarking.rb
271
- - test/call_new_api.rb
272
- - test/call_old_api.rb
246
+ - test/call_test.rb
273
247
  - test/changed_test.rb
274
248
  - test/coercion_test.rb
275
- - test/composition_new_api.rb
276
- - test/composition_old_api.rb
249
+ - test/composition_test.rb
277
250
  - test/contract/custom_error_test.rb
278
- - test/contract_new_api.rb
279
- - test/contract_old_api.rb
251
+ - test/contract_test.rb
280
252
  - test/default_test.rb
281
253
  - test/deserialize_test.rb
282
- - test/errors_new_api.rb
283
- - test/errors_old_api.rb
254
+ - test/docs/validation_test.rb
255
+ - test/errors_test.rb
284
256
  - test/feature_test.rb
285
257
  - test/fixtures/dry_error_messages.yml
286
- - test/fixtures/dry_new_api_error_messages.yml
287
- - test/form_new_api.rb
288
- - test/form_old_api.rb
289
- - test/form_option_new_api.rb
290
- - test/form_option_old_api.rb
258
+ - test/form_option_test.rb
259
+ - test/form_test.rb
291
260
  - test/from_test.rb
292
- - test/inherit_new_api.rb
293
- - test/inherit_old_api.rb
294
- - test/module_new_api.rb
295
- - test/module_old_api.rb
261
+ - test/inherit_test.rb
262
+ - test/module_test.rb
296
263
  - test/parse_option_test.rb
297
264
  - test/parse_pipeline_test.rb
298
- - test/populate_new_api.rb
299
- - test/populate_old_api.rb
265
+ - test/populate_test.rb
300
266
  - test/populator_skip_test.rb
301
267
  - test/prepopulator_test.rb
302
268
  - test/read_only_test.rb
303
269
  - test/readable_test.rb
304
- - test/reform_new_api.rb
305
- - test/reform_old_api.rb
306
- - test/save_new_api.rb
307
- - test/save_old_api.rb
270
+ - test/reform_test.rb
271
+ - test/save_test.rb
308
272
  - test/setup_test.rb
309
- - test/skip_if_new_api.rb
310
- - test/skip_if_old_api.rb
273
+ - test/skip_if_test.rb
311
274
  - test/skip_setter_and_getter_test.rb
312
275
  - test/test_helper.rb
313
- - test/validate_new_api.rb
314
- - test/validate_old_api.rb
315
- - test/validation/dry_validation_new_api.rb
316
- - test/validation/dry_validation_old_api.rb
276
+ - test/validate_test.rb
277
+ - test/validation/dry_validation_test.rb
317
278
  - test/validation/result_test.rb
318
279
  - test/validation_library_provided_test.rb
319
280
  - test/virtual_test.rb
data/.travis.yml DELETED
@@ -1,16 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- bundler_args: --without benchmarks tools
4
- rvm:
5
- - ruby-head
6
- - 2.7
7
- - 2.6
8
- - 2.5
9
- - 2.4
10
- gemfile:
11
- - gemfiles/1.5.0.gemfile
12
- - gemfiles/0.13.0.gemfile
13
- matrix:
14
- fast_finish: true
15
- allow_failures:
16
- - rvm: ruby-head
data/Appraisals DELETED
@@ -1,8 +0,0 @@
1
- appraise "1.5.0" do
2
- gem 'dry-monads', "1.3.5"
3
- gem 'dry-validation', '~> 1.5.0'
4
- end
5
-
6
- appraise "0.13.0" do
7
- gem 'dry-validation', '~> 0.13.0'
8
- end
@@ -1,8 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal", "~> 2.2"
6
- gem "dry-validation", "~> 0.13.0"
7
-
8
- gemspec path: "../"
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal", "~> 2.2"
6
- gem "dry-monads", "1.3.5"
7
- gem "dry-validation", "~> 1.5.0"
8
-
9
- gemspec path: "../"
@@ -1,45 +0,0 @@
1
- ::Dry::Validation.load_extensions(:hints)
2
-
3
- module Reform::Form::Dry
4
- module NewApi
5
-
6
- class Contract < ::Dry::Validation::Contract
7
- end
8
-
9
- module Validations
10
- module ClassMethods
11
- def validation_group_class
12
- Group
13
- end
14
- end
15
-
16
- def self.included(includer)
17
- includer.extend(ClassMethods)
18
- end
19
-
20
- class Group
21
- include InputHash
22
-
23
- def initialize(**options)
24
- @validator = options.fetch(:contract, Contract)
25
- @schema_inject_params = options.fetch(:with, {})
26
- end
27
-
28
- attr_reader :validator, :schema_inject_params, :block
29
-
30
- def instance_exec(&block)
31
- @block = block
32
- end
33
-
34
- def call(form)
35
- return validator.call(input_hash(form)) unless validator.is_a?(Class) && @validator <= ::Dry::Validation::Contract
36
-
37
- dynamic_options = { form: form }
38
- inject_options = schema_inject_params.merge(dynamic_options)
39
-
40
- validator.build(inject_options, &block).call(input_hash(form))
41
- end
42
- end
43
- end
44
- end
45
- end