dry-validation 0.10.6 → 0.10.7

Sign up to get free protection for your applications and to get access to all the features.
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