ibm_db 3.0.5-x86-mingw32 → 5.0.5-x86-mingw32
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.
- checksums.yaml +5 -5
 - data/CHANGES +4 -0
 - data/LICENSE +1 -1
 - data/ParameterizedQueries README +6 -6
 - data/README +38 -55
 - data/ext/Makefile +269 -0
 - data/ext/extconf.rb +34 -3
 - data/ext/gil_release_version +3 -0
 - data/ext/ibm_db-i386-mingw32.def +2 -0
 - data/ext/ibm_db.c +100 -108
 - data/ext/ibm_db.o +0 -0
 - data/ext/ibm_db.so +0 -0
 - data/ext/mkmf.log +110 -0
 - data/ext/ruby_ibm_db_cli.o +0 -0
 - data/ext/unicode_support_version +3 -0
 - data/lib/active_record/connection_adapters/ibm_db_adapter.rb +923 -527
 - data/lib/active_record/connection_adapters/ibmdb_adapter.rb +4 -1
 - data/lib/mswin32/ibm_db.rb +7 -39
 - data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
 - data/test/active_record/connection_adapters/fake_adapter.rb +8 -5
 - data/test/cases/adapter_test.rb +133 -58
 - data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
 - data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
 - data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
 - data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
 - data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
 - data/test/cases/adapters/mysql2/connection_test.rb +210 -0
 - data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
 - data/test/cases/adapters/mysql2/enum_test.rb +26 -0
 - data/test/cases/adapters/mysql2/explain_test.rb +21 -0
 - data/test/cases/adapters/mysql2/json_test.rb +195 -0
 - data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
 - data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
 - data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
 - data/test/cases/adapters/mysql2/schema_test.rb +126 -0
 - data/test/cases/adapters/mysql2/sp_test.rb +36 -0
 - data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
 - data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
 - data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
 - data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
 - data/test/cases/adapters/postgresql/array_test.rb +339 -0
 - data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
 - data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
 - data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
 - data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
 - data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
 - data/test/cases/adapters/postgresql/citext_test.rb +78 -0
 - data/test/cases/adapters/postgresql/collation_test.rb +53 -0
 - data/test/cases/adapters/postgresql/composite_test.rb +132 -0
 - data/test/cases/adapters/postgresql/connection_test.rb +257 -0
 - data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
 - data/test/cases/adapters/postgresql/domain_test.rb +47 -0
 - data/test/cases/adapters/postgresql/enum_test.rb +91 -0
 - data/test/cases/adapters/postgresql/explain_test.rb +20 -0
 - data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
 - data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
 - data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
 - data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
 - data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
 - data/test/cases/adapters/postgresql/integer_test.rb +25 -0
 - data/test/cases/adapters/postgresql/json_test.rb +237 -0
 - data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
 - data/test/cases/adapters/postgresql/money_test.rb +96 -0
 - data/test/cases/adapters/postgresql/network_test.rb +94 -0
 - data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
 - data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
 - data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
 - data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
 - data/test/cases/adapters/postgresql/range_test.rb +343 -0
 - data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
 - data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
 - data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
 - data/test/cases/adapters/postgresql/schema_test.rb +597 -0
 - data/test/cases/adapters/postgresql/serial_test.rb +154 -0
 - data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
 - data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
 - data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
 - data/test/cases/adapters/postgresql/utils_test.rb +62 -0
 - data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
 - data/test/cases/adapters/postgresql/xml_test.rb +54 -0
 - data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
 - data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
 - data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
 - data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
 - data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
 - data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
 - data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
 - data/test/cases/aggregations_test.rb +11 -1
 - data/test/cases/ar_schema_test.rb +35 -50
 - data/test/cases/associations/association_scope_test.rb +1 -6
 - data/test/cases/associations/belongs_to_associations_test.rb +122 -10
 - data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
 - data/test/cases/associations/callbacks_test.rb +5 -7
 - data/test/cases/associations/cascaded_eager_loading_test.rb +1 -1
 - data/test/cases/associations/eager_load_nested_include_test.rb +1 -3
 - data/test/cases/associations/eager_test.rb +158 -73
 - data/test/cases/associations/extension_test.rb +7 -2
 - data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +64 -32
 - data/test/cases/associations/has_many_associations_test.rb +362 -43
 - data/test/cases/associations/has_many_through_associations_test.rb +108 -41
 - data/test/cases/associations/has_one_associations_test.rb +105 -8
 - data/test/cases/associations/has_one_through_associations_test.rb +6 -3
 - data/test/cases/associations/inner_join_association_test.rb +3 -3
 - data/test/cases/associations/inverse_associations_test.rb +38 -11
 - data/test/cases/associations/join_model_test.rb +59 -36
 - data/test/cases/associations/left_outer_join_association_test.rb +88 -0
 - data/test/cases/associations/nested_through_associations_test.rb +2 -2
 - data/test/cases/associations/required_test.rb +25 -5
 - data/test/cases/associations_test.rb +39 -34
 - data/test/cases/attribute_decorators_test.rb +9 -8
 - data/test/cases/attribute_methods/read_test.rb +5 -5
 - data/test/cases/attribute_methods_test.rb +97 -40
 - data/test/cases/attribute_set_test.rb +64 -4
 - data/test/cases/attribute_test.rb +84 -18
 - data/test/cases/attributes_test.rb +151 -34
 - data/test/cases/autosave_association_test.rb +149 -36
 - data/test/cases/base_test.rb +290 -241
 - data/test/cases/batches_test.rb +299 -22
 - data/test/cases/binary_test.rb +2 -10
 - data/test/cases/bind_parameter_test.rb +76 -66
 - data/test/cases/cache_key_test.rb +26 -0
 - data/test/cases/calculations_test.rb +167 -15
 - data/test/cases/callbacks_test.rb +161 -68
 - data/test/cases/coders/json_test.rb +15 -0
 - data/test/cases/collection_cache_key_test.rb +115 -0
 - data/test/cases/column_definition_test.rb +26 -57
 - data/test/cases/comment_test.rb +145 -0
 - data/test/cases/connection_adapters/adapter_leasing_test.rb +5 -3
 - data/test/cases/connection_adapters/connection_handler_test.rb +128 -21
 - data/test/cases/connection_adapters/connection_specification_test.rb +1 -1
 - data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +0 -38
 - data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -1
 - data/test/cases/connection_adapters/schema_cache_test.rb +8 -3
 - data/test/cases/connection_adapters/type_lookup_test.rb +15 -7
 - data/test/cases/connection_management_test.rb +46 -56
 - data/test/cases/connection_pool_test.rb +195 -20
 - data/test/cases/connection_specification/resolver_test.rb +15 -0
 - data/test/cases/counter_cache_test.rb +10 -5
 - data/test/cases/custom_locking_test.rb +1 -1
 - data/test/cases/database_statements_test.rb +18 -3
 - data/test/cases/{invalid_date_test.rb → date_test.rb} +13 -1
 - data/test/cases/date_time_precision_test.rb +107 -0
 - data/test/cases/defaults_test.rb +85 -89
 - data/test/cases/dirty_test.rb +30 -52
 - data/test/cases/disconnected_test.rb +4 -2
 - data/test/cases/enum_test.rb +178 -24
 - data/test/cases/errors_test.rb +16 -0
 - data/test/cases/explain_test.rb +32 -21
 - data/test/cases/finder_test.rb +273 -148
 - data/test/cases/fixture_set/file_test.rb +18 -0
 - data/test/cases/fixtures_test.rb +112 -32
 - data/test/cases/forbidden_attributes_protection_test.rb +69 -3
 - data/test/cases/helper.rb +10 -16
 - data/test/cases/hot_compatibility_test.rb +89 -1
 - data/test/cases/inheritance_test.rb +284 -53
 - data/test/cases/integration_test.rb +23 -7
 - data/test/cases/invalid_connection_test.rb +4 -2
 - data/test/cases/invertible_migration_test.rb +124 -32
 - data/test/cases/json_serialization_test.rb +11 -2
 - data/test/cases/locking_test.rb +22 -6
 - data/test/cases/log_subscriber_test.rb +106 -17
 - data/test/cases/migration/change_schema_test.rb +60 -114
 - data/test/cases/migration/change_table_test.rb +34 -2
 - data/test/cases/migration/column_attributes_test.rb +7 -23
 - data/test/cases/migration/column_positioning_test.rb +8 -8
 - data/test/cases/migration/columns_test.rb +17 -11
 - data/test/cases/migration/command_recorder_test.rb +47 -2
 - data/test/cases/migration/compatibility_test.rb +118 -0
 - data/test/cases/migration/create_join_table_test.rb +21 -12
 - data/test/cases/migration/foreign_key_test.rb +52 -18
 - data/test/cases/migration/index_test.rb +14 -12
 - data/test/cases/migration/logger_test.rb +1 -1
 - data/test/cases/migration/pending_migrations_test.rb +0 -1
 - data/test/cases/migration/references_foreign_key_test.rb +59 -7
 - data/test/cases/migration/references_index_test.rb +4 -4
 - data/test/cases/migration/references_statements_test.rb +26 -6
 - data/test/cases/migration/rename_table_test.rb +25 -25
 - data/test/cases/migration_test.rb +279 -81
 - data/test/cases/migrator_test.rb +91 -8
 - data/test/cases/mixin_test.rb +0 -2
 - data/test/cases/modules_test.rb +3 -4
 - data/test/cases/multiparameter_attributes_test.rb +24 -2
 - data/test/cases/multiple_db_test.rb +11 -4
 - data/test/cases/nested_attributes_test.rb +61 -33
 - data/test/cases/persistence_test.rb +102 -10
 - data/test/cases/pooled_connections_test.rb +3 -3
 - data/test/cases/primary_keys_test.rb +170 -31
 - data/test/cases/query_cache_test.rb +216 -96
 - data/test/cases/quoting_test.rb +65 -19
 - data/test/cases/readonly_test.rb +2 -1
 - data/test/cases/reflection_test.rb +68 -22
 - data/test/cases/relation/delegation_test.rb +3 -8
 - data/test/cases/relation/merging_test.rb +10 -14
 - data/test/cases/relation/mutation_test.rb +42 -24
 - data/test/cases/relation/or_test.rb +92 -0
 - data/test/cases/relation/predicate_builder_test.rb +4 -2
 - data/test/cases/relation/record_fetch_warning_test.rb +40 -0
 - data/test/cases/relation/where_chain_test.rb +23 -99
 - data/test/cases/relation/where_clause_test.rb +182 -0
 - data/test/cases/relation/where_test.rb +45 -23
 - data/test/cases/relation_test.rb +67 -58
 - data/test/cases/relations_test.rb +249 -38
 - data/test/cases/result_test.rb +10 -0
 - data/test/cases/sanitize_test.rb +108 -15
 - data/test/cases/schema_dumper_test.rb +119 -125
 - data/test/cases/schema_loading_test.rb +52 -0
 - data/test/cases/scoping/default_scoping_test.rb +113 -39
 - data/test/cases/scoping/named_scoping_test.rb +46 -9
 - data/test/cases/scoping/relation_scoping_test.rb +47 -4
 - data/test/cases/secure_token_test.rb +32 -0
 - data/test/cases/serialization_test.rb +1 -1
 - data/test/cases/serialized_attribute_test.rb +93 -6
 - data/test/cases/statement_cache_test.rb +38 -0
 - data/test/cases/store_test.rb +2 -1
 - data/test/cases/suppressor_test.rb +63 -0
 - data/test/cases/tasks/database_tasks_test.rb +73 -9
 - data/test/cases/tasks/mysql_rake_test.rb +139 -118
 - data/test/cases/tasks/postgresql_rake_test.rb +60 -6
 - data/test/cases/tasks/sqlite_rake_test.rb +30 -3
 - data/test/cases/test_case.rb +28 -20
 - data/test/cases/test_fixtures_test.rb +36 -0
 - data/test/cases/time_precision_test.rb +103 -0
 - data/test/cases/timestamp_test.rb +44 -10
 - data/test/cases/touch_later_test.rb +121 -0
 - data/test/cases/transaction_callbacks_test.rb +128 -62
 - data/test/cases/transaction_isolation_test.rb +2 -2
 - data/test/cases/transactions_test.rb +61 -43
 - data/test/cases/type/adapter_specific_registry_test.rb +133 -0
 - data/test/cases/type/date_time_test.rb +14 -0
 - data/test/cases/type/integer_test.rb +2 -96
 - data/test/cases/type/string_test.rb +0 -14
 - data/test/cases/type_test.rb +39 -0
 - data/test/cases/types_test.rb +1 -118
 - data/test/cases/unconnected_test.rb +1 -1
 - data/test/cases/validations/absence_validation_test.rb +73 -0
 - data/test/cases/validations/association_validation_test.rb +13 -2
 - data/test/cases/validations/i18n_validation_test.rb +6 -10
 - data/test/cases/validations/length_validation_test.rb +62 -30
 - data/test/cases/validations/presence_validation_test.rb +36 -1
 - data/test/cases/validations/uniqueness_validation_test.rb +128 -37
 - data/test/cases/validations_repair_helper.rb +2 -6
 - data/test/cases/validations_test.rb +36 -7
 - data/test/cases/view_test.rb +102 -5
 - data/test/cases/yaml_serialization_test.rb +21 -26
 - data/test/config.example.yml +97 -0
 - data/test/fixtures/bad_posts.yml +9 -0
 - data/test/fixtures/books.yml +20 -0
 - data/test/fixtures/content.yml +3 -0
 - data/test/fixtures/content_positions.yml +3 -0
 - data/test/fixtures/dead_parrots.yml +5 -0
 - data/test/fixtures/live_parrots.yml +4 -0
 - data/test/fixtures/naked/yml/parrots.yml +2 -0
 - data/test/fixtures/naked/yml/trees.yml +3 -0
 - data/test/fixtures/nodes.yml +29 -0
 - data/test/fixtures/other_comments.yml +6 -0
 - data/test/fixtures/other_dogs.yml +2 -0
 - data/test/fixtures/other_posts.yml +7 -0
 - data/test/fixtures/price_estimates.yml +10 -1
 - data/test/fixtures/trees.yml +3 -0
 - data/test/migrations/10_urban/9_add_expressions.rb +1 -1
 - data/test/migrations/decimal/1_give_me_big_numbers.rb +1 -1
 - data/test/migrations/magic/1_currencies_have_symbols.rb +1 -1
 - data/test/migrations/missing/1000_people_have_middle_names.rb +2 -2
 - data/test/migrations/missing/1_people_have_last_names.rb +2 -2
 - data/test/migrations/missing/3_we_need_reminders.rb +2 -2
 - data/test/migrations/missing/4_innocent_jointable.rb +2 -2
 - data/test/migrations/rename/1_we_need_things.rb +2 -2
 - data/test/migrations/rename/2_rename_things.rb +2 -2
 - data/test/migrations/to_copy/1_people_have_hobbies.rb +1 -1
 - data/test/migrations/to_copy/2_people_have_descriptions.rb +1 -1
 - data/test/migrations/to_copy2/1_create_articles.rb +1 -1
 - data/test/migrations/to_copy2/2_create_comments.rb +1 -1
 - data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +1 -1
 - data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +1 -1
 - data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +1 -1
 - data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +1 -1
 - data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +1 -1
 - data/test/migrations/valid/1_valid_people_have_last_names.rb +1 -1
 - data/test/migrations/valid/2_we_need_reminders.rb +2 -2
 - data/test/migrations/valid/3_innocent_jointable.rb +2 -2
 - data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +1 -1
 - data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -2
 - data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +2 -2
 - data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +1 -1
 - data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +1 -1
 - data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +1 -1
 - data/test/migrations/version_check/20131219224947_migration_version_check.rb +1 -1
 - data/test/models/admin/randomly_named_c1.rb +6 -2
 - data/test/models/aircraft.rb +1 -0
 - data/test/models/author.rb +4 -7
 - data/test/models/bird.rb +1 -1
 - data/test/models/book.rb +5 -0
 - data/test/models/bulb.rb +2 -1
 - data/test/models/car.rb +3 -0
 - data/test/models/cat.rb +10 -0
 - data/test/models/chef.rb +1 -0
 - data/test/models/club.rb +2 -0
 - data/test/models/comment.rb +17 -5
 - data/test/models/company.rb +4 -2
 - data/test/models/company_in_module.rb +1 -1
 - data/test/models/contact.rb +1 -1
 - data/test/models/content.rb +40 -0
 - data/test/models/customer.rb +8 -2
 - data/test/models/developer.rb +19 -0
 - data/test/models/face.rb +1 -1
 - data/test/models/guitar.rb +4 -0
 - data/test/models/hotel.rb +2 -0
 - data/test/models/member.rb +1 -0
 - data/test/models/member_detail.rb +4 -3
 - data/test/models/mentor.rb +3 -0
 - data/test/models/mocktail_designer.rb +2 -0
 - data/test/models/node.rb +5 -0
 - data/test/models/non_primary_key.rb +2 -0
 - data/test/models/notification.rb +3 -0
 - data/test/models/other_dog.rb +5 -0
 - data/test/models/owner.rb +4 -1
 - data/test/models/parrot.rb +6 -7
 - data/test/models/person.rb +0 -1
 - data/test/models/pet.rb +3 -0
 - data/test/models/pet_treasure.rb +6 -0
 - data/test/models/pirate.rb +3 -3
 - data/test/models/post.rb +18 -9
 - data/test/models/project.rb +9 -0
 - data/test/models/randomly_named_c1.rb +1 -1
 - data/test/models/recipe.rb +3 -0
 - data/test/models/ship.rb +8 -2
 - data/test/models/tag.rb +6 -0
 - data/test/models/topic.rb +2 -8
 - data/test/models/tree.rb +3 -0
 - data/test/models/tuning_peg.rb +4 -0
 - data/test/models/user.rb +14 -0
 - data/test/models/uuid_item.rb +6 -0
 - data/test/schema/mysql2_specific_schema.rb +33 -23
 - data/test/schema/oracle_specific_schema.rb +1 -4
 - data/test/schema/postgresql_specific_schema.rb +36 -124
 - data/test/schema/schema.rb +170 -65
 - data/test/schema/schema.rb.original +1057 -0
 - data/test/schema/sqlite_specific_schema.rb +1 -5
 - data/test/support/connection.rb +1 -0
 - data/test/support/schema_dumping_helper.rb +1 -1
 - data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
 - data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
 - metadata +146 -30
 - data/lib/mswin32/rb19x/ibm_db.so +0 -0
 - data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
 - data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
 - data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
 - data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
 - data/test/cases/attribute_methods/serialization_test.rb +0 -29
 - data/test/cases/migration/change_schema_test - Copy.rb +0 -448
 - data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
 - data/test/cases/migration/table_and_index_test.rb +0 -24
 - data/test/cases/relation/where_test2.rb +0 -36
 - data/test/cases/type/decimal_test.rb +0 -56
 - data/test/cases/type/unsigned_integer_test.rb +0 -18
 - data/test/cases/xml_serialization_test.rb +0 -457
 - data/test/fixtures/naked/csv/accounts.csv +0 -1
 - data/test/schema/mysql_specific_schema.rb +0 -70
 
| 
         @@ -73,10 +73,15 @@ class AssociationsExtensionsTest < ActiveRecord::TestCase 
     | 
|
| 
       73 
73 
     | 
    
         
             
                assert_equal post.association(:comments), post.comments.where('1=1').the_association
         
     | 
| 
       74 
74 
     | 
    
         
             
              end
         
     | 
| 
       75 
75 
     | 
    
         | 
| 
      
 76 
     | 
    
         
            +
              def test_association_with_default_scope
         
     | 
| 
      
 77 
     | 
    
         
            +
                assert_raises OopsError do
         
     | 
| 
      
 78 
     | 
    
         
            +
                  posts(:welcome).comments.destroy_all
         
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
              end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
       76 
82 
     | 
    
         
             
              private
         
     | 
| 
       77 
83 
     | 
    
         | 
| 
       78 
84 
     | 
    
         
             
                def extend!(model)
         
     | 
| 
       79 
     | 
    
         
            -
                   
     | 
| 
       80 
     | 
    
         
            -
                  builder.define_extensions(model)
         
     | 
| 
      
 85 
     | 
    
         
            +
                  ActiveRecord::Associations::Builder::HasMany.define_extensions(model, :association_name) { }
         
     | 
| 
       81 
86 
     | 
    
         
             
                end
         
     | 
| 
       82 
87 
     | 
    
         
             
            end
         
     | 
| 
         @@ -19,6 +19,7 @@ require 'models/professor' 
     | 
|
| 
       19 
19 
     | 
    
         
             
            require 'models/treasure'
         
     | 
| 
       20 
20 
     | 
    
         
             
            require 'models/price_estimate'
         
     | 
| 
       21 
21 
     | 
    
         
             
            require 'models/club'
         
     | 
| 
      
 22 
     | 
    
         
            +
            require 'models/user'
         
     | 
| 
       22 
23 
     | 
    
         
             
            require 'models/member'
         
     | 
| 
       23 
24 
     | 
    
         
             
            require 'models/membership'
         
     | 
| 
       24 
25 
     | 
    
         
             
            require 'models/sponsor'
         
     | 
| 
         @@ -146,6 +147,19 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       146 
147 
     | 
    
         
             
                assert_equal 1, country.treaties.count
         
     | 
| 
       147 
148 
     | 
    
         
             
              end
         
     | 
| 
       148 
149 
     | 
    
         | 
| 
      
 150 
     | 
    
         
            +
              def test_join_table_composite_primary_key_should_not_warn
         
     | 
| 
      
 151 
     | 
    
         
            +
                country = Country.new(:name => 'India')
         
     | 
| 
      
 152 
     | 
    
         
            +
                country.country_id = 'c1'
         
     | 
| 
      
 153 
     | 
    
         
            +
                country.save!
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                treaty = Treaty.new(:name => 'peace')
         
     | 
| 
      
 156 
     | 
    
         
            +
                treaty.treaty_id = 't1'
         
     | 
| 
      
 157 
     | 
    
         
            +
                warning = capture(:stderr) do
         
     | 
| 
      
 158 
     | 
    
         
            +
                  country.treaties << treaty
         
     | 
| 
      
 159 
     | 
    
         
            +
                end
         
     | 
| 
      
 160 
     | 
    
         
            +
                assert_no_match(/WARNING: Active Record does not support composite primary key\./, warning)
         
     | 
| 
      
 161 
     | 
    
         
            +
              end
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
       149 
163 
     | 
    
         
             
              def test_has_and_belongs_to_many
         
     | 
| 
       150 
164 
     | 
    
         
             
                david = Developer.find(1)
         
     | 
| 
       151 
165 
     | 
    
         | 
| 
         @@ -168,8 +182,8 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       168 
182 
     | 
    
         
             
                jamis.projects << action_controller
         
     | 
| 
       169 
183 
     | 
    
         | 
| 
       170 
184 
     | 
    
         
             
                assert_equal 2, jamis.projects.size
         
     | 
| 
       171 
     | 
    
         
            -
                assert_equal 2, jamis.projects 
     | 
| 
       172 
     | 
    
         
            -
                assert_equal 2, action_controller.developers 
     | 
| 
      
 185 
     | 
    
         
            +
                assert_equal 2, jamis.projects.reload.size
         
     | 
| 
      
 186 
     | 
    
         
            +
                assert_equal 2, action_controller.developers.reload.size
         
     | 
| 
       173 
187 
     | 
    
         
             
              end
         
     | 
| 
       174 
188 
     | 
    
         | 
| 
       175 
189 
     | 
    
         
             
              def test_adding_type_mismatch
         
     | 
| 
         @@ -187,9 +201,9 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       187 
201 
     | 
    
         | 
| 
       188 
202 
     | 
    
         
             
                action_controller.developers << jamis
         
     | 
| 
       189 
203 
     | 
    
         | 
| 
       190 
     | 
    
         
            -
                assert_equal 2, jamis.projects 
     | 
| 
      
 204 
     | 
    
         
            +
                assert_equal 2, jamis.projects.reload.size
         
     | 
| 
       191 
205 
     | 
    
         
             
                assert_equal 2, action_controller.developers.size
         
     | 
| 
       192 
     | 
    
         
            -
                assert_equal 2, action_controller.developers 
     | 
| 
      
 206 
     | 
    
         
            +
                assert_equal 2, action_controller.developers.reload.size
         
     | 
| 
       193 
207 
     | 
    
         
             
              end
         
     | 
| 
       194 
208 
     | 
    
         | 
| 
       195 
209 
     | 
    
         
             
              def test_adding_from_the_project_fixed_timestamp
         
     | 
| 
         @@ -203,9 +217,9 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       203 
217 
     | 
    
         
             
                action_controller.developers << jamis
         
     | 
| 
       204 
218 
     | 
    
         | 
| 
       205 
219 
     | 
    
         
             
                assert_equal updated_at, jamis.updated_at
         
     | 
| 
       206 
     | 
    
         
            -
                assert_equal 2, jamis.projects 
     | 
| 
      
 220 
     | 
    
         
            +
                assert_equal 2, jamis.projects.reload.size
         
     | 
| 
       207 
221 
     | 
    
         
             
                assert_equal 2, action_controller.developers.size
         
     | 
| 
       208 
     | 
    
         
            -
                assert_equal 2, action_controller.developers 
     | 
| 
      
 222 
     | 
    
         
            +
                assert_equal 2, action_controller.developers.reload.size
         
     | 
| 
       209 
223 
     | 
    
         
             
              end
         
     | 
| 
       210 
224 
     | 
    
         | 
| 
       211 
225 
     | 
    
         
             
              def test_adding_multiple
         
     | 
| 
         @@ -214,7 +228,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       214 
228 
     | 
    
         
             
                aredridel.projects.reload
         
     | 
| 
       215 
229 
     | 
    
         
             
                aredridel.projects.push(Project.find(1), Project.find(2))
         
     | 
| 
       216 
230 
     | 
    
         
             
                assert_equal 2, aredridel.projects.size
         
     | 
| 
       217 
     | 
    
         
            -
                assert_equal 2, aredridel.projects 
     | 
| 
      
 231 
     | 
    
         
            +
                assert_equal 2, aredridel.projects.reload.size
         
     | 
| 
       218 
232 
     | 
    
         
             
              end
         
     | 
| 
       219 
233 
     | 
    
         | 
| 
       220 
234 
     | 
    
         
             
              def test_adding_a_collection
         
     | 
| 
         @@ -223,7 +237,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       223 
237 
     | 
    
         
             
                aredridel.projects.reload
         
     | 
| 
       224 
238 
     | 
    
         
             
                aredridel.projects.concat([Project.find(1), Project.find(2)])
         
     | 
| 
       225 
239 
     | 
    
         
             
                assert_equal 2, aredridel.projects.size
         
     | 
| 
       226 
     | 
    
         
            -
                assert_equal 2, aredridel.projects 
     | 
| 
      
 240 
     | 
    
         
            +
                assert_equal 2, aredridel.projects.reload.size
         
     | 
| 
       227 
241 
     | 
    
         
             
              end
         
     | 
| 
       228 
242 
     | 
    
         | 
| 
       229 
243 
     | 
    
         
             
              def test_habtm_adding_before_save
         
     | 
| 
         @@ -238,7 +252,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       238 
252 
     | 
    
         
             
                assert_equal no_of_devels+1, Developer.count
         
     | 
| 
       239 
253 
     | 
    
         
             
                assert_equal no_of_projects+1, Project.count
         
     | 
| 
       240 
254 
     | 
    
         
             
                assert_equal 2, aredridel.projects.size
         
     | 
| 
       241 
     | 
    
         
            -
                assert_equal 2, aredridel.projects 
     | 
| 
      
 255 
     | 
    
         
            +
                assert_equal 2, aredridel.projects.reload.size
         
     | 
| 
       242 
256 
     | 
    
         
             
              end
         
     | 
| 
       243 
257 
     | 
    
         | 
| 
       244 
258 
     | 
    
         
             
              def test_habtm_saving_multiple_relationships
         
     | 
| 
         @@ -255,7 +269,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       255 
269 
     | 
    
         
             
                assert_equal developers, new_project.developers
         
     | 
| 
       256 
270 
     | 
    
         
             
              end
         
     | 
| 
       257 
271 
     | 
    
         | 
| 
       258 
     | 
    
         
            -
              def  
     | 
| 
      
 272 
     | 
    
         
            +
              def test_habtm_distinct_order_preserved
         
     | 
| 
       259 
273 
     | 
    
         
             
                assert_equal developers(:poor_jamis, :jamis, :david), projects(:active_record).non_unique_developers
         
     | 
| 
       260 
274 
     | 
    
         
             
                assert_equal developers(:poor_jamis, :jamis, :david), projects(:active_record).developers
         
     | 
| 
       261 
275 
     | 
    
         
             
              end
         
     | 
| 
         @@ -360,7 +374,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       360 
374 
     | 
    
         
             
                assert_equal  'Yet Another Testing Title', another_post.title
         
     | 
| 
       361 
375 
     | 
    
         
             
              end
         
     | 
| 
       362 
376 
     | 
    
         | 
| 
       363 
     | 
    
         
            -
              def  
     | 
| 
      
 377 
     | 
    
         
            +
              def test_distinct_after_the_fact
         
     | 
| 
       364 
378 
     | 
    
         
             
                dev = developers(:jamis)
         
     | 
| 
       365 
379 
     | 
    
         
             
                dev.projects << projects(:active_record)
         
     | 
| 
       366 
380 
     | 
    
         
             
                dev.projects << projects(:active_record)
         
     | 
| 
         @@ -369,13 +383,13 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       369 
383 
     | 
    
         
             
                assert_equal 1, dev.projects.distinct.size
         
     | 
| 
       370 
384 
     | 
    
         
             
              end
         
     | 
| 
       371 
385 
     | 
    
         | 
| 
       372 
     | 
    
         
            -
              def  
     | 
| 
      
 386 
     | 
    
         
            +
              def test_distinct_before_the_fact
         
     | 
| 
       373 
387 
     | 
    
         
             
                projects(:active_record).developers << developers(:jamis)
         
     | 
| 
       374 
388 
     | 
    
         
             
                projects(:active_record).developers << developers(:david)
         
     | 
| 
       375 
389 
     | 
    
         
             
                assert_equal 3, projects(:active_record, :reload).developers.size
         
     | 
| 
       376 
390 
     | 
    
         
             
              end
         
     | 
| 
       377 
391 
     | 
    
         | 
| 
       378 
     | 
    
         
            -
              def  
     | 
| 
      
 392 
     | 
    
         
            +
              def test_distinct_option_prevents_duplicate_push
         
     | 
| 
       379 
393 
     | 
    
         
             
                project = projects(:active_record)
         
     | 
| 
       380 
394 
     | 
    
         
             
                project.developers << developers(:jamis)
         
     | 
| 
       381 
395 
     | 
    
         
             
                project.developers << developers(:david)
         
     | 
| 
         @@ -386,7 +400,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       386 
400 
     | 
    
         
             
                assert_equal 3, project.developers.size
         
     | 
| 
       387 
401 
     | 
    
         
             
              end
         
     | 
| 
       388 
402 
     | 
    
         | 
| 
       389 
     | 
    
         
            -
              def  
     | 
| 
      
 403 
     | 
    
         
            +
              def test_distinct_when_association_already_loaded
         
     | 
| 
       390 
404 
     | 
    
         
             
                project = projects(:active_record)
         
     | 
| 
       391 
405 
     | 
    
         
             
                project.developers << [ developers(:jamis), developers(:david), developers(:jamis), developers(:david) ]
         
     | 
| 
       392 
406 
     | 
    
         
             
                assert_equal 3, Project.includes(:developers).find(project.id).developers.size
         
     | 
| 
         @@ -402,8 +416,8 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       402 
416 
     | 
    
         
             
                david.projects.delete(active_record)
         
     | 
| 
       403 
417 
     | 
    
         | 
| 
       404 
418 
     | 
    
         
             
                assert_equal 1, david.projects.size
         
     | 
| 
       405 
     | 
    
         
            -
                assert_equal 1, david.projects 
     | 
| 
       406 
     | 
    
         
            -
                assert_equal 2, active_record.developers 
     | 
| 
      
 419 
     | 
    
         
            +
                assert_equal 1, david.projects.reload.size
         
     | 
| 
      
 420 
     | 
    
         
            +
                assert_equal 2, active_record.developers.reload.size
         
     | 
| 
       407 
421 
     | 
    
         
             
              end
         
     | 
| 
       408 
422 
     | 
    
         | 
| 
       409 
423 
     | 
    
         
             
              def test_deleting_array
         
     | 
| 
         @@ -411,7 +425,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       411 
425 
     | 
    
         
             
                david.projects.reload
         
     | 
| 
       412 
426 
     | 
    
         
             
                david.projects.delete(Project.all.to_a)
         
     | 
| 
       413 
427 
     | 
    
         
             
                assert_equal 0, david.projects.size
         
     | 
| 
       414 
     | 
    
         
            -
                assert_equal 0, david.projects 
     | 
| 
      
 428 
     | 
    
         
            +
                assert_equal 0, david.projects.reload.size
         
     | 
| 
       415 
429 
     | 
    
         
             
              end
         
     | 
| 
       416 
430 
     | 
    
         | 
| 
       417 
431 
     | 
    
         
             
              def test_deleting_all
         
     | 
| 
         @@ -419,7 +433,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       419 
433 
     | 
    
         
             
                david.projects.reload
         
     | 
| 
       420 
434 
     | 
    
         
             
                david.projects.clear
         
     | 
| 
       421 
435 
     | 
    
         
             
                assert_equal 0, david.projects.size
         
     | 
| 
       422 
     | 
    
         
            -
                assert_equal 0, david.projects 
     | 
| 
      
 436 
     | 
    
         
            +
                assert_equal 0, david.projects.reload.size
         
     | 
| 
       423 
437 
     | 
    
         
             
              end
         
     | 
| 
       424 
438 
     | 
    
         | 
| 
       425 
439 
     | 
    
         
             
              def test_removing_associations_on_destroy
         
     | 
| 
         @@ -445,7 +459,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       445 
459 
     | 
    
         
             
                assert join_records.empty?
         
     | 
| 
       446 
460 
     | 
    
         | 
| 
       447 
461 
     | 
    
         
             
                assert_equal 1, david.reload.projects.size
         
     | 
| 
       448 
     | 
    
         
            -
                assert_equal 1, david.projects 
     | 
| 
      
 462 
     | 
    
         
            +
                assert_equal 1, david.projects.reload.size
         
     | 
| 
       449 
463 
     | 
    
         
             
              end
         
     | 
| 
       450 
464 
     | 
    
         | 
| 
       451 
465 
     | 
    
         
             
              def test_destroying_many
         
     | 
| 
         @@ -461,7 +475,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       461 
475 
     | 
    
         
             
                assert join_records.empty?
         
     | 
| 
       462 
476 
     | 
    
         | 
| 
       463 
477 
     | 
    
         
             
                assert_equal 0, david.reload.projects.size
         
     | 
| 
       464 
     | 
    
         
            -
                assert_equal 0, david.projects 
     | 
| 
      
 478 
     | 
    
         
            +
                assert_equal 0, david.projects.reload.size
         
     | 
| 
       465 
479 
     | 
    
         
             
              end
         
     | 
| 
       466 
480 
     | 
    
         | 
| 
       467 
481 
     | 
    
         
             
              def test_destroy_all
         
     | 
| 
         @@ -477,7 +491,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       477 
491 
     | 
    
         
             
                assert join_records.empty?
         
     | 
| 
       478 
492 
     | 
    
         | 
| 
       479 
493 
     | 
    
         
             
                assert david.projects.empty?
         
     | 
| 
       480 
     | 
    
         
            -
                assert david.projects 
     | 
| 
      
 494 
     | 
    
         
            +
                assert david.projects.reload.empty?
         
     | 
| 
       481 
495 
     | 
    
         
             
              end
         
     | 
| 
       482 
496 
     | 
    
         | 
| 
       483 
497 
     | 
    
         
             
              def test_destroy_associations_destroys_multiple_associations
         
     | 
| 
         @@ -493,11 +507,11 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       493 
507 
     | 
    
         | 
| 
       494 
508 
     | 
    
         
             
                join_records = Parrot.connection.select_all("SELECT * FROM parrots_pirates WHERE parrot_id = #{george.id}")
         
     | 
| 
       495 
509 
     | 
    
         
             
                assert join_records.empty?
         
     | 
| 
       496 
     | 
    
         
            -
                assert george.pirates 
     | 
| 
      
 510 
     | 
    
         
            +
                assert george.pirates.reload.empty?
         
     | 
| 
       497 
511 
     | 
    
         | 
| 
       498 
512 
     | 
    
         
             
                join_records = Parrot.connection.select_all("SELECT * FROM parrots_treasures WHERE parrot_id = #{george.id}")
         
     | 
| 
       499 
513 
     | 
    
         
             
                assert join_records.empty?
         
     | 
| 
       500 
     | 
    
         
            -
                assert george.treasures 
     | 
| 
      
 514 
     | 
    
         
            +
                assert george.treasures.reload.empty?
         
     | 
| 
       501 
515 
     | 
    
         
             
              end
         
     | 
| 
       502 
516 
     | 
    
         | 
| 
       503 
517 
     | 
    
         
             
              def test_associations_with_conditions
         
     | 
| 
         @@ -576,7 +590,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       576 
590 
     | 
    
         | 
| 
       577 
591 
     | 
    
         
             
              def test_dynamic_find_all_should_respect_readonly_access
         
     | 
| 
       578 
592 
     | 
    
         
             
                projects(:active_record).readonly_developers.each { |d| assert_raise(ActiveRecord::ReadOnlyRecord) { d.save!  } if d.valid?}
         
     | 
| 
       579 
     | 
    
         
            -
                projects(:active_record).readonly_developers.each 
     | 
| 
      
 593 
     | 
    
         
            +
                projects(:active_record).readonly_developers.each(&:readonly?)
         
     | 
| 
       580 
594 
     | 
    
         
             
              end
         
     | 
| 
       581 
595 
     | 
    
         | 
| 
       582 
596 
     | 
    
         
             
              def test_new_with_values_in_collection
         
     | 
| 
         @@ -665,7 +679,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       665 
679 
     | 
    
         
             
              end
         
     | 
| 
       666 
680 
     | 
    
         | 
| 
       667 
681 
     | 
    
         
             
              def test_habtm_respects_select
         
     | 
| 
       668 
     | 
    
         
            -
                categories(:technology).select_testing_posts 
     | 
| 
      
 682 
     | 
    
         
            +
                categories(:technology).select_testing_posts.reload.each do |o|
         
     | 
| 
       669 
683 
     | 
    
         
             
                  assert_respond_to o, :correctness_marker
         
     | 
| 
       670 
684 
     | 
    
         
             
                end
         
     | 
| 
       671 
685 
     | 
    
         
             
                assert_respond_to categories(:technology).select_testing_posts.first, :correctness_marker
         
     | 
| 
         @@ -737,7 +751,7 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       737 
751 
     | 
    
         | 
| 
       738 
752 
     | 
    
         
             
              def test_get_ids_for_loaded_associations
         
     | 
| 
       739 
753 
     | 
    
         
             
                developer = developers(:david)
         
     | 
| 
       740 
     | 
    
         
            -
                developer.projects 
     | 
| 
      
 754 
     | 
    
         
            +
                developer.projects.reload
         
     | 
| 
       741 
755 
     | 
    
         
             
                assert_queries(0) do
         
     | 
| 
       742 
756 
     | 
    
         
             
                  developer.project_ids
         
     | 
| 
       743 
757 
     | 
    
         
             
                  developer.project_ids
         
     | 
| 
         @@ -805,9 +819,10 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       805 
819 
     | 
    
         
             
              end
         
     | 
| 
       806 
820 
     | 
    
         | 
| 
       807 
821 
     | 
    
         
             
              def test_association_proxy_transaction_method_starts_transaction_in_association_class
         
     | 
| 
       808 
     | 
    
         
            -
                Post 
     | 
| 
       809 
     | 
    
         
            -
             
     | 
| 
       810 
     | 
    
         
            -
             
     | 
| 
      
 822 
     | 
    
         
            +
                assert_called(Post, :transaction) do
         
     | 
| 
      
 823 
     | 
    
         
            +
                  Category.first.posts.transaction do
         
     | 
| 
      
 824 
     | 
    
         
            +
                    # nothing
         
     | 
| 
      
 825 
     | 
    
         
            +
                  end
         
     | 
| 
       811 
826 
     | 
    
         
             
                end
         
     | 
| 
       812 
827 
     | 
    
         
             
              end
         
     | 
| 
       813 
828 
     | 
    
         | 
| 
         @@ -826,12 +841,12 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       826 
841 
     | 
    
         
             
                assert_no_queries { david.projects.columns }
         
     | 
| 
       827 
842 
     | 
    
         
             
              end
         
     | 
| 
       828 
843 
     | 
    
         | 
| 
       829 
     | 
    
         
            -
              def  
     | 
| 
      
 844 
     | 
    
         
            +
              def test_attributes_are_being_set_when_initialized_from_habtm_association_with_where_clause
         
     | 
| 
       830 
845 
     | 
    
         
             
                new_developer = projects(:action_controller).developers.where(:name => "Marcelo").build
         
     | 
| 
       831 
846 
     | 
    
         
             
                assert_equal new_developer.name, "Marcelo"
         
     | 
| 
       832 
847 
     | 
    
         
             
              end
         
     | 
| 
       833 
848 
     | 
    
         | 
| 
       834 
     | 
    
         
            -
              def  
     | 
| 
      
 849 
     | 
    
         
            +
              def test_attributes_are_being_set_when_initialized_from_habtm_association_with_multiple_where_clauses
         
     | 
| 
       835 
850 
     | 
    
         
             
                new_developer = projects(:action_controller).developers.where(:name => "Marcelo").where(:salary => 90_000).build
         
     | 
| 
       836 
851 
     | 
    
         
             
                assert_equal new_developer.name, "Marcelo"
         
     | 
| 
       837 
852 
     | 
    
         
             
                assert_equal new_developer.salary, 90_000
         
     | 
| 
         @@ -924,11 +939,17 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       924 
939 
     | 
    
         
             
              end
         
     | 
| 
       925 
940 
     | 
    
         | 
| 
       926 
941 
     | 
    
         
             
              def test_with_symbol_class_name
         
     | 
| 
       927 
     | 
    
         
            -
                assert_nothing_raised  
     | 
| 
      
 942 
     | 
    
         
            +
                assert_nothing_raised do
         
     | 
| 
       928 
943 
     | 
    
         
             
                  DeveloperWithSymbolClassName.new
         
     | 
| 
       929 
944 
     | 
    
         
             
                end
         
     | 
| 
       930 
945 
     | 
    
         
             
              end
         
     | 
| 
       931 
946 
     | 
    
         | 
| 
      
 947 
     | 
    
         
            +
              def test_association_force_reload_with_only_true_is_deprecated
         
     | 
| 
      
 948 
     | 
    
         
            +
                developer = Developer.find(1)
         
     | 
| 
      
 949 
     | 
    
         
            +
             
     | 
| 
      
 950 
     | 
    
         
            +
                assert_deprecated { developer.projects(true) }
         
     | 
| 
      
 951 
     | 
    
         
            +
              end
         
     | 
| 
      
 952 
     | 
    
         
            +
             
     | 
| 
       932 
953 
     | 
    
         
             
              def test_alternate_database
         
     | 
| 
       933 
954 
     | 
    
         
             
                professor = Professor.create(name: "Plum")
         
     | 
| 
       934 
955 
     | 
    
         
             
                course = Course.create(name: "Forensics")
         
     | 
| 
         @@ -969,4 +990,15 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       969 
990 
     | 
    
         
             
                assert preloaded_first_project.salaried_developers.loaded?, true
         
     | 
| 
       970 
991 
     | 
    
         
             
                assert_equal first_project.salaried_developers.size, preloaded_first_project.salaried_developers.size
         
     | 
| 
       971 
992 
     | 
    
         
             
              end
         
     | 
| 
      
 993 
     | 
    
         
            +
             
     | 
| 
      
 994 
     | 
    
         
            +
              def test_has_and_belongs_to_many_is_useable_with_belongs_to_required_by_default
         
     | 
| 
      
 995 
     | 
    
         
            +
                assert_difference "Project.first.developers_required_by_default.size", 1 do
         
     | 
| 
      
 996 
     | 
    
         
            +
                  Project.first.developers_required_by_default.create!(name: "Sean", salary: 50000)
         
     | 
| 
      
 997 
     | 
    
         
            +
                end
         
     | 
| 
      
 998 
     | 
    
         
            +
              end
         
     | 
| 
      
 999 
     | 
    
         
            +
             
     | 
| 
      
 1000 
     | 
    
         
            +
              def test_association_name_is_the_same_as_join_table_name
         
     | 
| 
      
 1001 
     | 
    
         
            +
                user = User.create!
         
     | 
| 
      
 1002 
     | 
    
         
            +
                assert_nothing_raised { user.jobs_pool.clear }
         
     | 
| 
      
 1003 
     | 
    
         
            +
              end
         
     | 
| 
       972 
1004 
     | 
    
         
             
            end
         
     | 
| 
         @@ -30,6 +30,7 @@ require 'models/college' 
     | 
|
| 
       30 
30 
     | 
    
         
             
            require 'models/student'
         
     | 
| 
       31 
31 
     | 
    
         
             
            require 'models/pirate'
         
     | 
| 
       32 
32 
     | 
    
         
             
            require 'models/ship'
         
     | 
| 
      
 33 
     | 
    
         
            +
            require 'models/ship_part'
         
     | 
| 
       33 
34 
     | 
    
         
             
            require 'models/treasure'
         
     | 
| 
       34 
35 
     | 
    
         
             
            require 'models/parrot'
         
     | 
| 
       35 
36 
     | 
    
         
             
            require 'models/tyre'
         
     | 
| 
         @@ -39,7 +40,7 @@ require 'models/zine' 
     | 
|
| 
       39 
40 
     | 
    
         
             
            require 'models/interest'
         
     | 
| 
       40 
41 
     | 
    
         | 
| 
       41 
42 
     | 
    
         
             
            class HasManyAssociationsTestForReorderWithJoinDependency < ActiveRecord::TestCase
         
     | 
| 
       42 
     | 
    
         
            -
              fixtures :authors, :posts, :comments 
     | 
| 
      
 43 
     | 
    
         
            +
              fixtures :authors, :posts, :comments
         
     | 
| 
       43 
44 
     | 
    
         | 
| 
       44 
45 
     | 
    
         
             
              def test_should_generate_valid_sql
         
     | 
| 
       45 
46 
     | 
    
         
             
                author = authors(:david)
         
     | 
| 
         @@ -60,7 +61,7 @@ class HasManyAssociationsTestPrimaryKeys < ActiveRecord::TestCase 
     | 
|
| 
       60 
61 
     | 
    
         
             
                  assert_equal 2, subscriber.subscriptions.size
         
     | 
| 
       61 
62 
     | 
    
         
             
                end
         
     | 
| 
       62 
63 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
                assert_equal  
     | 
| 
      
 64 
     | 
    
         
            +
                assert_equal Subscription.where(subscriber_id: "webster132"), subscriber.subscriptions
         
     | 
| 
       64 
65 
     | 
    
         
             
              end
         
     | 
| 
       65 
66 
     | 
    
         | 
| 
       66 
67 
     | 
    
         
             
              def test_association_primary_key_on_new_record_should_fetch_with_query
         
     | 
| 
         @@ -71,12 +72,23 @@ class HasManyAssociationsTestPrimaryKeys < ActiveRecord::TestCase 
     | 
|
| 
       71 
72 
     | 
    
         
             
                  assert_equal 1, author.essays.size
         
     | 
| 
       72 
73 
     | 
    
         
             
                end
         
     | 
| 
       73 
74 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                assert_equal  
     | 
| 
      
 75 
     | 
    
         
            +
                assert_equal Essay.where(writer_id: "David"), author.essays
         
     | 
| 
       75 
76 
     | 
    
         
             
              end
         
     | 
| 
       76 
77 
     | 
    
         | 
| 
       77 
78 
     | 
    
         
             
              def test_has_many_custom_primary_key
         
     | 
| 
       78 
79 
     | 
    
         
             
                david = authors(:david)
         
     | 
| 
       79 
     | 
    
         
            -
                assert_equal  
     | 
| 
      
 80 
     | 
    
         
            +
                assert_equal Essay.where(writer_id: "David"), david.essays
         
     | 
| 
      
 81 
     | 
    
         
            +
              end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
              def test_ids_on_unloaded_association_with_custom_primary_key
         
     | 
| 
      
 84 
     | 
    
         
            +
                david = people(:david)
         
     | 
| 
      
 85 
     | 
    
         
            +
                assert_equal Essay.where(writer_id: "David").pluck(:id), david.essay_ids
         
     | 
| 
      
 86 
     | 
    
         
            +
              end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
              def test_ids_on_loaded_association_with_custom_primary_key
         
     | 
| 
      
 89 
     | 
    
         
            +
                david = people(:david)
         
     | 
| 
      
 90 
     | 
    
         
            +
                david.essays.load
         
     | 
| 
      
 91 
     | 
    
         
            +
                assert_equal Essay.where(writer_id: "David").pluck(:id), david.essay_ids
         
     | 
| 
       80 
92 
     | 
    
         
             
              end
         
     | 
| 
       81 
93 
     | 
    
         | 
| 
       82 
94 
     | 
    
         
             
              def test_has_many_assignment_with_custom_primary_key
         
     | 
| 
         @@ -164,6 +176,32 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       164 
176 
     | 
    
         
             
                assert_equal college.students, Student.where(active: true, college_id: college.id)
         
     | 
| 
       165 
177 
     | 
    
         
             
              end
         
     | 
| 
       166 
178 
     | 
    
         | 
| 
      
 179 
     | 
    
         
            +
              def test_add_record_to_collection_should_change_its_updated_at
         
     | 
| 
      
 180 
     | 
    
         
            +
                ship = Ship.create(name: 'dauntless')
         
     | 
| 
      
 181 
     | 
    
         
            +
                part = ShipPart.create(name: 'cockpit')
         
     | 
| 
      
 182 
     | 
    
         
            +
                updated_at = part.updated_at
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
                travel(1.second) do
         
     | 
| 
      
 185 
     | 
    
         
            +
                  ship.parts << part
         
     | 
| 
      
 186 
     | 
    
         
            +
                end
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
                assert_equal part.ship, ship
         
     | 
| 
      
 189 
     | 
    
         
            +
                assert_not_equal part.updated_at, updated_at
         
     | 
| 
      
 190 
     | 
    
         
            +
              end
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
              def test_clear_collection_should_not_change_updated_at
         
     | 
| 
      
 193 
     | 
    
         
            +
                # GH#17161: .clear calls delete_all (and returns the association),
         
     | 
| 
      
 194 
     | 
    
         
            +
                # which is intended to not touch associated objects's updated_at field
         
     | 
| 
      
 195 
     | 
    
         
            +
                ship = Ship.create(name: 'dauntless')
         
     | 
| 
      
 196 
     | 
    
         
            +
                part = ShipPart.create(name: 'cockpit', ship_id: ship.id)
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
                ship.parts.clear
         
     | 
| 
      
 199 
     | 
    
         
            +
                part.reload
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
                assert_equal nil, part.ship
         
     | 
| 
      
 202 
     | 
    
         
            +
                assert !part.updated_at_changed?
         
     | 
| 
      
 203 
     | 
    
         
            +
              end
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
       167 
205 
     | 
    
         
             
              def test_create_from_association_should_respect_default_scope
         
     | 
| 
       168 
206 
     | 
    
         
             
                car = Car.create(:name => 'honda')
         
     | 
| 
       169 
207 
     | 
    
         
             
                assert_equal 'honda', car.name
         
     | 
| 
         @@ -176,9 +214,22 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       176 
214 
     | 
    
         | 
| 
       177 
215 
     | 
    
         
             
                bulb = car.bulbs.create
         
     | 
| 
       178 
216 
     | 
    
         
             
                assert_equal 'defaulty', bulb.name
         
     | 
| 
      
 217 
     | 
    
         
            +
              end
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
              def test_build_and_create_from_association_should_respect_passed_attributes_over_default_scope
         
     | 
| 
      
 220 
     | 
    
         
            +
                car = Car.create(name: 'honda')
         
     | 
| 
       179 
221 
     | 
    
         | 
| 
       180 
     | 
    
         
            -
                bulb = car.bulbs. 
     | 
| 
      
 222 
     | 
    
         
            +
                bulb = car.bulbs.build(name: 'exotic')
         
     | 
| 
       181 
223 
     | 
    
         
             
                assert_equal 'exotic', bulb.name
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                bulb = car.bulbs.create(name: 'exotic')
         
     | 
| 
      
 226 
     | 
    
         
            +
                assert_equal 'exotic', bulb.name
         
     | 
| 
      
 227 
     | 
    
         
            +
             
     | 
| 
      
 228 
     | 
    
         
            +
                bulb = car.awesome_bulbs.build(frickinawesome: false)
         
     | 
| 
      
 229 
     | 
    
         
            +
                assert_equal false, bulb.frickinawesome
         
     | 
| 
      
 230 
     | 
    
         
            +
             
     | 
| 
      
 231 
     | 
    
         
            +
                bulb = car.awesome_bulbs.create(frickinawesome: false)
         
     | 
| 
      
 232 
     | 
    
         
            +
                assert_equal false, bulb.frickinawesome
         
     | 
| 
       182 
233 
     | 
    
         
             
              end
         
     | 
| 
       183 
234 
     | 
    
         | 
| 
       184 
235 
     | 
    
         
             
              def test_build_from_association_should_respect_scope
         
     | 
| 
         @@ -320,16 +371,16 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       320 
371 
     | 
    
         
             
              # would be convenient), because this would cause that scope to be applied to any callbacks etc.
         
     | 
| 
       321 
372 
     | 
    
         
             
              def test_build_and_create_should_not_happen_within_scope
         
     | 
| 
       322 
373 
     | 
    
         
             
                car = cars(:honda)
         
     | 
| 
       323 
     | 
    
         
            -
                 
     | 
| 
      
 374 
     | 
    
         
            +
                scope = car.foo_bulbs.where_values_hash
         
     | 
| 
       324 
375 
     | 
    
         | 
| 
       325 
376 
     | 
    
         
             
                bulb = car.foo_bulbs.build
         
     | 
| 
       326 
     | 
    
         
            -
                assert_not_equal  
     | 
| 
      
 377 
     | 
    
         
            +
                assert_not_equal scope, bulb.scope_after_initialize.where_values_hash
         
     | 
| 
       327 
378 
     | 
    
         | 
| 
       328 
379 
     | 
    
         
             
                bulb = car.foo_bulbs.create
         
     | 
| 
       329 
     | 
    
         
            -
                assert_not_equal  
     | 
| 
      
 380 
     | 
    
         
            +
                assert_not_equal scope, bulb.scope_after_initialize.where_values_hash
         
     | 
| 
       330 
381 
     | 
    
         | 
| 
       331 
382 
     | 
    
         
             
                bulb = car.foo_bulbs.create!
         
     | 
| 
       332 
     | 
    
         
            -
                assert_not_equal  
     | 
| 
      
 383 
     | 
    
         
            +
                assert_not_equal scope, bulb.scope_after_initialize.where_values_hash
         
     | 
| 
       333 
384 
     | 
    
         
             
              end
         
     | 
| 
       334 
385 
     | 
    
         | 
| 
       335 
386 
     | 
    
         
             
              def test_no_sql_should_be_fired_if_association_already_loaded
         
     | 
| 
         @@ -367,6 +418,16 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       367 
418 
     | 
    
         
             
                  bulbs.forty_two({})
         
     | 
| 
       368 
419 
     | 
    
         
             
                end
         
     | 
| 
       369 
420 
     | 
    
         | 
| 
      
 421 
     | 
    
         
            +
                assert_no_queries do
         
     | 
| 
      
 422 
     | 
    
         
            +
                  bulbs.third_to_last()
         
     | 
| 
      
 423 
     | 
    
         
            +
                  bulbs.third_to_last({})
         
     | 
| 
      
 424 
     | 
    
         
            +
                end
         
     | 
| 
      
 425 
     | 
    
         
            +
             
     | 
| 
      
 426 
     | 
    
         
            +
                assert_no_queries do
         
     | 
| 
      
 427 
     | 
    
         
            +
                  bulbs.second_to_last()
         
     | 
| 
      
 428 
     | 
    
         
            +
                  bulbs.second_to_last({})
         
     | 
| 
      
 429 
     | 
    
         
            +
                end
         
     | 
| 
      
 430 
     | 
    
         
            +
             
     | 
| 
       370 
431 
     | 
    
         
             
                assert_no_queries do
         
     | 
| 
       371 
432 
     | 
    
         
             
                  bulbs.last()
         
     | 
| 
       372 
433 
     | 
    
         
             
                  bulbs.last({})
         
     | 
| 
         @@ -388,6 +449,26 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       388 
449 
     | 
    
         
             
                assert_equal person, person.readers.first.person
         
     | 
| 
       389 
450 
     | 
    
         
             
              end
         
     | 
| 
       390 
451 
     | 
    
         | 
| 
      
 452 
     | 
    
         
            +
              def test_update_all_respects_association_scope
         
     | 
| 
      
 453 
     | 
    
         
            +
                person = Person.new
         
     | 
| 
      
 454 
     | 
    
         
            +
                person.first_name = 'Naruto'
         
     | 
| 
      
 455 
     | 
    
         
            +
                person.references << Reference.new
         
     | 
| 
      
 456 
     | 
    
         
            +
                person.id = 10
         
     | 
| 
      
 457 
     | 
    
         
            +
                person.references
         
     | 
| 
      
 458 
     | 
    
         
            +
                person.save!
         
     | 
| 
      
 459 
     | 
    
         
            +
                assert_equal 1, person.references.update_all(favourite: true)
         
     | 
| 
      
 460 
     | 
    
         
            +
              end
         
     | 
| 
      
 461 
     | 
    
         
            +
             
     | 
| 
      
 462 
     | 
    
         
            +
              def test_exists_respects_association_scope
         
     | 
| 
      
 463 
     | 
    
         
            +
                person = Person.new
         
     | 
| 
      
 464 
     | 
    
         
            +
                person.first_name = 'Sasuke'
         
     | 
| 
      
 465 
     | 
    
         
            +
                person.references << Reference.new
         
     | 
| 
      
 466 
     | 
    
         
            +
                person.id = 10
         
     | 
| 
      
 467 
     | 
    
         
            +
                person.references
         
     | 
| 
      
 468 
     | 
    
         
            +
                person.save!
         
     | 
| 
      
 469 
     | 
    
         
            +
                assert_predicate person.references, :exists?
         
     | 
| 
      
 470 
     | 
    
         
            +
              end
         
     | 
| 
      
 471 
     | 
    
         
            +
             
     | 
| 
       391 
472 
     | 
    
         
             
              def force_signal37_to_load_all_clients_of_firm
         
     | 
| 
       392 
473 
     | 
    
         
             
                companies(:first_firm).clients_of_firm.each {|f| }
         
     | 
| 
       393 
474 
     | 
    
         
             
              end
         
     | 
| 
         @@ -508,10 +589,17 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       508 
589 
     | 
    
         
             
              end
         
     | 
| 
       509 
590 
     | 
    
         | 
| 
       510 
591 
     | 
    
         
             
              def test_update_all_on_association_accessed_before_save
         
     | 
| 
       511 
     | 
    
         
            -
                firm = Firm.new(name:  
     | 
| 
      
 592 
     | 
    
         
            +
                firm = Firm.new(name: "Firm")
         
     | 
| 
      
 593 
     | 
    
         
            +
                firm.clients << Client.first
         
     | 
| 
      
 594 
     | 
    
         
            +
                firm.save!
         
     | 
| 
      
 595 
     | 
    
         
            +
                assert_equal firm.clients.count, firm.clients.update_all(description: "Great!")
         
     | 
| 
      
 596 
     | 
    
         
            +
              end
         
     | 
| 
      
 597 
     | 
    
         
            +
             
     | 
| 
      
 598 
     | 
    
         
            +
              def test_update_all_on_association_accessed_before_save_with_explicit_foreign_key
         
     | 
| 
      
 599 
     | 
    
         
            +
                firm = Firm.new(name: "Firm", id: 100)
         
     | 
| 
       512 
600 
     | 
    
         
             
                firm.clients << Client.first
         
     | 
| 
       513 
601 
     | 
    
         
             
                firm.save!
         
     | 
| 
       514 
     | 
    
         
            -
                assert_equal firm.clients.count, firm.clients.update_all(description:  
     | 
| 
      
 602 
     | 
    
         
            +
                assert_equal firm.clients.count, firm.clients.update_all(description: "Great!")
         
     | 
| 
       515 
603 
     | 
    
         
             
              end
         
     | 
| 
       516 
604 
     | 
    
         | 
| 
       517 
605 
     | 
    
         
             
              def test_belongs_to_sanity
         
     | 
| 
         @@ -539,6 +627,18 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       539 
627 
     | 
    
         
             
                assert_raise(ActiveRecord::RecordNotFound) { firm.clients.find(2, 99) }
         
     | 
| 
       540 
628 
     | 
    
         
             
              end
         
     | 
| 
       541 
629 
     | 
    
         | 
| 
      
 630 
     | 
    
         
            +
              def test_find_one_message_on_primary_key
         
     | 
| 
      
 631 
     | 
    
         
            +
                firm = Firm.all.merge!(order: "id").first
         
     | 
| 
      
 632 
     | 
    
         
            +
             
     | 
| 
      
 633 
     | 
    
         
            +
                e = assert_raises(ActiveRecord::RecordNotFound) do
         
     | 
| 
      
 634 
     | 
    
         
            +
                  firm.clients.find(0)
         
     | 
| 
      
 635 
     | 
    
         
            +
                end
         
     | 
| 
      
 636 
     | 
    
         
            +
                assert_equal 0, e.id
         
     | 
| 
      
 637 
     | 
    
         
            +
                assert_equal "id", e.primary_key
         
     | 
| 
      
 638 
     | 
    
         
            +
                assert_equal "Client", e.model
         
     | 
| 
      
 639 
     | 
    
         
            +
                assert_match (/\ACouldn't find Client with 'id'=0/), e.message
         
     | 
| 
      
 640 
     | 
    
         
            +
              end
         
     | 
| 
      
 641 
     | 
    
         
            +
             
     | 
| 
       542 
642 
     | 
    
         
             
              def test_find_ids_and_inverse_of
         
     | 
| 
       543 
643 
     | 
    
         
             
                force_signal37_to_load_all_clients_of_firm
         
     | 
| 
       544 
644 
     | 
    
         | 
| 
         @@ -669,7 +769,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       669 
769 
     | 
    
         
             
                natural = Client.new("name" => "Natural Company")
         
     | 
| 
       670 
770 
     | 
    
         
             
                companies(:first_firm).clients_of_firm << natural
         
     | 
| 
       671 
771 
     | 
    
         
             
                assert_equal 3, companies(:first_firm).clients_of_firm.size # checking via the collection
         
     | 
| 
       672 
     | 
    
         
            -
                assert_equal 3, companies(:first_firm).clients_of_firm 
     | 
| 
      
 772 
     | 
    
         
            +
                assert_equal 3, companies(:first_firm).clients_of_firm.reload.size # checking using the db
         
     | 
| 
       673 
773 
     | 
    
         
             
                assert_equal natural, companies(:first_firm).clients_of_firm.last
         
     | 
| 
       674 
774 
     | 
    
         
             
              end
         
     | 
| 
       675 
775 
     | 
    
         | 
| 
         @@ -724,7 +824,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       724 
824 
     | 
    
         
             
                force_signal37_to_load_all_clients_of_firm
         
     | 
| 
       725 
825 
     | 
    
         
             
                companies(:first_firm).clients_of_firm.concat([Client.new("name" => "Natural Company"), Client.new("name" => "Apple")])
         
     | 
| 
       726 
826 
     | 
    
         
             
                assert_equal 4, companies(:first_firm).clients_of_firm.size
         
     | 
| 
       727 
     | 
    
         
            -
                assert_equal 4, companies(:first_firm).clients_of_firm 
     | 
| 
      
 827 
     | 
    
         
            +
                assert_equal 4, companies(:first_firm).clients_of_firm.reload.size
         
     | 
| 
       728 
828 
     | 
    
         
             
              end
         
     | 
| 
       729 
829 
     | 
    
         | 
| 
       730 
830 
     | 
    
         
             
              def test_transactions_when_adding_to_persisted
         
     | 
| 
         @@ -736,7 +836,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       736 
836 
     | 
    
         
             
                rescue Client::RaisedOnSave
         
     | 
| 
       737 
837 
     | 
    
         
             
                end
         
     | 
| 
       738 
838 
     | 
    
         | 
| 
       739 
     | 
    
         
            -
                assert !companies(:first_firm).clients_of_firm 
     | 
| 
      
 839 
     | 
    
         
            +
                assert !companies(:first_firm).clients_of_firm.reload.include?(good)
         
     | 
| 
       740 
840 
     | 
    
         
             
              end
         
     | 
| 
       741 
841 
     | 
    
         | 
| 
       742 
842 
     | 
    
         
             
              def test_transactions_when_adding_to_new_record
         
     | 
| 
         @@ -868,12 +968,12 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       868 
968 
     | 
    
         
             
                new_client = companies(:first_firm).clients_of_firm.create("name" => "Another Client")
         
     | 
| 
       869 
969 
     | 
    
         
             
                assert new_client.persisted?
         
     | 
| 
       870 
970 
     | 
    
         
             
                assert_equal new_client, companies(:first_firm).clients_of_firm.last
         
     | 
| 
       871 
     | 
    
         
            -
                assert_equal new_client, companies(:first_firm).clients_of_firm 
     | 
| 
      
 971 
     | 
    
         
            +
                assert_equal new_client, companies(:first_firm).clients_of_firm.reload.last
         
     | 
| 
       872 
972 
     | 
    
         
             
              end
         
     | 
| 
       873 
973 
     | 
    
         | 
| 
       874 
974 
     | 
    
         
             
              def test_create_many
         
     | 
| 
       875 
975 
     | 
    
         
             
                companies(:first_firm).clients_of_firm.create([{"name" => "Another Client"}, {"name" => "Another Client II"}])
         
     | 
| 
       876 
     | 
    
         
            -
                assert_equal 4, companies(:first_firm).clients_of_firm 
     | 
| 
      
 976 
     | 
    
         
            +
                assert_equal 4, companies(:first_firm).clients_of_firm.reload.size
         
     | 
| 
       877 
977 
     | 
    
         
             
              end
         
     | 
| 
       878 
978 
     | 
    
         | 
| 
       879 
979 
     | 
    
         
             
              def test_create_followed_by_save_does_not_load_target
         
     | 
| 
         @@ -886,7 +986,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       886 
986 
     | 
    
         
             
                force_signal37_to_load_all_clients_of_firm
         
     | 
| 
       887 
987 
     | 
    
         
             
                companies(:first_firm).clients_of_firm.delete(companies(:first_firm).clients_of_firm.first)
         
     | 
| 
       888 
988 
     | 
    
         
             
                assert_equal 1, companies(:first_firm).clients_of_firm.size
         
     | 
| 
       889 
     | 
    
         
            -
                assert_equal 1, companies(:first_firm).clients_of_firm 
     | 
| 
      
 989 
     | 
    
         
            +
                assert_equal 1, companies(:first_firm).clients_of_firm.reload.size
         
     | 
| 
       890 
990 
     | 
    
         
             
              end
         
     | 
| 
       891 
991 
     | 
    
         | 
| 
       892 
992 
     | 
    
         
             
              def test_deleting_before_save
         
     | 
| 
         @@ -902,7 +1002,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       902 
1002 
     | 
    
         
             
                # option is not given on the association.
         
     | 
| 
       903 
1003 
     | 
    
         
             
                ship = Ship.create(name: 'Countless', treasures_count: 10)
         
     | 
| 
       904 
1004 
     | 
    
         | 
| 
       905 
     | 
    
         
            -
                assert_not  
     | 
| 
      
 1005 
     | 
    
         
            +
                assert_not Ship.reflect_on_association(:treasures).has_cached_counter?
         
     | 
| 
       906 
1006 
     | 
    
         | 
| 
       907 
1007 
     | 
    
         
             
                # Count should come from sql count() of treasures rather than treasures_count attribute
         
     | 
| 
       908 
1008 
     | 
    
         
             
                assert_equal ship.treasures.size, 0
         
     | 
| 
         @@ -1042,7 +1142,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1042 
1142 
     | 
    
         
             
                assert_equal 3, companies(:first_firm).clients_of_firm.size
         
     | 
| 
       1043 
1143 
     | 
    
         
             
                companies(:first_firm).clients_of_firm.delete([companies(:first_firm).clients_of_firm[0], companies(:first_firm).clients_of_firm[1], companies(:first_firm).clients_of_firm[2]])
         
     | 
| 
       1044 
1144 
     | 
    
         
             
                assert_equal 0, companies(:first_firm).clients_of_firm.size
         
     | 
| 
       1045 
     | 
    
         
            -
                assert_equal 0, companies(:first_firm).clients_of_firm 
     | 
| 
      
 1145 
     | 
    
         
            +
                assert_equal 0, companies(:first_firm).clients_of_firm.reload.size
         
     | 
| 
       1046 
1146 
     | 
    
         
             
              end
         
     | 
| 
       1047 
1147 
     | 
    
         | 
| 
       1048 
1148 
     | 
    
         
             
              def test_delete_all
         
     | 
| 
         @@ -1063,7 +1163,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1063 
1163 
     | 
    
         
             
                companies(:first_firm).clients_of_firm.reset
         
     | 
| 
       1064 
1164 
     | 
    
         
             
                companies(:first_firm).clients_of_firm.delete_all
         
     | 
| 
       1065 
1165 
     | 
    
         
             
                assert_equal 0, companies(:first_firm).clients_of_firm.size
         
     | 
| 
       1066 
     | 
    
         
            -
                assert_equal 0, companies(:first_firm).clients_of_firm 
     | 
| 
      
 1166 
     | 
    
         
            +
                assert_equal 0, companies(:first_firm).clients_of_firm.reload.size
         
     | 
| 
       1067 
1167 
     | 
    
         
             
              end
         
     | 
| 
       1068 
1168 
     | 
    
         | 
| 
       1069 
1169 
     | 
    
         
             
              def test_transaction_when_deleting_persisted
         
     | 
| 
         @@ -1077,7 +1177,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1077 
1177 
     | 
    
         
             
                rescue Client::RaisedOnDestroy
         
     | 
| 
       1078 
1178 
     | 
    
         
             
                end
         
     | 
| 
       1079 
1179 
     | 
    
         | 
| 
       1080 
     | 
    
         
            -
                assert_equal [good, bad], companies(:first_firm).clients_of_firm 
     | 
| 
      
 1180 
     | 
    
         
            +
                assert_equal [good, bad], companies(:first_firm).clients_of_firm.reload
         
     | 
| 
       1081 
1181 
     | 
    
         
             
              end
         
     | 
| 
       1082 
1182 
     | 
    
         | 
| 
       1083 
1183 
     | 
    
         
             
              def test_transaction_when_deleting_new_record
         
     | 
| 
         @@ -1097,7 +1197,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1097 
1197 
     | 
    
         
             
                firm.clients_of_firm.clear
         
     | 
| 
       1098 
1198 
     | 
    
         | 
| 
       1099 
1199 
     | 
    
         
             
                assert_equal 0, firm.clients_of_firm.size
         
     | 
| 
       1100 
     | 
    
         
            -
                assert_equal 0, firm.clients_of_firm 
     | 
| 
      
 1200 
     | 
    
         
            +
                assert_equal 0, firm.clients_of_firm.reload.size
         
     | 
| 
       1101 
1201 
     | 
    
         
             
                assert_equal [], Client.destroyed_client_ids[firm.id]
         
     | 
| 
       1102 
1202 
     | 
    
         | 
| 
       1103 
1203 
     | 
    
         
             
                # Should not be destroyed since the association is not dependent.
         
     | 
| 
         @@ -1133,7 +1233,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1133 
1233 
     | 
    
         
             
                firm.dependent_clients_of_firm.clear
         
     | 
| 
       1134 
1234 
     | 
    
         | 
| 
       1135 
1235 
     | 
    
         
             
                assert_equal 0, firm.dependent_clients_of_firm.size
         
     | 
| 
       1136 
     | 
    
         
            -
                assert_equal 0, firm.dependent_clients_of_firm 
     | 
| 
      
 1236 
     | 
    
         
            +
                assert_equal 0, firm.dependent_clients_of_firm.reload.size
         
     | 
| 
       1137 
1237 
     | 
    
         
             
                assert_equal [], Client.destroyed_client_ids[firm.id]
         
     | 
| 
       1138 
1238 
     | 
    
         | 
| 
       1139 
1239 
     | 
    
         
             
                # Should be destroyed since the association is dependent.
         
     | 
| 
         @@ -1166,7 +1266,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1166 
1266 
     | 
    
         
             
                firm.exclusively_dependent_clients_of_firm.clear
         
     | 
| 
       1167 
1267 
     | 
    
         | 
| 
       1168 
1268 
     | 
    
         
             
                assert_equal 0, firm.exclusively_dependent_clients_of_firm.size
         
     | 
| 
       1169 
     | 
    
         
            -
                assert_equal 0, firm.exclusively_dependent_clients_of_firm 
     | 
| 
      
 1269 
     | 
    
         
            +
                assert_equal 0, firm.exclusively_dependent_clients_of_firm.reload.size
         
     | 
| 
       1170 
1270 
     | 
    
         
             
                # no destroy-filters should have been called
         
     | 
| 
       1171 
1271 
     | 
    
         
             
                assert_equal [], Client.destroyed_client_ids[firm.id]
         
     | 
| 
       1172 
1272 
     | 
    
         | 
| 
         @@ -1215,7 +1315,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1215 
1315 
     | 
    
         
             
                # break the vanilla firm_id foreign key
         
     | 
| 
       1216 
1316 
     | 
    
         
             
                assert_equal 3, firm.clients.count
         
     | 
| 
       1217 
1317 
     | 
    
         
             
                firm.clients.first.update_columns(firm_id: nil)
         
     | 
| 
       1218 
     | 
    
         
            -
                assert_equal 2, firm.clients 
     | 
| 
      
 1318 
     | 
    
         
            +
                assert_equal 2, firm.clients.reload.count
         
     | 
| 
       1219 
1319 
     | 
    
         
             
                assert_equal 2, firm.clients_using_primary_key_with_delete_all.count
         
     | 
| 
       1220 
1320 
     | 
    
         
             
                old_record = firm.clients_using_primary_key_with_delete_all.first
         
     | 
| 
       1221 
1321 
     | 
    
         
             
                firm = Firm.first
         
     | 
| 
         @@ -1241,7 +1341,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1241 
1341 
     | 
    
         
             
                firm.clients_of_firm.clear
         
     | 
| 
       1242 
1342 
     | 
    
         | 
| 
       1243 
1343 
     | 
    
         
             
                assert_equal 0, firm.clients_of_firm.size
         
     | 
| 
       1244 
     | 
    
         
            -
                assert_equal 0, firm.clients_of_firm 
     | 
| 
      
 1344 
     | 
    
         
            +
                assert_equal 0, firm.clients_of_firm.reload.size
         
     | 
| 
       1245 
1345 
     | 
    
         
             
              end
         
     | 
| 
       1246 
1346 
     | 
    
         | 
| 
       1247 
1347 
     | 
    
         
             
              def test_deleting_a_item_which_is_not_in_the_collection
         
     | 
| 
         @@ -1249,11 +1349,11 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1249 
1349 
     | 
    
         
             
                summit = Client.find_by_name('Summit')
         
     | 
| 
       1250 
1350 
     | 
    
         
             
                companies(:first_firm).clients_of_firm.delete(summit)
         
     | 
| 
       1251 
1351 
     | 
    
         
             
                assert_equal 2, companies(:first_firm).clients_of_firm.size
         
     | 
| 
       1252 
     | 
    
         
            -
                assert_equal 2, companies(:first_firm).clients_of_firm 
     | 
| 
      
 1352 
     | 
    
         
            +
                assert_equal 2, companies(:first_firm).clients_of_firm.reload.size
         
     | 
| 
       1253 
1353 
     | 
    
         
             
                assert_equal 2, summit.client_of
         
     | 
| 
       1254 
1354 
     | 
    
         
             
              end
         
     | 
| 
       1255 
1355 
     | 
    
         | 
| 
       1256 
     | 
    
         
            -
              def  
     | 
| 
      
 1356 
     | 
    
         
            +
              def test_deleting_by_integer_id
         
     | 
| 
       1257 
1357 
     | 
    
         
             
                david = Developer.find(1)
         
     | 
| 
       1258 
1358 
     | 
    
         | 
| 
       1259 
1359 
     | 
    
         
             
                assert_difference 'david.projects.count', -1 do
         
     | 
| 
         @@ -1287,10 +1387,10 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1287 
1387 
     | 
    
         
             
                end
         
     | 
| 
       1288 
1388 
     | 
    
         | 
| 
       1289 
1389 
     | 
    
         
             
                assert_equal 1, companies(:first_firm).reload.clients_of_firm.size
         
     | 
| 
       1290 
     | 
    
         
            -
                assert_equal 1, companies(:first_firm).clients_of_firm 
     | 
| 
      
 1390 
     | 
    
         
            +
                assert_equal 1, companies(:first_firm).clients_of_firm.reload.size
         
     | 
| 
       1291 
1391 
     | 
    
         
             
              end
         
     | 
| 
       1292 
1392 
     | 
    
         | 
| 
       1293 
     | 
    
         
            -
              def  
     | 
| 
      
 1393 
     | 
    
         
            +
              def test_destroying_by_integer_id
         
     | 
| 
       1294 
1394 
     | 
    
         
             
                force_signal37_to_load_all_clients_of_firm
         
     | 
| 
       1295 
1395 
     | 
    
         | 
| 
       1296 
1396 
     | 
    
         
             
                assert_difference "Client.count", -1 do
         
     | 
| 
         @@ -1298,7 +1398,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1298 
1398 
     | 
    
         
             
                end
         
     | 
| 
       1299 
1399 
     | 
    
         | 
| 
       1300 
1400 
     | 
    
         
             
                assert_equal 1, companies(:first_firm).reload.clients_of_firm.size
         
     | 
| 
       1301 
     | 
    
         
            -
                assert_equal 1, companies(:first_firm).clients_of_firm 
     | 
| 
      
 1401 
     | 
    
         
            +
                assert_equal 1, companies(:first_firm).clients_of_firm.reload.size
         
     | 
| 
       1302 
1402 
     | 
    
         
             
              end
         
     | 
| 
       1303 
1403 
     | 
    
         | 
| 
       1304 
1404 
     | 
    
         
             
              def test_destroying_by_string_id
         
     | 
| 
         @@ -1309,7 +1409,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1309 
1409 
     | 
    
         
             
                end
         
     | 
| 
       1310 
1410 
     | 
    
         | 
| 
       1311 
1411 
     | 
    
         
             
                assert_equal 1, companies(:first_firm).reload.clients_of_firm.size
         
     | 
| 
       1312 
     | 
    
         
            -
                assert_equal 1, companies(:first_firm).clients_of_firm 
     | 
| 
      
 1412 
     | 
    
         
            +
                assert_equal 1, companies(:first_firm).clients_of_firm.reload.size
         
     | 
| 
       1313 
1413 
     | 
    
         
             
              end
         
     | 
| 
       1314 
1414 
     | 
    
         | 
| 
       1315 
1415 
     | 
    
         
             
              def test_destroying_a_collection
         
     | 
| 
         @@ -1322,7 +1422,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1322 
1422 
     | 
    
         
             
                end
         
     | 
| 
       1323 
1423 
     | 
    
         | 
| 
       1324 
1424 
     | 
    
         
             
                assert_equal 1, companies(:first_firm).reload.clients_of_firm.size
         
     | 
| 
       1325 
     | 
    
         
            -
                assert_equal 1, companies(:first_firm).clients_of_firm 
     | 
| 
      
 1425 
     | 
    
         
            +
                assert_equal 1, companies(:first_firm).clients_of_firm.reload.size
         
     | 
| 
       1326 
1426 
     | 
    
         
             
              end
         
     | 
| 
       1327 
1427 
     | 
    
         | 
| 
       1328 
1428 
     | 
    
         
             
              def test_destroy_all
         
     | 
| 
         @@ -1331,9 +1431,9 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1331 
1431 
     | 
    
         
             
                assert !clients.empty?, "37signals has clients after load"
         
     | 
| 
       1332 
1432 
     | 
    
         
             
                destroyed = companies(:first_firm).clients_of_firm.destroy_all
         
     | 
| 
       1333 
1433 
     | 
    
         
             
                assert_equal clients.sort_by(&:id), destroyed.sort_by(&:id)
         
     | 
| 
       1334 
     | 
    
         
            -
                assert destroyed.all? 
     | 
| 
      
 1434 
     | 
    
         
            +
                assert destroyed.all?(&:frozen?), "destroyed clients should be frozen"
         
     | 
| 
       1335 
1435 
     | 
    
         
             
                assert companies(:first_firm).clients_of_firm.empty?, "37signals has no clients after destroy all"
         
     | 
| 
       1336 
     | 
    
         
            -
                assert companies(:first_firm).clients_of_firm 
     | 
| 
      
 1436 
     | 
    
         
            +
                assert companies(:first_firm).clients_of_firm.reload.empty?, "37signals has no clients after destroy all and refresh"
         
     | 
| 
       1337 
1437 
     | 
    
         
             
              end
         
     | 
| 
       1338 
1438 
     | 
    
         | 
| 
       1339 
1439 
     | 
    
         
             
              def test_dependence
         
     | 
| 
         @@ -1369,7 +1469,6 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1369 
1469 
     | 
    
         
             
                assert_nothing_raised { topic.destroy }
         
     | 
| 
       1370 
1470 
     | 
    
         
             
              end
         
     | 
| 
       1371 
1471 
     | 
    
         | 
| 
       1372 
     | 
    
         
            -
              uses_transaction :test_dependence_with_transaction_support_on_failure
         
     | 
| 
       1373 
1472 
     | 
    
         
             
              def test_dependence_with_transaction_support_on_failure
         
     | 
| 
       1374 
1473 
     | 
    
         
             
                firm = companies(:first_firm)
         
     | 
| 
       1375 
1474 
     | 
    
         
             
                clients = firm.clients
         
     | 
| 
         @@ -1411,6 +1510,26 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1411 
1510 
     | 
    
         
             
                assert firm.companies.exists?(:name => 'child')
         
     | 
| 
       1412 
1511 
     | 
    
         
             
              end
         
     | 
| 
       1413 
1512 
     | 
    
         | 
| 
      
 1513 
     | 
    
         
            +
              def test_restrict_with_error_is_deprecated_using_key_many
         
     | 
| 
      
 1514 
     | 
    
         
            +
                I18n.backend = I18n::Backend::Simple.new
         
     | 
| 
      
 1515 
     | 
    
         
            +
                I18n.backend.store_translations :en, activerecord: { errors: { messages: { restrict_dependent_destroy: { many: 'message for deprecated key' } } } }
         
     | 
| 
      
 1516 
     | 
    
         
            +
             
     | 
| 
      
 1517 
     | 
    
         
            +
                firm = RestrictedWithErrorFirm.create!(name: 'restrict')
         
     | 
| 
      
 1518 
     | 
    
         
            +
                firm.companies.create(name: 'child')
         
     | 
| 
      
 1519 
     | 
    
         
            +
             
     | 
| 
      
 1520 
     | 
    
         
            +
                assert !firm.companies.empty?
         
     | 
| 
      
 1521 
     | 
    
         
            +
             
     | 
| 
      
 1522 
     | 
    
         
            +
                assert_deprecated { firm.destroy }
         
     | 
| 
      
 1523 
     | 
    
         
            +
             
     | 
| 
      
 1524 
     | 
    
         
            +
                assert !firm.errors.empty?
         
     | 
| 
      
 1525 
     | 
    
         
            +
             
     | 
| 
      
 1526 
     | 
    
         
            +
                assert_equal 'message for deprecated key', firm.errors[:base].first
         
     | 
| 
      
 1527 
     | 
    
         
            +
                assert RestrictedWithErrorFirm.exists?(name: 'restrict')
         
     | 
| 
      
 1528 
     | 
    
         
            +
                assert firm.companies.exists?(name: 'child')
         
     | 
| 
      
 1529 
     | 
    
         
            +
              ensure
         
     | 
| 
      
 1530 
     | 
    
         
            +
                I18n.backend.reload!
         
     | 
| 
      
 1531 
     | 
    
         
            +
              end
         
     | 
| 
      
 1532 
     | 
    
         
            +
             
     | 
| 
       1414 
1533 
     | 
    
         
             
              def test_restrict_with_error
         
     | 
| 
       1415 
1534 
     | 
    
         
             
                firm = RestrictedWithErrorFirm.create!(:name => 'restrict')
         
     | 
| 
       1416 
1535 
     | 
    
         
             
                firm.companies.create(:name => 'child')
         
     | 
| 
         @@ -1426,6 +1545,25 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1426 
1545 
     | 
    
         
             
                assert firm.companies.exists?(:name => 'child')
         
     | 
| 
       1427 
1546 
     | 
    
         
             
              end
         
     | 
| 
       1428 
1547 
     | 
    
         | 
| 
      
 1548 
     | 
    
         
            +
              def test_restrict_with_error_with_locale
         
     | 
| 
      
 1549 
     | 
    
         
            +
                I18n.backend = I18n::Backend::Simple.new
         
     | 
| 
      
 1550 
     | 
    
         
            +
                I18n.backend.store_translations 'en', activerecord: {attributes: {restricted_with_error_firm: {companies: 'client companies'}}}
         
     | 
| 
      
 1551 
     | 
    
         
            +
                firm = RestrictedWithErrorFirm.create!(name: 'restrict')
         
     | 
| 
      
 1552 
     | 
    
         
            +
                firm.companies.create(name: 'child')
         
     | 
| 
      
 1553 
     | 
    
         
            +
             
     | 
| 
      
 1554 
     | 
    
         
            +
                assert !firm.companies.empty?
         
     | 
| 
      
 1555 
     | 
    
         
            +
             
     | 
| 
      
 1556 
     | 
    
         
            +
                firm.destroy
         
     | 
| 
      
 1557 
     | 
    
         
            +
             
     | 
| 
      
 1558 
     | 
    
         
            +
                assert !firm.errors.empty?
         
     | 
| 
      
 1559 
     | 
    
         
            +
             
     | 
| 
      
 1560 
     | 
    
         
            +
                assert_equal "Cannot delete record because dependent client companies exist", firm.errors[:base].first
         
     | 
| 
      
 1561 
     | 
    
         
            +
                assert RestrictedWithErrorFirm.exists?(name: 'restrict')
         
     | 
| 
      
 1562 
     | 
    
         
            +
                assert firm.companies.exists?(name: 'child')
         
     | 
| 
      
 1563 
     | 
    
         
            +
              ensure
         
     | 
| 
      
 1564 
     | 
    
         
            +
                I18n.backend.reload!
         
     | 
| 
      
 1565 
     | 
    
         
            +
              end
         
     | 
| 
      
 1566 
     | 
    
         
            +
             
     | 
| 
       1429 
1567 
     | 
    
         
             
              def test_included_in_collection
         
     | 
| 
       1430 
1568 
     | 
    
         
             
                assert_equal true, companies(:first_firm).clients.include?(Client.find(2))
         
     | 
| 
       1431 
1569 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1488,6 +1626,8 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1488 
1626 
     | 
    
         
             
                assert_queries(0, ignore_none: true) do
         
     | 
| 
       1489 
1627 
     | 
    
         
             
                  firm.clients = []
         
     | 
| 
       1490 
1628 
     | 
    
         
             
                end
         
     | 
| 
      
 1629 
     | 
    
         
            +
             
     | 
| 
      
 1630 
     | 
    
         
            +
                assert_equal [], firm.send('clients=', [])
         
     | 
| 
       1491 
1631 
     | 
    
         
             
              end
         
     | 
| 
       1492 
1632 
     | 
    
         | 
| 
       1493 
1633 
     | 
    
         
             
              def test_transactions_when_replacing_on_persisted
         
     | 
| 
         @@ -1501,7 +1641,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1501 
1641 
     | 
    
         
             
                rescue Client::RaisedOnSave
         
     | 
| 
       1502 
1642 
     | 
    
         
             
                end
         
     | 
| 
       1503 
1643 
     | 
    
         | 
| 
       1504 
     | 
    
         
            -
                assert_equal [good], companies(:first_firm).clients_of_firm 
     | 
| 
      
 1644 
     | 
    
         
            +
                assert_equal [good], companies(:first_firm).clients_of_firm.reload
         
     | 
| 
       1505 
1645 
     | 
    
         
             
              end
         
     | 
| 
       1506 
1646 
     | 
    
         | 
| 
       1507 
1647 
     | 
    
         
             
              def test_transactions_when_replacing_on_new_record
         
     | 
| 
         @@ -1517,7 +1657,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1517 
1657 
     | 
    
         | 
| 
       1518 
1658 
     | 
    
         
             
              def test_get_ids_for_loaded_associations
         
     | 
| 
       1519 
1659 
     | 
    
         
             
                company = companies(:first_firm)
         
     | 
| 
       1520 
     | 
    
         
            -
                company.clients 
     | 
| 
      
 1660 
     | 
    
         
            +
                company.clients.reload
         
     | 
| 
       1521 
1661 
     | 
    
         
             
                assert_queries(0) do
         
     | 
| 
       1522 
1662 
     | 
    
         
             
                  company.client_ids
         
     | 
| 
       1523 
1663 
     | 
    
         
             
                  company.client_ids
         
     | 
| 
         @@ -1571,7 +1711,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1571 
1711 
     | 
    
         
             
                firm.client_ids = [companies(:first_client).id, nil, companies(:second_client).id, '']
         
     | 
| 
       1572 
1712 
     | 
    
         
             
                firm.save!
         
     | 
| 
       1573 
1713 
     | 
    
         | 
| 
       1574 
     | 
    
         
            -
                assert_equal 2, firm.clients 
     | 
| 
      
 1714 
     | 
    
         
            +
                assert_equal 2, firm.clients.reload.size
         
     | 
| 
       1575 
1715 
     | 
    
         
             
                assert_equal true, firm.clients.include?(companies(:second_client))
         
     | 
| 
       1576 
1716 
     | 
    
         
             
              end
         
     | 
| 
       1577 
1717 
     | 
    
         | 
| 
         @@ -1741,6 +1881,82 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1741 
1881 
     | 
    
         
             
                assert_equal 3, firm.clients.size
         
     | 
| 
       1742 
1882 
     | 
    
         
             
              end
         
     | 
| 
       1743 
1883 
     | 
    
         | 
| 
      
 1884 
     | 
    
         
            +
              def test_calling_none_should_count_instead_of_loading_association
         
     | 
| 
      
 1885 
     | 
    
         
            +
                firm = companies(:first_firm)
         
     | 
| 
      
 1886 
     | 
    
         
            +
                assert_queries(1) do
         
     | 
| 
      
 1887 
     | 
    
         
            +
                  firm.clients.none?  # use count query
         
     | 
| 
      
 1888 
     | 
    
         
            +
                end
         
     | 
| 
      
 1889 
     | 
    
         
            +
                assert !firm.clients.loaded?
         
     | 
| 
      
 1890 
     | 
    
         
            +
              end
         
     | 
| 
      
 1891 
     | 
    
         
            +
             
     | 
| 
      
 1892 
     | 
    
         
            +
              def test_calling_none_on_loaded_association_should_not_use_query
         
     | 
| 
      
 1893 
     | 
    
         
            +
                firm = companies(:first_firm)
         
     | 
| 
      
 1894 
     | 
    
         
            +
                firm.clients.collect  # force load
         
     | 
| 
      
 1895 
     | 
    
         
            +
                assert_no_queries { assert ! firm.clients.none? }
         
     | 
| 
      
 1896 
     | 
    
         
            +
              end
         
     | 
| 
      
 1897 
     | 
    
         
            +
             
     | 
| 
      
 1898 
     | 
    
         
            +
              def test_calling_none_should_defer_to_collection_if_using_a_block
         
     | 
| 
      
 1899 
     | 
    
         
            +
                firm = companies(:first_firm)
         
     | 
| 
      
 1900 
     | 
    
         
            +
                assert_queries(1) do
         
     | 
| 
      
 1901 
     | 
    
         
            +
                  firm.clients.expects(:size).never
         
     | 
| 
      
 1902 
     | 
    
         
            +
                  firm.clients.none? { true }
         
     | 
| 
      
 1903 
     | 
    
         
            +
                end
         
     | 
| 
      
 1904 
     | 
    
         
            +
                assert firm.clients.loaded?
         
     | 
| 
      
 1905 
     | 
    
         
            +
              end
         
     | 
| 
      
 1906 
     | 
    
         
            +
             
     | 
| 
      
 1907 
     | 
    
         
            +
              def test_calling_none_should_return_true_if_none
         
     | 
| 
      
 1908 
     | 
    
         
            +
                firm = companies(:another_firm)
         
     | 
| 
      
 1909 
     | 
    
         
            +
                assert firm.clients_like_ms.none?
         
     | 
| 
      
 1910 
     | 
    
         
            +
                assert_equal 0, firm.clients_like_ms.size
         
     | 
| 
      
 1911 
     | 
    
         
            +
              end
         
     | 
| 
      
 1912 
     | 
    
         
            +
             
     | 
| 
      
 1913 
     | 
    
         
            +
              def test_calling_none_should_return_false_if_any
         
     | 
| 
      
 1914 
     | 
    
         
            +
                firm = companies(:first_firm)
         
     | 
| 
      
 1915 
     | 
    
         
            +
                assert !firm.limited_clients.none?
         
     | 
| 
      
 1916 
     | 
    
         
            +
                assert_equal 1, firm.limited_clients.size
         
     | 
| 
      
 1917 
     | 
    
         
            +
              end
         
     | 
| 
      
 1918 
     | 
    
         
            +
             
     | 
| 
      
 1919 
     | 
    
         
            +
              def test_calling_one_should_count_instead_of_loading_association
         
     | 
| 
      
 1920 
     | 
    
         
            +
                firm = companies(:first_firm)
         
     | 
| 
      
 1921 
     | 
    
         
            +
                assert_queries(1) do
         
     | 
| 
      
 1922 
     | 
    
         
            +
                  firm.clients.one?  # use count query
         
     | 
| 
      
 1923 
     | 
    
         
            +
                end
         
     | 
| 
      
 1924 
     | 
    
         
            +
                assert !firm.clients.loaded?
         
     | 
| 
      
 1925 
     | 
    
         
            +
              end
         
     | 
| 
      
 1926 
     | 
    
         
            +
             
     | 
| 
      
 1927 
     | 
    
         
            +
              def test_calling_one_on_loaded_association_should_not_use_query
         
     | 
| 
      
 1928 
     | 
    
         
            +
                firm = companies(:first_firm)
         
     | 
| 
      
 1929 
     | 
    
         
            +
                firm.clients.collect  # force load
         
     | 
| 
      
 1930 
     | 
    
         
            +
                assert_no_queries { assert ! firm.clients.one? }
         
     | 
| 
      
 1931 
     | 
    
         
            +
              end
         
     | 
| 
      
 1932 
     | 
    
         
            +
             
     | 
| 
      
 1933 
     | 
    
         
            +
              def test_calling_one_should_defer_to_collection_if_using_a_block
         
     | 
| 
      
 1934 
     | 
    
         
            +
                firm = companies(:first_firm)
         
     | 
| 
      
 1935 
     | 
    
         
            +
                assert_queries(1) do
         
     | 
| 
      
 1936 
     | 
    
         
            +
                  firm.clients.expects(:size).never
         
     | 
| 
      
 1937 
     | 
    
         
            +
                  firm.clients.one? { true }
         
     | 
| 
      
 1938 
     | 
    
         
            +
                end
         
     | 
| 
      
 1939 
     | 
    
         
            +
                assert firm.clients.loaded?
         
     | 
| 
      
 1940 
     | 
    
         
            +
              end
         
     | 
| 
      
 1941 
     | 
    
         
            +
             
     | 
| 
      
 1942 
     | 
    
         
            +
              def test_calling_one_should_return_false_if_zero
         
     | 
| 
      
 1943 
     | 
    
         
            +
                firm = companies(:another_firm)
         
     | 
| 
      
 1944 
     | 
    
         
            +
                assert ! firm.clients_like_ms.one?
         
     | 
| 
      
 1945 
     | 
    
         
            +
                assert_equal 0, firm.clients_like_ms.size
         
     | 
| 
      
 1946 
     | 
    
         
            +
              end
         
     | 
| 
      
 1947 
     | 
    
         
            +
             
     | 
| 
      
 1948 
     | 
    
         
            +
              def test_calling_one_should_return_true_if_one
         
     | 
| 
      
 1949 
     | 
    
         
            +
                firm = companies(:first_firm)
         
     | 
| 
      
 1950 
     | 
    
         
            +
                assert firm.limited_clients.one?
         
     | 
| 
      
 1951 
     | 
    
         
            +
                assert_equal 1, firm.limited_clients.size
         
     | 
| 
      
 1952 
     | 
    
         
            +
              end
         
     | 
| 
      
 1953 
     | 
    
         
            +
             
     | 
| 
      
 1954 
     | 
    
         
            +
              def test_calling_one_should_return_false_if_more_than_one
         
     | 
| 
      
 1955 
     | 
    
         
            +
                firm = companies(:first_firm)
         
     | 
| 
      
 1956 
     | 
    
         
            +
                assert ! firm.clients.one?
         
     | 
| 
      
 1957 
     | 
    
         
            +
                assert_equal 3, firm.clients.size
         
     | 
| 
      
 1958 
     | 
    
         
            +
              end
         
     | 
| 
      
 1959 
     | 
    
         
            +
             
     | 
| 
       1744 
1960 
     | 
    
         
             
              def test_joins_with_namespaced_model_should_use_correct_type
         
     | 
| 
       1745 
1961 
     | 
    
         
             
                old = ActiveRecord::Base.store_full_sti_class
         
     | 
| 
       1746 
1962 
     | 
    
         
             
                ActiveRecord::Base.store_full_sti_class = true
         
     | 
| 
         @@ -1990,7 +2206,15 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       1990 
2206 
     | 
    
         
             
              test "association with extend option with multiple extensions" do
         
     | 
| 
       1991 
2207 
     | 
    
         
             
                post = posts(:welcome)
         
     | 
| 
       1992 
2208 
     | 
    
         
             
                assert_equal "lifo",  post.comments_with_extend_2.author
         
     | 
| 
       1993 
     | 
    
         
            -
                assert_equal " 
     | 
| 
      
 2209 
     | 
    
         
            +
                assert_equal "hullo", post.comments_with_extend_2.greeting
         
     | 
| 
      
 2210 
     | 
    
         
            +
              end
         
     | 
| 
      
 2211 
     | 
    
         
            +
             
     | 
| 
      
 2212 
     | 
    
         
            +
              test "extend option affects per association" do
         
     | 
| 
      
 2213 
     | 
    
         
            +
                post = posts(:welcome)
         
     | 
| 
      
 2214 
     | 
    
         
            +
                assert_equal "lifo",  post.comments_with_extend.author
         
     | 
| 
      
 2215 
     | 
    
         
            +
                assert_equal "lifo",  post.comments_with_extend_2.author
         
     | 
| 
      
 2216 
     | 
    
         
            +
                assert_equal "hello", post.comments_with_extend.greeting
         
     | 
| 
      
 2217 
     | 
    
         
            +
                assert_equal "hullo", post.comments_with_extend_2.greeting
         
     | 
| 
       1994 
2218 
     | 
    
         
             
              end
         
     | 
| 
       1995 
2219 
     | 
    
         | 
| 
       1996 
2220 
     | 
    
         
             
              test "delete record with complex joins" do
         
     | 
| 
         @@ -2050,8 +2274,9 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       2050 
2274 
     | 
    
         
             
                car = Car.create!
         
     | 
| 
       2051 
2275 
     | 
    
         
             
                bulb = Bulb.create! name: "other", car: car
         
     | 
| 
       2052 
2276 
     | 
    
         | 
| 
       2053 
     | 
    
         
            -
                assert_equal bulb, Car.find(car.id).all_bulbs 
     | 
| 
       2054 
     | 
    
         
            -
                assert_equal bulb, Car.includes(:all_bulbs).find(car.id).all_bulbs 
     | 
| 
      
 2277 
     | 
    
         
            +
                assert_equal [bulb], Car.find(car.id).all_bulbs
         
     | 
| 
      
 2278 
     | 
    
         
            +
                assert_equal [bulb], Car.includes(:all_bulbs).find(car.id).all_bulbs
         
     | 
| 
      
 2279 
     | 
    
         
            +
                assert_equal [bulb], Car.eager_load(:all_bulbs).find(car.id).all_bulbs
         
     | 
| 
       2055 
2280 
     | 
    
         
             
              end
         
     | 
| 
       2056 
2281 
     | 
    
         | 
| 
       2057 
2282 
     | 
    
         
             
              test "raises RecordNotDestroyed when replaced child can't be destroyed" do
         
     | 
| 
         @@ -2103,7 +2328,7 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       2103 
2328 
     | 
    
         
             
                assert_equal [], authors(:david).posts_with_signature.map(&:title)
         
     | 
| 
       2104 
2329 
     | 
    
         
             
              end
         
     | 
| 
       2105 
2330 
     | 
    
         | 
| 
       2106 
     | 
    
         
            -
              test 'associations autosaves when object is already  
     | 
| 
      
 2331 
     | 
    
         
            +
              test 'associations autosaves when object is already persisted' do
         
     | 
| 
       2107 
2332 
     | 
    
         
             
                bulb = Bulb.create!
         
     | 
| 
       2108 
2333 
     | 
    
         
             
                tyre = Tyre.create!
         
     | 
| 
       2109 
2334 
     | 
    
         | 
| 
         @@ -2179,4 +2404,98 @@ class HasManyAssociationsTest < ActiveRecord::TestCase 
     | 
|
| 
       2179 
2404 
     | 
    
         | 
| 
       2180 
2405 
     | 
    
         
             
                assert_equal [first_bulb, second_bulb], car.bulbs
         
     | 
| 
       2181 
2406 
     | 
    
         
             
              end
         
     | 
| 
      
 2407 
     | 
    
         
            +
             
     | 
| 
      
 2408 
     | 
    
         
            +
              test "prevent double insertion of new object when the parent association loaded in the after save callback" do
         
     | 
| 
      
 2409 
     | 
    
         
            +
                reset_callbacks(:save, Bulb) do
         
     | 
| 
      
 2410 
     | 
    
         
            +
                  Bulb.after_save { |record| record.car.bulbs.load }
         
     | 
| 
      
 2411 
     | 
    
         
            +
             
     | 
| 
      
 2412 
     | 
    
         
            +
                  car = Car.create!
         
     | 
| 
      
 2413 
     | 
    
         
            +
                  car.bulbs << Bulb.new
         
     | 
| 
      
 2414 
     | 
    
         
            +
             
     | 
| 
      
 2415 
     | 
    
         
            +
                  assert_equal 1, car.bulbs.size
         
     | 
| 
      
 2416 
     | 
    
         
            +
                end
         
     | 
| 
      
 2417 
     | 
    
         
            +
              end
         
     | 
| 
      
 2418 
     | 
    
         
            +
             
     | 
| 
      
 2419 
     | 
    
         
            +
              test "prevent double firing the before save callback of new object when the parent association saved in the callback" do
         
     | 
| 
      
 2420 
     | 
    
         
            +
                reset_callbacks(:save, Bulb) do
         
     | 
| 
      
 2421 
     | 
    
         
            +
                  count = 0
         
     | 
| 
      
 2422 
     | 
    
         
            +
                  Bulb.before_save { |record| record.car.save && count += 1 }
         
     | 
| 
      
 2423 
     | 
    
         
            +
             
     | 
| 
      
 2424 
     | 
    
         
            +
                  car = Car.create!
         
     | 
| 
      
 2425 
     | 
    
         
            +
                  car.bulbs.create!
         
     | 
| 
      
 2426 
     | 
    
         
            +
             
     | 
| 
      
 2427 
     | 
    
         
            +
                  assert_equal 1, count
         
     | 
| 
      
 2428 
     | 
    
         
            +
                end
         
     | 
| 
      
 2429 
     | 
    
         
            +
              end
         
     | 
| 
      
 2430 
     | 
    
         
            +
             
     | 
| 
      
 2431 
     | 
    
         
            +
              def test_association_force_reload_with_only_true_is_deprecated
         
     | 
| 
      
 2432 
     | 
    
         
            +
                company = Company.find(1)
         
     | 
| 
      
 2433 
     | 
    
         
            +
             
     | 
| 
      
 2434 
     | 
    
         
            +
                assert_deprecated { company.clients_of_firm(true) }
         
     | 
| 
      
 2435 
     | 
    
         
            +
              end
         
     | 
| 
      
 2436 
     | 
    
         
            +
             
     | 
| 
      
 2437 
     | 
    
         
            +
              class AuthorWithErrorDestroyingAssociation < ActiveRecord::Base
         
     | 
| 
      
 2438 
     | 
    
         
            +
                self.table_name = "authors"
         
     | 
| 
      
 2439 
     | 
    
         
            +
                has_many :posts_with_error_destroying,
         
     | 
| 
      
 2440 
     | 
    
         
            +
                  class_name: "PostWithErrorDestroying",
         
     | 
| 
      
 2441 
     | 
    
         
            +
                  foreign_key: :author_id,
         
     | 
| 
      
 2442 
     | 
    
         
            +
                  dependent: :destroy
         
     | 
| 
      
 2443 
     | 
    
         
            +
              end
         
     | 
| 
      
 2444 
     | 
    
         
            +
             
     | 
| 
      
 2445 
     | 
    
         
            +
              class PostWithErrorDestroying < ActiveRecord::Base
         
     | 
| 
      
 2446 
     | 
    
         
            +
                self.table_name = "posts"
         
     | 
| 
      
 2447 
     | 
    
         
            +
                self.inheritance_column = nil
         
     | 
| 
      
 2448 
     | 
    
         
            +
                before_destroy -> { throw :abort }
         
     | 
| 
      
 2449 
     | 
    
         
            +
              end
         
     | 
| 
      
 2450 
     | 
    
         
            +
             
     | 
| 
      
 2451 
     | 
    
         
            +
              def test_destroy_does_not_raise_when_association_errors_on_destroy
         
     | 
| 
      
 2452 
     | 
    
         
            +
                assert_no_difference "AuthorWithErrorDestroyingAssociation.count" do
         
     | 
| 
      
 2453 
     | 
    
         
            +
                  author = AuthorWithErrorDestroyingAssociation.first
         
     | 
| 
      
 2454 
     | 
    
         
            +
             
     | 
| 
      
 2455 
     | 
    
         
            +
                  assert_not author.destroy
         
     | 
| 
      
 2456 
     | 
    
         
            +
                end
         
     | 
| 
      
 2457 
     | 
    
         
            +
              end
         
     | 
| 
      
 2458 
     | 
    
         
            +
             
     | 
| 
      
 2459 
     | 
    
         
            +
              def test_destroy_with_bang_bubbles_errors_from_associations
         
     | 
| 
      
 2460 
     | 
    
         
            +
                error = assert_raises ActiveRecord::RecordNotDestroyed do
         
     | 
| 
      
 2461 
     | 
    
         
            +
                  AuthorWithErrorDestroyingAssociation.first.destroy!
         
     | 
| 
      
 2462 
     | 
    
         
            +
                end
         
     | 
| 
      
 2463 
     | 
    
         
            +
             
     | 
| 
      
 2464 
     | 
    
         
            +
                assert_instance_of PostWithErrorDestroying, error.record
         
     | 
| 
      
 2465 
     | 
    
         
            +
              end
         
     | 
| 
      
 2466 
     | 
    
         
            +
             
     | 
| 
      
 2467 
     | 
    
         
            +
              def test_ids_reader_memoization
         
     | 
| 
      
 2468 
     | 
    
         
            +
                car = Car.create!(name: 'Tofaş')
         
     | 
| 
      
 2469 
     | 
    
         
            +
                bulb = Bulb.create!(car: car)
         
     | 
| 
      
 2470 
     | 
    
         
            +
             
     | 
| 
      
 2471 
     | 
    
         
            +
                assert_equal [bulb.id], car.bulb_ids
         
     | 
| 
      
 2472 
     | 
    
         
            +
                assert_no_queries { car.bulb_ids }
         
     | 
| 
      
 2473 
     | 
    
         
            +
              end
         
     | 
| 
      
 2474 
     | 
    
         
            +
             
     | 
| 
      
 2475 
     | 
    
         
            +
              def test_loading_association_in_validate_callback_doesnt_affect_persistence
         
     | 
| 
      
 2476 
     | 
    
         
            +
                reset_callbacks(:validation, Bulb) do
         
     | 
| 
      
 2477 
     | 
    
         
            +
                  Bulb.after_validation { |record| record.car.bulbs.load }
         
     | 
| 
      
 2478 
     | 
    
         
            +
             
     | 
| 
      
 2479 
     | 
    
         
            +
                  car = Car.create!(name: "Car")
         
     | 
| 
      
 2480 
     | 
    
         
            +
                  bulb = car.bulbs.create!
         
     | 
| 
      
 2481 
     | 
    
         
            +
             
     | 
| 
      
 2482 
     | 
    
         
            +
                  assert_equal [bulb], car.bulbs
         
     | 
| 
      
 2483 
     | 
    
         
            +
                end
         
     | 
| 
      
 2484 
     | 
    
         
            +
              end
         
     | 
| 
      
 2485 
     | 
    
         
            +
             
     | 
| 
      
 2486 
     | 
    
         
            +
              private
         
     | 
| 
      
 2487 
     | 
    
         
            +
             
     | 
| 
      
 2488 
     | 
    
         
            +
                def reset_callbacks(kind, klass)
         
     | 
| 
      
 2489 
     | 
    
         
            +
                  old_callbacks = {}
         
     | 
| 
      
 2490 
     | 
    
         
            +
                  old_callbacks[klass] = klass.send("_#{kind}_callbacks").dup
         
     | 
| 
      
 2491 
     | 
    
         
            +
                  klass.subclasses.each do |subclass|
         
     | 
| 
      
 2492 
     | 
    
         
            +
                    old_callbacks[subclass] = subclass.send("_#{kind}_callbacks").dup
         
     | 
| 
      
 2493 
     | 
    
         
            +
                  end
         
     | 
| 
      
 2494 
     | 
    
         
            +
                  yield
         
     | 
| 
      
 2495 
     | 
    
         
            +
                ensure
         
     | 
| 
      
 2496 
     | 
    
         
            +
                  klass.send("_#{kind}_callbacks=", old_callbacks[klass])
         
     | 
| 
      
 2497 
     | 
    
         
            +
                  klass.subclasses.each do |subclass|
         
     | 
| 
      
 2498 
     | 
    
         
            +
                    subclass.send("_#{kind}_callbacks=", old_callbacks[subclass])
         
     | 
| 
      
 2499 
     | 
    
         
            +
                  end
         
     | 
| 
      
 2500 
     | 
    
         
            +
                end
         
     | 
| 
       2182 
2501 
     | 
    
         
             
            end
         
     |