dry-logic 1.0.3 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +115 -32
  3. data/LICENSE +1 -1
  4. data/README.md +12 -14
  5. data/dry-logic.gemspec +27 -15
  6. data/lib/dry-logic.rb +1 -1
  7. data/lib/dry/logic.rb +2 -2
  8. data/lib/dry/logic/evaluator.rb +1 -1
  9. data/lib/dry/logic/operations.rb +11 -11
  10. data/lib/dry/logic/operations/abstract.rb +6 -6
  11. data/lib/dry/logic/operations/and.rb +4 -4
  12. data/lib/dry/logic/operations/attr.rb +1 -1
  13. data/lib/dry/logic/operations/binary.rb +1 -1
  14. data/lib/dry/logic/operations/check.rb +4 -4
  15. data/lib/dry/logic/operations/each.rb +2 -2
  16. data/lib/dry/logic/operations/implication.rb +2 -2
  17. data/lib/dry/logic/operations/key.rb +5 -5
  18. data/lib/dry/logic/operations/negation.rb +2 -2
  19. data/lib/dry/logic/operations/or.rb +2 -2
  20. data/lib/dry/logic/operations/set.rb +3 -3
  21. data/lib/dry/logic/operations/unary.rb +1 -1
  22. data/lib/dry/logic/operations/xor.rb +2 -2
  23. data/lib/dry/logic/operators.rb +4 -4
  24. data/lib/dry/logic/predicates.rb +33 -8
  25. data/lib/dry/logic/result.rb +2 -2
  26. data/lib/dry/logic/rule.rb +11 -11
  27. data/lib/dry/logic/rule/interface.rb +32 -37
  28. data/lib/dry/logic/rule/predicate.rb +3 -3
  29. data/lib/dry/logic/rule_compiler.rb +3 -3
  30. data/lib/dry/logic/version.rb +1 -1
  31. metadata +10 -139
  32. data/.codeclimate.yml +0 -15
  33. data/.gitignore +0 -9
  34. data/.rspec +0 -3
  35. data/.travis.yml +0 -31
  36. data/CONTRIBUTING.md +0 -29
  37. data/Gemfile +0 -15
  38. data/Rakefile +0 -14
  39. data/benchmarks/rule_application.rb +0 -30
  40. data/benchmarks/setup.rb +0 -13
  41. data/bin/console +0 -11
  42. data/examples/basic.rb +0 -16
  43. data/spec/integration/result_spec.rb +0 -61
  44. data/spec/integration/rule_spec.rb +0 -55
  45. data/spec/shared/predicates.rb +0 -59
  46. data/spec/shared/rule.rb +0 -74
  47. data/spec/spec_helper.rb +0 -36
  48. data/spec/support/mutant.rb +0 -11
  49. data/spec/unit/operations/and_spec.rb +0 -70
  50. data/spec/unit/operations/attr_spec.rb +0 -29
  51. data/spec/unit/operations/check_spec.rb +0 -51
  52. data/spec/unit/operations/each_spec.rb +0 -49
  53. data/spec/unit/operations/implication_spec.rb +0 -32
  54. data/spec/unit/operations/key_spec.rb +0 -135
  55. data/spec/unit/operations/negation_spec.rb +0 -51
  56. data/spec/unit/operations/or_spec.rb +0 -75
  57. data/spec/unit/operations/set_spec.rb +0 -43
  58. data/spec/unit/operations/xor_spec.rb +0 -63
  59. data/spec/unit/predicates/array_spec.rb +0 -43
  60. data/spec/unit/predicates/attr_spec.rb +0 -31
  61. data/spec/unit/predicates/bool_spec.rb +0 -36
  62. data/spec/unit/predicates/bytesize_spec.rb +0 -48
  63. data/spec/unit/predicates/case_spec.rb +0 -35
  64. data/spec/unit/predicates/date_spec.rb +0 -33
  65. data/spec/unit/predicates/date_time_spec.rb +0 -33
  66. data/spec/unit/predicates/decimal_spec.rb +0 -34
  67. data/spec/unit/predicates/empty_spec.rb +0 -40
  68. data/spec/unit/predicates/eql_spec.rb +0 -23
  69. data/spec/unit/predicates/even_spec.rb +0 -33
  70. data/spec/unit/predicates/excluded_from_spec.rb +0 -37
  71. data/spec/unit/predicates/excludes_spec.rb +0 -58
  72. data/spec/unit/predicates/false_spec.rb +0 -37
  73. data/spec/unit/predicates/filled_spec.rb +0 -40
  74. data/spec/unit/predicates/float_spec.rb +0 -33
  75. data/spec/unit/predicates/format_spec.rb +0 -23
  76. data/spec/unit/predicates/gt_spec.rb +0 -42
  77. data/spec/unit/predicates/gteq_spec.rb +0 -42
  78. data/spec/unit/predicates/hash_spec.rb +0 -40
  79. data/spec/unit/predicates/included_in_spec.rb +0 -37
  80. data/spec/unit/predicates/includes_spec.rb +0 -24
  81. data/spec/unit/predicates/int_spec.rb +0 -36
  82. data/spec/unit/predicates/key_spec.rb +0 -31
  83. data/spec/unit/predicates/lt_spec.rb +0 -42
  84. data/spec/unit/predicates/lteq_spec.rb +0 -42
  85. data/spec/unit/predicates/max_bytesize_spec.rb +0 -39
  86. data/spec/unit/predicates/max_size_spec.rb +0 -51
  87. data/spec/unit/predicates/min_bytesize_spec.rb +0 -39
  88. data/spec/unit/predicates/min_size_spec.rb +0 -51
  89. data/spec/unit/predicates/none_spec.rb +0 -30
  90. data/spec/unit/predicates/not_eql_spec.rb +0 -23
  91. data/spec/unit/predicates/number_spec.rb +0 -39
  92. data/spec/unit/predicates/odd_spec.rb +0 -33
  93. data/spec/unit/predicates/respond_to_spec.rb +0 -31
  94. data/spec/unit/predicates/size_spec.rb +0 -57
  95. data/spec/unit/predicates/str_spec.rb +0 -34
  96. data/spec/unit/predicates/time_spec.rb +0 -33
  97. data/spec/unit/predicates/true_spec.rb +0 -37
  98. data/spec/unit/predicates/type_spec.rb +0 -37
  99. data/spec/unit/predicates/uuid_v4_spec.rb +0 -29
  100. data/spec/unit/predicates_spec.rb +0 -25
  101. data/spec/unit/rule/predicate_spec.rb +0 -55
  102. data/spec/unit/rule_compiler_spec.rb +0 -129
  103. data/spec/unit/rule_spec.rb +0 -213
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/logic/rule'
3
+ require "dry/logic/rule"
4
4
 
5
5
  module Dry
6
6
  module Logic
@@ -19,9 +19,9 @@ module Dry
19
19
 
20
20
  def to_s
21
21
  if args.size > 0
22
- "#{name}(#{args.map(&:inspect).join(', ')})"
22
+ "#{name}(#{args.map(&:inspect).join(", ")})"
23
23
  else
24
- "#{name}"
24
+ name.to_s
25
25
  end
26
26
  end
27
27
 
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/core/constants'
3
+ require "dry/core/constants"
4
4
 
5
- require 'dry/logic/rule'
6
- require 'dry/logic/rule/predicate'
5
+ require "dry/logic/rule"
6
+ require "dry/logic/rule/predicate"
7
7
 
8
8
  module Dry
9
9
  module Logic
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module Logic
5
- VERSION = '1.0.3'.freeze
5
+ VERSION = "1.0.8"
6
6
  end
7
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: 1.0.3
4
+ version: 1.0.8
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-08-01 00:00:00.000000000 Z
11
+ date: 2020-09-28 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,71 +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/bytesize_spec.rb
165
- - spec/unit/predicates/case_spec.rb
166
- - spec/unit/predicates/date_spec.rb
167
- - spec/unit/predicates/date_time_spec.rb
168
- - spec/unit/predicates/decimal_spec.rb
169
- - spec/unit/predicates/empty_spec.rb
170
- - spec/unit/predicates/eql_spec.rb
171
- - spec/unit/predicates/even_spec.rb
172
- - spec/unit/predicates/excluded_from_spec.rb
173
- - spec/unit/predicates/excludes_spec.rb
174
- - spec/unit/predicates/false_spec.rb
175
- - spec/unit/predicates/filled_spec.rb
176
- - spec/unit/predicates/float_spec.rb
177
- - spec/unit/predicates/format_spec.rb
178
- - spec/unit/predicates/gt_spec.rb
179
- - spec/unit/predicates/gteq_spec.rb
180
- - spec/unit/predicates/hash_spec.rb
181
- - spec/unit/predicates/included_in_spec.rb
182
- - spec/unit/predicates/includes_spec.rb
183
- - spec/unit/predicates/int_spec.rb
184
- - spec/unit/predicates/key_spec.rb
185
- - spec/unit/predicates/lt_spec.rb
186
- - spec/unit/predicates/lteq_spec.rb
187
- - spec/unit/predicates/max_bytesize_spec.rb
188
- - spec/unit/predicates/max_size_spec.rb
189
- - spec/unit/predicates/min_bytesize_spec.rb
190
- - spec/unit/predicates/min_size_spec.rb
191
- - spec/unit/predicates/none_spec.rb
192
- - spec/unit/predicates/not_eql_spec.rb
193
- - spec/unit/predicates/number_spec.rb
194
- - spec/unit/predicates/odd_spec.rb
195
- - spec/unit/predicates/respond_to_spec.rb
196
- - spec/unit/predicates/size_spec.rb
197
- - spec/unit/predicates/str_spec.rb
198
- - spec/unit/predicates/time_spec.rb
199
- - spec/unit/predicates/true_spec.rb
200
- - spec/unit/predicates/type_spec.rb
201
- - spec/unit/predicates/uuid_v4_spec.rb
202
- - spec/unit/predicates_spec.rb
203
- - spec/unit/rule/predicate_spec.rb
204
- - spec/unit/rule_compiler_spec.rb
205
- - spec/unit/rule_spec.rb
206
- homepage: https://github.com/dry-rb/dry-logic
134
+ homepage: https://dry-rb.org/gems/dry-logic
207
135
  licenses:
208
136
  - MIT
209
- 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
210
142
  post_install_message:
211
143
  rdoc_options: []
212
144
  require_paths:
@@ -226,65 +158,4 @@ rubygems_version: 3.0.3
226
158
  signing_key:
227
159
  specification_version: 4
228
160
  summary: Predicate logic with rule composition
229
- test_files:
230
- - spec/integration/result_spec.rb
231
- - spec/integration/rule_spec.rb
232
- - spec/shared/predicates.rb
233
- - spec/shared/rule.rb
234
- - spec/spec_helper.rb
235
- - spec/support/mutant.rb
236
- - spec/unit/operations/and_spec.rb
237
- - spec/unit/operations/attr_spec.rb
238
- - spec/unit/operations/check_spec.rb
239
- - spec/unit/operations/each_spec.rb
240
- - spec/unit/operations/implication_spec.rb
241
- - spec/unit/operations/key_spec.rb
242
- - spec/unit/operations/negation_spec.rb
243
- - spec/unit/operations/or_spec.rb
244
- - spec/unit/operations/set_spec.rb
245
- - spec/unit/operations/xor_spec.rb
246
- - spec/unit/predicates/array_spec.rb
247
- - spec/unit/predicates/attr_spec.rb
248
- - spec/unit/predicates/bool_spec.rb
249
- - spec/unit/predicates/bytesize_spec.rb
250
- - spec/unit/predicates/case_spec.rb
251
- - spec/unit/predicates/date_spec.rb
252
- - spec/unit/predicates/date_time_spec.rb
253
- - spec/unit/predicates/decimal_spec.rb
254
- - spec/unit/predicates/empty_spec.rb
255
- - spec/unit/predicates/eql_spec.rb
256
- - spec/unit/predicates/even_spec.rb
257
- - spec/unit/predicates/excluded_from_spec.rb
258
- - spec/unit/predicates/excludes_spec.rb
259
- - spec/unit/predicates/false_spec.rb
260
- - spec/unit/predicates/filled_spec.rb
261
- - spec/unit/predicates/float_spec.rb
262
- - spec/unit/predicates/format_spec.rb
263
- - spec/unit/predicates/gt_spec.rb
264
- - spec/unit/predicates/gteq_spec.rb
265
- - spec/unit/predicates/hash_spec.rb
266
- - spec/unit/predicates/included_in_spec.rb
267
- - spec/unit/predicates/includes_spec.rb
268
- - spec/unit/predicates/int_spec.rb
269
- - spec/unit/predicates/key_spec.rb
270
- - spec/unit/predicates/lt_spec.rb
271
- - spec/unit/predicates/lteq_spec.rb
272
- - spec/unit/predicates/max_bytesize_spec.rb
273
- - spec/unit/predicates/max_size_spec.rb
274
- - spec/unit/predicates/min_bytesize_spec.rb
275
- - spec/unit/predicates/min_size_spec.rb
276
- - spec/unit/predicates/none_spec.rb
277
- - spec/unit/predicates/not_eql_spec.rb
278
- - spec/unit/predicates/number_spec.rb
279
- - spec/unit/predicates/odd_spec.rb
280
- - spec/unit/predicates/respond_to_spec.rb
281
- - spec/unit/predicates/size_spec.rb
282
- - spec/unit/predicates/str_spec.rb
283
- - spec/unit/predicates/time_spec.rb
284
- - spec/unit/predicates/true_spec.rb
285
- - spec/unit/predicates/type_spec.rb
286
- - spec/unit/predicates/uuid_v4_spec.rb
287
- - spec/unit/predicates_spec.rb
288
- - spec/unit/rule/predicate_spec.rb
289
- - spec/unit/rule_compiler_spec.rb
290
- - spec/unit/rule_spec.rb
161
+ test_files: []
@@ -1,15 +0,0 @@
1
- version: "2"
2
-
3
- prepare:
4
- fetch:
5
- - url: "https://raw.githubusercontent.com/dry-rb/devtools/master/.rubocop.yml"
6
- path: ".rubocop.yml"
7
-
8
- exclude_patterns:
9
- - "benchmarks/"
10
- - "examples/"
11
- - "spec/"
12
-
13
- plugins:
14
- rubocop:
15
- enabled: true
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- .DS_Store
2
- coverage
3
- /.bundle
4
- vendor/bundle
5
- tmp/
6
- pkg/
7
- .idea/
8
- Gemfile.lock
9
- .rubocop.yml
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --color
2
- --require spec_helper
3
- --order random
@@ -1,31 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- bundler_args: --without benchmarks tools
4
- before_script:
5
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
6
- - chmod +x ./cc-test-reporter
7
- - ./cc-test-reporter before-build
8
- after_script:
9
- - "[ -d coverage ] && ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
10
- script:
11
- - bundle exec rake
12
- rvm:
13
- - 2.6.3
14
- - 2.5.5
15
- - 2.4.6
16
- - jruby-9.2.7.0
17
- - truffleruby
18
- env:
19
- global:
20
- - COVERAGE=true
21
- matrix:
22
- allow_failures:
23
- - rvm: truffleruby
24
- notifications:
25
- email: false
26
- webhooks:
27
- urls:
28
- - https://dry-rb.zulipchat.com/api/v1/external/travis?api_key=SY8LLz6fShd4TJeLDXEdT0eBEgRqT2lv&stream=notifications&topic=ci
29
- on_success: change # options: [always|never|change] default: always
30
- on_failure: always # options: [always|never|change] default: always
31
- on_start: false # default: false
@@ -1,29 +0,0 @@
1
- # Issue Guidelines
2
-
3
- ## Reporting bugs
4
-
5
- If you found a bug, report an issue and describe what's the expected behavior versus what actually happens. If the bug causes a crash, attach a full backtrace. If possible, a reproduction script showing the problem is highly appreciated.
6
-
7
- ## Reporting feature requests
8
-
9
- Report a feature request **only after discussing it first on [discourse.dry-rb.org](https://discourse.dry-rb.org)** where it was accepted. Please provide a concise description of the feature, don't link to a discussion thread, and instead summarize what was discussed.
10
-
11
- ## Reporting questions, support requests, ideas, concerns etc.
12
-
13
- **PLEASE DON'T** - use [discourse.dry-rb.org](https://discourse.dry-rb.org) instead.
14
-
15
- # Pull Request Guidelines
16
-
17
- A Pull Request will only be accepted if it addresses a specific issue that was reported previously, or fixes typos, mistakes in documentation etc.
18
-
19
- Other requirements:
20
-
21
- 1) Do not open a pull request if you can't provide tests along with it. If you have problems writing tests, ask for help in the related issue.
22
- 2) Follow the style conventions of the surrounding code. In most cases, this is standard ruby style.
23
- 3) Add API documentation if it's a new feature
24
- 4) Update API documentation if it changes an existing feature
25
- 5) Bonus points for sending a PR to [github.com/dry-rb/dry-rb.org](github.com/dry-rb/dry-rb.org) which updates user documentation and guides
26
-
27
- # Asking for help
28
-
29
- If these guidelines aren't helpful, and you're stuck, please post a message on [discourse.dry-rb.org](https://discourse.dry-rb.org).
data/Gemfile DELETED
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gemspec
6
-
7
- group :test do
8
- gem 'simplecov', require: false, platform: :mri
9
- end
10
-
11
- group :tools do
12
- gem 'pry-byebug', platform: :mri
13
- gem 'benchmark-ips', platform: :mri
14
- gem 'hotch', platform: :mri
15
- end
data/Rakefile DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env rake
2
- # frozen_string_literal: true
3
-
4
- require 'bundler/gem_tasks'
5
-
6
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
7
-
8
- require 'rspec/core'
9
- require 'rspec/core/rake_task'
10
-
11
- task default: :spec
12
-
13
- desc 'Run all specs in spec directory'
14
- RSpec::Core::RakeTask.new(:spec)
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'setup'
4
-
5
- unless Dry::Logic::Rule.respond_to?(:build)
6
- Dry::Logic::Rule.singleton_class.alias_method(:build, :new)
7
- end
8
-
9
- predicates = Dry::Logic::Predicates
10
-
11
- type_check = Dry::Logic::Rule.build(predicates[:type?]).curry(Integer)
12
- int_check = Dry::Logic::Rule.build(predicates[:int?])
13
- key_check = Dry::Logic::Rule.build(predicates[:key?]).curry(:user)
14
- with_user = { user: {} }
15
- without_user = {}
16
-
17
- comparison = Dry::Logic::Rule.build(predicates[:gteq?]).curry(18)
18
-
19
- Benchmark.ips do |x|
20
- x.report("type check - success") { type_check.(0) }
21
- x.report("type check - failure") { type_check.('0') }
22
- x.report("int check - success") { int_check.(0) }
23
- x.report("int check - failure") { int_check.('0') }
24
- x.report("key check - success") { key_check.(with_user) }
25
- x.report("key check - failure") { key_check.(without_user) }
26
- x.report("comparison - success") { comparison.(20) }
27
- x.report("comparison - failure") { comparison.(17) }
28
-
29
- x.compare!
30
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'benchmark/ips'
4
- require 'hotch'
5
- ENV['HOTCH_VIEWER'] ||= 'open'
6
-
7
- require 'dry/logic'
8
- require 'dry/logic/predicates'
9
-
10
- def profile(&block)
11
- Hotch(filter: 'Dry', &block)
12
- end
13
-
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require "bundler/setup"
5
- require 'dry/logic'
6
- require 'dry/logic/predicates'
7
-
8
- include Dry::Logic
9
-
10
- require "irb"
11
- IRB.start
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic'
4
- require 'dry/logic/predicates'
5
-
6
- include Dry::Logic
7
-
8
- user_present = Rule::Predicate.build(Predicates[:key?]).curry(:user)
9
-
10
- has_min_age = Operations::Key.new(Rule::Predicate.build(Predicates[:gt?]).curry(18), name: [:user, :age])
11
-
12
- user_rule = user_present & has_min_age
13
-
14
- puts user_rule.(user: { age: 19 }).success?
15
-
16
- puts user_rule.(user: { age: 18 }).success?
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Result do
4
- include_context 'predicates'
5
-
6
- describe '#to_s' do
7
- shared_examples_for 'string representation' do
8
- it 'returns string representation' do
9
- expect(rule.(input).to_s).to eql(output)
10
- end
11
- end
12
-
13
- context 'with a predicate' do
14
- let(:rule) { Rule::Predicate.build(gt?, args: [18]) }
15
- let(:input) { 17 }
16
- let(:output) { 'gt?(18, 17)' }
17
-
18
- it_behaves_like 'string representation'
19
- end
20
-
21
- context 'with AND operation' do
22
- let(:rule) { Rule::Predicate.build(array?).and(Rule::Predicate.build(empty?)) }
23
- let(:input) { '' }
24
- let(:output) { 'array?("") AND empty?("")' }
25
-
26
- it_behaves_like 'string representation'
27
- end
28
-
29
- context 'with OR operation' do
30
- let(:rule) { Rule::Predicate.build(array?).or(Rule::Predicate.build(empty?)) }
31
- let(:input) { 123 }
32
- let(:output) { 'array?(123) OR empty?(123)' }
33
-
34
- it_behaves_like 'string representation'
35
- end
36
-
37
- context 'with XOR operation' do
38
- let(:rule) { Rule::Predicate.build(array?).xor(Rule::Predicate.build(empty?)) }
39
- let(:input) { [] }
40
- let(:output) { 'array?([]) XOR empty?([])' }
41
-
42
- it_behaves_like 'string representation'
43
- end
44
-
45
- context 'with THEN operation' do
46
- let(:rule) { Rule::Predicate.build(array?).then(Rule::Predicate.build(empty?)) }
47
- let(:input) { [1, 2, 3] }
48
- let(:output) { 'empty?([1, 2, 3])' }
49
-
50
- it_behaves_like 'string representation'
51
- end
52
-
53
- context 'with NOT operation' do
54
- let(:rule) { Operations::Negation.new(Rule::Predicate.build(array?)) }
55
- let(:input) { 'foo' }
56
- let(:output) { 'not(array?("foo"))' }
57
-
58
- it_behaves_like 'string representation'
59
- end
60
- end
61
- end