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
@@ -2,11 +2,30 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
+
module RefHasManySpec
|
6
|
+
module OverrideInitialize
|
7
|
+
class Parent
|
8
|
+
include Mongoid::Document
|
9
|
+
has_many :children, inverse_of: :parent
|
10
|
+
end
|
11
|
+
|
12
|
+
class Child
|
13
|
+
include Mongoid::Document
|
14
|
+
belongs_to :parent
|
15
|
+
field :name, type: String
|
16
|
+
|
17
|
+
def initialize(*args)
|
18
|
+
super
|
19
|
+
self.name ||= "default"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
5
25
|
describe Mongoid::Association::Referenced::HasMany::Proxy do
|
26
|
+
config_override :raise_not_found_error, true
|
6
27
|
|
7
28
|
before :all do
|
8
|
-
Mongoid.raise_not_found_error = true
|
9
|
-
|
10
29
|
Drug.belongs_to :person, primary_key: :username
|
11
30
|
Person.has_many :drugs, validate: false, primary_key: :username
|
12
31
|
end
|
@@ -877,6 +896,14 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
877
896
|
[ :build, :new ].each do |method|
|
878
897
|
|
879
898
|
describe "##{method}" do
|
899
|
+
context 'when model has #initialize' do
|
900
|
+
let(:parent) { RefHasManySpec::OverrideInitialize::Parent.create }
|
901
|
+
let(:child) { parent.children.send(method) }
|
902
|
+
|
903
|
+
it 'should call #initialize' do
|
904
|
+
expect(child.name).to be == "default"
|
905
|
+
end
|
906
|
+
end
|
880
907
|
|
881
908
|
context "when the association is not polymorphic" do
|
882
909
|
|
@@ -2077,154 +2104,114 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2077
2104
|
end
|
2078
2105
|
end
|
2079
2106
|
|
2080
|
-
|
2081
|
-
|
2082
|
-
|
2083
|
-
Person.create!(username: 'arthurnn')
|
2084
|
-
end
|
2107
|
+
%i[ delete delete_one ].each do |method|
|
2108
|
+
describe "##{method}" do
|
2109
|
+
let!(:person) { Person.create!(username: 'arthurnn') }
|
2085
2110
|
|
2086
|
-
|
2111
|
+
context 'when the document is found' do
|
2112
|
+
context 'when no dependent option is set' do
|
2113
|
+
context 'when we are assigning attributes' do
|
2114
|
+
let!(:drug) { person.drugs.create! }
|
2115
|
+
let(:deleted) { person.drugs.send(method, drug) }
|
2087
2116
|
|
2088
|
-
|
2117
|
+
before do
|
2118
|
+
Mongoid::Threaded.begin_execution(:assign)
|
2119
|
+
end
|
2089
2120
|
|
2090
|
-
|
2121
|
+
after do
|
2122
|
+
Mongoid::Threaded.exit_execution(:assign)
|
2123
|
+
end
|
2091
2124
|
|
2092
|
-
|
2093
|
-
|
2125
|
+
it 'does not cascade' do
|
2126
|
+
expect(deleted.changes.keys).to eq([ 'person_id' ])
|
2127
|
+
end
|
2094
2128
|
end
|
2095
2129
|
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2130
|
+
context 'when the document is loaded' do
|
2131
|
+
let!(:drug) { person.drugs.create! }
|
2132
|
+
let!(:deleted) { person.drugs.send(method, drug) }
|
2099
2133
|
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2134
|
+
it 'returns the document' do
|
2135
|
+
expect(deleted).to eq(drug)
|
2136
|
+
end
|
2103
2137
|
|
2104
|
-
|
2105
|
-
|
2106
|
-
|
2138
|
+
it 'deletes the foreign key' do
|
2139
|
+
expect(drug.person_id).to be_nil
|
2140
|
+
end
|
2107
2141
|
|
2108
|
-
|
2109
|
-
|
2142
|
+
it 'removes the document from the association' do
|
2143
|
+
expect(person.drugs).not_to include(drug)
|
2144
|
+
end
|
2110
2145
|
end
|
2111
|
-
end
|
2112
2146
|
|
2113
|
-
|
2147
|
+
context 'when the document is not loaded' do
|
2148
|
+
let!(:drug) { Drug.create!(person_id: person.username) }
|
2149
|
+
let!(:deleted) { person.drugs.send(method, drug) }
|
2114
2150
|
|
2115
|
-
|
2116
|
-
|
2117
|
-
|
2151
|
+
it 'returns the document' do
|
2152
|
+
expect(deleted).to eq(drug)
|
2153
|
+
end
|
2118
2154
|
|
2119
|
-
|
2120
|
-
|
2121
|
-
|
2155
|
+
it 'deletes the foreign key' do
|
2156
|
+
expect(drug.person_id).to be_nil
|
2157
|
+
end
|
2122
2158
|
|
2123
|
-
|
2124
|
-
|
2159
|
+
it 'removes the document from the association' do
|
2160
|
+
expect(person.drugs).not_to include(drug)
|
2161
|
+
end
|
2125
2162
|
end
|
2163
|
+
end
|
2126
2164
|
|
2127
|
-
|
2128
|
-
|
2129
|
-
|
2165
|
+
context 'when dependent is delete' do
|
2166
|
+
context 'when the document is loaded' do
|
2167
|
+
let!(:post) { person.posts.create!(title: 'test') }
|
2168
|
+
let!(:deleted) { person.posts.send(method, post) }
|
2130
2169
|
|
2131
|
-
|
2132
|
-
|
2133
|
-
|
2134
|
-
end
|
2170
|
+
it 'returns the document' do
|
2171
|
+
expect(deleted).to eq(post)
|
2172
|
+
end
|
2135
2173
|
|
2136
|
-
|
2174
|
+
it 'deletes the document' do
|
2175
|
+
expect(post).to be_destroyed
|
2176
|
+
end
|
2137
2177
|
|
2138
|
-
|
2139
|
-
|
2178
|
+
it 'removes the document from the association' do
|
2179
|
+
expect(person.posts).not_to include(post)
|
2180
|
+
end
|
2140
2181
|
end
|
2141
2182
|
|
2142
|
-
|
2143
|
-
person.
|
2144
|
-
|
2183
|
+
context 'when the document is not loaded' do
|
2184
|
+
let!(:post) { Post.create!(title: 'foo', person_id: person.id) }
|
2185
|
+
let!(:deleted) { person.posts.send(method, post) }
|
2145
2186
|
|
2146
|
-
|
2147
|
-
|
2148
|
-
|
2187
|
+
it 'returns the document' do
|
2188
|
+
expect(deleted).to eq(post)
|
2189
|
+
end
|
2149
2190
|
|
2150
|
-
|
2151
|
-
|
2152
|
-
|
2191
|
+
it 'deletes the document' do
|
2192
|
+
expect(post).to be_destroyed
|
2193
|
+
end
|
2153
2194
|
|
2154
|
-
|
2155
|
-
|
2195
|
+
it 'removes the document from the association' do
|
2196
|
+
expect(person.posts).not_to include(post)
|
2197
|
+
end
|
2156
2198
|
end
|
2157
2199
|
end
|
2158
2200
|
end
|
2159
2201
|
|
2160
|
-
context
|
2161
|
-
|
2162
|
-
|
2163
|
-
|
2164
|
-
let!(:post) do
|
2165
|
-
person.posts.create!(title: "test")
|
2166
|
-
end
|
2167
|
-
|
2168
|
-
let!(:deleted) do
|
2169
|
-
person.posts.delete(post)
|
2170
|
-
end
|
2171
|
-
|
2172
|
-
it "returns the document" do
|
2173
|
-
expect(deleted).to eq(post)
|
2174
|
-
end
|
2175
|
-
|
2176
|
-
it "deletes the document" do
|
2177
|
-
expect(post).to be_destroyed
|
2178
|
-
end
|
2202
|
+
context 'when the document is not found' do
|
2203
|
+
let!(:post) { Post.create!(title: 'foo') }
|
2204
|
+
let!(:deleted) { person.posts.send(method, post) }
|
2179
2205
|
|
2180
|
-
|
2181
|
-
|
2182
|
-
end
|
2206
|
+
it 'returns nil' do
|
2207
|
+
expect(deleted).to be_nil
|
2183
2208
|
end
|
2184
2209
|
|
2185
|
-
|
2186
|
-
|
2187
|
-
let!(:post) do
|
2188
|
-
Post.create!(title: "foo", person_id: person.id)
|
2189
|
-
end
|
2190
|
-
|
2191
|
-
let!(:deleted) do
|
2192
|
-
person.posts.delete(post)
|
2193
|
-
end
|
2194
|
-
|
2195
|
-
it "returns the document" do
|
2196
|
-
expect(deleted).to eq(post)
|
2197
|
-
end
|
2198
|
-
|
2199
|
-
it "deletes the document" do
|
2200
|
-
expect(post).to be_destroyed
|
2201
|
-
end
|
2202
|
-
|
2203
|
-
it "removes the document from the association" do
|
2204
|
-
expect(person.posts).to_not include(post)
|
2205
|
-
end
|
2210
|
+
it 'does not delete the document' do
|
2211
|
+
expect(post).to be_persisted
|
2206
2212
|
end
|
2207
2213
|
end
|
2208
2214
|
end
|
2209
|
-
|
2210
|
-
context "when the document is not found" do
|
2211
|
-
|
2212
|
-
let!(:post) do
|
2213
|
-
Post.create!(title: "foo")
|
2214
|
-
end
|
2215
|
-
|
2216
|
-
let!(:deleted) do
|
2217
|
-
person.posts.delete(post)
|
2218
|
-
end
|
2219
|
-
|
2220
|
-
it "returns nil" do
|
2221
|
-
expect(deleted).to be_nil
|
2222
|
-
end
|
2223
|
-
|
2224
|
-
it "does not delete the document" do
|
2225
|
-
expect(post).to be_persisted
|
2226
|
-
end
|
2227
|
-
end
|
2228
2215
|
end
|
2229
2216
|
|
2230
2217
|
[ :delete_all, :destroy_all ].each do |method|
|
@@ -2239,10 +2226,8 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2239
2226
|
Person.create!(username: 'durran')
|
2240
2227
|
end
|
2241
2228
|
|
2242
|
-
|
2243
|
-
|
2244
|
-
person.posts.create!(title: "Test")
|
2245
|
-
end
|
2229
|
+
let!(:post1) { person.posts.create!(title: "Testing") }
|
2230
|
+
let!(:post2) { person.posts.create!(title: "Test") }
|
2246
2231
|
|
2247
2232
|
it "removes the correct posts" do
|
2248
2233
|
person.posts.send(method, { title: "Testing" })
|
@@ -2258,6 +2243,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2258
2243
|
it "returns the number of documents deleted" do
|
2259
2244
|
expect(person.posts.send(method, { title: "Testing" })).to eq(1)
|
2260
2245
|
end
|
2246
|
+
|
2247
|
+
it "sets the association locally" do
|
2248
|
+
person.posts.send(method, { title: "Testing" })
|
2249
|
+
expect(person.posts).to eq([post2])
|
2250
|
+
end
|
2261
2251
|
end
|
2262
2252
|
|
2263
2253
|
context "when conditions are not provided" do
|
@@ -2284,6 +2274,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2284
2274
|
it "returns the number of documents deleted" do
|
2285
2275
|
expect(person.posts.send(method)).to eq(2)
|
2286
2276
|
end
|
2277
|
+
|
2278
|
+
it "sets the association locally" do
|
2279
|
+
person.posts.send(method)
|
2280
|
+
expect(person.posts).to eq([])
|
2281
|
+
end
|
2287
2282
|
end
|
2288
2283
|
end
|
2289
2284
|
|
@@ -2295,10 +2290,8 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2295
2290
|
Movie.create!(title: "Bladerunner")
|
2296
2291
|
end
|
2297
2292
|
|
2298
|
-
|
2299
|
-
|
2300
|
-
movie.ratings.create!(value: 2)
|
2301
|
-
end
|
2293
|
+
let!(:rating1) { movie.ratings.create!(value: 1) }
|
2294
|
+
let!(:rating2) { movie.ratings.create!(value: 2) }
|
2302
2295
|
|
2303
2296
|
it "removes the correct ratings" do
|
2304
2297
|
movie.ratings.send(method, { value: 1 })
|
@@ -2313,6 +2306,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2313
2306
|
it "returns the number of documents deleted" do
|
2314
2307
|
expect(movie.ratings.send(method, { value: 1 })).to eq(1)
|
2315
2308
|
end
|
2309
|
+
|
2310
|
+
it "sets the association locally" do
|
2311
|
+
movie.ratings.send(method, { value: 1 })
|
2312
|
+
expect(movie.ratings).to eq([rating2])
|
2313
|
+
end
|
2316
2314
|
end
|
2317
2315
|
|
2318
2316
|
context "when conditions are not provided" do
|
@@ -2339,6 +2337,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2339
2337
|
it "returns the number of documents deleted" do
|
2340
2338
|
expect(movie.ratings.send(method)).to eq(2)
|
2341
2339
|
end
|
2340
|
+
|
2341
|
+
it "sets the association locally" do
|
2342
|
+
movie.ratings.send(method)
|
2343
|
+
expect(movie.ratings).to eq([])
|
2344
|
+
end
|
2342
2345
|
end
|
2343
2346
|
end
|
2344
2347
|
end
|
@@ -2392,6 +2395,42 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2392
2395
|
end
|
2393
2396
|
end
|
2394
2397
|
end
|
2398
|
+
|
2399
|
+
context 'when invoked with specifying conditions' do
|
2400
|
+
let(:other_person) { Person.create! }
|
2401
|
+
let(:post) { person.posts.first }
|
2402
|
+
|
2403
|
+
before do
|
2404
|
+
person.posts.create title: 'bumfuzzle'
|
2405
|
+
other_person.posts.create title: 'bumbershoot'
|
2406
|
+
end
|
2407
|
+
|
2408
|
+
context 'when the conditions match an associated record' do
|
2409
|
+
it 'detects its existence by condition' do
|
2410
|
+
expect(person.posts.exists?(title: 'bumfuzzle')).to be true
|
2411
|
+
expect(other_person.posts.exists?(title: 'bumbershoot')).to be true
|
2412
|
+
end
|
2413
|
+
|
2414
|
+
it 'detects its existence by id' do
|
2415
|
+
expect(person.posts.exists?(post._id)).to be true
|
2416
|
+
end
|
2417
|
+
|
2418
|
+
it 'returns false when given false' do
|
2419
|
+
expect(person.posts.exists?(false)).to be false
|
2420
|
+
end
|
2421
|
+
|
2422
|
+
it 'returns false when given nil' do
|
2423
|
+
expect(person.posts.exists?(nil)).to be false
|
2424
|
+
end
|
2425
|
+
end
|
2426
|
+
|
2427
|
+
context 'when the conditions match an unassociated record' do
|
2428
|
+
it 'does not detect its existence' do
|
2429
|
+
expect(person.posts.exists?(title: 'bumbershoot')).to be false
|
2430
|
+
expect(other_person.posts.exists?(title: 'bumfuzzle')).to be false
|
2431
|
+
end
|
2432
|
+
end
|
2433
|
+
end
|
2395
2434
|
end
|
2396
2435
|
|
2397
2436
|
context "when documents exist in application but not in database" do
|
@@ -2462,6 +2501,12 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2462
2501
|
end
|
2463
2502
|
end
|
2464
2503
|
end
|
2504
|
+
|
2505
|
+
context 'when invoked with specifying conditions' do
|
2506
|
+
it 'returns false' do
|
2507
|
+
expect(person.posts.exists?(title: 'hullaballoo')).to be false
|
2508
|
+
end
|
2509
|
+
end
|
2465
2510
|
end
|
2466
2511
|
end
|
2467
2512
|
|
@@ -2524,39 +2569,29 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2524
2569
|
it "raises an error" do
|
2525
2570
|
expect {
|
2526
2571
|
person.posts.find(post.id)
|
2527
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2572
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
2528
2573
|
end
|
2529
2574
|
end
|
2530
2575
|
|
2531
2576
|
context "when the id does not match" do
|
2532
2577
|
|
2533
2578
|
context "when config set to raise error" do
|
2534
|
-
|
2535
|
-
before do
|
2536
|
-
Mongoid.raise_not_found_error = true
|
2537
|
-
end
|
2579
|
+
config_override :raise_not_found_error, true
|
2538
2580
|
|
2539
2581
|
it "raises an error" do
|
2540
2582
|
expect {
|
2541
2583
|
person.posts.find(BSON::ObjectId.new)
|
2542
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2584
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
2543
2585
|
end
|
2544
2586
|
end
|
2545
2587
|
|
2546
2588
|
context "when config set not to raise error" do
|
2589
|
+
config_override :raise_not_found_error, false
|
2547
2590
|
|
2548
2591
|
let(:post) do
|
2549
2592
|
person.posts.find(BSON::ObjectId.new)
|
2550
2593
|
end
|
2551
2594
|
|
2552
|
-
before do
|
2553
|
-
Mongoid.raise_not_found_error = false
|
2554
|
-
end
|
2555
|
-
|
2556
|
-
after do
|
2557
|
-
Mongoid.raise_not_found_error = true
|
2558
|
-
end
|
2559
|
-
|
2560
2595
|
it "returns nil" do
|
2561
2596
|
expect(post).to be_nil
|
2562
2597
|
end
|
@@ -2580,32 +2615,22 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2580
2615
|
context "when the ids do not match" do
|
2581
2616
|
|
2582
2617
|
context "when config set to raise error" do
|
2583
|
-
|
2584
|
-
before do
|
2585
|
-
Mongoid.raise_not_found_error = true
|
2586
|
-
end
|
2618
|
+
config_override :raise_not_found_error, true
|
2587
2619
|
|
2588
2620
|
it "raises an error" do
|
2589
2621
|
expect {
|
2590
2622
|
person.posts.find([ BSON::ObjectId.new ])
|
2591
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2623
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
2592
2624
|
end
|
2593
2625
|
end
|
2594
2626
|
|
2595
2627
|
context "when config set not to raise error" do
|
2628
|
+
config_override :raise_not_found_error, false
|
2596
2629
|
|
2597
2630
|
let(:posts) do
|
2598
2631
|
person.posts.find([ BSON::ObjectId.new ])
|
2599
2632
|
end
|
2600
2633
|
|
2601
|
-
before do
|
2602
|
-
Mongoid.raise_not_found_error = false
|
2603
|
-
end
|
2604
|
-
|
2605
|
-
after do
|
2606
|
-
Mongoid.raise_not_found_error = true
|
2607
|
-
end
|
2608
|
-
|
2609
2634
|
it "returns an empty array" do
|
2610
2635
|
expect(posts).to be_empty
|
2611
2636
|
end
|
@@ -2644,32 +2669,22 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2644
2669
|
context "when the id does not match" do
|
2645
2670
|
|
2646
2671
|
context "when config set to raise error" do
|
2647
|
-
|
2648
|
-
before do
|
2649
|
-
Mongoid.raise_not_found_error = true
|
2650
|
-
end
|
2672
|
+
config_override :raise_not_found_error, true
|
2651
2673
|
|
2652
2674
|
it "raises an error" do
|
2653
2675
|
expect {
|
2654
2676
|
movie.ratings.find(BSON::ObjectId.new)
|
2655
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2677
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Rating with id\(s\)/)
|
2656
2678
|
end
|
2657
2679
|
end
|
2658
2680
|
|
2659
2681
|
context "when config set not to raise error" do
|
2682
|
+
config_override :raise_not_found_error, false
|
2660
2683
|
|
2661
2684
|
let(:rating) do
|
2662
2685
|
movie.ratings.find(BSON::ObjectId.new)
|
2663
2686
|
end
|
2664
2687
|
|
2665
|
-
before do
|
2666
|
-
Mongoid.raise_not_found_error = false
|
2667
|
-
end
|
2668
|
-
|
2669
|
-
after do
|
2670
|
-
Mongoid.raise_not_found_error = true
|
2671
|
-
end
|
2672
|
-
|
2673
2688
|
it "returns nil" do
|
2674
2689
|
expect(rating).to be_nil
|
2675
2690
|
end
|
@@ -2701,32 +2716,22 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2701
2716
|
context "when the ids do not match" do
|
2702
2717
|
|
2703
2718
|
context "when config set to raise error" do
|
2704
|
-
|
2705
|
-
before do
|
2706
|
-
Mongoid.raise_not_found_error = true
|
2707
|
-
end
|
2719
|
+
config_override :raise_not_found_error, true
|
2708
2720
|
|
2709
2721
|
it "raises an error" do
|
2710
2722
|
expect {
|
2711
2723
|
movie.ratings.find([ BSON::ObjectId.new ])
|
2712
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2724
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Rating with id\(s\)/)
|
2713
2725
|
end
|
2714
2726
|
end
|
2715
2727
|
|
2716
2728
|
context "when config set not to raise error" do
|
2729
|
+
config_override :raise_not_found_error, false
|
2717
2730
|
|
2718
2731
|
let(:ratings) do
|
2719
2732
|
movie.ratings.find([ BSON::ObjectId.new ])
|
2720
2733
|
end
|
2721
2734
|
|
2722
|
-
before do
|
2723
|
-
Mongoid.raise_not_found_error = false
|
2724
|
-
end
|
2725
|
-
|
2726
|
-
after do
|
2727
|
-
Mongoid.raise_not_found_error = true
|
2728
|
-
end
|
2729
|
-
|
2730
2735
|
it "returns an empty array" do
|
2731
2736
|
expect(ratings).to be_empty
|
2732
2737
|
end
|
@@ -4090,6 +4095,39 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
4090
4095
|
end
|
4091
4096
|
end
|
4092
4097
|
|
4098
|
+
context "when removing a document with counter_cache on" do
|
4099
|
+
let(:post) { Post.create! }
|
4100
|
+
let(:person1) { Person.create! }
|
4101
|
+
let(:person2) { Person.create! }
|
4102
|
+
|
4103
|
+
before do
|
4104
|
+
post.update_attribute(:person, person1)
|
4105
|
+
expect(person1.posts_count).to eq 1
|
4106
|
+
|
4107
|
+
person2
|
4108
|
+
post.update_attribute(:person, person2)
|
4109
|
+
person1.reload
|
4110
|
+
expect(person1.posts_count).to eq 0
|
4111
|
+
expect(person2.posts_count).to eq 1
|
4112
|
+
|
4113
|
+
post.update_attribute(:person, nil)
|
4114
|
+
person1.reload
|
4115
|
+
person2.reload
|
4116
|
+
end
|
4117
|
+
|
4118
|
+
it "the count field is updated" do
|
4119
|
+
expect(person2.posts_count).to eq 0
|
4120
|
+
end
|
4121
|
+
end
|
4122
|
+
|
4123
|
+
context "when there is a foreign key in the aliased associations" do
|
4124
|
+
it "has the correct aliases" do
|
4125
|
+
expect(Band.aliased_associations["artist_ids"]).to eq("artists")
|
4126
|
+
expect(Artist.aliased_associations.key?("band_id")).to be false
|
4127
|
+
expect(Artist.aliased_fields["band"]).to eq("band_id")
|
4128
|
+
end
|
4129
|
+
end
|
4130
|
+
|
4093
4131
|
context "when executing concat on foreign key array from the db" do
|
4094
4132
|
config_override :legacy_attributes, false
|
4095
4133
|
|
@@ -42,6 +42,7 @@ end
|
|
42
42
|
|
43
43
|
class HmmSchool
|
44
44
|
include Mongoid::Document
|
45
|
+
include Mongoid::Timestamps
|
45
46
|
|
46
47
|
has_many :students, class_name: 'HmmStudent'
|
47
48
|
|
@@ -51,8 +52,9 @@ end
|
|
51
52
|
|
52
53
|
class HmmStudent
|
53
54
|
include Mongoid::Document
|
55
|
+
include Mongoid::Timestamps
|
54
56
|
|
55
|
-
belongs_to :school, class_name: 'HmmSchool'
|
57
|
+
belongs_to :school, class_name: 'HmmSchool', touch: true
|
56
58
|
|
57
59
|
field :name, type: String
|
58
60
|
field :grade, type: Integer, default: 3
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
|
+
require_relative './has_many_models'
|
4
5
|
|
5
6
|
describe Mongoid::Association::Referenced::HasMany do
|
6
7
|
|
@@ -1245,4 +1246,28 @@ describe Mongoid::Association::Referenced::HasMany do
|
|
1245
1246
|
expect(association.create_relation(owner, target)).to be_a(Array)
|
1246
1247
|
end
|
1247
1248
|
end
|
1249
|
+
|
1250
|
+
context "when adding an object to the association" do
|
1251
|
+
let!(:start_time) { Timecop.freeze(Time.at(Time.now.to_i)) }
|
1252
|
+
|
1253
|
+
let(:update_time) do
|
1254
|
+
Timecop.freeze(Time.at(Time.now.to_i) + 2)
|
1255
|
+
end
|
1256
|
+
|
1257
|
+
after do
|
1258
|
+
Timecop.return
|
1259
|
+
end
|
1260
|
+
|
1261
|
+
let!(:school) { HmmSchool.create! }
|
1262
|
+
let!(:student) { HmmStudent.create! }
|
1263
|
+
|
1264
|
+
before do
|
1265
|
+
update_time
|
1266
|
+
student.update(school: school)
|
1267
|
+
end
|
1268
|
+
|
1269
|
+
it "updates the updated_at" do
|
1270
|
+
expect(student.updated_at).to eq(update_time)
|
1271
|
+
end
|
1272
|
+
end
|
1248
1273
|
end
|
@@ -91,7 +91,7 @@ describe Mongoid::Association::Referenced::HasOne::Buildable do
|
|
91
91
|
expect(document).to eq(object)
|
92
92
|
end
|
93
93
|
|
94
|
-
context 'when the object is already
|
94
|
+
context 'when the object is already associated with another object' do
|
95
95
|
|
96
96
|
let(:original_person) do
|
97
97
|
Person.new
|
@@ -105,7 +105,7 @@ describe Mongoid::Association::Referenced::HasOne::Buildable do
|
|
105
105
|
association.build(Person.new, object)
|
106
106
|
end
|
107
107
|
|
108
|
-
it 'clears the object of its previous
|
108
|
+
it 'clears the object of its previous association' do
|
109
109
|
expect(original_person.account).to be_nil
|
110
110
|
end
|
111
111
|
|