mongoid 9.0.10 → 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 +8 -14
- data/Rakefile +66 -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 +25 -14
- 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 +48 -8
- 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 +16 -9
- 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 +148 -33
- 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 +14 -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 +255 -133
- 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 +158 -91
- 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 +1265 -1712
- 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 +59 -62
- 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 +28 -2
data/lib/mongoid/config.rb
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
9
|
-
require
|
|
3
|
+
require 'mongoid/config/defaults'
|
|
4
|
+
require 'mongoid/config/environment'
|
|
5
|
+
require 'mongoid/config/options'
|
|
6
|
+
require 'mongoid/config/validators'
|
|
7
|
+
require 'mongoid/config/introspection'
|
|
8
|
+
require 'mongoid/config/encryption'
|
|
10
9
|
|
|
11
10
|
module Mongoid
|
|
12
|
-
|
|
13
11
|
# This module defines all the configuration options for Mongoid, including
|
|
14
12
|
# the database connections.
|
|
15
13
|
module Config
|
|
@@ -39,7 +37,7 @@ module Mongoid
|
|
|
39
37
|
option :belongs_to_required_by_default, default: true
|
|
40
38
|
|
|
41
39
|
# Set the global discriminator key.
|
|
42
|
-
option :discriminator_key, default:
|
|
40
|
+
option :discriminator_key, default: '_type'
|
|
43
41
|
|
|
44
42
|
# Raise an exception when a field is redefined.
|
|
45
43
|
option :duplicate_fields_exception, default: false
|
|
@@ -81,23 +79,23 @@ module Mongoid
|
|
|
81
79
|
option :map_big_decimal_to_decimal128, default: true
|
|
82
80
|
|
|
83
81
|
# Allow BSON::Decimal128 to be parsed and returned directly in
|
|
84
|
-
# field values. When BSON 5 is present and
|
|
82
|
+
# field values. When BSON 5 is present and this option is set to false
|
|
85
83
|
# (the default), BSON::Decimal128 values in the database will be returned
|
|
86
84
|
# as BigDecimal.
|
|
87
85
|
#
|
|
88
86
|
# @note this option only has effect when BSON 5+ is present. Otherwise,
|
|
89
87
|
# the setting is ignored.
|
|
90
|
-
option :allow_bson5_decimal128, default: false, on_change:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
end
|
|
88
|
+
option :allow_bson5_decimal128, default: false, on_change: lambda { |allow|
|
|
89
|
+
if BSON::VERSION >= '5.0.0'
|
|
90
|
+
if allow
|
|
91
|
+
BSON::Registry.register(BSON::Decimal128::BSON_TYPE, BSON::Decimal128)
|
|
92
|
+
else
|
|
93
|
+
BSON::Registry.register(BSON::Decimal128::BSON_TYPE, BigDecimal)
|
|
97
94
|
end
|
|
98
95
|
end
|
|
96
|
+
}
|
|
99
97
|
|
|
100
|
-
# Sets the async_query_executor for the application. By default the thread pool executor
|
|
98
|
+
# Sets the async_query_executor for the application. By default, the thread pool executor
|
|
101
99
|
# is set to `:immediate. Options are:
|
|
102
100
|
#
|
|
103
101
|
# - :immediate - Initializes a single +Concurrent::ImmediateExecutor+
|
|
@@ -110,6 +108,99 @@ module Mongoid
|
|
|
110
108
|
# to `:global_thread_pool`.
|
|
111
109
|
option :global_executor_concurrency, default: nil
|
|
112
110
|
|
|
111
|
+
VALID_ISOLATION_LEVELS = %i[ rails thread fiber ].freeze
|
|
112
|
+
|
|
113
|
+
# Defines the isolation level that Mongoid uses to store its internal
|
|
114
|
+
# state.
|
|
115
|
+
#
|
|
116
|
+
# Valid values are:
|
|
117
|
+
# - `:rails` - Uses the isolation level that Rails currently has
|
|
118
|
+
# configured. (This is the default.)
|
|
119
|
+
# - `:thread` - Uses thread-local storage.
|
|
120
|
+
# - `:fiber` - Uses fiber-local storage (only supported in Ruby 3.2+).
|
|
121
|
+
#
|
|
122
|
+
# If set to `:fiber`, Mongoid will use fiber-local storage instead. This
|
|
123
|
+
# may be necessary if you are using libraries like Falcon, which use
|
|
124
|
+
# fibers to manage concurrency.
|
|
125
|
+
#
|
|
126
|
+
# Note that the `:fiber` isolation level is only supported in Ruby 3.2
|
|
127
|
+
# and later, due to semantic differences in how fiber storage is handled
|
|
128
|
+
# in earlier Ruby versions.
|
|
129
|
+
option :isolation_level, default: :rails, on_change: lambda { |level|
|
|
130
|
+
validate_isolation_level!(level)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
# When this flag is true, it will be possible to change the parent of a
|
|
134
|
+
# record in a "has_many" association by passing the child record's id in the
|
|
135
|
+
# nested attributes for another parent record.
|
|
136
|
+
#
|
|
137
|
+
# When this flag is false, attempting to change the parent of a record in a
|
|
138
|
+
# "has-many" association via nested attributes will raise an error.
|
|
139
|
+
#
|
|
140
|
+
# The default is `false`. Note that allowing reparenting via nested attributes
|
|
141
|
+
# is a potential security risk, since it could allow a malicious user to move
|
|
142
|
+
# records that they do not own to a parent record that they do own.
|
|
143
|
+
#
|
|
144
|
+
# This option will be removed in Mongoid 10, and the only behavior will be
|
|
145
|
+
# as if this option were set to false.
|
|
146
|
+
option :allow_reparenting_via_nested_attributes, default: false
|
|
147
|
+
|
|
148
|
+
# When this flag is true, Mongoid will skip sending queries to the database
|
|
149
|
+
# for criteria that are guaranteed to return no results, such as those with
|
|
150
|
+
# an empty $in array (e.g. Band.in(name: [])). The default is false.
|
|
151
|
+
option :allow_short_circuit_queries, default: false
|
|
152
|
+
|
|
153
|
+
# When this flag is true, any documents in associations with `autosave: true`
|
|
154
|
+
# will be saved even if they have not been changed. When this flag is false,
|
|
155
|
+
# only autosaved documents that have been changed will be saved. The default
|
|
156
|
+
# is false.
|
|
157
|
+
#
|
|
158
|
+
# This option will be removed in Mongoid 10, with the only behavior at that
|
|
159
|
+
# point being as if this option were set to false.
|
|
160
|
+
option :autosave_saves_unchanged_documents, default: false
|
|
161
|
+
|
|
162
|
+
# Returns the (potentially-dereferenced) isolation level that Mongoid
|
|
163
|
+
# will use to store its internal state. If `isolation_level` is set to
|
|
164
|
+
# `:rails`, this will return the isolation level that Rails is current
|
|
165
|
+
# configured to use (`ActiveSupport::IsolatedExecutionState.isolation_level`).
|
|
166
|
+
#
|
|
167
|
+
# If using an older version of Rails that does not support
|
|
168
|
+
# ActiveSupport::IsolatedExecutionState, this will return `:thread`
|
|
169
|
+
# instead.
|
|
170
|
+
#
|
|
171
|
+
# @api private
|
|
172
|
+
def real_isolation_level
|
|
173
|
+
return isolation_level unless isolation_level == :rails
|
|
174
|
+
|
|
175
|
+
if defined?(ActiveSupport::IsolatedExecutionState)
|
|
176
|
+
ActiveSupport::IsolatedExecutionState.isolation_level.tap do |level|
|
|
177
|
+
# We can't guarantee that Rails will always support the same
|
|
178
|
+
# isolation levels as Mongoid, so we check here to make sure
|
|
179
|
+
# it's something we can work with.
|
|
180
|
+
validate_isolation_level!(level)
|
|
181
|
+
end
|
|
182
|
+
else
|
|
183
|
+
# The default, if Rails does not support IsolatedExecutionState,
|
|
184
|
+
:thread
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Checks to see if the provided isolation level is something that Mongoid
|
|
189
|
+
# supports. Raises Errors::UnsupportedIsolationLevel if it is not.
|
|
190
|
+
#
|
|
191
|
+
# This will also raise an error if the isolation level is set to `:fiber`
|
|
192
|
+
# and the Ruby version is less than 3.2, since fiber-local storage
|
|
193
|
+
# is not supported in earlier Ruby versions.
|
|
194
|
+
#
|
|
195
|
+
# @api private
|
|
196
|
+
def validate_isolation_level!(level)
|
|
197
|
+
raise Errors::UnsupportedIsolationLevel.new(level) unless VALID_ISOLATION_LEVELS.include?(level)
|
|
198
|
+
|
|
199
|
+
return unless level == :fiber && RUBY_VERSION < '3.2'
|
|
200
|
+
|
|
201
|
+
raise Errors::UnsupportedIsolationLevel.new(level)
|
|
202
|
+
end
|
|
203
|
+
|
|
113
204
|
# When this flag is false, a document will become read-only only once the
|
|
114
205
|
# #readonly! method is called, and an error will be raised on attempting
|
|
115
206
|
# to save or update such documents, instead of just on delete. When this
|
|
@@ -166,7 +257,7 @@ module Mongoid
|
|
|
166
257
|
#
|
|
167
258
|
# Setting this flag to true restores the pre-9.0 behavior, where callbacks
|
|
168
259
|
# for embedded documents are called. This may lead to stack overflow errors
|
|
169
|
-
# if there are more than
|
|
260
|
+
# if there are more than circa 1000 embedded documents in the root
|
|
170
261
|
# document's dependencies graph.
|
|
171
262
|
# See https://jira.mongodb.org/browse/MONGOID-5658 for more details.
|
|
172
263
|
option :around_callbacks_for_embeds, default: false
|
|
@@ -180,6 +271,29 @@ module Mongoid
|
|
|
180
271
|
# See https://jira.mongodb.org/browse/MONGOID-5785 for more details.
|
|
181
272
|
option :allow_scopes_to_unset_default_scope, default: false
|
|
182
273
|
|
|
274
|
+
# When this flag is false, indexes are (roughly) validated on the client
|
|
275
|
+
# to prevent duplicate indexes being declared. This validation is
|
|
276
|
+
# incomplete, however, and can result in some indexes being silently
|
|
277
|
+
# ignored.
|
|
278
|
+
#
|
|
279
|
+
# Setting this to true will allow duplicate indexes to be declared and sent
|
|
280
|
+
# to the server. The server will then validate the indexes and raise an
|
|
281
|
+
# exception if duplicates are detected.
|
|
282
|
+
#
|
|
283
|
+
# See https://jira.mongodb.org/browse/MONGOID-5827 for an example of the
|
|
284
|
+
# consequences of duplicate index checking.
|
|
285
|
+
option :allow_duplicate_index_declarations, default: false
|
|
286
|
+
|
|
287
|
+
# When this flag is true, performing a serializable_hash(only: []) will
|
|
288
|
+
# result in all fields being included. This is the traditional (and default)
|
|
289
|
+
# behavior in Mongoid 9 and earlier.
|
|
290
|
+
#
|
|
291
|
+
# Setting this flag to false will change the behavior to suppress all fields
|
|
292
|
+
# in the serialized hash. This will be the default in Mongoid 10.
|
|
293
|
+
#
|
|
294
|
+
# See https://jira.mongodb.org/browse/MONGOID-5892 for more details.
|
|
295
|
+
option :serializable_hash_with_legacy_only, default: true
|
|
296
|
+
|
|
183
297
|
# Returns the Config singleton, for use in the configure DSL.
|
|
184
298
|
#
|
|
185
299
|
# @return [ self ] The Config singleton.
|
|
@@ -206,11 +320,11 @@ module Mongoid
|
|
|
206
320
|
# config.connect_to("mongoid_test")
|
|
207
321
|
#
|
|
208
322
|
# @param [ String ] name The database name.
|
|
209
|
-
def connect_to(name, options = { read: { mode: :primary }})
|
|
323
|
+
def connect_to(name, options = { read: { mode: :primary } })
|
|
210
324
|
self.clients = {
|
|
211
325
|
default: {
|
|
212
326
|
database: name,
|
|
213
|
-
hosts: [
|
|
327
|
+
hosts: [ 'localhost:27017' ],
|
|
214
328
|
options: options
|
|
215
329
|
}
|
|
216
330
|
}
|
|
@@ -350,12 +464,12 @@ module Mongoid
|
|
|
350
464
|
#
|
|
351
465
|
# @param [ Hash ] options The configuration options.
|
|
352
466
|
def options=(options)
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
467
|
+
return unless options
|
|
468
|
+
|
|
469
|
+
Validators::AsyncQueryExecutor.validate(options)
|
|
470
|
+
options.each_pair do |option, value|
|
|
471
|
+
Validators::Option.validate(option)
|
|
472
|
+
send("#{option}=", value)
|
|
359
473
|
end
|
|
360
474
|
end
|
|
361
475
|
|
|
@@ -376,7 +490,7 @@ module Mongoid
|
|
|
376
490
|
#
|
|
377
491
|
# @return [ String ] The time zone.
|
|
378
492
|
def time_zone
|
|
379
|
-
use_utc? ?
|
|
493
|
+
use_utc? ? 'UTC' : ::Time.zone
|
|
380
494
|
end
|
|
381
495
|
|
|
382
496
|
# Is the application running under passenger?
|
|
@@ -402,6 +516,7 @@ module Mongoid
|
|
|
402
516
|
|
|
403
517
|
def clients=(clients)
|
|
404
518
|
raise Errors::NoClientsConfig.new unless clients
|
|
519
|
+
|
|
405
520
|
c = clients.with_indifferent_access
|
|
406
521
|
Validators::Client.validate(c)
|
|
407
522
|
@clients = c
|
|
@@ -412,11 +527,11 @@ module Mongoid
|
|
|
412
527
|
#
|
|
413
528
|
# @return [Mongo::Client] Client according to global overrides.
|
|
414
529
|
def global_client
|
|
415
|
-
client =
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
530
|
+
client = if Threaded.client_override
|
|
531
|
+
Clients.with_name(Threaded.client_override)
|
|
532
|
+
else
|
|
533
|
+
Clients.default
|
|
534
|
+
end
|
|
420
535
|
if Threaded.database_override
|
|
421
536
|
client.use(Threaded.database_override)
|
|
422
537
|
else
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Contextual
|
|
6
5
|
module Aggregable
|
|
7
6
|
# Contains behavior for aggregating values in memory.
|
|
8
7
|
module Memory
|
|
9
|
-
|
|
10
8
|
# Get all the aggregate values for the provided field.
|
|
11
9
|
# Provided for interface consistency with Aggregable::Mongo.
|
|
12
10
|
#
|
|
@@ -16,7 +14,7 @@ module Mongoid
|
|
|
16
14
|
# If no documents are present, then returned Hash will have
|
|
17
15
|
# count, sum of 0 and max, min, avg of nil.
|
|
18
16
|
def aggregates(field)
|
|
19
|
-
%w
|
|
17
|
+
%w[count sum avg min max].each_with_object({}) do |method, hash|
|
|
20
18
|
hash[method] = send(method, field)
|
|
21
19
|
end
|
|
22
20
|
end
|
|
@@ -90,7 +88,7 @@ module Mongoid
|
|
|
90
88
|
# @example Get the sum for the provided block.
|
|
91
89
|
# aggregable.sum(&:likes)
|
|
92
90
|
#
|
|
93
|
-
# @param [ Symbol | Numeric ] field The field to sum, or the
|
|
91
|
+
# @param [ Symbol | Numeric ] field The field to sum, or the initial
|
|
94
92
|
# value of the sum when a block is given.
|
|
95
93
|
#
|
|
96
94
|
# @return [ Numeric ] The sum value.
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
3
|
+
require 'mongoid/contextual/aggregable'
|
|
5
4
|
|
|
6
5
|
module Mongoid
|
|
7
6
|
module Contextual
|
|
8
7
|
module Aggregable
|
|
9
8
|
# Contains behavior for aggregating values in Mongo.
|
|
10
9
|
module Mongo
|
|
11
|
-
|
|
12
10
|
# Get all the aggregate values for the provided field.
|
|
13
11
|
#
|
|
14
12
|
# @example Get all the aggregate values.
|
|
@@ -28,10 +26,10 @@ module Mongoid
|
|
|
28
26
|
# count, sum of 0 and max, min, avg of nil.
|
|
29
27
|
def aggregates(field)
|
|
30
28
|
result = collection.aggregate(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
pipeline(field),
|
|
30
|
+
session: _session,
|
|
31
|
+
hint: view.hint
|
|
32
|
+
).to_a
|
|
35
33
|
|
|
36
34
|
if result.empty?
|
|
37
35
|
Aggregable::EMPTY_RESULT.dup
|
|
@@ -49,7 +47,7 @@ module Mongoid
|
|
|
49
47
|
#
|
|
50
48
|
# @return [ Float ] The average.
|
|
51
49
|
def avg(field)
|
|
52
|
-
aggregates(field)[
|
|
50
|
+
aggregates(field)['avg']
|
|
53
51
|
end
|
|
54
52
|
|
|
55
53
|
# Get the max value of the provided field. If provided a block, will
|
|
@@ -69,7 +67,7 @@ module Mongoid
|
|
|
69
67
|
# @return [ Float | Document ] The max value or document with the max
|
|
70
68
|
# value.
|
|
71
69
|
def max(field = nil)
|
|
72
|
-
block_given? ? super() : aggregates(field)[
|
|
70
|
+
block_given? ? super() : aggregates(field)['max']
|
|
73
71
|
end
|
|
74
72
|
|
|
75
73
|
# Get the min value of the provided field. If provided a block, will
|
|
@@ -89,7 +87,7 @@ module Mongoid
|
|
|
89
87
|
# @return [ Float | Document ] The min value or document with the min
|
|
90
88
|
# value.
|
|
91
89
|
def min(field = nil)
|
|
92
|
-
block_given? ? super() : aggregates(field)[
|
|
90
|
+
block_given? ? super() : aggregates(field)['min']
|
|
93
91
|
end
|
|
94
92
|
|
|
95
93
|
# Get the sum value of the provided field. If provided a block, will
|
|
@@ -108,7 +106,7 @@ module Mongoid
|
|
|
108
106
|
def sum(field = nil)
|
|
109
107
|
return super(field || 0) if block_given?
|
|
110
108
|
|
|
111
|
-
aggregates(field)[
|
|
109
|
+
aggregates(field)['sum'] || 0
|
|
112
110
|
end
|
|
113
111
|
|
|
114
112
|
private
|
|
@@ -128,18 +126,18 @@ module Mongoid
|
|
|
128
126
|
sort, skip, limit = criteria.options.values_at(:sort, :skip, :limit)
|
|
129
127
|
|
|
130
128
|
pipeline = []
|
|
131
|
-
pipeline << {
|
|
132
|
-
pipeline << {
|
|
133
|
-
pipeline << {
|
|
134
|
-
pipeline << {
|
|
129
|
+
pipeline << { '$match' => criteria.exists(field => true).selector }
|
|
130
|
+
pipeline << { '$sort' => sort } if sort && (skip || limit)
|
|
131
|
+
pipeline << { '$skip' => skip } if skip
|
|
132
|
+
pipeline << { '$limit' => limit } if limit
|
|
135
133
|
pipeline << {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
134
|
+
'$group' => {
|
|
135
|
+
'_id' => field.to_s,
|
|
136
|
+
'count' => { '$sum' => 1 },
|
|
137
|
+
'max' => { '$max' => db_field },
|
|
138
|
+
'min' => { '$min' => db_field },
|
|
139
|
+
'sum' => { '$sum' => db_field },
|
|
140
|
+
'avg' => { '$avg' => db_field }
|
|
143
141
|
}
|
|
144
142
|
}
|
|
145
143
|
end
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
3
|
+
require 'mongoid/contextual/aggregable'
|
|
5
4
|
|
|
6
5
|
module Mongoid
|
|
7
6
|
module Contextual
|
|
8
7
|
module Aggregable
|
|
9
8
|
# Contains behavior for aggregating values in null context.
|
|
10
9
|
module None
|
|
11
|
-
|
|
12
10
|
# Get all the aggregate values for the provided field in null context.
|
|
13
11
|
# Provided for interface consistency with Aggregable::Mongo.
|
|
14
12
|
#
|
|
@@ -59,7 +57,7 @@ module Mongoid
|
|
|
59
57
|
# @param [ Symbol ] _field The field to max.
|
|
60
58
|
#
|
|
61
59
|
# @return [ nil ] Always nil.
|
|
62
|
-
alias
|
|
60
|
+
alias max min
|
|
63
61
|
end
|
|
64
62
|
end
|
|
65
63
|
end
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Contextual
|
|
6
5
|
module Aggregable
|
|
7
|
-
|
|
8
6
|
# @api private
|
|
9
7
|
EMPTY_RESULT = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
'count' => 0,
|
|
9
|
+
'sum' => 0,
|
|
10
|
+
'avg' => nil,
|
|
11
|
+
'min' => nil,
|
|
12
|
+
'max' => nil
|
|
15
13
|
}.freeze
|
|
16
14
|
end
|
|
17
15
|
end
|
|
@@ -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
|