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,69 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::InputTransformer" do
|
|
4
|
-
before do
|
|
5
|
-
@c = Class.new(Sequel::Model)
|
|
6
|
-
@c.columns :name, :b
|
|
7
|
-
@c.plugin(:input_transformer, :reverser){|v| v.is_a?(String) ? v.reverse : v}
|
|
8
|
-
@o = @c.new
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "should apply transformation to input" do
|
|
12
|
-
@o.name = ' name '
|
|
13
|
-
@o.name.must_equal ' eman '
|
|
14
|
-
@o.name = [1, 2, 3]
|
|
15
|
-
@o.name.must_equal [1, 2, 3]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should have working .input_transformer_order" do
|
|
19
|
-
@c.input_transformer_order.must_equal [:reverser]
|
|
20
|
-
@c.plugin(:input_transformer, :reverser2){|v| v.is_a?(String) ? v.reverse : v}
|
|
21
|
-
@c.input_transformer_order.must_equal [:reverser2, :reverser]
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should not apply any transformers by default" do
|
|
25
|
-
c = Class.new(Sequel::Model)
|
|
26
|
-
c.columns :name, :b
|
|
27
|
-
c.plugin :input_transformer
|
|
28
|
-
c.new(:name => ' name ').name.must_equal ' name '
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "should allow skipping of columns using .skip_input_transformer" do
|
|
32
|
-
@c.skip_input_transformer :reverser, :name
|
|
33
|
-
v = ' name '
|
|
34
|
-
@o.name = v
|
|
35
|
-
@o.name.must_be_same_as(v)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should work correctly in subclasses" do
|
|
39
|
-
o = Class.new(@c).new
|
|
40
|
-
o.name = ' name '
|
|
41
|
-
o.name.must_equal ' eman '
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should raise an error if adding input filter without name" do
|
|
45
|
-
proc{@c.add_input_transformer(nil){}}.must_raise(Sequel::Error)
|
|
46
|
-
proc{@c.plugin(:input_transformer){}}.must_raise(Sequel::Error)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "should raise an error if adding input filter without block" do
|
|
50
|
-
proc{@c.add_input_transformer(:foo)}.must_raise(Sequel::Error)
|
|
51
|
-
proc{@c.plugin(:input_transformer, :foo)}.must_raise(Sequel::Error)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "should apply multiple input transformers in reverse order of their call" do
|
|
55
|
-
@c.add_input_transformer(:add_bar){|v| v << 'bar'}
|
|
56
|
-
@c.add_input_transformer(:add_foo){|v| v << 'foo'}
|
|
57
|
-
@o.name = ' name '.dup
|
|
58
|
-
@o.name.must_equal 'raboof eman '
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "should freeze input transformers when freezing model class" do
|
|
62
|
-
@c.skip_input_transformer :reverser, :name
|
|
63
|
-
@c.freeze
|
|
64
|
-
@c.input_transformers.frozen?.must_equal true
|
|
65
|
-
skip = @c.instance_variable_get(:@skip_input_transformer_columns)
|
|
66
|
-
skip.frozen?.must_equal true
|
|
67
|
-
skip.values.all?(&:frozen?).must_equal true
|
|
68
|
-
end
|
|
69
|
-
end
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "insert_conflict plugin" do
|
|
4
|
-
def model_class(adapter)
|
|
5
|
-
db = Sequel.mock(:host=>adapter, :fetch=>{:id=>1, :s=>2}, :autoid=>1)
|
|
6
|
-
db.extend_datasets{def quote_identifiers?; false end}
|
|
7
|
-
model = Class.new(Sequel::Model)
|
|
8
|
-
model.dataset = db[:t]
|
|
9
|
-
model.columns :id, :s, :o
|
|
10
|
-
model.plugin :insert_conflict
|
|
11
|
-
db.sqls
|
|
12
|
-
model
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def model_class_plugin_first(adapter)
|
|
16
|
-
model = Class.new(Sequel::Model)
|
|
17
|
-
model.plugin :insert_conflict
|
|
18
|
-
model = Class.new(model)
|
|
19
|
-
db = Sequel.mock(:host=>adapter, :fetch=>{:id=>1, :s=>2}, :autoid=>1)
|
|
20
|
-
db.extend_datasets{def quote_identifiers?; false end}
|
|
21
|
-
model.dataset = db[:t]
|
|
22
|
-
model.columns :id, :s, :o
|
|
23
|
-
db.sqls
|
|
24
|
-
model
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should use INSERT ON CONFLICT when inserting on PostgreSQL" do
|
|
28
|
-
model = model_class(:postgres)
|
|
29
|
-
model.new(:s=>'A', :o=>1).insert_conflict.save
|
|
30
|
-
model.db.sqls.must_equal ["INSERT INTO t (s, o) VALUES ('A', 1) ON CONFLICT DO NOTHING RETURNING *"]
|
|
31
|
-
|
|
32
|
-
model.new(:s=>'A', :o=>1).insert_conflict(:target=>:s, :update => {:o => Sequel[:excluded][:o]}).save
|
|
33
|
-
model.db.sqls.must_equal ["INSERT INTO t (s, o) VALUES ('A', 1) ON CONFLICT (s) DO UPDATE SET o = excluded.o RETURNING *"]
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "should use INSERT ON CONFLICT when inserting on SQLITE" do
|
|
37
|
-
model = model_class(:sqlite)
|
|
38
|
-
model.new(:s=>'A', :o=>1).insert_conflict.save
|
|
39
|
-
model.db.sqls.must_equal ["INSERT INTO t (s, o) VALUES ('A', 1) ON CONFLICT DO NOTHING",
|
|
40
|
-
"SELECT * FROM t WHERE (id = 1) LIMIT 1"]
|
|
41
|
-
|
|
42
|
-
model.new(:s=>'A', :o=>1).insert_conflict(:target=>:s, :update => {:o => Sequel[:excluded][:o]}).save
|
|
43
|
-
model.db.sqls.must_equal ["INSERT INTO t (s, o) VALUES ('A', 1) ON CONFLICT (s) DO UPDATE SET o = excluded.o",
|
|
44
|
-
"SELECT * FROM t WHERE (id = 2) LIMIT 1"]
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should raise Error if calling insert_conflict on a model instance that isn't new" do
|
|
48
|
-
m = model_class(:postgres).load(:s=>'A', :o=>1)
|
|
49
|
-
proc{m.insert_conflict}.must_raise Sequel::Error
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should raise if loading plugin into a model class with a dataset that doesn't support insert_conflict" do
|
|
53
|
-
model = Class.new(Sequel::Model)
|
|
54
|
-
model.dataset = Sequel.mock[:t]
|
|
55
|
-
proc{model.plugin :insert_conflict}.must_raise Sequel::Error
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "should work if loading into a model class without a dataset on PostgreSQL" do
|
|
59
|
-
model = model_class_plugin_first(:postgres)
|
|
60
|
-
model.new(:s=>'A', :o=>1).insert_conflict.save
|
|
61
|
-
model.db.sqls.must_equal ["INSERT INTO t (s, o) VALUES ('A', 1) ON CONFLICT DO NOTHING RETURNING *"]
|
|
62
|
-
|
|
63
|
-
model.new(:s=>'A', :o=>1).insert_conflict(:target=>:s, :update => {:o => Sequel[:excluded][:o]}).save
|
|
64
|
-
model.db.sqls.must_equal ["INSERT INTO t (s, o) VALUES ('A', 1) ON CONFLICT (s) DO UPDATE SET o = excluded.o RETURNING *"]
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "should work if loading into a model class without a dataset on SQLITE" do
|
|
68
|
-
model = model_class_plugin_first(:sqlite)
|
|
69
|
-
model.new(:s=>'A', :o=>1).insert_conflict.save
|
|
70
|
-
model.db.sqls.must_equal ["INSERT INTO t (s, o) VALUES ('A', 1) ON CONFLICT DO NOTHING",
|
|
71
|
-
"SELECT * FROM t WHERE (id = 1) LIMIT 1"]
|
|
72
|
-
|
|
73
|
-
model.new(:s=>'A', :o=>1).insert_conflict(:target=>:s, :update => {:o => Sequel[:excluded][:o]}).save
|
|
74
|
-
model.db.sqls.must_equal ["INSERT INTO t (s, o) VALUES ('A', 1) ON CONFLICT (s) DO UPDATE SET o = excluded.o",
|
|
75
|
-
"SELECT * FROM t WHERE (id = 2) LIMIT 1"]
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "should work if the prepared_statements plugin is loaded before" do
|
|
79
|
-
db = Sequel.mock(:host=>'sqlite', :fetch=>{:id=>1, :s=>2}, :autoid=>1, :numrows=>1)
|
|
80
|
-
db.extend_datasets{def quote_identifiers?; false end}
|
|
81
|
-
model = Class.new(Sequel::Model)
|
|
82
|
-
model.dataset = db[:t]
|
|
83
|
-
model.columns :id, :s
|
|
84
|
-
model.plugin :prepared_statements
|
|
85
|
-
model.plugin :insert_conflict
|
|
86
|
-
db.sqls
|
|
87
|
-
model.create(:s=>'a').update(:s=>'b')
|
|
88
|
-
db.sqls.must_equal ["INSERT INTO t (s) VALUES ('a')", "SELECT * FROM t WHERE (id = 1) LIMIT 1", "UPDATE t SET s = 'b' WHERE (id = 1)"]
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "should work if the prepared_statements plugin is loaded after" do
|
|
92
|
-
db = Sequel.mock(:host=>'postgres', :fetch=>{:id=>1, :s=>2}, :autoid=>1, :numrows=>1)
|
|
93
|
-
db.extend_datasets{def quote_identifiers?; false end}
|
|
94
|
-
model = Class.new(Sequel::Model)
|
|
95
|
-
model.dataset = db[:t]
|
|
96
|
-
model.columns :id, :s
|
|
97
|
-
model.plugin :insert_conflict
|
|
98
|
-
model.plugin :prepared_statements
|
|
99
|
-
db.sqls
|
|
100
|
-
model.create(:s=>'a').update(:s=>'b')
|
|
101
|
-
db.sqls.must_equal ["INSERT INTO t (s) VALUES ('a') RETURNING *", "UPDATE t SET s = 'b' WHERE (id = 1)"]
|
|
102
|
-
end
|
|
103
|
-
end
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::InsertReturningSelect" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:fetch=>{:id=>1, :x=>2}, :autoid=>1)
|
|
6
|
-
@db.extend_datasets do
|
|
7
|
-
def supports_returning?(_) true end
|
|
8
|
-
def insert_select(*v) with_sql_first("#{insert_sql(*v)} RETURNING #{opts[:returning].map{|x| literal(x)}.join(', ')}") end
|
|
9
|
-
end
|
|
10
|
-
@Album = Class.new(Sequel::Model(@db[:albums].select(:id, :x)))
|
|
11
|
-
@Album.columns :id, :x
|
|
12
|
-
@db.sqls
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should work if loaded into a model without a dataset that also uses the lazy_attributes or dataset associations plugins" do
|
|
16
|
-
c = Sequel::Model(@db)
|
|
17
|
-
c.plugin :insert_returning_select
|
|
18
|
-
c.columns :id, :x
|
|
19
|
-
c.plugin :lazy_attributes
|
|
20
|
-
c.plugin :dataset_associations
|
|
21
|
-
|
|
22
|
-
c.set_dataset @db[:albums].select(:id, :x)
|
|
23
|
-
c.plugin :lazy_attributes, :x
|
|
24
|
-
c.many_to_one :c, :key=>:id, :class=>c
|
|
25
|
-
@db.sqls
|
|
26
|
-
|
|
27
|
-
c.dataset.sql.must_equal 'SELECT id FROM albums'
|
|
28
|
-
c.create(:x=>2)
|
|
29
|
-
@db.sqls.must_equal ['INSERT INTO albums (x) VALUES (2) RETURNING id']
|
|
30
|
-
c.load(:id=>2).x
|
|
31
|
-
@db.sqls.must_equal ['SELECT albums.x FROM albums WHERE (id = 2) LIMIT 1']
|
|
32
|
-
c.dataset.cs.sql.must_equal "SELECT id FROM albums WHERE (albums.id IN (SELECT albums.id FROM albums))"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "should add a returning clause when inserting using selected columns" do
|
|
36
|
-
@Album.plugin :insert_returning_select
|
|
37
|
-
@Album.create(:x=>2).must_equal @Album.load(:id=>1, :x=>2)
|
|
38
|
-
@db.sqls.must_equal ['INSERT INTO albums (x) VALUES (2) RETURNING id, x']
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "should not add a returning clause if selection does not consist of just columns" do
|
|
42
|
-
@Album.dataset = @Album.dataset.select_append(Sequel.as(1, :b))
|
|
43
|
-
@Album.plugin :insert_returning_select
|
|
44
|
-
@db.sqls.clear
|
|
45
|
-
@Album.create(:x=>2).must_equal @Album.load(:id=>1, :x=>2)
|
|
46
|
-
@db.sqls.must_equal ['INSERT INTO albums (x) VALUES (2)', 'SELECT id, x, 1 AS b FROM albums WHERE (id = 1) LIMIT 1']
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "should not add a returning clause if database doesn't support it" do
|
|
50
|
-
@db.extend_datasets{def supports_returning?(_) false end}
|
|
51
|
-
@Album.plugin :insert_returning_select
|
|
52
|
-
@Album.create(:x=>2).must_equal @Album.load(:id=>1, :x=>2)
|
|
53
|
-
@db.sqls.must_equal ['INSERT INTO albums (x) VALUES (2)', 'SELECT id, x FROM albums WHERE (id = 1) LIMIT 1']
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should work correctly with subclasses" do
|
|
57
|
-
c = Class.new(Sequel::Model)
|
|
58
|
-
c.plugin :insert_returning_select
|
|
59
|
-
b = Class.new(c)
|
|
60
|
-
b.columns :id, :x
|
|
61
|
-
b.dataset = @db[:albums].select(:id, :x)
|
|
62
|
-
@db.sqls.clear
|
|
63
|
-
b.create(:x=>2).must_equal b.load(:id=>1, :x=>2)
|
|
64
|
-
@db.sqls.must_equal ['INSERT INTO albums (x) VALUES (2) RETURNING id, x']
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "should freeze instance_insert_dataset when freezing model class" do
|
|
68
|
-
@Album.plugin :insert_returning_select
|
|
69
|
-
@Album.freeze
|
|
70
|
-
@Album.instance_insert_dataset.frozen?.must_equal true
|
|
71
|
-
end
|
|
72
|
-
end
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "instance_filters plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@c = Class.new(Sequel::Model(:people))
|
|
6
|
-
@c.columns :id, :name, :num
|
|
7
|
-
@c.plugin :instance_filters
|
|
8
|
-
@p = @c.load(:id=>1, :name=>'John', :num=>1)
|
|
9
|
-
DB.sqls
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "should raise an error when updating a stale record" do
|
|
13
|
-
@p.update(:name=>'Bob')
|
|
14
|
-
DB.sqls.must_equal ["UPDATE people SET name = 'Bob' WHERE (id = 1)"]
|
|
15
|
-
@p.instance_filter(:name=>'Jim')
|
|
16
|
-
@p.instance_variable_set(:@this, @p.this.with_numrows(0))
|
|
17
|
-
proc{@p.update(:name=>'Joe')}.must_raise(Sequel::Plugins::InstanceFilters::Error)
|
|
18
|
-
DB.sqls.must_equal ["UPDATE people SET name = 'Joe' WHERE ((id = 1) AND (name = 'Jim'))"]
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should raise an error when destroying a stale record" do
|
|
22
|
-
@p.destroy
|
|
23
|
-
DB.sqls.must_equal ["DELETE FROM people WHERE id = 1"]
|
|
24
|
-
@p.instance_filter(:name=>'Jim')
|
|
25
|
-
@p.instance_variable_set(:@this, @p.this.with_numrows(0))
|
|
26
|
-
proc{@p.destroy}.must_raise(Sequel::Plugins::InstanceFilters::Error)
|
|
27
|
-
DB.sqls.must_equal ["DELETE FROM people WHERE ((id = 1) AND (name = 'Jim'))"]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should work when using the prepared_statements plugin" do
|
|
31
|
-
@c.plugin :prepared_statements
|
|
32
|
-
|
|
33
|
-
@p.update(:name=>'Bob')
|
|
34
|
-
DB.sqls.must_equal ["UPDATE people SET name = 'Bob' WHERE (id = 1)"]
|
|
35
|
-
@p.instance_filter(:name=>'Jim')
|
|
36
|
-
@p.instance_variable_set(:@this, @p.this.with_numrows(0))
|
|
37
|
-
proc{@p.update(:name=>'Joe')}.must_raise(Sequel::Plugins::InstanceFilters::Error)
|
|
38
|
-
DB.sqls.must_equal ["UPDATE people SET name = 'Joe' WHERE ((id = 1) AND (name = 'Jim'))"]
|
|
39
|
-
|
|
40
|
-
@p = @c.load(:id=>1, :name=>'John', :num=>1)
|
|
41
|
-
@p.instance_variable_set(:@this, @p.this.with_numrows(1))
|
|
42
|
-
@c.instance_variable_set(:@fast_instance_delete_sql, nil)
|
|
43
|
-
@p.destroy
|
|
44
|
-
DB.sqls.must_equal ["DELETE FROM people WHERE (id = 1)"]
|
|
45
|
-
@p.instance_filter(:name=>'Jim')
|
|
46
|
-
@p.instance_variable_set(:@this, @p.this.with_numrows(0))
|
|
47
|
-
proc{@p.destroy}.must_raise(Sequel::Plugins::InstanceFilters::Error)
|
|
48
|
-
DB.sqls.must_equal ["DELETE FROM people WHERE ((id = 1) AND (name = 'Jim'))"]
|
|
49
|
-
|
|
50
|
-
@c.create.must_be_kind_of(@c)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should apply all instance filters" do
|
|
54
|
-
@p.instance_filter(:name=>'Jim')
|
|
55
|
-
@p.instance_filter{num > 2}
|
|
56
|
-
@p.update(:name=>'Bob')
|
|
57
|
-
DB.sqls.must_equal ["UPDATE people SET name = 'Bob' WHERE ((id = 1) AND (name = 'Jim') AND (num > 2))"]
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "should drop instance filters after updating" do
|
|
61
|
-
@p.instance_filter(:name=>'Joe')
|
|
62
|
-
@p.update(:name=>'Joe')
|
|
63
|
-
DB.sqls.must_equal ["UPDATE people SET name = 'Joe' WHERE ((id = 1) AND (name = 'Joe'))"]
|
|
64
|
-
@p.update(:name=>'Bob')
|
|
65
|
-
DB.sqls.must_equal ["UPDATE people SET name = 'Bob' WHERE (id = 1)"]
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "shouldn't allow instance filters on frozen objects" do
|
|
69
|
-
@p.instance_filter(:name=>'Joe')
|
|
70
|
-
@p.freeze
|
|
71
|
-
proc{@p.instance_filter(:name=>'Jim')}.must_raise
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "should have dup duplicate internal structures" do
|
|
75
|
-
@p.instance_filter(:name=>'Joe')
|
|
76
|
-
@p.dup.send(:instance_filters).must_equal @p.send(:instance_filters)
|
|
77
|
-
@p.dup.send(:instance_filters).wont_be_same_as(@p.send(:instance_filters))
|
|
78
|
-
end
|
|
79
|
-
end
|
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "InstanceHooks plugin" do
|
|
4
|
-
def r(x=nil)
|
|
5
|
-
@r << x
|
|
6
|
-
yield if block_given?
|
|
7
|
-
x
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
before do
|
|
11
|
-
@c = Class.new(Sequel::Model(:items))
|
|
12
|
-
@c.plugin :instance_hooks
|
|
13
|
-
@c.raise_on_save_failure = false
|
|
14
|
-
@o = @c.new
|
|
15
|
-
@x = @c.load({:id=>1})
|
|
16
|
-
@r = []
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "should support before_create_hook and after_create_hook" do
|
|
20
|
-
@o.after_create_hook{r 1}
|
|
21
|
-
@o.before_create_hook{r 2}
|
|
22
|
-
@o.after_create_hook{r 3}
|
|
23
|
-
@o.before_create_hook{r 4}
|
|
24
|
-
@o.save.wont_equal nil
|
|
25
|
-
@r.must_equal [4, 2, 1, 3]
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "should cancel the save if before_create_hook block calls cancel_action" do
|
|
29
|
-
@o.after_create_hook{r 1}
|
|
30
|
-
@o.before_create_hook{r{@o.cancel_action}}
|
|
31
|
-
@o.before_create_hook{r 4}
|
|
32
|
-
@o.save.must_be_nil
|
|
33
|
-
@r.must_equal [4, nil]
|
|
34
|
-
@r.clear
|
|
35
|
-
@o.save.must_be_nil
|
|
36
|
-
@r.must_equal [4, nil]
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "should support before_update_hook and after_update_hook" do
|
|
40
|
-
@x.after_update_hook{r 1}
|
|
41
|
-
@x.before_update_hook{r 2}
|
|
42
|
-
@x.after_update_hook{r 3}
|
|
43
|
-
@x.before_update_hook{r 4}
|
|
44
|
-
@x.save.wont_equal nil
|
|
45
|
-
@r.must_equal [4, 2, 1, 3]
|
|
46
|
-
@x.save.wont_equal nil
|
|
47
|
-
@r.must_equal [4, 2, 1, 3]
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "should cancel the save if before_update_hook block calls cancel_action" do
|
|
51
|
-
@x.after_update_hook{r 1}
|
|
52
|
-
@x.before_update_hook{r{@x.cancel_action}}
|
|
53
|
-
@x.before_update_hook{r 4}
|
|
54
|
-
@x.save.must_be_nil
|
|
55
|
-
@r.must_equal [4, nil]
|
|
56
|
-
@r.clear
|
|
57
|
-
@x.save.must_be_nil
|
|
58
|
-
@r.must_equal [4, nil]
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "should support before_save_hook and after_save_hook" do
|
|
62
|
-
@o.after_save_hook{r 1}
|
|
63
|
-
@o.before_save_hook{r 2}
|
|
64
|
-
@o.after_save_hook{r 3}
|
|
65
|
-
@o.before_save_hook{r 4}
|
|
66
|
-
@o.save.wont_equal nil
|
|
67
|
-
@r.must_equal [4, 2, 1, 3]
|
|
68
|
-
@r.clear
|
|
69
|
-
|
|
70
|
-
@x.after_save_hook{r 1}
|
|
71
|
-
@x.before_save_hook{r 2}
|
|
72
|
-
@x.after_save_hook{r 3}
|
|
73
|
-
@x.before_save_hook{r 4}
|
|
74
|
-
@x.save.wont_equal nil
|
|
75
|
-
@r.must_equal [4, 2, 1, 3]
|
|
76
|
-
@x.save.wont_equal nil
|
|
77
|
-
@r.must_equal [4, 2, 1, 3]
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "should cancel the save if before_save_hook block calls cancel_action" do
|
|
81
|
-
@x.after_save_hook{r 1}
|
|
82
|
-
@x.before_save_hook{r{@x.cancel_action}}
|
|
83
|
-
@x.before_save_hook{r 4}
|
|
84
|
-
@x.save.must_be_nil
|
|
85
|
-
@r.must_equal [4, nil]
|
|
86
|
-
@r.clear
|
|
87
|
-
|
|
88
|
-
@x.after_save_hook{r 1}
|
|
89
|
-
@x.before_save_hook{r{@x.cancel_action}}
|
|
90
|
-
@x.before_save_hook{r 4}
|
|
91
|
-
@x.save.must_be_nil
|
|
92
|
-
@r.must_equal [4, nil]
|
|
93
|
-
@r.clear
|
|
94
|
-
@x.save.must_be_nil
|
|
95
|
-
@r.must_equal [4, nil]
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "should support before_destroy_hook and after_destroy_hook" do
|
|
99
|
-
@x.after_destroy_hook{r 1}
|
|
100
|
-
@x.before_destroy_hook{r 2}
|
|
101
|
-
@x.after_destroy_hook{r 3}
|
|
102
|
-
@x.before_destroy_hook{r 4}
|
|
103
|
-
@x.destroy.wont_equal nil
|
|
104
|
-
@r.must_equal [4, 2, 1, 3]
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "should cancel the destroy if before_destroy_hook block calls cancel_action" do
|
|
108
|
-
@x.after_destroy_hook{r 1}
|
|
109
|
-
@x.before_destroy_hook{r{@x.cancel_action}}
|
|
110
|
-
@x.before_destroy_hook{r 4}
|
|
111
|
-
@x.destroy.must_be_nil
|
|
112
|
-
@r.must_equal [4, nil]
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "should support before_validation_hook and after_validation_hook" do
|
|
116
|
-
@o.after_validation_hook{r 1}
|
|
117
|
-
@o.before_validation_hook{r 2}
|
|
118
|
-
@o.after_validation_hook{r 3}
|
|
119
|
-
@o.before_validation_hook{r 4}
|
|
120
|
-
@o.valid?.must_equal true
|
|
121
|
-
@r.must_equal [4, 2, 1, 3]
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
it "should cancel the save if before_validation_hook block calls cancel_action" do
|
|
125
|
-
@o.after_validation_hook{r 1}
|
|
126
|
-
@o.before_validation_hook{r{@o.cancel_action}}
|
|
127
|
-
@o.before_validation_hook{r 4}
|
|
128
|
-
@o.valid?.must_equal false
|
|
129
|
-
@r.must_equal [4, nil]
|
|
130
|
-
@r.clear
|
|
131
|
-
@o.valid?.must_equal false
|
|
132
|
-
@r.must_equal [4, nil]
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
it "should clear only related hooks on successful create" do
|
|
136
|
-
@o.after_destroy_hook{r 1}
|
|
137
|
-
@o.before_destroy_hook{r 2}
|
|
138
|
-
@o.after_update_hook{r 3}
|
|
139
|
-
@o.before_update_hook{r 4}
|
|
140
|
-
@o.before_save_hook{r 5}
|
|
141
|
-
@o.after_save_hook{r 6}
|
|
142
|
-
@o.before_create_hook{r 7}
|
|
143
|
-
@o.after_create_hook{r 8}
|
|
144
|
-
@o.save.wont_equal nil
|
|
145
|
-
@r.must_equal [5, 7, 8, 6]
|
|
146
|
-
@o.instance_variable_set(:@new, false)
|
|
147
|
-
@o.save.wont_equal nil
|
|
148
|
-
@r.must_equal [5, 7, 8, 6, 4, 3]
|
|
149
|
-
@o.save.wont_equal nil
|
|
150
|
-
@r.must_equal [5, 7, 8, 6, 4, 3]
|
|
151
|
-
@o.destroy
|
|
152
|
-
@r.must_equal [5, 7, 8, 6, 4, 3, 2, 1]
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
it "should clear only related hooks on successful update" do
|
|
156
|
-
@x.after_destroy_hook{r 1}
|
|
157
|
-
@x.before_destroy_hook{r 2}
|
|
158
|
-
@x.before_update_hook{r 3}
|
|
159
|
-
@x.after_update_hook{r 4}
|
|
160
|
-
@x.before_save_hook{r 5}
|
|
161
|
-
@x.after_save_hook{r 6}
|
|
162
|
-
@x.save.wont_equal nil
|
|
163
|
-
@r.must_equal [5, 3, 4, 6]
|
|
164
|
-
@x.save.wont_equal nil
|
|
165
|
-
@r.must_equal [5, 3, 4, 6]
|
|
166
|
-
@x.destroy
|
|
167
|
-
@r.must_equal [5, 3, 4, 6, 2, 1]
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
it "should clear only related hooks on successful destroy" do
|
|
171
|
-
@x.after_destroy_hook{r 1}
|
|
172
|
-
@x.before_destroy_hook{r 2}
|
|
173
|
-
@x.before_update_hook{r 3}
|
|
174
|
-
@x.before_save_hook{r 4}
|
|
175
|
-
@x.destroy
|
|
176
|
-
@r.must_equal [2, 1]
|
|
177
|
-
@x.save.wont_equal nil
|
|
178
|
-
@r.must_equal [2, 1, 4, 3]
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
it "should not clear validations hooks on successful save" do
|
|
182
|
-
@x.after_validation_hook{@x.errors.add(:id, 'a') if @x.id == 1; r 1}
|
|
183
|
-
@x.before_validation_hook{r 2}
|
|
184
|
-
@x.save.must_be_nil
|
|
185
|
-
@r.must_equal [2, 1]
|
|
186
|
-
@x.save.must_be_nil
|
|
187
|
-
@r.must_equal [2, 1, 2, 1]
|
|
188
|
-
@x.id = 2
|
|
189
|
-
@x.save.must_equal @x
|
|
190
|
-
@r.must_equal [2, 1, 2, 1, 2, 1]
|
|
191
|
-
@x.save.must_equal @x
|
|
192
|
-
@r.must_equal [2, 1, 2, 1, 2, 1]
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
it "should not allow addition of instance hooks to frozen instances" do
|
|
196
|
-
@x.after_destroy_hook{r 1}
|
|
197
|
-
@x.before_destroy_hook{r 2}
|
|
198
|
-
@x.before_update_hook{r 3}
|
|
199
|
-
@x.before_save_hook{r 4}
|
|
200
|
-
@x.freeze
|
|
201
|
-
proc{@x.after_destroy_hook{r 1}}.must_raise(Sequel::Error)
|
|
202
|
-
proc{@x.before_destroy_hook{r 2}}.must_raise(Sequel::Error)
|
|
203
|
-
proc{@x.before_update_hook{r 3}}.must_raise(Sequel::Error)
|
|
204
|
-
proc{@x.before_save_hook{r 4}}.must_raise(Sequel::Error)
|
|
205
|
-
end
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
describe "InstanceHooks plugin with transactions" do
|
|
209
|
-
before do
|
|
210
|
-
@db = Sequel.mock(:numrows=>1)
|
|
211
|
-
@c = Class.new(Sequel::Model(@db[:items])) do
|
|
212
|
-
attr_accessor :rb
|
|
213
|
-
def after_save
|
|
214
|
-
super
|
|
215
|
-
db.execute('as')
|
|
216
|
-
raise Sequel::Rollback if rb
|
|
217
|
-
end
|
|
218
|
-
def after_destroy
|
|
219
|
-
super
|
|
220
|
-
db.execute('ad')
|
|
221
|
-
raise Sequel::Rollback if rb
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
@c.use_transactions = true
|
|
225
|
-
@c.plugin :instance_hooks
|
|
226
|
-
@o = @c.load({:id=>1})
|
|
227
|
-
@or = @c.load({:id=>1})
|
|
228
|
-
@or.rb = true
|
|
229
|
-
@r = []
|
|
230
|
-
@db.sqls
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
it "should have *_hook methods return self "do
|
|
234
|
-
@o.before_destroy_hook{r 1}.must_be_same_as(@o)
|
|
235
|
-
@o.before_validation_hook{r 1}.must_be_same_as(@o)
|
|
236
|
-
@o.before_save_hook{r 1}.must_be_same_as(@o)
|
|
237
|
-
@o.before_update_hook{r 1}.must_be_same_as(@o)
|
|
238
|
-
@o.before_create_hook{r 1}.must_be_same_as(@o)
|
|
239
|
-
|
|
240
|
-
@o.after_destroy_hook{r 1}.must_be_same_as(@o)
|
|
241
|
-
@o.after_validation_hook{r 1}.must_be_same_as(@o)
|
|
242
|
-
@o.after_save_hook{r 1}.must_be_same_as(@o)
|
|
243
|
-
@o.after_update_hook{r 1}.must_be_same_as(@o)
|
|
244
|
-
@o.after_create_hook{r 1}.must_be_same_as(@o)
|
|
245
|
-
end
|
|
246
|
-
end
|