mongoid 9.0.11 → 9.1.1
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 +60 -0
- data/lib/mongoid/association/accessors.rb +27 -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 +43 -43
- data/lib/mongoid/association/eager.rb +56 -13
- data/lib/mongoid/association/eager_load/discriminated_inclusion.rb +88 -0
- data/lib/mongoid/association/eager_load/embedded_distributor.rb +151 -0
- data/lib/mongoid/association/eager_load/inclusion.rb +173 -0
- data/lib/mongoid/association/eager_load/inclusion_tree.rb +96 -0
- data/lib/mongoid/association/eager_load/lookup_pipeline.rb +121 -0
- data/lib/mongoid/association/eager_load/polymorphic_preloader.rb +61 -0
- data/lib/mongoid/association/eager_load/polymorphic_targets.rb +151 -0
- data/lib/mongoid/association/eager_loadable.rb +108 -23
- 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 +7 -2
- 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 +21 -18
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +16 -8
- data/lib/mongoid/association/many.rb +75 -3
- data/lib/mongoid/association/marshalable.rb +0 -3
- data/lib/mongoid/association/nested/many.rb +52 -18
- data/lib/mongoid/association/nested/nested_buildable.rb +20 -9
- data/lib/mongoid/association/nested/one.rb +10 -8
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +0 -3
- data/lib/mongoid/association/options.rb +25 -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 +7 -4
- data/lib/mongoid/association/referenced/belongs_to.rb +49 -43
- data/lib/mongoid/association/referenced/counter_cache.rb +7 -12
- 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 +57 -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 +109 -38
- data/lib/mongoid/association/referenced/has_many/proxy.rb +110 -7
- data/lib/mongoid/association/referenced/has_many.rb +30 -24
- data/lib/mongoid/association/referenced/has_many_through/eager.rb +99 -0
- data/lib/mongoid/association/referenced/has_many_through/proxy.rb +68 -0
- data/lib/mongoid/association/referenced/has_many_through.rb +201 -0
- 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 +27 -21
- data/lib/mongoid/association/referenced/has_one_through/eager.rb +65 -0
- data/lib/mongoid/association/referenced/has_one_through/proxy.rb +30 -0
- data/lib/mongoid/association/referenced/has_one_through.rb +167 -0
- data/lib/mongoid/association/referenced/syncable.rb +30 -34
- data/lib/mongoid/association/referenced.rb +2 -1
- data/lib/mongoid/association/reflections.rb +0 -3
- data/lib/mongoid/association/relatable.rb +108 -65
- data/lib/mongoid/association.rb +19 -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 +13 -22
- 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 +18 -14
- data/lib/mongoid/composable.rb +30 -34
- data/lib/mongoid/config/defaults.rb +6 -4
- data/lib/mongoid/config/encryption.rb +36 -21
- 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 +188 -47
- data/lib/mongoid/contextual/aggregable/memory.rb +7 -5
- 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 +87 -69
- 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 +67 -14
- 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 +35 -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 +253 -199
- 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 +45 -5
- data/lib/mongoid/deprecation.rb +2 -6
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/encryptable.rb +47 -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/config_redactor.rb +43 -0
- 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/in_memory_regexp_timeout.rb +26 -0
- 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 +2 -5
- 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 +2 -5
- data/lib/mongoid/errors/no_client_hosts.rb +2 -5
- 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_encryption_schema.rb +28 -0
- 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_association.rb +29 -0
- 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 +76 -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/vector.rb +64 -0
- data/lib/mongoid/extensions.rb +27 -26
- data/lib/mongoid/factory.rb +5 -9
- data/lib/mongoid/field_readable.rb +69 -0
- 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 +53 -40
- 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 +6 -3
- 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 -9
- 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 +9 -13
- data/lib/mongoid/matcher/regexp_budget.rb +372 -0
- data/lib/mongoid/matcher/size.rb +2 -5
- data/lib/mongoid/matcher/type.rb +32 -37
- data/lib/mongoid/matcher.rb +8 -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 +23 -33
- data/lib/mongoid/persistable/upsertable.rb +8 -10
- data/lib/mongoid/persistable.rb +28 -27
- data/lib/mongoid/persistence_context.rb +69 -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 +378 -7
- data/lib/mongoid/selectable.rb +1 -3
- data/lib/mongoid/serializable.rb +18 -12
- 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 +51 -39
- data/lib/mongoid/tasks/encryption.rb +10 -15
- data/lib/mongoid/threaded/lifecycle.rb +6 -9
- data/lib/mongoid/threaded.rb +168 -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 +92 -23
- 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 +5 -4
- data/lib/mongoid/validatable/associated.rb +19 -7
- 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 +149 -179
- data/spec/integration/associations/belongs_to_spec.rb +43 -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 +33 -15
- 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 +115 -120
- data/spec/integration/encryption_spec.rb +157 -9
- 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_data/regex.yml +21 -0
- data/spec/integration/matcher_operator_spec.rb +16 -26
- data/spec/integration/matcher_regexp_timeout_spec.rb +215 -0
- 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/query_operator_guard_spec.rb +89 -0
- 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_loadable_spec.rb +47 -0
- 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 +1184 -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/fallback_spec.rb +425 -0
- data/spec/mongoid/association/macros_spec.rb +239 -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 +98 -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 +819 -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 +109 -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 +137 -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 +318 -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_many_through/eager_spec.rb +58 -0
- data/spec/mongoid/association/referenced/has_many_through/proxy_spec.rb +62 -0
- data/spec/mongoid/association/referenced/has_many_through_spec.rb +399 -0
- 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/referenced/has_one_through/eager_spec.rb +58 -0
- data/spec/mongoid/association/referenced/has_one_through/proxy_spec.rb +49 -0
- data/spec/mongoid/association/referenced/has_one_through_spec.rb +211 -0
- 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 +1461 -1693
- 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 +56 -30
- data/spec/mongoid/config/encryption_spec.rb +282 -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 +189 -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 +883 -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 +1356 -432
- 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 +589 -679
- 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 +354 -190
- 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 +937 -949
- 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/encryptable_spec.rb +61 -0
- 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/config_redactor_spec.rb +112 -0
- 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 +40 -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 +38 -12
- data/spec/mongoid/errors/no_client_hosts_spec.rb +35 -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_association_spec.rb +34 -0
- 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/extensions/vector_spec.rb +175 -0
- 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/matcher/regexp_budget_spec.rb +570 -0
- 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 +735 -44
- 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 +98 -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 +228 -48
- 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 +355 -294
- data/spec/mongoid/touchable_spec_models.rb +45 -37
- data/spec/mongoid/traversable_spec.rb +435 -471
- data/spec/mongoid/validatable/associated_spec.rb +60 -59
- 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 +59 -32
- 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 +164 -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 +64 -2
|
@@ -1,62 +1,61 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
namespace :db do
|
|
5
4
|
namespace :mongoid do
|
|
6
5
|
task :load_models do
|
|
7
|
-
|
|
6
|
+
Mongoid.load_models
|
|
8
7
|
end
|
|
9
8
|
|
|
10
|
-
desc
|
|
11
|
-
task :
|
|
12
|
-
|
|
9
|
+
desc 'Create collections for Mongoid models'
|
|
10
|
+
task create_collections: %i[environment load_models] do
|
|
11
|
+
Mongoid::Tasks::Database.create_collections
|
|
13
12
|
end
|
|
14
13
|
|
|
15
|
-
desc
|
|
16
|
-
task :
|
|
17
|
-
|
|
14
|
+
desc 'Create indexes specified in Mongoid models'
|
|
15
|
+
task create_indexes: %i[environment load_models] do
|
|
16
|
+
Mongoid::Tasks::Database.create_indexes
|
|
18
17
|
end
|
|
19
18
|
|
|
20
|
-
desc
|
|
21
|
-
task :
|
|
19
|
+
desc 'Create search indexes specified in Mongoid models'
|
|
20
|
+
task create_search_indexes: %i[environment load_models] do
|
|
22
21
|
wait = Mongoid::Utils.truthy_string?(ENV['WAIT_FOR_SEARCH_INDEXES'] || '1')
|
|
23
|
-
|
|
22
|
+
Mongoid::Tasks::Database.create_search_indexes(wait: wait)
|
|
24
23
|
end
|
|
25
24
|
|
|
26
|
-
desc
|
|
27
|
-
task :
|
|
28
|
-
|
|
25
|
+
desc 'Remove indexes that exist in the database but are not specified in Mongoid models'
|
|
26
|
+
task remove_undefined_indexes: %i[environment load_models] do
|
|
27
|
+
Mongoid::Tasks::Database.remove_undefined_indexes
|
|
29
28
|
end
|
|
30
29
|
|
|
31
|
-
desc
|
|
32
|
-
task :
|
|
33
|
-
|
|
30
|
+
desc 'Remove indexes specified in Mongoid models'
|
|
31
|
+
task remove_indexes: %i[environment load_models] do
|
|
32
|
+
Mongoid::Tasks::Database.remove_indexes
|
|
34
33
|
end
|
|
35
34
|
|
|
36
|
-
desc
|
|
37
|
-
task :
|
|
38
|
-
|
|
35
|
+
desc 'Remove search indexes specified in Mongoid models'
|
|
36
|
+
task remove_search_indexes: %i[environment load_models] do
|
|
37
|
+
Mongoid::Tasks::Database.remove_search_indexes
|
|
39
38
|
end
|
|
40
39
|
|
|
41
|
-
desc
|
|
42
|
-
task :
|
|
43
|
-
|
|
40
|
+
desc 'Shard collections with shard keys specified in Mongoid models'
|
|
41
|
+
task shard_collections: %i[environment load_models] do
|
|
42
|
+
Mongoid::Tasks::Database.shard_collections
|
|
44
43
|
end
|
|
45
44
|
|
|
46
|
-
desc
|
|
47
|
-
task :
|
|
48
|
-
|
|
45
|
+
desc 'Drop the database of the default Mongoid client'
|
|
46
|
+
task drop: :environment do
|
|
47
|
+
Mongoid::Clients.default.database.drop
|
|
49
48
|
end
|
|
50
49
|
|
|
51
|
-
desc
|
|
52
|
-
task :
|
|
53
|
-
|
|
50
|
+
desc 'Drop all non-system collections'
|
|
51
|
+
task purge: :environment do
|
|
52
|
+
Mongoid.purge!
|
|
54
53
|
end
|
|
55
54
|
|
|
56
55
|
namespace :create_collections do
|
|
57
|
-
desc
|
|
58
|
-
task :
|
|
59
|
-
|
|
56
|
+
desc 'Drop and create collections for Mongoid models'
|
|
57
|
+
task force: %i[environment load_models] do
|
|
58
|
+
Mongoid::Tasks::Database.create_collections(force: true)
|
|
60
59
|
end
|
|
61
60
|
end
|
|
62
61
|
end
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Tasks
|
|
6
|
-
|
|
7
5
|
# Utility module to manage database collections, indexes, sharding, etc.
|
|
8
6
|
# Invoked from Rake tasks.
|
|
9
7
|
module Database
|
|
@@ -42,6 +40,7 @@ module Mongoid
|
|
|
42
40
|
def create_indexes(models = ::Mongoid.models)
|
|
43
41
|
models.each do |model|
|
|
44
42
|
next if model.index_specifications.empty?
|
|
43
|
+
|
|
45
44
|
if !model.embedded? || model.cyclic?
|
|
46
45
|
model.create_indexes
|
|
47
46
|
logger.info("MONGOID: Created indexes on #{model}:")
|
|
@@ -84,24 +83,31 @@ module Mongoid
|
|
|
84
83
|
#
|
|
85
84
|
# @return [ Array<Hash> ] The list of undefined indexes by model.
|
|
86
85
|
def undefined_indexes(models = ::Mongoid.models)
|
|
86
|
+
Threaded.with_collection_management do
|
|
87
|
+
undefined_indexes_for(models)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def undefined_indexes_for(models)
|
|
87
92
|
undefined_by_model = {}
|
|
88
93
|
|
|
89
94
|
models.each do |model|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
95
|
+
next if model.embedded?
|
|
96
|
+
|
|
97
|
+
begin
|
|
98
|
+
model.collection.indexes(session: model.send(:_session)).each do |index|
|
|
99
|
+
# ignore default index
|
|
100
|
+
next if index['name'] == '_id_'
|
|
101
|
+
|
|
102
|
+
key = index['key'].symbolize_keys
|
|
103
|
+
spec = model.index_specification(key, index['name'])
|
|
104
|
+
next if spec
|
|
105
|
+
|
|
106
|
+
# index not specified
|
|
107
|
+
undefined_by_model[model] ||= []
|
|
108
|
+
undefined_by_model[model] << index
|
|
109
|
+
end
|
|
110
|
+
rescue Mongo::Error::OperationFailure
|
|
105
111
|
end
|
|
106
112
|
end
|
|
107
113
|
|
|
@@ -116,15 +122,17 @@ module Mongoid
|
|
|
116
122
|
#
|
|
117
123
|
# @return [ Hash{Class => Array(Hash)}] The list of indexes that were removed by model.
|
|
118
124
|
def remove_undefined_indexes(models = ::Mongoid.models)
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
Threaded.with_collection_management do
|
|
126
|
+
undefined_indexes(models).each do |model, indexes|
|
|
127
|
+
indexes.each do |index|
|
|
128
|
+
key = index['key'].symbolize_keys
|
|
129
|
+
collection = model.collection
|
|
130
|
+
collection.indexes(session: model.send(:_session)).drop_one(key)
|
|
131
|
+
logger.info(
|
|
132
|
+
"MONGOID: Removed index '#{index['name']}' on collection " +
|
|
133
|
+
"'#{collection.name}' in database '#{collection.database.name}'."
|
|
134
|
+
)
|
|
135
|
+
end
|
|
128
136
|
end
|
|
129
137
|
end
|
|
130
138
|
end
|
|
@@ -139,6 +147,7 @@ module Mongoid
|
|
|
139
147
|
def remove_indexes(models = ::Mongoid.models)
|
|
140
148
|
models.each do |model|
|
|
141
149
|
next if model.embedded?
|
|
150
|
+
|
|
142
151
|
begin
|
|
143
152
|
model.remove_indexes
|
|
144
153
|
rescue Mongo::Error::OperationFailure
|
|
@@ -155,6 +164,7 @@ module Mongoid
|
|
|
155
164
|
def remove_search_indexes(models = ::Mongoid.models)
|
|
156
165
|
models.each do |model|
|
|
157
166
|
next if model.embedded?
|
|
167
|
+
|
|
158
168
|
model.remove_search_indexes
|
|
159
169
|
end
|
|
160
170
|
end
|
|
@@ -170,6 +180,12 @@ module Mongoid
|
|
|
170
180
|
#
|
|
171
181
|
# @return [ Array<Class> ] The sharded models
|
|
172
182
|
def shard_collections(models = ::Mongoid.models)
|
|
183
|
+
Threaded.with_collection_management do
|
|
184
|
+
shard_collections_for(models)
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def shard_collections_for(models)
|
|
173
189
|
models.map do |model|
|
|
174
190
|
next if model.shard_config.nil?
|
|
175
191
|
|
|
@@ -178,7 +194,7 @@ module Mongoid
|
|
|
178
194
|
next
|
|
179
195
|
end
|
|
180
196
|
|
|
181
|
-
unless model.collection.cluster.sharded?
|
|
197
|
+
unless model.collection.cluster.sharded? || model.collection.cluster.load_balanced?
|
|
182
198
|
logger.warn("MONGOID: #{model} has shard config but is not persisted in a sharded cluster: #{model.collection.cluster.summary}")
|
|
183
199
|
next
|
|
184
200
|
end
|
|
@@ -194,17 +210,16 @@ module Mongoid
|
|
|
194
210
|
# the error code when they are asked to collStats a non-existent
|
|
195
211
|
# collection (https://jira.mongodb.org/browse/SERVER-50070).
|
|
196
212
|
begin
|
|
197
|
-
|
|
198
|
-
rescue Mongo::Error::OperationFailure =>
|
|
213
|
+
model.collection.database.command(collStats: model.collection.name).first
|
|
214
|
+
rescue Mongo::Error::OperationFailure => e
|
|
199
215
|
# Code 26 is database does not exist.
|
|
200
216
|
# Code 8 is collection does not exist, as of 4.0.
|
|
201
217
|
# On 3.6 and earlier match the text of exception message.
|
|
202
|
-
if
|
|
203
|
-
|
|
204
|
-
then
|
|
218
|
+
if e.code == 26 || e.code == 8 ||
|
|
219
|
+
(e.code.nil? && e.message =~ /not found/)
|
|
205
220
|
model.collection.create
|
|
206
221
|
|
|
207
|
-
|
|
222
|
+
model.collection.database.command(collStats: model.collection.name).first
|
|
208
223
|
else
|
|
209
224
|
raise
|
|
210
225
|
end
|
|
@@ -220,13 +235,10 @@ module Mongoid
|
|
|
220
235
|
|
|
221
236
|
begin
|
|
222
237
|
admin_db.command(enableSharding: model.collection.database.name)
|
|
223
|
-
rescue Mongo::Error::OperationFailure =>
|
|
238
|
+
rescue Mongo::Error::OperationFailure => e
|
|
224
239
|
# Server 2.6 fails if sharding is already enabled
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
else
|
|
228
|
-
raise
|
|
229
|
-
end
|
|
240
|
+
raise unless e.code == 23 || (e.code.nil? && e.message =~ /already enabled/)
|
|
241
|
+
# Nothing
|
|
230
242
|
end
|
|
231
243
|
|
|
232
244
|
begin
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Tasks
|
|
@@ -33,7 +32,7 @@ module Mongoid
|
|
|
33
32
|
kms_providers: kms_providers
|
|
34
33
|
)
|
|
35
34
|
client_encryption_opts = {}.tap do |opts|
|
|
36
|
-
opts[:key_alt_names] = [key_alt_name] if key_alt_name
|
|
35
|
+
opts[:key_alt_names] = [ key_alt_name ] if key_alt_name
|
|
37
36
|
end
|
|
38
37
|
data_key_id = client_encryption.create_data_key(kms_provider_name, client_encryption_opts)
|
|
39
38
|
{
|
|
@@ -58,27 +57,23 @@ module Mongoid
|
|
|
58
57
|
def prepare_arguments(kms_provider_name, client_name)
|
|
59
58
|
client = (client_name || 'default').to_s
|
|
60
59
|
client_options = Mongoid.clients[client]
|
|
61
|
-
unless client_options.is_a?(Hash)
|
|
62
|
-
|
|
63
|
-
end
|
|
60
|
+
raise Errors::NoClientConfig.new(client) unless client_options.is_a?(Hash)
|
|
61
|
+
|
|
64
62
|
auto_encryption_options = client_options.dig(:options, :auto_encryption_options)
|
|
65
|
-
unless auto_encryption_options.is_a?(Hash)
|
|
66
|
-
|
|
67
|
-
end
|
|
63
|
+
raise Errors::InvalidAutoEncryptionConfiguration.new(client) unless auto_encryption_options.is_a?(Hash)
|
|
64
|
+
|
|
68
65
|
key_vault_namespace = auto_encryption_options[:key_vault_namespace]
|
|
69
|
-
unless key_vault_namespace.is_a?(String)
|
|
70
|
-
|
|
71
|
-
end
|
|
66
|
+
raise Errors::InvalidAutoEncryptionConfiguration.new(client) unless key_vault_namespace.is_a?(String)
|
|
67
|
+
|
|
72
68
|
kms_providers = auto_encryption_options[:kms_providers]
|
|
73
|
-
unless kms_providers.is_a?(Hash)
|
|
74
|
-
|
|
75
|
-
end
|
|
69
|
+
raise Errors::InvalidAutoEncryptionConfiguration.new(client) unless kms_providers.is_a?(Hash)
|
|
70
|
+
|
|
76
71
|
valid_kms_provider_name = get_kms_provider_name(kms_provider_name, kms_providers)
|
|
77
72
|
unless kms_providers.key?(valid_kms_provider_name)
|
|
78
73
|
raise Errors::InvalidAutoEncryptionConfiguration.new(client, valid_kms_provider_name)
|
|
79
74
|
end
|
|
80
75
|
|
|
81
|
-
[valid_kms_provider_name, kms_providers, key_vault_namespace]
|
|
76
|
+
[ valid_kms_provider_name, kms_providers, key_vault_namespace ]
|
|
82
77
|
end
|
|
83
78
|
|
|
84
79
|
# Get kms provider name to use for creating a data key.
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Threaded
|
|
6
|
-
BIND = 'bind'
|
|
7
|
-
ASSIGN = 'assign'
|
|
8
|
-
BUILD = 'build'
|
|
9
|
-
LOAD = 'load'
|
|
10
|
-
CREATE = 'create'
|
|
11
|
-
|
|
5
|
+
BIND = 'bind'
|
|
6
|
+
ASSIGN = 'assign'
|
|
7
|
+
BUILD = 'build'
|
|
8
|
+
LOAD = 'load'
|
|
9
|
+
CREATE = 'create'
|
|
10
|
+
|
|
12
11
|
# This module contains convenience methods for document lifecycle that
|
|
13
12
|
# resides on thread locals.
|
|
14
13
|
module Lifecycle
|
|
@@ -129,7 +128,6 @@ module Mongoid
|
|
|
129
128
|
end
|
|
130
129
|
|
|
131
130
|
module ClassMethods
|
|
132
|
-
|
|
133
131
|
# Execute a block in creating mode.
|
|
134
132
|
#
|
|
135
133
|
# @example Execute in creating mode.
|
|
@@ -144,7 +142,6 @@ module Mongoid
|
|
|
144
142
|
ensure
|
|
145
143
|
Threaded.exit_execution(CREATE)
|
|
146
144
|
end
|
|
147
|
-
|
|
148
145
|
end
|
|
149
146
|
end
|
|
150
147
|
end
|
data/lib/mongoid/threaded.rb
CHANGED
|
@@ -6,42 +6,73 @@ module Mongoid
|
|
|
6
6
|
# This module contains logic for easy access to objects that have a lifecycle
|
|
7
7
|
# on the current thread.
|
|
8
8
|
module Threaded
|
|
9
|
-
|
|
9
|
+
# The key for the shared thread- and fiber-local storage. It must be a
|
|
10
|
+
# symbol because keys for fiber-local storage must be symbols.
|
|
11
|
+
STORAGE_KEY = :'[mongoid]'
|
|
10
12
|
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
+
# Tracks which fiber owns the storage hash, to detect when a fiber has
|
|
14
|
+
# inherited (rather than created) its storage from a parent fiber.
|
|
15
|
+
STORAGE_OWNER_KEY = :'[mongoid]:owner'
|
|
16
|
+
|
|
17
|
+
DATABASE_OVERRIDE_KEY = 'db-override'
|
|
13
18
|
|
|
14
19
|
# The key to override the client.
|
|
15
|
-
CLIENT_OVERRIDE_KEY = '
|
|
20
|
+
CLIENT_OVERRIDE_KEY = 'client-override'
|
|
16
21
|
|
|
17
22
|
# The key for the current thread's scope stack.
|
|
18
|
-
CURRENT_SCOPE_KEY = '
|
|
23
|
+
CURRENT_SCOPE_KEY = 'current-scope'
|
|
24
|
+
|
|
25
|
+
AUTOSAVES_KEY = 'autosaves'
|
|
19
26
|
|
|
20
|
-
|
|
27
|
+
VALIDATIONS_KEY = 'validations'
|
|
21
28
|
|
|
22
|
-
|
|
29
|
+
TOUCH_MERGED_KEY = 'touch-merged'
|
|
23
30
|
|
|
24
31
|
STACK_KEYS = Hash.new do |hash, key|
|
|
25
|
-
hash[key] = "
|
|
32
|
+
hash[key] = "#{key}-stack"
|
|
26
33
|
end
|
|
27
34
|
|
|
35
|
+
# The name of the stack tracking collection and index management.
|
|
36
|
+
COLLECTION_MANAGEMENT = :collection_management
|
|
37
|
+
|
|
28
38
|
# The key for the current thread's sessions.
|
|
29
|
-
SESSIONS_KEY = '
|
|
39
|
+
SESSIONS_KEY = 'sessions'
|
|
30
40
|
|
|
31
41
|
# The key for storing documents modified inside transactions.
|
|
32
|
-
MODIFIED_DOCUMENTS_KEY = '
|
|
42
|
+
MODIFIED_DOCUMENTS_KEY = 'modified-documents'
|
|
33
43
|
|
|
34
44
|
# The key storing the default value for whether or not callbacks are
|
|
35
45
|
# executed on documents.
|
|
36
|
-
EXECUTE_CALLBACKS = '
|
|
46
|
+
EXECUTE_CALLBACKS = 'execute-callbacks'
|
|
47
|
+
|
|
48
|
+
# The key for the time left in the current in-memory regexp budget.
|
|
49
|
+
REGEXP_BUDGET_KEY = 'regexp-budget'
|
|
37
50
|
|
|
38
51
|
extend self
|
|
39
52
|
|
|
40
|
-
#
|
|
53
|
+
# Resets the current thread- or fiber-local storage to its initial state.
|
|
54
|
+
# This is useful for making sure the state is clean when starting a new
|
|
55
|
+
# thread or fiber.
|
|
56
|
+
#
|
|
57
|
+
# The value of Mongoid::Config.real_isolation_level is used to determine
|
|
58
|
+
# whether to reset the storage for the current thread or fiber.
|
|
59
|
+
def reset!
|
|
60
|
+
case Config.real_isolation_level
|
|
61
|
+
when :thread
|
|
62
|
+
Thread.current.thread_variable_set(STORAGE_KEY, nil)
|
|
63
|
+
when :fiber
|
|
64
|
+
Fiber[STORAGE_KEY] = {}
|
|
65
|
+
Fiber[STORAGE_OWNER_KEY] = Fiber.current.object_id
|
|
66
|
+
else
|
|
67
|
+
raise "Unknown isolation level: #{Config.real_isolation_level.inspect}"
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Queries the thread- or fiber-local variable with the given name. If a block is
|
|
41
72
|
# given, and the variable does not already exist, the return value of the
|
|
42
73
|
# block will be set as the value of the variable before returning it.
|
|
43
74
|
#
|
|
44
|
-
# It is very important that applications (and
|
|
75
|
+
# It is very important that applications (and especially Mongoid)
|
|
45
76
|
# use this method instead of Thread#[], since Thread#[] is actually for
|
|
46
77
|
# fiber-local variables, and Mongoid uses Fibers as an implementation
|
|
47
78
|
# detail in some callbacks. Putting thread-local state in a fiber-local
|
|
@@ -57,7 +88,7 @@ module Mongoid
|
|
|
57
88
|
# @return [ Object | nil ] the value of the queried variable, or nil if
|
|
58
89
|
# it is not set and no default was given.
|
|
59
90
|
def get(key, &default)
|
|
60
|
-
result =
|
|
91
|
+
result = storage[key]
|
|
61
92
|
|
|
62
93
|
if result.nil? && default
|
|
63
94
|
result = yield
|
|
@@ -67,7 +98,7 @@ module Mongoid
|
|
|
67
98
|
result
|
|
68
99
|
end
|
|
69
100
|
|
|
70
|
-
# Sets a
|
|
101
|
+
# Sets a variable in local storage with the given name to the given value.
|
|
71
102
|
# See #get for a discussion of why this method is necessary, and why
|
|
72
103
|
# Thread#[]= should be avoided in cascading callbacks on embedded children.
|
|
73
104
|
#
|
|
@@ -75,35 +106,23 @@ module Mongoid
|
|
|
75
106
|
# @param [ Object | nil ] value the value of the variable to set (or `nil`
|
|
76
107
|
# if you wish to unset the variable)
|
|
77
108
|
def set(key, value)
|
|
78
|
-
|
|
109
|
+
storage[key] = value
|
|
79
110
|
end
|
|
80
111
|
|
|
81
|
-
# Removes the named variable from
|
|
112
|
+
# Removes the named variable from local storage.
|
|
82
113
|
#
|
|
83
114
|
# @param [ String | Symbol ] key the name of the variable to remove.
|
|
84
115
|
def delete(key)
|
|
85
|
-
|
|
116
|
+
storage.delete(key)
|
|
86
117
|
end
|
|
87
118
|
|
|
88
|
-
# Queries the presence of a named variable in
|
|
119
|
+
# Queries the presence of a named variable in local storage.
|
|
89
120
|
#
|
|
90
121
|
# @param [ String | Symbol ] key the name of the variable to query.
|
|
91
122
|
#
|
|
92
123
|
# @return [ true | false ] whether the given variable is present or not.
|
|
93
124
|
def has?(key)
|
|
94
|
-
|
|
95
|
-
# MRI, if you set a thread variable to nil, it removes it from the list
|
|
96
|
-
# and subsequent calls to thread_variable?(key) will return false. Not
|
|
97
|
-
# so with JRuby. Once set, you cannot unset the thread variable.
|
|
98
|
-
#
|
|
99
|
-
# However, because setting a variable to nil is supposed to remove it,
|
|
100
|
-
# we can assume a nil-valued variable doesn't actually exist.
|
|
101
|
-
|
|
102
|
-
# So, instead of this:
|
|
103
|
-
# Thread.current.thread_variable?(key)
|
|
104
|
-
|
|
105
|
-
# We have to do this:
|
|
106
|
-
!get(key).nil?
|
|
125
|
+
storage.key?(key)
|
|
107
126
|
end
|
|
108
127
|
|
|
109
128
|
# Begin entry into a named thread local stack.
|
|
@@ -152,6 +171,36 @@ module Mongoid
|
|
|
152
171
|
!stack(name).empty?
|
|
153
172
|
end
|
|
154
173
|
|
|
174
|
+
# Execute the block as collection or index management.
|
|
175
|
+
#
|
|
176
|
+
# Creating, dropping and inspecting collections and indexes sends no
|
|
177
|
+
# document data, so these operations are exempt from the encryption schema
|
|
178
|
+
# check that PersistenceContext applies to reads and writes. Without the
|
|
179
|
+
# exemption, tasks such as db:mongoid:create_collections would need an
|
|
180
|
+
# encryption-capable client to run.
|
|
181
|
+
#
|
|
182
|
+
# @example Create a collection.
|
|
183
|
+
# Threaded.with_collection_management { model.create_collection }
|
|
184
|
+
#
|
|
185
|
+
# @return [ Object ] The result of the block.
|
|
186
|
+
def with_collection_management
|
|
187
|
+
begin_execution(COLLECTION_MANAGEMENT)
|
|
188
|
+
yield
|
|
189
|
+
ensure
|
|
190
|
+
exit_execution(COLLECTION_MANAGEMENT)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# Is collection or index management being executed?
|
|
194
|
+
#
|
|
195
|
+
# @example Is a collection being managed?
|
|
196
|
+
# Threaded.managing_collection?
|
|
197
|
+
#
|
|
198
|
+
# @return [ true | false ] Whether collection or index management is in
|
|
199
|
+
# progress on the current thread.
|
|
200
|
+
def managing_collection?
|
|
201
|
+
executing?(COLLECTION_MANAGEMENT)
|
|
202
|
+
end
|
|
203
|
+
|
|
155
204
|
# Exit from a named thread local stack.
|
|
156
205
|
#
|
|
157
206
|
# @example Exit from the stack.
|
|
@@ -196,6 +245,17 @@ module Mongoid
|
|
|
196
245
|
validations_for(document.class).push(document._id)
|
|
197
246
|
end
|
|
198
247
|
|
|
248
|
+
# Mark that a document's touch updates have been merged into
|
|
249
|
+
# an atomic insert on the current thread.
|
|
250
|
+
#
|
|
251
|
+
# @example Begin touch merged.
|
|
252
|
+
# Threaded.begin_touch_merged(doc)
|
|
253
|
+
#
|
|
254
|
+
# @param [ Document ] document The embedded document being inserted.
|
|
255
|
+
def begin_touch_merged(document)
|
|
256
|
+
touch_merged_for(document.class).push(document._id)
|
|
257
|
+
end
|
|
258
|
+
|
|
199
259
|
# Exit autosaving a document on the current thread.
|
|
200
260
|
#
|
|
201
261
|
# @example Exit autosave.
|
|
@@ -216,6 +276,16 @@ module Mongoid
|
|
|
216
276
|
validations_for(document.class).delete_one(document._id)
|
|
217
277
|
end
|
|
218
278
|
|
|
279
|
+
# Clear the touch-merged flag for a document on the current thread.
|
|
280
|
+
#
|
|
281
|
+
# @example Exit touch merged.
|
|
282
|
+
# Threaded.exit_touch_merged(doc)
|
|
283
|
+
#
|
|
284
|
+
# @param [ Document ] document The document to clear.
|
|
285
|
+
def exit_touch_merged(document)
|
|
286
|
+
touch_merged_for(document.class).delete_one(document._id)
|
|
287
|
+
end
|
|
288
|
+
|
|
219
289
|
# Begin suppressing default scopes for given model on the current thread.
|
|
220
290
|
#
|
|
221
291
|
# @example Begin without default scope stack.
|
|
@@ -347,6 +417,19 @@ module Mongoid
|
|
|
347
417
|
validations_for(document.class).include?(document._id)
|
|
348
418
|
end
|
|
349
419
|
|
|
420
|
+
# Is the document flagged as having had its touch updates
|
|
421
|
+
# merged into an atomic insert?
|
|
422
|
+
#
|
|
423
|
+
# @example Is the document touch-merged?
|
|
424
|
+
# Threaded.touch_merged?(doc)
|
|
425
|
+
#
|
|
426
|
+
# @param [ Document ] document The document to check.
|
|
427
|
+
#
|
|
428
|
+
# @return [ true | false ] If the document's touch was merged.
|
|
429
|
+
def touch_merged?(document)
|
|
430
|
+
touch_merged_for(document.class).include?(document._id)
|
|
431
|
+
end
|
|
432
|
+
|
|
350
433
|
# Get all autosaves on the current thread.
|
|
351
434
|
#
|
|
352
435
|
# @example Get all autosaves.
|
|
@@ -391,6 +474,28 @@ module Mongoid
|
|
|
391
474
|
validations[klass] ||= []
|
|
392
475
|
end
|
|
393
476
|
|
|
477
|
+
# Get all touch-merged tracking on the current thread.
|
|
478
|
+
#
|
|
479
|
+
# @example Get all touch-merged.
|
|
480
|
+
# Threaded.touch_merged
|
|
481
|
+
#
|
|
482
|
+
# @return [ Hash ] The current touch-merged tracking hash.
|
|
483
|
+
def touch_merged
|
|
484
|
+
get(TOUCH_MERGED_KEY) { {} }
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
# Get all touch-merged document IDs on the current thread for the class.
|
|
488
|
+
#
|
|
489
|
+
# @example Get all touch-merged.
|
|
490
|
+
# Threaded.touch_merged_for(Sofa)
|
|
491
|
+
#
|
|
492
|
+
# @param [ Class ] klass The class to check.
|
|
493
|
+
#
|
|
494
|
+
# @return [ Array ] The current touch-merged document IDs.
|
|
495
|
+
def touch_merged_for(klass)
|
|
496
|
+
touch_merged[klass] ||= []
|
|
497
|
+
end
|
|
498
|
+
|
|
394
499
|
# Cache a session for this thread for a client.
|
|
395
500
|
#
|
|
396
501
|
# @note For backward compatibility it is allowed to call this method without
|
|
@@ -508,5 +613,36 @@ module Mongoid
|
|
|
508
613
|
|
|
509
614
|
delete(CURRENT_SCOPE_KEY) if scope.empty?
|
|
510
615
|
end
|
|
616
|
+
|
|
617
|
+
# Returns the current thread- or fiber-local storage as a Hash.
|
|
618
|
+
def storage
|
|
619
|
+
case Config.real_isolation_level
|
|
620
|
+
when :thread
|
|
621
|
+
storage_hash = Thread.current.thread_variable_get(STORAGE_KEY)
|
|
622
|
+
|
|
623
|
+
unless storage_hash
|
|
624
|
+
storage_hash = {}
|
|
625
|
+
Thread.current.thread_variable_set(STORAGE_KEY, storage_hash)
|
|
626
|
+
end
|
|
627
|
+
|
|
628
|
+
storage_hash
|
|
629
|
+
|
|
630
|
+
when :fiber
|
|
631
|
+
# Fiber[] storage is inherited by child fibers, so multiple sibling
|
|
632
|
+
# fibers would otherwise share a single mutable hash. We detect
|
|
633
|
+
# inheritance by comparing the stored owner ID to the current fiber;
|
|
634
|
+
# on first access by a new fiber we copy the inherited state so each
|
|
635
|
+
# fiber starts with a snapshot of its parent's state rather than a
|
|
636
|
+
# shared reference.
|
|
637
|
+
if Fiber[STORAGE_OWNER_KEY] != Fiber.current.object_id
|
|
638
|
+
Fiber[STORAGE_KEY] = (Fiber[STORAGE_KEY] || {}).dup
|
|
639
|
+
Fiber[STORAGE_OWNER_KEY] = Fiber.current.object_id
|
|
640
|
+
end
|
|
641
|
+
Fiber[STORAGE_KEY]
|
|
642
|
+
|
|
643
|
+
else
|
|
644
|
+
raise "Unknown isolation level: #{Config.real_isolation_level.inspect}"
|
|
645
|
+
end
|
|
646
|
+
end
|
|
511
647
|
end
|
|
512
648
|
end
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Timestamps
|
|
6
5
|
module Created
|
|
7
|
-
|
|
8
6
|
# Adds a created_at timestamp to the document, but it is stored as c_at
|
|
9
7
|
# with a created_at alias.
|
|
10
8
|
module Short
|
|
@@ -12,7 +10,8 @@ module Mongoid
|
|
|
12
10
|
|
|
13
11
|
included do
|
|
14
12
|
include Created
|
|
15
|
-
|
|
13
|
+
|
|
14
|
+
fields.delete('created_at')
|
|
16
15
|
field :c_at, type: Time, as: :created_at
|
|
17
16
|
end
|
|
18
17
|
end
|