dry-schema 1.12.0 → 1.13.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 +14 -1
- data/README.md +2 -10
- data/dry-schema.gemspec +3 -3
- data/lib/dry/schema/dsl.rb +1 -1
- data/lib/dry/schema/messages/abstract.rb +1 -7
- data/lib/dry/schema/messages/yaml.rb +4 -2
- data/lib/dry/schema/predicate.rb +6 -1
- data/lib/dry/schema/predicate_registry.rb +3 -1
- data/lib/dry/schema/types_merger.rb +55 -11
- data/lib/dry/schema/version.rb +1 -1
- metadata +22 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9899c8cf36335581b0f5f757c5a2c17d7a542b47138eb6f76dd1f8bda8ed3c65
|
4
|
+
data.tar.gz: 1d10a271359578fb471a6e6fd477e690f4b11888b936f92242b51c2d143b8f36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6156af8cad80db7b37a2062079053cddd8d40195d50d2d0db119c4163be1c8105855a1b61bd29de82cd8ee8e96a2329c4346139190d560a8b5c858cf7401b12
|
7
|
+
data.tar.gz: 9bcdbb0a8feb2127bd170036904007ddc3ec6228b8a888f868e70eb3055aac718ffd5d4ee5734a10618efa545f4ea0bcb102bf760db16fe47049bac57c65b48e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
2
2
|
|
3
|
+
## 1.13.0 2022-11-24
|
4
|
+
|
5
|
+
|
6
|
+
### Fixed
|
7
|
+
|
8
|
+
- Change required metadata back to true to fix regressions (issue #438 fixed via 439) (@robhanlon22)
|
9
|
+
- Compatibility with dry-configurable 1.0.1 (@flash-gordon)
|
10
|
+
- Warnings about using pattern matching on Ruby 2.7 (issue #441 fixed via #442) (@r7kamura)
|
11
|
+
- Make message cache fully thread-safe (via #440) (@mensfeld)
|
12
|
+
|
13
|
+
|
14
|
+
[Compare v1.12.0...v1.13.0](https://github.com/dry-rb/dry-schema/compare/v1.12.0...v1.13.0)
|
15
|
+
|
3
16
|
## 1.12.0 2022-11-04
|
4
17
|
|
5
18
|
|
@@ -292,7 +305,7 @@ This release ships with a bunch of internal refactorings that should improve per
|
|
292
305
|
|
293
306
|
[Compare v1.5.4...v1.5.5](https://github.com/dry-rb/dry-schema/compare/v1.5.4...v1.5.5)
|
294
307
|
|
295
|
-
## 1.5.4
|
308
|
+
## 1.5.4
|
296
309
|
|
297
310
|
2020-09-03
|
298
311
|
|
data/README.md
CHANGED
@@ -1,22 +1,14 @@
|
|
1
1
|
<!--- this file is synced from dry-rb/template-gem project -->
|
2
2
|
[gem]: https://rubygems.org/gems/dry-schema
|
3
3
|
[actions]: https://github.com/dry-rb/dry-schema/actions
|
4
|
-
[codacy]: https://www.codacy.com/gh/dry-rb/dry-schema
|
5
|
-
[chat]: https://dry-rb.zulipchat.com
|
6
|
-
[inchpages]: http://inch-ci.org/github/dry-rb/dry-schema
|
7
4
|
|
8
|
-
# dry-schema [][gem]
|
11
|
-
[][actions]
|
12
|
-
[][codacy]
|
13
|
-
[][codacy]
|
14
|
-
[][inchpages]
|
5
|
+
# dry-schema [][gem] [][actions]
|
15
6
|
|
16
7
|
## Links
|
17
8
|
|
18
9
|
* [User documentation](https://dry-rb.org/gems/dry-schema)
|
19
10
|
* [API documentation](http://rubydoc.info/gems/dry-schema)
|
11
|
+
* [Forum](https://discourse.dry-rb.org)
|
20
12
|
|
21
13
|
## Supported Ruby versions
|
22
14
|
|
data/dry-schema.gemspec
CHANGED
@@ -35,12 +35,12 @@ Gem::Specification.new do |spec|
|
|
35
35
|
|
36
36
|
# to update dependencies edit project.yml
|
37
37
|
spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
|
38
|
-
spec.add_runtime_dependency "
|
39
|
-
spec.add_runtime_dependency "dry-configurable", "~> 1.0", "< 2"
|
38
|
+
spec.add_runtime_dependency "dry-configurable", "~> 1.0", ">= 1.0.1"
|
40
39
|
spec.add_runtime_dependency "dry-core", "~> 1.0", "< 2"
|
41
40
|
spec.add_runtime_dependency "dry-initializer", "~> 3.0"
|
42
|
-
spec.add_runtime_dependency "dry-logic", ">= 1.
|
41
|
+
spec.add_runtime_dependency "dry-logic", ">= 1.5", "< 2"
|
43
42
|
spec.add_runtime_dependency "dry-types", ">= 1.7", "< 2"
|
43
|
+
spec.add_runtime_dependency "zeitwerk", "~> 2.6"
|
44
44
|
|
45
45
|
spec.add_development_dependency "bundler"
|
46
46
|
spec.add_development_dependency "rake"
|
data/lib/dry/schema/dsl.rb
CHANGED
@@ -45,13 +45,7 @@ module Dry
|
|
45
45
|
|
46
46
|
# @api private
|
47
47
|
def self.setting_names
|
48
|
-
|
49
|
-
# and should be removed in dry-schema 2.0.0
|
50
|
-
@setting_names ||= settings
|
51
|
-
.map { |setting|
|
52
|
-
setting.respond_to?(:name) ? setting.name : setting
|
53
|
-
}
|
54
|
-
.map(&:to_sym)
|
48
|
+
@setting_names ||= settings.map { _1.name.to_sym }
|
55
49
|
end
|
56
50
|
|
57
51
|
# @api private
|
@@ -70,7 +70,9 @@ module Dry
|
|
70
70
|
|
71
71
|
# @api private
|
72
72
|
def self.cache
|
73
|
-
@cache ||= Concurrent::Map.new
|
73
|
+
@cache ||= Concurrent::Map.new do |h, k|
|
74
|
+
h.compute_if_absent(k) { Concurrent::Map.new }
|
75
|
+
end
|
74
76
|
end
|
75
77
|
|
76
78
|
# @api private
|
@@ -82,7 +84,7 @@ module Dry
|
|
82
84
|
def initialize(data: EMPTY_HASH, config: nil)
|
83
85
|
super()
|
84
86
|
@data = data
|
85
|
-
@
|
87
|
+
@__config__ = config if config
|
86
88
|
@t = proc { |key, locale: default_locale| get("%<locale>s.#{key}", locale: locale) }
|
87
89
|
end
|
88
90
|
|
data/lib/dry/schema/predicate.rb
CHANGED
@@ -46,6 +46,9 @@ module Dry
|
|
46
46
|
# @api private
|
47
47
|
attr_reader :args
|
48
48
|
|
49
|
+
# @api private
|
50
|
+
attr_reader :arity
|
51
|
+
|
49
52
|
# @api private
|
50
53
|
attr_reader :block
|
51
54
|
|
@@ -55,6 +58,8 @@ module Dry
|
|
55
58
|
@name = name
|
56
59
|
@args = args
|
57
60
|
@block = block
|
61
|
+
# Cater for optional second argument like in case of `eql?` or `respond_to?`
|
62
|
+
@arity = compiler.predicates[name].arity.abs
|
58
63
|
end
|
59
64
|
|
60
65
|
# Negate a predicate
|
@@ -71,7 +76,7 @@ module Dry
|
|
71
76
|
|
72
77
|
# @api private
|
73
78
|
def ensure_valid
|
74
|
-
if
|
79
|
+
if arity - 1 != args.size
|
75
80
|
raise ArgumentError, "#{name} predicate arity is invalid"
|
76
81
|
end
|
77
82
|
end
|
@@ -9,11 +9,13 @@ module Dry
|
|
9
9
|
# @api private
|
10
10
|
def arg_list(name, *values)
|
11
11
|
predicate = self[name]
|
12
|
+
# Cater for optional second argument like in case of `eql?` or `respond_to?`
|
13
|
+
arity = predicate.arity.abs
|
12
14
|
|
13
15
|
predicate
|
14
16
|
.parameters
|
15
17
|
.map(&:last)
|
16
|
-
.zip(values + Array.new(
|
18
|
+
.zip(values + Array.new(arity - values.size, Undefined))
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
@@ -66,17 +66,61 @@ module Dry
|
|
66
66
|
alias_method :merge_and, :merge_ordered
|
67
67
|
alias_method :merge_implication, :merge_ordered
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
69
|
+
if RUBY_VERSION >= "3.0"
|
70
|
+
class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
71
|
+
# @api private
|
72
|
+
def merge_unwrapped_types(unwrapped_old, unwrapped_new)
|
73
|
+
case [unwrapped_old, unwrapped_new]
|
74
|
+
in Dry::Types::Schema, Dry::Types::Schema
|
75
|
+
merge_schemas(unwrapped_old, unwrapped_new)
|
76
|
+
in [Dry::Types::AnyClass, _] | [Dry::Types::Hash, Dry::Types::Schema]
|
77
|
+
unwrapped_new
|
78
|
+
in [Dry::Types::Schema, Dry::Types::Hash] | [_, Dry::Types::AnyClass]
|
79
|
+
unwrapped_old
|
80
|
+
else
|
81
|
+
merge_equivalent_types(unwrapped_old, unwrapped_new)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
RUBY
|
85
|
+
else
|
86
|
+
# @api private
|
87
|
+
def merge_unwrapped_types(unwrapped_old, unwrapped_new)
|
88
|
+
if change_from_schema_to_schema?(unwrapped_old, unwrapped_new)
|
89
|
+
merge_schemas(unwrapped_old, unwrapped_new)
|
90
|
+
elsif change_from_any?(unwrapped_old) || change_from_hash_to_schema?(unwrapped_old,
|
91
|
+
unwrapped_new)
|
92
|
+
unwrapped_new
|
93
|
+
elsif change_from_schema_to_hash?(unwrapped_old,
|
94
|
+
unwrapped_new) || change_to_any?(unwrapped_new)
|
95
|
+
unwrapped_old
|
96
|
+
else
|
97
|
+
merge_equivalent_types(unwrapped_old, unwrapped_new)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# @api private
|
102
|
+
def change_from_any?(unwrapped_old)
|
103
|
+
unwrapped_old.is_a?(Dry::Types::AnyClass)
|
104
|
+
end
|
105
|
+
|
106
|
+
# @api private
|
107
|
+
def change_to_any?(unwrapped_new)
|
108
|
+
unwrapped_new.is_a?(Dry::Types::AnyClass)
|
109
|
+
end
|
110
|
+
|
111
|
+
# @api private
|
112
|
+
def change_from_hash_to_schema?(unwrapped_old, unwrapped_new)
|
113
|
+
unwrapped_old.is_a?(Dry::Types::Hash) && unwrapped_new.is_a?(Dry::Types::Schema)
|
114
|
+
end
|
115
|
+
|
116
|
+
# @api private
|
117
|
+
def change_from_schema_to_hash?(unwrapped_old, unwrapped_new)
|
118
|
+
unwrapped_old.is_a?(Dry::Types::Schema) && unwrapped_new.is_a?(Dry::Types::Hash)
|
119
|
+
end
|
120
|
+
|
121
|
+
# @api private
|
122
|
+
def change_from_schema_to_schema?(unwrapped_old, unwrapped_new)
|
123
|
+
unwrapped_old.is_a?(Dry::Types::Schema) && unwrapped_new.is_a?(Dry::Types::Schema)
|
80
124
|
end
|
81
125
|
end
|
82
126
|
|
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.13.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: 2022-11-
|
11
|
+
date: 2022-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: zeitwerk
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '2.6'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '2.6'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: dry-configurable
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -45,9 +31,9 @@ dependencies:
|
|
45
31
|
- - "~>"
|
46
32
|
- !ruby/object:Gem::Version
|
47
33
|
version: '1.0'
|
48
|
-
- - "
|
34
|
+
- - ">="
|
49
35
|
- !ruby/object:Gem::Version
|
50
|
-
version:
|
36
|
+
version: 1.0.1
|
51
37
|
type: :runtime
|
52
38
|
prerelease: false
|
53
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -55,9 +41,9 @@ dependencies:
|
|
55
41
|
- - "~>"
|
56
42
|
- !ruby/object:Gem::Version
|
57
43
|
version: '1.0'
|
58
|
-
- - "
|
44
|
+
- - ">="
|
59
45
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
46
|
+
version: 1.0.1
|
61
47
|
- !ruby/object:Gem::Dependency
|
62
48
|
name: dry-core
|
63
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,7 +84,7 @@ dependencies:
|
|
98
84
|
requirements:
|
99
85
|
- - ">="
|
100
86
|
- !ruby/object:Gem::Version
|
101
|
-
version: '1.
|
87
|
+
version: '1.5'
|
102
88
|
- - "<"
|
103
89
|
- !ruby/object:Gem::Version
|
104
90
|
version: '2'
|
@@ -108,7 +94,7 @@ dependencies:
|
|
108
94
|
requirements:
|
109
95
|
- - ">="
|
110
96
|
- !ruby/object:Gem::Version
|
111
|
-
version: '1.
|
97
|
+
version: '1.5'
|
112
98
|
- - "<"
|
113
99
|
- !ruby/object:Gem::Version
|
114
100
|
version: '2'
|
@@ -132,6 +118,20 @@ dependencies:
|
|
132
118
|
- - "<"
|
133
119
|
- !ruby/object:Gem::Version
|
134
120
|
version: '2'
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: zeitwerk
|
123
|
+
requirement: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - "~>"
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '2.6'
|
128
|
+
type: :runtime
|
129
|
+
prerelease: false
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - "~>"
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '2.6'
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: bundler
|
137
137
|
requirement: !ruby/object:Gem::Requirement
|