ibm_db 3.0.0-x86-mingw32 → 3.0.1-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES +4 -0
- data/MANIFEST +14 -14
- data/README +225 -225
- data/ext/Makefile.nt32 +181 -181
- data/ext/Makefile.nt32.191 +212 -212
- data/ext/OLD/extconf.rb +264 -0
- data/ext/{extconf_MacOS.rb → OLD/extconf_MacOS.rb} +269 -269
- data/ext/extconf.rb +291 -264
- data/ext/ibm_db.c +2 -2
- data/ext/ruby_ibm_db.h +241 -241
- data/ext/ruby_ibm_db_cli.h +500 -500
- data/init.rb +41 -41
- data/lib/IBM_DB.rb +27 -27
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +4 -4
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
- data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
- data/lib/mswin32/ibm_db.rb +115 -115
- data/test/active_record/connection_adapters/fake_adapter.rb +46 -0
- data/test/assets/example.log +1 -0
- data/test/assets/flowers.jpg +0 -0
- data/test/assets/test.txt +1 -0
- data/test/cases/adapter_test.rb +261 -207
- data/test/cases/aggregations_test.rb +158 -0
- data/test/cases/ar_schema_test.rb +161 -0
- data/test/cases/associations/association_scope_test.rb +21 -0
- data/test/cases/associations/belongs_to_associations_test.rb +1029 -711
- data/test/cases/associations/callbacks_test.rb +192 -0
- data/test/cases/associations/cascaded_eager_loading_test.rb +188 -181
- data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -0
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -0
- data/test/cases/associations/eager_load_nested_include_test.rb +128 -0
- data/test/cases/associations/eager_singularization_test.rb +148 -0
- data/test/cases/associations/eager_test.rb +1411 -0
- data/test/cases/associations/extension_test.rb +82 -0
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +932 -851
- data/test/cases/associations/has_many_associations_test.rb +2162 -0
- data/test/cases/associations/has_many_through_associations_test.rb +1204 -0
- data/test/cases/associations/has_one_associations_test.rb +610 -0
- data/test/cases/associations/has_one_through_associations_test.rb +380 -0
- data/test/cases/associations/inner_join_association_test.rb +139 -0
- data/test/cases/associations/inverse_associations_test.rb +693 -0
- data/test/cases/associations/join_model_test.rb +754 -743
- data/test/cases/associations/nested_through_associations_test.rb +579 -0
- data/test/cases/associations/required_test.rb +82 -0
- data/test/cases/associations_test.rb +380 -0
- data/test/cases/attribute_decorators_test.rb +125 -0
- data/test/cases/attribute_methods/read_test.rb +60 -0
- data/test/cases/attribute_methods/serialization_test.rb +29 -0
- data/test/cases/attribute_methods_test.rb +952 -822
- data/test/cases/attribute_set_test.rb +200 -0
- data/test/cases/attribute_test.rb +180 -0
- data/test/cases/attributes_test.rb +136 -0
- data/test/cases/autosave_association_test.rb +1595 -0
- data/test/cases/base_test.rb +1638 -2133
- data/test/cases/batches_test.rb +212 -0
- data/test/cases/binary_test.rb +52 -0
- data/test/cases/bind_parameter_test.rb +100 -0
- data/test/cases/calculations_test.rb +646 -482
- data/test/cases/callbacks_test.rb +543 -0
- data/test/cases/clone_test.rb +40 -0
- data/test/cases/coders/yaml_column_test.rb +63 -0
- data/test/cases/column_alias_test.rb +17 -0
- data/test/cases/column_definition_test.rb +123 -0
- data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -0
- data/test/cases/connection_adapters/connection_handler_test.rb +53 -0
- data/test/cases/connection_adapters/connection_specification_test.rb +12 -0
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -0
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -0
- data/test/cases/connection_adapters/quoting_test.rb +13 -0
- data/test/cases/connection_adapters/schema_cache_test.rb +56 -0
- data/test/cases/connection_adapters/type_lookup_test.rb +110 -0
- data/test/cases/connection_management_test.rb +122 -0
- data/test/cases/connection_pool_test.rb +346 -0
- data/test/cases/connection_specification/resolver_test.rb +116 -0
- data/test/cases/core_test.rb +112 -0
- data/test/cases/counter_cache_test.rb +209 -0
- data/test/cases/custom_locking_test.rb +17 -0
- data/test/cases/database_statements_test.rb +19 -0
- data/test/cases/date_time_test.rb +61 -0
- data/test/cases/defaults_test.rb +223 -0
- data/test/cases/dirty_test.rb +775 -0
- data/test/cases/disconnected_test.rb +28 -0
- data/test/cases/dup_test.rb +157 -0
- data/test/cases/enum_test.rb +290 -0
- data/test/cases/explain_subscriber_test.rb +64 -0
- data/test/cases/explain_test.rb +76 -0
- data/test/cases/finder_respond_to_test.rb +60 -0
- data/test/cases/finder_test.rb +1166 -0
- data/test/cases/fixture_set/file_test.rb +138 -0
- data/test/cases/fixtures_test.rb +897 -0
- data/test/cases/forbidden_attributes_protection_test.rb +99 -0
- data/test/cases/habtm_destroy_order_test.rb +61 -0
- data/test/cases/helper.rb +210 -0
- data/test/cases/hot_compatibility_test.rb +54 -0
- data/test/cases/i18n_test.rb +45 -0
- data/test/cases/inheritance_test.rb +375 -0
- data/test/cases/integration_test.rb +139 -0
- data/test/cases/invalid_connection_test.rb +22 -0
- data/test/cases/invalid_date_test.rb +32 -0
- data/test/cases/invertible_migration_test.rb +295 -0
- data/test/cases/json_serialization_test.rb +302 -0
- data/test/cases/locking_test.rb +477 -0
- data/test/cases/log_subscriber_test.rb +136 -0
- data/test/cases/migration/change_schema_test - Copy.rb +448 -0
- data/test/cases/migration/change_schema_test.rb +472 -0
- data/test/cases/migration/change_table_test.rb +224 -0
- data/test/cases/migration/column_attributes_test.rb +192 -0
- data/test/cases/migration/column_positioning_test.rb +56 -0
- data/test/cases/migration/columns_test.rb +304 -0
- data/test/cases/migration/command_recorder_test.rb +305 -0
- data/test/cases/migration/create_join_table_test.rb +148 -0
- data/test/cases/migration/foreign_key_test - Changed.rb +325 -0
- data/test/cases/migration/foreign_key_test.rb +360 -0
- data/test/cases/migration/helper.rb +39 -0
- data/test/cases/migration/index_test.rb +216 -0
- data/test/cases/migration/logger_test.rb +36 -0
- data/test/cases/migration/pending_migrations_test.rb +53 -0
- data/test/cases/migration/references_foreign_key_test.rb +214 -0
- data/test/cases/migration/references_index_test.rb +101 -0
- data/test/cases/migration/references_statements_test.rb +116 -0
- data/test/cases/migration/rename_table_test.rb +93 -0
- data/test/cases/migration/table_and_index_test.rb +24 -0
- data/test/cases/migration_test.rb +959 -2408
- data/test/cases/migrator_test.rb +388 -0
- data/test/cases/mixin_test.rb +70 -0
- data/test/cases/modules_test.rb +173 -0
- data/test/cases/multiparameter_attributes_test.rb +350 -0
- data/test/cases/multiple_db_test.rb +115 -0
- data/test/cases/nested_attributes_test.rb +1057 -0
- data/test/cases/nested_attributes_with_callbacks_test.rb +144 -0
- data/test/cases/persistence_test.rb +909 -642
- data/test/cases/pooled_connections_test.rb +81 -0
- data/test/cases/primary_keys_test.rb +237 -0
- data/test/cases/query_cache_test.rb +326 -257
- data/test/cases/quoting_test.rb +156 -0
- data/test/cases/readonly_test.rb +118 -0
- data/test/cases/reaper_test.rb +85 -0
- data/test/cases/reflection_test.rb +454 -0
- data/test/cases/relation/delegation_test.rb +68 -0
- data/test/cases/relation/merging_test.rb +161 -0
- data/test/cases/relation/mutation_test.rb +165 -0
- data/test/cases/relation/predicate_builder_test.rb +14 -0
- data/test/cases/relation/where_chain_test.rb +181 -0
- data/test/cases/relation/where_test.rb +300 -0
- data/test/cases/relation/where_test2.rb +36 -0
- data/test/cases/relation_test.rb +297 -0
- data/test/cases/relations_test.rb +1815 -1182
- data/test/cases/reload_models_test.rb +22 -0
- data/test/cases/result_test.rb +80 -0
- data/test/cases/sanitize_test.rb +83 -0
- data/test/cases/schema_dumper_test.rb +463 -256
- data/test/cases/scoping/default_scoping_test.rb +454 -0
- data/test/cases/scoping/named_scoping_test.rb +524 -0
- data/test/cases/scoping/relation_scoping_test.rb +357 -0
- data/test/cases/serialization_test.rb +104 -0
- data/test/cases/serialized_attribute_test.rb +277 -0
- data/test/cases/statement_cache_test.rb +98 -0
- data/test/cases/store_test.rb +194 -0
- data/test/cases/tasks/database_tasks_test.rb +396 -0
- data/test/cases/tasks/mysql_rake_test.rb +311 -0
- data/test/cases/tasks/postgresql_rake_test.rb +245 -0
- data/test/cases/tasks/sqlite_rake_test.rb +193 -0
- data/test/cases/test_case.rb +123 -0
- data/test/cases/timestamp_test.rb +468 -0
- data/test/cases/transaction_callbacks_test.rb +452 -300
- data/test/cases/transaction_isolation_test.rb +106 -0
- data/test/cases/transactions_test.rb +817 -0
- data/test/cases/type/decimal_test.rb +51 -0
- data/test/cases/type/integer_test.rb +121 -0
- data/test/cases/type/string_test.rb +36 -0
- data/test/cases/type/type_map_test.rb +177 -0
- data/test/cases/type/unsigned_integer_test.rb +18 -0
- data/test/cases/types_test.rb +141 -0
- data/test/cases/unconnected_test.rb +33 -0
- data/test/cases/validations/association_validation_test.rb +86 -0
- data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -0
- data/test/cases/validations/i18n_validation_test.rb +90 -0
- data/test/cases/validations/length_validation_test.rb +47 -0
- data/test/cases/validations/presence_validation_test.rb +68 -0
- data/test/cases/validations/uniqueness_validation_test.rb +434 -299
- data/test/cases/validations_repair_helper.rb +23 -0
- data/test/cases/validations_test.rb +165 -0
- data/test/cases/view_test.rb +113 -0
- data/test/cases/xml_serialization_test.rb +457 -408
- data/test/cases/yaml_serialization_test.rb +86 -0
- data/test/config.rb +5 -0
- data/test/config.yml +154 -154
- data/test/connections/native_ibm_db/connection.rb +43 -43
- data/test/fixtures/accounts.yml +29 -0
- data/test/fixtures/admin/accounts.yml +2 -0
- data/test/fixtures/admin/randomly_named_a9.yml +7 -0
- data/test/fixtures/admin/randomly_named_b0.yml +7 -0
- data/test/fixtures/admin/users.yml +10 -0
- data/test/fixtures/all/admin +1 -0
- data/test/fixtures/all/developers.yml +0 -0
- data/test/fixtures/all/people.yml +0 -0
- data/test/fixtures/all/tasks.yml +0 -0
- data/test/fixtures/author_addresses.yml +18 -0
- data/test/fixtures/author_favorites.yml +4 -0
- data/test/fixtures/authors.yml +23 -0
- data/test/fixtures/binaries.yml +133 -0
- data/test/fixtures/books.yml +11 -0
- data/test/fixtures/bulbs.yml +5 -0
- data/test/fixtures/cars.yml +9 -0
- data/test/fixtures/categories.yml +19 -0
- data/test/fixtures/categories/special_categories.yml +9 -0
- data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
- data/test/fixtures/categories_ordered.yml +7 -0
- data/test/fixtures/categories_posts.yml +31 -0
- data/test/fixtures/categorizations.yml +23 -0
- data/test/fixtures/clubs.yml +8 -0
- data/test/fixtures/collections.yml +3 -0
- data/test/fixtures/colleges.yml +3 -0
- data/test/fixtures/comments.yml +65 -0
- data/test/fixtures/companies.yml +67 -0
- data/test/fixtures/computers.yml +10 -0
- data/test/fixtures/courses.yml +8 -0
- data/test/fixtures/customers.yml +26 -0
- data/test/fixtures/dashboards.yml +6 -0
- data/test/fixtures/developers.yml +22 -0
- data/test/fixtures/developers_projects.yml +17 -0
- data/test/fixtures/dog_lovers.yml +7 -0
- data/test/fixtures/dogs.yml +4 -0
- data/test/fixtures/doubloons.yml +3 -0
- data/test/fixtures/edges.yml +5 -0
- data/test/fixtures/entrants.yml +14 -0
- data/test/fixtures/essays.yml +6 -0
- data/test/fixtures/faces.yml +11 -0
- data/test/fixtures/fk_test_has_fk.yml +3 -0
- data/test/fixtures/fk_test_has_pk.yml +2 -0
- data/test/fixtures/friendships.yml +4 -0
- data/test/fixtures/funny_jokes.yml +10 -0
- data/test/fixtures/interests.yml +33 -0
- data/test/fixtures/items.yml +3 -0
- data/test/fixtures/jobs.yml +7 -0
- data/test/fixtures/legacy_things.yml +3 -0
- data/test/fixtures/mateys.yml +4 -0
- data/test/fixtures/member_details.yml +8 -0
- data/test/fixtures/member_types.yml +6 -0
- data/test/fixtures/members.yml +11 -0
- data/test/fixtures/memberships.yml +34 -0
- data/test/fixtures/men.yml +5 -0
- data/test/fixtures/minimalistics.yml +2 -0
- data/test/fixtures/minivans.yml +5 -0
- data/test/fixtures/mixed_case_monkeys.yml +6 -0
- data/test/fixtures/mixins.yml +29 -0
- data/test/fixtures/movies.yml +7 -0
- data/test/fixtures/naked/csv/accounts.csv +1 -0
- data/test/fixtures/naked/yml/accounts.yml +1 -0
- data/test/fixtures/naked/yml/companies.yml +1 -0
- data/test/fixtures/naked/yml/courses.yml +1 -0
- data/test/fixtures/organizations.yml +5 -0
- data/test/fixtures/other_topics.yml +42 -0
- data/test/fixtures/owners.yml +9 -0
- data/test/fixtures/parrots.yml +27 -0
- data/test/fixtures/parrots_pirates.yml +7 -0
- data/test/fixtures/people.yml +24 -0
- data/test/fixtures/peoples_treasures.yml +3 -0
- data/test/fixtures/pets.yml +19 -0
- data/test/fixtures/pirates.yml +12 -0
- data/test/fixtures/posts.yml +80 -0
- data/test/fixtures/price_estimates.yml +7 -0
- data/test/fixtures/products.yml +4 -0
- data/test/fixtures/projects.yml +7 -0
- data/test/fixtures/randomly_named_a9.yml +7 -0
- data/test/fixtures/ratings.yml +14 -0
- data/test/fixtures/readers.yml +11 -0
- data/test/fixtures/references.yml +17 -0
- data/test/fixtures/reserved_words/distinct.yml +5 -0
- data/test/fixtures/reserved_words/distinct_select.yml +11 -0
- data/test/fixtures/reserved_words/group.yml +14 -0
- data/test/fixtures/reserved_words/select.yml +8 -0
- data/test/fixtures/reserved_words/values.yml +7 -0
- data/test/fixtures/ships.yml +6 -0
- data/test/fixtures/speedometers.yml +8 -0
- data/test/fixtures/sponsors.yml +12 -0
- data/test/fixtures/string_key_objects.yml +7 -0
- data/test/fixtures/subscribers.yml +11 -0
- data/test/fixtures/subscriptions.yml +12 -0
- data/test/fixtures/taggings.yml +78 -0
- data/test/fixtures/tags.yml +11 -0
- data/test/fixtures/tasks.yml +7 -0
- data/test/fixtures/teapots.yml +3 -0
- data/test/fixtures/to_be_linked/accounts.yml +2 -0
- data/test/fixtures/to_be_linked/users.yml +10 -0
- data/test/fixtures/topics.yml +49 -0
- data/test/fixtures/toys.yml +14 -0
- data/test/fixtures/traffic_lights.yml +10 -0
- data/test/fixtures/treasures.yml +10 -0
- data/test/fixtures/uuid_children.yml +3 -0
- data/test/fixtures/uuid_parents.yml +2 -0
- data/test/fixtures/variants.yml +4 -0
- data/test/fixtures/vegetables.yml +20 -0
- data/test/fixtures/vertices.yml +4 -0
- data/test/fixtures/warehouse_things.yml +3 -0
- data/test/fixtures/zines.yml +5 -0
- data/test/ibm_db_test.rb +24 -24
- data/test/migrations/10_urban/9_add_expressions.rb +11 -0
- data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -0
- data/test/migrations/magic/1_currencies_have_symbols.rb +12 -0
- data/test/migrations/missing/1000_people_have_middle_names.rb +9 -0
- data/test/migrations/missing/1_people_have_last_names.rb +9 -0
- data/test/migrations/missing/3_we_need_reminders.rb +12 -0
- data/test/migrations/missing/4_innocent_jointable.rb +12 -0
- data/test/migrations/rename/1_we_need_things.rb +11 -0
- data/test/migrations/rename/2_rename_things.rb +9 -0
- data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -0
- data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -0
- data/test/migrations/to_copy2/1_create_articles.rb +7 -0
- data/test/migrations/to_copy2/2_create_comments.rb +7 -0
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -0
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -0
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -0
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -0
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -0
- data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -0
- data/test/migrations/valid/2_we_need_reminders.rb +12 -0
- data/test/migrations/valid/3_innocent_jointable.rb +12 -0
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -0
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -0
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -0
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -0
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -0
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -0
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -0
- data/test/models/admin.rb +5 -0
- data/test/models/admin/account.rb +3 -0
- data/test/models/admin/randomly_named_c1.rb +3 -0
- data/test/models/admin/user.rb +40 -0
- data/test/models/aircraft.rb +4 -0
- data/test/models/arunit2_model.rb +3 -0
- data/test/models/author.rb +212 -0
- data/test/models/auto_id.rb +4 -0
- data/test/models/autoloadable/extra_firm.rb +2 -0
- data/test/models/binary.rb +2 -0
- data/test/models/bird.rb +12 -0
- data/test/models/book.rb +18 -0
- data/test/models/boolean.rb +2 -0
- data/test/models/bulb.rb +51 -0
- data/test/models/cake_designer.rb +3 -0
- data/test/models/car.rb +26 -0
- data/test/models/carrier.rb +2 -0
- data/test/models/categorization.rb +19 -0
- data/test/models/category.rb +35 -0
- data/test/models/chef.rb +3 -0
- data/test/models/citation.rb +3 -0
- data/test/models/club.rb +23 -0
- data/test/models/college.rb +10 -0
- data/test/models/column.rb +3 -0
- data/test/models/column_name.rb +3 -0
- data/test/models/comment.rb +64 -0
- data/test/models/company.rb +225 -0
- data/test/models/company_in_module.rb +98 -0
- data/test/models/computer.rb +3 -0
- data/test/models/contact.rb +41 -0
- data/test/models/contract.rb +20 -0
- data/test/models/country.rb +7 -0
- data/test/models/course.rb +6 -0
- data/test/models/customer.rb +77 -0
- data/test/models/customer_carrier.rb +14 -0
- data/test/models/dashboard.rb +3 -0
- data/test/models/default.rb +2 -0
- data/test/models/department.rb +4 -0
- data/test/models/developer.rb +252 -0
- data/test/models/dog.rb +5 -0
- data/test/models/dog_lover.rb +5 -0
- data/test/models/doubloon.rb +12 -0
- data/test/models/drink_designer.rb +3 -0
- data/test/models/edge.rb +5 -0
- data/test/models/electron.rb +5 -0
- data/test/models/engine.rb +4 -0
- data/test/models/entrant.rb +3 -0
- data/test/models/essay.rb +5 -0
- data/test/models/event.rb +3 -0
- data/test/models/eye.rb +37 -0
- data/test/models/face.rb +9 -0
- data/test/models/friendship.rb +6 -0
- data/test/models/guid.rb +2 -0
- data/test/models/hotel.rb +6 -0
- data/test/models/image.rb +3 -0
- data/test/models/interest.rb +5 -0
- data/test/models/invoice.rb +4 -0
- data/test/models/item.rb +7 -0
- data/test/models/job.rb +7 -0
- data/test/models/joke.rb +7 -0
- data/test/models/keyboard.rb +3 -0
- data/test/models/legacy_thing.rb +3 -0
- data/test/models/lesson.rb +11 -0
- data/test/models/line_item.rb +3 -0
- data/test/models/liquid.rb +4 -0
- data/test/models/man.rb +11 -0
- data/test/models/matey.rb +4 -0
- data/test/models/member.rb +41 -0
- data/test/models/member_detail.rb +7 -0
- data/test/models/member_type.rb +3 -0
- data/test/models/membership.rb +35 -0
- data/test/models/minimalistic.rb +2 -0
- data/test/models/minivan.rb +9 -0
- data/test/models/mixed_case_monkey.rb +3 -0
- data/test/models/molecule.rb +6 -0
- data/test/models/movie.rb +5 -0
- data/test/models/order.rb +4 -0
- data/test/models/organization.rb +14 -0
- data/test/models/owner.rb +34 -0
- data/test/models/parrot.rb +29 -0
- data/test/models/person.rb +143 -0
- data/test/models/personal_legacy_thing.rb +4 -0
- data/test/models/pet.rb +15 -0
- data/test/models/pirate.rb +92 -0
- data/test/models/possession.rb +3 -0
- data/test/models/post.rb +264 -0
- data/test/models/price_estimate.rb +4 -0
- data/test/models/professor.rb +5 -0
- data/test/models/project.rb +29 -0
- data/test/models/publisher.rb +2 -0
- data/test/models/publisher/article.rb +4 -0
- data/test/models/publisher/magazine.rb +3 -0
- data/test/models/randomly_named_c1.rb +3 -0
- data/test/models/rating.rb +4 -0
- data/test/models/reader.rb +23 -0
- data/test/models/record.rb +2 -0
- data/test/models/reference.rb +22 -0
- data/test/models/reply.rb +61 -0
- data/test/models/ship.rb +33 -0
- data/test/models/ship_part.rb +8 -0
- data/test/models/shop.rb +17 -0
- data/test/models/shop_account.rb +6 -0
- data/test/models/speedometer.rb +6 -0
- data/test/models/sponsor.rb +7 -0
- data/test/models/string_key_object.rb +3 -0
- data/test/models/student.rb +4 -0
- data/test/models/subject.rb +16 -0
- data/test/models/subscriber.rb +8 -0
- data/test/models/subscription.rb +4 -0
- data/test/models/tag.rb +7 -0
- data/test/models/tagging.rb +13 -0
- data/test/models/task.rb +5 -0
- data/test/models/topic.rb +124 -0
- data/test/models/toy.rb +6 -0
- data/test/models/traffic_light.rb +4 -0
- data/test/models/treasure.rb +14 -0
- data/test/models/treaty.rb +7 -0
- data/test/models/tyre.rb +11 -0
- data/test/models/uuid_child.rb +3 -0
- data/test/models/uuid_parent.rb +3 -0
- data/test/models/vegetables.rb +24 -0
- data/test/models/vehicle.rb +7 -0
- data/test/models/vertex.rb +9 -0
- data/test/models/warehouse_thing.rb +5 -5
- data/test/models/wheel.rb +3 -0
- data/test/models/without_table.rb +3 -0
- data/test/models/zine.rb +3 -0
- data/test/schema/mysql2_specific_schema.rb +58 -0
- data/test/schema/mysql_specific_schema.rb +70 -0
- data/test/schema/oracle_specific_schema.rb +43 -0
- data/test/schema/postgresql_specific_schema.rb +202 -0
- data/test/schema/schema.rb +938 -751
- data/test/schema/sqlite_specific_schema.rb +22 -0
- data/test/support/config.rb +43 -0
- data/test/support/connection.rb +22 -0
- data/test/support/connection_helper.rb +14 -0
- data/test/support/ddl_helper.rb +8 -0
- data/test/support/schema_dumping_helper.rb +20 -0
- metadata +444 -18
@@ -0,0 +1,454 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
require 'models/post'
|
3
|
+
require 'models/comment'
|
4
|
+
require 'models/developer'
|
5
|
+
require 'models/computer'
|
6
|
+
require 'models/vehicle'
|
7
|
+
|
8
|
+
class DefaultScopingTest < ActiveRecord::TestCase
|
9
|
+
fixtures :developers, :posts, :comments
|
10
|
+
|
11
|
+
def test_default_scope
|
12
|
+
expected = Developer.all.merge!(:order => 'salary DESC').to_a.collect { |dev| dev.salary }
|
13
|
+
received = DeveloperOrderedBySalary.all.collect { |dev| dev.salary }
|
14
|
+
assert_equal expected, received
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_default_scope_as_class_method
|
18
|
+
assert_equal [developers(:david).becomes(ClassMethodDeveloperCalledDavid)], ClassMethodDeveloperCalledDavid.all
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_default_scope_as_class_method_referencing_scope
|
22
|
+
assert_equal [developers(:david).becomes(ClassMethodReferencingScopeDeveloperCalledDavid)], ClassMethodReferencingScopeDeveloperCalledDavid.all
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_default_scope_as_block_referencing_scope
|
26
|
+
assert_equal [developers(:david).becomes(LazyBlockReferencingScopeDeveloperCalledDavid)], LazyBlockReferencingScopeDeveloperCalledDavid.all
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_default_scope_with_lambda
|
30
|
+
assert_equal [developers(:david).becomes(LazyLambdaDeveloperCalledDavid)], LazyLambdaDeveloperCalledDavid.all
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_default_scope_with_block
|
34
|
+
assert_equal [developers(:david).becomes(LazyBlockDeveloperCalledDavid)], LazyBlockDeveloperCalledDavid.all
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_default_scope_with_callable
|
38
|
+
assert_equal [developers(:david).becomes(CallableDeveloperCalledDavid)], CallableDeveloperCalledDavid.all
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_default_scope_is_unscoped_on_find
|
42
|
+
assert_equal 1, DeveloperCalledDavid.count
|
43
|
+
assert_equal 11, DeveloperCalledDavid.unscoped.count
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_default_scope_is_unscoped_on_create
|
47
|
+
assert_nil DeveloperCalledJamis.unscoped.create!.name
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_default_scope_with_conditions_string
|
51
|
+
assert_equal Developer.where(name: 'David').map(&:id).sort, DeveloperCalledDavid.all.map(&:id).sort
|
52
|
+
assert_equal nil, DeveloperCalledDavid.create!.name
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_default_scope_with_conditions_hash
|
56
|
+
assert_equal Developer.where(name: 'Jamis').map(&:id).sort, DeveloperCalledJamis.all.map(&:id).sort
|
57
|
+
assert_equal 'Jamis', DeveloperCalledJamis.create!.name
|
58
|
+
end
|
59
|
+
|
60
|
+
unless in_memory_db?
|
61
|
+
def test_default_scoping_with_threads
|
62
|
+
2.times do
|
63
|
+
Thread.new {
|
64
|
+
assert DeveloperOrderedBySalary.all.to_sql.include?('salary DESC')
|
65
|
+
DeveloperOrderedBySalary.connection.close
|
66
|
+
}.join
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_default_scope_with_inheritance
|
72
|
+
wheres = InheritedPoorDeveloperCalledJamis.all.where_values_hash
|
73
|
+
assert_equal "Jamis", wheres['name']
|
74
|
+
assert_equal 50000, wheres['salary']
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_default_scope_with_module_includes
|
78
|
+
wheres = ModuleIncludedPoorDeveloperCalledJamis.all.where_values_hash
|
79
|
+
assert_equal "Jamis", wheres['name']
|
80
|
+
assert_equal 50000, wheres['salary']
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_default_scope_with_multiple_calls
|
84
|
+
wheres = MultiplePoorDeveloperCalledJamis.all.where_values_hash
|
85
|
+
assert_equal "Jamis", wheres['name']
|
86
|
+
assert_equal 50000, wheres['salary']
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_scope_overwrites_default
|
90
|
+
expected = Developer.all.merge!(order: 'salary DESC, name DESC').to_a.collect { |dev| dev.name }
|
91
|
+
received = DeveloperOrderedBySalary.by_name.to_a.collect { |dev| dev.name }
|
92
|
+
assert_equal expected, received
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_reorder_overrides_default_scope_order
|
96
|
+
expected = Developer.order('name DESC').collect { |dev| dev.name }
|
97
|
+
received = DeveloperOrderedBySalary.reorder('name DESC').collect { |dev| dev.name }
|
98
|
+
assert_equal expected, received
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_order_after_reorder_combines_orders
|
102
|
+
expected = Developer.order('name DESC, id DESC').collect { |dev| [dev.name, dev.id] }
|
103
|
+
received = Developer.order('name ASC').reorder('name DESC').order('id DESC').collect { |dev| [dev.name, dev.id] }
|
104
|
+
assert_equal expected, received
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_unscope_overrides_default_scope
|
108
|
+
expected = Developer.all.collect { |dev| [dev.name, dev.id] }
|
109
|
+
received = DeveloperCalledJamis.unscope(:where).collect { |dev| [dev.name, dev.id] }
|
110
|
+
assert_equal expected, received
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_unscope_after_reordering_and_combining
|
114
|
+
expected = Developer.order('id DESC, name DESC').collect { |dev| [dev.name, dev.id] }
|
115
|
+
received = DeveloperOrderedBySalary.reorder('name DESC').unscope(:order).order('id DESC, name DESC').collect { |dev| [dev.name, dev.id] }
|
116
|
+
assert_equal expected, received
|
117
|
+
|
118
|
+
expected_2 = Developer.all.collect { |dev| [dev.name, dev.id] }
|
119
|
+
received_2 = Developer.order('id DESC, name DESC').unscope(:order).collect { |dev| [dev.name, dev.id] }
|
120
|
+
assert_equal expected_2, received_2
|
121
|
+
|
122
|
+
expected_3 = Developer.all.collect { |dev| [dev.name, dev.id] }
|
123
|
+
received_3 = Developer.reorder('name DESC').unscope(:order).collect { |dev| [dev.name, dev.id] }
|
124
|
+
assert_equal expected_3, received_3
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_unscope_with_where_attributes
|
128
|
+
expected = Developer.order('salary DESC').collect(&:name)
|
129
|
+
received = DeveloperOrderedBySalary.where(name: 'David').unscope(where: :name).collect(&:name)
|
130
|
+
assert_equal expected, received
|
131
|
+
|
132
|
+
expected_2 = Developer.order('salary DESC').collect(&:name)
|
133
|
+
received_2 = DeveloperOrderedBySalary.select("id").where("name" => "Jamis").unscope({:where => :name}, :select).collect(&:name)
|
134
|
+
assert_equal expected_2, received_2
|
135
|
+
|
136
|
+
expected_3 = Developer.order('salary DESC').collect(&:name)
|
137
|
+
received_3 = DeveloperOrderedBySalary.select("id").where("name" => "Jamis").unscope(:select, :where).collect(&:name)
|
138
|
+
assert_equal expected_3, received_3
|
139
|
+
|
140
|
+
expected_4 = Developer.order('salary DESC').collect(&:name)
|
141
|
+
received_4 = DeveloperOrderedBySalary.where.not("name" => "Jamis").unscope(where: :name).collect(&:name)
|
142
|
+
assert_equal expected_4, received_4
|
143
|
+
|
144
|
+
expected_5 = Developer.order('salary DESC').collect(&:name)
|
145
|
+
received_5 = DeveloperOrderedBySalary.where.not("name" => ["Jamis", "David"]).unscope(where: :name).collect(&:name)
|
146
|
+
assert_equal expected_5, received_5
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_unscope_comparison_where_clauses
|
150
|
+
# unscoped for WHERE (`developers`.`id` <= 2)
|
151
|
+
expected = Developer.order('salary DESC').collect(&:name)
|
152
|
+
received = DeveloperOrderedBySalary.where(id: -Float::INFINITY..2).unscope(where: :id).collect { |dev| dev.name }
|
153
|
+
assert_equal expected, received
|
154
|
+
|
155
|
+
# unscoped for WHERE (`developers`.`id` < 2)
|
156
|
+
expected = Developer.order('salary DESC').collect(&:name)
|
157
|
+
received = DeveloperOrderedBySalary.where(id: -Float::INFINITY...2).unscope(where: :id).collect { |dev| dev.name }
|
158
|
+
assert_equal expected, received
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_unscope_multiple_where_clauses
|
162
|
+
expected = Developer.order('salary DESC').collect { |dev| dev.name }
|
163
|
+
received = DeveloperOrderedBySalary.where(name: 'Jamis').where(id: 1).unscope(where: [:name, :id]).collect { |dev| dev.name }
|
164
|
+
assert_equal expected, received
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_unscope_string_where_clauses_involved
|
168
|
+
dev_relation = Developer.order('salary DESC').where("created_at > ?", 1.year.ago)
|
169
|
+
expected = dev_relation.collect { |dev| dev.name }
|
170
|
+
|
171
|
+
dev_ordered_relation = DeveloperOrderedBySalary.where(name: 'Jamis').where("created_at > ?", 1.year.ago)
|
172
|
+
received = dev_ordered_relation.unscope(where: [:name]).collect { |dev| dev.name }
|
173
|
+
|
174
|
+
assert_equal expected, received
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_unscope_with_grouping_attributes
|
178
|
+
expected = Developer.order('salary DESC').collect { |dev| dev.name }
|
179
|
+
received = DeveloperOrderedBySalary.group(:name).unscope(:group).collect { |dev| dev.name }
|
180
|
+
assert_equal expected, received
|
181
|
+
|
182
|
+
expected_2 = Developer.order('salary DESC').collect { |dev| dev.name }
|
183
|
+
received_2 = DeveloperOrderedBySalary.group("name").unscope(:group).collect { |dev| dev.name }
|
184
|
+
assert_equal expected_2, received_2
|
185
|
+
end
|
186
|
+
|
187
|
+
def test_unscope_with_limit_in_query
|
188
|
+
expected = Developer.order('salary DESC').collect { |dev| dev.name }
|
189
|
+
received = DeveloperOrderedBySalary.limit(1).unscope(:limit).collect { |dev| dev.name }
|
190
|
+
assert_equal expected, received
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_order_to_unscope_reordering
|
194
|
+
scope = DeveloperOrderedBySalary.order('salary DESC, name ASC').reverse_order.unscope(:order)
|
195
|
+
assert !(scope.to_sql =~ /order/i)
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_unscope_reverse_order
|
199
|
+
expected = Developer.all.collect { |dev| dev.name }
|
200
|
+
received = Developer.order('salary DESC').reverse_order.unscope(:order).collect { |dev| dev.name }
|
201
|
+
assert_equal expected, received
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_unscope_select
|
205
|
+
expected = Developer.order('salary ASC').collect { |dev| dev.name }
|
206
|
+
received = Developer.order('salary DESC').reverse_order.select(:name).unscope(:select).collect { |dev| dev.name }
|
207
|
+
assert_equal expected, received
|
208
|
+
|
209
|
+
expected_2 = Developer.all.collect { |dev| dev.id }
|
210
|
+
received_2 = Developer.select(:name).unscope(:select).collect { |dev| dev.id }
|
211
|
+
assert_equal expected_2, received_2
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_unscope_offset
|
215
|
+
expected = Developer.all.collect { |dev| dev.name }
|
216
|
+
received = Developer.offset(5).unscope(:offset).collect { |dev| dev.name }
|
217
|
+
assert_equal expected, received
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_unscope_joins_and_select_on_developers_projects
|
221
|
+
expected = Developer.all.collect { |dev| dev.name }
|
222
|
+
received = Developer.joins('JOIN developers_projects ON id = developer_id').select(:id).unscope(:joins, :select).collect { |dev| dev.name }
|
223
|
+
assert_equal expected, received
|
224
|
+
end
|
225
|
+
|
226
|
+
def test_unscope_includes
|
227
|
+
expected = Developer.all.collect { |dev| dev.name }
|
228
|
+
received = Developer.includes(:projects).select(:id).unscope(:includes, :select).collect { |dev| dev.name }
|
229
|
+
assert_equal expected, received
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_unscope_having
|
233
|
+
expected = DeveloperOrderedBySalary.all.collect { |dev| dev.name }
|
234
|
+
received = DeveloperOrderedBySalary.having("name IN ('Jamis', 'David')").unscope(:having).collect { |dev| dev.name }
|
235
|
+
assert_equal expected, received
|
236
|
+
end
|
237
|
+
|
238
|
+
def test_unscope_and_scope
|
239
|
+
developer_klass = Class.new(Developer) do
|
240
|
+
scope :by_name, -> name { unscope(where: :name).where(name: name) }
|
241
|
+
end
|
242
|
+
|
243
|
+
expected = developer_klass.where(name: 'Jamis').collect { |dev| [dev.name, dev.id] }
|
244
|
+
received = developer_klass.where(name: 'David').by_name('Jamis').collect { |dev| [dev.name, dev.id] }
|
245
|
+
assert_equal expected, received
|
246
|
+
end
|
247
|
+
|
248
|
+
def test_unscope_errors_with_invalid_value
|
249
|
+
assert_raises(ArgumentError) do
|
250
|
+
Developer.includes(:projects).where(name: "Jamis").unscope(:stupidly_incorrect_value)
|
251
|
+
end
|
252
|
+
|
253
|
+
assert_raises(ArgumentError) do
|
254
|
+
Developer.all.unscope(:includes, :select, :some_broken_value)
|
255
|
+
end
|
256
|
+
|
257
|
+
assert_raises(ArgumentError) do
|
258
|
+
Developer.order('name DESC').reverse_order.unscope(:reverse_order)
|
259
|
+
end
|
260
|
+
|
261
|
+
assert_raises(ArgumentError) do
|
262
|
+
Developer.order('name DESC').where(name: "Jamis").unscope()
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
def test_unscope_errors_with_non_where_hash_keys
|
267
|
+
assert_raises(ArgumentError) do
|
268
|
+
Developer.where(name: "Jamis").limit(4).unscope(limit: 4)
|
269
|
+
end
|
270
|
+
|
271
|
+
assert_raises(ArgumentError) do
|
272
|
+
Developer.where(name: "Jamis").unscope("where" => :name)
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
def test_unscope_errors_with_non_symbol_or_hash_arguments
|
277
|
+
assert_raises(ArgumentError) do
|
278
|
+
Developer.where(name: "Jamis").limit(3).unscope("limit")
|
279
|
+
end
|
280
|
+
|
281
|
+
assert_raises(ArgumentError) do
|
282
|
+
Developer.select("id").unscope("select")
|
283
|
+
end
|
284
|
+
|
285
|
+
assert_raises(ArgumentError) do
|
286
|
+
Developer.select("id").unscope(5)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
def test_unscope_merging
|
291
|
+
merged = Developer.where(name: "Jamis").merge(Developer.unscope(:where))
|
292
|
+
assert merged.where_values.empty?
|
293
|
+
assert !merged.where(name: "Jon").where_values.empty?
|
294
|
+
end
|
295
|
+
|
296
|
+
def test_order_in_default_scope_should_not_prevail
|
297
|
+
expected = Developer.all.merge!(order: 'salary desc').to_a.collect { |dev| dev.salary }
|
298
|
+
received = DeveloperOrderedBySalary.all.merge!(order: 'salary').to_a.collect { |dev| dev.salary }
|
299
|
+
assert_equal expected, received
|
300
|
+
end
|
301
|
+
|
302
|
+
def test_create_attribute_overwrites_default_scoping
|
303
|
+
assert_equal 'David', PoorDeveloperCalledJamis.create!(:name => 'David').name
|
304
|
+
assert_equal 200000, PoorDeveloperCalledJamis.create!(:name => 'David', :salary => 200000).salary
|
305
|
+
end
|
306
|
+
|
307
|
+
def test_create_attribute_overwrites_default_values
|
308
|
+
assert_equal nil, PoorDeveloperCalledJamis.create!(:salary => nil).salary
|
309
|
+
assert_equal 50000, PoorDeveloperCalledJamis.create!(:name => 'David').salary
|
310
|
+
end
|
311
|
+
|
312
|
+
def test_default_scope_attribute
|
313
|
+
jamis = PoorDeveloperCalledJamis.new(:name => 'David')
|
314
|
+
assert_equal 50000, jamis.salary
|
315
|
+
end
|
316
|
+
|
317
|
+
def test_where_attribute
|
318
|
+
aaron = PoorDeveloperCalledJamis.where(:salary => 20).new(:name => 'Aaron')
|
319
|
+
assert_equal 20, aaron.salary
|
320
|
+
assert_equal 'Aaron', aaron.name
|
321
|
+
end
|
322
|
+
|
323
|
+
def test_where_attribute_merge
|
324
|
+
aaron = PoorDeveloperCalledJamis.where(:name => 'foo').new(:name => 'Aaron')
|
325
|
+
assert_equal 'Aaron', aaron.name
|
326
|
+
end
|
327
|
+
|
328
|
+
def test_scope_composed_by_limit_and_then_offset_is_equal_to_scope_composed_by_offset_and_then_limit
|
329
|
+
posts_limit_offset = Post.limit(3).offset(2)
|
330
|
+
posts_offset_limit = Post.offset(2).limit(3)
|
331
|
+
assert_equal posts_limit_offset, posts_offset_limit
|
332
|
+
end
|
333
|
+
|
334
|
+
def test_create_with_merge
|
335
|
+
aaron = PoorDeveloperCalledJamis.create_with(:name => 'foo', :salary => 20).merge(
|
336
|
+
PoorDeveloperCalledJamis.create_with(:name => 'Aaron')).new
|
337
|
+
assert_equal 20, aaron.salary
|
338
|
+
assert_equal 'Aaron', aaron.name
|
339
|
+
|
340
|
+
aaron = PoorDeveloperCalledJamis.create_with(:name => 'foo', :salary => 20).
|
341
|
+
create_with(:name => 'Aaron').new
|
342
|
+
assert_equal 20, aaron.salary
|
343
|
+
assert_equal 'Aaron', aaron.name
|
344
|
+
end
|
345
|
+
|
346
|
+
def test_create_with_reset
|
347
|
+
jamis = PoorDeveloperCalledJamis.create_with(:name => 'Aaron').create_with(nil).new
|
348
|
+
assert_equal 'Jamis', jamis.name
|
349
|
+
end
|
350
|
+
|
351
|
+
# FIXME: I don't know if this is *desired* behavior, but it is *today's*
|
352
|
+
# behavior.
|
353
|
+
def test_create_with_empty_hash_will_not_reset
|
354
|
+
jamis = PoorDeveloperCalledJamis.create_with(:name => 'Aaron').create_with({}).new
|
355
|
+
assert_equal 'Aaron', jamis.name
|
356
|
+
end
|
357
|
+
|
358
|
+
def test_unscoped_with_named_scope_should_not_have_default_scope
|
359
|
+
assert_equal [DeveloperCalledJamis.find(developers(:poor_jamis).id)], DeveloperCalledJamis.poor
|
360
|
+
|
361
|
+
assert DeveloperCalledJamis.unscoped.poor.include?(developers(:david).becomes(DeveloperCalledJamis))
|
362
|
+
|
363
|
+
assert_equal 11, DeveloperCalledJamis.unscoped.length
|
364
|
+
assert_equal 1, DeveloperCalledJamis.poor.length
|
365
|
+
assert_equal 10, DeveloperCalledJamis.unscoped.poor.length
|
366
|
+
assert_equal 10, DeveloperCalledJamis.unscoped { DeveloperCalledJamis.poor }.length
|
367
|
+
end
|
368
|
+
|
369
|
+
def test_default_scope_select_ignored_by_aggregations
|
370
|
+
assert_equal DeveloperWithSelect.all.to_a.count, DeveloperWithSelect.count
|
371
|
+
end
|
372
|
+
|
373
|
+
def test_default_scope_select_ignored_by_grouped_aggregations
|
374
|
+
assert_equal Hash[Developer.all.group_by(&:salary).map { |s, d| [s, d.count] }],
|
375
|
+
DeveloperWithSelect.group(:salary).count
|
376
|
+
end
|
377
|
+
|
378
|
+
def test_default_scope_order_ignored_by_aggregations
|
379
|
+
assert_equal DeveloperOrderedBySalary.all.count, DeveloperOrderedBySalary.count
|
380
|
+
end
|
381
|
+
|
382
|
+
def test_default_scope_find_last
|
383
|
+
assert DeveloperOrderedBySalary.count > 1, "need more than one row for test"
|
384
|
+
|
385
|
+
lowest_salary_dev = DeveloperOrderedBySalary.find(developers(:poor_jamis).id)
|
386
|
+
assert_equal lowest_salary_dev, DeveloperOrderedBySalary.last
|
387
|
+
end
|
388
|
+
|
389
|
+
def test_default_scope_include_with_count
|
390
|
+
d = DeveloperWithIncludes.create!
|
391
|
+
d.audit_logs.create! :message => 'foo'
|
392
|
+
|
393
|
+
assert_equal 1, DeveloperWithIncludes.where(:audit_logs => { :message => 'foo' }).count
|
394
|
+
end
|
395
|
+
|
396
|
+
def test_default_scope_with_references_works_through_collection_association
|
397
|
+
post = PostWithCommentWithDefaultScopeReferencesAssociation.create!(title: "Hello World", body: "Here we go.")
|
398
|
+
comment = post.comment_with_default_scope_references_associations.create!(body: "Great post.", developer_id: Developer.first.id)
|
399
|
+
assert_equal comment, post.comment_with_default_scope_references_associations.to_a.first
|
400
|
+
end
|
401
|
+
|
402
|
+
def test_default_scope_with_references_works_through_association
|
403
|
+
post = PostWithCommentWithDefaultScopeReferencesAssociation.create!(title: "Hello World", body: "Here we go.")
|
404
|
+
comment = post.comment_with_default_scope_references_associations.create!(body: "Great post.", developer_id: Developer.first.id)
|
405
|
+
assert_equal comment, post.first_comment
|
406
|
+
end
|
407
|
+
|
408
|
+
def test_default_scope_with_references_works_with_find_by
|
409
|
+
post = PostWithCommentWithDefaultScopeReferencesAssociation.create!(title: "Hello World", body: "Here we go.")
|
410
|
+
comment = post.comment_with_default_scope_references_associations.create!(body: "Great post.", developer_id: Developer.first.id)
|
411
|
+
assert_equal comment, CommentWithDefaultScopeReferencesAssociation.find_by(id: comment.id)
|
412
|
+
end
|
413
|
+
|
414
|
+
unless in_memory_db?
|
415
|
+
def test_default_scope_is_threadsafe
|
416
|
+
threads = []
|
417
|
+
assert_not_equal 1, ThreadsafeDeveloper.unscoped.count
|
418
|
+
|
419
|
+
threads << Thread.new do
|
420
|
+
Thread.current[:long_default_scope] = true
|
421
|
+
assert_equal 1, ThreadsafeDeveloper.all.to_a.count
|
422
|
+
ThreadsafeDeveloper.connection.close
|
423
|
+
end
|
424
|
+
threads << Thread.new do
|
425
|
+
assert_equal 1, ThreadsafeDeveloper.all.to_a.count
|
426
|
+
ThreadsafeDeveloper.connection.close
|
427
|
+
end
|
428
|
+
threads.each(&:join)
|
429
|
+
end
|
430
|
+
end
|
431
|
+
|
432
|
+
test "additional conditions are ANDed with the default scope" do
|
433
|
+
scope = DeveloperCalledJamis.where(name: "David")
|
434
|
+
assert_equal 2, scope.where_values.length
|
435
|
+
assert_equal [], scope.to_a
|
436
|
+
end
|
437
|
+
|
438
|
+
test "additional conditions in a scope are ANDed with the default scope" do
|
439
|
+
scope = DeveloperCalledJamis.david
|
440
|
+
assert_equal 2, scope.where_values.length
|
441
|
+
assert_equal [], scope.to_a
|
442
|
+
end
|
443
|
+
|
444
|
+
test "a scope can remove the condition from the default scope" do
|
445
|
+
scope = DeveloperCalledJamis.david2
|
446
|
+
assert_equal 1, scope.where_values.length
|
447
|
+
assert_equal Developer.where(name: "David").map(&:id), scope.map(&:id)
|
448
|
+
end
|
449
|
+
|
450
|
+
def test_with_abstract_class_where_clause_should_not_be_duplicated
|
451
|
+
scope = Bus.all
|
452
|
+
assert_equal scope.where_values.length, 1
|
453
|
+
end
|
454
|
+
end
|