axiom-optimizer 0.1.1 → 0.2.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.
- checksums.yaml +7 -0
- data/.rspec +2 -1
- data/.rubocop.yml +6 -0
- data/.travis.yml +16 -20
- data/CONTRIBUTING.md +1 -2
- data/Gemfile +3 -1
- data/Gemfile.devtools +28 -18
- data/README.md +7 -13
- data/TODO +6 -5
- data/axiom-optimizer.gemspec +3 -3
- data/config/flay.yml +1 -1
- data/config/reek.yml +5 -29
- data/config/rubocop.yml +16 -10
- data/lib/axiom/optimizer.rb +3 -7
- data/lib/axiom/optimizer/algebra/difference.rb +2 -2
- data/lib/axiom/optimizer/algebra/extension.rb +6 -6
- data/lib/axiom/optimizer/algebra/intersection.rb +2 -2
- data/lib/axiom/optimizer/algebra/join.rb +4 -4
- data/lib/axiom/optimizer/algebra/product.rb +4 -4
- data/lib/axiom/optimizer/algebra/projection.rb +5 -5
- data/lib/axiom/optimizer/algebra/rename.rb +10 -10
- data/lib/axiom/optimizer/algebra/restriction.rb +8 -9
- data/lib/axiom/optimizer/algebra/summarization.rb +7 -7
- data/lib/axiom/optimizer/algebra/union.rb +2 -2
- data/lib/axiom/optimizer/function.rb +4 -6
- data/lib/axiom/optimizer/function/binary.rb +2 -2
- data/lib/axiom/optimizer/function/connective/binary.rb +1 -1
- data/lib/axiom/optimizer/function/connective/negation.rb +1 -1
- data/lib/axiom/optimizer/function/predicate.rb +1 -1
- data/lib/axiom/optimizer/function/predicate/comparable.rb +8 -6
- data/lib/axiom/optimizer/function/predicate/enumerable.rb +2 -2
- data/lib/axiom/optimizer/function/unary.rb +1 -1
- data/lib/axiom/optimizer/relation/operation/binary.rb +12 -12
- data/lib/axiom/optimizer/relation/operation/reverse.rb +9 -9
- data/lib/axiom/optimizer/relation/operation/{order.rb → sorted.rb} +15 -15
- data/lib/axiom/optimizer/relation/operation/unary.rb +7 -7
- data/lib/axiom/optimizer/support/predicate_partition.rb +11 -13
- data/lib/axiom/optimizer/version.rb +1 -1
- data/spec/integration/axiom/algebra/difference/optimize_spec.rb +12 -12
- data/spec/integration/axiom/algebra/intersection/optimize_spec.rb +12 -12
- data/spec/integration/axiom/algebra/join/optimize_spec.rb +6 -6
- data/spec/integration/axiom/algebra/product/optimize_spec.rb +10 -10
- data/spec/integration/axiom/algebra/projection/optimize_spec.rb +14 -14
- data/spec/integration/axiom/algebra/rename/optimize_spec.rb +38 -38
- data/spec/integration/axiom/algebra/restriction/optimize_spec.rb +12 -12
- data/spec/integration/axiom/algebra/summarization/optimize_spec.rb +2 -2
- data/spec/integration/axiom/algebra/union/optimize_spec.rb +16 -16
- data/spec/integration/axiom/function/optimize_spec.rb +1 -1
- data/spec/integration/axiom/relation/operation/limit/optimize_spec.rb +20 -20
- data/spec/integration/axiom/relation/operation/offset/optimize_spec.rb +14 -14
- data/spec/integration/axiom/relation/operation/reverse/optimize_spec.rb +15 -15
- data/spec/integration/axiom/relation/operation/{order → sorted}/optimize_spec.rb +6 -6
- data/spec/integration/axiom/relation/optimize_spec.rb +1 -1
- data/spec/shared/function_connective_binary_optimize_behavior.rb +8 -2
- data/spec/shared/optimize_method_behavior.rb +0 -11
- data/spec/spec_helper.rb +9 -9
- data/spec/support/config_alias.rb +2 -0
- data/spec/unit/axiom/optimizer/algebra/extension/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/algebra/extension/{order_operand → sorted_operand}/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/algebra/rename/limit_operand/optimize_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/algebra/rename/offset_operand/optimize_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/algebra/rename/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/algebra/rename/{order_operand → sorted_operand}/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/algebra/restriction/combination_operand/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/algebra/restriction/predicate_spec.rb +5 -4
- data/spec/unit/axiom/optimizer/algebra/restriction/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/algebra/restriction/{order_operand → sorted_operand}/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/algebra/summarization/empty_operand/class_methods/extension_default_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/algebra/summarization/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/algebra/summarization/{order_operand → sorted_operand}/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/algebra/summarization/summarize_per_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/binary/constant_operands/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/function/connective/conjunction/contradiction/optimizable_predicate_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/connective/disjunction/tautology/optimizable_predicate_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/function/unary/constant_operand/optimizable_predicate_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/util/class_methods/max_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/function/util/class_methods/min_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/optimizable/optimize_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/optimizable_predicate_spec.rb +1 -5
- data/spec/unit/axiom/optimizer/optimize_spec.rb +1 -5
- data/spec/unit/axiom/optimizer/relation/operation/binary/{order_left → sorted_left}/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/relation/operation/binary/{order_left → sorted_left}/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/relation/operation/binary/{order_right → sorted_right}/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/relation/operation/binary/{order_right → sorted_right}/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/relation/operation/limit/equal_limit_operand/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/relation/operation/limit/limit_operand/optimize_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/limit/unoptimized_operand/optimize_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/relation/operation/limit/zero_limit/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/relation/operation/offset/offset_operand/optimize_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/relation/operation/offset/unoptimized_operand/optimize_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/relation/operation/offset/zero_offset/optimize_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/relation/operation/reverse/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +3 -3
- data/spec/unit/axiom/optimizer/relation/operation/reverse/{order_operand → sorted_operand}/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/relation/operation/reverse/unoptimized_operand/optimize_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/{order → sorted}/one_limit_operand/optimizable_predicate_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/relation/operation/{order → sorted}/one_limit_operand/optimize_spec.rb +1 -1
- data/spec/unit/axiom/optimizer/relation/operation/{order/order_operand → sorted/sorted_operand}/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/{order/order_operand → sorted/sorted_operand}/optimize_spec.rb +5 -5
- data/spec/unit/axiom/optimizer/relation/operation/{order → sorted}/unoptimized_operand/optimizable_predicate_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/relation/operation/{order → sorted}/unoptimized_operand/optimize_spec.rb +2 -2
- data/spec/unit/axiom/optimizer/relation/operation/unary/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +4 -4
- data/spec/unit/axiom/optimizer/relation/operation/unary/{order_operand → sorted_operand}/optimize_spec.rb +2 -2
- metadata +291 -47
- data/spec/support/ice_nine_config.rb +0 -6
@@ -21,7 +21,7 @@ describe Algebra::Product, '#optimize' do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'does not execute right_body#each' do
|
24
|
-
right_body.
|
24
|
+
expect(right_body).not_to receive(:each)
|
25
25
|
subject
|
26
26
|
end
|
27
27
|
|
@@ -38,7 +38,7 @@ describe Algebra::Product, '#optimize' do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'does not execute left_body#each' do
|
41
|
-
left_body.
|
41
|
+
expect(left_body).not_to receive(:each)
|
42
42
|
subject
|
43
43
|
end
|
44
44
|
|
@@ -55,7 +55,7 @@ describe Algebra::Product, '#optimize' do
|
|
55
55
|
end
|
56
56
|
|
57
57
|
it 'does not execute right_body#each' do
|
58
|
-
right_body.
|
58
|
+
expect(right_body).not_to receive(:each)
|
59
59
|
subject
|
60
60
|
end
|
61
61
|
|
@@ -72,7 +72,7 @@ describe Algebra::Product, '#optimize' do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
it 'does not execute left_body#each' do
|
75
|
-
left_body.
|
75
|
+
expect(left_body).not_to receive(:each)
|
76
76
|
subject
|
77
77
|
end
|
78
78
|
|
@@ -89,7 +89,7 @@ describe Algebra::Product, '#optimize' do
|
|
89
89
|
end
|
90
90
|
|
91
91
|
it 'does not execute right_body#each' do
|
92
|
-
right_body.
|
92
|
+
expect(right_body).not_to receive(:each)
|
93
93
|
subject
|
94
94
|
end
|
95
95
|
|
@@ -106,7 +106,7 @@ describe Algebra::Product, '#optimize' do
|
|
106
106
|
end
|
107
107
|
|
108
108
|
it 'does not execute left_body#each' do
|
109
|
-
left_body.
|
109
|
+
expect(left_body).not_to receive(:each)
|
110
110
|
subject
|
111
111
|
end
|
112
112
|
|
@@ -123,7 +123,7 @@ describe Algebra::Product, '#optimize' do
|
|
123
123
|
end
|
124
124
|
|
125
125
|
it 'does not execute right_body#each' do
|
126
|
-
right_body.
|
126
|
+
expect(right_body).not_to receive(:each)
|
127
127
|
subject
|
128
128
|
end
|
129
129
|
|
@@ -140,7 +140,7 @@ describe Algebra::Product, '#optimize' do
|
|
140
140
|
end
|
141
141
|
|
142
142
|
it 'does not execute left_body#each' do
|
143
|
-
left_body.
|
143
|
+
expect(left_body).not_to receive(:each)
|
144
144
|
subject
|
145
145
|
end
|
146
146
|
|
@@ -151,12 +151,12 @@ describe Algebra::Product, '#optimize' do
|
|
151
151
|
it { should be(object) }
|
152
152
|
|
153
153
|
it 'does not execute left_body#each' do
|
154
|
-
left_body.
|
154
|
+
expect(left_body).not_to receive(:each)
|
155
155
|
subject
|
156
156
|
end
|
157
157
|
|
158
158
|
it 'does not execute right_body#each' do
|
159
|
-
right_body.
|
159
|
+
expect(right_body).not_to receive(:each)
|
160
160
|
subject
|
161
161
|
end
|
162
162
|
|
@@ -13,7 +13,7 @@ describe Algebra::Projection, '#optimize' do
|
|
13
13
|
|
14
14
|
before do
|
15
15
|
# skip dup of the body to avoid clearing the method stubs
|
16
|
-
body.
|
16
|
+
allow(body).to receive(:frozen?).and_return(true)
|
17
17
|
end
|
18
18
|
|
19
19
|
context 'when the attributes are equivalent to the relation headers, and in the same order' do
|
@@ -26,7 +26,7 @@ describe Algebra::Projection, '#optimize' do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'does not execute body#each' do
|
29
|
-
body.
|
29
|
+
expect(body).not_to receive(:each)
|
30
30
|
subject
|
31
31
|
end
|
32
32
|
|
@@ -41,7 +41,7 @@ describe Algebra::Projection, '#optimize' do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'does not execute body#each' do
|
44
|
-
body.
|
44
|
+
expect(body).not_to receive(:each)
|
45
45
|
subject
|
46
46
|
end
|
47
47
|
|
@@ -54,7 +54,7 @@ describe Algebra::Projection, '#optimize' do
|
|
54
54
|
it { should be(object) }
|
55
55
|
|
56
56
|
it 'does not execute body#each' do
|
57
|
-
body.
|
57
|
+
expect(body).not_to receive(:each)
|
58
58
|
subject
|
59
59
|
end
|
60
60
|
|
@@ -85,7 +85,7 @@ describe Algebra::Projection, '#optimize' do
|
|
85
85
|
end
|
86
86
|
|
87
87
|
it 'does not execute body#each' do
|
88
|
-
body.
|
88
|
+
expect(body).not_to receive(:each)
|
89
89
|
subject
|
90
90
|
end
|
91
91
|
|
@@ -109,7 +109,7 @@ describe Algebra::Projection, '#optimize' do
|
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'does not execute body#each' do
|
112
|
-
body.
|
112
|
+
expect(body).not_to receive(:each)
|
113
113
|
subject
|
114
114
|
end
|
115
115
|
|
@@ -133,7 +133,7 @@ describe Algebra::Projection, '#optimize' do
|
|
133
133
|
end
|
134
134
|
|
135
135
|
it 'does not execute body#each' do
|
136
|
-
body.
|
136
|
+
expect(body).not_to receive(:each)
|
137
137
|
subject
|
138
138
|
end
|
139
139
|
|
@@ -158,7 +158,7 @@ describe Algebra::Projection, '#optimize' do
|
|
158
158
|
end
|
159
159
|
|
160
160
|
it 'does not execute body#each' do
|
161
|
-
body.
|
161
|
+
expect(body).not_to receive(:each)
|
162
162
|
subject
|
163
163
|
end
|
164
164
|
|
@@ -175,8 +175,8 @@ describe Algebra::Projection, '#optimize' do
|
|
175
175
|
|
176
176
|
before do
|
177
177
|
# skip dup of the left and right body to avoid clearing the method stubs
|
178
|
-
left_body.
|
179
|
-
right_body.
|
178
|
+
allow(left_body).to receive(:frozen?).and_return(true)
|
179
|
+
allow(right_body).to receive(:frozen?).and_return(true)
|
180
180
|
end
|
181
181
|
|
182
182
|
it 'pushes the object to each relation, and combine the nested objects' do
|
@@ -189,14 +189,14 @@ describe Algebra::Projection, '#optimize' do
|
|
189
189
|
|
190
190
|
it 'does not execute left_body#each' do
|
191
191
|
pending 'TODO: should only compare left and right with #eql? if they are materialized' do
|
192
|
-
left_body.
|
192
|
+
expect(left_body).to_not receive(:each)
|
193
193
|
subject
|
194
194
|
end
|
195
195
|
end
|
196
196
|
|
197
197
|
it 'does not execute right_body#each' do
|
198
198
|
pending 'TODO: should only compare left and right with #eql? if they are materialized' do
|
199
|
-
right_body.
|
199
|
+
expect(right_body).to_not receive(:each)
|
200
200
|
subject
|
201
201
|
end
|
202
202
|
end
|
@@ -222,13 +222,13 @@ describe Algebra::Projection, '#optimize' do
|
|
222
222
|
|
223
223
|
it 'executes left_body#each' do
|
224
224
|
pending 'TODO: make sure this is only received once'
|
225
|
-
left_body.
|
225
|
+
expect(left_body).to receive(:each)
|
226
226
|
subject
|
227
227
|
end
|
228
228
|
|
229
229
|
it 'executes right_body#each' do
|
230
230
|
pending 'TODO: make sure this is only received once'
|
231
|
-
right_body.
|
231
|
+
expect(right_body).to receive(:each)
|
232
232
|
subject
|
233
233
|
end
|
234
234
|
|
@@ -15,7 +15,7 @@ describe Algebra::Rename, '#optimize' do
|
|
15
15
|
it { should be(object) }
|
16
16
|
|
17
17
|
it 'does not execute body#each' do
|
18
|
-
body.
|
18
|
+
expect(body).not_to receive(:each)
|
19
19
|
subject
|
20
20
|
end
|
21
21
|
|
@@ -32,7 +32,7 @@ describe Algebra::Rename, '#optimize' do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'does not execute body#each' do
|
35
|
-
body.
|
35
|
+
expect(body).not_to receive(:each)
|
36
36
|
subject
|
37
37
|
end
|
38
38
|
|
@@ -57,7 +57,7 @@ describe Algebra::Rename, '#optimize' do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
it 'does not execute body#each' do
|
60
|
-
body.
|
60
|
+
expect(body).not_to receive(:each)
|
61
61
|
subject
|
62
62
|
end
|
63
63
|
|
@@ -87,7 +87,7 @@ describe Algebra::Rename, '#optimize' do
|
|
87
87
|
end
|
88
88
|
|
89
89
|
it 'does not execute body#each' do
|
90
|
-
body.
|
90
|
+
expect(body).not_to receive(:each)
|
91
91
|
subject
|
92
92
|
end
|
93
93
|
|
@@ -116,7 +116,7 @@ describe Algebra::Rename, '#optimize' do
|
|
116
116
|
end
|
117
117
|
|
118
118
|
it 'does not execute body#each' do
|
119
|
-
body.
|
119
|
+
expect(body).not_to receive(:each)
|
120
120
|
subject
|
121
121
|
end
|
122
122
|
|
@@ -134,7 +134,7 @@ describe Algebra::Rename, '#optimize' do
|
|
134
134
|
end
|
135
135
|
|
136
136
|
it 'does not execute body#each' do
|
137
|
-
body.
|
137
|
+
expect(body).not_to receive(:each)
|
138
138
|
subject
|
139
139
|
end
|
140
140
|
|
@@ -155,7 +155,7 @@ describe Algebra::Rename, '#optimize' do
|
|
155
155
|
end
|
156
156
|
|
157
157
|
it 'does not execute body#each' do
|
158
|
-
body.
|
158
|
+
expect(body).not_to receive(:each)
|
159
159
|
subject
|
160
160
|
end
|
161
161
|
|
@@ -175,7 +175,7 @@ describe Algebra::Rename, '#optimize' do
|
|
175
175
|
end
|
176
176
|
|
177
177
|
it 'does not execute body#each' do
|
178
|
-
body.
|
178
|
+
expect(body).not_to receive(:each)
|
179
179
|
subject
|
180
180
|
end
|
181
181
|
|
@@ -196,7 +196,7 @@ describe Algebra::Rename, '#optimize' do
|
|
196
196
|
end
|
197
197
|
|
198
198
|
it 'does not execute body#each' do
|
199
|
-
body.
|
199
|
+
expect(body).not_to receive(:each)
|
200
200
|
subject
|
201
201
|
end
|
202
202
|
|
@@ -216,7 +216,7 @@ describe Algebra::Rename, '#optimize' do
|
|
216
216
|
end
|
217
217
|
|
218
218
|
it 'does not execute body#each' do
|
219
|
-
body.
|
219
|
+
expect(body).not_to receive(:each)
|
220
220
|
subject
|
221
221
|
end
|
222
222
|
|
@@ -237,7 +237,7 @@ describe Algebra::Rename, '#optimize' do
|
|
237
237
|
end
|
238
238
|
|
239
239
|
it 'does not execute body#each' do
|
240
|
-
body.
|
240
|
+
expect(body).not_to receive(:each)
|
241
241
|
subject
|
242
242
|
end
|
243
243
|
|
@@ -259,7 +259,7 @@ describe Algebra::Rename, '#optimize' do
|
|
259
259
|
end
|
260
260
|
|
261
261
|
it 'does not execute body#each' do
|
262
|
-
body.
|
262
|
+
expect(body).not_to receive(:each)
|
263
263
|
subject
|
264
264
|
end
|
265
265
|
|
@@ -270,7 +270,7 @@ describe Algebra::Rename, '#optimize' do
|
|
270
270
|
let(:limit) { relation.sort_by { |r| [r.id, r.name] }.take(2) }
|
271
271
|
let(:operand) { limit.reverse }
|
272
272
|
|
273
|
-
it 'pushes the object under the
|
273
|
+
it 'pushes the object under the sorted, limit and reverse' do
|
274
274
|
should eql(relation.rename(aliases).sort_by { |r| [r.other_id, r.name] }.take(2).reverse)
|
275
275
|
end
|
276
276
|
|
@@ -279,7 +279,7 @@ describe Algebra::Rename, '#optimize' do
|
|
279
279
|
end
|
280
280
|
|
281
281
|
it 'does not execute body#each' do
|
282
|
-
body.
|
282
|
+
expect(body).not_to receive(:each)
|
283
283
|
subject
|
284
284
|
end
|
285
285
|
|
@@ -291,7 +291,7 @@ describe Algebra::Rename, '#optimize' do
|
|
291
291
|
let(:operand) { limit.rename(id: :other_id).reverse }
|
292
292
|
let(:aliases) { { other_id: :id } }
|
293
293
|
|
294
|
-
it 'pushes the object under the
|
294
|
+
it 'pushes the object under the sorted, limit and reverse, and then cancel it out' do
|
295
295
|
should eql(relation.sort_by { |r| [r.id, r.name] }.take(2).reverse)
|
296
296
|
end
|
297
297
|
|
@@ -300,17 +300,17 @@ describe Algebra::Rename, '#optimize' do
|
|
300
300
|
end
|
301
301
|
|
302
302
|
it 'does not execute body#each' do
|
303
|
-
body.
|
303
|
+
expect(body).not_to receive(:each)
|
304
304
|
subject
|
305
305
|
end
|
306
306
|
|
307
307
|
it_should_behave_like 'an optimize method'
|
308
308
|
end
|
309
309
|
|
310
|
-
context 'containing
|
310
|
+
context 'containing a sorted operation' do
|
311
311
|
let(:operand) { relation.sort_by { |r| [r.id, r.name] } }
|
312
312
|
|
313
|
-
it 'pushes the object under the
|
313
|
+
it 'pushes the object under the sorted' do
|
314
314
|
should eql(relation.rename(aliases).sort_by { |r| [r.other_id, r.name] })
|
315
315
|
end
|
316
316
|
|
@@ -319,18 +319,18 @@ describe Algebra::Rename, '#optimize' do
|
|
319
319
|
end
|
320
320
|
|
321
321
|
it 'does not execute body#each' do
|
322
|
-
body.
|
322
|
+
expect(body).not_to receive(:each)
|
323
323
|
subject
|
324
324
|
end
|
325
325
|
|
326
326
|
it_should_behave_like 'an optimize method'
|
327
327
|
end
|
328
328
|
|
329
|
-
context 'containing
|
329
|
+
context 'containing a sorted operation, containing a object that cancels out' do
|
330
330
|
let(:operand) { relation.rename(id: :other_id).sort_by { |r| [r.other_id, r.name] } }
|
331
331
|
let(:aliases) { { other_id: :id } }
|
332
332
|
|
333
|
-
it 'pushes the object under the
|
333
|
+
it 'pushes the object under the sorted, and then cancel it out' do
|
334
334
|
should eql(relation.sort_by { |r| [r.id, r.name] })
|
335
335
|
end
|
336
336
|
|
@@ -339,7 +339,7 @@ describe Algebra::Rename, '#optimize' do
|
|
339
339
|
end
|
340
340
|
|
341
341
|
it 'does not execute body#each' do
|
342
|
-
body.
|
342
|
+
expect(body).not_to receive(:each)
|
343
343
|
subject
|
344
344
|
end
|
345
345
|
|
@@ -347,10 +347,10 @@ describe Algebra::Rename, '#optimize' do
|
|
347
347
|
end
|
348
348
|
|
349
349
|
context 'containing a limit operation' do
|
350
|
-
let(:
|
351
|
-
let(:operand) {
|
350
|
+
let(:sorted) { relation.sort_by { |r| [r.id, r.name] } }
|
351
|
+
let(:operand) { sorted.take(2) }
|
352
352
|
|
353
|
-
it 'pushes the object under the limit and
|
353
|
+
it 'pushes the object under the limit and sorted' do
|
354
354
|
should eql(relation.rename(aliases).sort_by { |r| [r.other_id, r.name] }.take(2))
|
355
355
|
end
|
356
356
|
|
@@ -359,7 +359,7 @@ describe Algebra::Rename, '#optimize' do
|
|
359
359
|
end
|
360
360
|
|
361
361
|
it 'does not execute body#each' do
|
362
|
-
body.
|
362
|
+
expect(body).not_to receive(:each)
|
363
363
|
subject
|
364
364
|
end
|
365
365
|
|
@@ -367,11 +367,11 @@ describe Algebra::Rename, '#optimize' do
|
|
367
367
|
end
|
368
368
|
|
369
369
|
context 'containing a limit operation, containing a object that cancels out' do
|
370
|
-
let(:
|
371
|
-
let(:operand) {
|
370
|
+
let(:sorted) { relation.sort_by { |r| [r.id, r.name] } }
|
371
|
+
let(:operand) { sorted.rename(id: :other_id).take(2) }
|
372
372
|
let(:aliases) { { other_id: :id } }
|
373
373
|
|
374
|
-
it 'pushes the object under the limit and
|
374
|
+
it 'pushes the object under the limit and sorted, and then cancel it out' do
|
375
375
|
should eql(relation.sort_by { |r| [r.id, r.name] }.take(2))
|
376
376
|
end
|
377
377
|
|
@@ -380,7 +380,7 @@ describe Algebra::Rename, '#optimize' do
|
|
380
380
|
end
|
381
381
|
|
382
382
|
it 'does not execute body#each' do
|
383
|
-
body.
|
383
|
+
expect(body).not_to receive(:each)
|
384
384
|
subject
|
385
385
|
end
|
386
386
|
|
@@ -388,10 +388,10 @@ describe Algebra::Rename, '#optimize' do
|
|
388
388
|
end
|
389
389
|
|
390
390
|
context 'containing an offset operation' do
|
391
|
-
let(:
|
392
|
-
let(:operand) {
|
391
|
+
let(:sorted) { relation.sort_by { |r| [r.id, r.name] } }
|
392
|
+
let(:operand) { sorted.drop(1) }
|
393
393
|
|
394
|
-
it 'pushes the object under the offset and
|
394
|
+
it 'pushes the object under the offset and sorted' do
|
395
395
|
should eql(relation.rename(aliases).sort_by { |r| [r.other_id, r.name] }.drop(1))
|
396
396
|
end
|
397
397
|
|
@@ -400,7 +400,7 @@ describe Algebra::Rename, '#optimize' do
|
|
400
400
|
end
|
401
401
|
|
402
402
|
it 'does not execute body#each' do
|
403
|
-
body.
|
403
|
+
expect(body).not_to receive(:each)
|
404
404
|
subject
|
405
405
|
end
|
406
406
|
|
@@ -408,11 +408,11 @@ describe Algebra::Rename, '#optimize' do
|
|
408
408
|
end
|
409
409
|
|
410
410
|
context 'containing an offset operation, containing a object that cancels out' do
|
411
|
-
let(:
|
412
|
-
let(:operand) {
|
411
|
+
let(:sorted) { relation.sort_by { |r| [r.id, r.name] } }
|
412
|
+
let(:operand) { sorted.rename(id: :other_id).drop(1) }
|
413
413
|
let(:aliases) { { other_id: :id } }
|
414
414
|
|
415
|
-
it 'pushes the object under the offset and
|
415
|
+
it 'pushes the object under the offset and sorted, and then cancel it out' do
|
416
416
|
should eql(relation.sort_by { |r| [r.id, r.name] }.drop(1))
|
417
417
|
end
|
418
418
|
|
@@ -421,7 +421,7 @@ describe Algebra::Rename, '#optimize' do
|
|
421
421
|
end
|
422
422
|
|
423
423
|
it 'does not execute body#each' do
|
424
|
-
body.
|
424
|
+
expect(body).not_to receive(:each)
|
425
425
|
subject
|
426
426
|
end
|
427
427
|
|