mongoid 8.1.9 → 9.0.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
- checksums.yaml.gz.sig +1 -0
- data/LICENSE +1 -1
- data/README.md +4 -9
- data/Rakefile +63 -45
- data/lib/config/locales/en.yml +66 -5
- data/lib/mongoid/association/accessors.rb +16 -20
- data/lib/mongoid/association/bindable.rb +27 -8
- data/lib/mongoid/association/builders.rb +3 -2
- data/lib/mongoid/association/constrainable.rb +1 -0
- data/lib/mongoid/association/depending.rb +16 -1
- data/lib/mongoid/association/eager.rb +160 -0
- data/lib/mongoid/association/eager_loadable.rb +15 -7
- data/lib/mongoid/association/embedded/batchable.rb +6 -7
- data/lib/mongoid/association/embedded/cyclic.rb +1 -0
- data/lib/mongoid/association/embedded/eager.rb +23 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +5 -4
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +1 -0
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +21 -7
- data/lib/mongoid/association/embedded/embedded_in.rb +7 -0
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +134 -144
- data/lib/mongoid/association/embedded/embeds_many.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +112 -54
- data/lib/mongoid/association/embedded/embeds_one.rb +1 -0
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +17 -14
- data/lib/mongoid/association/many.rb +1 -0
- data/lib/mongoid/association/marshalable.rb +4 -0
- data/lib/mongoid/association/nested/many.rb +8 -3
- data/lib/mongoid/association/nested/nested_buildable.rb +32 -0
- data/lib/mongoid/association/nested/one.rb +6 -3
- data/lib/mongoid/association/nested.rb +1 -0
- data/lib/mongoid/association/one.rb +1 -0
- data/lib/mongoid/association/options.rb +9 -2
- data/lib/mongoid/association/proxy.rb +30 -18
- data/lib/mongoid/association/referenced/auto_save.rb +6 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -14
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -1
- data/lib/mongoid/association/referenced/counter_cache.rb +7 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +15 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +1 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +132 -94
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +8 -3
- data/lib/mongoid/association/referenced/has_many/binding.rb +1 -0
- data/lib/mongoid/association/referenced/has_many/buildable.rb +1 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +39 -6
- data/lib/mongoid/association/referenced/has_many/proxy.rb +131 -104
- data/lib/mongoid/association/referenced/has_many.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/binding.rb +1 -0
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/proxy.rb +37 -28
- data/lib/mongoid/association/referenced/has_one.rb +5 -1
- data/lib/mongoid/association/referenced/syncable.rb +7 -6
- data/lib/mongoid/association/referenced.rb +1 -0
- data/lib/mongoid/association/reflections.rb +5 -4
- data/lib/mongoid/association/relatable.rb +10 -4
- data/lib/mongoid/association.rb +5 -0
- data/lib/mongoid/atomic/modifiers.rb +1 -0
- data/lib/mongoid/atomic/paths/embedded/many.rb +2 -1
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -0
- data/lib/mongoid/atomic/paths/embedded.rb +1 -0
- data/lib/mongoid/atomic/paths/root.rb +1 -0
- data/lib/mongoid/atomic/paths.rb +1 -0
- data/lib/mongoid/atomic.rb +23 -62
- data/lib/mongoid/atomic_update_preparer.rb +88 -0
- data/lib/mongoid/attributes/dynamic.rb +1 -0
- data/lib/mongoid/attributes/embedded.rb +34 -0
- data/lib/mongoid/attributes/nested.rb +3 -2
- data/lib/mongoid/attributes/processing.rb +11 -10
- data/lib/mongoid/attributes/projector.rb +1 -0
- data/lib/mongoid/attributes/readonly.rb +4 -8
- data/lib/mongoid/attributes.rb +6 -4
- data/lib/mongoid/cacheable.rb +2 -1
- data/lib/mongoid/changeable.rb +58 -49
- data/lib/mongoid/clients/factory.rb +37 -1
- data/lib/mongoid/clients/options.rb +113 -3
- data/lib/mongoid/clients/sessions.rb +245 -64
- data/lib/mongoid/clients/storage_options.rb +37 -1
- data/lib/mongoid/clients/validators/storage.rb +1 -0
- data/lib/mongoid/clients/validators.rb +1 -0
- data/lib/mongoid/clients.rb +36 -4
- data/lib/mongoid/collection_configurable.rb +1 -0
- data/lib/mongoid/composable.rb +5 -0
- data/lib/mongoid/config/defaults.rb +16 -36
- data/lib/mongoid/config/encryption.rb +213 -0
- data/lib/mongoid/config/environment.rb +2 -5
- data/lib/mongoid/config/introspection.rb +152 -0
- data/lib/mongoid/config/options.rb +8 -3
- data/lib/mongoid/config/validators/async_query_executor.rb +12 -2
- data/lib/mongoid/config/validators/client.rb +1 -0
- data/lib/mongoid/config/validators/option.rb +1 -0
- data/lib/mongoid/config/validators.rb +1 -0
- data/lib/mongoid/config.rb +57 -91
- data/lib/mongoid/contextual/aggregable/memory.rb +1 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +2 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -0
- data/lib/mongoid/contextual/aggregable.rb +1 -0
- data/lib/mongoid/contextual/atomic.rb +98 -11
- data/lib/mongoid/contextual/command.rb +3 -0
- data/lib/mongoid/contextual/map_reduce.rb +6 -0
- data/lib/mongoid/contextual/memory.rb +45 -42
- data/lib/mongoid/contextual/mongo/documents_loader.rb +3 -2
- data/lib/mongoid/contextual/mongo.rb +32 -60
- data/lib/mongoid/contextual/none.rb +15 -32
- data/lib/mongoid/contextual/queryable.rb +4 -0
- data/lib/mongoid/contextual.rb +4 -0
- data/lib/mongoid/copyable.rb +3 -2
- data/lib/mongoid/criteria/findable.rb +44 -4
- data/lib/mongoid/criteria/includable.rb +5 -4
- data/lib/mongoid/criteria/inspectable.rb +4 -0
- data/lib/mongoid/criteria/marshalable.rb +4 -0
- data/lib/mongoid/criteria/modifiable.rb +5 -0
- data/lib/mongoid/criteria/options.rb +1 -0
- data/lib/mongoid/criteria/permission.rb +5 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +1 -0
- data/lib/mongoid/criteria/queryable/expandable.rb +1 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/date.rb +4 -3
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -16
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +7 -1
- data/lib/mongoid/criteria/queryable/extensions/set.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +15 -3
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -0
- data/lib/mongoid/criteria/queryable/key.rb +10 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +1 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -0
- data/lib/mongoid/criteria/queryable/optional.rb +1 -0
- data/lib/mongoid/criteria/queryable/options.rb +1 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +12 -27
- data/lib/mongoid/criteria/queryable/selector.rb +5 -2
- data/lib/mongoid/criteria/queryable/smash.rb +1 -0
- data/lib/mongoid/criteria/queryable/storable.rb +4 -3
- data/lib/mongoid/criteria/queryable.rb +1 -0
- data/lib/mongoid/criteria/scopable.rb +5 -0
- data/lib/mongoid/criteria/translator.rb +1 -0
- data/lib/mongoid/criteria.rb +37 -10
- data/lib/mongoid/deprecable.rb +1 -0
- data/lib/mongoid/deprecation.rb +8 -4
- data/lib/mongoid/document.rb +171 -125
- data/lib/mongoid/encryptable.rb +53 -0
- data/lib/mongoid/equality.rb +2 -22
- data/lib/mongoid/errors/ambiguous_relationship.rb +1 -0
- data/lib/mongoid/errors/attribute_not_loaded.rb +34 -0
- data/lib/mongoid/errors/callback.rb +1 -0
- data/lib/mongoid/errors/create_collection_failure.rb +1 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +1 -0
- data/lib/mongoid/errors/delete_restriction.rb +1 -0
- data/lib/mongoid/errors/document_not_destroyed.rb +1 -0
- data/lib/mongoid/errors/document_not_found.rb +1 -0
- data/lib/mongoid/errors/drop_collection_failure.rb +1 -0
- data/lib/mongoid/errors/empty_config_file.rb +1 -0
- data/lib/mongoid/errors/immutable_attribute.rb +1 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +1 -0
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +33 -0
- data/lib/mongoid/errors/invalid_collection.rb +1 -0
- data/lib/mongoid/errors/invalid_config_file.rb +1 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -0
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +1 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +1 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +6 -4
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +27 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +1 -0
- data/lib/mongoid/errors/invalid_field.rb +1 -0
- data/lib/mongoid/errors/invalid_field_operator.rb +1 -0
- data/lib/mongoid/errors/invalid_field_option.rb +1 -0
- data/lib/mongoid/errors/invalid_field_type.rb +1 -0
- data/lib/mongoid/errors/invalid_find.rb +1 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -0
- data/lib/mongoid/errors/invalid_includes.rb +1 -0
- data/lib/mongoid/errors/invalid_index.rb +1 -0
- data/lib/mongoid/errors/invalid_options.rb +1 -0
- data/lib/mongoid/errors/invalid_path.rb +1 -0
- data/lib/mongoid/errors/invalid_persistence_option.rb +1 -0
- data/lib/mongoid/errors/invalid_query.rb +1 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -0
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -0
- data/lib/mongoid/errors/invalid_scope.rb +1 -0
- data/lib/mongoid/errors/invalid_session_nesting.rb +17 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -0
- data/lib/mongoid/errors/invalid_time.rb +1 -0
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +17 -0
- data/lib/mongoid/errors/inverse_not_found.rb +1 -0
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -0
- data/lib/mongoid/errors/mixed_relations.rb +1 -0
- data/lib/mongoid/errors/mongoid_error.rb +4 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -0
- data/lib/mongoid/errors/no_client_config.rb +1 -0
- data/lib/mongoid/errors/no_client_database.rb +1 -0
- data/lib/mongoid/errors/no_client_hosts.rb +1 -0
- data/lib/mongoid/errors/no_clients_config.rb +1 -0
- data/lib/mongoid/errors/no_default_client.rb +1 -0
- data/lib/mongoid/errors/no_environment.rb +1 -0
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -0
- data/lib/mongoid/errors/no_metadata.rb +1 -0
- data/lib/mongoid/errors/no_parent.rb +1 -0
- data/lib/mongoid/errors/readonly_attribute.rb +1 -0
- data/lib/mongoid/errors/readonly_document.rb +1 -0
- data/lib/mongoid/errors/rollback.rb +15 -0
- data/lib/mongoid/errors/scope_overwrite.rb +1 -0
- data/lib/mongoid/errors/sessions_not_supported.rb +17 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -0
- data/lib/mongoid/errors/transaction_error.rb +25 -0
- data/lib/mongoid/errors/transactions_not_supported.rb +17 -0
- data/lib/mongoid/errors/unknown_attribute.rb +1 -0
- data/lib/mongoid/errors/unknown_model.rb +1 -0
- data/lib/mongoid/errors/unsaved_document.rb +1 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -0
- data/lib/mongoid/errors/validations.rb +1 -0
- data/lib/mongoid/errors.rb +10 -1
- data/lib/mongoid/evolvable.rb +1 -0
- data/lib/mongoid/extensions/array.rb +10 -24
- data/lib/mongoid/extensions/big_decimal.rb +14 -6
- data/lib/mongoid/extensions/binary.rb +3 -0
- data/lib/mongoid/extensions/boolean.rb +3 -0
- data/lib/mongoid/extensions/date.rb +7 -2
- data/lib/mongoid/extensions/date_time.rb +4 -6
- data/lib/mongoid/extensions/decimal128.rb +3 -0
- data/lib/mongoid/extensions/false_class.rb +5 -2
- data/lib/mongoid/extensions/float.rb +4 -1
- data/lib/mongoid/extensions/hash.rb +21 -143
- data/lib/mongoid/extensions/integer.rb +6 -1
- data/lib/mongoid/extensions/module.rb +4 -1
- data/lib/mongoid/extensions/nil_class.rb +5 -2
- data/lib/mongoid/extensions/object.rb +23 -35
- data/lib/mongoid/extensions/object_id.rb +3 -0
- data/lib/mongoid/extensions/range.rb +9 -6
- data/lib/mongoid/extensions/raw_value.rb +34 -0
- data/lib/mongoid/extensions/regexp.rb +3 -0
- data/lib/mongoid/extensions/set.rb +13 -2
- data/lib/mongoid/extensions/string.rb +18 -10
- data/lib/mongoid/extensions/symbol.rb +5 -0
- data/lib/mongoid/extensions/time.rb +7 -19
- data/lib/mongoid/extensions/time_with_zone.rb +6 -2
- data/lib/mongoid/extensions/true_class.rb +5 -2
- data/lib/mongoid/extensions.rb +2 -32
- data/lib/mongoid/factory.rb +134 -40
- data/lib/mongoid/fields/encrypted.rb +48 -0
- data/lib/mongoid/fields/foreign_key.rb +29 -3
- data/lib/mongoid/fields/localized.rb +6 -0
- data/lib/mongoid/fields/standard.rb +5 -0
- data/lib/mongoid/fields/validators/macro.rb +3 -1
- data/lib/mongoid/fields/validators.rb +1 -0
- data/lib/mongoid/fields.rb +41 -46
- data/lib/mongoid/findable.rb +2 -2
- data/lib/mongoid/indexable/specification.rb +55 -19
- data/lib/mongoid/indexable/validators/options.rb +1 -0
- data/lib/mongoid/indexable.rb +1 -0
- data/lib/mongoid/inspectable.rb +32 -0
- data/lib/mongoid/interceptable.rb +18 -8
- data/lib/mongoid/loadable.rb +83 -0
- data/lib/mongoid/loggable.rb +1 -0
- data/lib/mongoid/matchable.rb +1 -0
- data/lib/mongoid/matcher/all.rb +15 -0
- data/lib/mongoid/matcher/and.rb +14 -0
- data/lib/mongoid/matcher/bits.rb +19 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +21 -0
- data/lib/mongoid/matcher/bits_all_set.rb +21 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +21 -0
- data/lib/mongoid/matcher/bits_any_set.rb +21 -0
- data/lib/mongoid/matcher/elem_match.rb +15 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +14 -2
- data/lib/mongoid/matcher/eq.rb +15 -0
- data/lib/mongoid/matcher/eq_impl.rb +33 -16
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +14 -2
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +13 -0
- data/lib/mongoid/matcher/expression_operator.rb +14 -0
- data/lib/mongoid/matcher/field_expression.rb +15 -0
- data/lib/mongoid/matcher/field_operator.rb +24 -0
- data/lib/mongoid/matcher/gt.rb +15 -0
- data/lib/mongoid/matcher/gte.rb +15 -0
- data/lib/mongoid/matcher/in.rb +15 -0
- data/lib/mongoid/matcher/lt.rb +15 -0
- data/lib/mongoid/matcher/lte.rb +15 -0
- data/lib/mongoid/matcher/mod.rb +16 -0
- data/lib/mongoid/matcher/ne.rb +15 -0
- data/lib/mongoid/matcher/nin.rb +15 -0
- data/lib/mongoid/matcher/nor.rb +14 -0
- data/lib/mongoid/matcher/not.rb +16 -0
- data/lib/mongoid/matcher/or.rb +14 -0
- data/lib/mongoid/matcher/regex.rb +24 -0
- data/lib/mongoid/matcher/size.rb +16 -0
- data/lib/mongoid/matcher/type.rb +25 -0
- data/lib/mongoid/matcher.rb +5 -15
- data/lib/mongoid/persistable/creatable.rb +14 -9
- data/lib/mongoid/persistable/deletable.rb +7 -2
- data/lib/mongoid/persistable/destroyable.rb +34 -7
- data/lib/mongoid/persistable/incrementable.rb +2 -1
- data/lib/mongoid/persistable/logical.rb +1 -0
- data/lib/mongoid/persistable/maxable.rb +37 -0
- data/lib/mongoid/persistable/minable.rb +37 -0
- data/lib/mongoid/persistable/multipliable.rb +36 -0
- data/lib/mongoid/persistable/poppable.rb +1 -0
- data/lib/mongoid/persistable/pullable.rb +1 -0
- data/lib/mongoid/persistable/pushable.rb +1 -0
- data/lib/mongoid/persistable/renamable.rb +1 -0
- data/lib/mongoid/persistable/savable.rb +1 -0
- data/lib/mongoid/persistable/settable.rb +1 -0
- data/lib/mongoid/persistable/unsettable.rb +1 -0
- data/lib/mongoid/persistable/updatable.rb +37 -18
- data/lib/mongoid/persistable/upsertable.rb +20 -7
- data/lib/mongoid/persistable.rb +11 -1
- data/lib/mongoid/persistence_context.rb +46 -6
- data/lib/mongoid/positional.rb +1 -0
- data/lib/mongoid/railtie.rb +24 -1
- data/lib/mongoid/railties/bson_object_id_serializer.rb +39 -0
- data/lib/mongoid/railties/console_sandbox.rb +42 -0
- data/lib/mongoid/railties/controller_runtime.rb +20 -4
- data/lib/mongoid/railties/database.rake +12 -0
- data/lib/mongoid/reloadable.rb +38 -30
- data/lib/mongoid/scopable.rb +19 -23
- data/lib/mongoid/search_indexable.rb +167 -0
- data/lib/mongoid/selectable.rb +1 -0
- data/lib/mongoid/serializable.rb +8 -7
- data/lib/mongoid/shardable.rb +1 -0
- data/lib/mongoid/stateful.rb +9 -3
- data/lib/mongoid/stringified_symbol.rb +19 -6
- data/lib/mongoid/tasks/database.rake +13 -0
- data/lib/mongoid/tasks/database.rb +63 -0
- data/lib/mongoid/tasks/encryption.rake +59 -0
- data/lib/mongoid/tasks/encryption.rb +108 -0
- data/lib/mongoid/threaded/lifecycle.rb +1 -0
- data/lib/mongoid/threaded.rb +94 -30
- data/lib/mongoid/timestamps/created/short.rb +1 -0
- data/lib/mongoid/timestamps/created.rb +5 -11
- data/lib/mongoid/timestamps/short.rb +1 -0
- data/lib/mongoid/timestamps/timeless.rb +29 -0
- data/lib/mongoid/timestamps/updated/short.rb +1 -0
- data/lib/mongoid/timestamps/updated.rb +2 -1
- data/lib/mongoid/timestamps.rb +1 -0
- data/lib/mongoid/touchable.rb +154 -49
- data/lib/mongoid/traversable.rb +127 -122
- data/lib/mongoid/utils.rb +32 -2
- data/lib/mongoid/validatable/associated.rb +4 -6
- data/lib/mongoid/validatable/format.rb +1 -0
- data/lib/mongoid/validatable/length.rb +1 -0
- data/lib/mongoid/validatable/localizable.rb +1 -0
- data/lib/mongoid/validatable/macros.rb +5 -0
- data/lib/mongoid/validatable/presence.rb +1 -0
- data/lib/mongoid/validatable/queryable.rb +9 -0
- data/lib/mongoid/validatable/uniqueness.rb +2 -1
- data/lib/mongoid/validatable.rb +3 -2
- data/lib/mongoid/version.rb +2 -1
- data/lib/mongoid/warnings.rb +9 -16
- data/lib/mongoid.rb +38 -5
- data/lib/rails/generators/mongoid/config/config_generator.rb +17 -3
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +25 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +36 -62
- data/lib/rails/generators/mongoid/model/model_generator.rb +4 -0
- data/lib/rails/generators/mongoid_generator.rb +13 -0
- data/lib/rails/mongoid.rb +4 -29
- data/spec/config/mongoid.yml +0 -1
- data/spec/integration/active_job_spec.rb +32 -0
- data/spec/integration/app_spec.rb +72 -48
- data/spec/integration/associations/belongs_to_spec.rb +1 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +1 -0
- data/spec/integration/associations/embedded_spec.rb +75 -6
- data/spec/integration/associations/embeds_many_spec.rb +1 -0
- data/spec/integration/associations/embeds_one_spec.rb +1 -0
- data/spec/integration/associations/foreign_key_spec.rb +1 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +1 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +1 -0
- data/spec/integration/associations/has_many_spec.rb +1 -0
- data/spec/integration/associations/has_one_spec.rb +1 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +1 -0
- data/spec/integration/associations/reverse_population_spec.rb +1 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +1 -0
- data/spec/integration/associations/scope_option_spec.rb +1 -0
- data/spec/integration/atomic/modifiers_spec.rb +1 -0
- data/spec/integration/bson_regexp_raw_spec.rb +1 -0
- data/spec/integration/callbacks_models.rb +3 -2
- data/spec/integration/callbacks_spec.rb +2 -1
- data/spec/integration/contextual/empty_spec.rb +1 -0
- data/spec/integration/criteria/alias_query_spec.rb +25 -88
- data/spec/integration/criteria/date_field_spec.rb +1 -0
- data/spec/integration/criteria/default_scope_spec.rb +1 -0
- data/spec/integration/criteria/logical_spec.rb +10 -28
- data/spec/integration/criteria/range_spec.rb +1 -2
- data/spec/integration/criteria/raw_value_spec.rb +525 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +1 -0
- data/spec/integration/discriminator_key_spec.rb +1 -0
- data/spec/integration/discriminator_value_spec.rb +1 -0
- data/spec/integration/document_spec.rb +1 -0
- data/spec/integration/dots_and_dollars_spec.rb +1 -0
- data/spec/integration/encryption_spec.rb +100 -0
- data/spec/integration/i18n_fallbacks_spec.rb +7 -33
- data/spec/integration/matcher_examples_spec.rb +1 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +0 -15
- data/spec/integration/matcher_operator_data/bits_all_set.yml +0 -15
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +0 -15
- data/spec/integration/matcher_operator_data/bits_any_set.yml +0 -15
- data/spec/integration/matcher_operator_data/size.yml +0 -3
- data/spec/integration/matcher_operator_data/type.yml +0 -6
- data/spec/integration/matcher_operator_data/type_array.yml +0 -1
- data/spec/integration/matcher_operator_data/type_decimal.yml +0 -4
- data/spec/integration/matcher_operator_spec.rb +1 -0
- data/spec/integration/matcher_spec.rb +21 -66
- data/spec/integration/persistence/range_field_spec.rb +1 -0
- data/spec/integration/server_query_spec.rb +1 -0
- data/spec/integration/shardable_spec.rb +1 -0
- data/spec/integration/stringified_symbol_field_spec.rb +1 -0
- data/spec/lite_spec_helper.rb +36 -10
- data/spec/mongoid/association/accessors_spec.rb +11 -28
- data/spec/mongoid/association/auto_save_spec.rb +1 -0
- data/spec/mongoid/association/builders_spec.rb +1 -0
- data/spec/mongoid/association/constrainable_spec.rb +1 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -0
- data/spec/mongoid/association/depending_spec.rb +1 -0
- data/spec/mongoid/association/eager_spec.rb +52 -24
- data/spec/mongoid/association/embedded/cyclic_spec.rb +1 -0
- data/spec/mongoid/association/embedded/dirty_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -7
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -2
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +4 -7
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +6 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +1 -0
- data/spec/mongoid/association/macros_spec.rb +1 -0
- data/spec/mongoid/association/nested/many_spec.rb +1 -0
- data/spec/mongoid/association/nested/one_spec.rb +1 -0
- data/spec/mongoid/association/options_spec.rb +1 -0
- data/spec/mongoid/association/polymorphic_spec.rb +1 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +1 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +1 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +1 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1 -4
- data/spec/mongoid/association/referenced/belongs_to_models.rb +1 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +2 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +1 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1085 -2002
- data/spec/mongoid/association/referenced/has_many_models.rb +1 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +1 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -1
- data/spec/mongoid/association/referenced/has_one_spec.rb +1 -0
- data/spec/mongoid/association/reflections_spec.rb +1 -0
- data/spec/mongoid/association/syncable_spec.rb +1 -0
- data/spec/mongoid/association_spec.rb +1 -60
- data/spec/mongoid/atomic/modifiers_spec.rb +1 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +1 -0
- data/spec/mongoid/atomic/paths_spec.rb +1 -0
- data/spec/mongoid/atomic_spec.rb +1 -0
- data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
- data/spec/mongoid/attributes/dynamic_spec.rb +1 -0
- data/spec/mongoid/attributes/embedded_spec.rb +118 -0
- data/spec/mongoid/attributes/nested_spec.rb +1 -0
- data/spec/mongoid/attributes/nested_spec_models.rb +1 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -0
- data/spec/mongoid/attributes/readonly_spec.rb +1 -19
- data/spec/mongoid/attributes_spec.rb +18 -35
- data/spec/mongoid/cacheable_spec.rb +1 -0
- data/spec/mongoid/changeable_spec.rb +4 -3
- data/spec/mongoid/clients/factory_spec.rb +77 -0
- data/spec/mongoid/clients/options_spec.rb +9 -5
- data/spec/mongoid/clients/sessions_spec.rb +27 -10
- data/spec/mongoid/clients/transactions_spec.rb +958 -185
- data/spec/mongoid/clients/transactions_spec_models.rb +159 -0
- data/spec/mongoid/clients_spec.rb +47 -2
- data/spec/mongoid/collection_configurable_spec.rb +1 -0
- data/spec/mongoid/composable_spec.rb +1 -0
- data/spec/mongoid/config/defaults_spec.rb +31 -92
- data/spec/mongoid/config/encryption_spec.rb +152 -0
- data/spec/mongoid/config/environment_spec.rb +13 -41
- data/spec/mongoid/config/introspection_spec.rb +114 -0
- data/spec/mongoid/config/options_spec.rb +1 -0
- data/spec/mongoid/config_spec.rb +20 -133
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +1 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +1 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +5 -29
- data/spec/mongoid/contextual/aggregable/none_spec.rb +3 -14
- data/spec/mongoid/contextual/atomic_spec.rb +203 -12
- data/spec/mongoid/contextual/map_reduce_spec.rb +1 -0
- data/spec/mongoid/contextual/memory_spec.rb +364 -534
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +10 -3
- data/spec/mongoid/contextual/mongo_spec.rb +101 -277
- data/spec/mongoid/contextual/none_spec.rb +1 -0
- data/spec/mongoid/copyable_spec.rb +1 -0
- data/spec/mongoid/copyable_spec_models.rb +1 -0
- data/spec/mongoid/criteria/findable_spec.rb +191 -0
- data/spec/mongoid/criteria/includable_spec.rb +1 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +1 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +1 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +3 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +1 -0
- data/spec/mongoid/criteria/options_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +8 -7
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +21 -11
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -11
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -11
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -66
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +4 -3
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +1 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +51 -214
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +96 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +10 -32
- data/spec/mongoid/criteria/scopable_spec.rb +1 -0
- data/spec/mongoid/criteria/translator_spec.rb +1 -0
- data/spec/mongoid/criteria_projection_spec.rb +6 -5
- data/spec/mongoid/criteria_spec.rb +221 -359
- data/spec/mongoid/document_fields_spec.rb +1 -0
- data/spec/mongoid/document_persistence_context_spec.rb +77 -0
- data/spec/mongoid/document_query_spec.rb +5 -4
- data/spec/mongoid/document_spec.rb +3 -148
- data/spec/mongoid/equality_spec.rb +41 -149
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -0
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
- data/spec/mongoid/errors/callback_spec.rb +1 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -0
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_config_file_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_field_type_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_path_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_scope_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +1 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -0
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +1 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +9 -22
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -0
- data/spec/mongoid/errors/no_client_config_spec.rb +1 -0
- data/spec/mongoid/errors/no_client_database_spec.rb +1 -0
- data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -0
- data/spec/mongoid/errors/no_clients_config_spec.rb +1 -0
- data/spec/mongoid/errors/no_environment_spec.rb +1 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +1 -0
- data/spec/mongoid/errors/no_parent_spec.rb +1 -0
- data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +1 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +1 -0
- data/spec/mongoid/errors/unsaved_document_spec.rb +1 -0
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -0
- data/spec/mongoid/errors/validations_spec.rb +1 -0
- data/spec/mongoid/extensions/array_spec.rb +3 -262
- data/spec/mongoid/extensions/big_decimal_spec.rb +5 -4
- data/spec/mongoid/extensions/binary_spec.rb +1 -0
- data/spec/mongoid/extensions/boolean_spec.rb +1 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +8 -7
- data/spec/mongoid/extensions/date_spec.rb +3 -20
- data/spec/mongoid/extensions/date_time_spec.rb +3 -9
- data/spec/mongoid/extensions/decimal128_spec.rb +1 -0
- data/spec/mongoid/extensions/false_class_spec.rb +1 -7
- data/spec/mongoid/extensions/float_spec.rb +3 -9
- data/spec/mongoid/extensions/hash_spec.rb +19 -222
- data/spec/mongoid/extensions/integer_spec.rb +3 -8
- data/spec/mongoid/extensions/module_spec.rb +1 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +1 -0
- data/spec/mongoid/extensions/object_id_spec.rb +1 -0
- data/spec/mongoid/extensions/object_spec.rb +1 -176
- data/spec/mongoid/extensions/range_spec.rb +1 -11
- data/spec/mongoid/extensions/raw_value_spec.rb +67 -0
- data/spec/mongoid/extensions/regexp_spec.rb +1 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -3
- data/spec/mongoid/extensions/string_spec.rb +3 -113
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +1 -0
- data/spec/mongoid/extensions/symbol_spec.rb +1 -31
- data/spec/mongoid/extensions/time_spec.rb +32 -350
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -30
- data/spec/mongoid/extensions/true_class_spec.rb +1 -7
- data/spec/mongoid/factory_spec.rb +1 -0
- data/spec/mongoid/fields/foreign_key_spec.rb +282 -119
- data/spec/mongoid/fields/localized_spec.rb +1 -0
- data/spec/mongoid/fields/standard_spec.rb +1 -0
- data/spec/mongoid/fields_spec.rb +60 -66
- data/spec/mongoid/findable_spec.rb +2 -61
- data/spec/mongoid/indexable/specification_spec.rb +132 -13
- data/spec/mongoid/indexable_spec.rb +323 -9
- data/spec/mongoid/inspectable_spec.rb +81 -0
- data/spec/mongoid/interceptable_spec.rb +3 -82
- data/spec/mongoid/interceptable_spec_models.rb +112 -47
- data/spec/mongoid/loading_spec.rb +110 -0
- data/spec/mongoid/loggable_spec.rb +1 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -0
- data/spec/mongoid/mongoizable_spec.rb +1 -0
- data/spec/mongoid/monkey_patches_spec.rb +211 -0
- data/spec/mongoid/persistable/creatable_spec.rb +1 -0
- data/spec/mongoid/persistable/deletable_spec.rb +78 -31
- data/spec/mongoid/persistable/destroyable_spec.rb +230 -52
- data/spec/mongoid/persistable/incrementable_spec.rb +1 -0
- data/spec/mongoid/persistable/logical_spec.rb +1 -0
- data/spec/mongoid/persistable/maxable_spec.rb +147 -0
- data/spec/mongoid/persistable/minable_spec.rb +147 -0
- data/spec/mongoid/persistable/multipliable_spec.rb +227 -0
- data/spec/mongoid/persistable/poppable_spec.rb +1 -0
- data/spec/mongoid/persistable/pullable_spec.rb +1 -0
- data/spec/mongoid/persistable/pushable_spec.rb +1 -0
- data/spec/mongoid/persistable/renamable_spec.rb +1 -0
- data/spec/mongoid/persistable/savable_spec.rb +2 -6
- data/spec/mongoid/persistable/settable_spec.rb +5 -4
- data/spec/mongoid/persistable/unsettable_spec.rb +1 -0
- data/spec/mongoid/persistable/updatable_spec.rb +3 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +34 -1
- data/spec/mongoid/persistable_spec.rb +1 -0
- data/spec/mongoid/persistence_context_spec.rb +1 -0
- data/spec/mongoid/positional_spec.rb +1 -0
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +24 -0
- data/spec/mongoid/railties/console_sandbox_spec.rb +44 -0
- data/spec/mongoid/relations/proxy_spec.rb +1 -0
- data/spec/mongoid/reloadable_spec.rb +28 -83
- data/spec/mongoid/scopable_spec.rb +39 -50
- data/spec/mongoid/search_indexable_spec.rb +147 -0
- data/spec/mongoid/selectable_spec.rb +1 -0
- data/spec/mongoid/serializable_spec.rb +10 -16
- data/spec/mongoid/shardable_models.rb +1 -0
- data/spec/mongoid/shardable_spec.rb +1 -0
- data/spec/mongoid/stateful_spec.rb +1 -0
- data/spec/mongoid/tasks/database_rake_spec.rb +127 -49
- data/spec/mongoid/tasks/database_spec.rb +48 -1
- data/spec/mongoid/tasks/encryption_spec.rb +187 -0
- data/spec/mongoid/threaded_spec.rb +38 -0
- data/spec/mongoid/timestamps/created/short_spec.rb +1 -0
- data/spec/mongoid/timestamps/created_spec.rb +1 -23
- data/spec/mongoid/timestamps/timeless_spec.rb +1 -0
- data/spec/mongoid/timestamps/updated/short_spec.rb +1 -0
- data/spec/mongoid/timestamps/updated_spec.rb +1 -0
- data/spec/mongoid/timestamps_spec.rb +1 -0
- data/spec/mongoid/timestamps_spec_models.rb +1 -0
- data/spec/mongoid/touchable_spec.rb +490 -62
- data/spec/mongoid/touchable_spec_models.rb +96 -1
- data/spec/mongoid/traversable_spec.rb +1 -0
- data/spec/mongoid/validatable/associated_spec.rb +5 -14
- data/spec/mongoid/validatable/format_spec.rb +1 -0
- data/spec/mongoid/validatable/length_spec.rb +1 -0
- data/spec/mongoid/validatable/numericality_spec.rb +1 -0
- data/spec/mongoid/validatable/presence_spec.rb +1 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +48 -3
- data/spec/mongoid/validatable_spec.rb +1 -0
- data/spec/mongoid/warnings_spec.rb +1 -0
- data/spec/mongoid_spec.rb +27 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +1 -0
- data/spec/rails/mongoid_spec.rb +26 -117
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +298 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +281 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +417 -0
- data/spec/shared/shlib/set_env.sh +146 -0
- data/spec/spec_helper.rb +26 -28
- data/spec/support/authorization.rb +1 -0
- data/spec/support/client_registry.rb +1 -0
- data/spec/support/constraints.rb +1 -0
- data/spec/support/crypt/models.rb +50 -0
- data/spec/support/crypt.rb +80 -0
- data/spec/support/expectations.rb +1 -0
- data/spec/support/feature_sandbox.rb +72 -0
- data/spec/support/helpers.rb +1 -0
- data/spec/support/immutable_ids.rb +22 -21
- data/spec/support/macros.rb +4 -6
- data/spec/support/models/account.rb +1 -0
- data/spec/support/models/acolyte.rb +1 -0
- data/spec/support/models/actor.rb +1 -0
- data/spec/support/models/actress.rb +1 -0
- data/spec/support/models/address.rb +3 -0
- data/spec/support/models/address_component.rb +1 -0
- data/spec/support/models/address_number.rb +1 -0
- data/spec/support/models/agency.rb +1 -0
- data/spec/support/models/agent.rb +1 -0
- data/spec/support/models/album.rb +1 -0
- data/spec/support/models/alert.rb +1 -0
- data/spec/support/models/animal.rb +1 -0
- data/spec/support/models/answer.rb +1 -0
- data/spec/support/models/appointment.rb +1 -0
- data/spec/support/models/armrest.rb +1 -0
- data/spec/support/models/array_field.rb +1 -0
- data/spec/support/models/article.rb +1 -0
- data/spec/support/models/artist.rb +1 -0
- data/spec/support/models/artwork.rb +1 -0
- data/spec/support/models/audible_sound.rb +1 -0
- data/spec/support/models/audio.rb +1 -0
- data/spec/support/models/augmentation.rb +1 -0
- data/spec/support/models/author.rb +1 -0
- data/spec/support/models/baby.rb +1 -0
- data/spec/support/models/band.rb +5 -1
- data/spec/support/models/bar.rb +1 -0
- data/spec/support/models/basic.rb +1 -0
- data/spec/support/models/bed.rb +1 -0
- data/spec/support/models/big_palette.rb +1 -0
- data/spec/support/models/birthday.rb +1 -0
- data/spec/support/models/bolt.rb +1 -0
- data/spec/support/models/bomb.rb +1 -0
- data/spec/support/models/book.rb +1 -0
- data/spec/support/models/breed.rb +1 -0
- data/spec/support/models/browser.rb +1 -0
- data/spec/support/models/building.rb +1 -0
- data/spec/support/models/building_address.rb +1 -0
- data/spec/support/models/bus.rb +1 -0
- data/spec/support/models/business.rb +1 -0
- data/spec/support/models/callback_test.rb +1 -0
- data/spec/support/models/canvas.rb +1 -0
- data/spec/support/models/car.rb +1 -0
- data/spec/support/models/cat.rb +1 -0
- data/spec/support/models/catalog.rb +1 -0
- data/spec/support/models/category.rb +1 -0
- data/spec/support/models/child.rb +1 -0
- data/spec/support/models/child_doc.rb +1 -0
- data/spec/support/models/church.rb +1 -0
- data/spec/support/models/circle.rb +1 -0
- data/spec/support/models/circuit.rb +1 -0
- data/spec/support/models/circus.rb +1 -0
- data/spec/support/models/code.rb +1 -0
- data/spec/support/models/coding/pull_request.rb +1 -0
- data/spec/support/models/coding.rb +1 -0
- data/spec/support/models/comment.rb +1 -0
- data/spec/support/models/company.rb +1 -0
- data/spec/support/models/consumption_period.rb +1 -0
- data/spec/support/models/contextable_item.rb +1 -0
- data/spec/support/models/contractor.rb +1 -0
- data/spec/support/models/cookie.rb +1 -0
- data/spec/support/models/country_code.rb +1 -0
- data/spec/support/models/courier_job.rb +1 -0
- data/spec/support/models/cover.rb +1 -0
- data/spec/support/models/crate.rb +1 -0
- data/spec/support/models/customer.rb +1 -0
- data/spec/support/models/customer_address.rb +1 -0
- data/spec/support/models/deed.rb +1 -0
- data/spec/support/models/definition.rb +1 -0
- data/spec/support/models/delegating_patient.rb +1 -0
- data/spec/support/models/description.rb +1 -0
- data/spec/support/models/dictionary.rb +1 -0
- data/spec/support/models/division.rb +1 -0
- data/spec/support/models/doctor.rb +1 -0
- data/spec/support/models/dog.rb +1 -0
- data/spec/support/models/dokument.rb +1 -0
- data/spec/support/models/draft.rb +1 -0
- data/spec/support/models/dragon.rb +1 -0
- data/spec/support/models/driver.rb +1 -0
- data/spec/support/models/drug.rb +1 -0
- data/spec/support/models/dungeon.rb +1 -0
- data/spec/support/models/edit.rb +1 -0
- data/spec/support/models/email.rb +1 -0
- data/spec/support/models/employer.rb +1 -0
- data/spec/support/models/entry.rb +1 -0
- data/spec/support/models/eraser.rb +1 -0
- data/spec/support/models/even.rb +1 -0
- data/spec/support/models/event.rb +1 -0
- data/spec/support/models/exhibition.rb +1 -0
- data/spec/support/models/exhibitor.rb +1 -0
- data/spec/support/models/explosion.rb +1 -0
- data/spec/support/models/eye.rb +1 -0
- data/spec/support/models/eye_bowl.rb +1 -0
- data/spec/support/models/face.rb +1 -0
- data/spec/support/models/fanatic.rb +1 -0
- data/spec/support/models/favorite.rb +8 -1
- data/spec/support/models/filesystem.rb +1 -0
- data/spec/support/models/fire_hydrant.rb +1 -0
- data/spec/support/models/firefox.rb +1 -0
- data/spec/support/models/fish.rb +1 -0
- data/spec/support/models/folder.rb +1 -0
- data/spec/support/models/folder_item.rb +1 -0
- data/spec/support/models/fruits.rb +1 -0
- data/spec/support/models/game.rb +1 -0
- data/spec/support/models/ghost.rb +1 -0
- data/spec/support/models/guitar.rb +1 -0
- data/spec/support/models/hole.rb +1 -0
- data/spec/support/models/home.rb +1 -0
- data/spec/support/models/house.rb +1 -0
- data/spec/support/models/html_writer.rb +1 -0
- data/spec/support/models/id_key.rb +1 -0
- data/spec/support/models/idnodef.rb +1 -0
- data/spec/support/models/image.rb +1 -0
- data/spec/support/models/implant.rb +1 -0
- data/spec/support/models/instrument.rb +1 -0
- data/spec/support/models/item.rb +1 -0
- data/spec/support/models/jar.rb +1 -0
- data/spec/support/models/kaleidoscope.rb +1 -0
- data/spec/support/models/kangaroo.rb +1 -0
- data/spec/support/models/label.rb +1 -0
- data/spec/support/models/language.rb +1 -0
- data/spec/support/models/lat_lng.rb +1 -6
- data/spec/support/models/league.rb +1 -0
- data/spec/support/models/learner.rb +1 -0
- data/spec/support/models/line_item.rb +1 -0
- data/spec/support/models/location.rb +1 -0
- data/spec/support/models/login.rb +1 -0
- data/spec/support/models/manufacturer.rb +1 -0
- data/spec/support/models/meat.rb +1 -0
- data/spec/support/models/membership.rb +1 -0
- data/spec/support/models/message.rb +1 -0
- data/spec/support/models/minim.rb +1 -0
- data/spec/support/models/mixed_drink.rb +1 -0
- data/spec/support/models/mop.rb +1 -0
- data/spec/support/models/movie.rb +1 -0
- data/spec/support/models/my_hash.rb +1 -0
- data/spec/support/models/name.rb +1 -0
- data/spec/support/models/name_only.rb +1 -0
- data/spec/support/models/node.rb +1 -0
- data/spec/support/models/note.rb +1 -0
- data/spec/support/models/nut.rb +1 -0
- data/spec/support/models/odd.rb +1 -0
- data/spec/support/models/order.rb +1 -0
- data/spec/support/models/ordered_post.rb +1 -0
- data/spec/support/models/ordered_preference.rb +1 -0
- data/spec/support/models/oscar.rb +1 -0
- data/spec/support/models/other_owner_object.rb +1 -0
- data/spec/support/models/override.rb +1 -0
- data/spec/support/models/ownable.rb +1 -0
- data/spec/support/models/owner.rb +1 -0
- data/spec/support/models/pack.rb +1 -0
- data/spec/support/models/page.rb +1 -0
- data/spec/support/models/page_question.rb +1 -0
- data/spec/support/models/palette.rb +1 -0
- data/spec/support/models/parent.rb +1 -0
- data/spec/support/models/parent_doc.rb +1 -0
- data/spec/support/models/passport.rb +1 -0
- data/spec/support/models/patient.rb +1 -0
- data/spec/support/models/pdf_writer.rb +1 -0
- data/spec/support/models/pencil.rb +1 -0
- data/spec/support/models/person.rb +1 -0
- data/spec/support/models/pet.rb +1 -0
- data/spec/support/models/pet_owner.rb +1 -0
- data/spec/support/models/phone.rb +1 -0
- data/spec/support/models/piano.rb +1 -0
- data/spec/support/models/pizza.rb +1 -0
- data/spec/support/models/player.rb +1 -0
- data/spec/support/models/post.rb +1 -0
- data/spec/support/models/post_genre.rb +1 -0
- data/spec/support/models/powerup.rb +1 -0
- data/spec/support/models/preference.rb +1 -0
- data/spec/support/models/princess.rb +1 -0
- data/spec/support/models/product.rb +1 -0
- data/spec/support/models/profile.rb +1 -0
- data/spec/support/models/pronunciation.rb +1 -0
- data/spec/support/models/pub.rb +1 -0
- data/spec/support/models/publication/encyclopedia.rb +1 -0
- data/spec/support/models/publication/review.rb +1 -0
- data/spec/support/models/publication.rb +1 -0
- data/spec/support/models/purchase.rb +1 -0
- data/spec/support/models/purchased_item.rb +1 -0
- data/spec/support/models/question.rb +1 -0
- data/spec/support/models/quiz.rb +1 -0
- data/spec/support/models/rating.rb +1 -0
- data/spec/support/models/record.rb +1 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/role.rb +1 -0
- data/spec/support/models/root_category.rb +1 -0
- data/spec/support/models/sandbox/app/models/app_models_message.rb +4 -0
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_user.rb +4 -0
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
- data/spec/support/models/sandwich.rb +1 -0
- data/spec/support/models/scheduler.rb +1 -0
- data/spec/support/models/school.rb +1 -0
- data/spec/support/models/scribe.rb +1 -0
- data/spec/support/models/sealer.rb +1 -0
- data/spec/support/models/seat.rb +1 -0
- data/spec/support/models/seo.rb +1 -0
- data/spec/support/models/series.rb +1 -0
- data/spec/support/models/server.rb +1 -0
- data/spec/support/models/service.rb +1 -0
- data/spec/support/models/shape.rb +1 -0
- data/spec/support/models/shelf.rb +1 -0
- data/spec/support/models/shield.rb +1 -0
- data/spec/support/models/shipment_address.rb +1 -0
- data/spec/support/models/shipping_container.rb +1 -0
- data/spec/support/models/shipping_pack.rb +1 -0
- data/spec/support/models/shirt.rb +1 -0
- data/spec/support/models/shop.rb +1 -0
- data/spec/support/models/short_agent.rb +1 -0
- data/spec/support/models/short_quiz.rb +1 -0
- data/spec/support/models/simple.rb +1 -0
- data/spec/support/models/slave.rb +1 -0
- data/spec/support/models/song.rb +1 -0
- data/spec/support/models/sound.rb +1 -0
- data/spec/support/models/spacer.rb +1 -0
- data/spec/support/models/square.rb +1 -0
- data/spec/support/models/staff.rb +1 -0
- data/spec/support/models/store_as_dup_test1.rb +1 -0
- data/spec/support/models/store_as_dup_test2.rb +1 -0
- data/spec/support/models/store_as_dup_test3.rb +1 -0
- data/spec/support/models/store_as_dup_test4.rb +1 -0
- data/spec/support/models/strategy.rb +1 -0
- data/spec/support/models/student.rb +1 -0
- data/spec/support/models/sub_item.rb +1 -0
- data/spec/support/models/subscription.rb +1 -0
- data/spec/support/models/survey.rb +1 -0
- data/spec/support/models/symptom.rb +1 -0
- data/spec/support/models/system_role.rb +1 -0
- data/spec/support/models/tag.rb +1 -0
- data/spec/support/models/target.rb +1 -0
- data/spec/support/models/template.rb +1 -0
- data/spec/support/models/thing.rb +1 -0
- data/spec/support/models/threadlocker.rb +1 -0
- data/spec/support/models/title.rb +1 -0
- data/spec/support/models/tool.rb +1 -0
- data/spec/support/models/topping.rb +1 -0
- data/spec/support/models/toy.rb +1 -0
- data/spec/support/models/track.rb +1 -0
- data/spec/support/models/translation.rb +1 -0
- data/spec/support/models/tree.rb +1 -0
- data/spec/support/models/truck.rb +1 -0
- data/spec/support/models/updatable.rb +1 -0
- data/spec/support/models/user.rb +1 -0
- data/spec/support/models/user_account.rb +1 -0
- data/spec/support/models/validation_callback.rb +1 -0
- data/spec/support/models/vehicle.rb +1 -0
- data/spec/support/models/version.rb +1 -0
- data/spec/support/models/vertex.rb +1 -0
- data/spec/support/models/vet_visit.rb +1 -0
- data/spec/support/models/video.rb +1 -0
- data/spec/support/models/video_game.rb +1 -0
- data/spec/support/models/washer.rb +1 -0
- data/spec/support/models/weapon.rb +1 -0
- data/spec/support/models/wiki_page.rb +1 -0
- data/spec/support/models/word.rb +1 -0
- data/spec/support/models/word_origin.rb +1 -0
- data/spec/support/models/writer.rb +1 -0
- data/spec/support/rails_mock.rb +32 -0
- data/spec/support/shared/time.rb +3 -21
- data/spec/support/sinatra_mock.rb +7 -0
- data/spec/support/spec_config.rb +30 -9
- data.tar.gz.sig +0 -0
- metadata +171 -37
- metadata.gz.sig +1 -0
- data/lib/mongoid/association/referenced/eager.rb +0 -163
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -113
- data/lib/mongoid/contextual/geo_near.rb +0 -236
- data/lib/mongoid/errors/invalid_session_use.rb +0 -21
- data/lib/mongoid/errors/invalid_storage_parent.rb +0 -27
- data/lib/mongoid/query_cache.rb +0 -68
- data/spec/mongoid/contextual/geo_near_spec.rb +0 -471
- data/spec/mongoid/extensions_spec.rb +0 -43
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -50
- data/spec/mongoid/query_cache_spec.rb +0 -865
data/lib/mongoid/criteria.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
2
3
|
|
3
4
|
require "mongoid/criteria/findable"
|
4
5
|
require "mongoid/criteria/includable"
|
@@ -40,6 +41,26 @@ module Mongoid
|
|
40
41
|
include Clients::Sessions
|
41
42
|
include Options
|
42
43
|
|
44
|
+
class << self
|
45
|
+
# Convert the given hash to a criteria. Will iterate over each keys in the
|
46
|
+
# hash which must correspond to method on a criteria object. The hash
|
47
|
+
# must also include a "klass" key.
|
48
|
+
#
|
49
|
+
# @example Convert the hash to a criteria.
|
50
|
+
# Criteria.from_hash({ klass: Band, where: { name: "Depeche Mode" })
|
51
|
+
#
|
52
|
+
# @param [ Hash ] hash The hash to convert.
|
53
|
+
#
|
54
|
+
# @return [ Criteria ] The criteria.
|
55
|
+
def from_hash(hash)
|
56
|
+
criteria = Criteria.new(hash.delete(:klass) || hash.delete('klass'))
|
57
|
+
hash.each_pair do |method, args|
|
58
|
+
criteria = criteria.__send__(method, args)
|
59
|
+
end
|
60
|
+
criteria
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
43
64
|
# Static array used to check with method missing - we only need to ever
|
44
65
|
# instantiate once.
|
45
66
|
CHECK = []
|
@@ -90,7 +111,8 @@ module Mongoid
|
|
90
111
|
# enumerator = criteria.find(-> { "Default Band" })
|
91
112
|
#
|
92
113
|
# @param [ [ Object | Array<Object> ]... ] *args The id(s).
|
93
|
-
# @param
|
114
|
+
# @param &block Optional block to pass.
|
115
|
+
# @yield [ Object ] Yields each enumerable element to the block.
|
94
116
|
#
|
95
117
|
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
96
118
|
#
|
@@ -158,7 +180,7 @@ module Mongoid
|
|
158
180
|
#
|
159
181
|
# @return [ Object ] The id.
|
160
182
|
def extract_id
|
161
|
-
selector
|
183
|
+
selector['_id'] || selector[:_id] || selector['id'] || selector[:id]
|
162
184
|
end
|
163
185
|
|
164
186
|
# Adds a criterion to the +Criteria+ that specifies additional options
|
@@ -221,7 +243,7 @@ module Mongoid
|
|
221
243
|
# may be desired.
|
222
244
|
#
|
223
245
|
# @example Merge the criteria with another criteria.
|
224
|
-
#
|
246
|
+
# criteria.merge(other_criteria)
|
225
247
|
#
|
226
248
|
# @example Merge the criteria with a hash. The hash must contain a klass
|
227
249
|
# key and the key/value pairs correspond to method names/args.
|
@@ -246,16 +268,16 @@ module Mongoid
|
|
246
268
|
# @example Merge another criteria into this criteria.
|
247
269
|
# criteria.merge(Person.where(name: "bob"))
|
248
270
|
#
|
249
|
-
# @param [ Criteria ] other The criteria to merge in.
|
271
|
+
# @param [ Criteria | Hash ] other The criteria to merge in.
|
250
272
|
#
|
251
273
|
# @return [ Criteria ] The merged criteria.
|
252
274
|
def merge!(other)
|
253
|
-
|
254
|
-
selector.merge!(
|
255
|
-
options.merge!(
|
256
|
-
self.documents =
|
257
|
-
self.scoping_options =
|
258
|
-
self.inclusions = (inclusions +
|
275
|
+
other = self.class.from_hash(other) if other.is_a?(Hash)
|
276
|
+
selector.merge!(other.selector)
|
277
|
+
options.merge!(other.options)
|
278
|
+
self.documents = other.documents.dup unless other.documents.empty?
|
279
|
+
self.scoping_options = other.scoping_options
|
280
|
+
self.inclusions = (inclusions + other.inclusions).uniq
|
259
281
|
self
|
260
282
|
end
|
261
283
|
|
@@ -348,9 +370,11 @@ module Mongoid
|
|
348
370
|
# criteria.to_criteria
|
349
371
|
#
|
350
372
|
# @return [ Criteria ] self.
|
373
|
+
# @deprecated
|
351
374
|
def to_criteria
|
352
375
|
self
|
353
376
|
end
|
377
|
+
Mongoid.deprecate(self, :to_criteria)
|
354
378
|
|
355
379
|
# Convert the criteria to a proc.
|
356
380
|
#
|
@@ -437,6 +461,8 @@ module Mongoid
|
|
437
461
|
# @param [ Hash ] scope The scope for the code.
|
438
462
|
#
|
439
463
|
# @return [ Criteria ] The criteria.
|
464
|
+
#
|
465
|
+
# @deprecated
|
440
466
|
def for_js(javascript, scope = {})
|
441
467
|
code = if scope.empty?
|
442
468
|
# CodeWithScope is not supported for $where as of MongoDB 4.4
|
@@ -446,6 +472,7 @@ module Mongoid
|
|
446
472
|
end
|
447
473
|
js_query(code)
|
448
474
|
end
|
475
|
+
Mongoid.deprecate(self, :for_js)
|
449
476
|
|
450
477
|
private
|
451
478
|
|
data/lib/mongoid/deprecable.rb
CHANGED
data/lib/mongoid/deprecation.rb
CHANGED
@@ -1,19 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
2
3
|
|
3
4
|
module Mongoid
|
4
5
|
|
5
6
|
# Utility class for logging deprecation warnings.
|
6
7
|
class Deprecation < ::ActiveSupport::Deprecation
|
7
8
|
|
8
|
-
|
9
|
+
def initialize
|
10
|
+
# Per change policy, deprecations will be removed in the next major version.
|
11
|
+
deprecation_horizon = "#{Mongoid::VERSION.split('.').first.to_i + 1}.0".freeze
|
12
|
+
gem_name = 'Mongoid'
|
13
|
+
super(deprecation_horizon, gem_name)
|
14
|
+
end
|
9
15
|
|
10
|
-
# Per change policy, deprecations will be removed in the next major version.
|
11
|
-
@deprecation_horizon = "#{Mongoid::VERSION.split('.').first.to_i + 1}.0".freeze
|
12
16
|
|
13
17
|
# Overrides default ActiveSupport::Deprecation behavior
|
14
18
|
# to use Mongoid's logger.
|
15
19
|
#
|
16
|
-
# @return Array<Proc> The deprecation behavior.
|
20
|
+
# @return [ Array<Proc> ] The deprecation behavior.
|
17
21
|
def behavior
|
18
22
|
@behavior ||= Array(->(*args) {
|
19
23
|
logger = Mongoid.logger
|
data/lib/mongoid/document.rb
CHANGED
@@ -1,25 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
3
|
+
require 'mongoid/positional'
|
4
|
+
require 'mongoid/evolvable'
|
5
|
+
require 'mongoid/extensions'
|
6
|
+
require 'mongoid/errors'
|
7
|
+
require 'mongoid/threaded'
|
8
|
+
require 'mongoid/atomic'
|
9
|
+
require 'mongoid/attributes'
|
10
|
+
require 'mongoid/contextual'
|
11
|
+
require 'mongoid/copyable'
|
12
|
+
require 'mongoid/equality'
|
13
|
+
require 'mongoid/criteria'
|
14
|
+
require 'mongoid/factory'
|
15
|
+
require 'mongoid/fields'
|
16
|
+
require 'mongoid/timestamps'
|
17
|
+
require 'mongoid/association'
|
18
|
+
require 'mongoid/composable'
|
19
|
+
require 'mongoid/touchable'
|
20
20
|
|
21
21
|
module Mongoid
|
22
|
-
|
23
22
|
# This is the base module for all domain objects that need to be persisted to
|
24
23
|
# the database as documents.
|
25
24
|
module Document
|
@@ -84,7 +83,7 @@ module Mongoid
|
|
84
83
|
#
|
85
84
|
# @return [ Array ] An array containing [document.class, document._id]
|
86
85
|
def identity
|
87
|
-
[ self.class,
|
86
|
+
[ self.class, _id ]
|
88
87
|
end
|
89
88
|
|
90
89
|
# Instantiate a new +Document+, setting the Document's attributes if
|
@@ -95,7 +94,7 @@ module Mongoid
|
|
95
94
|
# otherwise it will be set to a fresh +BSON::ObjectId+ string.
|
96
95
|
#
|
97
96
|
# @example Create a new document.
|
98
|
-
# Person.new(:title =>
|
97
|
+
# Person.new(:title => 'Sir')
|
99
98
|
#
|
100
99
|
# @param [ Hash ] attrs The attributes to set up the document with.
|
101
100
|
#
|
@@ -133,41 +132,7 @@ module Mongoid
|
|
133
132
|
#
|
134
133
|
# @return [ Hash ] A hash of all attributes in the hierarchy.
|
135
134
|
def as_document
|
136
|
-
|
137
|
-
|
138
|
-
# legacy attributes have a tendency to leak internal state via
|
139
|
-
# `as_document`; we have to deep_dup the attributes here to prevent
|
140
|
-
# that.
|
141
|
-
attrs = attrs.deep_dup if Mongoid.legacy_attributes
|
142
|
-
|
143
|
-
BSON::Document.new(attrs)
|
144
|
-
end
|
145
|
-
|
146
|
-
# Calls #as_json on the document with additional, Mongoid-specific options.
|
147
|
-
#
|
148
|
-
# @note Rails 6 changes return value of as_json for non-primitive types
|
149
|
-
# such as BSON::ObjectId. In Rails <= 5, as_json returned these as
|
150
|
-
# instances of the class. In Rails 6, these are returned serialized to
|
151
|
-
# primitive types (e.g. {"$oid"=>"5bcfc40bde340b37feda98e9"}).
|
152
|
-
# See https://github.com/rails/rails/commit/2e5cb980a448e7f4ab00df6e9ad4c1cc456616aa
|
153
|
-
# for more information.
|
154
|
-
#
|
155
|
-
# @example Get the document as json.
|
156
|
-
# document.as_json(compact: true)
|
157
|
-
#
|
158
|
-
# @param [ Hash ] options The options.
|
159
|
-
#
|
160
|
-
# @option options [ true | false ] :compact (Deprecated) Whether to include fields
|
161
|
-
# with nil values in the json document.
|
162
|
-
#
|
163
|
-
# @return [ Hash ] The document as json.
|
164
|
-
def as_json(options = nil)
|
165
|
-
rv = super
|
166
|
-
if options && options[:compact]
|
167
|
-
Mongoid::Warnings.warn_as_json_compact_deprecated
|
168
|
-
rv = rv.compact
|
169
|
-
end
|
170
|
-
rv
|
135
|
+
BSON::Document.new(as_attributes)
|
171
136
|
end
|
172
137
|
|
173
138
|
# Returns an instance of the specified class with the attributes,
|
@@ -182,34 +147,52 @@ module Mongoid
|
|
182
147
|
#
|
183
148
|
# @return [ Document ] An instance of the specified class.
|
184
149
|
def becomes(klass)
|
185
|
-
|
186
|
-
raise ArgumentError, "A class which includes Mongoid::Document is expected"
|
187
|
-
end
|
150
|
+
mongoid_document_check!(klass)
|
188
151
|
|
189
152
|
became = klass.new(clone_document)
|
190
|
-
became.
|
191
|
-
became.instance_variable_set(:@changed_attributes, changed_attributes)
|
192
|
-
new_errors = ActiveModel::Errors.new(became)
|
193
|
-
new_errors.copy!(errors)
|
194
|
-
became.instance_variable_set(:@errors, new_errors)
|
195
|
-
became.instance_variable_set(:@new_record, new_record?)
|
196
|
-
became.instance_variable_set(:@destroyed, destroyed?)
|
197
|
-
became.changed_attributes[klass.discriminator_key] = self.class.discriminator_value
|
198
|
-
became[klass.discriminator_key] = klass.discriminator_value
|
199
|
-
|
200
|
-
# mark embedded docs as persisted
|
201
|
-
embedded_relations.each_pair do |name, meta|
|
202
|
-
without_autobuild do
|
203
|
-
relation = became.__send__(name)
|
204
|
-
Array.wrap(relation).each do |r|
|
205
|
-
r.instance_variable_set(:@new_record, new_record?)
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
153
|
+
became.internal_state = internal_state
|
209
154
|
|
210
155
|
became
|
211
156
|
end
|
212
157
|
|
158
|
+
# Sets the internal state of this document. Used only by #becomes to
|
159
|
+
# help initialize a retyped document.
|
160
|
+
#
|
161
|
+
# @param [ Hash ] state The map of internal state values.
|
162
|
+
#
|
163
|
+
# @api private
|
164
|
+
def internal_state=(state)
|
165
|
+
self._id = state[:id]
|
166
|
+
@changed_attributes = state[:changed_attributes]
|
167
|
+
@errors = ActiveModel::Errors.new(self).tap { |e| e.copy!(state[:errors]) }
|
168
|
+
@new_record = state[:new_record]
|
169
|
+
@destroyed = state[:destroyed]
|
170
|
+
|
171
|
+
update_discriminator(state[:discriminator_key_was])
|
172
|
+
|
173
|
+
mark_persisted_state_for_embedded_documents(state[:new_record])
|
174
|
+
end
|
175
|
+
|
176
|
+
# Handles the setup and execution of callbacks, if callbacks are to
|
177
|
+
# be executed; otherwise, adds the appropriate callbacks to the pending
|
178
|
+
# callbacks list.
|
179
|
+
#
|
180
|
+
# @param execute_callbacks [ true | false ] Whether callbacks should be
|
181
|
+
# executed or not.
|
182
|
+
#
|
183
|
+
# @api private
|
184
|
+
def _handle_callbacks_after_instantiation(execute_callbacks)
|
185
|
+
if execute_callbacks
|
186
|
+
apply_defaults
|
187
|
+
yield self if block_given?
|
188
|
+
run_callbacks(:find) unless _find_callbacks.empty?
|
189
|
+
run_callbacks(:initialize) unless _initialize_callbacks.empty?
|
190
|
+
else
|
191
|
+
yield self if block_given?
|
192
|
+
self.pending_callbacks += %i[ apply_defaults find initialize ]
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
213
196
|
private
|
214
197
|
|
215
198
|
# Does the construction of a document.
|
@@ -231,28 +214,29 @@ module Mongoid
|
|
231
214
|
def construct_document(attrs = nil, options = {})
|
232
215
|
execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
|
233
216
|
|
234
|
-
|
217
|
+
self._parent = nil
|
235
218
|
_building do
|
236
|
-
|
237
|
-
|
238
|
-
apply_pre_processed_defaults
|
239
|
-
apply_default_scoping
|
219
|
+
prepare_to_process_attributes
|
220
|
+
|
240
221
|
process_attributes(attrs) do
|
241
222
|
yield(self) if block_given?
|
242
223
|
end
|
243
224
|
@attributes_before_type_cast = @attributes.merge(attributes_before_type_cast)
|
244
225
|
|
245
|
-
|
246
|
-
apply_post_processed_defaults
|
247
|
-
run_callbacks(:initialize) unless _initialize_callbacks.empty?
|
248
|
-
else
|
249
|
-
pending_callbacks << :apply_post_processed_defaults
|
250
|
-
pending_callbacks << :initialize
|
251
|
-
end
|
226
|
+
resolve_post_construction_callbacks(execute_callbacks)
|
252
227
|
end
|
253
228
|
self
|
254
229
|
end
|
255
230
|
|
231
|
+
# Initializes the object state prior to attribute processing; this is
|
232
|
+
# called only from #construct_document.
|
233
|
+
def prepare_to_process_attributes
|
234
|
+
@new_record = true
|
235
|
+
@attributes ||= {}
|
236
|
+
apply_pre_processed_defaults
|
237
|
+
apply_default_scoping
|
238
|
+
end
|
239
|
+
|
256
240
|
# Returns the logger
|
257
241
|
#
|
258
242
|
# @return [ Logger ] The configured logger or a default Logger instance.
|
@@ -267,7 +251,7 @@ module Mongoid
|
|
267
251
|
#
|
268
252
|
# @return [ String ] The model key.
|
269
253
|
def model_key
|
270
|
-
@
|
254
|
+
@model_key ||= self.class.model_name.cache_key
|
271
255
|
end
|
272
256
|
|
273
257
|
# Returns a hash of the attributes.
|
@@ -280,28 +264,103 @@ module Mongoid
|
|
280
264
|
# @return [ Hash ] The attributes hash.
|
281
265
|
def as_attributes
|
282
266
|
return attributes if frozen?
|
267
|
+
|
283
268
|
embedded_relations.each_pair do |name, meta|
|
284
269
|
without_autobuild do
|
285
|
-
|
286
|
-
if attributes.key?(stored) || !relation.blank?
|
287
|
-
if !relation.nil?
|
288
|
-
attributes[stored] = relation.send(:as_attributes)
|
289
|
-
else
|
290
|
-
attributes.delete(stored)
|
291
|
-
end
|
292
|
-
end
|
270
|
+
add_attributes_for_relation(name, meta)
|
293
271
|
end
|
294
272
|
end
|
273
|
+
|
295
274
|
attributes
|
296
275
|
end
|
297
276
|
|
298
|
-
|
277
|
+
# Adds the attributes for the given relation to the document's attributes.
|
278
|
+
#
|
279
|
+
# @param name [ String | Symbol ] the name of the relation to add
|
280
|
+
# @param meta [ Mongoid::Assocation::Relatable ] the relation object
|
281
|
+
def add_attributes_for_relation(name, meta)
|
282
|
+
relation, stored = send(name), meta.store_as
|
283
|
+
return unless attributes.key?(stored) || !relation.blank?
|
284
|
+
|
285
|
+
if relation.nil?
|
286
|
+
attributes.delete(stored)
|
287
|
+
else
|
288
|
+
attributes[stored] = relation.send(:as_attributes)
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
# Checks that the given argument is an instance of `Mongoid::Document`.
|
293
|
+
#
|
294
|
+
# @param klass [ Class ] The class to test.
|
295
|
+
#
|
296
|
+
# @raise [ ArgumentError ] if the class does not include
|
297
|
+
# Mongoid::Document.
|
298
|
+
def mongoid_document_check!(klass)
|
299
|
+
return if klass.include?(Mongoid::Document)
|
300
|
+
|
301
|
+
raise ArgumentError, 'A class which includes Mongoid::Document is expected'
|
302
|
+
end
|
303
|
+
|
304
|
+
# Constructs a hash representing the internal state of this object,
|
305
|
+
# suitable for passing to #internal_state=.
|
306
|
+
#
|
307
|
+
# @return [ Hash ] the map of internal state values
|
308
|
+
def internal_state
|
309
|
+
{
|
310
|
+
id: _id,
|
311
|
+
changed_attributes: changed_attributes,
|
312
|
+
errors: errors,
|
313
|
+
new_record: new_record?,
|
314
|
+
destroyed: destroyed?,
|
315
|
+
discriminator_key_was: self.class.discriminator_value
|
316
|
+
}
|
317
|
+
end
|
318
|
+
|
319
|
+
# Updates the value of the discriminator_key for this object, setting its
|
320
|
+
# previous value to `key_was`.
|
321
|
+
#
|
322
|
+
# @param key_was [ String ] the previous value of the discriminator key.
|
323
|
+
def update_discriminator(key_was)
|
324
|
+
changed_attributes[self.class.discriminator_key] = key_was
|
325
|
+
self[self.class.discriminator_key] = self.class.discriminator_value
|
326
|
+
end
|
299
327
|
|
328
|
+
# Marks all embedded documents with the given "new_record" state.
|
329
|
+
#
|
330
|
+
# @param [ true | false ] new_record whether or not the embedded records
|
331
|
+
# should be flagged as new records or not.
|
332
|
+
def mark_persisted_state_for_embedded_documents(new_record)
|
333
|
+
embedded_relations.each_pair do |name, _meta|
|
334
|
+
without_autobuild do
|
335
|
+
relation = __send__(name)
|
336
|
+
Array.wrap(relation).each do |r|
|
337
|
+
r.instance_variable_set(:@new_record, new_record)
|
338
|
+
end
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
# Either executes or enqueues the post-construction callbacks.
|
344
|
+
#
|
345
|
+
# @param [ true | false ] execute_callbacks whether the callbacks
|
346
|
+
# should be executed (true) or enqueued (false)
|
347
|
+
def resolve_post_construction_callbacks(execute_callbacks)
|
348
|
+
if execute_callbacks
|
349
|
+
apply_post_processed_defaults
|
350
|
+
run_callbacks(:initialize) unless _initialize_callbacks.empty?
|
351
|
+
else
|
352
|
+
pending_callbacks << :apply_post_processed_defaults
|
353
|
+
pending_callbacks << :initialize
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
# Class-level methods for Document objects.
|
358
|
+
module ClassMethods
|
300
359
|
# Indicate whether callbacks should be invoked by default or not,
|
301
360
|
# within the block. Callbacks may always be explicitly invoked by passing
|
302
361
|
# `execute_callbacks: true` where available.
|
303
362
|
#
|
304
|
-
# @
|
363
|
+
# @param [ true | false ] execute_callbacks Whether callbacks should be
|
305
364
|
# suppressed or not.
|
306
365
|
def with_callbacks(execute_callbacks)
|
307
366
|
saved, Threaded.execute_callbacks =
|
@@ -315,13 +374,11 @@ module Mongoid
|
|
315
374
|
# the attributes have already been typecast.
|
316
375
|
#
|
317
376
|
# @example Create the document.
|
318
|
-
# Person.instantiate(:title =>
|
377
|
+
# Person.instantiate(:title => 'Sir', :age => 30)
|
319
378
|
#
|
320
379
|
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
321
380
|
# @param [ Integer ] selected_fields The selected fields from the
|
322
381
|
# criteria.
|
323
|
-
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
324
|
-
# should be run.
|
325
382
|
#
|
326
383
|
# @return [ Document ] A new document.
|
327
384
|
def instantiate(attrs = nil, selected_fields = nil, &block)
|
@@ -338,6 +395,9 @@ module Mongoid
|
|
338
395
|
# @option options [ true | false ] :execute_callbacks Flag specifies
|
339
396
|
# whether callbacks should be run.
|
340
397
|
#
|
398
|
+
# @yield [ Mongoid::Document ] If a block is given, yields the newly
|
399
|
+
# instantiated document to it.
|
400
|
+
#
|
341
401
|
# @return [ Document ] A new document.
|
342
402
|
#
|
343
403
|
# @note A Ruby 2.x bug prevents the options hash from being keyword
|
@@ -345,32 +405,18 @@ module Mongoid
|
|
345
405
|
# the options hash as keyword arguments.
|
346
406
|
#
|
347
407
|
# @api private
|
348
|
-
def instantiate_document(attrs = nil, selected_fields = nil, options = {})
|
408
|
+
def instantiate_document(attrs = nil, selected_fields = nil, options = {}, &block)
|
349
409
|
execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
|
350
|
-
attributes =
|
351
|
-
attrs
|
352
|
-
else
|
353
|
-
attrs&.to_h
|
354
|
-
end || {}
|
410
|
+
attributes = attrs&.to_h || {}
|
355
411
|
|
356
412
|
doc = allocate
|
357
413
|
doc.__selected_fields = selected_fields
|
358
414
|
doc.instance_variable_set(:@attributes, attributes)
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
doc.instance_variable_set(:@attributes_before_type_cast, attributes&.to_h.dup)
|
363
|
-
|
364
|
-
if execute_callbacks
|
365
|
-
doc.apply_defaults
|
366
|
-
yield(doc) if block_given?
|
367
|
-
doc.run_callbacks(:find) unless doc._find_callbacks.empty?
|
368
|
-
doc.run_callbacks(:initialize) unless doc._initialize_callbacks.empty?
|
369
|
-
else
|
370
|
-
yield(doc) if block_given?
|
371
|
-
doc.pending_callbacks += [:apply_defaults, :find, :initialize]
|
372
|
-
end
|
415
|
+
doc.instance_variable_set(:@attributes_before_type_cast, attributes.dup)
|
416
|
+
|
417
|
+
doc._handle_callbacks_after_instantiation(execute_callbacks, &block)
|
373
418
|
|
419
|
+
doc.remember_storage_options!
|
374
420
|
doc
|
375
421
|
end
|
376
422
|
|
@@ -402,7 +448,7 @@ module Mongoid
|
|
402
448
|
#
|
403
449
|
# @return [ Array<Class> ] All subclasses of the current document.
|
404
450
|
def _types
|
405
|
-
@
|
451
|
+
@_types ||= (descendants + [ self ]).uniq.map(&:discriminator_value)
|
406
452
|
end
|
407
453
|
|
408
454
|
# Clear the @_type cache. This is generally called when changing the discriminator
|
@@ -413,7 +459,7 @@ module Mongoid
|
|
413
459
|
#
|
414
460
|
# @api private
|
415
461
|
def _mongoid_clear_types
|
416
|
-
@
|
462
|
+
@_types = nil
|
417
463
|
superclass._mongoid_clear_types if hereditary?
|
418
464
|
end
|
419
465
|
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# rubocop:todo all
|
2
|
+
module Mongoid
|
3
|
+
# This module is used to extend Mongoid::Document
|
4
|
+
# to add encryption functionality.
|
5
|
+
module Encryptable
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
# @return [Hash] The encryption metadata for the model.
|
10
|
+
class_attribute :encrypt_metadata
|
11
|
+
self.encrypt_metadata = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
# Set the encryption metadata for the model. Parameters set here will be
|
16
|
+
# used to encrypt the fields of the model, unless overridden on the
|
17
|
+
# field itself.
|
18
|
+
#
|
19
|
+
# @param [ Hash ] options The encryption metadata.
|
20
|
+
# @option options [ String ] :key_id The base64-encoded UUID of the key
|
21
|
+
# used to encrypt fields. Mutually exclusive with :key_name_field option.
|
22
|
+
# @option options [ String ] :key_name_field The name of the field that
|
23
|
+
# contains the key alt name to use for encryption. Mutually exclusive
|
24
|
+
# with :key_id option.
|
25
|
+
# @option options [ true | false ] :deterministic Whether the encryption
|
26
|
+
# is deterministic or not.
|
27
|
+
def encrypt_with(options = {})
|
28
|
+
self.encrypt_metadata = options
|
29
|
+
end
|
30
|
+
|
31
|
+
# Whether the model is encrypted. It means that either the encrypt_with
|
32
|
+
# method was called on the model, or at least one of the fields
|
33
|
+
# is encrypted.
|
34
|
+
#
|
35
|
+
# @return [ true | false ] Whether the model is encrypted.
|
36
|
+
def encrypted?
|
37
|
+
!encrypt_metadata.empty? || fields.any? { |_, field| field.is_a?(Mongoid::Fields::Encrypted) }
|
38
|
+
end
|
39
|
+
|
40
|
+
# Override the key_id for the model.
|
41
|
+
#
|
42
|
+
# This method is solely for testing purposes and should not be used in
|
43
|
+
# the application code. The schema_map is generated very early in the
|
44
|
+
# application lifecycle, and overriding the key_id after that will not
|
45
|
+
# have any effect.
|
46
|
+
#
|
47
|
+
# @api private
|
48
|
+
def set_key_id(key_id)
|
49
|
+
self.encrypt_metadata[:key_id] = key_id
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/mongoid/equality.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
2
3
|
|
3
4
|
module Mongoid
|
4
5
|
|
@@ -17,7 +18,6 @@ module Mongoid
|
|
17
18
|
#
|
18
19
|
# @return [ Integer ] -1, 0, 1.
|
19
20
|
def <=>(other)
|
20
|
-
return super unless other.is_a?(Mongoid::Equality)
|
21
21
|
attributes["_id"].to_s <=> other.attributes["_id"].to_s
|
22
22
|
end
|
23
23
|
|
@@ -35,22 +35,6 @@ module Mongoid
|
|
35
35
|
attributes["_id"] == other.attributes["_id"]
|
36
36
|
end
|
37
37
|
|
38
|
-
# Performs class equality checking.
|
39
|
-
#
|
40
|
-
# @example Compare the classes.
|
41
|
-
# document === other
|
42
|
-
#
|
43
|
-
# @param [ Document | Object ] other The other object to compare with.
|
44
|
-
#
|
45
|
-
# @return [ true | false ] True if the classes are equal, false if not.
|
46
|
-
def ===(other)
|
47
|
-
if Mongoid.legacy_triple_equals
|
48
|
-
other.class == Class ? self.class === other : self == other
|
49
|
-
else
|
50
|
-
super
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
38
|
# Delegates to ==. Used when needing checks in hashes.
|
55
39
|
#
|
56
40
|
# @example Perform equality checking.
|
@@ -73,11 +57,7 @@ module Mongoid
|
|
73
57
|
#
|
74
58
|
# @return [ true | false ] True if the classes are equal, false if not.
|
75
59
|
def ===(other)
|
76
|
-
|
77
|
-
other.class == Class ? self <= other : other.is_a?(self)
|
78
|
-
else
|
79
|
-
other.is_a?(self)
|
80
|
-
end
|
60
|
+
other.is_a?(self)
|
81
61
|
end
|
82
62
|
end
|
83
63
|
end
|