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,38 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Dataset#select_remove" do
|
|
4
|
-
before do
|
|
5
|
-
@d = Sequel.mock.from(:test).extension(:select_remove)
|
|
6
|
-
@d.columns :a, :b, :c
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it "should remove columns from the selected columns" do
|
|
10
|
-
@d.sql.must_equal 'SELECT * FROM test'
|
|
11
|
-
@d.select_remove(:a).sql.must_equal 'SELECT b, c FROM test'
|
|
12
|
-
@d.select_remove(:b).sql.must_equal 'SELECT a, c FROM test'
|
|
13
|
-
@d.select_remove(:c).sql.must_equal 'SELECT a, b FROM test'
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should work correctly if there are already columns selected" do
|
|
17
|
-
d = @d.select(:a, :b, :c)
|
|
18
|
-
d.columns :a, :b, :c
|
|
19
|
-
d.select_remove(:c).sql.must_equal 'SELECT a, b FROM test'
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "should have no effect if the columns given are not currently selected" do
|
|
23
|
-
@d.select_remove(:d).sql.must_equal 'SELECT a, b, c FROM test'
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "should handle expressions where Sequel can't determine the alias by itself" do
|
|
27
|
-
d = @d.select(:a, Sequel.function(:b), Sequel.as(:c, :b))
|
|
28
|
-
d.columns :a, :"b()", :b
|
|
29
|
-
d.select_remove(:"b()").sql.must_equal 'SELECT a, c AS b FROM test'
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "should remove expressions if given exact expressions" do
|
|
33
|
-
d = @d.select(:a, Sequel.function(:b), Sequel.as(:c, :b))
|
|
34
|
-
d.columns :a, :"b()", :b
|
|
35
|
-
d.select_remove(Sequel.function(:b)).sql.must_equal 'SELECT a, c AS b FROM test'
|
|
36
|
-
d.select_remove(Sequel.as(:c, :b)).sql.must_equal 'SELECT a, b() FROM test'
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Dataset#and" do
|
|
4
|
-
before do
|
|
5
|
-
@dataset = Sequel.mock.dataset.from(:test).extension(:sequel_4_dataset_methods)
|
|
6
|
-
@d1 = @dataset.where(:x => 1)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it "should add a WHERE filter if none exists" do
|
|
10
|
-
@dataset.and(:a => 1).sql.must_equal 'SELECT * FROM test WHERE (a = 1)'
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should add an expression to the where clause" do
|
|
14
|
-
@d1.and(:y => 2).sql.must_equal 'SELECT * FROM test WHERE ((x = 1) AND (y = 2))'
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should accept placeholder literal string filters" do
|
|
18
|
-
@d1.and(Sequel.lit('y > ?', 2)).sql.must_equal 'SELECT * FROM test WHERE ((x = 1) AND (y > 2))'
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should accept expression filters" do
|
|
22
|
-
@d1.and(Sequel.expr(:yy) > 3).sql.must_equal 'SELECT * FROM test WHERE ((x = 1) AND (yy > 3))'
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should accept string filters with placeholders" do
|
|
26
|
-
@d1.extension(:auto_literal_strings).and('y > ?', 2).sql.must_equal 'SELECT * FROM test WHERE ((x = 1) AND (y > 2))'
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "should accept blocks passed to filter" do
|
|
30
|
-
@d1.and{yy > 3}.sql.must_equal 'SELECT * FROM test WHERE ((x = 1) AND (yy > 3))'
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should correctly add parens to give predictable results" do
|
|
34
|
-
@d1.or(:y => 2).and(:z => 3).sql.must_equal 'SELECT * FROM test WHERE (((x = 1) OR (y = 2)) AND (z = 3))'
|
|
35
|
-
@d1.and(:y => 2).or(:z => 3).sql.must_equal 'SELECT * FROM test WHERE (((x = 1) AND (y = 2)) OR (z = 3))'
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
describe "Dataset#exclude_where" do
|
|
40
|
-
before do
|
|
41
|
-
@dataset = Sequel.mock.dataset.from(:test).extension(:sequel_4_dataset_methods)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should correctly negate the expression and add it to the where clause" do
|
|
45
|
-
@dataset.exclude_where(:region=>'Asia').sql.must_equal "SELECT * FROM test WHERE (region != 'Asia')"
|
|
46
|
-
@dataset.exclude_where(:region=>'Asia').exclude_where(:region=>'NA').sql.must_equal "SELECT * FROM test WHERE ((region != 'Asia') AND (region != 'NA'))"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "should affect the where clause even if having clause is already used" do
|
|
50
|
-
@dataset.group_and_count(:name).having{count > 2}.exclude_where(:region=>'Asia').sql.
|
|
51
|
-
must_equal "SELECT name, count(*) AS count FROM test WHERE (region != 'Asia') GROUP BY name HAVING (count > 2)"
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
describe "Dataset#interval" do
|
|
56
|
-
before do
|
|
57
|
-
@db = Sequel.mock(:fetch=>{:v => 1234}).extension(:sequel_4_dataset_methods)
|
|
58
|
-
@ds = @db[:test].freeze
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "should generate the correct SQL statement" do
|
|
62
|
-
5.times do
|
|
63
|
-
@ds.interval(:stamp)
|
|
64
|
-
@db.sqls.must_equal ["SELECT (max(stamp) - min(stamp)) AS interval FROM test LIMIT 1"]
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
@ds.filter(Sequel.expr(:price) > 100).interval(:stamp)
|
|
68
|
-
@db.sqls.must_equal ["SELECT (max(stamp) - min(stamp)) AS interval FROM test WHERE (price > 100) LIMIT 1"]
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "should use a subselect for the same conditions as count" do
|
|
72
|
-
ds = @ds.order(:stamp).limit(5)
|
|
73
|
-
5.times do
|
|
74
|
-
ds.interval(:stamp).must_equal 1234
|
|
75
|
-
@db.sqls.must_equal ['SELECT (max(stamp) - min(stamp)) AS interval FROM (SELECT * FROM test ORDER BY stamp LIMIT 5) AS t1 LIMIT 1']
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "should accept virtual row blocks" do
|
|
80
|
-
5.times do
|
|
81
|
-
@ds.interval{a(b)}
|
|
82
|
-
@db.sqls.must_equal ["SELECT (max(a(b)) - min(a(b))) AS interval FROM test LIMIT 1"]
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
describe "Dataset#range" do
|
|
88
|
-
before do
|
|
89
|
-
@db = Sequel.mock(:fetch=>{:v1 => 1, :v2 => 10}).extension(:sequel_4_dataset_methods)
|
|
90
|
-
@ds = @db[:test].freeze
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "should generate a correct SQL statement" do
|
|
94
|
-
5.times do
|
|
95
|
-
@ds.range(:stamp)
|
|
96
|
-
@db.sqls.must_equal ["SELECT min(stamp) AS v1, max(stamp) AS v2 FROM test LIMIT 1"]
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
@ds.filter(Sequel.expr(:price) > 100).range(:stamp)
|
|
100
|
-
@db.sqls.must_equal ["SELECT min(stamp) AS v1, max(stamp) AS v2 FROM test WHERE (price > 100) LIMIT 1"]
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
it "should return a range object" do
|
|
104
|
-
5.times do
|
|
105
|
-
@ds.range(:tryme).must_equal(1..10)
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it "should use a subselect for the same conditions as count" do
|
|
110
|
-
@ds.order(:stamp).limit(5).range(:stamp).must_equal(1..10)
|
|
111
|
-
@db.sqls.must_equal ['SELECT min(stamp) AS v1, max(stamp) AS v2 FROM (SELECT * FROM test ORDER BY stamp LIMIT 5) AS t1 LIMIT 1']
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
it "should accept virtual row blocks" do
|
|
115
|
-
5.times do
|
|
116
|
-
@ds.range{a(b)}
|
|
117
|
-
@db.sqls.must_equal ["SELECT min(a(b)) AS v1, max(a(b)) AS v2 FROM test LIMIT 1"]
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
require 'yaml'
|
|
3
|
-
|
|
4
|
-
describe "serialization_modification_detection plugin" do
|
|
5
|
-
before do
|
|
6
|
-
@c = Class.new(Sequel::Model(:items))
|
|
7
|
-
@c.class_eval do
|
|
8
|
-
columns :id, :h
|
|
9
|
-
plugin :serialization, :yaml, :h
|
|
10
|
-
plugin :serialization_modification_detection
|
|
11
|
-
end
|
|
12
|
-
@o1 = @c.new(:h=>{})
|
|
13
|
-
@o2 = @c.load(:id=>1, :h=>"--- {}\n\n")
|
|
14
|
-
@o3 = @c.new
|
|
15
|
-
@o4 = @c.load(:id=>1, :h=>nil)
|
|
16
|
-
DB.reset
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "should not detect columns that haven't been changed" do
|
|
20
|
-
@o1.changed_columns.must_equal []
|
|
21
|
-
@o1.h.must_equal({})
|
|
22
|
-
@o1.h[1] = 2
|
|
23
|
-
@o1.h.clear
|
|
24
|
-
@o1.changed_columns.must_equal []
|
|
25
|
-
|
|
26
|
-
@o2.changed_columns.must_equal []
|
|
27
|
-
@o2.h.must_equal({})
|
|
28
|
-
@o2.h[1] = 2
|
|
29
|
-
@o2.h.clear
|
|
30
|
-
@o2.changed_columns.must_equal []
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should detect columns that have been changed" do
|
|
34
|
-
@o1.changed_columns.must_equal []
|
|
35
|
-
@o1.h.must_equal({})
|
|
36
|
-
@o1.h[1] = 2
|
|
37
|
-
@o1.changed_columns.must_equal [:h]
|
|
38
|
-
|
|
39
|
-
@o2.changed_columns.must_equal []
|
|
40
|
-
@o2.h.must_equal({})
|
|
41
|
-
@o2.h[1] = 2
|
|
42
|
-
@o2.changed_columns.must_equal [:h]
|
|
43
|
-
|
|
44
|
-
@o3.changed_columns.must_equal []
|
|
45
|
-
@o3.h.must_be_nil
|
|
46
|
-
@o3.h = {}
|
|
47
|
-
@o3.changed_columns.must_equal [:h]
|
|
48
|
-
|
|
49
|
-
@o4.changed_columns.must_equal []
|
|
50
|
-
@o4.h.must_be_nil
|
|
51
|
-
@o4.h = {}
|
|
52
|
-
@o4.changed_columns.must_equal [:h]
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "should report correct changed_columns after saving" do
|
|
56
|
-
@o1.h[1] = 2
|
|
57
|
-
@o1.save
|
|
58
|
-
@o1.changed_columns.must_equal []
|
|
59
|
-
|
|
60
|
-
@o2.h[1] = 2
|
|
61
|
-
@o2.save_changes
|
|
62
|
-
@o2.changed_columns.must_equal []
|
|
63
|
-
|
|
64
|
-
@o3.h = {1=>2}
|
|
65
|
-
@o3.save
|
|
66
|
-
@o3.changed_columns.must_equal []
|
|
67
|
-
|
|
68
|
-
@o4.h = {1=>2}
|
|
69
|
-
@o4.save
|
|
70
|
-
@o4.changed_columns.must_equal []
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "should work with frozen objects" do
|
|
74
|
-
@o1.changed_columns.must_equal []
|
|
75
|
-
@o1.h.must_equal({})
|
|
76
|
-
@o1.freeze
|
|
77
|
-
@o1.h[1] = 2
|
|
78
|
-
@o1.changed_columns.must_equal [:h]
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "should work with duplicating objects" do
|
|
82
|
-
@o2.changed_columns.must_equal []
|
|
83
|
-
o = @o2.dup
|
|
84
|
-
@o2.h.must_equal({})
|
|
85
|
-
@o2.h[1] = 2
|
|
86
|
-
@o2.changed_columns.must_equal [:h]
|
|
87
|
-
o.changed_columns.must_equal []
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "should work with duplicating objects after modifying them" do
|
|
91
|
-
@o2.changed_columns.must_equal []
|
|
92
|
-
@o2.h.must_equal({})
|
|
93
|
-
@o2.h[1] = 2
|
|
94
|
-
@o2.changed_columns.must_equal [:h]
|
|
95
|
-
o = @o2.dup
|
|
96
|
-
o.changed_columns.must_equal [:h]
|
|
97
|
-
end
|
|
98
|
-
end
|
|
@@ -1,365 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
require 'yaml'
|
|
4
|
-
require 'json'
|
|
5
|
-
|
|
6
|
-
describe "Serialization plugin" do
|
|
7
|
-
before do
|
|
8
|
-
@c = Class.new(Sequel::Model(:items)) do
|
|
9
|
-
no_primary_key
|
|
10
|
-
columns :id, :abc, :def, :ghi
|
|
11
|
-
end
|
|
12
|
-
DB.reset
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should allow setting additional serializable attributes via plugin :serialization call" do
|
|
16
|
-
@c.plugin :serialization, :yaml, :abc
|
|
17
|
-
@c.create(:abc => 1, :def=> 2)
|
|
18
|
-
DB.sqls.map{|s| s.sub("1\n...", '1')}.must_equal ["INSERT INTO items (def, abc) VALUES (2, '--- 1\n')"]
|
|
19
|
-
|
|
20
|
-
@c.plugin :serialization, :marshal, :def
|
|
21
|
-
@c.create(:abc => 1, :def=> 1)
|
|
22
|
-
DB.sqls.map{|s| s.sub("1\n...", '1')}.must_equal ["INSERT INTO items (abc, def) VALUES ('--- 1\n', 'BAhpBg==\n')"]
|
|
23
|
-
|
|
24
|
-
@c.plugin :serialization, :json, :ghi
|
|
25
|
-
@c.create(:ghi => [123])
|
|
26
|
-
DB.sqls.must_equal ["INSERT INTO items (ghi) VALUES ('[123]')"]
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "should handle validations of underlying column" do
|
|
30
|
-
@c.plugin :serialization, :yaml, :abc
|
|
31
|
-
o = @c.new
|
|
32
|
-
def o.validate
|
|
33
|
-
errors.add(:abc, "not present") unless self[:abc]
|
|
34
|
-
end
|
|
35
|
-
o.valid?.must_equal false
|
|
36
|
-
o.abc = {}
|
|
37
|
-
o.valid?.must_equal true
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should set column values even when not validating" do
|
|
41
|
-
@c.set_primary_key :id
|
|
42
|
-
@c.plugin :serialization, :yaml, :abc
|
|
43
|
-
@c.load({:id=>1}).set(:abc=>{}).save(:validate=>false)
|
|
44
|
-
DB.sqls.last.gsub("\n", '').must_equal "UPDATE items SET abc = '--- {}' WHERE (id = 1)"
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should allow serializing attributes to yaml" do
|
|
48
|
-
@c.plugin :serialization, :yaml, :abc
|
|
49
|
-
@c.create(:abc => 1)
|
|
50
|
-
@c.create(:abc => "hello")
|
|
51
|
-
|
|
52
|
-
DB.sqls.map{|s| s.sub("...\n", '')}.must_equal ["INSERT INTO items (abc) VALUES ('--- 1\n')", "INSERT INTO items (abc) VALUES ('--- hello\n')"]
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "should allow serializing attributes to marshal" do
|
|
56
|
-
@c.plugin :serialization, :marshal, :abc
|
|
57
|
-
@c.create(:abc => 1)
|
|
58
|
-
@c.create(:abc => "hello")
|
|
59
|
-
x = [Marshal.dump("hello")].pack('m')
|
|
60
|
-
|
|
61
|
-
DB.sqls.must_equal [ \
|
|
62
|
-
"INSERT INTO items (abc) VALUES ('BAhpBg==\n')", \
|
|
63
|
-
"INSERT INTO items (abc) VALUES ('#{x}')", \
|
|
64
|
-
]
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "should allow serializing attributes to json" do
|
|
68
|
-
@c.plugin :serialization, :json, :ghi
|
|
69
|
-
@c.create(:ghi => [1])
|
|
70
|
-
@c.create(:ghi => ["hello"])
|
|
71
|
-
|
|
72
|
-
x = ["hello"].to_json
|
|
73
|
-
DB.sqls.must_equal [ \
|
|
74
|
-
"INSERT INTO items (ghi) VALUES ('[1]')", \
|
|
75
|
-
"INSERT INTO items (ghi) VALUES ('#{x}')", \
|
|
76
|
-
]
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "should allow serializing attributes using arbitrary callable" do
|
|
80
|
-
@c.plugin :serialization, [proc{|s| s.reverse}, proc{}], :abc
|
|
81
|
-
@c.create(:abc => "hello")
|
|
82
|
-
DB.sqls.must_equal ["INSERT INTO items (abc) VALUES ('olleh')"]
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "should raise an error if specificing serializer as an unregistered symbol" do
|
|
86
|
-
proc{@c.plugin :serialization, :foo, :abc}.must_raise(Sequel::Error)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "should translate values to and from yaml serialization format using accessor methods" do
|
|
90
|
-
@c.set_primary_key :id
|
|
91
|
-
@c.plugin :serialization, :yaml, :abc, :def
|
|
92
|
-
@c.dataset = @c.dataset.with_fetch(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
|
|
93
|
-
|
|
94
|
-
o = @c.first
|
|
95
|
-
o.id.must_equal 1
|
|
96
|
-
o.abc.must_equal 1
|
|
97
|
-
o.abc.must_equal 1
|
|
98
|
-
o.def.must_equal "hello"
|
|
99
|
-
o.def.must_equal "hello"
|
|
100
|
-
|
|
101
|
-
o.update(:abc => 23)
|
|
102
|
-
@c.create(:abc => [1, 2, 3])
|
|
103
|
-
DB.sqls.must_equal ["SELECT * FROM items LIMIT 1",
|
|
104
|
-
"UPDATE items SET abc = '#{23.to_yaml}' WHERE (id = 1)",
|
|
105
|
-
"INSERT INTO items (abc) VALUES ('#{[1, 2, 3].to_yaml}')",
|
|
106
|
-
"SELECT * FROM items WHERE id = 10"]
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it "should translate values to and from marshal serialization format using accessor methods" do
|
|
110
|
-
@c.set_primary_key :id
|
|
111
|
-
@c.plugin :serialization, :marshal, :abc, :def
|
|
112
|
-
@c.dataset = @c.dataset.with_fetch([:id => 1, :abc =>[Marshal.dump(1)].pack('m'), :def =>[Marshal.dump('hello')].pack('m')])
|
|
113
|
-
|
|
114
|
-
o = @c.first
|
|
115
|
-
o.id.must_equal 1
|
|
116
|
-
o.abc.must_equal 1
|
|
117
|
-
o.abc.must_equal 1
|
|
118
|
-
o.def.must_equal "hello"
|
|
119
|
-
o.def.must_equal "hello"
|
|
120
|
-
|
|
121
|
-
o.update(:abc => 23)
|
|
122
|
-
@c.create(:abc => [1, 2, 3])
|
|
123
|
-
DB.sqls.must_equal ["SELECT * FROM items LIMIT 1",
|
|
124
|
-
"UPDATE items SET abc = '#{[Marshal.dump(23)].pack('m')}' WHERE (id = 1)",
|
|
125
|
-
"INSERT INTO items (abc) VALUES ('#{[Marshal.dump([1, 2, 3])].pack('m')}')",
|
|
126
|
-
"SELECT * FROM items WHERE id = 10"]
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it "should handle old non-base-64 encoded marshal serialization format" do
|
|
130
|
-
@c.set_primary_key :id
|
|
131
|
-
@c.plugin :serialization, :marshal, :abc, :def
|
|
132
|
-
@c.dataset = @c.dataset.with_fetch([:id => 1, :abc =>Marshal.dump(1), :def =>Marshal.dump('hello')])
|
|
133
|
-
|
|
134
|
-
o = @c.first
|
|
135
|
-
o.abc.must_equal 1
|
|
136
|
-
o.def.must_equal "hello"
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it "should raise exception for bad marshal data" do
|
|
140
|
-
@c.set_primary_key :id
|
|
141
|
-
@c.plugin :serialization, :marshal, :abc, :def
|
|
142
|
-
@c.dataset = @c.dataset.with_fetch([:id => 1, :abc =>'foo', :def =>'bar'])
|
|
143
|
-
|
|
144
|
-
o = @c.first
|
|
145
|
-
proc{o.abc}.must_raise TypeError, ArgumentError
|
|
146
|
-
proc{o.def}.must_raise TypeError, ArgumentError
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
it "should translate values to and from json serialization format using accessor methods" do
|
|
150
|
-
@c.set_primary_key :id
|
|
151
|
-
@c.plugin :serialization, :json, :abc, :def
|
|
152
|
-
@c.dataset = @c.dataset.with_fetch(:id => 1, :abc => [1].to_json, :def => ["hello"].to_json)
|
|
153
|
-
|
|
154
|
-
o = @c.first
|
|
155
|
-
o.id.must_equal 1
|
|
156
|
-
o.abc.must_equal [1]
|
|
157
|
-
o.abc.must_equal [1]
|
|
158
|
-
o.def.must_equal ["hello"]
|
|
159
|
-
o.def.must_equal ["hello"]
|
|
160
|
-
|
|
161
|
-
o.update(:abc => [23])
|
|
162
|
-
@c.create(:abc => [1,2,3])
|
|
163
|
-
|
|
164
|
-
DB.sqls.must_equal ["SELECT * FROM items LIMIT 1",
|
|
165
|
-
"UPDATE items SET abc = '#{[23].to_json}' WHERE (id = 1)",
|
|
166
|
-
"INSERT INTO items (abc) VALUES ('#{[1,2,3].to_json}')",
|
|
167
|
-
"SELECT * FROM items WHERE id = 10"]
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
it "should translate values to and from arbitrary callables using accessor methods" do
|
|
171
|
-
@c.set_primary_key :id
|
|
172
|
-
@c.plugin :serialization, [proc{|s| s.reverse}, proc{|s| s.reverse}], :abc, :def
|
|
173
|
-
@c.dataset = @c.dataset.with_fetch(:id => 1, :abc => 'cba', :def => 'olleh')
|
|
174
|
-
|
|
175
|
-
o = @c.first
|
|
176
|
-
o.id.must_equal 1
|
|
177
|
-
o.abc.must_equal 'abc'
|
|
178
|
-
o.abc.must_equal 'abc'
|
|
179
|
-
o.def.must_equal "hello"
|
|
180
|
-
o.def.must_equal "hello"
|
|
181
|
-
|
|
182
|
-
o.update(:abc => 'foo')
|
|
183
|
-
@c.create(:abc => 'bar')
|
|
184
|
-
|
|
185
|
-
DB.sqls.must_equal ["SELECT * FROM items LIMIT 1",
|
|
186
|
-
"UPDATE items SET abc = 'oof' WHERE (id = 1)",
|
|
187
|
-
"INSERT INTO items (abc) VALUES ('rab')",
|
|
188
|
-
"SELECT * FROM items WHERE id = 10"]
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
it "should handle registration of custom serializer/deserializer pairs" do
|
|
192
|
-
@c.set_primary_key :id
|
|
193
|
-
require_relative '../../lib/sequel/plugins/serialization'
|
|
194
|
-
Sequel::Plugins::Serialization.register_format(:reverse, proc{|s| s.reverse}, proc{|s| s.reverse})
|
|
195
|
-
@c.plugin :serialization, :reverse, :abc, :def
|
|
196
|
-
@c.dataset = @c.dataset.with_fetch(:id => 1, :abc => 'cba', :def => 'olleh')
|
|
197
|
-
|
|
198
|
-
o = @c.first
|
|
199
|
-
o.id.must_equal 1
|
|
200
|
-
o.abc.must_equal 'abc'
|
|
201
|
-
o.abc.must_equal 'abc'
|
|
202
|
-
o.def.must_equal "hello"
|
|
203
|
-
o.def.must_equal "hello"
|
|
204
|
-
|
|
205
|
-
o.update(:abc => 'foo')
|
|
206
|
-
@c.create(:abc => 'bar')
|
|
207
|
-
|
|
208
|
-
DB.sqls.must_equal ["SELECT * FROM items LIMIT 1",
|
|
209
|
-
"UPDATE items SET abc = 'oof' WHERE (id = 1)",
|
|
210
|
-
"INSERT INTO items (abc) VALUES ('rab')",
|
|
211
|
-
"SELECT * FROM items WHERE id = 10"]
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
it "should copy serialization formats and columns to subclasses" do
|
|
215
|
-
@c.set_primary_key :id
|
|
216
|
-
@c.plugin :serialization, :yaml, :abc, :def
|
|
217
|
-
@c.dataset = @c.dataset.with_fetch(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
|
|
218
|
-
|
|
219
|
-
o = Class.new(@c).first
|
|
220
|
-
o.id.must_equal 1
|
|
221
|
-
o.abc.must_equal 1
|
|
222
|
-
o.abc.must_equal 1
|
|
223
|
-
o.def.must_equal "hello"
|
|
224
|
-
o.def.must_equal "hello"
|
|
225
|
-
|
|
226
|
-
o.update(:abc => 23)
|
|
227
|
-
Class.new(@c).create(:abc => [1, 2, 3])
|
|
228
|
-
DB.sqls.must_equal ["SELECT * FROM items LIMIT 1",
|
|
229
|
-
"UPDATE items SET abc = '#{23.to_yaml}' WHERE (id = 1)",
|
|
230
|
-
"INSERT INTO items (abc) VALUES ('#{[1, 2, 3].to_yaml}')",
|
|
231
|
-
"SELECT * FROM items WHERE id = 10"]
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
it "should clear the deserialized columns when refreshing" do
|
|
235
|
-
@c.set_primary_key :id
|
|
236
|
-
@c.plugin :serialization, :yaml, :abc, :def
|
|
237
|
-
o = @c.load(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
|
|
238
|
-
o.abc = 23
|
|
239
|
-
o.deserialized_values.length.must_equal 1
|
|
240
|
-
o.abc.must_equal 23
|
|
241
|
-
o.refresh
|
|
242
|
-
o.deserialized_values.length.must_equal 0
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
it "should not clear the deserialized columns when refreshing after saving a new object" do
|
|
246
|
-
@c.set_primary_key :id
|
|
247
|
-
@c.plugin :serialization, :yaml, :abc, :def
|
|
248
|
-
o = @c.new(:abc => "--- 1\n", :def => "--- hello\n")
|
|
249
|
-
o.deserialized_values.length.must_equal 2
|
|
250
|
-
o.save
|
|
251
|
-
o.deserialized_values.length.must_equal 2
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
it "should not clear the deserialized columns when refreshing after saving a new object with insert_select" do
|
|
255
|
-
@c.set_primary_key :id
|
|
256
|
-
@c.plugin :serialization, :yaml, :abc, :def
|
|
257
|
-
@c.dataset = @c.dataset.with_extend do
|
|
258
|
-
def supports_insert_select?; true end
|
|
259
|
-
def insert_select(*) {:id=>1} end
|
|
260
|
-
end
|
|
261
|
-
o = @c.new(:abc => "--- 1\n", :def => "--- hello\n")
|
|
262
|
-
o.deserialized_values.length.must_equal 2
|
|
263
|
-
o.save
|
|
264
|
-
o.deserialized_values.length.must_equal 2
|
|
265
|
-
end
|
|
266
|
-
|
|
267
|
-
it "should raise an error if calling internal serialization methods with bad columns" do
|
|
268
|
-
@c.set_primary_key :id
|
|
269
|
-
@c.plugin :serialization
|
|
270
|
-
o = @c.load(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
|
|
271
|
-
lambda{o.send(:serialize_value, :abc, 1)}.must_raise(Sequel::Error)
|
|
272
|
-
lambda{o.send(:deserialize_value, :abc, "--- hello\n")}.must_raise(Sequel::Error)
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
it "should add the accessors to a module included in the class, so they can be easily overridden" do
|
|
276
|
-
@c.class_eval do
|
|
277
|
-
def abc
|
|
278
|
-
"#{super}-blah"
|
|
279
|
-
end
|
|
280
|
-
end
|
|
281
|
-
@c.plugin :serialization, :yaml, :abc
|
|
282
|
-
o = @c.load(:abc => "--- 1\n")
|
|
283
|
-
o.abc.must_equal "1-blah"
|
|
284
|
-
end
|
|
285
|
-
|
|
286
|
-
it "should call super to get the deserialized value from a previous accessor" do
|
|
287
|
-
m = Module.new do
|
|
288
|
-
def abc
|
|
289
|
-
"--- #{@values[:abc]*3}\n"
|
|
290
|
-
end
|
|
291
|
-
end
|
|
292
|
-
@c.send(:include, m)
|
|
293
|
-
@c.plugin :serialization, :yaml, :abc
|
|
294
|
-
o = @c.load(:abc => 3)
|
|
295
|
-
o.abc.must_equal 9
|
|
296
|
-
end
|
|
297
|
-
|
|
298
|
-
it "should work correctly with frozen instances" do
|
|
299
|
-
@c.set_primary_key :id
|
|
300
|
-
@c.plugin :serialization, :yaml, :abc, :def
|
|
301
|
-
@c.dataset = @c.dataset.with_fetch(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
|
|
302
|
-
|
|
303
|
-
o = @c.first
|
|
304
|
-
o.freeze
|
|
305
|
-
o.abc.must_equal 1
|
|
306
|
-
o.abc.must_equal 1
|
|
307
|
-
o.def.must_equal "hello"
|
|
308
|
-
o.def.must_equal "hello"
|
|
309
|
-
proc{o.abc = 2}.must_raise
|
|
310
|
-
proc{o.def = 'h'}.must_raise
|
|
311
|
-
end
|
|
312
|
-
|
|
313
|
-
it "should have dup duplicate internal structures" do
|
|
314
|
-
@c.plugin :serialization, :yaml, :abc, :def
|
|
315
|
-
o = @c.new
|
|
316
|
-
o.dup.deserialized_values.must_equal o.deserialized_values
|
|
317
|
-
o.dup.deserialized_values.wont_be_same_as(o.deserialized_values)
|
|
318
|
-
end
|
|
319
|
-
|
|
320
|
-
it "should have changed_columns include serialized columns if those columns have changed" do
|
|
321
|
-
@c.plugin :serialization, :yaml, :abc, :def
|
|
322
|
-
@c.dataset = @c.dataset.with_fetch(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
|
|
323
|
-
o = @c.first
|
|
324
|
-
o.changed_columns.must_equal []
|
|
325
|
-
o.abc = 1
|
|
326
|
-
o.changed_columns.must_equal []
|
|
327
|
-
o.abc = 1
|
|
328
|
-
o.changed_columns.must_equal []
|
|
329
|
-
o.abc = 2
|
|
330
|
-
o.changed_columns.must_equal [:abc]
|
|
331
|
-
o.def = 'hello'
|
|
332
|
-
o.changed_columns.must_equal [:abc]
|
|
333
|
-
o.def = 'hello'
|
|
334
|
-
o.changed_columns.must_equal [:abc]
|
|
335
|
-
o.def = 'hello2'
|
|
336
|
-
o.changed_columns.must_equal [:abc, :def]
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
it "should update column_changes if the dirty plugin is used" do
|
|
340
|
-
@c.plugin :serialization, :yaml, :abc, :def
|
|
341
|
-
@c.plugin :dirty
|
|
342
|
-
@c.dataset = @c.dataset.with_fetch(:id => 1, :abc => "--- 1\n", :def => "--- hello\n")
|
|
343
|
-
o = @c.first
|
|
344
|
-
o.column_changes.must_equal({})
|
|
345
|
-
o.abc = 1
|
|
346
|
-
o.column_changes.must_equal({})
|
|
347
|
-
o.abc = 1
|
|
348
|
-
o.column_changes.must_equal({})
|
|
349
|
-
o.abc = 2
|
|
350
|
-
o.column_changes.must_equal(:abc=>[1, 2])
|
|
351
|
-
o.def = 'hello'
|
|
352
|
-
o.column_changes.must_equal(:abc=>[1, 2])
|
|
353
|
-
o.def = 'hello'
|
|
354
|
-
o.column_changes.must_equal(:abc=>[1, 2])
|
|
355
|
-
o.def = 'hello2'
|
|
356
|
-
o.column_changes.must_equal(:abc=>[1, 2], :def=>["hello", "hello2"])
|
|
357
|
-
end
|
|
358
|
-
|
|
359
|
-
it "should freeze serialization metadata when freezing model class" do
|
|
360
|
-
@c.plugin :serialization, :yaml, :abc, :def
|
|
361
|
-
@c.freeze
|
|
362
|
-
@c.serialization_map.frozen?.must_equal true
|
|
363
|
-
@c.deserialization_map.frozen?.must_equal true
|
|
364
|
-
end
|
|
365
|
-
end
|