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
data/spec/model/base_spec.rb
DELETED
|
@@ -1,759 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
describe "Model attribute setters" do
|
|
4
|
-
before do
|
|
5
|
-
@c = Class.new(Sequel::Model(:items)) do
|
|
6
|
-
columns :id, :x, :y, :"x y"
|
|
7
|
-
end
|
|
8
|
-
@o = @c.new
|
|
9
|
-
DB.reset
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "refresh should return self" do
|
|
13
|
-
@o = @c[1]
|
|
14
|
-
def @o._refresh(*) [] end
|
|
15
|
-
@o.refresh.must_equal @o
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should mark the column value as changed" do
|
|
19
|
-
@o.changed_columns.must_equal []
|
|
20
|
-
|
|
21
|
-
@o.x = 2
|
|
22
|
-
@o.changed_columns.must_equal [:x]
|
|
23
|
-
|
|
24
|
-
@o.y = 3
|
|
25
|
-
@o.changed_columns.must_equal [:x, :y]
|
|
26
|
-
|
|
27
|
-
@o.changed_columns.clear
|
|
28
|
-
|
|
29
|
-
@o[:x] = 2
|
|
30
|
-
@o.changed_columns.must_equal [:x]
|
|
31
|
-
|
|
32
|
-
@o[:y] = 3
|
|
33
|
-
@o.changed_columns.must_equal [:x, :y]
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "should handle columns that can't be called like normal ruby methods" do
|
|
37
|
-
@o.send(:"x y=", 3)
|
|
38
|
-
@o.changed_columns.must_equal [:"x y"]
|
|
39
|
-
@o.values.must_equal(:"x y"=>3)
|
|
40
|
-
@o.send(:"x y").must_equal 3
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
describe "Model.def_column_alias" do
|
|
45
|
-
before do
|
|
46
|
-
@o = Class.new(Sequel::Model(:items)) do
|
|
47
|
-
columns :id
|
|
48
|
-
def_column_alias(:id2, :id)
|
|
49
|
-
end.load(:id=>1)
|
|
50
|
-
DB.reset
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should create an getter alias for the column" do
|
|
54
|
-
@o.id2.must_equal 1
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should create an setter alias for the column" do
|
|
58
|
-
@o.id2 = 2
|
|
59
|
-
@o.id2.must_equal 2
|
|
60
|
-
@o.values.must_equal(:id => 2)
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
describe Sequel::Model, "dataset" do
|
|
65
|
-
before do
|
|
66
|
-
@a = Class.new(Sequel::Model(:items))
|
|
67
|
-
@b = Class.new(Sequel::Model)
|
|
68
|
-
class ::Elephant < Sequel::Model(:ele1); end
|
|
69
|
-
class ::Maggot < Sequel::Model; end
|
|
70
|
-
class ::ShoeSize < Sequel::Model; end
|
|
71
|
-
class ::BootSize < ShoeSize; end
|
|
72
|
-
end
|
|
73
|
-
after do
|
|
74
|
-
[:Elephant, :Maggot, :ShoeSize, :BootSize].each{|x| Object.send(:remove_const, x)}
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "should default to the plural of the class name" do
|
|
78
|
-
Maggot.dataset.sql.must_equal 'SELECT * FROM maggots'
|
|
79
|
-
ShoeSize.dataset.sql.must_equal 'SELECT * FROM shoe_sizes'
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should return the dataset for the superclass if available" do
|
|
83
|
-
BootSize.dataset.sql.must_equal 'SELECT * FROM shoe_sizes'
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
it "should return the correct dataset if set explicitly" do
|
|
87
|
-
Elephant.dataset.sql.must_equal 'SELECT * FROM ele1'
|
|
88
|
-
@a.dataset.sql.must_equal 'SELECT * FROM items'
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "should raise if no dataset is explicitly set and the class is anonymous" do
|
|
92
|
-
proc {@b.dataset}.must_raise(Sequel::Error)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "should not override dataset explicitly set when subclassing" do
|
|
96
|
-
sc = Class.new(::Elephant) do
|
|
97
|
-
set_dataset :foo
|
|
98
|
-
end
|
|
99
|
-
sc.table_name.must_equal :foo
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
describe Sequel::Model, "implicit table names" do
|
|
104
|
-
after do
|
|
105
|
-
Object.send(:remove_const, :BlahBlah)
|
|
106
|
-
end
|
|
107
|
-
it "should disregard namespaces for the table name" do
|
|
108
|
-
module ::BlahBlah
|
|
109
|
-
class MwaHaHa < Sequel::Model
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
BlahBlah::MwaHaHa.dataset.sql.must_equal 'SELECT * FROM mwa_ha_has'
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "should automatically set datasets when anonymous class of Sequel::Model is used as superclass" do
|
|
116
|
-
class BlahBlah < Class.new(Sequel::Model); end
|
|
117
|
-
BlahBlah.dataset.sql.must_equal 'SELECT * FROM blah_blahs'
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
describe Sequel::Model, ".def_dataset_method" do
|
|
122
|
-
before do
|
|
123
|
-
@c = Class.new(Sequel::Model(:items))
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "should add a method to the dataset and model if called with a block argument" do
|
|
127
|
-
@c.def_dataset_method(:return_3){3}
|
|
128
|
-
@c.return_3.must_equal 3
|
|
129
|
-
@c.dataset.return_3.must_equal 3
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it "should handle weird method names" do
|
|
133
|
-
@c.def_dataset_method(:"return 3"){3}
|
|
134
|
-
@c.send(:"return 3").must_equal 3
|
|
135
|
-
@c.dataset.send(:"return 3").must_equal 3
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "should not add a model method if the model already responds to the method" do
|
|
139
|
-
@c.instance_eval do
|
|
140
|
-
def foo
|
|
141
|
-
1
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
private
|
|
145
|
-
|
|
146
|
-
def bar
|
|
147
|
-
2
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
def_dataset_method(:foo){3}
|
|
151
|
-
def_dataset_method(:bar){4}
|
|
152
|
-
end
|
|
153
|
-
@c.foo.must_equal 1
|
|
154
|
-
@c.dataset.foo.must_equal 3
|
|
155
|
-
@c.send(:bar).must_equal 2
|
|
156
|
-
@c.dataset.bar.must_equal 4
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
it "should add all passed methods to the model if called without a block argument" do
|
|
160
|
-
@c.def_dataset_method(:return_3, :return_4)
|
|
161
|
-
proc{@c.return_3}.must_raise(NoMethodError)
|
|
162
|
-
proc{@c.return_4}.must_raise(NoMethodError)
|
|
163
|
-
@c.dataset.instance_eval do
|
|
164
|
-
def return_3; 3; end
|
|
165
|
-
def return_4; 4; end
|
|
166
|
-
end
|
|
167
|
-
@c.return_3.must_equal 3
|
|
168
|
-
@c.return_4.must_equal 4
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
it "should cache calls and readd methods if set_dataset is used" do
|
|
172
|
-
@c.def_dataset_method(:return_3){3}
|
|
173
|
-
@c.set_dataset :items
|
|
174
|
-
@c.return_3.must_equal 3
|
|
175
|
-
@c.dataset.return_3.must_equal 3
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
it "should readd methods to subclasses, if set_dataset is used in a subclass" do
|
|
179
|
-
@c.def_dataset_method(:return_3){3}
|
|
180
|
-
c = Class.new(@c)
|
|
181
|
-
c.set_dataset :items
|
|
182
|
-
c.return_3.must_equal 3
|
|
183
|
-
c.dataset.return_3.must_equal 3
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
describe Sequel::Model, ".dataset_module" do
|
|
188
|
-
before do
|
|
189
|
-
@c = Class.new(Sequel::Model(:items))
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
it "should extend the dataset with the module if the model has a dataset" do
|
|
193
|
-
@c.dataset_module{def return_3() 3 end}
|
|
194
|
-
@c.dataset.return_3.must_equal 3
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
it "should also extend the instance_dataset with the module if the model has a dataset" do
|
|
198
|
-
@c.dataset_module{def return_3() 3 end}
|
|
199
|
-
@c.instance_dataset.return_3.must_equal 3
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
it "should add methods defined in the module to the class" do
|
|
203
|
-
@c.dataset_module{def return_3() 3 end}
|
|
204
|
-
@c.return_3.must_equal 3
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
it "should add methods defined in the module outside the block to the class" do
|
|
208
|
-
@c.dataset_module.module_eval{def return_3() 3 end}
|
|
209
|
-
@c.return_3.must_equal 3
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
it "should cache calls and readd methods if set_dataset is used" do
|
|
213
|
-
@c.dataset_module{def return_3() 3 end}
|
|
214
|
-
@c.set_dataset :items
|
|
215
|
-
@c.return_3.must_equal 3
|
|
216
|
-
@c.dataset.return_3.must_equal 3
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
it "should readd methods to subclasses, if set_dataset is used in a subclass" do
|
|
220
|
-
@c.dataset_module{def return_3() 3 end}
|
|
221
|
-
c = Class.new(@c)
|
|
222
|
-
c.set_dataset :items
|
|
223
|
-
c.return_3.must_equal 3
|
|
224
|
-
c.dataset.return_3.must_equal 3
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
it "should only have a single dataset_module per class" do
|
|
228
|
-
@c.dataset_module{def return_3() 3 end}
|
|
229
|
-
@c.dataset_module{def return_3() 3 + (begin; super; rescue NoMethodError; 1; end) end}
|
|
230
|
-
@c.return_3.must_equal 4
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
it "should not have subclasses share the dataset_module" do
|
|
234
|
-
@c.dataset_module{def return_3() 3 end}
|
|
235
|
-
c = Class.new(@c)
|
|
236
|
-
c.dataset_module{def return_3() 3 + (begin; super; rescue NoMethodError; 1; end) end}
|
|
237
|
-
c.return_3.must_equal 6
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
it "should accept a module object and extend the dataset with it" do
|
|
241
|
-
@c.dataset_module Module.new{def return_3() 3 end}
|
|
242
|
-
@c.dataset.return_3.must_equal 3
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
it "should be able to call dataset_module with a module multiple times" do
|
|
246
|
-
@c.dataset_module Module.new{def return_3() 3 end}
|
|
247
|
-
@c.dataset_module Module.new{def return_4() 4 end}
|
|
248
|
-
@c.dataset.return_3.must_equal 3
|
|
249
|
-
@c.dataset.return_4.must_equal 4
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
it "should be able mix dataset_module calls with and without arguments" do
|
|
253
|
-
@c.dataset_module{def return_3() 3 end}
|
|
254
|
-
@c.dataset_module Module.new{def return_4() 4 end}
|
|
255
|
-
@c.dataset.return_3.must_equal 3
|
|
256
|
-
@c.dataset.return_4.must_equal 4
|
|
257
|
-
end
|
|
258
|
-
|
|
259
|
-
it "should have modules provided to dataset_module extend subclass datasets" do
|
|
260
|
-
@c.dataset_module{def return_3() 3 end}
|
|
261
|
-
@c.dataset_module Module.new{def return_4() 4 end}
|
|
262
|
-
c = Class.new(@c)
|
|
263
|
-
c.set_dataset :a
|
|
264
|
-
c.dataset.return_3.must_equal 3
|
|
265
|
-
c.dataset.return_4.must_equal 4
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
it "should return the dataset module if given a block" do
|
|
269
|
-
Object.new.extend(@c.dataset_module{def return_3() 3 end}).return_3.must_equal 3
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
it "should return the argument if given one" do
|
|
273
|
-
Object.new.extend(@c.dataset_module Module.new{def return_3() 3 end}).return_3.must_equal 3
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
it "should have dataset_module support a subset method" do
|
|
277
|
-
@c.dataset_module{subset :released, :released}
|
|
278
|
-
@c.released.sql.must_equal 'SELECT * FROM items WHERE released'
|
|
279
|
-
@c.where(:foo).released.sql.must_equal 'SELECT * FROM items WHERE (foo AND released)'
|
|
280
|
-
end
|
|
281
|
-
|
|
282
|
-
it "should raise error if called with both an argument and ablock" do
|
|
283
|
-
proc{@c.dataset_module(Module.new{def return_3() 3 end}){}}.must_raise(Sequel::Error)
|
|
284
|
-
end
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
describe "A model class with implicit table name" do
|
|
288
|
-
before do
|
|
289
|
-
class ::Donkey < Sequel::Model
|
|
290
|
-
end
|
|
291
|
-
end
|
|
292
|
-
after do
|
|
293
|
-
Object.send(:remove_const, :Donkey)
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
it "should have a dataset associated with the model class" do
|
|
297
|
-
Donkey.dataset.model.must_equal Donkey
|
|
298
|
-
end
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
describe "A model inheriting from a model" do
|
|
302
|
-
before do
|
|
303
|
-
class ::Feline < Sequel::Model; end
|
|
304
|
-
class ::Leopard < Feline; end
|
|
305
|
-
end
|
|
306
|
-
after do
|
|
307
|
-
Object.send(:remove_const, :Leopard)
|
|
308
|
-
Object.send(:remove_const, :Feline)
|
|
309
|
-
end
|
|
310
|
-
|
|
311
|
-
it "should have a dataset associated with itself" do
|
|
312
|
-
Feline.dataset.model.must_equal Feline
|
|
313
|
-
Leopard.dataset.model.must_equal Leopard
|
|
314
|
-
end
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
describe "Model.primary_key" do
|
|
318
|
-
before do
|
|
319
|
-
@c = Class.new(Sequel::Model)
|
|
320
|
-
end
|
|
321
|
-
|
|
322
|
-
it "should default to id" do
|
|
323
|
-
@c.primary_key.must_equal :id
|
|
324
|
-
end
|
|
325
|
-
|
|
326
|
-
it "should be overridden by set_primary_key" do
|
|
327
|
-
@c.set_primary_key :cid
|
|
328
|
-
@c.primary_key.must_equal :cid
|
|
329
|
-
|
|
330
|
-
@c.set_primary_key([:id1, :id2])
|
|
331
|
-
@c.primary_key.must_equal [:id1, :id2]
|
|
332
|
-
end
|
|
333
|
-
|
|
334
|
-
it "should use nil for no primary key" do
|
|
335
|
-
@c.no_primary_key
|
|
336
|
-
@c.primary_key.must_equal nil
|
|
337
|
-
end
|
|
338
|
-
end
|
|
339
|
-
|
|
340
|
-
describe "Model.primary_key_hash" do
|
|
341
|
-
before do
|
|
342
|
-
@c = Class.new(Sequel::Model)
|
|
343
|
-
end
|
|
344
|
-
|
|
345
|
-
it "should handle a single primary key" do
|
|
346
|
-
@c.primary_key_hash(1).must_equal(:id=>1)
|
|
347
|
-
end
|
|
348
|
-
|
|
349
|
-
it "should handle a composite primary key" do
|
|
350
|
-
@c.set_primary_key([:id1, :id2])
|
|
351
|
-
@c.primary_key_hash([1, 2]).must_equal(:id1=>1, :id2=>2)
|
|
352
|
-
end
|
|
353
|
-
|
|
354
|
-
it "should raise an error for no primary key" do
|
|
355
|
-
@c.no_primary_key
|
|
356
|
-
proc{@c.primary_key_hash(1)}.must_raise(Sequel::Error)
|
|
357
|
-
end
|
|
358
|
-
end
|
|
359
|
-
|
|
360
|
-
describe "Model.qualified_primary_key_hash" do
|
|
361
|
-
before do
|
|
362
|
-
@c = Class.new(Sequel::Model(:items))
|
|
363
|
-
end
|
|
364
|
-
|
|
365
|
-
it "should handle a single primary key" do
|
|
366
|
-
@c.qualified_primary_key_hash(1).must_equal(Sequel.qualify(:items, :id)=>1)
|
|
367
|
-
end
|
|
368
|
-
|
|
369
|
-
it "should handle a composite primary key" do
|
|
370
|
-
@c.set_primary_key([:id1, :id2])
|
|
371
|
-
@c.qualified_primary_key_hash([1, 2]).must_equal(Sequel.qualify(:items, :id1)=>1, Sequel.qualify(:items, :id2)=>2)
|
|
372
|
-
end
|
|
373
|
-
|
|
374
|
-
it "should raise an error for no primary key" do
|
|
375
|
-
@c.no_primary_key
|
|
376
|
-
proc{@c.qualified_primary_key_hash(1)}.must_raise(Sequel::Error)
|
|
377
|
-
end
|
|
378
|
-
|
|
379
|
-
it "should allow specifying a different qualifier" do
|
|
380
|
-
@c.qualified_primary_key_hash(1, :apple).must_equal(Sequel.qualify(:apple, :id)=>1)
|
|
381
|
-
@c.set_primary_key([:id1, :id2])
|
|
382
|
-
@c.qualified_primary_key_hash([1, 2], :bear).must_equal(Sequel.qualify(:bear, :id1)=>1, Sequel.qualify(:bear, :id2)=>2)
|
|
383
|
-
end
|
|
384
|
-
end
|
|
385
|
-
|
|
386
|
-
describe "Model.db" do
|
|
387
|
-
before do
|
|
388
|
-
@db = Sequel.mock
|
|
389
|
-
@databases = Sequel::DATABASES.dup
|
|
390
|
-
@model_db = Sequel::Model.db
|
|
391
|
-
Sequel::Model.db = nil
|
|
392
|
-
Sequel::DATABASES.clear
|
|
393
|
-
end
|
|
394
|
-
after do
|
|
395
|
-
Sequel::Model.instance_variable_get(:@db).must_equal nil
|
|
396
|
-
Sequel::DATABASES.replace(@databases)
|
|
397
|
-
Sequel::Model.db = @model_db
|
|
398
|
-
end
|
|
399
|
-
|
|
400
|
-
it "should be required when creating named model classes" do
|
|
401
|
-
begin
|
|
402
|
-
proc{class ModelTest < Sequel::Model; end}.must_raise(Sequel::Error)
|
|
403
|
-
ensure
|
|
404
|
-
Object.send(:remove_const, :ModelTest)
|
|
405
|
-
end
|
|
406
|
-
end
|
|
407
|
-
|
|
408
|
-
it "should be required when creating anonymous model classes without a database" do
|
|
409
|
-
proc{Sequel::Model(:foo)}.must_raise(Sequel::Error)
|
|
410
|
-
end
|
|
411
|
-
|
|
412
|
-
it "should not be required when creating anonymous model classes with a database" do
|
|
413
|
-
Sequel::Model(@db).db.must_equal @db
|
|
414
|
-
Sequel::Model(@db[:foo]).db.must_equal @db
|
|
415
|
-
end
|
|
416
|
-
|
|
417
|
-
it "should work correctly when subclassing anonymous model classes with a database" do
|
|
418
|
-
begin
|
|
419
|
-
Class.new(Sequel::Model(@db)).db.must_equal @db
|
|
420
|
-
Class.new(Sequel::Model(@db[:foo])).db.must_equal @db
|
|
421
|
-
class ModelTest < Sequel::Model(@db)
|
|
422
|
-
db.must_equal @db
|
|
423
|
-
end
|
|
424
|
-
class ModelTest2 < Sequel::Model(@db[:foo])
|
|
425
|
-
db.must_equal @db
|
|
426
|
-
end
|
|
427
|
-
ModelTest.instance_variable_set(:@db, nil)
|
|
428
|
-
ModelTest.db.must_equal @db
|
|
429
|
-
ensure
|
|
430
|
-
Object.send(:remove_const, :ModelTest)
|
|
431
|
-
Object.send(:remove_const, :ModelTest2)
|
|
432
|
-
end
|
|
433
|
-
end
|
|
434
|
-
end
|
|
435
|
-
|
|
436
|
-
describe "Model.db=" do
|
|
437
|
-
before do
|
|
438
|
-
@db1 = Sequel.mock
|
|
439
|
-
@db2 = Sequel.mock
|
|
440
|
-
|
|
441
|
-
@m = Class.new(Sequel::Model(@db1[:blue].filter(:x=>1)))
|
|
442
|
-
end
|
|
443
|
-
|
|
444
|
-
it "should affect the underlying dataset" do
|
|
445
|
-
@m.db = @db2
|
|
446
|
-
|
|
447
|
-
@m.dataset.db.must_equal @db2
|
|
448
|
-
@m.dataset.db.wont_equal @db1
|
|
449
|
-
end
|
|
450
|
-
|
|
451
|
-
it "should keep the same dataset options" do
|
|
452
|
-
@m.db = @db2
|
|
453
|
-
@m.dataset.sql.must_equal 'SELECT * FROM blue WHERE (x = 1)'
|
|
454
|
-
end
|
|
455
|
-
|
|
456
|
-
it "should use the database for subclasses" do
|
|
457
|
-
@m.db = @db2
|
|
458
|
-
Class.new(@m).db.must_equal @db2
|
|
459
|
-
end
|
|
460
|
-
end
|
|
461
|
-
|
|
462
|
-
describe Sequel::Model, ".(allowed|restricted)_columns " do
|
|
463
|
-
before do
|
|
464
|
-
@c = Class.new(Sequel::Model(:blahblah)) do
|
|
465
|
-
columns :x, :y, :z
|
|
466
|
-
end
|
|
467
|
-
@c.strict_param_setting = false
|
|
468
|
-
@c.instance_variable_set(:@columns, [:x, :y, :z])
|
|
469
|
-
DB.reset
|
|
470
|
-
end
|
|
471
|
-
|
|
472
|
-
it "should set the allowed columns correctly" do
|
|
473
|
-
@c.allowed_columns.must_equal nil
|
|
474
|
-
@c.set_allowed_columns :x
|
|
475
|
-
@c.allowed_columns.must_equal [:x]
|
|
476
|
-
@c.set_allowed_columns :x, :y
|
|
477
|
-
@c.allowed_columns.must_equal [:x, :y]
|
|
478
|
-
end
|
|
479
|
-
|
|
480
|
-
it "should only set allowed columns by default" do
|
|
481
|
-
@c.set_allowed_columns :x, :y
|
|
482
|
-
i = @c.new(:x => 1, :y => 2, :z => 3)
|
|
483
|
-
i.values.must_equal(:x => 1, :y => 2)
|
|
484
|
-
i.set(:x => 4, :y => 5, :z => 6)
|
|
485
|
-
i.values.must_equal(:x => 4, :y => 5)
|
|
486
|
-
|
|
487
|
-
@c.instance_dataset._fetch = @c.dataset._fetch = {:x => 7}
|
|
488
|
-
i = @c.new
|
|
489
|
-
i.update(:x => 7, :z => 9)
|
|
490
|
-
i.values.must_equal(:x => 7)
|
|
491
|
-
DB.sqls.must_equal ["INSERT INTO blahblah (x) VALUES (7)", "SELECT * FROM blahblah WHERE (id = 10) LIMIT 1"]
|
|
492
|
-
end
|
|
493
|
-
end
|
|
494
|
-
|
|
495
|
-
describe Sequel::Model, ".(un)?restrict_primary_key\\??" do
|
|
496
|
-
before do
|
|
497
|
-
@c = Class.new(Sequel::Model(:blahblah)) do
|
|
498
|
-
set_primary_key :id
|
|
499
|
-
columns :x, :y, :z, :id
|
|
500
|
-
end
|
|
501
|
-
@c.strict_param_setting = false
|
|
502
|
-
end
|
|
503
|
-
|
|
504
|
-
it "should restrict updates to primary key by default" do
|
|
505
|
-
i = @c.new(:x => 1, :y => 2, :id => 3)
|
|
506
|
-
i.values.must_equal(:x => 1, :y => 2)
|
|
507
|
-
i.set(:x => 4, :y => 5, :id => 6)
|
|
508
|
-
i.values.must_equal(:x => 4, :y => 5)
|
|
509
|
-
end
|
|
510
|
-
|
|
511
|
-
it "should allow updates to primary key if unrestrict_primary_key is used" do
|
|
512
|
-
@c.unrestrict_primary_key
|
|
513
|
-
i = @c.new(:x => 1, :y => 2, :id => 3)
|
|
514
|
-
i.values.must_equal(:x => 1, :y => 2, :id=>3)
|
|
515
|
-
i.set(:x => 4, :y => 5, :id => 6)
|
|
516
|
-
i.values.must_equal(:x => 4, :y => 5, :id=>6)
|
|
517
|
-
end
|
|
518
|
-
|
|
519
|
-
it "should have restrict_primary_key? return true or false depending" do
|
|
520
|
-
@c.restrict_primary_key?.must_equal true
|
|
521
|
-
@c.unrestrict_primary_key
|
|
522
|
-
@c.restrict_primary_key?.must_equal false
|
|
523
|
-
c1 = Class.new(@c)
|
|
524
|
-
c1.restrict_primary_key?.must_equal false
|
|
525
|
-
@c.restrict_primary_key
|
|
526
|
-
@c.restrict_primary_key?.must_equal true
|
|
527
|
-
c1.restrict_primary_key?.must_equal false
|
|
528
|
-
c2 = Class.new(@c)
|
|
529
|
-
c2.restrict_primary_key?.must_equal true
|
|
530
|
-
end
|
|
531
|
-
end
|
|
532
|
-
|
|
533
|
-
describe Sequel::Model, ".strict_param_setting" do
|
|
534
|
-
before do
|
|
535
|
-
@c = Class.new(Sequel::Model(:blahblah)) do
|
|
536
|
-
columns :x, :y, :z, :id
|
|
537
|
-
set_allowed_columns :x, :y
|
|
538
|
-
end
|
|
539
|
-
end
|
|
540
|
-
|
|
541
|
-
it "should be enabled by default" do
|
|
542
|
-
@c.strict_param_setting.must_equal true
|
|
543
|
-
end
|
|
544
|
-
|
|
545
|
-
it "should raise an error if a missing/restricted column/method is accessed" do
|
|
546
|
-
proc{@c.new(:z=>1)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
547
|
-
proc{@c.create(:z=>1)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
548
|
-
c = @c.new
|
|
549
|
-
proc{c.set(:z=>1)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
550
|
-
proc{c.set_all(:use_after_commit_rollback => false)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
551
|
-
proc{c.set_only({:x=>1}, :y)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
552
|
-
proc{c.update(:z=>1)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
553
|
-
proc{c.update_all(:use_after_commit_rollback=>false)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
554
|
-
proc{c.update_only({:x=>1}, :y)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
555
|
-
end
|
|
556
|
-
|
|
557
|
-
it "should be disabled by strict_param_setting = false" do
|
|
558
|
-
@c.strict_param_setting = false
|
|
559
|
-
@c.strict_param_setting.must_equal false
|
|
560
|
-
@c.new(:z=>1)
|
|
561
|
-
end
|
|
562
|
-
end
|
|
563
|
-
|
|
564
|
-
describe Sequel::Model, ".require_modification" do
|
|
565
|
-
before do
|
|
566
|
-
@ds1 = DB[:items]
|
|
567
|
-
def @ds1.provides_accurate_rows_matched?() false end
|
|
568
|
-
@ds2 = DB[:items]
|
|
569
|
-
def @ds2.provides_accurate_rows_matched?() true end
|
|
570
|
-
end
|
|
571
|
-
after do
|
|
572
|
-
Sequel::Model.require_modification = nil
|
|
573
|
-
end
|
|
574
|
-
|
|
575
|
-
it "should depend on whether the dataset provides an accurate number of rows matched by default" do
|
|
576
|
-
Class.new(Sequel::Model).set_dataset(@ds1).require_modification.must_equal false
|
|
577
|
-
Class.new(Sequel::Model).set_dataset(@ds2).require_modification.must_equal true
|
|
578
|
-
end
|
|
579
|
-
|
|
580
|
-
it "should obey global setting regardless of dataset support if set" do
|
|
581
|
-
Sequel::Model.require_modification = true
|
|
582
|
-
Class.new(Sequel::Model).set_dataset(@ds1).require_modification.must_equal true
|
|
583
|
-
Class.new(Sequel::Model).set_dataset(@ds2).require_modification.must_equal true
|
|
584
|
-
|
|
585
|
-
Sequel::Model.require_modification = false
|
|
586
|
-
Class.new(Sequel::Model).set_dataset(@ds1).require_modification.must_equal false
|
|
587
|
-
Class.new(Sequel::Model).set_dataset(@ds1).require_modification.must_equal false
|
|
588
|
-
end
|
|
589
|
-
end
|
|
590
|
-
|
|
591
|
-
describe Sequel::Model, ".[] optimization" do
|
|
592
|
-
before do
|
|
593
|
-
@db = Sequel.mock
|
|
594
|
-
@db.quote_identifiers = true
|
|
595
|
-
def @db.schema(*) [[:id, {:primary_key=>true}]] end
|
|
596
|
-
def @db.supports_schema_parsing?() true end
|
|
597
|
-
@c = Class.new(Sequel::Model(@db))
|
|
598
|
-
end
|
|
599
|
-
|
|
600
|
-
it "should set simple_pk to the literalized primary key column name if a single primary key" do
|
|
601
|
-
@c.set_primary_key :id
|
|
602
|
-
@c.simple_pk.must_equal '"id"'
|
|
603
|
-
@c.set_primary_key :b
|
|
604
|
-
@c.simple_pk.must_equal '"b"'
|
|
605
|
-
@c.set_primary_key Sequel.identifier(:b__a)
|
|
606
|
-
@c.simple_pk.must_equal '"b__a"'
|
|
607
|
-
end
|
|
608
|
-
|
|
609
|
-
it "should have simple_pk be blank if compound or no primary key" do
|
|
610
|
-
@c.no_primary_key
|
|
611
|
-
@c.simple_pk.must_equal nil
|
|
612
|
-
@c.set_primary_key [:b, :a]
|
|
613
|
-
@c.simple_pk.must_equal nil
|
|
614
|
-
end
|
|
615
|
-
|
|
616
|
-
it "should have simple table set if passed a Symbol to set_dataset" do
|
|
617
|
-
@c.set_dataset :a
|
|
618
|
-
@c.simple_table.must_equal '"a"'
|
|
619
|
-
@c.set_dataset :b
|
|
620
|
-
@c.simple_table.must_equal '"b"'
|
|
621
|
-
@c.set_dataset :b__a
|
|
622
|
-
@c.simple_table.must_equal '"b"."a"'
|
|
623
|
-
end
|
|
624
|
-
|
|
625
|
-
it "should have simple_table set if passed a simple select all dataset to set_dataset" do
|
|
626
|
-
@c.set_dataset @db[:a]
|
|
627
|
-
@c.simple_table.must_equal '"a"'
|
|
628
|
-
@c.set_dataset @db[:b]
|
|
629
|
-
@c.simple_table.must_equal '"b"'
|
|
630
|
-
@c.set_dataset @db[:b__a]
|
|
631
|
-
@c.simple_table.must_equal '"b"."a"'
|
|
632
|
-
end
|
|
633
|
-
|
|
634
|
-
it "should have simple_pk and simple_table respect dataset's identifier input methods" do
|
|
635
|
-
ds = @db[:ab]
|
|
636
|
-
ds.identifier_input_method = :reverse
|
|
637
|
-
@c.set_dataset ds
|
|
638
|
-
@c.simple_table.must_equal '"ba"'
|
|
639
|
-
@c.set_primary_key :cd
|
|
640
|
-
@c.simple_pk.must_equal '"dc"'
|
|
641
|
-
|
|
642
|
-
@c.set_dataset ds.from(:ef__gh)
|
|
643
|
-
@c.simple_table.must_equal '"fe"."hg"'
|
|
644
|
-
end
|
|
645
|
-
|
|
646
|
-
it "should have simple_table = nil if passed a non-simple select all dataset to set_dataset" do
|
|
647
|
-
@c.set_dataset @c.db[:a].filter(:active)
|
|
648
|
-
@c.simple_table.must_equal nil
|
|
649
|
-
end
|
|
650
|
-
|
|
651
|
-
it "should have simple_table inherit superclass's setting" do
|
|
652
|
-
Class.new(@c).simple_table.must_equal nil
|
|
653
|
-
@c.set_dataset :a
|
|
654
|
-
Class.new(@c).simple_table.must_equal '"a"'
|
|
655
|
-
end
|
|
656
|
-
|
|
657
|
-
it "should use Dataset#with_sql if simple_table and simple_pk are true" do
|
|
658
|
-
@c.set_dataset :a
|
|
659
|
-
@c.instance_dataset._fetch = @c.dataset._fetch = {:id => 1}
|
|
660
|
-
@c[1].must_equal @c.load(:id=>1)
|
|
661
|
-
@db.sqls.must_equal ['SELECT * FROM "a" WHERE "id" = 1']
|
|
662
|
-
end
|
|
663
|
-
|
|
664
|
-
it "should not use Dataset#with_sql if either simple_table or simple_pk is nil" do
|
|
665
|
-
@c.set_dataset @db[:a].filter(:active)
|
|
666
|
-
@c.dataset._fetch = {:id => 1}
|
|
667
|
-
@c[1].must_equal @c.load(:id=>1)
|
|
668
|
-
@db.sqls.must_equal ['SELECT * FROM "a" WHERE ("active" AND ("id" = 1)) LIMIT 1']
|
|
669
|
-
end
|
|
670
|
-
end
|
|
671
|
-
|
|
672
|
-
describe "Model datasets #with_pk with #with_pk!" do
|
|
673
|
-
before do
|
|
674
|
-
@c = Class.new(Sequel::Model(:a))
|
|
675
|
-
@ds = @c.dataset
|
|
676
|
-
@ds._fetch = {:id=>1}
|
|
677
|
-
DB.reset
|
|
678
|
-
end
|
|
679
|
-
|
|
680
|
-
it "should be callable on the model class with optimized SQL" do
|
|
681
|
-
@c.with_pk(1).must_equal @c.load(:id=>1)
|
|
682
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE id = 1"]
|
|
683
|
-
@c.with_pk!(1).must_equal @c.load(:id=>1)
|
|
684
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE id = 1"]
|
|
685
|
-
end
|
|
686
|
-
|
|
687
|
-
it "should return the first record where the primary key matches" do
|
|
688
|
-
@ds.with_pk(1).must_equal @c.load(:id=>1)
|
|
689
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE (a.id = 1) LIMIT 1"]
|
|
690
|
-
@ds.with_pk!(1).must_equal @c.load(:id=>1)
|
|
691
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE (a.id = 1) LIMIT 1"]
|
|
692
|
-
end
|
|
693
|
-
|
|
694
|
-
it "should handle existing filters" do
|
|
695
|
-
@ds.filter(:a=>2).with_pk(1)
|
|
696
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE ((a = 2) AND (a.id = 1)) LIMIT 1"]
|
|
697
|
-
@ds.filter(:a=>2).with_pk!(1)
|
|
698
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE ((a = 2) AND (a.id = 1)) LIMIT 1"]
|
|
699
|
-
end
|
|
700
|
-
|
|
701
|
-
it "should work with string values" do
|
|
702
|
-
@ds.with_pk("foo")
|
|
703
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE (a.id = 'foo') LIMIT 1"]
|
|
704
|
-
@ds.with_pk!("foo")
|
|
705
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE (a.id = 'foo') LIMIT 1"]
|
|
706
|
-
end
|
|
707
|
-
|
|
708
|
-
it "should handle an array for composite primary keys" do
|
|
709
|
-
@c.set_primary_key [:id1, :id2]
|
|
710
|
-
@ds.with_pk([1, 2])
|
|
711
|
-
sqls = DB.sqls
|
|
712
|
-
["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1",
|
|
713
|
-
"SELECT * FROM a WHERE ((a.id2 = 2) AND (a.id1 = 1)) LIMIT 1"].must_include(sqls.pop)
|
|
714
|
-
sqls.must_equal []
|
|
715
|
-
|
|
716
|
-
@ds.with_pk!([1, 2])
|
|
717
|
-
sqls = DB.sqls
|
|
718
|
-
["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1",
|
|
719
|
-
"SELECT * FROM a WHERE ((a.id2 = 2) AND (a.id1 = 1)) LIMIT 1"].must_include(sqls.pop)
|
|
720
|
-
sqls.must_equal []
|
|
721
|
-
end
|
|
722
|
-
|
|
723
|
-
it "should have with_pk return nil and with_pk! raise if no rows match" do
|
|
724
|
-
@ds._fetch = []
|
|
725
|
-
@ds.with_pk(1).must_equal nil
|
|
726
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE (a.id = 1) LIMIT 1"]
|
|
727
|
-
proc{@ds.with_pk!(1)}.must_raise(Sequel::NoMatchingRow)
|
|
728
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE (a.id = 1) LIMIT 1"]
|
|
729
|
-
end
|
|
730
|
-
|
|
731
|
-
it "should have with_pk return nil and with_pk! raise if no rows match when calling the class method" do
|
|
732
|
-
@ds._fetch = []
|
|
733
|
-
@c.with_pk(1).must_equal nil
|
|
734
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE id = 1"]
|
|
735
|
-
proc{@c.with_pk!(1)}.must_raise(Sequel::NoMatchingRow)
|
|
736
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE id = 1"]
|
|
737
|
-
end
|
|
738
|
-
|
|
739
|
-
it "should have #[] consider an integer as a primary key lookup" do
|
|
740
|
-
@ds[1].must_equal @c.load(:id=>1)
|
|
741
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE (a.id = 1) LIMIT 1"]
|
|
742
|
-
end
|
|
743
|
-
|
|
744
|
-
it "should not have #[] consider a string as a primary key lookup" do
|
|
745
|
-
@ds['foo'].must_equal @c.load(:id=>1)
|
|
746
|
-
DB.sqls.must_equal ["SELECT * FROM a WHERE (foo) LIMIT 1"]
|
|
747
|
-
end
|
|
748
|
-
end
|
|
749
|
-
|
|
750
|
-
describe "Model::include" do
|
|
751
|
-
it "shouldn't change the signature of Module::include" do
|
|
752
|
-
mod1 = Module.new
|
|
753
|
-
mod2 = Module.new
|
|
754
|
-
including_class = Class.new(Sequel::Model(:items)) do
|
|
755
|
-
include(mod1, mod2)
|
|
756
|
-
end
|
|
757
|
-
including_class.included_modules.must_include(mod1, mod2)
|
|
758
|
-
end
|
|
759
|
-
end
|