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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 58ce7aca14ea687be3852f8f6359ea33de4da0f057091127f828dbb2e6db8856
4
- data.tar.gz: 283cf7ff61520f4ca1822bea434bd9b98ccb07c10e17f628e0f440029ca76092
3
+ metadata.gz: c1ad8dbf80a90343c1b903d8c56682b3b83ec02fbd40b96175598d011ca6e5fb
4
+ data.tar.gz: 1bdd6f06073b61dfaa843844c72a96408dcb8745b69ecfae99758da1b7876abc
5
5
  SHA512:
6
- metadata.gz: 8d16672e062a05eb7c79a5ce34f47307b8eb7cba7cefce4c39d513f835b59fd711968e5bccb8a5f6e7c125aeec6485a4ff9193cc046390c44e2f4f4090f3ad44
7
- data.tar.gz: 4fbe122584b52eda9d699726023c09fcc9e636f8f67d3670de584b0a7d6345ebdac17ea7173bfa753aab35500eeb8f95d9941b851c980cd6fcac5c3cac8d879d
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
@@ -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
@@ -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/ci/badge.svg)][actions]
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 `>= 2.7.0`
18
- * jruby `>= 9.3` (postponed until 2.7 is supported)
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 = ">= 2.7.0"
30
+ spec.required_ruby_version = ">= 3.1.0"
30
31
 
31
32
  # to update dependencies edit project.yml
32
- spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
33
- spec.add_runtime_dependency "dry-core", "~> 1.0", "< 2"
34
- spec.add_runtime_dependency "zeitwerk", "~> 2.6"
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
@@ -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(&context)
32
- Context.instance.call(&context)
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(&context)
48
- instance_eval(&context)
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, &context)
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
- prerdicate = Rule::Predicate.new(context)
60
+ predicate = Rule::Predicate.new(context || block)
61
61
 
62
62
  define_singleton_method(name) do |*args|
63
- prerdicate.curry(*args)
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, &Predicates[name])
81
+ predicate(name, Predicates[name])
82
82
  end
83
83
  end
84
84
  end
@@ -5,7 +5,7 @@ module Dry
5
5
  module Operations
6
6
  class Abstract
7
7
  include Core::Constants
8
- include Dry::Equalizer(:rules, :options)
8
+ include ::Dry::Equalizer(:rules, :options)
9
9
  include Operators
10
10
 
11
11
  attr_reader :rules
@@ -8,7 +8,7 @@ module Dry
8
8
 
9
9
  def self.new(rule, **options)
10
10
  if options[:evaluator]
11
- super(rule, **options)
11
+ super
12
12
  else
13
13
  keys = options.fetch(:keys)
14
14
  evaluator = Evaluator::Set.new(keys)
@@ -23,7 +23,7 @@ module Dry
23
23
  end
24
24
 
25
25
  def [](arr)
26
- arr.map { |input| rule[input] }.all?
26
+ arr.all? { |input| rule[input] }
27
27
  end
28
28
  end
29
29
  end
@@ -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 uri?(schemes, input)
256
- uri_format = URI::DEFAULT_PARSER.make_regexp(schemes)
257
- format?(uri_format, input)
258
- end
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
- def uri_rfc3986?(input)
261
- format?(URI::RFC3986_Parser::RFC3986_URI, input)
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, &block)
272
- define_singleton_method(name, &block)
209
+ def predicate(name, &)
210
+ define_singleton_method(name, &)
273
211
  end
274
212
 
275
213
  def deprecated(name, in_favor_of)
@@ -3,7 +3,7 @@
3
3
  module Dry
4
4
  module Logic
5
5
  class Result
6
- SUCCESS = Class.new {
6
+ SUCCESS = ::Class.new {
7
7
  def success?
8
8
  true
9
9
  end
@@ -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}) # def call(input0, input1, *rest)
120
- if #{application} # if @predicate[@arg0, @arg1, input0, input1, *rest]
121
- Result::SUCCESS # ::Dry::Logic::Result::Success
122
- else # else
123
- Result.new(false, id) { ast(#{parameters}) } # ::Dry::Logic::Result.new(false, id) { ast(input0, input1, *rest) }
124
- end # end
125
- end # end
126
- #
127
- def [](#{parameters}) # def [](@arg0, @arg1, input0, input1, *rest)
128
- #{application} # @predicate[@arg0, @arg1, input0, input1, *rest]
129
- end # 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) { |i| "@arg#{i}" }
128
+ @curried_args ||= ::Array.new(curried) { "@arg#{_1}" }
135
129
  end
136
130
 
137
131
  def unapplied_args
138
- @unapplied_args ||= ::Array.new(unapplied) { |i| "input#{i}" }
132
+ @unapplied_args ||= ::Array.new(unapplied) { "input#{_1}" }
139
133
  end
140
134
  end
141
135
  end
@@ -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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module Logic
5
- VERSION = "1.5.0"
5
+ VERSION = "1.6.0"
6
6
  end
7
7
  end
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.5.0
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: 2022-11-24 00:00:00.000000000 Z
11
+ date: 2025-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: concurrent-ruby
14
+ name: bigdecimal
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
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: '1.0'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: dry-core
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: zeitwerk
42
+ name: dry-core
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
45
  - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: '2.6'
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: '2.6'
54
+ version: '1.1'
61
55
  - !ruby/object:Gem::Dependency
62
- name: bundler
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: '0'
96
- type: :development
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: '0'
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
- post_install_message:
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: 2.7.0
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.1.6
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: []