sequel 5.28.0 → 5.33.0
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/CHANGELOG +64 -1922
- data/MIT-LICENSE +1 -1
- data/README.rdoc +1 -1
- data/doc/advanced_associations.rdoc +4 -4
- data/doc/association_basics.rdoc +3 -3
- data/doc/code_order.rdoc +12 -2
- data/doc/model_dataset_method_design.rdoc +1 -1
- data/doc/postgresql.rdoc +71 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/testing.rdoc +1 -1
- data/lib/sequel/adapters/postgres.rb +5 -1
- data/lib/sequel/adapters/shared/access.rb +6 -6
- data/lib/sequel/adapters/shared/mssql.rb +5 -5
- data/lib/sequel/adapters/shared/mysql.rb +10 -10
- data/lib/sequel/adapters/shared/oracle.rb +16 -16
- data/lib/sequel/adapters/shared/postgres.rb +169 -14
- data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
- data/lib/sequel/adapters/shared/sqlite.rb +32 -5
- data/lib/sequel/adapters/tinytds.rb +1 -1
- data/lib/sequel/connection_pool/sharded_threaded.rb +2 -2
- data/lib/sequel/connection_pool/threaded.rb +1 -1
- data/lib/sequel/core.rb +318 -314
- data/lib/sequel/database/query.rb +1 -1
- data/lib/sequel/database/schema_generator.rb +1 -1
- data/lib/sequel/database/transactions.rb +8 -12
- data/lib/sequel/dataset/misc.rb +2 -2
- data/lib/sequel/extensions/connection_expiration.rb +2 -2
- data/lib/sequel/extensions/connection_validator.rb +2 -2
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/index_caching.rb +9 -7
- data/lib/sequel/extensions/integer64.rb +2 -0
- data/lib/sequel/extensions/migration.rb +1 -1
- data/lib/sequel/extensions/pg_enum.rb +5 -2
- data/lib/sequel/extensions/pg_hstore.rb +6 -0
- data/lib/sequel/extensions/pg_inet.rb +13 -5
- data/lib/sequel/extensions/pg_interval.rb +2 -0
- data/lib/sequel/extensions/pg_range.rb +2 -0
- data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/schema_dumper.rb +10 -4
- data/lib/sequel/extensions/server_block.rb +3 -3
- data/lib/sequel/model/associations.rb +18 -5
- data/lib/sequel/model/base.rb +60 -53
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +2 -0
- data/lib/sequel/plugins/association_proxies.rb +2 -0
- data/lib/sequel/plugins/boolean_subsets.rb +4 -1
- data/lib/sequel/plugins/class_table_inheritance.rb +26 -26
- data/lib/sequel/plugins/dirty.rb +13 -13
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +214 -0
- data/lib/sequel/plugins/json_serializer.rb +18 -11
- data/lib/sequel/plugins/single_table_inheritance.rb +15 -15
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/subclasses.rb +2 -0
- data/lib/sequel/plugins/throw_failures.rb +1 -1
- data/lib/sequel/timezones.rb +6 -4
- data/lib/sequel/version.rb +1 -1
- metadata +18 -367
- data/Rakefile +0 -151
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- data/doc/release_notes/4.37.0.txt +0 -50
- data/doc/release_notes/4.38.0.txt +0 -67
- data/doc/release_notes/4.39.0.txt +0 -127
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.40.0.txt +0 -179
- data/doc/release_notes/4.41.0.txt +0 -77
- data/doc/release_notes/4.42.0.txt +0 -221
- data/doc/release_notes/4.43.0.txt +0 -87
- data/doc/release_notes/4.44.0.txt +0 -125
- data/doc/release_notes/4.45.0.txt +0 -370
- data/doc/release_notes/4.46.0.txt +0 -404
- data/doc/release_notes/4.47.0.txt +0 -56
- data/doc/release_notes/4.48.0.txt +0 -293
- data/doc/release_notes/4.49.0.txt +0 -222
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -170
- data/spec/adapters/mssql_spec.rb +0 -828
- data/spec/adapters/mysql_spec.rb +0 -1060
- data/spec/adapters/oracle_spec.rb +0 -371
- data/spec/adapters/postgres_spec.rb +0 -4476
- data/spec/adapters/spec_helper.rb +0 -44
- data/spec/adapters/sqlanywhere_spec.rb +0 -97
- data/spec/adapters/sqlite_spec.rb +0 -652
- data/spec/bin_spec.rb +0 -278
- data/spec/core/connection_pool_spec.rb +0 -1250
- data/spec/core/database_spec.rb +0 -2915
- data/spec/core/dataset_spec.rb +0 -5547
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1498
- data/spec/core/mock_adapter_spec.rb +0 -722
- data/spec/core/object_graph_spec.rb +0 -336
- data/spec/core/placeholder_literalizer_spec.rb +0 -166
- data/spec/core/schema_generator_spec.rb +0 -214
- data/spec/core/schema_spec.rb +0 -1844
- data/spec/core/spec_helper.rb +0 -24
- data/spec/core/version_spec.rb +0 -14
- data/spec/core_extensions_spec.rb +0 -763
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/deprecation_helper.rb +0 -30
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -99
- data/spec/extensions/after_initialize_spec.rb +0 -28
- data/spec/extensions/any_not_empty_spec.rb +0 -23
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -125
- data/spec/extensions/association_multi_add_remove_spec.rb +0 -1041
- data/spec/extensions/association_pks_spec.rb +0 -423
- data/spec/extensions/association_proxies_spec.rb +0 -100
- data/spec/extensions/auto_literal_strings_spec.rb +0 -205
- data/spec/extensions/auto_validations_spec.rb +0 -229
- data/spec/extensions/blacklist_security_spec.rb +0 -95
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -273
- data/spec/extensions/caller_logging_spec.rb +0 -52
- data/spec/extensions/class_table_inheritance_spec.rb +0 -750
- data/spec/extensions/column_conflicts_spec.rb +0 -75
- data/spec/extensions/column_select_spec.rb +0 -129
- data/spec/extensions/columns_introspection_spec.rb +0 -90
- data/spec/extensions/columns_updated_spec.rb +0 -35
- data/spec/extensions/composition_spec.rb +0 -248
- data/spec/extensions/connection_expiration_spec.rb +0 -151
- data/spec/extensions/connection_validator_spec.rb +0 -144
- data/spec/extensions/constant_sql_override_spec.rb +0 -24
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
- data/spec/extensions/constraint_validations_spec.rb +0 -439
- data/spec/extensions/core_refinements_spec.rb +0 -528
- data/spec/extensions/csv_serializer_spec.rb +0 -183
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -365
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -181
- data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
- data/spec/extensions/def_dataset_method_spec.rb +0 -100
- data/spec/extensions/defaults_setter_spec.rb +0 -150
- data/spec/extensions/delay_add_association_spec.rb +0 -73
- data/spec/extensions/dirty_spec.rb +0 -222
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
- data/spec/extensions/eager_each_spec.rb +0 -62
- data/spec/extensions/eager_graph_eager_spec.rb +0 -100
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/escaped_like_spec.rb +0 -40
- data/spec/extensions/eval_inspect_spec.rb +0 -81
- data/spec/extensions/exclude_or_null_spec.rb +0 -15
- data/spec/extensions/finder_spec.rb +0 -260
- data/spec/extensions/force_encoding_spec.rb +0 -126
- data/spec/extensions/freeze_datasets_spec.rb +0 -31
- data/spec/extensions/graph_each_spec.rb +0 -113
- data/spec/extensions/hook_class_methods_spec.rb +0 -402
- data/spec/extensions/identifier_mangling_spec.rb +0 -201
- data/spec/extensions/implicit_subquery_spec.rb +0 -58
- data/spec/extensions/index_caching_spec.rb +0 -66
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -69
- data/spec/extensions/insert_conflict_spec.rb +0 -103
- data/spec/extensions/insert_returning_select_spec.rb +0 -72
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -246
- data/spec/extensions/integer64_spec.rb +0 -22
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -336
- data/spec/extensions/lazy_attributes_spec.rb +0 -183
- data/spec/extensions/list_spec.rb +0 -291
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2177
- data/spec/extensions/migration_spec.rb +0 -864
- data/spec/extensions/modification_detection_spec.rb +0 -93
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
- data/spec/extensions/named_timezones_spec.rb +0 -218
- data/spec/extensions/nested_attributes_spec.rb +0 -815
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -127
- data/spec/extensions/pagination_spec.rb +0 -116
- data/spec/extensions/pg_array_associations_spec.rb +0 -802
- data/spec/extensions/pg_array_ops_spec.rb +0 -144
- data/spec/extensions/pg_array_spec.rb +0 -398
- data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -209
- data/spec/extensions/pg_enum_spec.rb +0 -118
- data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
- data/spec/extensions/pg_hstore_spec.rb +0 -219
- data/spec/extensions/pg_inet_ops_spec.rb +0 -102
- data/spec/extensions/pg_inet_spec.rb +0 -72
- data/spec/extensions/pg_interval_spec.rb +0 -103
- data/spec/extensions/pg_json_ops_spec.rb +0 -356
- data/spec/extensions/pg_json_spec.rb +0 -451
- data/spec/extensions/pg_loose_count_spec.rb +0 -23
- data/spec/extensions/pg_range_ops_spec.rb +0 -60
- data/spec/extensions/pg_range_spec.rb +0 -600
- data/spec/extensions/pg_row_ops_spec.rb +0 -61
- data/spec/extensions/pg_row_plugin_spec.rb +0 -60
- data/spec/extensions/pg_row_spec.rb +0 -363
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
- data/spec/extensions/pg_timestamptz_spec.rb +0 -17
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
- data/spec/extensions/prepared_statements_spec.rb +0 -177
- data/spec/extensions/pretty_table_spec.rb +0 -123
- data/spec/extensions/query_spec.rb +0 -94
- data/spec/extensions/rcte_tree_spec.rb +0 -387
- data/spec/extensions/round_timestamps_spec.rb +0 -39
- data/spec/extensions/s_spec.rb +0 -60
- data/spec/extensions/schema_caching_spec.rb +0 -64
- data/spec/extensions/schema_dumper_spec.rb +0 -870
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -365
- data/spec/extensions/server_block_spec.rb +0 -135
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/sharding_spec.rb +0 -197
- data/spec/extensions/shared_caching_spec.rb +0 -151
- data/spec/extensions/single_table_inheritance_spec.rb +0 -347
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -18
- data/spec/extensions/spec_helper.rb +0 -70
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -57
- data/spec/extensions/sql_comments_spec.rb +0 -33
- data/spec/extensions/sql_expr_spec.rb +0 -59
- data/spec/extensions/static_cache_cache_spec.rb +0 -35
- data/spec/extensions/static_cache_spec.rb +0 -471
- data/spec/extensions/string_agg_spec.rb +0 -90
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -79
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
- data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
- data/spec/extensions/synchronize_sql_spec.rb +0 -124
- data/spec/extensions/table_select_spec.rb +0 -83
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/throw_failures_spec.rb +0 -74
- data/spec/extensions/timestamps_spec.rb +0 -209
- data/spec/extensions/to_dot_spec.rb +0 -153
- data/spec/extensions/touch_spec.rb +0 -226
- data/spec/extensions/tree_spec.rb +0 -334
- data/spec/extensions/typecast_on_load_spec.rb +0 -86
- data/spec/extensions/unlimited_update_spec.rb +0 -21
- data/spec/extensions/update_or_create_spec.rb +0 -83
- data/spec/extensions/update_primary_key_spec.rb +0 -105
- data/spec/extensions/update_refresh_spec.rb +0 -59
- data/spec/extensions/uuid_spec.rb +0 -101
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1040
- data/spec/extensions/validation_contexts_spec.rb +0 -31
- data/spec/extensions/validation_helpers_spec.rb +0 -525
- data/spec/extensions/whitelist_security_spec.rb +0 -157
- data/spec/extensions/xml_serializer_spec.rb +0 -213
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -59
- data/spec/integration/associations_test.rb +0 -2597
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -2037
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -203
- data/spec/integration/plugin_test.rb +0 -2423
- data/spec/integration/prepared_statement_test.rb +0 -405
- data/spec/integration/schema_test.rb +0 -903
- data/spec/integration/spec_helper.rb +0 -71
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -603
- data/spec/integration/type_test.rb +0 -127
- data/spec/model/association_reflection_spec.rb +0 -803
- data/spec/model/associations_spec.rb +0 -4738
- data/spec/model/base_spec.rb +0 -875
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -198
- data/spec/model/eager_loading_spec.rb +0 -2377
- data/spec/model/hooks_spec.rb +0 -370
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -956
- data/spec/model/plugins_spec.rb +0 -429
- data/spec/model/record_spec.rb +0 -2118
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -220
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/sequel_warning.rb +0 -4
- data/spec/spec_config.rb +0 -12
data/spec/core_model_spec.rb
DELETED
data/spec/core_spec.rb
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Dir['./spec/core/*_spec.rb'].each{|f| require f}
|
data/spec/deprecation_helper.rb
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
Sequel::Deprecation.backtrace_filter = lambda{|line, lineno| lineno < 4 || line =~ /_spec\.rb/}
|
|
2
|
-
|
|
3
|
-
class Minitest::HooksSpec
|
|
4
|
-
def self.deprecated(a, &block)
|
|
5
|
-
it("#{a} (deprecated)") do
|
|
6
|
-
deprecated{instance_exec(&block)}
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def deprecated
|
|
11
|
-
output = Sequel::Deprecation.output
|
|
12
|
-
Sequel::Deprecation.output = nil
|
|
13
|
-
yield
|
|
14
|
-
ensure
|
|
15
|
-
Sequel::Deprecation.output = output
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def self.with_symbol_splitting(a, &block)
|
|
19
|
-
it("#{a}, with symbol splitting enabled") do
|
|
20
|
-
with_symbol_splitting{instance_exec(&block)}
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def with_symbol_splitting
|
|
25
|
-
Sequel.split_symbols = true
|
|
26
|
-
yield
|
|
27
|
-
ensure
|
|
28
|
-
Sequel.split_symbols = false
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "accessed_columns plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:fetch=>{:name=>'a', :b=>'c'}, :numrows=>1)
|
|
6
|
-
@c = Class.new(Sequel::Model(@db[:test]))
|
|
7
|
-
@c.columns :name, :b
|
|
8
|
-
@c.plugin :accessed_columns
|
|
9
|
-
@o = @c.new
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "should record columns accessed" do
|
|
13
|
-
@o.accessed_columns.must_equal []
|
|
14
|
-
@o.name
|
|
15
|
-
@o.accessed_columns.must_equal [:name]
|
|
16
|
-
@o.name
|
|
17
|
-
@o.accessed_columns.must_equal [:name]
|
|
18
|
-
@o.b
|
|
19
|
-
@o.accessed_columns.sort_by{|s| s.to_s}.must_equal [:b, :name]
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "should clear accessed columns when refreshing" do
|
|
23
|
-
@o.name
|
|
24
|
-
@o.refresh
|
|
25
|
-
@o.accessed_columns.must_equal []
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "should clear accessed columns when saving" do
|
|
29
|
-
@o.name
|
|
30
|
-
@o.save
|
|
31
|
-
@o.accessed_columns.must_equal []
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should work when duping and cloning instances" do
|
|
35
|
-
@o.name
|
|
36
|
-
o = @o.dup
|
|
37
|
-
@o.accessed_columns.must_equal [:name]
|
|
38
|
-
@o.b
|
|
39
|
-
@o.accessed_columns.sort_by{|s| s.to_s}.must_equal [:b, :name]
|
|
40
|
-
o.accessed_columns.must_equal [:name]
|
|
41
|
-
o2 = o.clone
|
|
42
|
-
o2.refresh
|
|
43
|
-
o.accessed_columns.must_equal [:name]
|
|
44
|
-
o2.accessed_columns.must_equal []
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should not raise exceptions when object is frozen" do
|
|
48
|
-
@o.freeze
|
|
49
|
-
@o.name
|
|
50
|
-
end
|
|
51
|
-
end
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
begin
|
|
4
|
-
require 'active_model'
|
|
5
|
-
rescue LoadError
|
|
6
|
-
warn "Skipping test of active_model plugin: can't load active_model"
|
|
7
|
-
else
|
|
8
|
-
describe "ActiveModel plugin" do
|
|
9
|
-
before do
|
|
10
|
-
class ::AMLintTest < Sequel::Model
|
|
11
|
-
set_primary_key :id
|
|
12
|
-
columns :id, :id2
|
|
13
|
-
def delete; end
|
|
14
|
-
end
|
|
15
|
-
module ::Blog
|
|
16
|
-
class Post < Sequel::Model
|
|
17
|
-
plugin :active_model
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
@c = AMLintTest
|
|
21
|
-
@c.plugin :active_model
|
|
22
|
-
@c.freeze if @freeze_class
|
|
23
|
-
@m = @model = @c.new
|
|
24
|
-
@o = @c.load({})
|
|
25
|
-
end
|
|
26
|
-
after do
|
|
27
|
-
Object.send(:remove_const, :AMLintTest)
|
|
28
|
-
Object.send(:remove_const, :Blog)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it ".to_model should return self, not a proxy object" do
|
|
32
|
-
@m.object_id.must_equal @m.to_model.object_id
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "#to_key should return a key array, or nil" do
|
|
36
|
-
@o.to_key.must_be_nil
|
|
37
|
-
@o.id = 1
|
|
38
|
-
@o.to_key.must_equal [1]
|
|
39
|
-
@o.id = nil
|
|
40
|
-
@o.to_key.must_be_nil
|
|
41
|
-
|
|
42
|
-
@c.set_primary_key [:id2, :id]
|
|
43
|
-
@c.freeze
|
|
44
|
-
@o.to_key.must_be_nil
|
|
45
|
-
@o.id = 1
|
|
46
|
-
@o.id2 = 2
|
|
47
|
-
@o.to_key.must_equal [2, 1]
|
|
48
|
-
@o.destroy
|
|
49
|
-
@o.to_key.must_equal [2, 1]
|
|
50
|
-
@o.id = nil
|
|
51
|
-
@o.to_key.must_be_nil
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "#to_param should return a param string or nil" do
|
|
55
|
-
@o.to_param.must_be_nil
|
|
56
|
-
@o.id = 1
|
|
57
|
-
@o.to_param.must_equal '1'
|
|
58
|
-
@c.set_primary_key [:id2, :id]
|
|
59
|
-
@c.freeze
|
|
60
|
-
@o.id2 = 2
|
|
61
|
-
@o.to_param.must_equal '2-1'
|
|
62
|
-
def @o.to_param_joiner; '|' end
|
|
63
|
-
@o.to_param.must_equal '2|1'
|
|
64
|
-
@o.destroy
|
|
65
|
-
@o.to_param.must_be_nil
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "#persisted? should return true if the object exists and has not been destroyed" do
|
|
69
|
-
@m.persisted?.must_equal false
|
|
70
|
-
@o.persisted?.must_equal true
|
|
71
|
-
@m.destroy
|
|
72
|
-
@o.destroy
|
|
73
|
-
@m.persisted?.must_equal false
|
|
74
|
-
@o.persisted?.must_equal false
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "#persisted? should return false if the object is created and the transaction is rolled back" do
|
|
78
|
-
DB.transaction(:rollback=>:always){@m.save}
|
|
79
|
-
@m.persisted?.must_equal false
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "#to_partial_path should return a path string" do
|
|
83
|
-
@m.to_partial_path.must_equal 'am_lint_tests/am_lint_test'
|
|
84
|
-
Blog::Post.new.to_partial_path.must_equal 'blog/posts/post'
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
describe "with unfrozen model class" do
|
|
88
|
-
include ActiveModel::Lint::Tests
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
describe "with frozen model class" do
|
|
92
|
-
before do
|
|
93
|
-
@freeze_class = true
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
include ActiveModel::Lint::Tests
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::AfterInitialize" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:host=>'mysql', :numrows=>1)
|
|
6
|
-
@c = Class.new(Sequel::Model(@db[:test]))
|
|
7
|
-
@c.class_eval do
|
|
8
|
-
columns :id, :name
|
|
9
|
-
plugin :after_initialize
|
|
10
|
-
def after_initialize
|
|
11
|
-
self.name *= 2
|
|
12
|
-
self.id *= 3 if id
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should have after_initialize hook be called for new objects" do
|
|
18
|
-
@c.new(:name=>'foo').values.must_equal(:name=>'foofoo')
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should have after_initialize hook be called for objects loaded from the database" do
|
|
22
|
-
@c.call(:id=>1, :name=>'foo').values.must_equal(:id=>3, :name=>'foofoo')
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should not allow .call to be called without arguments" do
|
|
26
|
-
proc{@c.call}.must_raise ArgumentError
|
|
27
|
-
end
|
|
28
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "any_not_empty extension" do
|
|
4
|
-
before do
|
|
5
|
-
@ds = Sequel.mock[:t].extension(:any_not_empty)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should use a limited query if no block is given" do
|
|
9
|
-
@ds.with_fetch(:one=>1).any?.must_equal true
|
|
10
|
-
@ds.db.sqls.must_equal ["SELECT 1 AS one FROM t LIMIT 1"]
|
|
11
|
-
@ds.with_fetch([]).any?.must_equal false
|
|
12
|
-
@ds.db.sqls.must_equal ["SELECT 1 AS one FROM t LIMIT 1"]
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should use default behavior if block is given" do
|
|
16
|
-
@ds.with_fetch(:one=>1).any?{|x| x[:one] == 1}.must_equal true
|
|
17
|
-
@ds.db.sqls.must_equal ["SELECT * FROM t"]
|
|
18
|
-
@ds.with_fetch(:one=>1).any?{|x| x[:one] != 1}.must_equal false
|
|
19
|
-
@ds.db.sqls.must_equal ["SELECT * FROM t"]
|
|
20
|
-
@ds.with_fetch([]).any?{|x| x[:one] == 1}.must_equal false
|
|
21
|
-
@ds.db.sqls.must_equal ["SELECT * FROM t"]
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "arbtirary servers" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:servers=>{})
|
|
6
|
-
@db.extension :arbitrary_servers
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it "should allow arbitrary server options using a hash" do
|
|
10
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
11
|
-
c.opts[:host].must_equal 'host1'
|
|
12
|
-
c.opts[:database].must_equal 'db1'
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should not cache connections to arbitrary servers" do
|
|
17
|
-
x = nil
|
|
18
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
19
|
-
x = c
|
|
20
|
-
end
|
|
21
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c2|
|
|
22
|
-
c2.wont_be_same_as(x)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "should yield same connection correctly when nesting" do
|
|
27
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
28
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c2|
|
|
29
|
-
c2.must_be_same_as(c)
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should disconnect when connection is finished" do
|
|
35
|
-
x, x1 = nil, nil
|
|
36
|
-
@db.define_singleton_method(:disconnect_connection){|c| x = c}
|
|
37
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
38
|
-
x1 = c
|
|
39
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c2|
|
|
40
|
-
c2.must_be_same_as(c)
|
|
41
|
-
end
|
|
42
|
-
x.must_be_same_as(nil)
|
|
43
|
-
end
|
|
44
|
-
x.must_be_same_as(x1)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should yield different connection correctly when nesting" do
|
|
48
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
49
|
-
c.opts[:host].must_equal 'host1'
|
|
50
|
-
@db.synchronize(:host=>'host2', :database=>'db1') do |c2|
|
|
51
|
-
c2.opts[:host].must_equal 'host2'
|
|
52
|
-
c2.wont_be_same_as(c)
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should respect multithreaded access" do
|
|
58
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c|
|
|
59
|
-
Thread.new do
|
|
60
|
-
@db.synchronize(:host=>'host1', :database=>'db1') do |c2|
|
|
61
|
-
_(c2).wont_be_same_as(c)
|
|
62
|
-
end
|
|
63
|
-
end.join
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "should work correctly with server_block plugin" do
|
|
68
|
-
@db.extension :server_block
|
|
69
|
-
@db.with_server(:host=>'host1', :database=>'db1') do
|
|
70
|
-
@db.synchronize do |c|
|
|
71
|
-
c.opts[:host].must_equal 'host1'
|
|
72
|
-
c.opts[:database].must_equal 'db1'
|
|
73
|
-
@db.synchronize do |c2|
|
|
74
|
-
c2.must_be_same_as(c)
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "should respect multithreaded access with server block plugin" do
|
|
81
|
-
@db.extension :server_block
|
|
82
|
-
q, q1 = Queue.new, Queue.new
|
|
83
|
-
|
|
84
|
-
t = nil
|
|
85
|
-
@db[:t].all
|
|
86
|
-
@db.with_server(:host=>'a') do
|
|
87
|
-
@db[:t].all
|
|
88
|
-
t = Thread.new do
|
|
89
|
-
@db[:t].all
|
|
90
|
-
@db.with_server(:host=>'c') do
|
|
91
|
-
@db[:t].all
|
|
92
|
-
@db.with_server(:host=>'d'){@db[:t].all}
|
|
93
|
-
q.push nil
|
|
94
|
-
q1.pop
|
|
95
|
-
@db[:t].all
|
|
96
|
-
end
|
|
97
|
-
@db[:t].all
|
|
98
|
-
end
|
|
99
|
-
q.pop
|
|
100
|
-
@db.with_server(:host=>'b'){@db[:t].all}
|
|
101
|
-
@db[:t].all
|
|
102
|
-
end
|
|
103
|
-
@db[:t].all
|
|
104
|
-
q1.push nil
|
|
105
|
-
t.join
|
|
106
|
-
@db.sqls.must_equal ['SELECT * FROM t', 'SELECT * FROM t -- {:host=>"a"}', 'SELECT * FROM t', 'SELECT * FROM t -- {:host=>"c"}', 'SELECT * FROM t -- {:host=>"d"}',
|
|
107
|
-
'SELECT * FROM t -- {:host=>"b"}', 'SELECT * FROM t -- {:host=>"a"}', 'SELECT * FROM t', 'SELECT * FROM t -- {:host=>"c"}', 'SELECT * FROM t']
|
|
108
|
-
end
|
|
109
|
-
end
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "AssociationDependencies plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@mods = []
|
|
6
|
-
@c = Class.new(Sequel::Model)
|
|
7
|
-
@c.plugin :association_dependencies
|
|
8
|
-
@Artist = Class.new(@c).set_dataset(:artists)
|
|
9
|
-
@Artist.dataset = @Artist.dataset.with_fetch(:id=>2, :name=>'Ar')
|
|
10
|
-
@Album = Class.new(@c).set_dataset(:albums)
|
|
11
|
-
@Album.dataset = @Album.dataset.with_fetch(:id=>1, :name=>'Al', :artist_id=>2)
|
|
12
|
-
@Artist.columns :id, :name
|
|
13
|
-
@Album.columns :id, :name, :artist_id
|
|
14
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id
|
|
15
|
-
@Artist.one_to_one :first_album, :class=>@Album, :key=>:artist_id, :conditions=>{:position=>1}
|
|
16
|
-
@Artist.many_to_many :other_artists, :class=>@Artist, :join_table=>:aoa, :left_key=>:l, :right_key=>:r
|
|
17
|
-
@Album.many_to_one :artist, :class=>@Artist
|
|
18
|
-
DB.reset
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should allow destroying associated many_to_one associated object" do
|
|
22
|
-
@Album.add_association_dependencies :artist=>:destroy
|
|
23
|
-
@Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
24
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should allow deleting associated many_to_one associated object" do
|
|
28
|
-
@Album.add_association_dependencies :artist=>:delete
|
|
29
|
-
@Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
30
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE (artists.id = 2)']
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should allow destroying associated one_to_one associated object" do
|
|
34
|
-
@Artist.add_association_dependencies :first_album=>:destroy
|
|
35
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
36
|
-
DB.sqls.must_equal ['SELECT * FROM albums WHERE ((position = 1) AND (albums.artist_id = 2)) LIMIT 1', 'DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE id = 2']
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "should allow deleting associated one_to_one associated object" do
|
|
40
|
-
@Artist.add_association_dependencies :first_album=>:delete
|
|
41
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
42
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE ((position = 1) AND (albums.artist_id = 2))', 'DELETE FROM artists WHERE id = 2']
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "should allow destroying associated one_to_many objects" do
|
|
46
|
-
@Artist.add_association_dependencies :albums=>:destroy
|
|
47
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
48
|
-
DB.sqls.must_equal ['SELECT * FROM albums WHERE (albums.artist_id = 2)', 'DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE id = 2']
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "should allow deleting associated one_to_many objects" do
|
|
52
|
-
@Artist.add_association_dependencies :albums=>:delete
|
|
53
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
54
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE (albums.artist_id = 2)', 'DELETE FROM artists WHERE id = 2']
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should allow nullifying associated one_to_one objects" do
|
|
58
|
-
@Artist.add_association_dependencies :first_album=>:nullify
|
|
59
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
60
|
-
DB.sqls.must_equal ['UPDATE albums SET artist_id = NULL WHERE ((position = 1) AND (artist_id = 2))', 'DELETE FROM artists WHERE id = 2']
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "should allow nullifying associated one_to_many objects" do
|
|
64
|
-
@Artist.add_association_dependencies :albums=>:nullify
|
|
65
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
66
|
-
DB.sqls.must_equal ['UPDATE albums SET artist_id = NULL WHERE (artist_id = 2)', 'DELETE FROM artists WHERE id = 2']
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "should allow nullifying associated many_to_many associations" do
|
|
70
|
-
@Artist.add_association_dependencies :other_artists=>:nullify
|
|
71
|
-
@Artist.load(:id=>2, :name=>'Ar').destroy
|
|
72
|
-
DB.sqls.must_equal ['DELETE FROM aoa WHERE (l = 2)', 'DELETE FROM artists WHERE id = 2']
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it "should not allow modifications if class is frozen" do
|
|
76
|
-
@Artist.add_association_dependencies :other_artists=>:nullify
|
|
77
|
-
@Artist.freeze
|
|
78
|
-
proc{@Artist.add_association_dependencies :albums=>:nullify}.must_raise RuntimeError, TypeError
|
|
79
|
-
@Artist.association_dependencies.frozen?.must_equal true
|
|
80
|
-
@Artist.association_dependencies[:before_nullify].frozen?.must_equal true
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it "should raise an error if attempting to nullify a many_to_one association" do
|
|
84
|
-
proc{@Album.add_association_dependencies :artist=>:nullify}.must_raise(Sequel::Error)
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "should raise an error if using an unrecognized dependence action" do
|
|
88
|
-
proc{@Album.add_association_dependencies :artist=>:blah}.must_raise(Sequel::Error)
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "should raise an error if a nonexistent association is used" do
|
|
92
|
-
proc{@Album.add_association_dependencies :blah=>:delete}.must_raise(Sequel::Error)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "should raise an error if a invalid association type is used" do
|
|
96
|
-
@Artist.plugin :many_through_many
|
|
97
|
-
@Artist.many_through_many :other_albums, [[:id, :id, :id]]
|
|
98
|
-
proc{@Artist.add_association_dependencies :other_albums=>:nullify}.must_raise(Sequel::Error)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
it "should raise an error if using a many_to_many association type without nullify" do
|
|
102
|
-
proc{@Artist.add_association_dependencies :other_artists=>:delete}.must_raise(Sequel::Error)
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
it "should allow specifying association dependencies in the plugin call" do
|
|
106
|
-
@Album.plugin :association_dependencies, :artist=>:destroy
|
|
107
|
-
@Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
108
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it "should work with subclasses" do
|
|
112
|
-
c = Class.new(@Album)
|
|
113
|
-
c.add_association_dependencies :artist=>:destroy
|
|
114
|
-
c.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
115
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
|
|
116
|
-
|
|
117
|
-
@Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
118
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1']
|
|
119
|
-
|
|
120
|
-
@Album.add_association_dependencies :artist=>:destroy
|
|
121
|
-
c2 = Class.new(@Album)
|
|
122
|
-
c2.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
|
|
123
|
-
DB.sqls.must_equal ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
|
|
124
|
-
end
|
|
125
|
-
end
|