dry-validation 0.10.6 → 0.10.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dd5d68508f5fa5b7d4b7331bb8093c473fe11823
4
- data.tar.gz: ff357d71bd301ff4f2dc5d547ce6f8e7479598ae
3
+ metadata.gz: c541af293c9c16eeda5e2b2e61b7cf197e8256f9
4
+ data.tar.gz: e908b607bb27514a3468fdac766a1bb6e3fc313e
5
5
  SHA512:
6
- metadata.gz: a1e29c2a839f6f268a80457fff0f769b34f388baccbbd589a6eb626b96604d62cedda0b5d1c21d4ffe77322e5ab9778a672cb3b42d2e6bcc5fbc113cf25fafee
7
- data.tar.gz: 61f5cced9577c019354ae762c5a22596e1d1767f2384539adf8ce8647ce552cc5077363dc1b72ef95a59fd46abe72d2e16523d7e21443d88c01926ddfab70d8a
6
+ metadata.gz: 253b0c4d98f7ec104a9032956cc7a2354702cef2ad99229526cb67cdca9d593cffcce0f667ec41f5a02000295e720edd2050d86056e306b32c6142b36564d0d8
7
+ data.tar.gz: ca229c8ea5abaf7a832c94103098dd32b9e091f8e67526e4b75956d8e65b34bd5e9c5cecf2a9500a7ac28e67f9ece6cb3490e7bfac46f30edc17fbd6560c5aa2
@@ -1,10 +1,19 @@
1
+ # v0.10.7 2017-05-15
2
+
3
+ ### Fixed
4
+
5
+ * `validate` can now be defined multiple times for the same key (kimquy)
6
+ * Re-using rules between schemas no longer mutates original rule set (pabloh)
7
+
8
+ [Compare v0.10.6...v0.10.7](https://github.com/dry-rb/dry-validation/compare/v0.10.6...v0.10.7)
9
+
1
10
  # v0.10.6 2017-04-26
2
11
 
3
12
  ### Fixed
4
13
 
5
14
  * Fixes issue with wrong localized error messages when namespaced messages are used (kbredemeier)
6
15
 
7
- [Compare v0.10.5...v0.10.6](https://github.com/dryrb/dry-validation/compare/v0.10.5...v0.10.6)
16
+ [Compare v0.10.5...v0.10.6](https://github.com/dry-rb/dry-validation/compare/v0.10.5...v0.10.6)
8
17
 
9
18
  # v0.10.5 2017-01-12
10
19
 
@@ -12,7 +21,7 @@
12
21
 
13
22
  * Warnings under MRI 2.4.0 are gone (koic)
14
23
 
15
- [Compare v0.10.4...v0.10.5](https://github.com/dryrb/dry-validation/compare/v0.10.4...v0.10.5)
24
+ [Compare v0.10.4...v0.10.5](https://github.com/dry-rb/dry-validation/compare/v0.10.4...v0.10.5)
16
25
 
17
26
  # v0.10.4 2016-12-03
18
27
 
@@ -25,7 +34,7 @@
25
34
 
26
35
  * `version` file is now required by default (georgemillo)
27
36
 
28
- [Compare v0.10.3...v0.10.4](https://github.com/dryrb/dry-validation/compare/v0.10.3...v0.10.4)
37
+ [Compare v0.10.3...v0.10.4](https://github.com/dry-rb/dry-validation/compare/v0.10.3...v0.10.4)
29
38
 
30
39
  # v0.10.3 2016-09-27
31
40
 
@@ -33,7 +42,7 @@
33
42
 
34
43
  * Custom predicates work correctly with `each` macro (solnic)
35
44
 
36
- [Compare v0.10.2...v0.10.3](https://github.com/dryrb/dry-validation/compare/v0.10.2...v0.10.3)
45
+ [Compare v0.10.2...v0.10.3](https://github.com/dry-rb/dry-validation/compare/v0.10.2...v0.10.3)
37
46
 
38
47
  # v0.10.2 2016-09-23
39
48
 
@@ -41,7 +50,7 @@
41
50
 
42
51
  * Constrained types + hints work again (solnic)
43
52
 
44
- [Compare v0.10.1...v0.10.2](https://github.com/dryrb/dry-validation/compare/v0.10.1...v0.10.2)
53
+ [Compare v0.10.1...v0.10.2](https://github.com/dry-rb/dry-validation/compare/v0.10.1...v0.10.2)
45
54
 
46
55
  # v0.10.1 2016-09-22
47
56
 
@@ -49,7 +58,7 @@
49
58
 
50
59
  * Remove obsolete require of `dry/struct` which is now an optional extension (flash-gordon)
51
60
 
52
- [Compare v0.10.0...v0.10.1](https://github.com/dryrb/dry-validation/compare/v0.10.0...v0.10.1)
61
+ [Compare v0.10.0...v0.10.1](https://github.com/dry-rb/dry-validation/compare/v0.10.0...v0.10.1)
53
62
 
54
63
  # v0.10.0 2016-09-21
55
64
 
@@ -82,7 +91,7 @@
82
91
  * `HintCompiler` is gone as hints are now part of the result AST (solnic)
83
92
  * `maybe` macro creates an implication instead of a disjunction (`not(none?).then(*your-predicates)`) (solnic)
84
93
 
85
- [Compare v0.9.5...v0.10.0](https://github.com/dryrb/dry-validation/compare/v0.9.5...v0.10.0)
94
+ [Compare v0.9.5...v0.10.0](https://github.com/dry-rb/dry-validation/compare/v0.9.5...v0.10.0)
86
95
 
87
96
  # v0.9.5 2016-08-16
88
97
 
@@ -91,7 +100,7 @@
91
100
  * Infering multiple predicates with options works as expected ie `value(:str?, min_size?: 3, max_size?: 6)` (solnic)
92
101
  * Default `locale` configured in `I18n` is now respected by the messages compiler (agustin + cavi21)
93
102
 
94
- [Compare v0.9.4...v0.9.5](https://github.com/dryrb/dry-validation/compare/v0.9.4...v0.9.5)
103
+ [Compare v0.9.4...v0.9.5](https://github.com/dry-rb/dry-validation/compare/v0.9.4...v0.9.5)
95
104
 
96
105
  # v0.9.4 2016-08-11
97
106
 
@@ -99,7 +108,7 @@
99
108
 
100
109
  * Error messages for sibling deeply nested schemas are nested correctly (timriley)
101
110
 
102
- [Compare v0.9.3...v0.9.4](https://github.com/dryrb/dry-validation/compare/v0.9.3...v0.9.4)
111
+ [Compare v0.9.3...v0.9.4](https://github.com/dry-rb/dry-validation/compare/v0.9.3...v0.9.4)
103
112
 
104
113
  # v0.9.3 2016-07-22
105
114
 
@@ -117,7 +126,7 @@
117
126
 
118
127
  * `#messages` is no longer memoized (solnic)
119
128
 
120
- [Compare v0.9.2...v0.9.3](https://github.com/dryrb/dry-validation/compare/v0.9.2...v0.9.3)
129
+ [Compare v0.9.2...v0.9.3](https://github.com/dry-rb/dry-validation/compare/v0.9.2...v0.9.3)
121
130
 
122
131
  # v0.9.2 2016-07-13
123
132
 
@@ -126,7 +135,7 @@
126
135
  * Constrained types now work with `each` macro (solnic)
127
136
  * Array coercion without member type works now ie `required(:arr).maybe(:array?)` (solnic)
128
137
 
129
- [Compare v0.9.1...v0.9.2](https://github.com/dryrb/dry-validation/compare/v0.9.1...v0.9.2)
138
+ [Compare v0.9.1...v0.9.2](https://github.com/dry-rb/dry-validation/compare/v0.9.1...v0.9.2)
130
139
 
131
140
  # v0.9.1 2016-07-11
132
141
 
@@ -134,7 +143,7 @@
134
143
 
135
144
  * `I18n` backend is no longer required and set by default (solnic)
136
145
 
137
- [Compare v0.9.0...v0.9.1](https://github.com/dryrb/dry-validation/compare/v0.9.0...v0.9.1)
146
+ [Compare v0.9.0...v0.9.1](https://github.com/dry-rb/dry-validation/compare/v0.9.0...v0.9.1)
138
147
 
139
148
  # v0.9.0 2016-07-08
140
149
 
@@ -171,7 +180,7 @@
171
180
  * Added `MessageSet` that result objects now use (in 1.0.0 it'll be exposed via public API) (solnic)
172
181
  * We can now distinguish error messages from validation hints via `Message` and `Hint` objects (solnic)
173
182
 
174
- [Compare v0.8.0...v0.9.0](https://github.com/dryrb/dry-validation/compare/v0.8.0...v0.9.0)
183
+ [Compare v0.8.0...v0.9.0](https://github.com/dry-rb/dry-validation/compare/v0.8.0...v0.9.0)
175
184
 
176
185
  # v0.8.0 2016-07-01
177
186
 
@@ -229,7 +238,7 @@
229
238
  * Make pry console optional with IRB as a default (flash-gordon)
230
239
  * Remove wrapping rules in :set nodes (solnic)
231
240
 
232
- [Compare v0.7.4...v0.8.0](https://github.com/dryrb/dry-validation/compare/v0.7.4...v0.8.0)
241
+ [Compare v0.7.4...v0.8.0](https://github.com/dry-rb/dry-validation/compare/v0.7.4...v0.8.0)
233
242
 
234
243
  # v0.7.4 2016-04-06
235
244
 
@@ -242,7 +251,7 @@
242
251
 
243
252
  * Depending on deeply nested values in high-level rules works now (solnic)
244
253
 
245
- [Compare v0.7.3...v0.7.4](https://github.com/dryrb/dry-validation/compare/v0.7.3...v0.7.4)
254
+ [Compare v0.7.3...v0.7.4](https://github.com/dry-rb/dry-validation/compare/v0.7.3...v0.7.4)
246
255
 
247
256
  # v0.7.3 2016-03-30
248
257
 
@@ -261,7 +270,7 @@
261
270
 
262
271
  * Switch from `thread_safe` to `concurrent` (joevandyk)
263
272
 
264
- [Compare v0.7.2...v0.7.3](https://github.com/dryrb/dry-validation/compare/v0.7.2...v0.7.3)
273
+ [Compare v0.7.2...v0.7.3](https://github.com/dry-rb/dry-validation/compare/v0.7.2...v0.7.3)
265
274
 
266
275
  # v0.7.2 2016-03-28
267
276
 
@@ -270,7 +279,7 @@
270
279
  * Support for nested schemas inside high-level rules (solnic)
271
280
  * `Schema#to_proc` so that you can do `data.each(&schema)` (solnic)
272
281
 
273
- [Compare v0.7.1...v0.7.2](https://github.com/dryrb/dry-validation/compare/v0.7.1...v0.7.2)
282
+ [Compare v0.7.1...v0.7.2](https://github.com/dry-rb/dry-validation/compare/v0.7.1...v0.7.2)
274
283
 
275
284
  # v0.7.1 2016-03-21
276
285
 
@@ -288,7 +297,7 @@
288
297
 
289
298
  * Now depends on `dry-logic` >= `0.2.1` (solnic)
290
299
 
291
- [Compare v0.7.0...v0.7.1](https://github.com/dryrb/dry-validation/compare/v0.7.0...v0.7.1)
300
+ [Compare v0.7.0...v0.7.1](https://github.com/dry-rb/dry-validation/compare/v0.7.0...v0.7.1)
292
301
 
293
302
  # v0.7.0 2016-03-16
294
303
 
@@ -330,7 +339,7 @@
330
339
  * Validation hints only include relevant messages (solnic)
331
340
  * `:yaml` messages respect `:locale` option in `Result#messages` (solnic)
332
341
 
333
- [Compare v0.6.0...v0.7.0](https://github.com/dryrb/dry-validation/compare/v0.6.0...v0.7.0)
342
+ [Compare v0.6.0...v0.7.0](https://github.com/dry-rb/dry-validation/compare/v0.6.0...v0.7.0)
334
343
 
335
344
  # v0.6.0 2016-01-20
336
345
 
@@ -351,20 +360,20 @@
351
360
  * In `Schema::Form` both `key` and `optional` will apply `filled?` predicate by
352
361
  default when no block is passed (solnic)
353
362
 
354
- [Compare v0.5.0...v0.6.0](https://github.com/dryrb/dry-validation/compare/v0.5.0...v0.6.0)
363
+ [Compare v0.5.0...v0.6.0](https://github.com/dry-rb/dry-validation/compare/v0.5.0...v0.6.0)
355
364
 
356
365
  # v0.5.0 2016-01-11
357
366
 
358
367
  ### Changed
359
368
 
360
- * Now depends on [dry-logic](https://github.com/dryrb/dry-logic) for predicates and rules (solnic)
369
+ * Now depends on [dry-logic](https://github.com/dry-rb/dry-logic) for predicates and rules (solnic)
361
370
  * `dry/validation/schema/form` is now required by default (solnic)
362
371
 
363
372
  ### Fixed
364
373
 
365
374
  * `Schema::Form` uses safe `form.array` and `form.hash` types which fixes #42 (solnic)
366
375
 
367
- [Compare v0.4.1...v0.5.0](https://github.com/dryrb/dry-validation/compare/v0.4.1...v0.5.0)
376
+ [Compare v0.4.1...v0.5.0](https://github.com/dry-rb/dry-validation/compare/v0.4.1...v0.5.0)
368
377
 
369
378
  # v0.4.1 2015-12-27
370
379
 
@@ -372,7 +381,7 @@
372
381
 
373
382
  * Support for `each` and type coercion inference in `Schema::Form` (solnic)
374
383
 
375
- [Compare v0.4.0...v0.4.1](https://github.com/dryrb/dry-validation/compare/v0.4.0...v0.4.1)
384
+ [Compare v0.4.0...v0.4.1](https://github.com/dry-rb/dry-validation/compare/v0.4.0...v0.4.1)
376
385
 
377
386
  # v0.4.0 2015-12-21
378
387
 
@@ -388,7 +397,7 @@
388
397
 
389
398
  * Error messages hash has now consistent structure `rule_name => [msgs_array, input_value]` (solnic)
390
399
 
391
- [Compare v0.3.1...v0.4.0](https://github.com/dryrb/dry-validation/compare/v0.3.1...v0.4.0)
400
+ [Compare v0.3.1...v0.4.0](https://github.com/dry-rb/dry-validation/compare/v0.3.1...v0.4.0)
392
401
 
393
402
  # v0.3.1 2015-12-08
394
403
 
@@ -400,7 +409,7 @@
400
409
 
401
410
  * Error compiler returns an empty hash rather than a nil when there are no errors (solnic)
402
411
 
403
- [Compare v0.3.0...v0.3.1](https://github.com/dryrb/dry-validation/compare/v0.3.0...v0.3.1)
412
+ [Compare v0.3.0...v0.3.1](https://github.com/dry-rb/dry-validation/compare/v0.3.0...v0.3.1)
404
413
 
405
414
  # v0.3.0 2015-12-07
406
415
 
@@ -424,7 +433,7 @@
424
433
  errors and messages
425
434
  * `Schema::Result#messages` returns a hash with rule names, messages and input values (solnic)
426
435
 
427
- [Compare v0.2.0...HEAD](https://github.com/dryrb/dry-validation/compare/v0.2.0...HEAD)
436
+ [Compare v0.2.0...HEAD](https://github.com/dry-rb/dry-validation/compare/v0.2.0...HEAD)
428
437
 
429
438
  # v0.2.0 2015-11-30
430
439
 
@@ -447,7 +456,7 @@
447
456
 
448
457
  * Added missing `and` / `or` interfaces to composite rules (solnic)
449
458
 
450
- [Compare v0.1.0...HEAD](https://github.com/dryrb/dry-validation/compare/v0.1.0...HEAD)
459
+ [Compare v0.1.0...HEAD](https://github.com/dry-rb/dry-validation/compare/v0.1.0...HEAD)
451
460
 
452
461
  # v0.1.0 2015-11-25
453
462
 
@@ -0,0 +1,27 @@
1
+ require 'dry-validation'
2
+
3
+ schema = Dry::Validation.Schema do
4
+ configure do
5
+ def self.messages
6
+ super.merge(en: {
7
+ errors: {
8
+ john_email?: '%{value} is not a john email',
9
+ example_email?: '%{value} is not a example email'
10
+ } })
11
+ end
12
+ end
13
+
14
+ required(:email).filled
15
+
16
+ validate(example_email?: :email) do |value|
17
+ value.end_with?('@example.com')
18
+ end
19
+
20
+ validate(john_email?: :email) do |value|
21
+ value.start_with?('john')
22
+ end
23
+ end
24
+
25
+ errors = schema.call(email: 'jane@doe.org').messages
26
+
27
+ puts errors.inspect
@@ -43,9 +43,19 @@ module Dry
43
43
 
44
44
  class ApplyChecks < ApplyRules
45
45
  def call(input, result)
46
- rules.each_with_object(result) do |(name, check), hash|
47
- check_res = check.is_a?(Guard) ? check.(input, result) : check.(input)
48
- hash[name] = check_res if check_res
46
+ rules.each_with_object(result) do |(name, checks), hash|
47
+ checks.each do |check|
48
+ check_res = check.is_a?(Guard) ? check.(input, result) : check.(input)
49
+ if hash.key?(name)
50
+ if hash[name].is_a?(Array)
51
+ hash[name] << check_res
52
+ else
53
+ hash[name] = [hash[name], check_res]
54
+ end
55
+ else
56
+ hash[name] = check_res if check_res
57
+ end
58
+ end
49
59
  end
50
60
  input
51
61
  end
@@ -53,7 +63,7 @@ module Dry
53
63
 
54
64
  class BuildErrors
55
65
  def call(result)
56
- result.values.select(&:failure?)
66
+ result.values.flatten.compact.select(&:failure?)
57
67
  end
58
68
  end
59
69
 
@@ -114,7 +114,11 @@ module Dry
114
114
 
115
115
  def initialize_checks(checks)
116
116
  @checks = checks.each_with_object({}) do |check, result|
117
- result[check.name] = rule_compiler.visit(check.to_ast)
117
+ if result.key?(check.name)
118
+ result[check.name] << rule_compiler.visit(check.to_ast)
119
+ else
120
+ result[check.name] = [rule_compiler.visit(check.to_ast)]
121
+ end
118
122
  end
119
123
  end
120
124
  end
@@ -41,6 +41,7 @@ module Dry
41
41
 
42
42
  dsl_ext = config.dsl_extensions
43
43
 
44
+ options = options.merge(rules: options[:rules].dup) if options.key?(:rules)
44
45
  dsl = Schema::Value.new(options.merge(registry: source.registry))
45
46
  dsl_ext.__send__(:extend_object, dsl) if dsl_ext
46
47
  dsl.predicates(options[:predicates]) if options.key?(:predicates)
@@ -25,7 +25,9 @@ module Dry
25
25
  result = nil
26
26
  Array(path).each do |name|
27
27
  curr = results[name]
28
- result = curr.success? if curr
28
+ if curr
29
+ result = curr.is_a?(Array) ? curr.first.success? : curr.success?
30
+ end
29
31
  end
30
32
  result
31
33
  end
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Validation
3
- VERSION = '0.10.6'.freeze
3
+ VERSION = '0.10.7'.freeze
4
4
  end
5
5
  end
@@ -19,4 +19,12 @@ RSpec.describe 'Schema / Injecting Rules' do
19
19
  expect(schema.(login: true, email: nil)).to_not be_success
20
20
  expect(schema.(login: nil, email: 'jane@doe')).to_not be_success
21
21
  end
22
+
23
+ it 'keeps the original schema rules intact' do
24
+ expect(other.class.rules.size).to eq(1)
25
+
26
+ schema.(login: true, email: 'jane@doe')
27
+
28
+ expect(other.class.rules.size).to eq(1)
29
+ end
22
30
  end
@@ -80,4 +80,41 @@ RSpec.describe Dry::Validation::Schema, 'arbitrary validation blocks' do
80
80
  )
81
81
  end
82
82
  end
83
+
84
+ context 'with more than one validation' do
85
+ subject(:schema) do
86
+ Dry::Validation.Schema do
87
+ configure do
88
+ option :email_regex, /@/
89
+
90
+ def self.messages
91
+ super.merge(en: {
92
+ errors: {
93
+ email?: '%{value} looks like an invalid email',
94
+ google_email?: '%{value} is not a google email'
95
+ } })
96
+ end
97
+ end
98
+
99
+ required(:email).filled
100
+
101
+ validate(email?: :email) do |value|
102
+ email_regex.match(value)
103
+ end
104
+
105
+ validate(google_email?: :email) do |value|
106
+ value.end_with?('@google.com')
107
+ end
108
+ end
109
+ end
110
+
111
+ it 'returns errors message for both validate' do
112
+ expect(schema.(email: 'jane').messages).to eql(
113
+ email: [
114
+ 'jane looks like an invalid email',
115
+ 'jane is not a google email'
116
+ ]
117
+ )
118
+ end
119
+ end
83
120
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-validation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.6
4
+ version: 0.10.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Holland
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-04-26 00:00:00.000000000 Z
12
+ date: 2017-05-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby
@@ -193,6 +193,7 @@ files:
193
193
  - examples/each.rb
194
194
  - examples/form.rb
195
195
  - examples/json.rb
196
+ - examples/multiple.rb
196
197
  - examples/nested.rb
197
198
  - lib/dry-validation.rb
198
199
  - lib/dry/validation.rb