dry-logic 1.0.2 → 1.0.8

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 (99) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +129 -26
  3. data/LICENSE +1 -1
  4. data/README.md +12 -14
  5. data/dry-logic.gemspec +27 -14
  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 +60 -28
  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 +12 -133
  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/case_spec.rb +0 -35
  63. data/spec/unit/predicates/date_spec.rb +0 -33
  64. data/spec/unit/predicates/date_time_spec.rb +0 -33
  65. data/spec/unit/predicates/decimal_spec.rb +0 -34
  66. data/spec/unit/predicates/empty_spec.rb +0 -40
  67. data/spec/unit/predicates/eql_spec.rb +0 -23
  68. data/spec/unit/predicates/even_spec.rb +0 -33
  69. data/spec/unit/predicates/excluded_from_spec.rb +0 -37
  70. data/spec/unit/predicates/excludes_spec.rb +0 -58
  71. data/spec/unit/predicates/false_spec.rb +0 -37
  72. data/spec/unit/predicates/filled_spec.rb +0 -40
  73. data/spec/unit/predicates/float_spec.rb +0 -33
  74. data/spec/unit/predicates/format_spec.rb +0 -23
  75. data/spec/unit/predicates/gt_spec.rb +0 -42
  76. data/spec/unit/predicates/gteq_spec.rb +0 -42
  77. data/spec/unit/predicates/included_in_spec.rb +0 -37
  78. data/spec/unit/predicates/includes_spec.rb +0 -24
  79. data/spec/unit/predicates/int_spec.rb +0 -36
  80. data/spec/unit/predicates/key_spec.rb +0 -31
  81. data/spec/unit/predicates/lt_spec.rb +0 -42
  82. data/spec/unit/predicates/lteq_spec.rb +0 -42
  83. data/spec/unit/predicates/max_size_spec.rb +0 -51
  84. data/spec/unit/predicates/min_size_spec.rb +0 -51
  85. data/spec/unit/predicates/none_spec.rb +0 -30
  86. data/spec/unit/predicates/not_eql_spec.rb +0 -23
  87. data/spec/unit/predicates/number_spec.rb +0 -39
  88. data/spec/unit/predicates/odd_spec.rb +0 -33
  89. data/spec/unit/predicates/respond_to_spec.rb +0 -31
  90. data/spec/unit/predicates/size_spec.rb +0 -57
  91. data/spec/unit/predicates/str_spec.rb +0 -34
  92. data/spec/unit/predicates/time_spec.rb +0 -33
  93. data/spec/unit/predicates/true_spec.rb +0 -37
  94. data/spec/unit/predicates/type_spec.rb +0 -37
  95. data/spec/unit/predicates/uuid_v4_spec.rb +0 -29
  96. data/spec/unit/predicates_spec.rb +0 -25
  97. data/spec/unit/rule/predicate_spec.rb +0 -55
  98. data/spec/unit/rule_compiler_spec.rb +0 -129
  99. data/spec/unit/rule_spec.rb +0 -213
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic/predicates'
4
-
5
- RSpec.describe Dry::Logic::Predicates do
6
- describe '#float?' do
7
- let(:predicate_name) { :float? }
8
-
9
- context 'when value is a float' do
10
- let(:arguments_list) do
11
- [[1.0]]
12
- end
13
-
14
- it_behaves_like 'a passing predicate'
15
- end
16
-
17
- context 'with value is not an integer' do
18
- let(:arguments_list) do
19
- [
20
- [''],
21
- [[]],
22
- [{}],
23
- [nil],
24
- [:symbol],
25
- [String],
26
- [1]
27
- ]
28
- end
29
-
30
- it_behaves_like 'a failing predicate'
31
- end
32
- end
33
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic/predicates'
4
-
5
- RSpec.describe Dry::Logic::Predicates, '#format?' do
6
- let(:predicate_name) { :format? }
7
-
8
- context 'when value matches provided regexp' do
9
- let(:arguments_list) do
10
- [['Foo', /^F/]]
11
- end
12
-
13
- it_behaves_like 'a passing predicate'
14
- end
15
-
16
- context 'when value does not match provided regexp' do
17
- let(:arguments_list) do
18
- [['Bar', /^F/]]
19
- end
20
-
21
- it_behaves_like 'a failing predicate'
22
- end
23
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic/predicates'
4
-
5
- RSpec.describe Dry::Logic::Predicates do
6
- describe '#gt?' do
7
- let(:predicate_name) { :gt? }
8
-
9
- context 'when value is greater than n' do
10
- let(:arguments_list) do
11
- [
12
- [13, 14],
13
- [13.37, 13.38]
14
- ]
15
- end
16
-
17
- it_behaves_like 'a passing predicate'
18
- end
19
-
20
- context 'when value is equal to n' do
21
- let(:arguments_list) do
22
- [
23
- [13, 13],
24
- [13.37, 13.37]
25
- ]
26
- end
27
-
28
- it_behaves_like 'a failing predicate'
29
- end
30
-
31
- context 'with value is less than n' do
32
- let(:arguments_list) do
33
- [
34
- [13, 12],
35
- [13.37, 13.36]
36
- ]
37
- end
38
-
39
- it_behaves_like 'a failing predicate'
40
- end
41
- end
42
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic/predicates'
4
-
5
- RSpec.describe Dry::Logic::Predicates do
6
- describe '#gteq?' do
7
- let(:predicate_name) { :gteq? }
8
-
9
- context 'when value is greater than n' do
10
- let(:arguments_list) do
11
- [
12
- [13, 14],
13
- [13.37, 13.38]
14
- ]
15
- end
16
-
17
- it_behaves_like 'a passing predicate'
18
- end
19
-
20
- context 'when value is equal to n' do
21
- let(:arguments_list) do
22
- [
23
- [13, 13],
24
- [13.37, 13.37]
25
- ]
26
- end
27
-
28
- it_behaves_like 'a passing predicate'
29
- end
30
-
31
- context 'with value is less than n' do
32
- let(:arguments_list) do
33
- [
34
- [13, 12],
35
- [13.37, 13.36]
36
- ]
37
- end
38
-
39
- it_behaves_like 'a failing predicate'
40
- end
41
- end
42
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic/predicates'
4
-
5
- RSpec.describe Dry::Logic::Predicates do
6
- describe '#included_in?' do
7
- let(:predicate_name) { :included_in? }
8
-
9
- context 'when value is present in list' do
10
- let(:arguments_list) do
11
- [
12
- [['Jill', 'John'], 'Jill'],
13
- [['Jill', 'John'], 'John'],
14
- [1..2, 1],
15
- [1..2, 2],
16
- [[nil, false], nil],
17
- [[nil, false], false]
18
- ]
19
- end
20
-
21
- it_behaves_like 'a passing predicate'
22
- end
23
-
24
- context 'with value is not present in list' do
25
- let(:arguments_list) do
26
- [
27
- [['Jill', 'John'], 'Jack'],
28
- [1..2, 0],
29
- [1..2, 3],
30
- [[nil, false], true]
31
- ]
32
- end
33
-
34
- it_behaves_like 'a failing predicate'
35
- end
36
- end
37
- end
@@ -1,24 +0,0 @@
1
- require 'dry/logic/predicates'
2
-
3
- RSpec.describe Dry::Logic::Predicates, '#is?' do
4
- let(:predicate_name) { :is? }
5
- let(:one) { Object.new }
6
- let(:two) { Object.new }
7
-
8
- context 'when value is equal to the arg' do
9
- let(:arguments_list) do
10
- [[one, one], [:one, :one]]
11
- end
12
-
13
- it_behaves_like 'a passing predicate'
14
- end
15
-
16
- context 'with value is not equal to the arg' do
17
- let(:arguments_list) do
18
- # Strings are not equal. Yet
19
- [[one, two], ['one', 'one']]
20
- end
21
-
22
- it_behaves_like 'a failing predicate'
23
- end
24
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic/predicates'
4
-
5
- RSpec.describe Dry::Logic::Predicates do
6
- describe '#int?' do
7
- let(:predicate_name) { :int? }
8
-
9
- context 'when value is an integer' do
10
- let(:arguments_list) do
11
- [
12
- [1],
13
- [33],
14
- [7]
15
- ]
16
- end
17
-
18
- it_behaves_like 'a passing predicate'
19
- end
20
-
21
- context 'with value is not an integer' do
22
- let(:arguments_list) do
23
- [
24
- [''],
25
- [[]],
26
- [{}],
27
- [nil],
28
- [:symbol],
29
- [String]
30
- ]
31
- end
32
-
33
- it_behaves_like 'a failing predicate'
34
- end
35
- end
36
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic/predicates'
4
-
5
- RSpec.describe Dry::Logic::Predicates do
6
- describe '#key?' do
7
- let(:predicate_name) { :key? }
8
-
9
- context 'when key is present in value' do
10
- let(:arguments_list) do
11
- [
12
- [:name, { name: 'John' }],
13
- [:age, { age: 18 }]
14
- ]
15
- end
16
-
17
- it_behaves_like 'a passing predicate'
18
- end
19
-
20
- context 'with key is not present in value' do
21
- let(:arguments_list) do
22
- [
23
- [:name, { age: 18 }],
24
- [:age, { name: 'Jill' }]
25
- ]
26
- end
27
-
28
- it_behaves_like 'a failing predicate'
29
- end
30
- end
31
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic/predicates'
4
-
5
- RSpec.describe Dry::Logic::Predicates do
6
- describe '#lt?' do
7
- let(:predicate_name) { :lt? }
8
-
9
- context 'when value is less than n' do
10
- let(:arguments_list) do
11
- [
12
- [13, 12],
13
- [13.37, 13.36],
14
- ]
15
- end
16
-
17
- it_behaves_like 'a passing predicate'
18
- end
19
-
20
- context 'when value is equal to n' do
21
- let(:arguments_list) do
22
- [
23
- [13, 13],
24
- [13.37, 13.37]
25
- ]
26
- end
27
-
28
- it_behaves_like 'a failing predicate'
29
- end
30
-
31
- context 'with value is greater than n' do
32
- let(:arguments_list) do
33
- [
34
- [13, 14],
35
- [13.37, 13.38]
36
- ]
37
- end
38
-
39
- it_behaves_like 'a failing predicate'
40
- end
41
- end
42
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic/predicates'
4
-
5
- RSpec.describe Dry::Logic::Predicates do
6
- describe '#lteq?' do
7
- let(:predicate_name) { :lteq? }
8
-
9
- context 'when value is less than n' do
10
- let(:arguments_list) do
11
- [
12
- [13, 12],
13
- [13.37, 13.36]
14
- ]
15
- end
16
-
17
- it_behaves_like 'a passing predicate'
18
- end
19
-
20
- context 'when value is equal to n' do
21
- let(:arguments_list) do
22
- [
23
- [13, 13],
24
- [13.37, 13.37]
25
- ]
26
- end
27
-
28
- it_behaves_like 'a passing predicate'
29
- end
30
-
31
- context 'with value is greater than n' do
32
- let(:arguments_list) do
33
- [
34
- [13, 14],
35
- [13.37, 13.38]
36
- ]
37
- end
38
-
39
- it_behaves_like 'a failing predicate'
40
- end
41
- end
42
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic/predicates'
4
-
5
- RSpec.describe Dry::Logic::Predicates do
6
- describe '#max_size?' do
7
- let(:predicate_name) { :max_size? }
8
-
9
- context 'when value size is less than n' do
10
- let(:arguments_list) do
11
- [
12
- [3, [1, 2]],
13
- [5, 'Jill'],
14
- [3, { 1 => 'st', 2 => 'nd' }],
15
- [9, 1],
16
- [6, 1..5]
17
- ]
18
- end
19
-
20
- it_behaves_like 'a passing predicate'
21
- end
22
-
23
- context 'when value size is equal to n' do
24
- let(:arguments_list) do
25
- [
26
- [2, [1, 2]],
27
- [4, 'Jill'],
28
- [2, { 1 => 'st', 2 => 'nd' }],
29
- [8, 1],
30
- [5, 1..5]
31
- ]
32
- end
33
-
34
- it_behaves_like 'a passing predicate'
35
- end
36
-
37
- context 'with value size is greater than n' do
38
- let(:arguments_list) do
39
- [
40
- [1, [1, 2]],
41
- [3, 'Jill'],
42
- [1, { 1 => 'st', 2 => 'nd' }],
43
- [7, 1],
44
- [4, 1..5]
45
- ]
46
- end
47
-
48
- it_behaves_like 'a failing predicate'
49
- end
50
- end
51
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/logic/predicates'
4
-
5
- RSpec.describe Dry::Logic::Predicates do
6
- describe '#min_size?' do
7
- let(:predicate_name) { :min_size? }
8
-
9
- context 'when value size is greater than n' do
10
- let(:arguments_list) do
11
- [
12
- [1, [1, 2]],
13
- [3, 'Jill'],
14
- [1, { 1 => 'st', 2 => 'nd' }],
15
- [7, 1],
16
- [4, 1..5]
17
- ]
18
- end
19
-
20
- it_behaves_like 'a passing predicate'
21
- end
22
-
23
- context 'when value size is equal to n' do
24
- let(:arguments_list) do
25
- [
26
- [2, [1, 2]],
27
- [4, 'Jill'],
28
- [2, { 1 => 'st', 2 => 'nd' }],
29
- [8, 1],
30
- [5, 1..5]
31
- ]
32
- end
33
-
34
- it_behaves_like 'a passing predicate'
35
- end
36
-
37
- context 'with value size is less than n' do
38
- let(:arguments_list) do
39
- [
40
- [3, [1, 2]],
41
- [5, 'Jill'],
42
- [3, { 1 => 'st', 2 => 'nd' }],
43
- [9, 1],
44
- [6, 1..5]
45
- ]
46
- end
47
-
48
- it_behaves_like 'a failing predicate'
49
- end
50
- end
51
- end