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
@@ -7,14 +7,14 @@ module Sequel
|
|
7
7
|
#
|
8
8
|
# Album.plugin :input_transformer
|
9
9
|
# Album.add_input_transformer(:reverser){|v| v.is_a?(String) ? v.reverse : v}
|
10
|
-
# album = Album.new(:
|
10
|
+
# album = Album.new(name: 'foo')
|
11
11
|
# album.name # => 'oof'
|
12
12
|
#
|
13
13
|
# You can specifically set some columns to skip some input
|
14
14
|
# input transformers:
|
15
15
|
#
|
16
16
|
# Album.skip_input_transformer(:reverser, :foo)
|
17
|
-
# Album.new(:
|
17
|
+
# Album.new(foo: 'bar').foo # => 'bar'
|
18
18
|
#
|
19
19
|
# Usage:
|
20
20
|
#
|
@@ -25,9 +25,8 @@ module Sequel
|
|
25
25
|
# Album.plugin :input_transformer
|
26
26
|
module InputTransformer
|
27
27
|
def self.apply(model, *)
|
28
|
-
model.
|
28
|
+
model.instance_exec do
|
29
29
|
@input_transformers = {}
|
30
|
-
@input_transformer_order = []
|
31
30
|
@skip_input_transformer_columns = {}
|
32
31
|
end
|
33
32
|
end
|
@@ -42,23 +41,23 @@ module Sequel
|
|
42
41
|
# Hash of input transformer name symbols to transformer callables.
|
43
42
|
attr_reader :input_transformers
|
44
43
|
|
45
|
-
# The order in which to call the input transformers.
|
46
|
-
|
44
|
+
# The order in which to call the input transformers. For backwards compatibility only.
|
45
|
+
def input_transformer_order
|
46
|
+
input_transformers.keys.reverse
|
47
|
+
end
|
47
48
|
|
48
|
-
Plugins.inherited_instance_variables(self, :@skip_input_transformer_columns=>:hash_dup, :@input_transformers=>:dup
|
49
|
+
Plugins.inherited_instance_variables(self, :@skip_input_transformer_columns=>:hash_dup, :@input_transformers=>:dup)
|
49
50
|
|
50
51
|
# Add an input transformer to this model.
|
51
52
|
def add_input_transformer(transformer_name, &block)
|
52
53
|
raise(Error, 'must provide both transformer name and block when adding input transformer') unless transformer_name && block
|
53
54
|
@input_transformers[transformer_name] = block
|
54
|
-
@input_transformer_order.unshift(transformer_name)
|
55
55
|
@skip_input_transformer_columns[transformer_name] = []
|
56
56
|
end
|
57
57
|
|
58
58
|
# Freeze input transformers when freezing model class
|
59
59
|
def freeze
|
60
60
|
@input_transformers.freeze
|
61
|
-
@input_transformer_order.freeze
|
62
61
|
@skip_input_transformer_columns.freeze.each_value(&:freeze)
|
63
62
|
|
64
63
|
super
|
@@ -79,8 +78,8 @@ module Sequel
|
|
79
78
|
# Transform the input using all of the transformers, except those explicitly
|
80
79
|
# skipped, before setting the value in the model object.
|
81
80
|
def []=(k, v)
|
82
|
-
model.
|
83
|
-
v =
|
81
|
+
model.input_transformers.reverse_each do |name, transformer|
|
82
|
+
v = transformer.call(v) unless model.skip_input_transformer?(name, k)
|
84
83
|
end
|
85
84
|
super
|
86
85
|
end
|
@@ -21,7 +21,7 @@ module Sequel
|
|
21
21
|
# Modify the current model's dataset selection, if the model
|
22
22
|
# has a dataset.
|
23
23
|
def self.configure(model)
|
24
|
-
model.
|
24
|
+
model.instance_exec do
|
25
25
|
self.dataset = dataset if @dataset && @dataset.opts[:select]
|
26
26
|
end
|
27
27
|
end
|
@@ -30,14 +30,6 @@ module Sequel
|
|
30
30
|
# The dataset to use to insert new rows. For internal use only.
|
31
31
|
attr_reader :instance_insert_dataset
|
32
32
|
|
33
|
-
# Freeze instance insert dataset when freezing model class.
|
34
|
-
def freeze
|
35
|
-
super
|
36
|
-
|
37
|
-
@instance_insert_dataset.freeze if @instance_insert_dataset
|
38
|
-
self
|
39
|
-
end
|
40
|
-
|
41
33
|
private
|
42
34
|
|
43
35
|
# When reseting the instance dataset, also reset the instance_insert_dataset.
|
@@ -17,12 +17,12 @@ module Sequel
|
|
17
17
|
#
|
18
18
|
# # These are two separate objects that represent the same
|
19
19
|
# # database row.
|
20
|
-
# i1 = Item.first(:
|
21
|
-
# i2 = Item.first(:
|
20
|
+
# i1 = Item.first(id: 1, delete_allowed: false)
|
21
|
+
# i2 = Item.first(id: 1, delete_allowed: false)
|
22
22
|
#
|
23
23
|
# # Add an instance filter to the object. This filter is in effect
|
24
24
|
# # until the object is successfully updated or deleted.
|
25
|
-
# i1.instance_filter(:
|
25
|
+
# i1.instance_filter(delete_allowed: true)
|
26
26
|
#
|
27
27
|
# # Attempting to delete the object where the filter doesn't
|
28
28
|
# # match any rows raises an error.
|
@@ -30,7 +30,7 @@ module Sequel
|
|
30
30
|
#
|
31
31
|
# # The other object that represents the same row has no
|
32
32
|
# # instance filters, and can be updated normally.
|
33
|
-
# i2.update(:
|
33
|
+
# i2.update(delete_allowed: true)
|
34
34
|
#
|
35
35
|
# # Even though the filter is now still in effect, since the
|
36
36
|
# # database row has been updated to allow deleting,
|
@@ -123,7 +123,7 @@ module Sequel
|
|
123
123
|
# Only use prepared statements for update and delete queries
|
124
124
|
# if there are no instance filters.
|
125
125
|
def use_prepared_statements_for?(type)
|
126
|
-
if
|
126
|
+
if type == :update && !instance_filters.empty?
|
127
127
|
false
|
128
128
|
else
|
129
129
|
super if defined?(super)
|
@@ -28,31 +28,16 @@ module Sequel
|
|
28
28
|
# # Add the instance hook methods just to Album instances
|
29
29
|
# Album.plugin :instance_hooks
|
30
30
|
module InstanceHooks
|
31
|
-
BEFORE_HOOKS, AFTER_HOOKS = Sequel::Model::HOOKS.partition{|l| l.to_s.start_with?('before')}
|
32
|
-
Sequel::Deprecation.deprecate_constant(self, :BEFORE_HOOKS)
|
33
|
-
Sequel::Deprecation.deprecate_constant(self, :AFTER_HOOKS)
|
34
|
-
HOOKS = Sequel::Model::HOOKS
|
35
|
-
Sequel::Deprecation.deprecate_constant(self, :HOOKS)
|
36
|
-
|
37
|
-
# SEQUEL5: Remove
|
38
|
-
DEPRECATION_REPLACEMENTS = {
|
39
|
-
:after_commit=>"Use obj.after_save_hook{obj.db.after_commit{}} instead",
|
40
|
-
:after_destroy_commit=>"Use obj.after_destroy_hook{obj.db.after_commit{}} instead",
|
41
|
-
:after_destroy_rollback=>"Use obj.before_destroy_hook{obj.db.after_rollback{}} instead",
|
42
|
-
:after_rollback=>"Use obj.before_save_hook{obj.db.after_rollback{}} instead"
|
43
|
-
}.freeze
|
44
|
-
|
45
31
|
module InstanceMethods
|
46
32
|
Sequel::Model::HOOKS.each{|h| class_eval(<<-END , __FILE__, __LINE__+1)}
|
47
33
|
def #{h}_hook(&block)
|
48
|
-
#{"Sequel::Deprecation.deprecate('Sequel::Model##{h}_hook in the instance_hooks plugin', #{DEPRECATION_REPLACEMENTS[h].inspect})" if DEPRECATION_REPLACEMENTS[h]}
|
49
34
|
raise Sequel::Error, "can't add hooks to frozen object" if frozen?
|
50
35
|
add_instance_hook(:#{h}, &block)
|
51
36
|
self
|
52
37
|
end
|
53
38
|
END
|
54
39
|
|
55
|
-
[:before_create, :before_update, :before_validation].each{|h| class_eval("def #{h};
|
40
|
+
[:before_create, :before_update, :before_validation].each{|h| class_eval("def #{h}; run_before_instance_hooks(:#{h}) if @instance_hooks; super end", __FILE__, __LINE__)}
|
56
41
|
[:after_create, :after_update].each{|h| class_eval(<<-END, __FILE__, __LINE__ + 1)}
|
57
42
|
def #{h}
|
58
43
|
super
|
@@ -67,15 +52,9 @@ module Sequel
|
|
67
52
|
def after_destroy
|
68
53
|
super
|
69
54
|
return unless @instance_hooks
|
70
|
-
# SEQUEL5: Remove commit/rollback
|
71
|
-
if ad = @instance_hooks[:after_destroy_commit]
|
72
|
-
db.after_commit{ad.each(&:call)}
|
73
|
-
end
|
74
55
|
run_after_instance_hooks(:after_destroy)
|
75
56
|
@instance_hooks.delete(:after_destroy)
|
76
57
|
@instance_hooks.delete(:before_destroy)
|
77
|
-
@instance_hooks.delete(:after_destroy_commit)
|
78
|
-
@instance_hooks.delete(:after_destroy_rollback)
|
79
58
|
end
|
80
59
|
|
81
60
|
# Run after validation instance hooks.
|
@@ -89,39 +68,25 @@ module Sequel
|
|
89
68
|
def after_save
|
90
69
|
super
|
91
70
|
return unless @instance_hooks
|
92
|
-
# SEQUEL5: Remove commit/rollback
|
93
|
-
if (ac = @instance_hooks[:after_commit])
|
94
|
-
db.after_commit{ac.each(&:call)}
|
95
|
-
end
|
96
71
|
run_after_instance_hooks(:after_save)
|
97
72
|
@instance_hooks.delete(:after_save)
|
98
73
|
@instance_hooks.delete(:before_save)
|
99
74
|
@instance_hooks.delete(:after_validation)
|
100
75
|
@instance_hooks.delete(:before_validation)
|
101
|
-
@instance_hooks.delete(:after_commit)
|
102
|
-
@instance_hooks.delete(:after_rollback)
|
103
76
|
end
|
104
77
|
|
105
78
|
# Run before_destroy instance hooks.
|
106
79
|
def before_destroy
|
107
80
|
return super unless @instance_hooks
|
108
|
-
|
109
|
-
|
110
|
-
db.after_rollback{adr.each(&:call)}
|
111
|
-
end
|
112
|
-
# SEQUEL5: No false checking
|
113
|
-
run_before_instance_hooks(:before_destroy) == false ? false : super
|
81
|
+
run_before_instance_hooks(:before_destroy)
|
82
|
+
super
|
114
83
|
end
|
115
84
|
|
116
85
|
# Run before_save instance hooks.
|
117
86
|
def before_save
|
118
87
|
return super unless @instance_hooks
|
119
|
-
|
120
|
-
|
121
|
-
db.after_rollback{ar.each(&:call)}
|
122
|
-
end
|
123
|
-
# SEQUEL5: No false checking
|
124
|
-
run_before_instance_hooks(:before_save) == false ? false : super
|
88
|
+
run_before_instance_hooks(:before_save)
|
89
|
+
super
|
125
90
|
end
|
126
91
|
|
127
92
|
private
|
@@ -130,7 +95,7 @@ module Sequel
|
|
130
95
|
# the beginning of the instance hook's array. For after hooks, add it
|
131
96
|
# to the end.
|
132
97
|
def add_instance_hook(hook, &block)
|
133
|
-
instance_hooks(hook).
|
98
|
+
instance_hooks(hook).public_send(hook.to_s.start_with?('before') ? :unshift : :push, block)
|
134
99
|
end
|
135
100
|
|
136
101
|
# An array of instance level hook blocks for the given hook type.
|
@@ -143,17 +108,7 @@ module Sequel
|
|
143
108
|
def run_after_instance_hooks(hook)
|
144
109
|
instance_hooks(hook).each(&:call)
|
145
110
|
end
|
146
|
-
|
147
|
-
# Run all hook blocks of the given hook type. If a hook block returns false,
|
148
|
-
# immediately return false without running the remaining blocks.
|
149
|
-
def run_before_instance_hooks(hook)
|
150
|
-
instance_hooks(hook).each do |b|
|
151
|
-
if b.call == false
|
152
|
-
Sequel::Deprecation.deprecate("Having #{hook} instance hook block return false to stop evaluation of further #{hook} instance hook blocks", "Instead, call cancel_action inside #{hook} instance hook block")
|
153
|
-
return false
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
111
|
+
alias run_before_instance_hooks run_after_instance_hooks
|
157
112
|
end
|
158
113
|
end
|
159
114
|
end
|
@@ -18,7 +18,9 @@ module Sequel
|
|
18
18
|
# Album.plugin :inverted_subsets
|
19
19
|
#
|
20
20
|
# # This will now create two methods, published and not_published
|
21
|
-
# Album.
|
21
|
+
# Album.dataset_module do
|
22
|
+
# where :published, published: true
|
23
|
+
# end
|
22
24
|
#
|
23
25
|
# Album.published.sql
|
24
26
|
# # SELECT * FROM albums WHERE (published IS TRUE)
|
@@ -17,37 +17,37 @@ module Sequel
|
|
17
17
|
#
|
18
18
|
# In addition, you can provide options to control the JSON output:
|
19
19
|
#
|
20
|
-
# album.to_json(:
|
21
|
-
# album.to_json(:
|
20
|
+
# album.to_json(only: :name)
|
21
|
+
# album.to_json(except: [:id, :artist_id])
|
22
22
|
# # => '{"json_class"="Album","name"=>"RF"}'
|
23
23
|
#
|
24
|
-
# album.to_json(:
|
24
|
+
# album.to_json(include: :artist)
|
25
25
|
# # => '{"id":1,"name":"RF","artist_id":2,
|
26
26
|
# # "artist":{"id":2,"name":"YJM"}}'
|
27
27
|
#
|
28
28
|
# You can use a hash value with <tt>:include</tt> to pass options
|
29
29
|
# to associations:
|
30
30
|
#
|
31
|
-
# album.to_json(:
|
31
|
+
# album.to_json(include: {artist: {only: :name}})
|
32
32
|
# # => '{"id":1,"name":"RF","artist_id":2,
|
33
33
|
# # "artist":{"name":"YJM"}}'
|
34
34
|
#
|
35
|
-
# You can specify a name for a given association by
|
36
|
-
#
|
35
|
+
# You can specify a name for a given association by using an aliased
|
36
|
+
# expression as the key in the <tt>:include</tt> hash
|
37
37
|
#
|
38
|
-
# album.to_json(:
|
38
|
+
# album.to_json(include: {Sequel.as(:artist, :singer)=>{only: :name}})
|
39
39
|
# # => '{"id":1,"name":"RF","artist_id":2,
|
40
40
|
# # "singer":{"name":"YJM"}}'
|
41
41
|
#
|
42
42
|
# You can specify the <tt>:root</tt> option to nest the JSON under the
|
43
43
|
# name of the model:
|
44
44
|
#
|
45
|
-
# album.to_json(:
|
45
|
+
# album.to_json(root: true)
|
46
46
|
# # => '{"album":{"id":1,"name":"RF","artist_id":2}}'
|
47
47
|
#
|
48
48
|
# You can specify JSON serialization options to use later:
|
49
49
|
#
|
50
|
-
# album.json_serializer_opts(:
|
50
|
+
# album.json_serializer_opts(root: true)
|
51
51
|
# [album].to_json
|
52
52
|
# # => '[{"album":{"id":1,"name":"RF","artist_id":2}}]'
|
53
53
|
#
|
@@ -55,12 +55,12 @@ module Sequel
|
|
55
55
|
# of which return all objects in the dataset:
|
56
56
|
#
|
57
57
|
# Album.to_json
|
58
|
-
# Album.where(:
|
58
|
+
# Album.where(artist_id: 1).to_json(include: :tags)
|
59
59
|
#
|
60
60
|
# If you have an existing array of model instances you want to convert to
|
61
61
|
# JSON, you can call the class to_json method with the :array option:
|
62
62
|
#
|
63
|
-
# Album.to_json(:
|
63
|
+
# Album.to_json(array: [Album[1], Album[2]])
|
64
64
|
#
|
65
65
|
# All to_json methods take blocks, and if a block is given, it will yield
|
66
66
|
# the array or hash before serialization, and will serialize the value
|
@@ -77,7 +77,7 @@ module Sequel
|
|
77
77
|
# The array_from_json class method exists to parse arrays of model instances
|
78
78
|
# from json:
|
79
79
|
#
|
80
|
-
# json = Album.where(:
|
80
|
+
# json = Album.where(artist_id: 1).to_json
|
81
81
|
# albums = Album.array_from_json(json)
|
82
82
|
#
|
83
83
|
# These does not necessarily round trip, since doing so would let users
|
@@ -86,7 +86,7 @@ module Sequel
|
|
86
86
|
# fields, you can use the :fields option, which will call set_fields with
|
87
87
|
# the given fields:
|
88
88
|
#
|
89
|
-
# Album.from_json(album.to_json, :
|
89
|
+
# Album.from_json(album.to_json, fields: %w'id name')
|
90
90
|
#
|
91
91
|
# If you want to update an existing instance, you can use the from_json
|
92
92
|
# instance method:
|
@@ -96,11 +96,11 @@ module Sequel
|
|
96
96
|
# Both of these allow creation of cached associated objects, if you provide
|
97
97
|
# the :associations option:
|
98
98
|
#
|
99
|
-
# album.from_json(json, :
|
99
|
+
# album.from_json(json, associations: :artist)
|
100
100
|
#
|
101
101
|
# You can even provide options when setting up the associated objects:
|
102
102
|
#
|
103
|
-
# album.from_json(json, :
|
103
|
+
# album.from_json(json, associations: {artist: {fields: %w'id name', associations: :tags}})
|
104
104
|
#
|
105
105
|
# Note that active_support/json makes incompatible changes to the to_json API,
|
106
106
|
# and breaks some aspects of the json_serializer plugin. You can undo the damage
|
@@ -132,7 +132,7 @@ module Sequel
|
|
132
132
|
# Set up the column readers to do deserialization and the column writers
|
133
133
|
# to save the value in deserialized_values.
|
134
134
|
def self.configure(model, opts=OPTS)
|
135
|
-
model.
|
135
|
+
model.instance_exec do
|
136
136
|
@json_serializer_opts = (@json_serializer_opts || OPTS).merge(opts)
|
137
137
|
end
|
138
138
|
end
|
@@ -276,7 +276,7 @@ module Sequel
|
|
276
276
|
#
|
277
277
|
# Example:
|
278
278
|
#
|
279
|
-
# obj.json_serializer_opts(:
|
279
|
+
# obj.json_serializer_opts(only: :name)
|
280
280
|
# [obj].to_json # => '[{"name":"..."}]'
|
281
281
|
def json_serializer_opts(opts=OPTS)
|
282
282
|
@json_serializer_opts = Hash[@json_serializer_opts||OPTS].merge!(opts)
|
@@ -329,7 +329,7 @@ module Sequel
|
|
329
329
|
|
330
330
|
v = v.empty? ? [] : [v]
|
331
331
|
|
332
|
-
objs =
|
332
|
+
objs = public_send(k)
|
333
333
|
|
334
334
|
is_array = if r = model.association_reflection(k)
|
335
335
|
r.returns_array?
|
@@ -351,7 +351,7 @@ module Sequel
|
|
351
351
|
else
|
352
352
|
key_name = c.to_s
|
353
353
|
end
|
354
|
-
h[key_name] =
|
354
|
+
h[key_name] = public_send(c)
|
355
355
|
end
|
356
356
|
end
|
357
357
|
end
|
@@ -13,7 +13,7 @@ module Sequel
|
|
13
13
|
# get the reviews for all of those albums:
|
14
14
|
#
|
15
15
|
# Album.plugin :lazy_attributes, :review
|
16
|
-
# Album.where{id<100}.all do |a|
|
16
|
+
# Album.where{id < 100}.all do |a|
|
17
17
|
# a.review
|
18
18
|
# end
|
19
19
|
#
|
@@ -38,15 +38,6 @@ module Sequel
|
|
38
38
|
end
|
39
39
|
|
40
40
|
module ClassMethods
|
41
|
-
def lazy_attributes_module
|
42
|
-
Sequel::Deprecation.deprecate('Sequel::Model.lazy_attributes_module', 'There is no replacement')
|
43
|
-
@lazy_attributes_module
|
44
|
-
end
|
45
|
-
def lazy_attributes_module=(v)
|
46
|
-
Sequel::Deprecation.deprecate('Sequel::Model.lazy_attributes_module=', 'There is no replacement')
|
47
|
-
@lazy_attributes_module= v
|
48
|
-
end
|
49
|
-
|
50
41
|
# Freeze lazy attributes module when freezing model class.
|
51
42
|
def freeze
|
52
43
|
@lazy_attributes_module.freeze if @lazy_attributes_module
|
data/lib/sequel/plugins/list.rb
CHANGED
@@ -11,7 +11,7 @@ module Sequel
|
|
11
11
|
#
|
12
12
|
# class Item < Sequel::Model(:items)
|
13
13
|
# plugin :list # will use :position field for position
|
14
|
-
# plugin :list, :
|
14
|
+
# plugin :list, field: :pos # will use :pos field for position
|
15
15
|
# end
|
16
16
|
#
|
17
17
|
# item = Item[1]
|
@@ -38,7 +38,7 @@ module Sequel
|
|
38
38
|
# For example, if each item has a +user_id+ field, and you want every user
|
39
39
|
# to have their own list:
|
40
40
|
#
|
41
|
-
# Item.plugin :list, :
|
41
|
+
# Item.plugin :list, scope: :user_id
|
42
42
|
#
|
43
43
|
# Note that using this plugin modifies the order of the model's dataset to
|
44
44
|
# sort by the position and scope fields. Also note that this plugin is subject to
|
@@ -62,7 +62,7 @@ module Sequel
|
|
62
62
|
model.scope_proc = case scope = opts[:scope]
|
63
63
|
when Symbol
|
64
64
|
model.dataset = model.dataset.order_prepend(scope)
|
65
|
-
proc{|obj| obj.model.where(scope=>obj.
|
65
|
+
proc{|obj| obj.model.where(scope=>obj.public_send(scope))}
|
66
66
|
when Array
|
67
67
|
model.dataset = model.dataset.order_prepend(*scope)
|
68
68
|
proc{|obj| obj.model.where(scope.map{|s| [s, obj.get_column_value(s)]})}
|
@@ -170,17 +170,17 @@ module Sequel
|
|
170
170
|
self.next(n * -1)
|
171
171
|
end
|
172
172
|
|
173
|
-
private
|
174
|
-
|
175
173
|
# Set the value of the position_field to the maximum value plus 1 unless the
|
176
174
|
# position field already has a value.
|
177
|
-
def
|
175
|
+
def before_validation
|
178
176
|
unless get_column_value(position_field)
|
179
177
|
set_column_value("#{position_field}=", list_dataset.max(position_field).to_i+1)
|
180
178
|
end
|
181
179
|
super
|
182
180
|
end
|
183
181
|
|
182
|
+
private
|
183
|
+
|
184
184
|
# The model's position field, an instance method for ease of use.
|
185
185
|
def position_field
|
186
186
|
model.position_field
|