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,201 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "identifier_mangling extension" do
|
|
4
|
-
it "should respect the :quote_identifiers option" do
|
|
5
|
-
db = Sequel::Database.new(:quote_identifiers=>false).extension(:identifier_mangling)
|
|
6
|
-
db.quote_identifiers?.must_equal false
|
|
7
|
-
db = Sequel::Database.new(:quote_identifiers=>true).extension(:identifier_mangling)
|
|
8
|
-
db.quote_identifiers?.must_equal true
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "should respect the :quote_identifiers setting" do
|
|
12
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
13
|
-
db.quote_identifiers?.must_equal true
|
|
14
|
-
db.quote_identifiers = false
|
|
15
|
-
db.quote_identifiers?.must_equal false
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should upcase on input and downcase on output by default" do
|
|
19
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
20
|
-
db.send(:identifier_input_method_default).must_equal :upcase
|
|
21
|
-
db.send(:identifier_output_method_default).must_equal :downcase
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should respect the :identifier_input_method option" do
|
|
25
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
26
|
-
db.identifier_input_method.must_equal :upcase
|
|
27
|
-
db.identifier_input_method = nil
|
|
28
|
-
db.identifier_input_method.must_be_nil
|
|
29
|
-
db = Sequel::Database.new(:identifier_input_method=>nil).extension(:identifier_mangling)
|
|
30
|
-
db.identifier_input_method.must_be_nil
|
|
31
|
-
db.identifier_input_method = :downcase
|
|
32
|
-
db.identifier_input_method.must_equal :downcase
|
|
33
|
-
db = Sequel::Database.new(:identifier_input_method=>:upcase).extension(:identifier_mangling)
|
|
34
|
-
db.identifier_input_method.must_equal :upcase
|
|
35
|
-
db.identifier_input_method = nil
|
|
36
|
-
db.identifier_input_method.must_be_nil
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "should respect the :identifier_output_method option" do
|
|
40
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
41
|
-
db.identifier_output_method.must_equal :downcase
|
|
42
|
-
db.identifier_output_method = nil
|
|
43
|
-
db.identifier_output_method.must_be_nil
|
|
44
|
-
db = Sequel::Database.new(:identifier_output_method=>nil).extension(:identifier_mangling)
|
|
45
|
-
db.identifier_output_method.must_be_nil
|
|
46
|
-
db.identifier_output_method = :downcase
|
|
47
|
-
db.identifier_output_method.must_equal :downcase
|
|
48
|
-
db = Sequel::Database.new(:identifier_output_method=>:upcase).extension(:identifier_mangling)
|
|
49
|
-
db.identifier_output_method.must_equal :upcase
|
|
50
|
-
db.identifier_output_method = nil
|
|
51
|
-
db.identifier_output_method.must_be_nil
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "should respect the identifier_input_method_default method if Sequel.identifier_input_method is not called" do
|
|
55
|
-
class Sequel::Database
|
|
56
|
-
@identifier_input_method = nil
|
|
57
|
-
end
|
|
58
|
-
x = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_input_method_default; :downcase end}
|
|
59
|
-
x.new.extension(:identifier_mangling).identifier_input_method.must_equal :downcase
|
|
60
|
-
y = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_input_method_default; :camelize end}
|
|
61
|
-
y.new.extension(:identifier_mangling).identifier_input_method.must_equal :camelize
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should respect the identifier_output_method_default method if Sequel.identifier_output_method is not called" do
|
|
65
|
-
class Sequel::Database
|
|
66
|
-
@identifier_output_method = nil
|
|
67
|
-
end
|
|
68
|
-
x = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_output_method_default; :upcase end}
|
|
69
|
-
x.new.extension(:identifier_mangling).identifier_output_method.must_equal :upcase
|
|
70
|
-
y = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_output_method_default; :underscore end}
|
|
71
|
-
y.new.extension(:identifier_mangling).identifier_output_method.must_equal :underscore
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
describe "Database#input_identifier_meth" do
|
|
76
|
-
it "should be the input_identifer method of a default dataset for this database" do
|
|
77
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
78
|
-
db.identifier_input_method = nil
|
|
79
|
-
db.send(:input_identifier_meth).call(:a).must_equal 'a'
|
|
80
|
-
db.identifier_input_method = :upcase
|
|
81
|
-
db.send(:input_identifier_meth).call(:a).must_equal 'A'
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
describe "Database#output_identifier_meth" do
|
|
86
|
-
it "should be the output_identifer method of a default dataset for this database" do
|
|
87
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
88
|
-
db.identifier_output_method = nil
|
|
89
|
-
db.send(:output_identifier_meth).call('A').must_equal :A
|
|
90
|
-
db.identifier_output_method = :downcase
|
|
91
|
-
db.send(:output_identifier_meth).call('A').must_equal :a
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
describe "Database#metadata_dataset" do
|
|
96
|
-
it "should be a dataset with the default settings for identifier_mangling" do
|
|
97
|
-
ds = Sequel::Database.new.extension(:identifier_mangling).send(:metadata_dataset)
|
|
98
|
-
ds.literal(:a).must_equal "\"A\""
|
|
99
|
-
ds.send(:output_identifier, 'A').must_equal :a
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
describe "Dataset" do
|
|
104
|
-
before do
|
|
105
|
-
@dataset = Sequel.mock.extension(:identifier_mangling).dataset
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
it "should get quote_identifiers default from database" do
|
|
109
|
-
db = Sequel::Database.new(:quote_identifiers=>true).extension(:identifier_mangling)
|
|
110
|
-
db[:a].quote_identifiers?.must_equal true
|
|
111
|
-
db = Sequel::Database.new(:quote_identifiers=>false).extension(:identifier_mangling)
|
|
112
|
-
db[:a].quote_identifiers?.must_equal false
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "should get identifier_input_method default from database" do
|
|
116
|
-
db = Sequel::Database.new(:identifier_input_method=>:upcase).extension(:identifier_mangling)
|
|
117
|
-
db[:a].identifier_input_method.must_equal :upcase
|
|
118
|
-
db = Sequel::Database.new(:identifier_input_method=>:downcase).extension(:identifier_mangling)
|
|
119
|
-
db[:a].identifier_input_method.must_equal :downcase
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "should get identifier_output_method default from database" do
|
|
123
|
-
db = Sequel::Database.new(:identifier_output_method=>:upcase).extension(:identifier_mangling)
|
|
124
|
-
db[:a].identifier_output_method.must_equal :upcase
|
|
125
|
-
db = Sequel::Database.new(:identifier_output_method=>:downcase).extension(:identifier_mangling)
|
|
126
|
-
db[:a].identifier_output_method.must_equal :downcase
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it "should have with_quote_identifiers method which returns cloned dataset with changed literalization of identifiers" do
|
|
130
|
-
@dataset.with_quote_identifiers(true).literal(:a).must_equal '"a"'
|
|
131
|
-
@dataset.with_quote_identifiers(false).literal(:a).must_equal 'a'
|
|
132
|
-
ds = @dataset.freeze.with_quote_identifiers(false)
|
|
133
|
-
ds.literal(:a).must_equal 'a'
|
|
134
|
-
ds.frozen?.must_equal true
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
it "should have with_identifier_input_method method which returns cloned dataset with changed literalization of identifiers" do
|
|
138
|
-
@dataset.with_identifier_input_method(:upcase).literal(:a).must_equal 'A'
|
|
139
|
-
@dataset.with_identifier_input_method(:downcase).literal(:A).must_equal 'a'
|
|
140
|
-
@dataset.with_identifier_input_method(:reverse).literal(:at_b).must_equal 'b_ta'
|
|
141
|
-
ds = @dataset.freeze.with_identifier_input_method(:reverse)
|
|
142
|
-
ds.frozen?.must_equal true
|
|
143
|
-
ds.literal(:at_b).must_equal 'b_ta'
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "should have with_identifier_output_method method which returns cloned dataset with changed identifiers returned from the database" do
|
|
147
|
-
@dataset.send(:output_identifier, "at_b_C").must_equal :at_b_C
|
|
148
|
-
@dataset.with_identifier_output_method(:upcase).send(:output_identifier, "at_b_C").must_equal :AT_B_C
|
|
149
|
-
@dataset.with_identifier_output_method(:downcase).send(:output_identifier, "at_b_C").must_equal :at_b_c
|
|
150
|
-
@dataset.with_identifier_output_method(:reverse).send(:output_identifier, "at_b_C").must_equal :C_b_ta
|
|
151
|
-
ds = @dataset.freeze.with_identifier_output_method(:reverse)
|
|
152
|
-
ds.send(:output_identifier, "at_b_C").must_equal :C_b_ta
|
|
153
|
-
ds.frozen?.must_equal true
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
it "should have output_identifier handle empty identifiers" do
|
|
157
|
-
@dataset.send(:output_identifier, "").must_equal :untitled
|
|
158
|
-
@dataset.with_identifier_output_method(:upcase).send(:output_identifier, "").must_equal :UNTITLED
|
|
159
|
-
@dataset.with_identifier_output_method(:downcase).send(:output_identifier, "").must_equal :untitled
|
|
160
|
-
@dataset.with_identifier_output_method(:reverse).send(:output_identifier, "").must_equal :deltitnu
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
describe "identifier_mangling extension" do
|
|
165
|
-
it "should be able to load dialects based on the database name" do
|
|
166
|
-
Sequel.mock(:host=>'access').select(Date.new(2011, 12, 13)).sql.must_equal 'SELECT #2011-12-13#'
|
|
167
|
-
Sequel.mock(:host=>'db2').select(1).sql.must_equal 'SELECT 1 FROM "SYSIBM"."SYSDUMMY1"'
|
|
168
|
-
Sequel.mock(:host=>'mssql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM [A] WHERE (CONTAINS ([B], 'c'))"
|
|
169
|
-
Sequel.mock(:host=>'mysql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM `a` WHERE (MATCH (`b`) AGAINST ('c'))"
|
|
170
|
-
Sequel.mock(:host=>'oracle')[:a].limit(1).sql.must_equal 'SELECT * FROM (SELECT * FROM "A") "T1" WHERE (ROWNUM <= 1)'
|
|
171
|
-
Sequel.mock(:host=>'postgres')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM \"a\" WHERE (to_tsvector(CAST('simple' AS regconfig), (COALESCE(\"b\", ''))) @@ to_tsquery(CAST('simple' AS regconfig), 'c'))"
|
|
172
|
-
Sequel.mock(:host=>'sqlanywhere').from(:a).offset(1).sql.must_equal 'SELECT TOP 2147483647 START AT (1 + 1) * FROM "A"'
|
|
173
|
-
Sequel.mock(:host=>'sqlite')[Sequel[:a].as(:b)].sql.must_equal "SELECT * FROM `a` AS 'b'"
|
|
174
|
-
end
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
describe Sequel::Model, ".[] optimization" do
|
|
178
|
-
before do
|
|
179
|
-
@db = Sequel.mock(:quote_identifiers=>true).extension(:identifier_mangling)
|
|
180
|
-
def @db.schema(*) [[:id, {:primary_key=>true}]] end
|
|
181
|
-
def @db.supports_schema_parsing?() true end
|
|
182
|
-
@c = Class.new(Sequel::Model(@db))
|
|
183
|
-
@ds = @db.dataset.with_quote_identifiers(true)
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
it "should have simple_pk and simple_table respect dataset's identifier input methods" do
|
|
187
|
-
ds = @db.from(:ab).with_identifier_input_method(:reverse)
|
|
188
|
-
@c.set_dataset ds
|
|
189
|
-
@c.simple_table.must_equal '"ba"'
|
|
190
|
-
@c.set_primary_key :cd
|
|
191
|
-
@c.simple_pk.must_equal '"dc"'
|
|
192
|
-
@c.set_dataset ds.from(Sequel[:ef][:gh])
|
|
193
|
-
@c.simple_table.must_equal '"fe"."hg"'
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
with_symbol_splitting "should have simple_pk and simple_table respect dataset's identifier input methods when using splittable symbols" do
|
|
197
|
-
ds = @db.from(:ab).with_identifier_input_method(:reverse)
|
|
198
|
-
@c.set_dataset ds.from(:ef__gh)
|
|
199
|
-
@c.simple_table.must_equal '"fe"."hg"'
|
|
200
|
-
end
|
|
201
|
-
end
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Dataset::ImplicitSubquery" do
|
|
4
|
-
it "should implicitly use a subquery for most dataset query methods" do
|
|
5
|
-
db = Sequel.mock
|
|
6
|
-
db.extend_datasets{def supports_cte?; true end}
|
|
7
|
-
ds = db["SELECT * FROM table"].extension(:implicit_subquery)
|
|
8
|
-
ds.columns(:id, :a)
|
|
9
|
-
ods = db[:c]
|
|
10
|
-
ods.columns(:id, :b)
|
|
11
|
-
|
|
12
|
-
ds.cross_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 CROSS JOIN c"
|
|
13
|
-
ds.distinct.sql.must_equal "SELECT DISTINCT * FROM (SELECT * FROM table) AS t1"
|
|
14
|
-
ds.except(ods).sql.must_equal "SELECT * FROM (SELECT * FROM (SELECT * FROM table) AS t1 EXCEPT SELECT * FROM c) AS t1"
|
|
15
|
-
ds.exclude(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE NOT c"
|
|
16
|
-
ds.exclude_having(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 HAVING NOT c"
|
|
17
|
-
ds.filter(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE c"
|
|
18
|
-
ds.for_update.sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 FOR UPDATE"
|
|
19
|
-
ds.full_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 FULL JOIN c"
|
|
20
|
-
ds.full_outer_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 FULL OUTER JOIN c"
|
|
21
|
-
ds.graph(ods).sql.must_equal "SELECT t1.id, t1.a, c.id AS c_id, c.b FROM (SELECT * FROM table) AS t1 LEFT OUTER JOIN c"
|
|
22
|
-
ds.grep(:c, 'a').sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE ((c LIKE 'a' ESCAPE '\\'))"
|
|
23
|
-
ds.group(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 GROUP BY c"
|
|
24
|
-
ds.group_append(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 GROUP BY c"
|
|
25
|
-
ds.group_and_count(:c).sql.must_equal "SELECT c, count(*) AS count FROM (SELECT * FROM table) AS t1 GROUP BY c"
|
|
26
|
-
ds.group_by(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 GROUP BY c"
|
|
27
|
-
ds.having(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 HAVING c"
|
|
28
|
-
ds.inner_join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 INNER JOIN c USING (d)"
|
|
29
|
-
ds.intersect(ods).sql.must_equal "SELECT * FROM (SELECT * FROM (SELECT * FROM table) AS t1 INTERSECT SELECT * FROM c) AS t1"
|
|
30
|
-
ds.invert.sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE 'f'"
|
|
31
|
-
ds.join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 INNER JOIN c USING (d)"
|
|
32
|
-
ds.join_table(:inner, :c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 INNER JOIN c USING (d)"
|
|
33
|
-
ds.left_join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 LEFT JOIN c USING (d)"
|
|
34
|
-
ds.left_outer_join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 LEFT OUTER JOIN c USING (d)"
|
|
35
|
-
ds.limit(1).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 LIMIT 1"
|
|
36
|
-
ds.lock_style('FOR UPDATE').sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 FOR UPDATE"
|
|
37
|
-
ds.natural_full_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 NATURAL FULL JOIN c"
|
|
38
|
-
ds.natural_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 NATURAL JOIN c"
|
|
39
|
-
ds.natural_left_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 NATURAL LEFT JOIN c"
|
|
40
|
-
ds.natural_right_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 NATURAL RIGHT JOIN c"
|
|
41
|
-
ds.offset(1).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 OFFSET 1"
|
|
42
|
-
ds.order(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 ORDER BY c"
|
|
43
|
-
ds.order_append(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 ORDER BY c"
|
|
44
|
-
ds.order_by(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 ORDER BY c"
|
|
45
|
-
ds.order_more(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 ORDER BY c"
|
|
46
|
-
ds.order_prepend(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 ORDER BY c"
|
|
47
|
-
ds.right_join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 RIGHT JOIN c USING (d)"
|
|
48
|
-
ds.right_outer_join(:c, [:d]).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 RIGHT OUTER JOIN c USING (d)"
|
|
49
|
-
ds.select(:c).sql.must_equal "SELECT c FROM (SELECT * FROM table) AS t1"
|
|
50
|
-
ds.select_append(:c).sql.must_equal "SELECT *, c FROM (SELECT * FROM table) AS t1"
|
|
51
|
-
ds.select_group(:c).sql.must_equal "SELECT c FROM (SELECT * FROM table) AS t1 GROUP BY c"
|
|
52
|
-
ds.select_more(:c).sql.must_equal "SELECT *, c FROM (SELECT * FROM table) AS t1"
|
|
53
|
-
ds.union(ods).sql.must_equal "SELECT * FROM (SELECT * FROM (SELECT * FROM table) AS t1 UNION SELECT * FROM c) AS t1"
|
|
54
|
-
ds.where(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE c"
|
|
55
|
-
ds.with(:d, ods).sql.must_equal "WITH d AS (SELECT * FROM c) SELECT * FROM (SELECT * FROM table) AS t1"
|
|
56
|
-
ds.with_recursive(:d, ods, ods).sql.must_equal "WITH d AS (SELECT * FROM c UNION ALL SELECT * FROM c) SELECT * FROM (SELECT * FROM table) AS t1"
|
|
57
|
-
end
|
|
58
|
-
end
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "index_caching extension" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.connect('mock://postgres').extension(:index_caching)
|
|
6
|
-
@indexes = {'"table"'=>{:table_idx_unique=>{:columns=>[:first_col, :second_col], :unique=>true, :deferrable=>nil}}}
|
|
7
|
-
@filename = "spec/files/test_indexes_#$$.dump"
|
|
8
|
-
@db.instance_variable_set(:@indexes, @indexes)
|
|
9
|
-
end
|
|
10
|
-
after do
|
|
11
|
-
File.delete(@filename) if File.exist?(@filename)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "#indexes should return cached index information" do
|
|
15
|
-
@db.indexes(:table).must_equal @indexes['"table"']
|
|
16
|
-
@db.indexes(:table, {}).must_equal @indexes['"table"']
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "#indexes should skip cached information if given options" do
|
|
20
|
-
@db.indexes(:table, :schema=>:b).must_equal({})
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "Database should remove cached indexes when schema is changed" do
|
|
24
|
-
@db.create_table(:table){Integer :a}
|
|
25
|
-
@db.indexes(:table).must_equal({})
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "Database#freeze should allow cached information to work" do
|
|
29
|
-
@db.freeze.indexes(:table).must_equal @indexes['"table"']
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "Database#freeze should allow removing index information" do
|
|
33
|
-
@db.freeze
|
|
34
|
-
@db.create_table(:table){Integer :a}
|
|
35
|
-
@db.indexes(:table).must_equal({})
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "Database#dump_index_cache should dump the index cache to the given file" do
|
|
39
|
-
File.exist?(@filename).must_equal false
|
|
40
|
-
@db.dump_index_cache(@filename)
|
|
41
|
-
File.exist?(@filename).must_equal true
|
|
42
|
-
File.size(@filename).must_be :>, 0
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "Database#load_index_cache should load the index cache from the given file dumped by #dump_index_cache" do
|
|
46
|
-
@db.dump_index_cache(@filename)
|
|
47
|
-
db = Sequel::Database.new.extension(:index_caching)
|
|
48
|
-
db.load_index_cache(@filename)
|
|
49
|
-
db.extension(:index_caching)
|
|
50
|
-
@db.instance_variable_get(:@indexes).must_equal @indexes
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "Database#dump_index_cache? should dump the index cache to the given file unless the file exists" do
|
|
54
|
-
File.open(@filename, 'wb'){|f|}
|
|
55
|
-
File.size(@filename).must_equal 0
|
|
56
|
-
@db.dump_index_cache?(@filename)
|
|
57
|
-
File.size(@filename).must_equal 0
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "Database#load_index_cache? should load the index cache from the given file if it exists" do
|
|
61
|
-
db = Sequel::Database.new.extension(:index_caching)
|
|
62
|
-
File.exist?(@filename).must_equal false
|
|
63
|
-
db.load_index_cache?(@filename)
|
|
64
|
-
db.instance_variable_get(:@indexes).must_equal({})
|
|
65
|
-
end
|
|
66
|
-
end
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
Sequel.extension :inflector
|
|
4
|
-
|
|
5
|
-
describe String do
|
|
6
|
-
it "#camelize and #camelcase should transform the word to CamelCase" do
|
|
7
|
-
"egg_and_hams".camelize.must_equal "EggAndHams"
|
|
8
|
-
"egg_and_hams".camelize(false).must_equal "eggAndHams"
|
|
9
|
-
"post".camelize.must_equal "Post"
|
|
10
|
-
"post".camelcase.must_equal "Post"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "#constantize should eval the string to get a constant" do
|
|
14
|
-
"String".constantize.must_equal String
|
|
15
|
-
"String::Inflections".constantize.must_equal String::Inflections
|
|
16
|
-
proc{"BKSDDF".constantize}.must_raise NameError
|
|
17
|
-
proc{"++A++".constantize}.must_raise NameError
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "#dasherize should transform underscores to dashes" do
|
|
21
|
-
"egg_and_hams".dasherize.must_equal "egg-and-hams"
|
|
22
|
-
"post".dasherize.must_equal "post"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "#demodulize should remove any preceding modules" do
|
|
26
|
-
"String::Inflections::Blah".demodulize.must_equal "Blah"
|
|
27
|
-
"String::Inflections".demodulize.must_equal "Inflections"
|
|
28
|
-
"String".demodulize.must_equal "String"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "#humanize should remove _i, transform underscore to spaces, and capitalize" do
|
|
32
|
-
"egg_and_hams".humanize.must_equal "Egg and hams"
|
|
33
|
-
"post".humanize.must_equal "Post"
|
|
34
|
-
"post_id".humanize.must_equal "Post"
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "#titleize and #titlecase should underscore, humanize, and capitalize all words" do
|
|
38
|
-
"egg-and: hams".titleize.must_equal "Egg And: Hams"
|
|
39
|
-
"post".titleize.must_equal "Post"
|
|
40
|
-
"post".titlecase.must_equal "Post"
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it "#underscore should add underscores between CamelCased words, change :: to / and - to _, and downcase" do
|
|
44
|
-
"EggAndHams".underscore.must_equal "egg_and_hams"
|
|
45
|
-
"EGGAndHams".underscore.must_equal "egg_and_hams"
|
|
46
|
-
"Egg::And::Hams".underscore.must_equal "egg/and/hams"
|
|
47
|
-
"post".underscore.must_equal "post"
|
|
48
|
-
"post-id".underscore.must_equal "post_id"
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "#pluralize should transform words from singular to plural" do
|
|
52
|
-
"post".pluralize.must_equal "posts"
|
|
53
|
-
"octopus".pluralize.must_equal"octopuses"
|
|
54
|
-
"the blue mailman".pluralize.must_equal "the blue mailmen"
|
|
55
|
-
"CamelOctopus".pluralize.must_equal "CamelOctopuses"
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "#singularize should transform words from plural to singular" do
|
|
59
|
-
"posts".singularize.must_equal "post"
|
|
60
|
-
"octopuses".singularize.must_equal "octopus"
|
|
61
|
-
"the blue mailmen".singularize.must_equal "the blue mailman"
|
|
62
|
-
"CamelOctopuses".singularize.must_equal "CamelOctopus"
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "#tableize should transform class names to table names" do
|
|
66
|
-
"RawScaledScorer".tableize.must_equal "raw_scaled_scorers"
|
|
67
|
-
"egg_and_ham".tableize.must_equal "egg_and_hams"
|
|
68
|
-
"fancyCategory".tableize.must_equal "fancy_categories"
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "#classify should tranform table names to class names" do
|
|
72
|
-
"egg_and_hams".classify.must_equal "EggAndHam"
|
|
73
|
-
"post".classify.must_equal "Post"
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "#foreign_key should create a foreign key name from a class name" do
|
|
77
|
-
"Message".foreign_key.must_equal "message_id"
|
|
78
|
-
"Message".foreign_key(false).must_equal "messageid"
|
|
79
|
-
"Admin::Post".foreign_key.must_equal "post_id"
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
describe String::Inflections do
|
|
84
|
-
before do
|
|
85
|
-
@plurals, @singulars, @uncountables = String.inflections.plurals.dup, String.inflections.singulars.dup, String.inflections.uncountables.dup
|
|
86
|
-
end
|
|
87
|
-
after do
|
|
88
|
-
String.inflections.plurals.replace(@plurals)
|
|
89
|
-
String.inflections.singulars.replace(@singulars)
|
|
90
|
-
String.inflections.uncountables.replace(@uncountables)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "should be possible to clear the list of singulars, plurals, and uncountables" do
|
|
94
|
-
String.inflections.clear(:plurals)
|
|
95
|
-
String.inflections.plurals.must_equal []
|
|
96
|
-
String.inflections.plural('blah', 'blahs')
|
|
97
|
-
String.inflections.clear
|
|
98
|
-
String.inflections.plurals.must_equal []
|
|
99
|
-
String.inflections.singulars.must_equal []
|
|
100
|
-
String.inflections.uncountables.must_equal []
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
it "should be able to specify new inflection rules" do
|
|
104
|
-
String.inflections do |i|
|
|
105
|
-
i.plural(/xx$/i, 'xxx')
|
|
106
|
-
i.singular(/ttt$/i, 'tt')
|
|
107
|
-
i.irregular('yy', 'yyy')
|
|
108
|
-
i.uncountable(%w'zz')
|
|
109
|
-
end
|
|
110
|
-
'roxx'.pluralize.must_equal 'roxxx'
|
|
111
|
-
'rottt'.singularize.must_equal 'rott'
|
|
112
|
-
'yy'.pluralize.must_equal 'yyy'
|
|
113
|
-
'yyy'.singularize.must_equal 'yy'
|
|
114
|
-
'zz'.pluralize.must_equal 'zz'
|
|
115
|
-
'zz'.singularize.must_equal 'zz'
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
it "should be yielded and returned by String.inflections" do
|
|
119
|
-
String.inflections{|i| i.must_equal String::Inflections}.must_equal String::Inflections
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
describe 'Default inflections' do
|
|
124
|
-
it "should support the default inflection rules" do
|
|
125
|
-
{
|
|
126
|
-
:test=>:tests,
|
|
127
|
-
:ax=>:axes,
|
|
128
|
-
:testis=>:testes,
|
|
129
|
-
:octopus=>:octopuses,
|
|
130
|
-
:virus=>:viruses,
|
|
131
|
-
:alias=>:aliases,
|
|
132
|
-
:status=>:statuses,
|
|
133
|
-
:bus=>:buses,
|
|
134
|
-
:buffalo=>:buffaloes,
|
|
135
|
-
:tomato=>:tomatoes,
|
|
136
|
-
:datum=>:data,
|
|
137
|
-
:bacterium=>:bacteria,
|
|
138
|
-
:analysis=>:analyses,
|
|
139
|
-
:basis=>:bases,
|
|
140
|
-
:diagnosis=>:diagnoses,
|
|
141
|
-
:parenthesis=>:parentheses,
|
|
142
|
-
:prognosis=>:prognoses,
|
|
143
|
-
:synopsis=>:synopses,
|
|
144
|
-
:thesis=>:theses,
|
|
145
|
-
:wife=>:wives,
|
|
146
|
-
:giraffe=>:giraffes,
|
|
147
|
-
:self=>:selves,
|
|
148
|
-
:dwarf=>:dwarves,
|
|
149
|
-
:hive=>:hives,
|
|
150
|
-
:fly=>:flies,
|
|
151
|
-
:buy=>:buys,
|
|
152
|
-
:soliloquy=>:soliloquies,
|
|
153
|
-
:day=>:days,
|
|
154
|
-
:attorney=>:attorneys,
|
|
155
|
-
:boy=>:boys,
|
|
156
|
-
:hoax=>:hoaxes,
|
|
157
|
-
:lunch=>:lunches,
|
|
158
|
-
:princess=>:princesses,
|
|
159
|
-
:matrix=>:matrices,
|
|
160
|
-
:vertex=>:vertices,
|
|
161
|
-
:index=>:indices,
|
|
162
|
-
:mouse=>:mice,
|
|
163
|
-
:louse=>:lice,
|
|
164
|
-
:quiz=>:quizzes,
|
|
165
|
-
:motive=>:motives,
|
|
166
|
-
:movie=>:movies,
|
|
167
|
-
:series=>:series,
|
|
168
|
-
:crisis=>:crises,
|
|
169
|
-
:person=>:people,
|
|
170
|
-
:man=>:men,
|
|
171
|
-
:woman=>:women,
|
|
172
|
-
:child=>:children,
|
|
173
|
-
:sex=>:sexes,
|
|
174
|
-
:move=>:moves
|
|
175
|
-
}.each do |k, v|
|
|
176
|
-
k.to_s.pluralize.must_equal v.to_s
|
|
177
|
-
v.to_s.singularize.must_equal k.to_s
|
|
178
|
-
end
|
|
179
|
-
[:equipment, :information, :rice, :money, :species, :series, :fish, :sheep, :news].each do |a|
|
|
180
|
-
a.to_s.pluralize.must_equal a.to_s.singularize
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
end
|