sequel 5.20.0 → 5.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +398 -1922
- data/MIT-LICENSE +1 -1
- data/README.rdoc +7 -7
- data/doc/advanced_associations.rdoc +4 -4
- data/doc/association_basics.rdoc +80 -16
- data/doc/cheat_sheet.rdoc +6 -5
- data/doc/code_order.rdoc +10 -12
- data/doc/dataset_filtering.rdoc +17 -2
- data/doc/fork_safety.rdoc +84 -0
- data/doc/migration.rdoc +11 -5
- data/doc/model_dataset_method_design.rdoc +1 -1
- data/doc/model_plugins.rdoc +1 -1
- data/doc/opening_databases.rdoc +10 -2
- data/doc/postgresql.rdoc +82 -3
- data/doc/querying.rdoc +4 -4
- 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.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.38.0.txt +28 -0
- data/doc/release_notes/5.39.0.txt +19 -0
- data/doc/release_notes/5.40.0.txt +40 -0
- data/doc/release_notes/5.41.0.txt +25 -0
- data/doc/release_notes/5.42.0.txt +136 -0
- data/doc/release_notes/5.43.0.txt +98 -0
- data/doc/release_notes/5.44.0.txt +32 -0
- data/doc/release_notes/5.45.0.txt +34 -0
- data/doc/release_notes/5.46.0.txt +87 -0
- data/doc/release_notes/5.47.0.txt +59 -0
- data/doc/release_notes/5.48.0.txt +14 -0
- data/doc/release_notes/5.49.0.txt +59 -0
- data/doc/sharding.rdoc +2 -0
- data/doc/sql.rdoc +13 -1
- data/doc/testing.rdoc +20 -7
- data/doc/transactions.rdoc +0 -8
- data/doc/validations.rdoc +1 -1
- data/doc/virtual_rows.rdoc +1 -1
- data/lib/sequel/adapters/ado/access.rb +1 -1
- data/lib/sequel/adapters/ado.rb +43 -35
- data/lib/sequel/adapters/ibmdb.rb +2 -2
- data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
- data/lib/sequel/adapters/jdbc/postgresql.rb +11 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +29 -0
- data/lib/sequel/adapters/jdbc.rb +24 -6
- data/lib/sequel/adapters/mysql.rb +1 -1
- data/lib/sequel/adapters/mysql2.rb +2 -3
- data/lib/sequel/adapters/odbc.rb +8 -6
- data/lib/sequel/adapters/oracle.rb +5 -4
- data/lib/sequel/adapters/postgres.rb +15 -9
- data/lib/sequel/adapters/shared/access.rb +6 -6
- data/lib/sequel/adapters/shared/mssql.rb +66 -21
- data/lib/sequel/adapters/shared/mysql.rb +27 -10
- data/lib/sequel/adapters/shared/oracle.rb +29 -23
- data/lib/sequel/adapters/shared/postgres.rb +271 -32
- data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
- data/lib/sequel/adapters/shared/sqlite.rb +161 -19
- data/lib/sequel/adapters/sqlanywhere.rb +1 -1
- data/lib/sequel/adapters/sqlite.rb +1 -1
- data/lib/sequel/adapters/tinytds.rb +15 -2
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -1
- data/lib/sequel/ast_transformer.rb +6 -0
- data/lib/sequel/connection_pool/sharded_single.rb +4 -1
- data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
- data/lib/sequel/connection_pool/single.rb +1 -1
- data/lib/sequel/connection_pool/threaded.rb +2 -2
- data/lib/sequel/core.rb +333 -319
- data/lib/sequel/database/connecting.rb +3 -4
- data/lib/sequel/database/logging.rb +7 -1
- data/lib/sequel/database/misc.rb +31 -12
- data/lib/sequel/database/query.rb +3 -1
- data/lib/sequel/database/schema_generator.rb +53 -51
- data/lib/sequel/database/schema_methods.rb +38 -23
- data/lib/sequel/database/transactions.rb +17 -18
- data/lib/sequel/dataset/actions.rb +14 -9
- data/lib/sequel/dataset/features.rb +16 -0
- data/lib/sequel/dataset/misc.rb +2 -2
- data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
- data/lib/sequel/dataset/prepared_statements.rb +2 -0
- data/lib/sequel/dataset/query.rb +26 -9
- data/lib/sequel/dataset/sql.rb +76 -25
- data/lib/sequel/dataset.rb +4 -2
- data/lib/sequel/deprecated.rb +3 -1
- data/lib/sequel/exceptions.rb +2 -0
- data/lib/sequel/extensions/_pretty_table.rb +1 -2
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/columns_introspection.rb +1 -2
- data/lib/sequel/extensions/connection_expiration.rb +2 -2
- data/lib/sequel/extensions/connection_validator.rb +2 -2
- data/lib/sequel/extensions/core_refinements.rb +2 -0
- data/lib/sequel/extensions/date_arithmetic.rb +36 -24
- data/lib/sequel/extensions/duplicate_columns_handler.rb +3 -1
- data/lib/sequel/extensions/eval_inspect.rb +2 -0
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/index_caching.rb +9 -7
- data/lib/sequel/extensions/inflector.rb +9 -1
- data/lib/sequel/extensions/integer64.rb +2 -0
- data/lib/sequel/extensions/migration.rb +11 -3
- data/lib/sequel/extensions/named_timezones.rb +56 -8
- data/lib/sequel/extensions/pagination.rb +1 -1
- data/lib/sequel/extensions/pg_array.rb +5 -0
- data/lib/sequel/extensions/pg_array_ops.rb +14 -6
- data/lib/sequel/extensions/pg_enum.rb +11 -3
- data/lib/sequel/extensions/pg_extended_date_support.rb +2 -2
- data/lib/sequel/extensions/pg_hstore.rb +6 -0
- data/lib/sequel/extensions/pg_hstore_ops.rb +54 -2
- data/lib/sequel/extensions/pg_inet.rb +15 -5
- data/lib/sequel/extensions/pg_interval.rb +36 -8
- data/lib/sequel/extensions/pg_json.rb +387 -123
- data/lib/sequel/extensions/pg_json_ops.rb +238 -0
- data/lib/sequel/extensions/pg_loose_count.rb +3 -1
- data/lib/sequel/extensions/pg_range.rb +17 -9
- data/lib/sequel/extensions/pg_range_ops.rb +2 -0
- data/lib/sequel/extensions/pg_row.rb +4 -2
- data/lib/sequel/extensions/pg_row_ops.rb +24 -0
- data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
- data/lib/sequel/extensions/query.rb +3 -0
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +2 -0
- data/lib/sequel/extensions/schema_dumper.rb +24 -7
- data/lib/sequel/extensions/server_block.rb +18 -7
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +1 -1
- data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
- data/lib/sequel/extensions/to_dot.rb +9 -3
- data/lib/sequel/model/associations.rb +356 -117
- data/lib/sequel/model/base.rb +107 -68
- data/lib/sequel/model/errors.rb +10 -1
- data/lib/sequel/model/inflections.rb +1 -1
- data/lib/sequel/model/plugins.rb +9 -3
- data/lib/sequel/model.rb +3 -1
- 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 +60 -18
- data/lib/sequel/plugins/association_proxies.rb +8 -2
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_validations.rb +39 -5
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- data/lib/sequel/plugins/blacklist_security.rb +1 -2
- data/lib/sequel/plugins/boolean_subsets.rb +4 -1
- data/lib/sequel/plugins/caching.rb +3 -0
- data/lib/sequel/plugins/class_table_inheritance.rb +33 -28
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/composition.rb +7 -2
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +2 -1
- data/lib/sequel/plugins/csv_serializer.rb +28 -9
- data/lib/sequel/plugins/dataset_associations.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +60 -22
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/json_serializer.rb +57 -35
- data/lib/sequel/plugins/lazy_attributes.rb +1 -1
- data/lib/sequel/plugins/many_through_many.rb +108 -9
- data/lib/sequel/plugins/nested_attributes.rb +15 -3
- data/lib/sequel/plugins/pg_array_associations.rb +58 -41
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +91 -30
- data/lib/sequel/plugins/prepared_statements.rb +15 -12
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
- data/lib/sequel/plugins/rcte_tree.rb +43 -35
- data/lib/sequel/plugins/serialization.rb +8 -3
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +11 -5
- data/lib/sequel/plugins/single_table_inheritance.rb +22 -15
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/static_cache.rb +9 -4
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +1 -1
- data/lib/sequel/plugins/subclasses.rb +2 -0
- data/lib/sequel/plugins/throw_failures.rb +1 -1
- data/lib/sequel/plugins/timestamps.rb +1 -1
- data/lib/sequel/plugins/tree.rb +9 -4
- data/lib/sequel/plugins/typecast_on_load.rb +3 -2
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +1 -1
- data/lib/sequel/plugins/validation_class_methods.rb +5 -1
- data/lib/sequel/plugins/validation_helpers.rb +18 -11
- data/lib/sequel/plugins/xml_serializer.rb +1 -1
- data/lib/sequel/sql.rb +20 -5
- data/lib/sequel/timezones.rb +63 -17
- data/lib/sequel/version.rb +1 -1
- metadata +113 -381
- data/Rakefile +0 -151
- 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.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- data/doc/release_notes/4.37.0.txt +0 -50
- data/doc/release_notes/4.38.0.txt +0 -67
- data/doc/release_notes/4.39.0.txt +0 -127
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.40.0.txt +0 -179
- data/doc/release_notes/4.41.0.txt +0 -77
- data/doc/release_notes/4.42.0.txt +0 -221
- data/doc/release_notes/4.43.0.txt +0 -87
- data/doc/release_notes/4.44.0.txt +0 -125
- data/doc/release_notes/4.45.0.txt +0 -370
- data/doc/release_notes/4.46.0.txt +0 -404
- data/doc/release_notes/4.47.0.txt +0 -56
- data/doc/release_notes/4.48.0.txt +0 -293
- data/doc/release_notes/4.49.0.txt +0 -222
- 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/spec/adapter_spec.rb +0 -4
- data/spec/adapters/db2_spec.rb +0 -170
- data/spec/adapters/mssql_spec.rb +0 -804
- data/spec/adapters/mysql_spec.rb +0 -1065
- data/spec/adapters/oracle_spec.rb +0 -371
- data/spec/adapters/postgres_spec.rb +0 -4125
- data/spec/adapters/spec_helper.rb +0 -44
- data/spec/adapters/sqlanywhere_spec.rb +0 -97
- data/spec/adapters/sqlite_spec.rb +0 -652
- data/spec/bin_spec.rb +0 -278
- data/spec/core/connection_pool_spec.rb +0 -1250
- data/spec/core/database_spec.rb +0 -2865
- data/spec/core/dataset_spec.rb +0 -5515
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1455
- data/spec/core/mock_adapter_spec.rb +0 -722
- data/spec/core/object_graph_spec.rb +0 -336
- data/spec/core/placeholder_literalizer_spec.rb +0 -166
- data/spec/core/schema_generator_spec.rb +0 -214
- data/spec/core/schema_spec.rb +0 -1826
- data/spec/core/spec_helper.rb +0 -24
- data/spec/core/version_spec.rb +0 -14
- data/spec/core_extensions_spec.rb +0 -763
- data/spec/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/deprecation_helper.rb +0 -30
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -99
- data/spec/extensions/after_initialize_spec.rb +0 -28
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -125
- data/spec/extensions/association_pks_spec.rb +0 -423
- data/spec/extensions/association_proxies_spec.rb +0 -100
- data/spec/extensions/auto_literal_strings_spec.rb +0 -205
- data/spec/extensions/auto_validations_spec.rb +0 -229
- data/spec/extensions/blacklist_security_spec.rb +0 -95
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -273
- data/spec/extensions/caller_logging_spec.rb +0 -52
- data/spec/extensions/class_table_inheritance_spec.rb +0 -750
- data/spec/extensions/column_conflicts_spec.rb +0 -75
- data/spec/extensions/column_select_spec.rb +0 -129
- data/spec/extensions/columns_introspection_spec.rb +0 -90
- data/spec/extensions/columns_updated_spec.rb +0 -35
- data/spec/extensions/composition_spec.rb +0 -248
- data/spec/extensions/connection_expiration_spec.rb +0 -151
- data/spec/extensions/connection_validator_spec.rb +0 -144
- data/spec/extensions/constant_sql_override_spec.rb +0 -24
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
- data/spec/extensions/constraint_validations_spec.rb +0 -439
- data/spec/extensions/core_refinements_spec.rb +0 -528
- data/spec/extensions/csv_serializer_spec.rb +0 -183
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -365
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -181
- data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
- data/spec/extensions/def_dataset_method_spec.rb +0 -100
- data/spec/extensions/defaults_setter_spec.rb +0 -150
- data/spec/extensions/delay_add_association_spec.rb +0 -73
- data/spec/extensions/dirty_spec.rb +0 -189
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
- data/spec/extensions/eager_each_spec.rb +0 -62
- data/spec/extensions/eager_graph_eager_spec.rb +0 -100
- 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/escaped_like_spec.rb +0 -40
- data/spec/extensions/eval_inspect_spec.rb +0 -81
- data/spec/extensions/finder_spec.rb +0 -260
- data/spec/extensions/force_encoding_spec.rb +0 -126
- data/spec/extensions/freeze_datasets_spec.rb +0 -31
- data/spec/extensions/graph_each_spec.rb +0 -113
- data/spec/extensions/hook_class_methods_spec.rb +0 -402
- data/spec/extensions/identifier_mangling_spec.rb +0 -201
- data/spec/extensions/implicit_subquery_spec.rb +0 -58
- data/spec/extensions/index_caching_spec.rb +0 -66
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -69
- data/spec/extensions/insert_returning_select_spec.rb +0 -72
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -246
- data/spec/extensions/integer64_spec.rb +0 -22
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -336
- data/spec/extensions/lazy_attributes_spec.rb +0 -183
- data/spec/extensions/list_spec.rb +0 -291
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2177
- data/spec/extensions/migration_spec.rb +0 -864
- data/spec/extensions/modification_detection_spec.rb +0 -93
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
- data/spec/extensions/named_timezones_spec.rb +0 -111
- data/spec/extensions/nested_attributes_spec.rb +0 -767
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -127
- data/spec/extensions/pagination_spec.rb +0 -116
- data/spec/extensions/pg_array_associations_spec.rb +0 -802
- data/spec/extensions/pg_array_ops_spec.rb +0 -144
- data/spec/extensions/pg_array_spec.rb +0 -398
- data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -172
- data/spec/extensions/pg_enum_spec.rb +0 -118
- data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
- data/spec/extensions/pg_hstore_spec.rb +0 -219
- data/spec/extensions/pg_inet_ops_spec.rb +0 -102
- data/spec/extensions/pg_inet_spec.rb +0 -72
- data/spec/extensions/pg_interval_spec.rb +0 -103
- data/spec/extensions/pg_json_ops_spec.rb +0 -289
- data/spec/extensions/pg_json_spec.rb +0 -262
- data/spec/extensions/pg_loose_count_spec.rb +0 -23
- data/spec/extensions/pg_range_ops_spec.rb +0 -60
- data/spec/extensions/pg_range_spec.rb +0 -519
- data/spec/extensions/pg_row_ops_spec.rb +0 -61
- data/spec/extensions/pg_row_plugin_spec.rb +0 -60
- data/spec/extensions/pg_row_spec.rb +0 -363
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
- data/spec/extensions/pg_timestamptz_spec.rb +0 -17
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
- data/spec/extensions/prepared_statements_spec.rb +0 -177
- data/spec/extensions/pretty_table_spec.rb +0 -123
- data/spec/extensions/query_spec.rb +0 -94
- data/spec/extensions/rcte_tree_spec.rb +0 -381
- data/spec/extensions/round_timestamps_spec.rb +0 -39
- data/spec/extensions/s_spec.rb +0 -60
- data/spec/extensions/schema_caching_spec.rb +0 -64
- data/spec/extensions/schema_dumper_spec.rb +0 -870
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -365
- data/spec/extensions/server_block_spec.rb +0 -97
- data/spec/extensions/server_logging_spec.rb +0 -45
- data/spec/extensions/sharding_spec.rb +0 -189
- data/spec/extensions/shared_caching_spec.rb +0 -151
- data/spec/extensions/single_table_inheritance_spec.rb +0 -347
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -18
- data/spec/extensions/spec_helper.rb +0 -63
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -57
- data/spec/extensions/sql_comments_spec.rb +0 -33
- data/spec/extensions/sql_expr_spec.rb +0 -59
- data/spec/extensions/static_cache_spec.rb +0 -471
- data/spec/extensions/string_agg_spec.rb +0 -90
- 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 -79
- data/spec/extensions/subset_conditions_spec.rb +0 -38
- data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
- data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
- data/spec/extensions/synchronize_sql_spec.rb +0 -124
- data/spec/extensions/table_select_spec.rb +0 -83
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/throw_failures_spec.rb +0 -74
- data/spec/extensions/timestamps_spec.rb +0 -209
- data/spec/extensions/to_dot_spec.rb +0 -153
- data/spec/extensions/touch_spec.rb +0 -226
- data/spec/extensions/tree_spec.rb +0 -334
- data/spec/extensions/typecast_on_load_spec.rb +0 -86
- data/spec/extensions/unlimited_update_spec.rb +0 -21
- data/spec/extensions/update_or_create_spec.rb +0 -83
- data/spec/extensions/update_primary_key_spec.rb +0 -105
- data/spec/extensions/update_refresh_spec.rb +0 -59
- data/spec/extensions/uuid_spec.rb +0 -101
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1040
- data/spec/extensions/validation_contexts_spec.rb +0 -31
- data/spec/extensions/validation_helpers_spec.rb +0 -525
- data/spec/extensions/whitelist_security_spec.rb +0 -157
- data/spec/extensions/xml_serializer_spec.rb +0 -213
- 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/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- 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/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_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/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_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 -59
- data/spec/integration/associations_test.rb +0 -2597
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1981
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -203
- data/spec/integration/plugin_test.rb +0 -2396
- data/spec/integration/prepared_statement_test.rb +0 -405
- data/spec/integration/schema_test.rb +0 -889
- data/spec/integration/spec_helper.rb +0 -65
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -603
- data/spec/integration/type_test.rb +0 -127
- data/spec/model/association_reflection_spec.rb +0 -803
- data/spec/model/associations_spec.rb +0 -4738
- data/spec/model/base_spec.rb +0 -875
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -198
- data/spec/model/eager_loading_spec.rb +0 -2377
- data/spec/model/hooks_spec.rb +0 -370
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -956
- data/spec/model/plugins_spec.rb +0 -429
- data/spec/model/record_spec.rb +0 -2118
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -220
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/sequel_warning.rb +0 -4
- data/spec/spec_config.rb +0 -12
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Sequel::Plugins::Timestamps" do
|
|
4
|
-
before do
|
|
5
|
-
dc = Object.new
|
|
6
|
-
dc.instance_eval do
|
|
7
|
-
def now
|
|
8
|
-
'2009-08-01'
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
Sequel.datetime_class = dc
|
|
12
|
-
@c = Class.new(Sequel::Model(:t))
|
|
13
|
-
@c.class_eval do
|
|
14
|
-
columns :id, :created_at, :updated_at
|
|
15
|
-
plugin :timestamps
|
|
16
|
-
def _save_refresh(*) end
|
|
17
|
-
db.reset
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
after do
|
|
21
|
-
Sequel.datetime_class = Time
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should handle validations on the timestamp fields for new objects" do
|
|
25
|
-
@c.plugin :timestamps, :update_on_create=>true
|
|
26
|
-
o = @c.new
|
|
27
|
-
def o.validate
|
|
28
|
-
errors.add(model.create_timestamp_field, 'not present') unless send(model.create_timestamp_field)
|
|
29
|
-
errors.add(model.update_timestamp_field, 'not present') unless send(model.update_timestamp_field)
|
|
30
|
-
end
|
|
31
|
-
o.valid?.must_equal true
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should set timestamp fields when skipping validations" do
|
|
35
|
-
@c.plugin :timestamps
|
|
36
|
-
@c.new.save(:validate=>false)
|
|
37
|
-
@c.db.sqls.must_equal ["INSERT INTO t (created_at) VALUES ('2009-08-01')"]
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should set the create timestamp field on creation" do
|
|
41
|
-
o = @c.create
|
|
42
|
-
@c.db.sqls.must_equal ["INSERT INTO t (created_at) VALUES ('2009-08-01')"]
|
|
43
|
-
o.created_at.must_equal '2009-08-01'
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "should set the update timestamp field on update" do
|
|
47
|
-
o = @c.load(:id=>1).save
|
|
48
|
-
@c.db.sqls.must_equal ["UPDATE t SET updated_at = '2009-08-01' WHERE (id = 1)"]
|
|
49
|
-
o.updated_at.must_equal '2009-08-01'
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should leave manually set update timestamp, if :allow_manual_update was given" do
|
|
53
|
-
o = @c.load(:id=>1).update(:updated_at=>Date.new(2016))
|
|
54
|
-
@c.db.sqls.must_equal ["UPDATE t SET updated_at = '2009-08-01' WHERE (id = 1)"]
|
|
55
|
-
o.updated_at.must_equal '2009-08-01'
|
|
56
|
-
|
|
57
|
-
@c.plugin :timestamps, :allow_manual_update=>true
|
|
58
|
-
o = @c.load(:id=>1).update(:updated_at=>Date.new(2016))
|
|
59
|
-
@c.db.sqls.must_equal ["UPDATE t SET updated_at = '2016-01-01' WHERE (id = 1)"]
|
|
60
|
-
o.updated_at.must_equal Date.new(2016)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "should work with current_datetime_timestamp extension" do
|
|
64
|
-
Sequel.datetime_class = Time
|
|
65
|
-
@c.dataset = @c.dataset.extension(:current_datetime_timestamp)
|
|
66
|
-
@c.create
|
|
67
|
-
@c.db.sqls.must_equal ["INSERT INTO t (created_at) VALUES (CURRENT_TIMESTAMP)"]
|
|
68
|
-
@c.load(:id=>1).save
|
|
69
|
-
@c.db.sqls.must_equal ["UPDATE t SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)"]
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it "should not update the update timestamp on creation" do
|
|
73
|
-
@c.create.updated_at.must_be_nil
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "should use the same value for the creation and update timestamps when creating if the :update_on_create option is given" do
|
|
77
|
-
@c.plugin :timestamps, :update_on_create=>true
|
|
78
|
-
o = @c.create
|
|
79
|
-
@c.db.sqls.must_equal ["INSERT INTO t (created_at, updated_at) VALUES ('2009-08-01', '2009-08-01')"]
|
|
80
|
-
o.created_at.must_be :===, o.updated_at
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it "should allow specifying the create timestamp field via the :create option" do
|
|
84
|
-
c = Class.new(Sequel::Model(:t))
|
|
85
|
-
c.class_eval do
|
|
86
|
-
columns :id, :c
|
|
87
|
-
plugin :timestamps, :create=>:c
|
|
88
|
-
def _save_refresh(*) end
|
|
89
|
-
end
|
|
90
|
-
o = c.create
|
|
91
|
-
c.db.sqls.must_equal ["INSERT INTO t (c) VALUES ('2009-08-01')"]
|
|
92
|
-
o.c.must_equal '2009-08-01'
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "should allow specifying the update timestamp field via the :update option" do
|
|
96
|
-
c = Class.new(Sequel::Model(:t))
|
|
97
|
-
c.class_eval do
|
|
98
|
-
columns :id, :u
|
|
99
|
-
plugin :timestamps, :update=>:u
|
|
100
|
-
db.reset
|
|
101
|
-
end
|
|
102
|
-
o = c.load(:id=>1).save
|
|
103
|
-
c.db.sqls.must_equal ["UPDATE t SET u = '2009-08-01' WHERE (id = 1)"]
|
|
104
|
-
o.u.must_equal '2009-08-01'
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "should not raise an error if the model doesn't have the timestamp columns" do
|
|
108
|
-
c = Class.new(Sequel::Model(:t))
|
|
109
|
-
c.class_eval do
|
|
110
|
-
columns :id, :x
|
|
111
|
-
plugin :timestamps
|
|
112
|
-
db.reset
|
|
113
|
-
def _save_refresh; self end
|
|
114
|
-
end
|
|
115
|
-
c.create(:x=>2)
|
|
116
|
-
c.load(:id=>1, :x=>2).save
|
|
117
|
-
c.db.sqls.must_equal ["INSERT INTO t (x) VALUES (2)", "UPDATE t SET x = 2 WHERE (id = 1)"]
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
it "should not overwrite an existing create timestamp" do
|
|
121
|
-
o = @c.create(:created_at=>'2009-08-03')
|
|
122
|
-
@c.db.sqls.must_equal ["INSERT INTO t (created_at) VALUES ('2009-08-03')"]
|
|
123
|
-
o.created_at.must_equal '2009-08-03'
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "should overwrite an existing create timestamp if the :force option is used" do
|
|
127
|
-
@c.plugin :timestamps, :force=>true
|
|
128
|
-
o = @c.create(:created_at=>'2009-08-03')
|
|
129
|
-
@c.db.sqls.must_equal ["INSERT INTO t (created_at) VALUES ('2009-08-01')"]
|
|
130
|
-
o.created_at.must_equal '2009-08-01'
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
it "should set update timestamp to same timestamp as create timestamp when setting creating timestamp" do
|
|
134
|
-
i = 1
|
|
135
|
-
Sequel.datetime_class.define_singleton_method(:now){"2009-08-0#{i+=1}"}
|
|
136
|
-
@c.plugin :timestamps, :update_on_create=>true
|
|
137
|
-
o = @c.create
|
|
138
|
-
sqls = @c.db.sqls
|
|
139
|
-
sqls.length.must_equal 1
|
|
140
|
-
["INSERT INTO t (created_at, updated_at) VALUES ('2009-08-02', '2009-08-02')",
|
|
141
|
-
"INSERT INTO t (updated_at, created_at) VALUES ('2009-08-02', '2009-08-02')"].must_include sqls.first
|
|
142
|
-
o.created_at.must_equal '2009-08-02'
|
|
143
|
-
o.updated_at.must_equal '2009-08-02'
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "should set update timestamp when using not overriding create timestamp" do
|
|
147
|
-
i = 1
|
|
148
|
-
Sequel.datetime_class.define_singleton_method(:now){"2009-08-0#{i+=1}"}
|
|
149
|
-
@c.plugin :timestamps, :update_on_create=>true
|
|
150
|
-
o = @c.create(:created_at=>'2009-08-10')
|
|
151
|
-
sqls = @c.db.sqls
|
|
152
|
-
sqls.length.must_equal 1
|
|
153
|
-
["INSERT INTO t (created_at, updated_at) VALUES ('2009-08-10', '2009-08-02')",
|
|
154
|
-
"INSERT INTO t (updated_at, created_at) VALUES ('2009-08-02', '2009-08-10')"].must_include sqls.first
|
|
155
|
-
o.created_at.must_equal '2009-08-10'
|
|
156
|
-
o.updated_at.must_equal '2009-08-02'
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
it "should have create_timestamp_field give the create timestamp field" do
|
|
160
|
-
@c.create_timestamp_field.must_equal :created_at
|
|
161
|
-
@c.plugin :timestamps, :create=>:c
|
|
162
|
-
@c.create_timestamp_field.must_equal :c
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
it "should have update_timestamp_field give the update timestamp field" do
|
|
166
|
-
@c.update_timestamp_field.must_equal :updated_at
|
|
167
|
-
@c.plugin :timestamps, :update=>:u
|
|
168
|
-
@c.update_timestamp_field.must_equal :u
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
it "should have create_timestamp_overwrite? give the whether to overwrite an existing create timestamp" do
|
|
172
|
-
@c.create_timestamp_overwrite?.must_equal false
|
|
173
|
-
@c.plugin :timestamps, :force=>true
|
|
174
|
-
@c.create_timestamp_overwrite?.must_equal true
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
it "should have set_update_timestamp_on_create? give whether to set the update timestamp on create" do
|
|
178
|
-
@c.set_update_timestamp_on_create?.must_equal false
|
|
179
|
-
@c.plugin :timestamps, :update_on_create=>true
|
|
180
|
-
@c.set_update_timestamp_on_create?.must_equal true
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
it "should work with subclasses" do
|
|
184
|
-
c = Class.new(@c)
|
|
185
|
-
o = c.create
|
|
186
|
-
o.created_at.must_equal '2009-08-01'
|
|
187
|
-
o.updated_at.must_be_nil
|
|
188
|
-
o = c.load(:id=>1).save
|
|
189
|
-
o.updated_at.must_equal '2009-08-01'
|
|
190
|
-
c.db.sqls.must_equal ["INSERT INTO t (created_at) VALUES ('2009-08-01')", "UPDATE t SET updated_at = '2009-08-01' WHERE (id = 1)"]
|
|
191
|
-
c.create(:created_at=>'2009-08-03').created_at.must_equal '2009-08-03'
|
|
192
|
-
|
|
193
|
-
c.class_eval do
|
|
194
|
-
columns :id, :c, :u
|
|
195
|
-
plugin :timestamps, :create=>:c, :update=>:u, :force=>true, :update_on_create=>true
|
|
196
|
-
end
|
|
197
|
-
c2 = Class.new(c)
|
|
198
|
-
c2.db.reset
|
|
199
|
-
o = c2.create
|
|
200
|
-
o.c.must_equal '2009-08-01'
|
|
201
|
-
o.u.must_be :===, o.c
|
|
202
|
-
c2.db.sqls.must_equal ["INSERT INTO t (c, u) VALUES ('2009-08-01', '2009-08-01')"]
|
|
203
|
-
c2.db.reset
|
|
204
|
-
o = c2.load(:id=>1).save
|
|
205
|
-
o.u.must_equal '2009-08-01'
|
|
206
|
-
c2.db.sqls.must_equal ["UPDATE t SET u = '2009-08-01' WHERE (id = 1)"]
|
|
207
|
-
c2.create(:c=>'2009-08-03').c.must_equal '2009-08-01'
|
|
208
|
-
end
|
|
209
|
-
end
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe Sequel::Model, "to_dot extension" do
|
|
4
|
-
def dot(ds)
|
|
5
|
-
Sequel::ToDot.new(ds).instance_variable_get(:@dot)[4...-1]
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
before do
|
|
9
|
-
@db = DB
|
|
10
|
-
@ds = @db.dataset.extension(:to_dot)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should output a string suitable for input to the graphviz dot program" do
|
|
14
|
-
@ds.to_dot.must_equal((<<END).strip)
|
|
15
|
-
digraph G {
|
|
16
|
-
0 [label="self"];
|
|
17
|
-
0 -> 1 [label=""];
|
|
18
|
-
1 [label="Dataset"];
|
|
19
|
-
}
|
|
20
|
-
END
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "should handle an empty dataset" do
|
|
24
|
-
dot(@ds).must_equal []
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should handle WITH" do
|
|
28
|
-
a = dot(@ds.with_extend{def supports_cte?(*) true end}.with(:a, @ds))
|
|
29
|
-
a[0..3].must_equal ["1 -> 2 [label=\"with\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"Hash\"];"]
|
|
30
|
-
[["3 -> 4 [label=\"dataset\"];", "4 [label=\"Dataset\"];", "3 -> 5 [label=\"name\"];", "5 [label=\":a\"];"],
|
|
31
|
-
["3 -> 4 [label=\"name\"];", "4 [label=\":a\"];", "3 -> 5 [label=\"dataset\"];", "5 [label=\"Dataset\"];"]].must_include(a[4..-1])
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should handle DISTINCT" do
|
|
35
|
-
dot(@ds.distinct).must_equal ["1 -> 2 [label=\"distinct\"];", "2 [label=\"Array\"];"]
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should handle FROM" do
|
|
39
|
-
dot(@ds.from(:a)).must_equal ["1 -> 2 [label=\"from\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\":a\"];"]
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "should handle JOIN" do
|
|
43
|
-
dot(@ds.join(:a)).must_equal ["1 -> 2 [label=\"join\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"INNER JOIN\"];", "3 -> 4 [label=\"table\"];", "4 [label=\":a\"];"]
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "should handle WHERE" do
|
|
47
|
-
dot(@ds.filter(true)).must_equal ["1 -> 2 [label=\"where\"];", "2 [label=\"ComplexExpression: NOOP\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"true\"];"]
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "should handle GROUP" do
|
|
51
|
-
dot(@ds.group(:a)).must_equal ["1 -> 2 [label=\"group\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\":a\"];"]
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "should handle HAVING" do
|
|
55
|
-
dot(@ds.having(:a)).must_equal ["1 -> 2 [label=\"having\"];", "2 [label=\":a\"];"]
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "should handle UNION" do
|
|
59
|
-
dot(@ds.union(@ds)).must_equal ["1 -> 2 [label=\"from\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"AliasedExpression\"];", "3 -> 4 [label=\"expression\"];", "4 [label=\"Dataset\"];", "4 -> 5 [label=\"compounds\"];", "5 [label=\"Array\"];", "5 -> 6 [label=\"0\"];", "6 [label=\"Array\"];", "6 -> 7 [label=\"0\"];", "7 [label=\":union\"];", "6 -> 8 [label=\"1\"];", "8 [label=\"Dataset\"];", "6 -> 9 [label=\"2\"];", "9 [label=\"nil\"];", "3 -> 10 [label=\"alias\"];", "10 [label=\":t1\"];"]
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
it "should handle INTERSECT" do
|
|
63
|
-
dot(@ds.intersect(@ds)).must_equal ["1 -> 2 [label=\"from\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"AliasedExpression\"];", "3 -> 4 [label=\"expression\"];", "4 [label=\"Dataset\"];", "4 -> 5 [label=\"compounds\"];", "5 [label=\"Array\"];", "5 -> 6 [label=\"0\"];", "6 [label=\"Array\"];", "6 -> 7 [label=\"0\"];", "7 [label=\":intersect\"];", "6 -> 8 [label=\"1\"];", "8 [label=\"Dataset\"];", "6 -> 9 [label=\"2\"];", "9 [label=\"nil\"];", "3 -> 10 [label=\"alias\"];", "10 [label=\":t1\"];"]
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it "should handle EXCEPT" do
|
|
67
|
-
dot(@ds.except(@ds)).must_equal ["1 -> 2 [label=\"from\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"AliasedExpression\"];", "3 -> 4 [label=\"expression\"];", "4 [label=\"Dataset\"];", "4 -> 5 [label=\"compounds\"];", "5 [label=\"Array\"];", "5 -> 6 [label=\"0\"];", "6 [label=\"Array\"];", "6 -> 7 [label=\"0\"];", "7 [label=\":except\"];", "6 -> 8 [label=\"1\"];", "8 [label=\"Dataset\"];", "6 -> 9 [label=\"2\"];", "9 [label=\"nil\"];", "3 -> 10 [label=\"alias\"];", "10 [label=\":t1\"];"]
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should handle ORDER" do
|
|
71
|
-
dot(@ds.order(:a)).must_equal ["1 -> 2 [label=\"order\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\":a\"];"]
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "should handle LIMIT and OFFSET" do
|
|
75
|
-
dot(@ds.limit(1, 2)).must_equal ["1 -> 2 [label=\"limit\"];", "2 [label=\"1\"];", "1 -> 3 [label=\"offset\"];", "3 [label=\"2\"];"]
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "should handle FOR UPDATE" do
|
|
79
|
-
dot(@ds.for_update).must_equal ["1 -> 2 [label=\"lock\"];", "2 [label=\":update\"];"]
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should handle LiteralStrings" do
|
|
83
|
-
dot(@ds.filter(Sequel.lit('a'))).must_equal ["1 -> 2 [label=\"where\"];", "2 [label=\"Sequel.lit(\\\"(a)\\\")\"];"]
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
it "should handle true, false, nil" do
|
|
87
|
-
dot(@ds.select(true, false, nil)).must_equal ["1 -> 2 [label=\"select\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"true\"];", "2 -> 4 [label=\"1\"];", "4 [label=\"false\"];", "2 -> 5 [label=\"2\"];", "5 [label=\"nil\"];"]
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "should handle SQL::ComplexExpressions" do
|
|
91
|
-
dot(@ds.filter(:a=>:b)).must_equal ["1 -> 2 [label=\"where\"];", "2 [label=\"ComplexExpression: =\"];", "2 -> 3 [label=\"0\"];", "3 [label=\":a\"];", "2 -> 4 [label=\"1\"];", "4 [label=\":b\"];"]
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
it "should handle SQL::Identifiers" do
|
|
95
|
-
dot(@ds.select{a}).must_equal ["1 -> 2 [label=\"select\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"Identifier\"];", "3 -> 4 [label=\"value\"];", "4 [label=\":a\"];"]
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "should handle SQL::QualifiedIdentifiers" do
|
|
99
|
-
dot(@ds.select{a[b]}).must_equal ["1 -> 2 [label=\"select\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"QualifiedIdentifier\"];", "3 -> 4 [label=\"table\"];", "4 [label=\"\\\"a\\\"\"];", "3 -> 5 [label=\"column\"];", "5 [label=\"\\\"b\\\"\"];"]
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it "should handle SQL::OrderedExpressions" do
|
|
103
|
-
dot(@ds.order(Sequel.desc(:a, :nulls=>:last))).must_equal ["1 -> 2 [label=\"order\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"OrderedExpression: DESC NULLS LAST\"];", "3 -> 4 [label=\"expression\"];", "4 [label=\":a\"];"]
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "should handle SQL::AliasedExpressions" do
|
|
107
|
-
dot(@ds.from(Sequel.as(:a, :b))).must_equal ["1 -> 2 [label=\"from\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"AliasedExpression\"];", "3 -> 4 [label=\"expression\"];", "4 [label=\":a\"];", "3 -> 5 [label=\"alias\"];", "5 [label=\":b\"];"]
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
it "should handle SQL::AliasedExpressions with column aliases" do
|
|
111
|
-
dot(@ds.from(Sequel.as(:a, :b, [:c, :d]))).must_equal ["1 -> 2 [label=\"from\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"AliasedExpression\"];", "3 -> 4 [label=\"expression\"];", "4 [label=\":a\"];", "3 -> 5 [label=\"alias\"];", "5 [label=\":b\"];", "3 -> 6 [label=\"columns\"];", "6 [label=\"Array\"];", "6 -> 7 [label=\"0\"];", "7 [label=\":c\"];", "6 -> 8 [label=\"1\"];", "8 [label=\":d\"];"]
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
it "should handle SQL::CaseExpressions" do
|
|
115
|
-
dot(@ds.select(Sequel.case({:a=>:b}, :c, :d))).must_equal ["1 -> 2 [label=\"select\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"CaseExpression\"];", "3 -> 4 [label=\"expression\"];", "4 [label=\":d\"];", "3 -> 5 [label=\"conditions\"];", "5 [label=\"Array\"];", "5 -> 6 [label=\"0\"];", "6 [label=\"Array\"];", "6 -> 7 [label=\"0\"];", "7 [label=\":a\"];", "6 -> 8 [label=\"1\"];", "8 [label=\":b\"];", "3 -> 9 [label=\"default\"];", "9 [label=\":c\"];"]
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
it "should handle SQL::Cast" do
|
|
119
|
-
dot(@ds.select(Sequel.cast(:a, Integer))).must_equal ["1 -> 2 [label=\"select\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"Cast\"];", "3 -> 4 [label=\"expr\"];", "4 [label=\":a\"];", "3 -> 5 [label=\"type\"];", "5 [label=\"Integer\"];"]
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "should handle SQL::Function" do
|
|
123
|
-
dot(@ds.select{a(b)}).must_equal ["1 -> 2 [label=\"select\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"Function: a\"];", "3 -> 4 [label=\"0\"];", "4 [label=\"Identifier\"];", "4 -> 5 [label=\"value\"];", "5 [label=\":b\"];", "3 -> 6 [label=\"args\"];", "6 [label=\"Array\"];", "6 -> 7 [label=\"0\"];", "7 [label=\"Identifier\"];", "7 -> 8 [label=\"value\"];", "8 [label=\":b\"];", "3 -> 9 [label=\"opts\"];", "9 [label=\"Hash\"];"]
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "should handle SQL::Subscript" do
|
|
127
|
-
dot(@ds.select(Sequel.subscript(:a, 1))).must_equal ["1 -> 2 [label=\"select\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"Subscript\"];", "3 -> 4 [label=\"f\"];", "4 [label=\":a\"];", "3 -> 5 [label=\"sub\"];", "5 [label=\"Array\"];", "5 -> 6 [label=\"0\"];", "6 [label=\"1\"];"]
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it "should handle SQL::Function with a window" do
|
|
131
|
-
dot(@ds.select(Sequel.function(:sum).over(:partition=>:a))).must_equal ["1 -> 2 [label=\"select\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"Function: sum\"];", "3 -> 4 [label=\"args\"];", "4 [label=\"Array\"];", "3 -> 5 [label=\"opts\"];", "5 [label=\"Hash\"];", "5 -> 6 [label=\"over\"];", "6 [label=\"Window\"];", "6 -> 7 [label=\"opts\"];", "7 [label=\"Hash\"];", "7 -> 8 [label=\"partition\"];", "8 [label=\":a\"];"]
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
it "should handle SQL::PlaceholderLiteralString" do
|
|
135
|
-
dot(@ds.where(Sequel.lit("?", true))).must_equal ["1 -> 2 [label=\"where\"];", "2 [label=\"PlaceholderLiteralString: \\\"(?)\\\"\"];", "2 -> 3 [label=\"args\"];", "3 [label=\"Array\"];", "3 -> 4 [label=\"0\"];", "4 [label=\"true\"];"]
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "should handle JOIN ON" do
|
|
139
|
-
dot(@ds.from(:a).join(:d, :b=>:c)).must_equal ["1 -> 2 [label=\"from\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\":a\"];", "1 -> 4 [label=\"join\"];", "4 [label=\"Array\"];", "4 -> 5 [label=\"0\"];", "5 [label=\"INNER JOIN ON\"];", "5 -> 6 [label=\"table\"];", "6 [label=\":d\"];", "5 -> 7 [label=\"on\"];", "7 [label=\"ComplexExpression: =\"];", "7 -> 8 [label=\"0\"];", "8 [label=\"QualifiedIdentifier\"];", "8 -> 9 [label=\"table\"];", "9 [label=\"\\\"d\\\"\"];", "8 -> 10 [label=\"column\"];", "10 [label=\"\\\"b\\\"\"];", "7 -> 11 [label=\"1\"];", "11 [label=\"QualifiedIdentifier\"];", "11 -> 12 [label=\"table\"];", "12 [label=\"\\\"a\\\"\"];", "11 -> 13 [label=\"column\"];", "13 [label=\"\\\"c\\\"\"];"]
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it "should handle JOIN USING" do
|
|
143
|
-
dot(@ds.from(:a).join(:d, [:c], :table_alias=>:c)).must_equal ["1 -> 2 [label=\"from\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\":a\"];", "1 -> 4 [label=\"join\"];", "4 [label=\"Array\"];", "4 -> 5 [label=\"0\"];", "5 [label=\"INNER JOIN USING\"];", "5 -> 6 [label=\"table\"];", "6 [label=\"AliasedExpression\"];", "6 -> 7 [label=\"expression\"];", "7 [label=\":d\"];", "6 -> 8 [label=\"alias\"];", "8 [label=\":c\"];", "5 -> 9 [label=\"using\"];", "9 [label=\"Array\"];", "9 -> 10 [label=\"0\"];", "10 [label=\":c\"];"]
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "should handle other types" do
|
|
147
|
-
o = Object.new
|
|
148
|
-
def o.inspect
|
|
149
|
-
"blah"
|
|
150
|
-
end
|
|
151
|
-
dot(@ds.select(o)).must_equal ["1 -> 2 [label=\"select\"];", "2 [label=\"Array\"];", "2 -> 3 [label=\"0\"];", "3 [label=\"Unhandled: blah\"];"]
|
|
152
|
-
end
|
|
153
|
-
end
|
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
require_relative "spec_helper"
|
|
2
|
-
|
|
3
|
-
describe "Touch plugin" do
|
|
4
|
-
before do
|
|
5
|
-
@c = Class.new(Sequel::Model)
|
|
6
|
-
p = proc{def touch_instance_value; touch_association_value; end}
|
|
7
|
-
@Artist = Class.new(@c, &p).set_dataset(:artists)
|
|
8
|
-
@Album = Class.new(@c, &p).set_dataset(:albums)
|
|
9
|
-
|
|
10
|
-
@Artist.columns :id, :updated_at, :modified_on
|
|
11
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id
|
|
12
|
-
|
|
13
|
-
@Album.columns :id, :updated_at, :modified_on, :artist_id, :original_album_id
|
|
14
|
-
@Album.one_to_many :followup_albums, :class=>@Album, :key=>:original_album_id
|
|
15
|
-
@Album.many_to_one :artist, :class=>@Artist
|
|
16
|
-
|
|
17
|
-
@a = @Artist.load(:id=>1)
|
|
18
|
-
DB.reset
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "should default to using Time.now when setting the column values for model instances" do
|
|
22
|
-
c = Class.new(Sequel::Model).set_dataset(:a)
|
|
23
|
-
c.plugin :touch
|
|
24
|
-
c.columns :id, :updated_at
|
|
25
|
-
c.load(:id=>1).touch
|
|
26
|
-
DB.sqls.first.must_match(/UPDATE a SET updated_at = '[-0-9 :.]+' WHERE \(id = 1\)/)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "should work with current_datetime_timestamp extension" do
|
|
30
|
-
c = Class.new(Sequel::Model).set_dataset(:a)
|
|
31
|
-
c.dataset = c.dataset.extension(:current_datetime_timestamp)
|
|
32
|
-
c.plugin :touch
|
|
33
|
-
c.columns :id, :updated_at
|
|
34
|
-
c.load(:id=>1).touch
|
|
35
|
-
DB.sqls.must_equal ["UPDATE a SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)"]
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should allow #touch instance method for updating the updated_at column" do
|
|
39
|
-
@Artist.plugin :touch
|
|
40
|
-
@a.touch
|
|
41
|
-
DB.sqls.must_equal ["UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)"]
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should have #touch take an argument for the column to touch" do
|
|
45
|
-
@Artist.plugin :touch
|
|
46
|
-
@a.touch(:modified_on)
|
|
47
|
-
DB.sqls.must_equal ["UPDATE artists SET modified_on = CURRENT_TIMESTAMP WHERE (id = 1)"]
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "should be able to specify the default column to touch in the plugin call using the :column option" do
|
|
51
|
-
@Artist.plugin :touch, :column=>:modified_on
|
|
52
|
-
@a.touch
|
|
53
|
-
DB.sqls.must_equal ["UPDATE artists SET modified_on = CURRENT_TIMESTAMP WHERE (id = 1)"]
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should be able to specify the default column to touch using the touch_column model accessor" do
|
|
57
|
-
@Artist.plugin :touch
|
|
58
|
-
@Artist.touch_column = :modified_on
|
|
59
|
-
@a.touch
|
|
60
|
-
DB.sqls.must_equal ["UPDATE artists SET modified_on = CURRENT_TIMESTAMP WHERE (id = 1)"]
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "should be able to specify the associations to touch in the plugin call using the :associations option" do
|
|
64
|
-
@Artist.plugin :touch, :associations=>:albums
|
|
65
|
-
@a.touch
|
|
66
|
-
DB.sqls.must_equal ["UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)",
|
|
67
|
-
"UPDATE albums SET updated_at = CURRENT_TIMESTAMP WHERE (albums.artist_id = 1)"]
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should clear associations after touching them :associations option" do
|
|
71
|
-
@Artist.plugin :touch, :associations=>:albums
|
|
72
|
-
@a.associations[:albums] = [@Album.call(:id=>1)]
|
|
73
|
-
@a.touch
|
|
74
|
-
@a.associations[:albums].must_be_nil
|
|
75
|
-
DB.sqls.must_equal ["UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)",
|
|
76
|
-
"UPDATE albums SET updated_at = CURRENT_TIMESTAMP WHERE (albums.artist_id = 1)"]
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "should be able to give an array to the :associations option specifying multiple associations" do
|
|
80
|
-
@Album.plugin :touch, :associations=>[:artist, :followup_albums]
|
|
81
|
-
@Album.load(:id=>4, :artist_id=>1).touch
|
|
82
|
-
sqls = DB.sqls
|
|
83
|
-
sqls.shift.must_equal "UPDATE albums SET updated_at = CURRENT_TIMESTAMP WHERE (id = 4)"
|
|
84
|
-
sqls.sort.must_equal ["UPDATE albums SET updated_at = CURRENT_TIMESTAMP WHERE (albums.original_album_id = 4)",
|
|
85
|
-
"UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (artists.id = 1)"]
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it "should be able to give a hash to the :associations option specifying the column to use for each association" do
|
|
89
|
-
@Artist.plugin :touch, :associations=>{:albums=>:modified_on}
|
|
90
|
-
@a.touch
|
|
91
|
-
DB.sqls.must_equal ["UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)",
|
|
92
|
-
"UPDATE albums SET modified_on = CURRENT_TIMESTAMP WHERE (albums.artist_id = 1)"]
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "should default to using the touch_column as the default touch column for associations" do
|
|
96
|
-
@Artist.plugin :touch, :column=>:modified_on, :associations=>:albums
|
|
97
|
-
@a.touch
|
|
98
|
-
DB.sqls.must_equal ["UPDATE artists SET modified_on = CURRENT_TIMESTAMP WHERE (id = 1)",
|
|
99
|
-
"UPDATE albums SET modified_on = CURRENT_TIMESTAMP WHERE (albums.artist_id = 1)"]
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it "should allow the mixed use of symbols and hashes inside an array for the :associations option" do
|
|
103
|
-
@Album.plugin :touch, :associations=>[:artist, {:followup_albums=>:modified_on}]
|
|
104
|
-
@Album.load(:id=>4, :artist_id=>1).touch
|
|
105
|
-
sqls = DB.sqls
|
|
106
|
-
sqls.shift.must_equal "UPDATE albums SET updated_at = CURRENT_TIMESTAMP WHERE (id = 4)"
|
|
107
|
-
sqls.sort.must_equal ["UPDATE albums SET modified_on = CURRENT_TIMESTAMP WHERE (albums.original_album_id = 4)",
|
|
108
|
-
"UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (artists.id = 1)"]
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it "should be able to specify the associations to touch via a touch_associations_method" do
|
|
112
|
-
@Album.plugin :touch
|
|
113
|
-
@Album.touch_associations(:artist, {:followup_albums=>:modified_on})
|
|
114
|
-
@Album.load(:id=>4, :artist_id=>1).touch
|
|
115
|
-
sqls = DB.sqls
|
|
116
|
-
sqls.shift.must_equal "UPDATE albums SET updated_at = CURRENT_TIMESTAMP WHERE (id = 4)"
|
|
117
|
-
sqls.sort.must_equal ["UPDATE albums SET modified_on = CURRENT_TIMESTAMP WHERE (albums.original_album_id = 4)",
|
|
118
|
-
"UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (artists.id = 1)"]
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "should touch associated objects when destroying an object" do
|
|
122
|
-
@Album.plugin :touch
|
|
123
|
-
@Album.touch_associations(:artist, {:followup_albums=>:modified_on})
|
|
124
|
-
@Album.load(:id=>4, :artist_id=>1).destroy
|
|
125
|
-
sqls = DB.sqls
|
|
126
|
-
sqls.shift.must_equal "DELETE FROM albums WHERE id = 4"
|
|
127
|
-
sqls.sort.must_equal ["UPDATE albums SET modified_on = CURRENT_TIMESTAMP WHERE (albums.original_album_id = 4)",
|
|
128
|
-
"UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (artists.id = 1)"]
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
it "should be able to touch many_to_one associations" do
|
|
132
|
-
@Album.plugin :touch, :associations=>:artist
|
|
133
|
-
@Album.load(:id=>3, :artist_id=>4).touch
|
|
134
|
-
DB.sqls.must_equal ["UPDATE albums SET updated_at = CURRENT_TIMESTAMP WHERE (id = 3)",
|
|
135
|
-
"UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (artists.id = 4)"]
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "should be able to touch many_to_one associations" do
|
|
139
|
-
@Album.plugin :touch, :associations=>:artist
|
|
140
|
-
@Album.plugin :skip_create_refresh
|
|
141
|
-
@Album.create(:artist_id=>4)
|
|
142
|
-
DB.sqls.must_equal ["INSERT INTO albums (artist_id) VALUES (4)",
|
|
143
|
-
"UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (artists.id = 4)"]
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "should be able to touch one_to_one associations" do
|
|
147
|
-
@Artist.one_to_one :album, :class=>@Album, :key=>:artist_id
|
|
148
|
-
@Artist.plugin :touch, :associations=>:album
|
|
149
|
-
@a.touch
|
|
150
|
-
DB.sqls.must_equal ["UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)",
|
|
151
|
-
"UPDATE albums SET updated_at = CURRENT_TIMESTAMP WHERE (albums.artist_id = 1)"]
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
it "should be able to touch many_to_many associations" do
|
|
155
|
-
@Artist.many_to_many :albums, :class=>@Album, :left_key=>:artist_id, :join_table=>:aa
|
|
156
|
-
@Artist.plugin :touch, :associations=>:albums
|
|
157
|
-
@a.touch
|
|
158
|
-
DB.sqls.must_equal ["UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)",
|
|
159
|
-
"SELECT albums.* FROM albums INNER JOIN aa ON (aa.album_id = albums.id) WHERE (aa.artist_id = 1)",
|
|
160
|
-
"UPDATE albums SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)"]
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
it "should be able to touch many_through_many associations" do
|
|
164
|
-
@Artist.plugin :many_through_many
|
|
165
|
-
@Artist.many_through_many :albums, [[:aa, :artist_id, :album_id]], :class=>@Album
|
|
166
|
-
@Artist.plugin :touch, :associations=>:albums
|
|
167
|
-
@a.touch
|
|
168
|
-
DB.sqls.must_equal ["UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)",
|
|
169
|
-
"SELECT albums.* FROM albums INNER JOIN aa ON (aa.album_id = albums.id) WHERE (aa.artist_id = 1)",
|
|
170
|
-
"UPDATE albums SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)"]
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
it "should handle touching many_to_one associations with no associated object" do
|
|
174
|
-
@Album.plugin :touch, :associations=>:artist
|
|
175
|
-
@Album.load(:id=>3, :artist_id=>nil).touch
|
|
176
|
-
DB.sqls.must_equal ["UPDATE albums SET updated_at = CURRENT_TIMESTAMP WHERE (id = 3)"]
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
it "should not update a column that doesn't exist" do
|
|
180
|
-
@Album.plugin :touch, :column=>:x
|
|
181
|
-
a = @Album.load(:id=>1)
|
|
182
|
-
a.touch
|
|
183
|
-
DB.sqls.must_equal []
|
|
184
|
-
a.artist_id = 1
|
|
185
|
-
a.touch
|
|
186
|
-
DB.sqls.must_equal ['UPDATE albums SET artist_id = 1 WHERE (id = 1)']
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
it "should raise an error if given a column argument in touch that doesn't exist" do
|
|
190
|
-
@Artist.plugin :touch
|
|
191
|
-
proc{@a.touch(:x)}.must_raise(Sequel::MassAssignmentRestriction)
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
it "should raise an Error when a nonexistent association is given" do
|
|
195
|
-
@Artist.plugin :touch
|
|
196
|
-
proc{@Artist.plugin :touch, :associations=>:blah}.must_raise(Sequel::Error)
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
it "should work correctly in subclasses" do
|
|
200
|
-
@Artist.plugin :touch
|
|
201
|
-
c1 = Class.new(@Artist)
|
|
202
|
-
c1.load(:id=>4).touch
|
|
203
|
-
DB.sqls.must_equal ["UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (id = 4)"]
|
|
204
|
-
|
|
205
|
-
c1.touch_column = :modified_on
|
|
206
|
-
c1.touch_associations :albums
|
|
207
|
-
c1.load(:id=>1).touch
|
|
208
|
-
DB.sqls.must_equal ["UPDATE artists SET modified_on = CURRENT_TIMESTAMP WHERE (id = 1)",
|
|
209
|
-
"UPDATE albums SET modified_on = CURRENT_TIMESTAMP WHERE (albums.artist_id = 1)"]
|
|
210
|
-
|
|
211
|
-
@a.touch
|
|
212
|
-
DB.sqls.must_equal ["UPDATE artists SET updated_at = CURRENT_TIMESTAMP WHERE (id = 1)"]
|
|
213
|
-
|
|
214
|
-
@Artist.plugin :touch, :column=>:modified_on, :associations=>:albums
|
|
215
|
-
c2 = Class.new(@Artist)
|
|
216
|
-
c2.load(:id=>4).touch
|
|
217
|
-
DB.sqls.must_equal ["UPDATE artists SET modified_on = CURRENT_TIMESTAMP WHERE (id = 4)",
|
|
218
|
-
"UPDATE albums SET modified_on = CURRENT_TIMESTAMP WHERE (albums.artist_id = 4)"]
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
it "should freeze touched associations when freezing model class" do
|
|
222
|
-
@Artist.plugin :touch, :associations=>:albums
|
|
223
|
-
@Artist.freeze
|
|
224
|
-
@Artist.touched_associations.frozen?.must_equal true
|
|
225
|
-
end
|
|
226
|
-
end
|