-
-
Notifications
You must be signed in to change notification settings - Fork 190
/
changelog.yml
696 lines (693 loc) · 29.3 KB
/
changelog.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
---
- version: 1.10.0
summary: This release is mostly about upgrading to dry-core 1.0 and dry-configurable 1.0. One of the outcomes is dropping dependency on dry-container (because it was moved to dry-core). If you happen to use dry-container, please switch to `Dry::Core::Container`.
date: 2022-11-04
changed:
- 'Upgraded to the latest versions of dry-{core,configurable,logic,types} (@flash-gordon + @solnic)'
- version: 1.9.0
summary:
date: 2022-10-15
fixed:
- 'Duplicated keys mishandling in rule evaluation (issue #676 fixed via #711) (@mereghost)'
added:
changed:
- 'Use Zeitwerk for auto-loading (via #715) (@solnic)'
- version: 1.8.1
summary:
date: '2022-05-28'
fixed:
- 'Raise an InvalidKeyErrors on substring of valid keys (issue #705 fixed via #706)
(@MatElGran)'
- 'Using `rule(:arr).each { .. }` doesn''t crash when `:arr` turns out to be `nil`
(issue #708 fixed via #709) (@bautrey37)'
added:
changed:
- version: 1.8.0
summary:
date: '2022-02-17'
fixed:
added:
- 'New rule helper `base_rule_error?` which checks if there''s any base error set
(via #690) (@wuarmin)'
changed:
- Dependency on dry-schema was bumped to 1.9.1 (@solnic)
- version: 1.7.0
date: '2021-09-12'
changed:
- "[internal] Upgraded to new `setting` API provided in dry-configurable 0.13.0
(@timriley in #686 and 3f8f7d8)"
- Bumped dry-schema dependency to 1.8.0 (in part, to ensure dry-configurable 0.13.0
is available) (@timriley)
- version: 1.6.0
summary:
date: '2020-12-05'
fixed:
- 'Checking `key?` within a rule no longer crashes when value is `nil` or an empty
string (issue #670 fixed via #672) (@alexxty7)'
added:
- 'You can now pass a key name or path to `rule_error?` predicate (issue #658 closed
via #673) (@moofkit)'
- 'You can now pass initial context object to `Contract#call` (issue #674 via #675)
(@pyromaniac)'
changed:
- version: 1.5.6
date: '2020-09-04'
summary:
fixed:
- Dependency on dry-schema was bumped to >= 1.5.1. This time for real (@solnic)
- version: 1.5.5
date: '2020-09-03'
summary:
fixed:
- 'Dependency on dry-schema was bumped to >= 1.5.2 (see #666 for more info) (@artofhuman)'
added:
changed:
- version: 1.5.4
summary:
date: '2020-08-21'
fixed:
- 'Full messages work correctly with rule failures now (issue #661 fixed via #662)
(@stind)'
- 'Providing a custom message template for array errors works correctly (issue #663
fixed via #665) (@tadeusz-niemiec)'
added:
- 'You can now pass any key or a path to the rule''s `key?` helper (see #664 for
more info) (@alassek)'
changed:
- version: 1.5.3
summary:
date: '2020-07-27'
fixed:
- 'Using `.each(:foo)` works as expected when there are errors related to other
keys (issue #659 fixed via #660) (@solnic)'
added:
- 'You can now access current value''s index via `rule(:foo).each do |index:|` (issue
#606 done via #657) (@mrbongiolo)'
changed:
- "`Result#error?` is now a public API and it takes into consideration both schema
and rule errors (issue #655 fixed via #656) (@PragTob)"
- version: 1.5.2
summary:
date: '2020-07-14'
fixed:
- "`key?` predicate in rules no longer crashes when the rule path points to a non-existent
array value (issue #653 fixed via #654) (@solnic)"
- version: 1.5.1
date: '2020-06-18'
fixed:
- dry-monads no longer required for the `:hints` extension (@schokomarie)
- 'Using `full: true` option works as expected with custom rule messages (issue
#618 fixed via #651) (@sirfilip)'
- 'Using `locale: ...` option works as expected with hints (issue #589 fixed via
652) (@sirfilip)'
- version: 1.5.0
summary:
date: '2020-03-11'
fixed:
added:
- "`schema_error?` rule helper (@waiting-for-dev)"
- "`rule_error?` rule helper (@waiting-for-dev)"
changed:
- dry-schema dependency was bumped to `~> 1.5` (@solnic)
- "[internal] `KeyMap` patches have been removed since dry-schema now provides required
functionality (@solnic)"
- version: 1.4.2
date: '2020-01-18'
fixed:
- Macros using predicates that accept a range argument work as expected (no need
to wrap the argument in an array) (@waiting-for-dev)
- version: 1.4.1
date: '2020-01-08'
added:
- Pattern matching on result values (@flash-gordon)
fixed:
- 'List tokens are correctly interpolated as a comma separated list in rule messages
(see #611) (@waiting-for-dev)'
- Warnings about delegated keywords (@flash-gordon)
- version: 1.4.0
date: '2019-12-12'
added:
- Support for multi-schema inheritance (@ianwhite)
fixed:
- Keyword warnings reported by Ruby 2.7 (@flash-gordon)
- Fixed an issue where `MessageSet` would be marked as empty too early (@ianwhite)
- 'Messages are correctly generated when there are errors for both an array and
one or more of its elements (see #599) (@Bugagazavr)'
changed:
- A meaningful exception is raised when failure options are not valid (@MatElGran)
- "[internal] improved performance in `Contract.ensure_valid_keys` (@grzegorz-jakubiak)"
- "[internal] fixed keyword warnings on MRI 2.7.0 (@flash-gordon)"
- version: 1.3.1
date: '2019-08-16'
changed:
- You can now set an external schema without providing a block (@alassek)
- version: 1.3.0
date: '2019-08-14'
added:
- 'Support for setting an external schema (that can be extended too) (fixed #574)
(@solnic)'
fixed:
- 'Using a hash spec to define rule keys with more than one value is properly handled
by rule guard now (fixed #576) (@solnic)'
changed:
- "`values` within rules uses `Hash#fetch_values` internally now, which improves
performance (@esparta)"
- version: 1.2.1
date: '2019-07-16'
fixed:
- 'Defining an abstract contract class that has no schema no longer crashes (issue
#565) (@solnic)'
- 'Fixed an issue where `Rule#each` would crash when the value is not an array (issue
#567) (@solnic)'
- 'Fixed an issue where guarding a rule would crash when keys are missing in the
input (issue #569) (@solnic)'
- 'Added missing "pathname" require (issue #570) (@solnic)'
- version: 1.2.0
date: '2019-07-08'
added:
- New extension `:predicates_as_macros` (@waiting-for-dev)
fixed:
- 'Guarding rules for nested keys works correctly (issue #560) (@solnic)'
changed:
- "`dry-schema` dependency was bumped to `>= 1.3.1` (@solnic)"
- version: 1.1.1
date: '2019-06-24'
fixed:
- "`Rule#each` works with array values from nested hashes (@mustardnoise)"
- version: 1.1.0
date: '2019-06-14'
added:
- "`key?` method available within rules, that can be used to check if there's a
value under the rule's default key (refs #540) (@solnic)"
- "`value` supports hash-based path specifications now (refs #547) (@solnic)"
- "`value` can read multiple values when the key points to them, ie in case of `rule(geo:
[:lat, :lon])` it would return an array with `lat` and `lon` (@solnic)"
fixed:
- 'Passing multiple macro names to `validate` or `each` works correctly (fixed #538
#541) (@jandudulski)'
- version: 1.0.0
date: '2019-06-10'
summary: See [the list of all addressed issues](https://github.com/dry-rb/dry-validation/issues?utf8=✓&q=is%3Aissue+is%3Aclosed+closed%3A%3E%3D2019-01-01+)
as well as issues that were moved to dry-schema and [addressed there](https://github.com/dry-rb/dry-schema/issues?q=is%3Aissue+is%3Aclosed+dry-validation+milestone%3A1.0.0).
- version: 1.0.0
date: '2019-06-10'
added:
- Support for defining rules for each element of an array via `rule(:items).each
{ ... }` (solnic)
- 'Support for parameterized macros via `rule(:foo).validate(my_macro: :some_option)`
(solnic)'
- "`values#[]` is now compatible with path specs (symbol, array with keys or dot-notation)
(issue #528) (solnic)"
- "`value` shortcut for accessing the value found under the first key specified
by a rule. ie `rule(:foo) { value }` returns `values[:foo]` (solnic)"
fixed:
- Contract's `config.locale` option was replaced by `config.messages.default_locale`
to avoid conflicts with run-time `:locale` option and/or whatever is set via `I18n`
gem (solnic)
- Macros no longer mutate `Dry::Validation::Contract.macros` when using inheritance
(solnic)
- Missing dependency on `dry-container` was added (solnic)
changed:
- "`rule` will raise `InvalidKeysError` when specified keys are not defined by the
schema (solnic)"
- "`Contract.new` will raise `SchemaMissingError` when the class doesn't have schema
defined (solnic)"
- 'Contracts no longer support `:locale` option in the constructor. Use `Result#errors(locale:
:pl)` to change locale at run-time (solnic)'
- version: 1.0.0.rc3
date: '2019-05-06'
added:
- "[EXPERIMENTAL] `Validation.register_macro` for registering global macros (solnic)"
- "[EXPERIMENTAL] `Contract.register_macro` for registering macros available to
specific contract classes (solnic)"
- "`Dry::Validation.Contract` shortcut for quickly defining a contract and getting
its instance back (solnic)"
- New configuration option `config.locale` for setting the default locale (solnic)
fixed:
- "`config/errors.yml` are now bundled with the gem, **`rc2` was broken because
of this** (solnic)"
- version: 1.0.0.rc2
date: '2019-05-04'
summary: This was **yanked** on rubygems.org because the bundled gem was missing
`config` directory, thus it was not possible to require it. It was fixed in `rc3`.
added:
- "[EXPERIMENTAL] support for registering macros via `Dry::Validation::Macros.register(:your_macro,
&block)` (solnic)"
- "[EXPERIMENTAL] `:acceptance` as the first built-in macro (issue #157) (solnic)"
fixed:
- Passing invalid argument to `failure` will raise a meaningful error instead of
crashing (solnic)
changed:
- In rule validation blocks, `values` is now an instance of a hash-like `Dry::Validation::Values`
class, rather than `Dry::Schema::Result`. This gives more convenient access to
data within rules (solnic)
- Dependency on `dry-schema` was updated to `~> 1.0` (solnic)
- version: 1.0.0.rc1
date: '2019-04-26'
added:
- "`:hints` extension is back (solnic)"
- "`Result` objects have access to the context object which is shared between rules
(flash-gordon)"
fixed:
- Multiple hint messages no longer crash message set (flash-gordon)
- "`Contract#inspect` no longer crashes (solnic)"
changed:
- Dependency on `dry-schema` was bumped to `~> 0.6` - this pulls in `dry-types 1.0.0`
and `dry-logic 1.0.0` (solnic)
- Dependency on `dry-initializer` was bumped to `~> 3.0` (solnic)
- version: 1.0.0.beta2
date: '2019-04-04'
added:
- |-
Support for arbitrary meta-data in failures, ie:
```ruby
class NewUserContract < Dry::Validation::Contract
params do
required(:login).filled(:string)
end
rule(:login) do
key.failure(text: 'is taken', code: 123) unless db.unique?(values[:login])
end
end
```
Now your error hash will include `{ login: [{ text: 'is taken', code: 123 }] }` (solnic + flash-gordon)
changed:
- "[BREAKING] `Error` was renamed to `Message` as it is a more generic concept (solnic)"
- "[BREAKING] `ErrorSet` was renamed to `MessageSet` for consistency (solnic)"
- "[BREAKING] `:monads` extension wraps entire result objects in `Success` or `Failure`
(flash-gordon)"
- version: 1.0.0.beta1
date: '2019-03-26'
added:
- New API for setting failures `base.failure` for base errors and `key.failure`
for key errors (solnic)
- Support for `base` errors associated with a key even when child keys have errors
too (solnic)
- Support for `base` errors not associated with any key (solnic)
- Result objects use `ErrorSet` object now for managing messages (solnic)
- 'Nested keys are properly handled when generating messages hash (issue #489) (flash-gordon
+ solnic)'
- Result objects support `locale` and `full` options now (solnic)
- Ability to configure `top_namespace` for messages, which will be used for both
schema and rule localization (solnic)
- Rule blocks receive a context object that you can use to share data between rules
(solnic)
changed:
- "[BREAKING] `Result#errors` returns an instance of `ErrorSet` now, it's an enumerable,
coerible to a hash (solnic)"
- "[BREAKING] `failure` was removed in favor of `key.failure` or `key(:foo).failure`
(solnic)"
- "[BREAKING] `Result#to_hash` was removed (flash-gordon)"
- version: 1.0.0.alpha2
date: '2019-03-05'
summary: First round of bug fixes. Thanks for testing <3!
fixed:
- Errors with nested messages are correctly built (flash-gordon)
- Messages for nested keys are correctly resolved (solnic)
- A message for a nested key is resolved when it's defined under `errors.rule.%{key}`
too, but a message under nested key will override it (solnic)
changed:
- When a message template is not found a more meaningful error is raised that includes
both rule identifier and key path (solnic)
- version: 1.0.0.alpha1
date: '2019-03-04'
summary: Complete rewrite on top of `dry-schema`.
added:
- "[BREAKING] `Dry::Validation::Contract` as a replacement for validation schemas
(solnic)"
- "[BREAKING] New `rule` DSL with an improved API for setting error messages (solnic)"
- version: 0.13.0
date: '2019-01-29'
fixed:
- Warning about method redefined (amatsuda)
changed:
- "`dry-logic` was bumped to `~> 0.5` (solnic)"
- "`dry-types` was bumped to `~> 0.14` (solnic)"
- version: 0.12.3
date: '2019-01-29'
changed:
- "[internal] dry-logic was pinned to `~> 0.4.2` (flash-gordon)"
- version: 0.12.2
date: '2018-08-29'
fixed:
- Use correct key names for rule messages when using i18n (jozzi05)
- version: 0.12.1
date: '2018-07-06'
fixed:
- "[internal] fixed deprecation warnings (flash-gordon)"
- version: 0.12.0
date: '2018-05-31'
changed:
- Code updated to work with `dry-types` 0.13.1 and `dry-struct` 0.5.0, these are
now minimal supported versions (flash-gordon)
- "[BREAKING] `Form` was renamed to `Params` to be consistent with the latest changes
from `dry-types`. You can `require 'dry/validation/compat/form'` to use the previous
names but it will be removed in the next version (flash-gordon)"
- version: 0.11.1
date: '2017-09-15'
changed:
- "`Result#to_either` was renamed to `#to_monad`, the previous name is kept for
backward compatibility (flash-gordon)"
- "[internal] fix warnings from dry-types v0.12.0"
- version: 0.11.0
date: '2017-05-30'
changed:
- "[internal] input processor compilers have been updated to work with new dry-types'
AST (GustavoCaso)"
- version: 0.10.7
date: '2017-05-15'
fixed:
- "`validate` can now be defined multiple times for the same key (kimquy)"
- Re-using rules between schemas no longer mutates original rule set (pabloh)
- version: 0.10.6
date: '2017-04-26'
fixed:
- Fixes issue with wrong localized error messages when namespaced messages are used
(kbredemeier)
- version: 0.10.5
date: '2017-01-12'
fixed:
- Warnings under MRI 2.4.0 are gone (koic)
- version: 0.10.4
date: '2016-12-03'
fixed:
- Updated to dry-core >= 0.2.1 (ruby warnings are gone) (flash-gordon)
- "`format?` predicate is excluded from hints (solnic)"
changed:
- "`version` file is now required by default (georgemillo)"
- version: 0.10.3
date: '2016-09-27'
fixed:
- Custom predicates work correctly with `each` macro (solnic)
- version: 0.10.2
date: '2016-09-23'
fixed:
- Constrained types + hints work again (solnic)
- version: 0.10.1
date: '2016-09-22'
fixed:
- Remove obsolete require of `dry/struct` which is now an optional extension (flash-gordon)
- version: 0.10.0
date: '2016-09-21'
added:
- Support for `validate` DSL which accepts an arbitratry validation block that gets
executed in the context of a schema object and is treated as a custom predicate
(solnic)
- Support for `or` error messages ie "must be a string or must be an integer" (solnic)
- Support for retrieving error messages exclusively via `schema.(input).errors`
(solnic)
- Support for retrieving hint messages exclusively via `schema.(input).hints` (solnic)
- Support for opt-in extensions loaded via `Dry::Validation.load_extensions(:my_ext)`
(flash-gordon)
- Add `:monads` extension which transforms a result instance to `Either` monad,
`schema.(input).to_either` (flash-gordon)
- Add `dry-struct` integration via an extension activated by `Dry::Validation.load_extensions(:struct)`
(flash-gordon)
fixed:
- Input rules (defined via `input` macro) are now lazy-initialized which makes it
work with predicates defined on the schema object (solnic)
- Hints are properly generated based on argument type in cases like `size?`, where
the message should be different for strings (uses "length") or other types (uses
"size") (solnic)
- Defining nested keys without `schema` blocks results in `ArgumentError` (solnic)
changed:
- "[BREAKING] `when` macro no longer supports multiple disconnected rules in its
block, whatever the block returns will be used for the implication (solnic)"
- "[BREAKING] `rule(some_name: %i(some keys))` will _always_ use `:some_name` as
the key for failure messages (solnic)"
- version: 0.9.5
date: '2016-08-16'
fixed:
- 'Infering multiple predicates with options works as expected ie `value(:str?,
min_size?: 3, max_size?: 6)` (solnic)'
- Default `locale` configured in `I18n` is now respected by the messages compiler
(agustin + cavi21)
- version: 0.9.4
date: '2016-08-11'
fixed:
- Error messages for sibling deeply nested schemas are nested correctly (timriley)
- version: 0.9.3
date: '2016-07-22'
added:
- Support for range arg in error messages for `excluded_from?` and `included_in?`
(mrbongiolo)
- "`Result#message_set` returns raw message set object (solnic)"
fixed:
- Error messages for high-level rules in nested schemas are nested correctly (solnic)
- Dumping error messages works with high-level rules relying on the same value (solnic)
changed:
- "`#messages` is no longer memoized (solnic)"
- version: 0.9.2
date: '2016-07-13'
fixed:
- Constrained types now work with `each` macro (solnic)
- Array coercion without member type works now ie `required(:arr).maybe(:array?)`
(solnic)
- version: 0.9.1
date: '2016-07-11'
fixed:
- "`I18n` backend is no longer required and set by default (solnic)"
- version: 0.9.0
date: '2016-07-08'
added:
- Support for defining maybe-schemas via `maybe { schema { .. } }` (solnic)
- Support for interpolation of custom failure messages for custom rules (solnic)
- Support for defining a base schema **class** with config and rules (solnic)
- Support for more than 1 predicate in `input` macro (solnic)
- Class-level `define!` API for defining rules on a class (solnic)
- "`:i18n` messages support merging from other paths via `messages_file` setting
(solnic)"
- Support for message token transformations in custom predicates (fran-worley)
- "[EXPERIMENTAL] Ability to compose predicates that accept dynamic args provided
by the schema (solnic)"
fixed:
- Duped key names in nested schemas no longer result in invalid error messages structure
(solnic)
- Error message structure for deeply nested each/schema rules (solnic)
- Values from `option` are passed down to nested schemas when using `Schema#with`
(solnic)
- Hints now work with array elements too (solnic)
- Hints for elements are no longer provided for an array when the value is not an
array (solnic)
- "`input` macro no longer messes up error messages for nested structures (solnic)"
changed:
- Tokens for `size?` were renamed `left` => `size_left` and `right` => `size_right`
(fran-worley)
- version: 0.8.0
date: '2016-07-01'
added:
- Explicit interface for type specs used to set up coercions, ie `required(:age,
:int)` (solnic)
- 'Support new dry-logic predicates: `:excluded_from?`, `:excludes?`, `:included_in?`,
`:includes?`, `:not_eql?`, `:odd?`, `:even?` (jodosha, fran-worley)'
- Support for blocks in `value`, `filled` and `maybe` macros (solnic)
- Support for passing a schema to `value|filled|maybe` macros ie `maybe(SomeSchema)`
(solnic)
- Support for `each(SomeSchema)` (solnic)
- 'Support for `value|filled|maybe` macros + `each` inside a block ie: `maybe(:filled?)
{ each(:int?) }` (solnic)'
- Support for dedicated hint messages via `en.errors.#{predicate}.(hint|failure)`
look-up paths (solnic)
- Support for configuring custom DSL extensions via `dsl_extensions` setting on
Schema class (solnic)
- Support for preconfiguring a predicate for the input value ie `value :hash?` used
for prerequisite-checks (solnic)
- Infer coercion from constrained types (solnic)
- Add value macro (coop)
- 'Enable .schema to accept objects that respond to #schema (ttdonovan)'
- Support for schema predicates which don't need any arguments (fran-worley)
- Error and hint messages have access to all predicate arguments by default (fran-worley+solnic)
- Invalid predicate name in DSL will raise an error (solnic)
- Predicate with invalid arity in DSL will raise an error (solnic)
fixed:
- Support for jRuby 9.1.1.0 (flash-gordon)
- Fix bug when using predicates with options in each and when (fran-worley)
- Fix bug when validating custom types (coop)
- Fix depending on deeply nested values in high-lvl rules (solnic)
- Fix duplicated error message for lt? when hint was used (solnic)
- Fix hints for nested schemas (solnic)
- Fix an issue where rules with same names inside nested schemas have incorrect
hints (solnic)
- Fix a bug where hints were being generated 4 times (solnic)
- Fix duplicated error messages when message is different than a hint (solnic)
changed:
- Uses new `:weak` hash constructor from dry-types 0.8.0 which can partially coerce
invalid hash (solnic)
- "`key` has been deprecated in favor of `required` (coop)"
- "`required` has been deprecated in favor of `filled` (coop)"
- Now relies on dry-logic v0.3.0 and dry-types v0.8.0 (fran-worley)
- Tring to use illogical predicates with maybe and filled macros now raise InvalidSchemaError
(fran-worley)
- Enable coercion on form.true and form.false (fran-worley)
- Remove attr (will be extracted to a separate gem) (coop)
- Deprecate required in favour of filled (coop)
- Deprecate key in favor of required (coop)
- Remove nested key syntax (solnic)
- version: 0.7.4
date: '2016-04-06'
added:
- "`Schema.JSON` with json-specific coercions (coop)"
- Support for error messages for `odd? and`even?` predicates (fran-worley)
fixed:
- Depending on deeply nested values in high-level rules works now (solnic)
- version: 0.7.3
date: '2016-03-30'
added:
- Support for inferring rules from constrained type (coop + solnic)
- Support for inferring nested schemas from `Dry::Types::Struct` classes (coop)
- Support for `number?` predicate (solnic)
fixed:
- Creating a nested schema properly sets full path to nested data structure (solnic)
- Error message for `empty?` predicate is now correct (jodosha)
- version: 0.7.2
date: '2016-03-28'
added:
- Support for nested schemas inside high-level rules (solnic)
- "`Schema#to_proc` so that you can do `data.each(&schema)` (solnic)"
- version: 0.7.1
date: '2016-03-21'
added:
- You can use `schema` inside `each` macro (solnic)
fixed:
- "`confirmation` macro defines an optional key with maybe value with `_confirmation`
suffix (solnic)"
- "`each` macro works correctly when its inner rule specify just one key (solnic)"
- error messages for `each` rules where input is equal are now correctly generated
(solnic)
changed:
- Now depends on `dry-logic` >= `0.2.1` (solnic)
- version: 0.7.0
date: '2016-03-16'
added:
- |-
Support for macros:
- `required` - when value must be filled
- `maybe` - when value can be nil (or empty, in case of `Form`)
- `when` - for composing high-level rule based on predicates applied to a
validated value
- `confirmation` - for confirmation validation
- Support for `value(:foo).eql?(value(:bar))` syntax in high-level rules (solnic)
- New DSL for defining schema objects `Dry::Validation.Schema do .. end` (solnic)
- Ability to define a schema for an array via top-level `each` rule (solnic)
- Ability to define nested schemas via `key(:location).schema do .. end` (solnic)
- Ability to re-use schemas inside other schemas via `key(:location).schema(LocationSchema)`
(solnic)
- Ability to inherit rules from another schema via `Dry::Validation.Schema(Other)
do .. end` (solnic)
- Ability to inject arbitrary dependencies to schemas via `Schema.option` + `Schema#with`
(solnic)
- Ability to provide translations for rule names under `%{locale}.rules.%{name}`
pattern (solnic)
- Ability to configure input processor, either `:form` or `:sanitizer` (solnic)
- Ability to pass a constrained dry type when defining keys or attrs, ie `key(:age,
Types::Age)` (solnic)
- "`Result#messages` supports `:full` option to get messages with rule names, disabled
by default (solnic)"
- |-
`Validation::Result` responds to `#[]` and `#each` (delegating to its output)
and it's an enumerable (solnic)
fixed:
- Qualified rule names properly use last node by default for error messages (solnic)
- Validation hints only include relevant messages (solnic)
- "`:yaml` messages respect `:locale` option in `Result#messages` (solnic)"
changed:
- "`schema` was **removed** from the DSL, just use `key(:name).schema` instead (solnic)"
- "`confirmation` is now a macro that you can call on a key rule (solnic)"
- |-
rule names for nested structures are now fully qualified, which means you can
provide customized messages for them. ie `user: :email` (solnic)
- "`Schema::Result#params` was renamed to `#output` (solnic)"
- |-
`Schema::Result` is now `Validation::Result` and it no longer has success and
failure results, only error results are provided (solnic)
- version: 0.6.0
date: '2016-01-20'
added:
- Support for validating objects with attr readers via `attr` (SunnyMagadan)
- Support for `value` interface in the DSL for composing high-level rules based
on values (solnic)
- |-
Support for `rule(name: :something)` syntax for grouping high-level rules under
the same name (solnic)
- 'Support for `confirmation(:foo, some_predicate: some_argument)` shortcut syntax
(solnic)'
- Support for error messages for grouped rules (like `confirmation`) (solnic)
- Schemas support injecting rules from the outside (solnic)
- "## Changed"
- |-
`rule` uses objects that inherit from `BasicObject` to avoid conflicts with
predicate names and built-in `Object` methods (solnic)
- |-
In `Schema::Form` both `key` and `optional` will apply `filled?` predicate by
default when no block is passed (solnic)
- version: 0.5.0
date: '2016-01-11'
fixed:
- "`Schema::Form` uses safe `form.array` and `form.hash` types which fixes #42 (solnic)"
changed:
- Now depends on [dry-logic](https://github.com/dry-rb/dry-logic) for predicates
and rules (solnic)
- "`dry/validation/schema/form` is now required by default (solnic)"
- version: 0.4.1
date: '2015-12-27'
added:
- Support for `each` and type coercion inference in `Schema::Form` (solnic)
- version: 0.4.0
date: '2015-12-21'
added:
- Support for high-level rule composition via `rule` interface (solnic)
- Support for exclusive disjunction (aka xor/^ operator) (solnic)
- Support for nested schemas within a schema class (solnic)
- Support for negating rules via `rule(name).not` (solnic)
- Support for `validation hints` that are included in the error messages (solnic)
fixed:
- Error messages hash has now consistent structure `rule_name => [msgs_array, input_value]`
(solnic)
- version: 0.3.1
date: '2015-12-08'
added:
- Support for `Range` and `Array` as an argument in `size?` predicate (solnic)
fixed:
- Error compiler returns an empty hash rather than a nil when there are no errors
(solnic)
- version: 0.3.0
date: '2015-12-07'
added:
- I18n messages support (solnic)
- Ability to configure `messages` via `configure { config.messages = :i18n }` (solnic)
- "`rule` interface in DSL for defining rules that depend on other rules (solnic)"
- '`confirmation` interface as a shortcut for defining "confirmation of" rule (solnic)'
- Error messages can be now matched by input value type too (solnic)
fixed:
- "`optional` rule with coercions work correctly with `|` + multiple `&`s (solnic)"
- "`Schema#[]` checks registered predicates first before defaulting to its own predicates
(solnic)"
changed:
- "`Schema#messages(input)` => `Schema#call(input).messages` (solnic)"
- |-
`Schema#call` returns `Schema::Result` which has access to all rule results,
errors and messages
- "`Schema::Result#messages` returns a hash with rule names, messages and input
values (solnic)"
- version: 0.2.0
date: '2015-11-30'
added:
- "`Schema::Form` with a built-in coercer inferred from type-check predicates (solnic)"
- Ability to pass a block to predicate check in the DSL ie `value.hash? { ... }`
(solnic)
- Optional keys using `optional(:key_name) { ... }` interface in the DSL (solnic)
- |-
New predicates:
- `bool?`
- `date?`
- `date_time?`
- `time?`
- `float?`
- `decimal?`
- `hash?`
- `array?`
fixed:
- Added missing `and` / `or` interfaces to composite rules (solnic)
- version: 0.1.0
date: '2015-11-25'
summary: First public release