sequel 4.26.0 → 5.37.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 +5 -5
- data/CHANGELOG +405 -5656
- data/MIT-LICENSE +1 -1
- data/README.rdoc +232 -157
- data/bin/sequel +32 -9
- data/doc/advanced_associations.rdoc +252 -188
- data/doc/association_basics.rdoc +231 -273
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +75 -48
- data/doc/code_order.rdoc +28 -10
- data/doc/core_extensions.rdoc +104 -63
- data/doc/dataset_basics.rdoc +12 -21
- data/doc/dataset_filtering.rdoc +99 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +72 -46
- data/doc/model_dataset_method_design.rdoc +129 -0
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +12 -12
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +59 -69
- data/doc/opening_databases.rdoc +84 -94
- data/doc/postgresql.rdoc +268 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +184 -164
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.10.0.txt +84 -0
- data/doc/release_notes/5.11.0.txt +83 -0
- data/doc/release_notes/5.12.0.txt +141 -0
- data/doc/release_notes/5.13.0.txt +27 -0
- data/doc/release_notes/5.14.0.txt +63 -0
- data/doc/release_notes/5.15.0.txt +39 -0
- data/doc/release_notes/5.16.0.txt +110 -0
- data/doc/release_notes/5.17.0.txt +31 -0
- data/doc/release_notes/5.18.0.txt +69 -0
- data/doc/release_notes/5.19.0.txt +28 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.20.0.txt +89 -0
- data/doc/release_notes/5.21.0.txt +87 -0
- data/doc/release_notes/5.22.0.txt +48 -0
- data/doc/release_notes/5.23.0.txt +56 -0
- data/doc/release_notes/5.24.0.txt +56 -0
- data/doc/release_notes/5.25.0.txt +32 -0
- data/doc/release_notes/5.26.0.txt +35 -0
- data/doc/release_notes/5.27.0.txt +21 -0
- data/doc/release_notes/5.28.0.txt +16 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.7.0.txt +108 -0
- data/doc/release_notes/5.8.0.txt +170 -0
- data/doc/release_notes/5.9.0.txt +99 -0
- data/doc/schema_modification.rdoc +102 -77
- data/doc/security.rdoc +160 -87
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +135 -122
- data/doc/testing.rdoc +34 -18
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +101 -19
- data/doc/validations.rdoc +64 -51
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel.rb +3 -1
- data/lib/sequel/adapters/ado.rb +154 -22
- data/lib/sequel/adapters/ado/access.rb +21 -21
- data/lib/sequel/adapters/ado/mssql.rb +8 -15
- data/lib/sequel/adapters/amalgalite.rb +17 -25
- data/lib/sequel/adapters/ibmdb.rb +52 -58
- data/lib/sequel/adapters/jdbc.rb +149 -127
- data/lib/sequel/adapters/jdbc/db2.rb +32 -40
- data/lib/sequel/adapters/jdbc/derby.rb +56 -58
- data/lib/sequel/adapters/jdbc/h2.rb +40 -30
- data/lib/sequel/adapters/jdbc/hsqldb.rb +22 -33
- data/lib/sequel/adapters/jdbc/jtds.rb +4 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +6 -12
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -18
- data/lib/sequel/adapters/jdbc/oracle.rb +25 -19
- data/lib/sequel/adapters/jdbc/postgresql.rb +90 -69
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +14 -24
- data/lib/sequel/adapters/jdbc/sqlite.rb +50 -12
- data/lib/sequel/adapters/jdbc/sqlserver.rb +36 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +25 -39
- data/lib/sequel/adapters/mock.rb +104 -113
- data/lib/sequel/adapters/mysql.rb +42 -61
- data/lib/sequel/adapters/mysql2.rb +126 -35
- data/lib/sequel/adapters/odbc.rb +21 -28
- data/lib/sequel/adapters/odbc/db2.rb +3 -1
- data/lib/sequel/adapters/odbc/mssql.rb +11 -15
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/oracle.rb +62 -68
- data/lib/sequel/adapters/postgres.rb +257 -311
- data/lib/sequel/adapters/postgresql.rb +3 -1
- data/lib/sequel/adapters/shared/access.rb +75 -79
- data/lib/sequel/adapters/shared/db2.rb +96 -74
- data/lib/sequel/adapters/shared/mssql.rb +258 -213
- data/lib/sequel/adapters/shared/mysql.rb +284 -216
- data/lib/sequel/adapters/shared/oracle.rb +175 -60
- data/lib/sequel/adapters/shared/postgres.rb +829 -383
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -127
- data/lib/sequel/adapters/shared/sqlite.rb +382 -159
- data/lib/sequel/adapters/sqlanywhere.rb +53 -38
- data/lib/sequel/adapters/sqlite.rb +111 -105
- data/lib/sequel/adapters/tinytds.rb +38 -46
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -9
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +7 -5
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
- data/lib/sequel/adapters/utils/replace.rb +3 -4
- data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +13 -89
- data/lib/sequel/connection_pool.rb +54 -26
- data/lib/sequel/connection_pool/sharded_single.rb +19 -12
- data/lib/sequel/connection_pool/sharded_threaded.rb +160 -111
- data/lib/sequel/connection_pool/single.rb +21 -12
- data/lib/sequel/connection_pool/threaded.rb +137 -119
- data/lib/sequel/core.rb +352 -320
- data/lib/sequel/database.rb +19 -2
- data/lib/sequel/database/connecting.rb +70 -55
- data/lib/sequel/database/dataset.rb +15 -5
- data/lib/sequel/database/dataset_defaults.rb +20 -102
- data/lib/sequel/database/features.rb +20 -4
- data/lib/sequel/database/logging.rb +25 -7
- data/lib/sequel/database/misc.rb +132 -118
- data/lib/sequel/database/query.rb +51 -28
- data/lib/sequel/database/schema_generator.rb +188 -75
- data/lib/sequel/database/schema_methods.rb +161 -92
- data/lib/sequel/database/transactions.rb +260 -58
- data/lib/sequel/dataset.rb +28 -12
- data/lib/sequel/dataset/actions.rb +354 -170
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +81 -34
- data/lib/sequel/dataset/graph.rb +82 -58
- data/lib/sequel/dataset/misc.rb +139 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +66 -26
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +428 -214
- data/lib/sequel/dataset/sql.rb +446 -339
- data/lib/sequel/deprecated.rb +14 -2
- data/lib/sequel/exceptions.rb +48 -16
- data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
- data/lib/sequel/extensions/_model_pg_row.rb +43 -0
- data/lib/sequel/extensions/_pretty_table.rb +10 -9
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +15 -11
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +2 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +9 -4
- data/lib/sequel/extensions/connection_expiration.rb +99 -0
- data/lib/sequel/extensions/connection_validator.rb +26 -13
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +93 -38
- data/lib/sequel/extensions/core_extensions.rb +45 -53
- data/lib/sequel/extensions/core_refinements.rb +44 -46
- data/lib/sequel/extensions/current_datetime_timestamp.rb +5 -4
- data/lib/sequel/extensions/dataset_source_alias.rb +4 -0
- data/lib/sequel/extensions/date_arithmetic.rb +42 -16
- data/lib/sequel/extensions/datetime_parse_to_time.rb +37 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +94 -0
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -3
- data/lib/sequel/extensions/error_sql.rb +7 -3
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +14 -15
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/freeze_datasets.rb +3 -0
- data/lib/sequel/extensions/from_block.rb +2 -31
- data/lib/sequel/extensions/graph_each.rb +19 -6
- data/lib/sequel/extensions/identifier_mangling.rb +180 -0
- data/lib/sequel/extensions/implicit_subquery.rb +48 -0
- data/lib/sequel/extensions/index_caching.rb +109 -0
- data/lib/sequel/extensions/inflector.rb +8 -4
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/looser_typecasting.rb +19 -9
- data/lib/sequel/extensions/migration.rb +132 -80
- data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +4 -0
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +4 -0
- data/lib/sequel/extensions/null_dataset.rb +12 -8
- data/lib/sequel/extensions/pagination.rb +35 -28
- data/lib/sequel/extensions/pg_array.rb +227 -316
- data/lib/sequel/extensions/pg_array_ops.rb +19 -7
- data/lib/sequel/extensions/pg_enum.rb +69 -24
- data/lib/sequel/extensions/pg_extended_date_support.rb +250 -0
- data/lib/sequel/extensions/pg_hstore.rb +50 -59
- data/lib/sequel/extensions/pg_hstore_ops.rb +9 -3
- data/lib/sequel/extensions/pg_inet.rb +34 -15
- data/lib/sequel/extensions/pg_inet_ops.rb +5 -1
- data/lib/sequel/extensions/pg_interval.rb +26 -26
- data/lib/sequel/extensions/pg_json.rb +422 -141
- data/lib/sequel/extensions/pg_json_ops.rb +248 -9
- data/lib/sequel/extensions/pg_loose_count.rb +5 -1
- data/lib/sequel/extensions/pg_range.rb +162 -146
- data/lib/sequel/extensions/pg_range_ops.rb +10 -5
- data/lib/sequel/extensions/pg_row.rb +53 -87
- data/lib/sequel/extensions/pg_row_ops.rb +36 -13
- data/lib/sequel/extensions/pg_static_cache_updater.rb +6 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/pretty_table.rb +4 -0
- data/lib/sequel/extensions/query.rb +12 -7
- data/lib/sequel/extensions/round_timestamps.rb +6 -9
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +59 -0
- data/lib/sequel/extensions/schema_caching.rb +14 -1
- data/lib/sequel/extensions/schema_dumper.rb +83 -55
- data/lib/sequel/extensions/select_remove.rb +8 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +50 -17
- data/lib/sequel/extensions/server_logging.rb +61 -0
- data/lib/sequel/extensions/split_array_nil.rb +8 -4
- data/lib/sequel/extensions/sql_comments.rb +96 -0
- data/lib/sequel/extensions/sql_expr.rb +4 -1
- data/lib/sequel/extensions/string_agg.rb +181 -0
- data/lib/sequel/extensions/string_date_time.rb +2 -0
- data/lib/sequel/extensions/symbol_aref.rb +53 -0
- data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
- data/lib/sequel/extensions/symbol_as.rb +23 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +4 -0
- data/lib/sequel/extensions/to_dot.rb +15 -5
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model.rb +36 -126
- data/lib/sequel/model/associations.rb +850 -257
- data/lib/sequel/model/base.rb +652 -764
- data/lib/sequel/model/dataset_module.rb +13 -10
- data/lib/sequel/model/default_inflections.rb +3 -1
- data/lib/sequel/model/errors.rb +3 -3
- data/lib/sequel/model/exceptions.rb +12 -12
- data/lib/sequel/model/inflections.rb +8 -19
- data/lib/sequel/model/plugins.rb +111 -0
- data/lib/sequel/plugins/accessed_columns.rb +2 -0
- data/lib/sequel/plugins/active_model.rb +32 -7
- data/lib/sequel/plugins/after_initialize.rb +3 -1
- data/lib/sequel/plugins/association_dependencies.rb +27 -18
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
- data/lib/sequel/plugins/association_pks.rb +181 -83
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/auto_validations.rb +58 -23
- data/lib/sequel/plugins/before_after_save.rb +8 -0
- data/lib/sequel/plugins/blacklist_security.rb +23 -12
- data/lib/sequel/plugins/boolean_readers.rb +9 -6
- data/lib/sequel/plugins/boolean_subsets.rb +64 -0
- data/lib/sequel/plugins/caching.rb +27 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +192 -94
- data/lib/sequel/plugins/column_conflicts.rb +18 -3
- data/lib/sequel/plugins/column_select.rb +9 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +36 -24
- data/lib/sequel/plugins/constraint_validations.rb +37 -16
- data/lib/sequel/plugins/csv_serializer.rb +58 -35
- data/lib/sequel/plugins/dataset_associations.rb +60 -18
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +74 -13
- data/lib/sequel/plugins/delay_add_association.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +65 -24
- data/lib/sequel/plugins/eager_each.rb +27 -3
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/error_splitter.rb +19 -12
- data/lib/sequel/plugins/finder.rb +246 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/force_encoding.rb +9 -12
- data/lib/sequel/plugins/hook_class_methods.rb +39 -54
- data/lib/sequel/plugins/input_transformer.rb +20 -10
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/insert_returning_select.rb +4 -2
- data/lib/sequel/plugins/instance_filters.rb +12 -8
- data/lib/sequel/plugins/instance_hooks.rb +36 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +24 -13
- data/lib/sequel/plugins/json_serializer.rb +123 -47
- data/lib/sequel/plugins/lazy_attributes.rb +20 -14
- data/lib/sequel/plugins/list.rb +40 -26
- data/lib/sequel/plugins/many_through_many.rb +28 -12
- data/lib/sequel/plugins/modification_detection.rb +17 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -5
- data/lib/sequel/plugins/nested_attributes.rb +55 -28
- data/lib/sequel/plugins/optimistic_locking.rb +5 -3
- data/lib/sequel/plugins/pg_array_associations.rb +52 -18
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +348 -0
- data/lib/sequel/plugins/pg_row.rb +7 -51
- data/lib/sequel/plugins/prepared_statements.rb +53 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +13 -5
- data/lib/sequel/plugins/rcte_tree.rb +43 -63
- data/lib/sequel/plugins/serialization.rb +37 -44
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -1
- data/lib/sequel/plugins/sharding.rb +17 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +62 -28
- data/lib/sequel/plugins/singular_table_names.rb +2 -0
- data/lib/sequel/plugins/skip_create_refresh.rb +5 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +13 -6
- data/lib/sequel/plugins/static_cache.rb +79 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +5 -3
- data/lib/sequel/plugins/subclasses.rb +20 -2
- data/lib/sequel/plugins/subset_conditions.rb +48 -0
- data/lib/sequel/plugins/table_select.rb +4 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +120 -6
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +22 -8
- data/lib/sequel/plugins/touch.rb +21 -8
- data/lib/sequel/plugins/tree.rb +57 -30
- data/lib/sequel/plugins/typecast_on_load.rb +14 -4
- data/lib/sequel/plugins/unlimited_update.rb +3 -7
- data/lib/sequel/plugins/update_or_create.rb +6 -4
- data/lib/sequel/plugins/update_primary_key.rb +3 -1
- data/lib/sequel/plugins/update_refresh.rb +28 -15
- data/lib/sequel/plugins/uuid.rb +70 -0
- data/lib/sequel/plugins/validate_associated.rb +20 -0
- data/lib/sequel/plugins/validation_class_methods.rb +40 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +49 -31
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +31 -30
- data/lib/sequel/sql.rb +479 -329
- data/lib/sequel/timezones.rb +62 -32
- data/lib/sequel/version.rb +10 -3
- metadata +177 -477
- data/Rakefile +0 -165
- data/doc/active_record.rdoc +0 -912
- data/doc/release_notes/1.0.txt +0 -38
- data/doc/release_notes/1.1.txt +0 -143
- data/doc/release_notes/1.3.txt +0 -101
- data/doc/release_notes/1.4.0.txt +0 -53
- data/doc/release_notes/1.5.0.txt +0 -155
- data/doc/release_notes/2.0.0.txt +0 -298
- data/doc/release_notes/2.1.0.txt +0 -271
- data/doc/release_notes/2.10.0.txt +0 -328
- data/doc/release_notes/2.11.0.txt +0 -215
- data/doc/release_notes/2.12.0.txt +0 -534
- data/doc/release_notes/2.2.0.txt +0 -253
- data/doc/release_notes/2.3.0.txt +0 -88
- data/doc/release_notes/2.4.0.txt +0 -106
- data/doc/release_notes/2.5.0.txt +0 -137
- data/doc/release_notes/2.6.0.txt +0 -157
- data/doc/release_notes/2.7.0.txt +0 -166
- data/doc/release_notes/2.8.0.txt +0 -171
- data/doc/release_notes/2.9.0.txt +0 -97
- data/doc/release_notes/3.0.0.txt +0 -221
- data/doc/release_notes/3.1.0.txt +0 -406
- data/doc/release_notes/3.10.0.txt +0 -286
- data/doc/release_notes/3.11.0.txt +0 -254
- data/doc/release_notes/3.12.0.txt +0 -304
- data/doc/release_notes/3.13.0.txt +0 -210
- data/doc/release_notes/3.14.0.txt +0 -118
- data/doc/release_notes/3.15.0.txt +0 -78
- data/doc/release_notes/3.16.0.txt +0 -45
- data/doc/release_notes/3.17.0.txt +0 -58
- data/doc/release_notes/3.18.0.txt +0 -120
- data/doc/release_notes/3.19.0.txt +0 -67
- data/doc/release_notes/3.2.0.txt +0 -268
- data/doc/release_notes/3.20.0.txt +0 -41
- data/doc/release_notes/3.21.0.txt +0 -87
- data/doc/release_notes/3.22.0.txt +0 -39
- data/doc/release_notes/3.23.0.txt +0 -172
- data/doc/release_notes/3.24.0.txt +0 -420
- data/doc/release_notes/3.25.0.txt +0 -88
- data/doc/release_notes/3.26.0.txt +0 -88
- data/doc/release_notes/3.27.0.txt +0 -82
- data/doc/release_notes/3.28.0.txt +0 -304
- data/doc/release_notes/3.29.0.txt +0 -459
- data/doc/release_notes/3.3.0.txt +0 -192
- data/doc/release_notes/3.30.0.txt +0 -135
- data/doc/release_notes/3.31.0.txt +0 -146
- data/doc/release_notes/3.32.0.txt +0 -202
- data/doc/release_notes/3.33.0.txt +0 -157
- data/doc/release_notes/3.34.0.txt +0 -671
- data/doc/release_notes/3.35.0.txt +0 -144
- data/doc/release_notes/3.36.0.txt +0 -245
- data/doc/release_notes/3.37.0.txt +0 -338
- data/doc/release_notes/3.38.0.txt +0 -234
- data/doc/release_notes/3.39.0.txt +0 -237
- data/doc/release_notes/3.4.0.txt +0 -325
- data/doc/release_notes/3.40.0.txt +0 -73
- data/doc/release_notes/3.41.0.txt +0 -155
- data/doc/release_notes/3.42.0.txt +0 -74
- data/doc/release_notes/3.43.0.txt +0 -105
- data/doc/release_notes/3.44.0.txt +0 -152
- data/doc/release_notes/3.45.0.txt +0 -179
- data/doc/release_notes/3.46.0.txt +0 -122
- data/doc/release_notes/3.47.0.txt +0 -270
- data/doc/release_notes/3.48.0.txt +0 -477
- data/doc/release_notes/3.5.0.txt +0 -510
- data/doc/release_notes/3.6.0.txt +0 -366
- data/doc/release_notes/3.7.0.txt +0 -179
- data/doc/release_notes/3.8.0.txt +0 -151
- data/doc/release_notes/3.9.0.txt +0 -233
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/lib/sequel/adapters/cubrid.rb +0 -142
- data/lib/sequel/adapters/do.rb +0 -156
- data/lib/sequel/adapters/do/mysql.rb +0 -64
- data/lib/sequel/adapters/do/postgres.rb +0 -42
- data/lib/sequel/adapters/do/sqlite3.rb +0 -40
- data/lib/sequel/adapters/jdbc/as400.rb +0 -82
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -62
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -34
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -31
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -31
- data/lib/sequel/adapters/odbc/progress.rb +0 -8
- data/lib/sequel/adapters/shared/cubrid.rb +0 -243
- data/lib/sequel/adapters/shared/firebird.rb +0 -245
- data/lib/sequel/adapters/shared/informix.rb +0 -52
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -150
- data/lib/sequel/adapters/shared/progress.rb +0 -38
- data/lib/sequel/adapters/swift.rb +0 -158
- data/lib/sequel/adapters/swift/mysql.rb +0 -47
- data/lib/sequel/adapters/swift/postgres.rb +0 -45
- data/lib/sequel/adapters/swift/sqlite.rb +0 -47
- data/lib/sequel/adapters/utils/pg_types.rb +0 -68
- data/lib/sequel/dataset/mutation.rb +0 -109
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -3
- data/lib/sequel/extensions/filter_having.rb +0 -59
- data/lib/sequel/extensions/hash_aliases.rb +0 -45
- data/lib/sequel/extensions/meta_def.rb +0 -31
- data/lib/sequel/extensions/query_literals.rb +0 -80
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -22
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -118
- data/lib/sequel/extensions/set_overrides.rb +0 -72
- data/lib/sequel/no_core_ext.rb +0 -1
- data/lib/sequel/plugins/association_autoreloading.rb +0 -7
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -7
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -78
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -117
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -59
- data/lib/sequel/plugins/schema.rb +0 -80
- data/lib/sequel/plugins/scissors.rb +0 -33
- data/spec/adapters/db2_spec.rb +0 -160
- data/spec/adapters/firebird_spec.rb +0 -411
- data/spec/adapters/informix_spec.rb +0 -100
- data/spec/adapters/mssql_spec.rb +0 -706
- data/spec/adapters/mysql_spec.rb +0 -1287
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3725
- data/spec/adapters/spec_helper.rb +0 -43
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -653
- data/spec/bin_spec.rb +0 -254
- data/spec/core/connection_pool_spec.rb +0 -1016
- data/spec/core/database_spec.rb +0 -2531
- data/spec/core/dataset_spec.rb +0 -5098
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1243
- data/spec/core/mock_adapter_spec.rb +0 -462
- data/spec/core/object_graph_spec.rb +0 -303
- data/spec/core/placeholder_literalizer_spec.rb +0 -163
- data/spec/core/schema_generator_spec.rb +0 -179
- data/spec/core/schema_spec.rb +0 -1659
- data/spec/core/spec_helper.rb +0 -34
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -699
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -123
- data/spec/extensions/after_initialize_spec.rb +0 -24
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -117
- data/spec/extensions/association_pks_spec.rb +0 -365
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/blacklist_security_spec.rb +0 -88
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -420
- data/spec/extensions/column_conflicts_spec.rb +0 -60
- data/spec/extensions/column_select_spec.rb +0 -108
- data/spec/extensions/columns_introspection_spec.rb +0 -91
- data/spec/extensions/composition_spec.rb +0 -242
- data/spec/extensions/connection_validator_spec.rb +0 -120
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -274
- data/spec/extensions/constraint_validations_spec.rb +0 -325
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -173
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -311
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -150
- data/spec/extensions/defaults_setter_spec.rb +0 -101
- data/spec/extensions/delay_add_association_spec.rb +0 -52
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/eager_each_spec.rb +0 -42
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/eval_inspect_spec.rb +0 -73
- data/spec/extensions/filter_having_spec.rb +0 -40
- data/spec/extensions/force_encoding_spec.rb +0 -114
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/graph_each_spec.rb +0 -109
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -54
- data/spec/extensions/insert_returning_select_spec.rb +0 -46
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -276
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -291
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -267
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2172
- data/spec/extensions/meta_def_spec.rb +0 -21
- data/spec/extensions/migration_spec.rb +0 -712
- data/spec/extensions/modification_detection_spec.rb +0 -80
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
- data/spec/extensions/named_timezones_spec.rb +0 -108
- data/spec/extensions/nested_attributes_spec.rb +0 -697
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -128
- data/spec/extensions/pagination_spec.rb +0 -118
- data/spec/extensions/pg_array_associations_spec.rb +0 -736
- data/spec/extensions/pg_array_ops_spec.rb +0 -143
- data/spec/extensions/pg_array_spec.rb +0 -395
- data/spec/extensions/pg_enum_spec.rb +0 -92
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
- data/spec/extensions/pg_hstore_spec.rb +0 -206
- data/spec/extensions/pg_inet_ops_spec.rb +0 -101
- data/spec/extensions/pg_inet_spec.rb +0 -52
- data/spec/extensions/pg_interval_spec.rb +0 -76
- data/spec/extensions/pg_json_ops_spec.rb +0 -229
- data/spec/extensions/pg_json_spec.rb +0 -218
- data/spec/extensions/pg_loose_count_spec.rb +0 -17
- data/spec/extensions/pg_range_ops_spec.rb +0 -58
- data/spec/extensions/pg_range_spec.rb +0 -404
- data/spec/extensions/pg_row_ops_spec.rb +0 -60
- data/spec/extensions/pg_row_plugin_spec.rb +0 -62
- data/spec/extensions/pg_row_spec.rb +0 -360
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
- data/spec/extensions/prepared_statements_spec.rb +0 -103
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
- data/spec/extensions/pretty_table_spec.rb +0 -92
- data/spec/extensions/query_literals_spec.rb +0 -183
- data/spec/extensions/query_spec.rb +0 -102
- data/spec/extensions/rcte_tree_spec.rb +0 -392
- data/spec/extensions/round_timestamps_spec.rb +0 -43
- data/spec/extensions/schema_caching_spec.rb +0 -41
- data/spec/extensions/schema_dumper_spec.rb +0 -789
- data/spec/extensions/schema_spec.rb +0 -117
- data/spec/extensions/scissors_spec.rb +0 -26
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -362
- data/spec/extensions/server_block_spec.rb +0 -90
- data/spec/extensions/set_overrides_spec.rb +0 -61
- data/spec/extensions/sharding_spec.rb +0 -198
- data/spec/extensions/shared_caching_spec.rb +0 -175
- data/spec/extensions/single_table_inheritance_spec.rb +0 -297
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -17
- data/spec/extensions/spec_helper.rb +0 -71
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -22
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -66
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -82
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -175
- data/spec/extensions/to_dot_spec.rb +0 -154
- data/spec/extensions/touch_spec.rb +0 -203
- data/spec/extensions/tree_spec.rb +0 -274
- data/spec/extensions/typecast_on_load_spec.rb +0 -80
- data/spec/extensions/unlimited_update_spec.rb +0 -20
- data/spec/extensions/update_or_create_spec.rb +0 -87
- data/spec/extensions/update_primary_key_spec.rb +0 -100
- data/spec/extensions/update_refresh_spec.rb +0 -53
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1027
- data/spec/extensions/validation_helpers_spec.rb +0 -541
- data/spec/extensions/xml_serializer_spec.rb +0 -207
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -55
- data/spec/integration/associations_test.rb +0 -2454
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1808
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -240
- data/spec/integration/model_test.rb +0 -226
- data/spec/integration/plugin_test.rb +0 -2240
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -817
- data/spec/integration/spec_helper.rb +0 -48
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -374
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -525
- data/spec/model/associations_spec.rb +0 -4426
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2137
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -982
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2147
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
module Plugins
|
|
3
|
-
#
|
|
5
|
+
# The serialization plugin allows you to keep serialized
|
|
4
6
|
# ruby objects in the database, while giving you deserialized objects
|
|
5
7
|
# when you call an accessor.
|
|
6
8
|
#
|
|
7
9
|
# This plugin works by keeping the serialized value in the values, and
|
|
8
|
-
# adding a
|
|
9
|
-
# will check the
|
|
10
|
-
# or
|
|
11
|
-
# set the
|
|
12
|
-
# that serializes all
|
|
10
|
+
# adding a deserialized_values hash. The reader method for serialized columns
|
|
11
|
+
# will check the deserialized_values for the value, return it if present,
|
|
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
|
+
# that serializes all deserialized_values to values.
|
|
13
15
|
#
|
|
14
16
|
# You can specify the serialization format as a pair of serializer/deserializer
|
|
15
17
|
# callable objects. You can also specify the serialization format as a single
|
|
@@ -35,9 +37,7 @@ module Sequel
|
|
|
35
37
|
#
|
|
36
38
|
# # Register custom serializer/deserializer pair, if desired
|
|
37
39
|
# require 'sequel/plugins/serialization'
|
|
38
|
-
# Sequel::Plugins::Serialization.register_format(:reverse,
|
|
39
|
-
# lambda(&:reverse),
|
|
40
|
-
# lambda(&:reverse))
|
|
40
|
+
# Sequel::Plugins::Serialization.register_format(:reverse, :reverse.to_proc, :reverse.to_proc)
|
|
41
41
|
#
|
|
42
42
|
# class User < Sequel::Model
|
|
43
43
|
# # Built-in format support when loading the plugin
|
|
@@ -51,10 +51,10 @@ module Sequel
|
|
|
51
51
|
# serialize_attributes :reverse, :password
|
|
52
52
|
#
|
|
53
53
|
# # Use a custom serializer/deserializer pair without registering
|
|
54
|
-
# serialize_attributes [
|
|
54
|
+
# serialize_attributes [:reverse.to_proc, :reverse.to_proc], :password
|
|
55
55
|
# end
|
|
56
56
|
# user = User.create
|
|
57
|
-
# user.permissions = {
|
|
57
|
+
# user.permissions = {global: 'read-only'}
|
|
58
58
|
# user.save
|
|
59
59
|
#
|
|
60
60
|
# Note that if you mutate serialized column values without reassigning them,
|
|
@@ -75,7 +75,7 @@ module Sequel
|
|
|
75
75
|
# Set up the column readers to do deserialization and the column writers
|
|
76
76
|
# to save the value in deserialized_values.
|
|
77
77
|
def self.apply(model, *args)
|
|
78
|
-
model.
|
|
78
|
+
model.instance_exec do
|
|
79
79
|
@deserialization_map = {}
|
|
80
80
|
@serialization_map = {}
|
|
81
81
|
end
|
|
@@ -91,23 +91,16 @@ module Sequel
|
|
|
91
91
|
# models to pick this format by name. Both serializer and deserializer
|
|
92
92
|
# should be callable objects.
|
|
93
93
|
def self.register_format(format, serializer, deserializer)
|
|
94
|
-
REGISTERED_FORMATS[format] = [serializer, deserializer]
|
|
94
|
+
Sequel.synchronize{REGISTERED_FORMATS[format] = [serializer, deserializer].freeze}
|
|
95
95
|
end
|
|
96
96
|
register_format(:marshal, lambda{|v| [Marshal.dump(v)].pack('m')},
|
|
97
97
|
lambda do |v|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
begin
|
|
102
|
-
# Backwards compatibility for unpacked marshal output.
|
|
103
|
-
Marshal.load(v)
|
|
104
|
-
rescue
|
|
105
|
-
raise e
|
|
106
|
-
end
|
|
107
|
-
end
|
|
98
|
+
# Handle unpacked marshalled data for backwards compat
|
|
99
|
+
v = v.unpack('m')[0] unless v[0..1] == "\x04\x08"
|
|
100
|
+
Marshal.load(v)
|
|
108
101
|
end)
|
|
109
|
-
register_format(:yaml,
|
|
110
|
-
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))
|
|
111
104
|
|
|
112
105
|
module ClassMethods
|
|
113
106
|
# A hash with column name symbols and callable values, with the value
|
|
@@ -118,18 +111,23 @@ module Sequel
|
|
|
118
111
|
# called to serialize the column.
|
|
119
112
|
attr_reader :serialization_map
|
|
120
113
|
|
|
121
|
-
# Module to store the serialized column accessor methods, so they can
|
|
122
|
-
# call be overridden and call super to get the serialization behavior
|
|
123
|
-
attr_accessor :serialization_module
|
|
124
|
-
|
|
125
114
|
Plugins.inherited_instance_variables(self, :@deserialization_map=>:dup, :@serialization_map=>:dup)
|
|
115
|
+
|
|
116
|
+
# Freeze serialization metadata when freezing model class.
|
|
117
|
+
def freeze
|
|
118
|
+
@deserialization_map.freeze
|
|
119
|
+
@serialization_map.freeze
|
|
120
|
+
@serialization_module.freeze if @serialization_module
|
|
121
|
+
|
|
122
|
+
super
|
|
123
|
+
end
|
|
126
124
|
|
|
127
125
|
# Create instance level reader that deserializes column values on request,
|
|
128
126
|
# and instance level writer that stores new deserialized values.
|
|
129
127
|
def serialize_attributes(format, *columns)
|
|
130
128
|
if format.is_a?(Symbol)
|
|
131
|
-
unless format = REGISTERED_FORMATS[format]
|
|
132
|
-
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})")
|
|
133
131
|
end
|
|
134
132
|
end
|
|
135
133
|
serializer, deserializer = format
|
|
@@ -137,19 +135,13 @@ module Sequel
|
|
|
137
135
|
define_serialized_attribute_accessor(serializer, deserializer, *columns)
|
|
138
136
|
end
|
|
139
137
|
|
|
140
|
-
# The columns that will be serialized. This is only for
|
|
141
|
-
# backwards compatibility, use serialization_map in new code.
|
|
142
|
-
def serialized_columns
|
|
143
|
-
serialization_map.keys
|
|
144
|
-
end
|
|
145
|
-
|
|
146
138
|
private
|
|
147
139
|
|
|
148
140
|
# Add serializated attribute acessor methods to the serialization_module
|
|
149
141
|
def define_serialized_attribute_accessor(serializer, deserializer, *columns)
|
|
150
142
|
m = self
|
|
151
|
-
include(
|
|
152
|
-
serialization_module.class_eval do
|
|
143
|
+
include(@serialization_module ||= Module.new) unless @serialization_module
|
|
144
|
+
@serialization_module.class_eval do
|
|
153
145
|
columns.each do |column|
|
|
154
146
|
m.serialization_map[column] = serializer
|
|
155
147
|
m.deserialization_map[column] = deserializer
|
|
@@ -163,8 +155,9 @@ module Sequel
|
|
|
163
155
|
end
|
|
164
156
|
end
|
|
165
157
|
define_method("#{column}=") do |v|
|
|
166
|
-
|
|
167
|
-
|
|
158
|
+
cc = changed_columns
|
|
159
|
+
if !cc.include?(column) && (new? || get_column_value(column) != v)
|
|
160
|
+
cc << column
|
|
168
161
|
|
|
169
162
|
will_change_column(column) if respond_to?(:will_change_column)
|
|
170
163
|
end
|
|
@@ -188,14 +181,14 @@ module Sequel
|
|
|
188
181
|
super
|
|
189
182
|
end
|
|
190
183
|
|
|
191
|
-
private
|
|
192
|
-
|
|
193
184
|
# Serialize deserialized values before saving
|
|
194
|
-
def
|
|
185
|
+
def before_validation
|
|
195
186
|
serialize_deserialized_values
|
|
196
187
|
super
|
|
197
188
|
end
|
|
198
189
|
|
|
190
|
+
private
|
|
191
|
+
|
|
199
192
|
# Clear any cached deserialized values when doing a manual refresh.
|
|
200
193
|
def _refresh_set_values(hash)
|
|
201
194
|
@deserialized_values.clear if @deserialized_values
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
module Plugins
|
|
3
5
|
# This plugin extends the serialization plugin and enables it to detect
|
|
@@ -20,7 +22,7 @@ module Sequel
|
|
|
20
22
|
# plugin :serialization, :json, :permissions
|
|
21
23
|
# plugin :serialization_modification_detection
|
|
22
24
|
# end
|
|
23
|
-
# user = User.create(:
|
|
25
|
+
# user = User.create(permissions: {})
|
|
24
26
|
# user.permissions[:global] = 'read-only'
|
|
25
27
|
# user.save_changes
|
|
26
28
|
module SerializationModificationDetection
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
module Plugins
|
|
3
5
|
# The sharding plugin augments Sequel's default model sharding support
|
|
4
6
|
# in the following ways:
|
|
5
7
|
#
|
|
6
|
-
# * It automatically
|
|
8
|
+
# * It automatically saves model instances back to the
|
|
7
9
|
# shard they were retreived from.
|
|
8
|
-
# * It makes model associations use the same shard as the model
|
|
9
|
-
# object.
|
|
10
|
+
# * It makes model associations use the same shard as the model object.
|
|
10
11
|
# * It adds a slightly nicer API for creating model instances on
|
|
11
12
|
# specific shards.
|
|
12
13
|
#
|
|
@@ -20,7 +21,7 @@ module Sequel
|
|
|
20
21
|
module Sharding
|
|
21
22
|
module ClassMethods
|
|
22
23
|
# Create a new object on the given shard s.
|
|
23
|
-
def create_using_server(s, values=
|
|
24
|
+
def create_using_server(s, values=OPTS, &block)
|
|
24
25
|
new_using_server(s, values, &block).save
|
|
25
26
|
end
|
|
26
27
|
|
|
@@ -44,7 +45,7 @@ module Sequel
|
|
|
44
45
|
# Return a newly instantiated object that is tied to the given
|
|
45
46
|
# shard s. When the object is saved, a record will be inserted
|
|
46
47
|
# on shard s.
|
|
47
|
-
def new_using_server(s, values=
|
|
48
|
+
def new_using_server(s, values=OPTS, &block)
|
|
48
49
|
new(values, &block).set_server(s)
|
|
49
50
|
end
|
|
50
51
|
|
|
@@ -106,12 +107,18 @@ module Sequel
|
|
|
106
107
|
# previous row_proc, but calls set_server on the output of that row_proc,
|
|
107
108
|
# ensuring that objects retrieved by a specific shard know which shard they
|
|
108
109
|
# are tied to.
|
|
109
|
-
def
|
|
110
|
-
|
|
111
|
-
if rp
|
|
112
|
-
|
|
110
|
+
def row_proc
|
|
111
|
+
rp = super
|
|
112
|
+
if rp
|
|
113
|
+
case server = db.pool.send(:pick_server, opts[:server])
|
|
114
|
+
when nil, :default, :read_only
|
|
115
|
+
# nothing
|
|
116
|
+
else
|
|
117
|
+
old_rp = rp
|
|
118
|
+
rp = proc{|r| old_rp.call(r).set_server(server)}
|
|
119
|
+
end
|
|
113
120
|
end
|
|
114
|
-
|
|
121
|
+
rp
|
|
115
122
|
end
|
|
116
123
|
end
|
|
117
124
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
module Plugins
|
|
3
5
|
# The single_table_inheritance plugin allows storing all objects
|
|
@@ -37,11 +39,11 @@ module Sequel
|
|
|
37
39
|
# # Using integers to store the class type, with a :model_map hash
|
|
38
40
|
# # and an sti_key of :type
|
|
39
41
|
# Employee.plugin :single_table_inheritance, :type,
|
|
40
|
-
# :
|
|
42
|
+
# model_map: {1=>:Staff, 2=>:Manager}
|
|
41
43
|
#
|
|
42
44
|
# # Using non-class name strings
|
|
43
45
|
# Employee.plugin :single_table_inheritance, :type,
|
|
44
|
-
# :
|
|
46
|
+
# model_map: {'line staff'=>:Staff, 'supervisor'=>:Manager}
|
|
45
47
|
#
|
|
46
48
|
# # By default the plugin sets the respective column value
|
|
47
49
|
# # when a new instance is created.
|
|
@@ -51,22 +53,22 @@ module Sequel
|
|
|
51
53
|
# # You can customize this behavior with the :key_chooser option.
|
|
52
54
|
# # This is most useful when using a non-bijective mapping.
|
|
53
55
|
# Employee.plugin :single_table_inheritance, :type,
|
|
54
|
-
# :
|
|
55
|
-
# :
|
|
56
|
+
# model_map: {'line staff'=>:Staff, 'supervisor'=>:Manager},
|
|
57
|
+
# key_chooser: lambda{|instance| instance.model.sti_key_map[instance.model.to_s].first || 'stranger'}
|
|
56
58
|
#
|
|
57
59
|
# # Using custom procs, with :model_map taking column values
|
|
58
60
|
# # and yielding either a class, string, symbol, or nil,
|
|
59
61
|
# # and :key_map taking a class object and returning the column
|
|
60
62
|
# # value to use
|
|
61
63
|
# Employee.plugin :single_table_inheritance, :type,
|
|
62
|
-
# :
|
|
63
|
-
# :
|
|
64
|
+
# model_map: :reverse.to_proc,
|
|
65
|
+
# key_map: lambda{|klass| klass.name.reverse}
|
|
64
66
|
#
|
|
65
67
|
# # You can use the same class for multiple values.
|
|
66
68
|
# # This is mainly useful when the sti_key column contains multiple values
|
|
67
69
|
# # which are different but do not require different code.
|
|
68
70
|
# Employee.plugin :single_table_inheritance, :type,
|
|
69
|
-
# :
|
|
71
|
+
# model_map: {'staff' => "Staff",
|
|
70
72
|
# 'manager' => "Manager",
|
|
71
73
|
# 'overpayed staff' => "Staff",
|
|
72
74
|
# 'underpayed staff' => "Staff"}
|
|
@@ -78,7 +80,7 @@ module Sequel
|
|
|
78
80
|
module SingleTableInheritance
|
|
79
81
|
# Setup the necessary STI variables, see the module RDoc for SingleTableInheritance
|
|
80
82
|
def self.configure(model, key, opts=OPTS)
|
|
81
|
-
model.
|
|
83
|
+
model.instance_exec do
|
|
82
84
|
@sti_key_array = nil
|
|
83
85
|
@sti_key = key
|
|
84
86
|
@sti_dataset = dataset
|
|
@@ -93,7 +95,7 @@ module Sequel
|
|
|
93
95
|
end
|
|
94
96
|
end
|
|
95
97
|
km.each do |k,v|
|
|
96
|
-
h[k.to_s] = [
|
|
98
|
+
h[k.to_s] = [] unless h.key?(k.to_s)
|
|
97
99
|
h[k.to_s].push( *Array(v) )
|
|
98
100
|
end
|
|
99
101
|
h
|
|
@@ -109,7 +111,7 @@ module Sequel
|
|
|
109
111
|
end
|
|
110
112
|
end
|
|
111
113
|
sti_model_map.each do |k,v|
|
|
112
|
-
h[v.to_s] = [
|
|
114
|
+
h[v.to_s] = [] unless h.key?(v.to_s)
|
|
113
115
|
h[v.to_s] << k
|
|
114
116
|
end
|
|
115
117
|
h
|
|
@@ -117,7 +119,8 @@ module Sequel
|
|
|
117
119
|
lambda{|klass| klass.name.to_s}
|
|
118
120
|
end
|
|
119
121
|
@sti_key_chooser = opts[:key_chooser] || lambda{|inst| Array(inst.model.sti_key_map[inst.model]).last }
|
|
120
|
-
|
|
122
|
+
|
|
123
|
+
@dataset = @dataset.with_row_proc(model.method(:sti_load))
|
|
121
124
|
end
|
|
122
125
|
end
|
|
123
126
|
|
|
@@ -149,25 +152,26 @@ module Sequel
|
|
|
149
152
|
|
|
150
153
|
Plugins.inherited_instance_variables(self, :@sti_dataset=>nil, :@sti_key=>nil, :@sti_key_map=>nil, :@sti_model_map=>nil, :@sti_key_chooser=>nil)
|
|
151
154
|
|
|
152
|
-
#
|
|
153
|
-
#
|
|
154
|
-
|
|
155
|
+
# Freeze STI information when freezing model class. Note that
|
|
156
|
+
# because of how STI works, you should not freeze an STI subclass
|
|
157
|
+
# until after all subclasses of it have been created.
|
|
158
|
+
def freeze
|
|
159
|
+
@sti_key_array.freeze if @sti_key_array
|
|
160
|
+
@sti_key_map.freeze if @sti_key_map.is_a?(Hash)
|
|
161
|
+
@sti_model_map.freeze if @sti_model_map.is_a?(Hash)
|
|
162
|
+
|
|
155
163
|
super
|
|
156
|
-
key = Array(sti_key_map[subclass]).dup
|
|
157
|
-
sti_subclass_added(key)
|
|
158
|
-
rp = dataset.row_proc
|
|
159
|
-
subclass.set_dataset(sti_dataset.filter(SQL::QualifiedIdentifier.new(sti_dataset.first_source_alias, sti_key)=>key), :inherited=>true)
|
|
160
|
-
subclass.instance_eval do
|
|
161
|
-
dataset.row_proc = rp
|
|
162
|
-
@sti_key_array = key
|
|
163
|
-
self.simple_table = nil
|
|
164
|
-
end
|
|
165
164
|
end
|
|
166
165
|
|
|
167
166
|
# Return an instance of the class specified by sti_key,
|
|
168
167
|
# used by the row_proc.
|
|
169
168
|
def sti_load(r)
|
|
170
|
-
|
|
169
|
+
sti_class_from_sti_key(r[sti_key]).call(r)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Return the sti class based on one of the keys from sti_model_map.
|
|
173
|
+
def sti_class_from_sti_key(key)
|
|
174
|
+
sti_class(sti_model_map[key])
|
|
171
175
|
end
|
|
172
176
|
|
|
173
177
|
# Make sure that all subclasses of the parent class correctly include
|
|
@@ -182,10 +186,36 @@ module Sequel
|
|
|
182
186
|
|
|
183
187
|
private
|
|
184
188
|
|
|
189
|
+
# Extend the sti dataset with the module when extending the main
|
|
190
|
+
# dataset.
|
|
191
|
+
def dataset_extend(mod, opts=OPTS)
|
|
192
|
+
@sti_dataset = @sti_dataset.with_extend(mod)
|
|
193
|
+
super
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# Copy the necessary attributes to the subclasses, and filter the
|
|
197
|
+
# subclass's dataset based on the sti_kep_map entry for the class.
|
|
198
|
+
def inherited(subclass)
|
|
199
|
+
super
|
|
200
|
+
key = Array(sti_key_map[subclass]).dup
|
|
201
|
+
sti_subclass_added(key)
|
|
202
|
+
rp = dataset.row_proc
|
|
203
|
+
subclass.set_dataset(sti_subclass_dataset(key), :inherited=>true)
|
|
204
|
+
subclass.instance_exec do
|
|
205
|
+
@dataset = @dataset.with_row_proc(rp)
|
|
206
|
+
@sti_key_array = key
|
|
207
|
+
self.simple_table = nil
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
185
211
|
# If calling set_dataset manually, make sure to set the dataset
|
|
186
212
|
# row proc to one that handles inheritance correctly.
|
|
187
213
|
def set_dataset_row_proc(ds)
|
|
188
|
-
|
|
214
|
+
if @dataset
|
|
215
|
+
ds.with_row_proc(@dataset.row_proc)
|
|
216
|
+
else
|
|
217
|
+
super
|
|
218
|
+
end
|
|
189
219
|
end
|
|
190
220
|
|
|
191
221
|
# Return a class object. If a class is given, return it directly.
|
|
@@ -204,13 +234,17 @@ module Sequel
|
|
|
204
234
|
raise(Error, "Invalid class type used: #{v.inspect}")
|
|
205
235
|
end
|
|
206
236
|
end
|
|
237
|
+
|
|
238
|
+
# Use the given dataset for the subclass, with key being the allowed
|
|
239
|
+
# values for the sti_kind field.
|
|
240
|
+
def sti_subclass_dataset(key)
|
|
241
|
+
sti_dataset.where(SQL::QualifiedIdentifier.new(sti_dataset.first_source_alias, sti_key)=>Sequel.delay{Sequel.synchronize{key}})
|
|
242
|
+
end
|
|
207
243
|
end
|
|
208
244
|
|
|
209
245
|
module InstanceMethods
|
|
210
|
-
private
|
|
211
|
-
|
|
212
246
|
# Set the sti_key column based on the sti_key_map.
|
|
213
|
-
def
|
|
247
|
+
def before_validation
|
|
214
248
|
if new? && model.sti_key && !self[model.sti_key]
|
|
215
249
|
set_column_value("#{model.sti_key}=", model.sti_key_chooser.call(self))
|
|
216
250
|
end
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
module Plugins
|
|
3
|
-
#
|
|
5
|
+
# The skip_create_refresh plugin skips the
|
|
4
6
|
# refresh after saving a new model object. Sequel does the
|
|
5
|
-
# refresh to make sure all columns are populated, which is
|
|
7
|
+
# refresh by default to make sure all columns are populated, which is
|
|
6
8
|
# necessary so that database defaults work correctly.
|
|
7
9
|
#
|
|
8
10
|
# This plugin is mostly for performance reasons where you
|
|
@@ -10,7 +12,7 @@ module Sequel
|
|
|
10
12
|
# but it could also help cases where records are not
|
|
11
13
|
# immediately available for selection after insertion.
|
|
12
14
|
#
|
|
13
|
-
# Note that Sequel does not attempt to refresh records when
|
|
15
|
+
# Note that Sequel by default does not attempt to refresh records when
|
|
14
16
|
# updating existing model objects, only when inserting new
|
|
15
17
|
# model objects.
|
|
16
18
|
#
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
module Sequel
|
|
4
|
+
module Plugins
|
|
5
|
+
# The skip_saving_columms plugin allows skipping specific columns when
|
|
6
|
+
# saving. By default, it skips columns that the database schema
|
|
7
|
+
# indicates are generated columns:
|
|
8
|
+
#
|
|
9
|
+
# # Assume id column, name column, and id2 generated column
|
|
10
|
+
# album = Album[1]
|
|
11
|
+
# album.id # => 1
|
|
12
|
+
# album.name # => 'X'
|
|
13
|
+
# album.id2 # => 2
|
|
14
|
+
# album.save
|
|
15
|
+
# # UPDATE album SET name = 'X' WHERE (id = 1)
|
|
16
|
+
#
|
|
17
|
+
# You can override which columns will be skipped:
|
|
18
|
+
#
|
|
19
|
+
# Album.skip_saving_columns = [:name]
|
|
20
|
+
# album.save
|
|
21
|
+
# # UPDATE album SET id2 = 2 WHERE (id = 1)
|
|
22
|
+
#
|
|
23
|
+
# The skipping happens for all usage of Model#save and callers of it (e.g.
|
|
24
|
+
# Model.create, Model.update). When using the plugin, the only way to get
|
|
25
|
+
# it to save a column marked for skipping is to explicitly specify it:
|
|
26
|
+
#
|
|
27
|
+
# album.save(columns: [:name, :id2])
|
|
28
|
+
# album.save
|
|
29
|
+
# # UPDATE album SET name = 'X', id2 = 2 WHERE (id = 1)
|
|
30
|
+
#
|
|
31
|
+
# Usage:
|
|
32
|
+
#
|
|
33
|
+
# # Support skipping saving columns in all Sequel::Model subclasses
|
|
34
|
+
# # (called before loading subclasses)
|
|
35
|
+
# Sequel::Model.plugin :skip_saving_columns
|
|
36
|
+
#
|
|
37
|
+
# # Support skipping saving columns in the Album class
|
|
38
|
+
# Album.plugin :skip_saving_columns
|
|
39
|
+
module SkipSavingColumns
|
|
40
|
+
# Setup skipping of the generated columns for a model with an existing dataset.
|
|
41
|
+
def self.configure(mod)
|
|
42
|
+
mod.instance_exec do
|
|
43
|
+
set_skip_saving_generated_columns if @dataset
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
module ClassMethods
|
|
48
|
+
# An array of column symbols for columns to skip when saving.
|
|
49
|
+
attr_reader :skip_saving_columns
|
|
50
|
+
|
|
51
|
+
# Over the default array of columns to skip. Once overridden, future
|
|
52
|
+
# changes to the class's dataset and future subclasses will automatically
|
|
53
|
+
# use these overridden columns, instead of introspecting the database schema.
|
|
54
|
+
def skip_saving_columns=(v)
|
|
55
|
+
@_skip_saving_columns_no_override = true
|
|
56
|
+
@skip_saving_columns = v.dup.freeze
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
Plugins.after_set_dataset(self, :set_skip_saving_generated_columns)
|
|
60
|
+
Plugins.inherited_instance_variables(self, :@skip_saving_columns=>:dup, :@_skip_saving_columns_no_override=>nil)
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
# If the skip saving columns has not been overridden, check the database
|
|
65
|
+
# schema and automatically skip any generated columns.
|
|
66
|
+
def set_skip_saving_generated_columns
|
|
67
|
+
return if @_skip_saving_columns_no_override
|
|
68
|
+
s = []
|
|
69
|
+
db_schema.each do |k, v|
|
|
70
|
+
s << k if v[:generated]
|
|
71
|
+
end
|
|
72
|
+
@skip_saving_columns = s.freeze
|
|
73
|
+
nil
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
module InstanceMethods
|
|
78
|
+
private
|
|
79
|
+
|
|
80
|
+
# Skip the columns the model has marked to skip when inserting.
|
|
81
|
+
def _insert_values
|
|
82
|
+
_save_removed_skipped_columns(Hash[super])
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Skip the columns the model has marked to skip when updating
|
|
86
|
+
# all columns.
|
|
87
|
+
def _save_update_all_columns_hash
|
|
88
|
+
_save_removed_skipped_columns(super)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Skip the columns the model has marked to skip when updating
|
|
92
|
+
# only changed columns.
|
|
93
|
+
def _save_update_changed_colums_hash
|
|
94
|
+
_save_removed_skipped_columns(super)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Remove any columns the model has marked to skip when saving.
|
|
98
|
+
def _save_removed_skipped_columns(hash)
|
|
99
|
+
model.skip_saving_columns.each do |column|
|
|
100
|
+
hash.delete(column)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
hash
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|