arel 1.0.1 → 2.0.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 (247) hide show
  1. data/MIT-LICENSE.txt +20 -0
  2. data/Manifest.txt +105 -0
  3. data/README.markdown +12 -32
  4. data/Rakefile +17 -0
  5. data/arel.gemspec +39 -0
  6. data/lib/arel.rb +30 -9
  7. data/lib/arel/attributes.rb +20 -0
  8. data/lib/arel/attributes/attribute.rb +190 -0
  9. data/lib/arel/compatibility/wheres.rb +33 -0
  10. data/lib/arel/crud.rb +37 -0
  11. data/lib/arel/delete_manager.rb +22 -0
  12. data/lib/arel/deprecated.rb +4 -0
  13. data/lib/arel/expression.rb +4 -0
  14. data/lib/arel/expressions.rb +23 -0
  15. data/lib/arel/insert_manager.rb +34 -0
  16. data/lib/arel/nodes.rb +44 -0
  17. data/lib/arel/nodes/and.rb +6 -0
  18. data/lib/arel/nodes/assignment.rb +6 -0
  19. data/lib/arel/nodes/avg.rb +6 -0
  20. data/lib/arel/nodes/between.rb +6 -0
  21. data/lib/arel/nodes/binary.rb +12 -0
  22. data/lib/arel/nodes/count.rb +13 -0
  23. data/lib/arel/nodes/delete_statement.rb +17 -0
  24. data/lib/arel/nodes/does_not_match.rb +6 -0
  25. data/lib/arel/nodes/equality.rb +9 -0
  26. data/lib/arel/nodes/exists.rb +11 -0
  27. data/lib/arel/nodes/function.rb +18 -0
  28. data/lib/arel/nodes/greater_than.rb +6 -0
  29. data/lib/arel/nodes/greater_than_or_equal.rb +6 -0
  30. data/lib/arel/nodes/group.rb +11 -0
  31. data/lib/arel/nodes/grouping.rb +11 -0
  32. data/lib/arel/nodes/having.rb +11 -0
  33. data/lib/arel/nodes/in.rb +6 -0
  34. data/lib/arel/nodes/inner_join.rb +6 -0
  35. data/lib/arel/nodes/insert_statement.rb +19 -0
  36. data/lib/arel/nodes/join.rb +13 -0
  37. data/lib/arel/nodes/less_than.rb +6 -0
  38. data/lib/arel/nodes/less_than_or_equal.rb +6 -0
  39. data/lib/arel/nodes/lock.rb +6 -0
  40. data/lib/arel/nodes/matches.rb +6 -0
  41. data/lib/arel/nodes/max.rb +6 -0
  42. data/lib/arel/nodes/min.rb +6 -0
  43. data/lib/arel/nodes/node.rb +30 -0
  44. data/lib/arel/nodes/not_equal.rb +6 -0
  45. data/lib/arel/nodes/not_in.rb +6 -0
  46. data/lib/arel/nodes/offset.rb +11 -0
  47. data/lib/arel/nodes/on.rb +11 -0
  48. data/lib/arel/nodes/or.rb +6 -0
  49. data/lib/arel/nodes/ordering.rb +19 -0
  50. data/lib/arel/nodes/outer_join.rb +6 -0
  51. data/lib/arel/nodes/select_core.rb +25 -0
  52. data/lib/arel/nodes/select_statement.rb +22 -0
  53. data/lib/arel/nodes/sql_literal.rb +7 -0
  54. data/lib/arel/nodes/string_join.rb +11 -0
  55. data/lib/arel/nodes/sum.rb +6 -0
  56. data/lib/arel/nodes/table_alias.rb +21 -0
  57. data/lib/arel/nodes/unqualified_column.rb +19 -0
  58. data/lib/arel/nodes/update_statement.rb +21 -0
  59. data/lib/arel/nodes/values.rb +12 -0
  60. data/lib/arel/relation.rb +6 -0
  61. data/lib/arel/select_manager.rb +203 -0
  62. data/lib/arel/sql/engine.rb +10 -0
  63. data/lib/arel/sql_literal.rb +1 -10
  64. data/lib/arel/table.rb +126 -0
  65. data/lib/arel/tree_manager.rb +26 -0
  66. data/lib/arel/update_manager.rb +48 -0
  67. data/lib/arel/visitors.rb +30 -0
  68. data/lib/arel/visitors/dot.rb +233 -0
  69. data/lib/arel/visitors/join_sql.rb +38 -0
  70. data/lib/arel/visitors/mysql.rb +16 -0
  71. data/lib/arel/visitors/oracle.rb +69 -0
  72. data/lib/arel/visitors/order_clauses.rb +9 -0
  73. data/lib/arel/visitors/postgresql.rb +54 -0
  74. data/lib/arel/visitors/to_sql.rb +301 -0
  75. data/lib/arel/visitors/where_sql.rb +9 -0
  76. data/spec/activerecord_compat_spec.rb +18 -0
  77. data/spec/attributes/attribute_spec.rb +648 -0
  78. data/spec/attributes_spec.rb +33 -6
  79. data/spec/crud_spec.rb +69 -0
  80. data/spec/delete_manager_spec.rb +53 -0
  81. data/spec/insert_manager_spec.rb +141 -0
  82. data/spec/nodes/count_spec.rb +18 -0
  83. data/spec/nodes/delete_statement_spec.rb +15 -0
  84. data/spec/nodes/equality_spec.rb +72 -0
  85. data/spec/nodes/insert_statement_spec.rb +18 -0
  86. data/spec/nodes/or_spec.rb +20 -0
  87. data/spec/nodes/select_core_spec.rb +21 -0
  88. data/spec/nodes/select_statement_spec.rb +14 -0
  89. data/spec/nodes/sql_literal_spec.rb +26 -0
  90. data/spec/nodes/sum_spec.rb +12 -0
  91. data/spec/nodes/update_statement_spec.rb +18 -0
  92. data/spec/select_manager_spec.rb +581 -0
  93. data/spec/spec.opts +3 -0
  94. data/spec/spec_helper.rb +6 -21
  95. data/spec/support/fake_record.rb +89 -0
  96. data/spec/support/shared/tree_manager_shared.rb +9 -0
  97. data/spec/table_spec.rb +176 -0
  98. data/spec/update_manager_spec.rb +89 -0
  99. data/spec/visitors/join_sql_spec.rb +35 -0
  100. data/spec/visitors/oracle_spec.rb +111 -0
  101. data/spec/visitors/to_sql_spec.rb +134 -0
  102. metadata +160 -260
  103. data/lib/arel/algebra.rb +0 -10
  104. data/lib/arel/algebra/attributes.rb +0 -7
  105. data/lib/arel/algebra/attributes/attribute.rb +0 -304
  106. data/lib/arel/algebra/attributes/boolean.rb +0 -21
  107. data/lib/arel/algebra/attributes/decimal.rb +0 -9
  108. data/lib/arel/algebra/attributes/float.rb +0 -9
  109. data/lib/arel/algebra/attributes/integer.rb +0 -10
  110. data/lib/arel/algebra/attributes/string.rb +0 -10
  111. data/lib/arel/algebra/attributes/time.rb +0 -6
  112. data/lib/arel/algebra/core_extensions.rb +0 -3
  113. data/lib/arel/algebra/core_extensions/hash.rb +0 -7
  114. data/lib/arel/algebra/core_extensions/object.rb +0 -13
  115. data/lib/arel/algebra/core_extensions/symbol.rb +0 -9
  116. data/lib/arel/algebra/expression.rb +0 -56
  117. data/lib/arel/algebra/header.rb +0 -66
  118. data/lib/arel/algebra/ordering.rb +0 -31
  119. data/lib/arel/algebra/predicates.rb +0 -306
  120. data/lib/arel/algebra/relations.rb +0 -16
  121. data/lib/arel/algebra/relations/operations/from.rb +0 -14
  122. data/lib/arel/algebra/relations/operations/group.rb +0 -14
  123. data/lib/arel/algebra/relations/operations/having.rb +0 -14
  124. data/lib/arel/algebra/relations/operations/join.rb +0 -103
  125. data/lib/arel/algebra/relations/operations/lock.rb +0 -10
  126. data/lib/arel/algebra/relations/operations/order.rb +0 -23
  127. data/lib/arel/algebra/relations/operations/project.rb +0 -20
  128. data/lib/arel/algebra/relations/operations/skip.rb +0 -14
  129. data/lib/arel/algebra/relations/operations/take.rb +0 -18
  130. data/lib/arel/algebra/relations/operations/where.rb +0 -24
  131. data/lib/arel/algebra/relations/relation.rb +0 -205
  132. data/lib/arel/algebra/relations/row.rb +0 -29
  133. data/lib/arel/algebra/relations/utilities/compound.rb +0 -55
  134. data/lib/arel/algebra/relations/utilities/externalization.rb +0 -26
  135. data/lib/arel/algebra/relations/utilities/nil.rb +0 -7
  136. data/lib/arel/algebra/relations/writes.rb +0 -47
  137. data/lib/arel/algebra/value.rb +0 -53
  138. data/lib/arel/engines.rb +0 -2
  139. data/lib/arel/engines/memory.rb +0 -2
  140. data/lib/arel/engines/memory/engine.rb +0 -10
  141. data/lib/arel/engines/memory/relations.rb +0 -2
  142. data/lib/arel/engines/memory/relations/array.rb +0 -37
  143. data/lib/arel/engines/memory/relations/operations.rb +0 -9
  144. data/lib/arel/engines/sql.rb +0 -6
  145. data/lib/arel/engines/sql/attributes.rb +0 -45
  146. data/lib/arel/engines/sql/christener.rb +0 -20
  147. data/lib/arel/engines/sql/compilers/ibm_db_compiler.rb +0 -48
  148. data/lib/arel/engines/sql/compilers/mysql_compiler.rb +0 -11
  149. data/lib/arel/engines/sql/compilers/oracle_compiler.rb +0 -106
  150. data/lib/arel/engines/sql/compilers/postgresql_compiler.rb +0 -50
  151. data/lib/arel/engines/sql/compilers/sqlite_compiler.rb +0 -9
  152. data/lib/arel/engines/sql/core_extensions.rb +0 -4
  153. data/lib/arel/engines/sql/core_extensions/array.rb +0 -24
  154. data/lib/arel/engines/sql/core_extensions/nil_class.rb +0 -15
  155. data/lib/arel/engines/sql/core_extensions/object.rb +0 -19
  156. data/lib/arel/engines/sql/core_extensions/range.rb +0 -19
  157. data/lib/arel/engines/sql/engine.rb +0 -47
  158. data/lib/arel/engines/sql/formatters.rb +0 -138
  159. data/lib/arel/engines/sql/relations.rb +0 -3
  160. data/lib/arel/engines/sql/relations/compiler.rb +0 -153
  161. data/lib/arel/engines/sql/relations/table.rb +0 -100
  162. data/lib/arel/engines/sql/relations/utilities/nil.rb +0 -6
  163. data/lib/arel/recursion/base_case.rb +0 -13
  164. data/lib/arel/session.rb +0 -35
  165. data/lib/arel/version.rb +0 -3
  166. data/spec/algebra/unit/predicates/binary_spec.rb +0 -35
  167. data/spec/algebra/unit/predicates/equality_spec.rb +0 -29
  168. data/spec/algebra/unit/predicates/in_spec.rb +0 -12
  169. data/spec/algebra/unit/predicates/inequality_spec.rb +0 -32
  170. data/spec/algebra/unit/predicates/predicate_spec.rb +0 -22
  171. data/spec/algebra/unit/primitives/attribute_spec.rb +0 -175
  172. data/spec/algebra/unit/primitives/expression_spec.rb +0 -39
  173. data/spec/algebra/unit/primitives/value_spec.rb +0 -15
  174. data/spec/algebra/unit/relations/alias_spec.rb +0 -16
  175. data/spec/algebra/unit/relations/delete_spec.rb +0 -9
  176. data/spec/algebra/unit/relations/group_spec.rb +0 -10
  177. data/spec/algebra/unit/relations/insert_spec.rb +0 -9
  178. data/spec/algebra/unit/relations/join_spec.rb +0 -18
  179. data/spec/algebra/unit/relations/order_spec.rb +0 -21
  180. data/spec/algebra/unit/relations/project_spec.rb +0 -34
  181. data/spec/algebra/unit/relations/relation_spec.rb +0 -241
  182. data/spec/algebra/unit/relations/skip_spec.rb +0 -10
  183. data/spec/algebra/unit/relations/table_spec.rb +0 -38
  184. data/spec/algebra/unit/relations/take_spec.rb +0 -10
  185. data/spec/algebra/unit/relations/update_spec.rb +0 -9
  186. data/spec/algebra/unit/relations/where_spec.rb +0 -19
  187. data/spec/algebra/unit/session/session_spec.rb +0 -84
  188. data/spec/attributes/boolean_spec.rb +0 -57
  189. data/spec/attributes/float_spec.rb +0 -119
  190. data/spec/attributes/header_spec.rb +0 -42
  191. data/spec/attributes/integer_spec.rb +0 -119
  192. data/spec/attributes/string_spec.rb +0 -43
  193. data/spec/attributes/time_spec.rb +0 -24
  194. data/spec/engines/memory/integration/joins/cross_engine_spec.rb +0 -61
  195. data/spec/engines/memory/unit/relations/array_spec.rb +0 -33
  196. data/spec/engines/memory/unit/relations/insert_spec.rb +0 -28
  197. data/spec/engines/memory/unit/relations/join_spec.rb +0 -32
  198. data/spec/engines/memory/unit/relations/order_spec.rb +0 -28
  199. data/spec/engines/memory/unit/relations/project_spec.rb +0 -27
  200. data/spec/engines/memory/unit/relations/skip_spec.rb +0 -31
  201. data/spec/engines/memory/unit/relations/take_spec.rb +0 -28
  202. data/spec/engines/memory/unit/relations/where_spec.rb +0 -43
  203. data/spec/engines/sql/integration/joins/with_adjacency_spec.rb +0 -258
  204. data/spec/engines/sql/integration/joins/with_aggregations_spec.rb +0 -221
  205. data/spec/engines/sql/integration/joins/with_compounds_spec.rb +0 -137
  206. data/spec/engines/sql/unit/engine_spec.rb +0 -65
  207. data/spec/engines/sql/unit/predicates/binary_spec.rb +0 -140
  208. data/spec/engines/sql/unit/predicates/equality_spec.rb +0 -75
  209. data/spec/engines/sql/unit/predicates/in_spec.rb +0 -179
  210. data/spec/engines/sql/unit/predicates/noteq_spec.rb +0 -75
  211. data/spec/engines/sql/unit/predicates/predicates_spec.rb +0 -79
  212. data/spec/engines/sql/unit/primitives/attribute_spec.rb +0 -36
  213. data/spec/engines/sql/unit/primitives/expression_spec.rb +0 -28
  214. data/spec/engines/sql/unit/primitives/literal_spec.rb +0 -43
  215. data/spec/engines/sql/unit/primitives/value_spec.rb +0 -29
  216. data/spec/engines/sql/unit/relations/alias_spec.rb +0 -53
  217. data/spec/engines/sql/unit/relations/delete_spec.rb +0 -83
  218. data/spec/engines/sql/unit/relations/from_spec.rb +0 -64
  219. data/spec/engines/sql/unit/relations/group_spec.rb +0 -72
  220. data/spec/engines/sql/unit/relations/having_spec.rb +0 -78
  221. data/spec/engines/sql/unit/relations/insert_spec.rb +0 -143
  222. data/spec/engines/sql/unit/relations/join_spec.rb +0 -180
  223. data/spec/engines/sql/unit/relations/lock_spec.rb +0 -86
  224. data/spec/engines/sql/unit/relations/order_spec.rb +0 -161
  225. data/spec/engines/sql/unit/relations/project_spec.rb +0 -143
  226. data/spec/engines/sql/unit/relations/skip_spec.rb +0 -41
  227. data/spec/engines/sql/unit/relations/table_spec.rb +0 -122
  228. data/spec/engines/sql/unit/relations/take_spec.rb +0 -75
  229. data/spec/engines/sql/unit/relations/update_spec.rb +0 -203
  230. data/spec/engines/sql/unit/relations/where_spec.rb +0 -72
  231. data/spec/relations/join_spec.rb +0 -42
  232. data/spec/relations/relation_spec.rb +0 -31
  233. data/spec/shared/relation_spec.rb +0 -255
  234. data/spec/sql/christener_spec.rb +0 -70
  235. data/spec/support/connections/mysql_connection.rb +0 -14
  236. data/spec/support/connections/oracle_connection.rb +0 -17
  237. data/spec/support/connections/postgresql_connection.rb +0 -13
  238. data/spec/support/connections/sqlite3_connection.rb +0 -24
  239. data/spec/support/guards.rb +0 -28
  240. data/spec/support/matchers/disambiguate_attributes.rb +0 -28
  241. data/spec/support/matchers/hash_the_same_as.rb +0 -26
  242. data/spec/support/matchers/have_rows.rb +0 -18
  243. data/spec/support/model.rb +0 -67
  244. data/spec/support/schemas/mysql_schema.rb +0 -26
  245. data/spec/support/schemas/oracle_schema.rb +0 -20
  246. data/spec/support/schemas/postgresql_schema.rb +0 -26
  247. data/spec/support/schemas/sqlite3_schema.rb +0 -26
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Expression do
5
- before do
6
- @relation = Table.new(:users)
7
- @attribute = @relation[:id]
8
- end
9
-
10
- describe 'Expression::Transformations' do
11
- before do
12
- @expression = Count.new(@attribute)
13
- end
14
-
15
- describe '#bind' do
16
- it "manufactures an attribute with a rebound relation and self as the ancestor" do
17
- derived_relation = @relation.where(@relation[:id].eq(1))
18
- @expression.bind(derived_relation).should == Count.new(@attribute.bind(derived_relation), nil, @expression)
19
- end
20
-
21
- it "returns self if the substituting to the same relation" do
22
- @expression.bind(@relation).should == @expression
23
- end
24
- end
25
-
26
- describe '#as' do
27
- it "manufactures an aliased expression" do
28
- @expression.as(:alias).should == Expression.new(@attribute, :alias, @expression)
29
- end
30
- end
31
-
32
- describe '#to_attribute' do
33
- it "manufactures an attribute with the expression as an ancestor" do
34
- @expression.to_attribute(@relation).should == Attribute.new(@relation, @expression.alias, :ancestor => @expression)
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,15 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Value do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
-
9
- describe '#bind' do
10
- it "manufactures a new value whose relation is the provided relation" do
11
- Value.new(1, @relation).bind(another_relation = Table.new(:photos)).should == Value.new(1, another_relation)
12
- end
13
- end
14
- end
15
- end
@@ -1,16 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Alias do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
-
9
- describe '==' do
10
- it "obtains if the objects are the same" do
11
- check Alias.new(@relation).should_not == Alias.new(@relation)
12
- (aliaz = Alias.new(@relation)).should == aliaz
13
- end
14
- end
15
- end
16
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Deletion do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
- end
9
- end
@@ -1,10 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Group do
5
- before do
6
- @relation = Table.new(:users)
7
- @attribute = @relation[:id]
8
- end
9
- end
10
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Insert do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
- end
9
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Join do
5
- before do
6
- @relation1 = Table.new(:users)
7
- @relation2 = Table.new(:photos)
8
- @predicate = @relation1[:id].eq(@relation2[:user_id])
9
- end
10
-
11
- describe '#attributes' do
12
- it 'combines the attributes of the two relations' do
13
- join = InnerJoin.new(@relation1, @relation2, @predicate)
14
- join.attributes.should == (@relation1.attributes | @relation2.attributes).bind(join)
15
- end
16
- end
17
- end
18
- end
@@ -1,21 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Order do
5
- before do
6
- @relation = Table.new(:users)
7
- @attribute = @relation[:id]
8
- end
9
-
10
- describe "#==" do
11
- it "returns true when the Orders are for the same attribute and direction" do
12
- Ascending.new(@attribute).should == Ascending.new(@attribute)
13
- end
14
-
15
- it "returns false when the Orders are for a diferent direction" do
16
- Ascending.new(@attribute).should_not == Descending.new(@attribute)
17
- end
18
- end
19
- end
20
- end
21
-
@@ -1,34 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Project do
5
- before do
6
- @relation = Table.new(:users)
7
- @attribute = @relation[:id]
8
- end
9
-
10
- describe '#attributes' do
11
- before do
12
- @projection = Project.new(@relation, [@attribute])
13
- end
14
-
15
- it "manufactures attributes associated with the projection relation" do
16
- @projection.attributes.should == [@attribute].collect { |a| a.bind(@projection) }
17
- end
18
- end
19
-
20
- describe '#externalizable?' do
21
- describe 'when the projections are attributes' do
22
- it 'returns false' do
23
- Project.new(@relation, [@attribute]).should_not be_externalizable
24
- end
25
- end
26
-
27
- describe 'when the projections include an aggregation' do
28
- it "obtains" do
29
- Project.new(@relation, [@attribute.sum]).should be_externalizable
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,241 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Relation do
5
- before do
6
- @relation = Table.new(:users)
7
- @attribute1 = @relation[:id]
8
- @attribute2 = @relation[:name]
9
- end
10
-
11
- describe '[]' do
12
- describe 'when given an', Attribute do
13
- it "return the attribute congruent to the provided attribute" do
14
- @relation[@attribute1].should == @attribute1
15
- end
16
- end
17
-
18
- describe 'when given a', Symbol, String do
19
- it "returns the attribute with the same name" do
20
- check @relation[:id].should == @attribute1
21
- check @relation['id'].should == @attribute1
22
- end
23
- end
24
- end
25
-
26
- describe 'Relation::Operable' do
27
- describe 'joins' do
28
- before do
29
- @predicate = @relation[:id].eq(@relation[:id])
30
- end
31
-
32
- describe '#join' do
33
- describe 'when given a relation' do
34
- it "manufactures an inner join operation between those two relations" do
35
- join = @relation.join(@relation).on(@predicate)
36
- join.relation1.should == @relation
37
- join.relation2.should == @relation
38
- join.predicates.should == [@predicate]
39
- join.should be_kind_of(InnerJoin)
40
- end
41
- end
42
-
43
- describe "when given a string" do
44
- it "manufactures a join operation with the string passed through" do
45
- arbitrary_string = "ASDF"
46
-
47
- join = @relation.join(arbitrary_string)
48
- join.relation1.should == @relation
49
- join.relation2.should == arbitrary_string
50
- join.predicates.should == []
51
- join.should be_kind_of StringJoin
52
- end
53
- end
54
-
55
- describe "when given something blank" do
56
- it "returns self" do
57
- @relation.join.should == @relation
58
- end
59
- end
60
- end
61
-
62
- describe '#outer_join' do
63
- it "manufactures a left outer join operation between those two relations" do
64
- join = @relation.outer_join(@relation).on(@predicate)
65
- join.relation1.should == @relation
66
- join.relation2.should == @relation
67
- join.predicates.should == [@predicate]
68
- join.should be_kind_of OuterJoin
69
- end
70
- end
71
- end
72
-
73
- describe '#project' do
74
- it "manufactures a projection relation" do
75
- project = @relation.project(@attribute1, @attribute2)
76
- project.relation.should == @relation
77
- project.projections.should == [@attribute1, @attribute2]
78
- project.should be_kind_of Project
79
- end
80
-
81
- describe "when given blank attributes" do
82
- it "returns self" do
83
- @relation.project.should == @relation
84
- end
85
- end
86
- end
87
-
88
- describe '#alias' do
89
- it "manufactures an alias relation" do
90
- @relation.alias.relation.should == Alias.new(@relation).relation
91
- end
92
- end
93
-
94
- describe '#where' do
95
- before do
96
- @predicate = Predicates::Equality.new(@attribute1, @attribute2)
97
- end
98
-
99
- it "manufactures a where relation" do
100
- where = @relation.where("intern\nnet")
101
- where.to_sql.should =~ /intern\nnet/
102
- end
103
-
104
- it "manufactures a where relation" do
105
- where = @relation.where(@predicate)
106
- where.relation.should == @relation
107
- where.predicates.should == [@predicate]
108
- where.should be_kind_of Where
109
- end
110
-
111
- it "accepts arbitrary strings" do
112
- where = @relation.where("arbitrary")
113
- where.relation.should == @relation
114
-
115
- where.predicates.length.should == 1
116
- where.predicates.first.value.should == "arbitrary"
117
-
118
- where.should be_kind_of Where
119
- end
120
-
121
- describe 'when given a blank predicate' do
122
- it 'returns self' do
123
- @relation.where.should == @relation
124
- end
125
- end
126
- end
127
-
128
- describe '#order' do
129
- it "manufactures an order relation" do
130
- order = @relation.order(@attribute1, @attribute2)
131
- order.relation.should == @relation
132
- order.orderings.should == [@attribute1, @attribute2]
133
- order.should be_kind_of Order
134
- end
135
-
136
- describe 'when given a blank ordering' do
137
- it 'returns self' do
138
- @relation.order.should == @relation
139
- end
140
- end
141
- end
142
-
143
- describe '#take' do
144
- it "manufactures a take relation" do
145
- take = @relation.take(5)
146
- take.relation.should == @relation
147
- take.taken.should == 5
148
- end
149
-
150
- describe 'when given a blank number of items' do
151
- it 'raises error' do
152
- lambda { @relation.take }.should raise_exception
153
- end
154
- end
155
- end
156
-
157
- describe '#skip' do
158
- it "manufactures a skip relation" do
159
- skip = @relation.skip(4)
160
- skip.relation.should == @relation
161
- skip.skipped.should == 4
162
- skip.should be_kind_of Skip
163
- end
164
-
165
- describe 'when given a blank number of items' do
166
- it 'returns self' do
167
- @relation.skip.should == @relation
168
- end
169
- end
170
- end
171
-
172
- describe '#group' do
173
- it 'manufactures a group relation' do
174
- group = @relation.group(@attribute1, @attribute2)
175
- group.relation.should == @relation
176
- group.groupings.should == [@attribute1, @attribute2]
177
- group.should be_kind_of Group
178
- sql = group.to_sql
179
- sql.should =~ /GROUP BY/
180
- end
181
-
182
- describe 'when given blank groupings' do
183
- it 'returns self' do
184
- @relation.group.should == @relation
185
- end
186
- end
187
- end
188
-
189
- describe 'relation is writable' do
190
- describe '#delete' do
191
- it 'manufactures a deletion relation' do
192
- Session.start do |s|
193
- s.should_receive(:delete) do |delete|
194
- delete.relation.should == @relation
195
- delete.should be_kind_of Deletion
196
- end
197
- @relation.delete
198
- end
199
- end
200
- end
201
-
202
- describe '#insert' do
203
- it 'manufactures an insertion relation' do
204
- Session.start do |s|
205
- record = { @relation[:name] => Value.new('carl', @relation) }
206
- s.should_receive(:create) do |insert|
207
- insert.relation.should == @relation
208
- insert.record.should == record
209
- insert.should be_kind_of Insert
210
- insert
211
- end
212
- @relation.insert(record)
213
- end
214
- end
215
- end
216
-
217
- describe '#update' do
218
- it 'manufactures an update relation' do
219
- Session.start do |s|
220
- assignments = { @relation[:name] => Value.new('bob', @relation) }
221
- s.should_receive(:update) do |update|
222
- update.relation.should == @relation
223
- update.assignments.should == assignments
224
- update.should be_kind_of Update
225
- update
226
- end
227
- @relation.update(assignments)
228
- end
229
- end
230
- end
231
- end
232
- end
233
-
234
- describe 'is enumerable' do
235
- it "implements enumerable" do
236
- @relation.map { |value| value }.should ==
237
- @relation.session.read(@relation).map { |value| value }
238
- end
239
- end
240
- end
241
- end
@@ -1,10 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Skip do
5
- before do
6
- @relation = Table.new(:users)
7
- @skipped = 4
8
- end
9
- end
10
- end
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Table do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
-
9
- describe '[]' do
10
- describe 'when given a', Symbol do
11
- it "manufactures an attribute if the symbol names an attribute within the relation" do
12
- check @relation[:id].should == Attributes::Integer.new(@relation, :id)
13
- end
14
- end
15
-
16
- describe 'when given an', Attribute do
17
- it "returns the attribute if the attribute is within the relation" do
18
- @relation[@relation[:id]].should == @relation[:id]
19
- end
20
-
21
- it "returns nil if the attribtue is not within the relation" do
22
- another_relation = Table.new(:photos)
23
- @relation[another_relation[:id]].should be_nil
24
- end
25
- end
26
-
27
- describe 'when given an', Expression do
28
- before do
29
- @expression = @relation[:id].count
30
- end
31
-
32
- it "returns the Expression if the Expression is within the relation" do
33
- @relation[@expression].should be_nil
34
- end
35
- end
36
- end
37
- end
38
- end