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,54 +1,54 @@
|
|
1
|
-
require 'cases/helper'
|
2
|
-
|
3
|
-
class HotCompatibilityTest < ActiveRecord::TestCase
|
4
|
-
self.use_transactional_fixtures = false
|
5
|
-
|
6
|
-
setup do
|
7
|
-
@klass = Class.new(ActiveRecord::Base) do
|
8
|
-
connection.create_table :hot_compatibilities, force: true do |t|
|
9
|
-
t.string :foo
|
10
|
-
t.string :bar
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.name; 'HotCompatibility'; end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
teardown do
|
18
|
-
ActiveRecord::Base.connection.drop_table :hot_compatibilities
|
19
|
-
end
|
20
|
-
|
21
|
-
test "insert after remove_column" do
|
22
|
-
# warm cache
|
23
|
-
@klass.create!
|
24
|
-
|
25
|
-
# we have 3 columns
|
26
|
-
assert_equal 3, @klass.columns.length
|
27
|
-
|
28
|
-
# remove one of them
|
29
|
-
@klass.connection.remove_column :hot_compatibilities, :bar
|
30
|
-
|
31
|
-
# we still have 3 columns in the cache
|
32
|
-
assert_equal 3, @klass.columns.length
|
33
|
-
|
34
|
-
# but we can successfully create a record so long as we don't
|
35
|
-
# reference the removed column
|
36
|
-
record = @klass.create! foo: 'foo'
|
37
|
-
record.reload
|
38
|
-
assert_equal 'foo', record.foo
|
39
|
-
end
|
40
|
-
|
41
|
-
test "update after remove_column" do
|
42
|
-
record = @klass.create! foo: 'foo'
|
43
|
-
assert_equal 3, @klass.columns.length
|
44
|
-
@klass.connection.remove_column :hot_compatibilities, :bar
|
45
|
-
assert_equal 3, @klass.columns.length
|
46
|
-
|
47
|
-
record.reload
|
48
|
-
assert_equal 'foo', record.foo
|
49
|
-
record.foo = 'bar'
|
50
|
-
record.save!
|
51
|
-
record.reload
|
52
|
-
assert_equal 'bar', record.foo
|
53
|
-
end
|
54
|
-
end
|
1
|
+
require 'cases/helper'
|
2
|
+
|
3
|
+
class HotCompatibilityTest < ActiveRecord::TestCase
|
4
|
+
self.use_transactional_fixtures = false
|
5
|
+
|
6
|
+
setup do
|
7
|
+
@klass = Class.new(ActiveRecord::Base) do
|
8
|
+
connection.create_table :hot_compatibilities, force: true do |t|
|
9
|
+
t.string :foo
|
10
|
+
t.string :bar
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.name; 'HotCompatibility'; end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
teardown do
|
18
|
+
ActiveRecord::Base.connection.drop_table :hot_compatibilities
|
19
|
+
end
|
20
|
+
|
21
|
+
test "insert after remove_column" do
|
22
|
+
# warm cache
|
23
|
+
@klass.create!
|
24
|
+
|
25
|
+
# we have 3 columns
|
26
|
+
assert_equal 3, @klass.columns.length
|
27
|
+
|
28
|
+
# remove one of them
|
29
|
+
@klass.connection.remove_column :hot_compatibilities, :bar
|
30
|
+
|
31
|
+
# we still have 3 columns in the cache
|
32
|
+
assert_equal 3, @klass.columns.length
|
33
|
+
|
34
|
+
# but we can successfully create a record so long as we don't
|
35
|
+
# reference the removed column
|
36
|
+
record = @klass.create! foo: 'foo'
|
37
|
+
record.reload
|
38
|
+
assert_equal 'foo', record.foo
|
39
|
+
end
|
40
|
+
|
41
|
+
test "update after remove_column" do
|
42
|
+
record = @klass.create! foo: 'foo'
|
43
|
+
assert_equal 3, @klass.columns.length
|
44
|
+
@klass.connection.remove_column :hot_compatibilities, :bar
|
45
|
+
assert_equal 3, @klass.columns.length
|
46
|
+
|
47
|
+
record.reload
|
48
|
+
assert_equal 'foo', record.foo
|
49
|
+
record.foo = 'bar'
|
50
|
+
record.save!
|
51
|
+
record.reload
|
52
|
+
assert_equal 'bar', record.foo
|
53
|
+
end
|
54
|
+
end
|
data/test/cases/i18n_test.rb
CHANGED
@@ -1,45 +1,45 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'models/topic'
|
3
|
-
require 'models/reply'
|
4
|
-
|
5
|
-
class ActiveRecordI18nTests < ActiveRecord::TestCase
|
6
|
-
|
7
|
-
def setup
|
8
|
-
I18n.backend = I18n::Backend::Simple.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_translated_model_attributes
|
12
|
-
I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
|
13
|
-
assert_equal 'topic title attribute', Topic.human_attribute_name('title')
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_translated_model_attributes_with_symbols
|
17
|
-
I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
|
18
|
-
assert_equal 'topic title attribute', Topic.human_attribute_name(:title)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_translated_model_attributes_with_sti
|
22
|
-
I18n.backend.store_translations 'en', :activerecord => {:attributes => {:reply => {:title => 'reply title attribute'} } }
|
23
|
-
assert_equal 'reply title attribute', Reply.human_attribute_name('title')
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_translated_model_attributes_with_sti_fallback
|
27
|
-
I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
|
28
|
-
assert_equal 'topic title attribute', Reply.human_attribute_name('title')
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_translated_model_names
|
32
|
-
I18n.backend.store_translations 'en', :activerecord => {:models => {:topic => 'topic model'} }
|
33
|
-
assert_equal 'topic model', Topic.model_name.human
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_translated_model_names_with_sti
|
37
|
-
I18n.backend.store_translations 'en', :activerecord => {:models => {:reply => 'reply model'} }
|
38
|
-
assert_equal 'reply model', Reply.model_name.human
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_translated_model_names_with_sti_fallback
|
42
|
-
I18n.backend.store_translations 'en', :activerecord => {:models => {:topic => 'topic model'} }
|
43
|
-
assert_equal 'topic model', Reply.model_name.human
|
44
|
-
end
|
45
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/topic'
|
3
|
+
require 'models/reply'
|
4
|
+
|
5
|
+
class ActiveRecordI18nTests < ActiveRecord::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
I18n.backend = I18n::Backend::Simple.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_translated_model_attributes
|
12
|
+
I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
|
13
|
+
assert_equal 'topic title attribute', Topic.human_attribute_name('title')
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_translated_model_attributes_with_symbols
|
17
|
+
I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
|
18
|
+
assert_equal 'topic title attribute', Topic.human_attribute_name(:title)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_translated_model_attributes_with_sti
|
22
|
+
I18n.backend.store_translations 'en', :activerecord => {:attributes => {:reply => {:title => 'reply title attribute'} } }
|
23
|
+
assert_equal 'reply title attribute', Reply.human_attribute_name('title')
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_translated_model_attributes_with_sti_fallback
|
27
|
+
I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
|
28
|
+
assert_equal 'topic title attribute', Reply.human_attribute_name('title')
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_translated_model_names
|
32
|
+
I18n.backend.store_translations 'en', :activerecord => {:models => {:topic => 'topic model'} }
|
33
|
+
assert_equal 'topic model', Topic.model_name.human
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_translated_model_names_with_sti
|
37
|
+
I18n.backend.store_translations 'en', :activerecord => {:models => {:reply => 'reply model'} }
|
38
|
+
assert_equal 'reply model', Reply.model_name.human
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_translated_model_names_with_sti_fallback
|
42
|
+
I18n.backend.store_translations 'en', :activerecord => {:models => {:topic => 'topic model'} }
|
43
|
+
assert_equal 'topic model', Reply.model_name.human
|
44
|
+
end
|
45
|
+
end
|
@@ -1,375 +1,375 @@
|
|
1
|
-
require 'cases/helper'
|
2
|
-
require 'models/company'
|
3
|
-
require 'models/person'
|
4
|
-
require 'models/post'
|
5
|
-
require 'models/project'
|
6
|
-
require 'models/subscriber'
|
7
|
-
require 'models/vegetables'
|
8
|
-
require 'models/shop'
|
9
|
-
|
10
|
-
class InheritanceTest < ActiveRecord::TestCase
|
11
|
-
fixtures :companies, :projects, :subscribers, :accounts, :vegetables
|
12
|
-
|
13
|
-
def test_class_with_store_full_sti_class_returns_full_name
|
14
|
-
old = ActiveRecord::Base.store_full_sti_class
|
15
|
-
ActiveRecord::Base.store_full_sti_class = true
|
16
|
-
assert_equal 'Namespaced::Company', Namespaced::Company.sti_name
|
17
|
-
ensure
|
18
|
-
ActiveRecord::Base.store_full_sti_class = old
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_class_with_blank_sti_name
|
22
|
-
company = Company.first
|
23
|
-
company = company.dup
|
24
|
-
company.extend(Module.new {
|
25
|
-
def _read_attribute(name)
|
26
|
-
return ' ' if name == 'type'
|
27
|
-
super
|
28
|
-
end
|
29
|
-
})
|
30
|
-
company.save!
|
31
|
-
company = Company.all.to_a.find { |x| x.id == company.id }
|
32
|
-
assert_equal ' ', company.type
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_class_without_store_full_sti_class_returns_demodulized_name
|
36
|
-
old = ActiveRecord::Base.store_full_sti_class
|
37
|
-
ActiveRecord::Base.store_full_sti_class = false
|
38
|
-
assert_equal 'Company', Namespaced::Company.sti_name
|
39
|
-
ensure
|
40
|
-
ActiveRecord::Base.store_full_sti_class = old
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_should_store_demodulized_class_name_with_store_full_sti_class_option_disabled
|
44
|
-
old = ActiveRecord::Base.store_full_sti_class
|
45
|
-
ActiveRecord::Base.store_full_sti_class = false
|
46
|
-
item = Namespaced::Company.new
|
47
|
-
assert_equal 'Company', item[:type]
|
48
|
-
ensure
|
49
|
-
ActiveRecord::Base.store_full_sti_class = old
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_should_store_full_class_name_with_store_full_sti_class_option_enabled
|
53
|
-
old = ActiveRecord::Base.store_full_sti_class
|
54
|
-
ActiveRecord::Base.store_full_sti_class = true
|
55
|
-
item = Namespaced::Company.new
|
56
|
-
assert_equal 'Namespaced::Company', item[:type]
|
57
|
-
ensure
|
58
|
-
ActiveRecord::Base.store_full_sti_class = old
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_different_namespace_subclass_should_load_correctly_with_store_full_sti_class_option
|
62
|
-
old = ActiveRecord::Base.store_full_sti_class
|
63
|
-
ActiveRecord::Base.store_full_sti_class = true
|
64
|
-
item = Namespaced::Company.create :name => "Wolverine 2"
|
65
|
-
assert_not_nil Company.find(item.id)
|
66
|
-
assert_not_nil Namespaced::Company.find(item.id)
|
67
|
-
ensure
|
68
|
-
ActiveRecord::Base.store_full_sti_class = old
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_company_descends_from_active_record
|
72
|
-
assert !ActiveRecord::Base.descends_from_active_record?
|
73
|
-
assert AbstractCompany.descends_from_active_record?, 'AbstractCompany should descend from ActiveRecord::Base'
|
74
|
-
assert Company.descends_from_active_record?, 'Company should descend from ActiveRecord::Base'
|
75
|
-
assert !Class.new(Company).descends_from_active_record?, 'Company subclass should not descend from ActiveRecord::Base'
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_inheritance_base_class
|
79
|
-
assert_equal Post, Post.base_class
|
80
|
-
assert_equal Post, SpecialPost.base_class
|
81
|
-
assert_equal Post, StiPost.base_class
|
82
|
-
assert_equal SubStiPost, SubStiPost.base_class
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_abstract_inheritance_base_class
|
86
|
-
assert_equal LoosePerson, LoosePerson.base_class
|
87
|
-
assert_equal LooseDescendant, LooseDescendant.base_class
|
88
|
-
assert_equal TightPerson, TightPerson.base_class
|
89
|
-
assert_equal TightPerson, TightDescendant.base_class
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_base_class_activerecord_error
|
93
|
-
klass = Class.new { include ActiveRecord::Inheritance }
|
94
|
-
assert_raise(ActiveRecord::ActiveRecordError) { klass.base_class }
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_a_bad_type_column
|
98
|
-
Company.connection.insert "INSERT INTO companies (id, #{QUOTED_TYPE}, name) VALUES(100, 'bad_class!', 'Not happening')"
|
99
|
-
|
100
|
-
assert_raise(ActiveRecord::SubclassNotFound) { Company.find(100) }
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_inheritance_find
|
104
|
-
assert_kind_of Firm, Company.find(1), "37signals should be a firm"
|
105
|
-
assert_kind_of Firm, Firm.find(1), "37signals should be a firm"
|
106
|
-
assert_kind_of Client, Company.find(2), "Summit should be a client"
|
107
|
-
assert_kind_of Client, Client.find(2), "Summit should be a client"
|
108
|
-
end
|
109
|
-
|
110
|
-
def test_alt_inheritance_find
|
111
|
-
assert_kind_of Cucumber, Vegetable.find(1)
|
112
|
-
assert_kind_of Cucumber, Cucumber.find(1)
|
113
|
-
assert_kind_of Cabbage, Vegetable.find(2)
|
114
|
-
assert_kind_of Cabbage, Cabbage.find(2)
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_alt_becomes_works_with_sti
|
118
|
-
vegetable = Vegetable.find(1)
|
119
|
-
assert_kind_of Vegetable, vegetable
|
120
|
-
cabbage = vegetable.becomes(Cabbage)
|
121
|
-
assert_kind_of Cabbage, cabbage
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_becomes_and_change_tracking_for_inheritance_columns
|
125
|
-
cucumber = Vegetable.find(1)
|
126
|
-
cabbage = cucumber.becomes!(Cabbage)
|
127
|
-
assert_equal ['Cucumber', 'Cabbage'], cabbage.custom_type_change
|
128
|
-
end
|
129
|
-
|
130
|
-
def test_alt_becomes_bang_resets_inheritance_type_column
|
131
|
-
vegetable = Vegetable.create!(name: "Red Pepper")
|
132
|
-
assert_nil vegetable.custom_type
|
133
|
-
|
134
|
-
cabbage = vegetable.becomes!(Cabbage)
|
135
|
-
assert_equal "Cabbage", cabbage.custom_type
|
136
|
-
|
137
|
-
vegetable = cabbage.becomes!(Vegetable)
|
138
|
-
assert_nil cabbage.custom_type
|
139
|
-
end
|
140
|
-
|
141
|
-
def test_inheritance_find_all
|
142
|
-
companies = Company.all.merge!(:order => 'id').to_a
|
143
|
-
assert_kind_of Firm, companies[0], "37signals should be a firm"
|
144
|
-
assert_kind_of Client, companies[1], "Summit should be a client"
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_alt_inheritance_find_all
|
148
|
-
companies = Vegetable.all.merge!(:order => 'id').to_a
|
149
|
-
assert_kind_of Cucumber, companies[0]
|
150
|
-
assert_kind_of Cabbage, companies[1]
|
151
|
-
end
|
152
|
-
|
153
|
-
def test_inheritance_save
|
154
|
-
firm = Firm.new
|
155
|
-
firm.name = "Next Angle"
|
156
|
-
firm.save
|
157
|
-
|
158
|
-
next_angle = Company.find(firm.id)
|
159
|
-
assert_kind_of Firm, next_angle, "Next Angle should be a firm"
|
160
|
-
end
|
161
|
-
|
162
|
-
def test_alt_inheritance_save
|
163
|
-
cabbage = Cabbage.new(:name => 'Savoy')
|
164
|
-
cabbage.save!
|
165
|
-
|
166
|
-
savoy = Vegetable.find(cabbage.id)
|
167
|
-
assert_kind_of Cabbage, savoy
|
168
|
-
end
|
169
|
-
|
170
|
-
def test_inheritance_new_with_default_class
|
171
|
-
company = Company.new
|
172
|
-
assert_equal Company, company.class
|
173
|
-
end
|
174
|
-
|
175
|
-
def test_inheritance_new_with_base_class
|
176
|
-
company = Company.new(:type => 'Company')
|
177
|
-
assert_equal Company, company.class
|
178
|
-
end
|
179
|
-
|
180
|
-
def test_inheritance_new_with_subclass
|
181
|
-
firm = Company.new(:type => 'Firm')
|
182
|
-
assert_equal Firm, firm.class
|
183
|
-
end
|
184
|
-
|
185
|
-
def test_new_with_abstract_class
|
186
|
-
e = assert_raises(NotImplementedError) do
|
187
|
-
AbstractCompany.new
|
188
|
-
end
|
189
|
-
assert_equal("AbstractCompany is an abstract class and cannot be instantiated.", e.message)
|
190
|
-
end
|
191
|
-
|
192
|
-
def test_new_with_ar_base
|
193
|
-
e = assert_raises(NotImplementedError) do
|
194
|
-
ActiveRecord::Base.new
|
195
|
-
end
|
196
|
-
assert_equal("ActiveRecord::Base is an abstract class and cannot be instantiated.", e.message)
|
197
|
-
end
|
198
|
-
|
199
|
-
def test_new_with_invalid_type
|
200
|
-
assert_raise(ActiveRecord::SubclassNotFound) { Company.new(:type => 'InvalidType') }
|
201
|
-
end
|
202
|
-
|
203
|
-
def test_new_with_unrelated_type
|
204
|
-
assert_raise(ActiveRecord::SubclassNotFound) { Company.new(:type => 'Account') }
|
205
|
-
end
|
206
|
-
|
207
|
-
def test_new_with_complex_inheritance
|
208
|
-
assert_nothing_raised { Client.new(type: 'VerySpecialClient') }
|
209
|
-
end
|
210
|
-
|
211
|
-
def test_new_with_autoload_paths
|
212
|
-
path = File.expand_path('../../models/autoloadable', __FILE__)
|
213
|
-
ActiveSupport::Dependencies.autoload_paths << path
|
214
|
-
|
215
|
-
firm = Company.new(:type => 'ExtraFirm')
|
216
|
-
assert_equal ExtraFirm, firm.class
|
217
|
-
ensure
|
218
|
-
ActiveSupport::Dependencies.autoload_paths.reject! { |p| p == path }
|
219
|
-
ActiveSupport::Dependencies.clear
|
220
|
-
end
|
221
|
-
|
222
|
-
def test_inheritance_condition
|
223
|
-
assert_equal 11, Company.count
|
224
|
-
assert_equal 2, Firm.count
|
225
|
-
assert_equal 5, Client.count
|
226
|
-
end
|
227
|
-
|
228
|
-
def test_alt_inheritance_condition
|
229
|
-
assert_equal 4, Vegetable.count
|
230
|
-
assert_equal 1, Cucumber.count
|
231
|
-
assert_equal 3, Cabbage.count
|
232
|
-
end
|
233
|
-
|
234
|
-
def test_finding_incorrect_type_data
|
235
|
-
assert_raise(ActiveRecord::RecordNotFound) { Firm.find(2) }
|
236
|
-
assert_nothing_raised { Firm.find(1) }
|
237
|
-
end
|
238
|
-
|
239
|
-
def test_alt_finding_incorrect_type_data
|
240
|
-
assert_raise(ActiveRecord::RecordNotFound) { Cucumber.find(2) }
|
241
|
-
assert_nothing_raised { Cucumber.find(1) }
|
242
|
-
end
|
243
|
-
|
244
|
-
def test_update_all_within_inheritance
|
245
|
-
Client.update_all "name = 'I am a client'"
|
246
|
-
assert_equal "I am a client", Client.first.name
|
247
|
-
# Order by added as otherwise Oracle tests were failing because of different order of results
|
248
|
-
assert_equal "37signals", Firm.all.merge!(:order => "id").to_a.first.name
|
249
|
-
end
|
250
|
-
|
251
|
-
def test_alt_update_all_within_inheritance
|
252
|
-
Cabbage.update_all "name = 'the cabbage'"
|
253
|
-
assert_equal "the cabbage", Cabbage.first.name
|
254
|
-
assert_equal ["my cucumber"], Cucumber.all.map(&:name).uniq
|
255
|
-
end
|
256
|
-
|
257
|
-
def test_destroy_all_within_inheritance
|
258
|
-
Client.destroy_all
|
259
|
-
assert_equal 0, Client.count
|
260
|
-
assert_equal 2, Firm.count
|
261
|
-
end
|
262
|
-
|
263
|
-
def test_alt_destroy_all_within_inheritance
|
264
|
-
Cabbage.destroy_all
|
265
|
-
assert_equal 0, Cabbage.count
|
266
|
-
assert_equal 1, Cucumber.count
|
267
|
-
end
|
268
|
-
|
269
|
-
def test_find_first_within_inheritance
|
270
|
-
assert_kind_of Firm, Company.all.merge!(:where => "name = '37signals'").first
|
271
|
-
assert_kind_of Firm, Firm.all.merge!(:where => "name = '37signals'").first
|
272
|
-
assert_nil Client.all.merge!(:where => "name = '37signals'").first
|
273
|
-
end
|
274
|
-
|
275
|
-
def test_alt_find_first_within_inheritance
|
276
|
-
assert_kind_of Cabbage, Vegetable.all.merge!(:where => "name = 'his cabbage'").first
|
277
|
-
assert_kind_of Cabbage, Cabbage.all.merge!(:where => "name = 'his cabbage'").first
|
278
|
-
assert_nil Cucumber.all.merge!(:where => "name = 'his cabbage'").first
|
279
|
-
end
|
280
|
-
|
281
|
-
def test_complex_inheritance
|
282
|
-
very_special_client = VerySpecialClient.create("name" => "veryspecial")
|
283
|
-
assert_equal very_special_client, VerySpecialClient.where("name = 'veryspecial'").first
|
284
|
-
assert_equal very_special_client, SpecialClient.all.merge!(:where => "name = 'veryspecial'").first
|
285
|
-
assert_equal very_special_client, Company.all.merge!(:where => "name = 'veryspecial'").first
|
286
|
-
assert_equal very_special_client, Client.all.merge!(:where => "name = 'veryspecial'").first
|
287
|
-
assert_equal 1, Client.all.merge!(:where => "name = 'Summit'").to_a.size
|
288
|
-
assert_equal very_special_client, Client.find(very_special_client.id)
|
289
|
-
end
|
290
|
-
|
291
|
-
def test_alt_complex_inheritance
|
292
|
-
king_cole = KingCole.create("name" => "uniform heads")
|
293
|
-
assert_equal king_cole, KingCole.where("name = 'uniform heads'").first
|
294
|
-
assert_equal king_cole, GreenCabbage.all.merge!(:where => "name = 'uniform heads'").first
|
295
|
-
assert_equal king_cole, Cabbage.all.merge!(:where => "name = 'uniform heads'").first
|
296
|
-
assert_equal king_cole, Vegetable.all.merge!(:where => "name = 'uniform heads'").first
|
297
|
-
assert_equal 1, Cabbage.all.merge!(:where => "name = 'his cabbage'").to_a.size
|
298
|
-
assert_equal king_cole, Cabbage.find(king_cole.id)
|
299
|
-
end
|
300
|
-
|
301
|
-
def test_eager_load_belongs_to_something_inherited
|
302
|
-
account = Account.all.merge!(:includes => :firm).find(1)
|
303
|
-
assert account.association(:firm).loaded?, "association was not eager loaded"
|
304
|
-
end
|
305
|
-
|
306
|
-
def test_alt_eager_loading
|
307
|
-
cabbage = RedCabbage.all.merge!(:includes => :seller).find(4)
|
308
|
-
assert cabbage.association(:seller).loaded?, "association was not eager loaded"
|
309
|
-
end
|
310
|
-
|
311
|
-
def test_eager_load_belongs_to_primary_key_quoting
|
312
|
-
con = Account.connection
|
313
|
-
assert_sql(/#{con.quote_table_name('companies')}.#{con.quote_column_name('id')} IN \(1\)/) do
|
314
|
-
Account.all.merge!(:includes => :firm).find(1)
|
315
|
-
end
|
316
|
-
end
|
317
|
-
|
318
|
-
def test_inherits_custom_primary_key
|
319
|
-
assert_equal Subscriber.primary_key, SpecialSubscriber.primary_key
|
320
|
-
end
|
321
|
-
|
322
|
-
def test_inheritance_without_mapping
|
323
|
-
assert_kind_of SpecialSubscriber, SpecialSubscriber.find("webster132")
|
324
|
-
assert_nothing_raised { s = SpecialSubscriber.new("name" => "And breaaaaathe!"); s.id = 'roger'; s.save }
|
325
|
-
end
|
326
|
-
|
327
|
-
def test_scope_inherited_properly
|
328
|
-
assert_nothing_raised { Company.of_first_firm }
|
329
|
-
assert_nothing_raised { Client.of_first_firm }
|
330
|
-
end
|
331
|
-
end
|
332
|
-
|
333
|
-
class InheritanceComputeTypeTest < ActiveRecord::TestCase
|
334
|
-
fixtures :companies
|
335
|
-
|
336
|
-
def setup
|
337
|
-
ActiveSupport::Dependencies.log_activity = true
|
338
|
-
end
|
339
|
-
|
340
|
-
teardown do
|
341
|
-
ActiveSupport::Dependencies.log_activity = false
|
342
|
-
self.class.const_remove :FirmOnTheFly rescue nil
|
343
|
-
Firm.const_remove :FirmOnTheFly rescue nil
|
344
|
-
end
|
345
|
-
|
346
|
-
def test_instantiation_doesnt_try_to_require_corresponding_file
|
347
|
-
ActiveRecord::Base.store_full_sti_class = false
|
348
|
-
foo = Firm.first.clone
|
349
|
-
foo.type = 'FirmOnTheFly'
|
350
|
-
foo.save!
|
351
|
-
|
352
|
-
# Should fail without FirmOnTheFly in the type condition.
|
353
|
-
assert_raise(ActiveRecord::RecordNotFound) { Firm.find(foo.id) }
|
354
|
-
|
355
|
-
# Nest FirmOnTheFly in the test case where Dependencies won't see it.
|
356
|
-
self.class.const_set :FirmOnTheFly, Class.new(Firm)
|
357
|
-
assert_raise(ActiveRecord::SubclassNotFound) { Firm.find(foo.id) }
|
358
|
-
|
359
|
-
# Nest FirmOnTheFly in Firm where Dependencies will see it.
|
360
|
-
# This is analogous to nesting models in a migration.
|
361
|
-
Firm.const_set :FirmOnTheFly, Class.new(Firm)
|
362
|
-
|
363
|
-
# And instantiate will find the existing constant rather than trying
|
364
|
-
# to require firm_on_the_fly.
|
365
|
-
assert_nothing_raised { assert_kind_of Firm::FirmOnTheFly, Firm.find(foo.id) }
|
366
|
-
ensure
|
367
|
-
ActiveRecord::Base.store_full_sti_class = true
|
368
|
-
end
|
369
|
-
|
370
|
-
def test_sti_type_from_attributes_disabled_in_non_sti_class
|
371
|
-
phone = Shop::Product::Type.new(name: 'Phone')
|
372
|
-
product = Shop::Product.new(:type => phone)
|
373
|
-
assert product.save
|
374
|
-
end
|
375
|
-
end
|
1
|
+
require 'cases/helper'
|
2
|
+
require 'models/company'
|
3
|
+
require 'models/person'
|
4
|
+
require 'models/post'
|
5
|
+
require 'models/project'
|
6
|
+
require 'models/subscriber'
|
7
|
+
require 'models/vegetables'
|
8
|
+
require 'models/shop'
|
9
|
+
|
10
|
+
class InheritanceTest < ActiveRecord::TestCase
|
11
|
+
fixtures :companies, :projects, :subscribers, :accounts, :vegetables
|
12
|
+
|
13
|
+
def test_class_with_store_full_sti_class_returns_full_name
|
14
|
+
old = ActiveRecord::Base.store_full_sti_class
|
15
|
+
ActiveRecord::Base.store_full_sti_class = true
|
16
|
+
assert_equal 'Namespaced::Company', Namespaced::Company.sti_name
|
17
|
+
ensure
|
18
|
+
ActiveRecord::Base.store_full_sti_class = old
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_class_with_blank_sti_name
|
22
|
+
company = Company.first
|
23
|
+
company = company.dup
|
24
|
+
company.extend(Module.new {
|
25
|
+
def _read_attribute(name)
|
26
|
+
return ' ' if name == 'type'
|
27
|
+
super
|
28
|
+
end
|
29
|
+
})
|
30
|
+
company.save!
|
31
|
+
company = Company.all.to_a.find { |x| x.id == company.id }
|
32
|
+
assert_equal ' ', company.type
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_class_without_store_full_sti_class_returns_demodulized_name
|
36
|
+
old = ActiveRecord::Base.store_full_sti_class
|
37
|
+
ActiveRecord::Base.store_full_sti_class = false
|
38
|
+
assert_equal 'Company', Namespaced::Company.sti_name
|
39
|
+
ensure
|
40
|
+
ActiveRecord::Base.store_full_sti_class = old
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_should_store_demodulized_class_name_with_store_full_sti_class_option_disabled
|
44
|
+
old = ActiveRecord::Base.store_full_sti_class
|
45
|
+
ActiveRecord::Base.store_full_sti_class = false
|
46
|
+
item = Namespaced::Company.new
|
47
|
+
assert_equal 'Company', item[:type]
|
48
|
+
ensure
|
49
|
+
ActiveRecord::Base.store_full_sti_class = old
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_should_store_full_class_name_with_store_full_sti_class_option_enabled
|
53
|
+
old = ActiveRecord::Base.store_full_sti_class
|
54
|
+
ActiveRecord::Base.store_full_sti_class = true
|
55
|
+
item = Namespaced::Company.new
|
56
|
+
assert_equal 'Namespaced::Company', item[:type]
|
57
|
+
ensure
|
58
|
+
ActiveRecord::Base.store_full_sti_class = old
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_different_namespace_subclass_should_load_correctly_with_store_full_sti_class_option
|
62
|
+
old = ActiveRecord::Base.store_full_sti_class
|
63
|
+
ActiveRecord::Base.store_full_sti_class = true
|
64
|
+
item = Namespaced::Company.create :name => "Wolverine 2"
|
65
|
+
assert_not_nil Company.find(item.id)
|
66
|
+
assert_not_nil Namespaced::Company.find(item.id)
|
67
|
+
ensure
|
68
|
+
ActiveRecord::Base.store_full_sti_class = old
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_company_descends_from_active_record
|
72
|
+
assert !ActiveRecord::Base.descends_from_active_record?
|
73
|
+
assert AbstractCompany.descends_from_active_record?, 'AbstractCompany should descend from ActiveRecord::Base'
|
74
|
+
assert Company.descends_from_active_record?, 'Company should descend from ActiveRecord::Base'
|
75
|
+
assert !Class.new(Company).descends_from_active_record?, 'Company subclass should not descend from ActiveRecord::Base'
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_inheritance_base_class
|
79
|
+
assert_equal Post, Post.base_class
|
80
|
+
assert_equal Post, SpecialPost.base_class
|
81
|
+
assert_equal Post, StiPost.base_class
|
82
|
+
assert_equal SubStiPost, SubStiPost.base_class
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_abstract_inheritance_base_class
|
86
|
+
assert_equal LoosePerson, LoosePerson.base_class
|
87
|
+
assert_equal LooseDescendant, LooseDescendant.base_class
|
88
|
+
assert_equal TightPerson, TightPerson.base_class
|
89
|
+
assert_equal TightPerson, TightDescendant.base_class
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_base_class_activerecord_error
|
93
|
+
klass = Class.new { include ActiveRecord::Inheritance }
|
94
|
+
assert_raise(ActiveRecord::ActiveRecordError) { klass.base_class }
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_a_bad_type_column
|
98
|
+
Company.connection.insert "INSERT INTO companies (id, #{QUOTED_TYPE}, name) VALUES(100, 'bad_class!', 'Not happening')"
|
99
|
+
|
100
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Company.find(100) }
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_inheritance_find
|
104
|
+
assert_kind_of Firm, Company.find(1), "37signals should be a firm"
|
105
|
+
assert_kind_of Firm, Firm.find(1), "37signals should be a firm"
|
106
|
+
assert_kind_of Client, Company.find(2), "Summit should be a client"
|
107
|
+
assert_kind_of Client, Client.find(2), "Summit should be a client"
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_alt_inheritance_find
|
111
|
+
assert_kind_of Cucumber, Vegetable.find(1)
|
112
|
+
assert_kind_of Cucumber, Cucumber.find(1)
|
113
|
+
assert_kind_of Cabbage, Vegetable.find(2)
|
114
|
+
assert_kind_of Cabbage, Cabbage.find(2)
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_alt_becomes_works_with_sti
|
118
|
+
vegetable = Vegetable.find(1)
|
119
|
+
assert_kind_of Vegetable, vegetable
|
120
|
+
cabbage = vegetable.becomes(Cabbage)
|
121
|
+
assert_kind_of Cabbage, cabbage
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_becomes_and_change_tracking_for_inheritance_columns
|
125
|
+
cucumber = Vegetable.find(1)
|
126
|
+
cabbage = cucumber.becomes!(Cabbage)
|
127
|
+
assert_equal ['Cucumber', 'Cabbage'], cabbage.custom_type_change
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_alt_becomes_bang_resets_inheritance_type_column
|
131
|
+
vegetable = Vegetable.create!(name: "Red Pepper")
|
132
|
+
assert_nil vegetable.custom_type
|
133
|
+
|
134
|
+
cabbage = vegetable.becomes!(Cabbage)
|
135
|
+
assert_equal "Cabbage", cabbage.custom_type
|
136
|
+
|
137
|
+
vegetable = cabbage.becomes!(Vegetable)
|
138
|
+
assert_nil cabbage.custom_type
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_inheritance_find_all
|
142
|
+
companies = Company.all.merge!(:order => 'id').to_a
|
143
|
+
assert_kind_of Firm, companies[0], "37signals should be a firm"
|
144
|
+
assert_kind_of Client, companies[1], "Summit should be a client"
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_alt_inheritance_find_all
|
148
|
+
companies = Vegetable.all.merge!(:order => 'id').to_a
|
149
|
+
assert_kind_of Cucumber, companies[0]
|
150
|
+
assert_kind_of Cabbage, companies[1]
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_inheritance_save
|
154
|
+
firm = Firm.new
|
155
|
+
firm.name = "Next Angle"
|
156
|
+
firm.save
|
157
|
+
|
158
|
+
next_angle = Company.find(firm.id)
|
159
|
+
assert_kind_of Firm, next_angle, "Next Angle should be a firm"
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_alt_inheritance_save
|
163
|
+
cabbage = Cabbage.new(:name => 'Savoy')
|
164
|
+
cabbage.save!
|
165
|
+
|
166
|
+
savoy = Vegetable.find(cabbage.id)
|
167
|
+
assert_kind_of Cabbage, savoy
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_inheritance_new_with_default_class
|
171
|
+
company = Company.new
|
172
|
+
assert_equal Company, company.class
|
173
|
+
end
|
174
|
+
|
175
|
+
def test_inheritance_new_with_base_class
|
176
|
+
company = Company.new(:type => 'Company')
|
177
|
+
assert_equal Company, company.class
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_inheritance_new_with_subclass
|
181
|
+
firm = Company.new(:type => 'Firm')
|
182
|
+
assert_equal Firm, firm.class
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_new_with_abstract_class
|
186
|
+
e = assert_raises(NotImplementedError) do
|
187
|
+
AbstractCompany.new
|
188
|
+
end
|
189
|
+
assert_equal("AbstractCompany is an abstract class and cannot be instantiated.", e.message)
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_new_with_ar_base
|
193
|
+
e = assert_raises(NotImplementedError) do
|
194
|
+
ActiveRecord::Base.new
|
195
|
+
end
|
196
|
+
assert_equal("ActiveRecord::Base is an abstract class and cannot be instantiated.", e.message)
|
197
|
+
end
|
198
|
+
|
199
|
+
def test_new_with_invalid_type
|
200
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Company.new(:type => 'InvalidType') }
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_new_with_unrelated_type
|
204
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Company.new(:type => 'Account') }
|
205
|
+
end
|
206
|
+
|
207
|
+
def test_new_with_complex_inheritance
|
208
|
+
assert_nothing_raised { Client.new(type: 'VerySpecialClient') }
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_new_with_autoload_paths
|
212
|
+
path = File.expand_path('../../models/autoloadable', __FILE__)
|
213
|
+
ActiveSupport::Dependencies.autoload_paths << path
|
214
|
+
|
215
|
+
firm = Company.new(:type => 'ExtraFirm')
|
216
|
+
assert_equal ExtraFirm, firm.class
|
217
|
+
ensure
|
218
|
+
ActiveSupport::Dependencies.autoload_paths.reject! { |p| p == path }
|
219
|
+
ActiveSupport::Dependencies.clear
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_inheritance_condition
|
223
|
+
assert_equal 11, Company.count
|
224
|
+
assert_equal 2, Firm.count
|
225
|
+
assert_equal 5, Client.count
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_alt_inheritance_condition
|
229
|
+
assert_equal 4, Vegetable.count
|
230
|
+
assert_equal 1, Cucumber.count
|
231
|
+
assert_equal 3, Cabbage.count
|
232
|
+
end
|
233
|
+
|
234
|
+
def test_finding_incorrect_type_data
|
235
|
+
assert_raise(ActiveRecord::RecordNotFound) { Firm.find(2) }
|
236
|
+
assert_nothing_raised { Firm.find(1) }
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_alt_finding_incorrect_type_data
|
240
|
+
assert_raise(ActiveRecord::RecordNotFound) { Cucumber.find(2) }
|
241
|
+
assert_nothing_raised { Cucumber.find(1) }
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_update_all_within_inheritance
|
245
|
+
Client.update_all "name = 'I am a client'"
|
246
|
+
assert_equal "I am a client", Client.first.name
|
247
|
+
# Order by added as otherwise Oracle tests were failing because of different order of results
|
248
|
+
assert_equal "37signals", Firm.all.merge!(:order => "id").to_a.first.name
|
249
|
+
end
|
250
|
+
|
251
|
+
def test_alt_update_all_within_inheritance
|
252
|
+
Cabbage.update_all "name = 'the cabbage'"
|
253
|
+
assert_equal "the cabbage", Cabbage.first.name
|
254
|
+
assert_equal ["my cucumber"], Cucumber.all.map(&:name).uniq
|
255
|
+
end
|
256
|
+
|
257
|
+
def test_destroy_all_within_inheritance
|
258
|
+
Client.destroy_all
|
259
|
+
assert_equal 0, Client.count
|
260
|
+
assert_equal 2, Firm.count
|
261
|
+
end
|
262
|
+
|
263
|
+
def test_alt_destroy_all_within_inheritance
|
264
|
+
Cabbage.destroy_all
|
265
|
+
assert_equal 0, Cabbage.count
|
266
|
+
assert_equal 1, Cucumber.count
|
267
|
+
end
|
268
|
+
|
269
|
+
def test_find_first_within_inheritance
|
270
|
+
assert_kind_of Firm, Company.all.merge!(:where => "name = '37signals'").first
|
271
|
+
assert_kind_of Firm, Firm.all.merge!(:where => "name = '37signals'").first
|
272
|
+
assert_nil Client.all.merge!(:where => "name = '37signals'").first
|
273
|
+
end
|
274
|
+
|
275
|
+
def test_alt_find_first_within_inheritance
|
276
|
+
assert_kind_of Cabbage, Vegetable.all.merge!(:where => "name = 'his cabbage'").first
|
277
|
+
assert_kind_of Cabbage, Cabbage.all.merge!(:where => "name = 'his cabbage'").first
|
278
|
+
assert_nil Cucumber.all.merge!(:where => "name = 'his cabbage'").first
|
279
|
+
end
|
280
|
+
|
281
|
+
def test_complex_inheritance
|
282
|
+
very_special_client = VerySpecialClient.create("name" => "veryspecial")
|
283
|
+
assert_equal very_special_client, VerySpecialClient.where("name = 'veryspecial'").first
|
284
|
+
assert_equal very_special_client, SpecialClient.all.merge!(:where => "name = 'veryspecial'").first
|
285
|
+
assert_equal very_special_client, Company.all.merge!(:where => "name = 'veryspecial'").first
|
286
|
+
assert_equal very_special_client, Client.all.merge!(:where => "name = 'veryspecial'").first
|
287
|
+
assert_equal 1, Client.all.merge!(:where => "name = 'Summit'").to_a.size
|
288
|
+
assert_equal very_special_client, Client.find(very_special_client.id)
|
289
|
+
end
|
290
|
+
|
291
|
+
def test_alt_complex_inheritance
|
292
|
+
king_cole = KingCole.create("name" => "uniform heads")
|
293
|
+
assert_equal king_cole, KingCole.where("name = 'uniform heads'").first
|
294
|
+
assert_equal king_cole, GreenCabbage.all.merge!(:where => "name = 'uniform heads'").first
|
295
|
+
assert_equal king_cole, Cabbage.all.merge!(:where => "name = 'uniform heads'").first
|
296
|
+
assert_equal king_cole, Vegetable.all.merge!(:where => "name = 'uniform heads'").first
|
297
|
+
assert_equal 1, Cabbage.all.merge!(:where => "name = 'his cabbage'").to_a.size
|
298
|
+
assert_equal king_cole, Cabbage.find(king_cole.id)
|
299
|
+
end
|
300
|
+
|
301
|
+
def test_eager_load_belongs_to_something_inherited
|
302
|
+
account = Account.all.merge!(:includes => :firm).find(1)
|
303
|
+
assert account.association(:firm).loaded?, "association was not eager loaded"
|
304
|
+
end
|
305
|
+
|
306
|
+
def test_alt_eager_loading
|
307
|
+
cabbage = RedCabbage.all.merge!(:includes => :seller).find(4)
|
308
|
+
assert cabbage.association(:seller).loaded?, "association was not eager loaded"
|
309
|
+
end
|
310
|
+
|
311
|
+
def test_eager_load_belongs_to_primary_key_quoting
|
312
|
+
con = Account.connection
|
313
|
+
assert_sql(/#{con.quote_table_name('companies')}.#{con.quote_column_name('id')} IN \(1\)/) do
|
314
|
+
Account.all.merge!(:includes => :firm).find(1)
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
def test_inherits_custom_primary_key
|
319
|
+
assert_equal Subscriber.primary_key, SpecialSubscriber.primary_key
|
320
|
+
end
|
321
|
+
|
322
|
+
def test_inheritance_without_mapping
|
323
|
+
assert_kind_of SpecialSubscriber, SpecialSubscriber.find("webster132")
|
324
|
+
assert_nothing_raised { s = SpecialSubscriber.new("name" => "And breaaaaathe!"); s.id = 'roger'; s.save }
|
325
|
+
end
|
326
|
+
|
327
|
+
def test_scope_inherited_properly
|
328
|
+
assert_nothing_raised { Company.of_first_firm }
|
329
|
+
assert_nothing_raised { Client.of_first_firm }
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
class InheritanceComputeTypeTest < ActiveRecord::TestCase
|
334
|
+
fixtures :companies
|
335
|
+
|
336
|
+
def setup
|
337
|
+
ActiveSupport::Dependencies.log_activity = true
|
338
|
+
end
|
339
|
+
|
340
|
+
teardown do
|
341
|
+
ActiveSupport::Dependencies.log_activity = false
|
342
|
+
self.class.const_remove :FirmOnTheFly rescue nil
|
343
|
+
Firm.const_remove :FirmOnTheFly rescue nil
|
344
|
+
end
|
345
|
+
|
346
|
+
def test_instantiation_doesnt_try_to_require_corresponding_file
|
347
|
+
ActiveRecord::Base.store_full_sti_class = false
|
348
|
+
foo = Firm.first.clone
|
349
|
+
foo.type = 'FirmOnTheFly'
|
350
|
+
foo.save!
|
351
|
+
|
352
|
+
# Should fail without FirmOnTheFly in the type condition.
|
353
|
+
assert_raise(ActiveRecord::RecordNotFound) { Firm.find(foo.id) }
|
354
|
+
|
355
|
+
# Nest FirmOnTheFly in the test case where Dependencies won't see it.
|
356
|
+
self.class.const_set :FirmOnTheFly, Class.new(Firm)
|
357
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Firm.find(foo.id) }
|
358
|
+
|
359
|
+
# Nest FirmOnTheFly in Firm where Dependencies will see it.
|
360
|
+
# This is analogous to nesting models in a migration.
|
361
|
+
Firm.const_set :FirmOnTheFly, Class.new(Firm)
|
362
|
+
|
363
|
+
# And instantiate will find the existing constant rather than trying
|
364
|
+
# to require firm_on_the_fly.
|
365
|
+
assert_nothing_raised { assert_kind_of Firm::FirmOnTheFly, Firm.find(foo.id) }
|
366
|
+
ensure
|
367
|
+
ActiveRecord::Base.store_full_sti_class = true
|
368
|
+
end
|
369
|
+
|
370
|
+
def test_sti_type_from_attributes_disabled_in_non_sti_class
|
371
|
+
phone = Shop::Product::Type.new(name: 'Phone')
|
372
|
+
product = Shop::Product.new(:type => phone)
|
373
|
+
assert product.save
|
374
|
+
end
|
375
|
+
end
|