dry-schema 1.12.0 → 1.13.0

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: 7320e83a79df3304ba5bdd03077f15ff7cc57b361070eccce0fe06ffb81794b9
4
- data.tar.gz: c2d39039e5946dc3a587cf984e957d695767629464d38ce8bcf5ce2ac3d5f6f8
3
+ metadata.gz: 9899c8cf36335581b0f5f757c5a2c17d7a542b47138eb6f76dd1f8bda8ed3c65
4
+ data.tar.gz: 1d10a271359578fb471a6e6fd477e690f4b11888b936f92242b51c2d143b8f36
5
5
  SHA512:
6
- metadata.gz: 49e56ca6e3db2834008c46fd43e49cbac7f037a57ee58cc43af9ff6c8d992c1573da51bed225e4fc2dd84549b48386f7b335e19c74cc5ed0074ea005709c3695
7
- data.tar.gz: 9401d493d77af5032279b237a5a6da4776eee23414bdb14fa555562362e6f61ffa007304395dda5a45ed3e19b9a31cab989467b7440b1bfb791963771e8f78cc
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 [![Join the chat at https://dry-rb.zulipchat.com](https://img.shields.io/badge/dry--rb-join%20chat-%23346b7a.svg)][chat]
9
-
10
- [![Gem Version](https://badge.fury.io/rb/dry-schema.svg)][gem]
11
- [![CI Status](https://github.com/dry-rb/dry-schema/workflows/ci/badge.svg)][actions]
12
- [![Codacy Badge](https://api.codacy.com/project/badge/Grade/961f5c776f1d49218b2cede3745e059c)][codacy]
13
- [![Codacy Badge](https://api.codacy.com/project/badge/Coverage/961f5c776f1d49218b2cede3745e059c)][codacy]
14
- [![Inline docs](http://inch-ci.org/github/dry-rb/dry-schema.svg?branch=main)][inchpages]
5
+ # dry-schema [![Gem Version](https://badge.fury.io/rb/dry-schema.svg)][gem] [![CI Status](https://github.com/dry-rb/dry-schema/workflows/ci/badge.svg)][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 "zeitwerk", "~> 2.6"
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.4", "< 2"
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"
@@ -307,7 +307,7 @@ module Dry
307
307
  # @api private
308
308
  def set_type(name, spec)
309
309
  type = resolve_type(spec)
310
- meta = {required: true, maybe: type.optional?}
310
+ meta = {required: false, maybe: type.optional?}
311
311
 
312
312
  @types[name] = type.meta(meta)
313
313
  end
@@ -45,13 +45,7 @@ module Dry
45
45
 
46
46
  # @api private
47
47
  def self.setting_names
48
- # TODO: this is compatibility tweak to make it work with dry-configurable < 0.16.1
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 { |h, k| h[k] = 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
- @config = config if config
87
+ @__config__ = config if config
86
88
  @t = proc { |key, locale: default_locale| get("%<locale>s.#{key}", locale: locale) }
87
89
  end
88
90
 
@@ -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 compiler.predicates[name].arity - 1 != args.size
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(predicate.arity - values.size, Undefined))
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
- # @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)
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
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module Schema
5
- VERSION = "1.12.0"
5
+ VERSION = "1.13.0"
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.12.0
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-04 00:00:00.000000000 Z
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: '2'
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: '2'
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.4'
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.4'
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