dry-validation 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -1
- data/lib/dry/validation/evaluator.rb +16 -0
- data/lib/dry/validation/rule.rb +19 -1
- data/lib/dry/validation/values.rb +31 -8
- data/lib/dry/validation/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4985e6191e9e249b510fceea630ed463f11c5ff07830e6f3f867e913b29860ac
|
4
|
+
data.tar.gz: 99cb37716fb12f4a09bb94a4048935e6ac8db658df4d5a4318be321c5aef90ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d25a5df6a56b6a8ed32f19ed3991297f2d878d24ba5349fd8c8d0ec50a3503842c8b591d7b176ddf9303b78a847002e638faeb29691329db3b2f41d2379116b
|
7
|
+
data.tar.gz: a21649e2476c688f9a4275e43819640823c6e6a2caf18e4b8d03c0df97c946d5edbb517c6482918bf3b3b9bc21079e667c06986c2adc81acdeb0561b1bc264aa
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# v1.1.0 2019-06-14
|
2
|
+
|
3
|
+
### Added
|
4
|
+
|
5
|
+
* `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)
|
6
|
+
* `value` supports hash-based path specifications now (refs #547) (@solnic)
|
7
|
+
* `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)
|
8
|
+
|
9
|
+
### Fixed
|
10
|
+
|
11
|
+
* Passing multiple macro names to `validate` or `each` works correctly (fixed #538 #541) (@jandudulski)
|
12
|
+
|
13
|
+
[Compare v1.0.0...v1.1.0](https://github.com/dry-rb/dry-validation/compare/v1.0.0...v1.1.0)
|
14
|
+
|
1
15
|
# v1.0.0 2019-06-10
|
2
16
|
|
3
17
|
This release is a complete rewrite on top of `dry-schema` that uses contract classes to define schema and validation rules. It's **not backward-compatible**. This release addressed over 150 known issues, including bugs and missing features.
|
@@ -12,7 +26,7 @@ See [the list of all addressed issues](https://github.com/dry-rb/dry-validation/
|
|
12
26
|
- Support for macros that encapsulate common rule logic
|
13
27
|
- Built-in `:acceptance` macro
|
14
28
|
|
15
|
-
[Compare v0.13.3...v1.0.0](https://github.com/dry-rb/dry-validation/compare/
|
29
|
+
[Compare v0.13.3...v1.0.0](https://github.com/dry-rb/dry-validation/compare/v0.13.3...v1.0.0)
|
16
30
|
|
17
31
|
# v1.0.0 2019-06-10 (compared to 1.0.0.rc3)
|
18
32
|
|
@@ -147,6 +147,22 @@ module Dry
|
|
147
147
|
values[key_name]
|
148
148
|
end
|
149
149
|
|
150
|
+
# Return if the value under the default key is available
|
151
|
+
#
|
152
|
+
# This is useful when dealing with rules for optional keys
|
153
|
+
#
|
154
|
+
# @example
|
155
|
+
# rule(:age) do
|
156
|
+
# key.failure(:invalid) if key? && value < 18
|
157
|
+
# end
|
158
|
+
#
|
159
|
+
# @return [Boolean]
|
160
|
+
#
|
161
|
+
# @api public
|
162
|
+
def key?
|
163
|
+
values.key?(key_name)
|
164
|
+
end
|
165
|
+
|
150
166
|
# Check if there are any errors under the provided path
|
151
167
|
#
|
152
168
|
# @param [Symbol, String, Array] A Path-compatible spec
|
data/lib/dry/validation/rule.rb
CHANGED
@@ -54,7 +54,7 @@ module Dry
|
|
54
54
|
#
|
55
55
|
# @api public
|
56
56
|
def validate(*macros, &block)
|
57
|
-
@macros = macros
|
57
|
+
@macros = parse_macros(*macros)
|
58
58
|
@block = block if block
|
59
59
|
self
|
60
60
|
end
|
@@ -68,12 +68,14 @@ module Dry
|
|
68
68
|
# rule(:nums).each do
|
69
69
|
# key.failure("must be greater than 0") if value < 0
|
70
70
|
# end
|
71
|
+
# rule(:nums).each(min: 3)
|
71
72
|
#
|
72
73
|
# @return [Rule]
|
73
74
|
#
|
74
75
|
# @api public
|
75
76
|
def each(*macros, &block)
|
76
77
|
root = keys
|
78
|
+
macros = parse_macros(*macros)
|
77
79
|
@keys = []
|
78
80
|
|
79
81
|
@block = proc do
|
@@ -99,6 +101,22 @@ module Dry
|
|
99
101
|
def inspect
|
100
102
|
%(#<#{self.class} keys=#{keys.inspect}>)
|
101
103
|
end
|
104
|
+
|
105
|
+
# Parse function arguments into macros structure
|
106
|
+
#
|
107
|
+
# @return [Array]
|
108
|
+
#
|
109
|
+
# @api private
|
110
|
+
def parse_macros(*args)
|
111
|
+
args.each_with_object([]) do |spec, macros|
|
112
|
+
case spec
|
113
|
+
when Hash
|
114
|
+
spec.each { |k, v| macros << [k, Array(v)] }
|
115
|
+
else
|
116
|
+
macros << Array(spec)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
102
120
|
end
|
103
121
|
end
|
104
122
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'dry/equalizer'
|
4
|
+
require 'dry/schema/path'
|
4
5
|
require 'dry/validation/constants'
|
5
6
|
|
6
7
|
module Dry
|
@@ -40,17 +41,39 @@ module Dry
|
|
40
41
|
#
|
41
42
|
# @api public
|
42
43
|
def [](*args)
|
43
|
-
if args.size
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
44
|
+
return data.dig(*args) if args.size > 1
|
45
|
+
|
46
|
+
case (key = args[0])
|
47
|
+
when Symbol, String, Array, Hash
|
48
|
+
path = Schema::Path[key]
|
49
|
+
keys = path.to_a
|
50
|
+
|
51
|
+
return data.dig(*keys) unless keys.last.is_a?(Array)
|
52
|
+
|
53
|
+
last = keys.pop
|
54
|
+
vals = self.class.new(data.dig(*keys))
|
55
|
+
|
56
|
+
last.map { |name| vals[name] }
|
57
|
+
else
|
58
|
+
raise ArgumentError, '+key+ must be a valid path specification'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# @api public
|
63
|
+
def key?(key, hash = data)
|
64
|
+
return hash.key?(key) if key.is_a?(Symbol)
|
65
|
+
|
66
|
+
Schema::Path[key].reduce(hash) do |a, e|
|
67
|
+
if e.is_a?(Array)
|
68
|
+
result = e.all? { |k| key?(k, a) }
|
69
|
+
return result
|
48
70
|
else
|
49
|
-
|
71
|
+
return false unless a.is_a?(Array) ? (e >= 0 && e < a.size) : a.key?(e)
|
50
72
|
end
|
51
|
-
|
52
|
-
data.dig(*args)
|
73
|
+
a[e]
|
53
74
|
end
|
75
|
+
|
76
|
+
true
|
54
77
|
end
|
55
78
|
|
56
79
|
# @api private
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-validation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|