axiom-optimizer 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +2 -1
  3. data/.rubocop.yml +6 -0
  4. data/.travis.yml +16 -20
  5. data/CONTRIBUTING.md +1 -2
  6. data/Gemfile +3 -1
  7. data/Gemfile.devtools +28 -18
  8. data/README.md +7 -13
  9. data/TODO +6 -5
  10. data/axiom-optimizer.gemspec +3 -3
  11. data/config/flay.yml +1 -1
  12. data/config/reek.yml +5 -29
  13. data/config/rubocop.yml +16 -10
  14. data/lib/axiom/optimizer.rb +3 -7
  15. data/lib/axiom/optimizer/algebra/difference.rb +2 -2
  16. data/lib/axiom/optimizer/algebra/extension.rb +6 -6
  17. data/lib/axiom/optimizer/algebra/intersection.rb +2 -2
  18. data/lib/axiom/optimizer/algebra/join.rb +4 -4
  19. data/lib/axiom/optimizer/algebra/product.rb +4 -4
  20. data/lib/axiom/optimizer/algebra/projection.rb +5 -5
  21. data/lib/axiom/optimizer/algebra/rename.rb +10 -10
  22. data/lib/axiom/optimizer/algebra/restriction.rb +8 -9
  23. data/lib/axiom/optimizer/algebra/summarization.rb +7 -7
  24. data/lib/axiom/optimizer/algebra/union.rb +2 -2
  25. data/lib/axiom/optimizer/function.rb +4 -6
  26. data/lib/axiom/optimizer/function/binary.rb +2 -2
  27. data/lib/axiom/optimizer/function/connective/binary.rb +1 -1
  28. data/lib/axiom/optimizer/function/connective/negation.rb +1 -1
  29. data/lib/axiom/optimizer/function/predicate.rb +1 -1
  30. data/lib/axiom/optimizer/function/predicate/comparable.rb +8 -6
  31. data/lib/axiom/optimizer/function/predicate/enumerable.rb +2 -2
  32. data/lib/axiom/optimizer/function/unary.rb +1 -1
  33. data/lib/axiom/optimizer/relation/operation/binary.rb +12 -12
  34. data/lib/axiom/optimizer/relation/operation/reverse.rb +9 -9
  35. data/lib/axiom/optimizer/relation/operation/{order.rb → sorted.rb} +15 -15
  36. data/lib/axiom/optimizer/relation/operation/unary.rb +7 -7
  37. data/lib/axiom/optimizer/support/predicate_partition.rb +11 -13
  38. data/lib/axiom/optimizer/version.rb +1 -1
  39. data/spec/integration/axiom/algebra/difference/optimize_spec.rb +12 -12
  40. data/spec/integration/axiom/algebra/intersection/optimize_spec.rb +12 -12
  41. data/spec/integration/axiom/algebra/join/optimize_spec.rb +6 -6
  42. data/spec/integration/axiom/algebra/product/optimize_spec.rb +10 -10
  43. data/spec/integration/axiom/algebra/projection/optimize_spec.rb +14 -14
  44. data/spec/integration/axiom/algebra/rename/optimize_spec.rb +38 -38
  45. data/spec/integration/axiom/algebra/restriction/optimize_spec.rb +12 -12
  46. data/spec/integration/axiom/algebra/summarization/optimize_spec.rb +2 -2
  47. data/spec/integration/axiom/algebra/union/optimize_spec.rb +16 -16
  48. data/spec/integration/axiom/function/optimize_spec.rb +1 -1
  49. data/spec/integration/axiom/relation/operation/limit/optimize_spec.rb +20 -20
  50. data/spec/integration/axiom/relation/operation/offset/optimize_spec.rb +14 -14
  51. data/spec/integration/axiom/relation/operation/reverse/optimize_spec.rb +15 -15
  52. data/spec/integration/axiom/relation/operation/{order → sorted}/optimize_spec.rb +6 -6
  53. data/spec/integration/axiom/relation/optimize_spec.rb +1 -1
  54. data/spec/shared/function_connective_binary_optimize_behavior.rb +8 -2
  55. data/spec/shared/optimize_method_behavior.rb +0 -11
  56. data/spec/spec_helper.rb +9 -9
  57. data/spec/support/config_alias.rb +2 -0
  58. data/spec/unit/axiom/optimizer/algebra/extension/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +3 -3
  59. data/spec/unit/axiom/optimizer/algebra/extension/{order_operand → sorted_operand}/optimize_spec.rb +1 -1
  60. data/spec/unit/axiom/optimizer/algebra/rename/limit_operand/optimize_spec.rb +3 -3
  61. data/spec/unit/axiom/optimizer/algebra/rename/offset_operand/optimize_spec.rb +3 -3
  62. data/spec/unit/axiom/optimizer/algebra/rename/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +3 -3
  63. data/spec/unit/axiom/optimizer/algebra/rename/{order_operand → sorted_operand}/optimize_spec.rb +2 -2
  64. data/spec/unit/axiom/optimizer/algebra/restriction/combination_operand/optimize_spec.rb +1 -1
  65. data/spec/unit/axiom/optimizer/algebra/restriction/predicate_spec.rb +5 -4
  66. data/spec/unit/axiom/optimizer/algebra/restriction/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +3 -3
  67. data/spec/unit/axiom/optimizer/algebra/restriction/{order_operand → sorted_operand}/optimize_spec.rb +1 -1
  68. data/spec/unit/axiom/optimizer/algebra/summarization/empty_operand/class_methods/extension_default_spec.rb +1 -1
  69. data/spec/unit/axiom/optimizer/algebra/summarization/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +3 -3
  70. data/spec/unit/axiom/optimizer/algebra/summarization/{order_operand → sorted_operand}/optimize_spec.rb +1 -1
  71. data/spec/unit/axiom/optimizer/algebra/summarization/summarize_per_spec.rb +1 -1
  72. data/spec/unit/axiom/optimizer/function/binary/constant_operands/optimizable_predicate_spec.rb +4 -4
  73. data/spec/unit/axiom/optimizer/function/connective/conjunction/contradiction/optimizable_predicate_spec.rb +2 -2
  74. data/spec/unit/axiom/optimizer/function/connective/disjunction/tautology/optimizable_predicate_spec.rb +2 -2
  75. data/spec/unit/axiom/optimizer/function/unary/constant_operand/optimizable_predicate_spec.rb +1 -1
  76. data/spec/unit/axiom/optimizer/function/util/class_methods/max_spec.rb +1 -1
  77. data/spec/unit/axiom/optimizer/function/util/class_methods/min_spec.rb +1 -1
  78. data/spec/unit/axiom/optimizer/optimizable/optimize_spec.rb +3 -3
  79. data/spec/unit/axiom/optimizer/optimizable_predicate_spec.rb +1 -5
  80. data/spec/unit/axiom/optimizer/optimize_spec.rb +1 -5
  81. data/spec/unit/axiom/optimizer/relation/operation/binary/{order_left → sorted_left}/optimizable_predicate_spec.rb +3 -3
  82. data/spec/unit/axiom/optimizer/relation/operation/binary/{order_left → sorted_left}/optimize_spec.rb +1 -1
  83. data/spec/unit/axiom/optimizer/relation/operation/binary/{order_right → sorted_right}/optimizable_predicate_spec.rb +3 -3
  84. data/spec/unit/axiom/optimizer/relation/operation/binary/{order_right → sorted_right}/optimize_spec.rb +1 -1
  85. data/spec/unit/axiom/optimizer/relation/operation/limit/equal_limit_operand/optimize_spec.rb +2 -2
  86. data/spec/unit/axiom/optimizer/relation/operation/limit/limit_operand/optimize_spec.rb +4 -4
  87. data/spec/unit/axiom/optimizer/relation/operation/limit/unoptimized_operand/optimize_spec.rb +3 -3
  88. data/spec/unit/axiom/optimizer/relation/operation/limit/zero_limit/optimize_spec.rb +2 -2
  89. data/spec/unit/axiom/optimizer/relation/operation/offset/offset_operand/optimize_spec.rb +3 -3
  90. data/spec/unit/axiom/optimizer/relation/operation/offset/unoptimized_operand/optimize_spec.rb +3 -3
  91. data/spec/unit/axiom/optimizer/relation/operation/offset/zero_offset/optimize_spec.rb +3 -3
  92. data/spec/unit/axiom/optimizer/relation/operation/reverse/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +3 -3
  93. data/spec/unit/axiom/optimizer/relation/operation/reverse/{order_operand → sorted_operand}/optimize_spec.rb +2 -2
  94. data/spec/unit/axiom/optimizer/relation/operation/reverse/unoptimized_operand/optimize_spec.rb +4 -4
  95. data/spec/unit/axiom/optimizer/relation/operation/{order → sorted}/one_limit_operand/optimizable_predicate_spec.rb +2 -2
  96. data/spec/unit/axiom/optimizer/relation/operation/{order → sorted}/one_limit_operand/optimize_spec.rb +1 -1
  97. data/spec/unit/axiom/optimizer/relation/operation/{order/order_operand → sorted/sorted_operand}/optimizable_predicate_spec.rb +4 -4
  98. data/spec/unit/axiom/optimizer/relation/operation/{order/order_operand → sorted/sorted_operand}/optimize_spec.rb +5 -5
  99. data/spec/unit/axiom/optimizer/relation/operation/{order → sorted}/unoptimized_operand/optimizable_predicate_spec.rb +2 -2
  100. data/spec/unit/axiom/optimizer/relation/operation/{order → sorted}/unoptimized_operand/optimize_spec.rb +2 -2
  101. data/spec/unit/axiom/optimizer/relation/operation/unary/{order_operand → sorted_operand}/optimizable_predicate_spec.rb +4 -4
  102. data/spec/unit/axiom/optimizer/relation/operation/unary/{order_operand → sorted_operand}/optimize_spec.rb +2 -2
  103. metadata +291 -47
  104. data/spec/support/ice_nine_config.rb +0 -6
@@ -7,13 +7,13 @@ describe Relation::Operation::Reverse, '#optimize' do
7
7
 
8
8
  let(:body) { LazyEnumerable.new([[1], [2], [3]]) }
9
9
  let(:relation) { Relation.new([[:id, Integer]], body) }
10
- let(:order) { relation.sort_by { |r| r.id } }
11
- let(:operand) { order }
10
+ let(:sorted) { relation.sort_by { |r| r.id } }
11
+ let(:operand) { sorted }
12
12
  let(:object) { described_class.new(operand) }
13
13
 
14
14
  context 'with a object operation' do
15
- let(:limit) { order.take(2) }
16
- let(:operand) { limit.reverse }
15
+ let(:limit) { sorted.take(2) }
16
+ let(:operand) { limit.reverse }
17
17
 
18
18
  it 'cancels out the operations and return the contained operation' do
19
19
  should be(limit)
@@ -24,7 +24,7 @@ describe Relation::Operation::Reverse, '#optimize' do
24
24
  end
25
25
 
26
26
  it 'does not execute body#each' do
27
- body.should_not_receive(:each)
27
+ expect(body).not_to receive(:each)
28
28
  subject
29
29
  end
30
30
 
@@ -32,7 +32,7 @@ describe Relation::Operation::Reverse, '#optimize' do
32
32
  end
33
33
 
34
34
  context 'with a object operation when optimized' do
35
- let(:limit) { order.take(2) }
35
+ let(:limit) { sorted.take(2) }
36
36
  let(:operand) { limit.reverse.rename({}) }
37
37
 
38
38
  it 'cancels out the operations and return the contained operation' do
@@ -44,14 +44,14 @@ describe Relation::Operation::Reverse, '#optimize' do
44
44
  end
45
45
 
46
46
  it 'does not execute body#each' do
47
- body.should_not_receive(:each)
47
+ expect(body).not_to receive(:each)
48
48
  subject
49
49
  end
50
50
 
51
51
  it_should_behave_like 'an optimize method'
52
52
  end
53
53
 
54
- context 'with an order operation' do
54
+ context 'with a sorted operation' do
55
55
  it { should eql(relation.sort_by { object.directions }) }
56
56
 
57
57
  it 'returns an equivalent relation to the unoptimized operation' do
@@ -59,15 +59,15 @@ describe Relation::Operation::Reverse, '#optimize' do
59
59
  end
60
60
 
61
61
  it 'does not execute body#each' do
62
- body.should_not_receive(:each)
62
+ expect(body).not_to receive(:each)
63
63
  subject
64
64
  end
65
65
 
66
66
  it_should_behave_like 'an optimize method'
67
67
  end
68
68
 
69
- context 'with an order operation when optimized' do
70
- let(:operand) { order.rename({}) }
69
+ context 'with a sorted operation when optimized' do
70
+ let(:operand) { sorted.rename({}) }
71
71
 
72
72
  it { should eql(relation.sort_by { object.directions }) }
73
73
 
@@ -76,7 +76,7 @@ describe Relation::Operation::Reverse, '#optimize' do
76
76
  end
77
77
 
78
78
  it 'does not execute body#each' do
79
- body.should_not_receive(:each)
79
+ expect(body).not_to receive(:each)
80
80
  subject
81
81
  end
82
82
 
@@ -84,17 +84,17 @@ describe Relation::Operation::Reverse, '#optimize' do
84
84
  end
85
85
 
86
86
  context 'with an optimizable operation' do
87
- let(:limit) { order.take(2) }
87
+ let(:limit) { sorted.take(2) }
88
88
  let(:operand) { limit.rename({}) }
89
89
 
90
- it { should eql(order.take(2).reverse) }
90
+ it { should eql(sorted.take(2).reverse) }
91
91
 
92
92
  it 'returns an equivalent relation to the unoptimized operation' do
93
93
  should == object
94
94
  end
95
95
 
96
96
  it 'does not execute body#each' do
97
- body.should_not_receive(:each)
97
+ expect(body).not_to receive(:each)
98
98
  subject
99
99
  end
100
100
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Relation::Operation::Order, '#optimize' do
5
+ describe Relation::Operation::Sorted, '#optimize' do
6
6
  subject { object.optimize }
7
7
 
8
8
  let(:body) { LazyEnumerable.new([[1], [2], [3]]) }
@@ -15,7 +15,7 @@ describe Relation::Operation::Order, '#optimize' do
15
15
  it { should be(object) }
16
16
 
17
17
  it 'does not execute body#each' do
18
- body.should_not_receive(:each)
18
+ expect(body).not_to receive(:each)
19
19
  subject
20
20
  end
21
21
 
@@ -32,7 +32,7 @@ describe Relation::Operation::Order, '#optimize' do
32
32
  end
33
33
 
34
34
  it 'does not execute body#each' do
35
- body.should_not_receive(:each)
35
+ expect(body).not_to receive(:each)
36
36
  subject
37
37
  end
38
38
 
@@ -49,7 +49,7 @@ describe Relation::Operation::Order, '#optimize' do
49
49
  end
50
50
 
51
51
  it 'does not execute body#each' do
52
- body.should_not_receive(:each)
52
+ expect(body).not_to receive(:each)
53
53
  subject
54
54
  end
55
55
 
@@ -66,7 +66,7 @@ describe Relation::Operation::Order, '#optimize' do
66
66
  end
67
67
 
68
68
  it 'does not execute body#each' do
69
- body.should_not_receive(:each)
69
+ expect(body).not_to receive(:each)
70
70
  subject
71
71
  end
72
72
 
@@ -83,7 +83,7 @@ describe Relation::Operation::Order, '#optimize' do
83
83
  end
84
84
 
85
85
  it 'does not execute body#each' do
86
- body.should_not_receive(:each)
86
+ expect(body).not_to receive(:each)
87
87
  subject
88
88
  end
89
89
 
@@ -13,7 +13,7 @@ describe Relation, '#optimize' do
13
13
  end
14
14
 
15
15
  it 'calls self.class.optimizer' do
16
- described_class.should_receive(:optimizer).and_return(nil)
16
+ expect(described_class).to receive(:optimizer).and_return(nil)
17
17
  subject
18
18
  end
19
19
 
@@ -79,7 +79,10 @@ shared_examples_for 'Function::Connective::Binary#optimize' do
79
79
  let(:right) { double('Binary', class: described_class, left: left, :optimized? => true) }
80
80
 
81
81
  before do
82
- right.stub(optimize: right, :frozen? => true, memoize: right, memoized: right)
82
+ allow(right).to receive(:optimize).and_return(right)
83
+ allow(right).to receive(:frozen?).and_return(true)
84
+ allow(right).to receive(:memoize).and_return(right)
85
+ allow(right).to receive(:memoized).and_return(right)
83
86
  end
84
87
 
85
88
  it { should be(right) }
@@ -92,7 +95,10 @@ shared_examples_for 'Function::Connective::Binary#optimize' do
92
95
  let(:right) { attribute.eq(1) }
93
96
 
94
97
  before do
95
- left.stub(optimize: left, :frozen? => true, memoize: left, memoized: left)
98
+ allow(left).to receive(:optimize).and_return(left)
99
+ allow(left).to receive(:frozen?).and_return(true)
100
+ allow(left).to receive(:memoize).and_return(left)
101
+ allow(left).to receive(:memoized).and_return(left)
96
102
  end
97
103
 
98
104
  it { should be(left) }
@@ -2,15 +2,4 @@
2
2
 
3
3
  shared_examples_for 'an optimize method' do
4
4
  it_should_behave_like 'an idempotent method'
5
-
6
- it 'it memoizes itself for #optimize' do
7
- optimized = subject
8
- expect(optimized.memoized(:optimize)).to be(optimized)
9
- end
10
-
11
- it 'does not optimize further' do
12
- optimized = subject
13
- optimized.memoize(:optimize, nil) # clear memoized value
14
- expect(optimized.optimize).to eql(optimized)
15
- end
16
5
  end
@@ -1,7 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'devtools/spec_helper'
4
-
5
3
  if ENV['COVERAGE'] == 'true'
6
4
  require 'simplecov'
7
5
  require 'coveralls'
@@ -12,21 +10,23 @@ if ENV['COVERAGE'] == 'true'
12
10
  ]
13
11
 
14
12
  SimpleCov.start do
15
- command_name 'spec:unit'
16
- add_filter 'config'
17
- add_filter 'spec'
13
+ command_name 'spec:unit'
14
+
15
+ add_filter 'config'
16
+ add_filter 'spec'
17
+ add_filter 'vendor'
18
+
18
19
  minimum_coverage 100
19
20
  end
20
21
  end
21
22
 
23
+ require 'ice_nine'
24
+ require 'devtools/spec_helper'
22
25
  require 'axiom-optimizer'
23
26
 
24
27
  include Axiom
25
28
 
26
- # Require spec support files and shared behavior
27
- Dir[File.expand_path('../{support,shared}/**/*.rb', __FILE__)].each do |file|
28
- require file.chomp('.rb')
29
- end
29
+ Types.finalize
30
30
 
31
31
  RSpec.configure do |config|
32
32
  config.expect_with :rspec do |expect_with|
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'rbconfig'
2
4
 
3
5
  ::Config = RbConfig unless defined?(::Config)
@@ -2,20 +2,20 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Optimizer::Algebra::Extension::OrderOperand, '#optimizable?' do
5
+ describe Optimizer::Algebra::Extension::SortedOperand, '#optimizable?' do
6
6
  subject { object.optimizable? }
7
7
 
8
8
  let(:base) { Relation.new([[:id, Integer]], LazyEnumerable.new) }
9
9
  let(:relation) { operand.extend {} }
10
10
  let(:object) { described_class.new(relation) }
11
11
 
12
- context 'when operand is an order' do
12
+ context 'when operand is sorted' do
13
13
  let(:operand) { base.sort_by { |r| r.id } }
14
14
 
15
15
  it { should be(true) }
16
16
  end
17
17
 
18
- context 'when operand is not an order' do
18
+ context 'when operand is not sorted' do
19
19
  let(:operand) { base }
20
20
 
21
21
  it { should be(false) }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Optimizer::Algebra::Extension::OrderOperand, '#optimize' do
5
+ describe Optimizer::Algebra::Extension::SortedOperand, '#optimize' do
6
6
  subject { object.optimize }
7
7
 
8
8
  let(:base) { Relation.new([[:id, Integer]], LazyEnumerable.new) }
@@ -7,8 +7,8 @@ describe Optimizer::Algebra::Rename::LimitOperand, '#optimize' do
7
7
 
8
8
  let(:header) { Relation::Header.coerce([[:id, Integer]]) }
9
9
  let(:base) { Relation.new(header, LazyEnumerable.new([[1]])) }
10
- let(:order) { base.sort_by { |r| r.id } }
11
- let(:relation) { order.take(2).rename(id: :other_id) }
10
+ let(:sorted) { base.sort_by { |r| r.id } }
11
+ let(:relation) { sorted.take(2).rename(id: :other_id) }
12
12
  let(:object) { described_class.new(relation) }
13
13
 
14
14
  before do
@@ -17,7 +17,7 @@ describe Optimizer::Algebra::Rename::LimitOperand, '#optimize' do
17
17
 
18
18
  it { should be_kind_of(Relation::Operation::Limit) }
19
19
 
20
- its(:operand) { should eql(order.rename(id: :other_id)) }
20
+ its(:operand) { should eql(sorted.rename(id: :other_id)) }
21
21
 
22
22
  its(:limit) { should == 2 }
23
23
  end
@@ -7,8 +7,8 @@ describe Optimizer::Algebra::Rename::OffsetOperand, '#optimize' do
7
7
 
8
8
  let(:header) { Relation::Header.coerce([[:id, Integer]]) }
9
9
  let(:base) { Relation.new(header, LazyEnumerable.new([[1]])) }
10
- let(:order) { base.sort_by { |r| r.id } }
11
- let(:relation) { order.drop(1).rename(id: :other_id) }
10
+ let(:sorted) { base.sort_by { |r| r.id } }
11
+ let(:relation) { sorted.drop(1).rename(id: :other_id) }
12
12
  let(:object) { described_class.new(relation) }
13
13
 
14
14
  before do
@@ -17,7 +17,7 @@ describe Optimizer::Algebra::Rename::OffsetOperand, '#optimize' do
17
17
 
18
18
  it { should be_kind_of(Relation::Operation::Offset) }
19
19
 
20
- its(:operand) { should eql(order.rename(id: :other_id)) }
20
+ its(:operand) { should eql(sorted.rename(id: :other_id)) }
21
21
 
22
22
  its(:offset) { should == 1 }
23
23
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Optimizer::Algebra::Rename::OrderOperand, '#optimizable?' do
5
+ describe Optimizer::Algebra::Rename::SortedOperand, '#optimizable?' do
6
6
  subject { object.optimizable? }
7
7
 
8
8
  let(:base) { Relation.new([[:id, Integer]], LazyEnumerable.new([[1]])) }
@@ -14,13 +14,13 @@ describe Optimizer::Algebra::Rename::OrderOperand, '#optimizable?' do
14
14
  expect(object.operation).to be_kind_of(Algebra::Rename)
15
15
  end
16
16
 
17
- context 'when the operand is an order operation' do
17
+ context 'when the operand is sorted' do
18
18
  let(:operand) { base.sort_by { |r| r.id } }
19
19
 
20
20
  it { should be(true) }
21
21
  end
22
22
 
23
- context 'when the operand is not an order operation' do
23
+ context 'when the operand is not sorted' do
24
24
  let(:operand) { base }
25
25
 
26
26
  it { should be(false) }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Optimizer::Algebra::Rename::OrderOperand, '#optimize' do
5
+ describe Optimizer::Algebra::Rename::SortedOperand, '#optimize' do
6
6
  subject { object.optimize }
7
7
 
8
8
  let(:base) { Relation.new([[:id, Integer]], LazyEnumerable.new([[1]])) }
@@ -14,7 +14,7 @@ describe Optimizer::Algebra::Rename::OrderOperand, '#optimize' do
14
14
  expect(object).to be_optimizable
15
15
  end
16
16
 
17
- it { should be_kind_of(Relation::Operation::Order) }
17
+ it { should be_kind_of(Relation::Operation::Sorted) }
18
18
 
19
19
  its(:operand) { should eql(base.rename(id: :other_id)) }
20
20
 
@@ -15,7 +15,7 @@ describe Optimizer::Algebra::Restriction::CombinationOperand, '#optimize' do
15
15
  expect(object).to be_optimizable
16
16
  end
17
17
 
18
- specify { expect { subject }.to raise_error(NotImplementedError, 'Axiom::Optimizer::Algebra::Restriction::CombinationOperand#relation_method must be implemented') }
18
+ specify { expect { subject }.to raise_error(NotImplementedError, 'Axiom::Optimizer::Algebra::Restriction::CombinationOperand#relation_method is not implemented') }
19
19
 
20
20
  context 'with a defined relation_method' do
21
21
  let(:described_class) { Class.new(Optimizer::Algebra::Restriction::CombinationOperand) }
@@ -5,10 +5,11 @@ require 'spec_helper'
5
5
  describe Optimizer::Algebra::Restriction, '#predicate' do
6
6
  subject { object.predicate }
7
7
 
8
- let(:base) { Relation.new([[:id, Integer]], [[1]]) }
9
- let(:predicate) { base[:id].eq(1) }
10
- let(:relation) { base.restrict { predicate } }
11
- let(:object) { described_class.new(relation) }
8
+ let(:object) { described_class.new(relation) }
9
+ let(:described_class) { Class.new(Optimizer::Algebra::Restriction) }
10
+ let(:base) { Relation.new([[:id, Integer]], [[1]]) }
11
+ let(:predicate) { base[:id].eq(1) }
12
+ let(:relation) { base.restrict { predicate } }
12
13
 
13
14
  before do
14
15
  expect(object.operation).to be_kind_of(Algebra::Restriction)
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Optimizer::Algebra::Restriction::OrderOperand, '#optimizable?' do
5
+ describe Optimizer::Algebra::Restriction::SortedOperand, '#optimizable?' do
6
6
  subject { object.optimizable? }
7
7
 
8
8
  let(:base) { Relation.new([[:id, Integer]], LazyEnumerable.new([[1]])) }
@@ -14,13 +14,13 @@ describe Optimizer::Algebra::Restriction::OrderOperand, '#optimizable?' do
14
14
  expect(object.operation).to be_kind_of(Algebra::Restriction)
15
15
  end
16
16
 
17
- context 'when the operand is an order operation' do
17
+ context 'when the operand is sorted' do
18
18
  let(:operand) { base.sort_by { |r| r.id } }
19
19
 
20
20
  it { should be(true) }
21
21
  end
22
22
 
23
- context 'when the operand is not an order operation' do
23
+ context 'when the operand is not sorted' do
24
24
  let(:operand) { base }
25
25
 
26
26
  it { should be(false) }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Optimizer::Algebra::Restriction::OrderOperand, '#optimize' do
5
+ describe Optimizer::Algebra::Restriction::SortedOperand, '#optimize' do
6
6
  subject { object.optimize }
7
7
 
8
8
  let(:base) { Relation.new([[:id, Integer]], LazyEnumerable.new([[1]])) }
@@ -15,7 +15,7 @@ describe Optimizer::Algebra::Summarization::EmptyOperand, '.extension_default' d
15
15
  end
16
16
 
17
17
  context 'when the function does not have a default' do
18
- let(:function) { proc {} }
18
+ let(:function) { proc {} }
19
19
 
20
20
  it { should be_nil }
21
21
  end
@@ -2,20 +2,20 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Optimizer::Algebra::Summarization::OrderOperand, '#optimizable?' do
5
+ describe Optimizer::Algebra::Summarization::SortedOperand, '#optimizable?' do
6
6
  subject { object.optimizable? }
7
7
 
8
8
  let(:base) { Relation.new([[:id, Integer]], LazyEnumerable.new) }
9
9
  let(:relation) { operand.summarize([]) {} }
10
10
  let(:object) { described_class.new(relation) }
11
11
 
12
- context 'when operand is an order' do
12
+ context 'when operand is sorted' do
13
13
  let(:operand) { base.sort_by { |r| r.id } }
14
14
 
15
15
  it { should be(true) }
16
16
  end
17
17
 
18
- context 'when operand is not an order' do
18
+ context 'when operand is not sorted' do
19
19
  let(:operand) { base }
20
20
 
21
21
  it { should be(false) }