arel 0.1.0 → 0.1.2

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 (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