dry-logic 0.6.1 → 1.0.6

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.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +121 -22
  3. data/LICENSE +1 -1
  4. data/README.md +12 -14
  5. data/dry-logic.gemspec +29 -14
  6. data/lib/dry-logic.rb +2 -0
  7. data/lib/dry/logic.rb +2 -0
  8. data/lib/dry/logic/appliable.rb +2 -0
  9. data/lib/dry/logic/evaluator.rb +2 -0
  10. data/lib/dry/logic/operations.rb +2 -0
  11. data/lib/dry/logic/operations/abstract.rb +5 -3
  12. data/lib/dry/logic/operations/and.rb +3 -1
  13. data/lib/dry/logic/operations/attr.rb +2 -0
  14. data/lib/dry/logic/operations/binary.rb +2 -0
  15. data/lib/dry/logic/operations/check.rb +3 -1
  16. data/lib/dry/logic/operations/each.rb +2 -0
  17. data/lib/dry/logic/operations/implication.rb +2 -0
  18. data/lib/dry/logic/operations/key.rb +4 -2
  19. data/lib/dry/logic/operations/negation.rb +2 -0
  20. data/lib/dry/logic/operations/or.rb +2 -0
  21. data/lib/dry/logic/operations/set.rb +2 -0
  22. data/lib/dry/logic/operations/unary.rb +2 -0
  23. data/lib/dry/logic/operations/xor.rb +2 -0
  24. data/lib/dry/logic/operators.rb +2 -0
  25. data/lib/dry/logic/predicates.rb +39 -21
  26. data/lib/dry/logic/result.rb +2 -0
  27. data/lib/dry/logic/rule.rb +5 -3
  28. data/lib/dry/logic/rule/interface.rb +3 -1
  29. data/lib/dry/logic/rule/predicate.rb +2 -0
  30. data/lib/dry/logic/rule_compiler.rb +2 -0
  31. data/lib/dry/logic/version.rb +3 -1
  32. metadata +11 -128
  33. data/.codeclimate.yml +0 -15
  34. data/.gitignore +0 -8
  35. data/.rspec +0 -3
  36. data/.travis.yml +0 -31
  37. data/CONTRIBUTING.md +0 -29
  38. data/Gemfile +0 -13
  39. data/Rakefile +0 -12
  40. data/benchmarks/rule_application.rb +0 -28
  41. data/benchmarks/setup.rb +0 -11
  42. data/bin/console +0 -10
  43. data/examples/basic.rb +0 -14
  44. data/spec/integration/result_spec.rb +0 -59
  45. data/spec/integration/rule_spec.rb +0 -53
  46. data/spec/shared/predicates.rb +0 -57
  47. data/spec/shared/rule.rb +0 -72
  48. data/spec/spec_helper.rb +0 -34
  49. data/spec/support/mutant.rb +0 -9
  50. data/spec/unit/operations/and_spec.rb +0 -68
  51. data/spec/unit/operations/attr_spec.rb +0 -27
  52. data/spec/unit/operations/check_spec.rb +0 -49
  53. data/spec/unit/operations/each_spec.rb +0 -47
  54. data/spec/unit/operations/implication_spec.rb +0 -30
  55. data/spec/unit/operations/key_spec.rb +0 -133
  56. data/spec/unit/operations/negation_spec.rb +0 -49
  57. data/spec/unit/operations/or_spec.rb +0 -73
  58. data/spec/unit/operations/set_spec.rb +0 -41
  59. data/spec/unit/operations/xor_spec.rb +0 -61
  60. data/spec/unit/predicates/array_spec.rb +0 -41
  61. data/spec/unit/predicates/attr_spec.rb +0 -29
  62. data/spec/unit/predicates/bool_spec.rb +0 -34
  63. data/spec/unit/predicates/case_spec.rb +0 -33
  64. data/spec/unit/predicates/date_spec.rb +0 -31
  65. data/spec/unit/predicates/date_time_spec.rb +0 -31
  66. data/spec/unit/predicates/decimal_spec.rb +0 -32
  67. data/spec/unit/predicates/empty_spec.rb +0 -38
  68. data/spec/unit/predicates/eql_spec.rb +0 -21
  69. data/spec/unit/predicates/even_spec.rb +0 -31
  70. data/spec/unit/predicates/excluded_from_spec.rb +0 -35
  71. data/spec/unit/predicates/excludes_spec.rb +0 -56
  72. data/spec/unit/predicates/false_spec.rb +0 -35
  73. data/spec/unit/predicates/filled_spec.rb +0 -38
  74. data/spec/unit/predicates/float_spec.rb +0 -31
  75. data/spec/unit/predicates/format_spec.rb +0 -21
  76. data/spec/unit/predicates/gt_spec.rb +0 -40
  77. data/spec/unit/predicates/gteq_spec.rb +0 -40
  78. data/spec/unit/predicates/included_in_spec.rb +0 -35
  79. data/spec/unit/predicates/includes_spec.rb +0 -24
  80. data/spec/unit/predicates/int_spec.rb +0 -34
  81. data/spec/unit/predicates/key_spec.rb +0 -29
  82. data/spec/unit/predicates/lt_spec.rb +0 -40
  83. data/spec/unit/predicates/lteq_spec.rb +0 -40
  84. data/spec/unit/predicates/max_size_spec.rb +0 -49
  85. data/spec/unit/predicates/min_size_spec.rb +0 -49
  86. data/spec/unit/predicates/none_spec.rb +0 -28
  87. data/spec/unit/predicates/not_eql_spec.rb +0 -21
  88. data/spec/unit/predicates/number_spec.rb +0 -37
  89. data/spec/unit/predicates/odd_spec.rb +0 -31
  90. data/spec/unit/predicates/size_spec.rb +0 -55
  91. data/spec/unit/predicates/str_spec.rb +0 -32
  92. data/spec/unit/predicates/time_spec.rb +0 -31
  93. data/spec/unit/predicates/true_spec.rb +0 -35
  94. data/spec/unit/predicates/type_spec.rb +0 -35
  95. data/spec/unit/predicates_spec.rb +0 -23
  96. data/spec/unit/rule/predicate_spec.rb +0 -53
  97. data/spec/unit/rule_compiler_spec.rb +0 -127
  98. data/spec/unit/rule_spec.rb +0 -211
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/logic/operations/abstract'
2
4
 
3
5
  module Dry
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/logic/operations/unary'
2
4
  require 'dry/logic/evaluator'
3
5
  require 'dry/logic/result'
@@ -15,7 +17,7 @@ module Dry
15
17
  keys = options.fetch(:keys)
16
18
  evaluator = Evaluator::Set.new(keys)
17
19
 
18
- super(rule, options.merge(evaluator: evaluator))
20
+ super(rule, **options, evaluator: evaluator)
19
21
  end
20
22
  end
21
23
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/logic/operations/unary'
2
4
  require 'dry/logic/result'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/logic/operations/binary'
2
4
  require 'dry/logic/result'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/logic/operations/unary'
2
4
  require 'dry/logic/evaluator'
3
5
  require 'dry/logic/result'
@@ -10,13 +12,13 @@ module Dry
10
12
 
11
13
  attr_reader :path
12
14
 
13
- def self.new(rules, options)
15
+ def self.new(rules, **options)
14
16
  if options[:evaluator]
15
17
  super
16
18
  else
17
19
  name = options.fetch(:name)
18
20
  eval = options.fetch(:evaluator, evaluator(name))
19
- super(rules, options.merge(evaluator: eval, path: name))
21
+ super(rules, **options, evaluator: eval, path: name)
20
22
  end
21
23
  end
22
24
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/logic/operations/unary'
2
4
  require 'dry/logic/result'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/logic/operations/binary'
2
4
  require 'dry/logic/result'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/logic/operations/abstract'
2
4
  require 'dry/logic/result'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/logic/operations/abstract'
2
4
 
3
5
  module Dry
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/logic/operations/binary'
2
4
  require 'dry/logic/result'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dry
2
4
  module Logic
3
5
  module Operators
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bigdecimal'
2
4
  require 'bigdecimal/util'
3
5
  require 'date'
@@ -57,11 +59,9 @@ module Dry
57
59
  end
58
60
 
59
61
  def number?(input)
60
- begin
61
- true if Float(input)
62
- rescue ArgumentError, TypeError
63
- false
64
- end
62
+ true if Float(input)
63
+ rescue ArgumentError, TypeError
64
+ false
65
65
  end
66
66
 
67
67
  def int?(input)
@@ -114,7 +114,7 @@ module Dry
114
114
 
115
115
  def size?(size, input)
116
116
  case size
117
- when Integer then size == input.size
117
+ when Integer then size.equal?(input.size)
118
118
  when Range, Array then size.include?(input.size)
119
119
  else
120
120
  raise ArgumentError, "+#{size}+ is not supported type for size? predicate."
@@ -129,6 +129,23 @@ module Dry
129
129
  input.size <= num
130
130
  end
131
131
 
132
+ def bytesize?(size, input)
133
+ case size
134
+ when Integer then size.equal?(input.bytesize)
135
+ when Range, Array then size.include?(input.bytesize)
136
+ else
137
+ raise ArgumentError, "+#{size}+ is not supported type for bytesize? predicate."
138
+ end
139
+ end
140
+
141
+ def min_bytesize?(num, input)
142
+ input.bytesize >= num
143
+ end
144
+
145
+ def max_bytesize?(num, input)
146
+ input.bytesize <= num
147
+ end
148
+
132
149
  def inclusion?(list, input)
133
150
  ::Kernel.warn 'inclusion is deprecated - use included_in instead.'
134
151
  included_in?(list, input)
@@ -148,15 +165,13 @@ module Dry
148
165
  end
149
166
 
150
167
  def includes?(value, input)
151
- begin
152
- if input.respond_to?(:include?)
153
- input.include?(value)
154
- else
155
- false
156
- end
157
- rescue TypeError
168
+ if input.respond_to?(:include?)
169
+ input.include?(value)
170
+ else
158
171
  false
159
172
  end
173
+ rescue TypeError
174
+ false
160
175
  end
161
176
 
162
177
  def excludes?(value, input)
@@ -183,20 +198,23 @@ module Dry
183
198
  value.equal?(false)
184
199
  end
185
200
 
186
- if RUBY_VERSION < '2.4'
187
- def format?(regex, input)
188
- !regex.match(input).nil?
189
- end
190
- else
191
- def format?(regex, input)
192
- regex.match?(input)
193
- end
201
+ def format?(regex, input)
202
+ !input.nil? && regex.match?(input)
194
203
  end
195
204
 
196
205
  def case?(pattern, input)
197
206
  pattern === input
198
207
  end
199
208
 
209
+ def uuid_v4?(input)
210
+ uuid_v4_format = /\A[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}\z/i
211
+ format?(uuid_v4_format, input)
212
+ end
213
+
214
+ def respond_to?(method, input)
215
+ input.respond_to?(method)
216
+ end
217
+
200
218
  def predicate(name, &block)
201
219
  define_singleton_method(name, &block)
202
220
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/core/constants'
2
4
 
3
5
  module Dry
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'concurrent/map'
2
4
  require 'dry/core/constants'
3
5
  require 'dry/equalizer'
@@ -66,11 +68,11 @@ module Dry
66
68
 
67
69
  def bind(object)
68
70
  if predicate.respond_to?(:bind)
69
- self.class.build(predicate.bind(object), options)
71
+ self.class.build(predicate.bind(object), **options)
70
72
  else
71
73
  self.class.build(
72
74
  -> *args { object.instance_exec(*args, &predicate) },
73
- options.merge(arity: arity, parameters: parameters)
75
+ **options, arity: arity, parameters: parameters
74
76
  )
75
77
  end
76
78
  end
@@ -80,7 +82,7 @@ module Dry
80
82
  end
81
83
 
82
84
  def with(new_opts)
83
- self.class.build(predicate, options.merge(new_opts))
85
+ self.class.build(predicate, **options, **new_opts)
84
86
  end
85
87
 
86
88
  def parameters
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dry
2
4
  module Logic
3
5
  class Rule
@@ -114,7 +116,7 @@ module Dry
114
116
 
115
117
  def define_fixed_application
116
118
  parameters = unapplied_args.join(', ')
117
- application = "@predicate[#{ (curried_args + unapplied_args).join(', ') }]"
119
+ application = "@predicate[#{(curried_args + unapplied_args).join(', ')}]"
118
120
 
119
121
  module_eval(<<~RUBY, __FILE__, __LINE__ + 1)
120
122
  def call(#{parameters})
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/logic/rule'
2
4
 
3
5
  module Dry
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/core/constants'
2
4
 
3
5
  require 'dry/logic/rule'
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dry
2
4
  module Logic
3
- VERSION = '0.6.1'.freeze
5
+ VERSION = '1.0.6'
4
6
  end
5
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-logic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-18 00:00:00.000000000 Z
11
+ date: 2020-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -94,28 +94,17 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description:
97
+ description: Predicate logic with rule composition
98
98
  email:
99
99
  - piotr.solnica@gmail.com
100
100
  executables: []
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
- - ".codeclimate.yml"
105
- - ".gitignore"
106
- - ".rspec"
107
- - ".travis.yml"
108
104
  - CHANGELOG.md
109
- - CONTRIBUTING.md
110
- - Gemfile
111
105
  - LICENSE
112
106
  - README.md
113
- - Rakefile
114
- - benchmarks/rule_application.rb
115
- - benchmarks/setup.rb
116
- - bin/console
117
107
  - dry-logic.gemspec
118
- - examples/basic.rb
119
108
  - lib/dry-logic.rb
120
109
  - lib/dry/logic.rb
121
110
  - lib/dry/logic/appliable.rb
@@ -142,65 +131,14 @@ files:
142
131
  - lib/dry/logic/rule/predicate.rb
143
132
  - lib/dry/logic/rule_compiler.rb
144
133
  - lib/dry/logic/version.rb
145
- - spec/integration/result_spec.rb
146
- - spec/integration/rule_spec.rb
147
- - spec/shared/predicates.rb
148
- - spec/shared/rule.rb
149
- - spec/spec_helper.rb
150
- - spec/support/mutant.rb
151
- - spec/unit/operations/and_spec.rb
152
- - spec/unit/operations/attr_spec.rb
153
- - spec/unit/operations/check_spec.rb
154
- - spec/unit/operations/each_spec.rb
155
- - spec/unit/operations/implication_spec.rb
156
- - spec/unit/operations/key_spec.rb
157
- - spec/unit/operations/negation_spec.rb
158
- - spec/unit/operations/or_spec.rb
159
- - spec/unit/operations/set_spec.rb
160
- - spec/unit/operations/xor_spec.rb
161
- - spec/unit/predicates/array_spec.rb
162
- - spec/unit/predicates/attr_spec.rb
163
- - spec/unit/predicates/bool_spec.rb
164
- - spec/unit/predicates/case_spec.rb
165
- - spec/unit/predicates/date_spec.rb
166
- - spec/unit/predicates/date_time_spec.rb
167
- - spec/unit/predicates/decimal_spec.rb
168
- - spec/unit/predicates/empty_spec.rb
169
- - spec/unit/predicates/eql_spec.rb
170
- - spec/unit/predicates/even_spec.rb
171
- - spec/unit/predicates/excluded_from_spec.rb
172
- - spec/unit/predicates/excludes_spec.rb
173
- - spec/unit/predicates/false_spec.rb
174
- - spec/unit/predicates/filled_spec.rb
175
- - spec/unit/predicates/float_spec.rb
176
- - spec/unit/predicates/format_spec.rb
177
- - spec/unit/predicates/gt_spec.rb
178
- - spec/unit/predicates/gteq_spec.rb
179
- - spec/unit/predicates/included_in_spec.rb
180
- - spec/unit/predicates/includes_spec.rb
181
- - spec/unit/predicates/int_spec.rb
182
- - spec/unit/predicates/key_spec.rb
183
- - spec/unit/predicates/lt_spec.rb
184
- - spec/unit/predicates/lteq_spec.rb
185
- - spec/unit/predicates/max_size_spec.rb
186
- - spec/unit/predicates/min_size_spec.rb
187
- - spec/unit/predicates/none_spec.rb
188
- - spec/unit/predicates/not_eql_spec.rb
189
- - spec/unit/predicates/number_spec.rb
190
- - spec/unit/predicates/odd_spec.rb
191
- - spec/unit/predicates/size_spec.rb
192
- - spec/unit/predicates/str_spec.rb
193
- - spec/unit/predicates/time_spec.rb
194
- - spec/unit/predicates/true_spec.rb
195
- - spec/unit/predicates/type_spec.rb
196
- - spec/unit/predicates_spec.rb
197
- - spec/unit/rule/predicate_spec.rb
198
- - spec/unit/rule_compiler_spec.rb
199
- - spec/unit/rule_spec.rb
200
- homepage: https://github.com/dry-rb/dry-logic
134
+ homepage: https://dry-rb.org/gems/dry-logic
201
135
  licenses:
202
136
  - MIT
203
- metadata: {}
137
+ metadata:
138
+ allowed_push_host: https://rubygems.org
139
+ changelog_uri: https://github.com/dry-rb/dry-logic/blob/master/CHANGELOG.md
140
+ source_code_uri: https://github.com/dry-rb/dry-logic
141
+ bug_tracker_uri: https://github.com/dry-rb/dry-logic/issues
204
142
  post_install_message:
205
143
  rdoc_options: []
206
144
  require_paths:
@@ -209,7 +147,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
147
  requirements:
210
148
  - - ">="
211
149
  - !ruby/object:Gem::Version
212
- version: '0'
150
+ version: 2.4.0
213
151
  required_rubygems_version: !ruby/object:Gem::Requirement
214
152
  requirements:
215
153
  - - ">="
@@ -220,59 +158,4 @@ rubygems_version: 3.0.3
220
158
  signing_key:
221
159
  specification_version: 4
222
160
  summary: Predicate logic with rule composition
223
- test_files:
224
- - spec/integration/result_spec.rb
225
- - spec/integration/rule_spec.rb
226
- - spec/shared/predicates.rb
227
- - spec/shared/rule.rb
228
- - spec/spec_helper.rb
229
- - spec/support/mutant.rb
230
- - spec/unit/operations/and_spec.rb
231
- - spec/unit/operations/attr_spec.rb
232
- - spec/unit/operations/check_spec.rb
233
- - spec/unit/operations/each_spec.rb
234
- - spec/unit/operations/implication_spec.rb
235
- - spec/unit/operations/key_spec.rb
236
- - spec/unit/operations/negation_spec.rb
237
- - spec/unit/operations/or_spec.rb
238
- - spec/unit/operations/set_spec.rb
239
- - spec/unit/operations/xor_spec.rb
240
- - spec/unit/predicates/array_spec.rb
241
- - spec/unit/predicates/attr_spec.rb
242
- - spec/unit/predicates/bool_spec.rb
243
- - spec/unit/predicates/case_spec.rb
244
- - spec/unit/predicates/date_spec.rb
245
- - spec/unit/predicates/date_time_spec.rb
246
- - spec/unit/predicates/decimal_spec.rb
247
- - spec/unit/predicates/empty_spec.rb
248
- - spec/unit/predicates/eql_spec.rb
249
- - spec/unit/predicates/even_spec.rb
250
- - spec/unit/predicates/excluded_from_spec.rb
251
- - spec/unit/predicates/excludes_spec.rb
252
- - spec/unit/predicates/false_spec.rb
253
- - spec/unit/predicates/filled_spec.rb
254
- - spec/unit/predicates/float_spec.rb
255
- - spec/unit/predicates/format_spec.rb
256
- - spec/unit/predicates/gt_spec.rb
257
- - spec/unit/predicates/gteq_spec.rb
258
- - spec/unit/predicates/included_in_spec.rb
259
- - spec/unit/predicates/includes_spec.rb
260
- - spec/unit/predicates/int_spec.rb
261
- - spec/unit/predicates/key_spec.rb
262
- - spec/unit/predicates/lt_spec.rb
263
- - spec/unit/predicates/lteq_spec.rb
264
- - spec/unit/predicates/max_size_spec.rb
265
- - spec/unit/predicates/min_size_spec.rb
266
- - spec/unit/predicates/none_spec.rb
267
- - spec/unit/predicates/not_eql_spec.rb
268
- - spec/unit/predicates/number_spec.rb
269
- - spec/unit/predicates/odd_spec.rb
270
- - spec/unit/predicates/size_spec.rb
271
- - spec/unit/predicates/str_spec.rb
272
- - spec/unit/predicates/time_spec.rb
273
- - spec/unit/predicates/true_spec.rb
274
- - spec/unit/predicates/type_spec.rb
275
- - spec/unit/predicates_spec.rb
276
- - spec/unit/rule/predicate_spec.rb
277
- - spec/unit/rule_compiler_spec.rb
278
- - spec/unit/rule_spec.rb
161
+ test_files: []