dry-types 1.7.2 → 1.8.2
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 +38 -0
- data/README.md +1 -1
- data/dry-types.gemspec +12 -16
- data/lib/dry/types/any.rb +3 -9
- data/lib/dry/types/array/constructor.rb +3 -9
- data/lib/dry/types/array/member.rb +1 -3
- data/lib/dry/types/array.rb +1 -1
- data/lib/dry/types/builder.rb +19 -35
- data/lib/dry/types/builder_methods.rb +5 -15
- data/lib/dry/types/coercions/json.rb +3 -3
- data/lib/dry/types/coercions/params.rb +13 -13
- data/lib/dry/types/coercions.rb +13 -15
- data/lib/dry/types/compiler.rb +5 -7
- data/lib/dry/types/composition.rb +17 -31
- data/lib/dry/types/constrained/coercible.rb +3 -3
- data/lib/dry/types/constrained.rb +31 -23
- data/lib/dry/types/constructor/function.rb +19 -31
- data/lib/dry/types/constructor/wrapper.rb +5 -11
- data/lib/dry/types/constructor.rb +9 -17
- data/lib/dry/types/core.rb +14 -6
- data/lib/dry/types/decorator.rb +7 -18
- data/lib/dry/types/default.rb +14 -18
- data/lib/dry/types/enum.rb +33 -13
- data/lib/dry/types/errors.rb +4 -8
- data/lib/dry/types/extensions/maybe.rb +5 -11
- data/lib/dry/types/fn_container.rb +3 -3
- data/lib/dry/types/hash/constructor.rb +3 -9
- data/lib/dry/types/hash.rb +8 -6
- data/lib/dry/types/implication.rb +5 -7
- data/lib/dry/types/inflector.rb +1 -1
- data/lib/dry/types/intersection.rb +3 -9
- data/lib/dry/types/lax.rb +5 -11
- data/lib/dry/types/map.rb +33 -41
- data/lib/dry/types/meta.rb +2 -6
- data/lib/dry/types/module.rb +3 -5
- data/lib/dry/types/nominal.rb +13 -35
- data/lib/dry/types/predicate_inferrer.rb +3 -5
- data/lib/dry/types/predicate_registry.rb +1 -3
- data/lib/dry/types/primitive_inferrer.rb +4 -12
- data/lib/dry/types/printable.rb +1 -3
- data/lib/dry/types/printer/composition.rb +3 -3
- data/lib/dry/types/printer.rb +6 -9
- data/lib/dry/types/result.rb +5 -15
- data/lib/dry/types/schema/key.rb +11 -26
- data/lib/dry/types/schema.rb +10 -12
- data/lib/dry/types/spec/types.rb +2 -2
- data/lib/dry/types/sum.rb +4 -8
- data/lib/dry/types/type.rb +2 -2
- data/lib/dry/types/version.rb +1 -1
- data/lib/dry/types.rb +2 -2
- metadata +8 -63
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb0a9688e1ae1fe5305d551dcedccbfa0dfca45a7949e5d357ad98edf0f4c8ef
|
4
|
+
data.tar.gz: a7dd52e7ff33aa2a1de7249bd2f03445db8b4632894e65cb8a70c1bc06dacbc5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb5a3673334cddda6541c1ec24a91343ce3eb4f50d4ccf4ca625350d5b0a81863fc2a75429995ff3332e89f1ac5c4eda183c5cee1b9522c8eb35828e718d309a
|
7
|
+
data.tar.gz: 217af029ec68360e982181764399ff9720ed0f2315aac2f671249ae9e91e4c0e18f3341a0580abdaf5e06bd490fab744dbafcffc1528fbc59587e869d487d7b7
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,43 @@
|
|
1
1
|
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
2
2
|
|
3
|
+
## 1.8.2 2025-01-31
|
4
|
+
|
5
|
+
|
6
|
+
### Fixed
|
7
|
+
|
8
|
+
- Syntax errors on 3.3.0 (@flash-gordon, see #478)
|
9
|
+
|
10
|
+
|
11
|
+
[Compare v1.8.1...v1.8.2](https://github.com/dry-rb/dry-types/compare/v1.8.1...v1.8.2)
|
12
|
+
|
13
|
+
## 1.8.1 2025-01-21
|
14
|
+
|
15
|
+
|
16
|
+
### Fixed
|
17
|
+
|
18
|
+
- Warnings about unused block arguments (@flash-gordon, #477)
|
19
|
+
|
20
|
+
|
21
|
+
[Compare v1.8.0...v1.8.1](https://github.com/dry-rb/dry-types/compare/v1.8.0...v1.8.1)
|
22
|
+
|
23
|
+
## 1.8.0 2025-01-06
|
24
|
+
|
25
|
+
|
26
|
+
### Added
|
27
|
+
|
28
|
+
- Added `Enum#each_value` to iterate over enum values (@CharlieWWW94 in #471)
|
29
|
+
|
30
|
+
### Fixed
|
31
|
+
|
32
|
+
- Fixed `Default#try` to return correct result (@elcuervo + @flash-gordon in #475)
|
33
|
+
|
34
|
+
### Changed
|
35
|
+
|
36
|
+
- Set min Ruby version to 3.1 (@flash-gordon)
|
37
|
+
- Better representation of Enum types (@flash-gordon, see #460)
|
38
|
+
|
39
|
+
[Compare v1.7.2...v1.8.0](https://github.com/dry-rb/dry-types/compare/v1.7.2...v1.8.0)
|
40
|
+
|
3
41
|
## 1.7.2 2024-01-05
|
4
42
|
|
5
43
|
|
data/README.md
CHANGED
data/dry-types.gemspec
CHANGED
@@ -21,23 +21,19 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = []
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
-
spec.metadata["allowed_push_host"]
|
25
|
-
spec.metadata["changelog_uri"]
|
26
|
-
spec.metadata["source_code_uri"]
|
27
|
-
spec.metadata["bug_tracker_uri"]
|
24
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
25
|
+
spec.metadata["changelog_uri"] = "https://github.com/dry-rb/dry-types/blob/main/CHANGELOG.md"
|
26
|
+
spec.metadata["source_code_uri"] = "https://github.com/dry-rb/dry-types"
|
27
|
+
spec.metadata["bug_tracker_uri"] = "https://github.com/dry-rb/dry-types/issues"
|
28
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
28
29
|
|
29
|
-
spec.required_ruby_version = ">= 3.
|
30
|
+
spec.required_ruby_version = ">= 3.1"
|
30
31
|
|
31
32
|
# to update dependencies edit project.yml
|
32
|
-
spec.
|
33
|
-
spec.
|
34
|
-
spec.
|
35
|
-
spec.
|
36
|
-
spec.
|
37
|
-
spec.
|
38
|
-
|
39
|
-
spec.add_development_dependency "bundler"
|
40
|
-
spec.add_development_dependency "rake"
|
41
|
-
spec.add_development_dependency "rspec"
|
42
|
-
spec.add_development_dependency "yard"
|
33
|
+
spec.add_dependency "bigdecimal", "~> 3.0"
|
34
|
+
spec.add_dependency "concurrent-ruby", "~> 1.0"
|
35
|
+
spec.add_dependency "dry-core", "~> 1.0"
|
36
|
+
spec.add_dependency "dry-inflector", "~> 1.0"
|
37
|
+
spec.add_dependency "dry-logic", "~> 1.4"
|
38
|
+
spec.add_dependency "zeitwerk", "~> 2.6"
|
43
39
|
end
|
data/lib/dry/types/any.rb
CHANGED
@@ -9,9 +9,7 @@ module Dry
|
|
9
9
|
#
|
10
10
|
# @api public
|
11
11
|
class AnyClass < Nominal
|
12
|
-
def self.name
|
13
|
-
"Any"
|
14
|
-
end
|
12
|
+
def self.name = "Any"
|
15
13
|
|
16
14
|
# @api private
|
17
15
|
def initialize(**options)
|
@@ -21,9 +19,7 @@ module Dry
|
|
21
19
|
# @return [String]
|
22
20
|
#
|
23
21
|
# @api public
|
24
|
-
def name
|
25
|
-
"Any"
|
26
|
-
end
|
22
|
+
def name = "Any"
|
27
23
|
|
28
24
|
# @param [Hash] new_options
|
29
25
|
#
|
@@ -37,9 +33,7 @@ module Dry
|
|
37
33
|
# @return [Array]
|
38
34
|
#
|
39
35
|
# @api public
|
40
|
-
def to_ast(meta: true)
|
41
|
-
[:any, meta ? self.meta : EMPTY_HASH]
|
42
|
-
end
|
36
|
+
def to_ast(meta: true) = [:any, meta ? self.meta : EMPTY_HASH]
|
43
37
|
end
|
44
38
|
|
45
39
|
Any = AnyClass.new
|
@@ -7,23 +7,17 @@ module Dry
|
|
7
7
|
# @api private
|
8
8
|
class Constructor < ::Dry::Types::Constructor
|
9
9
|
# @api private
|
10
|
-
def constructor_type
|
11
|
-
::Dry::Types::Array::Constructor
|
12
|
-
end
|
10
|
+
def constructor_type = ::Dry::Types::Array::Constructor
|
13
11
|
|
14
12
|
# @return [Lax]
|
15
13
|
#
|
16
14
|
# @api public
|
17
|
-
def lax
|
18
|
-
Lax.new(type.lax.constructor(fn, meta: meta))
|
19
|
-
end
|
15
|
+
def lax = Lax.new(type.lax.constructor(fn, meta: meta))
|
20
16
|
|
21
17
|
# @see Dry::Types::Array#of
|
22
18
|
#
|
23
19
|
# @api public
|
24
|
-
def of(member)
|
25
|
-
type.of(member).constructor(fn, meta: meta)
|
26
|
-
end
|
20
|
+
def of(member) = type.of(member).constructor(fn, meta: meta)
|
27
21
|
end
|
28
22
|
end
|
29
23
|
end
|
data/lib/dry/types/array.rb
CHANGED
data/lib/dry/types/builder.rb
CHANGED
@@ -5,23 +5,18 @@ module Dry
|
|
5
5
|
# Common API for building types and composition
|
6
6
|
#
|
7
7
|
# @api public
|
8
|
-
# rubocop:disable Metrics/ModuleLength
|
9
8
|
module Builder
|
10
|
-
include Dry::Core::Constants
|
9
|
+
include ::Dry::Core::Constants
|
11
10
|
|
12
11
|
# @return [Class]
|
13
12
|
#
|
14
13
|
# @api private
|
15
|
-
def constrained_type
|
16
|
-
Constrained
|
17
|
-
end
|
14
|
+
def constrained_type = Constrained
|
18
15
|
|
19
16
|
# @return [Class]
|
20
17
|
#
|
21
18
|
# @api private
|
22
|
-
def constructor_type
|
23
|
-
Constructor
|
24
|
-
end
|
19
|
+
def constructor_type = Constructor
|
25
20
|
|
26
21
|
# Compose two types into a Sum type
|
27
22
|
#
|
@@ -30,9 +25,7 @@ module Dry
|
|
30
25
|
# @return [Sum, Sum::Constrained]
|
31
26
|
#
|
32
27
|
# @api private
|
33
|
-
def |(other)
|
34
|
-
compose(other, Sum)
|
35
|
-
end
|
28
|
+
def |(other) = compose(other, Sum)
|
36
29
|
|
37
30
|
# Compose two types into an Intersection type
|
38
31
|
#
|
@@ -41,9 +34,7 @@ module Dry
|
|
41
34
|
# @return [Intersection, Intersection::Constrained]
|
42
35
|
#
|
43
36
|
# @api private
|
44
|
-
def &(other)
|
45
|
-
compose(other, Intersection)
|
46
|
-
end
|
37
|
+
def &(other) = compose(other, Intersection)
|
47
38
|
|
48
39
|
# Compose two types into an Implication type
|
49
40
|
#
|
@@ -52,18 +43,14 @@ module Dry
|
|
52
43
|
# @return [Implication, Implication::Constrained]
|
53
44
|
#
|
54
45
|
# @api private
|
55
|
-
def >(other)
|
56
|
-
compose(other, Implication)
|
57
|
-
end
|
46
|
+
def >(other) = compose(other, Implication)
|
58
47
|
|
59
48
|
# Turn a type into an optional type
|
60
49
|
#
|
61
50
|
# @return [Sum]
|
62
51
|
#
|
63
52
|
# @api public
|
64
|
-
def optional
|
65
|
-
Types["nil"] | self
|
66
|
-
end
|
53
|
+
def optional = Types["nil"] | self
|
67
54
|
|
68
55
|
# Turn a type into a constrained type
|
69
56
|
#
|
@@ -72,8 +59,8 @@ module Dry
|
|
72
59
|
# @return [Constrained]
|
73
60
|
#
|
74
61
|
# @api public
|
75
|
-
def constrained(
|
76
|
-
constrained_type.new(self, rule: Types.Rule(
|
62
|
+
def constrained(...)
|
63
|
+
constrained_type.new(self, rule: Types.Rule(...))
|
77
64
|
end
|
78
65
|
|
79
66
|
# Turn a type into a type with a default value
|
@@ -91,10 +78,10 @@ module Dry
|
|
91
78
|
unless input.frozen? || options[:shared]
|
92
79
|
where = Core::Deprecations::STACK.()
|
93
80
|
Core::Deprecations.warn(
|
94
|
-
"#{input.inspect} is mutable."\
|
95
|
-
"
|
96
|
-
"
|
97
|
-
"
|
81
|
+
"#{input.inspect} is mutable. " \
|
82
|
+
"Be careful: types will return the same instance of the default " \
|
83
|
+
"value every time. Call `.freeze` when setting the default " \
|
84
|
+
"or pass `shared: true` to discard this warning." \
|
98
85
|
"\n#{where}",
|
99
86
|
tag: :"dry-types"
|
100
87
|
)
|
@@ -137,9 +124,7 @@ module Dry
|
|
137
124
|
# @return [Lax]
|
138
125
|
#
|
139
126
|
# @api public
|
140
|
-
def lax
|
141
|
-
Lax.new(self)
|
142
|
-
end
|
127
|
+
def lax = Lax.new(self)
|
143
128
|
|
144
129
|
# Define a constructor for the type
|
145
130
|
#
|
@@ -182,16 +167,16 @@ module Dry
|
|
182
167
|
unless value.frozen? || shared
|
183
168
|
where = Core::Deprecations::STACK.()
|
184
169
|
Core::Deprecations.warn(
|
185
|
-
"#{value.inspect} is mutable."\
|
186
|
-
"
|
187
|
-
"
|
188
|
-
"
|
170
|
+
"#{value.inspect} is mutable. " \
|
171
|
+
"Be careful: types will return the same instance of the fallback " \
|
172
|
+
"value every time. Call `.freeze` when setting the fallback " \
|
173
|
+
"or pass `shared: true` to discard this warning." \
|
189
174
|
"\n#{where}",
|
190
175
|
tag: :"dry-types"
|
191
176
|
)
|
192
177
|
end
|
193
178
|
|
194
|
-
constructor do |input, type,
|
179
|
+
constructor do |input, type, &|
|
195
180
|
type.(input) do |output = input|
|
196
181
|
if block_given?
|
197
182
|
yield(output)
|
@@ -216,6 +201,5 @@ module Dry
|
|
216
201
|
klass.new(self, other)
|
217
202
|
end
|
218
203
|
end
|
219
|
-
# rubocop:enable Metrics/ModuleLength
|
220
204
|
end
|
221
205
|
end
|
@@ -23,18 +23,14 @@ module Dry
|
|
23
23
|
# @param [Dry::Types::Type] type
|
24
24
|
#
|
25
25
|
# @return [Dry::Types::Array]
|
26
|
-
def Array(type)
|
27
|
-
Strict(::Array).of(type)
|
28
|
-
end
|
26
|
+
def Array(type) = Strict(::Array).of(type)
|
29
27
|
|
30
28
|
# Build a hash schema
|
31
29
|
#
|
32
30
|
# @param [Hash{Symbol => Dry::Types::Type}] type_map
|
33
31
|
#
|
34
32
|
# @return [Dry::Types::Array]
|
35
|
-
def Hash(type_map)
|
36
|
-
Strict(::Hash).schema(type_map)
|
37
|
-
end
|
33
|
+
def Hash(type_map) = Strict(::Hash).schema(type_map)
|
38
34
|
|
39
35
|
# Build a type which values are instances of a given class
|
40
36
|
# Values are checked using `is_a?` call
|
@@ -47,9 +43,7 @@ module Dry
|
|
47
43
|
# @param [Class,Module] klass Class or module
|
48
44
|
#
|
49
45
|
# @return [Dry::Types::Type]
|
50
|
-
def Instance(klass)
|
51
|
-
Nominal(klass).constrained(type: klass)
|
52
|
-
end
|
46
|
+
def Instance(klass) = Nominal(klass).constrained(type: klass)
|
53
47
|
alias_method :Strict, :Instance
|
54
48
|
|
55
49
|
# Build a type with a single value
|
@@ -58,9 +52,7 @@ module Dry
|
|
58
52
|
# @param [Object] value
|
59
53
|
#
|
60
54
|
# @return [Dry::Types::Type]
|
61
|
-
def Value(value)
|
62
|
-
Nominal(value.class).constrained(eql: value)
|
63
|
-
end
|
55
|
+
def Value(value) = Nominal(value.class).constrained(eql: value)
|
64
56
|
|
65
57
|
# Build a type with a single value
|
66
58
|
# The equality check done with `equal?`
|
@@ -68,9 +60,7 @@ module Dry
|
|
68
60
|
# @param [Object] object
|
69
61
|
#
|
70
62
|
# @return [Dry::Types::Type]
|
71
|
-
def Constant(object)
|
72
|
-
Nominal(object.class).constrained(is: object)
|
73
|
-
end
|
63
|
+
def Constant(object) = Nominal(object.class).constrained(is: object)
|
74
64
|
|
75
65
|
# Build a constructor type
|
76
66
|
# If no constructor block given it uses .new method
|
@@ -21,7 +21,7 @@ module Dry
|
|
21
21
|
# @raise CoercionError
|
22
22
|
#
|
23
23
|
# @api public
|
24
|
-
def self.to_nil(input, &
|
24
|
+
def self.to_nil(input, &)
|
25
25
|
if input.nil?
|
26
26
|
nil
|
27
27
|
elsif block_given?
|
@@ -38,13 +38,13 @@ module Dry
|
|
38
38
|
# @raise CoercionError
|
39
39
|
#
|
40
40
|
# @api public
|
41
|
-
def self.to_decimal(input, &
|
41
|
+
def self.to_decimal(input, &)
|
42
42
|
if input.is_a?(::Float)
|
43
43
|
input.to_d
|
44
44
|
else
|
45
45
|
BigDecimal(input)
|
46
46
|
end
|
47
|
-
rescue ArgumentError, TypeError
|
47
|
+
rescue ::ArgumentError, ::TypeError
|
48
48
|
if block_given?
|
49
49
|
yield
|
50
50
|
else
|
@@ -26,7 +26,7 @@ module Dry
|
|
26
26
|
# @raise CoercionError
|
27
27
|
#
|
28
28
|
# @api public
|
29
|
-
def self.to_nil(input, &
|
29
|
+
def self.to_nil(input, &)
|
30
30
|
if input.nil? || empty_str?(input)
|
31
31
|
nil
|
32
32
|
elsif block_given?
|
@@ -46,7 +46,7 @@ module Dry
|
|
46
46
|
# @raise CoercionError
|
47
47
|
#
|
48
48
|
# @api public
|
49
|
-
def self.to_true(input, &
|
49
|
+
def self.to_true(input, &)
|
50
50
|
BOOLEAN_MAP.fetch(input.to_s) do
|
51
51
|
if block_given?
|
52
52
|
yield
|
@@ -66,7 +66,7 @@ module Dry
|
|
66
66
|
# @raise CoercionError
|
67
67
|
#
|
68
68
|
# @api public
|
69
|
-
def self.to_false(input, &
|
69
|
+
def self.to_false(input, &)
|
70
70
|
BOOLEAN_MAP.fetch(input.to_s) do
|
71
71
|
if block_given?
|
72
72
|
yield
|
@@ -83,14 +83,14 @@ module Dry
|
|
83
83
|
# @raise CoercionError
|
84
84
|
#
|
85
85
|
# @api public
|
86
|
-
def self.to_int(input, &
|
87
|
-
if input.is_a?
|
86
|
+
def self.to_int(input, &)
|
87
|
+
if input.is_a?(::String)
|
88
88
|
Integer(input, 10)
|
89
89
|
else
|
90
90
|
Integer(input)
|
91
91
|
end
|
92
|
-
rescue ArgumentError, TypeError => e
|
93
|
-
CoercionError.handle(e, &
|
92
|
+
rescue ::ArgumentError, ::TypeError => e
|
93
|
+
CoercionError.handle(e, &)
|
94
94
|
end
|
95
95
|
|
96
96
|
# @param [#to_f, Object] input
|
@@ -100,10 +100,10 @@ module Dry
|
|
100
100
|
# @raise CoercionError
|
101
101
|
#
|
102
102
|
# @api public
|
103
|
-
def self.to_float(input, &
|
103
|
+
def self.to_float(input, &)
|
104
104
|
Float(input)
|
105
|
-
rescue ArgumentError, TypeError => e
|
106
|
-
CoercionError.handle(e, &
|
105
|
+
rescue ::ArgumentError, ::TypeError => e
|
106
|
+
CoercionError.handle(e, &)
|
107
107
|
end
|
108
108
|
|
109
109
|
# @param [#to_d, Object] input
|
@@ -113,7 +113,7 @@ module Dry
|
|
113
113
|
# @raise CoercionError
|
114
114
|
#
|
115
115
|
# @api public
|
116
|
-
def self.to_decimal(input, &
|
116
|
+
def self.to_decimal(input, &)
|
117
117
|
to_float(input) do
|
118
118
|
if block_given?
|
119
119
|
return yield
|
@@ -132,7 +132,7 @@ module Dry
|
|
132
132
|
# @raise CoercionError
|
133
133
|
#
|
134
134
|
# @api public
|
135
|
-
def self.to_ary(input, &
|
135
|
+
def self.to_ary(input, &)
|
136
136
|
if empty_str?(input)
|
137
137
|
[]
|
138
138
|
elsif input.is_a?(::Array)
|
@@ -151,7 +151,7 @@ module Dry
|
|
151
151
|
# @raise CoercionError
|
152
152
|
#
|
153
153
|
# @api public
|
154
|
-
def self.to_hash(input, &
|
154
|
+
def self.to_hash(input, &)
|
155
155
|
if empty_str?(input)
|
156
156
|
{}
|
157
157
|
elsif input.is_a?(::Hash)
|
data/lib/dry/types/coercions.rb
CHANGED
@@ -15,12 +15,12 @@ module Dry
|
|
15
15
|
# @see Date.parse
|
16
16
|
#
|
17
17
|
# @api public
|
18
|
-
def to_date(input, &
|
18
|
+
def to_date(input, &)
|
19
19
|
if input.respond_to?(:to_str)
|
20
20
|
begin
|
21
21
|
::Date.parse(input)
|
22
|
-
rescue ArgumentError, RangeError => e
|
23
|
-
CoercionError.handle(e, &
|
22
|
+
rescue ::ArgumentError, ::RangeError => e
|
23
|
+
CoercionError.handle(e, &)
|
24
24
|
end
|
25
25
|
elsif input.is_a?(::Date)
|
26
26
|
input
|
@@ -38,12 +38,12 @@ module Dry
|
|
38
38
|
# @see DateTime.parse
|
39
39
|
#
|
40
40
|
# @api public
|
41
|
-
def to_date_time(input, &
|
41
|
+
def to_date_time(input, &)
|
42
42
|
if input.respond_to?(:to_str)
|
43
43
|
begin
|
44
44
|
::DateTime.parse(input)
|
45
|
-
rescue ArgumentError => e
|
46
|
-
CoercionError.handle(e, &
|
45
|
+
rescue ::ArgumentError => e
|
46
|
+
CoercionError.handle(e, &)
|
47
47
|
end
|
48
48
|
elsif input.is_a?(::DateTime)
|
49
49
|
input
|
@@ -61,12 +61,12 @@ module Dry
|
|
61
61
|
# @see Time.parse
|
62
62
|
#
|
63
63
|
# @api public
|
64
|
-
def to_time(input, &
|
64
|
+
def to_time(input, &)
|
65
65
|
if input.respond_to?(:to_str)
|
66
66
|
begin
|
67
67
|
::Time.parse(input)
|
68
|
-
rescue ArgumentError => e
|
69
|
-
CoercionError.handle(e, &
|
68
|
+
rescue ::ArgumentError => e
|
69
|
+
CoercionError.handle(e, &)
|
70
70
|
end
|
71
71
|
elsif input.is_a?(::Time)
|
72
72
|
input
|
@@ -84,10 +84,10 @@ module Dry
|
|
84
84
|
# @raise CoercionError
|
85
85
|
#
|
86
86
|
# @api public
|
87
|
-
def to_symbol(input, &
|
87
|
+
def to_symbol(input, &)
|
88
88
|
input.to_sym
|
89
|
-
rescue NoMethodError => e
|
90
|
-
CoercionError.handle(e, &
|
89
|
+
rescue ::NoMethodError => e
|
90
|
+
CoercionError.handle(e, &)
|
91
91
|
end
|
92
92
|
|
93
93
|
private
|
@@ -99,9 +99,7 @@ module Dry
|
|
99
99
|
# @return [Boolean]
|
100
100
|
#
|
101
101
|
# @api private
|
102
|
-
def empty_str?(value)
|
103
|
-
EMPTY_STRING.eql?(value)
|
104
|
-
end
|
102
|
+
def empty_str?(value) = EMPTY_STRING.eql?(value)
|
105
103
|
end
|
106
104
|
end
|
107
105
|
end
|
data/lib/dry/types/compiler.rb
CHANGED
@@ -12,9 +12,7 @@ module Dry
|
|
12
12
|
@registry = registry
|
13
13
|
end
|
14
14
|
|
15
|
-
def call(ast)
|
16
|
-
visit(ast)
|
17
|
-
end
|
15
|
+
def call(ast) = visit(ast)
|
18
16
|
|
19
17
|
def visit(node)
|
20
18
|
type, body = node
|
@@ -50,7 +48,7 @@ module Dry
|
|
50
48
|
end
|
51
49
|
|
52
50
|
def visit_rule(node)
|
53
|
-
Dry::Types.rule_compiler.([node])[0]
|
51
|
+
::Dry::Types.rule_compiler.([node])[0]
|
54
52
|
end
|
55
53
|
|
56
54
|
def visit_sum(node)
|
@@ -60,7 +58,7 @@ module Dry
|
|
60
58
|
|
61
59
|
def visit_array(node)
|
62
60
|
member, meta = node
|
63
|
-
member = member.is_a?(Class)
|
61
|
+
member = visit(member) unless member.is_a?(::Class)
|
64
62
|
registry["nominal.array"].of(member).meta(meta)
|
65
63
|
end
|
66
64
|
|
@@ -118,14 +116,14 @@ module Dry
|
|
118
116
|
|
119
117
|
case type
|
120
118
|
when :id
|
121
|
-
Dry::Types::FnContainer[node.fetch(0)]
|
119
|
+
::Dry::Types::FnContainer[node.fetch(0)]
|
122
120
|
when :callable
|
123
121
|
node.fetch(0)
|
124
122
|
when :method
|
125
123
|
target, method = node
|
126
124
|
target.method(method)
|
127
125
|
else
|
128
|
-
raise ArgumentError, "Cannot build callable from #{fn.inspect}"
|
126
|
+
raise ::ArgumentError, "Cannot build callable from #{fn.inspect}"
|
129
127
|
end
|
130
128
|
end
|
131
129
|
end
|