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,173 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/company_in_module'
|
3
|
+
require 'models/shop'
|
4
|
+
require 'models/developer'
|
5
|
+
require 'models/computer'
|
6
|
+
|
7
|
+
class ModulesTest < ActiveRecord::TestCase
|
8
|
+
fixtures :accounts, :companies, :projects, :developers, :collections, :products, :variants
|
9
|
+
|
10
|
+
def setup
|
11
|
+
# need to make sure Object::Firm and Object::Client are not defined,
|
12
|
+
# so that constantize will not be able to cheat when having to load namespaced classes
|
13
|
+
@undefined_consts = {}
|
14
|
+
|
15
|
+
[:Firm, :Client].each do |const|
|
16
|
+
@undefined_consts.merge! const => Object.send(:remove_const, const) if Object.const_defined?(const)
|
17
|
+
end
|
18
|
+
|
19
|
+
ActiveRecord::Base.store_full_sti_class = false
|
20
|
+
end
|
21
|
+
|
22
|
+
teardown do
|
23
|
+
# reinstate the constants that we undefined in the setup
|
24
|
+
@undefined_consts.each do |constant, value|
|
25
|
+
Object.send :const_set, constant, value unless value.nil?
|
26
|
+
end
|
27
|
+
|
28
|
+
ActiveRecord::Base.store_full_sti_class = true
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_module_spanning_associations
|
32
|
+
firm = MyApplication::Business::Firm.first
|
33
|
+
assert !firm.clients.empty?, "Firm should have clients"
|
34
|
+
assert_nil firm.class.table_name.match('::'), "Firm shouldn't have the module appear in its table name"
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_module_spanning_has_and_belongs_to_many_associations
|
38
|
+
project = MyApplication::Business::Project.first
|
39
|
+
project.developers << MyApplication::Business::Developer.create("name" => "John")
|
40
|
+
assert_equal "John", project.developers.last.name
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_associations_spanning_cross_modules
|
44
|
+
account = MyApplication::Billing::Account.all.merge!(:order => 'id').first
|
45
|
+
assert_kind_of MyApplication::Business::Firm, account.firm
|
46
|
+
assert_kind_of MyApplication::Billing::Firm, account.qualified_billing_firm
|
47
|
+
assert_kind_of MyApplication::Billing::Firm, account.unqualified_billing_firm
|
48
|
+
assert_kind_of MyApplication::Billing::Nested::Firm, account.nested_qualified_billing_firm
|
49
|
+
assert_kind_of MyApplication::Billing::Nested::Firm, account.nested_unqualified_billing_firm
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_find_account_and_include_company
|
53
|
+
account = MyApplication::Billing::Account.all.merge!(:includes => :firm).find(1)
|
54
|
+
assert_kind_of MyApplication::Business::Firm, account.firm
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_table_name
|
58
|
+
assert_equal 'accounts', MyApplication::Billing::Account.table_name, 'table_name for ActiveRecord model in module'
|
59
|
+
assert_equal 'companies', MyApplication::Business::Client.table_name, 'table_name for ActiveRecord model subclass'
|
60
|
+
assert_equal 'company_contacts', MyApplication::Business::Client::Contact.table_name, 'table_name for ActiveRecord model enclosed by another ActiveRecord model'
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_assign_ids
|
64
|
+
firm = MyApplication::Business::Firm.first
|
65
|
+
|
66
|
+
assert_nothing_raised NameError, "Should be able to resolve all class constants via reflection" do
|
67
|
+
firm.client_ids = [MyApplication::Business::Client.first.id]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# need to add an eager loading condition to force the eager loading model into
|
72
|
+
# the old join model, to test that. See http://dev.rubyonrails.org/ticket/9640
|
73
|
+
def test_eager_loading_in_modules
|
74
|
+
clients = []
|
75
|
+
|
76
|
+
assert_nothing_raised NameError, "Should be able to resolve all class constants via reflection" do
|
77
|
+
clients << MyApplication::Business::Client.references(:accounts).merge!(:includes => {:firm => :account}, :where => 'accounts.id IS NOT NULL').find(3)
|
78
|
+
clients << MyApplication::Business::Client.includes(:firm => :account).find(3)
|
79
|
+
end
|
80
|
+
|
81
|
+
clients.each do |client|
|
82
|
+
assert_no_queries do
|
83
|
+
assert_not_nil(client.firm.account)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_module_table_name_prefix
|
89
|
+
assert_equal 'prefixed_companies', MyApplication::Business::Prefixed::Company.table_name, 'inferred table_name for ActiveRecord model in module with table_name_prefix'
|
90
|
+
assert_equal 'prefixed_companies', MyApplication::Business::Prefixed::Nested::Company.table_name, 'table_name for ActiveRecord model in nested module with a parent table_name_prefix'
|
91
|
+
assert_equal 'companies', MyApplication::Business::Prefixed::Firm.table_name, 'explicit table_name for ActiveRecord model in module with table_name_prefix should not be prefixed'
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_module_table_name_prefix_with_global_prefix
|
95
|
+
classes = [ MyApplication::Business::Company,
|
96
|
+
MyApplication::Business::Firm,
|
97
|
+
MyApplication::Business::Client,
|
98
|
+
MyApplication::Business::Client::Contact,
|
99
|
+
MyApplication::Business::Developer,
|
100
|
+
MyApplication::Business::Project,
|
101
|
+
MyApplication::Business::Prefixed::Company,
|
102
|
+
MyApplication::Business::Prefixed::Nested::Company,
|
103
|
+
MyApplication::Billing::Account ]
|
104
|
+
|
105
|
+
ActiveRecord::Base.table_name_prefix = 'global_'
|
106
|
+
classes.each(&:reset_table_name)
|
107
|
+
assert_equal 'global_companies', MyApplication::Business::Company.table_name, 'inferred table_name for ActiveRecord model in module without table_name_prefix'
|
108
|
+
assert_equal 'prefixed_companies', MyApplication::Business::Prefixed::Company.table_name, 'inferred table_name for ActiveRecord model in module with table_name_prefix'
|
109
|
+
assert_equal 'prefixed_companies', MyApplication::Business::Prefixed::Nested::Company.table_name, 'table_name for ActiveRecord model in nested module with a parent table_name_prefix'
|
110
|
+
assert_equal 'companies', MyApplication::Business::Prefixed::Firm.table_name, 'explicit table_name for ActiveRecord model in module with table_name_prefix should not be prefixed'
|
111
|
+
ensure
|
112
|
+
ActiveRecord::Base.table_name_prefix = ''
|
113
|
+
classes.each(&:reset_table_name)
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_module_table_name_suffix
|
117
|
+
assert_equal 'companies_suffixed', MyApplication::Business::Suffixed::Company.table_name, 'inferred table_name for ActiveRecord model in module with table_name_suffix'
|
118
|
+
assert_equal 'companies_suffixed', MyApplication::Business::Suffixed::Nested::Company.table_name, 'table_name for ActiveRecord model in nested module with a parent table_name_suffix'
|
119
|
+
assert_equal 'companies', MyApplication::Business::Suffixed::Firm.table_name, 'explicit table_name for ActiveRecord model in module with table_name_suffix should not be suffixed'
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_module_table_name_suffix_with_global_suffix
|
123
|
+
classes = [ MyApplication::Business::Company,
|
124
|
+
MyApplication::Business::Firm,
|
125
|
+
MyApplication::Business::Client,
|
126
|
+
MyApplication::Business::Client::Contact,
|
127
|
+
MyApplication::Business::Developer,
|
128
|
+
MyApplication::Business::Project,
|
129
|
+
MyApplication::Business::Suffixed::Company,
|
130
|
+
MyApplication::Business::Suffixed::Nested::Company,
|
131
|
+
MyApplication::Billing::Account ]
|
132
|
+
|
133
|
+
ActiveRecord::Base.table_name_suffix = '_global'
|
134
|
+
classes.each(&:reset_table_name)
|
135
|
+
assert_equal 'companies_global', MyApplication::Business::Company.table_name, 'inferred table_name for ActiveRecord model in module without table_name_suffix'
|
136
|
+
assert_equal 'companies_suffixed', MyApplication::Business::Suffixed::Company.table_name, 'inferred table_name for ActiveRecord model in module with table_name_suffix'
|
137
|
+
assert_equal 'companies_suffixed', MyApplication::Business::Suffixed::Nested::Company.table_name, 'table_name for ActiveRecord model in nested module with a parent table_name_suffix'
|
138
|
+
assert_equal 'companies', MyApplication::Business::Suffixed::Firm.table_name, 'explicit table_name for ActiveRecord model in module with table_name_suffix should not be suffixed'
|
139
|
+
ensure
|
140
|
+
ActiveRecord::Base.table_name_suffix = ''
|
141
|
+
classes.each(&:reset_table_name)
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_compute_type_can_infer_class_name_of_sibling_inside_module
|
145
|
+
old = ActiveRecord::Base.store_full_sti_class
|
146
|
+
ActiveRecord::Base.store_full_sti_class = true
|
147
|
+
assert_equal MyApplication::Business::Firm, MyApplication::Business::Client.send(:compute_type, "Firm")
|
148
|
+
ensure
|
149
|
+
ActiveRecord::Base.store_full_sti_class = old
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_nested_models_should_not_raise_exception_when_using_delete_all_dependency_on_association
|
153
|
+
old = ActiveRecord::Base.store_full_sti_class
|
154
|
+
ActiveRecord::Base.store_full_sti_class = true
|
155
|
+
|
156
|
+
collection = Shop::Collection.first
|
157
|
+
assert !collection.products.empty?, "Collection should have products"
|
158
|
+
assert_nothing_raised { collection.destroy }
|
159
|
+
ensure
|
160
|
+
ActiveRecord::Base.store_full_sti_class = old
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_nested_models_should_not_raise_exception_when_using_nullify_dependency_on_association
|
164
|
+
old = ActiveRecord::Base.store_full_sti_class
|
165
|
+
ActiveRecord::Base.store_full_sti_class = true
|
166
|
+
|
167
|
+
product = Shop::Product.first
|
168
|
+
assert !product.variants.empty?, "Product should have variants"
|
169
|
+
assert_nothing_raised { product.destroy }
|
170
|
+
ensure
|
171
|
+
ActiveRecord::Base.store_full_sti_class = old
|
172
|
+
end
|
173
|
+
end
|
@@ -0,0 +1,350 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/topic'
|
3
|
+
require 'models/customer'
|
4
|
+
|
5
|
+
class MultiParameterAttributeTest < ActiveRecord::TestCase
|
6
|
+
fixtures :topics
|
7
|
+
|
8
|
+
def test_multiparameter_attributes_on_date
|
9
|
+
attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "24" }
|
10
|
+
topic = Topic.find(1)
|
11
|
+
topic.attributes = attributes
|
12
|
+
# note that extra #to_date call allows test to pass for Oracle, which
|
13
|
+
# treats dates/times the same
|
14
|
+
assert_date_from_db Date.new(2004, 6, 24), topic.last_read.to_date
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_multiparameter_attributes_on_date_with_empty_year
|
18
|
+
attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "24" }
|
19
|
+
topic = Topic.find(1)
|
20
|
+
topic.attributes = attributes
|
21
|
+
# note that extra #to_date call allows test to pass for Oracle, which
|
22
|
+
# treats dates/times the same
|
23
|
+
assert_nil topic.last_read
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_multiparameter_attributes_on_date_with_empty_month
|
27
|
+
attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "24" }
|
28
|
+
topic = Topic.find(1)
|
29
|
+
topic.attributes = attributes
|
30
|
+
# note that extra #to_date call allows test to pass for Oracle, which
|
31
|
+
# treats dates/times the same
|
32
|
+
assert_nil topic.last_read
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_multiparameter_attributes_on_date_with_empty_day
|
36
|
+
attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "6", "last_read(3i)" => "" }
|
37
|
+
topic = Topic.find(1)
|
38
|
+
topic.attributes = attributes
|
39
|
+
# note that extra #to_date call allows test to pass for Oracle, which
|
40
|
+
# treats dates/times the same
|
41
|
+
assert_nil topic.last_read
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_multiparameter_attributes_on_date_with_empty_day_and_year
|
45
|
+
attributes = { "last_read(1i)" => "", "last_read(2i)" => "6", "last_read(3i)" => "" }
|
46
|
+
topic = Topic.find(1)
|
47
|
+
topic.attributes = attributes
|
48
|
+
# note that extra #to_date call allows test to pass for Oracle, which
|
49
|
+
# treats dates/times the same
|
50
|
+
assert_nil topic.last_read
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_multiparameter_attributes_on_date_with_empty_day_and_month
|
54
|
+
attributes = { "last_read(1i)" => "2004", "last_read(2i)" => "", "last_read(3i)" => "" }
|
55
|
+
topic = Topic.find(1)
|
56
|
+
topic.attributes = attributes
|
57
|
+
# note that extra #to_date call allows test to pass for Oracle, which
|
58
|
+
# treats dates/times the same
|
59
|
+
assert_nil topic.last_read
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_multiparameter_attributes_on_date_with_empty_year_and_month
|
63
|
+
attributes = { "last_read(1i)" => "", "last_read(2i)" => "", "last_read(3i)" => "24" }
|
64
|
+
topic = Topic.find(1)
|
65
|
+
topic.attributes = attributes
|
66
|
+
# note that extra #to_date call allows test to pass for Oracle, which
|
67
|
+
# treats dates/times the same
|
68
|
+
assert_nil topic.last_read
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_multiparameter_attributes_on_date_with_all_empty
|
72
|
+
attributes = { "last_read(1i)" => "", "last_read(2i)" => "", "last_read(3i)" => "" }
|
73
|
+
topic = Topic.find(1)
|
74
|
+
topic.attributes = attributes
|
75
|
+
assert_nil topic.last_read
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_multiparameter_attributes_on_time
|
79
|
+
with_timezone_config default: :local do
|
80
|
+
attributes = {
|
81
|
+
"written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
|
82
|
+
"written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
|
83
|
+
}
|
84
|
+
topic = Topic.find(1)
|
85
|
+
topic.attributes = attributes
|
86
|
+
assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_multiparameter_attributes_on_time_with_no_date
|
91
|
+
ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
|
92
|
+
attributes = {
|
93
|
+
"written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
|
94
|
+
}
|
95
|
+
topic = Topic.find(1)
|
96
|
+
topic.attributes = attributes
|
97
|
+
end
|
98
|
+
assert_equal("written_on", ex.errors[0].attribute)
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_multiparameter_attributes_on_time_with_invalid_time_params
|
102
|
+
ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
|
103
|
+
attributes = {
|
104
|
+
"written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
|
105
|
+
"written_on(4i)" => "2004", "written_on(5i)" => "36", "written_on(6i)" => "64",
|
106
|
+
}
|
107
|
+
topic = Topic.find(1)
|
108
|
+
topic.attributes = attributes
|
109
|
+
end
|
110
|
+
assert_equal("written_on", ex.errors[0].attribute)
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_multiparameter_attributes_on_time_with_old_date
|
114
|
+
attributes = {
|
115
|
+
"written_on(1i)" => "1850", "written_on(2i)" => "6", "written_on(3i)" => "24",
|
116
|
+
"written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
|
117
|
+
}
|
118
|
+
topic = Topic.find(1)
|
119
|
+
topic.attributes = attributes
|
120
|
+
# testing against to_s(:db) representation because either a Time or a DateTime might be returned, depending on platform
|
121
|
+
assert_equal "1850-06-24 16:24:00", topic.written_on.to_s(:db)
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_multiparameter_attributes_on_time_will_raise_on_big_time_if_missing_date_parts
|
125
|
+
ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
|
126
|
+
attributes = {
|
127
|
+
"written_on(4i)" => "16", "written_on(5i)" => "24"
|
128
|
+
}
|
129
|
+
topic = Topic.find(1)
|
130
|
+
topic.attributes = attributes
|
131
|
+
end
|
132
|
+
assert_equal("written_on", ex.errors[0].attribute)
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_multiparameter_attributes_on_time_with_raise_on_small_time_if_missing_date_parts
|
136
|
+
ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
|
137
|
+
attributes = {
|
138
|
+
"written_on(4i)" => "16", "written_on(5i)" => "12", "written_on(6i)" => "02"
|
139
|
+
}
|
140
|
+
topic = Topic.find(1)
|
141
|
+
topic.attributes = attributes
|
142
|
+
end
|
143
|
+
assert_equal("written_on", ex.errors[0].attribute)
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_multiparameter_attributes_on_time_will_ignore_hour_if_missing
|
147
|
+
with_timezone_config default: :local do
|
148
|
+
attributes = {
|
149
|
+
"written_on(1i)" => "2004", "written_on(2i)" => "12", "written_on(3i)" => "12",
|
150
|
+
"written_on(5i)" => "12", "written_on(6i)" => "02"
|
151
|
+
}
|
152
|
+
topic = Topic.find(1)
|
153
|
+
topic.attributes = attributes
|
154
|
+
assert_equal Time.local(2004, 12, 12, 0, 12, 2), topic.written_on
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_multiparameter_attributes_on_time_will_ignore_hour_if_blank
|
159
|
+
attributes = {
|
160
|
+
"written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
|
161
|
+
"written_on(4i)" => "", "written_on(5i)" => "12", "written_on(6i)" => "02"
|
162
|
+
}
|
163
|
+
topic = Topic.find(1)
|
164
|
+
topic.attributes = attributes
|
165
|
+
assert_nil topic.written_on
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_multiparameter_attributes_on_time_will_ignore_date_if_empty
|
169
|
+
attributes = {
|
170
|
+
"written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
|
171
|
+
"written_on(4i)" => "16", "written_on(5i)" => "24"
|
172
|
+
}
|
173
|
+
topic = Topic.find(1)
|
174
|
+
topic.attributes = attributes
|
175
|
+
assert_nil topic.written_on
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_multiparameter_attributes_on_time_with_seconds_will_ignore_date_if_empty
|
179
|
+
attributes = {
|
180
|
+
"written_on(1i)" => "", "written_on(2i)" => "", "written_on(3i)" => "",
|
181
|
+
"written_on(4i)" => "16", "written_on(5i)" => "12", "written_on(6i)" => "02"
|
182
|
+
}
|
183
|
+
topic = Topic.find(1)
|
184
|
+
topic.attributes = attributes
|
185
|
+
assert_nil topic.written_on
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_multiparameter_attributes_on_time_with_utc
|
189
|
+
with_timezone_config default: :utc do
|
190
|
+
attributes = {
|
191
|
+
"written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
|
192
|
+
"written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
|
193
|
+
}
|
194
|
+
topic = Topic.find(1)
|
195
|
+
topic.attributes = attributes
|
196
|
+
assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes
|
201
|
+
with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
|
202
|
+
attributes = {
|
203
|
+
"written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
|
204
|
+
"written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
|
205
|
+
}
|
206
|
+
topic = Topic.find(1)
|
207
|
+
topic.attributes = attributes
|
208
|
+
assert_equal Time.utc(2004, 6, 24, 23, 24, 0), topic.written_on
|
209
|
+
assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on.time
|
210
|
+
assert_equal Time.zone, topic.written_on.time_zone
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_multiparameter_attributes_on_time_with_time_zone_aware_attributes_false
|
215
|
+
with_timezone_config default: :local, aware_attributes: false, zone: -28800 do
|
216
|
+
attributes = {
|
217
|
+
"written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
|
218
|
+
"written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
|
219
|
+
}
|
220
|
+
topic = Topic.find(1)
|
221
|
+
topic.attributes = attributes
|
222
|
+
assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
|
223
|
+
assert_equal false, topic.written_on.respond_to?(:time_zone)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_multiparameter_attributes_on_time_with_skip_time_zone_conversion_for_attributes
|
228
|
+
with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
|
229
|
+
Topic.skip_time_zone_conversion_for_attributes = [:written_on]
|
230
|
+
attributes = {
|
231
|
+
"written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
|
232
|
+
"written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => "00"
|
233
|
+
}
|
234
|
+
topic = Topic.find(1)
|
235
|
+
topic.attributes = attributes
|
236
|
+
assert_equal Time.utc(2004, 6, 24, 16, 24, 0), topic.written_on
|
237
|
+
assert_equal false, topic.written_on.respond_to?(:time_zone)
|
238
|
+
end
|
239
|
+
ensure
|
240
|
+
Topic.skip_time_zone_conversion_for_attributes = []
|
241
|
+
end
|
242
|
+
|
243
|
+
# Oracle does not have a TIME datatype.
|
244
|
+
unless current_adapter?(:OracleAdapter)
|
245
|
+
def test_multiparameter_attributes_on_time_only_column_with_time_zone_aware_attributes_does_not_do_time_zone_conversion
|
246
|
+
with_timezone_config default: :utc, aware_attributes: true, zone: -28800 do
|
247
|
+
attributes = {
|
248
|
+
"bonus_time(1i)" => "2000", "bonus_time(2i)" => "1", "bonus_time(3i)" => "1",
|
249
|
+
"bonus_time(4i)" => "16", "bonus_time(5i)" => "24"
|
250
|
+
}
|
251
|
+
topic = Topic.find(1)
|
252
|
+
topic.attributes = attributes
|
253
|
+
assert_equal Time.utc(2000, 1, 1, 16, 24, 0), topic.bonus_time
|
254
|
+
assert topic.bonus_time.utc?
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
def test_multiparameter_attributes_on_time_with_empty_seconds
|
260
|
+
with_timezone_config default: :local do
|
261
|
+
attributes = {
|
262
|
+
"written_on(1i)" => "2004", "written_on(2i)" => "6", "written_on(3i)" => "24",
|
263
|
+
"written_on(4i)" => "16", "written_on(5i)" => "24", "written_on(6i)" => ""
|
264
|
+
}
|
265
|
+
topic = Topic.find(1)
|
266
|
+
topic.attributes = attributes
|
267
|
+
assert_equal Time.local(2004, 6, 24, 16, 24, 0), topic.written_on
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
unless current_adapter? :OracleAdapter
|
272
|
+
def test_multiparameter_attributes_setting_time_attribute
|
273
|
+
topic = Topic.new( "bonus_time(4i)"=> "01", "bonus_time(5i)" => "05" )
|
274
|
+
assert_equal 1, topic.bonus_time.hour
|
275
|
+
assert_equal 5, topic.bonus_time.min
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
def test_multiparameter_attributes_setting_date_attribute
|
280
|
+
topic = Topic.new( "written_on(1i)" => "1952", "written_on(2i)" => "3", "written_on(3i)" => "11" )
|
281
|
+
assert_equal 1952, topic.written_on.year
|
282
|
+
assert_equal 3, topic.written_on.month
|
283
|
+
assert_equal 11, topic.written_on.day
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_multiparameter_attributes_setting_date_and_time_attribute
|
287
|
+
topic = Topic.new(
|
288
|
+
"written_on(1i)" => "1952",
|
289
|
+
"written_on(2i)" => "3",
|
290
|
+
"written_on(3i)" => "11",
|
291
|
+
"written_on(4i)" => "13",
|
292
|
+
"written_on(5i)" => "55")
|
293
|
+
assert_equal 1952, topic.written_on.year
|
294
|
+
assert_equal 3, topic.written_on.month
|
295
|
+
assert_equal 11, topic.written_on.day
|
296
|
+
assert_equal 13, topic.written_on.hour
|
297
|
+
assert_equal 55, topic.written_on.min
|
298
|
+
end
|
299
|
+
|
300
|
+
def test_multiparameter_attributes_setting_time_but_not_date_on_date_field
|
301
|
+
assert_raise( ActiveRecord::MultiparameterAssignmentErrors ) do
|
302
|
+
Topic.new( "written_on(4i)" => "13", "written_on(5i)" => "55" )
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
def test_multiparameter_assignment_of_aggregation
|
307
|
+
customer = Customer.new
|
308
|
+
address = Address.new("The Street", "The City", "The Country")
|
309
|
+
attributes = { "address(1)" => address.street, "address(2)" => address.city, "address(3)" => address.country }
|
310
|
+
customer.attributes = attributes
|
311
|
+
assert_equal address, customer.address
|
312
|
+
end
|
313
|
+
|
314
|
+
def test_multiparameter_assignment_of_aggregation_out_of_order
|
315
|
+
customer = Customer.new
|
316
|
+
address = Address.new("The Street", "The City", "The Country")
|
317
|
+
attributes = { "address(3)" => address.country, "address(2)" => address.city, "address(1)" => address.street }
|
318
|
+
customer.attributes = attributes
|
319
|
+
assert_equal address, customer.address
|
320
|
+
end
|
321
|
+
|
322
|
+
def test_multiparameter_assignment_of_aggregation_with_missing_values
|
323
|
+
ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
|
324
|
+
customer = Customer.new
|
325
|
+
address = Address.new("The Street", "The City", "The Country")
|
326
|
+
attributes = { "address(2)" => address.city, "address(3)" => address.country }
|
327
|
+
customer.attributes = attributes
|
328
|
+
end
|
329
|
+
assert_equal("address", ex.errors[0].attribute)
|
330
|
+
end
|
331
|
+
|
332
|
+
def test_multiparameter_assignment_of_aggregation_with_blank_values
|
333
|
+
customer = Customer.new
|
334
|
+
address = Address.new("The Street", "The City", "The Country")
|
335
|
+
attributes = { "address(1)" => "", "address(2)" => address.city, "address(3)" => address.country }
|
336
|
+
customer.attributes = attributes
|
337
|
+
assert_equal Address.new(nil, "The City", "The Country"), customer.address
|
338
|
+
end
|
339
|
+
|
340
|
+
def test_multiparameter_assignment_of_aggregation_with_large_index
|
341
|
+
ex = assert_raise(ActiveRecord::MultiparameterAssignmentErrors) do
|
342
|
+
customer = Customer.new
|
343
|
+
address = Address.new("The Street", "The City", "The Country")
|
344
|
+
attributes = { "address(1)" => "The Street", "address(2)" => address.city, "address(3000)" => address.country }
|
345
|
+
customer.attributes = attributes
|
346
|
+
end
|
347
|
+
|
348
|
+
assert_equal("address", ex.errors[0].attribute)
|
349
|
+
end
|
350
|
+
end
|