mongoid 7.5.4 → 8.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +3 -3
- data/README.md +6 -6
- data/lib/config/locales/en.yml +92 -43
- data/lib/mongoid/association/accessors.rb +40 -11
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +5 -3
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +34 -11
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +69 -45
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +8 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +45 -7
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +15 -4
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
- data/lib/mongoid/association/referenced/has_many/proxy.rb +29 -19
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +4 -4
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic.rb +7 -0
- data/lib/mongoid/attributes/dynamic.rb +4 -4
- data/lib/mongoid/attributes/nested.rb +6 -6
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +3 -3
- data/lib/mongoid/attributes.rb +51 -42
- data/lib/mongoid/changeable.rb +147 -14
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/storage_options.rb +2 -5
- data/lib/mongoid/clients/validators/storage.rb +3 -15
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +2 -0
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/options.rb +3 -0
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config/validators.rb +1 -0
- data/lib/mongoid/config.rb +153 -18
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +285 -58
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +540 -346
- data/lib/mongoid/contextual/none.rb +193 -20
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +14 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +8 -5
- data/lib/mongoid/criteria/includable.rb +27 -22
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -9
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +4 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
- data/lib/mongoid/criteria/queryable/optional.rb +11 -17
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +47 -38
- data/lib/mongoid/criteria/queryable/selector.rb +92 -7
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +20 -40
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +127 -35
- data/lib/mongoid/equality.rb +8 -8
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +6 -3
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +37 -8
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +10 -8
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +29 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +55 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +19 -4
- data/lib/mongoid/fields/standard.rb +17 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +129 -20
- data/lib/mongoid/findable.rb +54 -24
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +188 -16
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher/eq_impl.rb +1 -1
- data/lib/mongoid/matcher/type.rb +1 -1
- data/lib/mongoid/matcher.rb +33 -13
- data/lib/mongoid/persistable/creatable.rb +19 -9
- data/lib/mongoid/persistable/deletable.rb +2 -2
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +14 -2
- data/lib/mongoid/persistable/unsettable.rb +2 -2
- data/lib/mongoid/persistable/updatable.rb +69 -12
- data/lib/mongoid/persistable/upsertable.rb +21 -2
- data/lib/mongoid/persistable.rb +6 -3
- data/lib/mongoid/persistence_context.rb +6 -4
- data/lib/mongoid/query_cache.rb +13 -261
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +15 -13
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/stateful.rb +57 -10
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +20 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +42 -12
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +5 -4
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +5 -7
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +9 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +19 -4
- data/lib/mongoid.rb +17 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +10 -14
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +132 -1
- data/spec/integration/callbacks_spec.rb +381 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +118 -80
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -32
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +255 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -177
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +15 -1
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +510 -33
- data/spec/mongoid/changeable_spec.rb +429 -37
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +149 -15
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config_spec.rb +214 -31
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +850 -88
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +2309 -1127
- data/spec/mongoid/contextual/none_spec.rb +60 -21
- data/spec/mongoid/copyable_spec.rb +453 -11
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +1 -5
- data/spec/mongoid/criteria_spec.rb +469 -1205
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +639 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +80 -37
- data/spec/mongoid/fields_spec.rb +500 -84
- data/spec/mongoid/findable_spec.rb +450 -58
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +55 -30
- data/spec/mongoid/interceptable_spec.rb +824 -22
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +28 -8
- data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
- data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
- data/spec/mongoid/persistable/logical_spec.rb +37 -0
- data/spec/mongoid/persistable/poppable_spec.rb +36 -0
- data/spec/mongoid/persistable/pullable_spec.rb +72 -0
- data/spec/mongoid/persistable/pushable_spec.rb +72 -0
- data/spec/mongoid/persistable/renamable_spec.rb +36 -0
- data/spec/mongoid/persistable/savable_spec.rb +96 -0
- data/spec/mongoid/persistable/settable_spec.rb +37 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
- data/spec/mongoid/persistable/updatable_spec.rb +20 -28
- data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
- data/spec/mongoid/persistence_context_spec.rb +31 -57
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +56 -215
- data/spec/mongoid/reloadable_spec.rb +83 -6
- data/spec/mongoid/scopable_spec.rb +91 -1
- data/spec/mongoid/serializable_spec.rb +9 -30
- data/spec/mongoid/shardable_spec.rb +4 -4
- data/spec/mongoid/stateful_spec.rb +150 -8
- data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
- data/spec/mongoid/tasks/database_spec.rb +127 -0
- data/spec/mongoid/timestamps_spec.rb +392 -4
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +390 -2
- data/spec/mongoid/touchable_spec_models.rb +14 -8
- data/spec/mongoid/traversable_spec.rb +13 -35
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +34 -16
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/docker_runner.rb +8 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +2 -2
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +36 -40
- data/spec/shared/shlib/server.sh +28 -4
- data/spec/shared/shlib/set_env.sh +4 -4
- data/spec/spec_helper.rb +5 -0
- data/spec/support/constraints.rb +24 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +78 -0
- data/spec/support/models/artist.rb +0 -1
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +4 -0
- data/spec/support/models/book.rb +1 -0
- data/spec/support/models/building.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/product.rb +1 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +0 -0
- metadata +100 -22
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -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
|
@@ -2524,39 +2527,29 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2524
2527
|
it "raises an error" do
|
2525
2528
|
expect {
|
2526
2529
|
person.posts.find(post.id)
|
2527
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2530
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
2528
2531
|
end
|
2529
2532
|
end
|
2530
2533
|
|
2531
2534
|
context "when the id does not match" do
|
2532
2535
|
|
2533
2536
|
context "when config set to raise error" do
|
2534
|
-
|
2535
|
-
before do
|
2536
|
-
Mongoid.raise_not_found_error = true
|
2537
|
-
end
|
2537
|
+
config_override :raise_not_found_error, true
|
2538
2538
|
|
2539
2539
|
it "raises an error" do
|
2540
2540
|
expect {
|
2541
2541
|
person.posts.find(BSON::ObjectId.new)
|
2542
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2542
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
2543
2543
|
end
|
2544
2544
|
end
|
2545
2545
|
|
2546
2546
|
context "when config set not to raise error" do
|
2547
|
+
config_override :raise_not_found_error, false
|
2547
2548
|
|
2548
2549
|
let(:post) do
|
2549
2550
|
person.posts.find(BSON::ObjectId.new)
|
2550
2551
|
end
|
2551
2552
|
|
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
2553
|
it "returns nil" do
|
2561
2554
|
expect(post).to be_nil
|
2562
2555
|
end
|
@@ -2580,32 +2573,22 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2580
2573
|
context "when the ids do not match" do
|
2581
2574
|
|
2582
2575
|
context "when config set to raise error" do
|
2583
|
-
|
2584
|
-
before do
|
2585
|
-
Mongoid.raise_not_found_error = true
|
2586
|
-
end
|
2576
|
+
config_override :raise_not_found_error, true
|
2587
2577
|
|
2588
2578
|
it "raises an error" do
|
2589
2579
|
expect {
|
2590
2580
|
person.posts.find([ BSON::ObjectId.new ])
|
2591
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2581
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
2592
2582
|
end
|
2593
2583
|
end
|
2594
2584
|
|
2595
2585
|
context "when config set not to raise error" do
|
2586
|
+
config_override :raise_not_found_error, false
|
2596
2587
|
|
2597
2588
|
let(:posts) do
|
2598
2589
|
person.posts.find([ BSON::ObjectId.new ])
|
2599
2590
|
end
|
2600
2591
|
|
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
2592
|
it "returns an empty array" do
|
2610
2593
|
expect(posts).to be_empty
|
2611
2594
|
end
|
@@ -2644,32 +2627,22 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2644
2627
|
context "when the id does not match" do
|
2645
2628
|
|
2646
2629
|
context "when config set to raise error" do
|
2647
|
-
|
2648
|
-
before do
|
2649
|
-
Mongoid.raise_not_found_error = true
|
2650
|
-
end
|
2630
|
+
config_override :raise_not_found_error, true
|
2651
2631
|
|
2652
2632
|
it "raises an error" do
|
2653
2633
|
expect {
|
2654
2634
|
movie.ratings.find(BSON::ObjectId.new)
|
2655
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2635
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Rating with id\(s\)/)
|
2656
2636
|
end
|
2657
2637
|
end
|
2658
2638
|
|
2659
2639
|
context "when config set not to raise error" do
|
2640
|
+
config_override :raise_not_found_error, false
|
2660
2641
|
|
2661
2642
|
let(:rating) do
|
2662
2643
|
movie.ratings.find(BSON::ObjectId.new)
|
2663
2644
|
end
|
2664
2645
|
|
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
2646
|
it "returns nil" do
|
2674
2647
|
expect(rating).to be_nil
|
2675
2648
|
end
|
@@ -2701,32 +2674,22 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2701
2674
|
context "when the ids do not match" do
|
2702
2675
|
|
2703
2676
|
context "when config set to raise error" do
|
2704
|
-
|
2705
|
-
before do
|
2706
|
-
Mongoid.raise_not_found_error = true
|
2707
|
-
end
|
2677
|
+
config_override :raise_not_found_error, true
|
2708
2678
|
|
2709
2679
|
it "raises an error" do
|
2710
2680
|
expect {
|
2711
2681
|
movie.ratings.find([ BSON::ObjectId.new ])
|
2712
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2682
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Rating with id\(s\)/)
|
2713
2683
|
end
|
2714
2684
|
end
|
2715
2685
|
|
2716
2686
|
context "when config set not to raise error" do
|
2687
|
+
config_override :raise_not_found_error, false
|
2717
2688
|
|
2718
2689
|
let(:ratings) do
|
2719
2690
|
movie.ratings.find([ BSON::ObjectId.new ])
|
2720
2691
|
end
|
2721
2692
|
|
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
2693
|
it "returns an empty array" do
|
2731
2694
|
expect(ratings).to be_empty
|
2732
2695
|
end
|
@@ -4090,6 +4053,39 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
4090
4053
|
end
|
4091
4054
|
end
|
4092
4055
|
|
4056
|
+
context "when removing a document with counter_cache on" do
|
4057
|
+
let(:post) { Post.create! }
|
4058
|
+
let(:person1) { Person.create! }
|
4059
|
+
let(:person2) { Person.create! }
|
4060
|
+
|
4061
|
+
before do
|
4062
|
+
post.update_attribute(:person, person1)
|
4063
|
+
expect(person1.posts_count).to eq 1
|
4064
|
+
|
4065
|
+
person2
|
4066
|
+
post.update_attribute(:person, person2)
|
4067
|
+
person1.reload
|
4068
|
+
expect(person1.posts_count).to eq 0
|
4069
|
+
expect(person2.posts_count).to eq 1
|
4070
|
+
|
4071
|
+
post.update_attribute(:person, nil)
|
4072
|
+
person1.reload
|
4073
|
+
person2.reload
|
4074
|
+
end
|
4075
|
+
|
4076
|
+
it "the count field is updated" do
|
4077
|
+
expect(person2.posts_count).to eq 0
|
4078
|
+
end
|
4079
|
+
end
|
4080
|
+
|
4081
|
+
context "when there is a foreign key in the aliased associations" do
|
4082
|
+
it "has the correct aliases" do
|
4083
|
+
expect(Band.aliased_associations["artist_ids"]).to eq("artists")
|
4084
|
+
expect(Artist.aliased_associations.key?("band_id")).to be false
|
4085
|
+
expect(Artist.aliased_fields["band"]).to eq("band_id")
|
4086
|
+
end
|
4087
|
+
end
|
4088
|
+
|
4093
4089
|
context "when executing concat on foreign key array from the db" do
|
4094
4090
|
config_override :legacy_attributes, false
|
4095
4091
|
|
@@ -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
|
|