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,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
module Plugins
|
|
3
5
|
# The column_conflicts plugin overrides Model#get_column_value and #set_column_value
|
|
@@ -27,11 +29,16 @@ module Sequel
|
|
|
27
29
|
# # Make the Album class handle column conflicts automatically
|
|
28
30
|
# Album.plugin :column_conflicts
|
|
29
31
|
module ColumnConflicts
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
model.instance_eval do
|
|
32
|
+
def self.apply(model)
|
|
33
|
+
model.instance_exec do
|
|
33
34
|
@get_column_conflicts = {}
|
|
34
35
|
@set_column_conflicts = {}
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Check for column conflicts on the current model if the model has a dataset.
|
|
40
|
+
def self.configure(model)
|
|
41
|
+
model.instance_exec do
|
|
35
42
|
check_column_conflicts if @dataset
|
|
36
43
|
end
|
|
37
44
|
end
|
|
@@ -58,6 +65,14 @@ module Sequel
|
|
|
58
65
|
columns.find_all{|c| mod.method_defined?("#{c}=")}.each{|c| set_column_conflict!(c)}
|
|
59
66
|
end
|
|
60
67
|
|
|
68
|
+
# Freeze column conflict information when freezing model class.
|
|
69
|
+
def freeze
|
|
70
|
+
@get_column_conflicts.freeze
|
|
71
|
+
@set_column_conflicts.freeze
|
|
72
|
+
|
|
73
|
+
super
|
|
74
|
+
end
|
|
75
|
+
|
|
61
76
|
# Set the given column as one with a getter method conflict.
|
|
62
77
|
def get_column_conflict!(column)
|
|
63
78
|
@get_column_conflicts[column.to_sym] = @get_column_conflicts[column.to_s] = column.to_sym
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
module Plugins
|
|
3
5
|
# The column_select plugin changes the default selection for a
|
|
@@ -26,7 +28,7 @@ module Sequel
|
|
|
26
28
|
# Modify the current model's dataset selection, if the model
|
|
27
29
|
# has a dataset.
|
|
28
30
|
def self.configure(model)
|
|
29
|
-
model.
|
|
31
|
+
model.instance_exec do
|
|
30
32
|
self.dataset = dataset if @dataset
|
|
31
33
|
end
|
|
32
34
|
end
|
|
@@ -39,15 +41,17 @@ module Sequel
|
|
|
39
41
|
# qualifying them with table's name.
|
|
40
42
|
def convert_input_dataset(ds)
|
|
41
43
|
ds = super
|
|
42
|
-
|
|
44
|
+
unless ds.opts[:select]
|
|
43
45
|
if db.supports_schema_parsing?
|
|
44
|
-
cols = check_non_connection_error{db.schema(ds)}
|
|
46
|
+
cols = check_non_connection_error(false){db.schema(ds)}
|
|
45
47
|
if cols
|
|
46
48
|
cols = cols.map{|c, _| c}
|
|
47
49
|
end
|
|
48
50
|
end
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
|
|
52
|
+
if cols ||= check_non_connection_error(false){ds.columns}
|
|
53
|
+
ds = ds.select(*cols.map{|c| Sequel.qualify(ds.first_source, Sequel.identifier(c))})
|
|
54
|
+
end
|
|
51
55
|
end
|
|
52
56
|
ds
|
|
53
57
|
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
module Sequel
|
|
4
|
+
module Plugins
|
|
5
|
+
# The columns_updated plugin stores the columns hash used in the
|
|
6
|
+
# UPDATE query when saving the instance, and makes it available
|
|
7
|
+
# in the after_update and after_save hooks via the +columns_updated+
|
|
8
|
+
# accessor. The data is cleared before returning from +save+.
|
|
9
|
+
#
|
|
10
|
+
# Usage:
|
|
11
|
+
#
|
|
12
|
+
# # Make all model subclasses store the columns hash used for updating
|
|
13
|
+
# Sequel::Model.plugin :columns_updated
|
|
14
|
+
#
|
|
15
|
+
# # Make the Album class store the columns hash used for updating
|
|
16
|
+
# Album.plugin :columns_updated
|
|
17
|
+
module ColumnsUpdated
|
|
18
|
+
module InstanceMethods
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
# The hash used for updating records. This should only be called
|
|
22
|
+
# in the after_update and after_save hooks.
|
|
23
|
+
attr_reader :columns_updated
|
|
24
|
+
|
|
25
|
+
# Store the hash used for updating the record, so it can be accessed
|
|
26
|
+
# in the after_hooks.
|
|
27
|
+
def _update_columns(columns_updated)
|
|
28
|
+
@columns_updated = columns_updated
|
|
29
|
+
super
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Unset the updated columns hash before returning from save.
|
|
33
|
+
def _save(opts)
|
|
34
|
+
super
|
|
35
|
+
ensure
|
|
36
|
+
@columns_updated = nil
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
module Plugins
|
|
3
5
|
# The composition plugin allows you to easily define a virtual
|
|
@@ -10,7 +12,7 @@ module Sequel
|
|
|
10
12
|
# This can be handled with:
|
|
11
13
|
#
|
|
12
14
|
# Album.plugin :composition
|
|
13
|
-
# Album.composition :date, :
|
|
15
|
+
# Album.composition :date, mapping: [:year, :month, :day]
|
|
14
16
|
#
|
|
15
17
|
# With the :mapping option, you can provide a :class option
|
|
16
18
|
# that gives the class to use, but if that is not provided, it
|
|
@@ -30,9 +32,10 @@ module Sequel
|
|
|
30
32
|
#
|
|
31
33
|
# The :mapping option is just a shortcut that works in particular
|
|
32
34
|
# cases. To handle any case, you can define a custom :composer
|
|
33
|
-
# and :decomposer procs. The :composer
|
|
34
|
-
#
|
|
35
|
-
#
|
|
35
|
+
# and :decomposer procs. The :composer and :decomposer procs will
|
|
36
|
+
# be used to define instance methods. The :composer will be called
|
|
37
|
+
# the first time the getter is called, and the :decomposer
|
|
38
|
+
# will be called before saving. The above example could
|
|
36
39
|
# also be implemented as:
|
|
37
40
|
#
|
|
38
41
|
# Album.composition :date,
|
|
@@ -56,7 +59,10 @@ module Sequel
|
|
|
56
59
|
module Composition
|
|
57
60
|
# Define the necessary class instance variables.
|
|
58
61
|
def self.apply(model)
|
|
59
|
-
model.
|
|
62
|
+
model.instance_exec do
|
|
63
|
+
@compositions = {}
|
|
64
|
+
include(@composition_module ||= Module.new)
|
|
65
|
+
end
|
|
60
66
|
end
|
|
61
67
|
|
|
62
68
|
module ClassMethods
|
|
@@ -64,18 +70,14 @@ module Sequel
|
|
|
64
70
|
# hash values.
|
|
65
71
|
attr_reader :compositions
|
|
66
72
|
|
|
67
|
-
# A module included in the class holding the composition
|
|
68
|
-
# getter and setter methods.
|
|
69
|
-
attr_reader :composition_module
|
|
70
|
-
|
|
71
73
|
# Define a composition for this model, with name being the name of the composition.
|
|
72
74
|
# You must provide either a :mapping option or both the :composer and :decomposer options.
|
|
73
75
|
#
|
|
74
76
|
# Options:
|
|
75
77
|
# :class :: if using the :mapping option, the class to use, as a Class, String or Symbol.
|
|
76
|
-
# :composer :: A proc
|
|
78
|
+
# :composer :: A proc used to define the method that the composition getter method will call
|
|
77
79
|
# to create the composition.
|
|
78
|
-
# :decomposer :: A proc
|
|
80
|
+
# :decomposer :: A proc used to define the method called before saving the model object,
|
|
79
81
|
# if the composition object exists, which sets the columns in the model object
|
|
80
82
|
# based on the value of the composition object.
|
|
81
83
|
# :mapping :: An array where each element is either a symbol or an array of two symbols.
|
|
@@ -84,12 +86,12 @@ module Sequel
|
|
|
84
86
|
# represents the getter method in the composition object. Example:
|
|
85
87
|
# # Uses columns year, month, and day in the current model
|
|
86
88
|
# # Uses year, month, and day methods in the composition object
|
|
87
|
-
# {:
|
|
89
|
+
# {mapping: [:year, :month, :day]}
|
|
88
90
|
# # Uses columns year, month, and day in the current model
|
|
89
91
|
# # Uses y, m, and d methods in the composition object where
|
|
90
92
|
# # for example y in the composition object represents year
|
|
91
93
|
# # in the model object.
|
|
92
|
-
# {:
|
|
94
|
+
# {mapping: [[:year, :y], [:month, :m], [:day, :d]]}
|
|
93
95
|
def composition(name, opts=OPTS)
|
|
94
96
|
opts = opts.dup
|
|
95
97
|
compositions[name] = opts
|
|
@@ -113,9 +115,9 @@ module Sequel
|
|
|
113
115
|
setters = setter_meths.zip(cov_methods)
|
|
114
116
|
opts[:decomposer] = proc do
|
|
115
117
|
if (o = compositions[name]).nil?
|
|
116
|
-
setter_meths.each{|sm|
|
|
118
|
+
setter_meths.each{|sm| set_column_value(sm, nil)}
|
|
117
119
|
else
|
|
118
|
-
setters.each{|sm, cm|
|
|
120
|
+
setters.each{|sm, cm| set_column_value(sm, o.public_send(cm))}
|
|
119
121
|
end
|
|
120
122
|
end
|
|
121
123
|
end
|
|
@@ -128,16 +130,17 @@ module Sequel
|
|
|
128
130
|
|
|
129
131
|
# Define getter and setter methods for the composition object.
|
|
130
132
|
def define_composition_accessor(name, opts=OPTS)
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
composition_module.class_eval do
|
|
133
|
+
composer_meth = opts[:composer_method] = Plugins.def_sequel_method(@composition_module, "#{name}_composer", 0, &opts[:composer])
|
|
134
|
+
opts[:decomposer_method] = Plugins.def_sequel_method(@composition_module, "#{name}_decomposer", 0, &opts[:decomposer])
|
|
135
|
+
@composition_module.class_eval do
|
|
134
136
|
define_method(name) do
|
|
135
137
|
if compositions.has_key?(name)
|
|
136
138
|
compositions[name]
|
|
137
139
|
elsif frozen?
|
|
138
|
-
|
|
140
|
+
# composer_meth is private
|
|
141
|
+
send(composer_meth)
|
|
139
142
|
else
|
|
140
|
-
compositions[name] =
|
|
143
|
+
compositions[name] = send(composer_meth)
|
|
141
144
|
end
|
|
142
145
|
end
|
|
143
146
|
define_method("#{name}=") do |v|
|
|
@@ -146,6 +149,14 @@ module Sequel
|
|
|
146
149
|
end
|
|
147
150
|
end
|
|
148
151
|
end
|
|
152
|
+
|
|
153
|
+
# Freeze composition information when freezing model class.
|
|
154
|
+
def freeze
|
|
155
|
+
compositions.freeze.each_value(&:freeze)
|
|
156
|
+
@composition_module.freeze
|
|
157
|
+
|
|
158
|
+
super
|
|
159
|
+
end
|
|
149
160
|
end
|
|
150
161
|
|
|
151
162
|
module InstanceMethods
|
|
@@ -160,15 +171,16 @@ module Sequel
|
|
|
160
171
|
super
|
|
161
172
|
end
|
|
162
173
|
|
|
163
|
-
private
|
|
164
|
-
|
|
165
174
|
# For each composition, set the columns in the model class based
|
|
166
175
|
# on the composition object.
|
|
167
|
-
def
|
|
168
|
-
|
|
176
|
+
def before_validation
|
|
177
|
+
# decomposer_method is private
|
|
178
|
+
@compositions.keys.each{|n| send(model.compositions[n][:decomposer_method])} if @compositions
|
|
169
179
|
super
|
|
170
180
|
end
|
|
171
181
|
|
|
182
|
+
private
|
|
183
|
+
|
|
172
184
|
# Clear the cached compositions when manually refreshing.
|
|
173
185
|
def _refresh_set_values(hash)
|
|
174
186
|
@compositions.clear if @compositions
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
module Plugins
|
|
3
5
|
# The constraint_validations plugin is designed to be used with databases
|
|
@@ -17,7 +19,7 @@ module Sequel
|
|
|
17
19
|
#
|
|
18
20
|
# Then when you went to save an album that uses this plugin:
|
|
19
21
|
#
|
|
20
|
-
# Album.create(:
|
|
22
|
+
# Album.create(name: 'abc')
|
|
21
23
|
# # raises Sequel::ValidationFailed: name is shorter than 5 characters
|
|
22
24
|
#
|
|
23
25
|
# Usage:
|
|
@@ -31,9 +33,13 @@ module Sequel
|
|
|
31
33
|
# The default constraint validation metadata table name.
|
|
32
34
|
DEFAULT_CONSTRAINT_VALIDATIONS_TABLE = :sequel_constraint_validations
|
|
33
35
|
|
|
36
|
+
# Mapping of operator names in table to ruby operators
|
|
37
|
+
OPERATOR_MAP = {:str_lt => :<, :str_lte => :<=, :str_gt => :>, :str_gte => :>=,
|
|
38
|
+
:int_lt => :<, :int_lte => :<=, :int_gt => :>, :int_gte => :>=}.freeze
|
|
39
|
+
|
|
34
40
|
# Automatically load the validation_helpers plugin to run the actual validations.
|
|
35
41
|
def self.apply(model, opts=OPTS)
|
|
36
|
-
model.
|
|
42
|
+
model.instance_exec do
|
|
37
43
|
plugin :validation_helpers
|
|
38
44
|
@constraint_validations_table = DEFAULT_CONSTRAINT_VALIDATIONS_TABLE
|
|
39
45
|
@constraint_validation_options = {}
|
|
@@ -50,7 +56,7 @@ module Sequel
|
|
|
50
56
|
# :presence) and values should be hashes of options specific
|
|
51
57
|
# to that validation type.
|
|
52
58
|
def self.configure(model, opts=OPTS)
|
|
53
|
-
model.
|
|
59
|
+
model.instance_exec do
|
|
54
60
|
if table = opts[:constraint_validations_table]
|
|
55
61
|
@constraint_validations_table = table
|
|
56
62
|
end
|
|
@@ -66,13 +72,6 @@ module Sequel
|
|
|
66
72
|
end
|
|
67
73
|
end
|
|
68
74
|
|
|
69
|
-
module DatabaseMethods
|
|
70
|
-
# A hash of validation method call metadata for all tables in the database.
|
|
71
|
-
# The hash is keyed by table name string and contains arrays of validation
|
|
72
|
-
# method call arrays.
|
|
73
|
-
attr_accessor :constraint_validations
|
|
74
|
-
end
|
|
75
|
-
|
|
76
75
|
module ClassMethods
|
|
77
76
|
# An array of validation method call arrays. Each array is an array that
|
|
78
77
|
# is splatted to send to perform a validation via validation_helpers.
|
|
@@ -91,6 +90,18 @@ module Sequel
|
|
|
91
90
|
Plugins.inherited_instance_variables(self, :@constraint_validations_table=>nil, :@constraint_validation_options=>:hash_dup)
|
|
92
91
|
Plugins.after_set_dataset(self, :parse_constraint_validations)
|
|
93
92
|
|
|
93
|
+
# Freeze constraint validations data when freezing model class.
|
|
94
|
+
def freeze
|
|
95
|
+
@constraint_validations.freeze.each(&:freeze)
|
|
96
|
+
@constraint_validation_reflections.freeze.each_value do |v|
|
|
97
|
+
v.freeze
|
|
98
|
+
v.each(&:freeze)
|
|
99
|
+
end
|
|
100
|
+
@constraint_validation_options.freeze.each_value(&:freeze)
|
|
101
|
+
|
|
102
|
+
super
|
|
103
|
+
end
|
|
104
|
+
|
|
94
105
|
private
|
|
95
106
|
|
|
96
107
|
# If the database has not already parsed constraint validation
|
|
@@ -100,7 +111,7 @@ module Sequel
|
|
|
100
111
|
# If this model has associated dataset, use the model's table name
|
|
101
112
|
# to get the validations for just this model.
|
|
102
113
|
def parse_constraint_validations
|
|
103
|
-
db.
|
|
114
|
+
db.extension(:_model_constraint_validations)
|
|
104
115
|
|
|
105
116
|
unless hash = Sequel.synchronize{db.constraint_validations}
|
|
106
117
|
hash = {}
|
|
@@ -111,8 +122,7 @@ module Sequel
|
|
|
111
122
|
end
|
|
112
123
|
|
|
113
124
|
if @dataset
|
|
114
|
-
ds = @dataset.
|
|
115
|
-
ds.quote_identifiers = false
|
|
125
|
+
ds = @dataset.with_quote_identifiers(false)
|
|
116
126
|
table_name = ds.literal(ds.first_source_table)
|
|
117
127
|
reflections = {}
|
|
118
128
|
@constraint_validations = (Sequel.synchronize{hash[table_name]} || []).map{|r| constraint_validation_array(r, reflections)}
|
|
@@ -152,6 +162,10 @@ module Sequel
|
|
|
152
162
|
when :includes_int_range
|
|
153
163
|
arg = constraint_validation_int_range(arg)
|
|
154
164
|
type = :includes
|
|
165
|
+
when *OPERATOR_MAP.keys
|
|
166
|
+
arg = arg.to_i if type.to_s =~ /\Aint_/
|
|
167
|
+
operator = OPERATOR_MAP[type]
|
|
168
|
+
type = :operator
|
|
155
169
|
end
|
|
156
170
|
|
|
157
171
|
column = if type == :unique
|
|
@@ -161,16 +175,22 @@ module Sequel
|
|
|
161
175
|
end
|
|
162
176
|
|
|
163
177
|
if type_opts = @constraint_validation_options[type]
|
|
164
|
-
opts
|
|
178
|
+
opts.merge!(type_opts)
|
|
165
179
|
end
|
|
166
180
|
|
|
167
|
-
reflection_opts = opts
|
|
181
|
+
reflection_opts = opts.dup
|
|
168
182
|
a = [:"validates_#{type}"]
|
|
169
183
|
|
|
184
|
+
if operator
|
|
185
|
+
a << operator
|
|
186
|
+
reflection_opts[:operator] = operator
|
|
187
|
+
end
|
|
188
|
+
|
|
170
189
|
if arg
|
|
171
190
|
a << arg
|
|
172
|
-
reflection_opts =
|
|
191
|
+
reflection_opts[:argument] = arg
|
|
173
192
|
end
|
|
193
|
+
|
|
174
194
|
a << column
|
|
175
195
|
unless opts.empty?
|
|
176
196
|
a << opts
|
|
@@ -220,6 +240,7 @@ module Sequel
|
|
|
220
240
|
def validate
|
|
221
241
|
super
|
|
222
242
|
model.constraint_validations.each do |v|
|
|
243
|
+
# Allow calling private validation methods
|
|
223
244
|
send(*v)
|
|
224
245
|
end
|
|
225
246
|
end
|
|
@@ -1,40 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
# :nocov:
|
|
5
|
-
else
|
|
6
|
-
require 'csv'
|
|
7
|
-
end
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
require 'csv'
|
|
8
4
|
|
|
9
5
|
module Sequel
|
|
10
6
|
module Plugins
|
|
11
7
|
# csv_serializer handles serializing entire Sequel::Model objects to CSV,
|
|
12
8
|
# as well as support for deserializing CSV directly into Sequel::Model
|
|
13
|
-
# objects. It requires
|
|
14
|
-
# or the fastercsv gem when using ruby 1.8.
|
|
9
|
+
# objects. It requires the csv standard library.
|
|
15
10
|
#
|
|
16
11
|
# Basic Example:
|
|
17
12
|
#
|
|
18
13
|
# album = Album[1]
|
|
19
|
-
# album.to_csv(:
|
|
14
|
+
# album.to_csv(write_headers: true)
|
|
20
15
|
# # => "id,name,artist_id\n1,RF,2\n"
|
|
21
16
|
#
|
|
22
17
|
# You can provide options to control the CSV output:
|
|
23
18
|
#
|
|
24
|
-
# album.to_csv(:
|
|
25
|
-
# album.to_csv(:
|
|
19
|
+
# album.to_csv(only: :name)
|
|
20
|
+
# album.to_csv(except: [:id, :artist_id])
|
|
26
21
|
# # => "RF\n"
|
|
27
22
|
#
|
|
28
23
|
# +to_csv+ also exists as a class and dataset method, both of which return
|
|
29
24
|
# all objects in the dataset:
|
|
30
25
|
#
|
|
31
26
|
# Album.to_csv
|
|
32
|
-
# Album.
|
|
27
|
+
# Album.where(artist_id: 1).to_csv
|
|
33
28
|
#
|
|
34
|
-
# If you have an existing array of model
|
|
29
|
+
# If you have an existing array of model instances you want to convert to
|
|
35
30
|
# CSV, you can call the class to_csv method with the :array option:
|
|
36
31
|
#
|
|
37
|
-
# Album.to_csv(:
|
|
32
|
+
# Album.to_csv(array: [Album[1], Album[2]])
|
|
38
33
|
#
|
|
39
34
|
# In addition to creating CSV, this plugin also enables Sequel::Model
|
|
40
35
|
# classes to create instances directly from CSV using the from_csv class
|
|
@@ -46,7 +41,7 @@ module Sequel
|
|
|
46
41
|
# The array_from_csv class method exists to parse arrays of model instances
|
|
47
42
|
# from CSV:
|
|
48
43
|
#
|
|
49
|
-
# csv = Album.
|
|
44
|
+
# csv = Album.where(artist_id: 1).to_csv
|
|
50
45
|
# albums = Album.array_from_csv(csv)
|
|
51
46
|
#
|
|
52
47
|
# These do not necessarily round trip, since doing so would let users
|
|
@@ -54,7 +49,7 @@ module Sequel
|
|
|
54
49
|
# call set with the values in the hash. If you want to specify the allowed
|
|
55
50
|
# fields, you can use the :headers option.
|
|
56
51
|
#
|
|
57
|
-
# Album.from_csv(album.to_csv, :
|
|
52
|
+
# Album.from_csv(album.to_csv, headers: %w'id name')
|
|
58
53
|
#
|
|
59
54
|
# If you want to update an existing instance, you can use the from_csv
|
|
60
55
|
# instance method:
|
|
@@ -70,41 +65,67 @@ module Sequel
|
|
|
70
65
|
# # Add CSV output capability to Album class instances
|
|
71
66
|
# Album.plugin :csv_serializer
|
|
72
67
|
module CsvSerializer
|
|
73
|
-
CSV = Object.const_defined?(:CSV) ? ::CSV : ::FasterCSV
|
|
74
|
-
|
|
75
68
|
# Set up the column readers to do deserialization and the column writers
|
|
76
69
|
# to save the value in deserialized_values
|
|
77
|
-
def self.configure(model, opts =
|
|
78
|
-
model.
|
|
79
|
-
@csv_serializer_opts = (@csv_serializer_opts ||
|
|
70
|
+
def self.configure(model, opts = OPTS)
|
|
71
|
+
model.instance_exec do
|
|
72
|
+
@csv_serializer_opts = (@csv_serializer_opts || OPTS).merge(opts)
|
|
80
73
|
end
|
|
81
74
|
end
|
|
82
75
|
|
|
76
|
+
# Avoid keyword argument separation warnings on Ruby 2.7, while still
|
|
77
|
+
# being compatible with 1.9.
|
|
78
|
+
if RUBY_VERSION >= "2.0"
|
|
79
|
+
instance_eval(<<-END, __FILE__, __LINE__+1)
|
|
80
|
+
def self.csv_call(*args, opts, &block)
|
|
81
|
+
CSV.send(*args, **opts, &block)
|
|
82
|
+
end
|
|
83
|
+
END
|
|
84
|
+
else
|
|
85
|
+
# :nocov:
|
|
86
|
+
# :nodoc:
|
|
87
|
+
def self.csv_call(*args, opts, &block)
|
|
88
|
+
CSV.send(*args, opts, &block)
|
|
89
|
+
end
|
|
90
|
+
# :nodoc:
|
|
91
|
+
# :nocov:
|
|
92
|
+
end
|
|
93
|
+
|
|
83
94
|
module ClassMethods
|
|
84
95
|
# The default opts to use when serializing model objects to CSV
|
|
85
96
|
attr_reader :csv_serializer_opts
|
|
86
97
|
|
|
87
98
|
# Attempt to parse an array of instances from the given CSV string
|
|
88
|
-
def array_from_csv(csv, opts =
|
|
89
|
-
|
|
99
|
+
def array_from_csv(csv, opts = OPTS)
|
|
100
|
+
CsvSerializer.csv_call(:parse, csv, process_csv_serializer_opts(opts)).map do |row|
|
|
90
101
|
row = row.to_hash
|
|
91
102
|
row.delete(nil)
|
|
92
103
|
new(row)
|
|
93
104
|
end
|
|
94
105
|
end
|
|
95
106
|
|
|
107
|
+
# Freeze csv serializier opts when freezing model class
|
|
108
|
+
def freeze
|
|
109
|
+
@csv_serializer_opts.freeze.each_value do |v|
|
|
110
|
+
v.freeze if v.is_a?(Array) || v.is_a?(Hash)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
super
|
|
114
|
+
end
|
|
115
|
+
|
|
96
116
|
# Attempt to parse a single instance from the given CSV string
|
|
97
|
-
def from_csv(csv, opts =
|
|
117
|
+
def from_csv(csv, opts = OPTS)
|
|
98
118
|
new.from_csv(csv, opts)
|
|
99
119
|
end
|
|
100
120
|
|
|
101
121
|
# Convert the options hash to one that can be passed to CSV.
|
|
102
122
|
def process_csv_serializer_opts(opts)
|
|
103
|
-
opts = (csv_serializer_opts ||
|
|
123
|
+
opts = (csv_serializer_opts || OPTS).merge(opts)
|
|
104
124
|
opts_cols = opts.delete(:columns)
|
|
105
125
|
opts_include = opts.delete(:include)
|
|
106
126
|
opts_except = opts.delete(:except)
|
|
107
|
-
|
|
127
|
+
only = opts.delete(:only)
|
|
128
|
+
opts[:headers] ||= Array(only || opts_cols || columns) + Array(opts_include) - Array(opts_except)
|
|
108
129
|
opts
|
|
109
130
|
end
|
|
110
131
|
|
|
@@ -125,8 +146,8 @@ module Sequel
|
|
|
125
146
|
#
|
|
126
147
|
# :headers :: The headers to use for the CSV line. Use nil for a header
|
|
127
148
|
# to specify the column should be ignored.
|
|
128
|
-
def from_csv(csv, opts =
|
|
129
|
-
row =
|
|
149
|
+
def from_csv(csv, opts = OPTS)
|
|
150
|
+
row = CsvSerializer.csv_call(:parse_line, csv, model.process_csv_serializer_opts(opts)).to_hash
|
|
130
151
|
row.delete(nil)
|
|
131
152
|
set(row)
|
|
132
153
|
end
|
|
@@ -140,11 +161,12 @@ module Sequel
|
|
|
140
161
|
# output, ignoring all other columns
|
|
141
162
|
# :include :: Symbol or Array of Symbols specifying non-column
|
|
142
163
|
# attributes to include in the CSV output.
|
|
143
|
-
def to_csv(opts =
|
|
164
|
+
def to_csv(opts = OPTS)
|
|
144
165
|
opts = model.process_csv_serializer_opts(opts)
|
|
166
|
+
headers = opts[:headers]
|
|
145
167
|
|
|
146
|
-
|
|
147
|
-
csv <<
|
|
168
|
+
CsvSerializer.csv_call(:generate, model.process_csv_serializer_opts(opts)) do |csv|
|
|
169
|
+
csv << headers.map{|k| public_send(k)}
|
|
148
170
|
end
|
|
149
171
|
end
|
|
150
172
|
end
|
|
@@ -157,13 +179,14 @@ module Sequel
|
|
|
157
179
|
#
|
|
158
180
|
# :array :: An array of instances. If this is not provided, calls #all
|
|
159
181
|
# on the receiver to get the array.
|
|
160
|
-
def to_csv(opts =
|
|
182
|
+
def to_csv(opts = OPTS)
|
|
161
183
|
opts = model.process_csv_serializer_opts({:columns=>columns}.merge!(opts))
|
|
162
184
|
items = opts.delete(:array) || self
|
|
185
|
+
headers = opts[:headers]
|
|
163
186
|
|
|
164
|
-
|
|
187
|
+
CsvSerializer.csv_call(:generate, opts) do |csv|
|
|
165
188
|
items.each do |object|
|
|
166
|
-
csv <<
|
|
189
|
+
csv << headers.map{|header| object.public_send(header)}
|
|
167
190
|
end
|
|
168
191
|
end
|
|
169
192
|
end
|