dry-validation 1.3.1 → 1.8.1
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 +4 -4
- data/CHANGELOG.md +378 -164
- data/LICENSE +1 -1
- data/README.md +10 -10
- data/dry-validation.gemspec +41 -0
- data/lib/dry/validation/config.rb +3 -3
- data/lib/dry/validation/constants.rb +5 -5
- data/lib/dry/validation/contract/class_interface.rb +55 -46
- data/lib/dry/validation/contract.rb +29 -16
- data/lib/dry/validation/evaluator.rb +53 -17
- data/lib/dry/validation/extensions/hints.rb +1 -3
- data/lib/dry/validation/extensions/monads.rb +1 -1
- data/lib/dry/validation/extensions/predicates_as_macros.rb +3 -3
- data/lib/dry/validation/failures.rb +15 -3
- data/lib/dry/validation/function.rb +3 -4
- data/lib/dry/validation/macro.rb +3 -3
- data/lib/dry/validation/macros.rb +3 -3
- data/lib/dry/validation/message.rb +6 -4
- data/lib/dry/validation/message_set.rb +6 -51
- data/lib/dry/validation/messages/resolver.rb +56 -6
- data/lib/dry/validation/result.rb +44 -7
- data/lib/dry/validation/rule.rb +18 -9
- data/lib/dry/validation/schema_ext.rb +1 -28
- data/lib/dry/validation/values.rb +17 -6
- data/lib/dry/validation/version.rb +1 -1
- data/lib/dry/validation.rb +6 -8
- data/lib/dry-validation.rb +1 -1
- metadata +31 -34
data/CHANGELOG.md
CHANGED
@@ -1,93 +1,280 @@
|
|
1
|
-
|
1
|
+
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
2
|
+
|
3
|
+
## 1.8.1 2022-05-28
|
4
|
+
|
5
|
+
|
6
|
+
### Fixed
|
7
|
+
|
8
|
+
- Raise an InvalidKeyErrors on substring of valid keys (issue #705 fixed via #706) (@MatElGran)
|
9
|
+
- Using `rule(:arr).each { .. }` doesn't crash when `:arr` turns out to be `nil` (issue #708 fixed via #709) (@bautrey37)
|
10
|
+
|
11
|
+
|
12
|
+
[Compare v1.8.0...v1.8.1](https://github.com/dry-rb/dry-validation/compare/v1.8.0...v1.8.1)
|
13
|
+
|
14
|
+
## 1.8.0 2022-02-17
|
15
|
+
|
16
|
+
|
17
|
+
### Added
|
18
|
+
|
19
|
+
- New rule helper `base_rule_error?` which checks if there's any base error set (via #690) (@wuarmin)
|
20
|
+
|
21
|
+
### Changed
|
22
|
+
|
23
|
+
- Dependency on dry-schema was bumped to 1.9.1 (@solnic)
|
24
|
+
|
25
|
+
[Compare v1.7.0...v1.8.0](https://github.com/dry-rb/dry-validation/compare/v1.7.0...v1.8.0)
|
26
|
+
|
27
|
+
## 1.7.0 2021-09-12
|
28
|
+
|
29
|
+
|
30
|
+
### Changed
|
31
|
+
|
32
|
+
- [internal] Upgraded to new `setting` API provided in dry-configurable 0.13.0 (@timriley in #686 and 3f8f7d8)
|
33
|
+
- Bumped dry-schema dependency to 1.8.0 (in part, to ensure dry-configurable 0.13.0 is available) (@timriley)
|
34
|
+
|
35
|
+
[Compare v1.6.0...v1.7.0](https://github.com/dry-rb/dry-validation/compare/v1.6.0...v1.7.0)
|
36
|
+
|
37
|
+
## 1.6.0 2020-12-05
|
38
|
+
|
39
|
+
|
40
|
+
### Added
|
41
|
+
|
42
|
+
- You can now pass a key name or path to `rule_error?` predicate (issue #658 closed via #673) (@moofkit)
|
43
|
+
- You can now pass initial context object to `Contract#call` (issue #674 via #675) (@pyromaniac)
|
44
|
+
|
45
|
+
### Fixed
|
46
|
+
|
47
|
+
- Checking `key?` within a rule no longer crashes when value is `nil` or an empty string (issue #670 fixed via #672) (@alexxty7)
|
48
|
+
|
49
|
+
|
50
|
+
[Compare v1.5.6...v1.6.0](https://github.com/dry-rb/dry-validation/compare/v1.5.6...v1.6.0)
|
51
|
+
|
52
|
+
## 1.5.6 2020-09-04
|
53
|
+
|
54
|
+
|
55
|
+
### Fixed
|
56
|
+
|
57
|
+
- Dependency on dry-schema was bumped to >= 1.5.1. This time for real (@solnic)
|
58
|
+
|
59
|
+
|
60
|
+
[Compare v1.5.5...v1.5.6](https://github.com/dry-rb/dry-validation/compare/v1.5.5...v1.5.6)
|
61
|
+
|
62
|
+
## 1.5.5 2020-09-03
|
63
|
+
|
64
|
+
|
65
|
+
### Fixed
|
66
|
+
|
67
|
+
- Dependency on dry-schema was bumped to >= 1.5.2 (see #666 for more info) (@artofhuman)
|
68
|
+
|
69
|
+
|
70
|
+
[Compare v1.5.4...v1.5.5](https://github.com/dry-rb/dry-validation/compare/v1.5.4...v1.5.5)
|
71
|
+
|
72
|
+
## 1.5.4 2020-08-21
|
73
|
+
|
74
|
+
|
75
|
+
### Added
|
76
|
+
|
77
|
+
- You can now pass any key or a path to the rule's `key?` helper (see #664 for more info) (@alassek)
|
78
|
+
|
79
|
+
### Fixed
|
80
|
+
|
81
|
+
- Full messages work correctly with rule failures now (issue #661 fixed via #662) (@stind)
|
82
|
+
- Providing a custom message template for array errors works correctly (issue #663 fixed via #665) (@tadeusz-niemiec)
|
83
|
+
|
84
|
+
|
85
|
+
[Compare v1.5.3...v1.5.4](https://github.com/dry-rb/dry-validation/compare/v1.5.3...v1.5.4)
|
86
|
+
|
87
|
+
## 1.5.3 2020-07-27
|
88
|
+
|
89
|
+
|
90
|
+
### Added
|
91
|
+
|
92
|
+
- You can now access current value's index via `rule(:foo).each do |index:|` (issue #606 done via #657) (@mrbongiolo)
|
93
|
+
|
94
|
+
### Fixed
|
95
|
+
|
96
|
+
- Using `.each(:foo)` works as expected when there are errors related to other keys (issue #659 fixed via #660) (@solnic)
|
97
|
+
|
98
|
+
### Changed
|
99
|
+
|
100
|
+
- `Result#error?` is now a public API and it takes into consideration both schema and rule errors (issue #655 fixed via #656) (@PragTob)
|
101
|
+
|
102
|
+
[Compare v1.5.2...v1.5.3](https://github.com/dry-rb/dry-validation/compare/v1.5.2...v1.5.3)
|
103
|
+
|
104
|
+
## 1.5.2 2020-07-14
|
105
|
+
|
106
|
+
|
107
|
+
### Fixed
|
108
|
+
|
109
|
+
- `key?` predicate in rules no longer crashes when the rule path points to a non-existent array value (issue #653 fixed via #654) (@solnic)
|
110
|
+
|
111
|
+
|
112
|
+
[Compare v1.5.1...v1.5.2](https://github.com/dry-rb/dry-validation/compare/v1.5.1...v1.5.2)
|
113
|
+
|
114
|
+
## 1.5.1 2020-06-18
|
115
|
+
|
116
|
+
|
117
|
+
### Fixed
|
118
|
+
|
119
|
+
- dry-monads no longer required for the `:hints` extension (@schokomarie)
|
120
|
+
- Using `full: true` option works as expected with custom rule messages (issue #618 fixed via #651) (@sirfilip)
|
121
|
+
- Using `locale: ...` option works as expected with hints (issue #589 fixed via 652) (@sirfilip)
|
122
|
+
|
123
|
+
|
124
|
+
[Compare v1.5.0...v1.5.1](https://github.com/dry-rb/dry-validation/compare/v1.5.0...v1.5.1)
|
125
|
+
|
126
|
+
## 1.5.0 2020-03-11
|
127
|
+
|
128
|
+
|
129
|
+
### Added
|
130
|
+
|
131
|
+
- `schema_error?` rule helper (@waiting-for-dev)
|
132
|
+
- `rule_error?` rule helper (@waiting-for-dev)
|
133
|
+
|
134
|
+
### Changed
|
135
|
+
|
136
|
+
- dry-schema dependency was bumped to `~> 1.5` (@solnic)
|
137
|
+
- [internal] `KeyMap` patches have been removed since dry-schema now provides required functionality (@solnic)
|
138
|
+
|
139
|
+
[Compare v1.4.2...v1.5.0](https://github.com/dry-rb/dry-validation/compare/v1.4.2...v1.5.0)
|
140
|
+
|
141
|
+
## 1.4.2 2020-01-18
|
142
|
+
|
143
|
+
|
144
|
+
### Fixed
|
145
|
+
|
146
|
+
- Macros using predicates that accept a range argument work as expected (no need to wrap the argument in an array) (@waiting-for-dev)
|
147
|
+
|
148
|
+
|
149
|
+
[Compare v1.4.1...v1.4.2](https://github.com/dry-rb/dry-validation/compare/v1.4.1...v1.4.2)
|
150
|
+
|
151
|
+
## 1.4.1 2020-01-08
|
152
|
+
|
153
|
+
|
154
|
+
### Added
|
155
|
+
|
156
|
+
- Pattern matching on result values (@flash-gordon)
|
157
|
+
|
158
|
+
### Fixed
|
159
|
+
|
160
|
+
- List tokens are correctly interpolated as a comma separated list in rule messages (see #611) (@waiting-for-dev)
|
161
|
+
- Warnings about delegated keywords (@flash-gordon)
|
162
|
+
|
163
|
+
|
164
|
+
[Compare v1.4.0...v1.4.1](https://github.com/dry-rb/dry-validation/compare/v1.4.0...v1.4.1)
|
165
|
+
|
166
|
+
## 1.4.0 2019-12-12
|
167
|
+
|
168
|
+
|
169
|
+
### Added
|
170
|
+
|
171
|
+
- Support for multi-schema inheritance (@ianwhite)
|
172
|
+
|
173
|
+
### Fixed
|
174
|
+
|
175
|
+
- Keyword warnings reported by Ruby 2.7 (@flash-gordon)
|
176
|
+
- Fixed an issue where `MessageSet` would be marked as empty too early (@ianwhite)
|
177
|
+
- Messages are correctly generated when there are errors for both an array and one or more of its elements (see #599) (@Bugagazavr)
|
2
178
|
|
3
179
|
### Changed
|
4
180
|
|
5
|
-
|
181
|
+
- A meaningful exception is raised when failure options are not valid (@MatElGran)
|
182
|
+
- [internal] improved performance in `Contract.ensure_valid_keys` (@grzegorz-jakubiak)
|
183
|
+
- [internal] fixed keyword warnings on MRI 2.7.0 (@flash-gordon)
|
184
|
+
|
185
|
+
[Compare v1.3.1...v1.4.0](https://github.com/dry-rb/dry-validation/compare/v1.3.1...v1.4.0)
|
186
|
+
|
187
|
+
## 1.3.1 2019-08-16
|
188
|
+
|
189
|
+
|
190
|
+
### Changed
|
191
|
+
|
192
|
+
- You can now set an external schema without providing a block (@alassek)
|
6
193
|
|
7
194
|
[Compare v1.3.0...v1.3.1](https://github.com/dry-rb/dry-validation/compare/v1.3.0...v1.3.1)
|
8
195
|
|
9
|
-
|
196
|
+
## 1.3.0 2019-08-14
|
197
|
+
|
10
198
|
|
11
199
|
### Added
|
12
200
|
|
13
|
-
|
201
|
+
- Support for setting an external schema (that can be extended too) (fixed #574) (@solnic)
|
14
202
|
|
15
203
|
### Fixed
|
16
204
|
|
17
|
-
|
205
|
+
- Using a hash spec to define rule keys with more than one value is properly handled by rule guard now (fixed #576) (@solnic)
|
18
206
|
|
19
207
|
### Changed
|
20
208
|
|
21
|
-
|
209
|
+
- `values` within rules uses `Hash#fetch_values` internally now, which improves performance (@esparta)
|
22
210
|
|
23
211
|
[Compare v1.2.1...v1.3.0](https://github.com/dry-rb/dry-validation/compare/v1.2.1...v1.3.0)
|
24
212
|
|
25
|
-
|
213
|
+
## 1.2.1 2019-07-16
|
214
|
+
|
26
215
|
|
27
216
|
### Fixed
|
28
217
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
218
|
+
- Defining an abstract contract class that has no schema no longer crashes (issue #565) (@solnic)
|
219
|
+
- Fixed an issue where `Rule#each` would crash when the value is not an array (issue #567) (@solnic)
|
220
|
+
- Fixed an issue where guarding a rule would crash when keys are missing in the input (issue #569) (@solnic)
|
221
|
+
- Added missing "pathname" require (issue #570) (@solnic)
|
222
|
+
|
33
223
|
|
34
224
|
[Compare v1.2.0...v1.2.1](https://github.com/dry-rb/dry-validation/compare/v1.2.0...v1.2.1)
|
35
225
|
|
36
|
-
|
226
|
+
## 1.2.0 2019-07-08
|
227
|
+
|
37
228
|
|
38
229
|
### Added
|
39
230
|
|
40
|
-
|
231
|
+
- New extension `:predicates_as_macros` (@waiting-for-dev)
|
41
232
|
|
42
233
|
### Fixed
|
43
234
|
|
44
|
-
|
235
|
+
- Guarding rules for nested keys works correctly (issue #560) (@solnic)
|
45
236
|
|
46
237
|
### Changed
|
47
238
|
|
48
|
-
|
239
|
+
- `dry-schema` dependency was bumped to `>= 1.3.1` (@solnic)
|
49
240
|
|
50
241
|
[Compare v1.1.1...v1.2.0](https://github.com/dry-rb/dry-validation/compare/v1.1.1...v1.2.0)
|
51
242
|
|
52
|
-
|
243
|
+
## 1.1.1 2019-06-24
|
244
|
+
|
53
245
|
|
54
246
|
### Fixed
|
55
247
|
|
56
|
-
|
248
|
+
- `Rule#each` works with array values from nested hashes (@mustardnoise)
|
249
|
+
|
57
250
|
|
58
251
|
[Compare v1.1.0...v1.1.1](https://github.com/dry-rb/dry-validation/compare/v1.1.0...v1.1.1)
|
59
252
|
|
60
|
-
|
253
|
+
## 1.1.0 2019-06-14
|
254
|
+
|
61
255
|
|
62
256
|
### Added
|
63
257
|
|
64
|
-
|
65
|
-
|
66
|
-
|
258
|
+
- `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)
|
259
|
+
- `value` supports hash-based path specifications now (refs #547) (@solnic)
|
260
|
+
- `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)
|
67
261
|
|
68
262
|
### Fixed
|
69
263
|
|
70
|
-
|
264
|
+
- Passing multiple macro names to `validate` or `each` works correctly (fixed #538 #541) (@jandudulski)
|
71
265
|
|
72
|
-
[Compare v1.0.0...v1.1.0](https://github.com/dry-rb/dry-validation/compare/v1.0.0...v1.1.0)
|
73
266
|
|
74
|
-
|
267
|
+
[Compare v1.0.0...v1.1.0](https://github.com/dry-rb/dry-validation/compare/v1.0.0...v1.1.0)
|
75
268
|
|
76
|
-
|
269
|
+
## 1.0.0 2019-06-10
|
77
270
|
|
78
271
|
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).
|
79
272
|
|
80
|
-
### :sparkles: Release highlights :sparkles:
|
81
273
|
|
82
|
-
-
|
83
|
-
- Improved message backends with support for `key` and `base` messages, and arbitrary meta-data (like error codes etc.)
|
84
|
-
- Support for defining rules for array elements ie `rule(:items).each { ... }`
|
85
|
-
- Support for macros that encapsulate common rule logic
|
86
|
-
- Built-in `:acceptance` macro
|
274
|
+
[Compare v1.0.0...v1.0.0](https://github.com/dry-rb/dry-validation/compare/v1.0.0...v1.0.0)
|
87
275
|
|
88
|
-
|
276
|
+
## 1.0.0 2019-06-10
|
89
277
|
|
90
|
-
# v1.0.0 2019-06-10 (compared to 1.0.0.rc3)
|
91
278
|
|
92
279
|
### Added
|
93
280
|
|
@@ -110,65 +297,69 @@ See [the list of all addressed issues](https://github.com/dry-rb/dry-validation/
|
|
110
297
|
|
111
298
|
[Compare v1.0.0.rc3...v1.0.0](https://github.com/dry-rb/dry-validation/compare/v1.0.0.rc3...v1.0.0)
|
112
299
|
|
113
|
-
|
300
|
+
## 1.0.0.rc3 2019-05-06
|
301
|
+
|
114
302
|
|
115
303
|
### Added
|
116
304
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
305
|
+
- [EXPERIMENTAL] `Validation.register_macro` for registering global macros (solnic)
|
306
|
+
- [EXPERIMENTAL] `Contract.register_macro` for registering macros available to specific contract classes (solnic)
|
307
|
+
- `Dry::Validation.Contract` shortcut for quickly defining a contract and getting its instance back (solnic)
|
308
|
+
- New configuration option `config.locale` for setting the default locale (solnic)
|
121
309
|
|
122
310
|
### Fixed
|
123
311
|
|
124
|
-
|
312
|
+
- `config/errors.yml` are now bundled with the gem, **`rc2` was broken because of this** (solnic)
|
313
|
+
|
125
314
|
|
126
315
|
[Compare v1.0.0.rc2...v1.0.0.rc3](https://github.com/dry-rb/dry-validation/compare/v1.0.0.rc2...v1.0.0.rc3)
|
127
316
|
|
128
|
-
|
317
|
+
## 1.0.0.rc2 2019-05-04
|
129
318
|
|
130
319
|
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`.
|
131
320
|
|
132
321
|
### Added
|
133
322
|
|
134
|
-
|
135
|
-
|
323
|
+
- [EXPERIMENTAL] support for registering macros via `Dry::Validation::Macros.register(:your_macro, &block)` (solnic)
|
324
|
+
- [EXPERIMENTAL] `:acceptance` as the first built-in macro (issue #157) (solnic)
|
136
325
|
|
137
326
|
### Fixed
|
138
327
|
|
139
|
-
|
328
|
+
- Passing invalid argument to `failure` will raise a meaningful error instead of crashing (solnic)
|
140
329
|
|
141
330
|
### Changed
|
142
331
|
|
143
|
-
|
144
|
-
|
332
|
+
- 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)
|
333
|
+
- Dependency on `dry-schema` was updated to `~> 1.0` (solnic)
|
145
334
|
|
146
335
|
[Compare v1.0.0.rc1...v1.0.0.rc2](https://github.com/dry-rb/dry-validation/compare/v1.0.0.rc1...v1.0.0.rc2)
|
147
336
|
|
148
|
-
|
337
|
+
## 1.0.0.rc1 2019-04-26
|
338
|
+
|
149
339
|
|
150
340
|
### Added
|
151
341
|
|
152
|
-
|
153
|
-
|
342
|
+
- `:hints` extension is back (solnic)
|
343
|
+
- `Result` objects have access to the context object which is shared between rules (flash-gordon)
|
154
344
|
|
155
345
|
### Fixed
|
156
346
|
|
157
|
-
|
158
|
-
|
347
|
+
- Multiple hint messages no longer crash message set (flash-gordon)
|
348
|
+
- `Contract#inspect` no longer crashes (solnic)
|
159
349
|
|
160
350
|
### Changed
|
161
351
|
|
162
|
-
|
163
|
-
|
352
|
+
- Dependency on `dry-schema` was bumped to `~> 0.6` - this pulls in `dry-types 1.0.0` and `dry-logic 1.0.0` (solnic)
|
353
|
+
- Dependency on `dry-initializer` was bumped to `~> 3.0` (solnic)
|
164
354
|
|
165
355
|
[Compare v1.0.0.beta2...v1.0.0.rc1](https://github.com/dry-rb/dry-validation/compare/v1.0.0.beta2...v1.0.0.rc1)
|
166
356
|
|
167
|
-
|
357
|
+
## 1.0.0.beta2 2019-04-04
|
358
|
+
|
168
359
|
|
169
360
|
### Added
|
170
361
|
|
171
|
-
|
362
|
+
- Support for arbitrary meta-data in failures, ie:
|
172
363
|
|
173
364
|
```ruby
|
174
365
|
class NewUserContract < Dry::Validation::Contract
|
@@ -186,98 +377,107 @@ This was **yanked** on rubygems.org because the bundled gem was missing `config`
|
|
186
377
|
|
187
378
|
### Changed
|
188
379
|
|
189
|
-
|
190
|
-
|
191
|
-
|
380
|
+
- [BREAKING] `Error` was renamed to `Message` as it is a more generic concept (solnic)
|
381
|
+
- [BREAKING] `ErrorSet` was renamed to `MessageSet` for consistency (solnic)
|
382
|
+
- [BREAKING] `:monads` extension wraps entire result objects in `Success` or `Failure` (flash-gordon)
|
192
383
|
|
193
384
|
[Compare v1.0.0.beta1...v1.0.0.beta2](https://github.com/dry-rb/dry-validation/compare/v1.0.0.beta1...v1.0.0.beta2)
|
194
385
|
|
195
|
-
|
386
|
+
## 1.0.0.beta1 2019-03-26
|
387
|
+
|
196
388
|
|
197
389
|
### Added
|
198
390
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
391
|
+
- New API for setting failures `base.failure` for base errors and `key.failure` for key errors (solnic)
|
392
|
+
- Support for `base` errors associated with a key even when child keys have errors too (solnic)
|
393
|
+
- Support for `base` errors not associated with any key (solnic)
|
394
|
+
- Result objects use `ErrorSet` object now for managing messages (solnic)
|
395
|
+
- Nested keys are properly handled when generating messages hash (issue #489) (flash-gordon + solnic)
|
396
|
+
- Result objects support `locale` and `full` options now (solnic)
|
397
|
+
- Ability to configure `top_namespace` for messages, which will be used for both schema and rule localization (solnic)
|
398
|
+
- Rule blocks receive a context object that you can use to share data between rules (solnic)
|
207
399
|
|
208
400
|
### Changed
|
209
401
|
|
210
|
-
|
211
|
-
|
212
|
-
|
402
|
+
- [BREAKING] `Result#errors` returns an instance of `ErrorSet` now, it's an enumerable, coerible to a hash (solnic)
|
403
|
+
- [BREAKING] `failure` was removed in favor of `key.failure` or `key(:foo).failure` (solnic)
|
404
|
+
- [BREAKING] `Result#to_hash` was removed (flash-gordon)
|
213
405
|
|
214
406
|
[Compare v1.0.0.alpha2...v1.0.0.beta1](https://github.com/dry-rb/dry-validation/compare/v1.0.0.alpha2...v1.0.0.beta1)
|
215
407
|
|
216
|
-
|
408
|
+
## 1.0.0.alpha2 2019-03-05
|
217
409
|
|
218
410
|
First round of bug fixes. Thanks for testing <3!
|
219
411
|
|
220
412
|
### Fixed
|
221
413
|
|
222
|
-
|
223
|
-
|
224
|
-
|
414
|
+
- Errors with nested messages are correctly built (flash-gordon)
|
415
|
+
- Messages for nested keys are correctly resolved (solnic)
|
416
|
+
- 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)
|
225
417
|
|
226
418
|
### Changed
|
227
419
|
|
228
|
-
|
420
|
+
- When a message template is not found a more meaningful error is raised that includes both rule identifier and key path (solnic)
|
229
421
|
|
230
422
|
[Compare v1.0.0.alpha1...v1.0.0.alpha2](https://github.com/dry-rb/dry-validation/compare/v1.0.0.alpha1...v1.0.0.alpha2)
|
231
423
|
|
232
|
-
|
424
|
+
## 1.0.0.alpha1 2019-03-04
|
233
425
|
|
234
426
|
Complete rewrite on top of `dry-schema`.
|
235
427
|
|
236
428
|
### Added
|
237
429
|
|
238
|
-
|
239
|
-
|
430
|
+
- [BREAKING] `Dry::Validation::Contract` as a replacement for validation schemas (solnic)
|
431
|
+
- [BREAKING] New `rule` DSL with an improved API for setting error messages (solnic)
|
240
432
|
|
241
|
-
[Compare v0.13.0...v1.0.0.alpha1](https://github.com/dry-rb/dry-validation/compare/v0.13.0...v1.0.0.alpha1)
|
242
433
|
|
243
|
-
|
434
|
+
[Compare v0.13.0...v1.0.0.alpha1](https://github.com/dry-rb/dry-validation/compare/v0.13.0...v1.0.0.alpha1)
|
244
435
|
|
245
|
-
|
436
|
+
## 0.13.0 2019-01-29
|
246
437
|
|
247
|
-
- `dry-logic` was bumped to `~> 0.5` (solnic)
|
248
|
-
- `dry-types` was bumped to `~> 0.14` (solnic)
|
249
438
|
|
250
439
|
### Fixed
|
251
440
|
|
252
441
|
- Warning about method redefined (amatsuda)
|
253
442
|
|
443
|
+
### Changed
|
444
|
+
|
445
|
+
- `dry-logic` was bumped to `~> 0.5` (solnic)
|
446
|
+
- `dry-types` was bumped to `~> 0.14` (solnic)
|
447
|
+
|
254
448
|
[Compare v0.12.3...v0.13.0](https://github.com/dry-rb/dry-validation/compare/v0.12.3...v0.13.0)
|
255
449
|
|
256
|
-
|
450
|
+
## 0.12.3 2019-01-29
|
451
|
+
|
257
452
|
|
258
453
|
### Changed
|
259
454
|
|
260
|
-
|
455
|
+
- [internal] dry-logic was pinned to `~> 0.4.2` (flash-gordon)
|
261
456
|
|
262
457
|
[Compare v0.12.2...v0.12.3](https://github.com/dry-rb/dry-validation/compare/v0.12.2...v0.12.3)
|
263
458
|
|
264
|
-
|
459
|
+
## 0.12.2 2018-08-29
|
460
|
+
|
265
461
|
|
266
462
|
### Fixed
|
267
463
|
|
268
464
|
- Use correct key names for rule messages when using i18n (jozzi05)
|
269
465
|
|
466
|
+
|
270
467
|
[Compare v0.12.1...v0.12.2](https://github.com/dry-rb/dry-validation/compare/v0.12.1...v0.12.2)
|
271
468
|
|
272
|
-
|
469
|
+
## 0.12.1 2018-07-06
|
470
|
+
|
273
471
|
|
274
472
|
### Fixed
|
275
473
|
|
276
474
|
- [internal] fixed deprecation warnings (flash-gordon)
|
277
475
|
|
476
|
+
|
278
477
|
[Compare v0.12.0...v0.12.1](https://github.com/dry-rb/dry-validation/compare/v0.12.0...v0.12.1)
|
279
478
|
|
280
|
-
|
479
|
+
## 0.12.0 2018-05-31
|
480
|
+
|
281
481
|
|
282
482
|
### Changed
|
283
483
|
|
@@ -286,7 +486,8 @@ Complete rewrite on top of `dry-schema`.
|
|
286
486
|
|
287
487
|
[Compare v0.11.1...v0.12.0](https://github.com/dry-rb/dry-validation/compare/v0.11.1...v0.12.0)
|
288
488
|
|
289
|
-
|
489
|
+
## 0.11.1 2017-09-15
|
490
|
+
|
290
491
|
|
291
492
|
### Changed
|
292
493
|
|
@@ -295,7 +496,8 @@ Complete rewrite on top of `dry-schema`.
|
|
295
496
|
|
296
497
|
[Compare v0.11.0...v0.11.1](https://github.com/dry-rb/dry-validation/compare/v0.11.0...v0.11.1)
|
297
498
|
|
298
|
-
|
499
|
+
## 0.11.0 2017-05-30
|
500
|
+
|
299
501
|
|
300
502
|
### Changed
|
301
503
|
|
@@ -303,32 +505,39 @@ Complete rewrite on top of `dry-schema`.
|
|
303
505
|
|
304
506
|
[Compare v0.10.7...v0.11.0](https://github.com/dry-rb/dry-validation/compare/v0.10.7...v0.11.0)
|
305
507
|
|
306
|
-
|
508
|
+
## 0.10.7 2017-05-15
|
509
|
+
|
307
510
|
|
308
511
|
### Fixed
|
309
512
|
|
310
513
|
- `validate` can now be defined multiple times for the same key (kimquy)
|
311
514
|
- Re-using rules between schemas no longer mutates original rule set (pabloh)
|
312
515
|
|
516
|
+
|
313
517
|
[Compare v0.10.6...v0.10.7](https://github.com/dry-rb/dry-validation/compare/v0.10.6...v0.10.7)
|
314
518
|
|
315
|
-
|
519
|
+
## 0.10.6 2017-04-26
|
520
|
+
|
316
521
|
|
317
522
|
### Fixed
|
318
523
|
|
319
524
|
- Fixes issue with wrong localized error messages when namespaced messages are used (kbredemeier)
|
320
525
|
|
526
|
+
|
321
527
|
[Compare v0.10.5...v0.10.6](https://github.com/dry-rb/dry-validation/compare/v0.10.5...v0.10.6)
|
322
528
|
|
323
|
-
|
529
|
+
## 0.10.5 2017-01-12
|
530
|
+
|
324
531
|
|
325
532
|
### Fixed
|
326
533
|
|
327
534
|
- Warnings under MRI 2.4.0 are gone (koic)
|
328
535
|
|
536
|
+
|
329
537
|
[Compare v0.10.4...v0.10.5](https://github.com/dry-rb/dry-validation/compare/v0.10.4...v0.10.5)
|
330
538
|
|
331
|
-
|
539
|
+
## 0.10.4 2016-12-03
|
540
|
+
|
332
541
|
|
333
542
|
### Fixed
|
334
543
|
|
@@ -341,31 +550,38 @@ Complete rewrite on top of `dry-schema`.
|
|
341
550
|
|
342
551
|
[Compare v0.10.3...v0.10.4](https://github.com/dry-rb/dry-validation/compare/v0.10.3...v0.10.4)
|
343
552
|
|
344
|
-
|
553
|
+
## 0.10.3 2016-09-27
|
554
|
+
|
345
555
|
|
346
556
|
### Fixed
|
347
557
|
|
348
558
|
- Custom predicates work correctly with `each` macro (solnic)
|
349
559
|
|
560
|
+
|
350
561
|
[Compare v0.10.2...v0.10.3](https://github.com/dry-rb/dry-validation/compare/v0.10.2...v0.10.3)
|
351
562
|
|
352
|
-
|
563
|
+
## 0.10.2 2016-09-23
|
564
|
+
|
353
565
|
|
354
566
|
### Fixed
|
355
567
|
|
356
568
|
- Constrained types + hints work again (solnic)
|
357
569
|
|
570
|
+
|
358
571
|
[Compare v0.10.1...v0.10.2](https://github.com/dry-rb/dry-validation/compare/v0.10.1...v0.10.2)
|
359
572
|
|
360
|
-
|
573
|
+
## 0.10.1 2016-09-22
|
574
|
+
|
361
575
|
|
362
576
|
### Fixed
|
363
577
|
|
364
578
|
- Remove obsolete require of `dry/struct` which is now an optional extension (flash-gordon)
|
365
579
|
|
580
|
+
|
366
581
|
[Compare v0.10.0...v0.10.1](https://github.com/dry-rb/dry-validation/compare/v0.10.0...v0.10.1)
|
367
582
|
|
368
|
-
|
583
|
+
## 0.10.0 2016-09-21
|
584
|
+
|
369
585
|
|
370
586
|
### Added
|
371
587
|
|
@@ -388,34 +604,31 @@ Complete rewrite on top of `dry-schema`.
|
|
388
604
|
- [BREAKING] `when` macro no longer supports multiple disconnected rules in its block, whatever the block returns will be used for the implication (solnic)
|
389
605
|
- [BREAKING] `rule(some_name: %i(some keys))` will _always_ use `:some_name` as the key for failure messages (solnic)
|
390
606
|
|
391
|
-
### Internal
|
392
|
-
|
393
|
-
- ~2 x performance boost (solnic)
|
394
|
-
- Rule AST was updated to latest dry-logic (solnic)
|
395
|
-
- `MessageCompiler` was drastically simplified based on the new result AST from dry-logic (solnic)
|
396
|
-
- `HintCompiler` is gone as hints are now part of the result AST (solnic)
|
397
|
-
- `maybe` macro creates an implication instead of a disjunction (`not(none?).then(*your-predicates)`) (solnic)
|
398
|
-
|
399
607
|
[Compare v0.9.5...v0.10.0](https://github.com/dry-rb/dry-validation/compare/v0.9.5...v0.10.0)
|
400
608
|
|
401
|
-
|
609
|
+
## 0.9.5 2016-08-16
|
610
|
+
|
402
611
|
|
403
612
|
### Fixed
|
404
613
|
|
405
614
|
- Infering multiple predicates with options works as expected ie `value(:str?, min_size?: 3, max_size?: 6)` (solnic)
|
406
615
|
- Default `locale` configured in `I18n` is now respected by the messages compiler (agustin + cavi21)
|
407
616
|
|
617
|
+
|
408
618
|
[Compare v0.9.4...v0.9.5](https://github.com/dry-rb/dry-validation/compare/v0.9.4...v0.9.5)
|
409
619
|
|
410
|
-
|
620
|
+
## 0.9.4 2016-08-11
|
621
|
+
|
411
622
|
|
412
623
|
### Fixed
|
413
624
|
|
414
625
|
- Error messages for sibling deeply nested schemas are nested correctly (timriley)
|
415
626
|
|
627
|
+
|
416
628
|
[Compare v0.9.3...v0.9.4](https://github.com/dry-rb/dry-validation/compare/v0.9.3...v0.9.4)
|
417
629
|
|
418
|
-
|
630
|
+
## 0.9.3 2016-07-22
|
631
|
+
|
419
632
|
|
420
633
|
### Added
|
421
634
|
|
@@ -433,24 +646,29 @@ Complete rewrite on top of `dry-schema`.
|
|
433
646
|
|
434
647
|
[Compare v0.9.2...v0.9.3](https://github.com/dry-rb/dry-validation/compare/v0.9.2...v0.9.3)
|
435
648
|
|
436
|
-
|
649
|
+
## 0.9.2 2016-07-13
|
650
|
+
|
437
651
|
|
438
652
|
### Fixed
|
439
653
|
|
440
654
|
- Constrained types now work with `each` macro (solnic)
|
441
655
|
- Array coercion without member type works now ie `required(:arr).maybe(:array?)` (solnic)
|
442
656
|
|
657
|
+
|
443
658
|
[Compare v0.9.1...v0.9.2](https://github.com/dry-rb/dry-validation/compare/v0.9.1...v0.9.2)
|
444
659
|
|
445
|
-
|
660
|
+
## 0.9.1 2016-07-11
|
661
|
+
|
446
662
|
|
447
663
|
### Fixed
|
448
664
|
|
449
665
|
- `I18n` backend is no longer required and set by default (solnic)
|
450
666
|
|
667
|
+
|
451
668
|
[Compare v0.9.0...v0.9.1](https://github.com/dry-rb/dry-validation/compare/v0.9.0...v0.9.1)
|
452
669
|
|
453
|
-
|
670
|
+
## 0.9.0 2016-07-08
|
671
|
+
|
454
672
|
|
455
673
|
### Added
|
456
674
|
|
@@ -463,10 +681,6 @@ Complete rewrite on top of `dry-schema`.
|
|
463
681
|
- Support for message token transformations in custom predicates (fran-worley)
|
464
682
|
- [EXPERIMENTAL] Ability to compose predicates that accept dynamic args provided by the schema (solnic)
|
465
683
|
|
466
|
-
### Changed
|
467
|
-
|
468
|
-
- Tokens for `size?` were renamed `left` => `size_left` and `right` => `size_right` (fran-worley)
|
469
|
-
|
470
684
|
### Fixed
|
471
685
|
|
472
686
|
- Duped key names in nested schemas no longer result in invalid error messages structure (solnic)
|
@@ -476,18 +690,14 @@ Complete rewrite on top of `dry-schema`.
|
|
476
690
|
- Hints for elements are no longer provided for an array when the value is not an array (solnic)
|
477
691
|
- `input` macro no longer messes up error messages for nested structures (solnic)
|
478
692
|
|
479
|
-
###
|
693
|
+
### Changed
|
480
694
|
|
481
|
-
-
|
482
|
-
- Refactored Error and Hint compilers (solnic)
|
483
|
-
- Refactored Schema to use an internal executor objects with steps (solnic)
|
484
|
-
- Extracted root-rule into a separate validation step (solnic)
|
485
|
-
- Added `MessageSet` that result objects now use (in 1.0.0 it'll be exposed via public API) (solnic)
|
486
|
-
- We can now distinguish error messages from validation hints via `Message` and `Hint` objects (solnic)
|
695
|
+
- Tokens for `size?` were renamed `left` => `size_left` and `right` => `size_right` (fran-worley)
|
487
696
|
|
488
697
|
[Compare v0.8.0...v0.9.0](https://github.com/dry-rb/dry-validation/compare/v0.8.0...v0.9.0)
|
489
698
|
|
490
|
-
|
699
|
+
## 0.8.0 2016-07-01
|
700
|
+
|
491
701
|
|
492
702
|
### Added
|
493
703
|
|
@@ -533,19 +743,10 @@ Complete rewrite on top of `dry-schema`.
|
|
533
743
|
- Deprecate key in favor of required (coop)
|
534
744
|
- Remove nested key syntax (solnic)
|
535
745
|
|
536
|
-
### Internal
|
537
|
-
|
538
|
-
- ~15% performance boost via various optimizations (solnic)
|
539
|
-
- When using explicit type specs building a schema is ~80-85x faster (solnic)
|
540
|
-
- No longer uses `Dry::Types::Predicates` as `:type?` predicate was moved to dry-logic (solnic)
|
541
|
-
- Integration specs covering predicates with Form and Schema (jodosha)
|
542
|
-
- Use latest ruby versions on travis (flash-gordon)
|
543
|
-
- Make pry console optional with IRB as a default (flash-gordon)
|
544
|
-
- Remove wrapping rules in :set nodes (solnic)
|
545
|
-
|
546
746
|
[Compare v0.7.4...v0.8.0](https://github.com/dry-rb/dry-validation/compare/v0.7.4...v0.8.0)
|
547
747
|
|
548
|
-
|
748
|
+
## 0.7.4 2016-04-06
|
749
|
+
|
549
750
|
|
550
751
|
### Added
|
551
752
|
|
@@ -556,9 +757,11 @@ Complete rewrite on top of `dry-schema`.
|
|
556
757
|
|
557
758
|
- Depending on deeply nested values in high-level rules works now (solnic)
|
558
759
|
|
760
|
+
|
559
761
|
[Compare v0.7.3...v0.7.4](https://github.com/dry-rb/dry-validation/compare/v0.7.3...v0.7.4)
|
560
762
|
|
561
|
-
|
763
|
+
## 0.7.3 2016-03-30
|
764
|
+
|
562
765
|
|
563
766
|
### Added
|
564
767
|
|
@@ -571,22 +774,22 @@ Complete rewrite on top of `dry-schema`.
|
|
571
774
|
- Creating a nested schema properly sets full path to nested data structure (solnic)
|
572
775
|
- Error message for `empty?` predicate is now correct (jodosha)
|
573
776
|
|
574
|
-
### Internal
|
575
|
-
|
576
|
-
- Switch from `thread_safe` to `concurrent` (joevandyk)
|
577
777
|
|
578
778
|
[Compare v0.7.2...v0.7.3](https://github.com/dry-rb/dry-validation/compare/v0.7.2...v0.7.3)
|
579
779
|
|
580
|
-
|
780
|
+
## 0.7.2 2016-03-28
|
781
|
+
|
581
782
|
|
582
783
|
### Added
|
583
784
|
|
584
785
|
- Support for nested schemas inside high-level rules (solnic)
|
585
786
|
- `Schema#to_proc` so that you can do `data.each(&schema)` (solnic)
|
586
787
|
|
788
|
+
|
587
789
|
[Compare v0.7.1...v0.7.2](https://github.com/dry-rb/dry-validation/compare/v0.7.1...v0.7.2)
|
588
790
|
|
589
|
-
|
791
|
+
## 0.7.1 2016-03-21
|
792
|
+
|
590
793
|
|
591
794
|
### Added
|
592
795
|
|
@@ -604,7 +807,8 @@ Complete rewrite on top of `dry-schema`.
|
|
604
807
|
|
605
808
|
[Compare v0.7.0...v0.7.1](https://github.com/dry-rb/dry-validation/compare/v0.7.0...v0.7.1)
|
606
809
|
|
607
|
-
|
810
|
+
## 0.7.0 2016-03-16
|
811
|
+
|
608
812
|
|
609
813
|
### Added
|
610
814
|
|
@@ -628,6 +832,12 @@ Complete rewrite on top of `dry-schema`.
|
|
628
832
|
- `Validation::Result` responds to `#[]` and `#each` (delegating to its output)
|
629
833
|
and it's an enumerable (solnic)
|
630
834
|
|
835
|
+
### Fixed
|
836
|
+
|
837
|
+
- Qualified rule names properly use last node by default for error messages (solnic)
|
838
|
+
- Validation hints only include relevant messages (solnic)
|
839
|
+
- `:yaml` messages respect `:locale` option in `Result#messages` (solnic)
|
840
|
+
|
631
841
|
### Changed
|
632
842
|
|
633
843
|
- `schema` was **removed** from the DSL, just use `key(:name).schema` instead (solnic)
|
@@ -638,15 +848,10 @@ Complete rewrite on top of `dry-schema`.
|
|
638
848
|
- `Schema::Result` is now `Validation::Result` and it no longer has success and
|
639
849
|
failure results, only error results are provided (solnic)
|
640
850
|
|
641
|
-
### Fixed
|
642
|
-
|
643
|
-
- Qualified rule names properly use last node by default for error messages (solnic)
|
644
|
-
- Validation hints only include relevant messages (solnic)
|
645
|
-
- `:yaml` messages respect `:locale` option in `Result#messages` (solnic)
|
646
|
-
|
647
851
|
[Compare v0.6.0...v0.7.0](https://github.com/dry-rb/dry-validation/compare/v0.6.0...v0.7.0)
|
648
852
|
|
649
|
-
|
853
|
+
## 0.6.0 2016-01-20
|
854
|
+
|
650
855
|
|
651
856
|
### Added
|
652
857
|
|
@@ -657,38 +862,41 @@ Complete rewrite on top of `dry-schema`.
|
|
657
862
|
- Support for `confirmation(:foo, some_predicate: some_argument)` shortcut syntax (solnic)
|
658
863
|
- Support for error messages for grouped rules (like `confirmation`) (solnic)
|
659
864
|
- Schemas support injecting rules from the outside (solnic)
|
660
|
-
|
661
|
-
## Changed
|
662
|
-
|
865
|
+
- ## Changed
|
663
866
|
- `rule` uses objects that inherit from `BasicObject` to avoid conflicts with
|
664
867
|
predicate names and built-in `Object` methods (solnic)
|
665
868
|
- In `Schema::Form` both `key` and `optional` will apply `filled?` predicate by
|
666
869
|
default when no block is passed (solnic)
|
667
870
|
|
871
|
+
|
668
872
|
[Compare v0.5.0...v0.6.0](https://github.com/dry-rb/dry-validation/compare/v0.5.0...v0.6.0)
|
669
873
|
|
670
|
-
|
874
|
+
## 0.5.0 2016-01-11
|
671
875
|
|
672
|
-
### Changed
|
673
|
-
|
674
|
-
- Now depends on [dry-logic](https://github.com/dry-rb/dry-logic) for predicates and rules (solnic)
|
675
|
-
- `dry/validation/schema/form` is now required by default (solnic)
|
676
876
|
|
677
877
|
### Fixed
|
678
878
|
|
679
879
|
- `Schema::Form` uses safe `form.array` and `form.hash` types which fixes #42 (solnic)
|
680
880
|
|
881
|
+
### Changed
|
882
|
+
|
883
|
+
- Now depends on [dry-logic](https://github.com/dry-rb/dry-logic) for predicates and rules (solnic)
|
884
|
+
- `dry/validation/schema/form` is now required by default (solnic)
|
885
|
+
|
681
886
|
[Compare v0.4.1...v0.5.0](https://github.com/dry-rb/dry-validation/compare/v0.4.1...v0.5.0)
|
682
887
|
|
683
|
-
|
888
|
+
## 0.4.1 2015-12-27
|
889
|
+
|
684
890
|
|
685
891
|
### Added
|
686
892
|
|
687
893
|
- Support for `each` and type coercion inference in `Schema::Form` (solnic)
|
688
894
|
|
895
|
+
|
689
896
|
[Compare v0.4.0...v0.4.1](https://github.com/dry-rb/dry-validation/compare/v0.4.0...v0.4.1)
|
690
897
|
|
691
|
-
|
898
|
+
## 0.4.0 2015-12-21
|
899
|
+
|
692
900
|
|
693
901
|
### Added
|
694
902
|
|
@@ -702,9 +910,11 @@ Complete rewrite on top of `dry-schema`.
|
|
702
910
|
|
703
911
|
- Error messages hash has now consistent structure `rule_name => [msgs_array, input_value]` (solnic)
|
704
912
|
|
913
|
+
|
705
914
|
[Compare v0.3.1...v0.4.0](https://github.com/dry-rb/dry-validation/compare/v0.3.1...v0.4.0)
|
706
915
|
|
707
|
-
|
916
|
+
## 0.3.1 2015-12-08
|
917
|
+
|
708
918
|
|
709
919
|
### Added
|
710
920
|
|
@@ -714,9 +924,11 @@ Complete rewrite on top of `dry-schema`.
|
|
714
924
|
|
715
925
|
- Error compiler returns an empty hash rather than a nil when there are no errors (solnic)
|
716
926
|
|
927
|
+
|
717
928
|
[Compare v0.3.0...v0.3.1](https://github.com/dry-rb/dry-validation/compare/v0.3.0...v0.3.1)
|
718
929
|
|
719
|
-
|
930
|
+
## 0.3.0 2015-12-07
|
931
|
+
|
720
932
|
|
721
933
|
### Added
|
722
934
|
|
@@ -738,9 +950,10 @@ Complete rewrite on top of `dry-schema`.
|
|
738
950
|
errors and messages
|
739
951
|
- `Schema::Result#messages` returns a hash with rule names, messages and input values (solnic)
|
740
952
|
|
741
|
-
[Compare v0.2.0...
|
953
|
+
[Compare v0.2.0...v0.3.0](https://github.com/dry-rb/dry-validation/compare/v0.2.0...v0.3.0)
|
954
|
+
|
955
|
+
## 0.2.0 2015-11-30
|
742
956
|
|
743
|
-
# v0.2.0 2015-11-30
|
744
957
|
|
745
958
|
### Added
|
746
959
|
|
@@ -761,8 +974,9 @@ Complete rewrite on top of `dry-schema`.
|
|
761
974
|
|
762
975
|
- Added missing `and` / `or` interfaces to composite rules (solnic)
|
763
976
|
|
764
|
-
[Compare v0.1.0...HEAD](https://github.com/dry-rb/dry-validation/compare/v0.1.0...HEAD)
|
765
977
|
|
766
|
-
|
978
|
+
[Compare v0.1.0...v0.2.0](https://github.com/dry-rb/dry-validation/compare/v0.1.0...v0.2.0)
|
979
|
+
|
980
|
+
## 0.1.0 2015-11-25
|
767
981
|
|
768
982
|
First public release
|