mongoid 7.5.4 → 8.1.3
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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +3 -3
- data/README.md +6 -6
- data/lib/config/locales/en.yml +92 -43
- data/lib/mongoid/association/accessors.rb +40 -11
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +5 -3
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +34 -11
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +69 -45
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +8 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +45 -7
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +15 -4
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
- data/lib/mongoid/association/referenced/has_many/proxy.rb +29 -19
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +4 -4
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic.rb +7 -0
- data/lib/mongoid/attributes/dynamic.rb +4 -4
- data/lib/mongoid/attributes/nested.rb +6 -6
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +3 -3
- data/lib/mongoid/attributes.rb +51 -42
- data/lib/mongoid/changeable.rb +147 -14
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/storage_options.rb +2 -5
- data/lib/mongoid/clients/validators/storage.rb +3 -15
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +2 -0
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/options.rb +3 -0
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config/validators.rb +1 -0
- data/lib/mongoid/config.rb +153 -18
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +285 -58
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +540 -346
- data/lib/mongoid/contextual/none.rb +193 -20
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +14 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +8 -5
- data/lib/mongoid/criteria/includable.rb +27 -22
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -9
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +4 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
- data/lib/mongoid/criteria/queryable/optional.rb +11 -17
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +47 -38
- data/lib/mongoid/criteria/queryable/selector.rb +92 -7
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +20 -40
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +127 -35
- data/lib/mongoid/equality.rb +8 -8
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +6 -3
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +37 -8
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +10 -8
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +29 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +55 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +19 -4
- data/lib/mongoid/fields/standard.rb +17 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +129 -20
- data/lib/mongoid/findable.rb +54 -24
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +188 -16
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher/eq_impl.rb +1 -1
- data/lib/mongoid/matcher/type.rb +1 -1
- data/lib/mongoid/matcher.rb +33 -13
- data/lib/mongoid/persistable/creatable.rb +19 -9
- data/lib/mongoid/persistable/deletable.rb +2 -2
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +14 -2
- data/lib/mongoid/persistable/unsettable.rb +2 -2
- data/lib/mongoid/persistable/updatable.rb +69 -12
- data/lib/mongoid/persistable/upsertable.rb +21 -2
- data/lib/mongoid/persistable.rb +6 -3
- data/lib/mongoid/persistence_context.rb +6 -4
- data/lib/mongoid/query_cache.rb +13 -261
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +15 -13
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/stateful.rb +57 -10
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +20 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +42 -12
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +5 -4
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +5 -7
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +9 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +19 -4
- data/lib/mongoid.rb +17 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +10 -14
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +132 -1
- data/spec/integration/callbacks_spec.rb +381 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +118 -80
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -32
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +255 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -177
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +15 -1
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +510 -33
- data/spec/mongoid/changeable_spec.rb +429 -37
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +149 -15
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config_spec.rb +214 -31
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +850 -88
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +2309 -1127
- data/spec/mongoid/contextual/none_spec.rb +60 -21
- data/spec/mongoid/copyable_spec.rb +453 -11
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +1 -5
- data/spec/mongoid/criteria_spec.rb +469 -1205
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +639 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +80 -37
- data/spec/mongoid/fields_spec.rb +500 -84
- data/spec/mongoid/findable_spec.rb +450 -58
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +55 -30
- data/spec/mongoid/interceptable_spec.rb +824 -22
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +28 -8
- data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
- data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
- data/spec/mongoid/persistable/logical_spec.rb +37 -0
- data/spec/mongoid/persistable/poppable_spec.rb +36 -0
- data/spec/mongoid/persistable/pullable_spec.rb +72 -0
- data/spec/mongoid/persistable/pushable_spec.rb +72 -0
- data/spec/mongoid/persistable/renamable_spec.rb +36 -0
- data/spec/mongoid/persistable/savable_spec.rb +96 -0
- data/spec/mongoid/persistable/settable_spec.rb +37 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
- data/spec/mongoid/persistable/updatable_spec.rb +20 -28
- data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
- data/spec/mongoid/persistence_context_spec.rb +31 -57
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +56 -215
- data/spec/mongoid/reloadable_spec.rb +83 -6
- data/spec/mongoid/scopable_spec.rb +91 -1
- data/spec/mongoid/serializable_spec.rb +9 -30
- data/spec/mongoid/shardable_spec.rb +4 -4
- data/spec/mongoid/stateful_spec.rb +150 -8
- data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
- data/spec/mongoid/tasks/database_spec.rb +127 -0
- data/spec/mongoid/timestamps_spec.rb +392 -4
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +390 -2
- data/spec/mongoid/touchable_spec_models.rb +14 -8
- data/spec/mongoid/traversable_spec.rb +13 -35
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +34 -16
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/docker_runner.rb +8 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +2 -2
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +36 -40
- data/spec/shared/shlib/server.sh +28 -4
- data/spec/shared/shlib/set_env.sh +4 -4
- data/spec/spec_helper.rb +5 -0
- data/spec/support/constraints.rb +24 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +78 -0
- data/spec/support/models/artist.rb +0 -1
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +4 -0
- data/spec/support/models/book.rb +1 -0
- data/spec/support/models/building.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/product.rb +1 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +0 -0
- metadata +100 -22
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -4,6 +4,59 @@ require "spec_helper"
|
|
4
4
|
|
5
5
|
describe "Mongoid::Tasks::Database" do
|
6
6
|
|
7
|
+
before(:all) do
|
8
|
+
module DatabaseSpec
|
9
|
+
class Measurement
|
10
|
+
include Mongoid::Document
|
11
|
+
|
12
|
+
field :timestamp, type: Time
|
13
|
+
field :temperature, type: Integer
|
14
|
+
|
15
|
+
embeds_many :comments
|
16
|
+
|
17
|
+
store_in collection: "measurement",
|
18
|
+
collection_options: {
|
19
|
+
capped: true, size: 10000
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
class Comment
|
24
|
+
include Mongoid::Document
|
25
|
+
|
26
|
+
field :content, type: String
|
27
|
+
|
28
|
+
embedded_in :measurement
|
29
|
+
|
30
|
+
store_in collection_options: {
|
31
|
+
capped: true, size: 10000
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
class Note
|
36
|
+
include Mongoid::Document
|
37
|
+
|
38
|
+
field :text
|
39
|
+
|
40
|
+
recursively_embeds_one
|
41
|
+
|
42
|
+
store_in collection_options: {
|
43
|
+
capped: true, size: 10000
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
after(:all) do
|
50
|
+
Mongoid.deregister_model(DatabaseSpec::Measurement)
|
51
|
+
DatabaseSpec.send(:remove_const, :Measurement)
|
52
|
+
Mongoid.deregister_model(DatabaseSpec::Comment)
|
53
|
+
DatabaseSpec.send(:remove_const, :Comment)
|
54
|
+
Mongoid.deregister_model(DatabaseSpec::Note)
|
55
|
+
DatabaseSpec.send(:remove_const, :Note)
|
56
|
+
Object.send(:remove_const, :DatabaseSpec)
|
57
|
+
end
|
58
|
+
|
59
|
+
|
7
60
|
let(:logger) do
|
8
61
|
double("logger").tap do |log|
|
9
62
|
allow(log).to receive(:info)
|
@@ -18,6 +71,80 @@ describe "Mongoid::Tasks::Database" do
|
|
18
71
|
[ User, Account, Address, Draft ]
|
19
72
|
end
|
20
73
|
|
74
|
+
describe '.create_collections' do
|
75
|
+
context 'collection_options are specified' do
|
76
|
+
let(:models) do
|
77
|
+
[DatabaseSpec::Measurement]
|
78
|
+
end
|
79
|
+
|
80
|
+
after do
|
81
|
+
DatabaseSpec::Measurement.collection.drop
|
82
|
+
end
|
83
|
+
|
84
|
+
[true, false].each do |force|
|
85
|
+
context "when force is #{force}" do
|
86
|
+
it 'creates the collection' do
|
87
|
+
expect(DatabaseSpec::Measurement).to receive(:create_collection).once.with(force: force)
|
88
|
+
Mongoid::Tasks::Database.create_collections(models, force: force)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context 'collection_options are not specified' do
|
95
|
+
let(:models) do
|
96
|
+
[Person]
|
97
|
+
end
|
98
|
+
|
99
|
+
[true, false].each do |force|
|
100
|
+
context "when force is #{force}" do
|
101
|
+
it 'creates the collection' do
|
102
|
+
expect(Person).to receive(:create_collection).once.with(force: force)
|
103
|
+
Mongoid::Tasks::Database.create_collections(models, force: force)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context "when collection options is defined on embedded model" do
|
109
|
+
|
110
|
+
let(:models) do
|
111
|
+
[DatabaseSpec::Comment]
|
112
|
+
end
|
113
|
+
|
114
|
+
let(:logger) do
|
115
|
+
double("logger").tap do |log|
|
116
|
+
expect(log).to receive(:info).once.with(/MONGOID: collection options ignored on: .*, please define in the root model/)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
before do
|
121
|
+
allow(Mongoid::Tasks::Database).to receive(:logger).and_return(logger)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "does nothing, but logging" do
|
125
|
+
expect(DatabaseSpec::Comment).to receive(:create_collection).never
|
126
|
+
Mongoid::Tasks::Database.create_collections(models)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context "when collection options is defined on cyclic model" do
|
131
|
+
|
132
|
+
let(:models) do
|
133
|
+
[DatabaseSpec::Note]
|
134
|
+
end
|
135
|
+
|
136
|
+
after do
|
137
|
+
DatabaseSpec::Note.collection.drop
|
138
|
+
end
|
139
|
+
|
140
|
+
it "creates the collection" do
|
141
|
+
expect(DatabaseSpec::Note).to receive(:create_collection).once
|
142
|
+
Mongoid::Tasks::Database.create_collections(models)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
21
148
|
describe ".create_indexes" do
|
22
149
|
|
23
150
|
let!(:klass) do
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
|
+
require_relative './timestamps_spec_models'
|
4
5
|
|
5
6
|
describe Mongoid::Timestamps do
|
6
7
|
|
@@ -14,6 +15,10 @@ describe Mongoid::Timestamps do
|
|
14
15
|
Dokument.fields
|
15
16
|
end
|
16
17
|
|
18
|
+
let(:time_zone) { "Pacific Time (US & Canada)" }
|
19
|
+
|
20
|
+
time_zone_override "Pacific Time (US & Canada)"
|
21
|
+
|
17
22
|
before do
|
18
23
|
document.run_callbacks(:create)
|
19
24
|
document.run_callbacks(:save)
|
@@ -35,6 +40,14 @@ describe Mongoid::Timestamps do
|
|
35
40
|
expect(document.updated_at).to be_within(10).of(Time.now.utc)
|
36
41
|
end
|
37
42
|
|
43
|
+
it "sets the created_at to the correct time zone" do
|
44
|
+
expect(document.created_at.time_zone.name).to eq(time_zone)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "sets the updated_at to the correct time zone" do
|
48
|
+
expect(document.updated_at.time_zone.name).to eq(time_zone)
|
49
|
+
end
|
50
|
+
|
38
51
|
it "ensures created_at equals updated_at on new records" do
|
39
52
|
expect(document.updated_at).to eq(document.created_at)
|
40
53
|
end
|
@@ -59,17 +72,20 @@ describe Mongoid::Timestamps do
|
|
59
72
|
context "when the document has changed with updated_at specified" do
|
60
73
|
|
61
74
|
let(:document) do
|
62
|
-
Dokument.
|
75
|
+
Dokument.create(created_at: Time.now.utc)
|
76
|
+
end
|
77
|
+
|
78
|
+
let(:expected_updated_at) do
|
79
|
+
DateTime.parse("2001-06-12")
|
63
80
|
end
|
64
81
|
|
65
82
|
before do
|
66
|
-
document.
|
67
|
-
document.updated_at = DateTime.parse("2001-06-12")
|
83
|
+
document.updated_at = expected_updated_at
|
68
84
|
end
|
69
85
|
|
70
86
|
it "does not set updated at" do
|
71
|
-
expect(document).to receive(:updated_at=).never
|
72
87
|
document.save!
|
88
|
+
expect(document.reload.updated_at).to be == expected_updated_at
|
73
89
|
end
|
74
90
|
end
|
75
91
|
|
@@ -107,4 +123,376 @@ describe Mongoid::Timestamps do
|
|
107
123
|
expect(document.updated_at).to be_within(1).of(Time.now)
|
108
124
|
end
|
109
125
|
end
|
126
|
+
|
127
|
+
# This section of tests describes the behavior of the updated_at field for
|
128
|
+
# different updates on referenced associations, as outlined in PR #5219.
|
129
|
+
describe "updated_at attribute" do
|
130
|
+
let!(:start_time) { Timecop.freeze(Time.at(Time.now.to_i)) }
|
131
|
+
|
132
|
+
let(:update_time) do
|
133
|
+
Timecop.freeze(Time.at(Time.now.to_i) + 2)
|
134
|
+
end
|
135
|
+
|
136
|
+
after do
|
137
|
+
Timecop.return
|
138
|
+
end
|
139
|
+
|
140
|
+
context "when touch: true" do
|
141
|
+
let(:user) { TimestampsSpec::Touch::User.create! }
|
142
|
+
let(:address) { TimestampsSpec::Touch::Address.create! }
|
143
|
+
let(:account) { TimestampsSpec::Touch::Account.create! }
|
144
|
+
let(:pet) { TimestampsSpec::Touch::Pet.create! }
|
145
|
+
|
146
|
+
before do
|
147
|
+
[user, address, account, pet]
|
148
|
+
update_time
|
149
|
+
end
|
150
|
+
|
151
|
+
context "when HABTM association" do
|
152
|
+
|
153
|
+
context "when updating the association itself" do
|
154
|
+
before do
|
155
|
+
user.update(addresses: [address])
|
156
|
+
end
|
157
|
+
|
158
|
+
it "updates the timestamps correctly" do
|
159
|
+
pending "MONGOID-4953"
|
160
|
+
user.updated_at.should == update_time
|
161
|
+
address.updated_at.should == update_time
|
162
|
+
end
|
163
|
+
|
164
|
+
it "updates the timestamps in the db correctly" do
|
165
|
+
pending "MONGOID-4953"
|
166
|
+
user.reload.updated_at.should == update_time
|
167
|
+
address.reload.updated_at.should == update_time
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
context "when updating the association's foreign key" do
|
172
|
+
before do
|
173
|
+
user.update(address_ids: [address.id])
|
174
|
+
end
|
175
|
+
|
176
|
+
it "updates the timestamps correctly" do
|
177
|
+
user.updated_at.should == update_time
|
178
|
+
address.updated_at.should == start_time
|
179
|
+
end
|
180
|
+
|
181
|
+
it "updates the timestamps in the db correctly" do
|
182
|
+
user.reload.updated_at.should == update_time
|
183
|
+
address.reload.updated_at.should == start_time
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
context "when has_many association" do
|
189
|
+
|
190
|
+
context "when updating the association itself" do
|
191
|
+
before do
|
192
|
+
user.update(accounts: [account])
|
193
|
+
end
|
194
|
+
|
195
|
+
it "updates the timestamps correctly" do
|
196
|
+
user.updated_at.should == update_time
|
197
|
+
account.updated_at.should == update_time
|
198
|
+
end
|
199
|
+
|
200
|
+
it "updates the timestamps in the db correctly" do
|
201
|
+
user.reload.updated_at.should == update_time
|
202
|
+
account.reload.updated_at.should == update_time
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
context "when updating the association's foreign key" do
|
207
|
+
before do
|
208
|
+
user.update(account_ids: [account.id])
|
209
|
+
end
|
210
|
+
|
211
|
+
it "updates the timestamps correctly" do
|
212
|
+
user.updated_at.should == update_time
|
213
|
+
account.updated_at.should == start_time
|
214
|
+
end
|
215
|
+
|
216
|
+
# The Account object's updated_at is updated in the database but not
|
217
|
+
# locally, since, in this case, the Account object is not passed into
|
218
|
+
# the update function, so the Account object updated locally is not
|
219
|
+
# the same as the one that we have locally here.
|
220
|
+
it "updates the timestamps in the db correctly" do
|
221
|
+
user.reload.updated_at.should == update_time
|
222
|
+
account.reload.updated_at.should == update_time
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
context "when belongs_to association; on has_many" do
|
228
|
+
|
229
|
+
context "when updating the association itself" do
|
230
|
+
before do
|
231
|
+
account.update(user: user)
|
232
|
+
end
|
233
|
+
|
234
|
+
it "updates the timestamps correctly" do
|
235
|
+
user.updated_at.should == update_time
|
236
|
+
account.updated_at.should == update_time
|
237
|
+
end
|
238
|
+
|
239
|
+
it "updates the timestamps in the db correctly" do
|
240
|
+
user.reload.updated_at.should == update_time
|
241
|
+
account.reload.updated_at.should == update_time
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
context "when updating the association's foreign key" do
|
246
|
+
before do
|
247
|
+
account.update(user_id: user.id)
|
248
|
+
end
|
249
|
+
|
250
|
+
it "updates the timestamps correctly" do
|
251
|
+
user.updated_at.should == start_time
|
252
|
+
account.updated_at.should == update_time
|
253
|
+
end
|
254
|
+
|
255
|
+
# The User object's updated_at is updated in the database but not
|
256
|
+
# locally, since, in this case, the User object is not passed into
|
257
|
+
# the update function, so the User object updated locally is not
|
258
|
+
# the same as the one that we have locally here.
|
259
|
+
it "updates the timestamps in the db correctly" do
|
260
|
+
user.reload.updated_at.should == update_time
|
261
|
+
account.reload.updated_at.should == update_time
|
262
|
+
end
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
context "when has_one association" do
|
267
|
+
|
268
|
+
context "when updating the association itself" do
|
269
|
+
before do
|
270
|
+
user.update(pet: pet)
|
271
|
+
end
|
272
|
+
|
273
|
+
it "updates the timestamps correctly" do
|
274
|
+
user.updated_at.should == update_time
|
275
|
+
pet.updated_at.should == update_time
|
276
|
+
end
|
277
|
+
|
278
|
+
it "updates the timestamps in the db correctly" do
|
279
|
+
user.reload.updated_at.should == update_time
|
280
|
+
pet.reload.updated_at.should == update_time
|
281
|
+
end
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
context "when belongs_to association; on has_one" do
|
286
|
+
|
287
|
+
context "when updating the association itself" do
|
288
|
+
before do
|
289
|
+
pet.update(user: user)
|
290
|
+
end
|
291
|
+
|
292
|
+
it "updates the timestamps correctly" do
|
293
|
+
user.updated_at.should == update_time
|
294
|
+
pet.updated_at.should == update_time
|
295
|
+
end
|
296
|
+
|
297
|
+
it "updates the timestamps in the db correctly" do
|
298
|
+
user.reload.updated_at.should == update_time
|
299
|
+
pet.reload.updated_at.should == update_time
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
context "when updating the association's foreign key" do
|
304
|
+
before do
|
305
|
+
pet.update(user_id: pet.id)
|
306
|
+
end
|
307
|
+
|
308
|
+
it "updates the timestamps correctly" do
|
309
|
+
user.updated_at.should == start_time
|
310
|
+
pet.updated_at.should == update_time
|
311
|
+
end
|
312
|
+
|
313
|
+
it "updates the timestamps in the db correctly" do
|
314
|
+
user.reload.updated_at.should == start_time
|
315
|
+
pet.reload.updated_at.should == update_time
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
context "when touch: false" do
|
322
|
+
let(:user) { TimestampsSpec::NoTouch::User.create! }
|
323
|
+
let(:address) { TimestampsSpec::NoTouch::Address.create! }
|
324
|
+
let(:account) { TimestampsSpec::NoTouch::Account.create! }
|
325
|
+
let(:pet) { TimestampsSpec::NoTouch::Pet.create! }
|
326
|
+
|
327
|
+
before do
|
328
|
+
[user, address, account, pet]
|
329
|
+
update_time
|
330
|
+
end
|
331
|
+
|
332
|
+
context "when HABTM association" do
|
333
|
+
|
334
|
+
context "when updating the association itself" do
|
335
|
+
before do
|
336
|
+
user.update(addresses: [address])
|
337
|
+
end
|
338
|
+
|
339
|
+
it "updates the timestamps correctly" do
|
340
|
+
pending "MONGOID-4953"
|
341
|
+
user.updated_at.should == update_time
|
342
|
+
address.updated_at.should == update_time
|
343
|
+
end
|
344
|
+
|
345
|
+
it "updates the timestamps in the db correctly" do
|
346
|
+
pending "MONGOID-4953"
|
347
|
+
user.reload.updated_at.should == update_time
|
348
|
+
address.reload.updated_at.should == update_time
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
context "when updating the association's foreign key" do
|
353
|
+
before do
|
354
|
+
user.update(address_ids: [address.id])
|
355
|
+
end
|
356
|
+
|
357
|
+
it "updates the timestamps correctly" do
|
358
|
+
user.updated_at.should == update_time
|
359
|
+
address.updated_at.should == start_time
|
360
|
+
end
|
361
|
+
|
362
|
+
it "updates the timestamps in the db correctly" do
|
363
|
+
user.reload.updated_at.should == update_time
|
364
|
+
address.reload.updated_at.should == start_time
|
365
|
+
end
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
context "when has_many association" do
|
370
|
+
|
371
|
+
context "when updating the association itself" do
|
372
|
+
before do
|
373
|
+
user.update(accounts: [account])
|
374
|
+
end
|
375
|
+
|
376
|
+
it "updates the timestamps correctly" do
|
377
|
+
user.updated_at.should == start_time
|
378
|
+
account.updated_at.should == update_time
|
379
|
+
end
|
380
|
+
|
381
|
+
it "updates the timestamps in the db correctly" do
|
382
|
+
user.reload.updated_at.should == start_time
|
383
|
+
account.reload.updated_at.should == update_time
|
384
|
+
end
|
385
|
+
end
|
386
|
+
|
387
|
+
context "when updating the association's foreign key" do
|
388
|
+
before do
|
389
|
+
user.update(account_ids: [account.id])
|
390
|
+
end
|
391
|
+
|
392
|
+
it "updates the timestamps correctly" do
|
393
|
+
user.updated_at.should == start_time
|
394
|
+
account.updated_at.should == start_time
|
395
|
+
end
|
396
|
+
|
397
|
+
# The Account object's updated_at is updated in the database but not
|
398
|
+
# locally, since, in this case, the Account object is not passed into
|
399
|
+
# the update function, so the Account object updated locally is not
|
400
|
+
# the same as the one that we have locally here.
|
401
|
+
it "updates the timestamps in the db correctly" do
|
402
|
+
user.reload.updated_at.should == start_time
|
403
|
+
account.reload.updated_at.should == update_time
|
404
|
+
end
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
context "when belongs_to association; on has_many" do
|
409
|
+
|
410
|
+
context "when updating the association itself" do
|
411
|
+
before do
|
412
|
+
account.update(user: user)
|
413
|
+
end
|
414
|
+
|
415
|
+
it "updates the timestamps correctly" do
|
416
|
+
user.updated_at.should == start_time
|
417
|
+
account.updated_at.should == update_time
|
418
|
+
end
|
419
|
+
|
420
|
+
it "updates the timestamps in the db correctly" do
|
421
|
+
user.reload.updated_at.should == start_time
|
422
|
+
account.reload.updated_at.should == update_time
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
context "when updating the association's foreign key" do
|
427
|
+
before do
|
428
|
+
account.update(user_id: user.id)
|
429
|
+
end
|
430
|
+
|
431
|
+
it "updates the timestamps correctly" do
|
432
|
+
user.updated_at.should == start_time
|
433
|
+
account.updated_at.should == update_time
|
434
|
+
end
|
435
|
+
|
436
|
+
it "updates the timestamps in the db correctly" do
|
437
|
+
user.reload.updated_at.should == start_time
|
438
|
+
account.reload.updated_at.should == update_time
|
439
|
+
end
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
443
|
+
context "when has_one association" do
|
444
|
+
|
445
|
+
context "when updating the association itself" do
|
446
|
+
before do
|
447
|
+
user.update(pet: pet)
|
448
|
+
end
|
449
|
+
|
450
|
+
it "updates the timestamps correctly" do
|
451
|
+
user.updated_at.should == start_time
|
452
|
+
pet.updated_at.should == update_time
|
453
|
+
end
|
454
|
+
|
455
|
+
it "updates the timestamps in the db correctly" do
|
456
|
+
user.reload.updated_at.should == start_time
|
457
|
+
pet.reload.updated_at.should == update_time
|
458
|
+
end
|
459
|
+
end
|
460
|
+
end
|
461
|
+
|
462
|
+
context "when belongs_to association; on has_one" do
|
463
|
+
|
464
|
+
context "when updating the association itself" do
|
465
|
+
before do
|
466
|
+
pet.update(user: user)
|
467
|
+
end
|
468
|
+
|
469
|
+
it "updates the timestamps correctly" do
|
470
|
+
user.updated_at.should == start_time
|
471
|
+
pet.updated_at.should == update_time
|
472
|
+
end
|
473
|
+
|
474
|
+
it "updates the timestamps in the db correctly" do
|
475
|
+
user.reload.updated_at.should == start_time
|
476
|
+
pet.reload.updated_at.should == update_time
|
477
|
+
end
|
478
|
+
end
|
479
|
+
|
480
|
+
context "when updating the association's foreign key" do
|
481
|
+
before do
|
482
|
+
pet.update(user_id: pet.id)
|
483
|
+
end
|
484
|
+
|
485
|
+
it "updates the timestamps correctly" do
|
486
|
+
user.updated_at.should == start_time
|
487
|
+
pet.updated_at.should == update_time
|
488
|
+
end
|
489
|
+
|
490
|
+
it "updates the timestamps in the db correctly" do
|
491
|
+
user.reload.updated_at.should == start_time
|
492
|
+
pet.reload.updated_at.should == update_time
|
493
|
+
end
|
494
|
+
end
|
495
|
+
end
|
496
|
+
end
|
497
|
+
end
|
110
498
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TimestampsSpec
|
4
|
+
module Touch
|
5
|
+
class User
|
6
|
+
include Mongoid::Document
|
7
|
+
include Mongoid::Timestamps
|
8
|
+
|
9
|
+
has_and_belongs_to_many :addresses, class_name: "TimestampsSpec::Touch::Address"
|
10
|
+
has_many :accounts, class_name: "TimestampsSpec::Touch::Account"
|
11
|
+
has_one :pet, class_name: "TimestampsSpec::Touch::Pet"
|
12
|
+
end
|
13
|
+
|
14
|
+
class Address
|
15
|
+
include Mongoid::Document
|
16
|
+
include Mongoid::Timestamps
|
17
|
+
|
18
|
+
has_and_belongs_to_many :users, class_name: "TimestampsSpec::Touch::User"
|
19
|
+
end
|
20
|
+
|
21
|
+
class Account
|
22
|
+
include Mongoid::Document
|
23
|
+
include Mongoid::Timestamps
|
24
|
+
|
25
|
+
belongs_to :user, required: false, touch: true, class_name: "TimestampsSpec::Touch::User"
|
26
|
+
end
|
27
|
+
|
28
|
+
class Pet
|
29
|
+
include Mongoid::Document
|
30
|
+
include Mongoid::Timestamps
|
31
|
+
|
32
|
+
belongs_to :user, required: false, touch: true, class_name: "TimestampsSpec::Touch::User"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
module NoTouch
|
37
|
+
class User
|
38
|
+
include Mongoid::Document
|
39
|
+
include Mongoid::Timestamps
|
40
|
+
|
41
|
+
has_and_belongs_to_many :addresses, class_name: "TimestampsSpec::NoTouch::Address"
|
42
|
+
has_many :accounts, class_name: "TimestampsSpec::NoTouch::Account"
|
43
|
+
has_one :pet, class_name: "TimestampsSpec::NoTouch::Pet"
|
44
|
+
end
|
45
|
+
|
46
|
+
class Address
|
47
|
+
include Mongoid::Document
|
48
|
+
include Mongoid::Timestamps
|
49
|
+
|
50
|
+
has_and_belongs_to_many :users, class_name: "TimestampsSpec::NoTouch::User"
|
51
|
+
end
|
52
|
+
|
53
|
+
class Account
|
54
|
+
include Mongoid::Document
|
55
|
+
include Mongoid::Timestamps
|
56
|
+
|
57
|
+
belongs_to :user, required: false, touch: false, class_name: "TimestampsSpec::NoTouch::User"
|
58
|
+
end
|
59
|
+
|
60
|
+
class Pet
|
61
|
+
include Mongoid::Document
|
62
|
+
include Mongoid::Timestamps
|
63
|
+
|
64
|
+
belongs_to :user, required: false, touch: false, class_name: "TimestampsSpec::NoTouch::User"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|