ibm_db 5.1.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 +14 -14
- data/ext/extconf.rb +4 -4
- 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 +11 -11
- 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/ibm_db.rb +7 -3
- data/lib/mswin32/rb2x/i386/ruby25/ibm_db.so +0 -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 +196 -11
@@ -1,30 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
26
|
-
require
|
27
|
-
require 'models/recipe'
|
4
|
+
require "models/topic"
|
5
|
+
require "models/customer"
|
6
|
+
require "models/company"
|
7
|
+
require "models/company_in_module"
|
8
|
+
require "models/ship"
|
9
|
+
require "models/pirate"
|
10
|
+
require "models/price_estimate"
|
11
|
+
require "models/essay"
|
12
|
+
require "models/author"
|
13
|
+
require "models/organization"
|
14
|
+
require "models/post"
|
15
|
+
require "models/tagging"
|
16
|
+
require "models/category"
|
17
|
+
require "models/book"
|
18
|
+
require "models/subscriber"
|
19
|
+
require "models/subscription"
|
20
|
+
require "models/tag"
|
21
|
+
require "models/sponsor"
|
22
|
+
require "models/edge"
|
23
|
+
require "models/hotel"
|
24
|
+
require "models/chef"
|
25
|
+
require "models/department"
|
26
|
+
require "models/cake_designer"
|
27
|
+
require "models/drink_designer"
|
28
|
+
require "models/recipe"
|
28
29
|
|
29
30
|
class ReflectionTest < ActiveRecord::TestCase
|
30
31
|
include ActiveRecord::Reflection
|
@@ -65,13 +66,18 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
65
66
|
|
66
67
|
def test_column_string_type_and_limit
|
67
68
|
assert_equal :string, @first.column_for_attribute("title").type
|
69
|
+
assert_equal :string, @first.column_for_attribute(:title).type
|
70
|
+
assert_equal :string, @first.type_for_attribute("title").type
|
71
|
+
assert_equal :string, @first.type_for_attribute(:title).type
|
72
|
+
assert_equal :string, @first.type_for_attribute("heading").type
|
73
|
+
assert_equal :string, @first.type_for_attribute(:heading).type
|
68
74
|
assert_equal 250, @first.column_for_attribute("title").limit
|
69
75
|
end
|
70
76
|
|
71
77
|
def test_column_null_not_null
|
72
78
|
subscriber = Subscriber.first
|
73
79
|
assert subscriber.column_for_attribute("name").null
|
74
|
-
|
80
|
+
assert_not subscriber.column_for_attribute("nick").null
|
75
81
|
end
|
76
82
|
|
77
83
|
def test_human_name_for_column
|
@@ -80,14 +86,20 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
80
86
|
|
81
87
|
def test_integer_columns
|
82
88
|
assert_equal :integer, @first.column_for_attribute("id").type
|
89
|
+
assert_equal :integer, @first.column_for_attribute(:id).type
|
90
|
+
assert_equal :integer, @first.type_for_attribute("id").type
|
91
|
+
assert_equal :integer, @first.type_for_attribute(:id).type
|
83
92
|
end
|
84
93
|
|
85
94
|
def test_non_existent_columns_return_null_object
|
86
95
|
column = @first.column_for_attribute("attribute_that_doesnt_exist")
|
87
96
|
assert_instance_of ActiveRecord::ConnectionAdapters::NullColumn, column
|
88
97
|
assert_equal "attribute_that_doesnt_exist", column.name
|
89
|
-
|
90
|
-
|
98
|
+
assert_nil column.sql_type
|
99
|
+
assert_nil column.type
|
100
|
+
|
101
|
+
column = @first.column_for_attribute(:attribute_that_doesnt_exist)
|
102
|
+
assert_instance_of ActiveRecord::ConnectionAdapters::NullColumn, column
|
91
103
|
end
|
92
104
|
|
93
105
|
def test_non_existent_types_are_identity_types
|
@@ -97,10 +109,21 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
97
109
|
assert_equal object, type.deserialize(object)
|
98
110
|
assert_equal object, type.cast(object)
|
99
111
|
assert_equal object, type.serialize(object)
|
112
|
+
|
113
|
+
type = @first.type_for_attribute(:attribute_that_doesnt_exist)
|
114
|
+
assert_equal object, type.deserialize(object)
|
115
|
+
assert_equal object, type.cast(object)
|
116
|
+
assert_equal object, type.serialize(object)
|
100
117
|
end
|
101
118
|
|
102
119
|
def test_reflection_klass_for_nested_class_name
|
103
|
-
reflection = ActiveRecord::Reflection.create(
|
120
|
+
reflection = ActiveRecord::Reflection.create(
|
121
|
+
:has_many,
|
122
|
+
nil,
|
123
|
+
nil,
|
124
|
+
{ class_name: "MyApplication::Business::Company" },
|
125
|
+
Customer
|
126
|
+
)
|
104
127
|
assert_nothing_raised do
|
105
128
|
assert_equal MyApplication::Business::Company, reflection.klass
|
106
129
|
end
|
@@ -108,28 +131,28 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
108
131
|
|
109
132
|
def test_irregular_reflection_class_name
|
110
133
|
ActiveSupport::Inflector.inflections do |inflect|
|
111
|
-
inflect.irregular
|
134
|
+
inflect.irregular "plural_irregular", "plurales_irregulares"
|
112
135
|
end
|
113
|
-
reflection = ActiveRecord::Reflection.create(:has_many,
|
114
|
-
assert_equal
|
136
|
+
reflection = ActiveRecord::Reflection.create(:has_many, "plurales_irregulares", nil, {}, ActiveRecord::Base)
|
137
|
+
assert_equal "PluralIrregular", reflection.class_name
|
115
138
|
end
|
116
139
|
|
117
140
|
def test_aggregation_reflection
|
118
141
|
reflection_for_address = AggregateReflection.new(
|
119
|
-
:address, nil, { :
|
142
|
+
:address, nil, { mapping: [ %w(address_street street), %w(address_city city), %w(address_country country) ] }, Customer
|
120
143
|
)
|
121
144
|
|
122
145
|
reflection_for_balance = AggregateReflection.new(
|
123
|
-
:balance, nil, { :
|
146
|
+
:balance, nil, { class_name: "Money", mapping: %w(balance amount) }, Customer
|
124
147
|
)
|
125
148
|
|
126
149
|
reflection_for_gps_location = AggregateReflection.new(
|
127
|
-
:gps_location, nil, {
|
150
|
+
:gps_location, nil, {}, Customer
|
128
151
|
)
|
129
152
|
|
130
|
-
|
131
|
-
|
132
|
-
|
153
|
+
assert_includes Customer.reflect_on_all_aggregations, reflection_for_gps_location
|
154
|
+
assert_includes Customer.reflect_on_all_aggregations, reflection_for_balance
|
155
|
+
assert_includes Customer.reflect_on_all_aggregations, reflection_for_address
|
133
156
|
|
134
157
|
assert_equal reflection_for_address, Customer.reflect_on_aggregation(:address)
|
135
158
|
|
@@ -142,37 +165,37 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
142
165
|
expected = Pirate.reflect_on_all_associations.select { |r| r.options[:autosave] }
|
143
166
|
received = Pirate.reflect_on_all_autosave_associations
|
144
167
|
|
145
|
-
|
168
|
+
assert_not_empty received
|
146
169
|
assert_not_equal Pirate.reflect_on_all_associations.length, received.length
|
147
170
|
assert_equal expected, received
|
148
171
|
end
|
149
172
|
|
150
173
|
def test_has_many_reflection
|
151
|
-
reflection_for_clients = ActiveRecord::Reflection.create(:has_many, :clients, nil, { :
|
174
|
+
reflection_for_clients = ActiveRecord::Reflection.create(:has_many, :clients, nil, { order: "id", dependent: :destroy }, Firm)
|
152
175
|
|
153
176
|
assert_equal reflection_for_clients, Firm.reflect_on_association(:clients)
|
154
177
|
|
155
178
|
assert_equal Client, Firm.reflect_on_association(:clients).klass
|
156
|
-
assert_equal
|
179
|
+
assert_equal "companies", Firm.reflect_on_association(:clients).table_name
|
157
180
|
|
158
181
|
assert_equal Client, Firm.reflect_on_association(:clients_of_firm).klass
|
159
|
-
assert_equal
|
182
|
+
assert_equal "companies", Firm.reflect_on_association(:clients_of_firm).table_name
|
160
183
|
end
|
161
184
|
|
162
185
|
def test_has_one_reflection
|
163
|
-
reflection_for_account = ActiveRecord::Reflection.create(:has_one, :account, nil, { :
|
186
|
+
reflection_for_account = ActiveRecord::Reflection.create(:has_one, :account, nil, { foreign_key: "firm_id", dependent: :destroy }, Firm)
|
164
187
|
assert_equal reflection_for_account, Firm.reflect_on_association(:account)
|
165
188
|
|
166
189
|
assert_equal Account, Firm.reflect_on_association(:account).klass
|
167
|
-
assert_equal
|
190
|
+
assert_equal "accounts", Firm.reflect_on_association(:account).table_name
|
168
191
|
end
|
169
192
|
|
170
193
|
def test_belongs_to_inferred_foreign_key_from_assoc_name
|
171
194
|
Company.belongs_to :foo
|
172
195
|
assert_equal "foo_id", Company.reflect_on_association(:foo).foreign_key
|
173
|
-
Company.belongs_to :bar, :
|
196
|
+
Company.belongs_to :bar, class_name: "Xyzzy"
|
174
197
|
assert_equal "bar_id", Company.reflect_on_association(:bar).foreign_key
|
175
|
-
Company.belongs_to :baz, :
|
198
|
+
Company.belongs_to :baz, class_name: "Xyzzy", foreign_key: "xyzzy_id"
|
176
199
|
assert_equal "xyzzy_id", Company.reflect_on_association(:baz).foreign_key
|
177
200
|
end
|
178
201
|
|
@@ -181,45 +204,45 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
181
204
|
|
182
205
|
assert_reflection MyApplication::Business::Firm,
|
183
206
|
:clients_of_firm,
|
184
|
-
:
|
185
|
-
:
|
186
|
-
:
|
207
|
+
klass: MyApplication::Business::Client,
|
208
|
+
class_name: "Client",
|
209
|
+
table_name: "companies"
|
187
210
|
|
188
211
|
assert_reflection MyApplication::Billing::Account,
|
189
212
|
:firm,
|
190
|
-
:
|
191
|
-
:
|
192
|
-
:
|
213
|
+
klass: MyApplication::Business::Firm,
|
214
|
+
class_name: "MyApplication::Business::Firm",
|
215
|
+
table_name: "companies"
|
193
216
|
|
194
217
|
assert_reflection MyApplication::Billing::Account,
|
195
218
|
:qualified_billing_firm,
|
196
|
-
:
|
197
|
-
:
|
198
|
-
:
|
219
|
+
klass: MyApplication::Billing::Firm,
|
220
|
+
class_name: "MyApplication::Billing::Firm",
|
221
|
+
table_name: "companies"
|
199
222
|
|
200
223
|
assert_reflection MyApplication::Billing::Account,
|
201
224
|
:unqualified_billing_firm,
|
202
|
-
:
|
203
|
-
:
|
204
|
-
:
|
225
|
+
klass: MyApplication::Billing::Firm,
|
226
|
+
class_name: "Firm",
|
227
|
+
table_name: "companies"
|
205
228
|
|
206
229
|
assert_reflection MyApplication::Billing::Account,
|
207
230
|
:nested_qualified_billing_firm,
|
208
|
-
:
|
209
|
-
:
|
210
|
-
:
|
231
|
+
klass: MyApplication::Billing::Nested::Firm,
|
232
|
+
class_name: "MyApplication::Billing::Nested::Firm",
|
233
|
+
table_name: "companies"
|
211
234
|
|
212
235
|
assert_reflection MyApplication::Billing::Account,
|
213
236
|
:nested_unqualified_billing_firm,
|
214
|
-
:
|
215
|
-
:
|
216
|
-
:
|
237
|
+
klass: MyApplication::Billing::Nested::Firm,
|
238
|
+
class_name: "Nested::Firm",
|
239
|
+
table_name: "companies"
|
217
240
|
ensure
|
218
241
|
ActiveRecord::Base.store_full_sti_class = true
|
219
242
|
end
|
220
243
|
|
221
244
|
def test_reflection_should_not_raise_error_when_compared_to_other_object
|
222
|
-
assert_not_equal Object.new, Firm._reflections[
|
245
|
+
assert_not_equal Object.new, Firm._reflections["clients"]
|
223
246
|
end
|
224
247
|
|
225
248
|
def test_reflections_should_return_keys_as_strings
|
@@ -227,7 +250,7 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
227
250
|
end
|
228
251
|
|
229
252
|
def test_has_and_belongs_to_many_reflection
|
230
|
-
assert_equal :has_and_belongs_to_many, Category.reflections[
|
253
|
+
assert_equal :has_and_belongs_to_many, Category.reflections["posts"].macro
|
231
254
|
assert_equal :posts, Category.reflect_on_all_associations(:has_and_belongs_to_many).first.name
|
232
255
|
end
|
233
256
|
|
@@ -246,46 +269,35 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
246
269
|
assert_equal expected, actual
|
247
270
|
end
|
248
271
|
|
249
|
-
def test_scope_chain
|
250
|
-
expected = [
|
251
|
-
[Tagging.reflect_on_association(:tag).scope, Post.reflect_on_association(:first_blue_tags).scope],
|
252
|
-
[Post.reflect_on_association(:first_taggings).scope],
|
253
|
-
[Author.reflect_on_association(:misc_posts).scope]
|
254
|
-
]
|
255
|
-
actual = Author.reflect_on_association(:misc_post_first_blue_tags).scope_chain
|
256
|
-
assert_equal expected, actual
|
257
|
-
|
258
|
-
expected = [
|
259
|
-
[
|
260
|
-
Tagging.reflect_on_association(:blue_tag).scope,
|
261
|
-
Post.reflect_on_association(:first_blue_tags_2).scope,
|
262
|
-
Author.reflect_on_association(:misc_post_first_blue_tags_2).scope
|
263
|
-
],
|
264
|
-
[],
|
265
|
-
[]
|
266
|
-
]
|
267
|
-
actual = Author.reflect_on_association(:misc_post_first_blue_tags_2).scope_chain
|
268
|
-
assert_equal expected, actual
|
269
|
-
end
|
270
|
-
|
271
272
|
def test_scope_chain_does_not_interfere_with_hmt_with_polymorphic_case
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
273
|
+
hotel = Hotel.create!
|
274
|
+
department = hotel.departments.create!
|
275
|
+
department.chefs.create!(employable: CakeDesigner.create!)
|
276
|
+
department.chefs.create!(employable: DrinkDesigner.create!)
|
276
277
|
|
277
|
-
assert_equal 1,
|
278
|
-
assert_equal 1,
|
279
|
-
assert_equal
|
278
|
+
assert_equal 1, hotel.cake_designers.size
|
279
|
+
assert_equal 1, hotel.cake_designers.count
|
280
|
+
assert_equal 1, hotel.drink_designers.size
|
281
|
+
assert_equal 1, hotel.drink_designers.count
|
282
|
+
assert_equal 2, hotel.chefs.size
|
283
|
+
assert_equal 2, hotel.chefs.count
|
280
284
|
end
|
281
285
|
|
282
286
|
def test_scope_chain_does_not_interfere_with_hmt_with_polymorphic_case_and_sti
|
283
|
-
|
284
|
-
|
287
|
+
hotel = Hotel.create!
|
288
|
+
hotel.mocktail_designers << MocktailDesigner.create!
|
285
289
|
|
286
|
-
assert_equal 1,
|
287
|
-
assert_equal 1,
|
288
|
-
assert_equal 1,
|
290
|
+
assert_equal 1, hotel.mocktail_designers.size
|
291
|
+
assert_equal 1, hotel.mocktail_designers.count
|
292
|
+
assert_equal 1, hotel.chef_lists.size
|
293
|
+
assert_equal 1, hotel.chef_lists.count
|
294
|
+
|
295
|
+
hotel.mocktail_designers = []
|
296
|
+
|
297
|
+
assert_equal 0, hotel.mocktail_designers.size
|
298
|
+
assert_equal 0, hotel.mocktail_designers.count
|
299
|
+
assert_equal 0, hotel.chef_lists.size
|
300
|
+
assert_equal 0, hotel.chef_lists.count
|
289
301
|
end
|
290
302
|
|
291
303
|
def test_scope_chain_of_polymorphic_association_does_not_leak_into_other_hmt_associations
|
@@ -305,18 +317,18 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
305
317
|
end
|
306
318
|
|
307
319
|
def test_nested?
|
308
|
-
|
309
|
-
|
320
|
+
assert_not_predicate Author.reflect_on_association(:comments), :nested?
|
321
|
+
assert_predicate Author.reflect_on_association(:tags), :nested?
|
310
322
|
|
311
323
|
# Only goes :through once, but the through_reflection is a has_and_belongs_to_many, so this is
|
312
324
|
# a nested through association
|
313
|
-
|
325
|
+
assert_predicate Category.reflect_on_association(:post_comments), :nested?
|
314
326
|
end
|
315
327
|
|
316
328
|
def test_association_primary_key
|
317
329
|
# Normal association
|
318
330
|
assert_equal "id", Author.reflect_on_association(:posts).association_primary_key.to_s
|
319
|
-
assert_equal "
|
331
|
+
assert_equal "id", Author.reflect_on_association(:essay).association_primary_key.to_s
|
320
332
|
assert_equal "name", Essay.reflect_on_association(:writer).association_primary_key.to_s
|
321
333
|
|
322
334
|
# Through association (uses the :primary_key option from the source reflection)
|
@@ -325,15 +337,6 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
325
337
|
assert_equal "custom_primary_key", Author.reflect_on_association(:tags_with_primary_key).association_primary_key.to_s # nested
|
326
338
|
end
|
327
339
|
|
328
|
-
def test_association_primary_key_type
|
329
|
-
# Normal Association
|
330
|
-
assert_equal :integer, Author.reflect_on_association(:posts).association_primary_key_type.type
|
331
|
-
assert_equal :string, Author.reflect_on_association(:essay).association_primary_key_type.type
|
332
|
-
|
333
|
-
# Through Association
|
334
|
-
assert_equal :string, Author.reflect_on_association(:essay_category).association_primary_key_type.type
|
335
|
-
end
|
336
|
-
|
337
340
|
def test_association_primary_key_raises_when_missing_primary_key
|
338
341
|
reflection = ActiveRecord::Reflection.create(:has_many, :edge, nil, {}, Author)
|
339
342
|
assert_raises(ActiveRecord::UnknownPrimaryKey) { reflection.association_primary_key }
|
@@ -354,42 +357,49 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
354
357
|
assert_raises(ActiveRecord::UnknownPrimaryKey) { reflection.active_record_primary_key }
|
355
358
|
end
|
356
359
|
|
360
|
+
def test_type
|
361
|
+
assert_equal "taggable_type", Post.reflect_on_association(:taggings).type.to_s
|
362
|
+
assert_equal "imageable_class", Post.reflect_on_association(:images).type.to_s
|
363
|
+
assert_nil Post.reflect_on_association(:readers).type
|
364
|
+
end
|
365
|
+
|
357
366
|
def test_foreign_type
|
358
367
|
assert_equal "sponsorable_type", Sponsor.reflect_on_association(:sponsorable).foreign_type.to_s
|
359
368
|
assert_equal "sponsorable_type", Sponsor.reflect_on_association(:thing).foreign_type.to_s
|
369
|
+
assert_nil Sponsor.reflect_on_association(:sponsor_club).foreign_type
|
360
370
|
end
|
361
371
|
|
362
372
|
def test_collection_association
|
363
|
-
|
364
|
-
|
373
|
+
assert_predicate Pirate.reflect_on_association(:birds), :collection?
|
374
|
+
assert_predicate Pirate.reflect_on_association(:parrots), :collection?
|
365
375
|
|
366
|
-
|
367
|
-
|
376
|
+
assert_not_predicate Pirate.reflect_on_association(:ship), :collection?
|
377
|
+
assert_not_predicate Ship.reflect_on_association(:pirate), :collection?
|
368
378
|
end
|
369
379
|
|
370
380
|
def test_default_association_validation
|
371
|
-
|
381
|
+
assert_predicate ActiveRecord::Reflection.create(:has_many, :clients, nil, {}, Firm), :validate?
|
372
382
|
|
373
|
-
|
374
|
-
|
383
|
+
assert_not_predicate ActiveRecord::Reflection.create(:has_one, :client, nil, {}, Firm), :validate?
|
384
|
+
assert_not_predicate ActiveRecord::Reflection.create(:belongs_to, :client, nil, {}, Firm), :validate?
|
375
385
|
end
|
376
386
|
|
377
387
|
def test_always_validate_association_if_explicit
|
378
|
-
|
379
|
-
|
380
|
-
|
388
|
+
assert_predicate ActiveRecord::Reflection.create(:has_one, :client, nil, { validate: true }, Firm), :validate?
|
389
|
+
assert_predicate ActiveRecord::Reflection.create(:belongs_to, :client, nil, { validate: true }, Firm), :validate?
|
390
|
+
assert_predicate ActiveRecord::Reflection.create(:has_many, :clients, nil, { validate: true }, Firm), :validate?
|
381
391
|
end
|
382
392
|
|
383
393
|
def test_validate_association_if_autosave
|
384
|
-
|
385
|
-
|
386
|
-
|
394
|
+
assert_predicate ActiveRecord::Reflection.create(:has_one, :client, nil, { autosave: true }, Firm), :validate?
|
395
|
+
assert_predicate ActiveRecord::Reflection.create(:belongs_to, :client, nil, { autosave: true }, Firm), :validate?
|
396
|
+
assert_predicate ActiveRecord::Reflection.create(:has_many, :clients, nil, { autosave: true }, Firm), :validate?
|
387
397
|
end
|
388
398
|
|
389
399
|
def test_never_validate_association_if_explicit
|
390
|
-
|
391
|
-
|
392
|
-
|
400
|
+
assert_not_predicate ActiveRecord::Reflection.create(:has_one, :client, nil, { autosave: true, validate: false }, Firm), :validate?
|
401
|
+
assert_not_predicate ActiveRecord::Reflection.create(:belongs_to, :client, nil, { autosave: true, validate: false }, Firm), :validate?
|
402
|
+
assert_not_predicate ActiveRecord::Reflection.create(:has_many, :clients, nil, { autosave: true, validate: false }, Firm), :validate?
|
393
403
|
end
|
394
404
|
|
395
405
|
def test_foreign_key
|
@@ -397,73 +407,74 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
397
407
|
assert_equal "category_id", Post.reflect_on_association(:categorizations).foreign_key.to_s
|
398
408
|
end
|
399
409
|
|
400
|
-
def test_through_reflection_scope_chain_does_not_modify_other_reflections
|
401
|
-
orig_conds = Post.reflect_on_association(:first_blue_tags_2).scope_chain.inspect
|
402
|
-
Author.reflect_on_association(:misc_post_first_blue_tags_2).scope_chain
|
403
|
-
assert_equal orig_conds, Post.reflect_on_association(:first_blue_tags_2).scope_chain.inspect
|
404
|
-
end
|
405
|
-
|
406
410
|
def test_symbol_for_class_name
|
407
411
|
assert_equal Client, Firm.reflect_on_association(:unsorted_clients_with_symbol).klass
|
408
412
|
end
|
409
413
|
|
414
|
+
def test_class_for_class_name
|
415
|
+
error = assert_raises(ArgumentError) do
|
416
|
+
ActiveRecord::Reflection.create(:has_many, :clients, nil, { class_name: Client }, Firm)
|
417
|
+
end
|
418
|
+
assert_equal "A class was passed to `:class_name` but we are expecting a string.", error.message
|
419
|
+
end
|
420
|
+
|
410
421
|
def test_join_table
|
411
|
-
category = Struct.new(:table_name, :pluralize_table_names).new(
|
412
|
-
product = Struct.new(:table_name, :pluralize_table_names).new(
|
422
|
+
category = Struct.new(:table_name, :pluralize_table_names).new("categories", true)
|
423
|
+
product = Struct.new(:table_name, :pluralize_table_names).new("products", true)
|
413
424
|
|
414
425
|
reflection = ActiveRecord::Reflection.create(:has_many, :categories, nil, {}, product)
|
415
426
|
reflection.stub(:klass, category) do
|
416
|
-
assert_equal
|
427
|
+
assert_equal "categories_products", reflection.join_table
|
417
428
|
end
|
418
429
|
|
419
430
|
reflection = ActiveRecord::Reflection.create(:has_many, :products, nil, {}, category)
|
420
431
|
reflection.stub(:klass, product) do
|
421
|
-
assert_equal
|
432
|
+
assert_equal "categories_products", reflection.join_table
|
422
433
|
end
|
423
434
|
end
|
424
435
|
|
425
436
|
def test_join_table_with_common_prefix
|
426
|
-
category = Struct.new(:table_name, :pluralize_table_names).new(
|
427
|
-
product = Struct.new(:table_name, :pluralize_table_names).new(
|
437
|
+
category = Struct.new(:table_name, :pluralize_table_names).new("catalog_categories", true)
|
438
|
+
product = Struct.new(:table_name, :pluralize_table_names).new("catalog_products", true)
|
428
439
|
|
429
440
|
reflection = ActiveRecord::Reflection.create(:has_many, :categories, nil, {}, product)
|
430
441
|
reflection.stub(:klass, category) do
|
431
|
-
assert_equal
|
442
|
+
assert_equal "catalog_categories_products", reflection.join_table
|
432
443
|
end
|
433
444
|
|
434
445
|
reflection = ActiveRecord::Reflection.create(:has_many, :products, nil, {}, category)
|
435
446
|
reflection.stub(:klass, product) do
|
436
|
-
assert_equal
|
447
|
+
assert_equal "catalog_categories_products", reflection.join_table
|
437
448
|
end
|
438
449
|
end
|
439
450
|
|
440
451
|
def test_join_table_with_different_prefix
|
441
|
-
category = Struct.new(:table_name, :pluralize_table_names).new(
|
442
|
-
page = Struct.new(:table_name, :pluralize_table_names).new(
|
452
|
+
category = Struct.new(:table_name, :pluralize_table_names).new("catalog_categories", true)
|
453
|
+
page = Struct.new(:table_name, :pluralize_table_names).new("content_pages", true)
|
443
454
|
|
444
455
|
reflection = ActiveRecord::Reflection.create(:has_many, :categories, nil, {}, page)
|
445
456
|
reflection.stub(:klass, category) do
|
446
|
-
assert_equal
|
457
|
+
assert_equal "catalog_categories_content_pages", reflection.join_table
|
447
458
|
end
|
448
459
|
|
449
460
|
reflection = ActiveRecord::Reflection.create(:has_many, :pages, nil, {}, category)
|
450
461
|
reflection.stub(:klass, page) do
|
451
|
-
assert_equal
|
462
|
+
assert_equal "catalog_categories_content_pages", reflection.join_table
|
452
463
|
end
|
453
464
|
end
|
454
465
|
|
455
466
|
def test_join_table_can_be_overridden
|
456
|
-
category = Struct.new(:table_name, :pluralize_table_names).new(
|
457
|
-
product = Struct.new(:table_name, :pluralize_table_names).new(
|
467
|
+
category = Struct.new(:table_name, :pluralize_table_names).new("categories", true)
|
468
|
+
product = Struct.new(:table_name, :pluralize_table_names).new("products", true)
|
458
469
|
|
459
|
-
reflection = ActiveRecord::Reflection.create(:has_many, :categories, nil, { :
|
470
|
+
reflection = ActiveRecord::Reflection.create(:has_many, :categories, nil, { join_table: "product_categories" }, product)
|
460
471
|
reflection.stub(:klass, category) do
|
461
|
-
assert_equal
|
472
|
+
assert_equal "product_categories", reflection.join_table
|
462
473
|
end
|
463
474
|
|
464
|
-
reflection = ActiveRecord::Reflection.create(:has_many, :products, nil, { :
|
475
|
+
reflection = ActiveRecord::Reflection.create(:has_many, :products, nil, { join_table: "product_categories" }, category)
|
465
476
|
reflection.stub(:klass, product) do
|
466
|
-
assert_equal
|
477
|
+
assert_equal "product_categories", reflection.join_table
|
467
478
|
end
|
468
479
|
end
|
469
480
|
|
@@ -483,7 +494,7 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
483
494
|
department.chefs.create!
|
484
495
|
|
485
496
|
assert_nothing_raised do
|
486
|
-
assert_equal department.chefs, Hotel.includes([
|
497
|
+
assert_equal department.chefs, Hotel.includes(["departments" => "chefs"]).first.chefs
|
487
498
|
end
|
488
499
|
end
|
489
500
|
|
@@ -503,7 +514,7 @@ class ReflectionTest < ActiveRecord::TestCase
|
|
503
514
|
def assert_reflection(klass, association, options)
|
504
515
|
assert reflection = klass.reflect_on_association(association)
|
505
516
|
options.each do |method, value|
|
506
|
-
assert_equal(value, reflection.
|
517
|
+
assert_equal(value, reflection.public_send(method))
|
507
518
|
end
|
508
519
|
end
|
509
520
|
end
|