ibm_db 3.0.4-x86-mingw32 → 3.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 +4 -4
- data/CHANGES +4 -1
- data/LICENSE +1 -1
- data/MANIFEST +14 -14
- data/README +225 -225
- data/ext/Makefile.nt32 +181 -181
- data/ext/Makefile.nt32.191 +212 -212
- data/ext/extconf.rb +291 -291
- data/ext/ibm_db.c +11887 -11884
- data/ext/ruby_ibm_db.h +241 -241
- data/ext/ruby_ibm_db_cli.c +866 -866
- data/ext/ruby_ibm_db_cli.h +500 -500
- data/init.rb +41 -41
- data/lib/IBM_DB.rb +27 -27
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3177 -3177
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
- data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
- data/lib/mswin32/ibm_db.rb +122 -122
- 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/active_record/connection_adapters/fake_adapter.rb +46 -46
- data/test/assets/example.log +1 -1
- data/test/assets/test.txt +1 -1
- data/test/cases/adapter_test.rb +276 -261
- data/test/cases/aggregations_test.rb +158 -158
- data/test/cases/ar_schema_test.rb +161 -161
- data/test/cases/associations/association_scope_test.rb +21 -21
- data/test/cases/associations/belongs_to_associations_test.rb +1029 -1029
- data/test/cases/associations/callbacks_test.rb +192 -192
- data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
- data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -26
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
- data/test/cases/associations/eager_load_nested_include_test.rb +128 -128
- data/test/cases/associations/eager_singularization_test.rb +148 -148
- data/test/cases/associations/eager_test.rb +1429 -1411
- data/test/cases/associations/extension_test.rb +82 -82
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +972 -932
- data/test/cases/associations/has_many_associations_test.rb +2182 -2162
- data/test/cases/associations/has_many_through_associations_test.rb +1204 -1204
- data/test/cases/associations/has_one_associations_test.rb +610 -610
- data/test/cases/associations/has_one_through_associations_test.rb +380 -380
- data/test/cases/associations/inner_join_association_test.rb +139 -139
- data/test/cases/associations/inverse_associations_test.rb +706 -693
- data/test/cases/associations/join_model_test.rb +754 -754
- data/test/cases/associations/nested_through_associations_test.rb +579 -579
- data/test/cases/associations/required_test.rb +82 -82
- data/test/cases/associations_test.rb +380 -380
- data/test/cases/attribute_decorators_test.rb +125 -125
- data/test/cases/attribute_methods/read_test.rb +60 -60
- data/test/cases/attribute_methods/serialization_test.rb +29 -29
- data/test/cases/attribute_methods_test.rb +952 -952
- data/test/cases/attribute_set_test.rb +210 -200
- data/test/cases/attribute_test.rb +180 -180
- data/test/cases/attributes_test.rb +136 -136
- data/test/cases/autosave_association_test.rb +1595 -1595
- data/test/cases/base_test.rb +1664 -1638
- data/test/cases/batches_test.rb +212 -212
- data/test/cases/binary_test.rb +52 -52
- data/test/cases/bind_parameter_test.rb +100 -100
- data/test/cases/calculations_test.rb +646 -646
- data/test/cases/callbacks_test.rb +543 -543
- data/test/cases/clone_test.rb +40 -40
- data/test/cases/coders/yaml_column_test.rb +63 -63
- data/test/cases/column_alias_test.rb +17 -17
- data/test/cases/column_definition_test.rb +123 -123
- data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -54
- data/test/cases/connection_adapters/connection_handler_test.rb +53 -53
- data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -293
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -65
- data/test/cases/connection_adapters/quoting_test.rb +13 -13
- data/test/cases/connection_adapters/schema_cache_test.rb +56 -56
- data/test/cases/connection_adapters/type_lookup_test.rb +110 -110
- data/test/cases/connection_management_test.rb +122 -122
- data/test/cases/connection_pool_test.rb +346 -346
- data/test/cases/connection_specification/resolver_test.rb +116 -116
- data/test/cases/core_test.rb +112 -112
- data/test/cases/counter_cache_test.rb +209 -209
- data/test/cases/custom_locking_test.rb +17 -17
- data/test/cases/database_statements_test.rb +19 -19
- data/test/cases/date_time_test.rb +61 -61
- data/test/cases/defaults_test.rb +223 -223
- data/test/cases/dirty_test.rb +785 -775
- data/test/cases/disconnected_test.rb +28 -28
- data/test/cases/dup_test.rb +157 -157
- data/test/cases/enum_test.rb +290 -290
- data/test/cases/explain_subscriber_test.rb +64 -64
- data/test/cases/explain_test.rb +76 -76
- data/test/cases/finder_respond_to_test.rb +60 -60
- data/test/cases/finder_test.rb +1169 -1166
- data/test/cases/fixture_set/file_test.rb +138 -138
- data/test/cases/fixtures_test.rb +908 -897
- data/test/cases/forbidden_attributes_protection_test.rb +99 -99
- data/test/cases/habtm_destroy_order_test.rb +61 -61
- data/test/cases/helper.rb +210 -210
- data/test/cases/hot_compatibility_test.rb +54 -54
- data/test/cases/i18n_test.rb +45 -45
- data/test/cases/inheritance_test.rb +375 -375
- data/test/cases/integration_test.rb +139 -139
- data/test/cases/invalid_connection_test.rb +22 -22
- data/test/cases/invalid_date_test.rb +32 -32
- data/test/cases/invertible_migration_test.rb +295 -295
- data/test/cases/json_serialization_test.rb +302 -302
- data/test/cases/locking_test.rb +477 -477
- data/test/cases/log_subscriber_test.rb +136 -136
- data/test/cases/migration/change_schema_test - Copy.rb +448 -448
- data/test/cases/migration/change_schema_test.rb +512 -472
- data/test/cases/migration/change_table_test.rb +224 -224
- data/test/cases/migration/column_attributes_test.rb +192 -192
- data/test/cases/migration/column_positioning_test.rb +56 -56
- data/test/cases/migration/columns_test.rb +304 -304
- data/test/cases/migration/command_recorder_test.rb +305 -305
- data/test/cases/migration/create_join_table_test.rb +148 -148
- data/test/cases/migration/foreign_key_test - Changed.rb +325 -325
- data/test/cases/migration/foreign_key_test.rb +328 -360
- data/test/cases/migration/helper.rb +39 -39
- data/test/cases/migration/index_test.rb +216 -216
- data/test/cases/migration/logger_test.rb +36 -36
- data/test/cases/migration/pending_migrations_test.rb +53 -53
- data/test/cases/migration/references_foreign_key_test.rb +169 -214
- data/test/cases/migration/references_index_test.rb +101 -101
- data/test/cases/migration/references_statements_test.rb +116 -116
- data/test/cases/migration/rename_table_test.rb +93 -93
- data/test/cases/migration/table_and_index_test.rb +24 -24
- data/test/cases/migration_test.rb +959 -959
- data/test/cases/migrator_test.rb +388 -388
- data/test/cases/mixin_test.rb +70 -70
- data/test/cases/modules_test.rb +173 -173
- data/test/cases/multiparameter_attributes_test.rb +350 -350
- data/test/cases/multiple_db_test.rb +115 -115
- data/test/cases/nested_attributes_test.rb +1070 -1057
- data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
- data/test/cases/persistence_test.rb +909 -909
- data/test/cases/pooled_connections_test.rb +81 -81
- data/test/cases/primary_keys_test.rb +237 -237
- data/test/cases/query_cache_test.rb +326 -326
- data/test/cases/quoting_test.rb +156 -156
- data/test/cases/readonly_test.rb +118 -118
- data/test/cases/reaper_test.rb +85 -85
- data/test/cases/reflection_test.rb +463 -454
- data/test/cases/relation/delegation_test.rb +68 -68
- data/test/cases/relation/merging_test.rb +161 -161
- data/test/cases/relation/mutation_test.rb +165 -165
- data/test/cases/relation/predicate_builder_test.rb +14 -14
- data/test/cases/relation/where_chain_test.rb +181 -181
- data/test/cases/relation/where_test.rb +300 -300
- data/test/cases/relation/where_test2.rb +36 -36
- data/test/cases/relation_test.rb +319 -297
- data/test/cases/relations_test.rb +1815 -1815
- data/test/cases/reload_models_test.rb +22 -22
- data/test/cases/result_test.rb +80 -80
- data/test/cases/sanitize_test.rb +83 -83
- data/test/cases/schema_dumper_test.rb +463 -463
- data/test/cases/scoping/default_scoping_test.rb +454 -454
- data/test/cases/scoping/named_scoping_test.rb +524 -524
- data/test/cases/scoping/relation_scoping_test.rb +357 -357
- data/test/cases/serialization_test.rb +104 -104
- data/test/cases/serialized_attribute_test.rb +277 -277
- data/test/cases/statement_cache_test.rb +98 -98
- data/test/cases/store_test.rb +194 -194
- data/test/cases/tasks/database_tasks_test.rb +398 -396
- data/test/cases/tasks/mysql_rake_test.rb +324 -311
- data/test/cases/tasks/postgresql_rake_test.rb +250 -245
- data/test/cases/tasks/sqlite_rake_test.rb +193 -193
- data/test/cases/test_case.rb +123 -123
- data/test/cases/timestamp_test.rb +467 -468
- data/test/cases/transaction_callbacks_test.rb +452 -452
- data/test/cases/transaction_isolation_test.rb +106 -106
- data/test/cases/transactions_test.rb +817 -817
- data/test/cases/type/decimal_test.rb +56 -51
- data/test/cases/type/integer_test.rb +121 -121
- data/test/cases/type/string_test.rb +36 -36
- data/test/cases/type/type_map_test.rb +177 -177
- data/test/cases/type/unsigned_integer_test.rb +18 -18
- data/test/cases/types_test.rb +141 -141
- data/test/cases/unconnected_test.rb +33 -33
- data/test/cases/validations/association_validation_test.rb +86 -86
- data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
- data/test/cases/validations/i18n_validation_test.rb +90 -90
- data/test/cases/validations/length_validation_test.rb +47 -47
- data/test/cases/validations/presence_validation_test.rb +68 -68
- data/test/cases/validations/uniqueness_validation_test.rb +457 -434
- data/test/cases/validations_repair_helper.rb +23 -23
- data/test/cases/validations_test.rb +165 -165
- data/test/cases/view_test.rb +119 -113
- data/test/cases/xml_serialization_test.rb +457 -457
- data/test/cases/yaml_serialization_test.rb +126 -86
- data/test/config.rb +5 -5
- data/test/config.yml +154 -154
- data/test/connections/native_ibm_db/connection.rb +43 -43
- data/test/fixtures/accounts.yml +29 -29
- data/test/fixtures/admin/accounts.yml +2 -2
- data/test/fixtures/admin/randomly_named_a9.yml +7 -7
- data/test/fixtures/admin/randomly_named_b0.yml +7 -7
- data/test/fixtures/admin/users.yml +10 -10
- data/test/fixtures/author_addresses.yml +17 -17
- data/test/fixtures/author_favorites.yml +3 -3
- data/test/fixtures/authors.yml +23 -23
- data/test/fixtures/binaries.yml +133 -133
- data/test/fixtures/books.yml +11 -11
- data/test/fixtures/bulbs.yml +5 -5
- data/test/fixtures/cars.yml +9 -9
- data/test/fixtures/categories.yml +19 -19
- data/test/fixtures/categories/special_categories.yml +9 -9
- data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
- data/test/fixtures/categories_ordered.yml +7 -7
- data/test/fixtures/categories_posts.yml +31 -31
- data/test/fixtures/categorizations.yml +23 -23
- data/test/fixtures/clubs.yml +8 -8
- data/test/fixtures/collections.yml +3 -3
- data/test/fixtures/colleges.yml +3 -3
- data/test/fixtures/comments.yml +65 -65
- data/test/fixtures/companies.yml +67 -67
- data/test/fixtures/computers.yml +10 -10
- data/test/fixtures/courses.yml +8 -8
- data/test/fixtures/customers.yml +25 -25
- data/test/fixtures/dashboards.yml +6 -6
- data/test/fixtures/developers.yml +21 -21
- data/test/fixtures/developers_projects.yml +16 -16
- data/test/fixtures/dog_lovers.yml +7 -7
- data/test/fixtures/dogs.yml +4 -4
- data/test/fixtures/doubloons.yml +3 -3
- data/test/fixtures/edges.yml +5 -5
- data/test/fixtures/entrants.yml +14 -14
- data/test/fixtures/essays.yml +6 -6
- data/test/fixtures/faces.yml +11 -11
- data/test/fixtures/fk_test_has_fk.yml +3 -3
- data/test/fixtures/fk_test_has_pk.yml +1 -1
- data/test/fixtures/friendships.yml +4 -4
- data/test/fixtures/funny_jokes.yml +10 -10
- data/test/fixtures/interests.yml +33 -33
- data/test/fixtures/items.yml +3 -3
- data/test/fixtures/jobs.yml +7 -7
- data/test/fixtures/legacy_things.yml +3 -3
- data/test/fixtures/mateys.yml +4 -4
- data/test/fixtures/member_details.yml +8 -8
- data/test/fixtures/member_types.yml +6 -6
- data/test/fixtures/members.yml +11 -11
- data/test/fixtures/memberships.yml +34 -34
- data/test/fixtures/men.yml +5 -5
- data/test/fixtures/minimalistics.yml +2 -2
- data/test/fixtures/minivans.yml +5 -5
- data/test/fixtures/mixed_case_monkeys.yml +6 -6
- data/test/fixtures/mixins.yml +29 -29
- data/test/fixtures/movies.yml +7 -7
- data/test/fixtures/naked/csv/accounts.csv +1 -1
- data/test/fixtures/naked/yml/accounts.yml +1 -1
- data/test/fixtures/naked/yml/companies.yml +1 -1
- data/test/fixtures/naked/yml/courses.yml +1 -1
- data/test/fixtures/organizations.yml +5 -5
- data/test/fixtures/other_topics.yml +42 -42
- data/test/fixtures/owners.yml +9 -9
- data/test/fixtures/parrots.yml +27 -27
- data/test/fixtures/parrots_pirates.yml +7 -7
- data/test/fixtures/people.yml +24 -24
- data/test/fixtures/peoples_treasures.yml +3 -3
- data/test/fixtures/pets.yml +19 -19
- data/test/fixtures/pirates.yml +12 -12
- data/test/fixtures/posts.yml +80 -80
- data/test/fixtures/price_estimates.yml +7 -7
- data/test/fixtures/products.yml +4 -4
- data/test/fixtures/projects.yml +7 -7
- data/test/fixtures/randomly_named_a9.yml +7 -7
- data/test/fixtures/ratings.yml +14 -14
- data/test/fixtures/readers.yml +11 -11
- data/test/fixtures/references.yml +17 -17
- data/test/fixtures/reserved_words/distinct.yml +5 -5
- data/test/fixtures/reserved_words/distinct_select.yml +11 -11
- data/test/fixtures/reserved_words/group.yml +14 -14
- data/test/fixtures/reserved_words/select.yml +8 -8
- data/test/fixtures/reserved_words/values.yml +7 -7
- data/test/fixtures/ships.yml +6 -6
- data/test/fixtures/speedometers.yml +8 -8
- data/test/fixtures/sponsors.yml +12 -12
- data/test/fixtures/string_key_objects.yml +7 -7
- data/test/fixtures/subscribers.yml +10 -10
- data/test/fixtures/subscriptions.yml +12 -12
- data/test/fixtures/taggings.yml +78 -78
- data/test/fixtures/tags.yml +11 -11
- data/test/fixtures/tasks.yml +7 -7
- data/test/fixtures/teapots.yml +3 -3
- data/test/fixtures/to_be_linked/accounts.yml +2 -2
- data/test/fixtures/to_be_linked/users.yml +10 -10
- data/test/fixtures/topics.yml +49 -49
- data/test/fixtures/toys.yml +14 -14
- data/test/fixtures/traffic_lights.yml +9 -9
- data/test/fixtures/treasures.yml +10 -10
- data/test/fixtures/uuid_children.yml +3 -3
- data/test/fixtures/uuid_parents.yml +2 -2
- data/test/fixtures/variants.yml +4 -4
- data/test/fixtures/vegetables.yml +19 -19
- data/test/fixtures/vertices.yml +3 -3
- data/test/fixtures/warehouse_things.yml +2 -2
- data/test/fixtures/zines.yml +5 -5
- data/test/ibm_db_test.rb +24 -24
- data/test/migrations/10_urban/9_add_expressions.rb +11 -11
- data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
- data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
- data/test/migrations/missing/1000_people_have_middle_names.rb +8 -8
- data/test/migrations/missing/1_people_have_last_names.rb +8 -8
- data/test/migrations/missing/3_we_need_reminders.rb +11 -11
- data/test/migrations/missing/4_innocent_jointable.rb +11 -11
- data/test/migrations/rename/1_we_need_things.rb +10 -10
- data/test/migrations/rename/2_rename_things.rb +8 -8
- data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy2/1_create_articles.rb +7 -7
- data/test/migrations/to_copy2/2_create_comments.rb +7 -7
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
- data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid/2_we_need_reminders.rb +11 -11
- data/test/migrations/valid/3_innocent_jointable.rb +11 -11
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +11 -11
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +11 -11
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
- data/test/models/admin.rb +4 -4
- data/test/models/admin/account.rb +2 -2
- data/test/models/admin/randomly_named_c1.rb +3 -3
- data/test/models/admin/user.rb +40 -40
- data/test/models/aircraft.rb +4 -4
- data/test/models/arunit2_model.rb +3 -3
- data/test/models/author.rb +212 -212
- data/test/models/auto_id.rb +4 -4
- data/test/models/autoloadable/extra_firm.rb +2 -2
- data/test/models/binary.rb +1 -1
- data/test/models/bird.rb +12 -12
- data/test/models/book.rb +18 -18
- data/test/models/boolean.rb +2 -2
- data/test/models/bulb.rb +51 -51
- data/test/models/cake_designer.rb +3 -3
- data/test/models/car.rb +26 -26
- data/test/models/carrier.rb +2 -2
- data/test/models/categorization.rb +19 -19
- data/test/models/category.rb +35 -35
- data/test/models/chef.rb +7 -3
- data/test/models/citation.rb +3 -3
- data/test/models/club.rb +23 -23
- data/test/models/college.rb +10 -10
- data/test/models/column.rb +3 -3
- data/test/models/column_name.rb +3 -3
- data/test/models/comment.rb +64 -64
- data/test/models/company.rb +228 -225
- data/test/models/company_in_module.rb +98 -98
- data/test/models/computer.rb +3 -3
- data/test/models/contact.rb +41 -41
- data/test/models/contract.rb +20 -20
- data/test/models/country.rb +7 -7
- data/test/models/course.rb +6 -6
- data/test/models/customer.rb +77 -77
- data/test/models/customer_carrier.rb +14 -14
- data/test/models/dashboard.rb +3 -3
- data/test/models/default.rb +2 -2
- data/test/models/department.rb +4 -4
- data/test/models/developer.rb +255 -252
- data/test/models/dog.rb +5 -5
- data/test/models/dog_lover.rb +5 -5
- data/test/models/doubloon.rb +12 -12
- data/test/models/drink_designer.rb +3 -3
- data/test/models/edge.rb +5 -5
- data/test/models/electron.rb +5 -5
- data/test/models/engine.rb +4 -4
- data/test/models/entrant.rb +3 -3
- data/test/models/essay.rb +5 -5
- data/test/models/event.rb +2 -2
- data/test/models/eye.rb +37 -37
- data/test/models/face.rb +9 -9
- data/test/models/friendship.rb +6 -6
- data/test/models/guid.rb +1 -1
- data/test/models/hotel.rb +9 -6
- data/test/models/image.rb +3 -3
- data/test/models/interest.rb +5 -5
- data/test/models/invoice.rb +4 -4
- data/test/models/item.rb +7 -7
- data/test/models/job.rb +7 -7
- data/test/models/joke.rb +7 -7
- data/test/models/keyboard.rb +3 -3
- data/test/models/legacy_thing.rb +3 -3
- data/test/models/lesson.rb +11 -11
- data/test/models/line_item.rb +3 -3
- data/test/models/liquid.rb +4 -4
- data/test/models/man.rb +11 -11
- data/test/models/matey.rb +4 -4
- data/test/models/member.rb +41 -41
- data/test/models/member_detail.rb +7 -7
- data/test/models/member_type.rb +3 -3
- data/test/models/membership.rb +35 -35
- data/test/models/minimalistic.rb +2 -2
- data/test/models/minivan.rb +9 -9
- data/test/models/mixed_case_monkey.rb +3 -3
- data/test/models/molecule.rb +6 -6
- data/test/models/movie.rb +5 -5
- data/test/models/order.rb +4 -4
- data/test/models/organization.rb +14 -14
- data/test/models/owner.rb +34 -34
- data/test/models/parrot.rb +29 -29
- data/test/models/person.rb +143 -143
- data/test/models/personal_legacy_thing.rb +4 -4
- data/test/models/pet.rb +15 -15
- data/test/models/pirate.rb +92 -92
- data/test/models/possession.rb +3 -3
- data/test/models/post.rb +264 -264
- data/test/models/price_estimate.rb +4 -4
- data/test/models/professor.rb +5 -5
- data/test/models/project.rb +31 -29
- data/test/models/publisher.rb +2 -2
- data/test/models/publisher/article.rb +4 -4
- data/test/models/publisher/magazine.rb +3 -3
- data/test/models/randomly_named_c1.rb +3 -3
- data/test/models/rating.rb +4 -4
- data/test/models/reader.rb +23 -23
- data/test/models/record.rb +2 -2
- data/test/models/reference.rb +22 -22
- data/test/models/reply.rb +61 -61
- data/test/models/ship.rb +33 -33
- data/test/models/ship_part.rb +7 -7
- data/test/models/shop.rb +17 -17
- data/test/models/shop_account.rb +6 -6
- data/test/models/speedometer.rb +6 -6
- data/test/models/sponsor.rb +7 -7
- data/test/models/string_key_object.rb +3 -3
- data/test/models/student.rb +4 -4
- data/test/models/subject.rb +16 -16
- data/test/models/subscriber.rb +8 -8
- data/test/models/subscription.rb +4 -4
- data/test/models/tag.rb +7 -7
- data/test/models/tagging.rb +13 -13
- data/test/models/task.rb +5 -5
- data/test/models/topic.rb +124 -124
- data/test/models/toy.rb +6 -6
- data/test/models/traffic_light.rb +4 -4
- data/test/models/treasure.rb +14 -14
- data/test/models/treaty.rb +7 -7
- data/test/models/tyre.rb +11 -11
- data/test/models/uuid_child.rb +3 -3
- data/test/models/uuid_parent.rb +3 -3
- data/test/models/vegetables.rb +24 -24
- data/test/models/vehicle.rb +6 -6
- data/test/models/vertex.rb +9 -9
- data/test/models/warehouse_thing.rb +5 -5
- data/test/models/wheel.rb +3 -3
- data/test/models/without_table.rb +3 -3
- data/test/models/zine.rb +3 -3
- data/test/schema/mysql2_specific_schema.rb +58 -58
- data/test/schema/mysql_specific_schema.rb +70 -70
- data/test/schema/oracle_specific_schema.rb +43 -43
- data/test/schema/postgresql_specific_schema.rb +202 -202
- data/test/schema/schema.rb +952 -938
- data/test/schema/sqlite_specific_schema.rb +21 -21
- data/test/support/config.rb +43 -43
- data/test/support/connection.rb +22 -22
- data/test/support/connection_helper.rb +14 -14
- data/test/support/ddl_helper.rb +8 -8
- data/test/support/schema_dumping_helper.rb +20 -20
- metadata +2 -2
@@ -1,380 +1,380 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'models/club'
|
3
|
-
require 'models/member_type'
|
4
|
-
require 'models/member'
|
5
|
-
require 'models/membership'
|
6
|
-
require 'models/sponsor'
|
7
|
-
require 'models/organization'
|
8
|
-
require 'models/member_detail'
|
9
|
-
require 'models/minivan'
|
10
|
-
require 'models/dashboard'
|
11
|
-
require 'models/speedometer'
|
12
|
-
require 'models/category'
|
13
|
-
require 'models/author'
|
14
|
-
require 'models/essay'
|
15
|
-
require 'models/owner'
|
16
|
-
require 'models/post'
|
17
|
-
require 'models/comment'
|
18
|
-
require 'models/customer'
|
19
|
-
require 'models/carrier'
|
20
|
-
require 'models/shop_account'
|
21
|
-
require 'models/customer_carrier'
|
22
|
-
|
23
|
-
class HasOneThroughAssociationsTest < ActiveRecord::TestCase
|
24
|
-
fixtures :member_types, :members, :clubs, :memberships, :sponsors, :organizations, :minivans,
|
25
|
-
:dashboards, :speedometers, :authors, :posts, :comments, :categories, :essays, :owners, :author_addresses
|
26
|
-
|
27
|
-
def setup
|
28
|
-
@member = members(:groucho)
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_has_one_through_with_has_one
|
32
|
-
assert_equal clubs(:boring_club), @member.club
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_creating_association_creates_through_record
|
36
|
-
new_member = Member.create(:name => "Chris")
|
37
|
-
new_member.club = Club.create(:name => "LRUG")
|
38
|
-
assert_not_nil new_member.current_membership
|
39
|
-
assert_not_nil new_member.club
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_creating_association_builds_through_record_for_new
|
43
|
-
new_member = Member.new(:name => "Jane")
|
44
|
-
new_member.club = clubs(:moustache_club)
|
45
|
-
assert new_member.current_membership
|
46
|
-
assert_equal clubs(:moustache_club), new_member.current_membership.club
|
47
|
-
assert_equal clubs(:moustache_club), new_member.club
|
48
|
-
assert new_member.save
|
49
|
-
assert_equal clubs(:moustache_club), new_member.club
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_creating_association_sets_both_parent_ids_for_new
|
53
|
-
member = Member.new(name: 'Sean Griffin')
|
54
|
-
club = Club.new(name: 'Da Club')
|
55
|
-
|
56
|
-
member.club = club
|
57
|
-
|
58
|
-
member.save!
|
59
|
-
|
60
|
-
assert member.id
|
61
|
-
assert club.id
|
62
|
-
assert_equal member.id, member.current_membership.member_id
|
63
|
-
assert_equal club.id, member.current_membership.club_id
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_replace_target_record
|
67
|
-
new_club = Club.create(:name => "Marx Bros")
|
68
|
-
@member.club = new_club
|
69
|
-
@member.reload
|
70
|
-
assert_equal new_club, @member.club
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_replacing_target_record_deletes_old_association
|
74
|
-
assert_no_difference "Membership.count" do
|
75
|
-
new_club = Club.create(:name => "Bananarama")
|
76
|
-
@member.club = new_club
|
77
|
-
@member.reload
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_set_record_to_nil_should_delete_association
|
82
|
-
@member.club = nil
|
83
|
-
@member.reload
|
84
|
-
assert_equal nil, @member.current_membership
|
85
|
-
assert_nil @member.club
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_has_one_through_polymorphic
|
89
|
-
assert_equal clubs(:moustache_club), @member.sponsor_club
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_has_one_through_eager_loading
|
93
|
-
members = assert_queries(3) do #base table, through table, clubs table
|
94
|
-
Member.all.merge!(:includes => :club, :where => ["name = ?", "Groucho Marx"]).to_a
|
95
|
-
end
|
96
|
-
assert_equal 1, members.size
|
97
|
-
assert_not_nil assert_no_queries {members[0].club}
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_has_one_through_eager_loading_through_polymorphic
|
101
|
-
members = assert_queries(3) do #base table, through table, clubs table
|
102
|
-
Member.all.merge!(:includes => :sponsor_club, :where => ["name = ?", "Groucho Marx"]).to_a
|
103
|
-
end
|
104
|
-
assert_equal 1, members.size
|
105
|
-
assert_not_nil assert_no_queries {members[0].sponsor_club}
|
106
|
-
end
|
107
|
-
|
108
|
-
def test_has_one_through_with_conditions_eager_loading
|
109
|
-
# conditions on the through table
|
110
|
-
assert_equal clubs(:moustache_club), Member.all.merge!(:includes => :favourite_club).find(@member.id).favourite_club
|
111
|
-
memberships(:membership_of_favourite_club).update_columns(favourite: false)
|
112
|
-
assert_equal nil, Member.all.merge!(:includes => :favourite_club).find(@member.id).reload.favourite_club
|
113
|
-
|
114
|
-
# conditions on the source table
|
115
|
-
assert_equal clubs(:moustache_club), Member.all.merge!(:includes => :hairy_club).find(@member.id).hairy_club
|
116
|
-
clubs(:moustache_club).update_columns(name: "Association of Clean-Shaven Persons")
|
117
|
-
assert_equal nil, Member.all.merge!(:includes => :hairy_club).find(@member.id).reload.hairy_club
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_has_one_through_polymorphic_with_source_type
|
121
|
-
assert_equal members(:groucho), clubs(:moustache_club).sponsored_member
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_eager_has_one_through_polymorphic_with_source_type
|
125
|
-
clubs = Club.all.merge!(:includes => :sponsored_member, :where => ["name = ?","Moustache and Eyebrow Fancier Club"]).to_a
|
126
|
-
# Only the eyebrow fanciers club has a sponsored_member
|
127
|
-
assert_not_nil assert_no_queries {clubs[0].sponsored_member}
|
128
|
-
end
|
129
|
-
|
130
|
-
def test_has_one_through_nonpreload_eagerloading
|
131
|
-
members = assert_queries(1) do
|
132
|
-
Member.all.merge!(:includes => :club, :where => ["members.name = ?", "Groucho Marx"], :order => 'clubs.name').to_a #force fallback
|
133
|
-
end
|
134
|
-
assert_equal 1, members.size
|
135
|
-
assert_not_nil assert_no_queries {members[0].club}
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_has_one_through_nonpreload_eager_loading_through_polymorphic
|
139
|
-
members = assert_queries(1) do
|
140
|
-
Member.all.merge!(:includes => :sponsor_club, :where => ["members.name = ?", "Groucho Marx"], :order => 'clubs.name').to_a #force fallback
|
141
|
-
end
|
142
|
-
assert_equal 1, members.size
|
143
|
-
assert_not_nil assert_no_queries {members[0].sponsor_club}
|
144
|
-
end
|
145
|
-
|
146
|
-
def test_has_one_through_nonpreload_eager_loading_through_polymorphic_with_more_than_one_through_record
|
147
|
-
Sponsor.new(:sponsor_club => clubs(:crazy_club), :sponsorable => members(:groucho)).save!
|
148
|
-
members = assert_queries(1) do
|
149
|
-
Member.all.merge!(:includes => :sponsor_club, :where => ["members.name = ?", "Groucho Marx"], :order => 'clubs.name DESC').to_a #force fallback
|
150
|
-
end
|
151
|
-
assert_equal 1, members.size
|
152
|
-
assert_not_nil assert_no_queries { members[0].sponsor_club }
|
153
|
-
assert_equal clubs(:crazy_club), members[0].sponsor_club
|
154
|
-
end
|
155
|
-
|
156
|
-
def test_uninitialized_has_one_through_should_return_nil_for_unsaved_record
|
157
|
-
assert_nil Member.new.club
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_assigning_association_correctly_assigns_target
|
161
|
-
new_member = Member.create(:name => "Chris")
|
162
|
-
new_member.club = new_club = Club.create(:name => "LRUG")
|
163
|
-
assert_equal new_club, new_member.association(:club).target
|
164
|
-
end
|
165
|
-
|
166
|
-
def test_has_one_through_proxy_should_not_respond_to_private_methods
|
167
|
-
assert_raise(NoMethodError) { clubs(:moustache_club).private_method }
|
168
|
-
assert_raise(NoMethodError) { @member.club.private_method }
|
169
|
-
end
|
170
|
-
|
171
|
-
def test_has_one_through_proxy_should_respond_to_private_methods_via_send
|
172
|
-
clubs(:moustache_club).send(:private_method)
|
173
|
-
@member.club.send(:private_method)
|
174
|
-
end
|
175
|
-
|
176
|
-
def test_assigning_to_has_one_through_preserves_decorated_join_record
|
177
|
-
@organization = organizations(:nsa)
|
178
|
-
assert_difference 'MemberDetail.count', 1 do
|
179
|
-
@member_detail = MemberDetail.new(:extra_data => 'Extra')
|
180
|
-
@member.member_detail = @member_detail
|
181
|
-
@member.organization = @organization
|
182
|
-
end
|
183
|
-
assert_equal @organization, @member.organization
|
184
|
-
assert @organization.members.include?(@member)
|
185
|
-
assert_equal 'Extra', @member.member_detail.extra_data
|
186
|
-
end
|
187
|
-
|
188
|
-
def test_reassigning_has_one_through
|
189
|
-
@organization = organizations(:nsa)
|
190
|
-
@new_organization = organizations(:discordians)
|
191
|
-
|
192
|
-
assert_difference 'MemberDetail.count', 1 do
|
193
|
-
@member_detail = MemberDetail.new(:extra_data => 'Extra')
|
194
|
-
@member.member_detail = @member_detail
|
195
|
-
@member.organization = @organization
|
196
|
-
end
|
197
|
-
assert_equal @organization, @member.organization
|
198
|
-
assert_equal 'Extra', @member.member_detail.extra_data
|
199
|
-
assert @organization.members.include?(@member)
|
200
|
-
assert !@new_organization.members.include?(@member)
|
201
|
-
|
202
|
-
assert_no_difference 'MemberDetail.count' do
|
203
|
-
@member.organization = @new_organization
|
204
|
-
end
|
205
|
-
assert_equal @new_organization, @member.organization
|
206
|
-
assert_equal 'Extra', @member.member_detail.extra_data
|
207
|
-
assert !@organization.members.include?(@member)
|
208
|
-
assert @new_organization.members.include?(@member)
|
209
|
-
end
|
210
|
-
|
211
|
-
def test_preloading_has_one_through_on_belongs_to
|
212
|
-
MemberDetail.delete_all
|
213
|
-
assert_not_nil @member.member_type
|
214
|
-
@organization = organizations(:nsa)
|
215
|
-
@member_detail = MemberDetail.new
|
216
|
-
@member.member_detail = @member_detail
|
217
|
-
@member.organization = @organization
|
218
|
-
@member_details = assert_queries(3) do
|
219
|
-
MemberDetail.all.merge!(:includes => :member_type).to_a
|
220
|
-
end
|
221
|
-
@new_detail = @member_details[0]
|
222
|
-
assert @new_detail.send(:association, :member_type).loaded?
|
223
|
-
assert_no_queries { @new_detail.member_type }
|
224
|
-
end
|
225
|
-
|
226
|
-
def test_save_of_record_with_loaded_has_one_through
|
227
|
-
@club = @member.club
|
228
|
-
assert_not_nil @club.sponsored_member
|
229
|
-
|
230
|
-
assert_nothing_raised do
|
231
|
-
Club.find(@club.id).save!
|
232
|
-
Club.all.merge!(:includes => :sponsored_member).find(@club.id).save!
|
233
|
-
end
|
234
|
-
|
235
|
-
@club.sponsor.destroy
|
236
|
-
|
237
|
-
assert_nothing_raised do
|
238
|
-
Club.find(@club.id).save!
|
239
|
-
Club.all.merge!(:includes => :sponsored_member).find(@club.id).save!
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
def test_through_belongs_to_after_destroy
|
244
|
-
@member_detail = MemberDetail.new(:extra_data => 'Extra')
|
245
|
-
@member.member_detail = @member_detail
|
246
|
-
@member.save!
|
247
|
-
|
248
|
-
assert_not_nil @member_detail.member_type
|
249
|
-
@member_detail.destroy
|
250
|
-
assert_queries(1) do
|
251
|
-
assert_not_nil @member_detail.member_type(true)
|
252
|
-
end
|
253
|
-
|
254
|
-
@member_detail.member.destroy
|
255
|
-
assert_queries(1) do
|
256
|
-
assert_nil @member_detail.member_type(true)
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
def test_value_is_properly_quoted
|
261
|
-
minivan = Minivan.find('m1')
|
262
|
-
assert_nothing_raised do
|
263
|
-
minivan.dashboard
|
264
|
-
end
|
265
|
-
end
|
266
|
-
|
267
|
-
def test_has_one_through_polymorphic_with_primary_key_option
|
268
|
-
assert_equal categories(:general), authors(:david).essay_category
|
269
|
-
|
270
|
-
authors = Author.joins(:essay_category).where('categories.id' => categories(:general).id)
|
271
|
-
assert_equal authors(:david), authors.first
|
272
|
-
|
273
|
-
assert_equal owners(:blackbeard), authors(:david).essay_owner
|
274
|
-
|
275
|
-
authors = Author.joins(:essay_owner).where("owners.name = 'blackbeard'")
|
276
|
-
assert_equal authors(:david), authors.first
|
277
|
-
end
|
278
|
-
|
279
|
-
def test_has_one_through_with_primary_key_option
|
280
|
-
assert_equal categories(:general), authors(:david).essay_category_2
|
281
|
-
|
282
|
-
authors = Author.joins(:essay_category_2).where('categories.id' => categories(:general).id)
|
283
|
-
assert_equal authors(:david), authors.first
|
284
|
-
end
|
285
|
-
|
286
|
-
def test_has_one_through_with_default_scope_on_join_model
|
287
|
-
assert_equal posts(:welcome).comments.order('id').first, authors(:david).comment_on_first_post
|
288
|
-
end
|
289
|
-
|
290
|
-
def test_has_one_through_many_raises_exception
|
291
|
-
assert_raise(ActiveRecord::HasOneThroughCantAssociateThroughCollection) do
|
292
|
-
members(:groucho).club_through_many
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
def test_has_one_through_polymorphic_association
|
297
|
-
assert_raise(ActiveRecord::HasOneAssociationPolymorphicThroughError) do
|
298
|
-
@member.premium_club
|
299
|
-
end
|
300
|
-
end
|
301
|
-
|
302
|
-
def test_has_one_through_belongs_to_should_update_when_the_through_foreign_key_changes
|
303
|
-
minivan = minivans(:cool_first)
|
304
|
-
|
305
|
-
minivan.dashboard
|
306
|
-
proxy = minivan.send(:association_instance_get, :dashboard)
|
307
|
-
|
308
|
-
assert !proxy.stale_target?
|
309
|
-
assert_equal dashboards(:cool_first), minivan.dashboard
|
310
|
-
|
311
|
-
minivan.speedometer_id = speedometers(:second).id
|
312
|
-
|
313
|
-
assert proxy.stale_target?
|
314
|
-
assert_equal dashboards(:second), minivan.dashboard
|
315
|
-
end
|
316
|
-
|
317
|
-
def test_has_one_through_belongs_to_setting_belongs_to_foreign_key_after_nil_target_loaded
|
318
|
-
minivan = Minivan.new
|
319
|
-
|
320
|
-
minivan.dashboard
|
321
|
-
proxy = minivan.send(:association_instance_get, :dashboard)
|
322
|
-
|
323
|
-
minivan.speedometer_id = speedometers(:second).id
|
324
|
-
|
325
|
-
assert proxy.stale_target?
|
326
|
-
assert_equal dashboards(:second), minivan.dashboard
|
327
|
-
end
|
328
|
-
|
329
|
-
def test_assigning_has_one_through_belongs_to_with_new_record_owner
|
330
|
-
minivan = Minivan.new
|
331
|
-
dashboard = dashboards(:cool_first)
|
332
|
-
|
333
|
-
minivan.dashboard = dashboard
|
334
|
-
|
335
|
-
assert_equal dashboard, minivan.dashboard
|
336
|
-
assert_equal dashboard, minivan.speedometer.dashboard
|
337
|
-
end
|
338
|
-
|
339
|
-
def test_has_one_through_with_custom_select_on_join_model_default_scope
|
340
|
-
assert_equal clubs(:boring_club), members(:groucho).selected_club
|
341
|
-
end
|
342
|
-
|
343
|
-
def test_has_one_through_relationship_cannot_have_a_counter_cache
|
344
|
-
assert_raise(ArgumentError) do
|
345
|
-
Class.new(ActiveRecord::Base) do
|
346
|
-
has_one :thing, through: :other_thing, counter_cache: true
|
347
|
-
end
|
348
|
-
end
|
349
|
-
end
|
350
|
-
|
351
|
-
def test_has_one_through_do_not_cache_association_reader_if_the_though_method_has_default_scopes
|
352
|
-
customer = Customer.create!
|
353
|
-
carrier = Carrier.create!
|
354
|
-
customer_carrier = CustomerCarrier.create!(
|
355
|
-
customer: customer,
|
356
|
-
carrier: carrier,
|
357
|
-
)
|
358
|
-
account = ShopAccount.create!(customer_carrier: customer_carrier)
|
359
|
-
|
360
|
-
CustomerCarrier.current_customer = customer
|
361
|
-
|
362
|
-
account_carrier = account.carrier
|
363
|
-
assert_equal carrier, account_carrier
|
364
|
-
|
365
|
-
CustomerCarrier.current_customer = nil
|
366
|
-
|
367
|
-
other_carrier = Carrier.create!
|
368
|
-
other_customer = Customer.create!
|
369
|
-
other_customer_carrier = CustomerCarrier.create!(
|
370
|
-
customer: other_customer,
|
371
|
-
carrier: other_carrier,
|
372
|
-
)
|
373
|
-
other_account = ShopAccount.create!(customer_carrier: other_customer_carrier)
|
374
|
-
|
375
|
-
account_carrier = other_account.carrier
|
376
|
-
assert_equal other_carrier, account_carrier
|
377
|
-
ensure
|
378
|
-
CustomerCarrier.current_customer = nil
|
379
|
-
end
|
380
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/club'
|
3
|
+
require 'models/member_type'
|
4
|
+
require 'models/member'
|
5
|
+
require 'models/membership'
|
6
|
+
require 'models/sponsor'
|
7
|
+
require 'models/organization'
|
8
|
+
require 'models/member_detail'
|
9
|
+
require 'models/minivan'
|
10
|
+
require 'models/dashboard'
|
11
|
+
require 'models/speedometer'
|
12
|
+
require 'models/category'
|
13
|
+
require 'models/author'
|
14
|
+
require 'models/essay'
|
15
|
+
require 'models/owner'
|
16
|
+
require 'models/post'
|
17
|
+
require 'models/comment'
|
18
|
+
require 'models/customer'
|
19
|
+
require 'models/carrier'
|
20
|
+
require 'models/shop_account'
|
21
|
+
require 'models/customer_carrier'
|
22
|
+
|
23
|
+
class HasOneThroughAssociationsTest < ActiveRecord::TestCase
|
24
|
+
fixtures :member_types, :members, :clubs, :memberships, :sponsors, :organizations, :minivans,
|
25
|
+
:dashboards, :speedometers, :authors, :posts, :comments, :categories, :essays, :owners, :author_addresses
|
26
|
+
|
27
|
+
def setup
|
28
|
+
@member = members(:groucho)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_has_one_through_with_has_one
|
32
|
+
assert_equal clubs(:boring_club), @member.club
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_creating_association_creates_through_record
|
36
|
+
new_member = Member.create(:name => "Chris")
|
37
|
+
new_member.club = Club.create(:name => "LRUG")
|
38
|
+
assert_not_nil new_member.current_membership
|
39
|
+
assert_not_nil new_member.club
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_creating_association_builds_through_record_for_new
|
43
|
+
new_member = Member.new(:name => "Jane")
|
44
|
+
new_member.club = clubs(:moustache_club)
|
45
|
+
assert new_member.current_membership
|
46
|
+
assert_equal clubs(:moustache_club), new_member.current_membership.club
|
47
|
+
assert_equal clubs(:moustache_club), new_member.club
|
48
|
+
assert new_member.save
|
49
|
+
assert_equal clubs(:moustache_club), new_member.club
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_creating_association_sets_both_parent_ids_for_new
|
53
|
+
member = Member.new(name: 'Sean Griffin')
|
54
|
+
club = Club.new(name: 'Da Club')
|
55
|
+
|
56
|
+
member.club = club
|
57
|
+
|
58
|
+
member.save!
|
59
|
+
|
60
|
+
assert member.id
|
61
|
+
assert club.id
|
62
|
+
assert_equal member.id, member.current_membership.member_id
|
63
|
+
assert_equal club.id, member.current_membership.club_id
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_replace_target_record
|
67
|
+
new_club = Club.create(:name => "Marx Bros")
|
68
|
+
@member.club = new_club
|
69
|
+
@member.reload
|
70
|
+
assert_equal new_club, @member.club
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_replacing_target_record_deletes_old_association
|
74
|
+
assert_no_difference "Membership.count" do
|
75
|
+
new_club = Club.create(:name => "Bananarama")
|
76
|
+
@member.club = new_club
|
77
|
+
@member.reload
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_set_record_to_nil_should_delete_association
|
82
|
+
@member.club = nil
|
83
|
+
@member.reload
|
84
|
+
assert_equal nil, @member.current_membership
|
85
|
+
assert_nil @member.club
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_has_one_through_polymorphic
|
89
|
+
assert_equal clubs(:moustache_club), @member.sponsor_club
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_has_one_through_eager_loading
|
93
|
+
members = assert_queries(3) do #base table, through table, clubs table
|
94
|
+
Member.all.merge!(:includes => :club, :where => ["name = ?", "Groucho Marx"]).to_a
|
95
|
+
end
|
96
|
+
assert_equal 1, members.size
|
97
|
+
assert_not_nil assert_no_queries {members[0].club}
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_has_one_through_eager_loading_through_polymorphic
|
101
|
+
members = assert_queries(3) do #base table, through table, clubs table
|
102
|
+
Member.all.merge!(:includes => :sponsor_club, :where => ["name = ?", "Groucho Marx"]).to_a
|
103
|
+
end
|
104
|
+
assert_equal 1, members.size
|
105
|
+
assert_not_nil assert_no_queries {members[0].sponsor_club}
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_has_one_through_with_conditions_eager_loading
|
109
|
+
# conditions on the through table
|
110
|
+
assert_equal clubs(:moustache_club), Member.all.merge!(:includes => :favourite_club).find(@member.id).favourite_club
|
111
|
+
memberships(:membership_of_favourite_club).update_columns(favourite: false)
|
112
|
+
assert_equal nil, Member.all.merge!(:includes => :favourite_club).find(@member.id).reload.favourite_club
|
113
|
+
|
114
|
+
# conditions on the source table
|
115
|
+
assert_equal clubs(:moustache_club), Member.all.merge!(:includes => :hairy_club).find(@member.id).hairy_club
|
116
|
+
clubs(:moustache_club).update_columns(name: "Association of Clean-Shaven Persons")
|
117
|
+
assert_equal nil, Member.all.merge!(:includes => :hairy_club).find(@member.id).reload.hairy_club
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_has_one_through_polymorphic_with_source_type
|
121
|
+
assert_equal members(:groucho), clubs(:moustache_club).sponsored_member
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_eager_has_one_through_polymorphic_with_source_type
|
125
|
+
clubs = Club.all.merge!(:includes => :sponsored_member, :where => ["name = ?","Moustache and Eyebrow Fancier Club"]).to_a
|
126
|
+
# Only the eyebrow fanciers club has a sponsored_member
|
127
|
+
assert_not_nil assert_no_queries {clubs[0].sponsored_member}
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_has_one_through_nonpreload_eagerloading
|
131
|
+
members = assert_queries(1) do
|
132
|
+
Member.all.merge!(:includes => :club, :where => ["members.name = ?", "Groucho Marx"], :order => 'clubs.name').to_a #force fallback
|
133
|
+
end
|
134
|
+
assert_equal 1, members.size
|
135
|
+
assert_not_nil assert_no_queries {members[0].club}
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_has_one_through_nonpreload_eager_loading_through_polymorphic
|
139
|
+
members = assert_queries(1) do
|
140
|
+
Member.all.merge!(:includes => :sponsor_club, :where => ["members.name = ?", "Groucho Marx"], :order => 'clubs.name').to_a #force fallback
|
141
|
+
end
|
142
|
+
assert_equal 1, members.size
|
143
|
+
assert_not_nil assert_no_queries {members[0].sponsor_club}
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_has_one_through_nonpreload_eager_loading_through_polymorphic_with_more_than_one_through_record
|
147
|
+
Sponsor.new(:sponsor_club => clubs(:crazy_club), :sponsorable => members(:groucho)).save!
|
148
|
+
members = assert_queries(1) do
|
149
|
+
Member.all.merge!(:includes => :sponsor_club, :where => ["members.name = ?", "Groucho Marx"], :order => 'clubs.name DESC').to_a #force fallback
|
150
|
+
end
|
151
|
+
assert_equal 1, members.size
|
152
|
+
assert_not_nil assert_no_queries { members[0].sponsor_club }
|
153
|
+
assert_equal clubs(:crazy_club), members[0].sponsor_club
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_uninitialized_has_one_through_should_return_nil_for_unsaved_record
|
157
|
+
assert_nil Member.new.club
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_assigning_association_correctly_assigns_target
|
161
|
+
new_member = Member.create(:name => "Chris")
|
162
|
+
new_member.club = new_club = Club.create(:name => "LRUG")
|
163
|
+
assert_equal new_club, new_member.association(:club).target
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_has_one_through_proxy_should_not_respond_to_private_methods
|
167
|
+
assert_raise(NoMethodError) { clubs(:moustache_club).private_method }
|
168
|
+
assert_raise(NoMethodError) { @member.club.private_method }
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_has_one_through_proxy_should_respond_to_private_methods_via_send
|
172
|
+
clubs(:moustache_club).send(:private_method)
|
173
|
+
@member.club.send(:private_method)
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_assigning_to_has_one_through_preserves_decorated_join_record
|
177
|
+
@organization = organizations(:nsa)
|
178
|
+
assert_difference 'MemberDetail.count', 1 do
|
179
|
+
@member_detail = MemberDetail.new(:extra_data => 'Extra')
|
180
|
+
@member.member_detail = @member_detail
|
181
|
+
@member.organization = @organization
|
182
|
+
end
|
183
|
+
assert_equal @organization, @member.organization
|
184
|
+
assert @organization.members.include?(@member)
|
185
|
+
assert_equal 'Extra', @member.member_detail.extra_data
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_reassigning_has_one_through
|
189
|
+
@organization = organizations(:nsa)
|
190
|
+
@new_organization = organizations(:discordians)
|
191
|
+
|
192
|
+
assert_difference 'MemberDetail.count', 1 do
|
193
|
+
@member_detail = MemberDetail.new(:extra_data => 'Extra')
|
194
|
+
@member.member_detail = @member_detail
|
195
|
+
@member.organization = @organization
|
196
|
+
end
|
197
|
+
assert_equal @organization, @member.organization
|
198
|
+
assert_equal 'Extra', @member.member_detail.extra_data
|
199
|
+
assert @organization.members.include?(@member)
|
200
|
+
assert !@new_organization.members.include?(@member)
|
201
|
+
|
202
|
+
assert_no_difference 'MemberDetail.count' do
|
203
|
+
@member.organization = @new_organization
|
204
|
+
end
|
205
|
+
assert_equal @new_organization, @member.organization
|
206
|
+
assert_equal 'Extra', @member.member_detail.extra_data
|
207
|
+
assert !@organization.members.include?(@member)
|
208
|
+
assert @new_organization.members.include?(@member)
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_preloading_has_one_through_on_belongs_to
|
212
|
+
MemberDetail.delete_all
|
213
|
+
assert_not_nil @member.member_type
|
214
|
+
@organization = organizations(:nsa)
|
215
|
+
@member_detail = MemberDetail.new
|
216
|
+
@member.member_detail = @member_detail
|
217
|
+
@member.organization = @organization
|
218
|
+
@member_details = assert_queries(3) do
|
219
|
+
MemberDetail.all.merge!(:includes => :member_type).to_a
|
220
|
+
end
|
221
|
+
@new_detail = @member_details[0]
|
222
|
+
assert @new_detail.send(:association, :member_type).loaded?
|
223
|
+
assert_no_queries { @new_detail.member_type }
|
224
|
+
end
|
225
|
+
|
226
|
+
def test_save_of_record_with_loaded_has_one_through
|
227
|
+
@club = @member.club
|
228
|
+
assert_not_nil @club.sponsored_member
|
229
|
+
|
230
|
+
assert_nothing_raised do
|
231
|
+
Club.find(@club.id).save!
|
232
|
+
Club.all.merge!(:includes => :sponsored_member).find(@club.id).save!
|
233
|
+
end
|
234
|
+
|
235
|
+
@club.sponsor.destroy
|
236
|
+
|
237
|
+
assert_nothing_raised do
|
238
|
+
Club.find(@club.id).save!
|
239
|
+
Club.all.merge!(:includes => :sponsored_member).find(@club.id).save!
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_through_belongs_to_after_destroy
|
244
|
+
@member_detail = MemberDetail.new(:extra_data => 'Extra')
|
245
|
+
@member.member_detail = @member_detail
|
246
|
+
@member.save!
|
247
|
+
|
248
|
+
assert_not_nil @member_detail.member_type
|
249
|
+
@member_detail.destroy
|
250
|
+
assert_queries(1) do
|
251
|
+
assert_not_nil @member_detail.member_type(true)
|
252
|
+
end
|
253
|
+
|
254
|
+
@member_detail.member.destroy
|
255
|
+
assert_queries(1) do
|
256
|
+
assert_nil @member_detail.member_type(true)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
def test_value_is_properly_quoted
|
261
|
+
minivan = Minivan.find('m1')
|
262
|
+
assert_nothing_raised do
|
263
|
+
minivan.dashboard
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
def test_has_one_through_polymorphic_with_primary_key_option
|
268
|
+
assert_equal categories(:general), authors(:david).essay_category
|
269
|
+
|
270
|
+
authors = Author.joins(:essay_category).where('categories.id' => categories(:general).id)
|
271
|
+
assert_equal authors(:david), authors.first
|
272
|
+
|
273
|
+
assert_equal owners(:blackbeard), authors(:david).essay_owner
|
274
|
+
|
275
|
+
authors = Author.joins(:essay_owner).where("owners.name = 'blackbeard'")
|
276
|
+
assert_equal authors(:david), authors.first
|
277
|
+
end
|
278
|
+
|
279
|
+
def test_has_one_through_with_primary_key_option
|
280
|
+
assert_equal categories(:general), authors(:david).essay_category_2
|
281
|
+
|
282
|
+
authors = Author.joins(:essay_category_2).where('categories.id' => categories(:general).id)
|
283
|
+
assert_equal authors(:david), authors.first
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_has_one_through_with_default_scope_on_join_model
|
287
|
+
assert_equal posts(:welcome).comments.order('id').first, authors(:david).comment_on_first_post
|
288
|
+
end
|
289
|
+
|
290
|
+
def test_has_one_through_many_raises_exception
|
291
|
+
assert_raise(ActiveRecord::HasOneThroughCantAssociateThroughCollection) do
|
292
|
+
members(:groucho).club_through_many
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
def test_has_one_through_polymorphic_association
|
297
|
+
assert_raise(ActiveRecord::HasOneAssociationPolymorphicThroughError) do
|
298
|
+
@member.premium_club
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
def test_has_one_through_belongs_to_should_update_when_the_through_foreign_key_changes
|
303
|
+
minivan = minivans(:cool_first)
|
304
|
+
|
305
|
+
minivan.dashboard
|
306
|
+
proxy = minivan.send(:association_instance_get, :dashboard)
|
307
|
+
|
308
|
+
assert !proxy.stale_target?
|
309
|
+
assert_equal dashboards(:cool_first), minivan.dashboard
|
310
|
+
|
311
|
+
minivan.speedometer_id = speedometers(:second).id
|
312
|
+
|
313
|
+
assert proxy.stale_target?
|
314
|
+
assert_equal dashboards(:second), minivan.dashboard
|
315
|
+
end
|
316
|
+
|
317
|
+
def test_has_one_through_belongs_to_setting_belongs_to_foreign_key_after_nil_target_loaded
|
318
|
+
minivan = Minivan.new
|
319
|
+
|
320
|
+
minivan.dashboard
|
321
|
+
proxy = minivan.send(:association_instance_get, :dashboard)
|
322
|
+
|
323
|
+
minivan.speedometer_id = speedometers(:second).id
|
324
|
+
|
325
|
+
assert proxy.stale_target?
|
326
|
+
assert_equal dashboards(:second), minivan.dashboard
|
327
|
+
end
|
328
|
+
|
329
|
+
def test_assigning_has_one_through_belongs_to_with_new_record_owner
|
330
|
+
minivan = Minivan.new
|
331
|
+
dashboard = dashboards(:cool_first)
|
332
|
+
|
333
|
+
minivan.dashboard = dashboard
|
334
|
+
|
335
|
+
assert_equal dashboard, minivan.dashboard
|
336
|
+
assert_equal dashboard, minivan.speedometer.dashboard
|
337
|
+
end
|
338
|
+
|
339
|
+
def test_has_one_through_with_custom_select_on_join_model_default_scope
|
340
|
+
assert_equal clubs(:boring_club), members(:groucho).selected_club
|
341
|
+
end
|
342
|
+
|
343
|
+
def test_has_one_through_relationship_cannot_have_a_counter_cache
|
344
|
+
assert_raise(ArgumentError) do
|
345
|
+
Class.new(ActiveRecord::Base) do
|
346
|
+
has_one :thing, through: :other_thing, counter_cache: true
|
347
|
+
end
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
def test_has_one_through_do_not_cache_association_reader_if_the_though_method_has_default_scopes
|
352
|
+
customer = Customer.create!
|
353
|
+
carrier = Carrier.create!
|
354
|
+
customer_carrier = CustomerCarrier.create!(
|
355
|
+
customer: customer,
|
356
|
+
carrier: carrier,
|
357
|
+
)
|
358
|
+
account = ShopAccount.create!(customer_carrier: customer_carrier)
|
359
|
+
|
360
|
+
CustomerCarrier.current_customer = customer
|
361
|
+
|
362
|
+
account_carrier = account.carrier
|
363
|
+
assert_equal carrier, account_carrier
|
364
|
+
|
365
|
+
CustomerCarrier.current_customer = nil
|
366
|
+
|
367
|
+
other_carrier = Carrier.create!
|
368
|
+
other_customer = Customer.create!
|
369
|
+
other_customer_carrier = CustomerCarrier.create!(
|
370
|
+
customer: other_customer,
|
371
|
+
carrier: other_carrier,
|
372
|
+
)
|
373
|
+
other_account = ShopAccount.create!(customer_carrier: other_customer_carrier)
|
374
|
+
|
375
|
+
account_carrier = other_account.carrier
|
376
|
+
assert_equal other_carrier, account_carrier
|
377
|
+
ensure
|
378
|
+
CustomerCarrier.current_customer = nil
|
379
|
+
end
|
380
|
+
end
|