mongoid 9.0.11 → 9.1.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
- data/CHANGELOG.md +8 -8
- data/README.md +5 -11
- data/Rakefile +35 -38
- data/lib/config/locales/en.yml +11 -0
- data/lib/mongoid/association/accessors.rb +19 -26
- data/lib/mongoid/association/bindable.rb +43 -45
- data/lib/mongoid/association/builders.rb +18 -15
- data/lib/mongoid/association/constrainable.rb +3 -5
- data/lib/mongoid/association/depending.rb +34 -38
- data/lib/mongoid/association/eager.rb +47 -13
- data/lib/mongoid/association/eager_loadable.rb +152 -24
- data/lib/mongoid/association/embedded/batchable.rb +28 -30
- data/lib/mongoid/association/embedded/cyclic.rb +8 -11
- data/lib/mongoid/association/embedded/eager.rb +1 -6
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +6 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +25 -22
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many.rb +24 -21
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +2 -6
- data/lib/mongoid/association/embedded/embeds_one.rb +20 -18
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +3 -7
- data/lib/mongoid/association/many.rb +75 -3
- data/lib/mongoid/association/marshalable.rb +0 -3
- data/lib/mongoid/association/nested/many.rb +18 -13
- data/lib/mongoid/association/nested/nested_buildable.rb +6 -9
- data/lib/mongoid/association/nested/one.rb +4 -7
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +0 -3
- data/lib/mongoid/association/options.rb +8 -7
- data/lib/mongoid/association/referenced/auto_save.rb +0 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +23 -5
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +1 -3
- data/lib/mongoid/association/referenced/belongs_to.rb +48 -43
- data/lib/mongoid/association/referenced/counter_cache.rb +5 -10
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +8 -4
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +52 -47
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_many/buildable.rb +11 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +107 -38
- data/lib/mongoid/association/referenced/has_many/proxy.rb +10 -6
- data/lib/mongoid/association/referenced/has_many.rb +30 -24
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_one.rb +26 -21
- data/lib/mongoid/association/referenced/syncable.rb +30 -34
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +0 -3
- data/lib/mongoid/association/relatable.rb +69 -66
- data/lib/mongoid/association.rb +12 -15
- data/lib/mongoid/atomic/modifiers.rb +65 -25
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +2 -4
- data/lib/mongoid/atomic/paths/embedded.rb +3 -6
- data/lib/mongoid/atomic/paths/root.rb +1 -4
- data/lib/mongoid/atomic/paths.rb +2 -3
- data/lib/mongoid/atomic.rb +0 -3
- data/lib/mongoid/attributes/dynamic.rb +6 -7
- data/lib/mongoid/attributes/nested.rb +8 -10
- data/lib/mongoid/attributes/projector.rb +7 -20
- data/lib/mongoid/attributes/readonly.rb +6 -11
- data/lib/mongoid/attributes.rb +18 -34
- data/lib/mongoid/cacheable.rb +24 -6
- data/lib/mongoid/clients/factory.rb +12 -15
- data/lib/mongoid/clients/options.rb +2 -5
- data/lib/mongoid/clients/sessions.rb +50 -60
- data/lib/mongoid/clients/storage_options.rb +1 -4
- data/lib/mongoid/clients/validators/storage.rb +2 -3
- data/lib/mongoid/clients/validators.rb +1 -2
- data/lib/mongoid/clients.rb +8 -11
- data/lib/mongoid/collection_configurable.rb +10 -14
- data/lib/mongoid/composable.rb +30 -34
- data/lib/mongoid/config/defaults.rb +7 -4
- data/lib/mongoid/config/encryption.rb +1 -3
- data/lib/mongoid/config/environment.rb +7 -16
- data/lib/mongoid/config/introspection.rb +14 -16
- data/lib/mongoid/config/options.rb +16 -10
- data/lib/mongoid/config/validators/async_query_executor.rb +3 -6
- data/lib/mongoid/config/validators/client.rb +12 -15
- data/lib/mongoid/config/validators/option.rb +3 -5
- data/lib/mongoid/config/validators.rb +3 -4
- data/lib/mongoid/config.rb +132 -42
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -4
- data/lib/mongoid/contextual/aggregable/mongo.rb +20 -22
- data/lib/mongoid/contextual/aggregable/none.rb +2 -4
- data/lib/mongoid/contextual/aggregable.rb +5 -7
- data/lib/mongoid/contextual/atomic.rb +20 -24
- data/lib/mongoid/contextual/command.rb +0 -3
- data/lib/mongoid/contextual/map_reduce.rb +12 -16
- data/lib/mongoid/contextual/memory.rb +72 -65
- data/lib/mongoid/contextual/mongo/documents_loader.rb +2 -3
- data/lib/mongoid/contextual/mongo.rb +169 -85
- data/lib/mongoid/contextual/none.rb +9 -9
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +18 -7
- data/lib/mongoid/copyable.rb +7 -9
- data/lib/mongoid/criteria/findable.rb +5 -7
- data/lib/mongoid/criteria/includable.rb +37 -8
- data/lib/mongoid/criteria/inspectable.rb +2 -5
- data/lib/mongoid/criteria/marshalable.rb +4 -8
- data/lib/mongoid/criteria/modifiable.rb +3 -11
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +34 -37
- data/lib/mongoid/criteria/queryable/aggregable.rb +9 -10
- data/lib/mongoid/criteria/queryable/expandable.rb +4 -9
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -10
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +20 -11
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -11
- data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -8
- data/lib/mongoid/criteria/queryable/extensions/range.rb +6 -9
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -12
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -6
- data/lib/mongoid/criteria/queryable/extensions/string.rb +5 -9
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +2 -12
- data/lib/mongoid/criteria/queryable/extensions.rb +18 -21
- data/lib/mongoid/criteria/queryable/key.rb +12 -18
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +31 -39
- data/lib/mongoid/criteria/queryable/optional.rb +17 -18
- data/lib/mongoid/criteria/queryable/options.rb +20 -9
- data/lib/mongoid/criteria/queryable/pipeline.rb +6 -9
- data/lib/mongoid/criteria/queryable/selectable.rb +131 -193
- data/lib/mongoid/criteria/queryable/selector.rb +20 -29
- data/lib/mongoid/criteria/queryable/smash.rb +1 -6
- data/lib/mongoid/criteria/queryable/storable.rb +20 -39
- data/lib/mongoid/criteria/queryable.rb +25 -15
- data/lib/mongoid/criteria/scopable.rb +5 -11
- data/lib/mongoid/criteria/translator.rb +5 -8
- data/lib/mongoid/criteria.rb +109 -54
- data/lib/mongoid/deprecable.rb +1 -4
- data/lib/mongoid/deprecation.rb +2 -6
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/encryptable.rb +1 -2
- data/lib/mongoid/equality.rb +4 -5
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/attribute_not_loaded.rb +1 -4
- data/lib/mongoid/errors/callback.rb +1 -4
- data/lib/mongoid/errors/create_collection_failure.rb +8 -11
- data/lib/mongoid/errors/criteria_argument_required.rb +2 -5
- data/lib/mongoid/errors/delete_restriction.rb +1 -4
- data/lib/mongoid/errors/document_not_destroyed.rb +1 -4
- data/lib/mongoid/errors/document_not_found.rb +16 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +7 -10
- data/lib/mongoid/errors/empty_config_file.rb +1 -4
- data/lib/mongoid/errors/immutable_attribute.rb +1 -4
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -4
- data/lib/mongoid/errors/invalid_async_query_executor.rb +2 -5
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +2 -5
- data/lib/mongoid/errors/invalid_collection.rb +1 -3
- data/lib/mongoid/errors/invalid_config_file.rb +1 -4
- data/lib/mongoid/errors/invalid_config_option.rb +2 -5
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +6 -10
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +2 -4
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -4
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +1 -4
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +1 -4
- data/lib/mongoid/errors/invalid_expression_operator.rb +3 -7
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_field_option.rb +2 -5
- data/lib/mongoid/errors/invalid_field_type.rb +1 -4
- data/lib/mongoid/errors/invalid_find.rb +1 -4
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -4
- data/lib/mongoid/errors/invalid_includes.rb +3 -6
- data/lib/mongoid/errors/invalid_index.rb +1 -4
- data/lib/mongoid/errors/invalid_options.rb +1 -4
- data/lib/mongoid/errors/invalid_path.rb +1 -4
- data/lib/mongoid/errors/invalid_persistence_option.rb +4 -7
- data/lib/mongoid/errors/invalid_query.rb +6 -11
- data/lib/mongoid/errors/invalid_relation.rb +10 -13
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -7
- data/lib/mongoid/errors/invalid_scope.rb +1 -4
- data/lib/mongoid/errors/invalid_session_nesting.rb +0 -3
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +2 -4
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_time.rb +1 -4
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +1 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -4
- data/lib/mongoid/errors/mixed_relations.rb +1 -3
- data/lib/mongoid/errors/mongoid_error.rb +7 -11
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +1 -4
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +1 -4
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +1 -4
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -4
- data/lib/mongoid/errors/no_metadata.rb +1 -4
- data/lib/mongoid/errors/no_parent.rb +1 -4
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -4
- data/lib/mongoid/errors/rollback.rb +0 -2
- data/lib/mongoid/errors/scope_overwrite.rb +2 -4
- data/lib/mongoid/errors/sessions_not_supported.rb +0 -3
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -3
- data/lib/mongoid/errors/transaction_error.rb +0 -3
- data/lib/mongoid/errors/transactions_not_supported.rb +0 -3
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +1 -4
- data/lib/mongoid/errors/unregistered_class.rb +1 -1
- data/lib/mongoid/errors/unsaved_document.rb +1 -3
- data/lib/mongoid/errors/unsupported_isolation_level.rb +22 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -4
- data/lib/mongoid/errors/validations.rb +3 -5
- data/lib/mongoid/errors.rb +72 -72
- data/lib/mongoid/evolvable.rb +0 -3
- data/lib/mongoid/extensions/array.rb +5 -7
- data/lib/mongoid/extensions/big_decimal.rb +6 -7
- data/lib/mongoid/extensions/binary.rb +3 -6
- data/lib/mongoid/extensions/boolean.rb +4 -7
- data/lib/mongoid/extensions/bson_document.rb +28 -0
- data/lib/mongoid/extensions/date.rb +10 -14
- data/lib/mongoid/extensions/date_time.rb +2 -6
- data/lib/mongoid/extensions/decimal128.rb +1 -5
- data/lib/mongoid/extensions/false_class.rb +3 -5
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +5 -10
- data/lib/mongoid/extensions/integer.rb +5 -10
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -1
- data/lib/mongoid/extensions/object.rb +9 -14
- data/lib/mongoid/extensions/object_id.rb +2 -6
- data/lib/mongoid/extensions/range.rb +14 -15
- data/lib/mongoid/extensions/raw_value.rb +0 -3
- data/lib/mongoid/extensions/regexp.rb +3 -6
- data/lib/mongoid/extensions/set.rb +3 -4
- data/lib/mongoid/extensions/string.rb +8 -12
- data/lib/mongoid/extensions/symbol.rb +3 -7
- data/lib/mongoid/extensions/time.rb +24 -26
- data/lib/mongoid/extensions/time_with_zone.rb +4 -7
- data/lib/mongoid/extensions/true_class.rb +3 -5
- data/lib/mongoid/extensions.rb +26 -26
- data/lib/mongoid/factory.rb +5 -9
- data/lib/mongoid/fields/encrypted.rb +0 -1
- data/lib/mongoid/fields/foreign_key.rb +9 -10
- data/lib/mongoid/fields/localized.rb +12 -12
- data/lib/mongoid/fields/standard.rb +5 -7
- data/lib/mongoid/fields/validators/macro.rb +23 -34
- data/lib/mongoid/fields/validators.rb +1 -2
- data/lib/mongoid/fields.rb +151 -58
- data/lib/mongoid/findable.rb +82 -53
- data/lib/mongoid/indexable/specification.rb +20 -6
- data/lib/mongoid/indexable/validators/options.rb +33 -40
- data/lib/mongoid/indexable.rb +26 -25
- data/lib/mongoid/inspectable.rb +4 -7
- data/lib/mongoid/interceptable.rb +41 -40
- data/lib/mongoid/loadable.rb +17 -18
- data/lib/mongoid/loggable.rb +4 -8
- data/lib/mongoid/matchable.rb +0 -2
- data/lib/mongoid/matcher/all.rb +2 -5
- data/lib/mongoid/matcher/and.rb +0 -3
- data/lib/mongoid/matcher/bits.rb +13 -8
- data/lib/mongoid/matcher/bits_all_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_all_set.rb +1 -3
- data/lib/mongoid/matcher/bits_any_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_any_set.rb +1 -3
- data/lib/mongoid/matcher/elem_match.rb +13 -15
- data/lib/mongoid/matcher/elem_match_expression.rb +0 -3
- data/lib/mongoid/matcher/eq.rb +0 -3
- data/lib/mongoid/matcher/eq_impl.rb +12 -17
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +4 -7
- data/lib/mongoid/matcher/exists.rb +1 -4
- data/lib/mongoid/matcher/expression.rb +5 -10
- data/lib/mongoid/matcher/expression_operator.rb +1 -3
- data/lib/mongoid/matcher/field_expression.rb +10 -13
- data/lib/mongoid/matcher/field_operator.rb +4 -6
- data/lib/mongoid/matcher/gt.rb +0 -3
- data/lib/mongoid/matcher/gte.rb +0 -3
- data/lib/mongoid/matcher/in.rb +9 -12
- data/lib/mongoid/matcher/lt.rb +0 -3
- data/lib/mongoid/matcher/lte.rb +0 -3
- data/lib/mongoid/matcher/mod.rb +4 -8
- data/lib/mongoid/matcher/ne.rb +0 -3
- data/lib/mongoid/matcher/nin.rb +0 -3
- data/lib/mongoid/matcher/nor.rb +1 -6
- data/lib/mongoid/matcher/not.rb +0 -3
- data/lib/mongoid/matcher/or.rb +0 -3
- data/lib/mongoid/matcher/regex.rb +11 -14
- data/lib/mongoid/matcher/size.rb +2 -5
- data/lib/mongoid/matcher/type.rb +32 -37
- data/lib/mongoid/matcher.rb +7 -15
- data/lib/mongoid/model_resolver.rb +1 -0
- data/lib/mongoid/persistable/creatable.rb +23 -7
- data/lib/mongoid/persistable/deletable.rb +6 -7
- data/lib/mongoid/persistable/destroyable.rb +2 -6
- data/lib/mongoid/persistable/incrementable.rb +1 -3
- data/lib/mongoid/persistable/logical.rb +3 -5
- data/lib/mongoid/persistable/maxable.rb +2 -4
- data/lib/mongoid/persistable/minable.rb +2 -4
- data/lib/mongoid/persistable/multipliable.rb +1 -3
- data/lib/mongoid/persistable/poppable.rb +2 -4
- data/lib/mongoid/persistable/pullable.rb +3 -5
- data/lib/mongoid/persistable/pushable.rb +5 -7
- data/lib/mongoid/persistable/renamable.rb +1 -3
- data/lib/mongoid/persistable/savable.rb +0 -3
- data/lib/mongoid/persistable/settable.rb +4 -13
- data/lib/mongoid/persistable/unsettable.rb +1 -3
- data/lib/mongoid/persistable/updatable.rb +16 -24
- data/lib/mongoid/persistable/upsertable.rb +8 -10
- data/lib/mongoid/persistable.rb +28 -27
- data/lib/mongoid/persistence_context.rb +34 -41
- data/lib/mongoid/pluckable.rb +0 -2
- data/lib/mongoid/positional.rb +5 -11
- data/lib/mongoid/railtie.rb +16 -22
- data/lib/mongoid/railties/console_sandbox.rb +6 -8
- data/lib/mongoid/railties/controller_runtime.rb +7 -11
- data/lib/mongoid/railties/database.rake +42 -44
- data/lib/mongoid/scopable.rb +23 -31
- data/lib/mongoid/search_indexable.rb +330 -0
- data/lib/mongoid/selectable.rb +1 -3
- data/lib/mongoid/serializable.rb +6 -8
- data/lib/mongoid/shardable.rb +8 -17
- data/lib/mongoid/stateful.rb +5 -10
- data/lib/mongoid/stringified_symbol.rb +5 -9
- data/lib/mongoid/tasks/database.rake +31 -32
- data/lib/mongoid/tasks/database.rb +28 -30
- data/lib/mongoid/tasks/encryption.rb +10 -15
- data/lib/mongoid/threaded/lifecycle.rb +6 -9
- data/lib/mongoid/threaded.rb +132 -32
- data/lib/mongoid/timestamps/created/short.rb +2 -3
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +8 -13
- data/lib/mongoid/timestamps/updated/short.rb +2 -3
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +4 -6
- data/lib/mongoid/touchable.rb +19 -11
- data/lib/mongoid/traversable.rb +3 -2
- data/lib/mongoid/validatable/associated.rb +1 -5
- data/lib/mongoid/validatable/format.rb +0 -2
- data/lib/mongoid/validatable/length.rb +0 -2
- data/lib/mongoid/validatable/localizable.rb +0 -3
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/numericality.rb +24 -3
- data/lib/mongoid/validatable/presence.rb +8 -10
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +12 -14
- data/lib/mongoid/validatable.rb +15 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +10 -11
- data/lib/mongoid.rb +30 -34
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -4
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +4 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +2 -2
- data/lib/rails/generators/mongoid/model/model_generator.rb +5 -8
- data/lib/rails/generators/mongoid_generator.rb +6 -10
- data/lib/rails/mongoid.rb +1 -3
- data/spec/integration/active_job_spec.rb +1 -2
- data/spec/integration/app_spec.rb +142 -178
- data/spec/integration/associations/belongs_to_spec.rb +30 -28
- data/spec/integration/associations/embedded_dirty_spec.rb +0 -1
- data/spec/integration/associations/embedded_spec.rb +41 -43
- data/spec/integration/associations/embeds_many_spec.rb +46 -29
- data/spec/integration/associations/embeds_one_spec.rb +2 -1
- data/spec/integration/associations/foreign_key_spec.rb +10 -11
- data/spec/integration/associations/foreign_key_spec_models.rb +8 -9
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +16 -13
- data/spec/integration/associations/has_many_spec.rb +17 -18
- data/spec/integration/associations/has_one_spec.rb +42 -45
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +36 -39
- data/spec/integration/associations/reverse_population_spec.rb +4 -5
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +18 -20
- data/spec/integration/atomic/modifiers_spec.rb +72 -52
- data/spec/integration/bson_regexp_raw_spec.rb +2 -3
- data/spec/integration/caching_spec.rb +68 -0
- data/spec/integration/callbacks_models.rb +11 -9
- data/spec/integration/callbacks_spec.rb +78 -80
- data/spec/integration/contextual/empty_spec.rb +19 -20
- data/spec/integration/criteria/alias_query_spec.rb +12 -19
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +23 -18
- data/spec/integration/criteria/logical_spec.rb +18 -19
- data/spec/integration/criteria/range_spec.rb +77 -86
- data/spec/integration/criteria/raw_value_spec.rb +122 -109
- data/spec/integration/criteria/time_with_zone_spec.rb +33 -24
- data/spec/integration/discriminator_key_spec.rb +85 -85
- data/spec/integration/discriminator_value_spec.rb +70 -73
- data/spec/integration/document_spec.rb +9 -10
- data/spec/integration/dots_and_dollars_spec.rb +104 -119
- data/spec/integration/encryption_spec.rb +8 -11
- data/spec/integration/i18n_fallbacks_spec.rb +7 -8
- data/spec/integration/isolation_state_spec.rb +241 -0
- data/spec/integration/matcher_examples_spec.rb +145 -168
- data/spec/integration/matcher_operator_data/in.yml +6 -6
- data/spec/integration/matcher_operator_spec.rb +16 -26
- data/spec/integration/matcher_spec.rb +31 -32
- data/spec/integration/persistence/collection_options_spec.rb +0 -2
- data/spec/integration/persistence/range_field_spec.rb +24 -2
- data/spec/integration/server_query_spec.rb +43 -37
- data/spec/integration/shardable_spec.rb +10 -11
- data/spec/integration/stringified_symbol_field_spec.rb +28 -43
- data/spec/lite_spec_helper.rb +11 -12
- data/spec/mongoid/association/accessors_spec.rb +197 -285
- data/spec/mongoid/association/auto_save_spec.rb +62 -93
- data/spec/mongoid/association/builders_spec.rb +121 -74
- data/spec/mongoid/association/constrainable_spec.rb +9 -22
- data/spec/mongoid/association/counter_cache_spec.rb +71 -104
- data/spec/mongoid/association/depending_spec.rb +166 -208
- data/spec/mongoid/association/eager_spec.rb +416 -80
- data/spec/mongoid/association/embedded/cyclic_spec.rb +36 -48
- data/spec/mongoid/association/embedded/dirty_spec.rb +15 -20
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +36 -54
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +8 -15
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +135 -175
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +25 -127
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +9 -14
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +38 -51
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1151 -1340
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -17
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +11 -11
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +25 -138
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +15 -23
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +18 -26
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +204 -273
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +5 -6
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -143
- data/spec/mongoid/association/macros_spec.rb +213 -300
- data/spec/mongoid/association/nested/many_spec.rb +51 -73
- data/spec/mongoid/association/nested/one_spec.rb +56 -80
- data/spec/mongoid/association/options_spec.rb +187 -310
- data/spec/mongoid/association/polymorphic_spec.rb +35 -53
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +55 -76
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +36 -41
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +81 -101
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +258 -345
- data/spec/mongoid/association/referenced/belongs_to_models.rb +4 -3
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +91 -294
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +42 -56
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +41 -32
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +36 -42
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +8 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +771 -975
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +9 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +5 -6
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +59 -177
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +29 -43
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +53 -53
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +104 -67
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +431 -675
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -11
- data/spec/mongoid/association/referenced/has_many_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_many_spec.rb +44 -188
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +26 -38
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +28 -29
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +29 -42
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +270 -332
- data/spec/mongoid/association/referenced/has_one_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_one_spec.rb +40 -188
- data/spec/mongoid/association/reflections_spec.rb +14 -24
- data/spec/mongoid/association/syncable_spec.rb +102 -125
- data/spec/mongoid/association_spec.rb +47 -70
- data/spec/mongoid/atomic/modifiers_spec.rb +184 -197
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +39 -52
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +35 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +9 -15
- data/spec/mongoid/atomic/paths_spec.rb +81 -117
- data/spec/mongoid/atomic_spec.rb +156 -171
- data/spec/mongoid/attributes/dynamic_spec.rb +5 -6
- data/spec/mongoid/attributes/nested_spec.rb +1219 -1692
- data/spec/mongoid/attributes/nested_spec_models.rb +8 -9
- data/spec/mongoid/attributes/projector_spec.rb +2 -6
- data/spec/mongoid/attributes/readonly_spec.rb +73 -97
- data/spec/mongoid/attributes_spec.rb +669 -826
- data/spec/mongoid/cacheable_spec.rb +74 -44
- data/spec/mongoid/changeable_spec.rb +591 -733
- data/spec/mongoid/clients/factory_spec.rb +122 -154
- data/spec/mongoid/clients/options_spec.rb +40 -59
- data/spec/mongoid/clients/sessions_spec.rb +25 -44
- data/spec/mongoid/clients/transactions_spec.rb +33 -50
- data/spec/mongoid/clients/transactions_spec_models.rb +3 -4
- data/spec/mongoid/clients_spec.rb +265 -355
- data/spec/mongoid/collection_configurable_spec.rb +9 -12
- data/spec/mongoid/composable_spec.rb +2 -9
- data/spec/mongoid/config/defaults_spec.rb +24 -31
- data/spec/mongoid/config/encryption_spec.rb +54 -57
- data/spec/mongoid/config/environment_spec.rb +30 -40
- data/spec/mongoid/config/introspection_spec.rb +42 -37
- data/spec/mongoid/config/options_spec.rb +14 -21
- data/spec/mongoid/config_spec.rb +145 -195
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +98 -135
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +4 -7
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +149 -187
- data/spec/mongoid/contextual/aggregable/none_spec.rb +14 -16
- data/spec/mongoid/contextual/atomic_spec.rb +223 -271
- data/spec/mongoid/contextual/map_reduce_spec.rb +110 -138
- data/spec/mongoid/contextual/memory_spec.rb +706 -854
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +12 -13
- data/spec/mongoid/contextual/mongo_spec.rb +1008 -1213
- data/spec/mongoid/contextual/none_spec.rb +54 -59
- data/spec/mongoid/contextual/short_circuit_spec.rb +139 -0
- data/spec/mongoid/copyable_spec.rb +254 -300
- data/spec/mongoid/copyable_spec_models.rb +0 -1
- data/spec/mongoid/criteria/findable_spec.rb +322 -387
- data/spec/mongoid/criteria/includable_spec.rb +421 -372
- data/spec/mongoid/criteria/includable_spec_models.rb +16 -7
- data/spec/mongoid/criteria/inspectable_spec.rb +11 -14
- data/spec/mongoid/criteria/marshalable_spec.rb +11 -14
- data/spec/mongoid/criteria/modifiable_spec.rb +366 -512
- data/spec/mongoid/criteria/options_spec.rb +2 -7
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +112 -141
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +8 -11
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +127 -184
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +123 -60
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +84 -117
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +44 -65
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +86 -108
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +94 -33
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +103 -138
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +95 -34
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +25 -38
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +26 -28
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +32 -54
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +136 -130
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +16 -24
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +15 -24
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +12 -19
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -63
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +28 -42
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +73 -96
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +71 -92
- data/spec/mongoid/criteria/queryable/key_spec.rb +32 -36
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +44 -49
- data/spec/mongoid/criteria/queryable/optional_spec.rb +373 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +172 -123
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +65 -87
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +41 -53
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +576 -680
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +7 -11
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +807 -998
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +154 -191
- data/spec/mongoid/criteria/queryable/selector_spec.rb +294 -390
- data/spec/mongoid/criteria/queryable/smash_spec.rb +6 -11
- data/spec/mongoid/criteria/queryable/storable_spec.rb +54 -81
- data/spec/mongoid/criteria/queryable_mql_spec.rb +92 -0
- data/spec/mongoid/criteria/scopable_spec.rb +102 -138
- data/spec/mongoid/criteria/translator_spec.rb +59 -60
- data/spec/mongoid/criteria_projection_spec.rb +81 -99
- data/spec/mongoid/criteria_spec.rb +935 -950
- data/spec/mongoid/document_fields_spec.rb +28 -30
- data/spec/mongoid/document_persistence_context_spec.rb +13 -15
- data/spec/mongoid/document_query_spec.rb +9 -12
- data/spec/mongoid/document_spec.rb +317 -409
- data/spec/mongoid/equality_spec.rb +69 -102
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -11
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +7 -10
- data/spec/mongoid/errors/callback_spec.rb +8 -11
- data/spec/mongoid/errors/delete_restriction_spec.rb +5 -8
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +7 -10
- data/spec/mongoid/errors/document_not_found_spec.rb +51 -61
- data/spec/mongoid/errors/invalid_collection_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_config_file_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_config_option_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_field_option_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_field_spec.rb +10 -11
- data/spec/mongoid/errors/invalid_field_type_spec.rb +9 -12
- data/spec/mongoid/errors/invalid_find_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_includes_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_index_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_path_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_relation_spec.rb +15 -16
- data/spec/mongoid/errors/invalid_scope_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -6
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_time_spec.rb +8 -11
- data/spec/mongoid/errors/inverse_not_found_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_relations_spec.rb +8 -11
- data/spec/mongoid/errors/mongoid_error_spec.rb +21 -24
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -9
- data/spec/mongoid/errors/no_client_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_client_database_spec.rb +9 -12
- data/spec/mongoid/errors/no_client_hosts_spec.rb +9 -12
- data/spec/mongoid/errors/no_clients_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_environment_spec.rb +8 -11
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +8 -11
- data/spec/mongoid/errors/no_metadata_spec.rb +7 -10
- data/spec/mongoid/errors/no_parent_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_attribute_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_document_spec.rb +6 -9
- data/spec/mongoid/errors/scope_overwrite_spec.rb +9 -12
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +9 -12
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -8
- data/spec/mongoid/errors/unsaved_document_spec.rb +8 -11
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +9 -12
- data/spec/mongoid/errors/validations_spec.rb +11 -14
- data/spec/mongoid/extensions/array_spec.rb +70 -92
- data/spec/mongoid/extensions/big_decimal_spec.rb +233 -313
- data/spec/mongoid/extensions/binary_spec.rb +21 -32
- data/spec/mongoid/extensions/boolean_spec.rb +52 -75
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +43 -54
- data/spec/mongoid/extensions/date_spec.rb +26 -38
- data/spec/mongoid/extensions/date_time_spec.rb +22 -32
- data/spec/mongoid/extensions/decimal128_spec.rb +12 -18
- data/spec/mongoid/extensions/false_class_spec.rb +10 -17
- data/spec/mongoid/extensions/float_spec.rb +40 -61
- data/spec/mongoid/extensions/hash_spec.rb +46 -64
- data/spec/mongoid/extensions/integer_spec.rb +40 -61
- data/spec/mongoid/extensions/module_spec.rb +13 -18
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -5
- data/spec/mongoid/extensions/object_id_spec.rb +159 -247
- data/spec/mongoid/extensions/object_spec.rb +31 -47
- data/spec/mongoid/extensions/range_spec.rb +112 -115
- data/spec/mongoid/extensions/raw_value_spec.rb +10 -12
- data/spec/mongoid/extensions/regexp_spec.rb +23 -36
- data/spec/mongoid/extensions/set_spec.rb +38 -49
- data/spec/mongoid/extensions/string_spec.rb +118 -167
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +29 -43
- data/spec/mongoid/extensions/symbol_spec.rb +12 -20
- data/spec/mongoid/extensions/time_spec.rb +160 -202
- data/spec/mongoid/extensions/time_with_zone_spec.rb +79 -105
- data/spec/mongoid/extensions/true_class_spec.rb +10 -17
- data/spec/mongoid/factory_spec.rb +125 -148
- data/spec/mongoid/fields/foreign_key_spec.rb +124 -169
- data/spec/mongoid/fields/localized_spec.rb +140 -185
- data/spec/mongoid/fields/standard_spec.rb +43 -59
- data/spec/mongoid/fields_spec.rb +751 -620
- data/spec/mongoid/findable_spec.rb +260 -228
- data/spec/mongoid/indexable/specification_spec.rb +42 -58
- data/spec/mongoid/indexable_spec.rb +260 -264
- data/spec/mongoid/inspectable_spec.rb +45 -55
- data/spec/mongoid/interceptable_spec.rb +784 -922
- data/spec/mongoid/interceptable_spec_models.rb +35 -35
- data/spec/mongoid/loading_spec.rb +47 -43
- data/spec/mongoid/loggable_spec.rb +3 -6
- data/spec/mongoid/matcher/extract_attribute_spec.rb +2 -6
- data/spec/mongoid/mongoizable_spec.rb +81 -90
- data/spec/mongoid/monkey_patches_spec.rb +4 -0
- data/spec/mongoid/persistable/creatable_spec.rb +181 -220
- data/spec/mongoid/persistable/deletable_spec.rb +139 -179
- data/spec/mongoid/persistable/destroyable_spec.rb +135 -164
- data/spec/mongoid/persistable/incrementable_spec.rb +65 -84
- data/spec/mongoid/persistable/logical_spec.rb +48 -61
- data/spec/mongoid/persistable/maxable_spec.rb +45 -44
- data/spec/mongoid/persistable/minable_spec.rb +45 -44
- data/spec/mongoid/persistable/multipliable_spec.rb +54 -69
- data/spec/mongoid/persistable/poppable_spec.rb +47 -60
- data/spec/mongoid/persistable/pullable_spec.rb +79 -103
- data/spec/mongoid/persistable/pushable_spec.rb +106 -131
- data/spec/mongoid/persistable/renamable_spec.rb +52 -65
- data/spec/mongoid/persistable/savable_spec.rb +152 -189
- data/spec/mongoid/persistable/settable_spec.rb +121 -145
- data/spec/mongoid/persistable/unsettable_spec.rb +56 -73
- data/spec/mongoid/persistable/updatable_spec.rb +185 -232
- data/spec/mongoid/persistable/upsertable_spec.rb +66 -77
- data/spec/mongoid/persistable_spec.rb +132 -139
- data/spec/mongoid/persistence_context_spec.rb +31 -89
- data/spec/mongoid/positional_spec.rb +67 -79
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +0 -3
- data/spec/mongoid/railties/console_sandbox_spec.rb +0 -1
- data/spec/mongoid/relations/proxy_spec.rb +0 -1
- data/spec/mongoid/reloadable_spec.rb +250 -145
- data/spec/mongoid/scopable_spec.rb +319 -398
- data/spec/mongoid/search_indexable_spec.rb +446 -41
- data/spec/mongoid/selectable_spec.rb +36 -51
- data/spec/mongoid/serializable_spec.rb +269 -312
- data/spec/mongoid/shardable_models.rb +5 -5
- data/spec/mongoid/shardable_spec.rb +44 -46
- data/spec/mongoid/stateful_spec.rb +55 -75
- data/spec/mongoid/tasks/database_rake_spec.rb +138 -141
- data/spec/mongoid/tasks/database_spec.rb +80 -80
- data/spec/mongoid/tasks/encryption_spec.rb +22 -20
- data/spec/mongoid/threaded_spec.rb +57 -83
- data/spec/mongoid/timestamps/created/short_spec.rb +12 -16
- data/spec/mongoid/timestamps/created_spec.rb +16 -20
- data/spec/mongoid/timestamps/timeless_spec.rb +31 -43
- data/spec/mongoid/timestamps/updated/short_spec.rb +21 -28
- data/spec/mongoid/timestamps/updated_spec.rb +18 -25
- data/spec/mongoid/timestamps_spec.rb +171 -188
- data/spec/mongoid/timestamps_spec_models.rb +12 -13
- data/spec/mongoid/touchable_spec.rb +330 -294
- data/spec/mongoid/touchable_spec_models.rb +35 -37
- data/spec/mongoid/traversable_spec.rb +435 -471
- data/spec/mongoid/validatable/associated_spec.rb +42 -60
- data/spec/mongoid/validatable/format_spec.rb +24 -34
- data/spec/mongoid/validatable/length_spec.rb +62 -86
- data/spec/mongoid/validatable/numericality_spec.rb +114 -23
- data/spec/mongoid/validatable/presence_spec.rb +149 -203
- data/spec/mongoid/validatable/uniqueness_spec.rb +632 -830
- data/spec/mongoid/validatable_spec.rb +71 -103
- data/spec/mongoid/warnings_spec.rb +5 -9
- data/spec/mongoid_spec.rb +25 -41
- data/spec/rails/controller_extension/controller_runtime_spec.rb +45 -49
- data/spec/rails/mongoid_spec.rb +15 -15
- data/spec/shared/lib/mrss/cluster_config.rb +5 -40
- data/spec/shared/lib/mrss/constraints.rb +7 -46
- data/spec/shared/lib/mrss/docker_runner.rb +10 -21
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -31
- data/spec/shared/lib/mrss/release/candidate.rb +18 -12
- data/spec/shared/lib/mrss/server_version_registry.rb +1 -5
- data/spec/shared/share/Dockerfile.erb +6 -8
- data/spec/shared/shlib/server.sh +0 -50
- data/spec/shared/shlib/set_env.sh +4 -10
- data/spec/spec_helper.rb +54 -31
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +1 -2
- data/spec/support/constraints.rb +8 -25
- data/spec/support/crypt/models.rb +7 -8
- data/spec/support/crypt.rb +6 -9
- data/spec/support/expectations.rb +21 -7
- data/spec/support/feature_sandbox.rb +1 -4
- data/spec/support/helpers.rb +0 -1
- data/spec/support/immutable_ids.rb +20 -21
- data/spec/support/macros.rb +1 -3
- data/spec/support/models/account.rb +4 -5
- data/spec/support/models/acolyte.rb +5 -5
- data/spec/support/models/actor.rb +3 -3
- data/spec/support/models/actress.rb +0 -1
- data/spec/support/models/address.rb +11 -11
- data/spec/support/models/address_component.rb +1 -1
- data/spec/support/models/address_number.rb +1 -1
- data/spec/support/models/agency.rb +1 -1
- data/spec/support/models/agent.rb +1 -1
- data/spec/support/models/album.rb +1 -2
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +4 -5
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +2 -2
- data/spec/support/models/armrest.rb +0 -1
- data/spec/support/models/array_field.rb +0 -1
- data/spec/support/models/article.rb +0 -1
- data/spec/support/models/artist.rb +16 -12
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +0 -1
- data/spec/support/models/audio.rb +2 -2
- data/spec/support/models/augmentation.rb +1 -2
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +0 -1
- data/spec/support/models/bar.rb +2 -2
- data/spec/support/models/basic.rb +0 -1
- data/spec/support/models/bed.rb +0 -1
- data/spec/support/models/big_palette.rb +0 -1
- data/spec/support/models/birthday.rb +3 -5
- data/spec/support/models/bolt.rb +0 -1
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +1 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -2
- data/spec/support/models/building.rb +0 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +2 -2
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +5 -6
- data/spec/support/models/car.rb +0 -1
- data/spec/support/models/cat.rb +0 -2
- data/spec/support/models/catalog.rb +0 -1
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +5 -6
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +0 -1
- data/spec/support/models/circuit.rb +2 -2
- data/spec/support/models/circus.rb +0 -1
- data/spec/support/models/code.rb +2 -1
- data/spec/support/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +0 -1
- data/spec/support/models/comment.rb +0 -1
- data/spec/support/models/company.rb +0 -1
- data/spec/support/models/consumption_period.rb +0 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +0 -1
- data/spec/support/models/country_code.rb +2 -3
- data/spec/support/models/courier_job.rb +2 -2
- data/spec/support/models/cover.rb +0 -1
- data/spec/support/models/crate.rb +0 -1
- data/spec/support/models/customer.rb +0 -1
- data/spec/support/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +0 -1
- data/spec/support/models/description.rb +0 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +2 -2
- data/spec/support/models/doctor.rb +0 -1
- data/spec/support/models/dog.rb +2 -2
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +0 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +2 -2
- data/spec/support/models/drug.rb +1 -1
- data/spec/support/models/dungeon.rb +1 -1
- data/spec/support/models/edit.rb +1 -1
- data/spec/support/models/email.rb +1 -1
- data/spec/support/models/employer.rb +1 -2
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +0 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +3 -4
- data/spec/support/models/exhibition.rb +1 -1
- data/spec/support/models/exhibitor.rb +1 -1
- data/spec/support/models/explosion.rb +1 -1
- data/spec/support/models/eye.rb +0 -1
- data/spec/support/models/eye_bowl.rb +2 -3
- data/spec/support/models/face.rb +2 -3
- data/spec/support/models/fanatic.rb +1 -1
- data/spec/support/models/favorite.rb +1 -1
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +0 -1
- data/spec/support/models/fish.rb +0 -1
- data/spec/support/models/folder.rb +0 -2
- data/spec/support/models/folder_item.rb +1 -3
- data/spec/support/models/fruits.rb +9 -5
- data/spec/support/models/game.rb +3 -4
- data/spec/support/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +0 -1
- data/spec/support/models/hole.rb +0 -1
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +2 -2
- data/spec/support/models/html_writer.rb +0 -1
- data/spec/support/models/id_key.rb +3 -3
- data/spec/support/models/idnodef.rb +0 -1
- data/spec/support/models/image.rb +0 -1
- data/spec/support/models/implant.rb +1 -2
- data/spec/support/models/instrument.rb +2 -3
- data/spec/support/models/item.rb +2 -2
- data/spec/support/models/jar.rb +1 -2
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +2 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +0 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +0 -1
- data/spec/support/models/line_item.rb +1 -1
- data/spec/support/models/location.rb +1 -1
- data/spec/support/models/login.rb +1 -2
- data/spec/support/models/manufacturer.rb +0 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +1 -1
- data/spec/support/models/message.rb +1 -2
- data/spec/support/models/minim.rb +0 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/modifier_models.rb +25 -0
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -2
- data/spec/support/models/name.rb +4 -5
- data/spec/support/models/name_only.rb +0 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +3 -3
- data/spec/support/models/nut.rb +0 -1
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +1 -1
- data/spec/support/models/ordered_post.rb +1 -1
- data/spec/support/models/ordered_preference.rb +1 -1
- data/spec/support/models/oscar.rb +1 -1
- data/spec/support/models/other_owner_object.rb +0 -1
- data/spec/support/models/override.rb +3 -11
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +0 -1
- data/spec/support/models/page.rb +3 -3
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +2 -2
- data/spec/support/models/parent.rb +2 -2
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +0 -1
- data/spec/support/models/patient.rb +2 -2
- data/spec/support/models/pdf_writer.rb +0 -1
- data/spec/support/models/pencil.rb +0 -1
- data/spec/support/models/person.rb +32 -28
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +1 -2
- data/spec/support/models/piano.rb +0 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +5 -5
- data/spec/support/models/post.rb +12 -12
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +1 -2
- data/spec/support/models/preference.rb +2 -2
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +3 -3
- data/spec/support/models/profile.rb +2 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +2 -2
- data/spec/support/models/publication/encyclopedia.rb +0 -1
- data/spec/support/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +0 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +1 -1
- data/spec/support/models/question.rb +2 -2
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +2 -3
- data/spec/support/models/registry.rb +1 -1
- data/spec/support/models/role.rb +1 -1
- data/spec/support/models/root_category.rb +1 -1
- data/spec/support/models/sandbox/app/models/app_models_message.rb +0 -1
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_user.rb +0 -1
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +0 -1
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +0 -1
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +0 -1
- data/spec/support/models/seat.rb +0 -1
- data/spec/support/models/seo.rb +1 -1
- data/spec/support/models/series.rb +1 -1
- data/spec/support/models/server.rb +1 -1
- data/spec/support/models/service.rb +2 -2
- data/spec/support/models/shape.rb +3 -3
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +2 -2
- data/spec/support/models/shipment_address.rb +0 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +0 -1
- data/spec/support/models/shop.rb +2 -2
- data/spec/support/models/short_agent.rb +0 -1
- data/spec/support/models/short_quiz.rb +1 -1
- data/spec/support/models/simple.rb +1 -1
- data/spec/support/models/slave.rb +1 -1
- data/spec/support/models/song.rb +1 -2
- data/spec/support/models/sound.rb +2 -2
- data/spec/support/models/spacer.rb +0 -1
- data/spec/support/models/square.rb +0 -1
- data/spec/support/models/staff.rb +0 -1
- data/spec/support/models/store_as_dup_test1.rb +2 -2
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +2 -2
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +1 -2
- data/spec/support/models/sub_item.rb +0 -1
- data/spec/support/models/subscription.rb +2 -2
- data/spec/support/models/survey.rb +2 -2
- data/spec/support/models/symptom.rb +2 -2
- data/spec/support/models/system_role.rb +2 -3
- data/spec/support/models/tag.rb +2 -2
- data/spec/support/models/target.rb +1 -1
- data/spec/support/models/template.rb +1 -1
- data/spec/support/models/thing.rb +1 -1
- data/spec/support/models/threadlocker.rb +0 -1
- data/spec/support/models/title.rb +0 -1
- data/spec/support/models/tool.rb +3 -3
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +0 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +2 -3
- data/spec/support/models/truck.rb +0 -1
- data/spec/support/models/updatable.rb +0 -1
- data/spec/support/models/user.rb +3 -4
- data/spec/support/models/user_account.rb +3 -3
- data/spec/support/models/validation_callback.rb +4 -4
- data/spec/support/models/vehicle.rb +2 -3
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +0 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +2 -2
- data/spec/support/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +0 -1
- data/spec/support/models/weapon.rb +1 -2
- data/spec/support/models/wiki_page.rb +2 -3
- data/spec/support/models/word.rb +2 -2
- data/spec/support/models/word_origin.rb +1 -2
- data/spec/support/models/writer.rb +3 -3
- data/spec/support/rails_mock.rb +7 -12
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/sinatra_mock.rb +4 -2
- data/spec/support/spec_config.rb +19 -18
- metadata +14 -2
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
require 'mongoid/association/constrainable'
|
|
5
4
|
require 'mongoid/association/options'
|
|
6
5
|
|
|
7
6
|
module Mongoid
|
|
8
7
|
module Association
|
|
9
|
-
|
|
10
8
|
# This module provides behaviors shared between Association types.
|
|
11
9
|
module Relatable
|
|
12
10
|
include Constrainable
|
|
@@ -15,17 +13,17 @@ module Mongoid
|
|
|
15
13
|
# The options shared between all association types.
|
|
16
14
|
#
|
|
17
15
|
# @return [ Array<Symbol> ] The shared options.
|
|
18
|
-
SHARED_OPTIONS = [
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
SHARED_OPTIONS = %i[
|
|
17
|
+
class_name
|
|
18
|
+
inverse_of
|
|
19
|
+
validate
|
|
20
|
+
extend
|
|
21
|
+
].freeze
|
|
24
22
|
|
|
25
23
|
# The primary key default.
|
|
26
24
|
#
|
|
27
25
|
# @return [ String ] The primary key field default.
|
|
28
|
-
PRIMARY_KEY_DEFAULT = '_id'
|
|
26
|
+
PRIMARY_KEY_DEFAULT = '_id'
|
|
29
27
|
|
|
30
28
|
# The name of the association.
|
|
31
29
|
#
|
|
@@ -37,6 +35,11 @@ module Mongoid
|
|
|
37
35
|
# @return [ Hash ] The options.
|
|
38
36
|
attr_reader :options
|
|
39
37
|
|
|
38
|
+
# The class that owns this association.
|
|
39
|
+
#
|
|
40
|
+
# @return [ Class ] The owner class.
|
|
41
|
+
attr_reader :owner_class
|
|
42
|
+
|
|
40
43
|
# Initialize the Association.
|
|
41
44
|
#
|
|
42
45
|
# @param [ Class ] _class The class of the model who owns this association.
|
|
@@ -62,8 +65,8 @@ module Mongoid
|
|
|
62
65
|
def ==(other)
|
|
63
66
|
relation_class_name == other.relation_class_name &&
|
|
64
67
|
inverse_class_name == other.inverse_class_name &&
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
name == other.name &&
|
|
69
|
+
options == other.options
|
|
67
70
|
end
|
|
68
71
|
|
|
69
72
|
# Get the callbacks for a given type.
|
|
@@ -90,7 +93,9 @@ module Mongoid
|
|
|
90
93
|
# @param [ Document ] doc The document to be bound.
|
|
91
94
|
#
|
|
92
95
|
# @return [ true | false ] Whether the document can be bound.
|
|
93
|
-
def bindable?(
|
|
96
|
+
def bindable?(_doc)
|
|
97
|
+
false
|
|
98
|
+
end
|
|
94
99
|
|
|
95
100
|
# Get the inverse names.
|
|
96
101
|
#
|
|
@@ -148,7 +153,7 @@ module Mongoid
|
|
|
148
153
|
def relation_class_name
|
|
149
154
|
@class_name ||= @options[:class_name] || ActiveSupport::Inflector.classify(name)
|
|
150
155
|
end
|
|
151
|
-
alias
|
|
156
|
+
alias class_name relation_class_name
|
|
152
157
|
|
|
153
158
|
# The class of the association object(s).
|
|
154
159
|
#
|
|
@@ -170,7 +175,7 @@ module Mongoid
|
|
|
170
175
|
resolve_name(inverse_class, cls_name)
|
|
171
176
|
end
|
|
172
177
|
end
|
|
173
|
-
alias
|
|
178
|
+
alias klass relation_class
|
|
174
179
|
|
|
175
180
|
# The class name of the object owning this association.
|
|
176
181
|
#
|
|
@@ -185,7 +190,7 @@ module Mongoid
|
|
|
185
190
|
def inverse_class
|
|
186
191
|
@owner_class
|
|
187
192
|
end
|
|
188
|
-
alias
|
|
193
|
+
alias inverse_klass inverse_class
|
|
189
194
|
|
|
190
195
|
# The foreign key field if this association stores a foreign key.
|
|
191
196
|
# Otherwise, the primary key.
|
|
@@ -213,7 +218,7 @@ module Mongoid
|
|
|
213
218
|
#
|
|
214
219
|
# @return [ String ] The name of the foreign key setter.
|
|
215
220
|
def foreign_key_setter
|
|
216
|
-
#
|
|
221
|
+
# NOTE: You can't check if this association stores foreign key
|
|
217
222
|
# See HasOne and HasMany binding, they referenced foreign_key_setter
|
|
218
223
|
@foreign_key_setter ||= "#{foreign_key}=" if foreign_key
|
|
219
224
|
end
|
|
@@ -243,7 +248,7 @@ module Mongoid
|
|
|
243
248
|
#
|
|
244
249
|
# @return [ String ] The foreign key check.
|
|
245
250
|
def foreign_key_check
|
|
246
|
-
@foreign_key_check ||= "#{foreign_key}_previously_changed?" if
|
|
251
|
+
@foreign_key_check ||= "#{foreign_key}_previously_changed?" if stores_foreign_key? && foreign_key
|
|
247
252
|
end
|
|
248
253
|
|
|
249
254
|
# Create an association proxy object using the owner and target.
|
|
@@ -261,16 +266,19 @@ module Mongoid
|
|
|
261
266
|
#
|
|
262
267
|
# @return [ true | false ] If the dependent method is destructive.
|
|
263
268
|
def destructive?
|
|
264
|
-
@destructive ||= !!(dependent &&
|
|
269
|
+
@destructive ||= !!(dependent && %i[delete_all destroy].include?(dependent))
|
|
265
270
|
end
|
|
266
271
|
|
|
267
272
|
# Get the counter cache column name.
|
|
268
273
|
#
|
|
269
274
|
# @return [ String ] The counter cache column name.
|
|
270
275
|
def counter_cache_column_name
|
|
271
|
-
@counter_cache_column_name ||=
|
|
272
|
-
|
|
273
|
-
|
|
276
|
+
@counter_cache_column_name ||= if @options[:counter_cache].is_a?(String) ||
|
|
277
|
+
@options[:counter_cache].is_a?(Symbol)
|
|
278
|
+
@options[:counter_cache]
|
|
279
|
+
else
|
|
280
|
+
"#{inverse || inverse_class_name.demodulize.underscore.pluralize}_count"
|
|
281
|
+
end
|
|
274
282
|
end
|
|
275
283
|
|
|
276
284
|
# Get the extension.
|
|
@@ -303,7 +311,7 @@ module Mongoid
|
|
|
303
311
|
# The associations above this one in the inclusion tree.
|
|
304
312
|
#
|
|
305
313
|
# @return [ Array<String> ] The associations.
|
|
306
|
-
|
|
314
|
+
attr_writer :parent_inclusions
|
|
307
315
|
|
|
308
316
|
# The associations above this one in the inclusion tree.
|
|
309
317
|
#
|
|
@@ -316,14 +324,14 @@ module Mongoid
|
|
|
316
324
|
#
|
|
317
325
|
# @return [ true | false ] true if it is a *_many association, false if not.
|
|
318
326
|
def many?
|
|
319
|
-
[Referenced::HasMany, Embedded::EmbedsMany].any? { |a|
|
|
327
|
+
[ Referenced::HasMany, Embedded::EmbedsMany ].any? { |a| is_a?(a) }
|
|
320
328
|
end
|
|
321
329
|
|
|
322
330
|
# Is this association an embeds_one or has_one association?
|
|
323
331
|
#
|
|
324
332
|
# @return [ true | false ] true if it is a *_one association, false if not.
|
|
325
333
|
def one?
|
|
326
|
-
[Referenced::HasOne, Embedded::EmbedsOne].any? { |a|
|
|
334
|
+
[ Referenced::HasOne, Embedded::EmbedsOne ].any? { |a| is_a?(a) }
|
|
327
335
|
end
|
|
328
336
|
|
|
329
337
|
# Is this association an embedded_in or belongs_to association?
|
|
@@ -331,7 +339,7 @@ module Mongoid
|
|
|
331
339
|
# @return [ true | false ] true if it is an embedded_in or belongs_to
|
|
332
340
|
# association, false if not.
|
|
333
341
|
def in_to?
|
|
334
|
-
[Referenced::BelongsTo, Embedded::EmbeddedIn].any? { |a|
|
|
342
|
+
[ Referenced::BelongsTo, Embedded::EmbeddedIn ].any? { |a| is_a?(a) }
|
|
335
343
|
end
|
|
336
344
|
|
|
337
345
|
private
|
|
@@ -347,15 +355,15 @@ module Mongoid
|
|
|
347
355
|
end
|
|
348
356
|
|
|
349
357
|
def define_touchable!
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
358
|
+
return unless touchable?
|
|
359
|
+
|
|
360
|
+
Touchable.define_touchable!(self)
|
|
353
361
|
end
|
|
354
362
|
|
|
355
363
|
def define_autosaver!
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
364
|
+
return unless autosave?
|
|
365
|
+
|
|
366
|
+
Association::Referenced::AutoSave.define_autosave!(self)
|
|
359
367
|
end
|
|
360
368
|
|
|
361
369
|
def define_builder!
|
|
@@ -387,15 +395,15 @@ module Mongoid
|
|
|
387
395
|
end
|
|
388
396
|
|
|
389
397
|
def define_counter_cache_callbacks!
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
398
|
+
return unless counter_cached?
|
|
399
|
+
|
|
400
|
+
Association::Referenced::CounterCache.define_callbacks!(self)
|
|
393
401
|
end
|
|
394
402
|
|
|
395
403
|
def define_dependency!
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
404
|
+
return unless dependent
|
|
405
|
+
|
|
406
|
+
Association::Depending.define_dependency!(self)
|
|
399
407
|
end
|
|
400
408
|
|
|
401
409
|
def validate!
|
|
@@ -405,27 +413,25 @@ module Mongoid
|
|
|
405
413
|
end
|
|
406
414
|
end
|
|
407
415
|
|
|
408
|
-
[name, "#{name}?"
|
|
409
|
-
if Mongoid.destructive_fields.include?(n)
|
|
410
|
-
raise Errors::InvalidRelation.new(@owner_class, n)
|
|
411
|
-
end
|
|
416
|
+
[ name, :"#{name}?", :"#{name}=" ].each do |n|
|
|
417
|
+
raise Errors::InvalidRelation.new(@owner_class, n) if Mongoid.destructive_fields.include?(n)
|
|
412
418
|
end
|
|
413
419
|
end
|
|
414
420
|
|
|
415
421
|
def polymorph!
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
422
|
+
return unless polymorphic?
|
|
423
|
+
|
|
424
|
+
@owner_class.polymorphic = true
|
|
419
425
|
end
|
|
420
426
|
|
|
421
427
|
def create_extension!(&block)
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
@extension = "#{@owner_class}::#{extension_module_name}".constantize
|
|
428
|
+
return unless block
|
|
429
|
+
|
|
430
|
+
extension_module_name = "#{@owner_class.to_s.demodulize}#{name.to_s.camelize}RelationExtension"
|
|
431
|
+
silence_warnings do
|
|
432
|
+
@owner_class.const_set(extension_module_name, Module.new(&block))
|
|
428
433
|
end
|
|
434
|
+
@extension = "#{@owner_class}::#{extension_module_name}".constantize
|
|
429
435
|
end
|
|
430
436
|
|
|
431
437
|
def default_inverse
|
|
@@ -438,7 +444,7 @@ module Mongoid
|
|
|
438
444
|
# [Foo::Bar, Foo, Object].
|
|
439
445
|
def namespace_hierarchy(mod)
|
|
440
446
|
parent = Object
|
|
441
|
-
hier = [parent]
|
|
447
|
+
hier = [ parent ]
|
|
442
448
|
|
|
443
449
|
# name is not present on anonymous modules
|
|
444
450
|
if mod.name
|
|
@@ -463,31 +469,28 @@ module Mongoid
|
|
|
463
469
|
parts = name.to_s.split('::')
|
|
464
470
|
if parts.first == ''
|
|
465
471
|
parts.shift
|
|
466
|
-
hierarchy = [Object]
|
|
472
|
+
hierarchy = [ Object ]
|
|
467
473
|
else
|
|
468
474
|
hierarchy = namespace_hierarchy(mod)
|
|
469
475
|
end
|
|
470
476
|
hierarchy.each do |ns|
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
ns = ns.const_get(part, false)
|
|
478
|
-
end
|
|
479
|
-
cls = ns
|
|
480
|
-
break
|
|
481
|
-
rescue NameError => e
|
|
482
|
-
if exc.nil?
|
|
483
|
-
exc = e
|
|
484
|
-
end
|
|
477
|
+
parts.each do |part|
|
|
478
|
+
# Simple const_get sometimes pulls names out of weird scopes,
|
|
479
|
+
# perhaps confusing the receiver (ns in this case) with the
|
|
480
|
+
# local scope. Walk the class hierarchy ourselves one node
|
|
481
|
+
# at a time by specifying false as the second argument.
|
|
482
|
+
ns = ns.const_get(part, false)
|
|
485
483
|
end
|
|
484
|
+
cls = ns
|
|
485
|
+
break
|
|
486
|
+
rescue NameError => e
|
|
487
|
+
exc = e if exc.nil?
|
|
486
488
|
end
|
|
487
489
|
if cls.nil?
|
|
488
490
|
# Raise the first exception, this is from the most specific namespace
|
|
489
491
|
raise exc
|
|
490
492
|
end
|
|
493
|
+
|
|
491
494
|
cls
|
|
492
495
|
end
|
|
493
496
|
end
|
data/lib/mongoid/association.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
require 'mongoid/association/accessors'
|
|
5
4
|
require 'mongoid/association/builders'
|
|
@@ -19,7 +18,6 @@ require 'mongoid/association/reflections'
|
|
|
19
18
|
require 'mongoid/association/eager_loadable'
|
|
20
19
|
|
|
21
20
|
module Mongoid
|
|
22
|
-
|
|
23
21
|
# Mixin module which adds association behavior to a Mongoid document.
|
|
24
22
|
# Adds methods such as #embedded? which indicate a document's
|
|
25
23
|
# relative association state.
|
|
@@ -39,13 +37,13 @@ module Mongoid
|
|
|
39
37
|
#
|
|
40
38
|
# @return [ Hash ] The mapping from macros to their Association class.
|
|
41
39
|
MACRO_MAPPING = {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
40
|
+
embeds_one: Association::Embedded::EmbedsOne,
|
|
41
|
+
embeds_many: Association::Embedded::EmbedsMany,
|
|
42
|
+
embedded_in: Association::Embedded::EmbeddedIn,
|
|
43
|
+
has_one: Association::Referenced::HasOne,
|
|
44
|
+
has_many: Association::Referenced::HasMany,
|
|
45
|
+
has_and_belongs_to_many: Association::Referenced::HasAndBelongsToMany,
|
|
46
|
+
belongs_to: Association::Referenced::BelongsTo
|
|
49
47
|
}.freeze
|
|
50
48
|
|
|
51
49
|
attr_accessor :_association
|
|
@@ -97,6 +95,7 @@ module Mongoid
|
|
|
97
95
|
# @return [ Symbol ] The association name.
|
|
98
96
|
def association_name
|
|
99
97
|
raise Errors::NoMetadata.new(self.class.name) unless _association
|
|
98
|
+
|
|
100
99
|
_association.name
|
|
101
100
|
end
|
|
102
101
|
|
|
@@ -128,12 +127,10 @@ module Mongoid
|
|
|
128
127
|
#
|
|
129
128
|
# @return [ Hash ] The association metadata.
|
|
130
129
|
def reload_relations
|
|
131
|
-
relations.each_pair do |name,
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
end
|
|
136
|
-
end
|
|
130
|
+
relations.each_pair do |name, _meta|
|
|
131
|
+
next unless instance_variable_defined?("@_#{name}")
|
|
132
|
+
|
|
133
|
+
remove_instance_variable("@_#{name}") if _parent.nil? || instance_variable_get("@_#{name}") != _parent
|
|
137
134
|
end
|
|
138
135
|
end
|
|
139
136
|
end
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Atomic
|
|
6
|
-
|
|
7
5
|
# This class contains the logic for supporting atomic operations against the
|
|
8
6
|
# database.
|
|
9
7
|
class Modifiers < Hash
|
|
10
|
-
|
|
11
8
|
# Add the atomic $addToSet modifiers to the hash.
|
|
12
9
|
#
|
|
13
10
|
# @example Add the $addToSet modifiers.
|
|
@@ -18,10 +15,10 @@ module Mongoid
|
|
|
18
15
|
modifications.each_pair do |field, value|
|
|
19
16
|
if add_to_sets.has_key?(field)
|
|
20
17
|
value.each do |val|
|
|
21
|
-
add_to_sets[field][
|
|
18
|
+
add_to_sets[field]['$each'].push(val)
|
|
22
19
|
end
|
|
23
20
|
else
|
|
24
|
-
add_to_sets[field] = {
|
|
21
|
+
add_to_sets[field] = { '$each' => value }
|
|
25
22
|
end
|
|
26
23
|
end
|
|
27
24
|
end
|
|
@@ -35,7 +32,7 @@ module Mongoid
|
|
|
35
32
|
def pull_all(modifications)
|
|
36
33
|
modifications.each_pair do |field, value|
|
|
37
34
|
add_operation(pull_alls, field, value)
|
|
38
|
-
pull_fields[field.split(
|
|
35
|
+
pull_fields[field.split('.', 2)[0]] = field
|
|
39
36
|
end
|
|
40
37
|
end
|
|
41
38
|
|
|
@@ -48,7 +45,7 @@ module Mongoid
|
|
|
48
45
|
def pull(modifications)
|
|
49
46
|
modifications.each_pair do |field, value|
|
|
50
47
|
pulls[field] = value
|
|
51
|
-
pull_fields[field.split(
|
|
48
|
+
pull_fields[field.split('.', 2)[0]] = field
|
|
52
49
|
end
|
|
53
50
|
end
|
|
54
51
|
|
|
@@ -74,10 +71,11 @@ module Mongoid
|
|
|
74
71
|
# @param [ Hash ] modifications The set modifiers.
|
|
75
72
|
def set(modifications)
|
|
76
73
|
modifications.each_pair do |field, value|
|
|
77
|
-
next if field ==
|
|
74
|
+
next if field == '_id'
|
|
75
|
+
|
|
78
76
|
mods = set_conflict?(field) ? conflicting_sets : sets
|
|
79
77
|
add_operation(mods, field, value)
|
|
80
|
-
set_fields[field.split(
|
|
78
|
+
set_fields[field.split('.', 2)[0]] = field
|
|
81
79
|
end
|
|
82
80
|
end
|
|
83
81
|
|
|
@@ -89,7 +87,18 @@ module Mongoid
|
|
|
89
87
|
# @param [ Array<String> ] modifications The unset association names.
|
|
90
88
|
def unset(modifications)
|
|
91
89
|
modifications.each do |field|
|
|
92
|
-
|
|
90
|
+
field = field.to_s
|
|
91
|
+
|
|
92
|
+
if unset_conflict?(field)
|
|
93
|
+
# If the conflicting $set covers the entire parent field (not just a
|
|
94
|
+
# sub-path), it writes the complete current state, which already
|
|
95
|
+
# reflects this unset. Skip the $unset — it's redundant.
|
|
96
|
+
next if unset_superseded_by_set?(field)
|
|
97
|
+
|
|
98
|
+
conflicting_unsets.update(field => true)
|
|
99
|
+
else
|
|
100
|
+
unsets.update(field => true)
|
|
101
|
+
end
|
|
93
102
|
end
|
|
94
103
|
end
|
|
95
104
|
|
|
@@ -119,7 +128,7 @@ module Mongoid
|
|
|
119
128
|
end
|
|
120
129
|
|
|
121
130
|
# Adds or appends an array operation with the $each specifier used
|
|
122
|
-
# in
|
|
131
|
+
# in conjunction with $push.
|
|
123
132
|
#
|
|
124
133
|
# @example Add the operation.
|
|
125
134
|
# modifications.add_operation(mods, field, value)
|
|
@@ -130,10 +139,10 @@ module Mongoid
|
|
|
130
139
|
def add_each_operation(mods, field, value)
|
|
131
140
|
if mods.has_key?(field)
|
|
132
141
|
value.each do |val|
|
|
133
|
-
mods[field][
|
|
142
|
+
mods[field]['$each'].push(val)
|
|
134
143
|
end
|
|
135
144
|
else
|
|
136
|
-
mods[field] = {
|
|
145
|
+
mods[field] = { '$each' => value }
|
|
137
146
|
end
|
|
138
147
|
end
|
|
139
148
|
|
|
@@ -144,7 +153,7 @@ module Mongoid
|
|
|
144
153
|
#
|
|
145
154
|
# @return [ Hash ] The $addToSet operations.
|
|
146
155
|
def add_to_sets
|
|
147
|
-
self[
|
|
156
|
+
self['$addToSet'] ||= {}
|
|
148
157
|
end
|
|
149
158
|
|
|
150
159
|
# Is the operation going to be a conflict for a $set?
|
|
@@ -156,10 +165,20 @@ module Mongoid
|
|
|
156
165
|
#
|
|
157
166
|
# @return [ true | false ] If this field is a conflict.
|
|
158
167
|
def set_conflict?(field)
|
|
159
|
-
name = field.split(
|
|
168
|
+
name = field.split('.', 2)[0]
|
|
160
169
|
pull_fields.has_key?(name) || push_fields.has_key?(name)
|
|
161
170
|
end
|
|
162
171
|
|
|
172
|
+
# Is the operation going to be a conflict for an $unset?
|
|
173
|
+
#
|
|
174
|
+
# @param [ String ] field The field.
|
|
175
|
+
#
|
|
176
|
+
# @return [ true | false ] If this field is a conflict.
|
|
177
|
+
def unset_conflict?(field)
|
|
178
|
+
key = field.split('.', 2)[0]
|
|
179
|
+
set_fields.has_key?(key)
|
|
180
|
+
end
|
|
181
|
+
|
|
163
182
|
# Is the operation going to be a conflict for a $push?
|
|
164
183
|
#
|
|
165
184
|
# @example Is this a conflict for a push?
|
|
@@ -169,11 +188,23 @@ module Mongoid
|
|
|
169
188
|
#
|
|
170
189
|
# @return [ true | false ] If this field is a conflict.
|
|
171
190
|
def push_conflict?(field)
|
|
172
|
-
name = field.split(
|
|
191
|
+
name = field.split('.', 2)[0]
|
|
173
192
|
set_fields.has_key?(name) || pull_fields.has_key?(name) ||
|
|
174
193
|
(push_fields.keys.count { |item| item.split('.', 2).first == name } > 1)
|
|
175
194
|
end
|
|
176
195
|
|
|
196
|
+
# Returns true if the $unset is made redundant by a $set that covers
|
|
197
|
+
# the entire root-level field. When $set "children" is issued, the
|
|
198
|
+
# current (live) state of the array already includes all pending changes
|
|
199
|
+
# (e.g., embedded association removed), so a $unset for any children.*.x
|
|
200
|
+
# field is unnecessary.
|
|
201
|
+
#
|
|
202
|
+
# @param [ String ] field the field
|
|
203
|
+
def unset_superseded_by_set?(field)
|
|
204
|
+
key = field.split('.', 2).first
|
|
205
|
+
sets(initialize: false).has_key?(key)
|
|
206
|
+
end
|
|
207
|
+
|
|
177
208
|
# Get the conflicting pull modifications.
|
|
178
209
|
#
|
|
179
210
|
# @example Get the conflicting pulls.
|
|
@@ -181,7 +212,7 @@ module Mongoid
|
|
|
181
212
|
#
|
|
182
213
|
# @return [ Hash ] The conflicting pull operations.
|
|
183
214
|
def conflicting_pulls
|
|
184
|
-
conflicts[
|
|
215
|
+
conflicts['$pullAll'] ||= {}
|
|
185
216
|
end
|
|
186
217
|
|
|
187
218
|
# Get the conflicting push modifications.
|
|
@@ -191,7 +222,7 @@ module Mongoid
|
|
|
191
222
|
#
|
|
192
223
|
# @return [ Hash ] The conflicting push operations.
|
|
193
224
|
def conflicting_pushes
|
|
194
|
-
conflicts[
|
|
225
|
+
conflicts['$push'] ||= {}
|
|
195
226
|
end
|
|
196
227
|
|
|
197
228
|
# Get the conflicting set modifications.
|
|
@@ -201,7 +232,14 @@ module Mongoid
|
|
|
201
232
|
#
|
|
202
233
|
# @return [ Hash ] The conflicting set operations.
|
|
203
234
|
def conflicting_sets
|
|
204
|
-
conflicts[
|
|
235
|
+
conflicts['$set'] ||= {}
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# Get the conflicting unset modifications.
|
|
239
|
+
#
|
|
240
|
+
# @return [ Hash ] The conflicting unset operations.
|
|
241
|
+
def conflicting_unsets
|
|
242
|
+
conflicts['$unset'] ||= {}
|
|
205
243
|
end
|
|
206
244
|
|
|
207
245
|
# Get the push operations that would have conflicted with the sets.
|
|
@@ -251,7 +289,7 @@ module Mongoid
|
|
|
251
289
|
#
|
|
252
290
|
# @return [ Hash ] The $pullAll operations.
|
|
253
291
|
def pull_alls
|
|
254
|
-
self[
|
|
292
|
+
self['$pullAll'] ||= {}
|
|
255
293
|
end
|
|
256
294
|
|
|
257
295
|
# Get the $pull operations or initialize a new one.
|
|
@@ -261,7 +299,7 @@ module Mongoid
|
|
|
261
299
|
#
|
|
262
300
|
# @return [ Hash ] The $pull operations.
|
|
263
301
|
def pulls
|
|
264
|
-
self[
|
|
302
|
+
self['$pull'] ||= {}
|
|
265
303
|
end
|
|
266
304
|
|
|
267
305
|
# Get the $push/$each operations or initialize a new one.
|
|
@@ -271,7 +309,7 @@ module Mongoid
|
|
|
271
309
|
#
|
|
272
310
|
# @return [ Hash ] The $push/$each operations.
|
|
273
311
|
def pushes
|
|
274
|
-
self[
|
|
312
|
+
self['$push'] ||= {}
|
|
275
313
|
end
|
|
276
314
|
|
|
277
315
|
# Get the $set operations or initialize a new one.
|
|
@@ -280,8 +318,10 @@ module Mongoid
|
|
|
280
318
|
# modifiers.sets
|
|
281
319
|
#
|
|
282
320
|
# @return [ Hash ] The $set operations.
|
|
283
|
-
def sets
|
|
284
|
-
self[
|
|
321
|
+
def sets(initialize: true)
|
|
322
|
+
return self['$set'] unless initialize
|
|
323
|
+
|
|
324
|
+
self['$set'] ||= {}
|
|
285
325
|
end
|
|
286
326
|
|
|
287
327
|
# Get the $unset operations or initialize a new one.
|
|
@@ -291,7 +331,7 @@ module Mongoid
|
|
|
291
331
|
#
|
|
292
332
|
# @return [ Hash ] The $unset operations.
|
|
293
333
|
def unsets
|
|
294
|
-
self[
|
|
334
|
+
self['$unset'] ||= {}
|
|
295
335
|
end
|
|
296
336
|
end
|
|
297
337
|
end
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Atomic
|
|
6
5
|
module Paths
|
|
7
6
|
module Embedded
|
|
8
|
-
|
|
9
7
|
# This class encapsulates behavior for locating and updating
|
|
10
8
|
# documents that are defined as an embedded 1-n.
|
|
11
9
|
class Many
|
|
@@ -19,7 +17,7 @@ module Mongoid
|
|
|
19
17
|
# @param [ Document ] document The document to generate the paths for.
|
|
20
18
|
def initialize(document)
|
|
21
19
|
@document, @parent = document, document._parent
|
|
22
|
-
@insert_modifier, @delete_modifier =
|
|
20
|
+
@insert_modifier, @delete_modifier = '$push', '$pull'
|
|
23
21
|
end
|
|
24
22
|
|
|
25
23
|
# Get the position of the document in the hierarchy. This will
|
|
@@ -32,12 +30,11 @@ module Mongoid
|
|
|
32
30
|
# @return [ String ] The position of the document.
|
|
33
31
|
def position
|
|
34
32
|
pos = parent.atomic_position
|
|
35
|
-
locator = document.new_record? ?
|
|
36
|
-
"#{pos}#{
|
|
33
|
+
locator = document.new_record? ? '' : ".#{document._index}"
|
|
34
|
+
"#{pos}#{'.' unless pos.blank?}#{document._association.store_as}#{locator}"
|
|
37
35
|
end
|
|
38
36
|
|
|
39
37
|
class << self
|
|
40
|
-
|
|
41
38
|
# Get the position of where the document would go for the given
|
|
42
39
|
# association. The use case for this function is when trying to
|
|
43
40
|
# persist an empty list for an embedded association. All of the
|
|
@@ -51,7 +48,7 @@ module Mongoid
|
|
|
51
48
|
# @return [ String ] The position string.
|
|
52
49
|
def position_without_document(parent, association)
|
|
53
50
|
pos = parent.atomic_position
|
|
54
|
-
"#{pos}#{
|
|
51
|
+
"#{pos}#{'.' unless pos.blank?}#{association.store_as}"
|
|
55
52
|
end
|
|
56
53
|
end
|
|
57
54
|
end
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Atomic
|
|
6
5
|
module Paths
|
|
7
6
|
module Embedded
|
|
8
|
-
|
|
9
7
|
# This class encapsulates behavior for locating and updating
|
|
10
8
|
# documents that are defined as an embedded 1-1.
|
|
11
9
|
class One
|
|
@@ -19,7 +17,7 @@ module Mongoid
|
|
|
19
17
|
# @param [ Document ] document The document to generate the paths for.
|
|
20
18
|
def initialize(document)
|
|
21
19
|
@document, @parent = document, document._parent
|
|
22
|
-
@insert_modifier, @delete_modifier =
|
|
20
|
+
@insert_modifier, @delete_modifier = '$set', '$unset'
|
|
23
21
|
end
|
|
24
22
|
|
|
25
23
|
# Get the position of the document in the hierarchy. This will
|
|
@@ -32,7 +30,7 @@ module Mongoid
|
|
|
32
30
|
# @return [ String ] The position of the document.
|
|
33
31
|
def position
|
|
34
32
|
pos = parent.atomic_position
|
|
35
|
-
"#{pos}#{
|
|
33
|
+
"#{pos}#{'.' unless pos.blank?}#{document._association.store_as}"
|
|
36
34
|
end
|
|
37
35
|
end
|
|
38
36
|
end
|