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
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
module Sequel
|
4
4
|
module Plugins
|
5
|
-
#
|
5
|
+
# The serialization plugin allows you to keep serialized
|
6
6
|
# ruby objects in the database, while giving you deserialized objects
|
7
7
|
# when you call an accessor.
|
8
8
|
#
|
9
9
|
# This plugin works by keeping the serialized value in the values, and
|
10
10
|
# adding a deserialized_values hash. The reader method for serialized columns
|
11
11
|
# will check the deserialized_values for the value, return it if present,
|
12
|
-
# or
|
13
|
-
# set the deserialized_values entry. This plugin adds a
|
12
|
+
# or deserialize the entry in values and return it. The writer method will
|
13
|
+
# set the deserialized_values entry. This plugin adds a before_validation hook
|
14
14
|
# that serializes all deserialized_values to values.
|
15
15
|
#
|
16
16
|
# You can specify the serialization format as a pair of serializer/deserializer
|
@@ -37,9 +37,7 @@ module Sequel
|
|
37
37
|
#
|
38
38
|
# # Register custom serializer/deserializer pair, if desired
|
39
39
|
# require 'sequel/plugins/serialization'
|
40
|
-
# Sequel::Plugins::Serialization.register_format(:reverse,
|
41
|
-
# lambda(&:reverse),
|
42
|
-
# lambda(&:reverse))
|
40
|
+
# Sequel::Plugins::Serialization.register_format(:reverse, :reverse.to_proc, :reverse.to_proc)
|
43
41
|
#
|
44
42
|
# class User < Sequel::Model
|
45
43
|
# # Built-in format support when loading the plugin
|
@@ -53,10 +51,10 @@ module Sequel
|
|
53
51
|
# serialize_attributes :reverse, :password
|
54
52
|
#
|
55
53
|
# # Use a custom serializer/deserializer pair without registering
|
56
|
-
# serialize_attributes [
|
54
|
+
# serialize_attributes [:reverse.to_proc, :reverse.to_proc], :password
|
57
55
|
# end
|
58
56
|
# user = User.create
|
59
|
-
# user.permissions = {
|
57
|
+
# user.permissions = {global: 'read-only'}
|
60
58
|
# user.save
|
61
59
|
#
|
62
60
|
# Note that if you mutate serialized column values without reassigning them,
|
@@ -77,7 +75,7 @@ module Sequel
|
|
77
75
|
# Set up the column readers to do deserialization and the column writers
|
78
76
|
# to save the value in deserialized_values.
|
79
77
|
def self.apply(model, *args)
|
80
|
-
model.
|
78
|
+
model.instance_exec do
|
81
79
|
@deserialization_map = {}
|
82
80
|
@serialization_map = {}
|
83
81
|
end
|
@@ -93,7 +91,7 @@ module Sequel
|
|
93
91
|
# models to pick this format by name. Both serializer and deserializer
|
94
92
|
# should be callable objects.
|
95
93
|
def self.register_format(format, serializer, deserializer)
|
96
|
-
REGISTERED_FORMATS[format] = [serializer, deserializer]
|
94
|
+
Sequel.synchronize{REGISTERED_FORMATS[format] = [serializer, deserializer].freeze}
|
97
95
|
end
|
98
96
|
register_format(:marshal, lambda{|v| [Marshal.dump(v)].pack('m')},
|
99
97
|
lambda do |v|
|
@@ -101,8 +99,8 @@ module Sequel
|
|
101
99
|
v = v.unpack('m')[0] unless v[0..1] == "\x04\x08"
|
102
100
|
Marshal.load(v)
|
103
101
|
end)
|
104
|
-
register_format(:yaml,
|
105
|
-
register_format(:json,
|
102
|
+
register_format(:yaml, :to_yaml.to_proc, lambda{|s| YAML.load(s)})
|
103
|
+
register_format(:json, Sequel.method(:object_to_json), Sequel.method(:parse_json))
|
106
104
|
|
107
105
|
module ClassMethods
|
108
106
|
# A hash with column name symbols and callable values, with the value
|
@@ -113,15 +111,6 @@ module Sequel
|
|
113
111
|
# called to serialize the column.
|
114
112
|
attr_reader :serialization_map
|
115
113
|
|
116
|
-
def serialization_module
|
117
|
-
Sequel::Deprecation.deprecate('Sequel::Model.serialization_module', 'There is no replacement')
|
118
|
-
@serialization_module
|
119
|
-
end
|
120
|
-
def serialization_module=(v)
|
121
|
-
Sequel::Deprecation.deprecate('Sequel::Model.serialization_module=', 'There is no replacement')
|
122
|
-
@serialization_module = v
|
123
|
-
end
|
124
|
-
|
125
114
|
Plugins.inherited_instance_variables(self, :@deserialization_map=>:dup, :@serialization_map=>:dup)
|
126
115
|
|
127
116
|
# Freeze serialization metadata when freezing model class.
|
@@ -137,8 +126,8 @@ module Sequel
|
|
137
126
|
# and instance level writer that stores new deserialized values.
|
138
127
|
def serialize_attributes(format, *columns)
|
139
128
|
if format.is_a?(Symbol)
|
140
|
-
unless format = REGISTERED_FORMATS[format]
|
141
|
-
raise(Error, "Unsupported serialization format: #{format} (valid formats: #{REGISTERED_FORMATS.keys.map(&:inspect).join})")
|
129
|
+
unless format = Sequel.synchronize{REGISTERED_FORMATS[format]}
|
130
|
+
raise(Error, "Unsupported serialization format: #{format} (valid formats: #{Sequel.synchronize{REGISTERED_FORMATS.keys}.map(&:inspect).join})")
|
142
131
|
end
|
143
132
|
end
|
144
133
|
serializer, deserializer = format
|
@@ -146,13 +135,6 @@ module Sequel
|
|
146
135
|
define_serialized_attribute_accessor(serializer, deserializer, *columns)
|
147
136
|
end
|
148
137
|
|
149
|
-
# The columns that will be serialized. This is only for
|
150
|
-
# backwards compatibility, use serialization_map in new code.
|
151
|
-
def serialized_columns
|
152
|
-
Sequel::Deprecation.deprecate("#{self}.serialized_columns in the serialization plugin", "Use #{self}.serialization_map.keys instead")
|
153
|
-
serialization_map.keys
|
154
|
-
end
|
155
|
-
|
156
138
|
private
|
157
139
|
|
158
140
|
# Add serializated attribute acessor methods to the serialization_module
|
@@ -198,14 +180,14 @@ module Sequel
|
|
198
180
|
super
|
199
181
|
end
|
200
182
|
|
201
|
-
private
|
202
|
-
|
203
183
|
# Serialize deserialized values before saving
|
204
|
-
def
|
184
|
+
def before_validation
|
205
185
|
serialize_deserialized_values
|
206
186
|
super
|
207
187
|
end
|
208
188
|
|
189
|
+
private
|
190
|
+
|
209
191
|
# Clear any cached deserialized values when doing a manual refresh.
|
210
192
|
def _refresh_set_values(hash)
|
211
193
|
@deserialized_values.clear if @deserialized_values
|
@@ -22,7 +22,7 @@ module Sequel
|
|
22
22
|
# plugin :serialization, :json, :permissions
|
23
23
|
# plugin :serialization_modification_detection
|
24
24
|
# end
|
25
|
-
# user = User.create(:
|
25
|
+
# user = User.create(permissions: {})
|
26
26
|
# user.permissions[:global] = 'read-only'
|
27
27
|
# user.save_changes
|
28
28
|
module SerializationModificationDetection
|
@@ -5,10 +5,9 @@ module Sequel
|
|
5
5
|
# The sharding plugin augments Sequel's default model sharding support
|
6
6
|
# in the following ways:
|
7
7
|
#
|
8
|
-
# * It automatically
|
8
|
+
# * It automatically saves model instances back to the
|
9
9
|
# shard they were retreived from.
|
10
|
-
# * It makes model associations use the same shard as the model
|
11
|
-
# object.
|
10
|
+
# * It makes model associations use the same shard as the model object.
|
12
11
|
# * It adds a slightly nicer API for creating model instances on
|
13
12
|
# specific shards.
|
14
13
|
#
|
@@ -83,11 +82,6 @@ module Sequel
|
|
83
82
|
nil
|
84
83
|
end
|
85
84
|
|
86
|
-
# Mark that associated objects should use the same server.
|
87
|
-
def _associated_objects_use_same_server?
|
88
|
-
true
|
89
|
-
end
|
90
|
-
|
91
85
|
# Ensure that the join table for many_to_many associations uses the correct shard.
|
92
86
|
def _join_table_dataset(opts)
|
93
87
|
use_server(super)
|
@@ -39,11 +39,11 @@ module Sequel
|
|
39
39
|
# # Using integers to store the class type, with a :model_map hash
|
40
40
|
# # and an sti_key of :type
|
41
41
|
# Employee.plugin :single_table_inheritance, :type,
|
42
|
-
# :
|
42
|
+
# model_map: {1=>:Staff, 2=>:Manager}
|
43
43
|
#
|
44
44
|
# # Using non-class name strings
|
45
45
|
# Employee.plugin :single_table_inheritance, :type,
|
46
|
-
# :
|
46
|
+
# model_map: {'line staff'=>:Staff, 'supervisor'=>:Manager}
|
47
47
|
#
|
48
48
|
# # By default the plugin sets the respective column value
|
49
49
|
# # when a new instance is created.
|
@@ -53,22 +53,22 @@ module Sequel
|
|
53
53
|
# # You can customize this behavior with the :key_chooser option.
|
54
54
|
# # This is most useful when using a non-bijective mapping.
|
55
55
|
# Employee.plugin :single_table_inheritance, :type,
|
56
|
-
# :
|
57
|
-
# :
|
56
|
+
# model_map: {'line staff'=>:Staff, 'supervisor'=>:Manager},
|
57
|
+
# key_chooser: lambda{|instance| instance.model.sti_key_map[instance.model.to_s].first || 'stranger'}
|
58
58
|
#
|
59
59
|
# # Using custom procs, with :model_map taking column values
|
60
60
|
# # and yielding either a class, string, symbol, or nil,
|
61
61
|
# # and :key_map taking a class object and returning the column
|
62
62
|
# # value to use
|
63
63
|
# Employee.plugin :single_table_inheritance, :type,
|
64
|
-
# :
|
65
|
-
# :
|
64
|
+
# model_map: :reverse.to_proc,
|
65
|
+
# key_map: lambda{|klass| klass.name.reverse}
|
66
66
|
#
|
67
67
|
# # You can use the same class for multiple values.
|
68
68
|
# # This is mainly useful when the sti_key column contains multiple values
|
69
69
|
# # which are different but do not require different code.
|
70
70
|
# Employee.plugin :single_table_inheritance, :type,
|
71
|
-
# :
|
71
|
+
# model_map: {'staff' => "Staff",
|
72
72
|
# 'manager' => "Manager",
|
73
73
|
# 'overpayed staff' => "Staff",
|
74
74
|
# 'underpayed staff' => "Staff"}
|
@@ -80,7 +80,7 @@ module Sequel
|
|
80
80
|
module SingleTableInheritance
|
81
81
|
# Setup the necessary STI variables, see the module RDoc for SingleTableInheritance
|
82
82
|
def self.configure(model, key, opts=OPTS)
|
83
|
-
model.
|
83
|
+
model.instance_exec do
|
84
84
|
@sti_key_array = nil
|
85
85
|
@sti_key = key
|
86
86
|
@sti_dataset = dataset
|
@@ -156,7 +156,6 @@ module Sequel
|
|
156
156
|
# because of how STI works, you should not freeze an STI subclass
|
157
157
|
# until after all subclasses of it have been created.
|
158
158
|
def freeze
|
159
|
-
@sti_dataset.freeze
|
160
159
|
@sti_key_array.freeze if @sti_key_array
|
161
160
|
@sti_key_map.freeze if @sti_key_map.is_a?(Hash)
|
162
161
|
@sti_model_map.freeze if @sti_model_map.is_a?(Hash)
|
@@ -172,7 +171,7 @@ module Sequel
|
|
172
171
|
sti_subclass_added(key)
|
173
172
|
rp = dataset.row_proc
|
174
173
|
subclass.set_dataset(sti_subclass_dataset(key), :inherited=>true)
|
175
|
-
subclass.
|
174
|
+
subclass.instance_exec do
|
176
175
|
@dataset = @dataset.with_row_proc(rp)
|
177
176
|
@sti_key_array = key
|
178
177
|
self.simple_table = nil
|
@@ -244,10 +243,8 @@ module Sequel
|
|
244
243
|
end
|
245
244
|
|
246
245
|
module InstanceMethods
|
247
|
-
private
|
248
|
-
|
249
246
|
# Set the sti_key column based on the sti_key_map.
|
250
|
-
def
|
247
|
+
def before_validation
|
251
248
|
if new? && model.sti_key && !self[model.sti_key]
|
252
249
|
set_column_value("#{model.sti_key}=", model.sti_key_chooser.call(self))
|
253
250
|
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
module Sequel
|
4
4
|
module Plugins
|
5
|
-
#
|
5
|
+
# The skip_create_refresh plugin skips the
|
6
6
|
# refresh after saving a new model object. Sequel does the
|
7
|
-
# refresh to make sure all columns are populated, which is
|
7
|
+
# refresh by default to make sure all columns are populated, which is
|
8
8
|
# necessary so that database defaults work correctly.
|
9
9
|
#
|
10
10
|
# This plugin is mostly for performance reasons where you
|
@@ -12,7 +12,7 @@ module Sequel
|
|
12
12
|
# but it could also help cases where records are not
|
13
13
|
# immediately available for selection after insertion.
|
14
14
|
#
|
15
|
-
# Note that Sequel does not attempt to refresh records when
|
15
|
+
# Note that Sequel by default does not attempt to refresh records when
|
16
16
|
# updating existing model objects, only when inserting new
|
17
17
|
# model objects.
|
18
18
|
#
|
@@ -10,12 +10,12 @@ module Sequel
|
|
10
10
|
# are frozen so they won't be modified unexpectedly, and before hooks disallow
|
11
11
|
# saving or destroying instances.
|
12
12
|
#
|
13
|
-
# You can use the :
|
13
|
+
# You can use the frozen: false option to have this plugin return unfrozen
|
14
14
|
# instances. This is slower as it requires creating new objects, but it allows
|
15
15
|
# you to make changes to the object and save them. If you set the option to false,
|
16
16
|
# you are responsible for updating the cache manually (the pg_static_cache_updater
|
17
17
|
# extension can handle this automatically). Note that it is not safe to use the
|
18
|
-
# :
|
18
|
+
# frozen: false option if you are mutating column values directly. If you are
|
19
19
|
# mutating column values, you should also override Model.call to dup each mutable
|
20
20
|
# column value to ensure it is not shared by other instances.
|
21
21
|
#
|
@@ -37,9 +37,9 @@ module Sequel
|
|
37
37
|
#
|
38
38
|
# # Cache the AlbumType class statically, but return unfrozen instances
|
39
39
|
# # that can be modified.
|
40
|
-
# AlbumType.plugin :static_cache, :
|
40
|
+
# AlbumType.plugin :static_cache, frozen: false
|
41
41
|
#
|
42
|
-
# If you would like the speed benefits of keeping :
|
42
|
+
# If you would like the speed benefits of keeping frozen: true but still need
|
43
43
|
# to occasionally update objects, you can side-step the before_ hooks by
|
44
44
|
# overriding the class method +static_cache_allow_modifications?+ to return true:
|
45
45
|
#
|
@@ -54,14 +54,13 @@ module Sequel
|
|
54
54
|
# Now if you +#dup+ a Model object (the resulting object is not frozen), you
|
55
55
|
# will be able to update and save the duplicate.
|
56
56
|
# Note the caveats around your responsibility to update the cache still applies.
|
57
|
-
#
|
58
57
|
module StaticCache
|
59
58
|
# Populate the static caches when loading the plugin. Options:
|
60
59
|
# :frozen :: Whether retrieved model objects are frozen. The default is true,
|
61
60
|
# for better performance as the shared frozen objects can be used
|
62
61
|
# directly. If set to false, new instances are created.
|
63
62
|
def self.configure(model, opts=OPTS)
|
64
|
-
model.
|
63
|
+
model.instance_exec do
|
65
64
|
@static_cache_frozen = opts.fetch(:frozen, true)
|
66
65
|
load_cache
|
67
66
|
end
|
@@ -216,7 +215,7 @@ module Sequel
|
|
216
215
|
@cache = h.freeze
|
217
216
|
end
|
218
217
|
|
219
|
-
# If :
|
218
|
+
# If frozen: false is not used, just return the argument. Otherwise,
|
220
219
|
# create a new instance with the arguments values if the argument is
|
221
220
|
# not nil.
|
222
221
|
def static_cache_object(o)
|
@@ -229,13 +228,13 @@ module Sequel
|
|
229
228
|
end
|
230
229
|
|
231
230
|
module InstanceMethods
|
232
|
-
# Disallowing destroying the object unless the :
|
231
|
+
# Disallowing destroying the object unless the frozen: false option was used.
|
233
232
|
def before_destroy
|
234
233
|
cancel_action("modifying model objects that use the static_cache plugin is not allowed") unless model.static_cache_allow_modifications?
|
235
234
|
super
|
236
235
|
end
|
237
236
|
|
238
|
-
# Disallowing saving the object unless the :
|
237
|
+
# Disallowing saving the object unless the frozen: false option was used.
|
239
238
|
def before_save
|
240
239
|
cancel_action("modifying model objects that use the static_cache plugin is not allowed") unless model.static_cache_allow_modifications?
|
241
240
|
super
|
@@ -5,7 +5,7 @@ module Sequel
|
|
5
5
|
# StringStripper is a plugin that strips all input strings
|
6
6
|
# when assigning to the model's values. Example:
|
7
7
|
#
|
8
|
-
# album = Album.new(:
|
8
|
+
# album = Album.new(name: ' A ')
|
9
9
|
# album.name # => 'A'
|
10
10
|
#
|
11
11
|
# SQL::Blob instances and all non-strings are not modified by
|
@@ -14,7 +14,7 @@ module Sequel
|
|
14
14
|
# other columns to skip the stripping:
|
15
15
|
#
|
16
16
|
# Album.skip_string_stripping :foo
|
17
|
-
# Album.new(:
|
17
|
+
# Album.new(foo: ' A ').foo # => ' A '
|
18
18
|
#
|
19
19
|
# Usage:
|
20
20
|
#
|
@@ -28,7 +28,7 @@ module Sequel
|
|
28
28
|
model.plugin(:input_transformer, :string_stripper){|v| (v.is_a?(String) && !v.is_a?(SQL::Blob)) ? v.strip : v}
|
29
29
|
end
|
30
30
|
def self.configure(model)
|
31
|
-
model.
|
31
|
+
model.instance_exec{set_skipped_string_stripping_columns if @dataset}
|
32
32
|
end
|
33
33
|
|
34
34
|
module ClassMethods
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Sequel
|
4
4
|
module Plugins
|
5
|
-
# The
|
5
|
+
# The subclasses plugin keeps track of all subclasses of the
|
6
6
|
# current model class. Direct subclasses are available via the
|
7
7
|
# subclasses method, and all descendent classes are available via the
|
8
8
|
# descendents method:
|
@@ -14,7 +14,7 @@ module Sequel
|
|
14
14
|
#
|
15
15
|
# # This will now create a published_conditions method
|
16
16
|
# Album.dataset_module do
|
17
|
-
# subset :published, :
|
17
|
+
# subset :published, published: true
|
18
18
|
# end
|
19
19
|
#
|
20
20
|
# Album.where(Album.published_conditions).sql
|
@@ -23,7 +23,7 @@ module Sequel
|
|
23
23
|
# Album.exclude(Album.published_conditions).sql
|
24
24
|
# # SELECT * FROM albums WHERE (published IS NOT TRUE)
|
25
25
|
#
|
26
|
-
# Album.where(
|
26
|
+
# Album.where(Album.published_conditions | {ready: true}).sql
|
27
27
|
# # SELECT * FROM albums WHERE ((published IS TRUE) OR (ready IS TRUE))
|
28
28
|
module SubsetConditions
|
29
29
|
def self.apply(mod, &block)
|
@@ -20,7 +20,7 @@ module Sequel
|
|
20
20
|
# Modify the current model's dataset selection, if the model
|
21
21
|
# has a dataset.
|
22
22
|
def self.configure(model)
|
23
|
-
model.
|
23
|
+
model.instance_exec do
|
24
24
|
self.dataset = dataset if @dataset
|
25
25
|
end
|
26
26
|
end
|
@@ -32,7 +32,7 @@ module Sequel
|
|
32
32
|
# has no explicit selection, select table.* from that table.
|
33
33
|
def convert_input_dataset(ds)
|
34
34
|
ds = super
|
35
|
-
|
35
|
+
unless ds.opts[:select]
|
36
36
|
ds = ds.select_all(ds.first_source)
|
37
37
|
end
|
38
38
|
ds
|
@@ -4,7 +4,7 @@ module Sequel
|
|
4
4
|
module Plugins
|
5
5
|
# The tactical_eager_loading plugin allows you to eagerly load
|
6
6
|
# an association for all objects retrieved from the same dataset
|
7
|
-
# without calling eager on the dataset. If you attempt to load
|
7
|
+
# without calling +eager+ on the dataset. If you attempt to load
|
8
8
|
# associated objects for a record and the association for that
|
9
9
|
# object is currently not cached, it assumes you want to get
|
10
10
|
# the associated objects for all objects retrieved with the dataset that
|
@@ -40,7 +40,7 @@ module Sequel
|
|
40
40
|
#
|
41
41
|
# # Eagerly reload all artists for these albums
|
42
42
|
# # SELECT * FROM artists WHERE id IN (...)
|
43
|
-
# albums.first.artists(:
|
43
|
+
# albums.first.artists(eager_reload: true)
|
44
44
|
#
|
45
45
|
# You can also use the :eager option to specify dependent associations
|
46
46
|
# to eager load:
|
@@ -50,7 +50,7 @@ module Sequel
|
|
50
50
|
# # Eager load all artists for these albums, and all albums for those artists
|
51
51
|
# # SELECT * FROM artists WHERE id IN (...)
|
52
52
|
# # SELECT * FROM albums WHERE artist_id IN (...)
|
53
|
-
# albums.first.artists(:
|
53
|
+
# albums.first.artists(eager: :albums)
|
54
54
|
#
|
55
55
|
# You can also use :eager to specify an eager callback. For example:
|
56
56
|
#
|
@@ -58,7 +58,7 @@ module Sequel
|
|
58
58
|
#
|
59
59
|
# # Eagerly load all artists whose name starts with A-M for these albums
|
60
60
|
# # SELECT * FROM artists WHERE name > 'N' AND id IN (...)
|
61
|
-
# albums.first.artists(:
|
61
|
+
# albums.first.artists(eager: lambda{|ds| ds.where(Sequel[:name] > 'N')})
|
62
62
|
#
|
63
63
|
# Usage:
|
64
64
|
#
|
@@ -15,11 +15,11 @@ module Sequel
|
|
15
15
|
# Sequel::Model.plugin :timestamps
|
16
16
|
#
|
17
17
|
# # Timestamp Album instances, with custom column names
|
18
|
-
# Album.plugin :timestamps, :
|
18
|
+
# Album.plugin :timestamps, create: :created_on, update: :updated_on
|
19
19
|
#
|
20
20
|
# # Timestamp Artist instances, forcing an overwrite of the create
|
21
21
|
# # timestamp, and setting the update timestamp when creating
|
22
|
-
# Album.plugin :timestamps, :
|
22
|
+
# Album.plugin :timestamps, force: true, update_on_create: true
|
23
23
|
module Timestamps
|
24
24
|
# Configure the plugin by setting the available options. Note that
|
25
25
|
# if this method is run more than once, previous settings are ignored,
|
@@ -30,7 +30,7 @@ module Sequel
|
|
30
30
|
# :update :: The field to hold the update timestamp (default: :updated_at)
|
31
31
|
# :update_on_create :: Whether to set the update timestamp to the create timestamp when creating (default: false)
|
32
32
|
def self.configure(model, opts=OPTS)
|
33
|
-
model.
|
33
|
+
model.instance_exec do
|
34
34
|
@allow_manual_timestamp_update = opts[:allow_manual_update]||false
|
35
35
|
@create_timestamp_field = opts[:create]||:created_at
|
36
36
|
@update_timestamp_field = opts[:update]||:updated_at
|
@@ -58,7 +58,6 @@ module Sequel
|
|
58
58
|
:@set_update_timestamp_on_create=>nil,
|
59
59
|
:@update_timestamp_field=>nil)
|
60
60
|
|
61
|
-
|
62
61
|
# Whether to allow manual setting of the update timestamp when creating
|
63
62
|
def allow_manual_timestamp_update?
|
64
63
|
@allow_manual_timestamp_update
|
@@ -77,14 +76,14 @@ module Sequel
|
|
77
76
|
super
|
78
77
|
end
|
79
78
|
|
80
|
-
private
|
81
|
-
|
82
79
|
# Set the create timestamp when creating
|
83
|
-
def
|
80
|
+
def before_validation
|
84
81
|
set_create_timestamp if new?
|
85
82
|
super
|
86
83
|
end
|
87
84
|
|
85
|
+
private
|
86
|
+
|
88
87
|
# If the object has accessor methods for the create timestamp field, and
|
89
88
|
# the create timestamp value is nil or overwriting it is allowed, set the
|
90
89
|
# create timestamp field to the time given or the current time. If setting
|