dry-logic 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/LICENSE +1 -1
- data/README.md +3 -3
- data/dry-logic.gemspec +6 -8
- data/lib/dry/logic/builder.rb +8 -8
- data/lib/dry/logic/operations/abstract.rb +1 -1
- data/lib/dry/logic/operations/check.rb +1 -1
- data/lib/dry/logic/operations/each.rb +1 -1
- data/lib/dry/logic/predicates.rb +75 -137
- data/lib/dry/logic/result.rb +1 -1
- data/lib/dry/logic/rule/interface.rb +16 -22
- data/lib/dry/logic/rule.rb +2 -2
- data/lib/dry/logic/version.rb +1 -1
- metadata +23 -56
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1ad8dbf80a90343c1b903d8c56682b3b83ec02fbd40b96175598d011ca6e5fb
|
4
|
+
data.tar.gz: 1bdd6f06073b61dfaa843844c72a96408dcb8745b69ecfae99758da1b7876abc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8f95362da176825e3dc22dac020ab008222980788abc472b7008b6fd9c98aae7f48a18c523b5f8194399e08fc271a457b8167438ad103faad8f6ebc7ae7a0c6
|
7
|
+
data.tar.gz: 06644cc140ae06bf5f9df176560a21aca0aa3f96ff250cabfe299c7864b7ed31c673576b68e035809645c4a24ccce6867c9232c50874da669dbe7c6c75189dbe
|
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.6.0 2025-01-04
|
4
|
+
|
5
|
+
|
6
|
+
### Fixed
|
7
|
+
|
8
|
+
- Fix NoMethodError when trying to get AST of a Builder's result. (via #107) (@estum)
|
9
|
+
|
10
|
+
### Changed
|
11
|
+
|
12
|
+
- Set 3.1 as minimum ruby version (@flash-gordon)
|
13
|
+
|
14
|
+
[Compare v1.5.0...v1.6.0](https://github.com/dry-rb/dry-logic/compare/v1.5.0...v1.6.0)
|
15
|
+
|
3
16
|
## 1.5.0 2022-11-24
|
4
17
|
|
5
18
|
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
[gem]: https://rubygems.org/gems/dry-logic
|
3
3
|
[actions]: https://github.com/dry-rb/dry-logic/actions
|
4
4
|
|
5
|
-
# dry-logic [![Gem Version](https://badge.fury.io/rb/dry-logic.svg)][gem] [![CI Status](https://github.com/dry-rb/dry-logic/workflows/
|
5
|
+
# dry-logic [![Gem Version](https://badge.fury.io/rb/dry-logic.svg)][gem] [![CI Status](https://github.com/dry-rb/dry-logic/workflows/CI/badge.svg)][actions]
|
6
6
|
|
7
7
|
## Links
|
8
8
|
|
@@ -14,8 +14,8 @@
|
|
14
14
|
|
15
15
|
This library officially supports the following Ruby versions:
|
16
16
|
|
17
|
-
* MRI `>=
|
18
|
-
* jruby `>= 9.
|
17
|
+
* MRI `>= 3.1`
|
18
|
+
* jruby `>= 9.4` (not tested on CI)
|
19
19
|
|
20
20
|
## License
|
21
21
|
|
data/dry-logic.gemspec
CHANGED
@@ -25,15 +25,13 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.metadata["changelog_uri"] = "https://github.com/dry-rb/dry-logic/blob/main/CHANGELOG.md"
|
26
26
|
spec.metadata["source_code_uri"] = "https://github.com/dry-rb/dry-logic"
|
27
27
|
spec.metadata["bug_tracker_uri"] = "https://github.com/dry-rb/dry-logic/issues"
|
28
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
28
29
|
|
29
|
-
spec.required_ruby_version = ">=
|
30
|
+
spec.required_ruby_version = ">= 3.1.0"
|
30
31
|
|
31
32
|
# to update dependencies edit project.yml
|
32
|
-
spec.
|
33
|
-
spec.
|
34
|
-
spec.
|
35
|
-
|
36
|
-
spec.add_development_dependency "bundler"
|
37
|
-
spec.add_development_dependency "rake"
|
38
|
-
spec.add_development_dependency "rspec"
|
33
|
+
spec.add_dependency "bigdecimal"
|
34
|
+
spec.add_dependency "concurrent-ruby", "~> 1.0"
|
35
|
+
spec.add_dependency "dry-core", "~> 1.1"
|
36
|
+
spec.add_dependency "zeitwerk", "~> 2.6"
|
39
37
|
end
|
data/lib/dry/logic/builder.rb
CHANGED
@@ -28,8 +28,8 @@ module Dry
|
|
28
28
|
# p is_zero.call(1) # => false
|
29
29
|
# p is_zero.call(0) # => true
|
30
30
|
# p is_zero.call(-1) # => false
|
31
|
-
def call(&
|
32
|
-
Context.instance.call(&
|
31
|
+
def call(&)
|
32
|
+
Context.instance.call(&)
|
33
33
|
end
|
34
34
|
module_function :call
|
35
35
|
alias_method :build, :call
|
@@ -44,23 +44,23 @@ module Dry
|
|
44
44
|
end
|
45
45
|
|
46
46
|
# @see Builder#call
|
47
|
-
def call(&
|
48
|
-
instance_eval(&
|
47
|
+
def call(&)
|
48
|
+
instance_eval(&)
|
49
49
|
end
|
50
50
|
|
51
51
|
# Defines custom predicate
|
52
52
|
#
|
53
53
|
# @name [Symbol] Name of predicate
|
54
54
|
# @Context [Proc]
|
55
|
-
def predicate(name, &
|
55
|
+
def predicate(name, context = nil, &block)
|
56
56
|
if singleton_class.method_defined?(name)
|
57
57
|
singleton_class.undef_method(name)
|
58
58
|
end
|
59
59
|
|
60
|
-
|
60
|
+
predicate = Rule::Predicate.new(context || block)
|
61
61
|
|
62
62
|
define_singleton_method(name) do |*args|
|
63
|
-
|
63
|
+
predicate.curry(*args)
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
@@ -78,7 +78,7 @@ module Dry
|
|
78
78
|
|
79
79
|
Predicates::Methods.instance_methods(false).each do |name|
|
80
80
|
unless IGNORED_PREDICATES.include?(name)
|
81
|
-
predicate(name,
|
81
|
+
predicate(name, Predicates[name])
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
data/lib/dry/logic/predicates.rb
CHANGED
@@ -5,11 +5,12 @@ require "dry/core/constants"
|
|
5
5
|
require "bigdecimal"
|
6
6
|
require "bigdecimal/util"
|
7
7
|
require "date"
|
8
|
+
require "uri"
|
8
9
|
|
9
10
|
module Dry
|
10
11
|
module Logic
|
11
12
|
module Predicates
|
12
|
-
include Dry::Core::Constants
|
13
|
+
include ::Dry::Core::Constants
|
13
14
|
|
14
15
|
# rubocop:disable Metrics/ModuleLength
|
15
16
|
module Methods
|
@@ -29,143 +30,99 @@ module Dry
|
|
29
30
|
|
30
31
|
UUIDv5 = uuid_format(5)
|
31
32
|
|
33
|
+
UUIDv6 = uuid_format(6)
|
34
|
+
|
35
|
+
UUIDv7 = uuid_format(7)
|
36
|
+
|
37
|
+
UUIDv8 = uuid_format(8)
|
38
|
+
|
32
39
|
def [](name)
|
33
40
|
method(name)
|
34
41
|
end
|
35
42
|
|
36
|
-
def type?(type, input)
|
37
|
-
input.is_a?(type)
|
38
|
-
end
|
43
|
+
def type?(type, input) = input.is_a?(type)
|
39
44
|
|
40
|
-
def nil?(input)
|
41
|
-
input.nil?
|
42
|
-
end
|
45
|
+
def nil?(input) = input.nil?
|
43
46
|
alias_method :none?, :nil?
|
44
47
|
|
45
|
-
def key?(name, input)
|
46
|
-
input.key?(name)
|
47
|
-
end
|
48
|
+
def key?(name, input) = input.key?(name)
|
48
49
|
|
49
|
-
def attr?(name, input)
|
50
|
-
input.respond_to?(name)
|
51
|
-
end
|
50
|
+
def attr?(name, input) = input.respond_to?(name)
|
52
51
|
|
53
52
|
def empty?(input)
|
54
53
|
case input
|
55
|
-
when String, Array, Hash then input.empty?
|
54
|
+
when ::String, ::Array, ::Hash then input.empty?
|
56
55
|
when nil then true
|
57
56
|
else
|
58
57
|
false
|
59
58
|
end
|
60
59
|
end
|
61
60
|
|
62
|
-
def filled?(input)
|
63
|
-
!empty?(input)
|
64
|
-
end
|
61
|
+
def filled?(input) = !empty?(input)
|
65
62
|
|
66
|
-
def bool?(input)
|
67
|
-
input.is_a?(TrueClass) || input.is_a?(FalseClass)
|
68
|
-
end
|
63
|
+
def bool?(input) = input.equal?(true) || input.equal?(false)
|
69
64
|
|
70
|
-
def date?(input)
|
71
|
-
input.is_a?(Date)
|
72
|
-
end
|
65
|
+
def date?(input) = input.is_a?(::Date)
|
73
66
|
|
74
|
-
def date_time?(input)
|
75
|
-
input.is_a?(DateTime)
|
76
|
-
end
|
67
|
+
def date_time?(input) = input.is_a?(::DateTime)
|
77
68
|
|
78
|
-
def time?(input)
|
79
|
-
input.is_a?(Time)
|
80
|
-
end
|
69
|
+
def time?(input) = input.is_a?(::Time)
|
81
70
|
|
82
71
|
def number?(input)
|
83
72
|
true if Float(input)
|
84
|
-
rescue ArgumentError, TypeError
|
73
|
+
rescue ::ArgumentError, ::TypeError
|
85
74
|
false
|
86
75
|
end
|
87
76
|
|
88
|
-
def int?(input)
|
89
|
-
input.is_a?(Integer)
|
90
|
-
end
|
77
|
+
def int?(input) = input.is_a?(::Integer)
|
91
78
|
|
92
|
-
def float?(input)
|
93
|
-
input.is_a?(Float)
|
94
|
-
end
|
79
|
+
def float?(input) = input.is_a?(::Float)
|
95
80
|
|
96
|
-
def decimal?(input)
|
97
|
-
input.is_a?(BigDecimal)
|
98
|
-
end
|
81
|
+
def decimal?(input) = input.is_a?(::BigDecimal)
|
99
82
|
|
100
|
-
def str?(input)
|
101
|
-
input.is_a?(String)
|
102
|
-
end
|
83
|
+
def str?(input) = input.is_a?(::String)
|
103
84
|
|
104
|
-
def hash?(input)
|
105
|
-
input.is_a?(Hash)
|
106
|
-
end
|
85
|
+
def hash?(input) = input.is_a?(::Hash)
|
107
86
|
|
108
|
-
def array?(input)
|
109
|
-
input.is_a?(Array)
|
110
|
-
end
|
87
|
+
def array?(input) = input.is_a?(::Array)
|
111
88
|
|
112
|
-
def odd?(input)
|
113
|
-
input.odd?
|
114
|
-
end
|
89
|
+
def odd?(input) = input.odd?
|
115
90
|
|
116
|
-
def even?(input)
|
117
|
-
input.even?
|
118
|
-
end
|
91
|
+
def even?(input) = input.even?
|
119
92
|
|
120
|
-
def lt?(num, input)
|
121
|
-
input < num
|
122
|
-
end
|
93
|
+
def lt?(num, input) = input < num
|
123
94
|
|
124
|
-
def gt?(num, input)
|
125
|
-
input > num
|
126
|
-
end
|
95
|
+
def gt?(num, input) = input > num
|
127
96
|
|
128
|
-
def lteq?(num, input)
|
129
|
-
!gt?(num, input)
|
130
|
-
end
|
97
|
+
def lteq?(num, input) = !gt?(num, input)
|
131
98
|
|
132
|
-
def gteq?(num, input)
|
133
|
-
!lt?(num, input)
|
134
|
-
end
|
99
|
+
def gteq?(num, input) = !lt?(num, input)
|
135
100
|
|
136
101
|
def size?(size, input)
|
137
102
|
case size
|
138
|
-
when Integer then size.equal?(input.size)
|
139
|
-
when Range, Array then size.include?(input.size)
|
103
|
+
when ::Integer then size.equal?(input.size)
|
104
|
+
when ::Range, ::Array then size.include?(input.size)
|
140
105
|
else
|
141
|
-
raise ArgumentError, "+#{size}+ is not supported type for size? predicate."
|
106
|
+
raise ::ArgumentError, "+#{size}+ is not supported type for size? predicate."
|
142
107
|
end
|
143
108
|
end
|
144
109
|
|
145
|
-
def min_size?(num, input)
|
146
|
-
input.size >= num
|
147
|
-
end
|
110
|
+
def min_size?(num, input) = input.size >= num
|
148
111
|
|
149
|
-
def max_size?(num, input)
|
150
|
-
input.size <= num
|
151
|
-
end
|
112
|
+
def max_size?(num, input) = input.size <= num
|
152
113
|
|
153
114
|
def bytesize?(size, input)
|
154
115
|
case size
|
155
|
-
when Integer then size.equal?(input.bytesize)
|
156
|
-
when Range, Array then size.include?(input.bytesize)
|
116
|
+
when ::Integer then size.equal?(input.bytesize)
|
117
|
+
when ::Range, ::Array then size.include?(input.bytesize)
|
157
118
|
else
|
158
|
-
raise ArgumentError, "+#{size}+ is not supported type for bytesize? predicate."
|
119
|
+
raise ::ArgumentError, "+#{size}+ is not supported type for bytesize? predicate."
|
159
120
|
end
|
160
121
|
end
|
161
122
|
|
162
|
-
def min_bytesize?(num, input)
|
163
|
-
input.bytesize >= num
|
164
|
-
end
|
123
|
+
def min_bytesize?(num, input) = input.bytesize >= num
|
165
124
|
|
166
|
-
def max_bytesize?(num, input)
|
167
|
-
input.bytesize <= num
|
168
|
-
end
|
125
|
+
def max_bytesize?(num, input) = input.bytesize <= num
|
169
126
|
|
170
127
|
def inclusion?(list, input)
|
171
128
|
deprecated(:inclusion?, :included_in?)
|
@@ -177,13 +134,9 @@ module Dry
|
|
177
134
|
excluded_from?(list, input)
|
178
135
|
end
|
179
136
|
|
180
|
-
def included_in?(list, input)
|
181
|
-
list.include?(input)
|
182
|
-
end
|
137
|
+
def included_in?(list, input) = list.include?(input)
|
183
138
|
|
184
|
-
def excluded_from?(list, input)
|
185
|
-
!list.include?(input)
|
186
|
-
end
|
139
|
+
def excluded_from?(list, input) = !list.include?(input)
|
187
140
|
|
188
141
|
def includes?(value, input)
|
189
142
|
if input.respond_to?(:include?)
|
@@ -191,13 +144,11 @@ module Dry
|
|
191
144
|
else
|
192
145
|
false
|
193
146
|
end
|
194
|
-
rescue TypeError
|
147
|
+
rescue ::TypeError
|
195
148
|
false
|
196
149
|
end
|
197
150
|
|
198
|
-
def excludes?(value, input)
|
199
|
-
!includes?(value, input)
|
200
|
-
end
|
151
|
+
def excludes?(value, input) = !includes?(value, input)
|
201
152
|
|
202
153
|
# This overrides Object#eql? so we need to make it compatible
|
203
154
|
def eql?(left, right = Undefined)
|
@@ -206,61 +157,48 @@ module Dry
|
|
206
157
|
left.eql?(right)
|
207
158
|
end
|
208
159
|
|
209
|
-
def is?(left, right)
|
210
|
-
left.equal?(right)
|
211
|
-
end
|
160
|
+
def is?(left, right) = left.equal?(right)
|
212
161
|
|
213
|
-
def not_eql?(left, right)
|
214
|
-
!left.eql?(right)
|
215
|
-
end
|
162
|
+
def not_eql?(left, right) = !left.eql?(right)
|
216
163
|
|
217
|
-
def true?(value)
|
218
|
-
value.equal?(true)
|
219
|
-
end
|
164
|
+
def true?(value) = value.equal?(true)
|
220
165
|
|
221
|
-
def false?(value)
|
222
|
-
value.equal?(false)
|
223
|
-
end
|
166
|
+
def false?(value) = value.equal?(false)
|
224
167
|
|
225
|
-
def format?(regex, input)
|
226
|
-
!input.nil? && regex.match?(input)
|
227
|
-
end
|
168
|
+
def format?(regex, input) = !input.nil? && regex.match?(input)
|
228
169
|
|
229
|
-
def case?(pattern, input)
|
230
|
-
# rubocop:disable Style/CaseEquality
|
231
|
-
pattern === input
|
232
|
-
# rubocop:enable Style/CaseEquality
|
233
|
-
end
|
170
|
+
def case?(pattern, input) = pattern === input # rubocop:disable Style/CaseEquality
|
234
171
|
|
235
|
-
def uuid_v1?(input)
|
236
|
-
format?(UUIDv1, input)
|
237
|
-
end
|
172
|
+
def uuid_v1?(input) = format?(UUIDv1, input)
|
238
173
|
|
239
|
-
def uuid_v2?(input)
|
240
|
-
format?(UUIDv2, input)
|
241
|
-
end
|
174
|
+
def uuid_v2?(input) = format?(UUIDv2, input)
|
242
175
|
|
243
|
-
def uuid_v3?(input)
|
244
|
-
format?(UUIDv3, input)
|
245
|
-
end
|
176
|
+
def uuid_v3?(input) = format?(UUIDv3, input)
|
246
177
|
|
247
|
-
def uuid_v4?(input)
|
248
|
-
format?(UUIDv4, input)
|
249
|
-
end
|
178
|
+
def uuid_v4?(input) = format?(UUIDv4, input)
|
250
179
|
|
251
|
-
def uuid_v5?(input)
|
252
|
-
format?(UUIDv5, input)
|
253
|
-
end
|
180
|
+
def uuid_v5?(input) = format?(UUIDv5, input)
|
254
181
|
|
255
|
-
def
|
256
|
-
|
257
|
-
|
258
|
-
|
182
|
+
def uuid_v6?(input) = format?(UUIDv6, input)
|
183
|
+
|
184
|
+
def uuid_v7?(input) = format?(UUIDv7, input)
|
185
|
+
|
186
|
+
def uuid_v8?(input) = format?(UUIDv8, input)
|
259
187
|
|
260
|
-
|
261
|
-
|
188
|
+
if defined?(::URI::RFC2396_PARSER)
|
189
|
+
def uri?(schemes, input)
|
190
|
+
uri_format = ::URI::RFC2396_PARSER.make_regexp(schemes)
|
191
|
+
format?(uri_format, input)
|
192
|
+
end
|
193
|
+
else
|
194
|
+
def uri?(schemes, input)
|
195
|
+
uri_format = ::URI::DEFAULT_PARSER.make_regexp(schemes)
|
196
|
+
format?(uri_format, input)
|
197
|
+
end
|
262
198
|
end
|
263
199
|
|
200
|
+
def uri_rfc3986?(input) = format?(::URI::RFC3986_Parser::RFC3986_URI, input)
|
201
|
+
|
264
202
|
# This overrides Object#respond_to? so we need to make it compatible
|
265
203
|
def respond_to?(method, input = Undefined)
|
266
204
|
return super if input.equal?(Undefined)
|
@@ -268,8 +206,8 @@ module Dry
|
|
268
206
|
input.respond_to?(method)
|
269
207
|
end
|
270
208
|
|
271
|
-
def predicate(name, &
|
272
|
-
define_singleton_method(name, &
|
209
|
+
def predicate(name, &)
|
210
|
+
define_singleton_method(name, &)
|
273
211
|
end
|
274
212
|
|
275
213
|
def deprecated(name, in_favor_of)
|
data/lib/dry/logic/result.rb
CHANGED
@@ -29,17 +29,11 @@ module Dry
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
def constant?
|
33
|
-
arity.zero?
|
34
|
-
end
|
32
|
+
def constant? = arity.zero?
|
35
33
|
|
36
|
-
def variable_arity?
|
37
|
-
arity.negative?
|
38
|
-
end
|
34
|
+
def variable_arity? = arity.negative?
|
39
35
|
|
40
|
-
def curried?
|
41
|
-
!curried.zero?
|
42
|
-
end
|
36
|
+
def curried? = !curried.zero?
|
43
37
|
|
44
38
|
def unapplied
|
45
39
|
if variable_arity?
|
@@ -116,26 +110,26 @@ module Dry
|
|
116
110
|
application = "@predicate[#{(curried_args + unapplied_args + splat).join(", ")}]"
|
117
111
|
|
118
112
|
module_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
119
|
-
def call(#{parameters})
|
120
|
-
if #{application}
|
121
|
-
Result::SUCCESS
|
122
|
-
else
|
123
|
-
Result.new(false, id) { ast(#{parameters}) }
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
def [](#{parameters})
|
128
|
-
#{application}
|
129
|
-
end
|
113
|
+
def call(#{parameters}) # def call(input0, input1, *rest)
|
114
|
+
if #{application} # if @predicate[@arg0, @arg1, input0, input1, *rest]
|
115
|
+
Result::SUCCESS # ::Dry::Logic::Result::Success
|
116
|
+
else # else
|
117
|
+
Result.new(false, id) { ast(#{parameters}) } # ::Dry::Logic::Result.new(false, id) { ast(input0, input1, *rest) }
|
118
|
+
end # end
|
119
|
+
end # end
|
120
|
+
#
|
121
|
+
def [](#{parameters}) # def [](@arg0, @arg1, input0, input1, *rest)
|
122
|
+
#{application} # @predicate[@arg0, @arg1, input0, input1, *rest]
|
123
|
+
end # end
|
130
124
|
RUBY
|
131
125
|
end
|
132
126
|
|
133
127
|
def curried_args
|
134
|
-
@curried_args ||= ::Array.new(curried) {
|
128
|
+
@curried_args ||= ::Array.new(curried) { "@arg#{_1}" }
|
135
129
|
end
|
136
130
|
|
137
131
|
def unapplied_args
|
138
|
-
@unapplied_args ||= ::Array.new(unapplied) {
|
132
|
+
@unapplied_args ||= ::Array.new(unapplied) { "input#{_1}" }
|
139
133
|
end
|
140
134
|
end
|
141
135
|
end
|
data/lib/dry/logic/rule.rb
CHANGED
@@ -14,7 +14,7 @@ module Dry
|
|
14
14
|
|
15
15
|
class Rule
|
16
16
|
include Core::Constants
|
17
|
-
include Dry::Equalizer(:predicate, :options)
|
17
|
+
include ::Dry::Equalizer(:predicate, :options)
|
18
18
|
include Operators
|
19
19
|
|
20
20
|
attr_reader :predicate
|
@@ -32,7 +32,7 @@ module Dry
|
|
32
32
|
def self.specialize(arity, curried, base = Rule)
|
33
33
|
base.interfaces.fetch_or_store([arity, curried]) do
|
34
34
|
interface = Interface.new(arity, curried)
|
35
|
-
klass = Class.new(base) { include interface }
|
35
|
+
klass = ::Class.new(base) { include interface }
|
36
36
|
base.const_set("#{base.name.split("::").last}#{interface.name}", klass)
|
37
37
|
klass
|
38
38
|
end
|
data/lib/dry/logic/version.rb
CHANGED
metadata
CHANGED
@@ -1,39 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-logic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.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:
|
11
|
+
date: 2025-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: bigdecimal
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: concurrent-ruby
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.0'
|
34
|
-
- - "<"
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: '2'
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -41,65 +38,34 @@ dependencies:
|
|
41
38
|
- - "~>"
|
42
39
|
- !ruby/object:Gem::Version
|
43
40
|
version: '1.0'
|
44
|
-
- - "<"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '2'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
42
|
+
name: dry-core
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
45
|
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
47
|
+
version: '1.1'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
52
|
- - "~>"
|
59
53
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
54
|
+
version: '1.1'
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - ">="
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: '0'
|
68
|
-
type: :development
|
69
|
-
prerelease: false
|
70
|
-
version_requirements: !ruby/object:Gem::Requirement
|
71
|
-
requirements:
|
72
|
-
- - ">="
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: '0'
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: rake
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - ">="
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '0'
|
82
|
-
type: :development
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - ">="
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '0'
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: rspec
|
56
|
+
name: zeitwerk
|
91
57
|
requirement: !ruby/object:Gem::Requirement
|
92
58
|
requirements:
|
93
|
-
- - "
|
59
|
+
- - "~>"
|
94
60
|
- !ruby/object:Gem::Version
|
95
|
-
version: '
|
96
|
-
type: :
|
61
|
+
version: '2.6'
|
62
|
+
type: :runtime
|
97
63
|
prerelease: false
|
98
64
|
version_requirements: !ruby/object:Gem::Requirement
|
99
65
|
requirements:
|
100
|
-
- - "
|
66
|
+
- - "~>"
|
101
67
|
- !ruby/object:Gem::Version
|
102
|
-
version: '
|
68
|
+
version: '2.6'
|
103
69
|
description: Predicate logic with rule composition
|
104
70
|
email:
|
105
71
|
- piotr.solnica@gmail.com
|
@@ -145,7 +111,8 @@ metadata:
|
|
145
111
|
changelog_uri: https://github.com/dry-rb/dry-logic/blob/main/CHANGELOG.md
|
146
112
|
source_code_uri: https://github.com/dry-rb/dry-logic
|
147
113
|
bug_tracker_uri: https://github.com/dry-rb/dry-logic/issues
|
148
|
-
|
114
|
+
rubygems_mfa_required: 'true'
|
115
|
+
post_install_message:
|
149
116
|
rdoc_options: []
|
150
117
|
require_paths:
|
151
118
|
- lib
|
@@ -153,15 +120,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
120
|
requirements:
|
154
121
|
- - ">="
|
155
122
|
- !ruby/object:Gem::Version
|
156
|
-
version:
|
123
|
+
version: 3.1.0
|
157
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
125
|
requirements:
|
159
126
|
- - ">="
|
160
127
|
- !ruby/object:Gem::Version
|
161
128
|
version: '0'
|
162
129
|
requirements: []
|
163
|
-
rubygems_version: 3.
|
164
|
-
signing_key:
|
130
|
+
rubygems_version: 3.3.27
|
131
|
+
signing_key:
|
165
132
|
specification_version: 4
|
166
133
|
summary: Predicate logic with rule composition
|
167
134
|
test_files: []
|