mongoid 8.1.13 → 9.0.0
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 +1 -0
- data/LICENSE +1 -1
- data/README.md +4 -9
- data/Rakefile +62 -44
- data/lib/config/locales/en.yml +66 -31
- data/lib/mongoid/association/accessors.rb +16 -20
- data/lib/mongoid/association/bindable.rb +27 -8
- data/lib/mongoid/association/builders.rb +3 -2
- data/lib/mongoid/association/constrainable.rb +1 -0
- data/lib/mongoid/association/depending.rb +20 -9
- data/lib/mongoid/association/eager.rb +160 -0
- data/lib/mongoid/association/eager_loadable.rb +15 -7
- data/lib/mongoid/association/embedded/batchable.rb +16 -18
- data/lib/mongoid/association/embedded/cyclic.rb +1 -0
- data/lib/mongoid/association/embedded/eager.rb +23 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +5 -4
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +1 -0
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +21 -7
- data/lib/mongoid/association/embedded/embedded_in.rb +7 -0
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +134 -205
- data/lib/mongoid/association/embedded/embeds_many.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +113 -55
- data/lib/mongoid/association/embedded/embeds_one.rb +1 -0
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +17 -14
- data/lib/mongoid/association/many.rb +1 -0
- data/lib/mongoid/association/marshalable.rb +4 -0
- data/lib/mongoid/association/nested/many.rb +11 -41
- data/lib/mongoid/association/nested/nested_buildable.rb +32 -14
- data/lib/mongoid/association/nested/one.rb +6 -3
- data/lib/mongoid/association/nested.rb +1 -0
- data/lib/mongoid/association/one.rb +1 -0
- data/lib/mongoid/association/options.rb +9 -2
- data/lib/mongoid/association/proxy.rb +30 -18
- data/lib/mongoid/association/referenced/auto_save.rb +6 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -14
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -1
- data/lib/mongoid/association/referenced/counter_cache.rb +7 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +15 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +1 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +132 -94
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +8 -3
- data/lib/mongoid/association/referenced/has_many/binding.rb +1 -0
- data/lib/mongoid/association/referenced/has_many/buildable.rb +1 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +43 -27
- data/lib/mongoid/association/referenced/has_many/proxy.rb +132 -204
- data/lib/mongoid/association/referenced/has_many.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/binding.rb +1 -0
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/proxy.rb +37 -28
- data/lib/mongoid/association/referenced/has_one.rb +5 -1
- data/lib/mongoid/association/referenced/syncable.rb +7 -6
- data/lib/mongoid/association/referenced.rb +1 -0
- data/lib/mongoid/association/reflections.rb +5 -4
- data/lib/mongoid/association/relatable.rb +10 -4
- data/lib/mongoid/association.rb +5 -0
- data/lib/mongoid/atomic/modifiers.rb +1 -0
- data/lib/mongoid/atomic/paths/embedded/many.rb +2 -1
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -0
- data/lib/mongoid/atomic/paths/embedded.rb +1 -0
- data/lib/mongoid/atomic/paths/root.rb +1 -0
- data/lib/mongoid/atomic/paths.rb +1 -0
- data/lib/mongoid/atomic.rb +23 -62
- data/lib/mongoid/atomic_update_preparer.rb +88 -0
- data/lib/mongoid/attributes/dynamic.rb +1 -0
- data/lib/mongoid/attributes/embedded.rb +34 -0
- data/lib/mongoid/attributes/nested.rb +3 -2
- data/lib/mongoid/attributes/processing.rb +11 -10
- data/lib/mongoid/attributes/projector.rb +1 -0
- data/lib/mongoid/attributes/readonly.rb +4 -8
- data/lib/mongoid/attributes.rb +6 -4
- data/lib/mongoid/cacheable.rb +2 -1
- data/lib/mongoid/changeable.rb +58 -49
- data/lib/mongoid/clients/factory.rb +37 -5
- data/lib/mongoid/clients/options.rb +113 -3
- data/lib/mongoid/clients/sessions.rb +245 -64
- data/lib/mongoid/clients/storage_options.rb +37 -1
- data/lib/mongoid/clients/validators/storage.rb +1 -0
- data/lib/mongoid/clients/validators.rb +1 -0
- data/lib/mongoid/clients.rb +36 -4
- data/lib/mongoid/collection_configurable.rb +1 -0
- data/lib/mongoid/composable.rb +5 -0
- data/lib/mongoid/config/defaults.rb +16 -36
- data/lib/mongoid/config/encryption.rb +213 -0
- data/lib/mongoid/config/environment.rb +2 -5
- data/lib/mongoid/config/introspection.rb +152 -0
- data/lib/mongoid/config/options.rb +8 -3
- data/lib/mongoid/config/validators/async_query_executor.rb +12 -2
- data/lib/mongoid/config/validators/client.rb +1 -0
- data/lib/mongoid/config/validators/option.rb +1 -0
- data/lib/mongoid/config/validators.rb +1 -0
- data/lib/mongoid/config.rb +57 -153
- data/lib/mongoid/contextual/aggregable/memory.rb +3 -5
- data/lib/mongoid/contextual/aggregable/mongo.rb +2 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -0
- data/lib/mongoid/contextual/aggregable.rb +1 -0
- data/lib/mongoid/contextual/atomic.rb +98 -11
- data/lib/mongoid/contextual/command.rb +3 -0
- data/lib/mongoid/contextual/map_reduce.rb +6 -0
- data/lib/mongoid/contextual/memory.rb +52 -60
- data/lib/mongoid/contextual/mongo/documents_loader.rb +3 -2
- data/lib/mongoid/contextual/mongo.rb +33 -61
- data/lib/mongoid/contextual/none.rb +15 -32
- data/lib/mongoid/contextual/queryable.rb +4 -0
- data/lib/mongoid/contextual.rb +4 -0
- data/lib/mongoid/copyable.rb +3 -2
- data/lib/mongoid/criteria/findable.rb +44 -4
- data/lib/mongoid/criteria/includable.rb +5 -4
- data/lib/mongoid/criteria/inspectable.rb +4 -0
- data/lib/mongoid/criteria/marshalable.rb +4 -0
- data/lib/mongoid/criteria/modifiable.rb +5 -0
- data/lib/mongoid/criteria/options.rb +1 -0
- data/lib/mongoid/criteria/permission.rb +5 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +1 -0
- data/lib/mongoid/criteria/queryable/expandable.rb +1 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/date.rb +4 -3
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -16
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +7 -1
- data/lib/mongoid/criteria/queryable/extensions/set.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +15 -3
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -0
- data/lib/mongoid/criteria/queryable/key.rb +10 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +1 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -12
- data/lib/mongoid/criteria/queryable/optional.rb +1 -0
- data/lib/mongoid/criteria/queryable/options.rb +1 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +12 -136
- data/lib/mongoid/criteria/queryable/selector.rb +5 -2
- data/lib/mongoid/criteria/queryable/smash.rb +1 -0
- data/lib/mongoid/criteria/queryable/storable.rb +4 -3
- data/lib/mongoid/criteria/queryable.rb +1 -0
- data/lib/mongoid/criteria/scopable.rb +5 -0
- data/lib/mongoid/criteria/translator.rb +1 -0
- data/lib/mongoid/criteria.rb +37 -10
- data/lib/mongoid/deprecable.rb +1 -0
- data/lib/mongoid/deprecation.rb +8 -4
- data/lib/mongoid/document.rb +171 -125
- data/lib/mongoid/encryptable.rb +53 -0
- data/lib/mongoid/equality.rb +2 -22
- data/lib/mongoid/errors/ambiguous_relationship.rb +1 -0
- data/lib/mongoid/errors/attribute_not_loaded.rb +34 -0
- data/lib/mongoid/errors/callback.rb +1 -0
- data/lib/mongoid/errors/create_collection_failure.rb +1 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +1 -0
- data/lib/mongoid/errors/delete_restriction.rb +1 -0
- data/lib/mongoid/errors/document_not_destroyed.rb +1 -0
- data/lib/mongoid/errors/document_not_found.rb +1 -0
- data/lib/mongoid/errors/drop_collection_failure.rb +1 -0
- data/lib/mongoid/errors/empty_config_file.rb +1 -0
- data/lib/mongoid/errors/immutable_attribute.rb +1 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +1 -0
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +33 -0
- data/lib/mongoid/errors/invalid_collection.rb +1 -0
- data/lib/mongoid/errors/invalid_config_file.rb +1 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -0
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +1 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +1 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +6 -4
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +27 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +1 -0
- data/lib/mongoid/errors/invalid_field.rb +1 -0
- data/lib/mongoid/errors/invalid_field_operator.rb +1 -0
- data/lib/mongoid/errors/invalid_field_option.rb +1 -0
- data/lib/mongoid/errors/invalid_field_type.rb +1 -0
- data/lib/mongoid/errors/invalid_find.rb +1 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -0
- data/lib/mongoid/errors/invalid_includes.rb +1 -0
- data/lib/mongoid/errors/invalid_index.rb +1 -0
- data/lib/mongoid/errors/invalid_options.rb +1 -0
- data/lib/mongoid/errors/invalid_path.rb +1 -0
- data/lib/mongoid/errors/invalid_persistence_option.rb +1 -0
- data/lib/mongoid/errors/invalid_query.rb +1 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -0
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -0
- data/lib/mongoid/errors/invalid_scope.rb +1 -0
- data/lib/mongoid/errors/invalid_session_nesting.rb +17 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -0
- data/lib/mongoid/errors/invalid_time.rb +1 -0
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +17 -0
- data/lib/mongoid/errors/inverse_not_found.rb +1 -0
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -0
- data/lib/mongoid/errors/mixed_relations.rb +1 -0
- data/lib/mongoid/errors/mongoid_error.rb +4 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -0
- data/lib/mongoid/errors/no_client_config.rb +1 -0
- data/lib/mongoid/errors/no_client_database.rb +1 -0
- data/lib/mongoid/errors/no_client_hosts.rb +1 -0
- data/lib/mongoid/errors/no_clients_config.rb +1 -0
- data/lib/mongoid/errors/no_default_client.rb +1 -0
- data/lib/mongoid/errors/no_environment.rb +1 -0
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -0
- data/lib/mongoid/errors/no_metadata.rb +1 -0
- data/lib/mongoid/errors/no_parent.rb +1 -0
- data/lib/mongoid/errors/readonly_attribute.rb +1 -0
- data/lib/mongoid/errors/readonly_document.rb +1 -0
- data/lib/mongoid/errors/rollback.rb +15 -0
- data/lib/mongoid/errors/scope_overwrite.rb +1 -0
- data/lib/mongoid/errors/sessions_not_supported.rb +17 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -0
- data/lib/mongoid/errors/transaction_error.rb +25 -0
- data/lib/mongoid/errors/transactions_not_supported.rb +17 -0
- data/lib/mongoid/errors/unknown_attribute.rb +1 -0
- data/lib/mongoid/errors/unknown_model.rb +1 -0
- data/lib/mongoid/errors/unsaved_document.rb +1 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -0
- data/lib/mongoid/errors/validations.rb +1 -0
- data/lib/mongoid/errors.rb +10 -2
- data/lib/mongoid/evolvable.rb +1 -0
- data/lib/mongoid/extensions/array.rb +10 -24
- data/lib/mongoid/extensions/big_decimal.rb +14 -6
- data/lib/mongoid/extensions/binary.rb +3 -0
- data/lib/mongoid/extensions/boolean.rb +3 -0
- data/lib/mongoid/extensions/date.rb +7 -2
- data/lib/mongoid/extensions/date_time.rb +4 -6
- data/lib/mongoid/extensions/decimal128.rb +3 -0
- data/lib/mongoid/extensions/false_class.rb +5 -2
- data/lib/mongoid/extensions/float.rb +4 -1
- data/lib/mongoid/extensions/hash.rb +21 -169
- data/lib/mongoid/extensions/integer.rb +6 -1
- data/lib/mongoid/extensions/module.rb +4 -1
- data/lib/mongoid/extensions/nil_class.rb +5 -2
- data/lib/mongoid/extensions/object.rb +23 -35
- data/lib/mongoid/extensions/object_id.rb +3 -0
- data/lib/mongoid/extensions/range.rb +9 -6
- data/lib/mongoid/extensions/raw_value.rb +34 -0
- data/lib/mongoid/extensions/regexp.rb +3 -0
- data/lib/mongoid/extensions/set.rb +13 -2
- data/lib/mongoid/extensions/string.rb +18 -10
- data/lib/mongoid/extensions/symbol.rb +5 -0
- data/lib/mongoid/extensions/time.rb +7 -19
- data/lib/mongoid/extensions/time_with_zone.rb +6 -2
- data/lib/mongoid/extensions/true_class.rb +5 -2
- data/lib/mongoid/extensions.rb +2 -32
- data/lib/mongoid/factory.rb +134 -40
- data/lib/mongoid/fields/encrypted.rb +48 -0
- data/lib/mongoid/fields/foreign_key.rb +29 -3
- data/lib/mongoid/fields/localized.rb +6 -0
- data/lib/mongoid/fields/standard.rb +5 -0
- data/lib/mongoid/fields/validators/macro.rb +3 -1
- data/lib/mongoid/fields/validators.rb +1 -0
- data/lib/mongoid/fields.rb +41 -46
- data/lib/mongoid/findable.rb +2 -2
- data/lib/mongoid/indexable/specification.rb +55 -19
- data/lib/mongoid/indexable/validators/options.rb +1 -0
- data/lib/mongoid/indexable.rb +1 -0
- data/lib/mongoid/inspectable.rb +32 -0
- data/lib/mongoid/interceptable.rb +18 -8
- data/lib/mongoid/loadable.rb +83 -0
- data/lib/mongoid/loggable.rb +1 -0
- data/lib/mongoid/matchable.rb +2 -6
- data/lib/mongoid/matcher/all.rb +15 -0
- data/lib/mongoid/matcher/and.rb +14 -0
- data/lib/mongoid/matcher/bits.rb +19 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +21 -0
- data/lib/mongoid/matcher/bits_all_set.rb +21 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +21 -0
- data/lib/mongoid/matcher/bits_any_set.rb +21 -0
- data/lib/mongoid/matcher/elem_match.rb +15 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +14 -2
- data/lib/mongoid/matcher/eq.rb +15 -0
- data/lib/mongoid/matcher/eq_impl.rb +33 -16
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +19 -5
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +13 -0
- data/lib/mongoid/matcher/expression_operator.rb +14 -0
- data/lib/mongoid/matcher/field_expression.rb +15 -0
- data/lib/mongoid/matcher/field_operator.rb +24 -0
- data/lib/mongoid/matcher/gt.rb +15 -0
- data/lib/mongoid/matcher/gte.rb +15 -0
- data/lib/mongoid/matcher/in.rb +15 -0
- data/lib/mongoid/matcher/lt.rb +15 -0
- data/lib/mongoid/matcher/lte.rb +15 -0
- data/lib/mongoid/matcher/mod.rb +16 -0
- data/lib/mongoid/matcher/ne.rb +15 -0
- data/lib/mongoid/matcher/nin.rb +15 -0
- data/lib/mongoid/matcher/nor.rb +14 -0
- data/lib/mongoid/matcher/not.rb +16 -0
- data/lib/mongoid/matcher/or.rb +14 -0
- data/lib/mongoid/matcher/regex.rb +33 -8
- data/lib/mongoid/matcher/size.rb +16 -0
- data/lib/mongoid/matcher/type.rb +25 -0
- data/lib/mongoid/matcher.rb +5 -16
- data/lib/mongoid/persistable/creatable.rb +14 -9
- data/lib/mongoid/persistable/deletable.rb +7 -2
- data/lib/mongoid/persistable/destroyable.rb +34 -7
- data/lib/mongoid/persistable/incrementable.rb +2 -1
- data/lib/mongoid/persistable/logical.rb +1 -0
- data/lib/mongoid/persistable/maxable.rb +37 -0
- data/lib/mongoid/persistable/minable.rb +37 -0
- data/lib/mongoid/persistable/multipliable.rb +36 -0
- data/lib/mongoid/persistable/poppable.rb +1 -0
- data/lib/mongoid/persistable/pullable.rb +1 -0
- data/lib/mongoid/persistable/pushable.rb +1 -0
- data/lib/mongoid/persistable/renamable.rb +1 -0
- data/lib/mongoid/persistable/savable.rb +1 -0
- data/lib/mongoid/persistable/settable.rb +1 -0
- data/lib/mongoid/persistable/unsettable.rb +1 -0
- data/lib/mongoid/persistable/updatable.rb +37 -18
- data/lib/mongoid/persistable/upsertable.rb +20 -7
- data/lib/mongoid/persistable.rb +11 -1
- data/lib/mongoid/persistence_context.rb +46 -6
- data/lib/mongoid/positional.rb +1 -0
- data/lib/mongoid/railtie.rb +24 -1
- data/lib/mongoid/railties/bson_object_id_serializer.rb +39 -0
- data/lib/mongoid/railties/console_sandbox.rb +42 -0
- data/lib/mongoid/railties/controller_runtime.rb +20 -4
- data/lib/mongoid/railties/database.rake +12 -0
- data/lib/mongoid/reloadable.rb +38 -30
- data/lib/mongoid/scopable.rb +19 -23
- data/lib/mongoid/search_indexable.rb +167 -0
- data/lib/mongoid/selectable.rb +1 -0
- data/lib/mongoid/serializable.rb +8 -7
- data/lib/mongoid/shardable.rb +1 -0
- data/lib/mongoid/stateful.rb +9 -3
- data/lib/mongoid/stringified_symbol.rb +19 -6
- data/lib/mongoid/tasks/database.rake +13 -0
- data/lib/mongoid/tasks/database.rb +63 -0
- data/lib/mongoid/tasks/encryption.rake +59 -0
- data/lib/mongoid/tasks/encryption.rb +108 -0
- data/lib/mongoid/threaded/lifecycle.rb +1 -0
- data/lib/mongoid/threaded.rb +94 -33
- data/lib/mongoid/timestamps/created/short.rb +1 -0
- data/lib/mongoid/timestamps/created.rb +5 -11
- data/lib/mongoid/timestamps/short.rb +1 -0
- data/lib/mongoid/timestamps/timeless.rb +29 -0
- data/lib/mongoid/timestamps/updated/short.rb +1 -0
- data/lib/mongoid/timestamps/updated.rb +2 -1
- data/lib/mongoid/timestamps.rb +1 -0
- data/lib/mongoid/touchable.rb +154 -49
- data/lib/mongoid/traversable.rb +127 -122
- data/lib/mongoid/utils.rb +32 -2
- data/lib/mongoid/validatable/associated.rb +3 -5
- data/lib/mongoid/validatable/format.rb +1 -0
- data/lib/mongoid/validatable/length.rb +1 -0
- data/lib/mongoid/validatable/localizable.rb +1 -0
- data/lib/mongoid/validatable/macros.rb +5 -15
- data/lib/mongoid/validatable/presence.rb +1 -0
- data/lib/mongoid/validatable/queryable.rb +9 -0
- data/lib/mongoid/validatable/uniqueness.rb +2 -1
- data/lib/mongoid/validatable.rb +3 -3
- data/lib/mongoid/version.rb +2 -5
- data/lib/mongoid/warnings.rb +9 -17
- data/lib/mongoid.rb +38 -5
- data/lib/rails/generators/mongoid/config/config_generator.rb +17 -3
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +25 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +36 -62
- data/lib/rails/generators/mongoid/model/model_generator.rb +4 -0
- data/lib/rails/generators/mongoid_generator.rb +13 -0
- data/lib/rails/mongoid.rb +4 -29
- data/spec/config/mongoid.yml +0 -1
- data/spec/integration/active_job_spec.rb +32 -0
- data/spec/integration/app_spec.rb +72 -66
- data/spec/integration/associations/belongs_to_spec.rb +1 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +1 -0
- data/spec/integration/associations/embedded_spec.rb +75 -6
- data/spec/integration/associations/embeds_many_spec.rb +1 -41
- data/spec/integration/associations/embeds_one_spec.rb +6 -25
- data/spec/integration/associations/foreign_key_spec.rb +1 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +1 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +3 -17
- data/spec/integration/associations/has_many_spec.rb +1 -0
- data/spec/integration/associations/has_one_spec.rb +1 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +1 -0
- data/spec/integration/associations/reverse_population_spec.rb +1 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +1 -0
- data/spec/integration/associations/scope_option_spec.rb +1 -0
- data/spec/integration/atomic/modifiers_spec.rb +1 -0
- data/spec/integration/bson_regexp_raw_spec.rb +1 -0
- data/spec/integration/callbacks_models.rb +3 -2
- data/spec/integration/callbacks_spec.rb +2 -1
- data/spec/integration/contextual/empty_spec.rb +1 -0
- data/spec/integration/criteria/alias_query_spec.rb +25 -88
- data/spec/integration/criteria/date_field_spec.rb +1 -0
- data/spec/integration/criteria/default_scope_spec.rb +1 -0
- data/spec/integration/criteria/logical_spec.rb +10 -28
- data/spec/integration/criteria/range_spec.rb +1 -2
- data/spec/integration/criteria/raw_value_spec.rb +525 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +1 -0
- data/spec/integration/discriminator_key_spec.rb +1 -0
- data/spec/integration/discriminator_value_spec.rb +1 -0
- data/spec/integration/document_spec.rb +1 -0
- data/spec/integration/dots_and_dollars_spec.rb +3 -12
- data/spec/integration/encryption_spec.rb +100 -0
- data/spec/integration/i18n_fallbacks_spec.rb +7 -33
- data/spec/integration/matcher_examples_spec.rb +1 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +0 -15
- data/spec/integration/matcher_operator_data/bits_all_set.yml +0 -15
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +0 -15
- data/spec/integration/matcher_operator_data/bits_any_set.yml +0 -15
- data/spec/integration/matcher_operator_data/regex.yml +0 -21
- data/spec/integration/matcher_operator_data/size.yml +0 -3
- data/spec/integration/matcher_operator_data/type.yml +0 -6
- data/spec/integration/matcher_operator_data/type_array.yml +0 -1
- data/spec/integration/matcher_operator_data/type_decimal.yml +0 -4
- data/spec/integration/matcher_operator_spec.rb +1 -0
- data/spec/integration/matcher_spec.rb +21 -66
- data/spec/integration/persistence/range_field_spec.rb +1 -0
- data/spec/integration/server_query_spec.rb +1 -0
- data/spec/integration/shardable_spec.rb +1 -0
- data/spec/integration/stringified_symbol_field_spec.rb +1 -0
- data/spec/lite_spec_helper.rb +36 -10
- data/spec/mongoid/association/accessors_spec.rb +11 -28
- data/spec/mongoid/association/auto_save_spec.rb +1 -0
- data/spec/mongoid/association/builders_spec.rb +1 -0
- data/spec/mongoid/association/constrainable_spec.rb +1 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -0
- data/spec/mongoid/association/depending_spec.rb +1 -0
- data/spec/mongoid/association/eager_spec.rb +52 -24
- data/spec/mongoid/association/embedded/cyclic_spec.rb +1 -0
- data/spec/mongoid/association/embedded/dirty_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -7
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -2
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +4 -7
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +6 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +1 -0
- data/spec/mongoid/association/macros_spec.rb +1 -0
- data/spec/mongoid/association/nested/many_spec.rb +1 -0
- data/spec/mongoid/association/nested/one_spec.rb +1 -0
- data/spec/mongoid/association/options_spec.rb +1 -0
- data/spec/mongoid/association/polymorphic_spec.rb +1 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +1 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +1 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +1 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1 -4
- data/spec/mongoid/association/referenced/belongs_to_models.rb +1 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +2 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -79
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1090 -2152
- data/spec/mongoid/association/referenced/has_many_models.rb +1 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +1 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -1
- data/spec/mongoid/association/referenced/has_one_spec.rb +1 -0
- data/spec/mongoid/association/reflections_spec.rb +1 -0
- data/spec/mongoid/association/syncable_spec.rb +1 -0
- data/spec/mongoid/association_spec.rb +1 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +1 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +1 -0
- data/spec/mongoid/atomic/paths_spec.rb +1 -0
- data/spec/mongoid/atomic_spec.rb +1 -0
- data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
- data/spec/mongoid/attributes/dynamic_spec.rb +1 -0
- data/spec/mongoid/attributes/embedded_spec.rb +118 -0
- data/spec/mongoid/attributes/nested_spec.rb +11 -204
- data/spec/mongoid/attributes/nested_spec_models.rb +1 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -0
- data/spec/mongoid/attributes/readonly_spec.rb +1 -19
- data/spec/mongoid/attributes_spec.rb +18 -35
- data/spec/mongoid/cacheable_spec.rb +1 -0
- data/spec/mongoid/changeable_spec.rb +4 -3
- data/spec/mongoid/clients/factory_spec.rb +77 -30
- data/spec/mongoid/clients/options_spec.rb +9 -5
- data/spec/mongoid/clients/sessions_spec.rb +27 -10
- data/spec/mongoid/clients/transactions_spec.rb +958 -185
- data/spec/mongoid/clients/transactions_spec_models.rb +159 -0
- data/spec/mongoid/clients_spec.rb +47 -2
- data/spec/mongoid/collection_configurable_spec.rb +1 -0
- data/spec/mongoid/composable_spec.rb +1 -0
- data/spec/mongoid/config/defaults_spec.rb +31 -92
- data/spec/mongoid/config/encryption_spec.rb +152 -0
- data/spec/mongoid/config/environment_spec.rb +13 -41
- data/spec/mongoid/config/introspection_spec.rb +114 -0
- data/spec/mongoid/config/options_spec.rb +1 -0
- data/spec/mongoid/config_spec.rb +20 -133
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +1 -91
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +1 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +5 -29
- data/spec/mongoid/contextual/aggregable/none_spec.rb +3 -14
- data/spec/mongoid/contextual/atomic_spec.rb +203 -12
- data/spec/mongoid/contextual/map_reduce_spec.rb +1 -0
- data/spec/mongoid/contextual/memory_spec.rb +340 -687
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +10 -3
- data/spec/mongoid/contextual/mongo_spec.rb +101 -283
- data/spec/mongoid/contextual/none_spec.rb +1 -0
- data/spec/mongoid/copyable_spec.rb +1 -0
- data/spec/mongoid/copyable_spec_models.rb +1 -0
- data/spec/mongoid/criteria/findable_spec.rb +191 -0
- data/spec/mongoid/criteria/includable_spec.rb +1 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +1 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +1 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +3 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +1 -0
- data/spec/mongoid/criteria/options_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +8 -7
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +21 -11
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -11
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -11
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -66
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +4 -5
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +1 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +51 -214
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +1 -235
- data/spec/mongoid/criteria/queryable/selector_spec.rb +96 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +10 -32
- data/spec/mongoid/criteria/scopable_spec.rb +1 -0
- data/spec/mongoid/criteria/translator_spec.rb +1 -0
- data/spec/mongoid/criteria_projection_spec.rb +6 -5
- data/spec/mongoid/criteria_spec.rb +221 -361
- data/spec/mongoid/document_fields_spec.rb +1 -0
- data/spec/mongoid/document_persistence_context_spec.rb +77 -0
- data/spec/mongoid/document_query_spec.rb +5 -4
- data/spec/mongoid/document_spec.rb +3 -148
- data/spec/mongoid/equality_spec.rb +41 -149
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -0
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
- data/spec/mongoid/errors/callback_spec.rb +1 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -0
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_config_file_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_field_type_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_path_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_scope_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +1 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -0
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +1 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +9 -22
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -0
- data/spec/mongoid/errors/no_client_config_spec.rb +1 -0
- data/spec/mongoid/errors/no_client_database_spec.rb +1 -0
- data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -0
- data/spec/mongoid/errors/no_clients_config_spec.rb +1 -0
- data/spec/mongoid/errors/no_environment_spec.rb +1 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +1 -0
- data/spec/mongoid/errors/no_parent_spec.rb +1 -0
- data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +1 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +1 -0
- data/spec/mongoid/errors/unsaved_document_spec.rb +1 -0
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -0
- data/spec/mongoid/errors/validations_spec.rb +1 -0
- data/spec/mongoid/extensions/array_spec.rb +3 -262
- data/spec/mongoid/extensions/big_decimal_spec.rb +5 -4
- data/spec/mongoid/extensions/binary_spec.rb +1 -0
- data/spec/mongoid/extensions/boolean_spec.rb +1 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +8 -7
- data/spec/mongoid/extensions/date_spec.rb +3 -20
- data/spec/mongoid/extensions/date_time_spec.rb +3 -9
- data/spec/mongoid/extensions/decimal128_spec.rb +1 -0
- data/spec/mongoid/extensions/false_class_spec.rb +1 -7
- data/spec/mongoid/extensions/float_spec.rb +3 -9
- data/spec/mongoid/extensions/hash_spec.rb +19 -458
- data/spec/mongoid/extensions/integer_spec.rb +3 -8
- data/spec/mongoid/extensions/module_spec.rb +1 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +1 -0
- data/spec/mongoid/extensions/object_id_spec.rb +1 -0
- data/spec/mongoid/extensions/object_spec.rb +1 -176
- data/spec/mongoid/extensions/range_spec.rb +1 -11
- data/spec/mongoid/extensions/raw_value_spec.rb +67 -0
- data/spec/mongoid/extensions/regexp_spec.rb +1 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -3
- data/spec/mongoid/extensions/string_spec.rb +3 -113
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +1 -0
- data/spec/mongoid/extensions/symbol_spec.rb +1 -31
- data/spec/mongoid/extensions/time_spec.rb +32 -350
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -30
- data/spec/mongoid/extensions/true_class_spec.rb +1 -7
- data/spec/mongoid/factory_spec.rb +1 -0
- data/spec/mongoid/fields/foreign_key_spec.rb +282 -119
- data/spec/mongoid/fields/localized_spec.rb +1 -0
- data/spec/mongoid/fields/standard_spec.rb +1 -0
- data/spec/mongoid/fields_spec.rb +60 -66
- data/spec/mongoid/findable_spec.rb +2 -61
- data/spec/mongoid/indexable/specification_spec.rb +132 -13
- data/spec/mongoid/indexable_spec.rb +323 -9
- data/spec/mongoid/inspectable_spec.rb +81 -0
- data/spec/mongoid/interceptable_spec.rb +3 -82
- data/spec/mongoid/interceptable_spec_models.rb +112 -47
- data/spec/mongoid/loading_spec.rb +110 -0
- data/spec/mongoid/loggable_spec.rb +1 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -0
- data/spec/mongoid/mongoizable_spec.rb +1 -0
- data/spec/mongoid/monkey_patches_spec.rb +211 -0
- data/spec/mongoid/persistable/creatable_spec.rb +1 -0
- data/spec/mongoid/persistable/deletable_spec.rb +78 -31
- data/spec/mongoid/persistable/destroyable_spec.rb +230 -52
- data/spec/mongoid/persistable/incrementable_spec.rb +1 -0
- data/spec/mongoid/persistable/logical_spec.rb +1 -0
- data/spec/mongoid/persistable/maxable_spec.rb +147 -0
- data/spec/mongoid/persistable/minable_spec.rb +147 -0
- data/spec/mongoid/persistable/multipliable_spec.rb +227 -0
- data/spec/mongoid/persistable/poppable_spec.rb +1 -0
- data/spec/mongoid/persistable/pullable_spec.rb +1 -0
- data/spec/mongoid/persistable/pushable_spec.rb +1 -0
- data/spec/mongoid/persistable/renamable_spec.rb +1 -0
- data/spec/mongoid/persistable/savable_spec.rb +2 -6
- data/spec/mongoid/persistable/settable_spec.rb +5 -4
- data/spec/mongoid/persistable/unsettable_spec.rb +1 -0
- data/spec/mongoid/persistable/updatable_spec.rb +3 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +34 -1
- data/spec/mongoid/persistable_spec.rb +1 -0
- data/spec/mongoid/persistence_context_spec.rb +1 -0
- data/spec/mongoid/positional_spec.rb +1 -0
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +24 -0
- data/spec/mongoid/railties/console_sandbox_spec.rb +44 -0
- data/spec/mongoid/relations/proxy_spec.rb +1 -0
- data/spec/mongoid/reloadable_spec.rb +28 -83
- data/spec/mongoid/scopable_spec.rb +39 -50
- data/spec/mongoid/search_indexable_spec.rb +147 -0
- data/spec/mongoid/selectable_spec.rb +1 -0
- data/spec/mongoid/serializable_spec.rb +10 -16
- data/spec/mongoid/shardable_models.rb +1 -0
- data/spec/mongoid/shardable_spec.rb +1 -0
- data/spec/mongoid/stateful_spec.rb +1 -0
- data/spec/mongoid/tasks/database_rake_spec.rb +127 -49
- data/spec/mongoid/tasks/database_spec.rb +48 -1
- data/spec/mongoid/tasks/encryption_spec.rb +187 -0
- data/spec/mongoid/threaded_spec.rb +38 -0
- data/spec/mongoid/timestamps/created/short_spec.rb +1 -0
- data/spec/mongoid/timestamps/created_spec.rb +1 -23
- data/spec/mongoid/timestamps/timeless_spec.rb +1 -0
- data/spec/mongoid/timestamps/updated/short_spec.rb +1 -0
- data/spec/mongoid/timestamps/updated_spec.rb +1 -0
- data/spec/mongoid/timestamps_spec.rb +1 -0
- data/spec/mongoid/timestamps_spec_models.rb +1 -0
- data/spec/mongoid/touchable_spec.rb +485 -69
- data/spec/mongoid/touchable_spec_models.rb +96 -1
- data/spec/mongoid/traversable_spec.rb +1 -0
- data/spec/mongoid/validatable/associated_spec.rb +5 -14
- data/spec/mongoid/validatable/format_spec.rb +1 -0
- data/spec/mongoid/validatable/length_spec.rb +1 -0
- data/spec/mongoid/validatable/numericality_spec.rb +1 -16
- data/spec/mongoid/validatable/presence_spec.rb +1 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +48 -3
- data/spec/mongoid/validatable_spec.rb +1 -0
- data/spec/mongoid/warnings_spec.rb +1 -0
- data/spec/mongoid_spec.rb +27 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +1 -0
- data/spec/rails/mongoid_spec.rb +26 -117
- data/spec/shared/lib/mrss/docker_runner.rb +1 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +1 -1
- data/spec/shared/lib/mrss/spec_organizer.rb +3 -32
- data/spec/shared/share/Dockerfile.erb +34 -4
- data/spec/shared/shlib/distro.sh +0 -10
- data/spec/shared/shlib/server.sh +27 -33
- data/spec/shared/shlib/set_env.sh +42 -6
- data/spec/spec_helper.rb +26 -28
- data/spec/support/authorization.rb +1 -0
- data/spec/support/client_registry.rb +1 -0
- data/spec/support/constraints.rb +1 -0
- data/spec/support/crypt/models.rb +50 -0
- data/spec/support/crypt.rb +80 -0
- data/spec/support/expectations.rb +18 -20
- data/spec/support/feature_sandbox.rb +72 -0
- data/spec/support/helpers.rb +1 -0
- data/spec/support/immutable_ids.rb +22 -21
- data/spec/support/macros.rb +4 -6
- data/spec/support/models/account.rb +1 -0
- data/spec/support/models/acolyte.rb +1 -0
- data/spec/support/models/actor.rb +1 -0
- data/spec/support/models/actress.rb +1 -0
- data/spec/support/models/address.rb +3 -0
- data/spec/support/models/address_component.rb +1 -0
- data/spec/support/models/address_number.rb +1 -0
- data/spec/support/models/agency.rb +1 -0
- data/spec/support/models/agent.rb +1 -0
- data/spec/support/models/album.rb +1 -0
- data/spec/support/models/alert.rb +1 -0
- data/spec/support/models/animal.rb +1 -0
- data/spec/support/models/answer.rb +1 -0
- data/spec/support/models/appointment.rb +1 -0
- data/spec/support/models/armrest.rb +1 -0
- data/spec/support/models/array_field.rb +1 -0
- data/spec/support/models/article.rb +1 -0
- data/spec/support/models/artist.rb +1 -0
- data/spec/support/models/artwork.rb +1 -0
- data/spec/support/models/audible_sound.rb +1 -0
- data/spec/support/models/audio.rb +1 -0
- data/spec/support/models/augmentation.rb +1 -0
- data/spec/support/models/author.rb +1 -0
- data/spec/support/models/baby.rb +1 -0
- data/spec/support/models/band.rb +5 -1
- data/spec/support/models/bar.rb +1 -0
- data/spec/support/models/basic.rb +1 -0
- data/spec/support/models/bed.rb +1 -0
- data/spec/support/models/big_palette.rb +1 -0
- data/spec/support/models/birthday.rb +1 -0
- data/spec/support/models/bolt.rb +1 -0
- data/spec/support/models/bomb.rb +1 -0
- data/spec/support/models/book.rb +1 -0
- data/spec/support/models/breed.rb +1 -0
- data/spec/support/models/browser.rb +1 -0
- data/spec/support/models/building.rb +1 -0
- data/spec/support/models/building_address.rb +1 -0
- data/spec/support/models/bus.rb +1 -0
- data/spec/support/models/business.rb +1 -0
- data/spec/support/models/callback_test.rb +1 -0
- data/spec/support/models/canvas.rb +1 -0
- data/spec/support/models/car.rb +1 -0
- data/spec/support/models/cat.rb +1 -0
- data/spec/support/models/catalog.rb +1 -0
- data/spec/support/models/category.rb +1 -0
- data/spec/support/models/child.rb +1 -0
- data/spec/support/models/child_doc.rb +1 -0
- data/spec/support/models/church.rb +1 -0
- data/spec/support/models/circle.rb +1 -0
- data/spec/support/models/circuit.rb +1 -0
- data/spec/support/models/circus.rb +1 -0
- data/spec/support/models/code.rb +1 -0
- data/spec/support/models/coding/pull_request.rb +1 -0
- data/spec/support/models/coding.rb +1 -0
- data/spec/support/models/comment.rb +1 -0
- data/spec/support/models/company.rb +1 -0
- data/spec/support/models/consumption_period.rb +1 -0
- data/spec/support/models/contextable_item.rb +1 -0
- data/spec/support/models/contractor.rb +1 -0
- data/spec/support/models/cookie.rb +1 -0
- data/spec/support/models/country_code.rb +1 -0
- data/spec/support/models/courier_job.rb +1 -0
- data/spec/support/models/cover.rb +1 -0
- data/spec/support/models/crate.rb +1 -0
- data/spec/support/models/customer.rb +1 -0
- data/spec/support/models/customer_address.rb +1 -0
- data/spec/support/models/deed.rb +1 -0
- data/spec/support/models/definition.rb +1 -0
- data/spec/support/models/delegating_patient.rb +1 -0
- data/spec/support/models/description.rb +1 -0
- data/spec/support/models/dictionary.rb +1 -0
- data/spec/support/models/division.rb +1 -0
- data/spec/support/models/doctor.rb +1 -0
- data/spec/support/models/dog.rb +1 -0
- data/spec/support/models/dokument.rb +1 -0
- data/spec/support/models/draft.rb +1 -0
- data/spec/support/models/dragon.rb +1 -0
- data/spec/support/models/driver.rb +1 -0
- data/spec/support/models/drug.rb +1 -0
- data/spec/support/models/dungeon.rb +1 -0
- data/spec/support/models/edit.rb +1 -0
- data/spec/support/models/email.rb +1 -0
- data/spec/support/models/employer.rb +1 -0
- data/spec/support/models/entry.rb +1 -0
- data/spec/support/models/eraser.rb +1 -0
- data/spec/support/models/even.rb +1 -0
- data/spec/support/models/event.rb +1 -0
- data/spec/support/models/exhibition.rb +1 -0
- data/spec/support/models/exhibitor.rb +1 -0
- data/spec/support/models/explosion.rb +1 -0
- data/spec/support/models/eye.rb +1 -0
- data/spec/support/models/eye_bowl.rb +1 -0
- data/spec/support/models/face.rb +1 -0
- data/spec/support/models/fanatic.rb +1 -0
- data/spec/support/models/favorite.rb +8 -1
- data/spec/support/models/filesystem.rb +1 -0
- data/spec/support/models/fire_hydrant.rb +1 -0
- data/spec/support/models/firefox.rb +1 -0
- data/spec/support/models/fish.rb +1 -0
- data/spec/support/models/folder.rb +1 -0
- data/spec/support/models/folder_item.rb +1 -0
- data/spec/support/models/fruits.rb +1 -0
- data/spec/support/models/game.rb +1 -0
- data/spec/support/models/ghost.rb +1 -0
- data/spec/support/models/guitar.rb +1 -0
- data/spec/support/models/hole.rb +1 -0
- data/spec/support/models/home.rb +1 -0
- data/spec/support/models/house.rb +1 -0
- data/spec/support/models/html_writer.rb +1 -0
- data/spec/support/models/id_key.rb +1 -0
- data/spec/support/models/idnodef.rb +1 -0
- data/spec/support/models/image.rb +1 -0
- data/spec/support/models/implant.rb +1 -0
- data/spec/support/models/instrument.rb +1 -0
- data/spec/support/models/item.rb +1 -0
- data/spec/support/models/jar.rb +1 -0
- data/spec/support/models/kaleidoscope.rb +1 -0
- data/spec/support/models/kangaroo.rb +1 -0
- data/spec/support/models/label.rb +1 -0
- data/spec/support/models/language.rb +1 -0
- data/spec/support/models/lat_lng.rb +1 -6
- data/spec/support/models/league.rb +1 -0
- data/spec/support/models/learner.rb +1 -0
- data/spec/support/models/line_item.rb +1 -0
- data/spec/support/models/location.rb +1 -0
- data/spec/support/models/login.rb +1 -0
- data/spec/support/models/manufacturer.rb +1 -0
- data/spec/support/models/meat.rb +1 -0
- data/spec/support/models/membership.rb +1 -0
- data/spec/support/models/message.rb +1 -0
- data/spec/support/models/minim.rb +1 -0
- data/spec/support/models/mixed_drink.rb +1 -0
- data/spec/support/models/mop.rb +1 -0
- data/spec/support/models/movie.rb +1 -0
- data/spec/support/models/my_hash.rb +1 -0
- data/spec/support/models/name.rb +1 -0
- data/spec/support/models/name_only.rb +1 -0
- data/spec/support/models/node.rb +1 -0
- data/spec/support/models/note.rb +1 -0
- data/spec/support/models/nut.rb +1 -0
- data/spec/support/models/odd.rb +1 -0
- data/spec/support/models/order.rb +1 -0
- data/spec/support/models/ordered_post.rb +1 -0
- data/spec/support/models/ordered_preference.rb +1 -0
- data/spec/support/models/oscar.rb +1 -0
- data/spec/support/models/other_owner_object.rb +1 -0
- data/spec/support/models/override.rb +1 -0
- data/spec/support/models/ownable.rb +1 -0
- data/spec/support/models/owner.rb +1 -0
- data/spec/support/models/pack.rb +1 -0
- data/spec/support/models/page.rb +1 -0
- data/spec/support/models/page_question.rb +1 -0
- data/spec/support/models/palette.rb +1 -0
- data/spec/support/models/parent.rb +1 -0
- data/spec/support/models/parent_doc.rb +1 -0
- data/spec/support/models/passport.rb +1 -0
- data/spec/support/models/patient.rb +1 -0
- data/spec/support/models/pdf_writer.rb +1 -0
- data/spec/support/models/pencil.rb +1 -0
- data/spec/support/models/person.rb +1 -0
- data/spec/support/models/pet.rb +1 -0
- data/spec/support/models/pet_owner.rb +1 -0
- data/spec/support/models/phone.rb +1 -0
- data/spec/support/models/piano.rb +1 -0
- data/spec/support/models/pizza.rb +1 -0
- data/spec/support/models/player.rb +1 -0
- data/spec/support/models/post.rb +1 -0
- data/spec/support/models/post_genre.rb +1 -0
- data/spec/support/models/powerup.rb +1 -0
- data/spec/support/models/preference.rb +1 -0
- data/spec/support/models/princess.rb +1 -0
- data/spec/support/models/product.rb +1 -0
- data/spec/support/models/profile.rb +1 -0
- data/spec/support/models/pronunciation.rb +1 -0
- data/spec/support/models/pub.rb +1 -0
- data/spec/support/models/publication/encyclopedia.rb +1 -0
- data/spec/support/models/publication/review.rb +1 -0
- data/spec/support/models/publication.rb +1 -0
- data/spec/support/models/purchase.rb +1 -0
- data/spec/support/models/purchased_item.rb +1 -0
- data/spec/support/models/question.rb +1 -0
- data/spec/support/models/quiz.rb +1 -0
- data/spec/support/models/rating.rb +1 -0
- data/spec/support/models/record.rb +1 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/role.rb +1 -0
- data/spec/support/models/root_category.rb +1 -0
- data/spec/support/models/sandbox/app/models/app_models_message.rb +4 -0
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_user.rb +4 -0
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
- data/spec/support/models/sandwich.rb +1 -0
- data/spec/support/models/scheduler.rb +1 -0
- data/spec/support/models/school.rb +1 -0
- data/spec/support/models/scribe.rb +1 -0
- data/spec/support/models/sealer.rb +1 -0
- data/spec/support/models/seat.rb +1 -0
- data/spec/support/models/seo.rb +1 -0
- data/spec/support/models/series.rb +1 -0
- data/spec/support/models/server.rb +1 -0
- data/spec/support/models/service.rb +1 -0
- data/spec/support/models/shape.rb +1 -0
- data/spec/support/models/shelf.rb +1 -0
- data/spec/support/models/shield.rb +1 -0
- data/spec/support/models/shipment_address.rb +1 -0
- data/spec/support/models/shipping_container.rb +1 -0
- data/spec/support/models/shipping_pack.rb +1 -0
- data/spec/support/models/shirt.rb +1 -0
- data/spec/support/models/shop.rb +1 -0
- data/spec/support/models/short_agent.rb +1 -0
- data/spec/support/models/short_quiz.rb +1 -0
- data/spec/support/models/simple.rb +1 -0
- data/spec/support/models/slave.rb +1 -0
- data/spec/support/models/song.rb +1 -0
- data/spec/support/models/sound.rb +1 -0
- data/spec/support/models/spacer.rb +1 -0
- data/spec/support/models/square.rb +1 -0
- data/spec/support/models/staff.rb +1 -0
- data/spec/support/models/store_as_dup_test1.rb +1 -0
- data/spec/support/models/store_as_dup_test2.rb +1 -0
- data/spec/support/models/store_as_dup_test3.rb +1 -0
- data/spec/support/models/store_as_dup_test4.rb +1 -0
- data/spec/support/models/strategy.rb +1 -0
- data/spec/support/models/student.rb +1 -0
- data/spec/support/models/sub_item.rb +1 -0
- data/spec/support/models/subscription.rb +1 -0
- data/spec/support/models/survey.rb +1 -0
- data/spec/support/models/symptom.rb +1 -0
- data/spec/support/models/system_role.rb +1 -0
- data/spec/support/models/tag.rb +1 -0
- data/spec/support/models/target.rb +1 -0
- data/spec/support/models/template.rb +1 -0
- data/spec/support/models/thing.rb +1 -0
- data/spec/support/models/threadlocker.rb +1 -0
- data/spec/support/models/title.rb +1 -0
- data/spec/support/models/tool.rb +1 -0
- data/spec/support/models/topping.rb +1 -0
- data/spec/support/models/toy.rb +1 -0
- data/spec/support/models/track.rb +1 -0
- data/spec/support/models/translation.rb +1 -0
- data/spec/support/models/tree.rb +1 -0
- data/spec/support/models/truck.rb +1 -0
- data/spec/support/models/updatable.rb +1 -0
- data/spec/support/models/user.rb +1 -0
- data/spec/support/models/user_account.rb +1 -0
- data/spec/support/models/validation_callback.rb +1 -0
- data/spec/support/models/vehicle.rb +1 -0
- data/spec/support/models/version.rb +1 -0
- data/spec/support/models/vertex.rb +1 -0
- data/spec/support/models/vet_visit.rb +1 -0
- data/spec/support/models/video.rb +1 -0
- data/spec/support/models/video_game.rb +1 -0
- data/spec/support/models/washer.rb +1 -0
- data/spec/support/models/weapon.rb +1 -0
- data/spec/support/models/wiki_page.rb +1 -0
- data/spec/support/models/word.rb +1 -0
- data/spec/support/models/word_origin.rb +1 -0
- data/spec/support/models/writer.rb +1 -0
- data/spec/support/rails_mock.rb +32 -0
- data/spec/support/shared/time.rb +3 -21
- data/spec/support/sinatra_mock.rb +7 -0
- data/spec/support/spec_config.rb +30 -9
- data.tar.gz.sig +0 -0
- metadata +127 -57
- metadata.gz.sig +1 -0
- data/lib/mongoid/association/referenced/eager.rb +0 -163
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -113
- data/lib/mongoid/contextual/geo_near.rb +0 -236
- data/lib/mongoid/errors/in_memory_regexp_timeout.rb +0 -26
- data/lib/mongoid/errors/invalid_session_use.rb +0 -21
- data/lib/mongoid/errors/invalid_storage_parent.rb +0 -27
- data/lib/mongoid/field_readable.rb +0 -70
- data/lib/mongoid/matcher/regexp_budget.rb +0 -389
- data/lib/mongoid/query_cache.rb +0 -68
- data/lib/mongoid/validatable/numericality.rb +0 -19
- data/spec/integration/matcher_regexp_timeout_spec.rb +0 -215
- data/spec/integration/query_operator_guard_spec.rb +0 -89
- data/spec/mongoid/contextual/geo_near_spec.rb +0 -471
- data/spec/mongoid/extensions_spec.rb +0 -43
- data/spec/mongoid/matcher/regexp_budget_spec.rb +0 -570
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -50
- data/spec/mongoid/query_cache_spec.rb +0 -865
- data/spec/shared/CANDIDATE.md +0 -28
- data/spec/shared/lib/mrss/release/candidate.rb +0 -281
- data/spec/shared/lib/mrss/release/product_data.rb +0 -144
- data/spec/shared/lib/tasks/candidate.rake +0 -64
|
@@ -1,18 +1,60 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# TODO: consider refactoring this Proxy class, to satisfy the following
|
|
4
|
+
# cops...
|
|
5
|
+
# rubocop:disable Metrics/ClassLength
|
|
3
6
|
module Mongoid
|
|
4
7
|
module Association
|
|
5
8
|
module Referenced
|
|
6
9
|
class HasMany
|
|
7
|
-
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
+
# Transparent proxy for has_many associations.
|
|
11
|
+
# An instance of this class is returned when calling the
|
|
12
|
+
# association getter method on the subject document. This class
|
|
13
|
+
# inherits from Mongoid::Association::Proxy and forwards most of its
|
|
14
|
+
# methods to the target of the association, i.e. the array of
|
|
15
|
+
# documents on the opposite-side collection which must be loaded.
|
|
10
16
|
class Proxy < Association::Many
|
|
11
17
|
extend Forwardable
|
|
12
18
|
|
|
19
|
+
# class-level methods for HasMany::Proxy
|
|
20
|
+
module ClassMethods
|
|
21
|
+
def eager_loader(association, docs)
|
|
22
|
+
Eager.new(association, docs)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Returns true if the association is an embedded one. In this case
|
|
26
|
+
# always false.
|
|
27
|
+
#
|
|
28
|
+
# @example Is this association embedded?
|
|
29
|
+
# Referenced::Many.embedded?
|
|
30
|
+
#
|
|
31
|
+
# @return [ false ] Always false.
|
|
32
|
+
def embedded?
|
|
33
|
+
false
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
extend ClassMethods
|
|
38
|
+
|
|
13
39
|
def_delegator :criteria, :count
|
|
14
40
|
def_delegators :_target, :first, :in_memory, :last, :reset, :uniq
|
|
15
41
|
|
|
42
|
+
# Instantiate a new references_many association. Will set the foreign key
|
|
43
|
+
# and the base on the inverse object.
|
|
44
|
+
#
|
|
45
|
+
# @example Create the new association.
|
|
46
|
+
# Referenced::Many.new(base, target, association)
|
|
47
|
+
#
|
|
48
|
+
# @param [ Document ] base The document this association hangs off of.
|
|
49
|
+
# @param [ Array<Document> ] target The target of the association.
|
|
50
|
+
# @param [ Mongoid::Association::Relatable ] association The association metadata.
|
|
51
|
+
def initialize(base, target, association)
|
|
52
|
+
enum = HasMany::Enumerable.new(target, base, association)
|
|
53
|
+
super(base, enum, association) do
|
|
54
|
+
raise_mixed if klass.embedded? && !klass.cyclic?
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
16
58
|
# Appends a document or array of documents to the association. Will set
|
|
17
59
|
# the parent and update the index in the process.
|
|
18
60
|
#
|
|
@@ -31,14 +73,15 @@ module Mongoid
|
|
|
31
73
|
def <<(*args)
|
|
32
74
|
docs = args.flatten
|
|
33
75
|
return concat(docs) if docs.size > 1
|
|
34
|
-
|
|
76
|
+
|
|
77
|
+
if (doc = docs.first)
|
|
35
78
|
append(doc)
|
|
36
79
|
doc.save if persistable? && !_assigning? && !doc.validated?
|
|
37
80
|
end
|
|
38
81
|
self
|
|
39
82
|
end
|
|
40
83
|
|
|
41
|
-
alias
|
|
84
|
+
alias push <<
|
|
42
85
|
|
|
43
86
|
# Appends an array of documents to the association. Performs a batch
|
|
44
87
|
# insert of the documents instead of persisting one at a time.
|
|
@@ -53,9 +96,11 @@ module Mongoid
|
|
|
53
96
|
docs, inserts = [], []
|
|
54
97
|
documents.each do |doc|
|
|
55
98
|
next unless doc
|
|
99
|
+
|
|
56
100
|
append(doc)
|
|
57
101
|
save_or_delay(doc, docs, inserts) if persistable?
|
|
58
102
|
end
|
|
103
|
+
|
|
59
104
|
persist_delayed(docs, inserts)
|
|
60
105
|
self
|
|
61
106
|
end
|
|
@@ -71,16 +116,16 @@ module Mongoid
|
|
|
71
116
|
#
|
|
72
117
|
# @return [ Document ] The new document.
|
|
73
118
|
def build(attributes = {}, type = nil)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
119
|
+
Factory.execute_build(type || klass, attributes, execute_callbacks: false).tap do |doc|
|
|
120
|
+
append(doc)
|
|
121
|
+
doc.apply_post_processed_defaults
|
|
122
|
+
yield doc if block_given?
|
|
123
|
+
doc.run_pending_callbacks
|
|
124
|
+
doc.run_callbacks(:build) { doc }
|
|
125
|
+
end
|
|
81
126
|
end
|
|
82
127
|
|
|
83
|
-
alias
|
|
128
|
+
alias new build
|
|
84
129
|
|
|
85
130
|
# Delete the document from the association. This will set the foreign key
|
|
86
131
|
# on the document to nil. If the dependent options on the association are
|
|
@@ -94,14 +139,14 @@ module Mongoid
|
|
|
94
139
|
# @return [ Document ] The matching document.
|
|
95
140
|
def delete(document)
|
|
96
141
|
execute_callbacks_around(:remove, document) do
|
|
97
|
-
_target.delete(document) do |doc|
|
|
142
|
+
result = _target.delete(document) do |doc|
|
|
98
143
|
if doc
|
|
99
144
|
unbind_one(doc)
|
|
100
|
-
cascade!(doc)
|
|
145
|
+
cascade!(doc) unless _assigning?
|
|
101
146
|
end
|
|
102
|
-
end.tap do
|
|
103
|
-
reset_unloaded
|
|
104
147
|
end
|
|
148
|
+
|
|
149
|
+
result.tap { reset_unloaded }
|
|
105
150
|
end
|
|
106
151
|
end
|
|
107
152
|
|
|
@@ -152,9 +197,9 @@ module Mongoid
|
|
|
152
197
|
# end
|
|
153
198
|
#
|
|
154
199
|
# @return [ Array<Document> ] The loaded docs.
|
|
155
|
-
def each
|
|
156
|
-
if
|
|
157
|
-
_target.each
|
|
200
|
+
def each(&block)
|
|
201
|
+
if block
|
|
202
|
+
_target.each(&block)
|
|
158
203
|
else
|
|
159
204
|
to_enum
|
|
160
205
|
end
|
|
@@ -213,7 +258,8 @@ module Mongoid
|
|
|
213
258
|
# later.
|
|
214
259
|
#
|
|
215
260
|
# @param [ [ Object | Array<Object> ]... ] *args The ids.
|
|
216
|
-
# @param
|
|
261
|
+
# @param &block Optional block to pass.
|
|
262
|
+
# @yield [ Object ] Yields each enumerable element to the block.
|
|
217
263
|
#
|
|
218
264
|
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
|
219
265
|
def find(*args, &block)
|
|
@@ -222,22 +268,6 @@ module Mongoid
|
|
|
222
268
|
matching
|
|
223
269
|
end
|
|
224
270
|
|
|
225
|
-
# Instantiate a new references_many association. Will set the foreign key
|
|
226
|
-
# and the base on the inverse object.
|
|
227
|
-
#
|
|
228
|
-
# @example Create the new association.
|
|
229
|
-
# Referenced::Many.new(base, target, association)
|
|
230
|
-
#
|
|
231
|
-
# @param [ Document ] base The document this association hangs off of.
|
|
232
|
-
# @param [ Array<Document> ] target The target of the association.
|
|
233
|
-
# @param [ Association ] association The association metadata.
|
|
234
|
-
def initialize(base, target, association)
|
|
235
|
-
enum = HasMany::Enumerable.new(target, base, association)
|
|
236
|
-
init(base, enum, association) do
|
|
237
|
-
raise_mixed if klass.embedded? && !klass.cyclic?
|
|
238
|
-
end
|
|
239
|
-
end
|
|
240
|
-
|
|
241
271
|
# Removes all associations between the base document and the target
|
|
242
272
|
# documents by deleting the foreign keys and the references, orphaning
|
|
243
273
|
# the target documents in the process.
|
|
@@ -252,7 +282,7 @@ module Mongoid
|
|
|
252
282
|
end
|
|
253
283
|
end
|
|
254
284
|
|
|
255
|
-
alias
|
|
285
|
+
alias nullify_all nullify
|
|
256
286
|
|
|
257
287
|
# Clear the association. Will delete the documents from the db if they are
|
|
258
288
|
# already persisted.
|
|
@@ -262,27 +292,27 @@ module Mongoid
|
|
|
262
292
|
#
|
|
263
293
|
# @return [ Many ] The association emptied.
|
|
264
294
|
def purge
|
|
265
|
-
unless _association.destructive?
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
after_remove_error = e
|
|
278
|
-
end
|
|
295
|
+
return nullify unless _association.destructive?
|
|
296
|
+
|
|
297
|
+
after_remove_error = nil
|
|
298
|
+
criteria.delete_all
|
|
299
|
+
many = _target.clear do |doc|
|
|
300
|
+
execute_callback :before_remove, doc
|
|
301
|
+
unbind_one(doc)
|
|
302
|
+
doc.destroyed = true
|
|
303
|
+
begin
|
|
304
|
+
execute_callback :after_remove, doc
|
|
305
|
+
rescue StandardError => e
|
|
306
|
+
after_remove_error = e
|
|
279
307
|
end
|
|
280
|
-
raise after_remove_error if after_remove_error
|
|
281
|
-
many
|
|
282
308
|
end
|
|
309
|
+
|
|
310
|
+
raise after_remove_error if after_remove_error
|
|
311
|
+
|
|
312
|
+
many
|
|
283
313
|
end
|
|
284
314
|
|
|
285
|
-
alias
|
|
315
|
+
alias clear purge
|
|
286
316
|
|
|
287
317
|
# Substitutes the supplied target documents for the existing documents
|
|
288
318
|
# in the association. If the new target is nil, perform the necessary
|
|
@@ -297,7 +327,7 @@ module Mongoid
|
|
|
297
327
|
def substitute(replacement)
|
|
298
328
|
if replacement
|
|
299
329
|
new_docs, docs = replacement.compact, []
|
|
300
|
-
new_ids = new_docs.map
|
|
330
|
+
new_ids = new_docs.map(&:_id)
|
|
301
331
|
remove_not_in(new_ids)
|
|
302
332
|
new_docs.each do |doc|
|
|
303
333
|
docs.push(doc) if doc.send(foreign_key) != _base.send(_association.primary_key)
|
|
@@ -363,9 +393,9 @@ module Mongoid
|
|
|
363
393
|
# association is persisted.
|
|
364
394
|
def already_related?(document)
|
|
365
395
|
document.persisted? &&
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
396
|
+
document._association &&
|
|
397
|
+
document.respond_to?(document._association.foreign_key) &&
|
|
398
|
+
document.__send__(document._association.foreign_key) == _base._id
|
|
369
399
|
end
|
|
370
400
|
|
|
371
401
|
# Instantiate the binding associated with this association.
|
|
@@ -409,15 +439,15 @@ module Mongoid
|
|
|
409
439
|
#
|
|
410
440
|
# @return [ true | false ] If the association is destructive.
|
|
411
441
|
def cascade!(document)
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
442
|
+
return unless persistable?
|
|
443
|
+
|
|
444
|
+
case _association.dependent
|
|
445
|
+
when :delete_all
|
|
446
|
+
document.delete
|
|
447
|
+
when :destroy
|
|
448
|
+
document.destroy
|
|
449
|
+
else
|
|
450
|
+
document.save
|
|
421
451
|
end
|
|
422
452
|
end
|
|
423
453
|
|
|
@@ -428,9 +458,13 @@ module Mongoid
|
|
|
428
458
|
#
|
|
429
459
|
# @param [ Symbol | String ] name The name of the method.
|
|
430
460
|
# @param [ Object... ] *args The method args
|
|
431
|
-
# @param
|
|
461
|
+
# @param &block Optional block to pass.
|
|
432
462
|
#
|
|
433
463
|
# @return [ Criteria | Object ] A Criteria or return value from the target.
|
|
464
|
+
#
|
|
465
|
+
# TODO: make sure we are consistingly using respond_to_missing
|
|
466
|
+
# anywhere we define method_missing.
|
|
467
|
+
# rubocop:disable Style/MissingRespondToMissing
|
|
434
468
|
ruby2_keywords def method_missing(name, *args, &block)
|
|
435
469
|
if _target.respond_to?(name)
|
|
436
470
|
_target.send(name, *args, &block)
|
|
@@ -440,6 +474,7 @@ module Mongoid
|
|
|
440
474
|
end
|
|
441
475
|
end
|
|
442
476
|
end
|
|
477
|
+
# rubocop:enable Style/MissingRespondToMissing
|
|
443
478
|
|
|
444
479
|
# Persist all the delayed batch inserts.
|
|
445
480
|
#
|
|
@@ -451,13 +486,13 @@ module Mongoid
|
|
|
451
486
|
# @param [ Array<Document> ] docs The delayed inserts.
|
|
452
487
|
# @param [ Array<Hash> ] inserts The raw insert document.
|
|
453
488
|
def persist_delayed(docs, inserts)
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
489
|
+
return if docs.empty?
|
|
490
|
+
|
|
491
|
+
collection.insert_many(inserts, session: _session)
|
|
492
|
+
docs.each do |doc|
|
|
493
|
+
doc.new_record = false
|
|
494
|
+
doc.run_after_callbacks(:create, :save) unless _association.autosave?
|
|
495
|
+
doc.post_persist
|
|
461
496
|
end
|
|
462
497
|
end
|
|
463
498
|
|
|
@@ -468,7 +503,7 @@ module Mongoid
|
|
|
468
503
|
#
|
|
469
504
|
# @return [ true | false ] If the association is persistable.
|
|
470
505
|
def persistable?
|
|
471
|
-
!_binding? && (_creating? || _base.persisted? && !_building?)
|
|
506
|
+
!_binding? && (_creating? || (_base.persisted? && !_building?))
|
|
472
507
|
end
|
|
473
508
|
|
|
474
509
|
# Deletes all related documents from the database given the supplied
|
|
@@ -486,111 +521,12 @@ module Mongoid
|
|
|
486
521
|
# @return [ Integer ] The number of documents deleted.
|
|
487
522
|
def remove_all(conditions = nil, method = :delete_all)
|
|
488
523
|
selector = conditions || {}
|
|
489
|
-
selector.merge!(criteria.selector)
|
|
490
|
-
|
|
491
|
-
# Scanning before the delete means scanning only what is already in
|
|
492
|
-
# memory, so it is only done where there is a pattern whose cost has
|
|
493
|
-
# to be bounded. Everywhere else the delete comes first and the scan
|
|
494
|
-
# sees the survivors, which is what this association has always
|
|
495
|
-
# done.
|
|
496
|
-
#
|
|
497
|
-
# The limit is read once and carried into whichever branch is taken.
|
|
498
|
-
# Letting the branch below ask again would read it a second time,
|
|
499
|
-
# across a server round trip, and a limit that had become positive
|
|
500
|
-
# in the meantime would put a deadline on the delete_if -- a query,
|
|
501
|
-
# and an unbind of every match -- which is the arrangement this
|
|
502
|
-
# branch exists to avoid.
|
|
503
|
-
limit = Matcher::RegexpBudget.limit_for(selector)
|
|
504
|
-
return remove_all_bounded(selector, method, limit) if limit
|
|
505
|
-
|
|
506
|
-
removed = klass.send(method, selector)
|
|
507
|
-
|
|
508
|
-
# No scope around this. The scan runs after the delete, so the
|
|
509
|
-
# association this loads comes back holding only what the delete did
|
|
510
|
-
# not match, and there is no pattern here to bound in any case.
|
|
511
|
-
# Opening a scope would save _matches? from deciding once per
|
|
512
|
-
# document -- 0.48us against 1.74us for the match itself -- but a
|
|
513
|
-
# scope with nothing to bound suppresses that decision for
|
|
514
|
-
# everything nested inside it, and loading the association runs
|
|
515
|
-
# find callbacks. A pattern in a selector one of those evaluates
|
|
516
|
-
# would go unguarded, which costs more than the saving is worth on a
|
|
517
|
-
# path that has just made two round trips.
|
|
524
|
+
removed = klass.send(method, selector.merge!(criteria.selector))
|
|
518
525
|
_target.delete_if do |doc|
|
|
519
526
|
doc._matches?(selector).tap do |b|
|
|
520
527
|
unbind_one(doc) if b
|
|
521
528
|
end
|
|
522
529
|
end
|
|
523
|
-
|
|
524
|
-
removed
|
|
525
|
-
end
|
|
526
|
-
|
|
527
|
-
# Deletes all related documents matching a selector that carries a
|
|
528
|
-
# regular expression, with the whole scan under one regexp budget.
|
|
529
|
-
#
|
|
530
|
-
# The scan runs before anything is deleted, so a budget that runs out
|
|
531
|
-
# leaves both the database and the association untouched rather than
|
|
532
|
-
# reporting a failure for a delete that has already happened. It also
|
|
533
|
-
# means the budget is closed by the time the association is mutated,
|
|
534
|
-
# so where the budget is enforced with Timeout there is no window for
|
|
535
|
-
# the exception to land in the middle of an unbind.
|
|
536
|
-
#
|
|
537
|
-
# @param [ Hash ] selector The selector to delete with.
|
|
538
|
-
# @param [ Symbol ] method The deletion method to call.
|
|
539
|
-
# @param [ Float ] limit The seconds the scan may spend, as read by
|
|
540
|
-
# the caller when it chose this path.
|
|
541
|
-
#
|
|
542
|
-
# @return [ Integer ] The number of documents deleted.
|
|
543
|
-
def remove_all_bounded(selector, method, limit)
|
|
544
|
-
# Only what the association already holds. Iterating it instead
|
|
545
|
-
# would load the whole association before the delete, and for a
|
|
546
|
-
# broad pattern that is every document the association has: /.*/ is
|
|
547
|
-
# both the cheapest pattern an attacker can supply and the one that
|
|
548
|
-
# matches everything, so bounding the cost of the matching would
|
|
549
|
-
# have been paid for with an unbounded amount of memory. Nothing is
|
|
550
|
-
# missed by not loading, because the server evaluates the same
|
|
551
|
-
# selector for the delete itself.
|
|
552
|
-
#
|
|
553
|
-
# It also means the scan runs no query, so no deadline of ours can
|
|
554
|
-
# land on one. Where the budget is enforced with Timeout, covering
|
|
555
|
-
# a query would report a slow network as a regexp timeout and could
|
|
556
|
-
# deliver the asynchronous exception inside the driver's socket
|
|
557
|
-
# read.
|
|
558
|
-
documents = _target.in_memory
|
|
559
|
-
|
|
560
|
-
matching = Matcher::RegexpBudget.open_with(limit) do
|
|
561
|
-
documents.select { |doc| doc._matches?(selector) }
|
|
562
|
-
end
|
|
563
|
-
|
|
564
|
-
removed = klass.send(method, selector)
|
|
565
|
-
|
|
566
|
-
# The ids are already known to be in memory, so the loaded and added
|
|
567
|
-
# documents can be dropped directly. Enumerable#delete would look
|
|
568
|
-
# each one up by id and stop at the first hash that has it, which
|
|
569
|
-
# removes the wrong instance when both hashes hold one for the same
|
|
570
|
-
# id. Enumerable#delete_if drops it from both, as this does, but
|
|
571
|
-
# only after load_all!, which is the load this scan exists to avoid.
|
|
572
|
-
#
|
|
573
|
-
# Which documents get unbound has always depended on which ones
|
|
574
|
-
# happened to be in memory, and scanning only what is in memory
|
|
575
|
-
# keeps that. It matters for has_and_belongs_to_many, whose
|
|
576
|
-
# unbind_one pulls the id out of the foreign key array on _base and
|
|
577
|
-
# marks it dirty; the scan used to run after the delete, against an
|
|
578
|
-
# association that a cold proxy had just reloaded as holding only
|
|
579
|
-
# the survivors, so nothing matched and nothing was unbound.
|
|
580
|
-
#
|
|
581
|
-
# TODO: unbinding should not depend on what was in memory. Every
|
|
582
|
-
# matched document leaves the association, so every one of them
|
|
583
|
-
# should be unbound, which would also stop _base's foreign key
|
|
584
|
-
# array from keeping ids that no longer resolve. That is a
|
|
585
|
-
# behaviour change for has_and_belongs_to_many and belongs in a
|
|
586
|
-
# ticket of its own, with a release note; it should not ride along
|
|
587
|
-
# on this one.
|
|
588
|
-
matching.each do |doc|
|
|
589
|
-
unbind_one(doc)
|
|
590
|
-
_target._loaded.delete(doc._id)
|
|
591
|
-
_target._added.delete(doc._id)
|
|
592
|
-
end
|
|
593
|
-
|
|
594
530
|
removed
|
|
595
531
|
end
|
|
596
532
|
|
|
@@ -603,20 +539,29 @@ module Mongoid
|
|
|
603
539
|
# @param [ Array<Object> ] ids The ids.
|
|
604
540
|
def remove_not_in(ids)
|
|
605
541
|
removed = criteria.not_in(_id: ids)
|
|
542
|
+
|
|
543
|
+
update_or_delete_all(removed)
|
|
544
|
+
|
|
545
|
+
in_memory.each do |doc|
|
|
546
|
+
next if ids.include?(doc._id)
|
|
547
|
+
|
|
548
|
+
unbind_one(doc)
|
|
549
|
+
_target.delete(doc)
|
|
550
|
+
doc.destroyed = true if _association.destructive?
|
|
551
|
+
end
|
|
552
|
+
end
|
|
553
|
+
|
|
554
|
+
# If the association is destructive, the matching documents will
|
|
555
|
+
# be removed. Otherwise, their foreign keys will be set to nil.
|
|
556
|
+
#
|
|
557
|
+
# @param [ Criteria ] removed The criteria for the documents to
|
|
558
|
+
# remove.
|
|
559
|
+
def update_or_delete_all(removed)
|
|
606
560
|
if _association.destructive?
|
|
607
561
|
removed.delete_all
|
|
608
562
|
else
|
|
609
563
|
removed.update_all(foreign_key => nil)
|
|
610
564
|
end
|
|
611
|
-
in_memory.each do |doc|
|
|
612
|
-
if !ids.include?(doc._id)
|
|
613
|
-
unbind_one(doc)
|
|
614
|
-
_target.delete(doc)
|
|
615
|
-
if _association.destructive?
|
|
616
|
-
doc.destroyed = true
|
|
617
|
-
end
|
|
618
|
-
end
|
|
619
|
-
end
|
|
620
565
|
end
|
|
621
566
|
|
|
622
567
|
# Save a persisted document immediately or delay a new document for
|
|
@@ -638,26 +583,9 @@ module Mongoid
|
|
|
638
583
|
doc.save
|
|
639
584
|
end
|
|
640
585
|
end
|
|
641
|
-
|
|
642
|
-
class << self
|
|
643
|
-
|
|
644
|
-
def eager_loader(association, docs)
|
|
645
|
-
Eager.new(association, docs)
|
|
646
|
-
end
|
|
647
|
-
|
|
648
|
-
# Returns true if the association is an embedded one. In this case
|
|
649
|
-
# always false.
|
|
650
|
-
#
|
|
651
|
-
# @example Is this association embedded?
|
|
652
|
-
# Referenced::Many.embedded?
|
|
653
|
-
#
|
|
654
|
-
# @return [ false ] Always false.
|
|
655
|
-
def embedded?
|
|
656
|
-
false
|
|
657
|
-
end
|
|
658
|
-
end
|
|
659
586
|
end
|
|
660
587
|
end
|
|
661
588
|
end
|
|
662
589
|
end
|
|
663
590
|
end
|
|
591
|
+
# rubocop:enable Metrics/ClassLength
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# rubocop:todo all
|
|
2
3
|
|
|
3
4
|
require 'mongoid/association/referenced/has_many/binding'
|
|
4
5
|
require 'mongoid/association/referenced/has_many/buildable'
|
|
@@ -46,7 +47,7 @@ module Mongoid
|
|
|
46
47
|
|
|
47
48
|
# The list of association complements.
|
|
48
49
|
#
|
|
49
|
-
# @return [ Array<Association> ] The association complements.
|
|
50
|
+
# @return [ Array<Mongoid::Association::Relatable> ] The association complements.
|
|
50
51
|
def relation_complements
|
|
51
52
|
@relation_complements ||= [ Referenced::BelongsTo ].freeze
|
|
52
53
|
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# rubocop:todo all
|
|
2
3
|
|
|
3
4
|
module Mongoid
|
|
4
5
|
module Association
|
|
5
6
|
module Referenced
|
|
6
|
-
|
|
7
7
|
class HasOne
|
|
8
|
-
|
|
9
|
-
class Eager < Association::
|
|
8
|
+
# Eager class for has_one associations.
|
|
9
|
+
class Eager < Association::Eager
|
|
10
10
|
|
|
11
11
|
private
|
|
12
12
|
|
|
@@ -4,10 +4,32 @@ module Mongoid
|
|
|
4
4
|
module Association
|
|
5
5
|
module Referenced
|
|
6
6
|
class HasOne
|
|
7
|
-
|
|
8
|
-
#
|
|
9
|
-
#
|
|
7
|
+
# Transparent proxy for has_one associations.
|
|
8
|
+
# An instance of this class is returned when calling the
|
|
9
|
+
# association getter method on the subject document. This class
|
|
10
|
+
# inherits from Mongoid::Association::Proxy and forwards most of
|
|
11
|
+
# its methods to the target of the association, i.e. the
|
|
12
|
+
# document on the opposite-side collection which must be loaded.
|
|
10
13
|
class Proxy < Association::One
|
|
14
|
+
# class-level methods for the HasOne::Proxy
|
|
15
|
+
module ClassMethods
|
|
16
|
+
def eager_loader(association, docs)
|
|
17
|
+
Eager.new(association, docs)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Returns true if the association is an embedded one. In this case
|
|
21
|
+
# always false.
|
|
22
|
+
#
|
|
23
|
+
# @example Is this association embedded?
|
|
24
|
+
# Referenced::One.embedded?
|
|
25
|
+
#
|
|
26
|
+
# @return [ false ] Always false.
|
|
27
|
+
def embedded?
|
|
28
|
+
false
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
extend ClassMethods
|
|
11
33
|
|
|
12
34
|
# Instantiate a new references_one association. Will set the foreign key
|
|
13
35
|
# and the base on the inverse object.
|
|
@@ -17,9 +39,9 @@ module Mongoid
|
|
|
17
39
|
#
|
|
18
40
|
# @param [ Document ] base The document this association hangs off of.
|
|
19
41
|
# @param [ Document ] target The target (child) of the association.
|
|
20
|
-
# @param [ Association ] association The association metadata.
|
|
42
|
+
# @param [ Mongoid::Association::Relatable ] association The association metadata.
|
|
21
43
|
def initialize(base, target, association)
|
|
22
|
-
|
|
44
|
+
super do
|
|
23
45
|
raise_mixed if klass.embedded? && !klass.cyclic?
|
|
24
46
|
characterize_one(_target)
|
|
25
47
|
bind_one
|
|
@@ -49,16 +71,7 @@ module Mongoid
|
|
|
49
71
|
#
|
|
50
72
|
# @return [ One ] The association.
|
|
51
73
|
def substitute(replacement)
|
|
52
|
-
if self != replacement
|
|
53
|
-
unbind_one
|
|
54
|
-
if persistable?
|
|
55
|
-
if _association.destructive?
|
|
56
|
-
send(_association.dependent)
|
|
57
|
-
else
|
|
58
|
-
save if persisted?
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
74
|
+
prepare_for_replacement if self != replacement
|
|
62
75
|
HasOne::Proxy.new(_base, replacement, _association) if replacement
|
|
63
76
|
end
|
|
64
77
|
|
|
@@ -84,21 +97,17 @@ module Mongoid
|
|
|
84
97
|
_base.persisted? && !_binding? && !_building?
|
|
85
98
|
end
|
|
86
99
|
|
|
87
|
-
|
|
100
|
+
# Takes the necessary steps to prepare for the current document
|
|
101
|
+
# to be replaced by a non-nil substitute.
|
|
102
|
+
def prepare_for_replacement
|
|
103
|
+
unbind_one
|
|
88
104
|
|
|
89
|
-
|
|
90
|
-
Eager.new(association, docs)
|
|
91
|
-
end
|
|
105
|
+
return unless persistable?
|
|
92
106
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
# Referenced::One.embedded?
|
|
98
|
-
#
|
|
99
|
-
# @return [ false ] Always false.
|
|
100
|
-
def embedded?
|
|
101
|
-
false
|
|
107
|
+
if _association.destructive?
|
|
108
|
+
send(_association.dependent)
|
|
109
|
+
elsif persisted?
|
|
110
|
+
save
|
|
102
111
|
end
|
|
103
112
|
end
|
|
104
113
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# rubocop:todo all
|
|
2
3
|
|
|
3
4
|
require 'mongoid/association/referenced/has_one/binding'
|
|
4
5
|
require 'mongoid/association/referenced/has_one/buildable'
|
|
@@ -41,7 +42,7 @@ module Mongoid
|
|
|
41
42
|
|
|
42
43
|
# The list of association complements.
|
|
43
44
|
#
|
|
44
|
-
# @return [ Array<Association> ] The association complements.
|
|
45
|
+
# @return [ Array<Mongoid::Association::Relatable> ] The association complements.
|
|
45
46
|
def relation_complements
|
|
46
47
|
@relation_complements ||= [ Referenced::BelongsTo ].freeze
|
|
47
48
|
end
|
|
@@ -116,6 +117,9 @@ module Mongoid
|
|
|
116
117
|
forced_nil_inverse? || (!!inverse && doc.fields.keys.include?(foreign_key))
|
|
117
118
|
end
|
|
118
119
|
|
|
120
|
+
# Does this association type store the foreign key?
|
|
121
|
+
#
|
|
122
|
+
# @return [ false ] Always false.
|
|
119
123
|
def stores_foreign_key?; false; end
|
|
120
124
|
|
|
121
125
|
# Get the path calculator for the supplied document.
|