predicate 2.3.3 → 2.7.0

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 (88) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +4 -0
  3. data/LICENSE.md +17 -19
  4. data/README.md +467 -0
  5. data/bin/g +2 -0
  6. data/lib/predicate/dsl.rb +138 -0
  7. data/lib/predicate/factory.rb +149 -40
  8. data/lib/predicate/grammar.rb +11 -2
  9. data/lib/predicate/grammar.sexp.yml +31 -0
  10. data/lib/predicate/nodes/${op_name}.rb.jeny +12 -0
  11. data/lib/predicate/nodes/and.rb +9 -0
  12. data/lib/predicate/nodes/binary_func.rb +20 -0
  13. data/lib/predicate/nodes/contradiction.rb +2 -7
  14. data/lib/predicate/nodes/dyadic_comp.rb +1 -3
  15. data/lib/predicate/nodes/empty.rb +14 -0
  16. data/lib/predicate/nodes/eq.rb +11 -3
  17. data/lib/predicate/nodes/expr.rb +5 -3
  18. data/lib/predicate/nodes/has_size.rb +14 -0
  19. data/lib/predicate/nodes/identifier.rb +1 -3
  20. data/lib/predicate/nodes/in.rb +7 -6
  21. data/lib/predicate/nodes/intersect.rb +3 -23
  22. data/lib/predicate/nodes/literal.rb +1 -3
  23. data/lib/predicate/nodes/match.rb +1 -21
  24. data/lib/predicate/nodes/nadic_bool.rb +1 -3
  25. data/lib/predicate/nodes/native.rb +1 -3
  26. data/lib/predicate/nodes/not.rb +1 -3
  27. data/lib/predicate/nodes/opaque.rb +1 -3
  28. data/lib/predicate/nodes/qualified_identifier.rb +1 -3
  29. data/lib/predicate/nodes/set_op.rb +26 -0
  30. data/lib/predicate/nodes/subset.rb +11 -0
  31. data/lib/predicate/nodes/superset.rb +11 -0
  32. data/lib/predicate/nodes/tautology.rb +6 -7
  33. data/lib/predicate/nodes/unary_func.rb +16 -0
  34. data/lib/predicate/nodes/var.rb +46 -0
  35. data/lib/predicate/postgres/ext/factory.rb +28 -0
  36. data/lib/predicate/postgres/ext/to_sequel.rb +26 -0
  37. data/lib/predicate/postgres/ext.rb +2 -0
  38. data/lib/predicate/postgres/pg_array/empty.rb +10 -0
  39. data/lib/predicate/postgres/pg_array/literal.rb +10 -0
  40. data/lib/predicate/postgres/pg_array/overlaps.rb +10 -0
  41. data/lib/predicate/postgres/pg_array.rb +25 -0
  42. data/lib/predicate/postgres/rewriter.rb +49 -0
  43. data/lib/predicate/postgres.rb +4 -0
  44. data/lib/predicate/processors/qualifier.rb +4 -0
  45. data/lib/predicate/processors/renamer.rb +4 -0
  46. data/lib/predicate/processors/to_s.rb +28 -0
  47. data/lib/predicate/processors/unqualifier.rb +4 -0
  48. data/lib/predicate/sequel/to_sequel.rb +5 -1
  49. data/lib/predicate/sugar.rb +47 -0
  50. data/lib/predicate/version.rb +2 -2
  51. data/lib/predicate.rb +28 -4
  52. data/spec/dsl/test_dsl.rb +204 -0
  53. data/spec/dsl/test_evaluate.rb +65 -0
  54. data/spec/dsl/test_respond_to_missing.rb +35 -0
  55. data/spec/dsl/test_to_skake_case.rb +38 -0
  56. data/spec/factory/shared/a_comparison_factory_method.rb +1 -0
  57. data/spec/factory/test_${op_name}.rb.jeny +12 -0
  58. data/spec/factory/test_comp.rb +28 -5
  59. data/spec/factory/test_empty.rb +11 -0
  60. data/spec/factory/test_has_size.rb +11 -0
  61. data/spec/factory/test_match.rb +1 -0
  62. data/spec/factory/test_set_ops.rb +18 -0
  63. data/spec/factory/test_var.rb +22 -0
  64. data/spec/factory/test_vars.rb +27 -0
  65. data/spec/nodes/${op_name}.jeny/test_evaluate.rb.jeny +19 -0
  66. data/spec/nodes/empty/test_evaluate.rb +42 -0
  67. data/spec/nodes/has_size/test_evaluate.rb +44 -0
  68. data/spec/postgres/test_factory.rb +48 -0
  69. data/spec/postgres/test_to_postgres.rb +41 -0
  70. data/spec/postgres/test_to_sequel.rb +44 -0
  71. data/spec/predicate/test_and_split.rb +18 -0
  72. data/spec/predicate/test_attr_split.rb +18 -0
  73. data/spec/predicate/test_constant_variables.rb +24 -2
  74. data/spec/predicate/test_constants.rb +24 -0
  75. data/spec/predicate/test_evaluate.rb +205 -3
  76. data/spec/predicate/test_free_variables.rb +1 -1
  77. data/spec/predicate/test_to_hash.rb +40 -0
  78. data/spec/predicate/test_to_s.rb +37 -0
  79. data/spec/sequel/test_to_sequel.rb +26 -10
  80. data/spec/shared/a_predicate.rb +34 -0
  81. data/spec/spec_helper.rb +18 -1
  82. data/spec/test_predicate.rb +78 -33
  83. data/spec/test_readme.rb +80 -0
  84. data/spec/test_sugar.rb +48 -0
  85. data/tasks/test.rake +3 -3
  86. metadata +67 -11
  87. data/spec/factory/test_between.rb +0 -12
  88. data/spec/factory/test_intersect.rb +0 -12
@@ -1,36 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- shared_examples_for "a predicate" do
4
-
5
- let(:w){ [8, 9] }
6
- let(:x){ 12 }
7
- let(:y){ 13 }
8
-
9
- it 'can be negated easily' do
10
- (!subject).should be_a(Predicate)
11
- end
12
-
13
- it 'detects stupid AND' do
14
- (subject & Predicate.tautology).should be(subject)
15
- end
16
-
17
- it 'detects stupid OR' do
18
- (subject | Predicate.contradiction).should be(subject)
19
- end
20
-
21
- it 'has free variables' do
22
- (fv = subject.free_variables).should be_a(Array)
23
- (fv - [ :w, :x, :y ]).should be_empty
24
- end
25
-
26
- it 'always splits around and trivially when no free variables are touched' do
27
- top, down = subject.and_split([:z])
28
- top.should be_tautology
29
- down.should eq(subject)
30
- end
31
-
32
- end
33
-
34
3
  describe 'Predicate.tautology' do
35
4
  subject{ Predicate.tautology }
36
5
 
@@ -49,7 +18,17 @@ describe "Predicate.comp" do
49
18
  it_should_behave_like "a predicate"
50
19
  end
51
20
 
52
- describe "Predicate.in" do
21
+ describe "Predicate.h" do
22
+ subject{ Predicate.h(:x => 2) }
23
+
24
+ it_should_behave_like "a predicate"
25
+
26
+ it 'should be a eq on x' do
27
+ expect(subject).to eql(Predicate.eq(:x => 2))
28
+ end
29
+ end
30
+
31
+ describe "Predicate.in, with a list" do
53
32
  subject{ Predicate.in(:x, [2, 3]) }
54
33
 
55
34
  it_should_behave_like "a predicate"
@@ -59,6 +38,36 @@ describe "Predicate.in" do
59
38
  end
60
39
  end
61
40
 
41
+ describe "Predicate.in, with an inclusive range" do
42
+ subject{ Predicate.in(:x, 1..10) }
43
+
44
+ it_should_behave_like "a predicate"
45
+
46
+ it 'should be a shortcut over comparisons' do
47
+ expect(subject).to eql(Predicate.gte(:x, 1) & Predicate.lte(:x, 10))
48
+ end
49
+ end
50
+
51
+ describe "Predicate.in, with an exclusive range" do
52
+ subject{ Predicate.in(:x, 1...10) }
53
+
54
+ it_should_behave_like "a predicate"
55
+
56
+ it 'should be a shortcut over comparisons' do
57
+ expect(subject).to eql(Predicate.gte(:x, 1) & Predicate.lt(:x, 10))
58
+ end
59
+ end
60
+
61
+ describe "Predicate.in, with an empty range" do
62
+ subject{ Predicate.in(:x, 1...1) }
63
+
64
+ it_should_behave_like "a predicate"
65
+
66
+ it 'should be a contradiction' do
67
+ expect(subject).to eql(Predicate.contradiction)
68
+ end
69
+ end
70
+
62
71
  describe "Predicate.among" do
63
72
  subject{ Predicate.among(:x, [2, 3]) }
64
73
 
@@ -66,7 +75,19 @@ describe "Predicate.among" do
66
75
  end
67
76
 
68
77
  describe "Predicate.intersect" do
69
- subject{ Predicate.intersect(:w, [2, 3]) }
78
+ subject{ Predicate.intersect(:x, [2, 3]) }
79
+
80
+ it_should_behave_like "a predicate"
81
+ end
82
+
83
+ describe "Predicate.subset" do
84
+ subject{ Predicate.subset(:x, [2, 3]) }
85
+
86
+ it_should_behave_like "a predicate"
87
+ end
88
+
89
+ describe "Predicate.superset" do
90
+ subject{ Predicate.superset(:x, [2, 3]) }
70
91
 
71
92
  it_should_behave_like "a predicate"
72
93
  end
@@ -136,3 +157,27 @@ describe "Predicate.not" do
136
157
 
137
158
  it_should_behave_like "a predicate"
138
159
  end
160
+
161
+ describe "Predicate.dsl" do
162
+ subject{ Predicate.dsl{ eq(:x, 6) & lte(:y, 5)} }
163
+
164
+ it_should_behave_like "a predicate"
165
+ end
166
+
167
+ describe "Predicate.empty" do
168
+ subject{ Predicate.empty(:x) }
169
+
170
+ it_should_behave_like "a predicate"
171
+ end
172
+
173
+ describe "Predicate.has_size" do
174
+ subject{ Predicate.has_size(:x, 1..10) }
175
+
176
+ it_should_behave_like "a predicate"
177
+ end
178
+
179
+ #jeny(predicate) describe "Predicate.${op_name}" do
180
+ #jeny(predicate) subject{ Predicate.${op_name}(TODO) }
181
+ #jeny(predicate)
182
+ #jeny(predicate) it_should_behave_like "a predicate"
183
+ #jeny(predicate) end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+ require 'ostruct'
3
+
4
+ describe "README" do
5
+
6
+ it 'has a correct first example' do
7
+ p = Predicate.eq(:x, 2) & !Predicate.lte(:y, 3)
8
+ expect(p.evaluate(:x => 2, :y => 6)).to eql(true)
9
+ expect(p.evaluate(:x => 2, :y => 3)).to eql(false)
10
+ end
11
+
12
+ it 'has a correct second example' do
13
+ p = Predicate.dsl{
14
+ eq(:x, 2) & !lte(:y, 3)
15
+ }
16
+ expect(p.evaluate(:x => 2, :y => 6)).to eql(true)
17
+ expect(p.evaluate(:x => 2, :y => 3)).to eql(false)
18
+ end
19
+
20
+ it 'has a correct third example' do
21
+ p1 = Predicate.gt(:x, 1) & Predicate.lt(:x, 10)
22
+ p2 = Predicate.dsl{
23
+ gt(:x, 1) & lt(:x, 10)
24
+ }
25
+ p3 = Predicate.currying(:x){
26
+ gt(1) & lt(10)
27
+ }
28
+ [p1, p2, p3].all?{|p|
29
+ expect(p.evaluate(:x => 0)).to eql(false)
30
+ expect(p.evaluate(:x => 6)).to eql(true)
31
+ expect(p.evaluate(:x => 22)).to eql(false)
32
+ }
33
+ end
34
+
35
+ it 'has a correct fourth example' do
36
+ p = Predicate.currying{
37
+ gt(1) & lt(10)
38
+ }
39
+ expect(p.evaluate(0)).to eql(false)
40
+ expect(p.evaluate(6)).to eql(true)
41
+ expect(p.evaluate(22)).to eql(false)
42
+ end
43
+
44
+ it 'has a correct fifth example' do
45
+ x, y = Predicate.vars("items.0.price", "items.1.price")
46
+ p = Predicate.eq(x, 6) & Predicate.lt(y, 10)
47
+ expect(p.evaluate({
48
+ items: [
49
+ { name: "Candy", price: 6 },
50
+ { name: "Crush", price: 4 }
51
+ ]
52
+ })).to eql(true)
53
+ end
54
+
55
+ it 'has a correct sixth example' do
56
+ xyz = Predicate.var([:x, :y, :z], :dig)
57
+ p = Predicate.eq(xyz, 2)
58
+ expect(p.evaluate({ x: { y: { z: 2 } } })).to eql(true)
59
+ end
60
+
61
+ it 'has a correct seventh example' do
62
+ class C
63
+ attr_reader :x
64
+ def initialize(x)
65
+ @x = x
66
+ end
67
+ end
68
+
69
+ [:send, :public_send].each do |semantics|
70
+ xy = Predicate.var([:x, :y], semantics)
71
+ p = Predicate.eq(xy, 2)
72
+ expect(p.evaluate(C.new(OpenStruct.new(y: 2)))).to eql(true)
73
+
74
+ xy = Predicate.var("x.y", semantics)
75
+ p = Predicate.eq(xy, 2)
76
+ expect(p.evaluate(C.new(OpenStruct.new(y: 2)))).to eql(true)
77
+ end
78
+ end
79
+
80
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Predicate.min_size" do
4
+ subject{ Predicate.min_size(:x, 1) }
5
+
6
+ it 'works as expected' do
7
+ expect(subject).to eq(Predicate.has_size(:x, Range.new(1, nil)))
8
+ expect(subject.call(x: "")).to eq(false)
9
+ expect(subject.call(x: "1")).to eq(true)
10
+ end
11
+ end if RUBY_VERSION >= "2.6"
12
+
13
+ describe "Predicate.min_size" do
14
+ subject{ Predicate.min_size(:x, 1) }
15
+
16
+ it 'works as expected' do
17
+ expect(subject.call(x: "")).to eq(false)
18
+ expect(subject.call(x: "1")).to eq(true)
19
+ end
20
+ end if RUBY_VERSION < "2.6"
21
+
22
+ describe "Predicate.max_size" do
23
+ subject{ Predicate.max_size(:x, 10) }
24
+
25
+ it 'works as expected' do
26
+ expect(subject).to eq(Predicate.has_size(:x, 0..10))
27
+ expect(subject.call(x: "")).to eq(true)
28
+ expect(subject.call(x: "01234567891")).to eq(false)
29
+ end
30
+ end
31
+
32
+ describe "Predicate.is_null" do
33
+ subject{ Predicate.is_null(:x) }
34
+
35
+ it 'works as expected' do
36
+ expect(subject).to eq(Predicate.eq(:x, nil))
37
+ expect(subject.call(x: nil)).to eq(true)
38
+ expect(subject.call(x: "01234567891")).to eq(false)
39
+ end
40
+ end
41
+
42
+ #jeny(sugar) describe "Predicate.${op_name}" do
43
+ #jeny(sugar) subject{ Predicate.${op_name}(TODO) }
44
+ #jeny(sugar)
45
+ #jeny(sugar) it 'works as expected' do
46
+ #jeny(sugar) expect(subject).to eq(TODO)
47
+ #jeny(sugar) end
48
+ #jeny(sugar) end
data/tasks/test.rake CHANGED
@@ -1,9 +1,9 @@
1
1
  namespace :test do
2
+ require 'rspec/core/rake_task'
2
3
 
3
4
  desc %q{Run all RSpec tests}
4
- task :unit do
5
- require 'rspec'
6
- RSpec::Core::Runner.run(%w[-I. -Ilib -Ispec --pattern=spec/**/test_*.rb --color .])
5
+ RSpec::Core::RakeTask.new(:unit) do |t|
6
+ t.rspec_opts = %w[-I. -Ilib -Ispec --pattern=spec/**/test_*.rb --color .]
7
7
  end
8
8
 
9
9
  task :all => :"unit"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: predicate
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.3
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernard Lambeau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-08 00:00:00.000000000 Z
11
+ date: 2022-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sexpr
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.6.0
19
+ version: '1.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: 0.6.0
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10'
33
+ version: '13'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10'
40
+ version: '13'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.6'
47
+ version: '3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.6'
54
+ version: '3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sequel
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pg
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: Predicate provides a simple class and processors to encode and manipulate
84
98
  (tuple) predicates
85
99
  email: blambeau@gmail.com
@@ -89,18 +103,25 @@ extra_rdoc_files: []
89
103
  files:
90
104
  - Gemfile
91
105
  - LICENSE.md
106
+ - README.md
92
107
  - Rakefile
108
+ - bin/g
93
109
  - lib/predicate.rb
110
+ - lib/predicate/dsl.rb
94
111
  - lib/predicate/factory.rb
95
112
  - lib/predicate/grammar.rb
96
113
  - lib/predicate/grammar.sexp.yml
114
+ - lib/predicate/nodes/${op_name}.rb.jeny
97
115
  - lib/predicate/nodes/and.rb
116
+ - lib/predicate/nodes/binary_func.rb
98
117
  - lib/predicate/nodes/contradiction.rb
99
118
  - lib/predicate/nodes/dyadic_comp.rb
119
+ - lib/predicate/nodes/empty.rb
100
120
  - lib/predicate/nodes/eq.rb
101
121
  - lib/predicate/nodes/expr.rb
102
122
  - lib/predicate/nodes/gt.rb
103
123
  - lib/predicate/nodes/gte.rb
124
+ - lib/predicate/nodes/has_size.rb
104
125
  - lib/predicate/nodes/identifier.rb
105
126
  - lib/predicate/nodes/in.rb
106
127
  - lib/predicate/nodes/intersect.rb
@@ -115,8 +136,22 @@ files:
115
136
  - lib/predicate/nodes/opaque.rb
116
137
  - lib/predicate/nodes/or.rb
117
138
  - lib/predicate/nodes/qualified_identifier.rb
139
+ - lib/predicate/nodes/set_op.rb
140
+ - lib/predicate/nodes/subset.rb
141
+ - lib/predicate/nodes/superset.rb
118
142
  - lib/predicate/nodes/tautology.rb
143
+ - lib/predicate/nodes/unary_func.rb
144
+ - lib/predicate/nodes/var.rb
119
145
  - lib/predicate/placeholder.rb
146
+ - lib/predicate/postgres.rb
147
+ - lib/predicate/postgres/ext.rb
148
+ - lib/predicate/postgres/ext/factory.rb
149
+ - lib/predicate/postgres/ext/to_sequel.rb
150
+ - lib/predicate/postgres/pg_array.rb
151
+ - lib/predicate/postgres/pg_array/empty.rb
152
+ - lib/predicate/postgres/pg_array/literal.rb
153
+ - lib/predicate/postgres/pg_array/overlaps.rb
154
+ - lib/predicate/postgres/rewriter.rb
120
155
  - lib/predicate/processors.rb
121
156
  - lib/predicate/processors/binder.rb
122
157
  - lib/predicate/processors/qualifier.rb
@@ -125,21 +160,27 @@ files:
125
160
  - lib/predicate/processors/unqualifier.rb
126
161
  - lib/predicate/sequel.rb
127
162
  - lib/predicate/sequel/to_sequel.rb
163
+ - lib/predicate/sugar.rb
128
164
  - lib/predicate/version.rb
165
+ - spec/dsl/test_dsl.rb
166
+ - spec/dsl/test_evaluate.rb
167
+ - spec/dsl/test_respond_to_missing.rb
168
+ - spec/dsl/test_to_skake_case.rb
129
169
  - spec/factory/shared/a_comparison_factory_method.rb
130
170
  - spec/factory/shared/a_predicate_ast_node.rb
171
+ - spec/factory/test_${op_name}.rb.jeny
131
172
  - spec/factory/test_and.rb
132
- - spec/factory/test_between.rb
133
173
  - spec/factory/test_comp.rb
134
174
  - spec/factory/test_contradiction.rb
175
+ - spec/factory/test_empty.rb
135
176
  - spec/factory/test_eq.rb
136
177
  - spec/factory/test_factor_predicate.rb
137
178
  - spec/factory/test_from_hash.rb
138
179
  - spec/factory/test_gt.rb
139
180
  - spec/factory/test_gte.rb
181
+ - spec/factory/test_has_size.rb
140
182
  - spec/factory/test_identifier.rb
141
183
  - spec/factory/test_in.rb
142
- - spec/factory/test_intersect.rb
143
184
  - spec/factory/test_literal.rb
144
185
  - spec/factory/test_lt.rb
145
186
  - spec/factory/test_lte.rb
@@ -149,14 +190,20 @@ files:
149
190
  - spec/factory/test_not.rb
150
191
  - spec/factory/test_or.rb
151
192
  - spec/factory/test_qualified_identifier.rb
193
+ - spec/factory/test_set_ops.rb
152
194
  - spec/factory/test_tautology.rb
195
+ - spec/factory/test_var.rb
196
+ - spec/factory/test_vars.rb
153
197
  - spec/grammar/test_match.rb
154
198
  - spec/grammar/test_sexpr.rb
199
+ - spec/nodes/${op_name}.jeny/test_evaluate.rb.jeny
155
200
  - spec/nodes/and/test_and.rb
156
201
  - spec/nodes/and/test_and_split.rb
157
202
  - spec/nodes/and/test_attr_split.rb
158
203
  - spec/nodes/dyadic_comp/test_and_split.rb
204
+ - spec/nodes/empty/test_evaluate.rb
159
205
  - spec/nodes/eq/test_and.rb
206
+ - spec/nodes/has_size/test_evaluate.rb
160
207
  - spec/nodes/identifier/test_and_split.rb
161
208
  - spec/nodes/identifier/test_free_variables.rb
162
209
  - spec/nodes/identifier/test_name.rb
@@ -167,6 +214,9 @@ files:
167
214
  - spec/nodes/qualified_identifier/test_free_variables.rb
168
215
  - spec/nodes/qualified_identifier/test_name.rb
169
216
  - spec/nodes/qualified_identifier/test_qualifier.rb
217
+ - spec/postgres/test_factory.rb
218
+ - spec/postgres/test_to_postgres.rb
219
+ - spec/postgres/test_to_sequel.rb
170
220
  - spec/predicate/test_and_split.rb
171
221
  - spec/predicate/test_attr_split.rb
172
222
  - spec/predicate/test_bind.rb
@@ -183,10 +233,15 @@ files:
183
233
  - spec/predicate/test_qualify.rb
184
234
  - spec/predicate/test_rename.rb
185
235
  - spec/predicate/test_tautology.rb
236
+ - spec/predicate/test_to_hash.rb
237
+ - spec/predicate/test_to_s.rb
186
238
  - spec/predicate/test_unqualify.rb
187
239
  - spec/sequel/test_to_sequel.rb
240
+ - spec/shared/a_predicate.rb
188
241
  - spec/spec_helper.rb
189
242
  - spec/test_predicate.rb
243
+ - spec/test_readme.rb
244
+ - spec/test_sugar.rb
190
245
  - tasks/gem.rake
191
246
  - tasks/test.rake
192
247
  homepage: http://github.com/enspirit/predicate
@@ -208,7 +263,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
263
  - !ruby/object:Gem::Version
209
264
  version: '0'
210
265
  requirements: []
211
- rubygems_version: 3.1.2
266
+ rubyforge_project:
267
+ rubygems_version: 2.6.14.4
212
268
  signing_key:
213
269
  specification_version: 4
214
270
  summary: Predicate provides a simple class and processors to encode and manipulate
@@ -1,12 +0,0 @@
1
- require_relative "shared/a_comparison_factory_method"
2
- class Predicate
3
- describe Factory, 'between' do
4
-
5
- subject{ Factory.between(:x, 2, 3) }
6
-
7
- it{ should be_a(And) }
8
-
9
- it{ should eq([:and, [:gte, [:identifier, :x], [:literal, 2]], [:lte, [:identifier, :x], [:literal, 3]]]) }
10
-
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- require_relative "shared/a_comparison_factory_method"
2
- class Predicate
3
- describe Factory, 'intersect' do
4
-
5
- subject{ Factory.intersect(:x, [2, 3]) }
6
-
7
- it{ should be_a(Intersect) }
8
-
9
- it{ should eq([:intersect, [:identifier, :x], [2, 3]]) }
10
-
11
- end
12
- end