ibm_db 5.2.0-x86-mingw32 → 5.4.0-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/README +1 -1
- data/debug.log +1 -0
- data/ext/Makefile +28 -24
- data/ext/ibm_db.c +66 -65
- 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 +1520 -1282
- data/lib/ibm_db.so +1 -0
- data/lib/mswin32/ibm_db.rb +3 -1
- data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
- data/lib/mswin32/rb3x/i386/ruby31/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 +192 -14
@@ -1,17 +1,19 @@
|
|
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
|
4
|
+
require "models/post"
|
5
|
+
require "models/topic"
|
6
|
+
require "models/comment"
|
7
|
+
require "models/reply"
|
8
|
+
require "models/author"
|
9
|
+
require "models/developer"
|
10
|
+
require "models/computer"
|
9
11
|
|
10
12
|
class NamedScopingTest < ActiveRecord::TestCase
|
11
13
|
fixtures :posts, :authors, :topics, :comments, :author_addresses
|
12
14
|
|
13
15
|
def test_implements_enumerable
|
14
|
-
|
16
|
+
assert_not_empty Topic.all
|
15
17
|
|
16
18
|
assert_equal Topic.all.to_a, Topic.base
|
17
19
|
assert_equal Topic.all.to_a, Topic.base.to_a
|
@@ -23,8 +25,8 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
23
25
|
all_posts = Topic.base
|
24
26
|
|
25
27
|
assert_queries(1) do
|
26
|
-
all_posts.collect
|
27
|
-
all_posts.collect
|
28
|
+
all_posts.collect { true }
|
29
|
+
all_posts.collect { true }
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
@@ -33,12 +35,12 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
33
35
|
all_posts.to_a
|
34
36
|
|
35
37
|
new_post = Topic.create!
|
36
|
-
|
37
|
-
|
38
|
+
assert_not_includes all_posts, new_post
|
39
|
+
assert_includes all_posts.reload, new_post
|
38
40
|
end
|
39
41
|
|
40
42
|
def test_delegates_finds_and_calculations_to_the_base_class
|
41
|
-
|
43
|
+
assert_not_empty Topic.all
|
42
44
|
|
43
45
|
assert_equal Topic.all.to_a, Topic.base.to_a
|
44
46
|
assert_equal Topic.first, Topic.base.first
|
@@ -46,26 +48,38 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
46
48
|
assert_equal Topic.average(:replies_count), Topic.base.average(:replies_count)
|
47
49
|
end
|
48
50
|
|
51
|
+
def test_calling_merge_at_first_in_scope
|
52
|
+
Topic.class_eval do
|
53
|
+
scope :calling_merge_at_first_in_scope, Proc.new { merge(Topic.replied) }
|
54
|
+
end
|
55
|
+
assert_equal Topic.calling_merge_at_first_in_scope.to_a, Topic.replied.to_a
|
56
|
+
end
|
57
|
+
|
49
58
|
def test_method_missing_priority_when_delegating
|
50
59
|
klazz = Class.new(ActiveRecord::Base) do
|
51
60
|
self.table_name = "topics"
|
52
|
-
scope :since, Proc.new { where(
|
53
|
-
scope :to, Proc.new { where(
|
61
|
+
scope :since, Proc.new { where("written_on >= ?", Time.now - 1.day) }
|
62
|
+
scope :to, Proc.new { where("written_on <= ?", Time.now) }
|
54
63
|
end
|
55
64
|
assert_equal klazz.to.since.to_a, klazz.since.to.to_a
|
56
65
|
end
|
57
66
|
|
67
|
+
def test_define_scope_for_reserved_words
|
68
|
+
assert Topic.true.all?(&:approved?), "all objects should be approved"
|
69
|
+
assert Topic.false.none?(&:approved?), "all objects should not be approved"
|
70
|
+
end
|
71
|
+
|
58
72
|
def test_scope_should_respond_to_own_methods_and_methods_of_the_proxy
|
59
|
-
|
60
|
-
|
61
|
-
|
73
|
+
assert_respond_to Topic.approved, :limit
|
74
|
+
assert_respond_to Topic.approved, :count
|
75
|
+
assert_respond_to Topic.approved, :length
|
62
76
|
end
|
63
77
|
|
64
78
|
def test_scopes_with_options_limit_finds_to_those_matching_the_criteria_specified
|
65
|
-
|
79
|
+
assert_not_empty Topic.all.merge!(where: { approved: true }).to_a
|
66
80
|
|
67
|
-
assert_equal Topic.all.merge!(:
|
68
|
-
assert_equal Topic.where(:
|
81
|
+
assert_equal Topic.all.merge!(where: { approved: true }).to_a, Topic.approved
|
82
|
+
assert_equal Topic.where(approved: true).count, Topic.approved.count
|
69
83
|
end
|
70
84
|
|
71
85
|
def test_scopes_with_string_name_can_be_composed
|
@@ -75,17 +89,17 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
75
89
|
end
|
76
90
|
|
77
91
|
def test_scopes_are_composable
|
78
|
-
assert_equal((approved = Topic.all.merge!(:
|
79
|
-
assert_equal((replied = Topic.all.merge!(:
|
80
|
-
|
81
|
-
|
92
|
+
assert_equal((approved = Topic.all.merge!(where: { approved: true }).to_a), Topic.approved)
|
93
|
+
assert_equal((replied = Topic.all.merge!(where: "replies_count > 0").to_a), Topic.replied)
|
94
|
+
assert_not (approved == replied)
|
95
|
+
assert_not_empty (approved & replied)
|
82
96
|
|
83
97
|
assert_equal approved & replied, Topic.approved.replied
|
84
98
|
end
|
85
99
|
|
86
100
|
def test_procedural_scopes
|
87
|
-
topics_written_before_the_third = Topic.where(
|
88
|
-
topics_written_before_the_second = Topic.where(
|
101
|
+
topics_written_before_the_third = Topic.where("written_on < ?", topics(:third).written_on)
|
102
|
+
topics_written_before_the_second = Topic.where("written_on < ?", topics(:second).written_on)
|
89
103
|
assert_not_equal topics_written_before_the_second, topics_written_before_the_third
|
90
104
|
|
91
105
|
assert_equal topics_written_before_the_third, Topic.written_before(topics(:third).written_on)
|
@@ -98,34 +112,62 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
98
112
|
assert_equal all_topics, Topic.written_before(nil)
|
99
113
|
end
|
100
114
|
|
115
|
+
def test_positional_scope_method
|
116
|
+
stats = {}
|
117
|
+
topics = Topic.all.scope_stats(stats)
|
118
|
+
|
119
|
+
assert_equal topics.count, stats[:count]
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_positional_klass_method
|
123
|
+
stats = {}
|
124
|
+
topics = Topic.all.klass_stats(stats)
|
125
|
+
|
126
|
+
assert_equal topics.count, stats[:count]
|
127
|
+
end
|
128
|
+
|
101
129
|
def test_scope_with_object
|
102
130
|
objects = Topic.with_object
|
103
131
|
assert_operator objects.length, :>, 0
|
104
|
-
assert objects.all?(&:approved?),
|
132
|
+
assert objects.all?(&:approved?), "all objects should be approved"
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_scope_with_kwargs
|
136
|
+
# Explicit true
|
137
|
+
topics = Topic.with_kwargs(approved: true)
|
138
|
+
assert_operator topics.length, :>, 0
|
139
|
+
assert topics.all?(&:approved?), "all objects should be approved"
|
140
|
+
|
141
|
+
# No arguments
|
142
|
+
topics = Topic.with_kwargs()
|
143
|
+
assert_operator topics.length, :>, 0
|
144
|
+
assert topics.none?(&:approved?), "all objects should not be approved"
|
105
145
|
end
|
106
146
|
|
107
147
|
def test_has_many_associations_have_access_to_scopes
|
108
148
|
assert_not_equal Post.containing_the_letter_a, authors(:david).posts
|
109
|
-
|
149
|
+
assert_not_empty Post.containing_the_letter_a
|
110
150
|
|
111
|
-
|
151
|
+
expected = authors(:david).posts & Post.containing_the_letter_a
|
152
|
+
assert_equal expected.sort_by(&:id), authors(:david).posts.containing_the_letter_a.sort_by(&:id)
|
112
153
|
end
|
113
154
|
|
114
155
|
def test_scope_with_STI
|
115
|
-
assert_equal 3,Post.containing_the_letter_a.count
|
116
|
-
assert_equal 1,SpecialPost.containing_the_letter_a.count
|
156
|
+
assert_equal 3, Post.containing_the_letter_a.count
|
157
|
+
assert_equal 1, SpecialPost.containing_the_letter_a.count
|
117
158
|
end
|
118
159
|
|
119
160
|
def test_has_many_through_associations_have_access_to_scopes
|
120
161
|
assert_not_equal Comment.containing_the_letter_e, authors(:david).comments
|
121
|
-
|
162
|
+
assert_not_empty Comment.containing_the_letter_e
|
122
163
|
|
123
|
-
|
164
|
+
expected = authors(:david).comments & Comment.containing_the_letter_e
|
165
|
+
assert_equal expected.sort_by(&:id), authors(:david).comments.containing_the_letter_e.sort_by(&:id)
|
124
166
|
end
|
125
167
|
|
126
168
|
def test_scopes_honor_current_scopes_from_when_defined
|
127
|
-
|
128
|
-
|
169
|
+
assert_not_empty Post.ranked_by_comments.limit_by(5)
|
170
|
+
assert_not_empty authors(:david).posts.ranked_by_comments.limit_by(5)
|
129
171
|
assert_not_equal Post.ranked_by_comments.limit_by(5), authors(:david).posts.ranked_by_comments.limit_by(5)
|
130
172
|
assert_not_equal Post.top(5), authors(:david).posts.top(5)
|
131
173
|
# Oracle sometimes sorts differently if WHERE condition is changed
|
@@ -140,27 +182,43 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
140
182
|
assert_equal "The scope body needs to be callable.", e.message
|
141
183
|
end
|
142
184
|
|
185
|
+
def test_scopes_name_is_relation_method
|
186
|
+
conflicts = [
|
187
|
+
:records,
|
188
|
+
:to_ary,
|
189
|
+
:to_sql,
|
190
|
+
:explain
|
191
|
+
]
|
192
|
+
|
193
|
+
conflicts.each do |name|
|
194
|
+
e = assert_raises ArgumentError do
|
195
|
+
Class.new(Post).class_eval { scope name, -> { where(approved: true) } }
|
196
|
+
end
|
197
|
+
assert_match(/You tried to define a scope named \"#{name}\" on the model/, e.message)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
143
201
|
def test_active_records_have_scope_named__all__
|
144
|
-
|
202
|
+
assert_not_empty Topic.all
|
145
203
|
|
146
204
|
assert_equal Topic.all.to_a, Topic.base
|
147
205
|
end
|
148
206
|
|
149
207
|
def test_active_records_have_scope_named__scoped__
|
150
208
|
scope = Topic.where("content LIKE '%Have%'")
|
151
|
-
|
209
|
+
assert_not_empty scope
|
152
210
|
|
153
211
|
assert_equal scope, Topic.all.merge!(where: "content LIKE '%Have%'")
|
154
212
|
end
|
155
213
|
|
156
214
|
def test_first_and_last_should_allow_integers_for_limit
|
157
|
-
assert_equal Topic.base.first(2), Topic.base.to_a.first(2)
|
215
|
+
assert_equal Topic.base.first(2), Topic.base.order("id").to_a.first(2)
|
158
216
|
assert_equal Topic.base.last(2), Topic.base.order("id").to_a.last(2)
|
159
217
|
end
|
160
218
|
|
161
219
|
def test_first_and_last_should_not_use_query_when_results_are_loaded
|
162
220
|
topics = Topic.base
|
163
|
-
topics.
|
221
|
+
topics.load # force load
|
164
222
|
assert_no_queries do
|
165
223
|
topics.first
|
166
224
|
topics.last
|
@@ -171,7 +229,7 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
171
229
|
topics = Topic.base
|
172
230
|
assert_queries(2) do
|
173
231
|
topics.empty? # use count query
|
174
|
-
topics.
|
232
|
+
topics.load # force load
|
175
233
|
topics.empty? # use loaded (no query)
|
176
234
|
end
|
177
235
|
end
|
@@ -180,7 +238,7 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
180
238
|
topics = Topic.base
|
181
239
|
assert_queries(2) do
|
182
240
|
topics.any? # use count query
|
183
|
-
topics.
|
241
|
+
topics.load # force load
|
184
242
|
topics.any? # use loaded (no query)
|
185
243
|
end
|
186
244
|
end
|
@@ -196,21 +254,21 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
196
254
|
|
197
255
|
def test_any_should_not_fire_query_if_scope_loaded
|
198
256
|
topics = Topic.base
|
199
|
-
topics.
|
257
|
+
topics.load # force load
|
200
258
|
assert_no_queries { assert topics.any? }
|
201
259
|
end
|
202
260
|
|
203
261
|
def test_model_class_should_respond_to_any
|
204
|
-
|
262
|
+
assert_predicate Topic, :any?
|
205
263
|
Topic.delete_all
|
206
|
-
|
264
|
+
assert_not_predicate Topic, :any?
|
207
265
|
end
|
208
266
|
|
209
267
|
def test_many_should_not_load_results
|
210
268
|
topics = Topic.base
|
211
269
|
assert_queries(2) do
|
212
270
|
topics.many? # use count query
|
213
|
-
topics.
|
271
|
+
topics.load # force load
|
214
272
|
topics.many? # use loaded (no query)
|
215
273
|
end
|
216
274
|
end
|
@@ -226,28 +284,28 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
226
284
|
|
227
285
|
def test_many_should_not_fire_query_if_scope_loaded
|
228
286
|
topics = Topic.base
|
229
|
-
topics.
|
287
|
+
topics.load # force load
|
230
288
|
assert_no_queries { assert topics.many? }
|
231
289
|
end
|
232
290
|
|
233
291
|
def test_many_should_return_false_if_none_or_one
|
234
|
-
topics = Topic.base.where(:
|
235
|
-
|
236
|
-
topics = Topic.base.where(:
|
237
|
-
|
292
|
+
topics = Topic.base.where(id: 0)
|
293
|
+
assert_not_predicate topics, :many?
|
294
|
+
topics = Topic.base.where(id: 1)
|
295
|
+
assert_not_predicate topics, :many?
|
238
296
|
end
|
239
297
|
|
240
298
|
def test_many_should_return_true_if_more_than_one
|
241
|
-
|
299
|
+
assert_predicate Topic.base, :many?
|
242
300
|
end
|
243
301
|
|
244
302
|
def test_model_class_should_respond_to_many
|
245
303
|
Topic.delete_all
|
246
|
-
|
304
|
+
assert_not_predicate Topic, :many?
|
247
305
|
Topic.create!
|
248
|
-
|
306
|
+
assert_not_predicate Topic, :many?
|
249
307
|
Topic.create!
|
250
|
-
|
308
|
+
assert_predicate Topic, :many?
|
251
309
|
end
|
252
310
|
|
253
311
|
def test_should_build_on_top_of_scope
|
@@ -273,7 +331,7 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
273
331
|
def test_should_build_on_top_of_chained_scopes
|
274
332
|
topic = Topic.approved.by_lifo.build({})
|
275
333
|
assert topic.approved
|
276
|
-
assert_equal
|
334
|
+
assert_equal "lifo", topic.author_name
|
277
335
|
end
|
278
336
|
|
279
337
|
def test_reserved_scope_names
|
@@ -320,12 +378,12 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
320
378
|
|
321
379
|
conflicts.each do |name|
|
322
380
|
e = assert_raises(ArgumentError, "scope `#{name}` should not be allowed") do
|
323
|
-
klass.class_eval { scope name, ->{ where(approved: true) } }
|
381
|
+
klass.class_eval { scope name, -> { where(approved: true) } }
|
324
382
|
end
|
325
383
|
assert_match(/You tried to define a scope named \"#{name}\" on the model/, e.message)
|
326
384
|
|
327
385
|
e = assert_raises(ArgumentError, "scope `#{name}` should not be allowed") do
|
328
|
-
subklass.class_eval { scope name, ->{ where(approved: true) } }
|
386
|
+
subklass.class_eval { scope name, -> { where(approved: true) } }
|
329
387
|
end
|
330
388
|
assert_match(/You tried to define a scope named \"#{name}\" on the model/, e.message)
|
331
389
|
end
|
@@ -333,12 +391,12 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
333
391
|
non_conflicts.each do |name|
|
334
392
|
assert_nothing_raised do
|
335
393
|
silence_warnings do
|
336
|
-
klass.class_eval { scope name, ->{ where(approved: true) } }
|
394
|
+
klass.class_eval { scope name, -> { where(approved: true) } }
|
337
395
|
end
|
338
396
|
end
|
339
397
|
|
340
398
|
assert_nothing_raised do
|
341
|
-
subklass.class_eval { scope name, ->{ where(approved: true) } }
|
399
|
+
subklass.class_eval { scope name, -> { where(approved: true) } }
|
342
400
|
end
|
343
401
|
end
|
344
402
|
end
|
@@ -349,11 +407,11 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
349
407
|
def test_spaces_in_scope_names
|
350
408
|
klass = Class.new(ActiveRecord::Base) do
|
351
409
|
self.table_name = "topics"
|
352
|
-
scope :"title containing space", -> { where("title LIKE '%
|
353
|
-
scope :approved, -> { where(:
|
410
|
+
scope :"title containing space", ->(space: " ") { where("title LIKE '%#{space}%'") }
|
411
|
+
scope :approved, -> { where(approved: true) }
|
354
412
|
end
|
355
|
-
assert_equal klass.
|
356
|
-
assert_equal klass.approved.
|
413
|
+
assert_equal klass.where("title LIKE '% %'"), klass.public_send(:"title containing space", space: " ")
|
414
|
+
assert_equal klass.approved.where("title LIKE '% %'"), klass.approved.public_send(:"title containing space", space: " ")
|
357
415
|
end
|
358
416
|
|
359
417
|
def test_find_all_should_behave_like_select
|
@@ -365,7 +423,7 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
365
423
|
end
|
366
424
|
|
367
425
|
def test_should_use_where_in_query_for_scope
|
368
|
-
assert_equal Developer.where(name:
|
426
|
+
assert_equal Developer.where(name: "Jamis").to_set, Developer.where(id: Developer.jamises).to_set
|
369
427
|
end
|
370
428
|
|
371
429
|
def test_size_should_use_count_when_results_are_not_loaded
|
@@ -377,7 +435,7 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
377
435
|
|
378
436
|
def test_size_should_use_length_when_results_are_loaded
|
379
437
|
topics = Topic.base
|
380
|
-
topics.
|
438
|
+
topics.load # force load
|
381
439
|
assert_no_queries do
|
382
440
|
topics.size # use loaded (no query)
|
383
441
|
end
|
@@ -396,16 +454,16 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
396
454
|
|
397
455
|
def test_chaining_applies_last_conditions_when_creating
|
398
456
|
post = Topic.rejected.new
|
399
|
-
|
457
|
+
assert_not_predicate post, :approved?
|
400
458
|
|
401
459
|
post = Topic.rejected.approved.new
|
402
|
-
|
460
|
+
assert_predicate post, :approved?
|
403
461
|
|
404
462
|
post = Topic.approved.rejected.new
|
405
|
-
|
463
|
+
assert_not_predicate post, :approved?
|
406
464
|
|
407
465
|
post = Topic.approved.rejected.approved.new
|
408
|
-
|
466
|
+
assert_predicate post, :approved?
|
409
467
|
end
|
410
468
|
|
411
469
|
def test_chaining_combines_conditions_when_searching
|
@@ -420,16 +478,30 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
420
478
|
assert_equal [posts(:sti_comments)], Post.with_special_comments.with_post(4).to_a.uniq
|
421
479
|
end
|
422
480
|
|
481
|
+
def test_class_method_in_scope
|
482
|
+
assert_equal topics(:second, :fourth), topics(:first).approved_replies.ordered
|
483
|
+
end
|
484
|
+
|
485
|
+
def test_chaining_doesnt_leak_conditions_to_another_scopes
|
486
|
+
expected = Topic.where(approved: false).where(id: Topic.children.select(:parent_id))
|
487
|
+
assert_equal expected.to_a, Topic.rejected.has_children.to_a
|
488
|
+
end
|
489
|
+
|
490
|
+
def test_nested_scoping
|
491
|
+
expected = Reply.approved
|
492
|
+
assert_equal expected.to_a, Topic.rejected.nested_scoping(expected)
|
493
|
+
end
|
494
|
+
|
423
495
|
def test_scopes_batch_finders
|
424
496
|
assert_equal 4, Topic.approved.count
|
425
497
|
|
426
498
|
assert_queries(5) do
|
427
|
-
Topic.approved.find_each(:
|
499
|
+
Topic.approved.find_each(batch_size: 1) { |t| assert t.approved? }
|
428
500
|
end
|
429
501
|
|
430
502
|
assert_queries(3) do
|
431
|
-
Topic.approved.find_in_batches(:
|
432
|
-
group.each {|t| assert t.approved? }
|
503
|
+
Topic.approved.find_in_batches(batch_size: 2) do |group|
|
504
|
+
group.each { |t| assert t.approved? }
|
433
505
|
end
|
434
506
|
end
|
435
507
|
end
|
@@ -454,14 +526,15 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
454
526
|
|
455
527
|
[:public_method, :protected_method, :private_method].each do |reserved_method|
|
456
528
|
assert Topic.respond_to?(reserved_method, true)
|
457
|
-
ActiveRecord::Base.logger
|
458
|
-
|
529
|
+
assert_called(ActiveRecord::Base.logger, :warn) do
|
530
|
+
silence_warnings { Topic.scope(reserved_method, -> { }) }
|
531
|
+
end
|
459
532
|
end
|
460
533
|
end
|
461
534
|
|
462
535
|
def test_scopes_on_relations
|
463
536
|
# Topic.replied
|
464
|
-
approved_topics = Topic.all.approved.order(
|
537
|
+
approved_topics = Topic.all.approved.order("id DESC")
|
465
538
|
assert_equal topics(:fifth), approved_topics.first
|
466
539
|
|
467
540
|
replied_approved_topics = approved_topics.replied
|
@@ -469,9 +542,9 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
469
542
|
end
|
470
543
|
|
471
544
|
def test_index_on_scope
|
472
|
-
approved = Topic.approved.order(
|
545
|
+
approved = Topic.approved.order("id ASC")
|
473
546
|
assert_equal topics(:second), approved[0]
|
474
|
-
|
547
|
+
assert_predicate approved, :loaded?
|
475
548
|
end
|
476
549
|
|
477
550
|
def test_nested_scopes_queries_size
|
@@ -510,7 +583,7 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
510
583
|
def test_scopes_to_get_newest
|
511
584
|
post = posts(:welcome)
|
512
585
|
old_last_comment = post.comments.newest
|
513
|
-
new_comment = post.comments.create(:
|
586
|
+
new_comment = post.comments.create(body: "My new comment")
|
514
587
|
assert_equal new_comment, post.comments.newest
|
515
588
|
assert_not_equal old_last_comment, post.comments.newest
|
516
589
|
end
|
@@ -520,8 +593,8 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
520
593
|
|
521
594
|
[:destroy_all, :reset, :delete_all].each do |method|
|
522
595
|
before = post.comments.containing_the_letter_e
|
523
|
-
post.association(:comments).
|
524
|
-
|
596
|
+
post.association(:comments).public_send(method)
|
597
|
+
assert_not_same before, post.comments.containing_the_letter_e, "CollectionAssociation##{method} should reset the named scopes cache"
|
525
598
|
end
|
526
599
|
end
|
527
600
|
|
@@ -533,29 +606,44 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
533
606
|
|
534
607
|
def test_eager_default_scope_relations_are_remove
|
535
608
|
klass = Class.new(ActiveRecord::Base)
|
536
|
-
klass.table_name =
|
609
|
+
klass.table_name = "posts"
|
537
610
|
|
538
611
|
assert_raises(ArgumentError) do
|
539
|
-
klass.send(:default_scope, klass.where(:
|
612
|
+
klass.send(:default_scope, klass.where(id: posts(:welcome).id))
|
540
613
|
end
|
541
614
|
end
|
542
615
|
|
543
616
|
def test_subclass_merges_scopes_properly
|
544
|
-
assert_equal 1, SpecialComment.where(body:
|
617
|
+
assert_equal 1, SpecialComment.where(body: "go crazy").created.count
|
618
|
+
end
|
619
|
+
|
620
|
+
def test_model_class_should_respond_to_extending
|
621
|
+
assert_raises OopsError do
|
622
|
+
Comment.unscoped.oops_comments.destroy_all
|
623
|
+
end
|
545
624
|
end
|
546
625
|
|
547
626
|
def test_model_class_should_respond_to_none
|
548
|
-
|
627
|
+
assert_not_predicate Topic, :none?
|
549
628
|
Topic.delete_all
|
550
|
-
|
629
|
+
assert_predicate Topic, :none?
|
551
630
|
end
|
552
631
|
|
553
632
|
def test_model_class_should_respond_to_one
|
554
|
-
|
633
|
+
assert_not_predicate Topic, :one?
|
555
634
|
Topic.delete_all
|
556
|
-
|
635
|
+
assert_not_predicate Topic, :one?
|
557
636
|
Topic.create!
|
558
|
-
|
637
|
+
assert_predicate Topic, :one?
|
559
638
|
end
|
560
639
|
|
640
|
+
def test_scope_with_annotation
|
641
|
+
Topic.class_eval do
|
642
|
+
scope :including_annotate_in_scope, Proc.new { annotate("from-scope") }
|
643
|
+
end
|
644
|
+
|
645
|
+
assert_sql(%r{/\* from-scope \*/}) do
|
646
|
+
assert Topic.including_annotate_in_scope.to_a, Topic.all.to_a
|
647
|
+
end
|
648
|
+
end
|
561
649
|
end
|