dry-schema 1.13.0 → 1.13.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9899c8cf36335581b0f5f757c5a2c17d7a542b47138eb6f76dd1f8bda8ed3c65
4
- data.tar.gz: 1d10a271359578fb471a6e6fd477e690f4b11888b936f92242b51c2d143b8f36
3
+ metadata.gz: f38923174afc15c94df3839a0ab0501c8aecb4ebc5df7042edc6c6590744449b
4
+ data.tar.gz: 97183a67cd62d595ba32413708b99c6d4c3d6760414f846f9a2ee12a1fd15615
5
5
  SHA512:
6
- metadata.gz: f6156af8cad80db7b37a2062079053cddd8d40195d50d2d0db119c4163be1c8105855a1b61bd29de82cd8ee8e96a2329c4346139190d560a8b5c858cf7401b12
7
- data.tar.gz: 9bcdbb0a8feb2127bd170036904007ddc3ec6228b8a888f868e70eb3055aac718ffd5d4ee5734a10618efa545f4ea0bcb102bf760db16fe47049bac57c65b48e
6
+ metadata.gz: 70f7656a3c4af51c4d576d022ba552728831b35cadf29f2589706e979463a01d2a5eea1c5ed546759625431dc7114df41b2f1838e8bda2d1fa223c8573f5f8a1
7
+ data.tar.gz: 6b639a89fb5df82cfcb546649a5cc172456537e11944913a48df2b88b99a04b0b09be262ce55224a1fdc7d87916e5cd5f6b73bad761972b010ca2034f7b13e77
data/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  <!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
2
2
 
3
+ ## 1.13.2 2023-05-31
4
+
5
+
6
+ ### Fixed
7
+
8
+ - Fix custom predicates setting (via #460) (@solnic)
9
+
10
+
11
+ [Compare v1.13.1...v1.13.2](https://github.com/dry-rb/dry-schema/compare/v1.13.1...v1.13.2)
12
+
13
+ ## 1.13.1 2023-04-07
14
+
15
+
16
+ ### Fixed
17
+
18
+ - Support sum types of hashes (issue #446 fixed via #457) (@segiddins)
19
+
20
+
21
+ [Compare v1.13.0...v1.13.1](https://github.com/dry-rb/dry-schema/compare/v1.13.0...v1.13.1)
22
+
3
23
  ## 1.13.0 2022-11-24
4
24
 
5
25
 
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2022 dry-rb team
3
+ Copyright (c) 2015-2023 dry-rb team
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
data/README.md CHANGED
@@ -14,8 +14,8 @@
14
14
 
15
15
  This library officially supports the following Ruby versions:
16
16
 
17
- * MRI `>= 2.7.0`
18
- * jruby `>= 9.3` (postponed until 2.7 is supported)
17
+ * MRI `>= 3.0.0`
18
+ * jruby `>= 9.4` (not tested on CI)
19
19
 
20
20
  ## License
21
21
 
data/dry-schema.gemspec CHANGED
@@ -31,14 +31,14 @@ Gem::Specification.new do |spec|
31
31
  spec.metadata["source_code_uri"] = "https://github.com/dry-rb/dry-schema"
32
32
  spec.metadata["bug_tracker_uri"] = "https://github.com/dry-rb/dry-schema/issues"
33
33
 
34
- spec.required_ruby_version = ">= 2.7.0"
34
+ spec.required_ruby_version = ">= 2.7"
35
35
 
36
36
  # to update dependencies edit project.yml
37
37
  spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
38
38
  spec.add_runtime_dependency "dry-configurable", "~> 1.0", ">= 1.0.1"
39
39
  spec.add_runtime_dependency "dry-core", "~> 1.0", "< 2"
40
40
  spec.add_runtime_dependency "dry-initializer", "~> 3.0"
41
- spec.add_runtime_dependency "dry-logic", ">= 1.5", "< 2"
41
+ spec.add_runtime_dependency "dry-logic", ">= 1.4", "< 2"
42
42
  spec.add_runtime_dependency "dry-types", ">= 1.7", "< 2"
43
43
  spec.add_runtime_dependency "zeitwerk", "~> 2.6"
44
44
 
@@ -22,7 +22,9 @@ module Dry
22
22
  # @return [Schema::PredicateRegistry]
23
23
  #
24
24
  # @api public
25
- setting :predicates, default: Schema::PredicateRegistry.new
25
+ setting :predicates, default: PredicateRegistry.new, constructor: -> predicates {
26
+ predicates.is_a?(PredicateRegistry) ? predicates : PredicateRegistry.new(predicates)
27
+ }
26
28
 
27
29
  # @!method types
28
30
  #
@@ -39,9 +39,6 @@ module Dry
39
39
 
40
40
  extend Dry::Initializer
41
41
 
42
- # @return [Compiler] The rule compiler object
43
- option :compiler, default: -> { Compiler.new }
44
-
45
42
  # @return [Compiler] The type of the processor (Params, JSON, or a custom sub-class)
46
43
  option :processor_type, default: -> { Processor }
47
44
 
@@ -84,6 +81,7 @@ module Dry
84
81
  def self.new(**options, &block)
85
82
  dsl = super
86
83
  dsl.instance_eval(&block) if block
84
+ dsl.instance_variable_set("@compiler", options[:compiler]) if options[:compiler]
87
85
  dsl
88
86
  end
89
87
 
@@ -106,6 +104,16 @@ module Dry
106
104
  self
107
105
  end
108
106
 
107
+ # @api private
108
+ def compiler
109
+ @compiler ||= Compiler.new(predicates)
110
+ end
111
+
112
+ # @api private
113
+ def predicates
114
+ @predicates ||= config.predicates
115
+ end
116
+
109
117
  # Return a macro with the provided name
110
118
  #
111
119
  # @param [Symbol] name
@@ -293,8 +301,8 @@ module Dry
293
301
  # @return [Dry::Types::Safe]
294
302
  #
295
303
  # @api private
296
- def new(**options, &block)
297
- self.class.new(**options, processor_type: processor_type, config: config, &block)
304
+ def new(klass: self.class, **options, &block)
305
+ klass.new(**options, processor_type: processor_type, config: config, &block)
298
306
  end
299
307
 
300
308
  # Set a type for the given key name
@@ -19,10 +19,10 @@ module Dry
19
19
  option :compiler, default: proc { Compiler.new }
20
20
 
21
21
  # @api private
22
- option :trace, default: proc { Trace.new }
22
+ option :schema_dsl, optional: true
23
23
 
24
24
  # @api private
25
- option :schema_dsl, optional: true
25
+ option :trace, default: proc { Trace.new(schema_dsl&.compiler || Compiler.new) }
26
26
 
27
27
  # @api private
28
28
  def new(**options)
@@ -122,7 +122,6 @@ module Dry
122
122
  macro.call(...)
123
123
  end
124
124
  end
125
- ruby2_keywords :schema if respond_to?(:ruby2_keywords, true)
126
125
 
127
126
  # Specify a nested hash with enforced `hash?` type-check
128
127
  #
@@ -137,7 +136,6 @@ module Dry
137
136
  macro.call(...)
138
137
  end
139
138
  end
140
- ruby2_keywords :hash if respond_to?(:ruby2_keywords, true)
141
139
 
142
140
  # Specify predicates that should be applied to each element of an array
143
141
  #
@@ -161,7 +159,6 @@ module Dry
161
159
  macro.value(...)
162
160
  end
163
161
  end
164
- ruby2_keywords :each if respond_to?(:ruby2_keywords, true)
165
162
 
166
163
  # Like `each` but sets `array?` type-check
167
164
  #
@@ -181,7 +178,6 @@ module Dry
181
178
  macro.value(...)
182
179
  end
183
180
  end
184
- ruby2_keywords :array if respond_to?(:ruby2_keywords, true)
185
181
 
186
182
  # Set type spec
187
183
  #
@@ -220,6 +216,8 @@ module Dry
220
216
  end
221
217
 
222
218
  # @api private
219
+ # rubocop: disable Metrics/AbcSize
220
+ # rubocop: disable Metrics/CyclomaticComplexity
223
221
  # rubocop: disable Metrics/PerceivedComplexity
224
222
  def extract_type_spec(args, nullable: false, set_type: true)
225
223
  type_spec = args[0] unless schema_or_predicate?(args[0])
@@ -232,6 +230,10 @@ module Dry
232
230
 
233
231
  if type_spec.is_a?(::Array)
234
232
  type_rule = type_spec.map { |ts| new(chain: false).value(ts) }.reduce(:|)
233
+ elsif type_spec.is_a?(Dry::Types::Sum) && set_type
234
+ type_rule = [type_spec.left, type_spec.right].map { |ts|
235
+ new(klass: Core, chain: false).value(ts)
236
+ }.reduce(:|)
235
237
  else
236
238
  type_predicates = predicate_inferrer[resolved_type]
237
239
 
@@ -249,6 +251,8 @@ module Dry
249
251
  yield(*predicates, type_spec: type_spec, type_rule: nil)
250
252
  end
251
253
  end
254
+ # rubocop: enable Metrics/AbcSize
255
+ # rubocop: enable Metrics/CyclomaticComplexity
252
256
  # rubocop: enable Metrics/PerceivedComplexity
253
257
 
254
258
  # @api private
@@ -26,7 +26,6 @@ module Dry
26
26
  (filter_schema_dsl[name] || filter_schema_dsl.optional(name)).value(...)
27
27
  self
28
28
  end
29
- ruby2_keywords(:filter) if respond_to?(:ruby2_keywords, true)
30
29
 
31
30
  # Coerce macro to a rule
32
31
  #
@@ -13,7 +13,7 @@ module Dry
13
13
  # @api public
14
14
  class YAML < Abstract
15
15
  LOCALE_TOKEN = "%<locale>s"
16
- TOKEN_REGEXP = /%{(\w*)}/.freeze
16
+ TOKEN_REGEXP = /%{(\w*)}/
17
17
  EMPTY_CONTEXT = Object.new.tap { |ctx|
18
18
  def ctx.context
19
19
  binding
@@ -72,6 +72,8 @@ module Dry
72
72
  # Dump result to a hash returning processed and validated data
73
73
  #
74
74
  # @return [Hash]
75
+ #
76
+ # @api private
75
77
  def output
76
78
  path.equal?(Path::EMPTY) ? @output : @output.dig(*path)
77
79
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module Schema
5
- VERSION = "1.13.0"
5
+ VERSION = "1.13.2"
6
6
  end
7
7
  end
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.0
4
+ version: 1.13.2
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-24 00:00:00.000000000 Z
11
+ date: 2023-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -84,7 +84,7 @@ dependencies:
84
84
  requirements:
85
85
  - - ">="
86
86
  - !ruby/object:Gem::Version
87
- version: '1.5'
87
+ version: '1.4'
88
88
  - - "<"
89
89
  - !ruby/object:Gem::Version
90
90
  version: '2'
@@ -94,7 +94,7 @@ dependencies:
94
94
  requirements:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: '1.5'
97
+ version: '1.4'
98
98
  - - "<"
99
99
  - !ruby/object:Gem::Version
100
100
  version: '2'
@@ -274,14 +274,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
274
274
  requirements:
275
275
  - - ">="
276
276
  - !ruby/object:Gem::Version
277
- version: 2.7.0
277
+ version: '2.7'
278
278
  required_rubygems_version: !ruby/object:Gem::Requirement
279
279
  requirements:
280
280
  - - ">="
281
281
  - !ruby/object:Gem::Version
282
282
  version: '0'
283
283
  requirements: []
284
- rubygems_version: 3.1.6
284
+ rubygems_version: 3.3.26
285
285
  signing_key:
286
286
  specification_version: 4
287
287
  summary: Coercion and validation for data structures