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.
- data/MIT-LICENSE.txt +20 -0
- data/Manifest.txt +105 -0
- data/README.markdown +12 -32
- data/Rakefile +17 -0
- data/arel.gemspec +39 -0
- data/lib/arel.rb +30 -9
- data/lib/arel/attributes.rb +20 -0
- data/lib/arel/attributes/attribute.rb +190 -0
- data/lib/arel/compatibility/wheres.rb +33 -0
- data/lib/arel/crud.rb +37 -0
- data/lib/arel/delete_manager.rb +22 -0
- data/lib/arel/deprecated.rb +4 -0
- data/lib/arel/expression.rb +4 -0
- data/lib/arel/expressions.rb +23 -0
- data/lib/arel/insert_manager.rb +34 -0
- data/lib/arel/nodes.rb +44 -0
- data/lib/arel/nodes/and.rb +6 -0
- data/lib/arel/nodes/assignment.rb +6 -0
- data/lib/arel/nodes/avg.rb +6 -0
- data/lib/arel/nodes/between.rb +6 -0
- data/lib/arel/nodes/binary.rb +12 -0
- data/lib/arel/nodes/count.rb +13 -0
- data/lib/arel/nodes/delete_statement.rb +17 -0
- data/lib/arel/nodes/does_not_match.rb +6 -0
- data/lib/arel/nodes/equality.rb +9 -0
- data/lib/arel/nodes/exists.rb +11 -0
- data/lib/arel/nodes/function.rb +18 -0
- data/lib/arel/nodes/greater_than.rb +6 -0
- data/lib/arel/nodes/greater_than_or_equal.rb +6 -0
- data/lib/arel/nodes/group.rb +11 -0
- data/lib/arel/nodes/grouping.rb +11 -0
- data/lib/arel/nodes/having.rb +11 -0
- data/lib/arel/nodes/in.rb +6 -0
- data/lib/arel/nodes/inner_join.rb +6 -0
- data/lib/arel/nodes/insert_statement.rb +19 -0
- data/lib/arel/nodes/join.rb +13 -0
- data/lib/arel/nodes/less_than.rb +6 -0
- data/lib/arel/nodes/less_than_or_equal.rb +6 -0
- data/lib/arel/nodes/lock.rb +6 -0
- data/lib/arel/nodes/matches.rb +6 -0
- data/lib/arel/nodes/max.rb +6 -0
- data/lib/arel/nodes/min.rb +6 -0
- data/lib/arel/nodes/node.rb +30 -0
- data/lib/arel/nodes/not_equal.rb +6 -0
- data/lib/arel/nodes/not_in.rb +6 -0
- data/lib/arel/nodes/offset.rb +11 -0
- data/lib/arel/nodes/on.rb +11 -0
- data/lib/arel/nodes/or.rb +6 -0
- data/lib/arel/nodes/ordering.rb +19 -0
- data/lib/arel/nodes/outer_join.rb +6 -0
- data/lib/arel/nodes/select_core.rb +25 -0
- data/lib/arel/nodes/select_statement.rb +22 -0
- data/lib/arel/nodes/sql_literal.rb +7 -0
- data/lib/arel/nodes/string_join.rb +11 -0
- data/lib/arel/nodes/sum.rb +6 -0
- data/lib/arel/nodes/table_alias.rb +21 -0
- data/lib/arel/nodes/unqualified_column.rb +19 -0
- data/lib/arel/nodes/update_statement.rb +21 -0
- data/lib/arel/nodes/values.rb +12 -0
- data/lib/arel/relation.rb +6 -0
- data/lib/arel/select_manager.rb +203 -0
- data/lib/arel/sql/engine.rb +10 -0
- data/lib/arel/sql_literal.rb +1 -10
- data/lib/arel/table.rb +126 -0
- data/lib/arel/tree_manager.rb +26 -0
- data/lib/arel/update_manager.rb +48 -0
- data/lib/arel/visitors.rb +30 -0
- data/lib/arel/visitors/dot.rb +233 -0
- data/lib/arel/visitors/join_sql.rb +38 -0
- data/lib/arel/visitors/mysql.rb +16 -0
- data/lib/arel/visitors/oracle.rb +69 -0
- data/lib/arel/visitors/order_clauses.rb +9 -0
- data/lib/arel/visitors/postgresql.rb +54 -0
- data/lib/arel/visitors/to_sql.rb +301 -0
- data/lib/arel/visitors/where_sql.rb +9 -0
- data/spec/activerecord_compat_spec.rb +18 -0
- data/spec/attributes/attribute_spec.rb +648 -0
- data/spec/attributes_spec.rb +33 -6
- data/spec/crud_spec.rb +69 -0
- data/spec/delete_manager_spec.rb +53 -0
- data/spec/insert_manager_spec.rb +141 -0
- data/spec/nodes/count_spec.rb +18 -0
- data/spec/nodes/delete_statement_spec.rb +15 -0
- data/spec/nodes/equality_spec.rb +72 -0
- data/spec/nodes/insert_statement_spec.rb +18 -0
- data/spec/nodes/or_spec.rb +20 -0
- data/spec/nodes/select_core_spec.rb +21 -0
- data/spec/nodes/select_statement_spec.rb +14 -0
- data/spec/nodes/sql_literal_spec.rb +26 -0
- data/spec/nodes/sum_spec.rb +12 -0
- data/spec/nodes/update_statement_spec.rb +18 -0
- data/spec/select_manager_spec.rb +581 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +6 -21
- data/spec/support/fake_record.rb +89 -0
- data/spec/support/shared/tree_manager_shared.rb +9 -0
- data/spec/table_spec.rb +176 -0
- data/spec/update_manager_spec.rb +89 -0
- data/spec/visitors/join_sql_spec.rb +35 -0
- data/spec/visitors/oracle_spec.rb +111 -0
- data/spec/visitors/to_sql_spec.rb +134 -0
- metadata +160 -260
- data/lib/arel/algebra.rb +0 -10
- data/lib/arel/algebra/attributes.rb +0 -7
- data/lib/arel/algebra/attributes/attribute.rb +0 -304
- data/lib/arel/algebra/attributes/boolean.rb +0 -21
- data/lib/arel/algebra/attributes/decimal.rb +0 -9
- data/lib/arel/algebra/attributes/float.rb +0 -9
- data/lib/arel/algebra/attributes/integer.rb +0 -10
- data/lib/arel/algebra/attributes/string.rb +0 -10
- data/lib/arel/algebra/attributes/time.rb +0 -6
- data/lib/arel/algebra/core_extensions.rb +0 -3
- data/lib/arel/algebra/core_extensions/hash.rb +0 -7
- data/lib/arel/algebra/core_extensions/object.rb +0 -13
- data/lib/arel/algebra/core_extensions/symbol.rb +0 -9
- data/lib/arel/algebra/expression.rb +0 -56
- data/lib/arel/algebra/header.rb +0 -66
- data/lib/arel/algebra/ordering.rb +0 -31
- data/lib/arel/algebra/predicates.rb +0 -306
- data/lib/arel/algebra/relations.rb +0 -16
- data/lib/arel/algebra/relations/operations/from.rb +0 -14
- data/lib/arel/algebra/relations/operations/group.rb +0 -14
- data/lib/arel/algebra/relations/operations/having.rb +0 -14
- data/lib/arel/algebra/relations/operations/join.rb +0 -103
- data/lib/arel/algebra/relations/operations/lock.rb +0 -10
- data/lib/arel/algebra/relations/operations/order.rb +0 -23
- data/lib/arel/algebra/relations/operations/project.rb +0 -20
- data/lib/arel/algebra/relations/operations/skip.rb +0 -14
- data/lib/arel/algebra/relations/operations/take.rb +0 -18
- data/lib/arel/algebra/relations/operations/where.rb +0 -24
- data/lib/arel/algebra/relations/relation.rb +0 -205
- data/lib/arel/algebra/relations/row.rb +0 -29
- data/lib/arel/algebra/relations/utilities/compound.rb +0 -55
- data/lib/arel/algebra/relations/utilities/externalization.rb +0 -26
- data/lib/arel/algebra/relations/utilities/nil.rb +0 -7
- data/lib/arel/algebra/relations/writes.rb +0 -47
- data/lib/arel/algebra/value.rb +0 -53
- data/lib/arel/engines.rb +0 -2
- data/lib/arel/engines/memory.rb +0 -2
- data/lib/arel/engines/memory/engine.rb +0 -10
- data/lib/arel/engines/memory/relations.rb +0 -2
- data/lib/arel/engines/memory/relations/array.rb +0 -37
- data/lib/arel/engines/memory/relations/operations.rb +0 -9
- data/lib/arel/engines/sql.rb +0 -6
- data/lib/arel/engines/sql/attributes.rb +0 -45
- data/lib/arel/engines/sql/christener.rb +0 -20
- data/lib/arel/engines/sql/compilers/ibm_db_compiler.rb +0 -48
- data/lib/arel/engines/sql/compilers/mysql_compiler.rb +0 -11
- data/lib/arel/engines/sql/compilers/oracle_compiler.rb +0 -106
- data/lib/arel/engines/sql/compilers/postgresql_compiler.rb +0 -50
- data/lib/arel/engines/sql/compilers/sqlite_compiler.rb +0 -9
- data/lib/arel/engines/sql/core_extensions.rb +0 -4
- data/lib/arel/engines/sql/core_extensions/array.rb +0 -24
- data/lib/arel/engines/sql/core_extensions/nil_class.rb +0 -15
- data/lib/arel/engines/sql/core_extensions/object.rb +0 -19
- data/lib/arel/engines/sql/core_extensions/range.rb +0 -19
- data/lib/arel/engines/sql/engine.rb +0 -47
- data/lib/arel/engines/sql/formatters.rb +0 -138
- data/lib/arel/engines/sql/relations.rb +0 -3
- data/lib/arel/engines/sql/relations/compiler.rb +0 -153
- data/lib/arel/engines/sql/relations/table.rb +0 -100
- data/lib/arel/engines/sql/relations/utilities/nil.rb +0 -6
- data/lib/arel/recursion/base_case.rb +0 -13
- data/lib/arel/session.rb +0 -35
- data/lib/arel/version.rb +0 -3
- data/spec/algebra/unit/predicates/binary_spec.rb +0 -35
- data/spec/algebra/unit/predicates/equality_spec.rb +0 -29
- data/spec/algebra/unit/predicates/in_spec.rb +0 -12
- data/spec/algebra/unit/predicates/inequality_spec.rb +0 -32
- data/spec/algebra/unit/predicates/predicate_spec.rb +0 -22
- data/spec/algebra/unit/primitives/attribute_spec.rb +0 -175
- data/spec/algebra/unit/primitives/expression_spec.rb +0 -39
- data/spec/algebra/unit/primitives/value_spec.rb +0 -15
- data/spec/algebra/unit/relations/alias_spec.rb +0 -16
- data/spec/algebra/unit/relations/delete_spec.rb +0 -9
- data/spec/algebra/unit/relations/group_spec.rb +0 -10
- data/spec/algebra/unit/relations/insert_spec.rb +0 -9
- data/spec/algebra/unit/relations/join_spec.rb +0 -18
- data/spec/algebra/unit/relations/order_spec.rb +0 -21
- data/spec/algebra/unit/relations/project_spec.rb +0 -34
- data/spec/algebra/unit/relations/relation_spec.rb +0 -241
- data/spec/algebra/unit/relations/skip_spec.rb +0 -10
- data/spec/algebra/unit/relations/table_spec.rb +0 -38
- data/spec/algebra/unit/relations/take_spec.rb +0 -10
- data/spec/algebra/unit/relations/update_spec.rb +0 -9
- data/spec/algebra/unit/relations/where_spec.rb +0 -19
- data/spec/algebra/unit/session/session_spec.rb +0 -84
- data/spec/attributes/boolean_spec.rb +0 -57
- data/spec/attributes/float_spec.rb +0 -119
- data/spec/attributes/header_spec.rb +0 -42
- data/spec/attributes/integer_spec.rb +0 -119
- data/spec/attributes/string_spec.rb +0 -43
- data/spec/attributes/time_spec.rb +0 -24
- data/spec/engines/memory/integration/joins/cross_engine_spec.rb +0 -61
- data/spec/engines/memory/unit/relations/array_spec.rb +0 -33
- data/spec/engines/memory/unit/relations/insert_spec.rb +0 -28
- data/spec/engines/memory/unit/relations/join_spec.rb +0 -32
- data/spec/engines/memory/unit/relations/order_spec.rb +0 -28
- data/spec/engines/memory/unit/relations/project_spec.rb +0 -27
- data/spec/engines/memory/unit/relations/skip_spec.rb +0 -31
- data/spec/engines/memory/unit/relations/take_spec.rb +0 -28
- data/spec/engines/memory/unit/relations/where_spec.rb +0 -43
- data/spec/engines/sql/integration/joins/with_adjacency_spec.rb +0 -258
- data/spec/engines/sql/integration/joins/with_aggregations_spec.rb +0 -221
- data/spec/engines/sql/integration/joins/with_compounds_spec.rb +0 -137
- data/spec/engines/sql/unit/engine_spec.rb +0 -65
- data/spec/engines/sql/unit/predicates/binary_spec.rb +0 -140
- data/spec/engines/sql/unit/predicates/equality_spec.rb +0 -75
- data/spec/engines/sql/unit/predicates/in_spec.rb +0 -179
- data/spec/engines/sql/unit/predicates/noteq_spec.rb +0 -75
- data/spec/engines/sql/unit/predicates/predicates_spec.rb +0 -79
- data/spec/engines/sql/unit/primitives/attribute_spec.rb +0 -36
- data/spec/engines/sql/unit/primitives/expression_spec.rb +0 -28
- data/spec/engines/sql/unit/primitives/literal_spec.rb +0 -43
- data/spec/engines/sql/unit/primitives/value_spec.rb +0 -29
- data/spec/engines/sql/unit/relations/alias_spec.rb +0 -53
- data/spec/engines/sql/unit/relations/delete_spec.rb +0 -83
- data/spec/engines/sql/unit/relations/from_spec.rb +0 -64
- data/spec/engines/sql/unit/relations/group_spec.rb +0 -72
- data/spec/engines/sql/unit/relations/having_spec.rb +0 -78
- data/spec/engines/sql/unit/relations/insert_spec.rb +0 -143
- data/spec/engines/sql/unit/relations/join_spec.rb +0 -180
- data/spec/engines/sql/unit/relations/lock_spec.rb +0 -86
- data/spec/engines/sql/unit/relations/order_spec.rb +0 -161
- data/spec/engines/sql/unit/relations/project_spec.rb +0 -143
- data/spec/engines/sql/unit/relations/skip_spec.rb +0 -41
- data/spec/engines/sql/unit/relations/table_spec.rb +0 -122
- data/spec/engines/sql/unit/relations/take_spec.rb +0 -75
- data/spec/engines/sql/unit/relations/update_spec.rb +0 -203
- data/spec/engines/sql/unit/relations/where_spec.rb +0 -72
- data/spec/relations/join_spec.rb +0 -42
- data/spec/relations/relation_spec.rb +0 -31
- data/spec/shared/relation_spec.rb +0 -255
- data/spec/sql/christener_spec.rb +0 -70
- data/spec/support/connections/mysql_connection.rb +0 -14
- data/spec/support/connections/oracle_connection.rb +0 -17
- data/spec/support/connections/postgresql_connection.rb +0 -13
- data/spec/support/connections/sqlite3_connection.rb +0 -24
- data/spec/support/guards.rb +0 -28
- data/spec/support/matchers/disambiguate_attributes.rb +0 -28
- data/spec/support/matchers/hash_the_same_as.rb +0 -26
- data/spec/support/matchers/have_rows.rb +0 -18
- data/spec/support/model.rb +0 -67
- data/spec/support/schemas/mysql_schema.rb +0 -26
- data/spec/support/schemas/oracle_schema.rb +0 -20
- data/spec/support/schemas/postgresql_schema.rb +0 -26
- data/spec/support/schemas/sqlite3_schema.rb +0 -26
@@ -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
|