mongoid 7.5.4 → 8.1.9
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.md +3 -3
- data/README.md +6 -6
- data/Rakefile +44 -46
- data/lib/config/locales/en.yml +92 -43
- data/lib/mongoid/association/accessors.rb +44 -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 +32 -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 +85 -46
- 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 +40 -21
- 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 +16 -7
- 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 +11 -6
- 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 +15 -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 +48 -39
- 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 +135 -36
- data/lib/mongoid/equality.rb +9 -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 +38 -9
- 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 +142 -28
- 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 +187 -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 +48 -14
- 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 +17 -13
- 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 +9 -2
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +3 -4
- data/lib/mongoid/traversable.rb +41 -5
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +98 -17
- 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 +17 -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 +24 -19
- 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 +61 -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 +26 -3
- 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 +290 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -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 +19 -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 +215 -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/association_spec.rb +60 -0
- 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/readonly_spec.rb +19 -0
- data/spec/mongoid/attributes_spec.rb +526 -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 +2256 -1005
- 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 +107 -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 +59 -41
- data/spec/mongoid/equality_spec.rb +6 -0
- 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 +503 -87
- 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 +904 -22
- data/spec/mongoid/interceptable_spec_models.rb +189 -22
- 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 +25 -39
- 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/created_spec.rb +23 -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/associated_spec.rb +27 -34
- 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/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 +5 -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/lat_lng.rb +6 -0
- data/spec/support/models/name.rb +10 -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
- metadata +98 -96
- checksums.yaml.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
- data/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -231
- data/spec/shared/lib/mrss/constraints.rb +0 -378
- data/spec/shared/lib/mrss/docker_runner.rb +0 -291
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
- data/spec/shared/lib/mrss/session_registry.rb +0 -69
- data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -15
- data/spec/shared/share/Dockerfile.erb +0 -325
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/config.sh +0 -27
- data/spec/shared/shlib/distro.sh +0 -74
- data/spec/shared/shlib/server.sh +0 -392
- data/spec/shared/shlib/set_env.sh +0 -169
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -3
@@ -35,6 +35,22 @@ shared_context "rake task" do
|
|
35
35
|
task.invoke
|
36
36
|
end
|
37
37
|
end
|
38
|
+
|
39
|
+
shared_examples_for "create_collections" do
|
40
|
+
|
41
|
+
it "receives create_collections" do
|
42
|
+
expect(Mongoid::Tasks::Database).to receive(:create_collections)
|
43
|
+
task.invoke
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
shared_examples_for "force create_collections" do
|
48
|
+
|
49
|
+
it "receives create_collections" do
|
50
|
+
expect(Mongoid::Tasks::Database).to receive(:create_collections).with(force: true)
|
51
|
+
task.invoke
|
52
|
+
end
|
53
|
+
end
|
38
54
|
end
|
39
55
|
|
40
56
|
shared_context "rails rake task" do
|
@@ -99,6 +115,10 @@ describe "db:setup" do
|
|
99
115
|
expect(task.prerequisites).to include("mongoid:create_indexes")
|
100
116
|
end
|
101
117
|
|
118
|
+
it "calls db:mongoid:create_collections" do
|
119
|
+
expect(task.prerequisites).to include("mongoid:create_collections")
|
120
|
+
end
|
121
|
+
|
102
122
|
it "calls db:seed" do
|
103
123
|
expect(task.prerequisites).to include("db:seed")
|
104
124
|
end
|
@@ -113,6 +133,7 @@ describe "db:setup" do
|
|
113
133
|
|
114
134
|
it "works" do
|
115
135
|
expect(Mongoid::Tasks::Database).to receive(:create_indexes)
|
136
|
+
expect(Mongoid::Tasks::Database).to receive(:create_collections)
|
116
137
|
expect(Rails).to receive(:root).and_return(".")
|
117
138
|
expect(Rails).to receive(:application).and_return(application)
|
118
139
|
task.invoke
|
@@ -169,9 +190,14 @@ describe "db:test:prepare" do
|
|
169
190
|
expect(task.prerequisites).to include("mongoid:create_indexes")
|
170
191
|
end
|
171
192
|
|
193
|
+
it "calls mongoid:create_collections" do
|
194
|
+
expect(task.prerequisites).to include("mongoid:create_collections")
|
195
|
+
end
|
196
|
+
|
172
197
|
it "works" do
|
173
198
|
expect(Rails).to receive(:application).and_return(application)
|
174
199
|
expect(Mongoid::Tasks::Database).to receive(:create_indexes)
|
200
|
+
expect(Mongoid::Tasks::Database).to receive(:create_collections)
|
175
201
|
task.invoke
|
176
202
|
end
|
177
203
|
end
|
@@ -200,6 +226,54 @@ describe "db:mongoid:create_indexes" do
|
|
200
226
|
end
|
201
227
|
end
|
202
228
|
|
229
|
+
describe "db:mongoid:create_collections" do
|
230
|
+
include_context "rake task"
|
231
|
+
|
232
|
+
it_behaves_like "create_collections"
|
233
|
+
|
234
|
+
it "calls load_models" do
|
235
|
+
expect(task.prerequisites).to include("load_models")
|
236
|
+
end
|
237
|
+
|
238
|
+
it "calls environment" do
|
239
|
+
expect(task.prerequisites).to include("environment")
|
240
|
+
end
|
241
|
+
|
242
|
+
context "when using rails task" do
|
243
|
+
include_context "rails rake task"
|
244
|
+
|
245
|
+
before do
|
246
|
+
expect(Rails).to receive(:application).and_return(application)
|
247
|
+
end
|
248
|
+
|
249
|
+
it_behaves_like "create_collections"
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
describe "db:mongoid:create_collections:force" do
|
254
|
+
include_context "rake task"
|
255
|
+
|
256
|
+
it_behaves_like "force create_collections"
|
257
|
+
|
258
|
+
it "calls load_models" do
|
259
|
+
expect(task.prerequisites).to include("load_models")
|
260
|
+
end
|
261
|
+
|
262
|
+
it "calls environment" do
|
263
|
+
expect(task.prerequisites).to include("environment")
|
264
|
+
end
|
265
|
+
|
266
|
+
context "when using rails task" do
|
267
|
+
include_context "rails rake task"
|
268
|
+
|
269
|
+
before do
|
270
|
+
expect(Rails).to receive(:application).and_return(application)
|
271
|
+
end
|
272
|
+
|
273
|
+
it_behaves_like "force create_collections"
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
203
277
|
describe "db:mongoid:remove_undefined_indexes" do
|
204
278
|
include_context "rake task"
|
205
279
|
|
@@ -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
|
@@ -43,4 +43,27 @@ describe Mongoid::Timestamps::Created do
|
|
43
43
|
expect(quiz.created_at).to be_within(10).of(Time.now.utc)
|
44
44
|
end
|
45
45
|
end
|
46
|
+
|
47
|
+
context "when the document is destroyed" do
|
48
|
+
let(:book) do
|
49
|
+
Book.create!
|
50
|
+
end
|
51
|
+
|
52
|
+
before do
|
53
|
+
Cover.before_save do
|
54
|
+
destroy if title == "delete me"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
after do
|
59
|
+
Cover.reset_callbacks(:save)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "does not set the created_at timestamp" do
|
63
|
+
book.covers << Cover.new(title: "delete me")
|
64
|
+
expect {
|
65
|
+
book.save
|
66
|
+
}.not_to raise_error
|
67
|
+
end
|
68
|
+
end
|
46
69
|
end
|
@@ -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
|