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,10 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Take do
5
- before do
6
- @relation = Table.new(:users)
7
- @taken = 4
8
- end
9
- end
10
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Update do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
- end
9
- end
@@ -1,19 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Where do
5
- before do
6
- @relation = Table.new(:users)
7
- @predicate = @relation[:id].eq(1)
8
- end
9
-
10
- describe '#initialize' do
11
- it "manufactures nested where relations if multiple predicates are provided" do
12
- pending "This is not true anymore"
13
- another_predicate = @relation[:name].lt(2)
14
- Where.new(@relation, @predicate, another_predicate). \
15
- should == Where.new(Where.new(@relation, another_predicate), @predicate)
16
- end
17
- end
18
- end
19
- end
@@ -1,84 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Session do
5
- before do
6
- @relation = Table.new(:users)
7
- @session = Session.new
8
- end
9
-
10
- describe '::start' do
11
- describe '::instance' do
12
- it "it is a singleton within the started session" do
13
- Session.start do |session|
14
- Session.instance.should == session
15
- end
16
- end
17
-
18
- it "is a singleton across nested sessions" do
19
- Session.start do |s1|
20
- outside = Session.instance
21
- Session.start do |s2|
22
- Session.instance.should == outside
23
- end
24
- end
25
- end
26
-
27
- it "manufactures new sessions outside of the started session" do
28
- Session.new.should_not == Session.new
29
- end
30
- end
31
- end
32
-
33
- describe 'session crud' do
34
- before do
35
- @insert = Insert.new(@relation, @relation[:name] => 'nick')
36
- @update = Update.new(@relation, @relation[:name] => 'nick')
37
- @delete = Deletion.new(@relation)
38
- @read = @relation
39
- end
40
-
41
- describe '#create' do
42
- it "executes an insertion on the connection" do
43
- @insert.should_receive(:call)
44
- @session.create(@insert)
45
- end
46
- end
47
-
48
- describe '#read' do
49
- it "executes an selection on the connection" do
50
- @read.should_receive(:call)
51
- @session.read(@read)
52
- end
53
-
54
- it "is memoized" do
55
- @read.should_receive(:call).once
56
- @session.read(@read)
57
- @session.read(@read)
58
- end
59
- end
60
-
61
- describe '#update' do
62
- it "executes an update on the connection" do
63
- @update.should_receive(:call)
64
- @session.update(@update)
65
- end
66
- end
67
-
68
- describe '#delete' do
69
- it "executes a delete on the connection" do
70
- @delete.should_receive(:call)
71
- @session.delete(@delete)
72
- end
73
- end
74
- end
75
-
76
- describe 'Transactions' do
77
- describe '#begin' do
78
- end
79
-
80
- describe '#end' do
81
- end
82
- end
83
- end
84
- end
@@ -1,57 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe "Attributes::Boolean" do
5
-
6
- before :all do
7
- @relation = Model.build do |r|
8
- r.engine Testing::Engine.new
9
- r.attribute :awesome, Attributes::Boolean
10
- end
11
- end
12
-
13
- def type_cast(val)
14
- @relation[:awesome].type_cast(val)
15
- end
16
-
17
- describe "#type_cast" do
18
- it "returns same value if passed a boolean" do
19
- val = true
20
- type_cast(val).should eql(val)
21
- end
22
-
23
- it "returns boolean representation (false) of nil" do
24
- type_cast(nil).should eql(false)
25
- end
26
-
27
- it "returns boolean representation of 'true', 'false'" do
28
- type_cast('true').should eql(true)
29
- type_cast('false').should eql(false)
30
- end
31
-
32
- it "returns boolean representation of :true, :false" do
33
- type_cast(:true).should eql(true)
34
- type_cast(:false).should eql(false)
35
- end
36
-
37
- it "returns boolean representation of 0, 1" do
38
- type_cast(1).should == true
39
- type_cast(0).should == false
40
- end
41
-
42
- it "calls #to_s on arbitrary objects" do
43
- obj = Object.new
44
- obj.extend Module.new { def to_s ; 'true' ; end }
45
- type_cast(obj).should == true
46
- end
47
-
48
- [ Object.new, 'string', '00.0', 5 ].each do |value|
49
- it "raises exception when attempting type_cast of non-boolean value #{value.inspect}" do
50
- lambda do
51
- type_cast(value)
52
- end.should raise_error(TypecastError, /could not typecast/)
53
- end
54
- end
55
- end
56
- end
57
- end
@@ -1,119 +0,0 @@
1
- require 'spec_helper'
2
- require 'bigdecimal'
3
-
4
- module Arel
5
- describe "Attributes::Float" do
6
-
7
- before :all do
8
- @relation = Model.build do |r|
9
- r.engine Testing::Engine.new
10
- r.attribute :percentage, Attributes::Float
11
- end
12
- end
13
-
14
- def type_cast(val)
15
- @relation[:percentage].type_cast(val)
16
- end
17
-
18
- describe "#type_cast" do
19
- it "returns same value if an float" do
20
- type_cast(24.01).should eql(24.01)
21
- end
22
-
23
- it "returns nil if passed nil" do
24
- type_cast(nil).should be_nil
25
- end
26
-
27
- it "returns nil if passed empty string" do
28
- type_cast('').should be_nil
29
- end
30
-
31
- it "returns float representation of a zero string float" do
32
- type_cast('0').should eql(0.0)
33
- end
34
-
35
- it "returns float representation of a positive string integer" do
36
- type_cast('24').should eql(24.0)
37
- end
38
-
39
- it "returns float representation of a positive string integer with spaces" do
40
- type_cast(' 24').should eql(24.0)
41
- type_cast('24 ').should eql(24.0)
42
- end
43
-
44
- it "returns float representation of a negative string float" do
45
- type_cast('-24.23').should eql(-24.23)
46
- end
47
-
48
- it "returns float representation of a negative string integer with spaces" do
49
- type_cast('-24 ').should eql(-24.0)
50
- type_cast(' -24').should eql(-24.0)
51
- end
52
-
53
- it "returns integer representation of a zero string float" do
54
- type_cast('0.0').should eql(0.0)
55
- end
56
-
57
- it "returns integer representation of a positive string float" do
58
- type_cast('24.35').should eql(24.35)
59
- end
60
-
61
- it "returns integer representation of a positive string float with spaces" do
62
- type_cast(' 24.35').should eql(24.35)
63
- type_cast('24.35 ').should eql(24.35)
64
- end
65
-
66
- it "returns integer representation of a negative string float" do
67
- type_cast('-24.35').should eql(-24.35)
68
- end
69
-
70
- it "returns integer representation of a negative string float with spaces" do
71
- type_cast(' -24.35 ').should eql(-24.35)
72
- end
73
-
74
- it "returns integer representation of a zero string float, with no leading digits" do
75
- type_cast('.0').should eql(0.0)
76
- end
77
-
78
- it "returns integer representation of a zero string float, with no leading digits with spaces" do
79
- type_cast(' .0').should eql(0.0)
80
- end
81
-
82
- it "returns integer representation of a positive string float, with no leading digits" do
83
- type_cast('.41').should eql(0.41)
84
- end
85
-
86
- it "returns integer representation of a zero float" do
87
- type_cast(0.0).should eql(0.0)
88
- end
89
-
90
- it "returns integer representation of a positive float" do
91
- type_cast(24.35).should eql(24.35)
92
- end
93
-
94
- it "returns integer representation of a negative float" do
95
- type_cast(-24.35).should eql(-24.35)
96
- end
97
-
98
- it "returns integer representation of a zero decimal" do
99
- type_cast(BigDecimal('0.0')).should eql(0.0)
100
- end
101
-
102
- it "returns integer representation of a positive decimal" do
103
- type_cast(BigDecimal('24.35')).should eql(24.35)
104
- end
105
-
106
- it "returns integer representation of a negative decimal" do
107
- type_cast(BigDecimal('-24.35')).should eql(-24.35)
108
- end
109
-
110
- [ Object.new, true, '00.0', '0.', 'string' ].each do |value|
111
- it "raises exception when attempting type_cast of non-numeric value #{value.inspect}" do
112
- lambda do
113
- type_cast(value)
114
- end.should raise_error(TypecastError, /could not typecast/)
115
- end
116
- end
117
- end
118
- end
119
- end
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe "Header" do
5
- before :all do
6
- @relation = Model.build do |r|
7
- r.attribute :id, Attributes::Integer
8
- r.attribute :name, Attributes::String
9
- r.attribute :age, Attributes::Integer
10
- end
11
-
12
- @other = Model.build do |r|
13
- r.attribute :foo, Attributes::String
14
- end
15
-
16
- @subset = Model.build do |r|
17
- r.attribute :id, Attributes::Integer
18
- end
19
- end
20
-
21
- describe "attribute lookup" do
22
- it "finds attributes by name" do
23
- @relation.attributes[:name].should == Attributes::String.new(@relation, :name)
24
- end
25
-
26
- it "returns nil if no attribute is found" do
27
- @relation.attributes[:does_not_exist].should be_nil
28
- @relation[:does_not_exist].should be_nil
29
- end
30
- end
31
-
32
- describe "#union" do
33
- it "keeps all attributes from disjoint headers" do
34
- (@relation.attributes.union @other.attributes).to_ary.should have(4).items
35
- end
36
-
37
- it "keeps all attributes from both relations even if they seem like subsets" do
38
- (@relation.attributes.union @subset.attributes).to_ary.should have(4).items
39
- end
40
- end
41
- end
42
- end
@@ -1,119 +0,0 @@
1
- require 'spec_helper'
2
- require 'bigdecimal'
3
-
4
- module Arel
5
- describe "Attributes::Integer" do
6
-
7
- before :all do
8
- @relation = Model.build do |r|
9
- r.engine Testing::Engine.new
10
- r.attribute :age, Attributes::Integer
11
- end
12
- end
13
-
14
- def type_cast(val)
15
- @relation[:age].type_cast(val)
16
- end
17
-
18
- describe "#type_cast" do
19
- it "returns same value if an integer" do
20
- type_cast(24).should eql(24)
21
- end
22
-
23
- it "returns nil if passed nil" do
24
- type_cast(nil).should be_nil
25
- end
26
-
27
- it "returns nil if passed empty string" do
28
- type_cast('').should be_nil
29
- end
30
-
31
- it "returns integer representation of a zero string integer" do
32
- type_cast('0').should eql(0)
33
- end
34
-
35
- it "returns integer representation of a positive string integer" do
36
- type_cast('24').should eql(24)
37
- end
38
-
39
- it "returns integer representation of a positive string integer with spaces" do
40
- type_cast(' 24').should eql(24)
41
- type_cast('24 ').should eql(24)
42
- end
43
-
44
- it "returns integer representation of a negative string integer" do
45
- type_cast('-24').should eql(-24)
46
- end
47
-
48
- it "returns integer representation of a negative string integer with spaces" do
49
- type_cast('-24 ').should eql(-24)
50
- type_cast(' -24').should eql(-24)
51
- end
52
-
53
- it "returns integer representation of a zero string float" do
54
- type_cast('0.0').should eql(0)
55
- end
56
-
57
- it "returns integer representation of a positive string float" do
58
- type_cast('24.35').should eql(24)
59
- end
60
-
61
- it "returns integer representation of a positive string float with spaces" do
62
- type_cast(' 24.35').should eql(24)
63
- type_cast('24.35 ').should eql(24)
64
- end
65
-
66
- it "returns integer representation of a negative string float" do
67
- type_cast('-24.35').should eql(-24)
68
- end
69
-
70
- it "returns integer representation of a negative string float with spaces" do
71
- type_cast(' -24.35 ').should eql(-24)
72
- end
73
-
74
- it "returns integer representation of a zero string float, with no leading digits" do
75
- type_cast('.0').should eql(0)
76
- end
77
-
78
- it "returns integer representation of a zero string float, with no leading digits with spaces" do
79
- type_cast(' .0').should eql(0)
80
- end
81
-
82
- it "returns integer representation of a positive string float, with no leading digits" do
83
- type_cast('.41').should eql(0)
84
- end
85
-
86
- it "returns integer representation of a zero float" do
87
- type_cast(0.0).should eql(0)
88
- end
89
-
90
- it "returns integer representation of a positive float" do
91
- type_cast(24.35).should eql(24)
92
- end
93
-
94
- it "returns integer representation of a negative float" do
95
- type_cast(-24.35).should eql(-24)
96
- end
97
-
98
- it "returns integer representation of a zero decimal" do
99
- type_cast(BigDecimal('0.0')).should eql(0)
100
- end
101
-
102
- it "returns integer representation of a positive decimal" do
103
- type_cast(BigDecimal('24.35')).should eql(24)
104
- end
105
-
106
- it "returns integer representation of a negative decimal" do
107
- type_cast(BigDecimal('-24.35')).should eql(-24)
108
- end
109
-
110
- [ Object.new, true, '00.0', '0.', 'string' ].each do |value|
111
- it "raises exception when attempting type_cast of non-numeric value #{value.inspect}" do
112
- lambda do
113
- type_cast(value)
114
- end.should raise_error(TypecastError, /could not typecast/)
115
- end
116
- end
117
- end
118
- end
119
- end