sequel 5.28.0 → 5.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +64 -1922
- data/MIT-LICENSE +1 -1
- data/README.rdoc +1 -1
- data/doc/advanced_associations.rdoc +4 -4
- data/doc/association_basics.rdoc +3 -3
- data/doc/code_order.rdoc +12 -2
- data/doc/model_dataset_method_design.rdoc +1 -1
- data/doc/postgresql.rdoc +71 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/testing.rdoc +1 -1
- data/lib/sequel/adapters/postgres.rb +5 -1
- data/lib/sequel/adapters/shared/access.rb +6 -6
- data/lib/sequel/adapters/shared/mssql.rb +5 -5
- data/lib/sequel/adapters/shared/mysql.rb +10 -10
- data/lib/sequel/adapters/shared/oracle.rb +16 -16
- data/lib/sequel/adapters/shared/postgres.rb +169 -14
- data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
- data/lib/sequel/adapters/shared/sqlite.rb +32 -5
- data/lib/sequel/adapters/tinytds.rb +1 -1
- data/lib/sequel/connection_pool/sharded_threaded.rb +2 -2
- data/lib/sequel/connection_pool/threaded.rb +1 -1
- data/lib/sequel/core.rb +318 -314
- data/lib/sequel/database/query.rb +1 -1
- data/lib/sequel/database/schema_generator.rb +1 -1
- data/lib/sequel/database/transactions.rb +8 -12
- data/lib/sequel/dataset/misc.rb +2 -2
- data/lib/sequel/extensions/connection_expiration.rb +2 -2
- data/lib/sequel/extensions/connection_validator.rb +2 -2
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/index_caching.rb +9 -7
- data/lib/sequel/extensions/integer64.rb +2 -0
- data/lib/sequel/extensions/migration.rb +1 -1
- data/lib/sequel/extensions/pg_enum.rb +5 -2
- data/lib/sequel/extensions/pg_hstore.rb +6 -0
- data/lib/sequel/extensions/pg_inet.rb +13 -5
- data/lib/sequel/extensions/pg_interval.rb +2 -0
- data/lib/sequel/extensions/pg_range.rb +2 -0
- data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/schema_dumper.rb +10 -4
- data/lib/sequel/extensions/server_block.rb +3 -3
- data/lib/sequel/model/associations.rb +18 -5
- data/lib/sequel/model/base.rb +60 -53
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +2 -0
- data/lib/sequel/plugins/association_proxies.rb +2 -0
- data/lib/sequel/plugins/boolean_subsets.rb +4 -1
- data/lib/sequel/plugins/class_table_inheritance.rb +26 -26
- data/lib/sequel/plugins/dirty.rb +13 -13
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +214 -0
- data/lib/sequel/plugins/json_serializer.rb +18 -11
- data/lib/sequel/plugins/single_table_inheritance.rb +15 -15
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/subclasses.rb +2 -0
- data/lib/sequel/plugins/throw_failures.rb +1 -1
- data/lib/sequel/timezones.rb +6 -4
- data/lib/sequel/version.rb +1 -1
- metadata +18 -367
- data/Rakefile +0 -151
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- data/doc/release_notes/4.37.0.txt +0 -50
- data/doc/release_notes/4.38.0.txt +0 -67
- data/doc/release_notes/4.39.0.txt +0 -127
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.40.0.txt +0 -179
- data/doc/release_notes/4.41.0.txt +0 -77
- data/doc/release_notes/4.42.0.txt +0 -221
- data/doc/release_notes/4.43.0.txt +0 -87
- data/doc/release_notes/4.44.0.txt +0 -125
- data/doc/release_notes/4.45.0.txt +0 -370
- data/doc/release_notes/4.46.0.txt +0 -404
- data/doc/release_notes/4.47.0.txt +0 -56
- data/doc/release_notes/4.48.0.txt +0 -293
- data/doc/release_notes/4.49.0.txt +0 -222
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -170
- data/spec/adapters/mssql_spec.rb +0 -828
- data/spec/adapters/mysql_spec.rb +0 -1060
- data/spec/adapters/oracle_spec.rb +0 -371
- data/spec/adapters/postgres_spec.rb +0 -4476
- data/spec/adapters/spec_helper.rb +0 -44
- data/spec/adapters/sqlanywhere_spec.rb +0 -97
- data/spec/adapters/sqlite_spec.rb +0 -652
- data/spec/bin_spec.rb +0 -278
- data/spec/core/connection_pool_spec.rb +0 -1250
- data/spec/core/database_spec.rb +0 -2915
- data/spec/core/dataset_spec.rb +0 -5547
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1498
- data/spec/core/mock_adapter_spec.rb +0 -722
- data/spec/core/object_graph_spec.rb +0 -336
- data/spec/core/placeholder_literalizer_spec.rb +0 -166
- data/spec/core/schema_generator_spec.rb +0 -214
- data/spec/core/schema_spec.rb +0 -1844
- data/spec/core/spec_helper.rb +0 -24
- data/spec/core/version_spec.rb +0 -14
- data/spec/core_extensions_spec.rb +0 -763
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/deprecation_helper.rb +0 -30
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -99
- data/spec/extensions/after_initialize_spec.rb +0 -28
- data/spec/extensions/any_not_empty_spec.rb +0 -23
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -125
- data/spec/extensions/association_multi_add_remove_spec.rb +0 -1041
- data/spec/extensions/association_pks_spec.rb +0 -423
- data/spec/extensions/association_proxies_spec.rb +0 -100
- data/spec/extensions/auto_literal_strings_spec.rb +0 -205
- data/spec/extensions/auto_validations_spec.rb +0 -229
- data/spec/extensions/blacklist_security_spec.rb +0 -95
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -273
- data/spec/extensions/caller_logging_spec.rb +0 -52
- data/spec/extensions/class_table_inheritance_spec.rb +0 -750
- data/spec/extensions/column_conflicts_spec.rb +0 -75
- data/spec/extensions/column_select_spec.rb +0 -129
- data/spec/extensions/columns_introspection_spec.rb +0 -90
- data/spec/extensions/columns_updated_spec.rb +0 -35
- data/spec/extensions/composition_spec.rb +0 -248
- data/spec/extensions/connection_expiration_spec.rb +0 -151
- data/spec/extensions/connection_validator_spec.rb +0 -144
- data/spec/extensions/constant_sql_override_spec.rb +0 -24
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
- data/spec/extensions/constraint_validations_spec.rb +0 -439
- data/spec/extensions/core_refinements_spec.rb +0 -528
- data/spec/extensions/csv_serializer_spec.rb +0 -183
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -365
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -181
- data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
- data/spec/extensions/def_dataset_method_spec.rb +0 -100
- data/spec/extensions/defaults_setter_spec.rb +0 -150
- data/spec/extensions/delay_add_association_spec.rb +0 -73
- data/spec/extensions/dirty_spec.rb +0 -222
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
- data/spec/extensions/eager_each_spec.rb +0 -62
- data/spec/extensions/eager_graph_eager_spec.rb +0 -100
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/escaped_like_spec.rb +0 -40
- data/spec/extensions/eval_inspect_spec.rb +0 -81
- data/spec/extensions/exclude_or_null_spec.rb +0 -15
- data/spec/extensions/finder_spec.rb +0 -260
- data/spec/extensions/force_encoding_spec.rb +0 -126
- data/spec/extensions/freeze_datasets_spec.rb +0 -31
- data/spec/extensions/graph_each_spec.rb +0 -113
- data/spec/extensions/hook_class_methods_spec.rb +0 -402
- data/spec/extensions/identifier_mangling_spec.rb +0 -201
- data/spec/extensions/implicit_subquery_spec.rb +0 -58
- data/spec/extensions/index_caching_spec.rb +0 -66
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -69
- data/spec/extensions/insert_conflict_spec.rb +0 -103
- data/spec/extensions/insert_returning_select_spec.rb +0 -72
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -246
- data/spec/extensions/integer64_spec.rb +0 -22
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -336
- data/spec/extensions/lazy_attributes_spec.rb +0 -183
- data/spec/extensions/list_spec.rb +0 -291
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2177
- data/spec/extensions/migration_spec.rb +0 -864
- data/spec/extensions/modification_detection_spec.rb +0 -93
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
- data/spec/extensions/named_timezones_spec.rb +0 -218
- data/spec/extensions/nested_attributes_spec.rb +0 -815
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -127
- data/spec/extensions/pagination_spec.rb +0 -116
- data/spec/extensions/pg_array_associations_spec.rb +0 -802
- data/spec/extensions/pg_array_ops_spec.rb +0 -144
- data/spec/extensions/pg_array_spec.rb +0 -398
- data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -209
- data/spec/extensions/pg_enum_spec.rb +0 -118
- data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
- data/spec/extensions/pg_hstore_spec.rb +0 -219
- data/spec/extensions/pg_inet_ops_spec.rb +0 -102
- data/spec/extensions/pg_inet_spec.rb +0 -72
- data/spec/extensions/pg_interval_spec.rb +0 -103
- data/spec/extensions/pg_json_ops_spec.rb +0 -356
- data/spec/extensions/pg_json_spec.rb +0 -451
- data/spec/extensions/pg_loose_count_spec.rb +0 -23
- data/spec/extensions/pg_range_ops_spec.rb +0 -60
- data/spec/extensions/pg_range_spec.rb +0 -600
- data/spec/extensions/pg_row_ops_spec.rb +0 -61
- data/spec/extensions/pg_row_plugin_spec.rb +0 -60
- data/spec/extensions/pg_row_spec.rb +0 -363
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
- data/spec/extensions/pg_timestamptz_spec.rb +0 -17
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
- data/spec/extensions/prepared_statements_spec.rb +0 -177
- data/spec/extensions/pretty_table_spec.rb +0 -123
- data/spec/extensions/query_spec.rb +0 -94
- data/spec/extensions/rcte_tree_spec.rb +0 -387
- data/spec/extensions/round_timestamps_spec.rb +0 -39
- data/spec/extensions/s_spec.rb +0 -60
- data/spec/extensions/schema_caching_spec.rb +0 -64
- data/spec/extensions/schema_dumper_spec.rb +0 -870
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -365
- data/spec/extensions/server_block_spec.rb +0 -135
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/sharding_spec.rb +0 -197
- data/spec/extensions/shared_caching_spec.rb +0 -151
- data/spec/extensions/single_table_inheritance_spec.rb +0 -347
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -18
- data/spec/extensions/spec_helper.rb +0 -70
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -57
- data/spec/extensions/sql_comments_spec.rb +0 -33
- data/spec/extensions/sql_expr_spec.rb +0 -59
- data/spec/extensions/static_cache_cache_spec.rb +0 -35
- data/spec/extensions/static_cache_spec.rb +0 -471
- data/spec/extensions/string_agg_spec.rb +0 -90
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -79
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
- data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
- data/spec/extensions/synchronize_sql_spec.rb +0 -124
- data/spec/extensions/table_select_spec.rb +0 -83
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/throw_failures_spec.rb +0 -74
- data/spec/extensions/timestamps_spec.rb +0 -209
- data/spec/extensions/to_dot_spec.rb +0 -153
- data/spec/extensions/touch_spec.rb +0 -226
- data/spec/extensions/tree_spec.rb +0 -334
- data/spec/extensions/typecast_on_load_spec.rb +0 -86
- data/spec/extensions/unlimited_update_spec.rb +0 -21
- data/spec/extensions/update_or_create_spec.rb +0 -83
- data/spec/extensions/update_primary_key_spec.rb +0 -105
- data/spec/extensions/update_refresh_spec.rb +0 -59
- data/spec/extensions/uuid_spec.rb +0 -101
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1040
- data/spec/extensions/validation_contexts_spec.rb +0 -31
- data/spec/extensions/validation_helpers_spec.rb +0 -525
- data/spec/extensions/whitelist_security_spec.rb +0 -157
- data/spec/extensions/xml_serializer_spec.rb +0 -213
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -59
- data/spec/integration/associations_test.rb +0 -2597
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -2037
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -203
- data/spec/integration/plugin_test.rb +0 -2423
- data/spec/integration/prepared_statement_test.rb +0 -405
- data/spec/integration/schema_test.rb +0 -903
- data/spec/integration/spec_helper.rb +0 -71
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -603
- data/spec/integration/type_test.rb +0 -127
- data/spec/model/association_reflection_spec.rb +0 -803
- data/spec/model/associations_spec.rb +0 -4738
- data/spec/model/base_spec.rb +0 -875
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -198
- data/spec/model/eager_loading_spec.rb +0 -2377
- data/spec/model/hooks_spec.rb +0 -370
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -956
- data/spec/model/plugins_spec.rb +0 -429
- data/spec/model/record_spec.rb +0 -2118
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -220
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/sequel_warning.rb +0 -4
- data/spec/spec_config.rb +0 -12
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "pg_static_cache_updater extension" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.connect('mock://postgres')
|
|
6
|
-
@db.extend_datasets{def quote_identifiers?; false end}
|
|
7
|
-
def @db.listen(chan, opts={})
|
|
8
|
-
execute("LISTEN #{chan}")
|
|
9
|
-
yield(*opts[:yield])
|
|
10
|
-
end
|
|
11
|
-
@db.extension(:pg_static_cache_updater)
|
|
12
|
-
@model = Class.new(Sequel::Model(@db[:table]))
|
|
13
|
-
@model.plugin :static_cache
|
|
14
|
-
@db.sqls
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "#create_static_cache_update_function should create a function in the database" do
|
|
18
|
-
@db.create_static_cache_update_function
|
|
19
|
-
@db.sqls.first.gsub(/\s+/, ' ').must_equal " CREATE FUNCTION sequel_static_cache_update() RETURNS trigger LANGUAGE plpgsql AS 'BEGIN PERFORM pg_notify(''sequel_static_cache_update'', TG_RELID::text); RETURN NULL; END ' "
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "#create_static_cache_update_function should support :channel_name and :function_name options" do
|
|
23
|
-
@db.create_static_cache_update_function(:channel_name=>'foo', :function_name=>'bar')
|
|
24
|
-
@db.sqls.first.gsub(/\s+/, ' ').must_equal " CREATE FUNCTION bar() RETURNS trigger LANGUAGE plpgsql AS 'BEGIN PERFORM pg_notify(''foo'', TG_RELID::text); RETURN NULL; END ' "
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "#create_static_cache_update_trigger should create a trigger for the database table" do
|
|
28
|
-
@db.create_static_cache_update_trigger(:tab)
|
|
29
|
-
@db.sqls.first.gsub(/\s+/, ' ').must_equal "CREATE TRIGGER sequel_static_cache_update AFTER INSERT OR UPDATE OR DELETE ON tab EXECUTE PROCEDURE sequel_static_cache_update()"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "#create_static_cache_update_trigger should support :trigger_name and :function_name options" do
|
|
33
|
-
@db.create_static_cache_update_trigger(:tab, :trigger_name=>'foo', :function_name=>'bar')
|
|
34
|
-
@db.sqls.first.gsub(/\s+/, ' ').must_equal "CREATE TRIGGER foo AFTER INSERT OR UPDATE OR DELETE ON tab EXECUTE PROCEDURE bar()"
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "#default_static_cache_update_name should return the default name for function, trigger, and channel" do
|
|
38
|
-
@db.default_static_cache_update_name.must_equal :sequel_static_cache_update
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "#listen_for_static_cache_updates should listen for changes to model tables and reload model classes" do
|
|
42
|
-
@db.fetch = {:v=>1234}
|
|
43
|
-
@db.listen_for_static_cache_updates([@model], :yield=>[nil, nil, 1234]).join
|
|
44
|
-
@db.sqls.must_equal ["SELECT CAST(CAST('table' AS regclass) AS oid) AS v LIMIT 1", "LISTEN sequel_static_cache_update", "SELECT * FROM table"]
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "#listen_for_static_cache_updates should not reload model classes if oid doesn't match" do
|
|
48
|
-
@db.fetch = {:v=>1234}
|
|
49
|
-
@db.listen_for_static_cache_updates([@model], :yield=>[nil, nil, 12345]).join
|
|
50
|
-
@db.sqls.must_equal ["SELECT CAST(CAST('table' AS regclass) AS oid) AS v LIMIT 1", "LISTEN sequel_static_cache_update"]
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "#listen_for_static_cache_updates should support a single model argument" do
|
|
54
|
-
@db.fetch = {:v=>1234}
|
|
55
|
-
@db.listen_for_static_cache_updates(@model, :yield=>[nil, nil, 1234]).join
|
|
56
|
-
@db.sqls.must_equal ["SELECT CAST(CAST('table' AS regclass) AS oid) AS v LIMIT 1", "LISTEN sequel_static_cache_update", "SELECT * FROM table"]
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "#listen_for_static_cache_updates should support the :channel_name option" do
|
|
60
|
-
@db.fetch = {:v=>1234}
|
|
61
|
-
@db.listen_for_static_cache_updates([@model], :yield=>[nil, nil, 12345], :channel_name=>:foo).join
|
|
62
|
-
@db.sqls.must_equal ["SELECT CAST(CAST('table' AS regclass) AS oid) AS v LIMIT 1", "LISTEN foo"]
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "#listen_for_static_cache_updates should raise an error if given an empty array" do
|
|
66
|
-
@db.fetch = {:v=>1234}
|
|
67
|
-
proc{@db.listen_for_static_cache_updates([])}.must_raise(Sequel::Error)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "#listen_for_static_cache_updates should raise an error if one of the models is not using the static cache plugin" do
|
|
71
|
-
@db.fetch = {:v=>1234}
|
|
72
|
-
proc{@db.listen_for_static_cache_updates(Class.new(Sequel::Model(@db[:table])))}.must_raise(Sequel::Error)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it "#listen_for_static_cache_updates should raise an error if the database doesn't respond to listen" do
|
|
76
|
-
@db = Sequel.mock(:host=>'postgres')
|
|
77
|
-
@db.extension(:pg_static_cache_updater)
|
|
78
|
-
@db.fetch = {:v=>1234}
|
|
79
|
-
proc{@db.listen_for_static_cache_updates(Class.new(Sequel::Model(@db[:table])))}.must_raise(Sequel::Error)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "#listen_for_static_cache_updates should handle a :before_thread_exit option" do
|
|
83
|
-
a = []
|
|
84
|
-
@db.listen_for_static_cache_updates([@model], :yield=>[nil, nil, 12345], :before_thread_exit=>proc{a << 1}).join
|
|
85
|
-
a.must_equal [1]
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it "#listen_for_static_cache_updates should call :before_thread_exit option even if listen raises an exception" do
|
|
89
|
-
a = []
|
|
90
|
-
@db.listen_for_static_cache_updates([@model], :yield=>[nil, nil, 12345], :after_listen=>proc{raise ArgumentError}, :before_thread_exit=>proc{a << 1}).join
|
|
91
|
-
a.must_equal [1]
|
|
92
|
-
end
|
|
93
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "pg_timestamptz extension" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:host=>'postgres').extension :pg_timestamptz
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should use timestamptz as default timestamp type" do
|
|
9
|
-
@db.create_table(:t){Time :t; DateTime :tz; Time :ot, :only_time=>true}
|
|
10
|
-
@db.sqls.must_equal ['CREATE TABLE "t" ("t" timestamptz, "tz" timestamptz, "ot" time)']
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should use timestamptz when casting" do
|
|
14
|
-
@db.get(Sequel.cast('a', Time))
|
|
15
|
-
@db.sqls.must_equal ["SELECT CAST('a' AS timestamptz) AS \"v\" LIMIT 1"]
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "prepared_statements_safe plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:fetch=>{:id=>1, :name=>'foo', :i=>2}, :autoid=>proc{|sql| 1}, :numrows=>1, :servers=>{:read_only=>{}})
|
|
6
|
-
@c = Class.new(Sequel::Model(@db[:people]))
|
|
7
|
-
@c.columns :id, :name, :i
|
|
8
|
-
@c.instance_variable_set(:@db_schema, {:i=>{}, :name=>{}, :id=>{:primary_key=>true}})
|
|
9
|
-
@c.plugin :prepared_statements_safe
|
|
10
|
-
@p = @c.load(:id=>1, :name=>'foo', :i=>2)
|
|
11
|
-
@db.sqls
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "should load the prepared_statements plugin" do
|
|
15
|
-
@c.plugins.must_include(Sequel::Plugins::PreparedStatements)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should set default values correctly" do
|
|
19
|
-
@c.prepared_statements_column_defaults.must_equal(:name=>nil, :i=>nil)
|
|
20
|
-
@c.instance_variable_set(:@db_schema, {:i=>{:default=>'f(x)'}, :name=>{:ruby_default=>'foo'}, :id=>{:primary_key=>true}, :bar=>{:ruby_default=>Sequel::CURRENT_TIMESTAMP}})
|
|
21
|
-
Class.new(@c).prepared_statements_column_defaults.must_equal(:name=>'foo')
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should set default values when creating" do
|
|
25
|
-
@c.create
|
|
26
|
-
@db.sqls.must_equal ['INSERT INTO people (i, name) VALUES (NULL, NULL)', "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
|
|
27
|
-
@c.create(:name=>'foo')
|
|
28
|
-
@db.sqls.must_equal ["INSERT INTO people (i, name) VALUES (NULL, 'foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
|
|
29
|
-
@c.create(:name=>'foo', :i=>2)
|
|
30
|
-
@db.sqls.must_equal ["INSERT INTO people (i, name) VALUES (2, 'foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should use database default values" do
|
|
34
|
-
@c.instance_variable_set(:@db_schema, {:i=>{:ruby_default=>2}, :name=>{:ruby_default=>'foo'}, :id=>{:primary_key=>true}})
|
|
35
|
-
c = Class.new(@c)
|
|
36
|
-
c.create
|
|
37
|
-
@db.sqls.must_equal ["INSERT INTO people (i, name) VALUES (2, 'foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should not set defaults for unparseable dataset default values" do
|
|
41
|
-
@c.instance_variable_set(:@db_schema, {:i=>{:default=>'f(x)'}, :name=>{:ruby_default=>'foo'}, :id=>{:primary_key=>true}})
|
|
42
|
-
c = Class.new(@c)
|
|
43
|
-
c.create
|
|
44
|
-
@db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should save all fields when updating" do
|
|
48
|
-
@p.update(:i=>3)
|
|
49
|
-
@db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 3 WHERE (id = 1)"]
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should work with abstract classes" do
|
|
53
|
-
c = Class.new(Sequel::Model)
|
|
54
|
-
c.plugin :prepared_statements_safe
|
|
55
|
-
c1 = Class.new(c)
|
|
56
|
-
def c1.get_db_schema; @db_schema = {:i=>{:default=>'f(x)'}, :name=>{:ruby_default=>'foo'}, :id=>{:primary_key=>true}} end
|
|
57
|
-
c1.set_dataset(:people)
|
|
58
|
-
c1.prepared_statements_column_defaults.must_equal(:name=>'foo')
|
|
59
|
-
Class.new(c1).prepared_statements_column_defaults.must_equal(:name=>'foo')
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
it "should freeze prepared statement column defaults when freezing model class" do
|
|
63
|
-
@c.freeze
|
|
64
|
-
@c.prepared_statements_column_defaults.frozen?.must_equal true
|
|
65
|
-
end
|
|
66
|
-
end
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "prepared_statements plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock(:fetch=>{:id=>1, :name=>'foo', :i=>2}, :autoid=>proc{|sql| 1}, :numrows=>1, :servers=>{:read_only=>{}})
|
|
6
|
-
@c = Class.new(Sequel::Model(@db[:people]))
|
|
7
|
-
@c.columns :id, :name, :i
|
|
8
|
-
@c.set_primary_key :id
|
|
9
|
-
@columns = "id, name, i"
|
|
10
|
-
@c.plugin :prepared_statements
|
|
11
|
-
@p = @c.load(:id=>1, :name=>'foo', :i=>2)
|
|
12
|
-
@ds = @c.dataset
|
|
13
|
-
@db.sqls
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should work with implicit subqueries used for joined datasets" do
|
|
17
|
-
@c.dataset = @c.dataset.from(:people, :people2)
|
|
18
|
-
@db.sqls
|
|
19
|
-
@c[1].must_equal @p
|
|
20
|
-
@db.sqls.must_equal ["SELECT * FROM (SELECT * FROM people, people2) AS people WHERE (id = 1) LIMIT 1 -- read_only"]
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "should correctly lookup by primary key for dataset using subquery" do
|
|
24
|
-
@c.dataset = @c.dataset.from(:people, :people2).from_self(:alias=>:people)
|
|
25
|
-
@db.sqls
|
|
26
|
-
@c[1].must_equal @p
|
|
27
|
-
@db.sqls.must_equal ["SELECT * FROM (SELECT * FROM people, people2) AS people WHERE (id = 1) LIMIT 1 -- read_only"]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should use prepared statements for pk lookups only if default is not optimized" do
|
|
31
|
-
@c.send(:use_prepared_statements_for_pk_lookup?).must_equal false
|
|
32
|
-
@c.set_primary_key [:id, :name]
|
|
33
|
-
@c.send(:use_prepared_statements_for_pk_lookup?).must_equal true
|
|
34
|
-
@c.set_primary_key :id
|
|
35
|
-
@c.dataset = @c.dataset.from(:people, :people2)
|
|
36
|
-
@c.send(:use_prepared_statements_for_pk_lookup?).must_equal true
|
|
37
|
-
@c.dataset = @db[:people].select(:id, :name, :i)
|
|
38
|
-
@c.send(:use_prepared_statements_for_pk_lookup?).must_equal true
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "should raise Error for unsupported prepared statement types" do
|
|
42
|
-
proc{@p.send(:use_prepared_statements_for?, :foo)}.must_raise Sequel::Error
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
prepared_statements_spec = shared_description do
|
|
46
|
-
it "should correctly update instance" do
|
|
47
|
-
@p.update(:name=>'bar').must_equal @c.load(:id=>1, :name=>'bar', :i => 2)
|
|
48
|
-
@db.sqls.must_equal ["UPDATE people SET name = 'bar' WHERE (id = 1)"]
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "should correctly create instance if dataset supports insert_select" do
|
|
52
|
-
@c.dataset_module do
|
|
53
|
-
def supports_insert_select?
|
|
54
|
-
true
|
|
55
|
-
end
|
|
56
|
-
def supports_returning?(type)
|
|
57
|
-
true
|
|
58
|
-
end
|
|
59
|
-
def insert_select(h)
|
|
60
|
-
cache_set(:_fetch, :id=>1, :name=>'foo', :i => 2)
|
|
61
|
-
server(:default).with_sql_first(insert_select_sql(h))
|
|
62
|
-
end
|
|
63
|
-
def insert_select_sql(*v)
|
|
64
|
-
insert_sql(*v) << " RETURNING #{(opts[:returning] && !opts[:returning].empty?) ? opts[:returning].map{|c| literal(c)}.join(', ') : '*'}"
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
@c.create(:name=>'foo').must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
|
|
68
|
-
@db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo') RETURNING #{@columns}"]
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
describe "when #use_prepared_statements_for? returns true" do
|
|
73
|
-
before do
|
|
74
|
-
@c.class_eval do
|
|
75
|
-
def self.use_prepared_statements_for_pk_lookup?; true end
|
|
76
|
-
def use_prepared_statements_for?(type) true end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
include prepared_statements_spec
|
|
81
|
-
|
|
82
|
-
it "should correctly create instance" do
|
|
83
|
-
@c.create(:name=>'foo').must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
|
|
84
|
-
@db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo')", "SELECT * FROM people WHERE id = 1"]
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "should correctly update instance when specifying server" do
|
|
88
|
-
@p.set_server(:read_only).update(:name=>'bar').must_equal @c.load(:id=>1, :name=>'bar', :i => 2)
|
|
89
|
-
@db.sqls.must_equal ["UPDATE people SET name = 'bar' WHERE (id = 1) -- read_only"]
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "should correctly create instance when specifying server" do
|
|
93
|
-
@c.new(:name=>'foo').set_server(:read_only).save.must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
|
|
94
|
-
@db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo') -- read_only", "SELECT * FROM people WHERE id = 1 -- read_only"]
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "should correctly create instance if dataset supports insert_select when specifying server" do
|
|
98
|
-
@c.dataset_module do
|
|
99
|
-
def supports_insert_select?
|
|
100
|
-
true
|
|
101
|
-
end
|
|
102
|
-
def supports_returning?(type)
|
|
103
|
-
true
|
|
104
|
-
end
|
|
105
|
-
def insert_select(h)
|
|
106
|
-
cache_set(:_fetch, :id=>1, :name=>'foo', :i => 2)
|
|
107
|
-
server(:default).with_sql_first(insert_select_sql(h))
|
|
108
|
-
end
|
|
109
|
-
def insert_select_sql(*v)
|
|
110
|
-
insert_sql(*v) << " RETURNING #{(opts[:returning] && !opts[:returning].empty?) ? opts[:returning].map{|c| literal(c)}.join(', ') : '*'}"
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
@c.new(:name=>'foo').set_server(:read_only).save.must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
|
|
114
|
-
@db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo') RETURNING #{@columns} -- read_only"]
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
it "should work correctly when subclassing" do
|
|
118
|
-
c = Class.new(@c)
|
|
119
|
-
@db.sqls
|
|
120
|
-
c.load(:id=>1, :name=>'foo', :i=>2).save
|
|
121
|
-
@db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 2 WHERE (id = 1)"]
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
it "should correctly handle without schema type when placeholder type specifiers are required" do
|
|
125
|
-
@c.dataset = @ds.with_extend{def requires_placeholder_type_specifiers?; true end}
|
|
126
|
-
@p.save
|
|
127
|
-
@db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 2 WHERE (id = 1)"]
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it "should correctly handle with schema type when placeholder type specifiers are required" do
|
|
131
|
-
@c.dataset = @ds.with_extend do
|
|
132
|
-
def requires_placeholder_type_specifiers?; true end
|
|
133
|
-
def prepared_statement_modules
|
|
134
|
-
[Module.new do
|
|
135
|
-
def literal_symbol_append(sql, v)
|
|
136
|
-
if @opts[:bind_vars] && /\A\$(.*)\z/ =~ v
|
|
137
|
-
literal_append(sql, prepared_arg($1.split('__')[0].to_sym))
|
|
138
|
-
else
|
|
139
|
-
super
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end]
|
|
143
|
-
end
|
|
144
|
-
end
|
|
145
|
-
@c.db_schema[:id][:type] = :integer
|
|
146
|
-
@p.save
|
|
147
|
-
@db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 2 WHERE (id = 1)"]
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
describe "when #use_prepared_statements_for? returns false" do
|
|
152
|
-
before do
|
|
153
|
-
@columns = "*"
|
|
154
|
-
@c.class_eval do
|
|
155
|
-
def self.use_prepared_statements_for_pk_lookup?; false end
|
|
156
|
-
def use_prepared_statements_for?(type) false end
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
include prepared_statements_spec
|
|
161
|
-
|
|
162
|
-
it "should correctly create instance" do
|
|
163
|
-
@c.create(:name=>'foo').must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
|
|
164
|
-
@db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo')", "SELECT #{@columns} FROM people WHERE id = 1"]
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
it "should correctly lookup by primary key" do
|
|
168
|
-
@c[1].must_equal @p
|
|
169
|
-
@db.sqls.must_equal ["SELECT * FROM people WHERE id = 1 -- read_only"]
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
it "should correctly delete instance" do
|
|
173
|
-
@p.destroy.must_equal @p
|
|
174
|
-
@db.sqls.must_equal ["DELETE FROM people WHERE id = 1"]
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
end
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
require 'stringio'
|
|
4
|
-
Sequel.extension :pretty_table
|
|
5
|
-
|
|
6
|
-
describe "Dataset#print" do
|
|
7
|
-
before do
|
|
8
|
-
@output = StringIO.new
|
|
9
|
-
@orig_stdout = $stdout
|
|
10
|
-
$stdout = @output
|
|
11
|
-
@dataset = Sequel.mock(:fetch=>[{:a=>1, :b=>2}, {:a=>3, :b=>4}, {:a=>5, :b=>6}])[:items].extension(:pretty_table)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
after do
|
|
15
|
-
$stdout = @orig_stdout
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should print out a table with the values" do
|
|
19
|
-
@dataset.print(:a, :b)
|
|
20
|
-
@output.rewind
|
|
21
|
-
@output.read.must_equal \
|
|
22
|
-
"+-+-+\n|a|b|\n+-+-+\n|1|2|\n|3|4|\n|5|6|\n+-+-+\n"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should default to the dataset's columns" do
|
|
26
|
-
@dataset.columns(:a, :b)
|
|
27
|
-
@dataset.print
|
|
28
|
-
@output.rewind
|
|
29
|
-
@output.read.must_equal \
|
|
30
|
-
"+-+-+\n|a|b|\n+-+-+\n|1|2|\n|3|4|\n|5|6|\n+-+-+\n"
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
describe "PrettyTable" do
|
|
35
|
-
before do
|
|
36
|
-
@data1 = [
|
|
37
|
-
{:x => 3, :y => 4}
|
|
38
|
-
]
|
|
39
|
-
|
|
40
|
-
@data2 = [
|
|
41
|
-
{:a => 23, :b => 45},
|
|
42
|
-
{:a => 45, :b => 2377}
|
|
43
|
-
]
|
|
44
|
-
|
|
45
|
-
@data3 = [
|
|
46
|
-
{:aaa => 1},
|
|
47
|
-
{:bb => 2},
|
|
48
|
-
{:c => 3.1}
|
|
49
|
-
]
|
|
50
|
-
|
|
51
|
-
@output = StringIO.new
|
|
52
|
-
@orig_stdout = $stdout
|
|
53
|
-
$stdout = @output
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
after do
|
|
57
|
-
$stdout = @orig_stdout
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "should infer the columns if not given" do
|
|
61
|
-
Sequel::PrettyTable.print(@data1)
|
|
62
|
-
@output.rewind
|
|
63
|
-
@output.read.must_equal(<<OUTPUT)
|
|
64
|
-
+-+-+
|
|
65
|
-
|x|y|
|
|
66
|
-
+-+-+
|
|
67
|
-
|3|4|
|
|
68
|
-
+-+-+
|
|
69
|
-
OUTPUT
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it "should have #string return the string without printing" do
|
|
73
|
-
Sequel::PrettyTable.string(@data1).must_equal((<<OUTPUT).chomp)
|
|
74
|
-
+-+-+
|
|
75
|
-
|x|y|
|
|
76
|
-
+-+-+
|
|
77
|
-
|3|4|
|
|
78
|
-
+-+-+
|
|
79
|
-
OUTPUT
|
|
80
|
-
@output.rewind
|
|
81
|
-
@output.read.must_equal ''
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "should calculate the maximum width of each column correctly" do
|
|
85
|
-
Sequel::PrettyTable.print(@data2, [:a, :b])
|
|
86
|
-
@output.rewind
|
|
87
|
-
@output.read.must_equal(<<OUTPUT)
|
|
88
|
-
+--+----+
|
|
89
|
-
|a |b |
|
|
90
|
-
+--+----+
|
|
91
|
-
|23| 45|
|
|
92
|
-
|45|2377|
|
|
93
|
-
+--+----+
|
|
94
|
-
OUTPUT
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "should also take header width into account" do
|
|
98
|
-
Sequel::PrettyTable.print(@data3, [:aaa, :bb, :c])
|
|
99
|
-
@output.rewind
|
|
100
|
-
@output.read.must_equal(<<OUTPUT)
|
|
101
|
-
+---+--+---+
|
|
102
|
-
|aaa|bb|c |
|
|
103
|
-
+---+--+---+
|
|
104
|
-
| 1| | |
|
|
105
|
-
| | 2| |
|
|
106
|
-
| | |3.1|
|
|
107
|
-
+---+--+---+
|
|
108
|
-
OUTPUT
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it "should print only the specified columns" do
|
|
112
|
-
Sequel::PrettyTable.print(@data2, [:a])
|
|
113
|
-
@output.rewind
|
|
114
|
-
@output.read.must_equal(<<OUTPUT)
|
|
115
|
-
+--+
|
|
116
|
-
|a |
|
|
117
|
-
+--+
|
|
118
|
-
|23|
|
|
119
|
-
|45|
|
|
120
|
-
+--+
|
|
121
|
-
OUTPUT
|
|
122
|
-
end
|
|
123
|
-
end
|