dry-schema 1.5.3 → 1.6.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 +73 -0
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/dry-schema.gemspec +3 -4
- data/lib/dry/schema/config.rb +1 -1
- data/lib/dry/schema/key_coercer.rb +1 -1
- data/lib/dry/schema/key_map.rb +1 -1
- data/lib/dry/schema/key_validator.rb +1 -1
- data/lib/dry/schema/macros/value.rb +12 -2
- data/lib/dry/schema/message.rb +1 -1
- data/lib/dry/schema/message/or/multi_path.rb +1 -1
- data/lib/dry/schema/message/or/single_path.rb +1 -1
- data/lib/dry/schema/message_compiler.rb +8 -13
- data/lib/dry/schema/message_set.rb +1 -1
- data/lib/dry/schema/messages/abstract.rb +1 -1
- data/lib/dry/schema/messages/template.rb +1 -1
- data/lib/dry/schema/messages/yaml.rb +1 -1
- data/lib/dry/schema/path.rb +17 -5
- data/lib/dry/schema/predicate.rb +1 -1
- data/lib/dry/schema/result.rb +1 -1
- data/lib/dry/schema/value_coercer.rb +1 -1
- data/lib/dry/schema/version.rb +1 -1
- metadata +13 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '07179bd67f80d0a500d2484a2169f09804612a38ce9601819203d89bc0d109a1'
|
4
|
+
data.tar.gz: 1337a9d5197257e3bc773f87af7785e4297624b3d10699ea5b9c977be4a19a67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10b8ea1df48c45fa50bcc35be0d7e9785c90285fb29bdc0ad712745803280f9de53ea80643dccefd923df263ba20973cd2b4956dd2d773701ff4ad9050ab3742
|
7
|
+
data.tar.gz: 42776d375539ec537361f2c6e95c027020107e6f92bd14a866ed1b37e10af5ae0037eb0866278aa8877ce62f617222201b34f58db3e43925ae89f46585359a9a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,76 @@
|
|
1
|
+
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
2
|
+
|
3
|
+
## 1.6.1 2021-02-02
|
4
|
+
|
5
|
+
|
6
|
+
### Fixed
|
7
|
+
|
8
|
+
- Messages#[] handles meta/no meta cases more gracefully and has better interoperability with the I18n backend. This brings MessageCompiler#visit_unexpected_key up to parity with MessageCompiler#visit_predicate. Uses visit_predicate as basis for visit_unexpected_key. (@robhanlon22)
|
9
|
+
|
10
|
+
|
11
|
+
[Compare v1.6.0...v1.6.1](https://github.com/dry-rb/dry-schema/compare/v1.6.0...v1.6.1)
|
12
|
+
|
13
|
+
## 1.6.0 2021-01-21
|
14
|
+
|
15
|
+
|
16
|
+
### Fixed
|
17
|
+
|
18
|
+
- Using sum types with a i18n backend no longer crashes (issue #328 fixes via #331) (@tylerhunt)
|
19
|
+
|
20
|
+
### Changed
|
21
|
+
|
22
|
+
- Inferring predicates from class names is deprecated. It's very unlikely your code depends on it,
|
23
|
+
however, if it does, you'll get an exception with instructions. (@flash-gordon)
|
24
|
+
|
25
|
+
If you see an exception and don't rely on inferring, just disable it with:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
Dry::Schema::PredicateInferrer::Compiler.infer_predicate_by_class_name false
|
29
|
+
```
|
30
|
+
|
31
|
+
Otherwise, enable it explicitly:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
Dry::Schema::PredicateInferrer::Compiler.infer_predicate_by_class_name true
|
35
|
+
```
|
36
|
+
|
37
|
+
See https://github.com/dry-rb/dry-schema/issues/335 for rationale.
|
38
|
+
|
39
|
+
[Compare v1.5.6...v1.6.0](https://github.com/dry-rb/dry-schema/compare/v1.5.6...v1.6.0)
|
40
|
+
|
41
|
+
## 1.5.6 2020-10-21
|
42
|
+
|
43
|
+
|
44
|
+
### Fixed
|
45
|
+
|
46
|
+
- Fixed stack error which was a regression introduced in 1.5.5 (issue #322 fixed via #323) (@flash-gordon)
|
47
|
+
|
48
|
+
|
49
|
+
[Compare v1.5.5...v1.5.6](https://github.com/dry-rb/dry-schema/compare/v1.5.5...v1.5.6)
|
50
|
+
|
51
|
+
## 1.5.5 2020-10-08
|
52
|
+
|
53
|
+
|
54
|
+
### Fixed
|
55
|
+
|
56
|
+
- Key validation works with messages that have meta-data (issue #310 fixed via #313) (@tadeusz-niemiec)
|
57
|
+
- Using an external schema along with a key specified as a `:hash` works as expected (issue #296 fixed via #315) (@tadeusz-niemiec + @solnic)
|
58
|
+
- `Result#error?(path)` works correctly when the path points to an array item (issue #317 fixed via #318) (@solnic)
|
59
|
+
|
60
|
+
|
61
|
+
[Compare v1.5.4...v1.5.5](https://github.com/dry-rb/dry-schema/compare/v1.5.4...v1.5.5)
|
62
|
+
|
63
|
+
## 1.5.4
|
64
|
+
|
65
|
+
2020-09-03
|
66
|
+
|
67
|
+
### Fixed
|
68
|
+
|
69
|
+
- Key validation works correctly with a non-nested maybe hashes (issue #311 fixed via #312) (@svobom57)
|
70
|
+
|
71
|
+
|
72
|
+
[Compare v1.5.3...master](https://github.com/dry-rb/dry-schema/compare/v1.5.3...master)
|
73
|
+
|
1
74
|
## 1.5.3 2020-08-21
|
2
75
|
|
3
76
|
|
data/LICENSE
CHANGED
data/README.md
CHANGED
data/dry-schema.gemspec
CHANGED
@@ -29,16 +29,15 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.metadata['source_code_uri'] = 'https://github.com/dry-rb/dry-schema'
|
30
30
|
spec.metadata['bug_tracker_uri'] = 'https://github.com/dry-rb/dry-schema/issues'
|
31
31
|
|
32
|
-
spec.required_ruby_version = ">= 2.
|
32
|
+
spec.required_ruby_version = ">= 2.5.0"
|
33
33
|
|
34
34
|
# to update dependencies edit project.yml
|
35
35
|
spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
|
36
36
|
spec.add_runtime_dependency "dry-configurable", "~> 0.8", ">= 0.8.3"
|
37
|
-
spec.add_runtime_dependency "dry-core", "~> 0.
|
38
|
-
spec.add_runtime_dependency "dry-equalizer", "~> 0.2"
|
37
|
+
spec.add_runtime_dependency "dry-core", "~> 0.5", ">= 0.5"
|
39
38
|
spec.add_runtime_dependency "dry-initializer", "~> 3.0"
|
40
39
|
spec.add_runtime_dependency "dry-logic", "~> 1.0"
|
41
|
-
spec.add_runtime_dependency "dry-types", "~> 1.
|
40
|
+
spec.add_runtime_dependency "dry-types", "~> 1.5"
|
42
41
|
|
43
42
|
spec.add_development_dependency "bundler"
|
44
43
|
spec.add_development_dependency "rake"
|
data/lib/dry/schema/config.rb
CHANGED
data/lib/dry/schema/key_map.rb
CHANGED
@@ -28,10 +28,14 @@ module Dry
|
|
28
28
|
|
29
29
|
import_steps(schema)
|
30
30
|
|
31
|
-
|
31
|
+
if !custom_type? || array_type?(current_type) || hash_type?(current_type)
|
32
|
+
type(updated_type)
|
33
|
+
elsif maybe_type?(current_type)
|
34
|
+
type(updated_type.optional)
|
35
|
+
end
|
32
36
|
end
|
33
37
|
|
34
|
-
trace_opts = opts.reject { |key, _|
|
38
|
+
trace_opts = opts.reject { |key, _| %i[type_spec type_rule].include?(key) }
|
35
39
|
|
36
40
|
if (type_rule = opts[:type_rule])
|
37
41
|
trace.append(type_rule).evaluate(*predicates, **trace_opts)
|
@@ -62,10 +66,16 @@ module Dry
|
|
62
66
|
primitive_inferrer[type].eql?([::Array])
|
63
67
|
end
|
64
68
|
|
69
|
+
# @api private
|
65
70
|
def hash_type?(type)
|
66
71
|
primitive_inferrer[type].eql?([::Hash])
|
67
72
|
end
|
68
73
|
|
74
|
+
# @api private
|
75
|
+
def maybe_type?(type)
|
76
|
+
type.meta[:maybe].equal?(true)
|
77
|
+
end
|
78
|
+
|
69
79
|
# @api private
|
70
80
|
def build_array_type(array_type, member)
|
71
81
|
if array_type.respond_to?(:of)
|
data/lib/dry/schema/message.rb
CHANGED
@@ -4,8 +4,9 @@ require "dry/initializer"
|
|
4
4
|
|
5
5
|
require "dry/schema/constants"
|
6
6
|
require "dry/schema/message"
|
7
|
-
require "dry/schema/message_set"
|
8
7
|
require "dry/schema/message_compiler/visitor_opts"
|
8
|
+
require "dry/schema/message_set"
|
9
|
+
require "dry/schema/path"
|
9
10
|
|
10
11
|
module Dry
|
11
12
|
module Schema
|
@@ -109,17 +110,8 @@ module Dry
|
|
109
110
|
end
|
110
111
|
|
111
112
|
# @api private
|
112
|
-
def visit_unexpected_key(node,
|
113
|
-
|
114
|
-
|
115
|
-
msg = messages.translate("errors.unexpected_key")
|
116
|
-
|
117
|
-
Message.new(
|
118
|
-
path: path,
|
119
|
-
text: msg[:text],
|
120
|
-
predicate: nil,
|
121
|
-
input: input
|
122
|
-
)
|
113
|
+
def visit_unexpected_key(node, opts)
|
114
|
+
visit_predicate([:unexpected_key, []], opts.dup.update(path: Path[node.first]))
|
123
115
|
end
|
124
116
|
|
125
117
|
# @api private
|
@@ -130,7 +122,10 @@ module Dry
|
|
130
122
|
|
131
123
|
# @api private
|
132
124
|
def or_translator
|
133
|
-
@or_translator ||= proc { |k|
|
125
|
+
@or_translator ||= proc { |k|
|
126
|
+
message = messages.translate(k, **default_lookup_options)
|
127
|
+
message.is_a?(Hash) ? message[:text] : message
|
128
|
+
}
|
134
129
|
end
|
135
130
|
|
136
131
|
# @api private
|
data/lib/dry/schema/path.rb
CHANGED
@@ -90,13 +90,25 @@ module Dry
|
|
90
90
|
keys.index(key)
|
91
91
|
end
|
92
92
|
|
93
|
+
def without_index
|
94
|
+
self.class.new(to_a[0..-2])
|
95
|
+
end
|
96
|
+
|
93
97
|
# @api private
|
94
98
|
def include?(other)
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
99
|
+
if !same_root?(other)
|
100
|
+
false
|
101
|
+
elsif index?
|
102
|
+
if other.index?
|
103
|
+
last.equal?(other.last)
|
104
|
+
else
|
105
|
+
without_index.include?(other)
|
106
|
+
end
|
107
|
+
elsif other.index? && key_matches(other, :select).size < 2
|
108
|
+
false
|
109
|
+
else
|
110
|
+
self >= other && !other.key_matches(self).include?(nil)
|
111
|
+
end
|
100
112
|
end
|
101
113
|
|
102
114
|
# @api private
|
data/lib/dry/schema/predicate.rb
CHANGED
data/lib/dry/schema/result.rb
CHANGED
data/lib/dry/schema/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -50,28 +50,20 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '0.
|
54
|
-
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - "~>"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '0.4'
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: dry-equalizer
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - "~>"
|
53
|
+
version: '0.5'
|
54
|
+
- - ">="
|
66
55
|
- !ruby/object:Gem::Version
|
67
|
-
version: '0.
|
56
|
+
version: '0.5'
|
68
57
|
type: :runtime
|
69
58
|
prerelease: false
|
70
59
|
version_requirements: !ruby/object:Gem::Requirement
|
71
60
|
requirements:
|
72
61
|
- - "~>"
|
73
62
|
- !ruby/object:Gem::Version
|
74
|
-
version: '0.
|
63
|
+
version: '0.5'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0.5'
|
75
67
|
- !ruby/object:Gem::Dependency
|
76
68
|
name: dry-initializer
|
77
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,14 +98,14 @@ dependencies:
|
|
106
98
|
requirements:
|
107
99
|
- - "~>"
|
108
100
|
- !ruby/object:Gem::Version
|
109
|
-
version: '1.
|
101
|
+
version: '1.5'
|
110
102
|
type: :runtime
|
111
103
|
prerelease: false
|
112
104
|
version_requirements: !ruby/object:Gem::Requirement
|
113
105
|
requirements:
|
114
106
|
- - "~>"
|
115
107
|
- !ruby/object:Gem::Version
|
116
|
-
version: '1.
|
108
|
+
version: '1.5'
|
117
109
|
- !ruby/object:Gem::Dependency
|
118
110
|
name: bundler
|
119
111
|
requirement: !ruby/object:Gem::Requirement
|
@@ -253,14 +245,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
253
245
|
requirements:
|
254
246
|
- - ">="
|
255
247
|
- !ruby/object:Gem::Version
|
256
|
-
version: 2.
|
248
|
+
version: 2.5.0
|
257
249
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
258
250
|
requirements:
|
259
251
|
- - ">="
|
260
252
|
- !ruby/object:Gem::Version
|
261
253
|
version: '0'
|
262
254
|
requirements: []
|
263
|
-
rubygems_version: 3.
|
255
|
+
rubygems_version: 3.1.4
|
264
256
|
signing_key:
|
265
257
|
specification_version: 4
|
266
258
|
summary: Coercion and validation for data structures
|