mongoid 9.0.12 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -8
- data/README.md +5 -11
- data/Rakefile +35 -38
- data/lib/config/locales/en.yml +11 -45
- 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 +38 -46
- 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 +23 -47
- data/lib/mongoid/association/nested/nested_buildable.rb +6 -23
- data/lib/mongoid/association/nested/one.rb +4 -7
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +0 -3
- data/lib/mongoid/association/options.rb +8 -7
- data/lib/mongoid/association/referenced/auto_save.rb +0 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +23 -5
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +1 -3
- data/lib/mongoid/association/referenced/belongs_to.rb +48 -43
- data/lib/mongoid/association/referenced/counter_cache.rb +5 -10
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +8 -4
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +52 -47
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_many/buildable.rb +11 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +107 -38
- data/lib/mongoid/association/referenced/has_many/proxy.rb +11 -106
- 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 -83
- 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 -22
- data/lib/mongoid/composable.rb +30 -34
- data/lib/mongoid/config/defaults.rb +7 -4
- data/lib/mongoid/config/encryption.rb +19 -39
- 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 +127 -84
- data/lib/mongoid/contextual/aggregable/memory.rb +4 -9
- 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 +76 -80
- 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 -43
- 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 +130 -301
- 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 -48
- 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 -74
- 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 +41 -52
- 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 +1 -8
- 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 -2
- 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 +12 -11
- data/lib/mongoid/matcher/size.rb +2 -5
- data/lib/mongoid/matcher/type.rb +32 -37
- data/lib/mongoid/matcher.rb +7 -16
- 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 -76
- 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 +337 -14
- 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 +37 -53
- data/lib/mongoid/tasks/encryption.rb +10 -15
- data/lib/mongoid/threaded/lifecycle.rb +6 -9
- data/lib/mongoid/threaded.rb +132 -69
- data/lib/mongoid/timestamps/created/short.rb +2 -3
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +8 -13
- data/lib/mongoid/timestamps/updated/short.rb +2 -3
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +4 -6
- data/lib/mongoid/touchable.rb +19 -11
- data/lib/mongoid/traversable.rb +3 -2
- data/lib/mongoid/validatable/associated.rb +1 -5
- data/lib/mongoid/validatable/format.rb +0 -2
- data/lib/mongoid/validatable/length.rb +0 -2
- data/lib/mongoid/validatable/localizable.rb +0 -3
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/numericality.rb +24 -3
- data/lib/mongoid/validatable/presence.rb +8 -10
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +12 -14
- data/lib/mongoid/validatable.rb +15 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +10 -11
- data/lib/mongoid.rb +30 -34
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -4
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +4 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +2 -2
- data/lib/rails/generators/mongoid/model/model_generator.rb +5 -8
- data/lib/rails/generators/mongoid_generator.rb +6 -10
- data/lib/rails/mongoid.rb +1 -3
- data/spec/integration/active_job_spec.rb +1 -2
- data/spec/integration/app_spec.rb +142 -185
- 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 +18 -30
- 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 +105 -130
- data/spec/integration/encryption_spec.rb +8 -160
- 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 +0 -21
- data/spec/integration/matcher_operator_spec.rb +16 -26
- data/spec/integration/matcher_spec.rb +31 -32
- data/spec/integration/persistence/collection_options_spec.rb +0 -2
- data/spec/integration/persistence/range_field_spec.rb +24 -2
- data/spec/integration/server_query_spec.rb +43 -37
- data/spec/integration/shardable_spec.rb +10 -11
- data/spec/integration/stringified_symbol_field_spec.rb +28 -43
- data/spec/lite_spec_helper.rb +11 -12
- data/spec/mongoid/association/accessors_spec.rb +197 -285
- data/spec/mongoid/association/auto_save_spec.rb +62 -93
- data/spec/mongoid/association/builders_spec.rb +121 -74
- data/spec/mongoid/association/constrainable_spec.rb +9 -22
- data/spec/mongoid/association/counter_cache_spec.rb +71 -104
- data/spec/mongoid/association/depending_spec.rb +166 -208
- data/spec/mongoid/association/eager_spec.rb +416 -80
- data/spec/mongoid/association/embedded/cyclic_spec.rb +36 -48
- data/spec/mongoid/association/embedded/dirty_spec.rb +15 -20
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +36 -54
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +8 -15
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +135 -175
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +25 -127
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +9 -14
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +38 -51
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1151 -1340
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -17
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +11 -11
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +25 -138
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +15 -23
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +18 -26
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +204 -273
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +5 -6
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -143
- data/spec/mongoid/association/macros_spec.rb +213 -300
- data/spec/mongoid/association/nested/many_spec.rb +51 -73
- data/spec/mongoid/association/nested/one_spec.rb +56 -80
- data/spec/mongoid/association/options_spec.rb +187 -310
- data/spec/mongoid/association/polymorphic_spec.rb +35 -53
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +55 -76
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +36 -41
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +81 -101
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +258 -345
- data/spec/mongoid/association/referenced/belongs_to_models.rb +4 -3
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +91 -294
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +42 -56
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +41 -32
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +36 -42
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +8 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +771 -1023
- 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 -156
- 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 +1221 -1888
- 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 -49
- data/spec/mongoid/config/encryption_spec.rb +53 -284
- 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 -226
- 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 -1031
- 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 -682
- 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 -391
- 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 -952
- data/spec/mongoid/document_fields_spec.rb +28 -30
- data/spec/mongoid/document_persistence_context_spec.rb +13 -15
- data/spec/mongoid/document_query_spec.rb +9 -12
- data/spec/mongoid/document_spec.rb +317 -409
- data/spec/mongoid/equality_spec.rb +69 -102
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -11
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +7 -10
- data/spec/mongoid/errors/callback_spec.rb +8 -11
- data/spec/mongoid/errors/delete_restriction_spec.rb +5 -8
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +7 -10
- data/spec/mongoid/errors/document_not_found_spec.rb +51 -61
- data/spec/mongoid/errors/invalid_collection_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_config_file_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_config_option_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_field_option_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_field_spec.rb +10 -11
- data/spec/mongoid/errors/invalid_field_type_spec.rb +9 -12
- data/spec/mongoid/errors/invalid_find_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_includes_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_index_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_path_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_relation_spec.rb +15 -16
- data/spec/mongoid/errors/invalid_scope_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -6
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_time_spec.rb +8 -11
- data/spec/mongoid/errors/inverse_not_found_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_relations_spec.rb +8 -11
- data/spec/mongoid/errors/mongoid_error_spec.rb +21 -24
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -9
- data/spec/mongoid/errors/no_client_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_client_database_spec.rb +9 -12
- data/spec/mongoid/errors/no_client_hosts_spec.rb +9 -12
- data/spec/mongoid/errors/no_clients_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_environment_spec.rb +8 -11
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +8 -11
- data/spec/mongoid/errors/no_metadata_spec.rb +7 -10
- data/spec/mongoid/errors/no_parent_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_attribute_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_document_spec.rb +6 -9
- data/spec/mongoid/errors/scope_overwrite_spec.rb +9 -12
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +9 -12
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -8
- data/spec/mongoid/errors/unsaved_document_spec.rb +8 -11
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +9 -12
- data/spec/mongoid/errors/validations_spec.rb +11 -14
- data/spec/mongoid/extensions/array_spec.rb +70 -92
- data/spec/mongoid/extensions/big_decimal_spec.rb +233 -313
- data/spec/mongoid/extensions/binary_spec.rb +21 -32
- data/spec/mongoid/extensions/boolean_spec.rb +52 -75
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +43 -54
- data/spec/mongoid/extensions/date_spec.rb +26 -38
- data/spec/mongoid/extensions/date_time_spec.rb +22 -32
- data/spec/mongoid/extensions/decimal128_spec.rb +12 -18
- data/spec/mongoid/extensions/false_class_spec.rb +10 -17
- data/spec/mongoid/extensions/float_spec.rb +40 -61
- data/spec/mongoid/extensions/hash_spec.rb +46 -64
- data/spec/mongoid/extensions/integer_spec.rb +40 -61
- data/spec/mongoid/extensions/module_spec.rb +13 -18
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -5
- data/spec/mongoid/extensions/object_id_spec.rb +159 -247
- data/spec/mongoid/extensions/object_spec.rb +31 -47
- data/spec/mongoid/extensions/range_spec.rb +112 -115
- data/spec/mongoid/extensions/raw_value_spec.rb +10 -12
- data/spec/mongoid/extensions/regexp_spec.rb +23 -36
- data/spec/mongoid/extensions/set_spec.rb +38 -49
- data/spec/mongoid/extensions/string_spec.rb +118 -167
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +29 -43
- data/spec/mongoid/extensions/symbol_spec.rb +12 -20
- data/spec/mongoid/extensions/time_spec.rb +160 -202
- data/spec/mongoid/extensions/time_with_zone_spec.rb +79 -105
- data/spec/mongoid/extensions/true_class_spec.rb +10 -17
- data/spec/mongoid/factory_spec.rb +125 -148
- data/spec/mongoid/fields/foreign_key_spec.rb +124 -169
- data/spec/mongoid/fields/localized_spec.rb +140 -185
- data/spec/mongoid/fields/standard_spec.rb +43 -59
- data/spec/mongoid/fields_spec.rb +751 -620
- data/spec/mongoid/findable_spec.rb +260 -228
- data/spec/mongoid/indexable/specification_spec.rb +42 -58
- data/spec/mongoid/indexable_spec.rb +260 -264
- data/spec/mongoid/inspectable_spec.rb +45 -55
- data/spec/mongoid/interceptable_spec.rb +784 -922
- data/spec/mongoid/interceptable_spec_models.rb +35 -35
- data/spec/mongoid/loading_spec.rb +47 -43
- data/spec/mongoid/loggable_spec.rb +3 -6
- data/spec/mongoid/matcher/extract_attribute_spec.rb +2 -6
- data/spec/mongoid/mongoizable_spec.rb +81 -90
- data/spec/mongoid/monkey_patches_spec.rb +4 -0
- data/spec/mongoid/persistable/creatable_spec.rb +181 -220
- data/spec/mongoid/persistable/deletable_spec.rb +139 -179
- data/spec/mongoid/persistable/destroyable_spec.rb +135 -164
- data/spec/mongoid/persistable/incrementable_spec.rb +65 -84
- data/spec/mongoid/persistable/logical_spec.rb +48 -61
- data/spec/mongoid/persistable/maxable_spec.rb +45 -44
- data/spec/mongoid/persistable/minable_spec.rb +45 -44
- data/spec/mongoid/persistable/multipliable_spec.rb +54 -69
- data/spec/mongoid/persistable/poppable_spec.rb +47 -60
- data/spec/mongoid/persistable/pullable_spec.rb +79 -103
- data/spec/mongoid/persistable/pushable_spec.rb +106 -131
- data/spec/mongoid/persistable/renamable_spec.rb +52 -65
- data/spec/mongoid/persistable/savable_spec.rb +152 -189
- data/spec/mongoid/persistable/settable_spec.rb +121 -145
- data/spec/mongoid/persistable/unsettable_spec.rb +56 -73
- data/spec/mongoid/persistable/updatable_spec.rb +185 -232
- data/spec/mongoid/persistable/upsertable_spec.rb +66 -77
- data/spec/mongoid/persistable_spec.rb +132 -139
- data/spec/mongoid/persistence_context_spec.rb +31 -89
- data/spec/mongoid/positional_spec.rb +67 -79
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +0 -3
- data/spec/mongoid/railties/console_sandbox_spec.rb +0 -1
- data/spec/mongoid/relations/proxy_spec.rb +0 -1
- data/spec/mongoid/reloadable_spec.rb +250 -145
- data/spec/mongoid/scopable_spec.rb +319 -398
- data/spec/mongoid/search_indexable_spec.rb +446 -41
- data/spec/mongoid/selectable_spec.rb +36 -51
- data/spec/mongoid/serializable_spec.rb +269 -312
- data/spec/mongoid/shardable_models.rb +5 -5
- data/spec/mongoid/shardable_spec.rb +44 -46
- data/spec/mongoid/stateful_spec.rb +55 -75
- data/spec/mongoid/tasks/database_rake_spec.rb +138 -141
- data/spec/mongoid/tasks/database_spec.rb +80 -98
- 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 -165
- data/spec/support/crypt.rb +6 -9
- data/spec/support/expectations.rb +21 -7
- data/spec/support/feature_sandbox.rb +1 -4
- data/spec/support/helpers.rb +0 -1
- data/spec/support/immutable_ids.rb +20 -21
- data/spec/support/macros.rb +1 -3
- data/spec/support/models/account.rb +4 -5
- data/spec/support/models/acolyte.rb +5 -5
- data/spec/support/models/actor.rb +3 -3
- data/spec/support/models/actress.rb +0 -1
- data/spec/support/models/address.rb +11 -11
- data/spec/support/models/address_component.rb +1 -1
- data/spec/support/models/address_number.rb +1 -1
- data/spec/support/models/agency.rb +1 -1
- data/spec/support/models/agent.rb +1 -1
- data/spec/support/models/album.rb +1 -2
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +4 -5
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +2 -2
- data/spec/support/models/armrest.rb +0 -1
- data/spec/support/models/array_field.rb +0 -1
- data/spec/support/models/article.rb +0 -1
- data/spec/support/models/artist.rb +16 -12
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +0 -1
- data/spec/support/models/audio.rb +2 -2
- data/spec/support/models/augmentation.rb +1 -2
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +0 -1
- data/spec/support/models/bar.rb +2 -2
- data/spec/support/models/basic.rb +0 -1
- data/spec/support/models/bed.rb +0 -1
- data/spec/support/models/big_palette.rb +0 -1
- data/spec/support/models/birthday.rb +3 -5
- data/spec/support/models/bolt.rb +0 -1
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +1 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -2
- data/spec/support/models/building.rb +0 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +2 -2
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +5 -6
- data/spec/support/models/car.rb +0 -1
- data/spec/support/models/cat.rb +0 -2
- data/spec/support/models/catalog.rb +0 -1
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +5 -6
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +0 -1
- data/spec/support/models/circuit.rb +2 -2
- data/spec/support/models/circus.rb +0 -1
- data/spec/support/models/code.rb +2 -1
- data/spec/support/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +0 -1
- data/spec/support/models/comment.rb +0 -1
- data/spec/support/models/company.rb +0 -1
- data/spec/support/models/consumption_period.rb +0 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +0 -1
- data/spec/support/models/country_code.rb +2 -3
- data/spec/support/models/courier_job.rb +2 -2
- data/spec/support/models/cover.rb +0 -1
- data/spec/support/models/crate.rb +0 -1
- data/spec/support/models/customer.rb +0 -1
- data/spec/support/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +0 -1
- data/spec/support/models/description.rb +0 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +2 -2
- data/spec/support/models/doctor.rb +0 -1
- data/spec/support/models/dog.rb +2 -2
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +0 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +2 -2
- data/spec/support/models/drug.rb +1 -1
- data/spec/support/models/dungeon.rb +1 -1
- data/spec/support/models/edit.rb +1 -1
- data/spec/support/models/email.rb +1 -1
- data/spec/support/models/employer.rb +1 -2
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +0 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +3 -4
- data/spec/support/models/exhibition.rb +1 -1
- data/spec/support/models/exhibitor.rb +1 -1
- data/spec/support/models/explosion.rb +1 -1
- data/spec/support/models/eye.rb +0 -1
- data/spec/support/models/eye_bowl.rb +2 -3
- data/spec/support/models/face.rb +2 -3
- data/spec/support/models/fanatic.rb +1 -1
- data/spec/support/models/favorite.rb +1 -1
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +0 -1
- data/spec/support/models/fish.rb +0 -1
- data/spec/support/models/folder.rb +0 -2
- data/spec/support/models/folder_item.rb +1 -3
- data/spec/support/models/fruits.rb +9 -5
- data/spec/support/models/game.rb +3 -4
- data/spec/support/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +0 -1
- data/spec/support/models/hole.rb +0 -1
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +2 -2
- data/spec/support/models/html_writer.rb +0 -1
- data/spec/support/models/id_key.rb +3 -3
- data/spec/support/models/idnodef.rb +0 -1
- data/spec/support/models/image.rb +0 -1
- data/spec/support/models/implant.rb +1 -2
- data/spec/support/models/instrument.rb +2 -3
- data/spec/support/models/item.rb +2 -2
- data/spec/support/models/jar.rb +1 -2
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +2 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +0 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +0 -1
- data/spec/support/models/line_item.rb +1 -1
- data/spec/support/models/location.rb +1 -1
- data/spec/support/models/login.rb +1 -2
- data/spec/support/models/manufacturer.rb +0 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +1 -1
- data/spec/support/models/message.rb +1 -2
- data/spec/support/models/minim.rb +0 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/modifier_models.rb +25 -0
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -2
- data/spec/support/models/name.rb +4 -5
- data/spec/support/models/name_only.rb +0 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +3 -3
- data/spec/support/models/nut.rb +0 -1
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +1 -1
- data/spec/support/models/ordered_post.rb +1 -1
- data/spec/support/models/ordered_preference.rb +1 -1
- data/spec/support/models/oscar.rb +1 -1
- data/spec/support/models/other_owner_object.rb +0 -1
- data/spec/support/models/override.rb +3 -11
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +0 -1
- data/spec/support/models/page.rb +3 -3
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +2 -2
- data/spec/support/models/parent.rb +2 -2
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +0 -1
- data/spec/support/models/patient.rb +2 -2
- data/spec/support/models/pdf_writer.rb +0 -1
- data/spec/support/models/pencil.rb +0 -1
- data/spec/support/models/person.rb +32 -28
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +1 -2
- data/spec/support/models/piano.rb +0 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +5 -5
- data/spec/support/models/post.rb +12 -12
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +1 -2
- data/spec/support/models/preference.rb +2 -2
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +3 -3
- data/spec/support/models/profile.rb +2 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +2 -2
- data/spec/support/models/publication/encyclopedia.rb +0 -1
- data/spec/support/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +0 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +1 -1
- data/spec/support/models/question.rb +2 -2
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +2 -3
- data/spec/support/models/registry.rb +1 -1
- data/spec/support/models/role.rb +1 -1
- data/spec/support/models/root_category.rb +1 -1
- data/spec/support/models/sandbox/app/models/app_models_message.rb +0 -1
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_user.rb +0 -1
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +0 -1
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +0 -1
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +0 -1
- data/spec/support/models/seat.rb +0 -1
- data/spec/support/models/seo.rb +1 -1
- data/spec/support/models/series.rb +1 -1
- data/spec/support/models/server.rb +1 -1
- data/spec/support/models/service.rb +2 -2
- data/spec/support/models/shape.rb +3 -3
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +2 -2
- data/spec/support/models/shipment_address.rb +0 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +0 -1
- data/spec/support/models/shop.rb +2 -2
- data/spec/support/models/short_agent.rb +0 -1
- data/spec/support/models/short_quiz.rb +1 -1
- data/spec/support/models/simple.rb +1 -1
- data/spec/support/models/slave.rb +1 -1
- data/spec/support/models/song.rb +1 -2
- data/spec/support/models/sound.rb +2 -2
- data/spec/support/models/spacer.rb +0 -1
- data/spec/support/models/square.rb +0 -1
- data/spec/support/models/staff.rb +0 -1
- data/spec/support/models/store_as_dup_test1.rb +2 -2
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +2 -2
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +1 -2
- data/spec/support/models/sub_item.rb +0 -1
- data/spec/support/models/subscription.rb +2 -2
- data/spec/support/models/survey.rb +2 -2
- data/spec/support/models/symptom.rb +2 -2
- data/spec/support/models/system_role.rb +2 -3
- data/spec/support/models/tag.rb +2 -2
- data/spec/support/models/target.rb +1 -1
- data/spec/support/models/template.rb +1 -1
- data/spec/support/models/thing.rb +1 -1
- data/spec/support/models/threadlocker.rb +0 -1
- data/spec/support/models/title.rb +0 -1
- data/spec/support/models/tool.rb +3 -3
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +0 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +2 -3
- data/spec/support/models/truck.rb +0 -1
- data/spec/support/models/updatable.rb +0 -1
- data/spec/support/models/user.rb +3 -4
- data/spec/support/models/user_account.rb +3 -3
- data/spec/support/models/validation_callback.rb +4 -4
- data/spec/support/models/vehicle.rb +2 -3
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +0 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +2 -2
- data/spec/support/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +0 -1
- data/spec/support/models/weapon.rb +1 -2
- data/spec/support/models/wiki_page.rb +2 -3
- data/spec/support/models/word.rb +2 -2
- data/spec/support/models/word_origin.rb +1 -2
- data/spec/support/models/writer.rb +3 -3
- data/spec/support/rails_mock.rb +7 -12
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/sinatra_mock.rb +4 -2
- data/spec/support/spec_config.rb +19 -18
- metadata +14 -14
- data/lib/mongoid/errors/in_memory_regexp_timeout.rb +0 -26
- data/lib/mongoid/errors/no_encryption_schema.rb +0 -28
- data/lib/mongoid/field_readable.rb +0 -70
- data/lib/mongoid/matcher/regexp_budget.rb +0 -383
- data/spec/integration/matcher_regexp_timeout_spec.rb +0 -215
- data/spec/integration/query_operator_guard_spec.rb +0 -89
- data/spec/mongoid/encryptable_spec.rb +0 -61
- data/spec/mongoid/matcher/regexp_budget_spec.rb +0 -570
|
@@ -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,30 +83,25 @@ module Mongoid
|
|
|
84
83
|
#
|
|
85
84
|
# @return [ Array<Hash> ] The list of undefined indexes by model.
|
|
86
85
|
def undefined_indexes(models = ::Mongoid.models)
|
|
87
|
-
Threaded.with_collection_management do
|
|
88
|
-
undefined_indexes_for(models)
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def undefined_indexes_for(models)
|
|
93
86
|
undefined_by_model = {}
|
|
94
87
|
|
|
95
88
|
models.each do |model|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
89
|
+
next if model.embedded?
|
|
90
|
+
|
|
91
|
+
begin
|
|
92
|
+
model.collection.indexes(session: model.send(:_session)).each do |index|
|
|
93
|
+
# ignore default index
|
|
94
|
+
next if index['name'] == '_id_'
|
|
95
|
+
|
|
96
|
+
key = index['key'].symbolize_keys
|
|
97
|
+
spec = model.index_specification(key, index['name'])
|
|
98
|
+
next if spec
|
|
99
|
+
|
|
100
|
+
# index not specified
|
|
101
|
+
undefined_by_model[model] ||= []
|
|
102
|
+
undefined_by_model[model] << index
|
|
103
|
+
end
|
|
104
|
+
rescue Mongo::Error::OperationFailure
|
|
111
105
|
end
|
|
112
106
|
end
|
|
113
107
|
|
|
@@ -122,17 +116,15 @@ module Mongoid
|
|
|
122
116
|
#
|
|
123
117
|
# @return [ Hash{Class => Array(Hash)}] The list of indexes that were removed by model.
|
|
124
118
|
def remove_undefined_indexes(models = ::Mongoid.models)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
)
|
|
135
|
-
end
|
|
119
|
+
undefined_indexes(models).each do |model, indexes|
|
|
120
|
+
indexes.each do |index|
|
|
121
|
+
key = index['key'].symbolize_keys
|
|
122
|
+
collection = model.collection
|
|
123
|
+
collection.indexes(session: model.send(:_session)).drop_one(key)
|
|
124
|
+
logger.info(
|
|
125
|
+
"MONGOID: Removed index '#{index['name']}' on collection " +
|
|
126
|
+
"'#{collection.name}' in database '#{collection.database.name}'."
|
|
127
|
+
)
|
|
136
128
|
end
|
|
137
129
|
end
|
|
138
130
|
end
|
|
@@ -147,6 +139,7 @@ module Mongoid
|
|
|
147
139
|
def remove_indexes(models = ::Mongoid.models)
|
|
148
140
|
models.each do |model|
|
|
149
141
|
next if model.embedded?
|
|
142
|
+
|
|
150
143
|
begin
|
|
151
144
|
model.remove_indexes
|
|
152
145
|
rescue Mongo::Error::OperationFailure
|
|
@@ -163,6 +156,7 @@ module Mongoid
|
|
|
163
156
|
def remove_search_indexes(models = ::Mongoid.models)
|
|
164
157
|
models.each do |model|
|
|
165
158
|
next if model.embedded?
|
|
159
|
+
|
|
166
160
|
model.remove_search_indexes
|
|
167
161
|
end
|
|
168
162
|
end
|
|
@@ -178,12 +172,6 @@ module Mongoid
|
|
|
178
172
|
#
|
|
179
173
|
# @return [ Array<Class> ] The sharded models
|
|
180
174
|
def shard_collections(models = ::Mongoid.models)
|
|
181
|
-
Threaded.with_collection_management do
|
|
182
|
-
shard_collections_for(models)
|
|
183
|
-
end
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
def shard_collections_for(models)
|
|
187
175
|
models.map do |model|
|
|
188
176
|
next if model.shard_config.nil?
|
|
189
177
|
|
|
@@ -192,7 +180,7 @@ module Mongoid
|
|
|
192
180
|
next
|
|
193
181
|
end
|
|
194
182
|
|
|
195
|
-
unless model.collection.cluster.sharded?
|
|
183
|
+
unless model.collection.cluster.sharded? || model.collection.cluster.load_balanced?
|
|
196
184
|
logger.warn("MONGOID: #{model} has shard config but is not persisted in a sharded cluster: #{model.collection.cluster.summary}")
|
|
197
185
|
next
|
|
198
186
|
end
|
|
@@ -208,17 +196,16 @@ module Mongoid
|
|
|
208
196
|
# the error code when they are asked to collStats a non-existent
|
|
209
197
|
# collection (https://jira.mongodb.org/browse/SERVER-50070).
|
|
210
198
|
begin
|
|
211
|
-
|
|
212
|
-
rescue Mongo::Error::OperationFailure =>
|
|
199
|
+
model.collection.database.command(collStats: model.collection.name).first
|
|
200
|
+
rescue Mongo::Error::OperationFailure => e
|
|
213
201
|
# Code 26 is database does not exist.
|
|
214
202
|
# Code 8 is collection does not exist, as of 4.0.
|
|
215
203
|
# On 3.6 and earlier match the text of exception message.
|
|
216
|
-
if
|
|
217
|
-
|
|
218
|
-
then
|
|
204
|
+
if e.code == 26 || e.code == 8 ||
|
|
205
|
+
(e.code.nil? && e.message =~ /not found/)
|
|
219
206
|
model.collection.create
|
|
220
207
|
|
|
221
|
-
|
|
208
|
+
model.collection.database.command(collStats: model.collection.name).first
|
|
222
209
|
else
|
|
223
210
|
raise
|
|
224
211
|
end
|
|
@@ -234,13 +221,10 @@ module Mongoid
|
|
|
234
221
|
|
|
235
222
|
begin
|
|
236
223
|
admin_db.command(enableSharding: model.collection.database.name)
|
|
237
|
-
rescue Mongo::Error::OperationFailure =>
|
|
224
|
+
rescue Mongo::Error::OperationFailure => e
|
|
238
225
|
# Server 2.6 fails if sharding is already enabled
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
else
|
|
242
|
-
raise
|
|
243
|
-
end
|
|
226
|
+
raise unless e.code == 23 || (e.code.nil? && e.message =~ /already enabled/)
|
|
227
|
+
# Nothing
|
|
244
228
|
end
|
|
245
229
|
|
|
246
230
|
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
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
require 'mongoid/threaded/lifecycle'
|
|
5
4
|
|
|
@@ -7,48 +6,67 @@ module Mongoid
|
|
|
7
6
|
# This module contains logic for easy access to objects that have a lifecycle
|
|
8
7
|
# on the current thread.
|
|
9
8
|
module Threaded
|
|
10
|
-
|
|
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]'
|
|
11
12
|
|
|
12
|
-
#
|
|
13
|
-
|
|
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'
|
|
14
18
|
|
|
15
19
|
# The key to override the client.
|
|
16
|
-
CLIENT_OVERRIDE_KEY = '
|
|
20
|
+
CLIENT_OVERRIDE_KEY = 'client-override'
|
|
17
21
|
|
|
18
22
|
# The key for the current thread's scope stack.
|
|
19
|
-
CURRENT_SCOPE_KEY = '
|
|
23
|
+
CURRENT_SCOPE_KEY = 'current-scope'
|
|
24
|
+
|
|
25
|
+
AUTOSAVES_KEY = 'autosaves'
|
|
20
26
|
|
|
21
|
-
|
|
27
|
+
VALIDATIONS_KEY = 'validations'
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
TOUCH_MERGED_KEY = 'touch-merged'
|
|
24
30
|
|
|
25
31
|
STACK_KEYS = Hash.new do |hash, key|
|
|
26
|
-
hash[key] = "
|
|
32
|
+
hash[key] = "#{key}-stack"
|
|
27
33
|
end
|
|
28
34
|
|
|
29
|
-
# The name of the stack tracking collection and index management.
|
|
30
|
-
COLLECTION_MANAGEMENT = :collection_management
|
|
31
|
-
|
|
32
35
|
# The key for the current thread's sessions.
|
|
33
|
-
SESSIONS_KEY = '
|
|
36
|
+
SESSIONS_KEY = 'sessions'
|
|
34
37
|
|
|
35
38
|
# The key for storing documents modified inside transactions.
|
|
36
|
-
MODIFIED_DOCUMENTS_KEY = '
|
|
39
|
+
MODIFIED_DOCUMENTS_KEY = 'modified-documents'
|
|
37
40
|
|
|
38
41
|
# The key storing the default value for whether or not callbacks are
|
|
39
42
|
# executed on documents.
|
|
40
|
-
EXECUTE_CALLBACKS = '
|
|
41
|
-
|
|
42
|
-
# The key for the time left in the current in-memory regexp budget.
|
|
43
|
-
REGEXP_BUDGET_KEY = 'regexp-budget'
|
|
43
|
+
EXECUTE_CALLBACKS = 'execute-callbacks'
|
|
44
44
|
|
|
45
45
|
extend self
|
|
46
46
|
|
|
47
|
-
#
|
|
47
|
+
# Resets the current thread- or fiber-local storage to its initial state.
|
|
48
|
+
# This is useful for making sure the state is clean when starting a new
|
|
49
|
+
# thread or fiber.
|
|
50
|
+
#
|
|
51
|
+
# The value of Mongoid::Config.real_isolation_level is used to determine
|
|
52
|
+
# whether to reset the storage for the current thread or fiber.
|
|
53
|
+
def reset!
|
|
54
|
+
case Config.real_isolation_level
|
|
55
|
+
when :thread
|
|
56
|
+
Thread.current.thread_variable_set(STORAGE_KEY, nil)
|
|
57
|
+
when :fiber
|
|
58
|
+
Fiber[STORAGE_KEY] = {}
|
|
59
|
+
Fiber[STORAGE_OWNER_KEY] = Fiber.current.object_id
|
|
60
|
+
else
|
|
61
|
+
raise "Unknown isolation level: #{Config.real_isolation_level.inspect}"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Queries the thread- or fiber-local variable with the given name. If a block is
|
|
48
66
|
# given, and the variable does not already exist, the return value of the
|
|
49
67
|
# block will be set as the value of the variable before returning it.
|
|
50
68
|
#
|
|
51
|
-
# It is very important that applications (and
|
|
69
|
+
# It is very important that applications (and especially Mongoid)
|
|
52
70
|
# use this method instead of Thread#[], since Thread#[] is actually for
|
|
53
71
|
# fiber-local variables, and Mongoid uses Fibers as an implementation
|
|
54
72
|
# detail in some callbacks. Putting thread-local state in a fiber-local
|
|
@@ -64,7 +82,7 @@ module Mongoid
|
|
|
64
82
|
# @return [ Object | nil ] the value of the queried variable, or nil if
|
|
65
83
|
# it is not set and no default was given.
|
|
66
84
|
def get(key, &default)
|
|
67
|
-
result =
|
|
85
|
+
result = storage[key]
|
|
68
86
|
|
|
69
87
|
if result.nil? && default
|
|
70
88
|
result = yield
|
|
@@ -74,7 +92,7 @@ module Mongoid
|
|
|
74
92
|
result
|
|
75
93
|
end
|
|
76
94
|
|
|
77
|
-
# Sets a
|
|
95
|
+
# Sets a variable in local storage with the given name to the given value.
|
|
78
96
|
# See #get for a discussion of why this method is necessary, and why
|
|
79
97
|
# Thread#[]= should be avoided in cascading callbacks on embedded children.
|
|
80
98
|
#
|
|
@@ -82,35 +100,23 @@ module Mongoid
|
|
|
82
100
|
# @param [ Object | nil ] value the value of the variable to set (or `nil`
|
|
83
101
|
# if you wish to unset the variable)
|
|
84
102
|
def set(key, value)
|
|
85
|
-
|
|
103
|
+
storage[key] = value
|
|
86
104
|
end
|
|
87
105
|
|
|
88
|
-
# Removes the named variable from
|
|
106
|
+
# Removes the named variable from local storage.
|
|
89
107
|
#
|
|
90
108
|
# @param [ String | Symbol ] key the name of the variable to remove.
|
|
91
109
|
def delete(key)
|
|
92
|
-
|
|
110
|
+
storage.delete(key)
|
|
93
111
|
end
|
|
94
112
|
|
|
95
|
-
# Queries the presence of a named variable in
|
|
113
|
+
# Queries the presence of a named variable in local storage.
|
|
96
114
|
#
|
|
97
115
|
# @param [ String | Symbol ] key the name of the variable to query.
|
|
98
116
|
#
|
|
99
117
|
# @return [ true | false ] whether the given variable is present or not.
|
|
100
118
|
def has?(key)
|
|
101
|
-
|
|
102
|
-
# MRI, if you set a thread variable to nil, it removes it from the list
|
|
103
|
-
# and subsequent calls to thread_variable?(key) will return false. Not
|
|
104
|
-
# so with JRuby. Once set, you cannot unset the thread variable.
|
|
105
|
-
#
|
|
106
|
-
# However, because setting a variable to nil is supposed to remove it,
|
|
107
|
-
# we can assume a nil-valued variable doesn't actually exist.
|
|
108
|
-
|
|
109
|
-
# So, instead of this:
|
|
110
|
-
# Thread.current.thread_variable?(key)
|
|
111
|
-
|
|
112
|
-
# We have to do this:
|
|
113
|
-
!get(key).nil?
|
|
119
|
+
storage.key?(key)
|
|
114
120
|
end
|
|
115
121
|
|
|
116
122
|
# Begin entry into a named thread local stack.
|
|
@@ -159,36 +165,6 @@ module Mongoid
|
|
|
159
165
|
!stack(name).empty?
|
|
160
166
|
end
|
|
161
167
|
|
|
162
|
-
# Execute the block as collection or index management.
|
|
163
|
-
#
|
|
164
|
-
# Creating, dropping and inspecting collections and indexes sends no
|
|
165
|
-
# document data, so these operations are exempt from the encryption schema
|
|
166
|
-
# check that PersistenceContext applies to reads and writes. Without the
|
|
167
|
-
# exemption, tasks such as db:mongoid:create_collections would need an
|
|
168
|
-
# encryption-capable client to run.
|
|
169
|
-
#
|
|
170
|
-
# @example Create a collection.
|
|
171
|
-
# Threaded.with_collection_management { model.create_collection }
|
|
172
|
-
#
|
|
173
|
-
# @return [ Object ] The result of the block.
|
|
174
|
-
def with_collection_management
|
|
175
|
-
begin_execution(COLLECTION_MANAGEMENT)
|
|
176
|
-
yield
|
|
177
|
-
ensure
|
|
178
|
-
exit_execution(COLLECTION_MANAGEMENT)
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
# Is collection or index management being executed?
|
|
182
|
-
#
|
|
183
|
-
# @example Is a collection being managed?
|
|
184
|
-
# Threaded.managing_collection?
|
|
185
|
-
#
|
|
186
|
-
# @return [ true | false ] Whether collection or index management is in
|
|
187
|
-
# progress on the current thread.
|
|
188
|
-
def managing_collection?
|
|
189
|
-
executing?(COLLECTION_MANAGEMENT)
|
|
190
|
-
end
|
|
191
|
-
|
|
192
168
|
# Exit from a named thread local stack.
|
|
193
169
|
#
|
|
194
170
|
# @example Exit from the stack.
|
|
@@ -233,6 +209,17 @@ module Mongoid
|
|
|
233
209
|
validations_for(document.class).push(document._id)
|
|
234
210
|
end
|
|
235
211
|
|
|
212
|
+
# Mark that a document's touch updates have been merged into
|
|
213
|
+
# an atomic insert on the current thread.
|
|
214
|
+
#
|
|
215
|
+
# @example Begin touch merged.
|
|
216
|
+
# Threaded.begin_touch_merged(doc)
|
|
217
|
+
#
|
|
218
|
+
# @param [ Document ] document The embedded document being inserted.
|
|
219
|
+
def begin_touch_merged(document)
|
|
220
|
+
touch_merged_for(document.class).push(document._id)
|
|
221
|
+
end
|
|
222
|
+
|
|
236
223
|
# Exit autosaving a document on the current thread.
|
|
237
224
|
#
|
|
238
225
|
# @example Exit autosave.
|
|
@@ -253,6 +240,16 @@ module Mongoid
|
|
|
253
240
|
validations_for(document.class).delete_one(document._id)
|
|
254
241
|
end
|
|
255
242
|
|
|
243
|
+
# Clear the touch-merged flag for a document on the current thread.
|
|
244
|
+
#
|
|
245
|
+
# @example Exit touch merged.
|
|
246
|
+
# Threaded.exit_touch_merged(doc)
|
|
247
|
+
#
|
|
248
|
+
# @param [ Document ] document The document to clear.
|
|
249
|
+
def exit_touch_merged(document)
|
|
250
|
+
touch_merged_for(document.class).delete_one(document._id)
|
|
251
|
+
end
|
|
252
|
+
|
|
256
253
|
# Begin suppressing default scopes for given model on the current thread.
|
|
257
254
|
#
|
|
258
255
|
# @example Begin without default scope stack.
|
|
@@ -384,6 +381,19 @@ module Mongoid
|
|
|
384
381
|
validations_for(document.class).include?(document._id)
|
|
385
382
|
end
|
|
386
383
|
|
|
384
|
+
# Is the document flagged as having had its touch updates
|
|
385
|
+
# merged into an atomic insert?
|
|
386
|
+
#
|
|
387
|
+
# @example Is the document touch-merged?
|
|
388
|
+
# Threaded.touch_merged?(doc)
|
|
389
|
+
#
|
|
390
|
+
# @param [ Document ] document The document to check.
|
|
391
|
+
#
|
|
392
|
+
# @return [ true | false ] If the document's touch was merged.
|
|
393
|
+
def touch_merged?(document)
|
|
394
|
+
touch_merged_for(document.class).include?(document._id)
|
|
395
|
+
end
|
|
396
|
+
|
|
387
397
|
# Get all autosaves on the current thread.
|
|
388
398
|
#
|
|
389
399
|
# @example Get all autosaves.
|
|
@@ -428,6 +438,28 @@ module Mongoid
|
|
|
428
438
|
validations[klass] ||= []
|
|
429
439
|
end
|
|
430
440
|
|
|
441
|
+
# Get all touch-merged tracking on the current thread.
|
|
442
|
+
#
|
|
443
|
+
# @example Get all touch-merged.
|
|
444
|
+
# Threaded.touch_merged
|
|
445
|
+
#
|
|
446
|
+
# @return [ Hash ] The current touch-merged tracking hash.
|
|
447
|
+
def touch_merged
|
|
448
|
+
get(TOUCH_MERGED_KEY) { {} }
|
|
449
|
+
end
|
|
450
|
+
|
|
451
|
+
# Get all touch-merged document IDs on the current thread for the class.
|
|
452
|
+
#
|
|
453
|
+
# @example Get all touch-merged.
|
|
454
|
+
# Threaded.touch_merged_for(Sofa)
|
|
455
|
+
#
|
|
456
|
+
# @param [ Class ] klass The class to check.
|
|
457
|
+
#
|
|
458
|
+
# @return [ Array ] The current touch-merged document IDs.
|
|
459
|
+
def touch_merged_for(klass)
|
|
460
|
+
touch_merged[klass] ||= []
|
|
461
|
+
end
|
|
462
|
+
|
|
431
463
|
# Cache a session for this thread for a client.
|
|
432
464
|
#
|
|
433
465
|
# @note For backward compatibility it is allowed to call this method without
|
|
@@ -545,5 +577,36 @@ module Mongoid
|
|
|
545
577
|
|
|
546
578
|
delete(CURRENT_SCOPE_KEY) if scope.empty?
|
|
547
579
|
end
|
|
580
|
+
|
|
581
|
+
# Returns the current thread- or fiber-local storage as a Hash.
|
|
582
|
+
def storage
|
|
583
|
+
case Config.real_isolation_level
|
|
584
|
+
when :thread
|
|
585
|
+
storage_hash = Thread.current.thread_variable_get(STORAGE_KEY)
|
|
586
|
+
|
|
587
|
+
unless storage_hash
|
|
588
|
+
storage_hash = {}
|
|
589
|
+
Thread.current.thread_variable_set(STORAGE_KEY, storage_hash)
|
|
590
|
+
end
|
|
591
|
+
|
|
592
|
+
storage_hash
|
|
593
|
+
|
|
594
|
+
when :fiber
|
|
595
|
+
# Fiber[] storage is inherited by child fibers, so multiple sibling
|
|
596
|
+
# fibers would otherwise share a single mutable hash. We detect
|
|
597
|
+
# inheritance by comparing the stored owner ID to the current fiber;
|
|
598
|
+
# on first access by a new fiber we copy the inherited state so each
|
|
599
|
+
# fiber starts with a snapshot of its parent's state rather than a
|
|
600
|
+
# shared reference.
|
|
601
|
+
if Fiber[STORAGE_OWNER_KEY] != Fiber.current.object_id
|
|
602
|
+
Fiber[STORAGE_KEY] = (Fiber[STORAGE_KEY] || {}).dup
|
|
603
|
+
Fiber[STORAGE_OWNER_KEY] = Fiber.current.object_id
|
|
604
|
+
end
|
|
605
|
+
Fiber[STORAGE_KEY]
|
|
606
|
+
|
|
607
|
+
else
|
|
608
|
+
raise "Unknown isolation level: #{Config.real_isolation_level.inspect}"
|
|
609
|
+
end
|
|
610
|
+
end
|
|
548
611
|
end
|
|
549
612
|
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
|