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,200 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
class AttributeSetTest < ActiveRecord::TestCase
|
5
|
+
test "building a new set from raw attributes" do
|
6
|
+
builder = AttributeSet::Builder.new(foo: Type::Integer.new, bar: Type::Float.new)
|
7
|
+
attributes = builder.build_from_database(foo: '1.1', bar: '2.2')
|
8
|
+
|
9
|
+
assert_equal 1, attributes[:foo].value
|
10
|
+
assert_equal 2.2, attributes[:bar].value
|
11
|
+
assert_equal :foo, attributes[:foo].name
|
12
|
+
assert_equal :bar, attributes[:bar].name
|
13
|
+
end
|
14
|
+
|
15
|
+
test "building with custom types" do
|
16
|
+
builder = AttributeSet::Builder.new(foo: Type::Float.new)
|
17
|
+
attributes = builder.build_from_database({ foo: '3.3', bar: '4.4' }, { bar: Type::Integer.new })
|
18
|
+
|
19
|
+
assert_equal 3.3, attributes[:foo].value
|
20
|
+
assert_equal 4, attributes[:bar].value
|
21
|
+
end
|
22
|
+
|
23
|
+
test "[] returns a null object" do
|
24
|
+
builder = AttributeSet::Builder.new(foo: Type::Float.new)
|
25
|
+
attributes = builder.build_from_database(foo: '3.3')
|
26
|
+
|
27
|
+
assert_equal '3.3', attributes[:foo].value_before_type_cast
|
28
|
+
assert_equal nil, attributes[:bar].value_before_type_cast
|
29
|
+
assert_equal :bar, attributes[:bar].name
|
30
|
+
end
|
31
|
+
|
32
|
+
test "duping creates a new hash and dups each attribute" do
|
33
|
+
builder = AttributeSet::Builder.new(foo: Type::Integer.new, bar: Type::String.new)
|
34
|
+
attributes = builder.build_from_database(foo: 1, bar: 'foo')
|
35
|
+
|
36
|
+
# Ensure the type cast value is cached
|
37
|
+
attributes[:foo].value
|
38
|
+
attributes[:bar].value
|
39
|
+
|
40
|
+
duped = attributes.dup
|
41
|
+
duped.write_from_database(:foo, 2)
|
42
|
+
duped[:bar].value << 'bar'
|
43
|
+
|
44
|
+
assert_equal 1, attributes[:foo].value
|
45
|
+
assert_equal 2, duped[:foo].value
|
46
|
+
assert_equal 'foo', attributes[:bar].value
|
47
|
+
assert_equal 'foobar', duped[:bar].value
|
48
|
+
end
|
49
|
+
|
50
|
+
test "freezing cloned set does not freeze original" do
|
51
|
+
attributes = AttributeSet.new({})
|
52
|
+
clone = attributes.clone
|
53
|
+
|
54
|
+
clone.freeze
|
55
|
+
|
56
|
+
assert clone.frozen?
|
57
|
+
assert_not attributes.frozen?
|
58
|
+
end
|
59
|
+
|
60
|
+
test "to_hash returns a hash of the type cast values" do
|
61
|
+
builder = AttributeSet::Builder.new(foo: Type::Integer.new, bar: Type::Float.new)
|
62
|
+
attributes = builder.build_from_database(foo: '1.1', bar: '2.2')
|
63
|
+
|
64
|
+
assert_equal({ foo: 1, bar: 2.2 }, attributes.to_hash)
|
65
|
+
assert_equal({ foo: 1, bar: 2.2 }, attributes.to_h)
|
66
|
+
end
|
67
|
+
|
68
|
+
test "to_hash maintains order" do
|
69
|
+
builder = AttributeSet::Builder.new(foo: Type::Integer.new, bar: Type::Float.new)
|
70
|
+
attributes = builder.build_from_database(foo: '2.2', bar: '3.3')
|
71
|
+
|
72
|
+
attributes[:bar]
|
73
|
+
hash = attributes.to_h
|
74
|
+
|
75
|
+
assert_equal [[:foo, 2], [:bar, 3.3]], hash.to_a
|
76
|
+
end
|
77
|
+
|
78
|
+
test "values_before_type_cast" do
|
79
|
+
builder = AttributeSet::Builder.new(foo: Type::Integer.new, bar: Type::Integer.new)
|
80
|
+
attributes = builder.build_from_database(foo: '1.1', bar: '2.2')
|
81
|
+
|
82
|
+
assert_equal({ foo: '1.1', bar: '2.2' }, attributes.values_before_type_cast)
|
83
|
+
end
|
84
|
+
|
85
|
+
test "known columns are built with uninitialized attributes" do
|
86
|
+
attributes = attributes_with_uninitialized_key
|
87
|
+
assert attributes[:foo].initialized?
|
88
|
+
assert_not attributes[:bar].initialized?
|
89
|
+
end
|
90
|
+
|
91
|
+
test "uninitialized attributes are not included in the attributes hash" do
|
92
|
+
attributes = attributes_with_uninitialized_key
|
93
|
+
assert_equal({ foo: 1 }, attributes.to_hash)
|
94
|
+
end
|
95
|
+
|
96
|
+
test "uninitialized attributes are not included in keys" do
|
97
|
+
attributes = attributes_with_uninitialized_key
|
98
|
+
assert_equal [:foo], attributes.keys
|
99
|
+
end
|
100
|
+
|
101
|
+
test "uninitialized attributes return false for key?" do
|
102
|
+
attributes = attributes_with_uninitialized_key
|
103
|
+
assert attributes.key?(:foo)
|
104
|
+
assert_not attributes.key?(:bar)
|
105
|
+
end
|
106
|
+
|
107
|
+
test "unknown attributes return false for key?" do
|
108
|
+
attributes = attributes_with_uninitialized_key
|
109
|
+
assert_not attributes.key?(:wibble)
|
110
|
+
end
|
111
|
+
|
112
|
+
test "fetch_value returns the value for the given initialized attribute" do
|
113
|
+
builder = AttributeSet::Builder.new(foo: Type::Integer.new, bar: Type::Float.new)
|
114
|
+
attributes = builder.build_from_database(foo: '1.1', bar: '2.2')
|
115
|
+
|
116
|
+
assert_equal 1, attributes.fetch_value(:foo)
|
117
|
+
assert_equal 2.2, attributes.fetch_value(:bar)
|
118
|
+
end
|
119
|
+
|
120
|
+
test "fetch_value returns nil for unknown attributes" do
|
121
|
+
attributes = attributes_with_uninitialized_key
|
122
|
+
assert_nil attributes.fetch_value(:wibble) { "hello" }
|
123
|
+
end
|
124
|
+
|
125
|
+
test "fetch_value returns nil for unknown attributes when types has a default" do
|
126
|
+
types = Hash.new(Type::Value.new)
|
127
|
+
builder = AttributeSet::Builder.new(types)
|
128
|
+
attributes = builder.build_from_database
|
129
|
+
|
130
|
+
assert_nil attributes.fetch_value(:wibble) { "hello" }
|
131
|
+
end
|
132
|
+
|
133
|
+
test "fetch_value uses the given block for uninitialized attributes" do
|
134
|
+
attributes = attributes_with_uninitialized_key
|
135
|
+
value = attributes.fetch_value(:bar) { |n| n.to_s + '!' }
|
136
|
+
assert_equal 'bar!', value
|
137
|
+
end
|
138
|
+
|
139
|
+
test "fetch_value returns nil for uninitialized attributes if no block is given" do
|
140
|
+
attributes = attributes_with_uninitialized_key
|
141
|
+
assert_nil attributes.fetch_value(:bar)
|
142
|
+
end
|
143
|
+
|
144
|
+
test "the primary_key is always initialized" do
|
145
|
+
builder = AttributeSet::Builder.new({ foo: Type::Integer.new }, :foo)
|
146
|
+
attributes = builder.build_from_database
|
147
|
+
|
148
|
+
assert attributes.key?(:foo)
|
149
|
+
assert_equal [:foo], attributes.keys
|
150
|
+
assert attributes[:foo].initialized?
|
151
|
+
end
|
152
|
+
|
153
|
+
class MyType
|
154
|
+
def type_cast_from_user(value)
|
155
|
+
return if value.nil?
|
156
|
+
value + " from user"
|
157
|
+
end
|
158
|
+
|
159
|
+
def type_cast_from_database(value)
|
160
|
+
return if value.nil?
|
161
|
+
value + " from database"
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
test "write_from_database sets the attribute with database typecasting" do
|
166
|
+
builder = AttributeSet::Builder.new(foo: MyType.new)
|
167
|
+
attributes = builder.build_from_database
|
168
|
+
|
169
|
+
assert_nil attributes.fetch_value(:foo)
|
170
|
+
|
171
|
+
attributes.write_from_database(:foo, "value")
|
172
|
+
|
173
|
+
assert_equal "value from database", attributes.fetch_value(:foo)
|
174
|
+
end
|
175
|
+
|
176
|
+
test "write_from_user sets the attribute with user typecasting" do
|
177
|
+
builder = AttributeSet::Builder.new(foo: MyType.new)
|
178
|
+
attributes = builder.build_from_database
|
179
|
+
|
180
|
+
assert_nil attributes.fetch_value(:foo)
|
181
|
+
|
182
|
+
attributes.write_from_user(:foo, "value")
|
183
|
+
|
184
|
+
assert_equal "value from user", attributes.fetch_value(:foo)
|
185
|
+
end
|
186
|
+
|
187
|
+
def attributes_with_uninitialized_key
|
188
|
+
builder = AttributeSet::Builder.new(foo: Type::Integer.new, bar: Type::Float.new)
|
189
|
+
builder.build_from_database(foo: '1.1')
|
190
|
+
end
|
191
|
+
|
192
|
+
test "freezing doesn't prevent the set from materializing" do
|
193
|
+
builder = AttributeSet::Builder.new(foo: Type::String.new)
|
194
|
+
attributes = builder.build_from_database(foo: "1")
|
195
|
+
|
196
|
+
attributes.freeze
|
197
|
+
assert_equal({ foo: "1" }, attributes.to_hash)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
require 'minitest/mock'
|
3
|
+
|
4
|
+
module ActiveRecord
|
5
|
+
class AttributeTest < ActiveRecord::TestCase
|
6
|
+
setup do
|
7
|
+
@type = Minitest::Mock.new
|
8
|
+
end
|
9
|
+
|
10
|
+
teardown do
|
11
|
+
assert @type.verify
|
12
|
+
end
|
13
|
+
|
14
|
+
test "from_database + read type casts from database" do
|
15
|
+
@type.expect(:type_cast_from_database, 'type cast from database', ['a value'])
|
16
|
+
attribute = Attribute.from_database(nil, 'a value', @type)
|
17
|
+
|
18
|
+
type_cast_value = attribute.value
|
19
|
+
|
20
|
+
assert_equal 'type cast from database', type_cast_value
|
21
|
+
end
|
22
|
+
|
23
|
+
test "from_user + read type casts from user" do
|
24
|
+
@type.expect(:type_cast_from_user, 'type cast from user', ['a value'])
|
25
|
+
attribute = Attribute.from_user(nil, 'a value', @type)
|
26
|
+
|
27
|
+
type_cast_value = attribute.value
|
28
|
+
|
29
|
+
assert_equal 'type cast from user', type_cast_value
|
30
|
+
end
|
31
|
+
|
32
|
+
test "reading memoizes the value" do
|
33
|
+
@type.expect(:type_cast_from_database, 'from the database', ['whatever'])
|
34
|
+
attribute = Attribute.from_database(nil, 'whatever', @type)
|
35
|
+
|
36
|
+
type_cast_value = attribute.value
|
37
|
+
second_read = attribute.value
|
38
|
+
|
39
|
+
assert_equal 'from the database', type_cast_value
|
40
|
+
assert_same type_cast_value, second_read
|
41
|
+
end
|
42
|
+
|
43
|
+
test "reading memoizes falsy values" do
|
44
|
+
@type.expect(:type_cast_from_database, false, ['whatever'])
|
45
|
+
attribute = Attribute.from_database(nil, 'whatever', @type)
|
46
|
+
|
47
|
+
attribute.value
|
48
|
+
attribute.value
|
49
|
+
end
|
50
|
+
|
51
|
+
test "read_before_typecast returns the given value" do
|
52
|
+
attribute = Attribute.from_database(nil, 'raw value', @type)
|
53
|
+
|
54
|
+
raw_value = attribute.value_before_type_cast
|
55
|
+
|
56
|
+
assert_equal 'raw value', raw_value
|
57
|
+
end
|
58
|
+
|
59
|
+
test "from_database + read_for_database type casts to and from database" do
|
60
|
+
@type.expect(:type_cast_from_database, 'read from database', ['whatever'])
|
61
|
+
@type.expect(:type_cast_for_database, 'ready for database', ['read from database'])
|
62
|
+
attribute = Attribute.from_database(nil, 'whatever', @type)
|
63
|
+
|
64
|
+
type_cast_for_database = attribute.value_for_database
|
65
|
+
|
66
|
+
assert_equal 'ready for database', type_cast_for_database
|
67
|
+
end
|
68
|
+
|
69
|
+
test "from_user + read_for_database type casts from the user to the database" do
|
70
|
+
@type.expect(:type_cast_from_user, 'read from user', ['whatever'])
|
71
|
+
@type.expect(:type_cast_for_database, 'ready for database', ['read from user'])
|
72
|
+
attribute = Attribute.from_user(nil, 'whatever', @type)
|
73
|
+
|
74
|
+
type_cast_for_database = attribute.value_for_database
|
75
|
+
|
76
|
+
assert_equal 'ready for database', type_cast_for_database
|
77
|
+
end
|
78
|
+
|
79
|
+
test "duping dups the value" do
|
80
|
+
@type.expect(:type_cast_from_database, 'type cast', ['a value'])
|
81
|
+
attribute = Attribute.from_database(nil, 'a value', @type)
|
82
|
+
|
83
|
+
value_from_orig = attribute.value
|
84
|
+
value_from_clone = attribute.dup.value
|
85
|
+
value_from_orig << ' foo'
|
86
|
+
|
87
|
+
assert_equal 'type cast foo', value_from_orig
|
88
|
+
assert_equal 'type cast', value_from_clone
|
89
|
+
end
|
90
|
+
|
91
|
+
test "duping does not dup the value if it is not dupable" do
|
92
|
+
@type.expect(:type_cast_from_database, false, ['a value'])
|
93
|
+
attribute = Attribute.from_database(nil, 'a value', @type)
|
94
|
+
|
95
|
+
assert_same attribute.value, attribute.dup.value
|
96
|
+
end
|
97
|
+
|
98
|
+
test "duping does not eagerly type cast if we have not yet type cast" do
|
99
|
+
attribute = Attribute.from_database(nil, 'a value', @type)
|
100
|
+
attribute.dup
|
101
|
+
end
|
102
|
+
|
103
|
+
class MyType
|
104
|
+
def type_cast_from_user(value)
|
105
|
+
value + " from user"
|
106
|
+
end
|
107
|
+
|
108
|
+
def type_cast_from_database(value)
|
109
|
+
value + " from database"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
test "with_value_from_user returns a new attribute with the value from the user" do
|
114
|
+
old = Attribute.from_database(nil, "old", MyType.new)
|
115
|
+
new = old.with_value_from_user("new")
|
116
|
+
|
117
|
+
assert_equal "old from database", old.value
|
118
|
+
assert_equal "new from user", new.value
|
119
|
+
end
|
120
|
+
|
121
|
+
test "with_value_from_database returns a new attribute with the value from the database" do
|
122
|
+
old = Attribute.from_user(nil, "old", MyType.new)
|
123
|
+
new = old.with_value_from_database("new")
|
124
|
+
|
125
|
+
assert_equal "old from user", old.value
|
126
|
+
assert_equal "new from database", new.value
|
127
|
+
end
|
128
|
+
|
129
|
+
test "uninitialized attributes yield their name if a block is given to value" do
|
130
|
+
block = proc { |name| name.to_s + "!" }
|
131
|
+
foo = Attribute.uninitialized(:foo, nil)
|
132
|
+
bar = Attribute.uninitialized(:bar, nil)
|
133
|
+
|
134
|
+
assert_equal "foo!", foo.value(&block)
|
135
|
+
assert_equal "bar!", bar.value(&block)
|
136
|
+
end
|
137
|
+
|
138
|
+
test "uninitialized attributes have no value" do
|
139
|
+
assert_nil Attribute.uninitialized(:foo, nil).value
|
140
|
+
end
|
141
|
+
|
142
|
+
test "attributes equal other attributes with the same constructor arguments" do
|
143
|
+
first = Attribute.from_database(:foo, 1, Type::Integer.new)
|
144
|
+
second = Attribute.from_database(:foo, 1, Type::Integer.new)
|
145
|
+
assert_equal first, second
|
146
|
+
end
|
147
|
+
|
148
|
+
test "attributes do not equal attributes with different names" do
|
149
|
+
first = Attribute.from_database(:foo, 1, Type::Integer.new)
|
150
|
+
second = Attribute.from_database(:bar, 1, Type::Integer.new)
|
151
|
+
assert_not_equal first, second
|
152
|
+
end
|
153
|
+
|
154
|
+
test "attributes do not equal attributes with different types" do
|
155
|
+
first = Attribute.from_database(:foo, 1, Type::Integer.new)
|
156
|
+
second = Attribute.from_database(:foo, 1, Type::Float.new)
|
157
|
+
assert_not_equal first, second
|
158
|
+
end
|
159
|
+
|
160
|
+
test "attributes do not equal attributes with different values" do
|
161
|
+
first = Attribute.from_database(:foo, 1, Type::Integer.new)
|
162
|
+
second = Attribute.from_database(:foo, 2, Type::Integer.new)
|
163
|
+
assert_not_equal first, second
|
164
|
+
end
|
165
|
+
|
166
|
+
test "attributes do not equal attributes of other classes" do
|
167
|
+
first = Attribute.from_database(:foo, 1, Type::Integer.new)
|
168
|
+
second = Attribute.from_user(:foo, 1, Type::Integer.new)
|
169
|
+
assert_not_equal first, second
|
170
|
+
end
|
171
|
+
|
172
|
+
test "an attribute can not be mutated if it has not been read,
|
173
|
+
and skips expensive calculations" do
|
174
|
+
type_which_raises_from_all_methods = Object.new
|
175
|
+
attribute = Attribute.from_database(:foo, "bar", type_which_raises_from_all_methods)
|
176
|
+
|
177
|
+
assert_not attribute.changed_in_place_from?("bar")
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require 'cases/helper'
|
2
|
+
|
3
|
+
class OverloadedType < ActiveRecord::Base
|
4
|
+
attribute :overloaded_float, Type::Integer.new
|
5
|
+
attribute :overloaded_string_with_limit, Type::String.new(limit: 50)
|
6
|
+
attribute :non_existent_decimal, Type::Decimal.new
|
7
|
+
attribute :string_with_default, Type::String.new, default: 'the overloaded default'
|
8
|
+
end
|
9
|
+
|
10
|
+
class ChildOfOverloadedType < OverloadedType
|
11
|
+
end
|
12
|
+
|
13
|
+
class GrandchildOfOverloadedType < ChildOfOverloadedType
|
14
|
+
attribute :overloaded_float, Type::Float.new
|
15
|
+
end
|
16
|
+
|
17
|
+
class UnoverloadedType < ActiveRecord::Base
|
18
|
+
self.table_name = 'overloaded_types'
|
19
|
+
end
|
20
|
+
|
21
|
+
module ActiveRecord
|
22
|
+
class CustomPropertiesTest < ActiveRecord::TestCase
|
23
|
+
test "overloading types" do
|
24
|
+
data = OverloadedType.new
|
25
|
+
|
26
|
+
data.overloaded_float = "1.1"
|
27
|
+
data.unoverloaded_float = "1.1"
|
28
|
+
|
29
|
+
assert_equal 1, data.overloaded_float
|
30
|
+
assert_equal 1.1, data.unoverloaded_float
|
31
|
+
end
|
32
|
+
|
33
|
+
test "overloaded properties save" do
|
34
|
+
data = OverloadedType.new
|
35
|
+
|
36
|
+
data.overloaded_float = "2.2"
|
37
|
+
data.save!
|
38
|
+
data.reload
|
39
|
+
|
40
|
+
assert_equal 2, data.overloaded_float
|
41
|
+
assert_kind_of Fixnum, OverloadedType.last.overloaded_float
|
42
|
+
assert_equal 2.0, UnoverloadedType.last.overloaded_float
|
43
|
+
assert_kind_of Float, UnoverloadedType.last.overloaded_float
|
44
|
+
end
|
45
|
+
|
46
|
+
test "properties assigned in constructor" do
|
47
|
+
data = OverloadedType.new(overloaded_float: '3.3')
|
48
|
+
|
49
|
+
assert_equal 3, data.overloaded_float
|
50
|
+
end
|
51
|
+
|
52
|
+
test "overloaded properties with limit" do
|
53
|
+
assert_equal 50, OverloadedType.columns_hash['overloaded_string_with_limit'].limit
|
54
|
+
assert_equal 255, UnoverloadedType.columns_hash['overloaded_string_with_limit'].limit
|
55
|
+
end
|
56
|
+
|
57
|
+
test "nonexistent attribute" do
|
58
|
+
data = OverloadedType.new(non_existent_decimal: 1)
|
59
|
+
|
60
|
+
assert_equal BigDecimal.new(1), data.non_existent_decimal
|
61
|
+
assert_raise ActiveRecord::UnknownAttributeError do
|
62
|
+
UnoverloadedType.new(non_existent_decimal: 1)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
test "changing defaults" do
|
67
|
+
data = OverloadedType.new
|
68
|
+
unoverloaded_data = UnoverloadedType.new
|
69
|
+
|
70
|
+
assert_equal 'the overloaded default', data.string_with_default
|
71
|
+
assert_equal 'the original default', unoverloaded_data.string_with_default
|
72
|
+
end
|
73
|
+
|
74
|
+
test "defaults are not touched on the columns" do
|
75
|
+
assert_equal 'the original default', OverloadedType.columns_hash['string_with_default'].default
|
76
|
+
end
|
77
|
+
|
78
|
+
test "children inherit custom properties" do
|
79
|
+
data = ChildOfOverloadedType.new(overloaded_float: '4.4')
|
80
|
+
|
81
|
+
assert_equal 4, data.overloaded_float
|
82
|
+
end
|
83
|
+
|
84
|
+
test "children can override parents" do
|
85
|
+
data = GrandchildOfOverloadedType.new(overloaded_float: '4.4')
|
86
|
+
|
87
|
+
assert_equal 4.4, data.overloaded_float
|
88
|
+
end
|
89
|
+
|
90
|
+
test "overloading properties does not change column order" do
|
91
|
+
column_names = OverloadedType.column_names
|
92
|
+
assert_equal %w(id overloaded_float unoverloaded_float overloaded_string_with_limit string_with_default non_existent_decimal), column_names
|
93
|
+
end
|
94
|
+
|
95
|
+
test "caches are cleared" do
|
96
|
+
klass = Class.new(OverloadedType)
|
97
|
+
|
98
|
+
assert_equal 6, klass.columns.length
|
99
|
+
assert_not klass.columns_hash.key?('wibble')
|
100
|
+
assert_equal 6, klass.column_types.length
|
101
|
+
assert_equal 6, klass.column_defaults.length
|
102
|
+
assert_not klass.column_names.include?('wibble')
|
103
|
+
assert_equal 5, klass.content_columns.length
|
104
|
+
|
105
|
+
klass.attribute :wibble, Type::Value.new
|
106
|
+
|
107
|
+
assert_equal 7, klass.columns.length
|
108
|
+
assert klass.columns_hash.key?('wibble')
|
109
|
+
assert_equal 7, klass.column_types.length
|
110
|
+
assert_equal 7, klass.column_defaults.length
|
111
|
+
assert klass.column_names.include?('wibble')
|
112
|
+
assert_equal 6, klass.content_columns.length
|
113
|
+
end
|
114
|
+
|
115
|
+
test "non string/integers use custom types for queries" do
|
116
|
+
klass = Class.new(OverloadedType)
|
117
|
+
type = Type::Value.new
|
118
|
+
def type.cast_value(value)
|
119
|
+
!!value
|
120
|
+
end
|
121
|
+
|
122
|
+
def type.type_cast_for_database(value)
|
123
|
+
if value
|
124
|
+
"Y"
|
125
|
+
else
|
126
|
+
"N"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
klass.attribute(:string_with_default, type, default: false)
|
131
|
+
klass.create!(string_with_default: true)
|
132
|
+
|
133
|
+
assert_equal 1, klass.where(string_with_default: true).count
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|