sequel 5.29.0 → 5.34.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 +70 -1922
- 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.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/release_notes/5.34.0.txt +40 -0
- data/doc/testing.rdoc +1 -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 +9 -9
- 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/connection_pool/sharded_single.rb +4 -1
- data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
- data/lib/sequel/connection_pool/single.rb +1 -1
- data/lib/sequel/connection_pool/threaded.rb +2 -2
- data/lib/sequel/core.rb +318 -314
- data/lib/sequel/database/connecting.rb +1 -1
- data/lib/sequel/database/misc.rb +16 -10
- data/lib/sequel/database/query.rb +3 -1
- data/lib/sequel/database/schema_generator.rb +0 -1
- data/lib/sequel/database/schema_methods.rb +15 -16
- data/lib/sequel/database/transactions.rb +12 -13
- data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
- data/lib/sequel/dataset/query.rb +4 -3
- data/lib/sequel/deprecated.rb +2 -0
- data/lib/sequel/exceptions.rb +2 -0
- 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.rb +2 -0
- data/lib/sequel/model/associations.rb +30 -18
- data/lib/sequel/model/base.rb +64 -55
- data/lib/sequel/model/plugins.rb +3 -3
- 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_pks.rb +57 -16
- 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/forbid_lazy_load.rb +214 -0
- data/lib/sequel/plugins/json_serializer.rb +3 -7
- data/lib/sequel/plugins/rcte_tree.rb +2 -2
- 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/timezones.rb +6 -4
- data/lib/sequel/version.rb +1 -1
- metadata +17 -368
- 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 -5544
- 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/empty_failure_backtraces_spec.rb +0 -60
- 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 -346
- 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 -5
- data/spec/spec_config.rb +0 -12
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::DefaultsSetter" do
|
|
4
|
-
before do
|
|
5
|
-
@db = db = Sequel.mock
|
|
6
|
-
def db.supports_schema_parsing?() true end
|
|
7
|
-
def db.schema(*) [] end
|
|
8
|
-
@c = c = Class.new(Sequel::Model(db[:foo]))
|
|
9
|
-
@c.instance_variable_set(:@db_schema, {:a=>{}})
|
|
10
|
-
@c.plugin :defaults_setter
|
|
11
|
-
@c.columns :a
|
|
12
|
-
@pr = proc{|x| db.define_singleton_method(:schema){|*| [[:id, {:primary_key=>true}], [:a, {:ruby_default => x, :primary_key=>false}]]}; c.dataset = c.dataset; c}
|
|
13
|
-
end
|
|
14
|
-
after do
|
|
15
|
-
Sequel.datetime_class = Time
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should set default value upon initialization" do
|
|
19
|
-
@pr.call(2).new.a.must_equal 2
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "should not mark the column as modified" do
|
|
23
|
-
@pr.call(2).new.changed_columns.must_equal []
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "should not set a default of nil" do
|
|
27
|
-
@pr.call(nil).new.class.default_values.must_equal({})
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should set a default of false" do
|
|
31
|
-
@pr.call(false).new.a.must_equal false
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should handle Sequel::CURRENT_DATE default by using the current Date" do
|
|
35
|
-
@pr.call(Sequel::CURRENT_DATE).new.a.must_equal Date.today
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should handle Sequel::CURRENT_TIMESTAMP default by using the current Time" do
|
|
39
|
-
t = @pr.call(Sequel::CURRENT_TIMESTAMP).new.a
|
|
40
|
-
t.must_be_kind_of(Time)
|
|
41
|
-
(t - Time.now).must_be :<, 1
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should handle :callable_default values in schema in preference to :ruby_default" do
|
|
45
|
-
@db.define_singleton_method(:schema) do |*|
|
|
46
|
-
[[:id, {:primary_key=>true}],
|
|
47
|
-
[:a, {:ruby_default => Time.now, :callable_default=>lambda{Date.today}, :primary_key=>false}]]
|
|
48
|
-
end
|
|
49
|
-
@c.dataset = @c.dataset
|
|
50
|
-
@c.new.a.must_equal Date.today
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should handle Sequel::CURRENT_TIMESTAMP default by using the current DateTime if Sequel.datetime_class is DateTime" do
|
|
54
|
-
Sequel.datetime_class = DateTime
|
|
55
|
-
t = @pr.call(Sequel::CURRENT_TIMESTAMP).new.a
|
|
56
|
-
t.must_be_kind_of(DateTime)
|
|
57
|
-
(t - DateTime.now).must_be :<, 1/86400.0
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "should work correctly with the current_datetime_timestamp extension" do
|
|
61
|
-
@db.autoid = 1
|
|
62
|
-
@db.fetch = {:id=>1}
|
|
63
|
-
@c.dataset = @c.dataset.extension(:current_datetime_timestamp)
|
|
64
|
-
c = @pr.call(Sequel::CURRENT_TIMESTAMP)
|
|
65
|
-
@db.sqls
|
|
66
|
-
o = c.new
|
|
67
|
-
o.a = o.a
|
|
68
|
-
o.save
|
|
69
|
-
@db.sqls.must_equal ["INSERT INTO foo (a) VALUES (CURRENT_TIMESTAMP)", "SELECT * FROM foo WHERE id = 1"]
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it "should cache default values if :cache plugin option is used" do
|
|
73
|
-
@c.plugin :defaults_setter, :cache => true
|
|
74
|
-
@c.default_values[:a] = 'a'
|
|
75
|
-
o = @c.new
|
|
76
|
-
o.a.must_equal 'a'
|
|
77
|
-
o.values[:a].must_equal 'a'
|
|
78
|
-
o.a.must_be_same_as(o.a)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "should not cache default values if :cache plugin option is used and there is no default values" do
|
|
82
|
-
@c.plugin :defaults_setter, :cache => true
|
|
83
|
-
o = @c.new
|
|
84
|
-
o.a.must_be_nil
|
|
85
|
-
o.values.must_be_empty
|
|
86
|
-
o.a.must_be_nil
|
|
87
|
-
o.a.must_be_same_as(o.a)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "should not override a given value" do
|
|
91
|
-
@pr.call(2)
|
|
92
|
-
@c.new('a'=>3).a.must_equal 3
|
|
93
|
-
@c.new('a'=>nil).a.must_be_nil
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it "should work correctly when subclassing" do
|
|
97
|
-
Class.new(@pr.call(2)).new.a.must_equal 2
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it "should contain the default values in default_values" do
|
|
101
|
-
@pr.call(2).default_values.must_equal(:a=>2)
|
|
102
|
-
@c.default_values.clear
|
|
103
|
-
@pr.call(nil).default_values.must_equal({})
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "should allow modifications of default values" do
|
|
107
|
-
@pr.call(2)
|
|
108
|
-
@c.default_values[:a] = 3
|
|
109
|
-
@c.new.a.must_equal 3
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
it "should allow proc default values" do
|
|
113
|
-
@pr.call(2)
|
|
114
|
-
@c.default_values[:a] = proc{3}
|
|
115
|
-
@c.new.a.must_equal 3
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
it "should have procs that set default values set them to nil" do
|
|
119
|
-
@pr.call(2)
|
|
120
|
-
@c.default_values[:a] = proc{nil}
|
|
121
|
-
@c.new.a.must_be_nil
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
it "should work in subclasses" do
|
|
125
|
-
@pr.call(2)
|
|
126
|
-
@c.default_values[:a] = proc{1}
|
|
127
|
-
c = Class.new(@c)
|
|
128
|
-
|
|
129
|
-
@c.new.a.must_equal 1
|
|
130
|
-
c.new.a.must_equal 1
|
|
131
|
-
|
|
132
|
-
c.default_values[:a] = proc{2}
|
|
133
|
-
@c.new.a.must_equal 1
|
|
134
|
-
c.new.a.must_equal 2
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
it "should work correctly on a model without a dataset" do
|
|
138
|
-
@pr.call(2)
|
|
139
|
-
c = Class.new(Sequel::Model(@db[:bar]))
|
|
140
|
-
c.plugin :defaults_setter
|
|
141
|
-
c.default_values.must_equal(:a=>2)
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it "should freeze default values when freezing model class" do
|
|
145
|
-
c = Class.new(Sequel::Model(@db[:bar]))
|
|
146
|
-
c.plugin :defaults_setter
|
|
147
|
-
c.freeze
|
|
148
|
-
c.default_values.frozen?.must_equal true
|
|
149
|
-
end
|
|
150
|
-
end
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::DelayAddAssociation" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:autoid=>1, :numrows=>1, :fetch=>{:id=>1, :name=>'a', :c_id=>nil})
|
|
6
|
-
@c = Class.new(Sequel::Model(@db[:cs]))
|
|
7
|
-
@c.send(:define_method, :save){|*| super(:changed=>true)}
|
|
8
|
-
@c.plugin :delay_add_association
|
|
9
|
-
@c.columns :id, :name, :c_id
|
|
10
|
-
@c.one_to_many :cs, :class=>@c, :key=>:c_id
|
|
11
|
-
@db.sqls
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "should delay adding of the association until after creation" do
|
|
15
|
-
@o = @c.new(:name=>'a')
|
|
16
|
-
@o.add_c(@c.load(:id=>2, :name=>'b'))
|
|
17
|
-
@db.sqls.must_equal []
|
|
18
|
-
@o.save
|
|
19
|
-
@db.sqls.must_equal ["INSERT INTO cs (name) VALUES ('a')", "SELECT * FROM cs WHERE (id = 1) LIMIT 1", "UPDATE cs SET c_id = 1 WHERE (id = 2)"]
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "should immediately reflect changes in cached association" do
|
|
23
|
-
@o = @c.new(:name=>'a')
|
|
24
|
-
o = @c.load(:id=>2, :name=>'b')
|
|
25
|
-
@o.add_c(o)
|
|
26
|
-
@o.cs.must_equal [o]
|
|
27
|
-
@db.sqls.must_equal []
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should not affect adding associations to existing rows" do
|
|
31
|
-
@o = @c.load(:id=>1, :name=>'a')
|
|
32
|
-
@o.add_c(@c.load(:id=>2, :name=>'b'))
|
|
33
|
-
@db.sqls.must_equal ["UPDATE cs SET c_id = 1 WHERE (id = 2)"]
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "should raise an error when saving if the associated object is invalid" do
|
|
37
|
-
@c.send(:define_method, :validate){|*| errors.add(:name, 'is b') if name == 'b'}
|
|
38
|
-
@o = @c.new(:name=>'a')
|
|
39
|
-
@o.add_c(@c.load(:id=>2, :name=>'b'))
|
|
40
|
-
proc{@o.save}.must_raise Sequel::ValidationFailed
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it "should return nil when saving if the associated object is invalid when raise_on_save_failure is false" do
|
|
44
|
-
@c.raise_on_save_failure = false
|
|
45
|
-
@c.send(:define_method, :validate){|*| errors.add(:name, 'is b') if name == 'b'}
|
|
46
|
-
@o = @c.new(:name=>'a')
|
|
47
|
-
@o.add_c(@c.load(:id=>2, :name=>'b'))
|
|
48
|
-
@o.save.must_be_nil
|
|
49
|
-
@o.errors[:cs].must_equal ["name is b"]
|
|
50
|
-
@o.cs.first.errors[:name].must_equal ['is b']
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should work when passing in hashes" do
|
|
54
|
-
@o = @c.new(:name=>'a')
|
|
55
|
-
@o.add_c(:name=>'b')
|
|
56
|
-
@db.sqls.must_equal []
|
|
57
|
-
@o.save
|
|
58
|
-
@db.sqls.must_equal [
|
|
59
|
-
"INSERT INTO cs (name) VALUES ('a')",
|
|
60
|
-
"SELECT * FROM cs WHERE (id = 1) LIMIT 1",
|
|
61
|
-
"INSERT INTO cs (name, c_id) VALUES ('b', 1)",
|
|
62
|
-
"SELECT * FROM cs WHERE (id = 2) LIMIT 1"]
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "should work when passing in primary keys" do
|
|
66
|
-
@db.fetch = [[{:id=>2, :name=>'b', :c_id=>nil}], [{:id=>1, :name=>'a', :c_id=>nil}]]
|
|
67
|
-
@o = @c.new(:name=>'a')
|
|
68
|
-
@o.add_c(2)
|
|
69
|
-
@db.sqls.must_equal ["SELECT * FROM cs WHERE (id = 2) LIMIT 1"]
|
|
70
|
-
@o.save
|
|
71
|
-
@db.sqls.must_equal ["INSERT INTO cs (name) VALUES ('a')", "SELECT * FROM cs WHERE (id = 1) LIMIT 1", "UPDATE cs SET c_id = 1 WHERE (id = 2)"]
|
|
72
|
-
end
|
|
73
|
-
end
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::Dirty" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:fetch=>{:initial=>'i'.dup, :initial_changed=>'ic'.dup}, :numrows=>1)
|
|
6
|
-
@c = Class.new(Sequel::Model(@db[:c]))
|
|
7
|
-
@c.plugin :dirty
|
|
8
|
-
@c.columns :initial, :initial_changed, :missing, :missing_changed
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
dirty_plugin_specs = shared_description do
|
|
12
|
-
it "initial_value should be the current value if value has not changed" do
|
|
13
|
-
@o.initial_value(:initial).must_equal 'i'
|
|
14
|
-
@o.initial_value(:missing).must_be_nil
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "initial_value should be the intial value if value has changed" do
|
|
18
|
-
@o.initial_value(:initial_changed).must_equal 'ic'
|
|
19
|
-
@o.initial_value(:missing_changed).must_be_nil
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "initial_value should handle case where initial value is reassigned later" do
|
|
23
|
-
@o.initial_changed = 'ic'
|
|
24
|
-
@o.initial_value(:initial_changed).must_equal 'ic'
|
|
25
|
-
@o.missing_changed = nil
|
|
26
|
-
@o.initial_value(:missing_changed).must_be_nil
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "changed_columns should handle case where initial value is reassigned later" do
|
|
30
|
-
@o.changed_columns.must_equal [:initial_changed, :missing_changed]
|
|
31
|
-
@o.initial_changed = 'ic'
|
|
32
|
-
@o.changed_columns.must_equal [:missing_changed]
|
|
33
|
-
@o.missing_changed = nil
|
|
34
|
-
@o.changed_columns.must_equal [:missing_changed]
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "column_change should give initial and current values if there has been a change made" do
|
|
38
|
-
@o.column_change(:initial_changed).must_equal ['ic', 'ic2']
|
|
39
|
-
@o.column_change(:missing_changed).must_equal [nil, 'mc2']
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "column_change should be nil if no change has been made" do
|
|
43
|
-
@o.column_change(:initial).must_be_nil
|
|
44
|
-
@o.column_change(:missing).must_be_nil
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "column_changed? should return whether the column has changed" do
|
|
48
|
-
@o.column_changed?(:initial).must_equal false
|
|
49
|
-
@o.column_changed?(:initial_changed).must_equal true
|
|
50
|
-
@o.column_changed?(:missing).must_equal false
|
|
51
|
-
@o.column_changed?(:missing_changed).must_equal true
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "column_changed? should handle case where initial value is reassigned later" do
|
|
55
|
-
@o.initial_changed = 'ic'
|
|
56
|
-
@o.column_changed?(:initial_changed).must_equal false
|
|
57
|
-
@o.missing_changed = nil
|
|
58
|
-
@o.column_changed?(:missing_changed).must_equal false
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "changed_columns should handle case where initial value is reassigned later" do
|
|
62
|
-
@o.changed_columns.must_equal [:initial_changed, :missing_changed]
|
|
63
|
-
@o.initial_changed = 'ic'
|
|
64
|
-
@o.changed_columns.must_equal [:missing_changed]
|
|
65
|
-
@o.missing_changed = nil
|
|
66
|
-
@o.changed_columns.must_equal [:missing_changed]
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "column_changes should give initial and current values" do
|
|
70
|
-
@o.column_changes.must_equal(:initial_changed=>['ic', 'ic2'], :missing_changed=>[nil, 'mc2'])
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "reset_column should reset the column to its initial value" do
|
|
74
|
-
@o.reset_column(:initial)
|
|
75
|
-
@o.initial.must_equal 'i'
|
|
76
|
-
@o.reset_column(:initial_changed)
|
|
77
|
-
@o.initial_changed.must_equal 'ic'
|
|
78
|
-
@o.reset_column(:missing)
|
|
79
|
-
@o.missing.must_be_nil
|
|
80
|
-
@o.reset_column(:missing_changed)
|
|
81
|
-
@o.missing_changed.must_be_nil
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "reset_column should remove missing values from the values" do
|
|
85
|
-
@o.reset_column(:missing)
|
|
86
|
-
@o.values.has_key?(:missing).must_equal false
|
|
87
|
-
@o.reset_column(:missing_changed)
|
|
88
|
-
@o.values.has_key?(:missing_changed).must_equal false
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "refresh should clear the cached initial values" do
|
|
92
|
-
@o.refresh
|
|
93
|
-
@o.column_changes.must_equal({})
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it "will_change_column should be used to signal in-place modification to column" do
|
|
97
|
-
@o.will_change_column(:initial)
|
|
98
|
-
@o.initial << 'b'
|
|
99
|
-
@o.column_change(:initial).must_equal ['i', 'ib']
|
|
100
|
-
@o.will_change_column(:initial_changed)
|
|
101
|
-
@o.initial_changed << 'b'
|
|
102
|
-
@o.column_change(:initial_changed).must_equal ['ic', 'ic2b']
|
|
103
|
-
@o.will_change_column(:missing)
|
|
104
|
-
@o.values[:missing] = 'b'
|
|
105
|
-
@o.column_change(:missing).must_equal [nil, 'b']
|
|
106
|
-
@o.will_change_column(:missing_changed)
|
|
107
|
-
@o.missing_changed << 'b'
|
|
108
|
-
@o.column_change(:missing_changed).must_equal [nil, 'mc2b']
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it "will_change_column should different types of existing objects" do
|
|
112
|
-
[nil, true, false, Class.new{undef_method :clone}.new, Class.new{def clone; raise TypeError; end}.new].each do |v|
|
|
113
|
-
o = @c.new(:initial=>v)
|
|
114
|
-
o.will_change_column(:initial)
|
|
115
|
-
o.initial = 'a'
|
|
116
|
-
o.column_change(:initial).must_equal [v, 'a']
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
it "should work when freezing objects" do
|
|
121
|
-
@o.freeze
|
|
122
|
-
@o.initial_value(:initial).must_equal 'i'
|
|
123
|
-
proc{@o.initial = 'b'}.must_raise
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "should have #dup duplicate structures" do
|
|
127
|
-
was_new = @o.new?
|
|
128
|
-
@o.update(:missing=>'m2')
|
|
129
|
-
@o.dup.initial_values.must_equal @o.initial_values
|
|
130
|
-
@o.dup.initial_values.wont_be_same_as(@o.initial_values)
|
|
131
|
-
@o.dup.instance_variable_get(:@missing_initial_values).must_equal @o.instance_variable_get(:@missing_initial_values)
|
|
132
|
-
@o.dup.instance_variable_get(:@missing_initial_values).wont_be_same_as(@o.instance_variable_get(:@missing_initial_values))
|
|
133
|
-
if was_new
|
|
134
|
-
@o.previous_changes.must_be_nil
|
|
135
|
-
@o.dup.previous_changes.must_be_nil
|
|
136
|
-
else
|
|
137
|
-
@o.dup.previous_changes.must_equal @o.previous_changes
|
|
138
|
-
end
|
|
139
|
-
@o.dup.previous_changes.wont_be_same_as(@o.previous_changes) if @o.previous_changes
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
describe "with new instance" do
|
|
144
|
-
before do
|
|
145
|
-
@o = @c.new(:initial=>'i'.dup, :initial_changed=>'ic'.dup)
|
|
146
|
-
@o.initial_changed = 'ic2'.dup
|
|
147
|
-
@o.missing_changed = 'mc2'.dup
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
include dirty_plugin_specs
|
|
151
|
-
|
|
152
|
-
it "save should clear the cached initial values" do
|
|
153
|
-
@o.save
|
|
154
|
-
@o.column_changes.must_equal({})
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "save_changes should clear the cached initial values" do
|
|
158
|
-
@c.dataset = @c.dataset.with_extend do
|
|
159
|
-
def supports_insert_select?; true end
|
|
160
|
-
def insert_select(*) {:id=>1} end
|
|
161
|
-
end
|
|
162
|
-
@o.save
|
|
163
|
-
@o.column_changes.must_equal({})
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
it "should work with the typecast_on_load plugin" do
|
|
167
|
-
@c.instance_variable_set(:@db_schema, :initial=>{:type=>:integer})
|
|
168
|
-
@c.plugin :typecast_on_load, :initial
|
|
169
|
-
|
|
170
|
-
@o = @c.call(:initial=>'1')
|
|
171
|
-
@o.column_changes.must_equal({})
|
|
172
|
-
@o.save
|
|
173
|
-
@o.previous_changes.must_equal({})
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
it "should have column_changes work with the typecast_on_load in after hooks" do
|
|
177
|
-
@c.instance_variable_set(:@db_schema, :initial=>{:type=>:integer})
|
|
178
|
-
@c.plugin :typecast_on_load, :initial
|
|
179
|
-
|
|
180
|
-
@o = @c.new
|
|
181
|
-
@o.initial = 1
|
|
182
|
-
@o.column_changes.must_equal({:initial=>[nil, 1]})
|
|
183
|
-
column_changes_in_after_save = nil
|
|
184
|
-
@o.define_singleton_method(:after_save) do
|
|
185
|
-
column_changes_in_after_save = column_changes
|
|
186
|
-
super()
|
|
187
|
-
end
|
|
188
|
-
@db.fetch = {:initial=>1}
|
|
189
|
-
@o.save
|
|
190
|
-
column_changes_in_after_save.must_equal({:initial=>[nil, 1]})
|
|
191
|
-
|
|
192
|
-
@o.initial = 2
|
|
193
|
-
@o.column_changes.must_equal({:initial=>[1, 2]})
|
|
194
|
-
@o.save
|
|
195
|
-
column_changes_in_after_save.must_equal({:initial=>[1, 2]})
|
|
196
|
-
@o.previous_changes.must_equal({:initial=>[1, 2]})
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
describe "with existing instance" do
|
|
201
|
-
before do
|
|
202
|
-
@o = @c[1]
|
|
203
|
-
@o.initial_changed = 'ic2'.dup
|
|
204
|
-
@o.missing_changed = 'mc2'.dup
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
include dirty_plugin_specs
|
|
208
|
-
|
|
209
|
-
it "previous_changes should be the previous changes after saving" do
|
|
210
|
-
@o.save
|
|
211
|
-
@o.previous_changes.must_equal(:initial_changed=>['ic', 'ic2'], :missing_changed=>[nil, 'mc2'])
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
it "should work when freezing objects after saving" do
|
|
215
|
-
@o.initial = 'a'
|
|
216
|
-
@o.save
|
|
217
|
-
@o.freeze
|
|
218
|
-
@o.previous_changes[:initial].must_equal ['i', 'a']
|
|
219
|
-
proc{@o.initial = 'b'}.must_raise
|
|
220
|
-
end
|
|
221
|
-
end
|
|
222
|
-
end
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
mod = shared_description do
|
|
4
|
-
it "should take action depending on :on_duplicate_columns if 2 or more columns have the same name" do
|
|
5
|
-
check(nil, @cols)
|
|
6
|
-
@warned.must_be_nil
|
|
7
|
-
|
|
8
|
-
check(:ignore, @cols)
|
|
9
|
-
@warned.must_be_nil
|
|
10
|
-
|
|
11
|
-
check(:warn, @cols)
|
|
12
|
-
@warned.must_include("One or more duplicate columns present in #{@cols.inspect}")
|
|
13
|
-
|
|
14
|
-
proc{check(:raise, @cols)}.must_raise(Sequel::DuplicateColumnError)
|
|
15
|
-
|
|
16
|
-
cols = nil
|
|
17
|
-
check(proc{|cs| cols = cs; nil}, @cols)
|
|
18
|
-
@warned.must_be_nil
|
|
19
|
-
cols.must_equal @cols
|
|
20
|
-
|
|
21
|
-
cols = nil
|
|
22
|
-
check(proc{|cs| cols = cs; :ignore}, @cols)
|
|
23
|
-
@warned.must_be_nil
|
|
24
|
-
cols.must_equal @cols
|
|
25
|
-
|
|
26
|
-
cols = nil
|
|
27
|
-
proc{check(proc{|cs| cols = cs; :raise}, @cols)}.must_raise(Sequel::DuplicateColumnError)
|
|
28
|
-
cols.must_equal @cols
|
|
29
|
-
|
|
30
|
-
cols = nil
|
|
31
|
-
check(proc{|cs| cols = cs; :warn}, @cols)
|
|
32
|
-
@warned.must_include("One or more duplicate columns present in #{@cols.inspect}")
|
|
33
|
-
cols.must_equal @cols
|
|
34
|
-
|
|
35
|
-
check(:raise, nil)
|
|
36
|
-
@warned.must_be_nil
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "should not raise error or warning if no columns have the same name" do
|
|
40
|
-
[nil, :ignore, :raise, :warn, proc{|cs| :raise}].each do |handler|
|
|
41
|
-
check(handler, @cols.uniq)
|
|
42
|
-
@warned.must_be_nil
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
describe "Sequel::DuplicateColumnsHandler Database configuration" do
|
|
48
|
-
before do
|
|
49
|
-
@db = Sequel.mock
|
|
50
|
-
@db.extension(:duplicate_columns_handler)
|
|
51
|
-
@cols = [:id, :name, :id]
|
|
52
|
-
@warned = nil
|
|
53
|
-
set_warned = @set_warned = proc{|m| @warned = m}
|
|
54
|
-
@ds = @db[:things].with_extend{define_method(:warn){|message| set_warned.call(message)}}
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def check(handler, cols)
|
|
58
|
-
@db.opts[:on_duplicate_columns] = handler
|
|
59
|
-
@set_warned.call(nil)
|
|
60
|
-
@ds.send(:columns=, cols)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
include mod
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
describe "Sequel::DuplicateColumnsHandler Dataset configuration" do
|
|
67
|
-
before do
|
|
68
|
-
@cols = [:id, :name, :id]
|
|
69
|
-
@warned = nil
|
|
70
|
-
set_warned = @set_warned = proc{|m| @warned = m}
|
|
71
|
-
@ds = Sequel.mock[:things].extension(:duplicate_columns_handler).with_extend{define_method(:warn){|message| set_warned.call(message)}}
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def check(handler, cols)
|
|
75
|
-
@set_warned.call(nil)
|
|
76
|
-
@ds.on_duplicate_columns(handler).send(:columns=, cols)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
include mod
|
|
80
|
-
|
|
81
|
-
it "should use handlers passed as blocks to on_duplicate_columns" do
|
|
82
|
-
proc{@ds.on_duplicate_columns{:raise}.send(:columns=, @cols)}.must_raise(Sequel::DuplicateColumnError)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "should raise an error if not providing either an argument or block to on_duplicate_columns" do
|
|
86
|
-
proc{@ds.on_duplicate_columns}.must_raise(Sequel::Error)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "should raise an error if providing both an argument and block to on_duplicate_columns" do
|
|
90
|
-
proc{@ds.on_duplicate_columns(:raise){:raise}}.must_raise(Sequel::Error)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "should warn by defaul if there is no database or dataset handler" do
|
|
94
|
-
@ds.send(:columns=, @cols)
|
|
95
|
-
@warned.must_include("One or more duplicate columns present in #{@cols.inspect}")
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "should fallback to database setting if there is no dataset-level handler" do
|
|
99
|
-
@ds.db.opts[:on_duplicate_columns] = :raise
|
|
100
|
-
proc{@ds.send(:columns=, @cols)}.must_raise(Sequel::DuplicateColumnError)
|
|
101
|
-
check(:ignore, @cols)
|
|
102
|
-
@warned.must_be_nil
|
|
103
|
-
end
|
|
104
|
-
end
|