sequel 5.20.0 → 5.49.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 +398 -1922
- data/MIT-LICENSE +1 -1
- data/README.rdoc +7 -7
- data/doc/advanced_associations.rdoc +4 -4
- data/doc/association_basics.rdoc +80 -16
- data/doc/cheat_sheet.rdoc +6 -5
- data/doc/code_order.rdoc +10 -12
- data/doc/dataset_filtering.rdoc +17 -2
- data/doc/fork_safety.rdoc +84 -0
- data/doc/migration.rdoc +11 -5
- data/doc/model_dataset_method_design.rdoc +1 -1
- data/doc/model_plugins.rdoc +1 -1
- data/doc/opening_databases.rdoc +10 -2
- data/doc/postgresql.rdoc +82 -3
- data/doc/querying.rdoc +4 -4
- data/doc/release_notes/5.21.0.txt +87 -0
- data/doc/release_notes/5.22.0.txt +48 -0
- data/doc/release_notes/5.23.0.txt +56 -0
- data/doc/release_notes/5.24.0.txt +56 -0
- data/doc/release_notes/5.25.0.txt +32 -0
- data/doc/release_notes/5.26.0.txt +35 -0
- data/doc/release_notes/5.27.0.txt +21 -0
- data/doc/release_notes/5.28.0.txt +16 -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/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.38.0.txt +28 -0
- data/doc/release_notes/5.39.0.txt +19 -0
- data/doc/release_notes/5.40.0.txt +40 -0
- data/doc/release_notes/5.41.0.txt +25 -0
- data/doc/release_notes/5.42.0.txt +136 -0
- data/doc/release_notes/5.43.0.txt +98 -0
- data/doc/release_notes/5.44.0.txt +32 -0
- data/doc/release_notes/5.45.0.txt +34 -0
- data/doc/release_notes/5.46.0.txt +87 -0
- data/doc/release_notes/5.47.0.txt +59 -0
- data/doc/release_notes/5.48.0.txt +14 -0
- data/doc/release_notes/5.49.0.txt +59 -0
- data/doc/sharding.rdoc +2 -0
- data/doc/sql.rdoc +13 -1
- data/doc/testing.rdoc +20 -7
- data/doc/transactions.rdoc +0 -8
- data/doc/validations.rdoc +1 -1
- data/doc/virtual_rows.rdoc +1 -1
- data/lib/sequel/adapters/ado/access.rb +1 -1
- data/lib/sequel/adapters/ado.rb +43 -35
- data/lib/sequel/adapters/ibmdb.rb +2 -2
- data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
- data/lib/sequel/adapters/jdbc/postgresql.rb +11 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +29 -0
- data/lib/sequel/adapters/jdbc.rb +24 -6
- data/lib/sequel/adapters/mysql.rb +1 -1
- data/lib/sequel/adapters/mysql2.rb +2 -3
- data/lib/sequel/adapters/odbc.rb +8 -6
- data/lib/sequel/adapters/oracle.rb +5 -4
- data/lib/sequel/adapters/postgres.rb +15 -9
- data/lib/sequel/adapters/shared/access.rb +6 -6
- data/lib/sequel/adapters/shared/mssql.rb +66 -21
- data/lib/sequel/adapters/shared/mysql.rb +27 -10
- data/lib/sequel/adapters/shared/oracle.rb +29 -23
- data/lib/sequel/adapters/shared/postgres.rb +271 -32
- data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
- data/lib/sequel/adapters/shared/sqlite.rb +161 -19
- data/lib/sequel/adapters/sqlanywhere.rb +1 -1
- data/lib/sequel/adapters/sqlite.rb +1 -1
- data/lib/sequel/adapters/tinytds.rb +15 -2
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -1
- data/lib/sequel/ast_transformer.rb +6 -0
- 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 +333 -319
- data/lib/sequel/database/connecting.rb +3 -4
- data/lib/sequel/database/logging.rb +7 -1
- data/lib/sequel/database/misc.rb +31 -12
- data/lib/sequel/database/query.rb +3 -1
- data/lib/sequel/database/schema_generator.rb +53 -51
- data/lib/sequel/database/schema_methods.rb +38 -23
- data/lib/sequel/database/transactions.rb +17 -18
- data/lib/sequel/dataset/actions.rb +14 -9
- data/lib/sequel/dataset/features.rb +16 -0
- data/lib/sequel/dataset/misc.rb +2 -2
- data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
- data/lib/sequel/dataset/prepared_statements.rb +2 -0
- data/lib/sequel/dataset/query.rb +26 -9
- data/lib/sequel/dataset/sql.rb +76 -25
- data/lib/sequel/dataset.rb +4 -2
- data/lib/sequel/deprecated.rb +3 -1
- data/lib/sequel/exceptions.rb +2 -0
- data/lib/sequel/extensions/_pretty_table.rb +1 -2
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/columns_introspection.rb +1 -2
- data/lib/sequel/extensions/connection_expiration.rb +2 -2
- data/lib/sequel/extensions/connection_validator.rb +2 -2
- data/lib/sequel/extensions/core_refinements.rb +2 -0
- data/lib/sequel/extensions/date_arithmetic.rb +36 -24
- data/lib/sequel/extensions/duplicate_columns_handler.rb +3 -1
- data/lib/sequel/extensions/eval_inspect.rb +2 -0
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/index_caching.rb +9 -7
- data/lib/sequel/extensions/inflector.rb +9 -1
- data/lib/sequel/extensions/integer64.rb +2 -0
- data/lib/sequel/extensions/migration.rb +11 -3
- data/lib/sequel/extensions/named_timezones.rb +56 -8
- data/lib/sequel/extensions/pagination.rb +1 -1
- data/lib/sequel/extensions/pg_array.rb +5 -0
- data/lib/sequel/extensions/pg_array_ops.rb +14 -6
- data/lib/sequel/extensions/pg_enum.rb +11 -3
- data/lib/sequel/extensions/pg_extended_date_support.rb +2 -2
- data/lib/sequel/extensions/pg_hstore.rb +6 -0
- data/lib/sequel/extensions/pg_hstore_ops.rb +54 -2
- data/lib/sequel/extensions/pg_inet.rb +15 -5
- data/lib/sequel/extensions/pg_interval.rb +36 -8
- data/lib/sequel/extensions/pg_json.rb +387 -123
- data/lib/sequel/extensions/pg_json_ops.rb +238 -0
- data/lib/sequel/extensions/pg_loose_count.rb +3 -1
- data/lib/sequel/extensions/pg_range.rb +17 -9
- data/lib/sequel/extensions/pg_range_ops.rb +2 -0
- data/lib/sequel/extensions/pg_row.rb +4 -2
- data/lib/sequel/extensions/pg_row_ops.rb +24 -0
- data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
- data/lib/sequel/extensions/query.rb +3 -0
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +2 -0
- data/lib/sequel/extensions/schema_dumper.rb +24 -7
- data/lib/sequel/extensions/server_block.rb +18 -7
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +1 -1
- data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
- data/lib/sequel/extensions/to_dot.rb +9 -3
- data/lib/sequel/model/associations.rb +356 -117
- data/lib/sequel/model/base.rb +107 -68
- data/lib/sequel/model/errors.rb +10 -1
- data/lib/sequel/model/inflections.rb +1 -1
- data/lib/sequel/model/plugins.rb +9 -3
- data/lib/sequel/model.rb +3 -1
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
- data/lib/sequel/plugins/association_pks.rb +60 -18
- data/lib/sequel/plugins/association_proxies.rb +8 -2
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_validations.rb +39 -5
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- data/lib/sequel/plugins/blacklist_security.rb +1 -2
- data/lib/sequel/plugins/boolean_subsets.rb +4 -1
- data/lib/sequel/plugins/caching.rb +3 -0
- data/lib/sequel/plugins/class_table_inheritance.rb +33 -28
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/composition.rb +7 -2
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +2 -1
- data/lib/sequel/plugins/csv_serializer.rb +28 -9
- data/lib/sequel/plugins/dataset_associations.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +60 -22
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/json_serializer.rb +57 -35
- data/lib/sequel/plugins/lazy_attributes.rb +1 -1
- data/lib/sequel/plugins/many_through_many.rb +108 -9
- data/lib/sequel/plugins/nested_attributes.rb +15 -3
- data/lib/sequel/plugins/pg_array_associations.rb +58 -41
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +91 -30
- data/lib/sequel/plugins/prepared_statements.rb +15 -12
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
- data/lib/sequel/plugins/rcte_tree.rb +43 -35
- data/lib/sequel/plugins/serialization.rb +8 -3
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +11 -5
- data/lib/sequel/plugins/single_table_inheritance.rb +22 -15
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/static_cache.rb +9 -4
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +1 -1
- data/lib/sequel/plugins/subclasses.rb +2 -0
- data/lib/sequel/plugins/throw_failures.rb +1 -1
- data/lib/sequel/plugins/timestamps.rb +1 -1
- data/lib/sequel/plugins/tree.rb +9 -4
- data/lib/sequel/plugins/typecast_on_load.rb +3 -2
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +1 -1
- data/lib/sequel/plugins/validation_class_methods.rb +5 -1
- data/lib/sequel/plugins/validation_helpers.rb +18 -11
- data/lib/sequel/plugins/xml_serializer.rb +1 -1
- data/lib/sequel/sql.rb +20 -5
- data/lib/sequel/timezones.rb +63 -17
- data/lib/sequel/version.rb +1 -1
- metadata +113 -381
- 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 -804
- data/spec/adapters/mysql_spec.rb +0 -1065
- data/spec/adapters/oracle_spec.rb +0 -371
- data/spec/adapters/postgres_spec.rb +0 -4125
- 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 -2865
- data/spec/core/dataset_spec.rb +0 -5515
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1455
- 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 -1826
- 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/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -125
- 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 -189
- 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/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_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 -111
- data/spec/extensions/nested_attributes_spec.rb +0 -767
- 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 -172
- 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 -289
- data/spec/extensions/pg_json_spec.rb +0 -262
- 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 -519
- 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 -381
- 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 -97
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/sharding_spec.rb +0 -189
- 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 -63
- 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_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 -1981
- 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 -2396
- data/spec/integration/prepared_statement_test.rb +0 -405
- data/spec/integration/schema_test.rb +0 -889
- data/spec/integration/spec_helper.rb +0 -65
- 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,205 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Dataset#where" do
|
|
4
|
-
before do
|
|
5
|
-
@dataset = Sequel.mock[:test].extension(:auto_literal_strings)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should work with a string with placeholders and arguments for those placeholders" do
|
|
9
|
-
@dataset.where('price < ? AND id in ?', 100, [1, 2, 3]).select_sql.must_equal "SELECT * FROM test WHERE (price < 100 AND id in (1, 2, 3))"
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "should use default behavior for array of conditions" do
|
|
13
|
-
@dataset.where([[:a, 1], [:b, 2]]).sql.must_equal 'SELECT * FROM test WHERE ((a = 1) AND (b = 2))'
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should not modify passed array with placeholders" do
|
|
17
|
-
a = ['price < ? AND id in ?', 100, 1, 2, 3]
|
|
18
|
-
b = a.dup
|
|
19
|
-
@dataset.where(a)
|
|
20
|
-
b.must_equal a
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "should work with strings (custom SQL expressions)" do
|
|
24
|
-
@dataset.where('(a = 1 AND b = 2)').select_sql.must_equal "SELECT * FROM test WHERE ((a = 1 AND b = 2))"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should work with a string with named placeholders and a hash of placeholder value arguments" do
|
|
28
|
-
@dataset.where('price < :price AND id in :ids', :price=>100, :ids=>[1, 2, 3]).select_sql.must_equal "SELECT * FROM test WHERE (price < 100 AND id in (1, 2, 3))"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "should not modify passed array with named placeholders" do
|
|
32
|
-
a = ['price < :price AND id in :ids', {:price=>100}]
|
|
33
|
-
b = a.dup
|
|
34
|
-
@dataset.where(a)
|
|
35
|
-
b.must_equal a
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should not replace named placeholders that don't exist in the hash" do
|
|
39
|
-
@dataset.where('price < :price AND id in :ids', :price=>100).select_sql.must_equal "SELECT * FROM test WHERE (price < 100 AND id in :ids)"
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "should raise an error for a mismatched number of placeholders" do
|
|
43
|
-
proc{@dataset.where('price < ? AND id in ?', 100).select_sql}.must_raise(Sequel::Error)
|
|
44
|
-
proc{@dataset.where('price < ? AND id in ?', 100, [1, 2, 3], 4).select_sql}.must_raise(Sequel::Error)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "should handle partial names" do
|
|
48
|
-
@dataset.where('price < :price AND id = :p', :p=>2, :price=>100).select_sql.must_equal "SELECT * FROM test WHERE (price < 100 AND id = 2)"
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "should handle ::cast syntax when no parameters are supplied" do
|
|
52
|
-
@dataset.where('price::float = 10', {}).select_sql.must_equal "SELECT * FROM test WHERE (price::float = 10)"
|
|
53
|
-
@dataset.where('price::float ? 10', {}).select_sql.must_equal "SELECT * FROM test WHERE (price::float ? 10)"
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should affect select, delete and update statements when using strings" do
|
|
57
|
-
@d2 = @dataset.where('region = ?', 'Asia')
|
|
58
|
-
@d2.select_sql.must_equal "SELECT * FROM test WHERE (region = 'Asia')"
|
|
59
|
-
@d2.delete_sql.must_equal "DELETE FROM test WHERE (region = 'Asia')"
|
|
60
|
-
@d2.update_sql(:GDP => 0).must_equal "UPDATE test SET GDP = 0 WHERE (region = 'Asia')"
|
|
61
|
-
|
|
62
|
-
@d3 = @dataset.where("a = 1")
|
|
63
|
-
@d3.select_sql.must_equal "SELECT * FROM test WHERE (a = 1)"
|
|
64
|
-
@d3.delete_sql.must_equal "DELETE FROM test WHERE (a = 1)"
|
|
65
|
-
@d3.update_sql(:GDP => 0).must_equal "UPDATE test SET GDP = 0 WHERE (a = 1)"
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "should be composable using AND operator (for scoping) when using strings" do
|
|
69
|
-
@d2 = @dataset.where('region = ?', 'Asia')
|
|
70
|
-
@d2.where('GDP > ?', 1000).select_sql.must_equal "SELECT * FROM test WHERE ((region = 'Asia') AND (GDP > 1000))"
|
|
71
|
-
@d2.where(:name => ['Japan', 'China']).select_sql.must_equal "SELECT * FROM test WHERE ((region = 'Asia') AND (name IN ('Japan', 'China')))"
|
|
72
|
-
@d2.where('GDP > ?').select_sql.must_equal "SELECT * FROM test WHERE ((region = 'Asia') AND (GDP > ?))"
|
|
73
|
-
|
|
74
|
-
@d3 = @dataset.where("a = 1")
|
|
75
|
-
@d3.where('b = 2').select_sql.must_equal "SELECT * FROM test WHERE ((a = 1) AND (b = 2))"
|
|
76
|
-
@d3.where(:c => 3).select_sql.must_equal "SELECT * FROM test WHERE ((a = 1) AND (c = 3))"
|
|
77
|
-
@d3.where('d = ?', 4).select_sql.must_equal "SELECT * FROM test WHERE ((a = 1) AND (d = 4))"
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "should be composable using AND operator (for scoping) with block and string" do
|
|
81
|
-
@dataset.where("a = 1").where{e < 5}.select_sql.must_equal "SELECT * FROM test WHERE ((a = 1) AND (e < 5))"
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
describe "Dataset #first and #last" do
|
|
86
|
-
before do
|
|
87
|
-
@d = Sequel.mock(:fetch=>proc{|s| {:s=>s}})[:test].extension(:auto_literal_strings)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "should combine block and standard argument filters if argument is not an Integer" do
|
|
91
|
-
ds = @d.order(:name).freeze
|
|
92
|
-
5.times do
|
|
93
|
-
@d.first('y = 25'){z > 26}.must_equal(:s=>'SELECT * FROM test WHERE ((y = 25) AND (z > 26)) LIMIT 1')
|
|
94
|
-
ds.last('y = 16'){z > 26}.must_equal(:s=>'SELECT * FROM test WHERE ((y = 16) AND (z > 26)) ORDER BY name DESC LIMIT 1')
|
|
95
|
-
@d.first('y = ?', 25){z > 26}.must_equal(:s=>'SELECT * FROM test WHERE ((y = 25) AND (z > 26)) LIMIT 1')
|
|
96
|
-
ds.last('y = ?', 16){z > 26}.must_equal(:s=>'SELECT * FROM test WHERE ((y = 16) AND (z > 26)) ORDER BY name DESC LIMIT 1')
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
describe "Dataset#exclude" do
|
|
102
|
-
before do
|
|
103
|
-
@dataset = Sequel.mock.dataset.from(:test).extension(:auto_literal_strings)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "should parenthesize a single string condition correctly" do
|
|
107
|
-
@dataset.exclude("region = 'Asia' AND name = 'Japan'").select_sql.must_equal "SELECT * FROM test WHERE NOT (region = 'Asia' AND name = 'Japan')"
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
it "should parenthesize an array condition correctly" do
|
|
111
|
-
@dataset.exclude('region = ? AND name = ?', 'Asia', 'Japan').select_sql.must_equal "SELECT * FROM test WHERE NOT (region = 'Asia' AND name = 'Japan')"
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
describe "Dataset#or" do
|
|
116
|
-
before do
|
|
117
|
-
@dataset = Sequel.mock.dataset.from(:test).extension(:auto_literal_strings)
|
|
118
|
-
@d1 = @dataset.where(:x => 1)
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "should accept string filters" do
|
|
122
|
-
@d1.or('y > ?', 2).sql.must_equal 'SELECT * FROM test WHERE ((x = 1) OR (y > 2))'
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
describe "Dataset#having" do
|
|
127
|
-
before do
|
|
128
|
-
@dataset = Sequel.mock.dataset.from(:test).extension(:auto_literal_strings)
|
|
129
|
-
@grouped = @dataset.group(:region).select(:region, Sequel.function(:sum, :population), Sequel.function(:avg, :gdp))
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it "should handle string arguments" do
|
|
133
|
-
@grouped.having('sum(population) > 10').select_sql.must_equal "SELECT region, sum(population), avg(gdp) FROM test GROUP BY region HAVING (sum(population) > 10)"
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
describe "Dataset#join_table" do
|
|
138
|
-
before do
|
|
139
|
-
@d = Sequel.mock.dataset.from(:items).with_quote_identifiers(true).extension(:auto_literal_strings)
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it "should support using a string as the join condition" do
|
|
143
|
-
@d.join(:categories, "c.item_id = items.id", :table_alias=>:c).sql.must_equal 'SELECT * FROM "items" INNER JOIN "categories" AS "c" ON (c.item_id = items.id)'
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
describe "Dataset prepared statements and bound variables " do
|
|
148
|
-
before do
|
|
149
|
-
@db = Sequel.mock
|
|
150
|
-
@ds = @db[:items].with_extend{def insert_select_sql(*v) "#{insert_sql(*v)} RETURNING *" end}.extension(:auto_literal_strings)
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
it "should handle literal strings" do
|
|
154
|
-
@ds.filter("num = ?", :$n).call(:select, :n=>1)
|
|
155
|
-
@db.sqls.must_equal ['SELECT * FROM items WHERE (num = 1)']
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
it "should handle subselects with strings" do
|
|
159
|
-
@ds.filter(:$b).filter(:num=>@ds.select(:num).filter("num = ?", :$n)).call(:select, :n=>1, :b=>0)
|
|
160
|
-
@db.sqls.must_equal ['SELECT * FROM items WHERE (0 AND (num IN (SELECT num FROM items WHERE (num = 1))))']
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
describe "Dataset#update_sql" do
|
|
165
|
-
before do
|
|
166
|
-
@ds = Sequel.mock.dataset.from(:items).extension(:auto_literal_strings)
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
it "should accept strings" do
|
|
170
|
-
@ds.update_sql("a = b").must_equal "UPDATE items SET a = b"
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
it "should accept literal strings" do
|
|
174
|
-
@ds.update_sql(Sequel.lit("a = b")).must_equal "UPDATE items SET a = b"
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
it "should accept hash" do
|
|
178
|
-
@ds.update_sql(:c => 'd').must_equal "UPDATE items SET c = 'd'"
|
|
179
|
-
end
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
describe "Dataset::PlaceholderLiteralizer" do
|
|
183
|
-
before do
|
|
184
|
-
@c = Sequel::Dataset::PlaceholderLiteralizer
|
|
185
|
-
@db = Sequel.mock
|
|
186
|
-
@ds = @db[:items].extension(:auto_literal_strings)
|
|
187
|
-
@h = {:id=>1}
|
|
188
|
-
@ds.db.fetch = @h
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
it "should handle calls with a placeholders used as filter arguments" do
|
|
192
|
-
loader = @c.loader(@ds){|pl, ds| ds.where(pl.arg)}
|
|
193
|
-
loader.first(:id=>1).must_equal @h
|
|
194
|
-
loader.first(Sequel.expr{a(b)}).must_equal @h
|
|
195
|
-
loader.first("a = 1").must_equal @h
|
|
196
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (id = 1)", "SELECT * FROM items WHERE a(b)", "SELECT * FROM items WHERE (a = 1)"]
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
it "should handle calls with a placeholder used multiple times in different capacities" do
|
|
200
|
-
loader = @c.loader(@ds){|pl, ds| a = pl.arg; ds.where(a).where(:b=>a)}
|
|
201
|
-
loader.first("a = 1").must_equal @h
|
|
202
|
-
loader.first(["a = ?", 2]).must_equal @h
|
|
203
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE ((a = 1) AND (b = 'a = 1'))", "SELECT * FROM items WHERE ((a = 2) AND (b IN ('a = ?', 2)))"]
|
|
204
|
-
end
|
|
205
|
-
end
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::AutoValidations" do
|
|
4
|
-
before do
|
|
5
|
-
db = Sequel.mock(:fetch=>proc{|sql| sql =~ /a{51}/ ? {:v=>0} : {:v=>1}})
|
|
6
|
-
def db.schema_parse_table(*) true; end
|
|
7
|
-
def db.schema(t, *)
|
|
8
|
-
t = t.first_source if t.is_a?(Sequel::Dataset)
|
|
9
|
-
return [] if t != :test
|
|
10
|
-
[[:id, {:primary_key=>true, :type=>:integer, :allow_null=>false}],
|
|
11
|
-
[:name, {:primary_key=>false, :type=>:string, :allow_null=>false, :max_length=>50}],
|
|
12
|
-
[:num, {:primary_key=>false, :type=>:integer, :allow_null=>true}],
|
|
13
|
-
[:d, {:primary_key=>false, :type=>:date, :allow_null=>false}],
|
|
14
|
-
[:nnd, {:primary_key=>false, :type=>:string, :allow_null=>false, :default=>'nnd'}]]
|
|
15
|
-
end
|
|
16
|
-
def db.supports_index_parsing?() true end
|
|
17
|
-
def db.indexes(t, *)
|
|
18
|
-
raise if t.is_a?(Sequel::Dataset)
|
|
19
|
-
return [] if t != :test
|
|
20
|
-
{:a=>{:columns=>[:name, :num], :unique=>true}, :b=>{:columns=>[:num], :unique=>false}}
|
|
21
|
-
end
|
|
22
|
-
@c = Class.new(Sequel::Model(db[:test]))
|
|
23
|
-
@c.send(:def_column_accessor, :id, :name, :num, :d, :nnd)
|
|
24
|
-
@c.raise_on_typecast_failure = false
|
|
25
|
-
@c.plugin :auto_validations
|
|
26
|
-
@m = @c.new
|
|
27
|
-
db.sqls
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should have automatically created validations" do
|
|
31
|
-
@m.valid?.must_equal false
|
|
32
|
-
@m.errors.must_equal(:d=>["is not present"], :name=>["is not present"])
|
|
33
|
-
|
|
34
|
-
@m.name = ''
|
|
35
|
-
@m.valid?.must_equal false
|
|
36
|
-
@m.errors.must_equal(:d=>["is not present"])
|
|
37
|
-
|
|
38
|
-
@m.set(:d=>'/', :num=>'a', :name=>'1')
|
|
39
|
-
@m.valid?.must_equal false
|
|
40
|
-
@m.errors.must_equal(:d=>["is not a valid date"], :num=>["is not a valid integer"])
|
|
41
|
-
|
|
42
|
-
@m.set(:d=>Date.today, :num=>1)
|
|
43
|
-
@m.valid?.must_equal false
|
|
44
|
-
@m.errors.must_equal([:name, :num]=>["is already taken"])
|
|
45
|
-
|
|
46
|
-
@m.set(:name=>'a'*51)
|
|
47
|
-
@m.valid?.must_equal false
|
|
48
|
-
@m.errors.must_equal(:name=>["is longer than 50 characters"])
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "should handle simple unique indexes correctly" do
|
|
52
|
-
def (@c.db).indexes(t, *)
|
|
53
|
-
raise if t.is_a?(Sequel::Dataset)
|
|
54
|
-
return [] if t != :test
|
|
55
|
-
{:a=>{:columns=>[:name], :unique=>true}}
|
|
56
|
-
end
|
|
57
|
-
@c.plugin :auto_validations
|
|
58
|
-
@m.set(:name=>'foo', :d=>Date.today)
|
|
59
|
-
@m.valid?.must_equal false
|
|
60
|
-
@m.errors.must_equal(:name=>["is already taken"])
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "should validate using the underlying column values" do
|
|
64
|
-
@c.send(:define_method, :name){super() * 2}
|
|
65
|
-
@c.db.fetch = {:v=>0}
|
|
66
|
-
@m.set(:d=>Date.today, :num=>1, :name=>'b'*26)
|
|
67
|
-
@m.valid?.must_equal true
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should handle databases that don't support index parsing" do
|
|
71
|
-
def (@m.db).supports_index_parsing?() false end
|
|
72
|
-
@m.model.send(:setup_auto_validations)
|
|
73
|
-
@m.set(:d=>Date.today, :num=>1, :name=>'1')
|
|
74
|
-
@m.valid?.must_equal true
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "should handle models that select from subqueries" do
|
|
78
|
-
@c.set_dataset @c.dataset.from_self
|
|
79
|
-
@c.send(:setup_auto_validations)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should support :not_null=>:presence option" do
|
|
83
|
-
@c.plugin :auto_validations, :not_null=>:presence
|
|
84
|
-
@m.set(:d=>Date.today, :num=>'')
|
|
85
|
-
@m.valid?.must_equal false
|
|
86
|
-
@m.errors.must_equal(:name=>["is not present"])
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "should automatically validate explicit nil values for columns with not nil defaults" do
|
|
90
|
-
@m.set(:d=>Date.today, :name=>1, :nnd=>nil)
|
|
91
|
-
@m.id = nil
|
|
92
|
-
@m.valid?.must_equal false
|
|
93
|
-
@m.errors.must_equal(:id=>["is not present"], :nnd=>["is not present"])
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it "should allow skipping validations by type" do
|
|
97
|
-
@c = Class.new(@c)
|
|
98
|
-
@m = @c.new
|
|
99
|
-
@m.skip_auto_validations(:not_null) do
|
|
100
|
-
@m.valid?.must_equal true
|
|
101
|
-
@m.nnd = nil
|
|
102
|
-
@m.valid?.must_equal true
|
|
103
|
-
end
|
|
104
|
-
@m.set(:nnd => 'nnd')
|
|
105
|
-
@c.skip_auto_validations(:not_null)
|
|
106
|
-
@m.valid?.must_equal true
|
|
107
|
-
@m.nnd = nil
|
|
108
|
-
@m.valid?.must_equal true
|
|
109
|
-
|
|
110
|
-
@m.set(:d=>'/', :num=>'a', :name=>'1')
|
|
111
|
-
@m.valid?.must_equal false
|
|
112
|
-
@m.errors.must_equal(:d=>["is not a valid date"], :num=>["is not a valid integer"])
|
|
113
|
-
|
|
114
|
-
@m.skip_auto_validations(:types, :unique) do
|
|
115
|
-
@m.valid?.must_equal true
|
|
116
|
-
end
|
|
117
|
-
@m.skip_auto_validations(:types) do
|
|
118
|
-
@m.valid?.must_equal false
|
|
119
|
-
@m.errors.must_equal([:name, :num]=>["is already taken"])
|
|
120
|
-
end
|
|
121
|
-
@c.skip_auto_validations(:types)
|
|
122
|
-
@m.valid?.must_equal false
|
|
123
|
-
@m.errors.must_equal([:name, :num]=>["is already taken"])
|
|
124
|
-
|
|
125
|
-
@m.skip_auto_validations(:unique) do
|
|
126
|
-
@m.valid?.must_equal true
|
|
127
|
-
end
|
|
128
|
-
@c.skip_auto_validations(:unique)
|
|
129
|
-
@m.valid?.must_equal true
|
|
130
|
-
|
|
131
|
-
@m.set(:name=>'a'*51)
|
|
132
|
-
@m.valid?.must_equal false
|
|
133
|
-
@m.errors.must_equal(:name=>["is longer than 50 characters"])
|
|
134
|
-
|
|
135
|
-
@m.skip_auto_validations(:max_length) do
|
|
136
|
-
@m.valid?.must_equal true
|
|
137
|
-
end
|
|
138
|
-
@c.skip_auto_validations(:max_length)
|
|
139
|
-
@m.valid?.must_equal true
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it "should allow skipping all auto validations" do
|
|
143
|
-
@c = Class.new(@c)
|
|
144
|
-
@m = @c.new
|
|
145
|
-
@m.skip_auto_validations(:all) do
|
|
146
|
-
@m.valid?.must_equal true
|
|
147
|
-
@m.set(:d=>'/', :num=>'a', :name=>'1')
|
|
148
|
-
@m.valid?.must_equal true
|
|
149
|
-
@m.set(:name=>'a'*51)
|
|
150
|
-
@m.valid?.must_equal true
|
|
151
|
-
end
|
|
152
|
-
@m = @c.new
|
|
153
|
-
@c.skip_auto_validations(:all)
|
|
154
|
-
@m.valid?.must_equal true
|
|
155
|
-
@m.set(:d=>'/', :num=>'a', :name=>'1')
|
|
156
|
-
@m.valid?.must_equal true
|
|
157
|
-
@m.set(:name=>'a'*51)
|
|
158
|
-
@m.valid?.must_equal true
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
it "should work correctly in subclasses" do
|
|
162
|
-
@c = Class.new(@c)
|
|
163
|
-
@m = @c.new
|
|
164
|
-
@m.valid?.must_equal false
|
|
165
|
-
@m.errors.must_equal(:d=>["is not present"], :name=>["is not present"])
|
|
166
|
-
|
|
167
|
-
@m.set(:d=>'/', :num=>'a', :name=>'1')
|
|
168
|
-
@m.valid?.must_equal false
|
|
169
|
-
@m.errors.must_equal(:d=>["is not a valid date"], :num=>["is not a valid integer"])
|
|
170
|
-
|
|
171
|
-
@m.set(:d=>Date.today, :num=>1)
|
|
172
|
-
@m.valid?.must_equal false
|
|
173
|
-
@m.errors.must_equal([:name, :num]=>["is already taken"])
|
|
174
|
-
|
|
175
|
-
@m.set(:name=>'a'*51)
|
|
176
|
-
@m.valid?.must_equal false
|
|
177
|
-
@m.errors.must_equal(:name=>["is longer than 50 characters"])
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
it "should work correctly in STI subclasses" do
|
|
181
|
-
@c.plugin(:single_table_inheritance, :num, :model_map=>{1=>@c}, :key_map=>proc{[1, 2]})
|
|
182
|
-
sc = Class.new(@c)
|
|
183
|
-
@m = sc.new
|
|
184
|
-
@m.valid?.must_equal false
|
|
185
|
-
@m.errors.must_equal(:d=>["is not present"], :name=>["is not present"])
|
|
186
|
-
|
|
187
|
-
@m.set(:d=>'/', :num=>'a', :name=>'1')
|
|
188
|
-
@m.valid?.must_equal false
|
|
189
|
-
@m.errors.must_equal(:d=>["is not a valid date"], :num=>["is not a valid integer"])
|
|
190
|
-
|
|
191
|
-
@m.db.sqls
|
|
192
|
-
@m.set(:d=>Date.today, :num=>1)
|
|
193
|
-
@m.valid?.must_equal false
|
|
194
|
-
@m.errors.must_equal([:name, :num]=>["is already taken"])
|
|
195
|
-
@m.db.sqls.must_equal ["SELECT count(*) AS count FROM test WHERE ((name = '1') AND (num = 1)) LIMIT 1"]
|
|
196
|
-
|
|
197
|
-
@m.set(:name=>'a'*51)
|
|
198
|
-
@m.valid?.must_equal false
|
|
199
|
-
@m.errors.must_equal(:name=>["is longer than 50 characters"])
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
it "should work correctly when changing the dataset" do
|
|
203
|
-
@c.set_dataset(@c.db[:foo])
|
|
204
|
-
@c.new.valid?.must_equal true
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
it "should support setting validator options" do
|
|
208
|
-
sc = Class.new(@c)
|
|
209
|
-
sc.plugin :auto_validations, :max_length_opts=> {:message=> 'ml_message'}, :schema_types_opts=> {:message=> 'st_message'}, :explicit_not_null_opts=> {:message=> 'enn_message'}, :unique_opts=> {:message=> 'u_message'}
|
|
210
|
-
|
|
211
|
-
@m = sc.new
|
|
212
|
-
@m.set(:name=>'a'*51, :d => '/', :nnd => nil, :num=>1)
|
|
213
|
-
@m.valid?.must_equal false
|
|
214
|
-
@m.errors.must_equal(:name=>["ml_message"], :d=>["st_message"], :nnd=>["enn_message"])
|
|
215
|
-
|
|
216
|
-
@m = sc.new
|
|
217
|
-
@m.set(:name=>1, :num=>1, :d=>Date.today)
|
|
218
|
-
@m.valid?.must_equal false
|
|
219
|
-
@m.errors.must_equal([:name, :num]=>["u_message"])
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
it "should not allow modifying auto validation information for frozen model classes" do
|
|
223
|
-
@c.freeze
|
|
224
|
-
@c.auto_validate_not_null_columns.frozen?.must_equal true
|
|
225
|
-
@c.auto_validate_explicit_not_null_columns.frozen?.must_equal true
|
|
226
|
-
@c.auto_validate_max_length_columns.frozen?.must_equal true
|
|
227
|
-
@c.auto_validate_unique_columns.frozen?.must_equal true
|
|
228
|
-
end
|
|
229
|
-
end
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe Sequel::Model, "#(set|update)_except" do
|
|
4
|
-
before do
|
|
5
|
-
@c = Class.new(Sequel::Model(:items))
|
|
6
|
-
@c.class_eval do
|
|
7
|
-
plugin :blacklist_security
|
|
8
|
-
set_primary_key :id
|
|
9
|
-
columns :x, :y, :z, :id
|
|
10
|
-
set_restricted_columns :y
|
|
11
|
-
end
|
|
12
|
-
@c.strict_param_setting = false
|
|
13
|
-
@o1 = @c.new
|
|
14
|
-
DB.reset
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should raise errors if not all hash fields can be set and strict_param_setting is true" do
|
|
18
|
-
@c.strict_param_setting = true
|
|
19
|
-
proc{@c.new.set_except({:x => 1, :y => 2, :z=>3, :id=>4}, :x, :y)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
20
|
-
proc{@c.new.set_except({:x => 1, :y => 2, :z=>3}, :x, :y)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
21
|
-
(o = @c.new).set_except({:z => 3}, :x, :y)
|
|
22
|
-
o.values.must_equal(:z=>3)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "#set_except should not set given attributes or the primary key" do
|
|
26
|
-
@o1.set_except({:x => 1, :y => 2, :z=>3, :id=>4}, [:y, :z])
|
|
27
|
-
@o1.values.must_equal(:x => 1)
|
|
28
|
-
@o1.set_except({:x => 4, :y => 2, :z=>3, :id=>4}, :y, :z)
|
|
29
|
-
@o1.values.must_equal(:x => 4)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "#update_except should not update given attributes" do
|
|
33
|
-
@o1.update_except({:x => 1, :y => 2, :z=>3, :id=>4}, [:y, :z])
|
|
34
|
-
DB.sqls.must_equal ["INSERT INTO items (x) VALUES (1)", "SELECT * FROM items WHERE id = 10"]
|
|
35
|
-
@c.new.update_except({:x => 1, :y => 2, :z=>3, :id=>4}, :y, :z)
|
|
36
|
-
DB.sqls.must_equal ["INSERT INTO items (x) VALUES (1)", "SELECT * FROM items WHERE id = 10"]
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
describe Sequel::Model, ".restricted_columns " do
|
|
41
|
-
before do
|
|
42
|
-
@c = Class.new(Sequel::Model(:blahblah))
|
|
43
|
-
@c.class_eval do
|
|
44
|
-
plugin :blacklist_security
|
|
45
|
-
columns :x, :y, :z
|
|
46
|
-
end
|
|
47
|
-
@c.strict_param_setting = false
|
|
48
|
-
@c.instance_variable_set(:@columns, [:x, :y, :z])
|
|
49
|
-
DB.sqls
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should set the restricted columns correctly" do
|
|
53
|
-
@c.restricted_columns.must_be_nil
|
|
54
|
-
@c.set_restricted_columns :x
|
|
55
|
-
@c.restricted_columns.must_equal [:x]
|
|
56
|
-
@c.set_restricted_columns :x, :y
|
|
57
|
-
@c.restricted_columns.must_equal [:x, :y]
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "should not set restricted columns by default" do
|
|
61
|
-
@c.set_restricted_columns :z
|
|
62
|
-
i = @c.new(:x => 1, :y => 2, :z => 3)
|
|
63
|
-
i.values.must_equal(:x => 1, :y => 2)
|
|
64
|
-
i.set(:x => 4, :y => 5, :z => 6)
|
|
65
|
-
i.values.must_equal(:x => 4, :y => 5)
|
|
66
|
-
|
|
67
|
-
@c.dataset = @c.dataset.with_fetch(:x => 7)
|
|
68
|
-
i = @c.new
|
|
69
|
-
i.update(:x => 7, :z => 9)
|
|
70
|
-
i.values.must_equal(:x => 7)
|
|
71
|
-
DB.sqls.must_equal ["INSERT INTO blahblah (x) VALUES (7)", "SELECT * FROM blahblah WHERE id = 10"]
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "should have allowed take precedence over restricted" do
|
|
75
|
-
@c.plugin :whitelist_security
|
|
76
|
-
@c.set_allowed_columns :x, :y
|
|
77
|
-
@c.set_restricted_columns :y, :z
|
|
78
|
-
i = @c.new(:x => 1, :y => 2, :z => 3)
|
|
79
|
-
i.values.must_equal(:x => 1, :y => 2)
|
|
80
|
-
i.set(:x => 4, :y => 5, :z => 6)
|
|
81
|
-
i.values.must_equal(:x => 4, :y => 5)
|
|
82
|
-
|
|
83
|
-
@c.dataset = @c.dataset.with_fetch(:y => 7)
|
|
84
|
-
i = @c.new
|
|
85
|
-
i.update(:y => 7, :z => 9)
|
|
86
|
-
i.values.must_equal(:y => 7)
|
|
87
|
-
DB.sqls.must_equal ["INSERT INTO blahblah (y) VALUES (7)", "SELECT * FROM blahblah WHERE id = 10"]
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "should freeze restricted_columns when freezing class" do
|
|
91
|
-
@c.set_restricted_columns :z
|
|
92
|
-
@c.freeze
|
|
93
|
-
@c.restricted_columns.frozen?.must_equal true
|
|
94
|
-
end
|
|
95
|
-
end
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
Sequel.extension :blank
|
|
4
|
-
|
|
5
|
-
describe "Object#blank?" do
|
|
6
|
-
it "it should be true if the object responds true to empty?" do
|
|
7
|
-
[].blank?.must_equal true
|
|
8
|
-
{}.blank?.must_equal true
|
|
9
|
-
o = Object.new
|
|
10
|
-
def o.empty?; true; end
|
|
11
|
-
o.blank?.must_equal true
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "it should be false if the object doesn't respond true to empty?" do
|
|
15
|
-
[2].blank?.must_equal false
|
|
16
|
-
{1=>2}.blank?.must_equal false
|
|
17
|
-
Object.new.blank?.must_equal false
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
describe "Numeric#blank?" do
|
|
22
|
-
it "it should always be false" do
|
|
23
|
-
1.blank?.must_equal false
|
|
24
|
-
0.blank?.must_equal false
|
|
25
|
-
-1.blank?.must_equal false
|
|
26
|
-
1.0.blank?.must_equal false
|
|
27
|
-
0.0.blank?.must_equal false
|
|
28
|
-
-1.0.blank?.must_equal false
|
|
29
|
-
10000000000000000.blank?.must_equal false
|
|
30
|
-
-10000000000000000.blank?.must_equal false
|
|
31
|
-
10000000000000000.0.blank?.must_equal false
|
|
32
|
-
-10000000000000000.0.blank?.must_equal false
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
describe "NilClass#blank?" do
|
|
37
|
-
it "it should always be true" do
|
|
38
|
-
nil.blank?.must_equal true
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
describe "TrueClass#blank?" do
|
|
43
|
-
it "it should always be false" do
|
|
44
|
-
true.blank?.must_equal false
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
describe "FalseClass#blank?" do
|
|
49
|
-
it "it should always be true" do
|
|
50
|
-
false.blank?.must_equal true
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
describe "String#blank?" do
|
|
55
|
-
it "it should be true if the string is empty" do
|
|
56
|
-
''.blank?.must_equal true
|
|
57
|
-
end
|
|
58
|
-
it "it should be true if the string is composed of just whitespace" do
|
|
59
|
-
' '.blank?.must_equal true
|
|
60
|
-
"\r\n\t".blank?.must_equal true
|
|
61
|
-
(' '*4000).blank?.must_equal true
|
|
62
|
-
("\r\n\t"*4000).blank?.must_equal true
|
|
63
|
-
end
|
|
64
|
-
it "it should be false if the string has any non whitespace characters" do
|
|
65
|
-
'1'.blank?.must_equal false
|
|
66
|
-
("\r\n\t"*4000 + 'a').blank?.must_equal false
|
|
67
|
-
("\r\na\t"*4000).blank?.must_equal false
|
|
68
|
-
end
|
|
69
|
-
end
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe Sequel::Model, "BooleanReaders plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@db = Sequel.mock
|
|
6
|
-
def @db.supports_schema_parsing?() true end
|
|
7
|
-
def @db.schema(*args)
|
|
8
|
-
[[:id, {}], [:z, {:type=>:integer, :db_type=>'tinyint(1)'}], [:b, {:type=>:boolean, :db_type=>'boolean'}]]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
@c = Class.new(Sequel::Model(@db[:items]))
|
|
12
|
-
@p = proc do
|
|
13
|
-
@columns = [:id, :b, :z]
|
|
14
|
-
def columns; @columns; end
|
|
15
|
-
end
|
|
16
|
-
@c.instance_eval(&@p)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "should create attribute? readers for all boolean attributes" do
|
|
20
|
-
@c.plugin(:boolean_readers)
|
|
21
|
-
o = @c.new
|
|
22
|
-
o.b?.must_be_nil
|
|
23
|
-
o.b = '1'
|
|
24
|
-
o.b?.must_equal true
|
|
25
|
-
o.b = '0'
|
|
26
|
-
o.b?.must_equal false
|
|
27
|
-
o.b = ''
|
|
28
|
-
o.b?.must_be_nil
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "should not create attribute? readers for non-boolean attributes" do
|
|
32
|
-
@c.plugin(:boolean_readers)
|
|
33
|
-
proc{@c.new.z?}.must_raise(NoMethodError)
|
|
34
|
-
proc{@c.new.id?}.must_raise(NoMethodError)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "should accept a block to determine if an attribute is boolean" do
|
|
38
|
-
@c.plugin(:boolean_readers){|c| db_schema[c][:db_type] == 'tinyint(1)'}
|
|
39
|
-
proc{@c.new.b?}.must_raise(NoMethodError)
|
|
40
|
-
o = @c.new
|
|
41
|
-
o.z.must_be_nil
|
|
42
|
-
o.z?.must_be_nil
|
|
43
|
-
o.z = '1'
|
|
44
|
-
o.z.must_equal 1
|
|
45
|
-
o.z?.must_equal true
|
|
46
|
-
o.z = '0'
|
|
47
|
-
o.z.must_equal 0
|
|
48
|
-
o.z?.must_equal false
|
|
49
|
-
o.z = ''
|
|
50
|
-
o.z.must_be_nil
|
|
51
|
-
o.z?.must_be_nil
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "should create boolean readers when set_dataset is defined" do
|
|
55
|
-
c = Class.new(Sequel::Model(@db))
|
|
56
|
-
c.instance_eval(&@p)
|
|
57
|
-
c.plugin(:boolean_readers)
|
|
58
|
-
c.set_dataset(@db[:a])
|
|
59
|
-
o = c.new
|
|
60
|
-
o.b?.must_be_nil
|
|
61
|
-
o.b = '1'
|
|
62
|
-
o.b?.must_equal true
|
|
63
|
-
o.b = '0'
|
|
64
|
-
o.b?.must_equal false
|
|
65
|
-
o.b = ''
|
|
66
|
-
o.b?.must_be_nil
|
|
67
|
-
proc{o.i?}.must_raise(NoMethodError)
|
|
68
|
-
|
|
69
|
-
c = Class.new(Sequel::Model(@db))
|
|
70
|
-
c.instance_eval(&@p)
|
|
71
|
-
c.plugin(:boolean_readers){|x| db_schema[x][:db_type] == 'tinyint(1)'}
|
|
72
|
-
c.set_dataset(@db[:a])
|
|
73
|
-
o = c.new
|
|
74
|
-
o.z.must_be_nil
|
|
75
|
-
o.z?.must_be_nil
|
|
76
|
-
o.z = '1'
|
|
77
|
-
o.z.must_equal 1
|
|
78
|
-
o.z?.must_equal true
|
|
79
|
-
o.z = '0'
|
|
80
|
-
o.z.must_equal 0
|
|
81
|
-
o.z?.must_equal false
|
|
82
|
-
o.z = ''
|
|
83
|
-
o.z.must_be_nil
|
|
84
|
-
o.z?.must_be_nil
|
|
85
|
-
proc{o.b?}.must_raise(NoMethodError)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it "should handle cases where getting the columns raises an error" do
|
|
89
|
-
def @c.columns; raise Sequel::Error end
|
|
90
|
-
@c.plugin(:boolean_readers)
|
|
91
|
-
proc{@c.new.b?}.must_raise(NoMethodError)
|
|
92
|
-
end
|
|
93
|
-
end
|