ibm_db 3.0.4-x86-mingw32 → 3.0.5-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 -1
- data/LICENSE +1 -1
- data/MANIFEST +14 -14
- data/README +225 -225
- data/ext/Makefile.nt32 +181 -181
- data/ext/Makefile.nt32.191 +212 -212
- data/ext/extconf.rb +291 -291
- data/ext/ibm_db.c +11887 -11884
- data/ext/ruby_ibm_db.h +241 -241
- data/ext/ruby_ibm_db_cli.c +866 -866
- 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 +3177 -3177
- 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 +122 -122
- data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +46 -46
- data/test/assets/example.log +1 -1
- data/test/assets/test.txt +1 -1
- data/test/cases/adapter_test.rb +276 -261
- data/test/cases/aggregations_test.rb +158 -158
- data/test/cases/ar_schema_test.rb +161 -161
- data/test/cases/associations/association_scope_test.rb +21 -21
- data/test/cases/associations/belongs_to_associations_test.rb +1029 -1029
- data/test/cases/associations/callbacks_test.rb +192 -192
- data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
- data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -26
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
- data/test/cases/associations/eager_load_nested_include_test.rb +128 -128
- data/test/cases/associations/eager_singularization_test.rb +148 -148
- data/test/cases/associations/eager_test.rb +1429 -1411
- data/test/cases/associations/extension_test.rb +82 -82
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +972 -932
- data/test/cases/associations/has_many_associations_test.rb +2182 -2162
- data/test/cases/associations/has_many_through_associations_test.rb +1204 -1204
- data/test/cases/associations/has_one_associations_test.rb +610 -610
- data/test/cases/associations/has_one_through_associations_test.rb +380 -380
- data/test/cases/associations/inner_join_association_test.rb +139 -139
- data/test/cases/associations/inverse_associations_test.rb +706 -693
- data/test/cases/associations/join_model_test.rb +754 -754
- data/test/cases/associations/nested_through_associations_test.rb +579 -579
- data/test/cases/associations/required_test.rb +82 -82
- data/test/cases/associations_test.rb +380 -380
- data/test/cases/attribute_decorators_test.rb +125 -125
- data/test/cases/attribute_methods/read_test.rb +60 -60
- data/test/cases/attribute_methods/serialization_test.rb +29 -29
- data/test/cases/attribute_methods_test.rb +952 -952
- data/test/cases/attribute_set_test.rb +210 -200
- data/test/cases/attribute_test.rb +180 -180
- data/test/cases/attributes_test.rb +136 -136
- data/test/cases/autosave_association_test.rb +1595 -1595
- data/test/cases/base_test.rb +1664 -1638
- data/test/cases/batches_test.rb +212 -212
- data/test/cases/binary_test.rb +52 -52
- data/test/cases/bind_parameter_test.rb +100 -100
- data/test/cases/calculations_test.rb +646 -646
- data/test/cases/callbacks_test.rb +543 -543
- data/test/cases/clone_test.rb +40 -40
- data/test/cases/coders/yaml_column_test.rb +63 -63
- data/test/cases/column_alias_test.rb +17 -17
- data/test/cases/column_definition_test.rb +123 -123
- data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -54
- data/test/cases/connection_adapters/connection_handler_test.rb +53 -53
- data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -293
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -65
- data/test/cases/connection_adapters/quoting_test.rb +13 -13
- data/test/cases/connection_adapters/schema_cache_test.rb +56 -56
- data/test/cases/connection_adapters/type_lookup_test.rb +110 -110
- data/test/cases/connection_management_test.rb +122 -122
- data/test/cases/connection_pool_test.rb +346 -346
- data/test/cases/connection_specification/resolver_test.rb +116 -116
- data/test/cases/core_test.rb +112 -112
- data/test/cases/counter_cache_test.rb +209 -209
- data/test/cases/custom_locking_test.rb +17 -17
- data/test/cases/database_statements_test.rb +19 -19
- data/test/cases/date_time_test.rb +61 -61
- data/test/cases/defaults_test.rb +223 -223
- data/test/cases/dirty_test.rb +785 -775
- data/test/cases/disconnected_test.rb +28 -28
- data/test/cases/dup_test.rb +157 -157
- data/test/cases/enum_test.rb +290 -290
- data/test/cases/explain_subscriber_test.rb +64 -64
- data/test/cases/explain_test.rb +76 -76
- data/test/cases/finder_respond_to_test.rb +60 -60
- data/test/cases/finder_test.rb +1169 -1166
- data/test/cases/fixture_set/file_test.rb +138 -138
- data/test/cases/fixtures_test.rb +908 -897
- data/test/cases/forbidden_attributes_protection_test.rb +99 -99
- data/test/cases/habtm_destroy_order_test.rb +61 -61
- data/test/cases/helper.rb +210 -210
- data/test/cases/hot_compatibility_test.rb +54 -54
- data/test/cases/i18n_test.rb +45 -45
- data/test/cases/inheritance_test.rb +375 -375
- data/test/cases/integration_test.rb +139 -139
- data/test/cases/invalid_connection_test.rb +22 -22
- data/test/cases/invalid_date_test.rb +32 -32
- data/test/cases/invertible_migration_test.rb +295 -295
- data/test/cases/json_serialization_test.rb +302 -302
- data/test/cases/locking_test.rb +477 -477
- data/test/cases/log_subscriber_test.rb +136 -136
- data/test/cases/migration/change_schema_test - Copy.rb +448 -448
- data/test/cases/migration/change_schema_test.rb +512 -472
- data/test/cases/migration/change_table_test.rb +224 -224
- data/test/cases/migration/column_attributes_test.rb +192 -192
- data/test/cases/migration/column_positioning_test.rb +56 -56
- data/test/cases/migration/columns_test.rb +304 -304
- data/test/cases/migration/command_recorder_test.rb +305 -305
- data/test/cases/migration/create_join_table_test.rb +148 -148
- data/test/cases/migration/foreign_key_test - Changed.rb +325 -325
- data/test/cases/migration/foreign_key_test.rb +328 -360
- data/test/cases/migration/helper.rb +39 -39
- data/test/cases/migration/index_test.rb +216 -216
- data/test/cases/migration/logger_test.rb +36 -36
- data/test/cases/migration/pending_migrations_test.rb +53 -53
- data/test/cases/migration/references_foreign_key_test.rb +169 -214
- data/test/cases/migration/references_index_test.rb +101 -101
- data/test/cases/migration/references_statements_test.rb +116 -116
- data/test/cases/migration/rename_table_test.rb +93 -93
- data/test/cases/migration/table_and_index_test.rb +24 -24
- data/test/cases/migration_test.rb +959 -959
- data/test/cases/migrator_test.rb +388 -388
- data/test/cases/mixin_test.rb +70 -70
- data/test/cases/modules_test.rb +173 -173
- data/test/cases/multiparameter_attributes_test.rb +350 -350
- data/test/cases/multiple_db_test.rb +115 -115
- data/test/cases/nested_attributes_test.rb +1070 -1057
- data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
- data/test/cases/persistence_test.rb +909 -909
- data/test/cases/pooled_connections_test.rb +81 -81
- data/test/cases/primary_keys_test.rb +237 -237
- data/test/cases/query_cache_test.rb +326 -326
- data/test/cases/quoting_test.rb +156 -156
- data/test/cases/readonly_test.rb +118 -118
- data/test/cases/reaper_test.rb +85 -85
- data/test/cases/reflection_test.rb +463 -454
- data/test/cases/relation/delegation_test.rb +68 -68
- data/test/cases/relation/merging_test.rb +161 -161
- data/test/cases/relation/mutation_test.rb +165 -165
- data/test/cases/relation/predicate_builder_test.rb +14 -14
- data/test/cases/relation/where_chain_test.rb +181 -181
- data/test/cases/relation/where_test.rb +300 -300
- data/test/cases/relation/where_test2.rb +36 -36
- data/test/cases/relation_test.rb +319 -297
- data/test/cases/relations_test.rb +1815 -1815
- data/test/cases/reload_models_test.rb +22 -22
- data/test/cases/result_test.rb +80 -80
- data/test/cases/sanitize_test.rb +83 -83
- data/test/cases/schema_dumper_test.rb +463 -463
- data/test/cases/scoping/default_scoping_test.rb +454 -454
- data/test/cases/scoping/named_scoping_test.rb +524 -524
- data/test/cases/scoping/relation_scoping_test.rb +357 -357
- data/test/cases/serialization_test.rb +104 -104
- data/test/cases/serialized_attribute_test.rb +277 -277
- data/test/cases/statement_cache_test.rb +98 -98
- data/test/cases/store_test.rb +194 -194
- data/test/cases/tasks/database_tasks_test.rb +398 -396
- data/test/cases/tasks/mysql_rake_test.rb +324 -311
- data/test/cases/tasks/postgresql_rake_test.rb +250 -245
- data/test/cases/tasks/sqlite_rake_test.rb +193 -193
- data/test/cases/test_case.rb +123 -123
- data/test/cases/timestamp_test.rb +467 -468
- data/test/cases/transaction_callbacks_test.rb +452 -452
- data/test/cases/transaction_isolation_test.rb +106 -106
- data/test/cases/transactions_test.rb +817 -817
- data/test/cases/type/decimal_test.rb +56 -51
- data/test/cases/type/integer_test.rb +121 -121
- data/test/cases/type/string_test.rb +36 -36
- data/test/cases/type/type_map_test.rb +177 -177
- data/test/cases/type/unsigned_integer_test.rb +18 -18
- data/test/cases/types_test.rb +141 -141
- data/test/cases/unconnected_test.rb +33 -33
- data/test/cases/validations/association_validation_test.rb +86 -86
- data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
- data/test/cases/validations/i18n_validation_test.rb +90 -90
- data/test/cases/validations/length_validation_test.rb +47 -47
- data/test/cases/validations/presence_validation_test.rb +68 -68
- data/test/cases/validations/uniqueness_validation_test.rb +457 -434
- data/test/cases/validations_repair_helper.rb +23 -23
- data/test/cases/validations_test.rb +165 -165
- data/test/cases/view_test.rb +119 -113
- data/test/cases/xml_serialization_test.rb +457 -457
- data/test/cases/yaml_serialization_test.rb +126 -86
- data/test/config.rb +5 -5
- data/test/config.yml +154 -154
- data/test/connections/native_ibm_db/connection.rb +43 -43
- data/test/fixtures/accounts.yml +29 -29
- data/test/fixtures/admin/accounts.yml +2 -2
- data/test/fixtures/admin/randomly_named_a9.yml +7 -7
- data/test/fixtures/admin/randomly_named_b0.yml +7 -7
- data/test/fixtures/admin/users.yml +10 -10
- data/test/fixtures/author_addresses.yml +17 -17
- data/test/fixtures/author_favorites.yml +3 -3
- data/test/fixtures/authors.yml +23 -23
- data/test/fixtures/binaries.yml +133 -133
- data/test/fixtures/books.yml +11 -11
- data/test/fixtures/bulbs.yml +5 -5
- data/test/fixtures/cars.yml +9 -9
- data/test/fixtures/categories.yml +19 -19
- data/test/fixtures/categories/special_categories.yml +9 -9
- data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
- data/test/fixtures/categories_ordered.yml +7 -7
- data/test/fixtures/categories_posts.yml +31 -31
- data/test/fixtures/categorizations.yml +23 -23
- data/test/fixtures/clubs.yml +8 -8
- data/test/fixtures/collections.yml +3 -3
- data/test/fixtures/colleges.yml +3 -3
- data/test/fixtures/comments.yml +65 -65
- data/test/fixtures/companies.yml +67 -67
- data/test/fixtures/computers.yml +10 -10
- data/test/fixtures/courses.yml +8 -8
- data/test/fixtures/customers.yml +25 -25
- data/test/fixtures/dashboards.yml +6 -6
- data/test/fixtures/developers.yml +21 -21
- data/test/fixtures/developers_projects.yml +16 -16
- data/test/fixtures/dog_lovers.yml +7 -7
- data/test/fixtures/dogs.yml +4 -4
- data/test/fixtures/doubloons.yml +3 -3
- data/test/fixtures/edges.yml +5 -5
- data/test/fixtures/entrants.yml +14 -14
- data/test/fixtures/essays.yml +6 -6
- data/test/fixtures/faces.yml +11 -11
- data/test/fixtures/fk_test_has_fk.yml +3 -3
- data/test/fixtures/fk_test_has_pk.yml +1 -1
- data/test/fixtures/friendships.yml +4 -4
- data/test/fixtures/funny_jokes.yml +10 -10
- data/test/fixtures/interests.yml +33 -33
- data/test/fixtures/items.yml +3 -3
- data/test/fixtures/jobs.yml +7 -7
- data/test/fixtures/legacy_things.yml +3 -3
- data/test/fixtures/mateys.yml +4 -4
- data/test/fixtures/member_details.yml +8 -8
- data/test/fixtures/member_types.yml +6 -6
- data/test/fixtures/members.yml +11 -11
- data/test/fixtures/memberships.yml +34 -34
- data/test/fixtures/men.yml +5 -5
- data/test/fixtures/minimalistics.yml +2 -2
- data/test/fixtures/minivans.yml +5 -5
- data/test/fixtures/mixed_case_monkeys.yml +6 -6
- data/test/fixtures/mixins.yml +29 -29
- data/test/fixtures/movies.yml +7 -7
- data/test/fixtures/naked/csv/accounts.csv +1 -1
- data/test/fixtures/naked/yml/accounts.yml +1 -1
- data/test/fixtures/naked/yml/companies.yml +1 -1
- data/test/fixtures/naked/yml/courses.yml +1 -1
- data/test/fixtures/organizations.yml +5 -5
- data/test/fixtures/other_topics.yml +42 -42
- data/test/fixtures/owners.yml +9 -9
- data/test/fixtures/parrots.yml +27 -27
- data/test/fixtures/parrots_pirates.yml +7 -7
- data/test/fixtures/people.yml +24 -24
- data/test/fixtures/peoples_treasures.yml +3 -3
- data/test/fixtures/pets.yml +19 -19
- data/test/fixtures/pirates.yml +12 -12
- data/test/fixtures/posts.yml +80 -80
- data/test/fixtures/price_estimates.yml +7 -7
- data/test/fixtures/products.yml +4 -4
- data/test/fixtures/projects.yml +7 -7
- data/test/fixtures/randomly_named_a9.yml +7 -7
- data/test/fixtures/ratings.yml +14 -14
- data/test/fixtures/readers.yml +11 -11
- data/test/fixtures/references.yml +17 -17
- data/test/fixtures/reserved_words/distinct.yml +5 -5
- data/test/fixtures/reserved_words/distinct_select.yml +11 -11
- data/test/fixtures/reserved_words/group.yml +14 -14
- data/test/fixtures/reserved_words/select.yml +8 -8
- data/test/fixtures/reserved_words/values.yml +7 -7
- data/test/fixtures/ships.yml +6 -6
- data/test/fixtures/speedometers.yml +8 -8
- data/test/fixtures/sponsors.yml +12 -12
- data/test/fixtures/string_key_objects.yml +7 -7
- data/test/fixtures/subscribers.yml +10 -10
- data/test/fixtures/subscriptions.yml +12 -12
- data/test/fixtures/taggings.yml +78 -78
- data/test/fixtures/tags.yml +11 -11
- data/test/fixtures/tasks.yml +7 -7
- data/test/fixtures/teapots.yml +3 -3
- data/test/fixtures/to_be_linked/accounts.yml +2 -2
- data/test/fixtures/to_be_linked/users.yml +10 -10
- data/test/fixtures/topics.yml +49 -49
- data/test/fixtures/toys.yml +14 -14
- data/test/fixtures/traffic_lights.yml +9 -9
- data/test/fixtures/treasures.yml +10 -10
- data/test/fixtures/uuid_children.yml +3 -3
- data/test/fixtures/uuid_parents.yml +2 -2
- data/test/fixtures/variants.yml +4 -4
- data/test/fixtures/vegetables.yml +19 -19
- data/test/fixtures/vertices.yml +3 -3
- data/test/fixtures/warehouse_things.yml +2 -2
- data/test/fixtures/zines.yml +5 -5
- data/test/ibm_db_test.rb +24 -24
- data/test/migrations/10_urban/9_add_expressions.rb +11 -11
- data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
- data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
- data/test/migrations/missing/1000_people_have_middle_names.rb +8 -8
- data/test/migrations/missing/1_people_have_last_names.rb +8 -8
- data/test/migrations/missing/3_we_need_reminders.rb +11 -11
- data/test/migrations/missing/4_innocent_jointable.rb +11 -11
- data/test/migrations/rename/1_we_need_things.rb +10 -10
- data/test/migrations/rename/2_rename_things.rb +8 -8
- data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy2/1_create_articles.rb +7 -7
- data/test/migrations/to_copy2/2_create_comments.rb +7 -7
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
- data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid/2_we_need_reminders.rb +11 -11
- data/test/migrations/valid/3_innocent_jointable.rb +11 -11
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +11 -11
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +11 -11
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
- data/test/models/admin.rb +4 -4
- data/test/models/admin/account.rb +2 -2
- data/test/models/admin/randomly_named_c1.rb +3 -3
- data/test/models/admin/user.rb +40 -40
- data/test/models/aircraft.rb +4 -4
- data/test/models/arunit2_model.rb +3 -3
- data/test/models/author.rb +212 -212
- data/test/models/auto_id.rb +4 -4
- data/test/models/autoloadable/extra_firm.rb +2 -2
- data/test/models/binary.rb +1 -1
- data/test/models/bird.rb +12 -12
- data/test/models/book.rb +18 -18
- data/test/models/boolean.rb +2 -2
- data/test/models/bulb.rb +51 -51
- data/test/models/cake_designer.rb +3 -3
- data/test/models/car.rb +26 -26
- data/test/models/carrier.rb +2 -2
- data/test/models/categorization.rb +19 -19
- data/test/models/category.rb +35 -35
- data/test/models/chef.rb +7 -3
- data/test/models/citation.rb +3 -3
- data/test/models/club.rb +23 -23
- data/test/models/college.rb +10 -10
- data/test/models/column.rb +3 -3
- data/test/models/column_name.rb +3 -3
- data/test/models/comment.rb +64 -64
- data/test/models/company.rb +228 -225
- data/test/models/company_in_module.rb +98 -98
- data/test/models/computer.rb +3 -3
- data/test/models/contact.rb +41 -41
- data/test/models/contract.rb +20 -20
- data/test/models/country.rb +7 -7
- data/test/models/course.rb +6 -6
- data/test/models/customer.rb +77 -77
- data/test/models/customer_carrier.rb +14 -14
- data/test/models/dashboard.rb +3 -3
- data/test/models/default.rb +2 -2
- data/test/models/department.rb +4 -4
- data/test/models/developer.rb +255 -252
- data/test/models/dog.rb +5 -5
- data/test/models/dog_lover.rb +5 -5
- data/test/models/doubloon.rb +12 -12
- data/test/models/drink_designer.rb +3 -3
- data/test/models/edge.rb +5 -5
- data/test/models/electron.rb +5 -5
- data/test/models/engine.rb +4 -4
- data/test/models/entrant.rb +3 -3
- data/test/models/essay.rb +5 -5
- data/test/models/event.rb +2 -2
- data/test/models/eye.rb +37 -37
- data/test/models/face.rb +9 -9
- data/test/models/friendship.rb +6 -6
- data/test/models/guid.rb +1 -1
- data/test/models/hotel.rb +9 -6
- data/test/models/image.rb +3 -3
- data/test/models/interest.rb +5 -5
- data/test/models/invoice.rb +4 -4
- data/test/models/item.rb +7 -7
- data/test/models/job.rb +7 -7
- data/test/models/joke.rb +7 -7
- data/test/models/keyboard.rb +3 -3
- data/test/models/legacy_thing.rb +3 -3
- data/test/models/lesson.rb +11 -11
- data/test/models/line_item.rb +3 -3
- data/test/models/liquid.rb +4 -4
- data/test/models/man.rb +11 -11
- data/test/models/matey.rb +4 -4
- data/test/models/member.rb +41 -41
- data/test/models/member_detail.rb +7 -7
- data/test/models/member_type.rb +3 -3
- data/test/models/membership.rb +35 -35
- data/test/models/minimalistic.rb +2 -2
- data/test/models/minivan.rb +9 -9
- data/test/models/mixed_case_monkey.rb +3 -3
- data/test/models/molecule.rb +6 -6
- data/test/models/movie.rb +5 -5
- data/test/models/order.rb +4 -4
- data/test/models/organization.rb +14 -14
- data/test/models/owner.rb +34 -34
- data/test/models/parrot.rb +29 -29
- data/test/models/person.rb +143 -143
- data/test/models/personal_legacy_thing.rb +4 -4
- data/test/models/pet.rb +15 -15
- data/test/models/pirate.rb +92 -92
- data/test/models/possession.rb +3 -3
- data/test/models/post.rb +264 -264
- data/test/models/price_estimate.rb +4 -4
- data/test/models/professor.rb +5 -5
- data/test/models/project.rb +31 -29
- data/test/models/publisher.rb +2 -2
- data/test/models/publisher/article.rb +4 -4
- data/test/models/publisher/magazine.rb +3 -3
- data/test/models/randomly_named_c1.rb +3 -3
- data/test/models/rating.rb +4 -4
- data/test/models/reader.rb +23 -23
- data/test/models/record.rb +2 -2
- data/test/models/reference.rb +22 -22
- data/test/models/reply.rb +61 -61
- data/test/models/ship.rb +33 -33
- data/test/models/ship_part.rb +7 -7
- data/test/models/shop.rb +17 -17
- data/test/models/shop_account.rb +6 -6
- data/test/models/speedometer.rb +6 -6
- data/test/models/sponsor.rb +7 -7
- data/test/models/string_key_object.rb +3 -3
- data/test/models/student.rb +4 -4
- data/test/models/subject.rb +16 -16
- data/test/models/subscriber.rb +8 -8
- data/test/models/subscription.rb +4 -4
- data/test/models/tag.rb +7 -7
- data/test/models/tagging.rb +13 -13
- data/test/models/task.rb +5 -5
- data/test/models/topic.rb +124 -124
- data/test/models/toy.rb +6 -6
- data/test/models/traffic_light.rb +4 -4
- data/test/models/treasure.rb +14 -14
- data/test/models/treaty.rb +7 -7
- data/test/models/tyre.rb +11 -11
- data/test/models/uuid_child.rb +3 -3
- data/test/models/uuid_parent.rb +3 -3
- data/test/models/vegetables.rb +24 -24
- data/test/models/vehicle.rb +6 -6
- data/test/models/vertex.rb +9 -9
- data/test/models/warehouse_thing.rb +5 -5
- data/test/models/wheel.rb +3 -3
- data/test/models/without_table.rb +3 -3
- data/test/models/zine.rb +3 -3
- data/test/schema/mysql2_specific_schema.rb +58 -58
- data/test/schema/mysql_specific_schema.rb +70 -70
- data/test/schema/oracle_specific_schema.rb +43 -43
- data/test/schema/postgresql_specific_schema.rb +202 -202
- data/test/schema/schema.rb +952 -938
- data/test/schema/sqlite_specific_schema.rb +21 -21
- data/test/support/config.rb +43 -43
- data/test/support/connection.rb +22 -22
- data/test/support/connection_helper.rb +14 -14
- data/test/support/ddl_helper.rb +8 -8
- data/test/support/schema_dumping_helper.rb +20 -20
- metadata +2 -2
@@ -1,18 +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
|
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
|
data/test/cases/types_test.rb
CHANGED
@@ -1,141 +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
|
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
|
@@ -1,33 +1,33 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
|
3
|
-
class TestRecord < ActiveRecord::Base
|
4
|
-
end
|
5
|
-
|
6
|
-
class TestUnconnectedAdapter < ActiveRecord::TestCase
|
7
|
-
self.use_transactional_fixtures = false
|
8
|
-
|
9
|
-
def setup
|
10
|
-
@underlying = ActiveRecord::Base.connection
|
11
|
-
@specification = ActiveRecord::Base.remove_connection
|
12
|
-
end
|
13
|
-
|
14
|
-
teardown do
|
15
|
-
@underlying = nil
|
16
|
-
ActiveRecord::Base.establish_connection(@specification)
|
17
|
-
load_schema if in_memory_db?
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_connection_no_longer_established
|
21
|
-
assert_raise(ActiveRecord::ConnectionNotEstablished) do
|
22
|
-
TestRecord.find(1)
|
23
|
-
end
|
24
|
-
|
25
|
-
assert_raise(ActiveRecord::ConnectionNotEstablished) do
|
26
|
-
TestRecord.new.save
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_underlying_adapter_no_longer_active
|
31
|
-
assert !@underlying.active?, "Removed adapter should no longer be active"
|
32
|
-
end
|
33
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
class TestRecord < ActiveRecord::Base
|
4
|
+
end
|
5
|
+
|
6
|
+
class TestUnconnectedAdapter < ActiveRecord::TestCase
|
7
|
+
self.use_transactional_fixtures = false
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@underlying = ActiveRecord::Base.connection
|
11
|
+
@specification = ActiveRecord::Base.remove_connection
|
12
|
+
end
|
13
|
+
|
14
|
+
teardown do
|
15
|
+
@underlying = nil
|
16
|
+
ActiveRecord::Base.establish_connection(@specification)
|
17
|
+
load_schema if in_memory_db?
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_connection_no_longer_established
|
21
|
+
assert_raise(ActiveRecord::ConnectionNotEstablished) do
|
22
|
+
TestRecord.find(1)
|
23
|
+
end
|
24
|
+
|
25
|
+
assert_raise(ActiveRecord::ConnectionNotEstablished) do
|
26
|
+
TestRecord.new.save
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_underlying_adapter_no_longer_active
|
31
|
+
assert !@underlying.active?, "Removed adapter should no longer be active"
|
32
|
+
end
|
33
|
+
end
|
@@ -1,86 +1,86 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'models/topic'
|
3
|
-
require 'models/reply'
|
4
|
-
require 'models/man'
|
5
|
-
require 'models/interest'
|
6
|
-
|
7
|
-
class AssociationValidationTest < ActiveRecord::TestCase
|
8
|
-
fixtures :topics
|
9
|
-
|
10
|
-
repair_validations(Topic, Reply)
|
11
|
-
|
12
|
-
def test_validates_associated_many
|
13
|
-
Topic.validates_associated(:replies)
|
14
|
-
Reply.validates_presence_of(:content)
|
15
|
-
t = Topic.create("title" => "uhohuhoh", "content" => "whatever")
|
16
|
-
t.replies << [r = Reply.new("title" => "A reply"), r2 = Reply.new("title" => "Another reply", "content" => "non-empty"), r3 = Reply.new("title" => "Yet another reply"), r4 = Reply.new("title" => "The last reply", "content" => "non-empty")]
|
17
|
-
assert !t.valid?
|
18
|
-
assert t.errors[:replies].any?
|
19
|
-
assert_equal 1, r.errors.count # make sure all associated objects have been validated
|
20
|
-
assert_equal 0, r2.errors.count
|
21
|
-
assert_equal 1, r3.errors.count
|
22
|
-
assert_equal 0, r4.errors.count
|
23
|
-
r.content = r3.content = "non-empty"
|
24
|
-
assert t.valid?
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_validates_associated_one
|
28
|
-
Reply.validates :topic, :associated => true
|
29
|
-
Topic.validates_presence_of( :content )
|
30
|
-
r = Reply.new("title" => "A reply", "content" => "with content!")
|
31
|
-
r.topic = Topic.create("title" => "uhohuhoh")
|
32
|
-
assert !r.valid?
|
33
|
-
assert r.errors[:topic].any?
|
34
|
-
r.topic.content = "non-empty"
|
35
|
-
assert r.valid?
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_validates_associated_marked_for_destruction
|
39
|
-
Topic.validates_associated(:replies)
|
40
|
-
Reply.validates_presence_of(:content)
|
41
|
-
t = Topic.new
|
42
|
-
t.replies << Reply.new
|
43
|
-
assert t.invalid?
|
44
|
-
t.replies.first.mark_for_destruction
|
45
|
-
assert t.valid?
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_validates_associated_with_custom_message_using_quotes
|
49
|
-
Reply.validates_associated :topic, :message=> "This string contains 'single' and \"double\" quotes"
|
50
|
-
Topic.validates_presence_of :content
|
51
|
-
r = Reply.create("title" => "A reply", "content" => "with content!")
|
52
|
-
r.topic = Topic.create("title" => "uhohuhoh")
|
53
|
-
assert !r.valid?
|
54
|
-
assert_equal ["This string contains 'single' and \"double\" quotes"], r.errors[:topic]
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_validates_associated_missing
|
58
|
-
Reply.validates_presence_of(:topic)
|
59
|
-
r = Reply.create("title" => "A reply", "content" => "with content!")
|
60
|
-
assert !r.valid?
|
61
|
-
assert r.errors[:topic].any?
|
62
|
-
|
63
|
-
r.topic = Topic.first
|
64
|
-
assert r.valid?
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_validates_presence_of_belongs_to_association__parent_is_new_record
|
68
|
-
repair_validations(Interest) do
|
69
|
-
# Note that Interest and Man have the :inverse_of option set
|
70
|
-
Interest.validates_presence_of(:man)
|
71
|
-
man = Man.new(:name => 'John')
|
72
|
-
interest = man.interests.build(:topic => 'Airplanes')
|
73
|
-
assert interest.valid?, "Expected interest to be valid, but was not. Interest should have a man object associated"
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_validates_presence_of_belongs_to_association__existing_parent
|
78
|
-
repair_validations(Interest) do
|
79
|
-
Interest.validates_presence_of(:man)
|
80
|
-
man = Man.create!(:name => 'John')
|
81
|
-
interest = man.interests.build(:topic => 'Airplanes')
|
82
|
-
assert interest.valid?, "Expected interest to be valid, but was not. Interest should have a man object associated"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/topic'
|
3
|
+
require 'models/reply'
|
4
|
+
require 'models/man'
|
5
|
+
require 'models/interest'
|
6
|
+
|
7
|
+
class AssociationValidationTest < ActiveRecord::TestCase
|
8
|
+
fixtures :topics
|
9
|
+
|
10
|
+
repair_validations(Topic, Reply)
|
11
|
+
|
12
|
+
def test_validates_associated_many
|
13
|
+
Topic.validates_associated(:replies)
|
14
|
+
Reply.validates_presence_of(:content)
|
15
|
+
t = Topic.create("title" => "uhohuhoh", "content" => "whatever")
|
16
|
+
t.replies << [r = Reply.new("title" => "A reply"), r2 = Reply.new("title" => "Another reply", "content" => "non-empty"), r3 = Reply.new("title" => "Yet another reply"), r4 = Reply.new("title" => "The last reply", "content" => "non-empty")]
|
17
|
+
assert !t.valid?
|
18
|
+
assert t.errors[:replies].any?
|
19
|
+
assert_equal 1, r.errors.count # make sure all associated objects have been validated
|
20
|
+
assert_equal 0, r2.errors.count
|
21
|
+
assert_equal 1, r3.errors.count
|
22
|
+
assert_equal 0, r4.errors.count
|
23
|
+
r.content = r3.content = "non-empty"
|
24
|
+
assert t.valid?
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_validates_associated_one
|
28
|
+
Reply.validates :topic, :associated => true
|
29
|
+
Topic.validates_presence_of( :content )
|
30
|
+
r = Reply.new("title" => "A reply", "content" => "with content!")
|
31
|
+
r.topic = Topic.create("title" => "uhohuhoh")
|
32
|
+
assert !r.valid?
|
33
|
+
assert r.errors[:topic].any?
|
34
|
+
r.topic.content = "non-empty"
|
35
|
+
assert r.valid?
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_validates_associated_marked_for_destruction
|
39
|
+
Topic.validates_associated(:replies)
|
40
|
+
Reply.validates_presence_of(:content)
|
41
|
+
t = Topic.new
|
42
|
+
t.replies << Reply.new
|
43
|
+
assert t.invalid?
|
44
|
+
t.replies.first.mark_for_destruction
|
45
|
+
assert t.valid?
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_validates_associated_with_custom_message_using_quotes
|
49
|
+
Reply.validates_associated :topic, :message=> "This string contains 'single' and \"double\" quotes"
|
50
|
+
Topic.validates_presence_of :content
|
51
|
+
r = Reply.create("title" => "A reply", "content" => "with content!")
|
52
|
+
r.topic = Topic.create("title" => "uhohuhoh")
|
53
|
+
assert !r.valid?
|
54
|
+
assert_equal ["This string contains 'single' and \"double\" quotes"], r.errors[:topic]
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_validates_associated_missing
|
58
|
+
Reply.validates_presence_of(:topic)
|
59
|
+
r = Reply.create("title" => "A reply", "content" => "with content!")
|
60
|
+
assert !r.valid?
|
61
|
+
assert r.errors[:topic].any?
|
62
|
+
|
63
|
+
r.topic = Topic.first
|
64
|
+
assert r.valid?
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_validates_presence_of_belongs_to_association__parent_is_new_record
|
68
|
+
repair_validations(Interest) do
|
69
|
+
# Note that Interest and Man have the :inverse_of option set
|
70
|
+
Interest.validates_presence_of(:man)
|
71
|
+
man = Man.new(:name => 'John')
|
72
|
+
interest = man.interests.build(:topic => 'Airplanes')
|
73
|
+
assert interest.valid?, "Expected interest to be valid, but was not. Interest should have a man object associated"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_validates_presence_of_belongs_to_association__existing_parent
|
78
|
+
repair_validations(Interest) do
|
79
|
+
Interest.validates_presence_of(:man)
|
80
|
+
man = Man.create!(:name => 'John')
|
81
|
+
interest = man.interests.build(:topic => 'Airplanes')
|
82
|
+
assert interest.valid?, "Expected interest to be valid, but was not. Interest should have a man object associated"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|