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,51 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module Type
|
5
|
+
class DecimalTest < ActiveRecord::TestCase
|
6
|
+
def test_type_cast_decimal
|
7
|
+
type = Decimal.new
|
8
|
+
assert_equal BigDecimal.new("0"), type.type_cast_from_user(BigDecimal.new("0"))
|
9
|
+
assert_equal BigDecimal.new("123"), type.type_cast_from_user(123.0)
|
10
|
+
assert_equal BigDecimal.new("1"), type.type_cast_from_user(:"1")
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_type_cast_decimal_from_float_with_large_precision
|
14
|
+
type = Decimal.new(precision: ::Float::DIG + 2)
|
15
|
+
assert_equal BigDecimal.new("123.0"), type.type_cast_from_user(123.0)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_type_cast_from_float_with_unspecified_precision
|
19
|
+
type = Decimal.new
|
20
|
+
assert_equal 22.68.to_d, type.type_cast_from_user(22.68)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_type_cast_decimal_from_rational_with_precision
|
24
|
+
type = Decimal.new(precision: 2)
|
25
|
+
assert_equal BigDecimal("0.33"), type.type_cast_from_user(Rational(1, 3))
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_type_cast_decimal_from_rational_without_precision_defaults_to_18_36
|
29
|
+
type = Decimal.new
|
30
|
+
assert_equal BigDecimal("0.333333333333333333E0"), type.type_cast_from_user(Rational(1, 3))
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_type_cast_decimal_from_object_responding_to_d
|
34
|
+
value = Object.new
|
35
|
+
def value.to_d
|
36
|
+
BigDecimal.new("1")
|
37
|
+
end
|
38
|
+
type = Decimal.new
|
39
|
+
assert_equal BigDecimal("1"), type.type_cast_from_user(value)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_changed?
|
43
|
+
type = Decimal.new
|
44
|
+
|
45
|
+
assert type.changed?(5.0, 5.0, '5.0wibble')
|
46
|
+
assert_not type.changed?(5.0, 5.0, '5.0')
|
47
|
+
assert_not type.changed?(-5.0, -5.0, '-5.0')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
require "models/company"
|
3
|
+
|
4
|
+
module ActiveRecord
|
5
|
+
module Type
|
6
|
+
class IntegerTest < ActiveRecord::TestCase
|
7
|
+
test "simple values" do
|
8
|
+
type = Type::Integer.new
|
9
|
+
assert_equal 1, type.type_cast_from_user(1)
|
10
|
+
assert_equal 1, type.type_cast_from_user('1')
|
11
|
+
assert_equal 1, type.type_cast_from_user('1ignore')
|
12
|
+
assert_equal 0, type.type_cast_from_user('bad1')
|
13
|
+
assert_equal 0, type.type_cast_from_user('bad')
|
14
|
+
assert_equal 1, type.type_cast_from_user(1.7)
|
15
|
+
assert_equal 0, type.type_cast_from_user(false)
|
16
|
+
assert_equal 1, type.type_cast_from_user(true)
|
17
|
+
assert_nil type.type_cast_from_user(nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
test "random objects cast to nil" do
|
21
|
+
type = Type::Integer.new
|
22
|
+
assert_nil type.type_cast_from_user([1,2])
|
23
|
+
assert_nil type.type_cast_from_user({1 => 2})
|
24
|
+
assert_nil type.type_cast_from_user((1..2))
|
25
|
+
end
|
26
|
+
|
27
|
+
test "casting ActiveRecord models" do
|
28
|
+
type = Type::Integer.new
|
29
|
+
firm = Firm.create(:name => 'Apple')
|
30
|
+
assert_nil type.type_cast_from_user(firm)
|
31
|
+
end
|
32
|
+
|
33
|
+
test "casting objects without to_i" do
|
34
|
+
type = Type::Integer.new
|
35
|
+
assert_nil type.type_cast_from_user(::Object.new)
|
36
|
+
end
|
37
|
+
|
38
|
+
test "casting nan and infinity" do
|
39
|
+
type = Type::Integer.new
|
40
|
+
assert_nil type.type_cast_from_user(::Float::NAN)
|
41
|
+
assert_nil type.type_cast_from_user(1.0/0.0)
|
42
|
+
end
|
43
|
+
|
44
|
+
test "changed?" do
|
45
|
+
type = Type::Integer.new
|
46
|
+
|
47
|
+
assert type.changed?(5, 5, '5wibble')
|
48
|
+
assert_not type.changed?(5, 5, '5')
|
49
|
+
assert_not type.changed?(5, 5, '5.0')
|
50
|
+
assert_not type.changed?(-5, -5, '-5')
|
51
|
+
assert_not type.changed?(-5, -5, '-5.0')
|
52
|
+
assert_not type.changed?(nil, nil, nil)
|
53
|
+
end
|
54
|
+
|
55
|
+
test "values below int min value are out of range" do
|
56
|
+
assert_raises(::RangeError) do
|
57
|
+
Integer.new.type_cast_for_database(-2147483649)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
test "values above int max value are out of range" do
|
62
|
+
assert_raises(::RangeError) do
|
63
|
+
Integer.new.type_cast_for_database(2147483648)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
test "very small numbers are out of range" do
|
68
|
+
assert_raises(::RangeError) do
|
69
|
+
Integer.new.type_cast_for_database(-9999999999999999999999999999999)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
test "very large numbers are out of range" do
|
74
|
+
assert_raises(::RangeError) do
|
75
|
+
Integer.new.type_cast_for_database(9999999999999999999999999999999)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
test "normal numbers are in range" do
|
80
|
+
type = Integer.new
|
81
|
+
assert_equal(0, type.type_cast_for_database(0))
|
82
|
+
assert_equal(-1, type.type_cast_for_database(-1))
|
83
|
+
assert_equal(1, type.type_cast_for_database(1))
|
84
|
+
end
|
85
|
+
|
86
|
+
test "int max value is in range" do
|
87
|
+
assert_equal(2147483647, Integer.new.type_cast_for_database(2147483647))
|
88
|
+
end
|
89
|
+
|
90
|
+
test "int min value is in range" do
|
91
|
+
assert_equal(-2147483648, Integer.new.type_cast_for_database(-2147483648))
|
92
|
+
end
|
93
|
+
|
94
|
+
test "columns with a larger limit have larger ranges" do
|
95
|
+
type = Integer.new(limit: 8)
|
96
|
+
|
97
|
+
assert_equal(9223372036854775807, type.type_cast_for_database(9223372036854775807))
|
98
|
+
assert_equal(-9223372036854775808, type.type_cast_for_database(-9223372036854775808))
|
99
|
+
assert_raises(::RangeError) do
|
100
|
+
type.type_cast_for_database(-9999999999999999999999999999999)
|
101
|
+
end
|
102
|
+
assert_raises(::RangeError) do
|
103
|
+
type.type_cast_for_database(9999999999999999999999999999999)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
test "values which are out of range can be re-assigned" do
|
108
|
+
klass = Class.new(ActiveRecord::Base) do
|
109
|
+
self.table_name = 'posts'
|
110
|
+
attribute :foo, Type::Integer.new
|
111
|
+
end
|
112
|
+
model = klass.new
|
113
|
+
|
114
|
+
model.foo = 2147483648
|
115
|
+
model.foo = 1
|
116
|
+
|
117
|
+
assert_equal 1, model.foo
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
class StringTypeTest < ActiveRecord::TestCase
|
5
|
+
test "type casting" do
|
6
|
+
type = Type::String.new
|
7
|
+
assert_equal "t", type.type_cast_from_user(true)
|
8
|
+
assert_equal "f", type.type_cast_from_user(false)
|
9
|
+
assert_equal "123", type.type_cast_from_user(123)
|
10
|
+
end
|
11
|
+
|
12
|
+
test "values are duped coming out" do
|
13
|
+
s = "foo"
|
14
|
+
type = Type::String.new
|
15
|
+
assert_not_same s, type.type_cast_from_user(s)
|
16
|
+
assert_not_same s, type.type_cast_from_database(s)
|
17
|
+
end
|
18
|
+
|
19
|
+
test "string mutations are detected" do
|
20
|
+
klass = Class.new(Base)
|
21
|
+
klass.table_name = 'authors'
|
22
|
+
|
23
|
+
author = klass.create!(name: 'Sean')
|
24
|
+
assert_not author.changed?
|
25
|
+
|
26
|
+
author.name << ' Griffin'
|
27
|
+
assert author.name_changed?
|
28
|
+
|
29
|
+
author.save!
|
30
|
+
author.reload
|
31
|
+
|
32
|
+
assert_equal 'Sean Griffin', author.name
|
33
|
+
assert_not author.changed?
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module Type
|
5
|
+
class TypeMapTest < ActiveRecord::TestCase
|
6
|
+
def test_default_type
|
7
|
+
mapping = TypeMap.new
|
8
|
+
|
9
|
+
assert_kind_of Value, mapping.lookup(:undefined)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_registering_types
|
13
|
+
boolean = Boolean.new
|
14
|
+
mapping = TypeMap.new
|
15
|
+
|
16
|
+
mapping.register_type(/boolean/i, boolean)
|
17
|
+
|
18
|
+
assert_equal mapping.lookup('boolean'), boolean
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_overriding_registered_types
|
22
|
+
time = Time.new
|
23
|
+
timestamp = DateTime.new
|
24
|
+
mapping = TypeMap.new
|
25
|
+
|
26
|
+
mapping.register_type(/time/i, time)
|
27
|
+
mapping.register_type(/time/i, timestamp)
|
28
|
+
|
29
|
+
assert_equal mapping.lookup('time'), timestamp
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_fuzzy_lookup
|
33
|
+
string = String.new
|
34
|
+
mapping = TypeMap.new
|
35
|
+
|
36
|
+
mapping.register_type(/varchar/i, string)
|
37
|
+
|
38
|
+
assert_equal mapping.lookup('varchar(20)'), string
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_aliasing_types
|
42
|
+
string = String.new
|
43
|
+
mapping = TypeMap.new
|
44
|
+
|
45
|
+
mapping.register_type(/string/i, string)
|
46
|
+
mapping.alias_type(/varchar/i, 'string')
|
47
|
+
|
48
|
+
assert_equal mapping.lookup('varchar'), string
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_changing_type_changes_aliases
|
52
|
+
time = Time.new
|
53
|
+
timestamp = DateTime.new
|
54
|
+
mapping = TypeMap.new
|
55
|
+
|
56
|
+
mapping.register_type(/timestamp/i, time)
|
57
|
+
mapping.alias_type(/datetime/i, 'timestamp')
|
58
|
+
mapping.register_type(/timestamp/i, timestamp)
|
59
|
+
|
60
|
+
assert_equal mapping.lookup('datetime'), timestamp
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_aliases_keep_metadata
|
64
|
+
mapping = TypeMap.new
|
65
|
+
|
66
|
+
mapping.register_type(/decimal/i) { |sql_type| sql_type }
|
67
|
+
mapping.alias_type(/number/i, 'decimal')
|
68
|
+
|
69
|
+
assert_equal mapping.lookup('number(20)'), 'decimal(20)'
|
70
|
+
assert_equal mapping.lookup('number'), 'decimal'
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_register_proc
|
74
|
+
string = String.new
|
75
|
+
binary = Binary.new
|
76
|
+
mapping = TypeMap.new
|
77
|
+
|
78
|
+
mapping.register_type(/varchar/i) do |type|
|
79
|
+
if type.include?('(')
|
80
|
+
string
|
81
|
+
else
|
82
|
+
binary
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
assert_equal mapping.lookup('varchar(20)'), string
|
87
|
+
assert_equal mapping.lookup('varchar'), binary
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_additional_lookup_args
|
91
|
+
mapping = TypeMap.new
|
92
|
+
|
93
|
+
mapping.register_type(/varchar/i) do |type, limit|
|
94
|
+
if limit > 255
|
95
|
+
'text'
|
96
|
+
else
|
97
|
+
'string'
|
98
|
+
end
|
99
|
+
end
|
100
|
+
mapping.alias_type(/string/i, 'varchar')
|
101
|
+
|
102
|
+
assert_equal mapping.lookup('varchar', 200), 'string'
|
103
|
+
assert_equal mapping.lookup('varchar', 400), 'text'
|
104
|
+
assert_equal mapping.lookup('string', 400), 'text'
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_requires_value_or_block
|
108
|
+
mapping = TypeMap.new
|
109
|
+
|
110
|
+
assert_raises(ArgumentError) do
|
111
|
+
mapping.register_type(/only key/i)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_lookup_non_strings
|
116
|
+
mapping = HashLookupTypeMap.new
|
117
|
+
|
118
|
+
mapping.register_type(1, 'string')
|
119
|
+
mapping.register_type(2, 'int')
|
120
|
+
mapping.alias_type(3, 1)
|
121
|
+
|
122
|
+
assert_equal mapping.lookup(1), 'string'
|
123
|
+
assert_equal mapping.lookup(2), 'int'
|
124
|
+
assert_equal mapping.lookup(3), 'string'
|
125
|
+
assert_kind_of Type::Value, mapping.lookup(4)
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_fetch
|
129
|
+
mapping = TypeMap.new
|
130
|
+
mapping.register_type(1, "string")
|
131
|
+
|
132
|
+
assert_equal "string", mapping.fetch(1) { "int" }
|
133
|
+
assert_equal "int", mapping.fetch(2) { "int" }
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_fetch_yields_args
|
137
|
+
mapping = TypeMap.new
|
138
|
+
|
139
|
+
assert_equal "foo-1-2-3", mapping.fetch("foo", 1, 2, 3) { |*args| args.join("-") }
|
140
|
+
assert_equal "bar-1-2-3", mapping.fetch("bar", 1, 2, 3) { |*args| args.join("-") }
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_fetch_memoizes
|
144
|
+
mapping = TypeMap.new
|
145
|
+
|
146
|
+
looked_up = false
|
147
|
+
mapping.register_type(1) do
|
148
|
+
fail if looked_up
|
149
|
+
looked_up = true
|
150
|
+
"string"
|
151
|
+
end
|
152
|
+
|
153
|
+
assert_equal "string", mapping.fetch(1)
|
154
|
+
assert_equal "string", mapping.fetch(1)
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_fetch_memoizes_on_args
|
158
|
+
mapping = TypeMap.new
|
159
|
+
mapping.register_type("foo") { |*args| args.join("-") }
|
160
|
+
|
161
|
+
assert_equal "foo-1-2-3", mapping.fetch("foo", 1, 2, 3) { |*args| args.join("-") }
|
162
|
+
assert_equal "foo-2-3-4", mapping.fetch("foo", 2, 3, 4) { |*args| args.join("-") }
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_register_clears_cache
|
166
|
+
mapping = TypeMap.new
|
167
|
+
|
168
|
+
mapping.register_type(1, "string")
|
169
|
+
mapping.lookup(1)
|
170
|
+
mapping.register_type(1, "int")
|
171
|
+
|
172
|
+
assert_equal "int", mapping.lookup(1)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
require "models/company"
|
3
|
+
|
4
|
+
module ActiveRecord
|
5
|
+
module Type
|
6
|
+
class UnsignedIntegerTest < ActiveRecord::TestCase
|
7
|
+
test "unsigned int max value is in range" do
|
8
|
+
assert_equal(4294967295, UnsignedInteger.new.type_cast_for_database(4294967295))
|
9
|
+
end
|
10
|
+
|
11
|
+
test "minus value is out of range" do
|
12
|
+
assert_raises(::RangeError) do
|
13
|
+
UnsignedInteger.new.type_cast_for_database(-1)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module ConnectionAdapters
|
5
|
+
class TypesTest < ActiveRecord::TestCase
|
6
|
+
def test_type_cast_boolean
|
7
|
+
type = Type::Boolean.new
|
8
|
+
assert type.type_cast_from_user('').nil?
|
9
|
+
assert type.type_cast_from_user(nil).nil?
|
10
|
+
|
11
|
+
assert type.type_cast_from_user(true)
|
12
|
+
assert type.type_cast_from_user(1)
|
13
|
+
assert type.type_cast_from_user('1')
|
14
|
+
assert type.type_cast_from_user('t')
|
15
|
+
assert type.type_cast_from_user('T')
|
16
|
+
assert type.type_cast_from_user('true')
|
17
|
+
assert type.type_cast_from_user('TRUE')
|
18
|
+
assert type.type_cast_from_user('on')
|
19
|
+
assert type.type_cast_from_user('ON')
|
20
|
+
|
21
|
+
# explicitly check for false vs nil
|
22
|
+
assert_equal false, type.type_cast_from_user(false)
|
23
|
+
assert_equal false, type.type_cast_from_user(0)
|
24
|
+
assert_equal false, type.type_cast_from_user('0')
|
25
|
+
assert_equal false, type.type_cast_from_user('f')
|
26
|
+
assert_equal false, type.type_cast_from_user('F')
|
27
|
+
assert_equal false, type.type_cast_from_user('false')
|
28
|
+
assert_equal false, type.type_cast_from_user('FALSE')
|
29
|
+
assert_equal false, type.type_cast_from_user('off')
|
30
|
+
assert_equal false, type.type_cast_from_user('OFF')
|
31
|
+
assert_deprecated do
|
32
|
+
assert_equal false, type.type_cast_from_user(' ')
|
33
|
+
assert_equal false, type.type_cast_from_user("\u3000\r\n")
|
34
|
+
assert_equal false, type.type_cast_from_user("\u0000")
|
35
|
+
assert_equal false, type.type_cast_from_user('SOMETHING RANDOM')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_type_cast_float
|
40
|
+
type = Type::Float.new
|
41
|
+
assert_equal 1.0, type.type_cast_from_user("1")
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_changing_float
|
45
|
+
type = Type::Float.new
|
46
|
+
|
47
|
+
assert type.changed?(5.0, 5.0, '5wibble')
|
48
|
+
assert_not type.changed?(5.0, 5.0, '5')
|
49
|
+
assert_not type.changed?(5.0, 5.0, '5.0')
|
50
|
+
assert_not type.changed?(nil, nil, nil)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_type_cast_binary
|
54
|
+
type = Type::Binary.new
|
55
|
+
assert_equal nil, type.type_cast_from_user(nil)
|
56
|
+
assert_equal "1", type.type_cast_from_user("1")
|
57
|
+
assert_equal 1, type.type_cast_from_user(1)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_type_cast_time
|
61
|
+
type = Type::Time.new
|
62
|
+
assert_equal nil, type.type_cast_from_user(nil)
|
63
|
+
assert_equal nil, type.type_cast_from_user('')
|
64
|
+
assert_equal nil, type.type_cast_from_user('ABC')
|
65
|
+
|
66
|
+
time_string = Time.now.utc.strftime("%T")
|
67
|
+
assert_equal time_string, type.type_cast_from_user(time_string).strftime("%T")
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_type_cast_datetime_and_timestamp
|
71
|
+
type = Type::DateTime.new
|
72
|
+
assert_equal nil, type.type_cast_from_user(nil)
|
73
|
+
assert_equal nil, type.type_cast_from_user('')
|
74
|
+
assert_equal nil, type.type_cast_from_user(' ')
|
75
|
+
assert_equal nil, type.type_cast_from_user('ABC')
|
76
|
+
|
77
|
+
datetime_string = Time.now.utc.strftime("%FT%T")
|
78
|
+
assert_equal datetime_string, type.type_cast_from_user(datetime_string).strftime("%FT%T")
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_type_cast_date
|
82
|
+
type = Type::Date.new
|
83
|
+
assert_equal nil, type.type_cast_from_user(nil)
|
84
|
+
assert_equal nil, type.type_cast_from_user('')
|
85
|
+
assert_equal nil, type.type_cast_from_user(' ')
|
86
|
+
assert_equal nil, type.type_cast_from_user('ABC')
|
87
|
+
|
88
|
+
date_string = Time.now.utc.strftime("%F")
|
89
|
+
assert_equal date_string, type.type_cast_from_user(date_string).strftime("%F")
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_type_cast_duration_to_integer
|
93
|
+
type = Type::Integer.new
|
94
|
+
assert_equal 1800, type.type_cast_from_user(30.minutes)
|
95
|
+
assert_equal 7200, type.type_cast_from_user(2.hours)
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_string_to_time_with_timezone
|
99
|
+
[:utc, :local].each do |zone|
|
100
|
+
with_timezone_config default: zone do
|
101
|
+
type = Type::DateTime.new
|
102
|
+
assert_equal Time.utc(2013, 9, 4, 0, 0, 0), type.type_cast_from_user("Wed, 04 Sep 2013 03:00:00 EAT")
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_type_equality
|
108
|
+
assert_equal Type::Value.new, Type::Value.new
|
109
|
+
assert_not_equal Type::Value.new, Type::Integer.new
|
110
|
+
assert_not_equal Type::Value.new(precision: 1), Type::Value.new(precision: 2)
|
111
|
+
end
|
112
|
+
|
113
|
+
if current_adapter?(:SQLite3Adapter)
|
114
|
+
def test_binary_encoding
|
115
|
+
type = SQLite3Binary.new
|
116
|
+
utf8_string = "a string".encode(Encoding::UTF_8)
|
117
|
+
type_cast = type.type_cast_from_user(utf8_string)
|
118
|
+
|
119
|
+
assert_equal Encoding::ASCII_8BIT, type_cast.encoding
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_attributes_which_are_invalid_for_database_can_still_be_reassigned
|
124
|
+
type_which_cannot_go_to_the_database = Type::Value.new
|
125
|
+
def type_which_cannot_go_to_the_database.type_cast_for_database(*)
|
126
|
+
raise
|
127
|
+
end
|
128
|
+
klass = Class.new(ActiveRecord::Base) do
|
129
|
+
self.table_name = 'posts'
|
130
|
+
attribute :foo, type_which_cannot_go_to_the_database
|
131
|
+
end
|
132
|
+
model = klass.new
|
133
|
+
|
134
|
+
model.foo = "foo"
|
135
|
+
model.foo = "bar"
|
136
|
+
|
137
|
+
assert_equal "bar", model.foo
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|