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,7 +1,9 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
module Sequel
|
|
2
4
|
module Plugins
|
|
3
|
-
# The validation_helpers plugin contains
|
|
4
|
-
#
|
|
5
|
+
# The validation_helpers plugin contains validate_* methods designed to be called inside Model#validate
|
|
6
|
+
# to perform validations:
|
|
5
7
|
#
|
|
6
8
|
# Sequel::Model.plugin :validation_helpers
|
|
7
9
|
# class Album < Sequel::Model
|
|
@@ -17,9 +19,7 @@ module Sequel
|
|
|
17
19
|
# atts :: Single attribute symbol or an array of attribute symbols specifying the
|
|
18
20
|
# attribute(s) to validate.
|
|
19
21
|
# Options:
|
|
20
|
-
# :allow_blank :: Whether to skip the validation if the value is blank.
|
|
21
|
-
# make sure all objects respond to blank if you use this option, which you can do by:
|
|
22
|
-
# Sequel.extension :blank
|
|
22
|
+
# :allow_blank :: Whether to skip the validation if the value is blank.
|
|
23
23
|
# :allow_missing :: Whether to skip the validation if the attribute isn't a key in the
|
|
24
24
|
# values hash. This is different from allow_nil, because Sequel only sends the attributes
|
|
25
25
|
# in the values when doing an insert or update. If the attribute is not present, Sequel
|
|
@@ -38,17 +38,24 @@ module Sequel
|
|
|
38
38
|
# that argument is passed as an argument to the proc.
|
|
39
39
|
#
|
|
40
40
|
# The default validation options for all models can be modified by
|
|
41
|
-
#
|
|
42
|
-
# change change the default options on a per model basis
|
|
43
|
-
# by overriding a private instance method default_validation_helpers_options.
|
|
44
|
-
#
|
|
41
|
+
# overridding the Model#default_validation_helpers_options private method.
|
|
45
42
|
# By changing the default options, you can setup internationalization of the
|
|
46
43
|
# error messages. For example, you would modify the default options:
|
|
47
44
|
#
|
|
48
|
-
# Sequel::
|
|
49
|
-
#
|
|
50
|
-
#
|
|
51
|
-
#
|
|
45
|
+
# class Sequel::Model
|
|
46
|
+
# private
|
|
47
|
+
#
|
|
48
|
+
# def default_validation_helpers_options(type)
|
|
49
|
+
# case type
|
|
50
|
+
# when :exact_length
|
|
51
|
+
# {message: lambda{|exact| I18n.t("errors.exact_length", exact: exact)}}
|
|
52
|
+
# when :integer
|
|
53
|
+
# {message: lambda{I18n.t("errors.integer")}}
|
|
54
|
+
# else
|
|
55
|
+
# super
|
|
56
|
+
# end
|
|
57
|
+
# end
|
|
58
|
+
# end
|
|
52
59
|
#
|
|
53
60
|
# and then use something like this in your yaml translation file:
|
|
54
61
|
#
|
|
@@ -61,20 +68,16 @@ module Sequel
|
|
|
61
68
|
# you need to override the method. Here's an example:
|
|
62
69
|
#
|
|
63
70
|
# class Sequel::Model::Errors
|
|
64
|
-
# ATTRIBUTE_JOINER = I18n.t('errors.joiner').freeze
|
|
65
71
|
# def full_messages
|
|
66
72
|
# inject([]) do |m, kv|
|
|
67
73
|
# att, errors = *kv
|
|
68
74
|
# att.is_a?(Array) ? Array(att).map!{|v| I18n.t("attributes.#{v}")} : att = I18n.t("attributes.#{att}")
|
|
69
|
-
# errors.each {|e| m << (e.is_a?(LiteralString) ? e : "#{Array(att).join(
|
|
75
|
+
# errors.each {|e| m << (e.is_a?(LiteralString) ? e : "#{Array(att).join(I18n.t('errors.joiner'))} #{e}")}
|
|
70
76
|
# m
|
|
71
77
|
# end
|
|
72
78
|
# end
|
|
73
79
|
# end
|
|
74
80
|
module ValidationHelpers
|
|
75
|
-
# Default validation options used by Sequel. Can be modified to change the error
|
|
76
|
-
# messages for all models (e.g. for internationalization), or to set certain
|
|
77
|
-
# default options for validations (e.g. :allow_nil=>true for all validates_format).
|
|
78
81
|
DEFAULT_OPTIONS = {
|
|
79
82
|
:exact_length=>{:message=>lambda{|exact| "is not #{exact} characters"}},
|
|
80
83
|
:format=>{:message=>lambda{|with| 'is invalid'}},
|
|
@@ -85,10 +88,12 @@ module Sequel
|
|
|
85
88
|
:min_length=>{:message=>lambda{|min| "is shorter than #{min} characters"}},
|
|
86
89
|
:not_null=>{:message=>lambda{"is not present"}},
|
|
87
90
|
:numeric=>{:message=>lambda{"is not a number"}},
|
|
91
|
+
:operator=>{:message=>lambda{|operator, rhs| "is not #{operator} #{rhs}"}},
|
|
88
92
|
:type=>{:message=>lambda{|klass| klass.is_a?(Array) ? "is not a valid #{klass.join(" or ").downcase}" : "is not a valid #{klass.to_s.downcase}"}},
|
|
89
93
|
:presence=>{:message=>lambda{"is not present"}},
|
|
90
94
|
:unique=>{:message=>lambda{'is already taken'}}
|
|
91
|
-
}
|
|
95
|
+
}.freeze
|
|
96
|
+
DEFAULT_OPTIONS.each_value(&:freeze)
|
|
92
97
|
|
|
93
98
|
module InstanceMethods
|
|
94
99
|
# Check that the attribute values are the given exact length.
|
|
@@ -103,7 +108,7 @@ module Sequel
|
|
|
103
108
|
|
|
104
109
|
# Check attribute value(s) is included in the given set.
|
|
105
110
|
def validates_includes(set, atts, opts=OPTS)
|
|
106
|
-
validatable_attributes_for_type(:includes, atts, opts){|a,v,m| validation_error_message(m, set) unless set.
|
|
111
|
+
validatable_attributes_for_type(:includes, atts, opts){|a,v,m| validation_error_message(m, set) unless set.public_send(set.respond_to?(:cover?) ? :cover? : :include?, v)}
|
|
107
112
|
end
|
|
108
113
|
|
|
109
114
|
# Check attribute value(s) string representation is a valid integer.
|
|
@@ -120,7 +125,7 @@ module Sequel
|
|
|
120
125
|
|
|
121
126
|
# Check that the attribute values length is in the specified range.
|
|
122
127
|
def validates_length_range(range, atts, opts=OPTS)
|
|
123
|
-
validatable_attributes_for_type(:length_range, atts, opts){|a,v,m| validation_error_message(m, range) if v.nil? || !range.
|
|
128
|
+
validatable_attributes_for_type(:length_range, atts, opts){|a,v,m| validation_error_message(m, range) if v.nil? || !range.cover?(v.length)}
|
|
124
129
|
end
|
|
125
130
|
|
|
126
131
|
# Check that the attribute values are not longer than the given max length.
|
|
@@ -128,7 +133,13 @@ module Sequel
|
|
|
128
133
|
# Accepts a :nil_message option that is the error message to use when the
|
|
129
134
|
# value is nil instead of being too long.
|
|
130
135
|
def validates_max_length(max, atts, opts=OPTS)
|
|
131
|
-
validatable_attributes_for_type(:max_length, atts, opts)
|
|
136
|
+
validatable_attributes_for_type(:max_length, atts, opts) do |a,v,m|
|
|
137
|
+
if v.nil?
|
|
138
|
+
validation_error_message(opts[:nil_message] || default_validation_helpers_options(:max_length)[:nil_message])
|
|
139
|
+
elsif v.length > max
|
|
140
|
+
validation_error_message(m, max)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
132
143
|
end
|
|
133
144
|
|
|
134
145
|
# Check that the attribute values are not shorter than the given min length.
|
|
@@ -153,6 +164,12 @@ module Sequel
|
|
|
153
164
|
end
|
|
154
165
|
end
|
|
155
166
|
|
|
167
|
+
# Check attribute value(s) against a specified value and operation, e.g.
|
|
168
|
+
# validates_operator(:>, 3, :value) validates that value > 3.
|
|
169
|
+
def validates_operator(operator, rhs, atts, opts=OPTS)
|
|
170
|
+
validatable_attributes_for_type(:operator, atts, opts){|a,v,m| validation_error_message(m, operator, rhs) if v.nil? || !v.public_send(operator, rhs)}
|
|
171
|
+
end
|
|
172
|
+
|
|
156
173
|
# Validates for all of the model columns (or just the given columns)
|
|
157
174
|
# that the column value is an instance of the expected class based on
|
|
158
175
|
# the column's schema type.
|
|
@@ -195,7 +212,7 @@ module Sequel
|
|
|
195
212
|
# must be unique. So if you are doing a soft delete of records, in which
|
|
196
213
|
# the name must be unique, but only for active records:
|
|
197
214
|
#
|
|
198
|
-
# validates_unique(:name){|ds| ds.
|
|
215
|
+
# validates_unique(:name){|ds| ds.where(:active)}
|
|
199
216
|
#
|
|
200
217
|
# You should also add a unique index in the
|
|
201
218
|
# database, as this suffers from a fairly obvious race condition.
|
|
@@ -208,18 +225,18 @@ module Sequel
|
|
|
208
225
|
# model's dataset.
|
|
209
226
|
# :message :: The message to use (default: 'is already taken')
|
|
210
227
|
# :only_if_modified :: Only check the uniqueness if the object is new or
|
|
211
|
-
# one of the columns has been modified.
|
|
228
|
+
# one of the columns has been modified, true by default.
|
|
212
229
|
# :where :: A callable object where call takes three arguments, a dataset,
|
|
213
230
|
# the current object, and an array of columns, and should return
|
|
214
231
|
# a modified dataset that is filtered to include only rows with
|
|
215
232
|
# the same values as the current object for each column in the array.
|
|
216
233
|
#
|
|
217
|
-
# If you want to
|
|
234
|
+
# If you want to do a case insensitive uniqueness validation on a database that
|
|
218
235
|
# is case sensitive by default, you can use:
|
|
219
236
|
#
|
|
220
|
-
# validates_unique :column, :
|
|
237
|
+
# validates_unique :column, where:(lambda do |ds, obj, cols|
|
|
221
238
|
# ds.where(cols.map do |c|
|
|
222
|
-
# v = obj.
|
|
239
|
+
# v = obj.public_send(c)
|
|
223
240
|
# v = v.downcase if v
|
|
224
241
|
# [Sequel.function(:lower, c), v]
|
|
225
242
|
# end)
|
|
@@ -227,7 +244,7 @@ module Sequel
|
|
|
227
244
|
def validates_unique(*atts)
|
|
228
245
|
opts = default_validation_helpers_options(:unique)
|
|
229
246
|
if atts.last.is_a?(Hash)
|
|
230
|
-
opts =
|
|
247
|
+
opts = opts.merge(atts.pop)
|
|
231
248
|
end
|
|
232
249
|
message = validation_error_message(opts[:message])
|
|
233
250
|
from_values = opts[:from] == :values
|
|
@@ -235,7 +252,8 @@ module Sequel
|
|
|
235
252
|
atts.each do |a|
|
|
236
253
|
arr = Array(a)
|
|
237
254
|
next if arr.any?{|x| errors.on(x)}
|
|
238
|
-
|
|
255
|
+
cc = changed_columns
|
|
256
|
+
next if opts.fetch(:only_if_modified, true) && !new? && !arr.any?{|x| cc.include?(x)}
|
|
239
257
|
ds = opts[:dataset] || model.dataset
|
|
240
258
|
ds = if where
|
|
241
259
|
where.call(ds, self, arr)
|
|
@@ -274,7 +292,7 @@ module Sequel
|
|
|
274
292
|
next if am && !values.has_key?(a)
|
|
275
293
|
v = from_values ? values[a] : get_column_value(a)
|
|
276
294
|
next if an && v.nil?
|
|
277
|
-
next if ab &&
|
|
295
|
+
next if ab && model.db.send(:blank_object?, v)
|
|
278
296
|
if message = yield(a, v, m)
|
|
279
297
|
errors.add(a, message)
|
|
280
298
|
end
|
|
@@ -284,7 +302,7 @@ module Sequel
|
|
|
284
302
|
# Merge the given options with the default options for the given type
|
|
285
303
|
# and call validatable_attributes with the merged options.
|
|
286
304
|
def validatable_attributes_for_type(type, atts, opts, &block)
|
|
287
|
-
validatable_attributes(atts,
|
|
305
|
+
validatable_attributes(atts, default_validation_helpers_options(type).merge(opts), &block)
|
|
288
306
|
end
|
|
289
307
|
|
|
290
308
|
# The validation error message to use, as a string. If message
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
module Sequel
|
|
4
|
+
module Plugins
|
|
5
|
+
# The whitelist_security plugin contains whitelist-based support for
|
|
6
|
+
# mass assignment, explicitly specifying which columns to allow mass assignment for,
|
|
7
|
+
# disallowing mass assignment for columns not listed. This exists mostly for backwards
|
|
8
|
+
# compatibility, it's best to use Sequel::Model#set_fields and Sequel::Model#update_fields
|
|
9
|
+
# to decide which fields to allow on a per-call basis.
|
|
10
|
+
#
|
|
11
|
+
# Usage:
|
|
12
|
+
#
|
|
13
|
+
# # Make all model subclasses support allowed_columns
|
|
14
|
+
# Sequel::Model.plugin :whitelist_security
|
|
15
|
+
#
|
|
16
|
+
# # Make the Album class support allowed_columns
|
|
17
|
+
# Album.plugin :whitelist_security
|
|
18
|
+
module WhitelistSecurity
|
|
19
|
+
module ClassMethods
|
|
20
|
+
# Which columns should be the only columns allowed in a call to a mass assignment method (e.g. set)
|
|
21
|
+
# (default: not set, so all columns not otherwise restricted are allowed).
|
|
22
|
+
attr_reader :allowed_columns
|
|
23
|
+
|
|
24
|
+
Plugins.inherited_instance_variables(self, :@allowed_columns=>:dup)
|
|
25
|
+
|
|
26
|
+
# Freeze allowed columns when freezing model class.
|
|
27
|
+
def freeze
|
|
28
|
+
@allowed_columns.freeze
|
|
29
|
+
super
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Set the columns to allow when using mass assignment (e.g. +set+). Using this means that
|
|
33
|
+
# any columns not listed here will not be modified. If you have any virtual
|
|
34
|
+
# setter methods (methods that end in =) that you want to be used during
|
|
35
|
+
# mass assignment, they need to be listed here as well (without the =).
|
|
36
|
+
#
|
|
37
|
+
# It may be better to use +set_fields+ which lets you specify
|
|
38
|
+
# the allowed fields per call.
|
|
39
|
+
#
|
|
40
|
+
# Artist.set_allowed_columns(:name, :hometown)
|
|
41
|
+
# Artist.set(name: 'Bob', hometown: 'Sactown') # No Error
|
|
42
|
+
# Artist.set(name: 'Bob', records_sold: 30000) # Error
|
|
43
|
+
def set_allowed_columns(*cols)
|
|
44
|
+
clear_setter_methods_cache
|
|
45
|
+
@allowed_columns = cols
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
# If allowed_columns is set, only allow those columns.
|
|
51
|
+
def get_setter_methods
|
|
52
|
+
if allowed_columns
|
|
53
|
+
allowed_columns.map{|x| "#{x}="}
|
|
54
|
+
else
|
|
55
|
+
super
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
module InstanceMethods
|
|
61
|
+
# Set all values using the entries in the hash, ignoring any setting of
|
|
62
|
+
# allowed_columns in the model.
|
|
63
|
+
#
|
|
64
|
+
# Artist.set_allowed_columns(:num_albums)
|
|
65
|
+
# artist.set_all(name: 'Jim')
|
|
66
|
+
# artist.name # => 'Jim'
|
|
67
|
+
def set_all(hash)
|
|
68
|
+
set_restricted(hash, :all)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Set the values using the entries in the hash, only if the key
|
|
72
|
+
# is included in only. It may be a better idea to use +set_fields+
|
|
73
|
+
# instead of this method.
|
|
74
|
+
#
|
|
75
|
+
# artist.set_only({name: 'Jim'}, :name)
|
|
76
|
+
# artist.name # => 'Jim'
|
|
77
|
+
#
|
|
78
|
+
# artist.set_only({hometown: 'LA'}, :name) # Raise Error
|
|
79
|
+
def set_only(hash, *only)
|
|
80
|
+
set_restricted(hash, only.flatten)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Update all values using the entries in the hash, ignoring any setting of
|
|
84
|
+
# +allowed_columns+ in the model.
|
|
85
|
+
#
|
|
86
|
+
# Artist.set_allowed_columns(:num_albums)
|
|
87
|
+
# artist.update_all(name: 'Jim') # UPDATE artists SET name = 'Jim' WHERE (id = 1)
|
|
88
|
+
def update_all(hash)
|
|
89
|
+
update_restricted(hash, :all)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Update the values using the entries in the hash, only if the key
|
|
93
|
+
# is included in only. It may be a better idea to use +update_fields+
|
|
94
|
+
# instead of this method.
|
|
95
|
+
#
|
|
96
|
+
# artist.update_only({name: 'Jim'}, :name)
|
|
97
|
+
# # UPDATE artists SET name = 'Jim' WHERE (id = 1)
|
|
98
|
+
#
|
|
99
|
+
# artist.update_only({hometown: 'LA'}, :name) # Raise Error
|
|
100
|
+
def update_only(hash, *only)
|
|
101
|
+
update_restricted(hash, only.flatten)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
private
|
|
105
|
+
|
|
106
|
+
# If allowed_columns is set and set/update is called, only allow those columns.
|
|
107
|
+
def setter_methods(type)
|
|
108
|
+
if type == :default && model.allowed_columns
|
|
109
|
+
model.setter_methods
|
|
110
|
+
elsif type.is_a?(Array)
|
|
111
|
+
type.map{|x| "#{x}="}
|
|
112
|
+
elsif type == :all && primary_key && model.restrict_primary_key?
|
|
113
|
+
super + Array(primary_key).map{|x| "#{x}="}
|
|
114
|
+
else
|
|
115
|
+
super
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
require 'nokogiri'
|
|
2
4
|
|
|
3
5
|
module Sequel
|
|
@@ -21,15 +23,15 @@ module Sequel
|
|
|
21
23
|
#
|
|
22
24
|
# You can provide options to control the XML output:
|
|
23
25
|
#
|
|
24
|
-
# puts album.to_xml(:
|
|
25
|
-
# puts album.to_xml(:
|
|
26
|
+
# puts album.to_xml(only: :name)
|
|
27
|
+
# puts album.to_xml(except: [:id, :artist_id])
|
|
26
28
|
# # Output:
|
|
27
29
|
# # <?xml version="1.0"?>
|
|
28
30
|
# # <album>
|
|
29
31
|
# # <name>RF</name>
|
|
30
32
|
# # </album>
|
|
31
33
|
#
|
|
32
|
-
# album.to_xml(:
|
|
34
|
+
# album.to_xml(include: :artist)
|
|
33
35
|
# # Output:
|
|
34
36
|
# # <?xml version="1.0"?>
|
|
35
37
|
# # <album>
|
|
@@ -45,7 +47,7 @@ module Sequel
|
|
|
45
47
|
# You can use a hash value with <tt>:include</tt> to pass options
|
|
46
48
|
# to associations:
|
|
47
49
|
#
|
|
48
|
-
# album.to_xml(:
|
|
50
|
+
# album.to_xml(include: {artist: {only: :name}})
|
|
49
51
|
# # Output:
|
|
50
52
|
# # <?xml version="1.0"?>
|
|
51
53
|
# # <album>
|
|
@@ -61,12 +63,12 @@ module Sequel
|
|
|
61
63
|
# of which return all objects in the dataset:
|
|
62
64
|
#
|
|
63
65
|
# Album.to_xml
|
|
64
|
-
# Album.
|
|
66
|
+
# Album.where(artist_id: 1).to_xml(include: :tags)
|
|
65
67
|
#
|
|
66
68
|
# If you have an existing array of model instances you want to convert to
|
|
67
69
|
# XML, you can call the class to_xml method with the :array option:
|
|
68
70
|
#
|
|
69
|
-
# Album.to_xml(:
|
|
71
|
+
# Album.to_xml(array: [Album[1], Album[2]])
|
|
70
72
|
#
|
|
71
73
|
# In addition to creating XML, this plugin also enables Sequel::Model
|
|
72
74
|
# classes to create instances directly from XML using the from_xml class
|
|
@@ -78,7 +80,7 @@ module Sequel
|
|
|
78
80
|
# The array_from_xml class method exists to parse arrays of model instances
|
|
79
81
|
# from xml:
|
|
80
82
|
#
|
|
81
|
-
# xml = Album.
|
|
83
|
+
# xml = Album.where(artist_id: 1).to_xml
|
|
82
84
|
# albums = Album.array_from_xml(xml)
|
|
83
85
|
#
|
|
84
86
|
# These does not necessarily round trip, since doing so would let users
|
|
@@ -87,7 +89,7 @@ module Sequel
|
|
|
87
89
|
# fields, you can use the :fields option, which will call set_fields with
|
|
88
90
|
# the given fields:
|
|
89
91
|
#
|
|
90
|
-
# Album.from_xml(album.to_xml, :
|
|
92
|
+
# Album.from_xml(album.to_xml, fields: %w'id name')
|
|
91
93
|
#
|
|
92
94
|
# If you want to update an existing instance, you can use the from_xml
|
|
93
95
|
# instance method:
|
|
@@ -97,11 +99,11 @@ module Sequel
|
|
|
97
99
|
# Both of these allow creation of cached associated objects, if you provide
|
|
98
100
|
# the :associations option:
|
|
99
101
|
#
|
|
100
|
-
# album.from_xml(xml, :
|
|
102
|
+
# album.from_xml(xml, associations: :artist)
|
|
101
103
|
#
|
|
102
104
|
# You can even provide options when setting up the associated objects:
|
|
103
105
|
#
|
|
104
|
-
# album.from_xml(xml, :
|
|
106
|
+
# album.from_xml(xml, associations: {artist: {fields: %w'id name', associations: :tags}})
|
|
105
107
|
#
|
|
106
108
|
# Usage:
|
|
107
109
|
#
|
|
@@ -113,17 +115,17 @@ module Sequel
|
|
|
113
115
|
module XmlSerializer
|
|
114
116
|
module ClassMethods
|
|
115
117
|
# Proc that camelizes the input string, used for the :camelize option
|
|
116
|
-
CAMELIZE =
|
|
118
|
+
CAMELIZE = :camelize.to_proc
|
|
117
119
|
|
|
118
120
|
# Proc that dasherizes the input string, used for the :dasherize option
|
|
119
|
-
DASHERIZE =
|
|
121
|
+
DASHERIZE = :dasherize.to_proc
|
|
120
122
|
|
|
121
123
|
# Proc that returns the input string as is, used if
|
|
122
124
|
# no :name_proc, :dasherize, or :camelize option is used.
|
|
123
125
|
IDENTITY = proc{|s| s}
|
|
124
126
|
|
|
125
127
|
# Proc that underscores the input string, used for the :underscore option
|
|
126
|
-
UNDERSCORE =
|
|
128
|
+
UNDERSCORE = :underscore.to_proc
|
|
127
129
|
|
|
128
130
|
# Return an array of instances of this class based on
|
|
129
131
|
# the provided XML.
|
|
@@ -135,28 +137,27 @@ module Sequel
|
|
|
135
137
|
node.children.reject{|c| c.is_a?(Nokogiri::XML::Text)}.map{|c| from_xml_node(c, opts)}
|
|
136
138
|
end
|
|
137
139
|
|
|
138
|
-
# Return an instance of this class based on the provided
|
|
139
|
-
# XML.
|
|
140
|
+
# Return an instance of this class based on the provided XML.
|
|
140
141
|
def from_xml(xml, opts=OPTS)
|
|
141
142
|
from_xml_node(Nokogiri::XML(xml).children.first, opts)
|
|
142
143
|
end
|
|
143
144
|
|
|
144
145
|
# Return an instance of this class based on the given
|
|
145
146
|
# XML node, which should be Nokogiri::XML::Node instance.
|
|
146
|
-
# This should
|
|
147
|
+
# This should not be used directly by user code.
|
|
147
148
|
def from_xml_node(parent, opts=OPTS)
|
|
148
149
|
new.from_xml_node(parent, opts)
|
|
149
150
|
end
|
|
150
151
|
|
|
151
152
|
# Return an appropriate Nokogiri::XML::Builder instance
|
|
152
|
-
# used to create the XML. This should
|
|
153
|
+
# used to create the XML. This should not be used
|
|
153
154
|
# directly by user code.
|
|
154
155
|
def xml_builder(opts=OPTS)
|
|
155
156
|
if opts[:builder]
|
|
156
157
|
opts[:builder]
|
|
157
158
|
else
|
|
158
159
|
builder_opts = if opts[:builder_opts]
|
|
159
|
-
opts[:builder_opts]
|
|
160
|
+
Hash[opts[:builder_opts]]
|
|
160
161
|
else
|
|
161
162
|
{}
|
|
162
163
|
end
|
|
@@ -167,7 +168,7 @@ module Sequel
|
|
|
167
168
|
|
|
168
169
|
# Return a proc (or any other object that responds to []),
|
|
169
170
|
# used for formatting XML tag names when serializing to XML.
|
|
170
|
-
# This should
|
|
171
|
+
# This should not be used directly by user code.
|
|
171
172
|
def xml_deserialize_name_proc(opts=OPTS)
|
|
172
173
|
if opts[:name_proc]
|
|
173
174
|
opts[:name_proc]
|
|
@@ -180,7 +181,7 @@ module Sequel
|
|
|
180
181
|
|
|
181
182
|
# Return a proc (or any other object that responds to []),
|
|
182
183
|
# used for formatting XML tag names when serializing to XML.
|
|
183
|
-
# This should
|
|
184
|
+
# This should not be used directly by user code.
|
|
184
185
|
def xml_serialize_name_proc(opts=OPTS)
|
|
185
186
|
pr = if opts[:name_proc]
|
|
186
187
|
opts[:name_proc]
|
|
@@ -232,10 +233,10 @@ module Sequel
|
|
|
232
233
|
if assocs = opts[:associations]
|
|
233
234
|
assocs = case assocs
|
|
234
235
|
when Symbol
|
|
235
|
-
{assocs=>
|
|
236
|
+
{assocs=>OPTS}
|
|
236
237
|
when Array
|
|
237
238
|
assocs_tmp = {}
|
|
238
|
-
assocs.each{|v| assocs_tmp[v] =
|
|
239
|
+
assocs.each{|v| assocs_tmp[v] = OPTS}
|
|
239
240
|
assocs_tmp
|
|
240
241
|
when Hash
|
|
241
242
|
assocs
|
|
@@ -341,17 +342,17 @@ module Sequel
|
|
|
341
342
|
|
|
342
343
|
name_proc = model.xml_serialize_name_proc(opts)
|
|
343
344
|
x = model.xml_builder(opts)
|
|
344
|
-
x.
|
|
345
|
+
x.public_send(name_proc[opts.fetch(:root_name, model.send(:underscore, model.name).gsub('/', '__')).to_s]) do |x1|
|
|
345
346
|
cols.each do |c|
|
|
346
347
|
attrs = {}
|
|
347
348
|
if types
|
|
348
|
-
attrs[:type] = db_schema.fetch(c,
|
|
349
|
+
attrs[:type] = db_schema.fetch(c, OPTS)[:type]
|
|
349
350
|
end
|
|
350
351
|
v = vals[c]
|
|
351
352
|
if v.nil?
|
|
352
353
|
attrs[:nil] = ''
|
|
353
354
|
end
|
|
354
|
-
x1.
|
|
355
|
+
x1.public_send(name_proc[c.to_s], v, attrs)
|
|
355
356
|
end
|
|
356
357
|
if inc.is_a?(Hash)
|
|
357
358
|
inc.each{|k, v| to_xml_include(x1, k, v)}
|
|
@@ -369,15 +370,15 @@ module Sequel
|
|
|
369
370
|
# the xml.
|
|
370
371
|
def to_xml_include(node, i, opts=OPTS)
|
|
371
372
|
name_proc = model.xml_serialize_name_proc(opts)
|
|
372
|
-
objs =
|
|
373
|
+
objs = public_send(i)
|
|
373
374
|
if objs.is_a?(Array) && objs.all?{|x| x.is_a?(Sequel::Model)}
|
|
374
|
-
node.
|
|
375
|
+
node.public_send(name_proc[i.to_s]) do |x2|
|
|
375
376
|
objs.each{|obj| obj.to_xml(opts.merge(:builder=>x2))}
|
|
376
377
|
end
|
|
377
378
|
elsif objs.is_a?(Sequel::Model)
|
|
378
379
|
objs.to_xml(opts.merge(:builder=>node, :root_name=>i))
|
|
379
380
|
else
|
|
380
|
-
node.
|
|
381
|
+
node.public_send(name_proc[i.to_s], objs)
|
|
381
382
|
end
|
|
382
383
|
end
|
|
383
384
|
end
|
|
@@ -388,7 +389,7 @@ module Sequel
|
|
|
388
389
|
# as well as the :array_root_name option for specifying the name of
|
|
389
390
|
# the root node that contains the nodes for all of the instances.
|
|
390
391
|
def to_xml(opts=OPTS)
|
|
391
|
-
raise(Sequel::Error, "Dataset#to_xml") unless row_proc
|
|
392
|
+
raise(Sequel::Error, "Dataset#to_xml") unless row_proc || @opts[:eager_graph]
|
|
392
393
|
x = model.xml_builder(opts)
|
|
393
394
|
name_proc = model.xml_serialize_name_proc(opts)
|
|
394
395
|
array = if opts[:array]
|
|
@@ -397,7 +398,7 @@ module Sequel
|
|
|
397
398
|
else
|
|
398
399
|
all
|
|
399
400
|
end
|
|
400
|
-
x.
|
|
401
|
+
x.public_send(name_proc[opts.fetch(:array_root_name, model.send(:pluralize, model.send(:underscore, model.name))).to_s]) do |x1|
|
|
401
402
|
array.each do |obj|
|
|
402
403
|
obj.to_xml(opts.merge(:builder=>x1))
|
|
403
404
|
end
|