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/config.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
2
3
|
|
3
4
|
require "mongoid/config/defaults"
|
4
5
|
require "mongoid/config/environment"
|
5
6
|
require "mongoid/config/options"
|
6
7
|
require "mongoid/config/validators"
|
8
|
+
require "mongoid/config/introspection"
|
9
|
+
require "mongoid/config/encryption"
|
7
10
|
|
8
11
|
module Mongoid
|
9
12
|
|
@@ -13,16 +16,17 @@ module Mongoid
|
|
13
16
|
extend Forwardable
|
14
17
|
extend Options
|
15
18
|
extend Defaults
|
19
|
+
extend Encryption
|
16
20
|
extend self
|
17
21
|
|
18
22
|
def_delegators ::Mongoid, :logger, :logger=
|
19
23
|
|
20
24
|
LOCK = Mutex.new
|
21
25
|
|
22
|
-
# Application name that is printed to the
|
23
|
-
# a connection
|
24
|
-
#
|
25
|
-
#
|
26
|
+
# Application name that is printed to the MongoDB logs upon establishing
|
27
|
+
# a connection. Note that the name cannot exceed 128 bytes in length.
|
28
|
+
# It is also used as the database name if the database name is not
|
29
|
+
# explicitly defined.
|
26
30
|
option :app_name, default: nil
|
27
31
|
|
28
32
|
# (Deprecated) In MongoDB 4.0 and earlier, set whether to create
|
@@ -70,64 +74,12 @@ module Mongoid
|
|
70
74
|
# existing method.
|
71
75
|
option :scope_overwrite_exception, default: false
|
72
76
|
|
73
|
-
# Use ActiveSupport's time zone in time operations instead of the
|
74
|
-
# Ruby default time zone.
|
75
|
-
# @deprecated
|
76
|
-
option :use_activesupport_time_zone, default: true
|
77
|
-
|
78
77
|
# Return stored times as UTC.
|
79
78
|
option :use_utc, default: false
|
80
79
|
|
81
80
|
# Store BigDecimals as Decimal128s instead of strings in the db.
|
82
81
|
option :map_big_decimal_to_decimal128, default: true
|
83
82
|
|
84
|
-
# Update embedded documents correctly when setting it, unsetting it
|
85
|
-
# and resetting it. See MONGOID-5206 and MONGOID-5240 for more details.
|
86
|
-
option :broken_updates, default: false
|
87
|
-
|
88
|
-
# Maintain legacy behavior of === on Mongoid documents, which returns
|
89
|
-
# true in a number of cases where Ruby's === implementation would
|
90
|
-
# return false.
|
91
|
-
option :legacy_triple_equals, default: false
|
92
|
-
|
93
|
-
# When exiting a nested `with_scope' block, set the current scope to
|
94
|
-
# nil instead of the parent scope for backwards compatibility.
|
95
|
-
option :broken_scoping, default: false
|
96
|
-
|
97
|
-
# Maintain broken behavior of sum over empty result sets for backwards
|
98
|
-
# compatibility.
|
99
|
-
option :broken_aggregables, default: false
|
100
|
-
|
101
|
-
# Ignore aliased fields in embedded documents when performing pluck and
|
102
|
-
# distinct operations, for backwards compatibility.
|
103
|
-
option :broken_alias_handling, default: false
|
104
|
-
|
105
|
-
# Maintain broken `and' behavior when using the same operator on the same
|
106
|
-
# field multiple times for backwards compatibility.
|
107
|
-
option :broken_and, default: false
|
108
|
-
|
109
|
-
# Use millisecond precision when comparing Time objects with the _matches?
|
110
|
-
# function.
|
111
|
-
option :compare_time_by_ms, default: true
|
112
|
-
|
113
|
-
# Use bson-ruby's implementation of as_json for BSON::ObjectId instead of
|
114
|
-
# the one monkey-patched into Mongoid.
|
115
|
-
option :object_id_as_json_oid, default: false
|
116
|
-
|
117
|
-
# Maintain legacy behavior of pluck and distinct, which does not
|
118
|
-
# demongoize the values on returning them.
|
119
|
-
option :legacy_pluck_distinct, default: false
|
120
|
-
|
121
|
-
# Combine chained operators, which use the same field and operator,
|
122
|
-
# using and's instead of overwriting them.
|
123
|
-
option :overwrite_chained_operators, default: false
|
124
|
-
|
125
|
-
# When this flag is true, the attributes method on a document will return
|
126
|
-
# a BSON::Document when that document is retrieved from the database, and
|
127
|
-
# a Hash otherwise. When this flag is false, the attributes method will
|
128
|
-
# always return a Hash.
|
129
|
-
option :legacy_attributes, default: false
|
130
|
-
|
131
83
|
# Allow BSON::Decimal128 to be parsed and returned directly in
|
132
84
|
# field values. When BSON 5 is present and the this option is set to false
|
133
85
|
# (the default), BSON::Decimal128 values in the database will be returned
|
@@ -136,14 +88,14 @@ module Mongoid
|
|
136
88
|
# @note this option only has effect when BSON 5+ is present. Otherwise,
|
137
89
|
# the setting is ignored.
|
138
90
|
option :allow_bson5_decimal128, default: false, on_change: -> (allow) do
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
91
|
+
if BSON::VERSION >= '5.0.0'
|
92
|
+
if allow
|
93
|
+
BSON::Registry.register(BSON::Decimal128::BSON_TYPE, BSON::Decimal128)
|
94
|
+
else
|
95
|
+
BSON::Registry.register(BSON::Decimal128::BSON_TYPE, BigDecimal)
|
96
|
+
end
|
144
97
|
end
|
145
98
|
end
|
146
|
-
end
|
147
99
|
|
148
100
|
# Sets the async_query_executor for the application. By default the thread pool executor
|
149
101
|
# is set to `:immediate. Options are:
|
@@ -166,37 +118,58 @@ module Mongoid
|
|
166
118
|
# deletable/destroyable, but they will be savable/updatable.
|
167
119
|
# When this feature flag is turned on, the read-only state will be reset on
|
168
120
|
# reload, but when it is turned off, it won't be.
|
169
|
-
option :legacy_readonly, default:
|
121
|
+
option :legacy_readonly, default: false
|
122
|
+
|
123
|
+
# When this flag is false (the default as of Mongoid 9.0), a document that
|
124
|
+
# is created or loaded will remember the storage options that were active
|
125
|
+
# when it was loaded, and will use those same options by default when
|
126
|
+
# saving or reloading itself.
|
127
|
+
#
|
128
|
+
# When this flag is true you'll get pre-9.0 behavior, where a document will
|
129
|
+
# not remember the storage options from when it was loaded/created, and
|
130
|
+
# subsequent updates will need to explicitly set up those options each time.
|
131
|
+
#
|
132
|
+
# For example:
|
133
|
+
#
|
134
|
+
# record = Model.with(collection: 'other_collection') { Model.first }
|
135
|
+
#
|
136
|
+
# This will try to load the first document from 'other_collection' and
|
137
|
+
# instantiate it as a Model instance. Pre-9.0, the record object would
|
138
|
+
# not remember that it came from 'other_collection', and attempts to
|
139
|
+
# update it or reload it would fail unless you first remembered to
|
140
|
+
# explicitly specify the collection every time.
|
141
|
+
#
|
142
|
+
# As of Mongoid 9.0, the record will remember that it came from
|
143
|
+
# 'other_collection', and updates and reloads will automatically default
|
144
|
+
# to that collection, for that record object.
|
145
|
+
option :legacy_persistence_context_behavior, default: false
|
170
146
|
|
171
147
|
# When this flag is true, any attempt to change the _id of a persisted
|
172
148
|
# document will raise an exception (`Errors::ImmutableAttribute`).
|
173
|
-
# This
|
174
|
-
#
|
175
|
-
# or it might work, depending on the situation.
|
176
|
-
option :immutable_ids, default:
|
149
|
+
# This is the default in 9.0. Setting this flag to false restores the
|
150
|
+
# pre-9.0 behavior, where changing the _id of a persisted
|
151
|
+
# document might be ignored, or it might work, depending on the situation.
|
152
|
+
option :immutable_ids, default: true
|
177
153
|
|
178
154
|
# When this flag is true, callbacks for every embedded document will be
|
179
155
|
# called only once, even if the embedded document is embedded in multiple
|
180
156
|
# documents in the root document's dependencies graph.
|
181
|
-
# This
|
157
|
+
# This is the default in 9.0. Setting this flag to false restores the
|
182
158
|
# pre-9.0 behavior, where callbacks are called for every occurrence of an
|
183
159
|
# embedded document. The pre-9.0 behavior leads to a problem that for multi
|
184
160
|
# level nested documents callbacks are called multiple times.
|
185
161
|
# See https://jira.mongodb.org/browse/MONGOID-5542
|
186
|
-
option :prevent_multiple_calls_of_embedded_callbacks, default:
|
162
|
+
option :prevent_multiple_calls_of_embedded_callbacks, default: true
|
187
163
|
|
188
|
-
# When this flag is
|
189
|
-
# called. This is the default in
|
190
|
-
#
|
191
|
-
# Setting this flag to true (as it is in 8.x) may lead to stack
|
192
|
-
# overflow errors if there are more than cicrca 1000 embedded
|
193
|
-
# documents in the root document's dependencies graph.
|
194
|
-
#
|
195
|
-
# It is strongly recommended to set this flag to false in 8.x, if you
|
196
|
-
# are not using around callbacks for embedded documents.
|
164
|
+
# When this flag is false, callbacks for embedded documents will not be
|
165
|
+
# called. This is the default in 9.0.
|
197
166
|
#
|
167
|
+
# Setting this flag to true restores the pre-9.0 behavior, where callbacks
|
168
|
+
# for embedded documents are called. This may lead to stack overflow errors
|
169
|
+
# if there are more than cicrca 1000 embedded documents in the root
|
170
|
+
# document's dependencies graph.
|
198
171
|
# See https://jira.mongodb.org/browse/MONGOID-5658 for more details.
|
199
|
-
option :around_callbacks_for_embeds, default:
|
172
|
+
option :around_callbacks_for_embeds, default: false
|
200
173
|
|
201
174
|
# Returns the Config singleton, for use in the configure DSL.
|
202
175
|
#
|
@@ -403,10 +376,14 @@ module Mongoid
|
|
403
376
|
# config.running_with_passenger?
|
404
377
|
#
|
405
378
|
# @return [ true | false ] If the app is deployed on Passenger.
|
379
|
+
#
|
380
|
+
# @deprecated
|
406
381
|
def running_with_passenger?
|
407
382
|
@running_with_passenger ||= defined?(PhusionPassenger)
|
408
383
|
end
|
409
384
|
|
385
|
+
Mongoid.deprecate(self, :running_with_passenger?)
|
386
|
+
|
410
387
|
private
|
411
388
|
|
412
389
|
def set_log_levels
|
@@ -439,18 +416,7 @@ module Mongoid
|
|
439
416
|
end
|
440
417
|
|
441
418
|
module DeprecatedOptions
|
442
|
-
OPTIONS = %i[
|
443
|
-
broken_aggregables
|
444
|
-
broken_alias_handling
|
445
|
-
broken_and
|
446
|
-
broken_scoping
|
447
|
-
broken_updates
|
448
|
-
compare_time_by_ms
|
449
|
-
legacy_attributes
|
450
|
-
legacy_pluck_distinct
|
451
|
-
legacy_triple_equals
|
452
|
-
object_id_as_json_oid
|
453
|
-
overwrite_chained_operators ]
|
419
|
+
OPTIONS = %i[]
|
454
420
|
|
455
421
|
if RUBY_VERSION < '3.0'
|
456
422
|
def self.prepended(klass)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
2
3
|
|
3
4
|
require "mongoid/contextual/aggregable"
|
4
5
|
|
@@ -28,11 +29,7 @@ module Mongoid
|
|
28
29
|
def aggregates(field)
|
29
30
|
result = collection.aggregate(pipeline(field), session: _session).to_a
|
30
31
|
if result.empty?
|
31
|
-
|
32
|
-
{ "count" => 0, "sum" => nil, "avg" => nil, "min" => nil, "max" => nil }
|
33
|
-
else
|
34
|
-
Aggregable::EMPTY_RESULT.dup
|
35
|
-
end
|
32
|
+
Aggregable::EMPTY_RESULT.dup
|
36
33
|
else
|
37
34
|
result.first
|
38
35
|
end
|
@@ -1,7 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
2
3
|
|
3
4
|
module Mongoid
|
4
5
|
module Contextual
|
6
|
+
|
7
|
+
# Mixin module included in Mongoid::Criteria which provides a
|
8
|
+
# direct method interface to MongoDB's Update Operators ($set,
|
9
|
+
# $pull, $inc, etc.) These operators can be applied to update
|
10
|
+
# all documents in the database within the criteria scope,
|
11
|
+
# without loading each document into Mongoid's memory.
|
5
12
|
module Atomic
|
6
13
|
|
7
14
|
# Execute an atomic $addToSet on the matching documents.
|
@@ -52,6 +59,18 @@ module Mongoid
|
|
52
59
|
view.update_many("$inc" => collect_operations(incs))
|
53
60
|
end
|
54
61
|
|
62
|
+
# Perform an atomic $mul operation on the matching documents.
|
63
|
+
#
|
64
|
+
# @example Perform the atomic multiplication.
|
65
|
+
# context.mul(likes: 10)
|
66
|
+
#
|
67
|
+
# @param [ Hash ] factors The operations.
|
68
|
+
#
|
69
|
+
# @return [ nil ] Nil.
|
70
|
+
def mul(factors)
|
71
|
+
view.update_many("$mul" => collect_operations(factors))
|
72
|
+
end
|
73
|
+
|
55
74
|
# Perform an atomic $pop operation on the matching documents.
|
56
75
|
#
|
57
76
|
# @example Pop the first value on the matches.
|
@@ -150,23 +169,72 @@ module Mongoid
|
|
150
169
|
# @example Unset the field on the matches.
|
151
170
|
# context.unset(:name)
|
152
171
|
#
|
153
|
-
# @param [ [ String | Symbol | Array<String | Symbol> | Hash ]... ] *
|
154
|
-
# The name(s) of the field(s) to unset.
|
155
|
-
#
|
156
|
-
#
|
172
|
+
# @param [ [ String | Symbol | Array<String | Symbol> | Hash ]... ] *unsets
|
173
|
+
# The name(s) of the field(s) to unset. If a Hash is specified,
|
174
|
+
# its keys will be used irrespective of value, even if the value
|
175
|
+
# is nil or false.
|
176
|
+
#
|
177
|
+
# @return [ nil ] Nil.
|
178
|
+
def unset(*unsets)
|
179
|
+
view.update_many('$unset' => collect_unset_operations(unsets))
|
180
|
+
end
|
181
|
+
|
182
|
+
# Performs an atomic $min update operation on the given field or fields.
|
183
|
+
# Each field will be set to the minimum of [current_value, given value].
|
184
|
+
# This has the effect of making sure that each field is no
|
185
|
+
# larger than the given value; in other words, the given value is the
|
186
|
+
# effective *maximum* for that field.
|
187
|
+
#
|
188
|
+
# @note Because of the existence of
|
189
|
+
# Mongoid::Contextual::Aggregable::Mongo#min, this method cannot be
|
190
|
+
# named #min, and thus breaks that convention of other similar methods
|
191
|
+
# of being named for the MongoDB operation they perform.
|
192
|
+
#
|
193
|
+
# @example Set "views" to be no more than 100.
|
194
|
+
# context.set_min(views: 100)
|
195
|
+
#
|
196
|
+
# @param [ Hash ] fields The fields with the maximum value that each
|
197
|
+
# may be set to.
|
157
198
|
#
|
158
199
|
# @return [ nil ] Nil.
|
159
|
-
def
|
160
|
-
|
161
|
-
.__find_args__
|
162
|
-
.map { |f| [database_field_name(f), true] }
|
163
|
-
view.update_many("$unset" => Hash[fields])
|
200
|
+
def set_min(fields)
|
201
|
+
view.update_many("$min" => collect_operations(fields))
|
164
202
|
end
|
203
|
+
alias :clamp_upper_bound :set_min
|
204
|
+
|
205
|
+
# Performs an atomic $max update operation on the given field or fields.
|
206
|
+
# Each field will be set to the maximum of [current_value, given value].
|
207
|
+
# This has the effect of making sure that each field is no
|
208
|
+
# smaller than the given value; in other words, the given value is the
|
209
|
+
# effective *minimum* for that field.
|
210
|
+
#
|
211
|
+
# @note Because of the existence of
|
212
|
+
# Mongoid::Contextual::Aggregable::Mongo#max, this method cannot be
|
213
|
+
# named #max, and thus breaks that convention of other similar methods
|
214
|
+
# of being named for the MongoDB operation they perform.
|
215
|
+
#
|
216
|
+
# @example Set "views" to be no less than 100.
|
217
|
+
# context.set_max(views: 100)
|
218
|
+
#
|
219
|
+
# @param [ Hash ] fields The fields with the minimum value that each
|
220
|
+
# may be set to.
|
221
|
+
#
|
222
|
+
# @return [ nil ] Nil.
|
223
|
+
def set_max(fields)
|
224
|
+
view.update_many("$max" => collect_operations(fields))
|
225
|
+
end
|
226
|
+
alias :clamp_lower_bound :set_max
|
165
227
|
|
166
228
|
private
|
167
229
|
|
168
|
-
|
169
|
-
|
230
|
+
# Collects and aggregates operations by field.
|
231
|
+
#
|
232
|
+
# @param [ Array | Hash ] ops The operations to collect.
|
233
|
+
# @param [ Hash ] aggregator The hash to use to aggregate the operations.
|
234
|
+
#
|
235
|
+
# @return [ Hash ] The aggregated operations, by field.
|
236
|
+
def collect_operations(ops, aggregator = {})
|
237
|
+
ops.each_with_object(aggregator) do |(field, value), operations|
|
170
238
|
operations[database_field_name(field)] = value.mongoize
|
171
239
|
end
|
172
240
|
end
|
@@ -176,6 +244,25 @@ module Mongoid
|
|
176
244
|
operations[database_field_name(field)] = { "$each" => Array.wrap(value).mongoize }
|
177
245
|
end
|
178
246
|
end
|
247
|
+
|
248
|
+
# Builds the selector an atomic $unset operation from arguments.
|
249
|
+
#
|
250
|
+
# @example Prepare selector from array.
|
251
|
+
# context.collect_unset_operations([:name, :age])
|
252
|
+
# #=> { "name" => true, "age" => true }
|
253
|
+
#
|
254
|
+
# @example Prepare selector from hash.
|
255
|
+
# context.collect_unset_operations({ name: 1 }, { age: 1 })
|
256
|
+
# #=> { "name" => true, "age" => true }
|
257
|
+
#
|
258
|
+
# @param [ String | Symbol | Array<String | Symbol> | Hash ] ops
|
259
|
+
# The name(s) of the field(s) to unset.
|
260
|
+
#
|
261
|
+
# @return [ Hash ] The selector for the atomic $unset operation.
|
262
|
+
def collect_unset_operations(ops)
|
263
|
+
ops.map { |op| op.is_a?(Hash) ? op.keys : op }.flatten
|
264
|
+
.map { |field| [database_field_name(field), true] }.to_h
|
265
|
+
end
|
179
266
|
end
|
180
267
|
end
|
181
268
|
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
2
3
|
|
3
4
|
module Mongoid
|
4
5
|
module Contextual
|
6
|
+
|
7
|
+
# Represents a mapReduce database command instruction.
|
5
8
|
class MapReduce
|
6
9
|
extend Forwardable
|
7
10
|
include Enumerable
|
@@ -212,6 +215,9 @@ module Mongoid
|
|
212
215
|
}
|
213
216
|
end
|
214
217
|
|
218
|
+
# Returns the selector of the command spec.
|
219
|
+
#
|
220
|
+
# @return [ Hash ] The selector.
|
215
221
|
def command
|
216
222
|
@map_reduce.send(:map_reduce_spec)[:selector]
|
217
223
|
end
|
@@ -1,10 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
2
3
|
|
3
4
|
require "mongoid/contextual/aggregable/memory"
|
4
5
|
require "mongoid/association/eager_loadable"
|
5
6
|
|
6
7
|
module Mongoid
|
7
8
|
module Contextual
|
9
|
+
|
10
|
+
# Context object used for performing bulk query and persistence
|
11
|
+
# operations on documents which have been loaded into application
|
12
|
+
# memory. The method interface of this class is consistent with
|
13
|
+
# Mongoid::Contextual::Mongo.
|
8
14
|
class Memory
|
9
15
|
include Enumerable
|
10
16
|
include Aggregable::Memory
|
@@ -78,11 +84,7 @@ module Mongoid
|
|
78
84
|
#
|
79
85
|
# @return [ Array<Object> ] The distinct values for the field.
|
80
86
|
def distinct(field)
|
81
|
-
|
82
|
-
documents.map{ |doc| doc.send(field) }.uniq
|
83
|
-
else
|
84
|
-
pluck(field).uniq
|
85
|
-
end
|
87
|
+
pluck(field).uniq
|
86
88
|
end
|
87
89
|
|
88
90
|
# Iterate over the context. If provided a block, yield to a Mongoid
|
@@ -156,7 +158,7 @@ module Mongoid
|
|
156
158
|
#
|
157
159
|
# @return [ Document ] The first document.
|
158
160
|
#
|
159
|
-
# @
|
161
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
160
162
|
# documents to take.
|
161
163
|
def first!
|
162
164
|
first || raise_document_not_found_error
|
@@ -217,7 +219,7 @@ module Mongoid
|
|
217
219
|
#
|
218
220
|
# @return [ Document ] The last document.
|
219
221
|
#
|
220
|
-
# @
|
222
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
221
223
|
# documents to take.
|
222
224
|
def last!
|
223
225
|
last || raise_document_not_found_error
|
@@ -256,12 +258,8 @@ module Mongoid
|
|
256
258
|
#
|
257
259
|
# @return [ Array<Object> | Array<Array<Object>> ] The plucked values.
|
258
260
|
def pluck(*fields)
|
259
|
-
|
260
|
-
|
261
|
-
else
|
262
|
-
documents.map do |doc|
|
263
|
-
pluck_from_doc(doc, *fields)
|
264
|
-
end
|
261
|
+
documents.map do |doc|
|
262
|
+
pluck_from_doc(doc, *fields)
|
265
263
|
end
|
266
264
|
end
|
267
265
|
|
@@ -319,7 +317,7 @@ module Mongoid
|
|
319
317
|
#
|
320
318
|
# @return [ Document ] The document.
|
321
319
|
#
|
322
|
-
# @
|
320
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
323
321
|
# documents to take.
|
324
322
|
def take!
|
325
323
|
take || raise_document_not_found_error
|
@@ -380,8 +378,6 @@ module Mongoid
|
|
380
378
|
# @example Get the second document.
|
381
379
|
# context.second
|
382
380
|
#
|
383
|
-
# @param [ Integer ] limit The number of documents to return.
|
384
|
-
#
|
385
381
|
# @return [ Document ] The second document.
|
386
382
|
def second
|
387
383
|
eager_load([documents.second]).first
|
@@ -395,7 +391,7 @@ module Mongoid
|
|
395
391
|
#
|
396
392
|
# @return [ Document ] The second document.
|
397
393
|
#
|
398
|
-
# @
|
394
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
399
395
|
# documents to take.
|
400
396
|
def second!
|
401
397
|
second || raise_document_not_found_error
|
@@ -406,8 +402,6 @@ module Mongoid
|
|
406
402
|
# @example Get the third document.
|
407
403
|
# context.third
|
408
404
|
#
|
409
|
-
# @param [ Integer ] limit The number of documents to return.
|
410
|
-
#
|
411
405
|
# @return [ Document ] The third document.
|
412
406
|
def third
|
413
407
|
eager_load([documents.third]).first
|
@@ -421,7 +415,7 @@ module Mongoid
|
|
421
415
|
#
|
422
416
|
# @return [ Document ] The third document.
|
423
417
|
#
|
424
|
-
# @
|
418
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
425
419
|
# documents to take.
|
426
420
|
def third!
|
427
421
|
third || raise_document_not_found_error
|
@@ -432,8 +426,6 @@ module Mongoid
|
|
432
426
|
# @example Get the fourth document.
|
433
427
|
# context.fourth
|
434
428
|
#
|
435
|
-
# @param [ Integer ] limit The number of documents to return.
|
436
|
-
#
|
437
429
|
# @return [ Document ] The fourth document.
|
438
430
|
def fourth
|
439
431
|
eager_load([documents.fourth]).first
|
@@ -447,7 +439,7 @@ module Mongoid
|
|
447
439
|
#
|
448
440
|
# @return [ Document ] The fourth document.
|
449
441
|
#
|
450
|
-
# @
|
442
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
451
443
|
# documents to take.
|
452
444
|
def fourth!
|
453
445
|
fourth || raise_document_not_found_error
|
@@ -458,8 +450,6 @@ module Mongoid
|
|
458
450
|
# @example Get the fifth document.
|
459
451
|
# context.fifth
|
460
452
|
#
|
461
|
-
# @param [ Integer ] limit The number of documents to return.
|
462
|
-
#
|
463
453
|
# @return [ Document ] The fifth document.
|
464
454
|
def fifth
|
465
455
|
eager_load([documents.fifth]).first
|
@@ -473,7 +463,7 @@ module Mongoid
|
|
473
463
|
#
|
474
464
|
# @return [ Document ] The fifth document.
|
475
465
|
#
|
476
|
-
# @
|
466
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
477
467
|
# documents to take.
|
478
468
|
def fifth!
|
479
469
|
fifth || raise_document_not_found_error
|
@@ -484,8 +474,6 @@ module Mongoid
|
|
484
474
|
# @example Get the second to last document.
|
485
475
|
# context.second_to_last
|
486
476
|
#
|
487
|
-
# @param [ Integer ] limit The number of documents to return.
|
488
|
-
#
|
489
477
|
# @return [ Document ] The second to last document.
|
490
478
|
def second_to_last
|
491
479
|
eager_load([documents.second_to_last]).first
|
@@ -499,7 +487,7 @@ module Mongoid
|
|
499
487
|
#
|
500
488
|
# @return [ Document ] The second to last document.
|
501
489
|
#
|
502
|
-
# @
|
490
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
503
491
|
# documents to take.
|
504
492
|
def second_to_last!
|
505
493
|
second_to_last || raise_document_not_found_error
|
@@ -510,8 +498,6 @@ module Mongoid
|
|
510
498
|
# @example Get the third to last document.
|
511
499
|
# context.third_to_last
|
512
500
|
#
|
513
|
-
# @param [ Integer ] limit The number of documents to return.
|
514
|
-
#
|
515
501
|
# @return [ Document ] The third to last document.
|
516
502
|
def third_to_last
|
517
503
|
eager_load([documents.third_to_last]).first
|
@@ -525,7 +511,7 @@ module Mongoid
|
|
525
511
|
#
|
526
512
|
# @return [ Document ] The third to last document.
|
527
513
|
#
|
528
|
-
# @
|
514
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
529
515
|
# documents to take.
|
530
516
|
def third_to_last!
|
531
517
|
third_to_last || raise_document_not_found_error
|
@@ -641,7 +627,8 @@ module Mongoid
|
|
641
627
|
end
|
642
628
|
end
|
643
629
|
|
644
|
-
# Compare two values,
|
630
|
+
# Compare two values, handling the cases when
|
631
|
+
# either value is nil.
|
645
632
|
#
|
646
633
|
# @api private
|
647
634
|
#
|
@@ -649,15 +636,15 @@ module Mongoid
|
|
649
636
|
# context.compare(a, b)
|
650
637
|
#
|
651
638
|
# @param [ Object ] a The first object.
|
652
|
-
# @param [ Object ] b The
|
639
|
+
# @param [ Object ] b The second object.
|
653
640
|
#
|
654
641
|
# @return [ Integer ] The comparison value.
|
655
642
|
def compare(a, b)
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
643
|
+
return 0 if a.nil? && b.nil?
|
644
|
+
return 1 if a.nil?
|
645
|
+
return -1 if b.nil?
|
646
|
+
|
647
|
+
compare_operand(a) <=> compare_operand(b)
|
661
648
|
end
|
662
649
|
|
663
650
|
# Sort the documents in place.
|
@@ -669,9 +656,8 @@ module Mongoid
|
|
669
656
|
def in_place_sort(values)
|
670
657
|
documents.sort! do |a, b|
|
671
658
|
values.map do |field, direction|
|
672
|
-
|
673
|
-
|
674
|
-
end.find { |value| !value.zero? } || 0
|
659
|
+
direction * compare(a[field], b[field])
|
660
|
+
end.detect { |value| !value.zero? } || 0
|
675
661
|
end
|
676
662
|
end
|
677
663
|
|
@@ -697,6 +683,23 @@ module Mongoid
|
|
697
683
|
@criteria.send(:_session)
|
698
684
|
end
|
699
685
|
|
686
|
+
# Get the operand value to be used in comparison.
|
687
|
+
# Adds capability to sort boolean values.
|
688
|
+
#
|
689
|
+
# @example Get the comparison operand.
|
690
|
+
# compare_operand(true) #=> 1
|
691
|
+
#
|
692
|
+
# @param [ Object ] value The value to be used in comparison.
|
693
|
+
#
|
694
|
+
# @return [ Integer | Object ] The comparison operand.
|
695
|
+
def compare_operand(value)
|
696
|
+
case value
|
697
|
+
when TrueClass then 1
|
698
|
+
when FalseClass then 0
|
699
|
+
else value
|
700
|
+
end
|
701
|
+
end
|
702
|
+
|
700
703
|
# Retrieve the value for the current document at the given field path.
|
701
704
|
#
|
702
705
|
# For example, if I have the following models:
|