dry-schema 1.13.3 → 1.14.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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +47 -0
  3. data/README.md +1 -1
  4. data/config/errors.yml +10 -0
  5. data/dry-schema.gemspec +15 -17
  6. data/lib/dry/schema/config.rb +6 -6
  7. data/lib/dry/schema/constants.rb +2 -2
  8. data/lib/dry/schema/dsl.rb +18 -18
  9. data/lib/dry/schema/extensions/hints/message_compiler_methods.rb +1 -1
  10. data/lib/dry/schema/extensions/info/schema_compiler.rb +16 -7
  11. data/lib/dry/schema/extensions/json_schema/schema_compiler.rb +4 -4
  12. data/lib/dry/schema/extensions/monads.rb +1 -1
  13. data/lib/dry/schema/extensions/struct.rb +3 -3
  14. data/lib/dry/schema/key.rb +4 -4
  15. data/lib/dry/schema/key_coercer.rb +3 -3
  16. data/lib/dry/schema/key_map.rb +5 -5
  17. data/lib/dry/schema/key_validator.rb +19 -8
  18. data/lib/dry/schema/macros/dsl.rb +8 -8
  19. data/lib/dry/schema/macros/each.rb +2 -2
  20. data/lib/dry/schema/macros/filled.rb +4 -5
  21. data/lib/dry/schema/macros/hash.rb +2 -2
  22. data/lib/dry/schema/macros/maybe.rb +2 -2
  23. data/lib/dry/schema/macros/schema.rb +3 -3
  24. data/lib/dry/schema/macros/value.rb +12 -12
  25. data/lib/dry/schema/message.rb +4 -4
  26. data/lib/dry/schema/message_compiler.rb +8 -8
  27. data/lib/dry/schema/message_set.rb +8 -8
  28. data/lib/dry/schema/messages/abstract.rb +12 -12
  29. data/lib/dry/schema/messages/namespaced.rb +1 -1
  30. data/lib/dry/schema/messages/template.rb +2 -2
  31. data/lib/dry/schema/messages/yaml.rb +3 -3
  32. data/lib/dry/schema/path.rb +12 -12
  33. data/lib/dry/schema/predicate.rb +4 -4
  34. data/lib/dry/schema/predicate_registry.rb +2 -2
  35. data/lib/dry/schema/processor.rb +10 -10
  36. data/lib/dry/schema/processor_steps.rb +1 -1
  37. data/lib/dry/schema/result.rb +6 -6
  38. data/lib/dry/schema/rule_applier.rb +1 -1
  39. data/lib/dry/schema/trace.rb +1 -1
  40. data/lib/dry/schema/type_container.rb +2 -2
  41. data/lib/dry/schema/type_registry.rb +1 -1
  42. data/lib/dry/schema/types.rb +1 -1
  43. data/lib/dry/schema/types_merger.rb +18 -62
  44. data/lib/dry/schema/value_coercer.rb +1 -1
  45. data/lib/dry/schema/version.rb +1 -1
  46. data/lib/dry/schema.rb +12 -11
  47. metadata +21 -79
@@ -27,14 +27,14 @@ module Dry
27
27
 
28
28
  # @api private
29
29
  def call
30
- if op_class <= Dry::Logic::Operations::Or
30
+ if op_class <= ::Dry::Logic::Operations::Or
31
31
  merge_or
32
- elsif op_class <= Dry::Logic::Operations::And
32
+ elsif op_class <= ::Dry::Logic::Operations::And
33
33
  merge_and
34
- elsif op_class <= Dry::Logic::Operations::Implication
34
+ elsif op_class <= ::Dry::Logic::Operations::Implication
35
35
  merge_implication
36
36
  else
37
- raise ArgumentError, <<~MESSAGE
37
+ raise ::ArgumentError, <<~MESSAGE
38
38
  Can't merge operations, op_class=#{op_class}
39
39
  MESSAGE
40
40
  end
@@ -58,7 +58,7 @@ module Dry
58
58
 
59
59
  rule = [old_rule, new_rule].compact.reduce { op_class.new(_1, _2) }
60
60
 
61
- type = Dry::Types::Constrained.new(type, rule: rule) if rule
61
+ type = ::Dry::Types::Constrained.new(type, rule: rule) if rule
62
62
 
63
63
  type
64
64
  end
@@ -66,61 +66,17 @@ module Dry
66
66
  alias_method :merge_and, :merge_ordered
67
67
  alias_method :merge_implication, :merge_ordered
68
68
 
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)
69
+ # @api private
70
+ def merge_unwrapped_types(unwrapped_old, unwrapped_new)
71
+ case [unwrapped_old, unwrapped_new]
72
+ in ::Dry::Types::Schema, ::Dry::Types::Schema
73
+ merge_schemas(unwrapped_old, unwrapped_new)
74
+ in [::Dry::Types::AnyClass, _] | [::Dry::Types::Hash, ::Dry::Types::Schema]
75
+ unwrapped_new
76
+ in [::Dry::Types::Schema, ::Dry::Types::Hash] | [_, ::Dry::Types::AnyClass]
77
+ unwrapped_old
78
+ else
79
+ merge_equivalent_types(unwrapped_old, unwrapped_new)
124
80
  end
125
81
  end
126
82
 
@@ -142,7 +98,7 @@ module Dry
142
98
  elsif unwrapped_new.primitive <= unwrapped_old.primitive
143
99
  unwrapped_old
144
100
  else
145
- raise ArgumentError, <<~MESSAGE
101
+ raise ::ArgumentError, <<~MESSAGE
146
102
  Can't merge types, unwrapped_old=#{unwrapped_old.inspect}, unwrapped_new=#{unwrapped_new.inspect}
147
103
  MESSAGE
148
104
  end
@@ -157,7 +113,7 @@ module Dry
157
113
 
158
114
  if type.optional?
159
115
  type = type.left.primitive?(nil) ? type.right : type.left
160
- elsif type.is_a?(Dry::Types::Decorator)
116
+ elsif type.is_a?(::Dry::Types::Decorator)
161
117
  type = type.type
162
118
  else
163
119
  break
@@ -9,7 +9,7 @@ module Dry
9
9
  #
10
10
  # @api private
11
11
  class ValueCoercer
12
- extend Dry::Initializer
12
+ extend ::Dry::Initializer
13
13
  include ::Dry::Equalizer(:type_schema)
14
14
 
15
15
  # @api private
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module Schema
5
- VERSION = "1.13.3"
5
+ VERSION = "1.14.0"
6
6
  end
7
7
  end
data/lib/dry/schema.rb CHANGED
@@ -12,14 +12,14 @@ module Dry
12
12
  #
13
13
  # @api public
14
14
  module Schema
15
- extend Dry::Core::Extensions
15
+ extend ::Dry::Core::Extensions
16
16
 
17
17
  # @api private
18
18
  def self.loader
19
- @loader ||= Zeitwerk::Loader.new.tap do |loader|
20
- root = File.expand_path("..", __dir__)
19
+ @loader ||= ::Zeitwerk::Loader.new.tap do |loader|
20
+ root = ::File.expand_path("..", __dir__)
21
21
  loader.tag = "dry-schema"
22
- loader.inflector = Zeitwerk::GemInflector.new("#{root}/dry-schema.rb")
22
+ loader.inflector = ::Zeitwerk::GemInflector.new("#{root}/dry-schema.rb")
23
23
  loader.inflector.inflect(
24
24
  "dsl" => "DSL",
25
25
  "yaml" => "YAML",
@@ -32,6 +32,7 @@ module Dry
32
32
  "#{root}/dry/schema/{constants,errors,version,extensions}.rb",
33
33
  "#{root}/dry/schema/extensions"
34
34
  )
35
+ loader.do_not_eager_load("#{root}/dry/schema/messages/i18n.rb")
35
36
  loader.inflector.inflect("dsl" => "DSL")
36
37
  end
37
38
  end
@@ -63,8 +64,8 @@ module Dry
63
64
  # @see DSL.new
64
65
  #
65
66
  # @api public
66
- def self.define(**options, &block)
67
- DSL.new(**options, &block).call
67
+ def self.define(...)
68
+ DSL.new(...).call
68
69
  end
69
70
 
70
71
  # Define a schema suitable for HTTP params
@@ -82,10 +83,10 @@ module Dry
82
83
  # @see Schema#define
83
84
  #
84
85
  # @api public
85
- def self.Params(**options, &block)
86
- define(**options, processor_type: Params, &block)
86
+ def self.Params(**options, &)
87
+ define(**options, processor_type: Params, &)
87
88
  end
88
- singleton_class.send(:alias_method, :Form, :Params)
89
+ singleton_class.alias_method(:Form, :Params)
89
90
 
90
91
  # Define a schema suitable for JSON data
91
92
  #
@@ -102,8 +103,8 @@ module Dry
102
103
  # @see Schema#define
103
104
  #
104
105
  # @api public
105
- def self.JSON(**options, &block)
106
- define(**options, processor_type: JSON, &block)
106
+ def self.JSON(**options, &)
107
+ define(**options, processor_type: JSON, &)
107
108
  end
108
109
 
109
110
  loader.setup
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.13.3
4
+ version: 1.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-26 00:00:00.000000000 Z
11
+ date: 2025-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -50,74 +50,56 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '1.0'
54
- - - "<"
55
- - !ruby/object:Gem::Version
56
- version: '2'
53
+ version: '1.1'
57
54
  type: :runtime
58
55
  prerelease: false
59
56
  version_requirements: !ruby/object:Gem::Requirement
60
57
  requirements:
61
58
  - - "~>"
62
59
  - !ruby/object:Gem::Version
63
- version: '1.0'
64
- - - "<"
65
- - !ruby/object:Gem::Version
66
- version: '2'
60
+ version: '1.1'
67
61
  - !ruby/object:Gem::Dependency
68
62
  name: dry-initializer
69
63
  requirement: !ruby/object:Gem::Requirement
70
64
  requirements:
71
65
  - - "~>"
72
66
  - !ruby/object:Gem::Version
73
- version: '3.0'
67
+ version: '3.2'
74
68
  type: :runtime
75
69
  prerelease: false
76
70
  version_requirements: !ruby/object:Gem::Requirement
77
71
  requirements:
78
72
  - - "~>"
79
73
  - !ruby/object:Gem::Version
80
- version: '3.0'
74
+ version: '3.2'
81
75
  - !ruby/object:Gem::Dependency
82
76
  name: dry-logic
83
77
  requirement: !ruby/object:Gem::Requirement
84
78
  requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- version: '1.4'
88
- - - "<"
79
+ - - "~>"
89
80
  - !ruby/object:Gem::Version
90
- version: '2'
81
+ version: '1.5'
91
82
  type: :runtime
92
83
  prerelease: false
93
84
  version_requirements: !ruby/object:Gem::Requirement
94
85
  requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- version: '1.4'
98
- - - "<"
86
+ - - "~>"
99
87
  - !ruby/object:Gem::Version
100
- version: '2'
88
+ version: '1.5'
101
89
  - !ruby/object:Gem::Dependency
102
90
  name: dry-types
103
91
  requirement: !ruby/object:Gem::Requirement
104
92
  requirements:
105
- - - ">="
106
- - !ruby/object:Gem::Version
107
- version: '1.7'
108
- - - "<"
93
+ - - "~>"
109
94
  - !ruby/object:Gem::Version
110
- version: '2'
95
+ version: '1.8'
111
96
  type: :runtime
112
97
  prerelease: false
113
98
  version_requirements: !ruby/object:Gem::Requirement
114
99
  requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '1.7'
118
- - - "<"
100
+ - - "~>"
119
101
  - !ruby/object:Gem::Version
120
- version: '2'
102
+ version: '1.8'
121
103
  - !ruby/object:Gem::Dependency
122
104
  name: zeitwerk
123
105
  requirement: !ruby/object:Gem::Requirement
@@ -132,48 +114,6 @@ dependencies:
132
114
  - - "~>"
133
115
  - !ruby/object:Gem::Version
134
116
  version: '2.6'
135
- - !ruby/object:Gem::Dependency
136
- name: bundler
137
- requirement: !ruby/object:Gem::Requirement
138
- requirements:
139
- - - ">="
140
- - !ruby/object:Gem::Version
141
- version: '0'
142
- type: :development
143
- prerelease: false
144
- version_requirements: !ruby/object:Gem::Requirement
145
- requirements:
146
- - - ">="
147
- - !ruby/object:Gem::Version
148
- version: '0'
149
- - !ruby/object:Gem::Dependency
150
- name: rake
151
- requirement: !ruby/object:Gem::Requirement
152
- requirements:
153
- - - ">="
154
- - !ruby/object:Gem::Version
155
- version: '0'
156
- type: :development
157
- prerelease: false
158
- version_requirements: !ruby/object:Gem::Requirement
159
- requirements:
160
- - - ">="
161
- - !ruby/object:Gem::Version
162
- version: '0'
163
- - !ruby/object:Gem::Dependency
164
- name: rspec
165
- requirement: !ruby/object:Gem::Requirement
166
- requirements:
167
- - - ">="
168
- - !ruby/object:Gem::Version
169
- version: '0'
170
- type: :development
171
- prerelease: false
172
- version_requirements: !ruby/object:Gem::Requirement
173
- requirements:
174
- - - ">="
175
- - !ruby/object:Gem::Version
176
- version: '0'
177
117
  description: |+
178
118
  dry-schema provides a DSL for defining schemas with keys and rules that should be applied to
179
119
  values. It supports coercion, input sanitization, custom types and localized error messages
@@ -266,7 +206,8 @@ metadata:
266
206
  changelog_uri: https://github.com/dry-rb/dry-schema/blob/main/CHANGELOG.md
267
207
  source_code_uri: https://github.com/dry-rb/dry-schema
268
208
  bug_tracker_uri: https://github.com/dry-rb/dry-schema/issues
269
- post_install_message:
209
+ rubygems_mfa_required: 'true'
210
+ post_install_message:
270
211
  rdoc_options: []
271
212
  require_paths:
272
213
  - lib
@@ -274,15 +215,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
274
215
  requirements:
275
216
  - - ">="
276
217
  - !ruby/object:Gem::Version
277
- version: '2.7'
218
+ version: '3.1'
278
219
  required_rubygems_version: !ruby/object:Gem::Requirement
279
220
  requirements:
280
221
  - - ">="
281
222
  - !ruby/object:Gem::Version
282
223
  version: '0'
283
224
  requirements: []
284
- rubygems_version: 3.3.26
285
- signing_key:
225
+ rubygems_version: 3.3.27
226
+ signing_key:
286
227
  specification_version: 4
287
228
  summary: Coercion and validation for data structures
288
229
  test_files: []
230
+ ...