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
@@ -1,17 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
|
-
require_relative "../has_and_belongs_to_many_models
|
4
|
+
require_relative "../has_and_belongs_to_many_models"
|
5
5
|
|
6
6
|
describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
7
|
+
config_override :raise_not_found_error, true
|
7
8
|
|
8
9
|
around(:each) do |example|
|
9
|
-
original_raise_not_found_error = Mongoid.raise_not_found_error
|
10
10
|
original_preferences_association = Person.relations["preferences"]
|
11
|
-
Mongoid.raise_not_found_error = true
|
12
11
|
Person.has_and_belongs_to_many :preferences, autosave: true
|
13
12
|
example.run
|
14
|
-
Mongoid.raise_not_found_error = original_raise_not_found_error
|
15
13
|
Person.relations["preferences"] = original_preferences_association
|
16
14
|
end
|
17
15
|
|
@@ -2087,283 +2085,229 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
2087
2085
|
end
|
2088
2086
|
end
|
2089
2087
|
|
2090
|
-
|
2088
|
+
%i[ delete delete_one ].each do |method|
|
2089
|
+
describe "\##{method}" do
|
2090
|
+
let(:person) { Person.create! }
|
2091
|
+
let(:preference_one) { Preference.create!(name: "Testing") }
|
2092
|
+
let(:preference_two) { Preference.create!(name: "Test") }
|
2091
2093
|
|
2092
|
-
|
2093
|
-
|
2094
|
-
end
|
2095
|
-
|
2096
|
-
let(:preference_one) do
|
2097
|
-
Preference.create!(name: "Testing")
|
2098
|
-
end
|
2099
|
-
|
2100
|
-
let(:preference_two) do
|
2101
|
-
Preference.create!(name: "Test")
|
2102
|
-
end
|
2103
|
-
|
2104
|
-
before do
|
2105
|
-
person.preferences << [ preference_one, preference_two ]
|
2106
|
-
end
|
2107
|
-
|
2108
|
-
context "when the document exists" do
|
2109
|
-
|
2110
|
-
let!(:deleted) do
|
2111
|
-
person.preferences.delete(preference_one)
|
2112
|
-
end
|
2113
|
-
|
2114
|
-
it "removes the document from the relation" do
|
2115
|
-
expect(person.preferences).to eq([ preference_two ])
|
2116
|
-
end
|
2117
|
-
|
2118
|
-
it "returns the document" do
|
2119
|
-
expect(deleted).to eq(preference_one)
|
2120
|
-
end
|
2121
|
-
|
2122
|
-
it "removes the document key from the foreign key" do
|
2123
|
-
expect(person.preference_ids).to eq([ preference_two.id ])
|
2124
|
-
end
|
2125
|
-
|
2126
|
-
it "removes the inverse reference" do
|
2127
|
-
expect(deleted.reload.people).to be_empty
|
2128
|
-
end
|
2129
|
-
|
2130
|
-
it "removes the base id from the inverse keys" do
|
2131
|
-
expect(deleted.reload.person_ids).to be_empty
|
2094
|
+
before do
|
2095
|
+
person.preferences << [ preference_one, preference_two ]
|
2132
2096
|
end
|
2133
2097
|
|
2134
|
-
context
|
2135
|
-
|
2136
|
-
|
2137
|
-
person.reload
|
2138
|
-
preference_one.reload
|
2139
|
-
preference_two.reload
|
2098
|
+
context 'when the document exists' do
|
2099
|
+
let!(:deleted) do
|
2100
|
+
person.preferences.send(method, preference_one)
|
2140
2101
|
end
|
2141
2102
|
|
2142
|
-
it
|
2103
|
+
it 'removes the document from the relation' do
|
2143
2104
|
expect(person.preferences).to eq([ preference_two ])
|
2144
2105
|
end
|
2145
2106
|
|
2146
|
-
it
|
2147
|
-
expect(
|
2107
|
+
it 'returns the document' do
|
2108
|
+
expect(deleted).to eq(preference_one)
|
2148
2109
|
end
|
2149
|
-
end
|
2150
|
-
end
|
2151
|
-
|
2152
|
-
context "when the document does not exist" do
|
2153
|
-
|
2154
|
-
let!(:deleted) do
|
2155
|
-
person.preferences.delete(Preference.new)
|
2156
|
-
end
|
2157
|
-
|
2158
|
-
it "returns nil" do
|
2159
|
-
expect(deleted).to be_nil
|
2160
|
-
end
|
2161
|
-
|
2162
|
-
it "does not modify the relation" do
|
2163
|
-
expect(person.preferences).to eq([ preference_one, preference_two ])
|
2164
|
-
end
|
2165
|
-
|
2166
|
-
it "does not modify the keys" do
|
2167
|
-
expect(person.preference_ids).to eq([ preference_one.id, preference_two.id ])
|
2168
|
-
end
|
2169
|
-
end
|
2170
|
-
|
2171
|
-
context "when :dependent => :nullify is set" do
|
2172
|
-
|
2173
|
-
context "when :inverse_of is set" do
|
2174
2110
|
|
2175
|
-
|
2176
|
-
|
2111
|
+
it 'removes the document key from the foreign key' do
|
2112
|
+
expect(person.preference_ids).to eq([ preference_two.id ])
|
2177
2113
|
end
|
2178
2114
|
|
2179
|
-
|
2180
|
-
|
2115
|
+
it 'removes the inverse reference' do
|
2116
|
+
expect(deleted.reload.people).to be_empty
|
2181
2117
|
end
|
2182
2118
|
|
2183
|
-
it
|
2184
|
-
expect(
|
2119
|
+
it 'removes the base id from the inverse keys' do
|
2120
|
+
expect(deleted.reload.person_ids).to be_empty
|
2185
2121
|
end
|
2186
|
-
end
|
2187
|
-
end
|
2188
2122
|
|
2189
|
-
|
2190
|
-
|
2191
|
-
|
2192
|
-
|
2193
|
-
|
2123
|
+
context 'and person and preferences are reloaded' do
|
2124
|
+
before do
|
2125
|
+
person.reload
|
2126
|
+
preference_one.reload
|
2127
|
+
preference_two.reload
|
2128
|
+
end
|
2194
2129
|
|
2195
|
-
|
2196
|
-
|
2197
|
-
|
2130
|
+
it 'nullifies the deleted preference' do
|
2131
|
+
expect(person.preferences).to eq([ preference_two ])
|
2132
|
+
end
|
2198
2133
|
|
2199
|
-
|
2200
|
-
|
2134
|
+
it 'retains the ids for one preference' do
|
2135
|
+
expect(person.preference_ids).to eq([ preference_two.id ])
|
2136
|
+
end
|
2137
|
+
end
|
2201
2138
|
end
|
2202
2139
|
|
2203
|
-
context
|
2204
|
-
|
2140
|
+
context 'when the document does not exist' do
|
2205
2141
|
let!(:deleted) do
|
2206
|
-
|
2207
|
-
end
|
2208
|
-
|
2209
|
-
it "deletes the document from the relation" do
|
2210
|
-
expect(tag_one.related).to be_empty
|
2142
|
+
person.preferences.send(method, Preference.new)
|
2211
2143
|
end
|
2212
2144
|
|
2213
|
-
it
|
2214
|
-
expect(
|
2145
|
+
it 'returns nil' do
|
2146
|
+
expect(deleted).to be_nil
|
2215
2147
|
end
|
2216
2148
|
|
2217
|
-
it
|
2218
|
-
expect(
|
2149
|
+
it 'does not modify the relation' do
|
2150
|
+
expect(person.preferences).to eq([ preference_one, preference_two ])
|
2219
2151
|
end
|
2220
2152
|
|
2221
|
-
it
|
2222
|
-
expect(
|
2153
|
+
it 'does not modify the keys' do
|
2154
|
+
expect(person.preference_ids).to eq([ preference_one.id, preference_two.id ])
|
2223
2155
|
end
|
2224
2156
|
end
|
2225
2157
|
|
2226
|
-
context
|
2158
|
+
context 'when :dependent => :nullify is set' do
|
2159
|
+
context 'when :inverse_of is set' do
|
2160
|
+
let(:event) { Event.create! }
|
2227
2161
|
|
2228
|
-
|
2229
|
-
|
2230
|
-
let(:reloaded) do
|
2231
|
-
tag_one.reload
|
2232
|
-
end
|
2233
|
-
|
2234
|
-
let!(:deleted) do
|
2235
|
-
reloaded.related.delete(tag_two)
|
2236
|
-
end
|
2237
|
-
|
2238
|
-
it "deletes the document from the relation" do
|
2239
|
-
expect(reloaded.related).to be_empty
|
2162
|
+
before do
|
2163
|
+
person.administrated_events << [ event ]
|
2240
2164
|
end
|
2241
2165
|
|
2242
|
-
it
|
2243
|
-
expect(
|
2166
|
+
it 'deletes the document' do
|
2167
|
+
expect(event.delete).to be true
|
2244
2168
|
end
|
2169
|
+
end
|
2170
|
+
end
|
2245
2171
|
|
2246
|
-
|
2247
|
-
|
2248
|
-
|
2172
|
+
context 'when the relationships are self referencing' do
|
2173
|
+
let(:tag_one) { Tag.create!(text: "one") }
|
2174
|
+
let(:tag_two) { Tag.create!(text: "two") }
|
2249
2175
|
|
2250
|
-
|
2251
|
-
|
2252
|
-
end
|
2176
|
+
before do
|
2177
|
+
tag_one.related << tag_two
|
2253
2178
|
end
|
2254
2179
|
|
2255
|
-
context
|
2256
|
-
|
2257
|
-
let(:reloaded) do
|
2258
|
-
tag_two.reload
|
2259
|
-
end
|
2180
|
+
context 'when deleting without reloading' do
|
2181
|
+
let!(:deleted) { tag_one.related.send(method, tag_two) }
|
2260
2182
|
|
2261
|
-
|
2262
|
-
|
2183
|
+
it 'deletes the document from the relation' do
|
2184
|
+
expect(tag_one.related).to be_empty
|
2263
2185
|
end
|
2264
2186
|
|
2265
|
-
it
|
2266
|
-
expect(
|
2187
|
+
it 'deletes the foreign key from the relation' do
|
2188
|
+
expect(tag_one.related_ids).to be_empty
|
2267
2189
|
end
|
2268
2190
|
|
2269
|
-
it
|
2270
|
-
expect(
|
2191
|
+
it 'removes the reference from the inverse' do
|
2192
|
+
expect(deleted.related).to be_empty
|
2271
2193
|
end
|
2272
2194
|
|
2273
|
-
it
|
2195
|
+
it 'removes the foreign keys from the inverse' do
|
2274
2196
|
expect(deleted.related_ids).to be_empty
|
2275
2197
|
end
|
2276
2198
|
end
|
2277
|
-
end
|
2278
|
-
end
|
2279
2199
|
|
2280
|
-
|
2200
|
+
context 'when deleting with reloading' do
|
2201
|
+
context "when deleting from the front side" do
|
2202
|
+
let(:reloaded) { tag_one.reload }
|
2203
|
+
let!(:deleted) { reloaded.related.send(method, tag_two) }
|
2281
2204
|
|
2282
|
-
|
2283
|
-
|
2284
|
-
|
2205
|
+
it 'deletes the document from the relation' do
|
2206
|
+
expect(reloaded.related).to be_empty
|
2207
|
+
end
|
2285
2208
|
|
2286
|
-
|
2287
|
-
|
2288
|
-
|
2209
|
+
it 'deletes the foreign key from the relation' do
|
2210
|
+
expect(reloaded.related_ids).to be_empty
|
2211
|
+
end
|
2289
2212
|
|
2290
|
-
|
2291
|
-
|
2292
|
-
|
2213
|
+
it 'removes the reference from the inverse' do
|
2214
|
+
expect(deleted.related).to be_empty
|
2215
|
+
end
|
2293
2216
|
|
2294
|
-
|
2217
|
+
it 'removes the foreign keys from the inverse' do
|
2218
|
+
expect(deleted.related_ids).to be_empty
|
2219
|
+
end
|
2220
|
+
end
|
2295
2221
|
|
2296
|
-
|
2222
|
+
context 'when deleting from the inverse side' do
|
2223
|
+
let(:reloaded) { tag_two.reload }
|
2224
|
+
let!(:deleted) { reloaded.related.send(method, tag_one) }
|
2297
2225
|
|
2298
|
-
|
2299
|
-
|
2300
|
-
|
2226
|
+
it 'deletes the document from the relation' do
|
2227
|
+
expect(reloaded.related).to be_empty
|
2228
|
+
end
|
2301
2229
|
|
2302
|
-
|
2303
|
-
|
2304
|
-
|
2230
|
+
it 'deletes the foreign key from the relation' do
|
2231
|
+
expect(reloaded.related_ids).to be_empty
|
2232
|
+
end
|
2305
2233
|
|
2306
|
-
|
2307
|
-
|
2234
|
+
it 'removes the foreign keys from the inverse' do
|
2235
|
+
expect(deleted.related_ids).to be_empty
|
2236
|
+
end
|
2308
2237
|
end
|
2309
2238
|
end
|
2239
|
+
end
|
2310
2240
|
|
2311
|
-
|
2241
|
+
context 'when the association has callbacks' do
|
2242
|
+
let(:post) { Post.new }
|
2243
|
+
let(:tag) { Tag.new }
|
2312
2244
|
|
2313
|
-
|
2314
|
-
|
2315
|
-
begin; post.tags.delete(tag); rescue; end
|
2316
|
-
end
|
2317
|
-
|
2318
|
-
it "does not remove the document from the relation" do
|
2319
|
-
expect(post.tags).to eq([ tag ])
|
2320
|
-
end
|
2245
|
+
before do
|
2246
|
+
post.tags << tag
|
2321
2247
|
end
|
2322
|
-
end
|
2323
2248
|
|
2324
|
-
|
2249
|
+
context 'when the callback is a before_remove' do
|
2250
|
+
context 'when there are no errors' do
|
2251
|
+
before do
|
2252
|
+
post.tags.send(method, tag)
|
2253
|
+
end
|
2325
2254
|
|
2326
|
-
|
2255
|
+
it 'executes the callback' do
|
2256
|
+
expect(post.before_remove_called).to be true
|
2257
|
+
end
|
2327
2258
|
|
2328
|
-
|
2329
|
-
|
2259
|
+
it 'removes the document from the relation' do
|
2260
|
+
expect(post.tags).to be_empty
|
2261
|
+
end
|
2330
2262
|
end
|
2331
2263
|
|
2332
|
-
|
2333
|
-
|
2334
|
-
|
2264
|
+
context "when errors are raised" do
|
2265
|
+
before do
|
2266
|
+
expect(post).to receive(:before_remove_tag).and_raise
|
2267
|
+
begin; post.tags.send(method, tag); rescue; end
|
2268
|
+
end
|
2335
2269
|
|
2336
|
-
|
2337
|
-
|
2270
|
+
it 'does not remove the document from the relation' do
|
2271
|
+
expect(post.tags).to eq([ tag ])
|
2272
|
+
end
|
2338
2273
|
end
|
2339
2274
|
end
|
2340
2275
|
|
2341
|
-
context
|
2276
|
+
context 'when the callback is an after_remove' do
|
2277
|
+
context 'when no errors are raised' do
|
2278
|
+
before do
|
2279
|
+
post.tags.send(method, tag)
|
2280
|
+
end
|
2342
2281
|
|
2343
|
-
|
2344
|
-
|
2345
|
-
|
2282
|
+
it 'executes the callback' do
|
2283
|
+
expect(post.after_remove_called).to be true
|
2284
|
+
end
|
2285
|
+
|
2286
|
+
it 'removes the document from the relation' do
|
2287
|
+
expect(post.tags).to be_empty
|
2288
|
+
end
|
2346
2289
|
end
|
2347
2290
|
|
2348
|
-
|
2349
|
-
|
2291
|
+
context 'when errors are raised' do
|
2292
|
+
before do
|
2293
|
+
expect(post).to receive(:after_remove_tag).and_raise
|
2294
|
+
begin; post.tags.send(method, tag); rescue; end
|
2295
|
+
end
|
2296
|
+
|
2297
|
+
it 'removes the document from the relation' do
|
2298
|
+
expect(post.tags).to be_empty
|
2299
|
+
end
|
2350
2300
|
end
|
2351
2301
|
end
|
2352
2302
|
end
|
2353
2303
|
end
|
2354
2304
|
end
|
2355
2305
|
|
2356
|
-
[
|
2357
|
-
|
2358
|
-
|
2359
|
-
|
2360
|
-
|
2361
|
-
|
2362
|
-
context "when conditions are provided" do
|
2363
|
-
|
2364
|
-
let(:person) do
|
2365
|
-
Person.create!
|
2366
|
-
end
|
2306
|
+
%i[ delete_all destroy_all ].each do |method|
|
2307
|
+
describe "\##{method}" do
|
2308
|
+
context 'when the relation is not polymorphic' do
|
2309
|
+
context 'when conditions are provided' do
|
2310
|
+
let(:person) { Person.create! }
|
2367
2311
|
|
2368
2312
|
let!(:preference_one) do
|
2369
2313
|
person.preferences.create!(name: "Testing")
|
@@ -2395,6 +2339,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
2395
2339
|
it "removes the ids from the foreign key" do
|
2396
2340
|
expect(person.preference_ids).to eq([ preference_two.id ])
|
2397
2341
|
end
|
2342
|
+
|
2343
|
+
it "sets the association locally" do
|
2344
|
+
expect(person.preferences).to eq([preference_two])
|
2345
|
+
end
|
2398
2346
|
end
|
2399
2347
|
|
2400
2348
|
context "when conditions are not provided" do
|
@@ -2421,6 +2369,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
2421
2369
|
it "returns the number of documents deleted" do
|
2422
2370
|
expect(deleted).to eq(2)
|
2423
2371
|
end
|
2372
|
+
|
2373
|
+
it "sets the association locally" do
|
2374
|
+
expect(person.preferences).to eq([])
|
2375
|
+
end
|
2424
2376
|
end
|
2425
2377
|
end
|
2426
2378
|
end
|
@@ -2508,39 +2460,29 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
2508
2460
|
it "raises an error" do
|
2509
2461
|
expect {
|
2510
2462
|
preference
|
2511
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2463
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
2512
2464
|
end
|
2513
2465
|
end
|
2514
2466
|
|
2515
2467
|
context "when the id does not match" do
|
2516
2468
|
|
2517
2469
|
context "when config set to raise error" do
|
2518
|
-
|
2519
|
-
before do
|
2520
|
-
Mongoid.raise_not_found_error = true
|
2521
|
-
end
|
2470
|
+
config_override :raise_not_found_error, true
|
2522
2471
|
|
2523
2472
|
it "raises an error" do
|
2524
2473
|
expect {
|
2525
2474
|
person.preferences.find(BSON::ObjectId.new)
|
2526
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2475
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
2527
2476
|
end
|
2528
2477
|
end
|
2529
2478
|
|
2530
2479
|
context "when config set not to raise error" do
|
2480
|
+
config_override :raise_not_found_error, false
|
2531
2481
|
|
2532
2482
|
let(:preference) do
|
2533
2483
|
person.preferences.find(BSON::ObjectId.new)
|
2534
2484
|
end
|
2535
2485
|
|
2536
|
-
before do
|
2537
|
-
Mongoid.raise_not_found_error = false
|
2538
|
-
end
|
2539
|
-
|
2540
|
-
after do
|
2541
|
-
Mongoid.raise_not_found_error = true
|
2542
|
-
end
|
2543
|
-
|
2544
2486
|
it "returns nil" do
|
2545
2487
|
expect(preference).to be_nil
|
2546
2488
|
end
|
@@ -2572,39 +2514,29 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
2572
2514
|
it "raises an error" do
|
2573
2515
|
expect {
|
2574
2516
|
preferences
|
2575
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2517
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
2576
2518
|
end
|
2577
2519
|
end
|
2578
2520
|
|
2579
2521
|
context "when the ids do not match" do
|
2580
2522
|
|
2581
2523
|
context "when config set to raise error" do
|
2582
|
-
|
2583
|
-
before do
|
2584
|
-
Mongoid.raise_not_found_error = true
|
2585
|
-
end
|
2524
|
+
config_override :raise_not_found_error, true
|
2586
2525
|
|
2587
2526
|
it "raises an error" do
|
2588
2527
|
expect {
|
2589
2528
|
person.preferences.find([ BSON::ObjectId.new ])
|
2590
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2529
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
2591
2530
|
end
|
2592
2531
|
end
|
2593
2532
|
|
2594
2533
|
context "when config set not to raise error" do
|
2534
|
+
config_override :raise_not_found_error, false
|
2595
2535
|
|
2596
2536
|
let(:preferences) do
|
2597
2537
|
person.preferences.find([ BSON::ObjectId.new ])
|
2598
2538
|
end
|
2599
2539
|
|
2600
|
-
before do
|
2601
|
-
Mongoid.raise_not_found_error = false
|
2602
|
-
end
|
2603
|
-
|
2604
|
-
after do
|
2605
|
-
Mongoid.raise_not_found_error = true
|
2606
|
-
end
|
2607
|
-
|
2608
2540
|
it "returns an empty array" do
|
2609
2541
|
expect(preferences).to be_empty
|
2610
2542
|
end
|
@@ -3772,6 +3704,31 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
3772
3704
|
end
|
3773
3705
|
end
|
3774
3706
|
|
3707
|
+
context "when accesing own _id from parent's foreign key in default" do
|
3708
|
+
let!(:contract) { HabtmmContract.create! }
|
3709
|
+
let!(:signature) { contract.signatures.create! }
|
3710
|
+
|
3711
|
+
it "is nil" do
|
3712
|
+
expect(signature.favorite_signature).to be nil
|
3713
|
+
end
|
3714
|
+
end
|
3715
|
+
|
3716
|
+
context "when setting an association on a model that uses the class_name option" do
|
3717
|
+
let!(:contract) { HabtmmContract.create! }
|
3718
|
+
let!(:signature) { HabtmmSignature.create!(contracts: [contract]) }
|
3719
|
+
|
3720
|
+
it "populates the inverse foreign key" do
|
3721
|
+
expect(signature.contracts.first.signature_ids).to eq([signature.id])
|
3722
|
+
end
|
3723
|
+
end
|
3724
|
+
|
3725
|
+
context "when there is a foreign key in the aliased associations" do
|
3726
|
+
it "has the correct aliases" do
|
3727
|
+
expect(Dog.aliased_associations["breed_ids"]).to eq("breeds")
|
3728
|
+
expect(Breed.aliased_associations["dog_ids"]).to eq("dogs")
|
3729
|
+
end
|
3730
|
+
end
|
3731
|
+
|
3775
3732
|
# This test is for MONGOID-5344 which tests that the initial call to
|
3776
3733
|
# signature_ids refers to the same array as subsequent calls to signature_ids.
|
3777
3734
|
# Prior to the change in that ticket, this test broke because the array
|
@@ -32,6 +32,8 @@ end
|
|
32
32
|
class HabtmmSignature
|
33
33
|
include Mongoid::Document
|
34
34
|
|
35
|
+
field :favorite_signature, default: ->{ contracts.first.signature_ids.first if contracts.first }
|
36
|
+
|
35
37
|
has_and_belongs_to_many :contracts, class_name: 'HabtmmContract'
|
36
38
|
|
37
39
|
field :name, type: String
|
@@ -65,3 +67,26 @@ class HabtmmAnimal
|
|
65
67
|
|
66
68
|
has_and_belongs_to_many :trainers, inverse_of: :animals, class_name: 'HabtmmTrainer', scope: -> { where(name: 'Dave') }
|
67
69
|
end
|
70
|
+
|
71
|
+
class HabtmmSchool
|
72
|
+
include Mongoid::Document
|
73
|
+
include Mongoid::Timestamps
|
74
|
+
|
75
|
+
has_and_belongs_to_many :students, class_name: 'HabtmmStudent'
|
76
|
+
|
77
|
+
field :after_destroy_triggered, default: false
|
78
|
+
|
79
|
+
accepts_nested_attributes_for :students, allow_destroy: true
|
80
|
+
end
|
81
|
+
|
82
|
+
class HabtmmStudent
|
83
|
+
include Mongoid::Document
|
84
|
+
include Mongoid::Timestamps
|
85
|
+
|
86
|
+
has_and_belongs_to_many :schools, class_name: 'HabtmmSchool'
|
87
|
+
|
88
|
+
after_destroy do |doc|
|
89
|
+
schools.first.update_attributes!(after_destroy_triggered: true) unless schools.empty?
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|