ibm_db 5.2.0-x86-mingw32 → 5.3.2-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 +9 -0
- data/LICENSE +55 -18
- data/ext/Makefile +15 -13
- data/ext/ibm_db.c +62 -57
- data/ext/ibm_db.o +0 -0
- data/ext/ibm_db.so +0 -0
- data/ext/mkmf.log +26 -24
- data/ext/ruby_ibm_db_cli.c +1 -0
- data/ext/ruby_ibm_db_cli.o +0 -0
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
- data/lib/ibm_db.so +1 -0
- data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
- data/test/activejob/destroy_association_async_test.rb +305 -0
- data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
- data/test/activejob/helper.rb +15 -0
- data/test/assets/schema_dump_5_1.yml +345 -0
- data/test/cases/adapter_prevent_writes_test.rb +334 -0
- data/test/cases/adapter_test.rb +432 -218
- data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
- data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
- data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
- data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
- data/test/cases/adapters/mysql2/connection_test.rb +48 -50
- data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
- data/test/cases/adapters/mysql2/enum_test.rb +32 -11
- data/test/cases/adapters/mysql2/explain_test.rb +13 -11
- data/test/cases/adapters/mysql2/json_test.rb +17 -188
- data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
- data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
- data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
- data/test/cases/adapters/mysql2/schema_test.rb +24 -22
- data/test/cases/adapters/mysql2/set_test.rb +32 -0
- data/test/cases/adapters/mysql2/sp_test.rb +10 -8
- data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
- data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
- data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
- data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
- data/test/cases/adapters/postgresql/array_test.rb +118 -63
- data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
- data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
- data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
- data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
- data/test/cases/adapters/postgresql/citext_test.rb +58 -58
- data/test/cases/adapters/postgresql/collation_test.rb +17 -15
- data/test/cases/adapters/postgresql/composite_test.rb +25 -23
- data/test/cases/adapters/postgresql/connection_test.rb +73 -85
- data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
- data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
- data/test/cases/adapters/postgresql/date_test.rb +42 -0
- data/test/cases/adapters/postgresql/domain_test.rb +9 -7
- data/test/cases/adapters/postgresql/enum_test.rb +12 -10
- data/test/cases/adapters/postgresql/explain_test.rb +10 -8
- data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
- data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
- data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
- data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
- data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
- data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
- data/test/cases/adapters/postgresql/integer_test.rb +2 -0
- data/test/cases/adapters/postgresql/interval_test.rb +99 -0
- data/test/cases/adapters/postgresql/json_test.rb +16 -201
- data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
- data/test/cases/adapters/postgresql/money_test.rb +47 -16
- data/test/cases/adapters/postgresql/network_test.rb +36 -28
- data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
- data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
- data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
- data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
- data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
- data/test/cases/adapters/postgresql/range_test.rb +406 -292
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
- data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
- data/test/cases/adapters/postgresql/schema_test.rb +207 -91
- data/test/cases/adapters/postgresql/serial_test.rb +9 -7
- data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
- data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
- data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
- data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
- data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
- data/test/cases/adapters/postgresql/utils_test.rb +11 -9
- data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
- data/test/cases/adapters/postgresql/xml_test.rb +10 -14
- data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
- data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
- data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
- data/test/cases/adapters/sqlite3/json_test.rb +29 -0
- data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
- data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
- data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
- data/test/cases/aggregations_test.rb +14 -12
- data/test/cases/annotate_test.rb +46 -0
- data/test/cases/ar_schema_test.rb +153 -86
- data/test/cases/arel/attributes/attribute_test.rb +1145 -0
- data/test/cases/arel/attributes/math_test.rb +83 -0
- data/test/cases/arel/attributes_test.rb +27 -0
- data/test/cases/arel/collectors/bind_test.rb +40 -0
- data/test/cases/arel/collectors/composite_test.rb +47 -0
- data/test/cases/arel/collectors/sql_string_test.rb +41 -0
- data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
- data/test/cases/arel/crud_test.rb +65 -0
- data/test/cases/arel/delete_manager_test.rb +53 -0
- data/test/cases/arel/factory_methods_test.rb +46 -0
- data/test/cases/arel/helper.rb +45 -0
- data/test/cases/arel/insert_manager_test.rb +241 -0
- data/test/cases/arel/nodes/and_test.rb +30 -0
- data/test/cases/arel/nodes/as_test.rb +36 -0
- data/test/cases/arel/nodes/ascending_test.rb +46 -0
- data/test/cases/arel/nodes/bin_test.rb +35 -0
- data/test/cases/arel/nodes/binary_test.rb +29 -0
- data/test/cases/arel/nodes/bind_param_test.rb +22 -0
- data/test/cases/arel/nodes/case_test.rb +96 -0
- data/test/cases/arel/nodes/casted_test.rb +18 -0
- data/test/cases/arel/nodes/comment_test.rb +22 -0
- data/test/cases/arel/nodes/count_test.rb +35 -0
- data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
- data/test/cases/arel/nodes/descending_test.rb +46 -0
- data/test/cases/arel/nodes/distinct_test.rb +21 -0
- data/test/cases/arel/nodes/equality_test.rb +62 -0
- data/test/cases/arel/nodes/extract_test.rb +43 -0
- data/test/cases/arel/nodes/false_test.rb +21 -0
- data/test/cases/arel/nodes/grouping_test.rb +26 -0
- data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
- data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
- data/test/cases/arel/nodes/named_function_test.rb +48 -0
- data/test/cases/arel/nodes/node_test.rb +22 -0
- data/test/cases/arel/nodes/not_test.rb +31 -0
- data/test/cases/arel/nodes/or_test.rb +36 -0
- data/test/cases/arel/nodes/over_test.rb +69 -0
- data/test/cases/arel/nodes/select_core_test.rb +79 -0
- data/test/cases/arel/nodes/select_statement_test.rb +51 -0
- data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
- data/test/cases/arel/nodes/sum_test.rb +35 -0
- data/test/cases/arel/nodes/table_alias_test.rb +29 -0
- data/test/cases/arel/nodes/true_test.rb +21 -0
- data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
- data/test/cases/arel/nodes/update_statement_test.rb +60 -0
- data/test/cases/arel/nodes/window_test.rb +81 -0
- data/test/cases/arel/nodes_test.rb +34 -0
- data/test/cases/arel/select_manager_test.rb +1238 -0
- data/test/cases/arel/support/fake_record.rb +135 -0
- data/test/cases/arel/table_test.rb +216 -0
- data/test/cases/arel/update_manager_test.rb +126 -0
- data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
- data/test/cases/arel/visitors/dot_test.rb +90 -0
- data/test/cases/arel/visitors/mysql_test.rb +157 -0
- data/test/cases/arel/visitors/postgres_test.rb +366 -0
- data/test/cases/arel/visitors/sqlite_test.rb +75 -0
- data/test/cases/arel/visitors/to_sql_test.rb +750 -0
- data/test/cases/associations/belongs_to_associations_test.rb +510 -158
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
- data/test/cases/associations/callbacks_test.rb +56 -38
- data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
- data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
- data/test/cases/associations/eager_singularization_test.rb +21 -21
- data/test/cases/associations/eager_test.rb +559 -415
- data/test/cases/associations/extension_test.rb +18 -12
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
- data/test/cases/associations/has_many_associations_test.rb +1038 -465
- data/test/cases/associations/has_many_through_associations_test.rb +558 -249
- data/test/cases/associations/has_one_associations_test.rb +294 -129
- data/test/cases/associations/has_one_through_associations_test.rb +121 -75
- data/test/cases/associations/inner_join_association_test.rb +114 -38
- data/test/cases/associations/inverse_associations_test.rb +606 -398
- data/test/cases/associations/join_model_test.rb +158 -148
- data/test/cases/associations/left_outer_join_association_test.rb +59 -24
- data/test/cases/associations/nested_through_associations_test.rb +166 -109
- data/test/cases/associations/required_test.rb +35 -10
- data/test/cases/associations_test.rb +241 -110
- data/test/cases/attribute_methods/read_test.rb +11 -11
- data/test/cases/attribute_methods_test.rb +413 -298
- data/test/cases/attributes_test.rb +145 -27
- data/test/cases/autosave_association_test.rb +681 -436
- data/test/cases/base_prevent_writes_test.rb +229 -0
- data/test/cases/base_test.rb +599 -542
- data/test/cases/batches_test.rb +288 -82
- data/test/cases/binary_test.rb +26 -31
- data/test/cases/bind_parameter_test.rb +194 -21
- data/test/cases/boolean_test.rb +52 -0
- data/test/cases/cache_key_test.rb +110 -5
- data/test/cases/calculations_test.rb +740 -177
- data/test/cases/callbacks_test.rb +74 -207
- data/test/cases/clone_test.rb +15 -10
- data/test/cases/coders/json_test.rb +2 -0
- data/test/cases/coders/yaml_column_test.rb +16 -13
- data/test/cases/collection_cache_key_test.rb +177 -20
- data/test/cases/column_alias_test.rb +9 -7
- data/test/cases/column_definition_test.rb +10 -68
- data/test/cases/comment_test.rb +166 -107
- data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
- data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
- data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
- data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
- data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
- data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
- data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
- data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
- data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
- data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
- data/test/cases/connection_management_test.rb +13 -11
- data/test/cases/connection_pool_test.rb +316 -83
- data/test/cases/core_test.rb +82 -58
- data/test/cases/counter_cache_test.rb +204 -50
- data/test/cases/custom_locking_test.rb +5 -3
- data/test/cases/database_configurations/hash_config_test.rb +74 -0
- data/test/cases/database_configurations/resolver_test.rb +150 -0
- data/test/cases/database_configurations_test.rb +145 -0
- data/test/cases/database_selector_test.rb +296 -0
- data/test/cases/database_statements_test.rb +18 -16
- data/test/cases/date_test.rb +8 -16
- data/test/cases/date_time_precision_test.rb +100 -78
- data/test/cases/date_time_test.rb +23 -8
- data/test/cases/defaults_test.rb +106 -71
- data/test/cases/delegated_type_test.rb +57 -0
- data/test/cases/dirty_test.rb +419 -223
- data/test/cases/disconnected_test.rb +6 -6
- data/test/cases/dup_test.rb +54 -27
- data/test/cases/enum_test.rb +461 -82
- data/test/cases/errors_test.rb +7 -7
- data/test/cases/explain_subscriber_test.rb +17 -15
- data/test/cases/explain_test.rb +11 -19
- data/test/cases/filter_attributes_test.rb +153 -0
- data/test/cases/finder_respond_to_test.rb +14 -14
- data/test/cases/finder_test.rb +669 -287
- data/test/cases/fixture_set/file_test.rb +34 -38
- data/test/cases/fixtures_test.rb +833 -176
- data/test/cases/forbidden_attributes_protection_test.rb +32 -67
- data/test/cases/habtm_destroy_order_test.rb +25 -25
- data/test/cases/helper.rb +78 -49
- data/test/cases/hot_compatibility_test.rb +33 -32
- data/test/cases/i18n_test.rb +18 -17
- data/test/cases/inheritance_test.rb +180 -115
- data/test/cases/insert_all_test.rb +489 -0
- data/test/cases/instrumentation_test.rb +101 -0
- data/test/cases/integration_test.rb +119 -31
- data/test/cases/invalid_connection_test.rb +18 -16
- data/test/cases/invertible_migration_test.rb +183 -43
- data/test/cases/json_attribute_test.rb +35 -0
- data/test/cases/json_serialization_test.rb +57 -58
- data/test/cases/json_shared_test_cases.rb +290 -0
- data/test/cases/locking_test.rb +413 -119
- data/test/cases/log_subscriber_test.rb +68 -26
- data/test/cases/marshal_serialization_test.rb +39 -0
- data/test/cases/migration/change_schema_test.rb +118 -72
- data/test/cases/migration/change_table_test.rb +138 -30
- data/test/cases/migration/check_constraint_test.rb +162 -0
- data/test/cases/migration/column_attributes_test.rb +45 -35
- data/test/cases/migration/column_positioning_test.rb +18 -6
- data/test/cases/migration/columns_test.rb +93 -77
- data/test/cases/migration/command_recorder_test.rb +121 -34
- data/test/cases/migration/compatibility_test.rb +578 -23
- data/test/cases/migration/create_join_table_test.rb +35 -25
- data/test/cases/migration/foreign_key_test.rb +503 -284
- data/test/cases/migration/helper.rb +4 -3
- data/test/cases/migration/index_test.rb +119 -70
- data/test/cases/migration/logger_test.rb +9 -6
- data/test/cases/migration/pending_migrations_test.rb +88 -34
- data/test/cases/migration/references_foreign_key_test.rb +164 -150
- data/test/cases/migration/references_index_test.rb +38 -19
- data/test/cases/migration/references_statements_test.rb +15 -14
- data/test/cases/migration/rename_table_test.rb +53 -30
- data/test/cases/migration_test.rb +637 -269
- data/test/cases/migrator_test.rb +191 -135
- data/test/cases/mixin_test.rb +7 -11
- data/test/cases/modules_test.rb +36 -34
- data/test/cases/multi_db_migrator_test.rb +223 -0
- data/test/cases/multiparameter_attributes_test.rb +60 -33
- data/test/cases/multiple_db_test.rb +16 -22
- data/test/cases/nested_attributes_test.rb +341 -320
- data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
- data/test/cases/null_relation_test.rb +84 -0
- data/test/cases/numeric_data_test.rb +93 -0
- data/test/cases/persistence_test.rb +361 -269
- data/test/cases/pooled_connections_test.rb +18 -26
- data/test/cases/prepared_statement_status_test.rb +48 -0
- data/test/cases/primary_keys_test.rb +210 -104
- data/test/cases/query_cache_test.rb +610 -141
- data/test/cases/quoting_test.rb +132 -31
- data/test/cases/readonly_test.rb +49 -48
- data/test/cases/reaper_test.rb +146 -32
- data/test/cases/reflection_test.rb +167 -156
- data/test/cases/relation/delegation_test.rb +49 -36
- data/test/cases/relation/delete_all_test.rb +117 -0
- data/test/cases/relation/merging_test.rb +319 -42
- data/test/cases/relation/mutation_test.rb +55 -93
- data/test/cases/relation/or_test.rb +129 -29
- data/test/cases/relation/predicate_builder_test.rb +21 -6
- data/test/cases/relation/record_fetch_warning_test.rb +5 -3
- data/test/cases/relation/select_test.rb +67 -0
- data/test/cases/relation/update_all_test.rb +317 -0
- data/test/cases/relation/where_chain_test.rb +68 -32
- data/test/cases/relation/where_clause_test.rb +136 -61
- data/test/cases/relation/where_test.rb +155 -48
- data/test/cases/relation_test.rb +266 -112
- data/test/cases/relations_test.rb +969 -744
- data/test/cases/reload_models_test.rb +13 -9
- data/test/cases/reserved_word_test.rb +141 -0
- data/test/cases/result_test.rb +68 -17
- data/test/cases/sanitize_test.rb +87 -71
- data/test/cases/schema_dumper_test.rb +221 -128
- data/test/cases/schema_loading_test.rb +3 -2
- data/test/cases/scoping/default_scoping_test.rb +185 -144
- data/test/cases/scoping/named_scoping_test.rb +177 -89
- data/test/cases/scoping/relation_scoping_test.rb +197 -75
- data/test/cases/secure_token_test.rb +18 -3
- data/test/cases/serialization_test.rb +30 -28
- data/test/cases/serialized_attribute_test.rb +133 -42
- data/test/cases/signed_id_test.rb +168 -0
- data/test/cases/statement_cache_test.rb +41 -24
- data/test/cases/statement_invalid_test.rb +42 -0
- data/test/cases/store_test.rb +180 -55
- data/test/cases/strict_loading_test.rb +473 -0
- data/test/cases/suppressor_test.rb +26 -12
- data/test/cases/tasks/database_tasks_test.rb +1258 -194
- data/test/cases/tasks/mysql_rake_test.rb +370 -298
- data/test/cases/tasks/postgresql_rake_test.rb +481 -251
- data/test/cases/tasks/sqlite_rake_test.rb +225 -178
- data/test/cases/test_case.rb +51 -40
- data/test/cases/test_databases_test.rb +79 -0
- data/test/cases/test_fixtures_test.rb +79 -19
- data/test/cases/time_precision_test.rb +98 -76
- data/test/cases/timestamp_test.rb +102 -99
- data/test/cases/touch_later_test.rb +12 -10
- data/test/cases/transaction_callbacks_test.rb +344 -90
- data/test/cases/transaction_isolation_test.rb +12 -12
- data/test/cases/transactions_test.rb +612 -162
- data/test/cases/type/adapter_specific_registry_test.rb +14 -2
- data/test/cases/type/date_time_test.rb +4 -2
- data/test/cases/type/integer_test.rb +4 -2
- data/test/cases/type/string_test.rb +10 -8
- data/test/cases/type/time_test.rb +28 -0
- data/test/cases/type/type_map_test.rb +29 -28
- data/test/cases/type/unsigned_integer_test.rb +19 -0
- data/test/cases/type_test.rb +2 -0
- data/test/cases/types_test.rb +3 -1
- data/test/cases/unconnected_test.rb +14 -1
- data/test/cases/unsafe_raw_sql_test.rb +274 -0
- data/test/cases/validations/absence_validation_test.rb +19 -17
- data/test/cases/validations/association_validation_test.rb +30 -28
- data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
- data/test/cases/validations/i18n_validation_test.rb +22 -21
- data/test/cases/validations/length_validation_test.rb +34 -33
- data/test/cases/validations/numericality_validation_test.rb +181 -0
- data/test/cases/validations/presence_validation_test.rb +21 -19
- data/test/cases/validations/uniqueness_validation_test.rb +156 -86
- data/test/cases/validations_repair_helper.rb +2 -0
- data/test/cases/validations_test.rb +61 -26
- data/test/cases/view_test.rb +122 -116
- data/test/cases/yaml_serialization_test.rb +79 -34
- data/test/config.example.yml +19 -19
- data/test/config.rb +3 -1
- data/test/config.yml +16 -6
- data/test/fixtures/all/namespaced/accounts.yml +2 -0
- data/test/fixtures/author_addresses.yml +1 -8
- data/test/fixtures/authors.yml +1 -7
- data/test/fixtures/binaries.yml +4 -0
- data/test/fixtures/books.yml +9 -2
- data/test/fixtures/categories_posts.yml +3 -0
- data/test/fixtures/citations.yml +5 -0
- data/test/fixtures/comments.yml +7 -0
- data/test/fixtures/companies.yml +5 -0
- data/test/fixtures/computers.yml +2 -0
- data/test/fixtures/customers.yml +10 -1
- data/test/fixtures/developers.yml +1 -1
- data/test/fixtures/essays.yml +10 -0
- data/test/fixtures/faces.yml +3 -3
- data/test/fixtures/humans.yml +5 -0
- data/test/fixtures/interests.yml +7 -7
- data/test/fixtures/memberships.yml +7 -0
- data/test/fixtures/minimalistics.yml +3 -0
- data/test/fixtures/mixed_case_monkeys.yml +2 -2
- data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
- data/test/fixtures/naked/yml/parrots.yml +1 -0
- data/test/fixtures/other_books.yml +26 -0
- data/test/fixtures/other_posts.yml +1 -0
- data/test/fixtures/parrots.yml +7 -1
- data/test/fixtures/pirates.yml +3 -0
- data/test/fixtures/posts.yml +11 -3
- data/test/fixtures/readers.yml +6 -0
- data/test/fixtures/reserved_words/values.yml +2 -2
- data/test/fixtures/sponsors.yml +3 -0
- data/test/fixtures/strict_zines.yml +2 -0
- data/test/fixtures/subscribers.yml +1 -1
- data/test/fixtures/tasks.yml +1 -1
- data/test/fixtures/warehouse-things.yml +3 -0
- data/test/migrations/10_urban/9_add_expressions.rb +2 -0
- data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
- data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
- data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
- data/test/migrations/missing/1_people_have_last_names.rb +2 -0
- data/test/migrations/missing/3_we_need_reminders.rb +2 -0
- data/test/migrations/missing/4_innocent_jointable.rb +3 -1
- data/test/migrations/rename/1_we_need_things.rb +2 -0
- data/test/migrations/rename/2_rename_things.rb +2 -0
- data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
- data/test/migrations/to_copy2/1_create_articles.rb +2 -0
- data/test/migrations/to_copy2/2_create_comments.rb +3 -1
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
- data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
- data/test/migrations/valid/2_we_need_reminders.rb +2 -0
- data/test/migrations/valid/3_innocent_jointable.rb +3 -1
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
- data/test/models/account.rb +46 -0
- data/test/models/admin/account.rb +3 -1
- data/test/models/admin/randomly_named_c1.rb +2 -0
- data/test/models/admin/user.rb +16 -8
- data/test/models/admin.rb +4 -2
- data/test/models/aircraft.rb +3 -1
- data/test/models/arunit2_model.rb +2 -0
- data/test/models/author.rb +153 -102
- data/test/models/auto_id.rb +2 -0
- data/test/models/autoloadable/extra_firm.rb +2 -0
- data/test/models/binary.rb +3 -1
- data/test/models/binary_field.rb +6 -0
- data/test/models/bird.rb +13 -1
- data/test/models/book.rb +14 -4
- data/test/models/book_destroy_async.rb +24 -0
- data/test/models/boolean.rb +5 -0
- data/test/models/bulb.rb +13 -4
- data/test/models/cake_designer.rb +2 -0
- data/test/models/car.rb +17 -10
- data/test/models/carrier.rb +2 -0
- data/test/models/cart.rb +5 -0
- data/test/models/cat.rb +2 -0
- data/test/models/categorization.rb +8 -6
- data/test/models/category.rb +28 -16
- data/test/models/chef.rb +2 -0
- data/test/models/citation.rb +5 -1
- data/test/models/club.rb +13 -10
- data/test/models/college.rb +4 -2
- data/test/models/column.rb +2 -0
- data/test/models/column_name.rb +2 -0
- data/test/models/comment.rb +32 -10
- data/test/models/company.rb +102 -106
- data/test/models/company_in_module.rb +27 -26
- data/test/models/computer.rb +3 -1
- data/test/models/contact.rb +15 -13
- data/test/models/content.rb +5 -3
- data/test/models/contract.rb +21 -3
- data/test/models/country.rb +2 -4
- data/test/models/course.rb +3 -1
- data/test/models/customer.rb +10 -8
- data/test/models/customer_carrier.rb +2 -0
- data/test/models/dashboard.rb +2 -0
- data/test/models/default.rb +2 -0
- data/test/models/department.rb +2 -0
- data/test/models/destroy_async_parent.rb +15 -0
- data/test/models/destroy_async_parent_soft_delete.rb +20 -0
- data/test/models/developer.rb +152 -85
- data/test/models/dl_keyed_belongs_to.rb +13 -0
- data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
- data/test/models/dl_keyed_has_many.rb +5 -0
- data/test/models/dl_keyed_has_many_through.rb +5 -0
- data/test/models/dl_keyed_has_one.rb +5 -0
- data/test/models/dl_keyed_join.rb +10 -0
- data/test/models/dog.rb +2 -0
- data/test/models/dog_lover.rb +2 -0
- data/test/models/doubloon.rb +3 -1
- data/test/models/drink_designer.rb +17 -0
- data/test/models/edge.rb +4 -2
- data/test/models/electron.rb +2 -0
- data/test/models/engine.rb +3 -2
- data/test/models/entrant.rb +2 -0
- data/test/models/entry.rb +5 -0
- data/test/models/essay.rb +6 -3
- data/test/models/essay_destroy_async.rb +12 -0
- data/test/models/event.rb +3 -1
- data/test/models/eye.rb +5 -3
- data/test/models/face.rb +14 -6
- data/test/models/family.rb +6 -0
- data/test/models/family_tree.rb +6 -0
- data/test/models/friendship.rb +5 -3
- data/test/models/frog.rb +8 -0
- data/test/models/guid.rb +3 -1
- data/test/models/guitar.rb +2 -0
- data/test/models/hotel.rb +5 -3
- data/test/models/human.rb +39 -0
- data/test/models/image.rb +3 -1
- data/test/models/interest.rb +14 -3
- data/test/models/invoice.rb +4 -2
- data/test/models/item.rb +3 -1
- data/test/models/job.rb +5 -3
- data/test/models/joke.rb +4 -2
- data/test/models/keyboard.rb +3 -1
- data/test/models/legacy_thing.rb +2 -0
- data/test/models/lesson.rb +2 -0
- data/test/models/line_item.rb +3 -1
- data/test/models/liquid.rb +2 -0
- data/test/models/matey.rb +3 -1
- data/test/models/measurement.rb +4 -0
- data/test/models/member.rb +23 -20
- data/test/models/member_detail.rb +3 -0
- data/test/models/member_type.rb +2 -0
- data/test/models/membership.rb +4 -1
- data/test/models/mentor.rb +3 -1
- data/test/models/message.rb +5 -0
- data/test/models/minimalistic.rb +2 -0
- data/test/models/minivan.rb +3 -2
- data/test/models/mixed_case_monkey.rb +3 -1
- data/test/models/molecule.rb +2 -0
- data/test/models/mouse.rb +6 -0
- data/test/models/movie.rb +2 -0
- data/test/models/node.rb +4 -2
- data/test/models/non_primary_key.rb +2 -0
- data/test/models/notification.rb +2 -0
- data/test/models/numeric_data.rb +12 -0
- data/test/models/order.rb +4 -2
- data/test/models/organization.rb +9 -7
- data/test/models/other_dog.rb +3 -1
- data/test/models/owner.rb +6 -4
- data/test/models/parrot.rb +12 -4
- data/test/models/person.rb +59 -54
- data/test/models/personal_legacy_thing.rb +3 -1
- data/test/models/pet.rb +4 -2
- data/test/models/pet_treasure.rb +2 -0
- data/test/models/pirate.rb +67 -43
- data/test/models/possession.rb +3 -1
- data/test/models/post.rb +184 -86
- data/test/models/price_estimate.rb +11 -1
- data/test/models/professor.rb +3 -1
- data/test/models/project.rb +14 -12
- data/test/models/publisher/article.rb +2 -0
- data/test/models/publisher/magazine.rb +2 -0
- data/test/models/publisher.rb +2 -0
- data/test/models/randomly_named_c1.rb +2 -0
- data/test/models/rating.rb +5 -1
- data/test/models/reader.rb +7 -5
- data/test/models/recipe.rb +2 -0
- data/test/models/record.rb +2 -0
- data/test/models/reference.rb +6 -3
- data/test/models/reply.rb +39 -21
- data/test/models/room.rb +6 -0
- data/test/models/section.rb +6 -0
- data/test/models/seminar.rb +6 -0
- data/test/models/session.rb +6 -0
- data/test/models/ship.rb +12 -9
- data/test/models/ship_part.rb +5 -3
- data/test/models/shop.rb +4 -2
- data/test/models/shop_account.rb +2 -0
- data/test/models/speedometer.rb +2 -0
- data/test/models/sponsor.rb +8 -5
- data/test/models/squeak.rb +6 -0
- data/test/models/strict_zine.rb +7 -0
- data/test/models/string_key_object.rb +2 -0
- data/test/models/student.rb +2 -0
- data/test/models/subscriber.rb +4 -2
- data/test/models/subscription.rb +5 -1
- data/test/models/tag.rb +6 -3
- data/test/models/tagging.rb +13 -6
- data/test/models/task.rb +2 -0
- data/test/models/topic.rb +54 -19
- data/test/models/toy.rb +4 -0
- data/test/models/traffic_light.rb +2 -0
- data/test/models/treasure.rb +5 -3
- data/test/models/treaty.rb +2 -4
- data/test/models/tree.rb +2 -0
- data/test/models/tuning_peg.rb +2 -0
- data/test/models/tyre.rb +2 -0
- data/test/models/user.rb +12 -4
- data/test/models/uuid_child.rb +2 -0
- data/test/models/uuid_item.rb +2 -0
- data/test/models/uuid_parent.rb +2 -0
- data/test/models/vegetables.rb +12 -3
- data/test/models/vertex.rb +6 -4
- data/test/models/warehouse_thing.rb +2 -0
- data/test/models/wheel.rb +3 -1
- data/test/models/without_table.rb +3 -1
- data/test/models/zine.rb +3 -1
- data/test/schema/mysql2_specific_schema.rb +49 -35
- data/test/schema/oracle_specific_schema.rb +13 -15
- data/test/schema/postgresql_specific_schema.rb +51 -40
- data/test/schema/schema.rb +334 -154
- data/test/schema/sqlite_specific_schema.rb +9 -16
- data/test/support/config.rb +26 -26
- data/test/support/connection.rb +14 -8
- data/test/support/connection_helper.rb +3 -1
- data/test/support/ddl_helper.rb +2 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
- data/test/support/schema_dumping_helper.rb +2 -0
- data/test/support/stubs/strong_parameters.rb +40 -0
- data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
- data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
- metadata +190 -14
@@ -1,14 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/author"
|
5
|
+
require "models/company"
|
6
|
+
require "models/membership"
|
7
|
+
require "models/person"
|
8
|
+
require "models/post"
|
9
|
+
require "models/project"
|
10
|
+
require "models/subscriber"
|
11
|
+
require "models/vegetables"
|
12
|
+
require "models/shop"
|
13
|
+
require "models/sponsor"
|
12
14
|
|
13
15
|
module InheritanceTestHelper
|
14
16
|
def with_store_full_sti_class(&block)
|
@@ -34,7 +36,7 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
34
36
|
|
35
37
|
def test_class_with_store_full_sti_class_returns_full_name
|
36
38
|
with_store_full_sti_class do
|
37
|
-
assert_equal
|
39
|
+
assert_equal "Namespaced::Company", Namespaced::Company.sti_name
|
38
40
|
end
|
39
41
|
end
|
40
42
|
|
@@ -43,37 +45,37 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
43
45
|
company = company.dup
|
44
46
|
company.extend(Module.new {
|
45
47
|
def _read_attribute(name)
|
46
|
-
return
|
48
|
+
return " " if name == "type"
|
47
49
|
super
|
48
50
|
end
|
49
51
|
})
|
50
52
|
company.save!
|
51
53
|
company = Company.all.to_a.find { |x| x.id == company.id }
|
52
|
-
assert_equal
|
54
|
+
assert_equal " ", company.type
|
53
55
|
end
|
54
56
|
|
55
57
|
def test_class_without_store_full_sti_class_returns_demodulized_name
|
56
58
|
without_store_full_sti_class do
|
57
|
-
assert_equal
|
59
|
+
assert_equal "Company", Namespaced::Company.sti_name
|
58
60
|
end
|
59
61
|
end
|
60
62
|
|
61
63
|
def test_compute_type_success
|
62
|
-
assert_equal Author,
|
64
|
+
assert_equal Author, Company.send(:compute_type, "Author")
|
63
65
|
end
|
64
66
|
|
65
67
|
def test_compute_type_nonexistent_constant
|
66
68
|
e = assert_raises NameError do
|
67
|
-
|
69
|
+
Company.send :compute_type, "NonexistentModel"
|
68
70
|
end
|
69
|
-
|
70
|
-
assert_equal
|
71
|
+
assert_match "uninitialized constant Company::NonexistentModel", e.message
|
72
|
+
assert_equal "Company::NonexistentModel", e.name
|
71
73
|
end
|
72
74
|
|
73
75
|
def test_compute_type_no_method_error
|
74
|
-
ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise NoMethodError }) do
|
76
|
+
ActiveSupport::Dependencies.stub(:safe_constantize, proc { raise NoMethodError }) do
|
75
77
|
assert_raises NoMethodError do
|
76
|
-
|
78
|
+
Company.send :compute_type, "InvalidModel"
|
77
79
|
end
|
78
80
|
end
|
79
81
|
end
|
@@ -88,19 +90,18 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
88
90
|
error = e
|
89
91
|
end
|
90
92
|
|
91
|
-
ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise e }) do
|
92
|
-
|
93
|
+
ActiveSupport::Dependencies.stub(:safe_constantize, proc { raise e }) do
|
93
94
|
exception = assert_raises NameError do
|
94
|
-
|
95
|
+
Company.send :compute_type, "InvalidModel"
|
95
96
|
end
|
96
97
|
assert_equal error.message, exception.message
|
97
98
|
end
|
98
99
|
end
|
99
100
|
|
100
101
|
def test_compute_type_argument_error
|
101
|
-
ActiveSupport::Dependencies.stub(:safe_constantize, proc{ raise ArgumentError }) do
|
102
|
+
ActiveSupport::Dependencies.stub(:safe_constantize, proc { raise ArgumentError }) do
|
102
103
|
assert_raises ArgumentError do
|
103
|
-
|
104
|
+
Company.send :compute_type, "InvalidModel"
|
104
105
|
end
|
105
106
|
end
|
106
107
|
end
|
@@ -108,14 +109,14 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
108
109
|
def test_should_store_demodulized_class_name_with_store_full_sti_class_option_disabled
|
109
110
|
without_store_full_sti_class do
|
110
111
|
item = Namespaced::Company.new
|
111
|
-
assert_equal
|
112
|
+
assert_equal "Company", item[:type]
|
112
113
|
end
|
113
114
|
end
|
114
115
|
|
115
116
|
def test_should_store_full_class_name_with_store_full_sti_class_option_enabled
|
116
117
|
with_store_full_sti_class do
|
117
118
|
item = Namespaced::Company.new
|
118
|
-
assert_equal
|
119
|
+
assert_equal "Namespaced::Company", item[:type]
|
119
120
|
end
|
120
121
|
end
|
121
122
|
|
@@ -128,56 +129,70 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
128
129
|
end
|
129
130
|
|
130
131
|
def test_descends_from_active_record
|
131
|
-
|
132
|
+
assert_not_predicate ActiveRecord::Base, :descends_from_active_record?
|
132
133
|
|
133
134
|
# Abstract subclass of AR::Base.
|
134
|
-
|
135
|
+
assert_predicate LoosePerson, :descends_from_active_record?
|
135
136
|
|
136
137
|
# Concrete subclass of an abstract class.
|
137
|
-
|
138
|
+
assert_predicate LooseDescendant, :descends_from_active_record?
|
138
139
|
|
139
140
|
# Concrete subclass of AR::Base.
|
140
|
-
|
141
|
+
assert_predicate TightPerson, :descends_from_active_record?
|
141
142
|
|
142
143
|
# Concrete subclass of a concrete class but has no type column.
|
143
|
-
|
144
|
+
assert_predicate TightDescendant, :descends_from_active_record?
|
144
145
|
|
145
146
|
# Concrete subclass of AR::Base.
|
146
|
-
|
147
|
+
assert_predicate Post, :descends_from_active_record?
|
148
|
+
|
149
|
+
# Concrete subclasses of a concrete class which has a type column.
|
150
|
+
assert_not_predicate StiPost, :descends_from_active_record?
|
151
|
+
assert_not_predicate SubStiPost, :descends_from_active_record?
|
147
152
|
|
148
153
|
# Abstract subclass of a concrete class which has a type column.
|
149
154
|
# This is pathological, as you'll never have Sub < Abstract < Concrete.
|
150
|
-
|
155
|
+
assert_not_predicate AbstractStiPost, :descends_from_active_record?
|
151
156
|
|
152
|
-
# Concrete
|
153
|
-
|
157
|
+
# Concrete subclass of an abstract class which has a type column.
|
158
|
+
assert_not_predicate SubAbstractStiPost, :descends_from_active_record?
|
154
159
|
end
|
155
160
|
|
156
161
|
def test_company_descends_from_active_record
|
157
|
-
|
158
|
-
assert AbstractCompany.descends_from_active_record?,
|
159
|
-
assert Company.descends_from_active_record?,
|
160
|
-
|
162
|
+
assert_not_predicate ActiveRecord::Base, :descends_from_active_record?
|
163
|
+
assert AbstractCompany.descends_from_active_record?, "AbstractCompany should descend from ActiveRecord::Base"
|
164
|
+
assert Company.descends_from_active_record?, "Company should descend from ActiveRecord::Base"
|
165
|
+
assert_not Class.new(Company).descends_from_active_record?, "Company subclass should not descend from ActiveRecord::Base"
|
161
166
|
end
|
162
167
|
|
163
168
|
def test_abstract_class
|
164
|
-
|
165
|
-
|
166
|
-
|
169
|
+
assert_not_predicate ActiveRecord::Base, :abstract_class?
|
170
|
+
assert_predicate LoosePerson, :abstract_class?
|
171
|
+
assert_not_predicate LooseDescendant, :abstract_class?
|
167
172
|
end
|
168
173
|
|
169
174
|
def test_inheritance_base_class
|
170
175
|
assert_equal Post, Post.base_class
|
176
|
+
assert_predicate Post, :base_class?
|
171
177
|
assert_equal Post, SpecialPost.base_class
|
178
|
+
assert_not_predicate SpecialPost, :base_class?
|
172
179
|
assert_equal Post, StiPost.base_class
|
173
|
-
|
180
|
+
assert_not_predicate StiPost, :base_class?
|
181
|
+
assert_equal Post, SubStiPost.base_class
|
182
|
+
assert_not_predicate SubStiPost, :base_class?
|
183
|
+
assert_equal SubAbstractStiPost, SubAbstractStiPost.base_class
|
184
|
+
assert_predicate SubAbstractStiPost, :base_class?
|
174
185
|
end
|
175
186
|
|
176
187
|
def test_abstract_inheritance_base_class
|
177
188
|
assert_equal LoosePerson, LoosePerson.base_class
|
189
|
+
assert_predicate LoosePerson, :base_class?
|
178
190
|
assert_equal LooseDescendant, LooseDescendant.base_class
|
191
|
+
assert_predicate LooseDescendant, :base_class?
|
179
192
|
assert_equal TightPerson, TightPerson.base_class
|
193
|
+
assert_predicate TightPerson, :base_class?
|
180
194
|
assert_equal TightPerson, TightDescendant.base_class
|
195
|
+
assert_not_predicate TightDescendant, :base_class?
|
181
196
|
end
|
182
197
|
|
183
198
|
def test_base_class_activerecord_error
|
@@ -212,10 +227,20 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
212
227
|
assert_kind_of Cabbage, cabbage
|
213
228
|
end
|
214
229
|
|
230
|
+
def test_becomes_sets_variables_before_initialization_callbacks
|
231
|
+
vegetable = Vegetable.create!(name: "yelling carrot")
|
232
|
+
assert_kind_of Vegetable, vegetable
|
233
|
+
assert_equal "yelling carrot", vegetable.name
|
234
|
+
|
235
|
+
yelling_veggie = vegetable.becomes(YellingVegetable)
|
236
|
+
assert_equal "YELLING CARROT", yelling_veggie.name, "YellingVegetable name should be YELLING CARROT"
|
237
|
+
assert_equal "YELLING CARROT", vegetable.name, "Vegetable name should be YELLING CARROT after becoming a YellingVegetable"
|
238
|
+
end
|
239
|
+
|
215
240
|
def test_becomes_and_change_tracking_for_inheritance_columns
|
216
241
|
cucumber = Vegetable.find(1)
|
217
242
|
cabbage = cucumber.becomes!(Cabbage)
|
218
|
-
assert_equal [
|
243
|
+
assert_equal ["Cucumber", "Cabbage"], cabbage.custom_type_change
|
219
244
|
end
|
220
245
|
|
221
246
|
def test_alt_becomes_bang_resets_inheritance_type_column
|
@@ -225,18 +250,18 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
225
250
|
cabbage = vegetable.becomes!(Cabbage)
|
226
251
|
assert_equal "Cabbage", cabbage.custom_type
|
227
252
|
|
228
|
-
|
253
|
+
cabbage.becomes!(Vegetable)
|
229
254
|
assert_nil cabbage.custom_type
|
230
255
|
end
|
231
256
|
|
232
257
|
def test_inheritance_find_all
|
233
|
-
companies = Company.all.merge!(:
|
258
|
+
companies = Company.all.merge!(order: "id").to_a
|
234
259
|
assert_kind_of Firm, companies[0], "37signals should be a firm"
|
235
260
|
assert_kind_of Client, companies[1], "Summit should be a client"
|
236
261
|
end
|
237
262
|
|
238
263
|
def test_alt_inheritance_find_all
|
239
|
-
companies = Vegetable.all.merge!(:
|
264
|
+
companies = Vegetable.all.merge!(order: "id").to_a
|
240
265
|
assert_kind_of Cucumber, companies[0]
|
241
266
|
assert_kind_of Cabbage, companies[1]
|
242
267
|
end
|
@@ -251,7 +276,7 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
251
276
|
end
|
252
277
|
|
253
278
|
def test_alt_inheritance_save
|
254
|
-
cabbage = Cabbage.new(:
|
279
|
+
cabbage = Cabbage.new(name: "Savoy")
|
255
280
|
cabbage.save!
|
256
281
|
|
257
282
|
savoy = Vegetable.find(cabbage.id)
|
@@ -264,12 +289,27 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
264
289
|
end
|
265
290
|
|
266
291
|
def test_inheritance_new_with_base_class
|
267
|
-
company = Company.new(:
|
292
|
+
company = Company.new(type: "Company")
|
268
293
|
assert_equal Company, company.class
|
269
294
|
end
|
270
295
|
|
271
296
|
def test_inheritance_new_with_subclass
|
272
|
-
firm = Company.new(:
|
297
|
+
firm = Company.new(type: "Firm")
|
298
|
+
assert_equal Firm, firm.class
|
299
|
+
end
|
300
|
+
|
301
|
+
def test_where_new_with_subclass
|
302
|
+
firm = Company.where(type: "Firm").new
|
303
|
+
assert_equal Firm, firm.class
|
304
|
+
end
|
305
|
+
|
306
|
+
def test_where_create_with_subclass
|
307
|
+
firm = Company.where(type: "Firm").create(name: "Basecamp")
|
308
|
+
assert_equal Firm, firm.class
|
309
|
+
end
|
310
|
+
|
311
|
+
def test_where_create_bang_with_subclass
|
312
|
+
firm = Company.where(type: "Firm").create!(name: "Basecamp")
|
273
313
|
assert_equal Firm, firm.class
|
274
314
|
end
|
275
315
|
|
@@ -288,17 +328,41 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
288
328
|
end
|
289
329
|
|
290
330
|
def test_new_with_invalid_type
|
291
|
-
assert_raise(ActiveRecord::SubclassNotFound) { Company.new(:
|
331
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Company.new(type: "InvalidType") }
|
292
332
|
end
|
293
333
|
|
294
334
|
def test_new_with_unrelated_type
|
295
|
-
assert_raise(ActiveRecord::SubclassNotFound) { Company.new(:
|
335
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Company.new(type: "Account") }
|
336
|
+
end
|
337
|
+
|
338
|
+
def test_where_new_with_invalid_type
|
339
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "InvalidType").new }
|
340
|
+
end
|
341
|
+
|
342
|
+
def test_where_new_with_unrelated_type
|
343
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "Account").new }
|
344
|
+
end
|
345
|
+
|
346
|
+
def test_where_create_with_invalid_type
|
347
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "InvalidType").create }
|
348
|
+
end
|
349
|
+
|
350
|
+
def test_where_create_with_unrelated_type
|
351
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "Account").create }
|
352
|
+
end
|
353
|
+
|
354
|
+
def test_where_create_bang_with_invalid_type
|
355
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "InvalidType").create! }
|
356
|
+
end
|
357
|
+
|
358
|
+
def test_where_create_bang_with_unrelated_type
|
359
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Company.where(type: "Account").create! }
|
296
360
|
end
|
297
361
|
|
298
362
|
def test_new_with_unrelated_namespaced_type
|
299
363
|
without_store_full_sti_class do
|
300
364
|
e = assert_raises ActiveRecord::SubclassNotFound do
|
301
|
-
Namespaced::Company.new(type:
|
365
|
+
Namespaced::Company.new(type: "Firm")
|
302
366
|
end
|
303
367
|
|
304
368
|
assert_equal "Invalid single-table inheritance type: Namespaced::Firm is not a subclass of Namespaced::Company", e.message
|
@@ -306,21 +370,21 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
306
370
|
end
|
307
371
|
|
308
372
|
def test_new_with_complex_inheritance
|
309
|
-
assert_nothing_raised { Client.new(type:
|
373
|
+
assert_nothing_raised { Client.new(type: "VerySpecialClient") }
|
310
374
|
end
|
311
375
|
|
312
376
|
def test_new_without_storing_full_sti_class
|
313
377
|
without_store_full_sti_class do
|
314
|
-
item = Company.new(type:
|
378
|
+
item = Company.new(type: "SpecialCo")
|
315
379
|
assert_instance_of Company::SpecialCo, item
|
316
380
|
end
|
317
381
|
end
|
318
382
|
|
319
383
|
def test_new_with_autoload_paths
|
320
|
-
path = File.expand_path(
|
384
|
+
path = File.expand_path("../models/autoloadable", __dir__)
|
321
385
|
ActiveSupport::Dependencies.autoload_paths << path
|
322
386
|
|
323
|
-
firm = Company.new(:
|
387
|
+
firm = Company.new(type: "ExtraFirm")
|
324
388
|
assert_equal ExtraFirm, firm.class
|
325
389
|
ensure
|
326
390
|
ActiveSupport::Dependencies.autoload_paths.reject! { |p| p == path }
|
@@ -328,8 +392,8 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
328
392
|
end
|
329
393
|
|
330
394
|
def test_inheritance_condition
|
331
|
-
assert_equal
|
332
|
-
assert_equal
|
395
|
+
assert_equal 12, Company.count
|
396
|
+
assert_equal 3, Firm.count
|
333
397
|
assert_equal 5, Client.count
|
334
398
|
end
|
335
399
|
|
@@ -353,7 +417,7 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
353
417
|
Client.update_all "name = 'I am a client'"
|
354
418
|
assert_equal "I am a client", Client.first.name
|
355
419
|
# Order by added as otherwise Oracle tests were failing because of different order of results
|
356
|
-
assert_equal "37signals", Firm.all.merge!(:
|
420
|
+
assert_equal "37signals", Firm.all.merge!(order: "id").to_a.first.name
|
357
421
|
end
|
358
422
|
|
359
423
|
def test_alt_update_all_within_inheritance
|
@@ -365,7 +429,7 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
365
429
|
def test_destroy_all_within_inheritance
|
366
430
|
Client.destroy_all
|
367
431
|
assert_equal 0, Client.count
|
368
|
-
assert_equal
|
432
|
+
assert_equal 3, Firm.count
|
369
433
|
end
|
370
434
|
|
371
435
|
def test_alt_destroy_all_within_inheritance
|
@@ -375,51 +439,52 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
375
439
|
end
|
376
440
|
|
377
441
|
def test_find_first_within_inheritance
|
378
|
-
assert_kind_of Firm, Company.all.merge!(:
|
379
|
-
assert_kind_of Firm, Firm.all.merge!(:
|
380
|
-
assert_nil Client.all.merge!(:
|
442
|
+
assert_kind_of Firm, Company.all.merge!(where: "name = '37signals'").first
|
443
|
+
assert_kind_of Firm, Firm.all.merge!(where: "name = '37signals'").first
|
444
|
+
assert_nil Client.all.merge!(where: "name = '37signals'").first
|
381
445
|
end
|
382
446
|
|
383
447
|
def test_alt_find_first_within_inheritance
|
384
|
-
assert_kind_of Cabbage, Vegetable.all.merge!(:
|
385
|
-
assert_kind_of Cabbage, Cabbage.all.merge!(:
|
386
|
-
assert_nil Cucumber.all.merge!(:
|
448
|
+
assert_kind_of Cabbage, Vegetable.all.merge!(where: "name = 'his cabbage'").first
|
449
|
+
assert_kind_of Cabbage, Cabbage.all.merge!(where: "name = 'his cabbage'").first
|
450
|
+
assert_nil Cucumber.all.merge!(where: "name = 'his cabbage'").first
|
387
451
|
end
|
388
452
|
|
389
453
|
def test_complex_inheritance
|
390
454
|
very_special_client = VerySpecialClient.create("name" => "veryspecial")
|
391
455
|
assert_equal very_special_client, VerySpecialClient.where("name = 'veryspecial'").first
|
392
|
-
assert_equal very_special_client, SpecialClient.all.merge!(:
|
393
|
-
assert_equal very_special_client, Company.all.merge!(:
|
394
|
-
assert_equal very_special_client, Client.all.merge!(:
|
395
|
-
assert_equal 1, Client.all.merge!(:
|
456
|
+
assert_equal very_special_client, SpecialClient.all.merge!(where: "name = 'veryspecial'").first
|
457
|
+
assert_equal very_special_client, Company.all.merge!(where: "name = 'veryspecial'").first
|
458
|
+
assert_equal very_special_client, Client.all.merge!(where: "name = 'veryspecial'").first
|
459
|
+
assert_equal 1, Client.all.merge!(where: "name = 'Summit'").to_a.size
|
396
460
|
assert_equal very_special_client, Client.find(very_special_client.id)
|
397
461
|
end
|
398
462
|
|
399
463
|
def test_alt_complex_inheritance
|
400
464
|
king_cole = KingCole.create("name" => "uniform heads")
|
401
465
|
assert_equal king_cole, KingCole.where("name = 'uniform heads'").first
|
402
|
-
assert_equal king_cole, GreenCabbage.all.merge!(:
|
403
|
-
assert_equal king_cole, Cabbage.all.merge!(:
|
404
|
-
assert_equal king_cole, Vegetable.all.merge!(:
|
405
|
-
assert_equal 1, Cabbage.all.merge!(:
|
466
|
+
assert_equal king_cole, GreenCabbage.all.merge!(where: "name = 'uniform heads'").first
|
467
|
+
assert_equal king_cole, Cabbage.all.merge!(where: "name = 'uniform heads'").first
|
468
|
+
assert_equal king_cole, Vegetable.all.merge!(where: "name = 'uniform heads'").first
|
469
|
+
assert_equal 1, Cabbage.all.merge!(where: "name = 'his cabbage'").to_a.size
|
406
470
|
assert_equal king_cole, Cabbage.find(king_cole.id)
|
407
471
|
end
|
408
472
|
|
409
473
|
def test_eager_load_belongs_to_something_inherited
|
410
|
-
account = Account.all.merge!(:
|
474
|
+
account = Account.all.merge!(includes: :firm).find(1)
|
411
475
|
assert account.association(:firm).loaded?, "association was not eager loaded"
|
412
476
|
end
|
413
477
|
|
414
478
|
def test_alt_eager_loading
|
415
|
-
cabbage = RedCabbage.all.merge!(:
|
479
|
+
cabbage = RedCabbage.all.merge!(includes: :seller).find(4)
|
416
480
|
assert cabbage.association(:seller).loaded?, "association was not eager loaded"
|
417
481
|
end
|
418
482
|
|
419
483
|
def test_eager_load_belongs_to_primary_key_quoting
|
420
|
-
|
421
|
-
|
422
|
-
|
484
|
+
c = Account.connection
|
485
|
+
bind_param = Arel::Nodes::BindParam.new(nil)
|
486
|
+
assert_sql(/#{Regexp.escape(c.quote_table_name("companies.id"))} = (?:#{Regexp.escape(bind_param.to_sql)}|1)/i) do
|
487
|
+
Account.all.merge!(includes: :firm).find(1)
|
423
488
|
end
|
424
489
|
end
|
425
490
|
|
@@ -429,12 +494,12 @@ class InheritanceTest < ActiveRecord::TestCase
|
|
429
494
|
|
430
495
|
def test_inheritance_without_mapping
|
431
496
|
assert_kind_of SpecialSubscriber, SpecialSubscriber.find("webster132")
|
432
|
-
assert_nothing_raised { s = SpecialSubscriber.new("name" => "And breaaaaathe!"); s.id =
|
497
|
+
assert_nothing_raised { s = SpecialSubscriber.new("name" => "And breaaaaathe!"); s.id = "roger"; s.save }
|
433
498
|
end
|
434
499
|
|
435
500
|
def test_scope_inherited_properly
|
436
|
-
assert_nothing_raised { Company.of_first_firm }
|
437
|
-
assert_nothing_raised { Client.of_first_firm }
|
501
|
+
assert_nothing_raised { Company.of_first_firm.to_a }
|
502
|
+
assert_nothing_raised { Client.of_first_firm.to_a }
|
438
503
|
end
|
439
504
|
|
440
505
|
def test_inheritance_with_default_scope
|
@@ -446,23 +511,20 @@ class InheritanceComputeTypeTest < ActiveRecord::TestCase
|
|
446
511
|
include InheritanceTestHelper
|
447
512
|
fixtures :companies
|
448
513
|
|
449
|
-
teardown do
|
450
|
-
self.class.const_remove :FirmOnTheFly rescue nil
|
451
|
-
Firm.const_remove :FirmOnTheFly rescue nil
|
452
|
-
end
|
453
|
-
|
454
514
|
def test_instantiation_doesnt_try_to_require_corresponding_file
|
455
515
|
without_store_full_sti_class do
|
456
516
|
foo = Firm.first.clone
|
457
|
-
foo.type =
|
517
|
+
foo.type = "FirmOnTheFly"
|
458
518
|
foo.save!
|
459
519
|
|
460
520
|
# Should fail without FirmOnTheFly in the type condition.
|
461
521
|
assert_raise(ActiveRecord::RecordNotFound) { Firm.find(foo.id) }
|
522
|
+
assert_raise(ActiveRecord::RecordNotFound) { Firm.find_by!(id: foo.id) }
|
462
523
|
|
463
524
|
# Nest FirmOnTheFly in the test case where Dependencies won't see it.
|
464
525
|
self.class.const_set :FirmOnTheFly, Class.new(Firm)
|
465
526
|
assert_raise(ActiveRecord::SubclassNotFound) { Firm.find(foo.id) }
|
527
|
+
assert_raise(ActiveRecord::SubclassNotFound) { Firm.find_by!(id: foo.id) }
|
466
528
|
|
467
529
|
# Nest FirmOnTheFly in Firm where Dependencies will see it.
|
468
530
|
# This is analogous to nesting models in a migration.
|
@@ -471,34 +533,38 @@ class InheritanceComputeTypeTest < ActiveRecord::TestCase
|
|
471
533
|
# And instantiate will find the existing constant rather than trying
|
472
534
|
# to require firm_on_the_fly.
|
473
535
|
assert_nothing_raised { assert_kind_of Firm::FirmOnTheFly, Firm.find(foo.id) }
|
536
|
+
assert_nothing_raised { assert_kind_of Firm::FirmOnTheFly, Firm.find_by!(id: foo.id) }
|
474
537
|
end
|
538
|
+
ensure
|
539
|
+
self.class.send(:remove_const, :FirmOnTheFly) rescue nil
|
540
|
+
Firm.send(:remove_const, :FirmOnTheFly) rescue nil
|
475
541
|
end
|
476
542
|
|
477
543
|
def test_sti_type_from_attributes_disabled_in_non_sti_class
|
478
|
-
phone = Shop::Product::Type.new(name:
|
479
|
-
product = Shop::Product.new(:
|
544
|
+
phone = Shop::Product::Type.new(name: "Phone")
|
545
|
+
product = Shop::Product.new(type: phone)
|
480
546
|
assert product.save
|
481
547
|
end
|
482
548
|
|
483
549
|
def test_inheritance_new_with_subclass_as_default
|
484
550
|
original_type = Company.columns_hash["type"].default
|
485
|
-
ActiveRecord::Base.connection.change_column_default :companies, :type,
|
551
|
+
ActiveRecord::Base.connection.change_column_default :companies, :type, "Firm"
|
486
552
|
Company.reset_column_information
|
487
553
|
|
488
554
|
firm = Company.new # without arguments
|
489
|
-
assert_equal
|
555
|
+
assert_equal "Firm", firm.type
|
490
556
|
assert_instance_of Firm, firm
|
491
557
|
|
492
|
-
firm = Company.new(firm_name:
|
493
|
-
assert_equal
|
558
|
+
firm = Company.new(firm_name: "Shri Hans Plastic") # with arguments
|
559
|
+
assert_equal "Firm", firm.type
|
494
560
|
assert_instance_of Firm, firm
|
495
561
|
|
496
562
|
client = Client.new
|
497
|
-
assert_equal
|
563
|
+
assert_equal "Client", client.type
|
498
564
|
assert_instance_of Client, client
|
499
565
|
|
500
|
-
firm = Company.new(type:
|
501
|
-
assert_equal
|
566
|
+
firm = Company.new(type: "Client") # overwrite the default type
|
567
|
+
assert_equal "Client", firm.type
|
502
568
|
assert_instance_of Client, firm
|
503
569
|
ensure
|
504
570
|
ActiveRecord::Base.connection.change_column_default :companies, :type, original_type
|
@@ -507,9 +573,8 @@ class InheritanceComputeTypeTest < ActiveRecord::TestCase
|
|
507
573
|
end
|
508
574
|
|
509
575
|
class InheritanceAttributeTest < ActiveRecord::TestCase
|
510
|
-
|
511
576
|
class Company < ActiveRecord::Base
|
512
|
-
self.table_name =
|
577
|
+
self.table_name = "companies"
|
513
578
|
attribute :type, :string, default: "InheritanceAttributeTest::Startup"
|
514
579
|
end
|
515
580
|
|
@@ -521,11 +586,11 @@ class InheritanceAttributeTest < ActiveRecord::TestCase
|
|
521
586
|
|
522
587
|
def test_inheritance_new_with_subclass_as_default
|
523
588
|
startup = Company.new # without arguments
|
524
|
-
assert_equal
|
589
|
+
assert_equal "InheritanceAttributeTest::Startup", startup.type
|
525
590
|
assert_instance_of Startup, startup
|
526
591
|
|
527
|
-
empire = Company.new(type:
|
528
|
-
assert_equal
|
592
|
+
empire = Company.new(type: "InheritanceAttributeTest::Empire") # without arguments
|
593
|
+
assert_equal "InheritanceAttributeTest::Empire", empire.type
|
529
594
|
assert_instance_of Empire, empire
|
530
595
|
end
|
531
596
|
end
|
@@ -533,7 +598,7 @@ end
|
|
533
598
|
class InheritanceAttributeMappingTest < ActiveRecord::TestCase
|
534
599
|
setup do
|
535
600
|
@old_registry = ActiveRecord::Type.registry
|
536
|
-
ActiveRecord::Type.registry = ActiveRecord::Type
|
601
|
+
ActiveRecord::Type.registry = ActiveRecord::Type.registry.dup
|
537
602
|
ActiveRecord::Type.register :omg_sti, InheritanceAttributeMappingTest::OmgStiType
|
538
603
|
Company.delete_all
|
539
604
|
Sponsor.delete_all
|
@@ -560,7 +625,7 @@ class InheritanceAttributeMappingTest < ActiveRecord::TestCase
|
|
560
625
|
end
|
561
626
|
|
562
627
|
class Company < ActiveRecord::Base
|
563
|
-
self.table_name =
|
628
|
+
self.table_name = "companies"
|
564
629
|
attribute :type, :omg_sti
|
565
630
|
end
|
566
631
|
|
@@ -568,18 +633,18 @@ class InheritanceAttributeMappingTest < ActiveRecord::TestCase
|
|
568
633
|
class Empire < Company; end
|
569
634
|
|
570
635
|
class Sponsor < ActiveRecord::Base
|
571
|
-
self.table_name =
|
636
|
+
self.table_name = "sponsors"
|
572
637
|
attribute :sponsorable_type, :omg_sti
|
573
638
|
|
574
639
|
belongs_to :sponsorable, polymorphic: true
|
575
640
|
end
|
576
641
|
|
577
642
|
def test_sti_with_custom_type
|
578
|
-
Startup.create! name:
|
579
|
-
Empire.create! name:
|
643
|
+
Startup.create! name: "a Startup"
|
644
|
+
Empire.create! name: "an Empire"
|
580
645
|
|
581
646
|
assert_equal [["a Startup", "omg_inheritance_attribute_mapping_test/startup"],
|
582
|
-
["an Empire", "omg_inheritance_attribute_mapping_test/empire"]], ActiveRecord::Base.connection.select_rows(
|
647
|
+
["an Empire", "omg_inheritance_attribute_mapping_test/empire"]], ActiveRecord::Base.connection.select_rows("SELECT name, type FROM companies").sort
|
583
648
|
assert_equal [["a Startup", "InheritanceAttributeMappingTest::Startup"],
|
584
649
|
["an Empire", "InheritanceAttributeMappingTest::Empire"]], Company.all.map { |a| [a.name, a.type] }.sort
|
585
650
|
|
@@ -588,19 +653,19 @@ class InheritanceAttributeMappingTest < ActiveRecord::TestCase
|
|
588
653
|
startup.save!
|
589
654
|
|
590
655
|
assert_equal [["a Startup", "omg_inheritance_attribute_mapping_test/empire"],
|
591
|
-
["an Empire", "omg_inheritance_attribute_mapping_test/empire"]], ActiveRecord::Base.connection.select_rows(
|
656
|
+
["an Empire", "omg_inheritance_attribute_mapping_test/empire"]], ActiveRecord::Base.connection.select_rows("SELECT name, type FROM companies").sort
|
592
657
|
|
593
658
|
assert_equal [["a Startup", "InheritanceAttributeMappingTest::Empire"],
|
594
659
|
["an Empire", "InheritanceAttributeMappingTest::Empire"]], Company.all.map { |a| [a.name, a.type] }.sort
|
595
660
|
end
|
596
661
|
|
597
662
|
def test_polymorphic_associations_custom_type
|
598
|
-
startup = Startup.create! name:
|
663
|
+
startup = Startup.create! name: "a Startup"
|
599
664
|
sponsor = Sponsor.create! sponsorable: startup
|
600
665
|
|
601
|
-
assert_equal ["omg_inheritance_attribute_mapping_test/company"], ActiveRecord::Base.connection.select_values(
|
666
|
+
assert_equal ["omg_inheritance_attribute_mapping_test/company"], ActiveRecord::Base.connection.select_values("SELECT sponsorable_type FROM sponsors")
|
602
667
|
|
603
|
-
sponsor = Sponsor.
|
668
|
+
sponsor = Sponsor.find(sponsor.id)
|
604
669
|
assert_equal startup, sponsor.sponsorable
|
605
670
|
end
|
606
671
|
end
|