sequel 4.49.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +70 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +3 -5
- data/doc/advanced_associations.rdoc +86 -163
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/schema_modification.rdoc +63 -60
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +3 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel.rb +1 -1
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc.rb +13 -73
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +4 -25
- data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/oracle.rb +7 -13
- data/lib/sequel/adapters/postgres.rb +13 -57
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +23 -224
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +44 -259
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +12 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool.rb +26 -28
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +23 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +89 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/dataset/actions.rb +53 -107
- data/lib/sequel/dataset/dataset_module.rb +3 -15
- data/lib/sequel/dataset/features.rb +30 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +71 -155
- data/lib/sequel/dataset/sql.rb +30 -225
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +23 -40
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +2 -15
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/model/associations.rb +128 -131
- data/lib/sequel/model/base.rb +171 -711
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -22
- data/lib/sequel/version.rb +2 -2
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +101 -480
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +312 -565
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +64 -244
- data/spec/core/dataset_spec.rb +81 -415
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +176 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +74 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +4 -59
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +1 -7
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +1 -1
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +1 -1
- data/spec/extensions/migration_spec.rb +2 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +1 -1
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +4 -1
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +23 -32
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +1 -1
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +1 -1
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +1 -1
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +2 -14
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +3 -3
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +1 -1
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -12
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +3 -3
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +5 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +6 -22
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +6 -6
- data/spec/integration/spec_helper.rb +13 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +18 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +17 -11
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +15 -320
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +29 -121
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +8 -64
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
data/spec/model/model_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative "spec_helper"
|
2
2
|
|
3
3
|
describe "Sequel::Model()" do
|
4
4
|
before do
|
@@ -109,14 +109,6 @@ describe "Sequel::Model()" do
|
|
109
109
|
Object.send(:remove_const, :Album) if defined?(::Album)
|
110
110
|
end
|
111
111
|
|
112
|
-
deprecated "Sequel.cache_anonymous_models should return value for Sequel::Model" do
|
113
|
-
Sequel.cache_anonymous_models.must_equal true
|
114
|
-
Sequel::Model.cache_anonymous_models = false
|
115
|
-
Sequel.cache_anonymous_models.must_equal false
|
116
|
-
Sequel.cache_anonymous_models = true
|
117
|
-
Sequel.cache_anonymous_models.must_equal true
|
118
|
-
end
|
119
|
-
|
120
112
|
it "should work without raising an exception with a symbol" do
|
121
113
|
class ::Album < Sequel::Model(:table); end
|
122
114
|
class ::Album < Sequel::Model(:table); end
|
@@ -185,12 +177,7 @@ end
|
|
185
177
|
describe "Sequel::Model.freeze" do
|
186
178
|
it "should freeze the model class and not allow any changes" do
|
187
179
|
model = Class.new(Sequel::Model(:items))
|
188
|
-
deprecated do
|
189
|
-
model.set_allowed_columns [:id]
|
190
|
-
model.finder(:name=>:f_by_name){|pl, ds| ds.where(:name=>pl.arg).limit(1)}
|
191
|
-
end
|
192
180
|
model.freeze
|
193
|
-
model.f_by_name(1)
|
194
181
|
|
195
182
|
model.frozen?.must_equal true
|
196
183
|
model.dataset.frozen?.must_equal true
|
@@ -201,11 +188,7 @@ describe "Sequel::Model.freeze" do
|
|
201
188
|
model.send(:overridable_methods_module).frozen?.must_equal true
|
202
189
|
model.default_set_fields_options.frozen?.must_equal true
|
203
190
|
|
204
|
-
proc{model.dataset_module{}}.must_raise RuntimeError
|
205
|
-
deprecated do
|
206
|
-
model.allowed_columns.frozen?.must_equal true
|
207
|
-
proc{model.finder(:name=>:first_by_name){|pl, ds| ds.where(:name=>pl.arg).limit(1)}}.must_raise RuntimeError, TypeError
|
208
|
-
end
|
191
|
+
proc{model.dataset_module{}}.must_raise RuntimeError
|
209
192
|
end
|
210
193
|
|
211
194
|
it "should freeze a model class without a dataset without breaking" do
|
@@ -219,10 +202,7 @@ describe "Sequel::Model.freeze" do
|
|
219
202
|
model.send(:overridable_methods_module).frozen?.must_equal true
|
220
203
|
model.default_set_fields_options.frozen?.must_equal true
|
221
204
|
|
222
|
-
proc{model.dataset_module{}}.must_raise RuntimeError
|
223
|
-
deprecated do
|
224
|
-
proc{model.finder(:name=>:first_by_name){|pl, ds| ds.where(:name=>pl.arg).limit(1)}}.must_raise RuntimeError, TypeError
|
225
|
-
end
|
205
|
+
proc{model.dataset_module{}}.must_raise RuntimeError
|
226
206
|
end
|
227
207
|
|
228
208
|
it "should allow subclasses of frozen model classes to work correctly" do
|
@@ -233,14 +213,8 @@ describe "Sequel::Model.freeze" do
|
|
233
213
|
|
234
214
|
model.dataset_module{}
|
235
215
|
model.plugin Module.new
|
236
|
-
deprecated do
|
237
|
-
model.finder(:name=>:first_by_name){|pl, ds| ds.where(:name=>pl.arg).limit(1)}
|
238
|
-
end
|
239
|
-
model.first_by_name('a').values.must_equal(:id=>1, :x=>1)
|
240
|
-
model.dataset.frozen?.must_equal false
|
241
216
|
|
242
217
|
model.frozen?.must_equal false
|
243
|
-
model.dataset.frozen?.must_equal false
|
244
218
|
model.db_schema.frozen?.must_equal false
|
245
219
|
model.db_schema[:id].frozen?.must_equal false
|
246
220
|
model.setter_methods.frozen?.must_equal false
|
@@ -279,15 +253,10 @@ describe Sequel::Model do
|
|
279
253
|
DB.reset
|
280
254
|
end
|
281
255
|
|
282
|
-
deprecated "should allow dup/clone" do
|
283
|
-
@model.dup.must_be :<, @model.superclass
|
284
|
-
@model.clone.must_be :<, @model.superclass
|
285
|
-
end
|
286
|
-
|
287
256
|
it "should not allow dup/clone" do
|
288
|
-
proc{@model.dup}.must_raise
|
289
|
-
proc{@model.clone}.must_raise
|
290
|
-
end
|
257
|
+
proc{@model.dup}.must_raise NoMethodError
|
258
|
+
proc{@model.clone}.must_raise NoMethodError
|
259
|
+
end
|
291
260
|
|
292
261
|
it "has table_name return name of table" do
|
293
262
|
@model.table_name.must_equal :items
|
@@ -328,6 +297,13 @@ describe Sequel::Model do
|
|
328
297
|
proc{@model.set_dataset(Object.new)}.must_raise(Sequel::Error)
|
329
298
|
end
|
330
299
|
|
300
|
+
it "set_dataset should use a subquery for joined datasets" do
|
301
|
+
@model.set_dataset(DB.from(:foo, :bar))
|
302
|
+
@model.dataset.sql.must_equal 'SELECT * FROM (SELECT * FROM foo, bar) AS foo'
|
303
|
+
@model.set_dataset(DB[:foo].cross_join(:bar))
|
304
|
+
@model.dataset.sql.must_equal 'SELECT * FROM (SELECT * FROM foo CROSS JOIN bar) AS foo'
|
305
|
+
end
|
306
|
+
|
331
307
|
it "set_dataset should add the destroy method to the dataset that destroys each object" do
|
332
308
|
ds = DB[:foo]
|
333
309
|
ds.wont_respond_to(:destroy)
|
@@ -490,11 +466,10 @@ describe Sequel::Model, ".require_valid_table = true" do
|
|
490
466
|
c.columns.must_equal [:id]
|
491
467
|
end
|
492
468
|
|
493
|
-
|
469
|
+
it "should assume nil value is the same as false" do
|
494
470
|
c = Class.new(Sequel::Model)
|
495
471
|
c.require_valid_table = nil
|
496
|
-
ds = @db.dataset
|
497
|
-
def ds.columns; raise Sequel::Error; end
|
472
|
+
ds = @db.dataset.with_extend{def columns; raise Sequel::Error; end}
|
498
473
|
c.set_dataset(ds)
|
499
474
|
end
|
500
475
|
end
|
@@ -575,36 +550,6 @@ describe Sequel::Model, "new" do
|
|
575
550
|
end
|
576
551
|
end
|
577
552
|
|
578
|
-
describe Sequel::Model, ".subset" do
|
579
|
-
before do
|
580
|
-
@c = Class.new(Sequel::Model(:items))
|
581
|
-
DB.reset
|
582
|
-
end
|
583
|
-
|
584
|
-
deprecated "should create a filter on the underlying dataset" do
|
585
|
-
proc {@c.new_only}.must_raise(NoMethodError)
|
586
|
-
|
587
|
-
@c.subset(:new_only){age < 'new'}
|
588
|
-
|
589
|
-
@c.new_only.sql.must_equal "SELECT * FROM items WHERE (age < 'new')"
|
590
|
-
@c.dataset.new_only.sql.must_equal "SELECT * FROM items WHERE (age < 'new')"
|
591
|
-
|
592
|
-
@c.subset(:pricey){price > 100}
|
593
|
-
|
594
|
-
@c.pricey.sql.must_equal "SELECT * FROM items WHERE (price > 100)"
|
595
|
-
@c.dataset.pricey.sql.must_equal "SELECT * FROM items WHERE (price > 100)"
|
596
|
-
|
597
|
-
@c.pricey.new_only.sql.must_equal "SELECT * FROM items WHERE ((price > 100) AND (age < 'new'))"
|
598
|
-
@c.new_only.pricey.sql.must_equal "SELECT * FROM items WHERE ((age < 'new') AND (price > 100))"
|
599
|
-
end
|
600
|
-
|
601
|
-
deprecated "should not override existing model methods" do
|
602
|
-
def @c.active() true end
|
603
|
-
@c.subset(:active, :active)
|
604
|
-
@c.active.must_equal true
|
605
|
-
end
|
606
|
-
end
|
607
|
-
|
608
553
|
describe Sequel::Model, ".find" do
|
609
554
|
before do
|
610
555
|
@c = Class.new(Sequel::Model(:items))
|
@@ -629,242 +574,6 @@ describe Sequel::Model, ".find" do
|
|
629
574
|
end
|
630
575
|
end
|
631
576
|
|
632
|
-
describe Sequel::Model, ".first_where" do
|
633
|
-
deprecated "should take a condition and do a lookup" do
|
634
|
-
db = Sequel.mock(:fetch=>[])
|
635
|
-
c = Class.new(Sequel::Model(db[:items]))
|
636
|
-
db.sqls
|
637
|
-
c.first_where(:a)
|
638
|
-
db.sqls.must_equal ['SELECT * FROM items WHERE a LIMIT 1']
|
639
|
-
proc{c.first_where(1)}.must_raise Sequel::Error
|
640
|
-
end
|
641
|
-
end
|
642
|
-
|
643
|
-
describe Sequel::Model, ".finder" do
|
644
|
-
before do
|
645
|
-
@h = {:id=>1}
|
646
|
-
@db = Sequel.mock(:fetch=>@h)
|
647
|
-
@c = Class.new(Sequel::Model(@db[:items]))
|
648
|
-
@c.instance_eval do
|
649
|
-
def foo(a, b)
|
650
|
-
where(:bar=>a).order(b)
|
651
|
-
end
|
652
|
-
end
|
653
|
-
@o = @c.load(@h)
|
654
|
-
@db.sqls
|
655
|
-
end
|
656
|
-
|
657
|
-
deprecated "should create a method that calls the method given and returns the first instance" do
|
658
|
-
@c.finder :foo
|
659
|
-
@c.first_foo(1, 2).must_equal @o
|
660
|
-
@c.first_foo(3, 4).must_equal @o
|
661
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
|
662
|
-
end
|
663
|
-
|
664
|
-
deprecated "should work correctly when subclassing" do
|
665
|
-
@c.finder(:foo)
|
666
|
-
@sc = Class.new(@c)
|
667
|
-
@sc.set_dataset :foos
|
668
|
-
@db.sqls
|
669
|
-
@sc.first_foo(1, 2).must_equal @sc.load(@h)
|
670
|
-
@sc.first_foo(3, 4).must_equal @sc.load(@h)
|
671
|
-
@db.sqls.must_equal ["SELECT * FROM foos WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
|
672
|
-
end
|
673
|
-
|
674
|
-
deprecated "should work correctly when dataset is modified" do
|
675
|
-
@c.finder(:foo)
|
676
|
-
@c.first_foo(1, 2).must_equal @o
|
677
|
-
@c.set_dataset :foos
|
678
|
-
@c.first_foo(3, 4).must_equal @o
|
679
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM foos LIMIT 1", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
|
680
|
-
end
|
681
|
-
|
682
|
-
deprecated "should create a method based on the given block if no method symbol provided" do
|
683
|
-
@c.finder(:name=>:first_foo){|pl, ds| ds.where(pl.arg).limit(1)}
|
684
|
-
@c.first_foo(:id=>1).must_equal @o
|
685
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (id = 1) LIMIT 1"]
|
686
|
-
end
|
687
|
-
|
688
|
-
deprecated "should raise an error if both a block and method symbol given" do
|
689
|
-
proc{@c.finder(:foo, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
|
690
|
-
end
|
691
|
-
|
692
|
-
deprecated "should raise an error if two option hashes are provided" do
|
693
|
-
proc{@c.finder({:name2=>:foo}, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
|
694
|
-
end
|
695
|
-
|
696
|
-
deprecated "should support :type option" do
|
697
|
-
@c.finder :foo, :type=>:all
|
698
|
-
@c.finder :foo, :type=>:each
|
699
|
-
@c.finder :foo, :type=>:get
|
700
|
-
|
701
|
-
a = []
|
702
|
-
@c.all_foo(1, 2){|r| a << r}.must_equal [@o]
|
703
|
-
a.must_equal [@o]
|
704
|
-
|
705
|
-
a = []
|
706
|
-
@c.each_foo(3, 4){|r| a << r}
|
707
|
-
a.must_equal [@o]
|
708
|
-
|
709
|
-
@c.get_foo(5, 6).must_equal 1
|
710
|
-
|
711
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4", "SELECT * FROM items WHERE (bar = 5) ORDER BY 6 LIMIT 1"]
|
712
|
-
end
|
713
|
-
|
714
|
-
deprecated "should support :name option" do
|
715
|
-
@c.finder :foo, :name=>:find_foo
|
716
|
-
@c.find_foo(1, 2).must_equal @o
|
717
|
-
@c.find_foo(3, 4).must_equal @o
|
718
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
|
719
|
-
end
|
720
|
-
|
721
|
-
deprecated "should support :arity option" do
|
722
|
-
def @c.foobar(*b)
|
723
|
-
ds = dataset
|
724
|
-
b.each_with_index do |a, i|
|
725
|
-
ds = ds.where(i=>a)
|
726
|
-
end
|
727
|
-
ds
|
728
|
-
end
|
729
|
-
@c.finder :foobar, :arity=>1, :name=>:find_foobar_1
|
730
|
-
@c.finder :foobar, :arity=>2, :name=>:find_foobar_2
|
731
|
-
@c.find_foobar_1(:a)
|
732
|
-
@c.find_foobar_2(:a, :b)
|
733
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (0 = a) LIMIT 1", "SELECT * FROM items WHERE ((0 = a) AND (1 = b)) LIMIT 1"]
|
734
|
-
end
|
735
|
-
|
736
|
-
deprecated "should support :mod option" do
|
737
|
-
m = Module.new
|
738
|
-
@c.finder :foo, :mod=>m
|
739
|
-
proc{@c.first_foo}.must_raise NoMethodError
|
740
|
-
@c.extend m
|
741
|
-
@c.first_foo(1, 2).must_equal @o
|
742
|
-
@c.first_foo(3, 4).must_equal @o
|
743
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
|
744
|
-
end
|
745
|
-
|
746
|
-
deprecated "should raise error when calling with the wrong arity" do
|
747
|
-
@c.finder :foo
|
748
|
-
proc{@c.first_foo(1)}.must_raise Sequel::Error
|
749
|
-
proc{@c.first_foo(1,2,3)}.must_raise Sequel::Error
|
750
|
-
end
|
751
|
-
end
|
752
|
-
|
753
|
-
describe Sequel::Model, ".prepared_finder" do
|
754
|
-
before do
|
755
|
-
@h = {:id=>1}
|
756
|
-
@db = Sequel.mock(:fetch=>@h)
|
757
|
-
@db.extend_datasets do
|
758
|
-
def select_sql
|
759
|
-
sql = super
|
760
|
-
sql << ' -- prepared' if is_a?(Sequel::Dataset::PreparedStatementMethods)
|
761
|
-
sql
|
762
|
-
end
|
763
|
-
end
|
764
|
-
@c = Class.new(Sequel::Model(@db[:items]))
|
765
|
-
@c.instance_eval do
|
766
|
-
def foo(a, b)
|
767
|
-
where(:bar=>a).order(b)
|
768
|
-
end
|
769
|
-
end
|
770
|
-
@o = @c.load(@h)
|
771
|
-
@db.sqls
|
772
|
-
end
|
773
|
-
|
774
|
-
deprecated "should create a method that calls the method given and returns the first instance" do
|
775
|
-
@c.prepared_finder :foo
|
776
|
-
@c.first_foo(1, 2).must_equal @o
|
777
|
-
@c.first_foo(3, 4).must_equal @o
|
778
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
779
|
-
end
|
780
|
-
|
781
|
-
deprecated "should work correctly when subclassing" do
|
782
|
-
@c.prepared_finder(:foo)
|
783
|
-
@sc = Class.new(@c)
|
784
|
-
@sc.set_dataset :foos
|
785
|
-
@db.sqls
|
786
|
-
@sc.first_foo(1, 2).must_equal @sc.load(@h)
|
787
|
-
@sc.first_foo(3, 4).must_equal @sc.load(@h)
|
788
|
-
@db.sqls.must_equal ["SELECT * FROM foos WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
789
|
-
end
|
790
|
-
|
791
|
-
deprecated "should work correctly when dataset is modified" do
|
792
|
-
@c.prepared_finder(:foo)
|
793
|
-
@c.first_foo(1, 2).must_equal @o
|
794
|
-
@c.set_dataset :foos
|
795
|
-
@c.first_foo(3, 4).must_equal @o
|
796
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM foos LIMIT 1", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
797
|
-
end
|
798
|
-
|
799
|
-
deprecated "should create a method based on the given block if no method symbol provided" do
|
800
|
-
@c.prepared_finder(:name=>:first_foo){|a1| where(:id=>a1).limit(1)}
|
801
|
-
@c.first_foo(1).must_equal @o
|
802
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (id = 1) LIMIT 1 -- prepared"]
|
803
|
-
end
|
804
|
-
|
805
|
-
deprecated "should raise an error if both a block and method symbol given" do
|
806
|
-
proc{@c.prepared_finder(:foo, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
|
807
|
-
end
|
808
|
-
|
809
|
-
deprecated "should raise an error if two option hashes are provided" do
|
810
|
-
proc{@c.prepared_finder({:name2=>:foo}, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
|
811
|
-
end
|
812
|
-
|
813
|
-
deprecated "should support :type option" do
|
814
|
-
@c.prepared_finder :foo, :type=>:all
|
815
|
-
@c.prepared_finder :foo, :type=>:each
|
816
|
-
|
817
|
-
a = []
|
818
|
-
@c.all_foo(1, 2){|r| a << r}.must_equal [@o]
|
819
|
-
a.must_equal [@o]
|
820
|
-
|
821
|
-
a = []
|
822
|
-
@c.each_foo(3, 4){|r| a << r}
|
823
|
-
a.must_equal [@o]
|
824
|
-
|
825
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 -- prepared"]
|
826
|
-
end
|
827
|
-
|
828
|
-
deprecated "should support :name option" do
|
829
|
-
@c.prepared_finder :foo, :name=>:find_foo
|
830
|
-
@c.find_foo(1, 2).must_equal @o
|
831
|
-
@c.find_foo(3, 4).must_equal @o
|
832
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
833
|
-
end
|
834
|
-
|
835
|
-
deprecated "should support :arity option" do
|
836
|
-
def @c.foobar(*b)
|
837
|
-
ds = dataset
|
838
|
-
b.each_with_index do |a, i|
|
839
|
-
ds = ds.where(i=>a)
|
840
|
-
end
|
841
|
-
ds
|
842
|
-
end
|
843
|
-
@c.prepared_finder :foobar, :arity=>1, :name=>:find_foobar_1
|
844
|
-
@c.prepared_finder :foobar, :arity=>2, :name=>:find_foobar_2
|
845
|
-
@c.find_foobar_1(:a)
|
846
|
-
@c.find_foobar_2(:a, :b)
|
847
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (0 = a) LIMIT 1 -- prepared", "SELECT * FROM items WHERE ((0 = a) AND (1 = b)) LIMIT 1 -- prepared"]
|
848
|
-
end
|
849
|
-
|
850
|
-
deprecated "should support :mod option" do
|
851
|
-
m = Module.new
|
852
|
-
@c.prepared_finder :foo, :mod=>m
|
853
|
-
proc{@c.first_foo}.must_raise NoMethodError
|
854
|
-
@c.extend m
|
855
|
-
@c.first_foo(1, 2).must_equal @o
|
856
|
-
@c.first_foo(3, 4).must_equal @o
|
857
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
858
|
-
end
|
859
|
-
|
860
|
-
deprecated "should handle models with names" do
|
861
|
-
def @c.name; 'foobar' end
|
862
|
-
@c.prepared_finder :foo
|
863
|
-
@c.first_foo(1, 2).must_equal @o
|
864
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared"]
|
865
|
-
end
|
866
|
-
end
|
867
|
-
|
868
577
|
describe Sequel::Model, ".fetch" do
|
869
578
|
before do
|
870
579
|
DB.reset
|
@@ -1046,12 +755,6 @@ describe Sequel::Model, ".[]" do
|
|
1046
755
|
DB.sqls.must_equal ["SELECT * FROM items WHERE name = 'sharon'"]
|
1047
756
|
end
|
1048
757
|
|
1049
|
-
deprecated "should use a qualified primary key if the dataset is joined" do
|
1050
|
-
@c.dataset = @c.dataset.cross_join(:a)
|
1051
|
-
@c[1].must_equal @c.load(:name => 'sharon', :id => 1)
|
1052
|
-
DB.sqls.must_equal ["SELECT * FROM items CROSS JOIN a WHERE (items.id = 1) LIMIT 1"]
|
1053
|
-
end
|
1054
|
-
|
1055
758
|
it "should handle a dataset that uses a subquery" do
|
1056
759
|
@c.dataset = @c.dataset.cross_join(:a).from_self(:alias=>:b)
|
1057
760
|
@c[1].must_equal @c.load(:name => 'sharon', :id => 1)
|
@@ -1122,14 +825,6 @@ describe "Model.db_schema" do
|
|
1122
825
|
@c.db_schema.must_equal(:x=>{:type=>:integer}, :z=>{}, :y=>{:type=>:string})
|
1123
826
|
end
|
1124
827
|
|
1125
|
-
deprecated "should not raise error if setting dataset where getting schema and columns raises an error" do
|
1126
|
-
def @db.schema(table, opts={})
|
1127
|
-
raise Sequel::Error
|
1128
|
-
end
|
1129
|
-
@c.dataset = @dataset.join(:x, :id).from_self.columns(:id, :x)
|
1130
|
-
@c.db_schema.must_equal(:x=>{}, :id=>{})
|
1131
|
-
end
|
1132
|
-
|
1133
828
|
it "should not raise error if setting dataset where getting schema and columns raises an error and require_valid_table is false" do
|
1134
829
|
@c.require_valid_table = false
|
1135
830
|
def @db.schema(table, opts={})
|
data/spec/model/plugins_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative "spec_helper"
|
2
2
|
|
3
3
|
describe Sequel::Model, ".plugin" do
|
4
4
|
before do
|
@@ -307,7 +307,7 @@ describe "Sequel::Model.plugin" do
|
|
307
307
|
it "should try loading plugins from sequel/plugins/:plugin" do
|
308
308
|
a = []
|
309
309
|
m = Module.new
|
310
|
-
|
310
|
+
@c.define_singleton_method(:require) do |b|
|
311
311
|
a << b
|
312
312
|
Sequel::Plugins.const_set(:SomethingOrOther, m)
|
313
313
|
end
|
@@ -315,18 +315,4 @@ describe "Sequel::Model.plugin" do
|
|
315
315
|
@c.plugins.must_include m
|
316
316
|
a.must_equal ['sequel/plugins/something_or_other']
|
317
317
|
end
|
318
|
-
|
319
|
-
deprecated "should try loading plugins from sequel_plugin" do
|
320
|
-
proc{@c.plugin :something_or_other}.must_raise(LoadError)
|
321
|
-
a = []
|
322
|
-
m = Module.new
|
323
|
-
(class << @c; self end).send(:define_method, :require) do |b|
|
324
|
-
a << b
|
325
|
-
raise LoadError if b == 'sequel/plugins/something_or_other'
|
326
|
-
Sequel::Plugins.const_set(:SomethingOrOther, m)
|
327
|
-
end
|
328
|
-
@c.plugin :something_or_other
|
329
|
-
@c.plugins.must_include m
|
330
|
-
a.must_equal ['sequel/plugins/something_or_other', 'sequel_something_or_other']
|
331
|
-
end
|
332
318
|
end
|