activerecord 2.0.5 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- data/CHANGELOG +168 -6
- data/README +27 -22
- data/RUNNING_UNIT_TESTS +7 -4
- data/Rakefile +22 -25
- data/lib/active_record.rb +8 -2
- data/lib/active_record/aggregations.rb +21 -12
- data/lib/active_record/association_preload.rb +277 -0
- data/lib/active_record/associations.rb +481 -295
- data/lib/active_record/associations/association_collection.rb +162 -37
- data/lib/active_record/associations/association_proxy.rb +71 -7
- data/lib/active_record/associations/belongs_to_association.rb +5 -3
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +5 -6
- data/lib/active_record/associations/has_and_belongs_to_many_association.rb +12 -64
- data/lib/active_record/associations/has_many_association.rb +8 -73
- data/lib/active_record/associations/has_many_through_association.rb +68 -117
- data/lib/active_record/associations/has_one_association.rb +7 -5
- data/lib/active_record/associations/has_one_through_association.rb +28 -0
- data/lib/active_record/attribute_methods.rb +69 -19
- data/lib/active_record/base.rb +496 -275
- data/lib/active_record/calculations.rb +28 -21
- data/lib/active_record/callbacks.rb +9 -38
- data/lib/active_record/connection_adapters/abstract/connection_specification.rb +3 -2
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +2 -2
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +6 -0
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +232 -45
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +141 -27
- data/lib/active_record/connection_adapters/abstract_adapter.rb +9 -13
- data/lib/active_record/connection_adapters/mysql_adapter.rb +57 -24
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +143 -42
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +1 -1
- data/lib/active_record/connection_adapters/sqlite_adapter.rb +18 -10
- data/lib/active_record/dirty.rb +158 -0
- data/lib/active_record/fixtures.rb +121 -156
- data/lib/active_record/locking/optimistic.rb +14 -11
- data/lib/active_record/locking/pessimistic.rb +2 -2
- data/lib/active_record/migration.rb +157 -77
- data/lib/active_record/named_scope.rb +163 -0
- data/lib/active_record/observer.rb +19 -5
- data/lib/active_record/reflection.rb +34 -14
- data/lib/active_record/schema.rb +7 -14
- data/lib/active_record/schema_dumper.rb +4 -4
- data/lib/active_record/serialization.rb +5 -5
- data/lib/active_record/serializers/json_serializer.rb +37 -28
- data/lib/active_record/serializers/xml_serializer.rb +52 -29
- data/lib/active_record/test_case.rb +36 -0
- data/lib/active_record/timestamp.rb +4 -4
- data/lib/active_record/transactions.rb +3 -3
- data/lib/active_record/validations.rb +182 -248
- data/lib/active_record/version.rb +2 -2
- data/test/{fixtures → assets}/example.log +0 -0
- data/test/{fixtures → assets}/flowers.jpg +0 -0
- data/test/cases/aaa_create_tables_test.rb +24 -0
- data/test/cases/active_schema_test_mysql.rb +95 -0
- data/test/cases/active_schema_test_postgresql.rb +24 -0
- data/test/{adapter_test.rb → cases/adapter_test.rb} +15 -14
- data/test/{adapter_test_sqlserver.rb → cases/adapter_test_sqlserver.rb} +95 -95
- data/test/{aggregations_test.rb → cases/aggregations_test.rb} +20 -20
- data/test/{ar_schema_test.rb → cases/ar_schema_test.rb} +6 -6
- data/test/cases/associations/belongs_to_associations_test.rb +412 -0
- data/test/{associations → cases/associations}/callbacks_test.rb +24 -10
- data/test/{associations → cases/associations}/cascaded_eager_loading_test.rb +18 -17
- data/test/cases/associations/eager_load_nested_include_test.rb +83 -0
- data/test/{associations → cases/associations}/eager_singularization_test.rb +5 -5
- data/test/{associations → cases/associations}/eager_test.rb +216 -51
- data/test/{associations → cases/associations}/extension_test.rb +8 -8
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +684 -0
- data/test/cases/associations/has_many_associations_test.rb +932 -0
- data/test/cases/associations/has_many_through_associations_test.rb +190 -0
- data/test/cases/associations/has_one_associations_test.rb +323 -0
- data/test/cases/associations/has_one_through_associations_test.rb +74 -0
- data/test/{associations → cases/associations}/inner_join_association_test.rb +20 -20
- data/test/{associations → cases/associations}/join_model_test.rb +175 -35
- data/test/cases/associations_test.rb +262 -0
- data/test/{attribute_methods_test.rb → cases/attribute_methods_test.rb} +103 -11
- data/test/{base_test.rb → cases/base_test.rb} +338 -191
- data/test/{binary_test.rb → cases/binary_test.rb} +6 -4
- data/test/{calculations_test.rb → cases/calculations_test.rb} +35 -23
- data/test/{callbacks_test.rb → cases/callbacks_test.rb} +7 -7
- data/test/{class_inheritable_attributes_test.rb → cases/class_inheritable_attributes_test.rb} +3 -3
- data/test/{column_alias_test.rb → cases/column_alias_test.rb} +3 -3
- data/test/{connection_test_firebird.rb → cases/connection_test_firebird.rb} +2 -2
- data/test/{connection_test_mysql.rb → cases/connection_test_mysql.rb} +2 -2
- data/test/{copy_table_test_sqlite.rb → cases/copy_table_test_sqlite.rb} +13 -13
- data/test/{datatype_test_postgresql.rb → cases/datatype_test_postgresql.rb} +8 -8
- data/test/{date_time_test.rb → cases/date_time_test.rb} +5 -5
- data/test/{default_test_firebird.rb → cases/default_test_firebird.rb} +3 -3
- data/test/{defaults_test.rb → cases/defaults_test.rb} +8 -6
- data/test/{deprecated_finder_test.rb → cases/deprecated_finder_test.rb} +3 -3
- data/test/cases/dirty_test.rb +163 -0
- data/test/cases/finder_respond_to_test.rb +76 -0
- data/test/{finder_test.rb → cases/finder_test.rb} +266 -33
- data/test/{fixtures_test.rb → cases/fixtures_test.rb} +88 -72
- data/test/cases/helper.rb +47 -0
- data/test/{inheritance_test.rb → cases/inheritance_test.rb} +61 -17
- data/test/cases/invalid_date_test.rb +24 -0
- data/test/{json_serialization_test.rb → cases/json_serialization_test.rb} +36 -11
- data/test/{lifecycle_test.rb → cases/lifecycle_test.rb} +16 -13
- data/test/{locking_test.rb → cases/locking_test.rb} +17 -10
- data/test/{method_scoping_test.rb → cases/method_scoping_test.rb} +75 -39
- data/test/{migration_test.rb → cases/migration_test.rb} +420 -80
- data/test/{migration_test_firebird.rb → cases/migration_test_firebird.rb} +3 -3
- data/test/{mixin_test.rb → cases/mixin_test.rb} +7 -6
- data/test/{modules_test.rb → cases/modules_test.rb} +11 -6
- data/test/{multiple_db_test.rb → cases/multiple_db_test.rb} +5 -5
- data/test/cases/named_scope_test.rb +157 -0
- data/test/{pk_test.rb → cases/pk_test.rb} +10 -10
- data/test/{query_cache_test.rb → cases/query_cache_test.rb} +12 -10
- data/test/{readonly_test.rb → cases/readonly_test.rb} +11 -11
- data/test/{reflection_test.rb → cases/reflection_test.rb} +15 -14
- data/test/{reserved_word_test_mysql.rb → cases/reserved_word_test_mysql.rb} +4 -5
- data/test/{schema_authorization_test_postgresql.rb → cases/schema_authorization_test_postgresql.rb} +5 -5
- data/test/cases/schema_dumper_test.rb +138 -0
- data/test/cases/schema_test_postgresql.rb +102 -0
- data/test/{serialization_test.rb → cases/serialization_test.rb} +7 -7
- data/test/{synonym_test_oracle.rb → cases/synonym_test_oracle.rb} +5 -5
- data/test/{table_name_test_sqlserver.rb → cases/table_name_test_sqlserver.rb} +3 -3
- data/test/{threaded_connections_test.rb → cases/threaded_connections_test.rb} +7 -7
- data/test/{transactions_test.rb → cases/transactions_test.rb} +31 -5
- data/test/{unconnected_test.rb → cases/unconnected_test.rb} +2 -2
- data/test/{validations_test.rb → cases/validations_test.rb} +141 -39
- data/test/{xml_serialization_test.rb → cases/xml_serialization_test.rb} +12 -12
- data/test/config.rb +5 -0
- data/test/connections/native_db2/connection.rb +1 -1
- data/test/connections/native_firebird/connection.rb +1 -1
- data/test/connections/native_frontbase/connection.rb +1 -1
- data/test/connections/native_mysql/connection.rb +1 -1
- data/test/connections/native_openbase/connection.rb +1 -1
- data/test/connections/native_oracle/connection.rb +1 -1
- data/test/connections/native_postgresql/connection.rb +1 -3
- data/test/connections/native_sqlite/connection.rb +2 -2
- data/test/connections/native_sqlite3/connection.rb +2 -2
- data/test/connections/native_sqlite3/in_memory_connection.rb +3 -3
- data/test/connections/native_sybase/connection.rb +1 -1
- data/test/fixtures/author_addresses.yml +5 -0
- data/test/fixtures/authors.yml +2 -0
- data/test/fixtures/clubs.yml +6 -0
- data/test/fixtures/jobs.yml +7 -0
- data/test/fixtures/members.yml +4 -0
- data/test/fixtures/memberships.yml +20 -0
- data/test/fixtures/owners.yml +7 -0
- data/test/fixtures/people.yml +4 -1
- data/test/fixtures/pets.yml +14 -0
- data/test/fixtures/posts.yml +1 -0
- data/test/fixtures/price_estimates.yml +7 -0
- data/test/fixtures/readers.yml +5 -0
- data/test/fixtures/references.yml +17 -0
- data/test/fixtures/sponsors.yml +9 -0
- data/test/fixtures/subscribers.yml +7 -0
- data/test/fixtures/subscriptions.yml +12 -0
- data/test/fixtures/taggings.yml +4 -1
- data/test/fixtures/topics.yml +22 -2
- data/test/fixtures/warehouse-things.yml +3 -0
- data/test/{fixtures/migrations_with_decimal → migrations/decimal}/1_give_me_big_numbers.rb +0 -0
- data/test/{fixtures/migrations_with_duplicate → migrations/duplicate}/1_people_have_last_names.rb +1 -1
- data/test/{fixtures/migrations_with_duplicate → migrations/duplicate}/2_we_need_reminders.rb +1 -1
- data/test/{fixtures/migrations_with_duplicate → migrations/duplicate}/3_foo.rb +0 -0
- data/test/{fixtures/migrations → migrations/duplicate}/3_innocent_jointable.rb +0 -0
- data/test/migrations/duplicate_names/20080507052938_chunky.rb +7 -0
- data/test/migrations/duplicate_names/20080507053028_chunky.rb +7 -0
- data/test/{fixtures/migrations_with_duplicate → migrations/interleaved/pass_1}/3_innocent_jointable.rb +0 -0
- data/test/{fixtures/migrations → migrations/interleaved/pass_2}/1_people_have_last_names.rb +1 -1
- data/test/{fixtures/migrations_with_missing_versions/4_innocent_jointable.rb → migrations/interleaved/pass_2/3_innocent_jointable.rb} +0 -0
- data/test/{fixtures/migrations_with_missing_versions → migrations/interleaved/pass_3}/1_people_have_last_names.rb +1 -1
- data/test/migrations/interleaved/pass_3/2_i_raise_on_down.rb +8 -0
- data/test/migrations/interleaved/pass_3/3_innocent_jointable.rb +12 -0
- data/test/{fixtures/migrations_with_missing_versions → migrations/missing}/1000_people_have_middle_names.rb +1 -1
- data/test/migrations/missing/1_people_have_last_names.rb +9 -0
- data/test/{fixtures/migrations_with_missing_versions → migrations/missing}/3_we_need_reminders.rb +1 -1
- data/test/migrations/missing/4_innocent_jointable.rb +12 -0
- data/test/migrations/valid/1_people_have_last_names.rb +9 -0
- data/test/{fixtures/migrations → migrations/valid}/2_we_need_reminders.rb +1 -1
- data/test/migrations/valid/3_innocent_jointable.rb +12 -0
- data/test/{fixtures → models}/author.rb +28 -4
- data/test/{fixtures → models}/auto_id.rb +0 -0
- data/test/{fixtures → models}/binary.rb +0 -0
- data/test/{fixtures → models}/book.rb +0 -0
- data/test/{fixtures → models}/categorization.rb +0 -0
- data/test/{fixtures → models}/category.rb +8 -5
- data/test/{fixtures → models}/citation.rb +0 -0
- data/test/models/club.rb +7 -0
- data/test/{fixtures → models}/column_name.rb +0 -0
- data/test/{fixtures → models}/comment.rb +5 -3
- data/test/{fixtures → models}/company.rb +15 -6
- data/test/{fixtures → models}/company_in_module.rb +5 -3
- data/test/{fixtures → models}/computer.rb +0 -1
- data/test/{fixtures → models}/contact.rb +1 -1
- data/test/{fixtures → models}/course.rb +0 -0
- data/test/{fixtures → models}/customer.rb +8 -8
- data/test/{fixtures → models}/default.rb +0 -0
- data/test/{fixtures → models}/developer.rb +14 -10
- data/test/{fixtures → models}/edge.rb +0 -0
- data/test/{fixtures → models}/entrant.rb +0 -0
- data/test/models/guid.rb +2 -0
- data/test/{fixtures → models}/item.rb +0 -0
- data/test/models/job.rb +5 -0
- data/test/{fixtures → models}/joke.rb +0 -0
- data/test/{fixtures → models}/keyboard.rb +0 -0
- data/test/{fixtures → models}/legacy_thing.rb +0 -0
- data/test/{fixtures → models}/matey.rb +0 -0
- data/test/models/member.rb +9 -0
- data/test/models/membership.rb +9 -0
- data/test/{fixtures → models}/minimalistic.rb +0 -0
- data/test/{fixtures → models}/mixed_case_monkey.rb +0 -0
- data/test/{fixtures → models}/movie.rb +0 -0
- data/test/{fixtures → models}/order.rb +2 -2
- data/test/models/owner.rb +4 -0
- data/test/{fixtures → models}/parrot.rb +0 -0
- data/test/models/person.rb +10 -0
- data/test/models/pet.rb +4 -0
- data/test/models/pirate.rb +9 -0
- data/test/{fixtures → models}/post.rb +23 -2
- data/test/models/price_estimate.rb +3 -0
- data/test/{fixtures → models}/project.rb +1 -0
- data/test/{fixtures → models}/reader.rb +0 -0
- data/test/models/reference.rb +4 -0
- data/test/{fixtures → models}/reply.rb +7 -5
- data/test/{fixtures → models}/ship.rb +0 -0
- data/test/models/sponsor.rb +4 -0
- data/test/{fixtures → models}/subject.rb +0 -0
- data/test/{fixtures → models}/subscriber.rb +2 -0
- data/test/models/subscription.rb +4 -0
- data/test/{fixtures → models}/tag.rb +0 -0
- data/test/{fixtures → models}/tagging.rb +0 -0
- data/test/{fixtures → models}/task.rb +0 -0
- data/test/{fixtures → models}/topic.rb +32 -4
- data/test/{fixtures → models}/treasure.rb +2 -0
- data/test/{fixtures → models}/vertex.rb +0 -0
- data/test/models/warehouse_thing.rb +5 -0
- data/test/schema/mysql_specific_schema.rb +12 -0
- data/test/schema/postgresql_specific_schema.rb +103 -0
- data/test/schema/schema.rb +421 -0
- data/test/schema/schema2.rb +6 -0
- data/test/schema/sqlite_specific_schema.rb +25 -0
- data/test/schema/sqlserver_specific_schema.rb +5 -0
- metadata +192 -176
- data/test/aaa_create_tables_test.rb +0 -72
- data/test/abstract_unit.rb +0 -84
- data/test/active_schema_test_mysql.rb +0 -46
- data/test/all.sh +0 -8
- data/test/association_inheritance_reload.rb +0 -14
- data/test/associations_test.rb +0 -2177
- data/test/fixtures/bad_fixtures/attr_with_numeric_first_char +0 -1
- data/test/fixtures/bad_fixtures/attr_with_spaces +0 -1
- data/test/fixtures/bad_fixtures/blank_line +0 -3
- data/test/fixtures/bad_fixtures/duplicate_attributes +0 -3
- data/test/fixtures/bad_fixtures/missing_value +0 -1
- data/test/fixtures/db_definitions/db2.drop.sql +0 -33
- data/test/fixtures/db_definitions/db2.sql +0 -235
- data/test/fixtures/db_definitions/db22.drop.sql +0 -2
- data/test/fixtures/db_definitions/db22.sql +0 -5
- data/test/fixtures/db_definitions/firebird.drop.sql +0 -65
- data/test/fixtures/db_definitions/firebird.sql +0 -310
- data/test/fixtures/db_definitions/firebird2.drop.sql +0 -2
- data/test/fixtures/db_definitions/firebird2.sql +0 -6
- data/test/fixtures/db_definitions/frontbase.drop.sql +0 -33
- data/test/fixtures/db_definitions/frontbase.sql +0 -273
- data/test/fixtures/db_definitions/frontbase2.drop.sql +0 -1
- data/test/fixtures/db_definitions/frontbase2.sql +0 -4
- data/test/fixtures/db_definitions/openbase.drop.sql +0 -2
- data/test/fixtures/db_definitions/openbase.sql +0 -318
- data/test/fixtures/db_definitions/openbase2.drop.sql +0 -2
- data/test/fixtures/db_definitions/openbase2.sql +0 -7
- data/test/fixtures/db_definitions/oracle.drop.sql +0 -67
- data/test/fixtures/db_definitions/oracle.sql +0 -330
- data/test/fixtures/db_definitions/oracle2.drop.sql +0 -2
- data/test/fixtures/db_definitions/oracle2.sql +0 -6
- data/test/fixtures/db_definitions/postgresql.drop.sql +0 -44
- data/test/fixtures/db_definitions/postgresql.sql +0 -292
- data/test/fixtures/db_definitions/postgresql2.drop.sql +0 -2
- data/test/fixtures/db_definitions/postgresql2.sql +0 -4
- data/test/fixtures/db_definitions/schema.rb +0 -354
- data/test/fixtures/db_definitions/schema2.rb +0 -11
- data/test/fixtures/db_definitions/sqlite.drop.sql +0 -33
- data/test/fixtures/db_definitions/sqlite.sql +0 -219
- data/test/fixtures/db_definitions/sqlite2.drop.sql +0 -2
- data/test/fixtures/db_definitions/sqlite2.sql +0 -5
- data/test/fixtures/db_definitions/sybase.drop.sql +0 -35
- data/test/fixtures/db_definitions/sybase.sql +0 -222
- data/test/fixtures/db_definitions/sybase2.drop.sql +0 -4
- data/test/fixtures/db_definitions/sybase2.sql +0 -5
- data/test/fixtures/developers_projects/david_action_controller +0 -3
- data/test/fixtures/developers_projects/david_active_record +0 -3
- data/test/fixtures/developers_projects/jamis_active_record +0 -2
- data/test/fixtures/person.rb +0 -4
- data/test/fixtures/pirate.rb +0 -5
- data/test/fixtures/subscribers/first +0 -2
- data/test/fixtures/subscribers/second +0 -2
- data/test/schema_dumper_test.rb +0 -131
- data/test/schema_test_postgresql.rb +0 -64
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "cases/helper"
|
2
2
|
|
3
3
|
# Without using prepared statements, it makes no sense to test
|
4
4
|
# BLOB data with SQL Server, because the length of a statement is
|
@@ -8,16 +8,18 @@ require 'abstract_unit'
|
|
8
8
|
# BLOB data with DB2 or Firebird, because the length of a statement
|
9
9
|
# is limited to 32KB.
|
10
10
|
unless current_adapter?(:SQLServerAdapter, :SybaseAdapter, :DB2Adapter, :FirebirdAdapter)
|
11
|
-
require '
|
11
|
+
require 'models/binary'
|
12
12
|
|
13
|
-
class BinaryTest <
|
13
|
+
class BinaryTest < ActiveRecord::TestCase
|
14
14
|
FIXTURES = %w(flowers.jpg example.log)
|
15
15
|
|
16
16
|
def test_load_save
|
17
17
|
Binary.delete_all
|
18
18
|
|
19
19
|
FIXTURES.each do |filename|
|
20
|
-
data = File.read("
|
20
|
+
data = File.read(ASSETS_ROOT + "/#{filename}")
|
21
|
+
data.force_encoding('ASCII-8BIT') if data.respond_to?(:force_encoding)
|
22
|
+
data.freeze
|
21
23
|
|
22
24
|
bin = Binary.new(:data => data)
|
23
25
|
assert_equal data, bin.data, 'Newly assigned data differs from original'
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require '
|
3
|
-
require '
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/company'
|
3
|
+
require 'models/topic'
|
4
4
|
|
5
5
|
Company.has_many :accounts
|
6
6
|
|
@@ -8,7 +8,7 @@ class NumericData < ActiveRecord::Base
|
|
8
8
|
self.table_name = 'numeric_data'
|
9
9
|
end
|
10
10
|
|
11
|
-
class CalculationsTest <
|
11
|
+
class CalculationsTest < ActiveRecord::TestCase
|
12
12
|
fixtures :companies, :accounts, :topics
|
13
13
|
|
14
14
|
def test_should_sum_field
|
@@ -79,7 +79,7 @@ class CalculationsTest < Test::Unit::TestCase
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def test_should_group_by_summed_field_having_condition
|
82
|
-
c = Account.sum(:credit_limit, :group => :firm_id,
|
82
|
+
c = Account.sum(:credit_limit, :group => :firm_id,
|
83
83
|
:having => 'sum(credit_limit) > 50')
|
84
84
|
assert_nil c[1]
|
85
85
|
assert_equal 105, c[6]
|
@@ -92,22 +92,26 @@ class CalculationsTest < Test::Unit::TestCase
|
|
92
92
|
assert_equal 105, c[companies(:rails_core)]
|
93
93
|
assert_equal 60, c[companies(:first_client)]
|
94
94
|
end
|
95
|
-
|
95
|
+
|
96
96
|
def test_should_sum_field_with_conditions
|
97
97
|
assert_equal 105, Account.sum(:credit_limit, :conditions => 'firm_id = 6')
|
98
98
|
end
|
99
99
|
|
100
|
+
def test_should_return_zero_if_sum_conditions_return_nothing
|
101
|
+
assert_equal 0, Account.sum(:credit_limit, :conditions => '1 = 2')
|
102
|
+
end
|
103
|
+
|
100
104
|
def test_should_group_by_summed_field_with_conditions
|
101
|
-
c = Account.sum(:credit_limit, :conditions => 'firm_id > 1',
|
105
|
+
c = Account.sum(:credit_limit, :conditions => 'firm_id > 1',
|
102
106
|
:group => :firm_id)
|
103
107
|
assert_nil c[1]
|
104
108
|
assert_equal 105, c[6]
|
105
109
|
assert_equal 60, c[2]
|
106
110
|
end
|
107
|
-
|
111
|
+
|
108
112
|
def test_should_group_by_summed_field_with_conditions_and_having
|
109
|
-
c = Account.sum(:credit_limit, :conditions => 'firm_id > 1',
|
110
|
-
:group => :firm_id,
|
113
|
+
c = Account.sum(:credit_limit, :conditions => 'firm_id > 1',
|
114
|
+
:group => :firm_id,
|
111
115
|
:having => 'sum(credit_limit) > 60')
|
112
116
|
assert_nil c[1]
|
113
117
|
assert_equal 105, c[6]
|
@@ -120,19 +124,19 @@ class CalculationsTest < Test::Unit::TestCase
|
|
120
124
|
assert_equal 105, c[6]
|
121
125
|
assert_equal 60, c[2]
|
122
126
|
end
|
123
|
-
|
127
|
+
|
124
128
|
def test_should_calculate_with_invalid_field
|
125
129
|
assert_equal 6, Account.calculate(:count, '*')
|
126
130
|
assert_equal 6, Account.calculate(:count, :all)
|
127
131
|
end
|
128
|
-
|
132
|
+
|
129
133
|
def test_should_calculate_grouped_with_invalid_field
|
130
134
|
c = Account.count(:all, :group => 'accounts.firm_id')
|
131
135
|
assert_equal 1, c[1]
|
132
136
|
assert_equal 2, c[6]
|
133
137
|
assert_equal 1, c[2]
|
134
138
|
end
|
135
|
-
|
139
|
+
|
136
140
|
def test_should_calculate_grouped_association_with_invalid_field
|
137
141
|
c = Account.count(:all, :group => :firm)
|
138
142
|
assert_equal 1, c[companies(:first_firm)]
|
@@ -171,7 +175,7 @@ class CalculationsTest < Test::Unit::TestCase
|
|
171
175
|
def test_should_not_modify_options_when_using_includes
|
172
176
|
options = {:conditions => 'companies.id > 1', :include => :firm}
|
173
177
|
options_copy = options.dup
|
174
|
-
|
178
|
+
|
175
179
|
Account.count(:all, options)
|
176
180
|
assert_equal options_copy, options
|
177
181
|
end
|
@@ -183,7 +187,7 @@ class CalculationsTest < Test::Unit::TestCase
|
|
183
187
|
assert_equal 3, c['CLIENT']
|
184
188
|
assert_equal 2, c['FIRM']
|
185
189
|
end
|
186
|
-
|
190
|
+
|
187
191
|
def test_should_calculate_grouped_by_function_with_table_alias
|
188
192
|
c = Company.count(:all, :group => "UPPER(companies.#{QUOTED_TYPE})")
|
189
193
|
assert_equal 2, c[nil]
|
@@ -191,7 +195,7 @@ class CalculationsTest < Test::Unit::TestCase
|
|
191
195
|
assert_equal 3, c['CLIENT']
|
192
196
|
assert_equal 2, c['FIRM']
|
193
197
|
end
|
194
|
-
|
198
|
+
|
195
199
|
def test_should_not_overshadow_enumerable_sum
|
196
200
|
assert_equal 6, [1, 2, 3].sum(&:abs)
|
197
201
|
end
|
@@ -223,32 +227,36 @@ class CalculationsTest < Test::Unit::TestCase
|
|
223
227
|
# empty options are valid
|
224
228
|
Company.send(:validate_calculation_options, func)
|
225
229
|
# these options are valid for all calculations
|
226
|
-
[:select, :conditions, :joins, :order, :group, :having, :distinct].each do |opt|
|
230
|
+
[:select, :conditions, :joins, :order, :group, :having, :distinct].each do |opt|
|
227
231
|
Company.send(:validate_calculation_options, func, opt => true)
|
228
232
|
end
|
229
233
|
end
|
230
|
-
|
234
|
+
|
231
235
|
# :include is only valid on :count
|
232
236
|
Company.send(:validate_calculation_options, :count, :include => true)
|
233
237
|
end
|
234
|
-
|
238
|
+
|
235
239
|
assert_raises(ArgumentError) { Company.send(:validate_calculation_options, :sum, :foo => :bar) }
|
236
240
|
assert_raises(ArgumentError) { Company.send(:validate_calculation_options, :count, :foo => :bar) }
|
237
241
|
end
|
238
|
-
|
242
|
+
|
239
243
|
def test_should_count_selected_field_with_include
|
240
244
|
assert_equal 6, Account.count(:distinct => true, :include => :firm)
|
241
245
|
assert_equal 4, Account.count(:distinct => true, :include => :firm, :select => :credit_limit)
|
242
246
|
end
|
243
|
-
|
247
|
+
|
248
|
+
def test_should_count_manual_select_with_include
|
249
|
+
assert_equal 6, Account.count(:select => "DISTINCT accounts.id", :include => :firm)
|
250
|
+
end
|
251
|
+
|
244
252
|
def test_count_with_column_parameter
|
245
253
|
assert_equal 5, Account.count(:firm_id)
|
246
254
|
end
|
247
|
-
|
255
|
+
|
248
256
|
def test_count_with_column_and_options_parameter
|
249
257
|
assert_equal 2, Account.count(:firm_id, :conditions => "credit_limit = 50")
|
250
258
|
end
|
251
|
-
|
259
|
+
|
252
260
|
def test_count_with_no_parameters_isnt_deprecated
|
253
261
|
assert_not_deprecated { Account.count }
|
254
262
|
end
|
@@ -256,4 +264,8 @@ class CalculationsTest < Test::Unit::TestCase
|
|
256
264
|
def test_count_with_too_many_parameters_raises
|
257
265
|
assert_raise(ArgumentError) { Account.count(1, 2, 3) }
|
258
266
|
end
|
267
|
+
|
268
|
+
def test_should_sum_expression
|
269
|
+
assert_equal "636", Account.sum("2 * credit_limit")
|
270
|
+
end
|
259
271
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "cases/helper"
|
2
2
|
|
3
3
|
class CallbackDeveloper < ActiveRecord::Base
|
4
4
|
set_table_name 'developers'
|
@@ -56,7 +56,7 @@ class ParentDeveloper < ActiveRecord::Base
|
|
56
56
|
end
|
57
57
|
|
58
58
|
class ChildDeveloper < ParentDeveloper
|
59
|
-
|
59
|
+
|
60
60
|
end
|
61
61
|
|
62
62
|
class RecursiveCallbackDeveloper < ActiveRecord::Base
|
@@ -126,7 +126,7 @@ class CallbackCancellationDeveloper < ActiveRecord::Base
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
|
-
class CallbacksTest <
|
129
|
+
class CallbacksTest < ActiveRecord::TestCase
|
130
130
|
fixtures :developers
|
131
131
|
|
132
132
|
def test_initialize
|
@@ -361,7 +361,7 @@ class CallbacksTest < Test::Unit::TestCase
|
|
361
361
|
david = ImmutableDeveloper.find(1)
|
362
362
|
assert !david.destroy
|
363
363
|
assert_not_nil ImmutableDeveloper.find_by_id(1)
|
364
|
-
end
|
364
|
+
end
|
365
365
|
|
366
366
|
def test_zzz_callback_returning_false # must be run last since we modify CallbackDeveloper
|
367
367
|
david = CallbackDeveloper.find(1)
|
@@ -384,17 +384,17 @@ class CallbacksTest < Test::Unit::TestCase
|
|
384
384
|
[ :before_validation, :returning_false ]
|
385
385
|
], david.history
|
386
386
|
end
|
387
|
-
|
387
|
+
|
388
388
|
def test_inheritence_of_callbacks
|
389
389
|
parent = ParentDeveloper.new
|
390
390
|
assert !parent.after_save_called
|
391
391
|
parent.save
|
392
392
|
assert parent.after_save_called
|
393
|
-
|
393
|
+
|
394
394
|
child = ChildDeveloper.new
|
395
395
|
assert !child.after_save_called
|
396
396
|
child.save
|
397
397
|
assert child.after_save_called
|
398
398
|
end
|
399
|
-
|
399
|
+
|
400
400
|
end
|
data/test/{class_inheritable_attributes_test.rb → cases/class_inheritable_attributes_test.rb}
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'test/unit'
|
2
|
-
require
|
2
|
+
require "cases/helper"
|
3
3
|
require 'active_support/core_ext/class/inheritable_attributes'
|
4
4
|
|
5
5
|
class A
|
@@ -19,12 +19,12 @@ class D < B
|
|
19
19
|
end
|
20
20
|
|
21
21
|
|
22
|
-
class ClassInheritableAttributesTest <
|
22
|
+
class ClassInheritableAttributesTest < ActiveRecord::TestCase
|
23
23
|
def test_first_level
|
24
24
|
assert_equal [ :one, :two ], B.read_inheritable_attribute("first")
|
25
25
|
assert_equal [ :three ], C.read_inheritable_attribute("first")
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
def test_second_level
|
29
29
|
assert_equal [ :one, :two, :four ], D.read_inheritable_attribute("first")
|
30
30
|
assert_equal [ :one, :two ], B.read_inheritable_attribute("first")
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require '
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/topic'
|
3
3
|
|
4
|
-
class TestColumnAlias <
|
4
|
+
class TestColumnAlias < ActiveRecord::TestCase
|
5
5
|
fixtures :topics
|
6
6
|
|
7
7
|
QUERY = if 'Oracle' == ActiveRecord::Base.connection.adapter_name
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require "
|
1
|
+
require "cases/helper"
|
2
2
|
|
3
|
-
class FirebirdConnectionTest <
|
3
|
+
class FirebirdConnectionTest < ActiveRecord::TestCase
|
4
4
|
def test_charset_properly_set
|
5
5
|
fb_conn = ActiveRecord::Base.connection.instance_variable_get(:@connection)
|
6
6
|
assert_equal 'UTF8', fb_conn.database.character_set
|
@@ -1,37 +1,37 @@
|
|
1
|
-
require
|
1
|
+
require "cases/helper"
|
2
2
|
|
3
|
-
class CopyTableTest <
|
3
|
+
class CopyTableTest < ActiveRecord::TestCase
|
4
4
|
fixtures :companies, :comments
|
5
|
-
|
5
|
+
|
6
6
|
def setup
|
7
7
|
@connection = ActiveRecord::Base.connection
|
8
8
|
class << @connection
|
9
9
|
public :copy_table, :table_structure, :indexes
|
10
10
|
end
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def test_copy_table(from = 'companies', to = 'companies2', options = {})
|
14
14
|
assert_nothing_raised {copy_table(from, to, options)}
|
15
15
|
assert_equal row_count(from), row_count(to)
|
16
|
-
|
16
|
+
|
17
17
|
if block_given?
|
18
18
|
yield from, to, options
|
19
19
|
else
|
20
20
|
assert_equal column_names(from), column_names(to)
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
@connection.drop_table(to) rescue nil
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def test_copy_table_renaming_column
|
27
|
-
test_copy_table('companies', 'companies2',
|
27
|
+
test_copy_table('companies', 'companies2',
|
28
28
|
:rename => {'client_of' => 'fan_of'}) do |from, to, options|
|
29
29
|
expected = column_values(from, 'client_of')
|
30
30
|
assert expected.any?, 'only nils in resultset; real values are needed'
|
31
31
|
assert_equal expected, column_values(to, 'fan_of')
|
32
32
|
end
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def test_copy_table_with_index
|
36
36
|
test_copy_table('comments', 'comments_with_index') do
|
37
37
|
@connection.add_index('comments_with_index', ['post_id', 'type'])
|
@@ -41,11 +41,11 @@ class CopyTableTest < Test::Unit::TestCase
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
def test_copy_table_without_primary_key
|
46
46
|
test_copy_table('developers_projects', 'programmers_projects')
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
protected
|
50
50
|
def copy_table(from, to, options = {})
|
51
51
|
@connection.copy_table(from, to, {:temporary => true}.merge(options))
|
@@ -54,7 +54,7 @@ protected
|
|
54
54
|
def column_names(table)
|
55
55
|
@connection.table_structure(table).map {|column| column['name']}
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
def column_values(table, column)
|
59
59
|
@connection.select_all("SELECT #{column} FROM #{table} ORDER BY id").map {|row| row[column]}
|
60
60
|
end
|
@@ -62,7 +62,7 @@ protected
|
|
62
62
|
def table_indexes_without_name(table)
|
63
63
|
@connection.indexes('comments_with_index').delete(:name)
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
def row_count(table)
|
67
67
|
@connection.select_one("SELECT COUNT(*) AS count FROM #{table}")['count']
|
68
68
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "cases/helper"
|
2
2
|
|
3
3
|
class PostgresqlArray < ActiveRecord::Base
|
4
4
|
end
|
@@ -21,7 +21,7 @@ end
|
|
21
21
|
class PostgresqlOid < ActiveRecord::Base
|
22
22
|
end
|
23
23
|
|
24
|
-
class PostgresqlDataTypeTest <
|
24
|
+
class PostgresqlDataTypeTest < ActiveRecord::TestCase
|
25
25
|
self.use_transactional_fixtures = false
|
26
26
|
|
27
27
|
def setup
|
@@ -30,8 +30,8 @@ class PostgresqlDataTypeTest < Test::Unit::TestCase
|
|
30
30
|
@connection.execute("INSERT INTO postgresql_arrays (commission_by_quarter, nicknames) VALUES ( '{35000,21000,18000,17000}', '{foo,bar,baz}' )")
|
31
31
|
@first_array = PostgresqlArray.find(1)
|
32
32
|
|
33
|
-
@connection.execute("INSERT INTO postgresql_moneys (wealth) VALUES ('
|
34
|
-
@connection.execute("INSERT INTO postgresql_moneys (wealth) VALUES ('
|
33
|
+
@connection.execute("INSERT INTO postgresql_moneys (wealth) VALUES ('567.89'::money)")
|
34
|
+
@connection.execute("INSERT INTO postgresql_moneys (wealth) VALUES ('-567.89'::money)")
|
35
35
|
@first_money = PostgresqlMoney.find(1)
|
36
36
|
@second_money = PostgresqlMoney.find(2)
|
37
37
|
|
@@ -43,10 +43,10 @@ class PostgresqlDataTypeTest < Test::Unit::TestCase
|
|
43
43
|
|
44
44
|
@connection.execute("INSERT INTO postgresql_network_addresses (cidr_address, inet_address, mac_address) VALUES('192.168.0/24', '172.16.1.254/32', '01:23:45:67:89:0a')")
|
45
45
|
@first_network_address = PostgresqlNetworkAddress.find(1)
|
46
|
-
|
46
|
+
|
47
47
|
@connection.execute("INSERT INTO postgresql_bit_strings (bit_string, bit_string_varying) VALUES (B'00010101', X'15')")
|
48
48
|
@first_bit_string = PostgresqlBitString.find(1)
|
49
|
-
|
49
|
+
|
50
50
|
@connection.execute("INSERT INTO postgresql_oids (obj_id) VALUES (1234)")
|
51
51
|
@first_oid = PostgresqlOid.find(1)
|
52
52
|
end
|
@@ -143,11 +143,11 @@ class PostgresqlDataTypeTest < Test::Unit::TestCase
|
|
143
143
|
end
|
144
144
|
|
145
145
|
def test_update_money
|
146
|
-
new_value = 123.45
|
146
|
+
new_value = BigDecimal.new('123.45')
|
147
147
|
assert @first_money.wealth = new_value
|
148
148
|
assert @first_money.save
|
149
149
|
assert @first_money.reload
|
150
|
-
assert_equal @first_money.wealth
|
150
|
+
assert_equal new_value, @first_money.wealth
|
151
151
|
end
|
152
152
|
|
153
153
|
def test_update_number
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require '
|
3
|
-
require '
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/topic'
|
3
|
+
require 'models/task'
|
4
4
|
|
5
|
-
class DateTimeTest <
|
5
|
+
class DateTimeTest < ActiveRecord::TestCase
|
6
6
|
def test_saves_both_date_and_time
|
7
7
|
time_values = [1807, 2, 10, 15, 30, 45]
|
8
8
|
now = DateTime.civil(*time_values)
|
@@ -10,7 +10,7 @@ class DateTimeTest < Test::Unit::TestCase
|
|
10
10
|
task = Task.new
|
11
11
|
task.starting = now
|
12
12
|
task.save!
|
13
|
-
|
13
|
+
|
14
14
|
# check against Time.local_time, since some platforms will return a Time instead of a DateTime
|
15
15
|
assert_equal Time.local_time(*time_values), Task.find(task.id).starting
|
16
16
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require '
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/default'
|
3
3
|
|
4
|
-
class DefaultTest <
|
4
|
+
class DefaultTest < ActiveRecord::TestCase
|
5
5
|
def test_default_timestamp
|
6
6
|
default = Default.new
|
7
7
|
assert_instance_of(Time, default.default_timestamp)
|