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,16 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Contextual
|
|
6
|
-
|
|
7
5
|
# Mixin module included in Mongoid::Criteria which provides a
|
|
8
6
|
# direct method interface to MongoDB's Update Operators ($set,
|
|
9
7
|
# $pull, $inc, etc.) These operators can be applied to update
|
|
10
8
|
# all documents in the database within the criteria scope,
|
|
11
9
|
# without loading each document into Mongoid's memory.
|
|
12
10
|
module Atomic
|
|
13
|
-
|
|
14
11
|
# Execute an atomic $addToSet on the matching documents.
|
|
15
12
|
#
|
|
16
13
|
# @example Add the value to the set.
|
|
@@ -20,7 +17,7 @@ module Mongoid
|
|
|
20
17
|
#
|
|
21
18
|
# @return [ nil ] Nil.
|
|
22
19
|
def add_to_set(adds)
|
|
23
|
-
view.update_many(
|
|
20
|
+
view.update_many('$addToSet' => collect_operations(adds))
|
|
24
21
|
end
|
|
25
22
|
|
|
26
23
|
# Perform an atomic $addToSet/$each on the matching documents.
|
|
@@ -32,7 +29,7 @@ module Mongoid
|
|
|
32
29
|
#
|
|
33
30
|
# @return [ nil ] Nil.
|
|
34
31
|
def add_each_to_set(adds)
|
|
35
|
-
view.update_many(
|
|
32
|
+
view.update_many('$addToSet' => collect_each_operations(adds))
|
|
36
33
|
end
|
|
37
34
|
|
|
38
35
|
# Perform an atomic $bit operation on the matching documents.
|
|
@@ -44,7 +41,7 @@ module Mongoid
|
|
|
44
41
|
#
|
|
45
42
|
# @return [ nil ] Nil.
|
|
46
43
|
def bit(bits)
|
|
47
|
-
view.update_many(
|
|
44
|
+
view.update_many('$bit' => collect_operations(bits))
|
|
48
45
|
end
|
|
49
46
|
|
|
50
47
|
# Perform an atomic $inc operation on the matching documents.
|
|
@@ -56,7 +53,7 @@ module Mongoid
|
|
|
56
53
|
#
|
|
57
54
|
# @return [ nil ] Nil.
|
|
58
55
|
def inc(incs)
|
|
59
|
-
view.update_many(
|
|
56
|
+
view.update_many('$inc' => collect_operations(incs))
|
|
60
57
|
end
|
|
61
58
|
|
|
62
59
|
# Perform an atomic $mul operation on the matching documents.
|
|
@@ -68,7 +65,7 @@ module Mongoid
|
|
|
68
65
|
#
|
|
69
66
|
# @return [ nil ] Nil.
|
|
70
67
|
def mul(factors)
|
|
71
|
-
view.update_many(
|
|
68
|
+
view.update_many('$mul' => collect_operations(factors))
|
|
72
69
|
end
|
|
73
70
|
|
|
74
71
|
# Perform an atomic $pop operation on the matching documents.
|
|
@@ -83,7 +80,7 @@ module Mongoid
|
|
|
83
80
|
#
|
|
84
81
|
# @return [ nil ] Nil.
|
|
85
82
|
def pop(pops)
|
|
86
|
-
view.update_many(
|
|
83
|
+
view.update_many('$pop' => collect_operations(pops))
|
|
87
84
|
end
|
|
88
85
|
|
|
89
86
|
# Perform an atomic $pull operation on the matching documents.
|
|
@@ -97,7 +94,7 @@ module Mongoid
|
|
|
97
94
|
#
|
|
98
95
|
# @return [ nil ] Nil.
|
|
99
96
|
def pull(pulls)
|
|
100
|
-
view.update_many(
|
|
97
|
+
view.update_many('$pull' => collect_operations(pulls))
|
|
101
98
|
end
|
|
102
99
|
|
|
103
100
|
# Perform an atomic $pullAll operation on the matching documents.
|
|
@@ -109,7 +106,7 @@ module Mongoid
|
|
|
109
106
|
#
|
|
110
107
|
# @return [ nil ] Nil.
|
|
111
108
|
def pull_all(pulls)
|
|
112
|
-
view.update_many(
|
|
109
|
+
view.update_many('$pullAll' => collect_operations(pulls))
|
|
113
110
|
end
|
|
114
111
|
|
|
115
112
|
# Perform an atomic $push operation on the matching documents.
|
|
@@ -121,7 +118,7 @@ module Mongoid
|
|
|
121
118
|
#
|
|
122
119
|
# @return [ nil ] Nil.
|
|
123
120
|
def push(pushes)
|
|
124
|
-
view.update_many(
|
|
121
|
+
view.update_many('$push' => collect_operations(pushes))
|
|
125
122
|
end
|
|
126
123
|
|
|
127
124
|
# Perform an atomic $push/$each operation on the matching documents.
|
|
@@ -133,7 +130,7 @@ module Mongoid
|
|
|
133
130
|
#
|
|
134
131
|
# @return [ nil ] Nil.
|
|
135
132
|
def push_all(pushes)
|
|
136
|
-
view.update_many(
|
|
133
|
+
view.update_many('$push' => collect_each_operations(pushes))
|
|
137
134
|
end
|
|
138
135
|
|
|
139
136
|
# Perform an atomic $rename of fields on the matching documents.
|
|
@@ -145,11 +142,10 @@ module Mongoid
|
|
|
145
142
|
#
|
|
146
143
|
# @return [ nil ] Nil.
|
|
147
144
|
def rename(renames)
|
|
148
|
-
operations = renames.
|
|
145
|
+
operations = renames.each_with_object({}) do |(old_name, new_name), ops|
|
|
149
146
|
ops[old_name] = new_name.to_s
|
|
150
|
-
ops
|
|
151
147
|
end
|
|
152
|
-
view.update_many(
|
|
148
|
+
view.update_many('$rename' => collect_operations(operations))
|
|
153
149
|
end
|
|
154
150
|
|
|
155
151
|
# Perform an atomic $set of fields on the matching documents.
|
|
@@ -161,7 +157,7 @@ module Mongoid
|
|
|
161
157
|
#
|
|
162
158
|
# @return [ nil ] Nil.
|
|
163
159
|
def set(sets)
|
|
164
|
-
view.update_many(
|
|
160
|
+
view.update_many('$set' => collect_operations(sets))
|
|
165
161
|
end
|
|
166
162
|
|
|
167
163
|
# Perform an atomic $unset of a field on the matching documents.
|
|
@@ -198,9 +194,9 @@ module Mongoid
|
|
|
198
194
|
#
|
|
199
195
|
# @return [ nil ] Nil.
|
|
200
196
|
def set_min(fields)
|
|
201
|
-
view.update_many(
|
|
197
|
+
view.update_many('$min' => collect_operations(fields))
|
|
202
198
|
end
|
|
203
|
-
alias
|
|
199
|
+
alias clamp_upper_bound set_min
|
|
204
200
|
|
|
205
201
|
# Performs an atomic $max update operation on the given field or fields.
|
|
206
202
|
# Each field will be set to the maximum of [current_value, given value].
|
|
@@ -221,9 +217,9 @@ module Mongoid
|
|
|
221
217
|
#
|
|
222
218
|
# @return [ nil ] Nil.
|
|
223
219
|
def set_max(fields)
|
|
224
|
-
view.update_many(
|
|
220
|
+
view.update_many('$max' => collect_operations(fields))
|
|
225
221
|
end
|
|
226
|
-
alias
|
|
222
|
+
alias clamp_lower_bound set_max
|
|
227
223
|
|
|
228
224
|
private
|
|
229
225
|
|
|
@@ -231,7 +227,7 @@ module Mongoid
|
|
|
231
227
|
#
|
|
232
228
|
# @param [ Array | Hash ] ops The operations to collect.
|
|
233
229
|
# @param [ Hash ] aggregator The hash to use to aggregate the operations.
|
|
234
|
-
#
|
|
230
|
+
#
|
|
235
231
|
# @return [ Hash ] The aggregated operations, by field.
|
|
236
232
|
def collect_operations(ops, aggregator = {})
|
|
237
233
|
ops.each_with_object(aggregator) do |(field, value), operations|
|
|
@@ -241,7 +237,7 @@ module Mongoid
|
|
|
241
237
|
|
|
242
238
|
def collect_each_operations(ops)
|
|
243
239
|
ops.each_with_object({}) do |(field, value), operations|
|
|
244
|
-
operations[database_field_name(field)] = {
|
|
240
|
+
operations[database_field_name(field)] = { '$each' => Array.wrap(value).mongoize }
|
|
245
241
|
end
|
|
246
242
|
end
|
|
247
243
|
|
|
@@ -261,7 +257,7 @@ module Mongoid
|
|
|
261
257
|
# @return [ Hash ] The selector for the atomic $unset operation.
|
|
262
258
|
def collect_unset_operations(ops)
|
|
263
259
|
ops.map { |op| op.is_a?(Hash) ? op.keys : op }.flatten
|
|
264
|
-
.map { |field| [database_field_name(field), true] }.to_h
|
|
260
|
+
.map { |field| [ database_field_name(field), true ] }.to_h
|
|
265
261
|
end
|
|
266
262
|
end
|
|
267
263
|
end
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Contextual
|
|
6
|
-
|
|
7
5
|
# Mixin module included in objects which represent database commands.
|
|
8
6
|
module Command
|
|
9
|
-
|
|
10
7
|
# @attribute [r] collection The collection to query against.
|
|
11
8
|
# @attribute [r] criteria The criteria for the context.
|
|
12
9
|
attr_reader :collection, :criteria
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Contextual
|
|
6
|
-
|
|
7
5
|
# Represents a mapReduce database command instruction.
|
|
8
6
|
class MapReduce
|
|
9
7
|
extend Forwardable
|
|
@@ -20,7 +18,7 @@ module Mongoid
|
|
|
20
18
|
#
|
|
21
19
|
# @return [ Hash ] The counts.
|
|
22
20
|
def counts
|
|
23
|
-
results[
|
|
21
|
+
results['counts']
|
|
24
22
|
end
|
|
25
23
|
|
|
26
24
|
# Iterates over each of the documents in the map/reduce, excluding the
|
|
@@ -32,12 +30,10 @@ module Mongoid
|
|
|
32
30
|
# end
|
|
33
31
|
#
|
|
34
32
|
# @return [ Enumerator ] The enumerator.
|
|
35
|
-
def each
|
|
33
|
+
def each(&block)
|
|
36
34
|
validate_out!
|
|
37
35
|
if block_given?
|
|
38
|
-
@map_reduce.each
|
|
39
|
-
yield doc
|
|
40
|
-
end
|
|
36
|
+
@map_reduce.each(&block)
|
|
41
37
|
else
|
|
42
38
|
@map_reduce.to_enum
|
|
43
39
|
end
|
|
@@ -50,7 +46,7 @@ module Mongoid
|
|
|
50
46
|
#
|
|
51
47
|
# @return [ Integer ] The number of emitted documents.
|
|
52
48
|
def emitted
|
|
53
|
-
counts[
|
|
49
|
+
counts['emit']
|
|
54
50
|
end
|
|
55
51
|
|
|
56
52
|
# Provide a finalize js function for the map/reduce.
|
|
@@ -87,7 +83,7 @@ module Mongoid
|
|
|
87
83
|
#
|
|
88
84
|
# @return [ Integer ] The number of input documents.
|
|
89
85
|
def input
|
|
90
|
-
counts[
|
|
86
|
+
counts['input']
|
|
91
87
|
end
|
|
92
88
|
|
|
93
89
|
# Sets the map/reduce to use jsMode.
|
|
@@ -138,7 +134,7 @@ module Mongoid
|
|
|
138
134
|
#
|
|
139
135
|
# @return [ Integer ] The number of output documents.
|
|
140
136
|
def output
|
|
141
|
-
counts[
|
|
137
|
+
counts['output']
|
|
142
138
|
end
|
|
143
139
|
|
|
144
140
|
# Get the raw output from the map/reduce operation.
|
|
@@ -153,7 +149,7 @@ module Mongoid
|
|
|
153
149
|
opts = { read: criteria.options.fetch(:read) } if criteria.options[:read]
|
|
154
150
|
@map_reduce.database.command(cmd, (opts || {}).merge(session: _session)).first
|
|
155
151
|
end
|
|
156
|
-
alias
|
|
152
|
+
alias results raw
|
|
157
153
|
|
|
158
154
|
# Execute the map/reduce, returning the raw output.
|
|
159
155
|
# Useful when you don't care about map/reduce's output.
|
|
@@ -162,7 +158,7 @@ module Mongoid
|
|
|
162
158
|
# map_reduce.execute
|
|
163
159
|
#
|
|
164
160
|
# @return [ Hash ] The raw output
|
|
165
|
-
alias
|
|
161
|
+
alias execute raw
|
|
166
162
|
|
|
167
163
|
# Get the number of documents reduced by the map/reduce.
|
|
168
164
|
#
|
|
@@ -171,7 +167,7 @@ module Mongoid
|
|
|
171
167
|
#
|
|
172
168
|
# @return [ Integer ] The number of reduced documents.
|
|
173
169
|
def reduced
|
|
174
|
-
counts[
|
|
170
|
+
counts['reduce']
|
|
175
171
|
end
|
|
176
172
|
|
|
177
173
|
# Adds a javascript object to the global scope of the map/reduce.
|
|
@@ -194,7 +190,7 @@ module Mongoid
|
|
|
194
190
|
#
|
|
195
191
|
# @return [ Float ] The time in milliseconds.
|
|
196
192
|
def time
|
|
197
|
-
results[
|
|
193
|
+
results['timeMillis']
|
|
198
194
|
end
|
|
199
195
|
|
|
200
196
|
# Get a pretty string representation of the map/reduce, including the
|
|
@@ -205,14 +201,14 @@ module Mongoid
|
|
|
205
201
|
#
|
|
206
202
|
# @return [ String ] The inspection string.
|
|
207
203
|
def inspect
|
|
208
|
-
%
|
|
204
|
+
%(#<Mongoid::Contextual::MapReduce
|
|
209
205
|
selector: #{criteria.selector.inspect}
|
|
210
206
|
class: #{criteria.klass}
|
|
211
207
|
map: #{command[:map]}
|
|
212
208
|
reduce: #{command[:reduce]}
|
|
213
209
|
finalize: #{command[:finalize]}
|
|
214
210
|
out: #{command[:out].inspect}>
|
|
215
|
-
|
|
211
|
+
)
|
|
216
212
|
end
|
|
217
213
|
|
|
218
214
|
# Returns the selector of the command spec.
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
5
|
-
require
|
|
3
|
+
require 'mongoid/contextual/aggregable/memory'
|
|
4
|
+
require 'mongoid/association/eager_loadable'
|
|
6
5
|
|
|
7
6
|
module Mongoid
|
|
8
7
|
module Contextual
|
|
9
|
-
|
|
10
8
|
# Context object used for performing bulk query and persistence
|
|
11
9
|
# operations on documents which have been loaded into application
|
|
12
10
|
# memory. The method interface of this class is consistent with
|
|
@@ -34,6 +32,7 @@ module Mongoid
|
|
|
34
32
|
# @return [ true | false ] If the objects are equal.
|
|
35
33
|
def ==(other)
|
|
36
34
|
return false unless other.respond_to?(:entries)
|
|
35
|
+
|
|
37
36
|
entries == other.entries
|
|
38
37
|
end
|
|
39
38
|
|
|
@@ -51,13 +50,13 @@ module Mongoid
|
|
|
51
50
|
end
|
|
52
51
|
unless removed.empty?
|
|
53
52
|
collection.find(selector).update_one(
|
|
54
|
-
positionally(selector,
|
|
53
|
+
positionally(selector, '$pullAll' => { path => removed }),
|
|
55
54
|
session: _session
|
|
56
55
|
)
|
|
57
56
|
end
|
|
58
57
|
deleted
|
|
59
58
|
end
|
|
60
|
-
alias
|
|
59
|
+
alias delete_all delete
|
|
61
60
|
|
|
62
61
|
# Destroy all documents in the database that match the selector.
|
|
63
62
|
#
|
|
@@ -73,7 +72,7 @@ module Mongoid
|
|
|
73
72
|
end
|
|
74
73
|
deleted
|
|
75
74
|
end
|
|
76
|
-
alias
|
|
75
|
+
alias destroy_all destroy
|
|
77
76
|
|
|
78
77
|
# Get the distinct values in the db for the provided field.
|
|
79
78
|
#
|
|
@@ -96,11 +95,9 @@ module Mongoid
|
|
|
96
95
|
# end
|
|
97
96
|
#
|
|
98
97
|
# @return [ Enumerator ] The enumerator.
|
|
99
|
-
def each
|
|
98
|
+
def each(&block)
|
|
100
99
|
if block_given?
|
|
101
|
-
documents_for_iteration.each
|
|
102
|
-
yield(doc)
|
|
103
|
-
end
|
|
100
|
+
documents_for_iteration.each(&block)
|
|
104
101
|
self
|
|
105
102
|
else
|
|
106
103
|
to_enum
|
|
@@ -141,14 +138,19 @@ module Mongoid
|
|
|
141
138
|
#
|
|
142
139
|
# @return [ Document ] The first document.
|
|
143
140
|
def first(limit = nil)
|
|
144
|
-
|
|
145
|
-
|
|
141
|
+
use_first = limit.nil?
|
|
142
|
+
limit ||= 1
|
|
143
|
+
if criteria.use_lookup?
|
|
144
|
+
@criteria = criteria.limit(limit)
|
|
145
|
+
result = eager_load_with_lookup
|
|
146
146
|
else
|
|
147
|
-
eager_load(
|
|
147
|
+
result = eager_load(documents.first(limit))
|
|
148
148
|
end
|
|
149
|
+
|
|
150
|
+
use_first ? result.first : result
|
|
149
151
|
end
|
|
150
|
-
alias
|
|
151
|
-
alias
|
|
152
|
+
alias one first
|
|
153
|
+
alias find_first first
|
|
152
154
|
|
|
153
155
|
# Get the first document in the database for the criteria's selector or
|
|
154
156
|
# raise an error if none is found.
|
|
@@ -207,7 +209,7 @@ module Mongoid
|
|
|
207
209
|
if limit
|
|
208
210
|
eager_load(documents.last(limit))
|
|
209
211
|
else
|
|
210
|
-
eager_load([documents.last]).first
|
|
212
|
+
eager_load([ documents.last ]).first
|
|
211
213
|
end
|
|
212
214
|
end
|
|
213
215
|
|
|
@@ -234,7 +236,7 @@ module Mongoid
|
|
|
234
236
|
def length
|
|
235
237
|
documents.length
|
|
236
238
|
end
|
|
237
|
-
alias
|
|
239
|
+
alias size length
|
|
238
240
|
|
|
239
241
|
# Limits the number of documents that are returned.
|
|
240
242
|
#
|
|
@@ -272,9 +274,9 @@ module Mongoid
|
|
|
272
274
|
#
|
|
273
275
|
# @return [ Object | Array<Object> ] The picked values.
|
|
274
276
|
def pick(*fields)
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
277
|
+
return unless doc = documents.first
|
|
278
|
+
|
|
279
|
+
pluck_from_doc(doc, *fields)
|
|
278
280
|
end
|
|
279
281
|
|
|
280
282
|
# Tally the field values in memory.
|
|
@@ -286,7 +288,7 @@ module Mongoid
|
|
|
286
288
|
#
|
|
287
289
|
# @return [ Hash ] The hash of counts.
|
|
288
290
|
def tally(field)
|
|
289
|
-
|
|
291
|
+
documents.each_with_object({}) do |d, acc|
|
|
290
292
|
v = retrieve_value_at_path(d, field)
|
|
291
293
|
acc[v] ||= 0
|
|
292
294
|
acc[v] += 1
|
|
@@ -305,7 +307,7 @@ module Mongoid
|
|
|
305
307
|
if limit
|
|
306
308
|
eager_load(documents.take(limit))
|
|
307
309
|
else
|
|
308
|
-
eager_load([documents.first]).first
|
|
310
|
+
eager_load([ documents.first ]).first
|
|
309
311
|
end
|
|
310
312
|
end
|
|
311
313
|
|
|
@@ -380,7 +382,7 @@ module Mongoid
|
|
|
380
382
|
#
|
|
381
383
|
# @return [ Document ] The second document.
|
|
382
384
|
def second
|
|
383
|
-
eager_load([documents.second]).first
|
|
385
|
+
eager_load([ documents.second ]).first
|
|
384
386
|
end
|
|
385
387
|
|
|
386
388
|
# Get the second document in the database for the criteria's selector or
|
|
@@ -404,7 +406,7 @@ module Mongoid
|
|
|
404
406
|
#
|
|
405
407
|
# @return [ Document ] The third document.
|
|
406
408
|
def third
|
|
407
|
-
eager_load([documents.third]).first
|
|
409
|
+
eager_load([ documents.third ]).first
|
|
408
410
|
end
|
|
409
411
|
|
|
410
412
|
# Get the third document in the database for the criteria's selector or
|
|
@@ -428,7 +430,7 @@ module Mongoid
|
|
|
428
430
|
#
|
|
429
431
|
# @return [ Document ] The fourth document.
|
|
430
432
|
def fourth
|
|
431
|
-
eager_load([documents.fourth]).first
|
|
433
|
+
eager_load([ documents.fourth ]).first
|
|
432
434
|
end
|
|
433
435
|
|
|
434
436
|
# Get the fourth document in the database for the criteria's selector or
|
|
@@ -452,7 +454,7 @@ module Mongoid
|
|
|
452
454
|
#
|
|
453
455
|
# @return [ Document ] The fifth document.
|
|
454
456
|
def fifth
|
|
455
|
-
eager_load([documents.fifth]).first
|
|
457
|
+
eager_load([ documents.fifth ]).first
|
|
456
458
|
end
|
|
457
459
|
|
|
458
460
|
# Get the fifth document in the database for the criteria's selector or
|
|
@@ -476,7 +478,7 @@ module Mongoid
|
|
|
476
478
|
#
|
|
477
479
|
# @return [ Document ] The second to last document.
|
|
478
480
|
def second_to_last
|
|
479
|
-
eager_load([documents.second_to_last]).first
|
|
481
|
+
eager_load([ documents.second_to_last ]).first
|
|
480
482
|
end
|
|
481
483
|
|
|
482
484
|
# Get the second to last document in the database for the criteria's selector or
|
|
@@ -500,7 +502,7 @@ module Mongoid
|
|
|
500
502
|
#
|
|
501
503
|
# @return [ Document ] The third to last document.
|
|
502
504
|
def third_to_last
|
|
503
|
-
eager_load([documents.third_to_last]).first
|
|
505
|
+
eager_load([ documents.third_to_last ]).first
|
|
504
506
|
end
|
|
505
507
|
|
|
506
508
|
# Get the third to last document in the database for the criteria's selector or
|
|
@@ -519,6 +521,14 @@ module Mongoid
|
|
|
519
521
|
|
|
520
522
|
private
|
|
521
523
|
|
|
524
|
+
# Returns materialized documents for use in the cross-cluster $lookup
|
|
525
|
+
# fallback. In the memory context, documents are already instantiated.
|
|
526
|
+
#
|
|
527
|
+
# @api private
|
|
528
|
+
def docs_for_lookup_fallback
|
|
529
|
+
documents
|
|
530
|
+
end
|
|
531
|
+
|
|
522
532
|
# Get the documents the context should iterate. This follows 3 rules:
|
|
523
533
|
#
|
|
524
534
|
# @api private
|
|
@@ -530,7 +540,7 @@ module Mongoid
|
|
|
530
540
|
def documents_for_iteration
|
|
531
541
|
docs = documents[skipping || 0, limiting || documents.length] || []
|
|
532
542
|
if eager_loadable?
|
|
533
|
-
eager_load(docs)
|
|
543
|
+
criteria.use_lookup? ? eager_load_with_lookup : eager_load(docs)
|
|
534
544
|
end
|
|
535
545
|
docs
|
|
536
546
|
end
|
|
@@ -546,14 +556,15 @@ module Mongoid
|
|
|
546
556
|
# @param [ Array<Document> ] docs The docs to update.
|
|
547
557
|
def update_documents(attributes, docs)
|
|
548
558
|
return false if !attributes || docs.empty?
|
|
549
|
-
|
|
559
|
+
|
|
560
|
+
updates = { '$set' => {} }
|
|
550
561
|
docs.each do |doc|
|
|
551
562
|
@selector ||= root.atomic_selector
|
|
552
563
|
doc.write_attributes(attributes)
|
|
553
|
-
updates[
|
|
564
|
+
updates['$set'].merge!(doc.atomic_updates['$set'] || {})
|
|
554
565
|
doc.move_changes
|
|
555
566
|
end
|
|
556
|
-
collection.find(selector).update_one(updates, session: _session) unless updates[
|
|
567
|
+
collection.find(selector).update_one(updates, session: _session) unless updates['$set'].empty?
|
|
557
568
|
end
|
|
558
569
|
|
|
559
570
|
# Get the limiting value.
|
|
@@ -576,9 +587,7 @@ module Mongoid
|
|
|
576
587
|
# @param [ Integer ] value The limit.
|
|
577
588
|
#
|
|
578
589
|
# @return [ Integer ] The limit.
|
|
579
|
-
|
|
580
|
-
@limiting = value
|
|
581
|
-
end
|
|
590
|
+
attr_writer :limiting
|
|
582
591
|
|
|
583
592
|
# Get the skipping value.
|
|
584
593
|
#
|
|
@@ -600,9 +609,7 @@ module Mongoid
|
|
|
600
609
|
# @param [ Integer ] value The skip.
|
|
601
610
|
#
|
|
602
611
|
# @return [ Integer ] The skip.
|
|
603
|
-
|
|
604
|
-
@skipping = value
|
|
605
|
-
end
|
|
612
|
+
attr_writer :skipping
|
|
606
613
|
|
|
607
614
|
# Apply criteria options.
|
|
608
615
|
#
|
|
@@ -614,6 +621,7 @@ module Mongoid
|
|
|
614
621
|
# @return [ Memory ] self.
|
|
615
622
|
def apply_options
|
|
616
623
|
raise Errors::InMemoryCollationNotSupported.new if criteria.options[:collation]
|
|
624
|
+
|
|
617
625
|
skip(criteria.options[:skip]).limit(criteria.options[:limit])
|
|
618
626
|
end
|
|
619
627
|
|
|
@@ -622,9 +630,9 @@ module Mongoid
|
|
|
622
630
|
# @example Apply the sorting params.
|
|
623
631
|
# context.apply_sorting
|
|
624
632
|
def apply_sorting
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
633
|
+
return unless spec = criteria.options[:sort]
|
|
634
|
+
|
|
635
|
+
in_place_sort(spec)
|
|
628
636
|
end
|
|
629
637
|
|
|
630
638
|
# Compare two values, handling the cases when
|
|
@@ -677,8 +685,6 @@ module Mongoid
|
|
|
677
685
|
doc.destroyed = true
|
|
678
686
|
end
|
|
679
687
|
|
|
680
|
-
private
|
|
681
|
-
|
|
682
688
|
def _session
|
|
683
689
|
@criteria.send(:_session)
|
|
684
690
|
end
|
|
@@ -722,30 +728,31 @@ module Mongoid
|
|
|
722
728
|
# doesn't exist.
|
|
723
729
|
def retrieve_value_at_path(document, field_path)
|
|
724
730
|
return if field_path.blank? || !document
|
|
731
|
+
|
|
725
732
|
segment, remaining = field_path.to_s.split('.', 2)
|
|
726
733
|
|
|
727
734
|
curr = if document.is_a?(Document)
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
735
|
+
# Retrieves field for segment to check localization. Only does one
|
|
736
|
+
# iteration since there's no dots
|
|
737
|
+
res = if remaining
|
|
738
|
+
field = document.class.traverse_association_tree(segment)
|
|
739
|
+
# If this is a localized field, and there are remaining, get the
|
|
740
|
+
# _translations hash so that we can get the specified translation in
|
|
741
|
+
# the remaining
|
|
742
|
+
document.send("#{segment}_translations") if field&.localized?
|
|
743
|
+
end
|
|
744
|
+
meth = klass.aliased_associations[segment] || segment
|
|
745
|
+
res.nil? ? document.try(meth) : res
|
|
746
|
+
elsif document.is_a?(Hash)
|
|
747
|
+
# TODO: Remove the indifferent access when implementing MONGOID-5410.
|
|
748
|
+
if document.key?(segment.to_s)
|
|
749
|
+
document[segment.to_s]
|
|
750
|
+
else
|
|
751
|
+
document[segment.to_sym]
|
|
752
|
+
end
|
|
753
|
+
else
|
|
754
|
+
nil
|
|
755
|
+
end
|
|
749
756
|
|
|
750
757
|
return curr unless remaining
|
|
751
758
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
require "mongoid/association/eager_loadable"
|
|
1
|
+
require 'mongoid/association/eager_loadable'
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Contextual
|
|
@@ -30,7 +29,7 @@ module Mongoid
|
|
|
30
29
|
# @return [ Concurrent::ThreadPoolExecutor ] The executor
|
|
31
30
|
# to be used to execute document loading tasks.
|
|
32
31
|
def self.global_thread_pool_async_query_executor
|
|
33
|
-
create_pool =
|
|
32
|
+
create_pool = proc do |concurrency|
|
|
34
33
|
Concurrent::ThreadPoolExecutor.new(
|
|
35
34
|
min_threads: 0,
|
|
36
35
|
max_threads: concurrency,
|