axiom-sql-generator 0.1.0 → 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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +6 -0
  3. data/.ruby-gemset +1 -0
  4. data/.travis.yml +17 -23
  5. data/CONTRIBUTING.md +1 -2
  6. data/Gemfile +10 -3
  7. data/Gemfile.devtools +39 -27
  8. data/README.md +5 -33
  9. data/axiom-sql-generator.gemspec +3 -5
  10. data/config/devtools.yml +2 -0
  11. data/config/flay.yml +1 -1
  12. data/config/reek.yml +1 -1
  13. data/config/rubocop.yml +59 -0
  14. data/lib/axiom/sql/generator/core_ext/date_time.rb +5 -6
  15. data/lib/axiom/sql/generator/direction.rb +4 -4
  16. data/lib/axiom/sql/generator/function/predicate.rb +1 -1
  17. data/lib/axiom/sql/generator/relation.rb +12 -11
  18. data/lib/axiom/sql/generator/relation/binary.rb +1 -1
  19. data/lib/axiom/sql/generator/relation/insertion.rb +1 -1
  20. data/lib/axiom/sql/generator/relation/unary.rb +20 -20
  21. data/lib/axiom/sql/generator/version.rb +1 -1
  22. data/lib/axiom/sql/generator/visitor.rb +3 -3
  23. data/spec/spec_helper.rb +11 -10
  24. data/spec/support/config_alias.rb +2 -0
  25. data/spec/unit/axiom/sql/generator/direction/{visit_axiom_relation_operation_order_ascending_spec.rb → visit_axiom_relation_operation_sorted_ascending_spec.rb} +2 -2
  26. data/spec/unit/axiom/sql/generator/direction/{visit_axiom_relation_operation_order_descending_spec.rb → visit_axiom_relation_operation_sorted_descending_spec.rb} +2 -2
  27. data/spec/unit/axiom/sql/generator/function/predicate/visit_axiom_function_predicate_exclusion_spec.rb +1 -1
  28. data/spec/unit/axiom/sql/generator/function/predicate/visit_axiom_function_predicate_inclusion_spec.rb +1 -1
  29. data/spec/unit/axiom/sql/generator/function/predicate/visit_axiom_function_predicate_inequality_spec.rb +3 -3
  30. data/spec/unit/axiom/sql/generator/literal/visit_enumerable_spec.rb +1 -1
  31. data/spec/unit/axiom/sql/generator/relation/binary/base/to_subquery_spec.rb +7 -7
  32. data/spec/unit/axiom/sql/generator/relation/binary/base/visit_axiom_relation_base_spec.rb +8 -8
  33. data/spec/unit/axiom/sql/generator/relation/binary/to_s_spec.rb +7 -7
  34. data/spec/unit/axiom/sql/generator/relation/binary/to_subquery_spec.rb +7 -7
  35. data/spec/unit/axiom/sql/generator/relation/binary/visit_axiom_algebra_join_spec.rb +20 -20
  36. data/spec/unit/axiom/sql/generator/relation/binary/visit_axiom_algebra_product_spec.rb +26 -26
  37. data/spec/unit/axiom/sql/generator/relation/class_methods/visit_spec.rb +10 -10
  38. data/spec/unit/axiom/sql/generator/relation/insertion/to_subquery_spec.rb +2 -2
  39. data/spec/unit/axiom/sql/generator/relation/insertion/visit_axiom_relation_operation_insertion_spec.rb +23 -23
  40. data/spec/unit/axiom/sql/generator/relation/materialized/visit_axiom_relation_materialized_spec.rb +3 -3
  41. data/spec/unit/axiom/sql/generator/relation/materialized/visited_spec.rb +2 -2
  42. data/spec/unit/axiom/sql/generator/relation/set/class_methods/normalize_operand_headers_spec.rb +5 -5
  43. data/spec/unit/axiom/sql/generator/relation/set/to_s_spec.rb +7 -7
  44. data/spec/unit/axiom/sql/generator/relation/set/to_subquery_spec.rb +7 -7
  45. data/spec/unit/axiom/sql/generator/relation/set/visit_axiom_algebra_difference_spec.rb +19 -19
  46. data/spec/unit/axiom/sql/generator/relation/set/visit_axiom_algebra_intersection_spec.rb +19 -19
  47. data/spec/unit/axiom/sql/generator/relation/set/visit_axiom_algebra_union_spec.rb +19 -19
  48. data/spec/unit/axiom/sql/generator/relation/to_s_spec.rb +9 -9
  49. data/spec/unit/axiom/sql/generator/relation/to_sql_spec.rb +8 -8
  50. data/spec/unit/axiom/sql/generator/relation/to_subquery_spec.rb +9 -9
  51. data/spec/unit/axiom/sql/generator/relation/unary/to_s_spec.rb +9 -9
  52. data/spec/unit/axiom/sql/generator/relation/unary/to_subquery_spec.rb +11 -11
  53. data/spec/unit/axiom/sql/generator/relation/unary/visit_axiom_algebra_extension_spec.rb +17 -17
  54. data/spec/unit/axiom/sql/generator/relation/unary/visit_axiom_algebra_projection_spec.rb +23 -23
  55. data/spec/unit/axiom/sql/generator/relation/unary/visit_axiom_algebra_rename_spec.rb +19 -19
  56. data/spec/unit/axiom/sql/generator/relation/unary/visit_axiom_algebra_restriction_spec.rb +22 -22
  57. data/spec/unit/axiom/sql/generator/relation/unary/visit_axiom_algebra_summarization_spec.rb +48 -48
  58. data/spec/unit/axiom/sql/generator/relation/unary/visit_axiom_relation_base_spec.rb +8 -8
  59. data/spec/unit/axiom/sql/generator/relation/unary/visit_axiom_relation_operation_limit_spec.rb +24 -24
  60. data/spec/unit/axiom/sql/generator/relation/unary/visit_axiom_relation_operation_offset_spec.rb +24 -24
  61. data/spec/unit/axiom/sql/generator/relation/unary/visit_axiom_relation_operation_reverse_spec.rb +26 -26
  62. data/spec/unit/axiom/sql/generator/relation/unary/{visit_axiom_relation_operation_order_spec.rb → visit_axiom_relation_operation_sorted_spec.rb} +28 -28
  63. data/spec/unit/axiom/sql/generator/relation/visit_spec.rb +3 -3
  64. data/spec/unit/axiom/sql/generator/relation/visited_spec.rb +7 -7
  65. data/spec/unit/axiom/sql/generator/visitor/visit_spec.rb +2 -2
  66. metadata +22 -41
  67. data/.rvmrc +0 -1
@@ -5,17 +5,17 @@ require 'spec_helper'
5
5
  describe SQL::Generator::Relation::Set, '#visit_axiom_algebra_union' do
6
6
  subject { object.visit_axiom_algebra_union(union) }
7
7
 
8
- let(:relation_name) { 'users' }
9
- let(:id) { Attribute::Integer.new(:id) }
10
- let(:name) { Attribute::String.new(:name) }
11
- let(:age) { Attribute::Integer.new(:age, :required => false) }
12
- let(:header) { [ id, name, age ] }
13
- let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
14
- let(:base_relation) { Relation::Base.new(relation_name, header, body) }
15
- let(:left) { operand }
16
- let(:right) { operand }
17
- let(:union) { left.union(right) }
18
- let(:object) { described_class.new }
8
+ let(:relation_name) { 'users' }
9
+ let(:id) { Attribute::Integer.new(:id) }
10
+ let(:name) { Attribute::String.new(:name) }
11
+ let(:age) { Attribute::Integer.new(:age, required: false) }
12
+ let(:header) { [id, name, age] }
13
+ let(:body) { [[1, 'Dan Kubb', 35]].each }
14
+ let(:base_relation) { Relation::Base.new(relation_name, header, body) }
15
+ let(:left) { operand }
16
+ let(:right) { operand }
17
+ let(:union) { left.union(right) }
18
+ let(:object) { described_class.new }
19
19
 
20
20
  context 'when the operands are base relations' do
21
21
  let(:operand) { base_relation }
@@ -27,7 +27,7 @@ describe SQL::Generator::Relation::Set, '#visit_axiom_algebra_union' do
27
27
  end
28
28
 
29
29
  context 'when the operands are projections' do
30
- let(:operand) { base_relation.project([ :id, :name ]) }
30
+ let(:operand) { base_relation.project([:id, :name]) }
31
31
 
32
32
  it_should_behave_like 'a generated SQL SELECT query'
33
33
 
@@ -45,7 +45,7 @@ describe SQL::Generator::Relation::Set, '#visit_axiom_algebra_union' do
45
45
  end
46
46
 
47
47
  context 'when the operands are renames' do
48
- let(:operand) { base_relation.rename(:id => :user_id) }
48
+ let(:operand) { base_relation.rename(id: :user_id) }
49
49
 
50
50
  it_should_behave_like 'a generated SQL SELECT query'
51
51
 
@@ -84,7 +84,7 @@ describe SQL::Generator::Relation::Set, '#visit_axiom_algebra_union' do
84
84
  end
85
85
 
86
86
  context 'summarize by a subset of the operand header' do
87
- let(:operand) { base_relation.summarize([ :id, :name ]) { |r| r.add(:count, r.age.count) } }
87
+ let(:operand) { base_relation.summarize([:id, :name]) { |r| r.add(:count, r.age.count) } }
88
88
 
89
89
  it_should_behave_like 'a generated SQL SELECT query'
90
90
 
@@ -93,8 +93,8 @@ describe SQL::Generator::Relation::Set, '#visit_axiom_algebra_union' do
93
93
  end
94
94
  end
95
95
 
96
- context 'when the operand is ordered' do
97
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] } }
96
+ context 'when the operand is sorted' do
97
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] } }
98
98
 
99
99
  it_should_behave_like 'a generated SQL SELECT query'
100
100
 
@@ -103,7 +103,7 @@ describe SQL::Generator::Relation::Set, '#visit_axiom_algebra_union' do
103
103
  end
104
104
 
105
105
  context 'when the operand is reversed' do
106
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.reverse }
106
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] }.reverse }
107
107
 
108
108
  it_should_behave_like 'a generated SQL SELECT query'
109
109
 
@@ -112,7 +112,7 @@ describe SQL::Generator::Relation::Set, '#visit_axiom_algebra_union' do
112
112
  end
113
113
 
114
114
  context 'when the operand is limited' do
115
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.take(1) }
115
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] }.take(1) }
116
116
 
117
117
  it_should_behave_like 'a generated SQL SELECT query'
118
118
 
@@ -121,7 +121,7 @@ describe SQL::Generator::Relation::Set, '#visit_axiom_algebra_union' do
121
121
  end
122
122
 
123
123
  context 'when the operands are offsets' do
124
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.drop(1) }
124
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] }.drop(1) }
125
125
 
126
126
  it_should_behave_like 'a generated SQL SELECT query'
127
127
 
@@ -5,14 +5,14 @@ require 'spec_helper'
5
5
  describe SQL::Generator::Relation, '#to_s' do
6
6
  subject { object.to_s }
7
7
 
8
- let(:described_class) { Class.new(SQL::Generator::Relation) }
9
- let(:id) { Attribute::Integer.new(:id) }
10
- let(:name) { Attribute::String.new(:name) }
11
- let(:age) { Attribute::Integer.new(:age, :required => false) }
12
- let(:header) { [ id, name, age ] }
13
- let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
14
- let(:base_relation) { Relation::Base.new('users', header, body) }
15
- let(:object) { described_class.new }
8
+ let(:described_class) { Class.new(SQL::Generator::Relation) }
9
+ let(:id) { Attribute::Integer.new(:id) }
10
+ let(:name) { Attribute::String.new(:name) }
11
+ let(:age) { Attribute::Integer.new(:age, required: false) }
12
+ let(:header) { [id, name, age] }
13
+ let(:body) { [[1, 'Dan Kubb', 35]].each }
14
+ let(:base_relation) { Relation::Base.new('users', header, body) }
15
+ let(:object) { described_class.new }
16
16
 
17
17
  context 'when no object visited' do
18
18
  it_should_behave_like 'an idempotent method'
@@ -25,7 +25,7 @@ describe SQL::Generator::Relation, '#to_s' do
25
25
  end
26
26
 
27
27
  context 'when an object is visited' do
28
- let(:visitable) { mock('Visitable') }
28
+ let(:visitable) { double('Visitable') }
29
29
 
30
30
  before do
31
31
  described_class.class_eval do
@@ -5,13 +5,13 @@ require 'spec_helper'
5
5
  describe SQL::Generator::Relation, '#to_sql' do
6
6
  subject { object.to_sql }
7
7
 
8
- let(:described_class) { Class.new(SQL::Generator::Relation) }
9
- let(:id) { Attribute::Integer.new(:id) }
10
- let(:name) { Attribute::String.new(:name) }
11
- let(:age) { Attribute::Integer.new(:age, :required => false) }
12
- let(:header) { [ id, name, age ] }
13
- let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
14
- let(:object) { described_class.new }
8
+ let(:described_class) { Class.new(SQL::Generator::Relation) }
9
+ let(:id) { Attribute::Integer.new(:id) }
10
+ let(:name) { Attribute::String.new(:name) }
11
+ let(:age) { Attribute::Integer.new(:age, required: false) }
12
+ let(:header) { [id, name, age] }
13
+ let(:body) { [[1, 'Dan Kubb', 35]].each }
14
+ let(:object) { described_class.new }
15
15
 
16
16
  context 'when no object visited' do
17
17
  it_should_behave_like 'an idempotent method'
@@ -24,7 +24,7 @@ describe SQL::Generator::Relation, '#to_sql' do
24
24
  end
25
25
 
26
26
  context 'when an object is visited' do
27
- let(:visitable) { mock('Visitable') }
27
+ let(:visitable) { double('Visitable') }
28
28
 
29
29
  before do
30
30
  described_class.class_eval do
@@ -5,14 +5,14 @@ require 'spec_helper'
5
5
  describe SQL::Generator::Relation, '#to_subquery' do
6
6
  subject { object.to_subquery }
7
7
 
8
- let(:described_class) { Class.new(SQL::Generator::Relation) }
9
- let(:id) { Attribute::Integer.new(:id) }
10
- let(:name) { Attribute::String.new(:name) }
11
- let(:age) { Attribute::Integer.new(:age, :required => false) }
12
- let(:header) { [ id, name, age ] }
13
- let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
14
- let(:base_relation) { Relation::Base.new('users', header, body) }
15
- let(:object) { described_class.new }
8
+ let(:described_class) { Class.new(SQL::Generator::Relation) }
9
+ let(:id) { Attribute::Integer.new(:id) }
10
+ let(:name) { Attribute::String.new(:name) }
11
+ let(:age) { Attribute::Integer.new(:age, required: false) }
12
+ let(:header) { [id, name, age] }
13
+ let(:body) { [[1, 'Dan Kubb', 35]].each }
14
+ let(:base_relation) { Relation::Base.new('users', header, body) }
15
+ let(:object) { described_class.new }
16
16
 
17
17
  context 'when no object visited' do
18
18
  it_should_behave_like 'an idempotent method'
@@ -25,7 +25,7 @@ describe SQL::Generator::Relation, '#to_subquery' do
25
25
  end
26
26
 
27
27
  context 'when an object is visited' do
28
- let(:visitable) { mock('Visitable') }
28
+ let(:visitable) { double('Visitable') }
29
29
 
30
30
  before do
31
31
  described_class.class_eval do
@@ -5,13 +5,13 @@ require 'spec_helper'
5
5
  describe SQL::Generator::Relation::Unary, '#to_s' do
6
6
  subject { object.to_s }
7
7
 
8
- let(:id) { Attribute::Integer.new(:id) }
9
- let(:name) { Attribute::String.new(:name) }
10
- let(:age) { Attribute::Integer.new(:age, :required => false) }
11
- let(:header) { [ id, name, age ] }
12
- let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
13
- let(:base_relation) { Relation::Base.new('users', header, body) }
14
- let(:object) { described_class.new }
8
+ let(:id) { Attribute::Integer.new(:id) }
9
+ let(:name) { Attribute::String.new(:name) }
10
+ let(:age) { Attribute::Integer.new(:age, required: false) }
11
+ let(:header) { [id, name, age] }
12
+ let(:body) { [[1, 'Dan Kubb', 35]].each }
13
+ let(:base_relation) { Relation::Base.new('users', header, body) }
14
+ let(:object) { described_class.new }
15
15
 
16
16
  context 'when no object visited' do
17
17
  it_should_behave_like 'an idempotent method'
@@ -35,7 +35,7 @@ describe SQL::Generator::Relation::Unary, '#to_s' do
35
35
 
36
36
  context 'when a limit is visited' do
37
37
  before do
38
- object.visit(base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.take(1))
38
+ object.visit(base_relation.sort_by { |r| [r.id, r.name, r.age] }.take(1))
39
39
  end
40
40
 
41
41
  it_should_behave_like 'a generated SQL expression'
@@ -45,7 +45,7 @@ describe SQL::Generator::Relation::Unary, '#to_s' do
45
45
 
46
46
  context 'when an offset is visited' do
47
47
  before do
48
- object.visit(base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.drop(1))
48
+ object.visit(base_relation.sort_by { |r| [r.id, r.name, r.age] }.drop(1))
49
49
  end
50
50
 
51
51
  it_should_behave_like 'a generated SQL expression'
@@ -5,13 +5,13 @@ require 'spec_helper'
5
5
  describe SQL::Generator::Relation::Unary, '#to_subquery' do
6
6
  subject { object.to_subquery }
7
7
 
8
- let(:id) { Attribute::Integer.new(:id) }
9
- let(:name) { Attribute::String.new(:name) }
10
- let(:age) { Attribute::Integer.new(:age, :required => false) }
11
- let(:header) { [ id, name, age ] }
12
- let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
13
- let(:base_relation) { Relation::Base.new('users', header, body) }
14
- let(:object) { described_class.new }
8
+ let(:id) { Attribute::Integer.new(:id) }
9
+ let(:name) { Attribute::String.new(:name) }
10
+ let(:age) { Attribute::Integer.new(:age, required: false) }
11
+ let(:header) { [id, name, age] }
12
+ let(:body) { [[1, 'Dan Kubb', 35]].each }
13
+ let(:base_relation) { Relation::Base.new('users', header, body) }
14
+ let(:object) { described_class.new }
15
15
 
16
16
  context 'when no object visited' do
17
17
  it_should_behave_like 'an idempotent method'
@@ -25,7 +25,7 @@ describe SQL::Generator::Relation::Unary, '#to_subquery' do
25
25
 
26
26
  context 'when a projection is visited' do
27
27
  before do
28
- object.visit(base_relation.project([ :id, :name ]))
28
+ object.visit(base_relation.project([:id, :name]))
29
29
  end
30
30
 
31
31
  it_should_behave_like 'a generated SQL expression'
@@ -35,7 +35,7 @@ describe SQL::Generator::Relation::Unary, '#to_subquery' do
35
35
 
36
36
  context 'when a rename is visited' do
37
37
  before do
38
- object.visit(base_relation.rename(:id => :user_id))
38
+ object.visit(base_relation.rename(id: :user_id))
39
39
  end
40
40
 
41
41
  it_should_behave_like 'a generated SQL expression'
@@ -55,7 +55,7 @@ describe SQL::Generator::Relation::Unary, '#to_subquery' do
55
55
 
56
56
  context 'when a limit is visited' do
57
57
  before do
58
- object.visit(base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.take(1))
58
+ object.visit(base_relation.sort_by { |r| [r.id, r.name, r.age] }.take(1))
59
59
  end
60
60
 
61
61
  it_should_behave_like 'a generated SQL expression'
@@ -65,7 +65,7 @@ describe SQL::Generator::Relation::Unary, '#to_subquery' do
65
65
 
66
66
  context 'when an offset is visited' do
67
67
  before do
68
- object.visit(base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.drop(1))
68
+ object.visit(base_relation.sort_by { |r| [r.id, r.name, r.age] }.drop(1))
69
69
  end
70
70
 
71
71
  it_should_behave_like 'a generated SQL expression'
@@ -5,15 +5,15 @@ require 'spec_helper'
5
5
  describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_extension' do
6
6
  subject { object.visit_axiom_algebra_extension(extension) }
7
7
 
8
- let(:relation_name) { 'users' }
9
- let(:id) { Attribute::Integer.new(:id) }
10
- let(:name) { Attribute::String.new(:name) }
11
- let(:age) { Attribute::Integer.new(:age, :required => false) }
12
- let(:header) { [ id, name, age ] }
13
- let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
14
- let(:base_relation) { Relation::Base.new(relation_name, header, body) }
15
- let(:extension) { operand.extend { |r| r.add(:one, 1) } }
16
- let(:object) { described_class.new }
8
+ let(:relation_name) { 'users' }
9
+ let(:id) { Attribute::Integer.new(:id) }
10
+ let(:name) { Attribute::String.new(:name) }
11
+ let(:age) { Attribute::Integer.new(:age, required: false) }
12
+ let(:header) { [id, name, age] }
13
+ let(:body) { [[1, 'Dan Kubb', 35]].each }
14
+ let(:base_relation) { Relation::Base.new(relation_name, header, body) }
15
+ let(:extension) { operand.extend { |r| r.add(:one, 1) } }
16
+ let(:object) { described_class.new }
17
17
 
18
18
  context 'when the operand is a base relation' do
19
19
  let(:operand) { base_relation }
@@ -25,7 +25,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_extension' do
25
25
  end
26
26
 
27
27
  context 'when the operand is a projection' do
28
- let(:operand) { base_relation.project([ :id, :name ]) }
28
+ let(:operand) { base_relation.project([:id, :name]) }
29
29
 
30
30
  it_should_behave_like 'a generated SQL SELECT query'
31
31
 
@@ -43,7 +43,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_extension' do
43
43
  end
44
44
 
45
45
  context 'when the operand is a rename' do
46
- let(:operand) { base_relation.rename(:id => :user_id) }
46
+ let(:operand) { base_relation.rename(id: :user_id) }
47
47
 
48
48
  it_should_behave_like 'a generated SQL SELECT query'
49
49
 
@@ -82,7 +82,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_extension' do
82
82
  end
83
83
 
84
84
  context 'summarize by a subset of the operand header' do
85
- let(:operand) { base_relation.summarize([ :id, :name ]) { |r| r.add(:count, r.age.count) } }
85
+ let(:operand) { base_relation.summarize([:id, :name]) { |r| r.add(:count, r.age.count) } }
86
86
 
87
87
  it_should_behave_like 'a generated SQL SELECT query'
88
88
 
@@ -91,8 +91,8 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_extension' do
91
91
  end
92
92
  end
93
93
 
94
- context 'when the operand is ordered' do
95
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] } }
94
+ context 'when the operand is sorted' do
95
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] } }
96
96
 
97
97
  it_should_behave_like 'a generated SQL SELECT query'
98
98
 
@@ -101,7 +101,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_extension' do
101
101
  end
102
102
 
103
103
  context 'when the operand is reversed' do
104
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.reverse }
104
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] }.reverse }
105
105
 
106
106
  it_should_behave_like 'a generated SQL SELECT query'
107
107
 
@@ -110,7 +110,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_extension' do
110
110
  end
111
111
 
112
112
  context 'when the operand is limited' do
113
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.take(1) }
113
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] }.take(1) }
114
114
 
115
115
  it_should_behave_like 'a generated SQL SELECT query'
116
116
 
@@ -119,7 +119,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_extension' do
119
119
  end
120
120
 
121
121
  context 'when the operand is an offset' do
122
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.drop(1) }
122
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] }.drop(1) }
123
123
 
124
124
  it_should_behave_like 'a generated SQL SELECT query'
125
125
 
@@ -5,15 +5,15 @@ require 'spec_helper'
5
5
  describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
6
6
  subject { object.visit_axiom_algebra_projection(projection) }
7
7
 
8
- let(:relation_name) { 'users' }
9
- let(:id) { Attribute::Integer.new(:id) }
10
- let(:name) { Attribute::String.new(:name) }
11
- let(:age) { Attribute::Integer.new(:age, :required => false) }
12
- let(:header) { [ id, name, age ] }
13
- let(:body) { [ [ 1, 'Dan Kubb', 35 ] ].each }
14
- let(:base_relation) { Relation::Base.new(relation_name, header, body) }
15
- let(:projection) { operand.project([ :id, :name ]) }
16
- let(:object) { described_class.new }
8
+ let(:relation_name) { 'users' }
9
+ let(:id) { Attribute::Integer.new(:id) }
10
+ let(:name) { Attribute::String.new(:name) }
11
+ let(:age) { Attribute::Integer.new(:age, required: false) }
12
+ let(:header) { [id, name, age] }
13
+ let(:body) { [[1, 'Dan Kubb', 35]].each }
14
+ let(:base_relation) { Relation::Base.new(relation_name, header, body) }
15
+ let(:projection) { operand.project([:id, :name]) }
16
+ let(:object) { described_class.new }
17
17
 
18
18
  context 'when the operand is a base relation' do
19
19
  let(:operand) { base_relation }
@@ -25,7 +25,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
25
25
  end
26
26
 
27
27
  context 'when the operand is a projection' do
28
- let(:operand) { base_relation.project([ :id, :name ]) }
28
+ let(:operand) { base_relation.project([:id, :name]) }
29
29
 
30
30
  it_should_behave_like 'a generated SQL SELECT query'
31
31
 
@@ -37,7 +37,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
37
37
  let(:operand) { base_relation.extend { |r| r.add(:one, 1) } }
38
38
 
39
39
  context 'when the projection includes the extended column' do
40
- let(:projection) { operand.project([ :id, :name, :one ]) }
40
+ let(:projection) { operand.project([:id, :name, :one]) }
41
41
 
42
42
  it_should_behave_like 'a generated SQL SELECT query'
43
43
 
@@ -46,7 +46,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
46
46
  end
47
47
 
48
48
  context 'when the projection does not include the extended column' do
49
- let(:projection) { operand.project([ :id, :name ]) }
49
+ let(:projection) { operand.project([:id, :name]) }
50
50
 
51
51
  it_should_behave_like 'a generated SQL SELECT query'
52
52
 
@@ -56,10 +56,10 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
56
56
  end
57
57
 
58
58
  context 'when the operand is a rename' do
59
- let(:operand) { base_relation.rename(:id => :user_id) }
59
+ let(:operand) { base_relation.rename(id: :user_id) }
60
60
 
61
61
  context 'when the projection includes the renamed column' do
62
- let(:projection) { operand.project([ :user_id, :name ]) }
62
+ let(:projection) { operand.project([:user_id, :name]) }
63
63
 
64
64
  it_should_behave_like 'a generated SQL SELECT query'
65
65
 
@@ -68,7 +68,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
68
68
  end
69
69
 
70
70
  context 'when the projection does not include the renamed column' do
71
- let(:projection) { operand.project([ :name, :age ]) }
71
+ let(:projection) { operand.project([:name, :age]) }
72
72
 
73
73
  it_should_behave_like 'a generated SQL SELECT query'
74
74
 
@@ -90,7 +90,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
90
90
  context 'summarize per table dee' do
91
91
  let(:summarize_per) { TABLE_DEE }
92
92
  let(:operand) { base_relation.summarize(summarize_per) { |r| r.add(:count, r.id.count) } }
93
- let(:projection) { operand.project([ :count ]) }
93
+ let(:projection) { operand.project([:count]) }
94
94
 
95
95
  it_should_behave_like 'a generated SQL SELECT query'
96
96
 
@@ -101,7 +101,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
101
101
  context 'summarize per table dum' do
102
102
  let(:summarize_per) { TABLE_DUM }
103
103
  let(:operand) { base_relation.summarize(summarize_per) { |r| r.add(:count, r.id.count) } }
104
- let(:projection) { operand.project([ :count ]) }
104
+ let(:projection) { operand.project([:count]) }
105
105
 
106
106
  it_should_behave_like 'a generated SQL SELECT query'
107
107
 
@@ -110,7 +110,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
110
110
  end
111
111
 
112
112
  context 'summarize by a subset of the operand header' do
113
- let(:operand) { base_relation.summarize([ :id, :name ]) { |r| r.add(:count, r.age.count) } }
113
+ let(:operand) { base_relation.summarize([:id, :name]) { |r| r.add(:count, r.age.count) } }
114
114
 
115
115
  it_should_behave_like 'a generated SQL SELECT query'
116
116
 
@@ -119,8 +119,8 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
119
119
  end
120
120
  end
121
121
 
122
- context 'when the operand is ordered' do
123
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] } }
122
+ context 'when the operand is sorted' do
123
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] } }
124
124
 
125
125
  it_should_behave_like 'a generated SQL SELECT query'
126
126
 
@@ -129,7 +129,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
129
129
  end
130
130
 
131
131
  context 'when the operand is reversed' do
132
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.reverse }
132
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] }.reverse }
133
133
 
134
134
  it_should_behave_like 'a generated SQL SELECT query'
135
135
 
@@ -138,7 +138,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
138
138
  end
139
139
 
140
140
  context 'when the operand is limited' do
141
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.take(1) }
141
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] }.take(1) }
142
142
 
143
143
  it_should_behave_like 'a generated SQL SELECT query'
144
144
 
@@ -147,7 +147,7 @@ describe SQL::Generator::Relation::Unary, '#visit_axiom_algebra_projection' do
147
147
  end
148
148
 
149
149
  context 'when the operand is an offset' do
150
- let(:operand) { base_relation.sort_by { |r| [ r.id, r.name, r.age ] }.drop(1) }
150
+ let(:operand) { base_relation.sort_by { |r| [r.id, r.name, r.age] }.drop(1) }
151
151
 
152
152
  it_should_behave_like 'a generated SQL SELECT query'
153
153