arel 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. data/.gitmodules +3 -0
  2. data/README.markdown +26 -26
  3. data/Rakefile +34 -46
  4. data/Thorfile +122 -0
  5. data/arel.gemspec +205 -201
  6. data/lib/arel.rb +11 -7
  7. data/lib/arel/algebra.rb +7 -2
  8. data/lib/arel/algebra/{primitives/attribute.rb → attribute.rb} +7 -7
  9. data/lib/arel/algebra/core_extensions.rb +4 -0
  10. data/lib/arel/algebra/{extensions → core_extensions}/class.rb +2 -2
  11. data/lib/arel/algebra/{extensions → core_extensions}/hash.rb +1 -1
  12. data/lib/arel/algebra/{extensions → core_extensions}/object.rb +1 -1
  13. data/lib/arel/algebra/{extensions → core_extensions}/symbol.rb +1 -1
  14. data/lib/arel/algebra/{primitives/expression.rb → expression.rb} +0 -0
  15. data/lib/arel/algebra/{primitives/ordering.rb → ordering.rb} +1 -1
  16. data/lib/arel/algebra/predicates.rb +32 -30
  17. data/lib/arel/algebra/relations/relation.rb +1 -1
  18. data/lib/arel/algebra/{primitives/value.rb → value.rb} +0 -0
  19. data/lib/arel/engines/memory/predicates.rb +26 -24
  20. data/lib/arel/engines/sql.rb +1 -1
  21. data/lib/arel/engines/sql/core_extensions.rb +4 -0
  22. data/lib/arel/engines/sql/{extensions → core_extensions}/array.rb +1 -1
  23. data/lib/arel/engines/sql/{extensions → core_extensions}/nil_class.rb +1 -1
  24. data/lib/arel/engines/sql/{extensions → core_extensions}/object.rb +1 -1
  25. data/lib/arel/engines/sql/{extensions → core_extensions}/range.rb +1 -1
  26. data/lib/arel/engines/sql/formatters.rb +6 -3
  27. data/lib/arel/engines/sql/predicates.rb +37 -35
  28. data/lib/arel/engines/sql/primitives.rb +10 -2
  29. data/lib/arel/engines/sql/relations/operations/join.rb +2 -2
  30. data/lib/arel/engines/sql/relations/relation.rb +33 -9
  31. data/lib/arel/engines/sql/relations/writes.rb +41 -10
  32. data/lib/arel/session.rb +9 -6
  33. data/spec/arel/algebra/unit/predicates/binary_spec.rb +23 -21
  34. data/spec/arel/algebra/unit/predicates/equality_spec.rb +20 -18
  35. data/spec/arel/algebra/unit/predicates/in_spec.rb +7 -5
  36. data/spec/arel/algebra/unit/primitives/attribute_spec.rb +10 -12
  37. data/spec/arel/algebra/unit/primitives/expression_spec.rb +1 -1
  38. data/spec/arel/algebra/unit/primitives/value_spec.rb +1 -1
  39. data/spec/arel/algebra/unit/relations/alias_spec.rb +2 -2
  40. data/spec/arel/algebra/unit/relations/delete_spec.rb +1 -1
  41. data/spec/arel/algebra/unit/relations/group_spec.rb +1 -1
  42. data/spec/arel/algebra/unit/relations/insert_spec.rb +1 -1
  43. data/spec/arel/algebra/unit/relations/join_spec.rb +1 -1
  44. data/spec/arel/algebra/unit/relations/order_spec.rb +2 -2
  45. data/spec/arel/algebra/unit/relations/project_spec.rb +1 -1
  46. data/spec/arel/algebra/unit/relations/relation_spec.rb +5 -5
  47. data/spec/arel/algebra/unit/relations/skip_spec.rb +1 -1
  48. data/spec/arel/algebra/unit/relations/table_spec.rb +2 -2
  49. data/spec/arel/algebra/unit/relations/take_spec.rb +1 -1
  50. data/spec/arel/algebra/unit/relations/update_spec.rb +1 -1
  51. data/spec/arel/algebra/unit/relations/where_spec.rb +1 -1
  52. data/spec/arel/algebra/unit/session/session_spec.rb +1 -1
  53. data/spec/arel/engines/memory/integration/joins/cross_engine_spec.rb +3 -4
  54. data/spec/arel/engines/memory/unit/relations/array_spec.rb +1 -1
  55. data/spec/arel/engines/memory/unit/relations/insert_spec.rb +8 -8
  56. data/spec/arel/engines/memory/unit/relations/join_spec.rb +1 -1
  57. data/spec/arel/engines/memory/unit/relations/order_spec.rb +1 -1
  58. data/spec/arel/engines/memory/unit/relations/project_spec.rb +1 -1
  59. data/spec/arel/engines/memory/unit/relations/skip_spec.rb +1 -1
  60. data/spec/arel/engines/memory/unit/relations/take_spec.rb +1 -1
  61. data/spec/arel/engines/memory/unit/relations/where_spec.rb +1 -1
  62. data/spec/arel/engines/sql/integration/joins/with_adjacency_spec.rb +1 -1
  63. data/spec/arel/engines/sql/integration/joins/with_aggregations_spec.rb +1 -1
  64. data/spec/arel/engines/sql/integration/joins/with_compounds_spec.rb +1 -1
  65. data/spec/arel/engines/sql/unit/engine_spec.rb +1 -1
  66. data/spec/arel/engines/sql/unit/predicates/binary_spec.rb +73 -70
  67. data/spec/arel/engines/sql/unit/predicates/equality_spec.rb +45 -28
  68. data/spec/arel/engines/sql/unit/predicates/in_spec.rb +57 -55
  69. data/spec/arel/engines/sql/unit/predicates/predicates_spec.rb +48 -46
  70. data/spec/arel/engines/sql/unit/primitives/attribute_spec.rb +1 -1
  71. data/spec/arel/engines/sql/unit/primitives/expression_spec.rb +1 -1
  72. data/spec/arel/engines/sql/unit/primitives/literal_spec.rb +13 -1
  73. data/spec/arel/engines/sql/unit/primitives/value_spec.rb +3 -3
  74. data/spec/arel/engines/sql/unit/relations/alias_spec.rb +1 -1
  75. data/spec/arel/engines/sql/unit/relations/delete_spec.rb +1 -1
  76. data/spec/arel/engines/sql/unit/relations/group_spec.rb +1 -1
  77. data/spec/arel/engines/sql/unit/relations/insert_spec.rb +1 -1
  78. data/spec/arel/engines/sql/unit/relations/join_spec.rb +1 -1
  79. data/spec/arel/engines/sql/unit/relations/order_spec.rb +1 -1
  80. data/spec/arel/engines/sql/unit/relations/project_spec.rb +1 -1
  81. data/spec/arel/engines/sql/unit/relations/skip_spec.rb +1 -1
  82. data/spec/arel/engines/sql/unit/relations/table_spec.rb +1 -1
  83. data/spec/arel/engines/sql/unit/relations/take_spec.rb +1 -1
  84. data/spec/arel/engines/sql/unit/relations/update_spec.rb +13 -7
  85. data/spec/arel/engines/sql/unit/relations/where_spec.rb +1 -1
  86. data/spec/connections/mysql_connection.rb +3 -3
  87. data/spec/connections/postgresql_connection.rb +2 -2
  88. data/spec/connections/sqlite3_connection.rb +3 -2
  89. data/spec/doubles/hash.rb +4 -0
  90. data/spec/spec.opts +3 -0
  91. data/spec/spec_helper.rb +8 -0
  92. metadata +39 -25
  93. data/VERSION +0 -1
  94. data/lib/arel/algebra/extensions.rb +0 -4
  95. data/lib/arel/algebra/primitives.rb +0 -5
  96. data/lib/arel/engines/sql/extensions.rb +0 -4
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Group do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Insert do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Join do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Order do
@@ -6,7 +6,7 @@ module Arel
6
6
  @relation = Table.new(:users)
7
7
  @attribute = @relation[:id]
8
8
  end
9
-
9
+
10
10
  describe "#==" do
11
11
  it "returns true when the Orders are for the same attribute and direction" do
12
12
  Ascending.new(@attribute).should == Ascending.new(@attribute)
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Project do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Relation do
@@ -17,8 +17,8 @@ module Arel
17
17
 
18
18
  describe 'when given a', Symbol, String do
19
19
  it "returns the attribute with the same name, if it exists" do
20
- @relation[:id].should == @attribute1
21
- @relation['id'].should == @attribute1
20
+ check @relation[:id].should == @attribute1
21
+ check @relation['id'].should == @attribute1
22
22
  @relation[:does_not_exist].should be_nil
23
23
  end
24
24
  end
@@ -80,7 +80,7 @@ module Arel
80
80
 
81
81
  describe '#where' do
82
82
  before do
83
- @predicate = Equality.new(@attribute1, @attribute2)
83
+ @predicate = Predicates::Equality.new(@attribute1, @attribute2)
84
84
  end
85
85
 
86
86
  it "manufactures a where relation" do
@@ -180,7 +180,7 @@ module Arel
180
180
 
181
181
  describe Relation::Enumerable do
182
182
  it "implements enumerable" do
183
- @relation.collect.should == @relation.session.read(@relation).collect
183
+ check @relation.collect.should == @relation.session.read(@relation).collect
184
184
  @relation.first.should == @relation.session.read(@relation).first
185
185
  end
186
186
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Skip do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Table do
@@ -9,7 +9,7 @@ module Arel
9
9
  describe '[]' do
10
10
  describe 'when given a', Symbol do
11
11
  it "manufactures an attribute if the symbol names an attribute within the relation" do
12
- @relation[:id].should == Attribute.new(@relation, :id)
12
+ check @relation[:id].should == Attribute.new(@relation, :id)
13
13
  @relation[:does_not_exist].should be_nil
14
14
  end
15
15
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Take do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Update do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Where do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Session do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Join do
@@ -10,9 +10,8 @@ module Arel
10
10
  ], [:id, :name])
11
11
  @photos = Table.new(:photos)
12
12
  @photos.delete
13
- @photos \
14
- .insert(@photos[:id] => 1, @photos[:user_id] => 1, @photos[:camera_id] => 6) \
15
- .insert(@photos[:id] => 2, @photos[:user_id] => 2, @photos[:camera_id] => 42)
13
+ @photos.insert(@photos[:id] => 1, @photos[:user_id] => 1, @photos[:camera_id] => 6)
14
+ @photos.insert(@photos[:id] => 2, @photos[:user_id] => 2, @photos[:camera_id] => 42)
16
15
  end
17
16
 
18
17
  describe 'when the in memory relation is on the left' do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Array do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Insert do
@@ -14,13 +14,13 @@ module Arel
14
14
  it "manufactures an array of hashes of attributes to values" do
15
15
  @relation \
16
16
  .insert(@relation[:id] => 4, @relation[:name] => 'guinea fowl') \
17
- .let do |relation|
18
- relation.call.should == [
19
- Row.new(relation, [1, 'duck']),
20
- Row.new(relation, [2, 'duck']),
21
- Row.new(relation, [3, 'goose']),
22
- Row.new(relation, [4, 'guinea fowl'])
23
- ]
17
+ do |relation|
18
+ relation.should == [
19
+ Row.new(relation, [1, 'duck']),
20
+ Row.new(relation, [2, 'duck']),
21
+ Row.new(relation, [3, 'goose']),
22
+ Row.new(relation, [4, 'guinea fowl'])
23
+ ]
24
24
  end
25
25
  end
26
26
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Join do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Order do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Project do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Skip do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Take do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Where do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Join do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Join do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Join do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
4
  describe Sql::Engine do
@@ -1,113 +1,116 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
- describe Binary do
5
- before do
6
- @relation = Table.new(:users)
7
- @attribute1 = @relation[:id]
8
- @attribute2 = @relation[:name]
4
+ module Predicates
5
+ describe Binary do
9
6
  class ConcreteBinary < Binary
10
7
  def predicate_sql
11
8
  "<=>"
12
9
  end
13
10
  end
14
- end
15
11
 
16
- describe "with compound predicates" do
17
12
  before do
18
- @operand1 = ConcreteBinary.new(@attribute1, 1)
19
- @operand2 = ConcreteBinary.new(@attribute2, "name")
13
+ @relation = Table.new(:users)
14
+ @attribute1 = @relation[:id]
15
+ @attribute2 = @relation[:name]
20
16
  end
21
17
 
22
- describe Or do
23
- describe "#to_sql" do
24
- it "manufactures sql with an OR operation" do
25
- sql = Or.new(@operand1, @operand2).to_sql
18
+ describe "with compound predicates" do
19
+ before do
20
+ @operand1 = ConcreteBinary.new(@attribute1, 1)
21
+ @operand2 = ConcreteBinary.new(@attribute2, "name")
22
+ end
26
23
 
27
- adapter_is :mysql do
28
- sql.should be_like(%Q{(`users`.`id` <=> 1 OR `users`.`name` <=> 'name')})
29
- end
24
+ describe Or do
25
+ describe "#to_sql" do
26
+ it "manufactures sql with an OR operation" do
27
+ sql = Or.new(@operand1, @operand2).to_sql
30
28
 
31
- adapter_is :postgresql do
32
- sql.should be_like(%Q{("users"."id" <=> 1 OR "users"."name" <=> E'name')})
33
- end
29
+ adapter_is :mysql do
30
+ sql.should be_like(%Q{(`users`.`id` <=> 1 OR `users`.`name` <=> 'name')})
31
+ end
32
+
33
+ adapter_is :postgresql do
34
+ sql.should be_like(%Q{("users"."id" <=> 1 OR "users"."name" <=> E'name')})
35
+ end
34
36
 
35
- adapter_is :sqlite3 do
36
- sql.should be_like(%Q{("users"."id" <=> 1 OR "users"."name" <=> 'name')})
37
+ adapter_is :sqlite3 do
38
+ sql.should be_like(%Q{("users"."id" <=> 1 OR "users"."name" <=> 'name')})
39
+ end
37
40
  end
38
41
  end
39
42
  end
40
- end
41
43
 
42
- describe And do
43
- describe "#to_sql" do
44
- it "manufactures sql with an AND operation" do
45
- sql = And.new(@operand1, @operand2).to_sql
44
+ describe And do
45
+ describe "#to_sql" do
46
+ it "manufactures sql with an AND operation" do
47
+ sql = And.new(@operand1, @operand2).to_sql
46
48
 
47
- adapter_is :mysql do
48
- sql.should be_like(%Q{(`users`.`id` <=> 1 AND `users`.`name` <=> 'name')})
49
- end
49
+ adapter_is :mysql do
50
+ sql.should be_like(%Q{(`users`.`id` <=> 1 AND `users`.`name` <=> 'name')})
51
+ end
50
52
 
51
- adapter_is :sqlite3 do
52
- sql.should be_like(%Q{("users"."id" <=> 1 AND "users"."name" <=> 'name')})
53
- end
53
+ adapter_is :sqlite3 do
54
+ sql.should be_like(%Q{("users"."id" <=> 1 AND "users"."name" <=> 'name')})
55
+ end
54
56
 
55
- adapter_is :postgresql do
56
- sql.should be_like(%Q{("users"."id" <=> 1 AND "users"."name" <=> E'name')})
57
+ adapter_is :postgresql do
58
+ sql.should be_like(%Q{("users"."id" <=> 1 AND "users"."name" <=> E'name')})
59
+ end
57
60
  end
58
61
  end
59
62
  end
60
63
  end
61
- end
62
64
 
63
- describe '#to_sql' do
64
- describe 'when relating two attributes' do
65
- it 'manufactures sql with a binary operation' do
66
- sql = ConcreteBinary.new(@attribute1, @attribute2).to_sql
65
+ describe '#to_sql' do
66
+ describe 'when relating two attributes' do
67
+ it 'manufactures sql with a binary operation' do
68
+ sql = ConcreteBinary.new(@attribute1, @attribute2).to_sql
67
69
 
68
- adapter_is :mysql do
69
- sql.should be_like(%Q{`users`.`id` <=> `users`.`name`})
70
- end
70
+ adapter_is :mysql do
71
+ sql.should be_like(%Q{`users`.`id` <=> `users`.`name`})
72
+ end
71
73
 
72
- adapter_is_not :mysql do
73
- sql.should be_like(%Q{"users"."id" <=> "users"."name"})
74
+ adapter_is_not :mysql do
75
+ sql.should be_like(%Q{"users"."id" <=> "users"."name"})
76
+ end
74
77
  end
75
78
  end
76
- end
77
79
 
78
- describe 'when relating an attribute and a value' do
79
- before do
80
- @value = "1-asdf"
81
- end
80
+ describe 'when relating an attribute and a value' do
81
+ before do
82
+ @value = "1-asdf"
83
+ end
82
84
 
83
- describe 'when relating to an integer attribute' do
84
- it 'formats values as integers' do
85
- sql = ConcreteBinary.new(@attribute1, @value).to_sql
85
+ describe 'when relating to an integer attribute' do
86
+ it 'formats values as integers' do
87
+ sql = ConcreteBinary.new(@attribute1, @value).to_sql
86
88
 
87
- adapter_is :mysql do
88
- sql.should be_like(%Q{`users`.`id` <=> 1})
89
- end
89
+ adapter_is :mysql do
90
+ sql.should be_like(%Q{`users`.`id` <=> 1})
91
+ end
90
92
 
91
- adapter_is_not :mysql do
92
- sql.should be_like(%Q{"users"."id" <=> 1})
93
+ adapter_is_not :mysql do
94
+ sql.should be_like(%Q{"users"."id" <=> 1})
95
+ end
93
96
  end
94
97
  end
95
- end
96
98
 
97
- describe 'when relating to a string attribute' do
98
- it 'formats values as strings' do
99
- sql = ConcreteBinary.new(@attribute2, @value).to_sql
99
+ describe 'when relating to a string attribute' do
100
+ it 'formats values as strings' do
101
+ sql = ConcreteBinary.new(@attribute2, @value).to_sql
100
102
 
101
- adapter_is :mysql do
102
- sql.should be_like(%Q{`users`.`name` <=> '1-asdf'})
103
- end
103
+ adapter_is :mysql do
104
+ sql.should be_like(%Q{`users`.`name` <=> '1-asdf'})
105
+ end
104
106
 
105
- adapter_is :sqlite3 do
106
- sql.should be_like(%Q{"users"."name" <=> '1-asdf'})
107
- end
107
+ adapter_is :sqlite3 do
108
+ sql.should be_like(%Q{"users"."name" <=> '1-asdf'})
109
+ end
108
110
 
109
- adapter_is :postgresql do
110
- sql.should be_like(%Q{"users"."name" <=> E'1-asdf'})
111
+ adapter_is :postgresql do
112
+ sql.should be_like(%Q{"users"."name" <=> E'1-asdf'})
113
+ end
111
114
  end
112
115
  end
113
116
  end
@@ -1,43 +1,60 @@
1
- require File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..', 'spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  module Arel
4
- describe Equality do
5
- before do
6
- @relation1 = Table.new(:users)
7
- @relation2 = Table.new(:photos)
8
- @attribute1 = @relation1[:id]
9
- @attribute2 = @relation2[:user_id]
10
- end
4
+ module Predicates
5
+ describe Equality do
6
+ before do
7
+ @relation1 = Table.new(:users)
8
+ @relation2 = Table.new(:photos)
9
+ @attribute1 = @relation1[:id]
10
+ @attribute2 = @relation2[:user_id]
11
+ end
11
12
 
12
- describe '#to_sql' do
13
- describe 'when relating to a non-nil value' do
14
- it "manufactures an equality predicate" do
15
- sql = Equality.new(@attribute1, @attribute2).to_sql
13
+ describe '#to_sql' do
14
+ describe 'when relating to a non-nil value' do
15
+ it "manufactures an equality predicate" do
16
+ sql = Equality.new(@attribute1, @attribute2).to_sql
16
17
 
17
- adapter_is :mysql do
18
- sql.should be_like(%Q{`users`.`id` = `photos`.`user_id`})
19
- end
18
+ adapter_is :mysql do
19
+ sql.should be_like(%Q{`users`.`id` = `photos`.`user_id`})
20
+ end
20
21
 
21
- adapter_is_not :mysql do
22
- sql.should be_like(%Q{"users"."id" = "photos"."user_id"})
22
+ adapter_is_not :mysql do
23
+ sql.should be_like(%Q{"users"."id" = "photos"."user_id"})
24
+ end
23
25
  end
24
26
  end
25
- end
26
27
 
27
- describe 'when relation to a nil value' do
28
- before do
29
- @nil = nil
30
- end
28
+ describe 'when relation to a nil value' do
29
+ before do
30
+ @nil = nil
31
+ end
32
+
33
+ it "manufactures an is null predicate" do
34
+ sql = Equality.new(@attribute1, @nil).to_sql
31
35
 
32
- it "manufactures an is null predicate" do
33
- sql = Equality.new(@attribute1, @nil).to_sql
36
+ adapter_is :mysql do
37
+ sql.should be_like(%Q{`users`.`id` IS NULL})
38
+ end
34
39
 
35
- adapter_is :mysql do
36
- sql.should be_like(%Q{`users`.`id` IS NULL})
40
+ adapter_is_not :mysql do
41
+ sql.should be_like(%Q{"users"."id" IS NULL})
42
+ end
37
43
  end
44
+ end
45
+
46
+ describe "when relating to a nil Value" do
47
+ it "manufactures an IS NULL predicate" do
48
+ value = nil.bind(@relation1)
49
+ sql = Equality.new(@attribute1, value).to_sql
50
+
51
+ adapter_is :mysql do
52
+ sql.should be_like(%Q{`users`.`id` IS NULL})
53
+ end
38
54
 
39
- adapter_is_not :mysql do
40
- sql.should be_like(%Q{"users"."id" IS NULL})
55
+ adapter_is_not :mysql do
56
+ sql.should be_like(%Q{"users"."id" IS NULL})
57
+ end
41
58
  end
42
59
  end
43
60
  end