mongoid 8.1.13 → 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 +62 -44
- data/lib/config/locales/en.yml +66 -31
- 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 +20 -9
- data/lib/mongoid/association/eager.rb +160 -0
- data/lib/mongoid/association/eager_loadable.rb +15 -7
- data/lib/mongoid/association/embedded/batchable.rb +16 -18
- 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 -205
- 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 +113 -55
- 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 +11 -41
- data/lib/mongoid/association/nested/nested_buildable.rb +32 -14
- 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 +43 -27
- data/lib/mongoid/association/referenced/has_many/proxy.rb +132 -204
- 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 -5
- 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 -153
- data/lib/mongoid/contextual/aggregable/memory.rb +3 -5
- 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 +52 -60
- data/lib/mongoid/contextual/mongo/documents_loader.rb +3 -2
- data/lib/mongoid/contextual/mongo.rb +33 -61
- 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 -12
- 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 -136
- 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 -2
- 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 -169
- 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 +2 -6
- 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 +19 -5
- 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 +33 -8
- data/lib/mongoid/matcher/size.rb +16 -0
- data/lib/mongoid/matcher/type.rb +25 -0
- data/lib/mongoid/matcher.rb +5 -16
- 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 -33
- 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 +3 -5
- 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 -15
- 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 -3
- data/lib/mongoid/version.rb +2 -5
- data/lib/mongoid/warnings.rb +9 -17
- 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 -66
- 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 -41
- data/spec/integration/associations/embeds_one_spec.rb +6 -25
- 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 +3 -17
- 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 +3 -12
- 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/regex.yml +0 -21
- 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 +38 -79
- 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 +1090 -2152
- 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 -0
- 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 +11 -204
- 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 -30
- 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 -91
- 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 +340 -687
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +10 -3
- data/spec/mongoid/contextual/mongo_spec.rb +101 -283
- 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 -5
- 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 -235
- 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 -361
- 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 -458
- 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 +485 -69
- 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 -16
- 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/lib/mrss/docker_runner.rb +1 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +1 -1
- data/spec/shared/lib/mrss/spec_organizer.rb +3 -32
- data/spec/shared/share/Dockerfile.erb +34 -4
- data/spec/shared/shlib/distro.sh +0 -10
- data/spec/shared/shlib/server.sh +27 -33
- data/spec/shared/shlib/set_env.sh +42 -6
- 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 +18 -20
- 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 +127 -57
- 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/in_memory_regexp_timeout.rb +0 -26
- data/lib/mongoid/errors/invalid_session_use.rb +0 -21
- data/lib/mongoid/errors/invalid_storage_parent.rb +0 -27
- data/lib/mongoid/field_readable.rb +0 -70
- data/lib/mongoid/matcher/regexp_budget.rb +0 -389
- data/lib/mongoid/query_cache.rb +0 -68
- data/lib/mongoid/validatable/numericality.rb +0 -19
- data/spec/integration/matcher_regexp_timeout_spec.rb +0 -215
- data/spec/integration/query_operator_guard_spec.rb +0 -89
- data/spec/mongoid/contextual/geo_near_spec.rb +0 -471
- data/spec/mongoid/extensions_spec.rb +0 -43
- data/spec/mongoid/matcher/regexp_budget_spec.rb +0 -570
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -50
- data/spec/mongoid/query_cache_spec.rb +0 -865
- data/spec/shared/CANDIDATE.md +0 -28
- data/spec/shared/lib/mrss/release/candidate.rb +0 -281
- data/spec/shared/lib/mrss/release/product_data.rb +0 -144
- data/spec/shared/lib/tasks/candidate.rake +0 -64
|
@@ -1,18 +1,22 @@
|
|
|
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
|
-
require "mongoid/field_readable"
|
|
6
6
|
|
|
7
7
|
module Mongoid
|
|
8
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.
|
|
9
14
|
class Memory
|
|
10
15
|
include Enumerable
|
|
11
16
|
include Aggregable::Memory
|
|
12
17
|
include Association::EagerLoadable
|
|
13
18
|
include Queryable
|
|
14
19
|
include Positional
|
|
15
|
-
include FieldReadable
|
|
16
20
|
|
|
17
21
|
# @attribute [r] root The root document.
|
|
18
22
|
# @attribute [r] path The atomic path.
|
|
@@ -80,11 +84,7 @@ module Mongoid
|
|
|
80
84
|
#
|
|
81
85
|
# @return [ Array<Object> ] The distinct values for the field.
|
|
82
86
|
def distinct(field)
|
|
83
|
-
|
|
84
|
-
documents.map{ |doc| doc.send(field) }.uniq
|
|
85
|
-
else
|
|
86
|
-
pluck(field).uniq
|
|
87
|
-
end
|
|
87
|
+
pluck(field).uniq
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
# Iterate over the context. If provided a block, yield to a Mongoid
|
|
@@ -158,7 +158,7 @@ module Mongoid
|
|
|
158
158
|
#
|
|
159
159
|
# @return [ Document ] The first document.
|
|
160
160
|
#
|
|
161
|
-
# @
|
|
161
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
162
162
|
# documents to take.
|
|
163
163
|
def first!
|
|
164
164
|
first || raise_document_not_found_error
|
|
@@ -172,20 +172,10 @@ module Mongoid
|
|
|
172
172
|
# @param [ Criteria ] criteria The criteria.
|
|
173
173
|
def initialize(criteria)
|
|
174
174
|
@criteria, @klass = criteria, criteria.klass
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
# the middle of that would leave a half-built client behind.
|
|
180
|
-
if (first = criteria.documents.first)
|
|
181
|
-
@root = first._root
|
|
182
|
-
@collection = @root.collection
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
# One regexp budget covers the whole scan, so that the limit bounds the
|
|
186
|
-
# query rather than each document individually.
|
|
187
|
-
@documents = Matcher::RegexpBudget.open(criteria.selector) do
|
|
188
|
-
criteria.documents.select { |doc| doc._matches?(criteria.selector) }
|
|
175
|
+
@documents = criteria.documents.select do |doc|
|
|
176
|
+
@root ||= doc._root
|
|
177
|
+
@collection ||= root.collection
|
|
178
|
+
doc._matches?(criteria.selector)
|
|
189
179
|
end
|
|
190
180
|
apply_sorting
|
|
191
181
|
apply_options
|
|
@@ -229,7 +219,7 @@ module Mongoid
|
|
|
229
219
|
#
|
|
230
220
|
# @return [ Document ] The last document.
|
|
231
221
|
#
|
|
232
|
-
# @
|
|
222
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
233
223
|
# documents to take.
|
|
234
224
|
def last!
|
|
235
225
|
last || raise_document_not_found_error
|
|
@@ -268,12 +258,8 @@ module Mongoid
|
|
|
268
258
|
#
|
|
269
259
|
# @return [ Array<Object> | Array<Array<Object>> ] The plucked values.
|
|
270
260
|
def pluck(*fields)
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
else
|
|
274
|
-
documents.map do |doc|
|
|
275
|
-
pluck_from_doc(doc, *fields)
|
|
276
|
-
end
|
|
261
|
+
documents.map do |doc|
|
|
262
|
+
pluck_from_doc(doc, *fields)
|
|
277
263
|
end
|
|
278
264
|
end
|
|
279
265
|
|
|
@@ -331,7 +317,7 @@ module Mongoid
|
|
|
331
317
|
#
|
|
332
318
|
# @return [ Document ] The document.
|
|
333
319
|
#
|
|
334
|
-
# @
|
|
320
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
335
321
|
# documents to take.
|
|
336
322
|
def take!
|
|
337
323
|
take || raise_document_not_found_error
|
|
@@ -392,8 +378,6 @@ module Mongoid
|
|
|
392
378
|
# @example Get the second document.
|
|
393
379
|
# context.second
|
|
394
380
|
#
|
|
395
|
-
# @param [ Integer ] limit The number of documents to return.
|
|
396
|
-
#
|
|
397
381
|
# @return [ Document ] The second document.
|
|
398
382
|
def second
|
|
399
383
|
eager_load([documents.second]).first
|
|
@@ -407,7 +391,7 @@ module Mongoid
|
|
|
407
391
|
#
|
|
408
392
|
# @return [ Document ] The second document.
|
|
409
393
|
#
|
|
410
|
-
# @
|
|
394
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
411
395
|
# documents to take.
|
|
412
396
|
def second!
|
|
413
397
|
second || raise_document_not_found_error
|
|
@@ -418,8 +402,6 @@ module Mongoid
|
|
|
418
402
|
# @example Get the third document.
|
|
419
403
|
# context.third
|
|
420
404
|
#
|
|
421
|
-
# @param [ Integer ] limit The number of documents to return.
|
|
422
|
-
#
|
|
423
405
|
# @return [ Document ] The third document.
|
|
424
406
|
def third
|
|
425
407
|
eager_load([documents.third]).first
|
|
@@ -433,7 +415,7 @@ module Mongoid
|
|
|
433
415
|
#
|
|
434
416
|
# @return [ Document ] The third document.
|
|
435
417
|
#
|
|
436
|
-
# @
|
|
418
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
437
419
|
# documents to take.
|
|
438
420
|
def third!
|
|
439
421
|
third || raise_document_not_found_error
|
|
@@ -444,8 +426,6 @@ module Mongoid
|
|
|
444
426
|
# @example Get the fourth document.
|
|
445
427
|
# context.fourth
|
|
446
428
|
#
|
|
447
|
-
# @param [ Integer ] limit The number of documents to return.
|
|
448
|
-
#
|
|
449
429
|
# @return [ Document ] The fourth document.
|
|
450
430
|
def fourth
|
|
451
431
|
eager_load([documents.fourth]).first
|
|
@@ -459,7 +439,7 @@ module Mongoid
|
|
|
459
439
|
#
|
|
460
440
|
# @return [ Document ] The fourth document.
|
|
461
441
|
#
|
|
462
|
-
# @
|
|
442
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
463
443
|
# documents to take.
|
|
464
444
|
def fourth!
|
|
465
445
|
fourth || raise_document_not_found_error
|
|
@@ -470,8 +450,6 @@ module Mongoid
|
|
|
470
450
|
# @example Get the fifth document.
|
|
471
451
|
# context.fifth
|
|
472
452
|
#
|
|
473
|
-
# @param [ Integer ] limit The number of documents to return.
|
|
474
|
-
#
|
|
475
453
|
# @return [ Document ] The fifth document.
|
|
476
454
|
def fifth
|
|
477
455
|
eager_load([documents.fifth]).first
|
|
@@ -485,7 +463,7 @@ module Mongoid
|
|
|
485
463
|
#
|
|
486
464
|
# @return [ Document ] The fifth document.
|
|
487
465
|
#
|
|
488
|
-
# @
|
|
466
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
489
467
|
# documents to take.
|
|
490
468
|
def fifth!
|
|
491
469
|
fifth || raise_document_not_found_error
|
|
@@ -496,8 +474,6 @@ module Mongoid
|
|
|
496
474
|
# @example Get the second to last document.
|
|
497
475
|
# context.second_to_last
|
|
498
476
|
#
|
|
499
|
-
# @param [ Integer ] limit The number of documents to return.
|
|
500
|
-
#
|
|
501
477
|
# @return [ Document ] The second to last document.
|
|
502
478
|
def second_to_last
|
|
503
479
|
eager_load([documents.second_to_last]).first
|
|
@@ -511,7 +487,7 @@ module Mongoid
|
|
|
511
487
|
#
|
|
512
488
|
# @return [ Document ] The second to last document.
|
|
513
489
|
#
|
|
514
|
-
# @
|
|
490
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
515
491
|
# documents to take.
|
|
516
492
|
def second_to_last!
|
|
517
493
|
second_to_last || raise_document_not_found_error
|
|
@@ -522,8 +498,6 @@ module Mongoid
|
|
|
522
498
|
# @example Get the third to last document.
|
|
523
499
|
# context.third_to_last
|
|
524
500
|
#
|
|
525
|
-
# @param [ Integer ] limit The number of documents to return.
|
|
526
|
-
#
|
|
527
501
|
# @return [ Document ] The third to last document.
|
|
528
502
|
def third_to_last
|
|
529
503
|
eager_load([documents.third_to_last]).first
|
|
@@ -537,7 +511,7 @@ module Mongoid
|
|
|
537
511
|
#
|
|
538
512
|
# @return [ Document ] The third to last document.
|
|
539
513
|
#
|
|
540
|
-
# @
|
|
514
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
541
515
|
# documents to take.
|
|
542
516
|
def third_to_last!
|
|
543
517
|
third_to_last || raise_document_not_found_error
|
|
@@ -653,7 +627,8 @@ module Mongoid
|
|
|
653
627
|
end
|
|
654
628
|
end
|
|
655
629
|
|
|
656
|
-
# Compare two values,
|
|
630
|
+
# Compare two values, handling the cases when
|
|
631
|
+
# either value is nil.
|
|
657
632
|
#
|
|
658
633
|
# @api private
|
|
659
634
|
#
|
|
@@ -661,15 +636,15 @@ module Mongoid
|
|
|
661
636
|
# context.compare(a, b)
|
|
662
637
|
#
|
|
663
638
|
# @param [ Object ] a The first object.
|
|
664
|
-
# @param [ Object ] b The
|
|
639
|
+
# @param [ Object ] b The second object.
|
|
665
640
|
#
|
|
666
641
|
# @return [ Integer ] The comparison value.
|
|
667
642
|
def compare(a, b)
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
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)
|
|
673
648
|
end
|
|
674
649
|
|
|
675
650
|
# Sort the documents in place.
|
|
@@ -681,9 +656,8 @@ module Mongoid
|
|
|
681
656
|
def in_place_sort(values)
|
|
682
657
|
documents.sort! do |a, b|
|
|
683
658
|
values.map do |field, direction|
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
end.find { |value| !value.zero? } || 0
|
|
659
|
+
direction * compare(a[field], b[field])
|
|
660
|
+
end.detect { |value| !value.zero? } || 0
|
|
687
661
|
end
|
|
688
662
|
end
|
|
689
663
|
|
|
@@ -709,6 +683,23 @@ module Mongoid
|
|
|
709
683
|
@criteria.send(:_session)
|
|
710
684
|
end
|
|
711
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
|
+
|
|
712
703
|
# Retrieve the value for the current document at the given field path.
|
|
713
704
|
#
|
|
714
705
|
# For example, if I have the following models:
|
|
@@ -742,10 +733,11 @@ module Mongoid
|
|
|
742
733
|
# _translations hash so that we can get the specified translation in
|
|
743
734
|
# the remaining
|
|
744
735
|
if field&.localized?
|
|
745
|
-
document.
|
|
736
|
+
document.send("#{segment}_translations")
|
|
746
737
|
end
|
|
747
738
|
end
|
|
748
|
-
|
|
739
|
+
meth = klass.aliased_associations[segment] || segment
|
|
740
|
+
res.nil? ? document.try(meth) : res
|
|
749
741
|
elsif document.is_a?(Hash)
|
|
750
742
|
# TODO: Remove the indifferent access when implementing MONGOID-5410.
|
|
751
743
|
document.key?(segment.to_s) ?
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
require "mongoid/association/eager_loadable"
|
|
2
3
|
|
|
3
4
|
module Mongoid
|
|
@@ -81,9 +82,9 @@ module Mongoid
|
|
|
81
82
|
# @param [ Class ] klass Mongoid model class to instantiate documents.
|
|
82
83
|
# All records obtained from the database will be converted to an
|
|
83
84
|
# instance of this class, if possible.
|
|
84
|
-
# @param [ Mongoid::Criteria ] criteria
|
|
85
|
+
# @param [ Mongoid::Criteria ] criteria Criteria that specifies which
|
|
85
86
|
# documents should be loaded.
|
|
86
|
-
# @param [ Concurrent::AbstractExecutorService ] executor
|
|
87
|
+
# @param [ Concurrent::AbstractExecutorService ] executor Executor that
|
|
87
88
|
# is capable of running `Concurrent::Promises::Future` instances.
|
|
88
89
|
def initialize(view, klass, criteria, executor: self.class.executor)
|
|
89
90
|
@view = view
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# rubocop:todo all
|
|
2
3
|
|
|
4
|
+
require 'mongoid/atomic_update_preparer'
|
|
3
5
|
require "mongoid/contextual/mongo/documents_loader"
|
|
4
6
|
require "mongoid/contextual/atomic"
|
|
5
7
|
require "mongoid/contextual/aggregable/mongo"
|
|
6
8
|
require "mongoid/contextual/command"
|
|
7
|
-
require "mongoid/contextual/geo_near"
|
|
8
9
|
require "mongoid/contextual/map_reduce"
|
|
9
10
|
require "mongoid/association/eager_loadable"
|
|
10
11
|
|
|
11
12
|
module Mongoid
|
|
12
13
|
module Contextual
|
|
14
|
+
|
|
15
|
+
# Context object used for performing bulk query and persistence
|
|
16
|
+
# operations on documents which are persisted in the database and
|
|
17
|
+
# have not been loaded into application memory.
|
|
13
18
|
class Mongo
|
|
14
19
|
extend Forwardable
|
|
15
20
|
include Enumerable
|
|
@@ -18,8 +23,6 @@ module Mongoid
|
|
|
18
23
|
include Association::EagerLoadable
|
|
19
24
|
include Queryable
|
|
20
25
|
|
|
21
|
-
Mongoid.deprecate(self, :geo_near)
|
|
22
|
-
|
|
23
26
|
# Options constant.
|
|
24
27
|
OPTIONS = [ :hint,
|
|
25
28
|
:limit,
|
|
@@ -73,6 +76,8 @@ module Mongoid
|
|
|
73
76
|
if valid_for_count_documents?
|
|
74
77
|
view.count_documents(options)
|
|
75
78
|
else
|
|
79
|
+
# TODO: Remove this when we remove the deprecated for_js API.
|
|
80
|
+
# https://jira.mongodb.org/browse/MONGOID-5681
|
|
76
81
|
view.count(options)
|
|
77
82
|
end
|
|
78
83
|
end
|
|
@@ -91,7 +96,11 @@ module Mongoid
|
|
|
91
96
|
# @return [ Integer ] The number of matches.
|
|
92
97
|
def estimated_count(options = {})
|
|
93
98
|
unless self.criteria.selector.empty?
|
|
94
|
-
|
|
99
|
+
if klass.default_scoping?
|
|
100
|
+
raise Mongoid::Errors::InvalidEstimatedCountScoping.new(self.klass)
|
|
101
|
+
else
|
|
102
|
+
raise Mongoid::Errors::InvalidEstimatedCountCriteria.new(self.klass)
|
|
103
|
+
end
|
|
95
104
|
end
|
|
96
105
|
view.estimated_document_count(options)
|
|
97
106
|
end
|
|
@@ -131,19 +140,11 @@ module Mongoid
|
|
|
131
140
|
#
|
|
132
141
|
# @return [ Array<Object> ] The distinct values for the field.
|
|
133
142
|
def distinct(field)
|
|
134
|
-
name =
|
|
135
|
-
klass.database_field_name(field)
|
|
136
|
-
else
|
|
137
|
-
klass.cleanse_localized_field_names(field)
|
|
138
|
-
end
|
|
143
|
+
name = klass.cleanse_localized_field_names(field)
|
|
139
144
|
|
|
140
145
|
view.distinct(name).map do |value|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
else
|
|
144
|
-
is_translation = "#{name}_translations" == field.to_s
|
|
145
|
-
recursive_demongoize(name, value, is_translation)
|
|
146
|
-
end
|
|
146
|
+
is_translation = "#{name}_translations" == field.to_s
|
|
147
|
+
recursive_demongoize(name, value, is_translation)
|
|
147
148
|
end
|
|
148
149
|
end
|
|
149
150
|
|
|
@@ -259,29 +260,6 @@ module Mongoid
|
|
|
259
260
|
end
|
|
260
261
|
end
|
|
261
262
|
|
|
262
|
-
# Execute a $geoNear command against the database.
|
|
263
|
-
#
|
|
264
|
-
# @example Find documents close to 10, 10.
|
|
265
|
-
# context.geo_near([ 10, 10 ])
|
|
266
|
-
#
|
|
267
|
-
# @example Find with spherical distance.
|
|
268
|
-
# context.geo_near([ 10, 10 ]).spherical
|
|
269
|
-
#
|
|
270
|
-
# @example Find with a max distance.
|
|
271
|
-
# context.geo_near([ 10, 10 ]).max_distance(0.5)
|
|
272
|
-
#
|
|
273
|
-
# @example Provide a distance multiplier.
|
|
274
|
-
# context.geo_near([ 10, 10 ]).distance_multiplier(1133)
|
|
275
|
-
#
|
|
276
|
-
# @param [ Array<Float> ] coordinates The coordinates.
|
|
277
|
-
#
|
|
278
|
-
# @return [ GeoNear ] The GeoNear command.
|
|
279
|
-
#
|
|
280
|
-
# @deprecated
|
|
281
|
-
def geo_near(coordinates)
|
|
282
|
-
GeoNear.new(collection, criteria, coordinates)
|
|
283
|
-
end
|
|
284
|
-
|
|
285
263
|
# Create the new Mongo context. This delegates operations to the
|
|
286
264
|
# underlying driver.
|
|
287
265
|
#
|
|
@@ -360,22 +338,13 @@ module Mongoid
|
|
|
360
338
|
normalized_select = fields.inject({}) do |hash, f|
|
|
361
339
|
db_fn = klass.database_field_name(f)
|
|
362
340
|
normalized_field_names.push(db_fn)
|
|
363
|
-
|
|
364
|
-
if Mongoid.legacy_pluck_distinct
|
|
365
|
-
hash[db_fn] = true
|
|
366
|
-
else
|
|
367
|
-
hash[klass.cleanse_localized_field_names(f)] = true
|
|
368
|
-
end
|
|
341
|
+
hash[klass.cleanse_localized_field_names(f)] = true
|
|
369
342
|
hash
|
|
370
343
|
end
|
|
371
344
|
|
|
372
345
|
view.projection(normalized_select).reduce([]) do |plucked, doc|
|
|
373
346
|
values = normalized_field_names.map do |n|
|
|
374
|
-
|
|
375
|
-
n.include?('.') ? doc[n.partition('.')[0]] : doc[n]
|
|
376
|
-
else
|
|
377
|
-
extract_value(doc, n)
|
|
378
|
-
end
|
|
347
|
+
extract_value(doc, n)
|
|
379
348
|
end
|
|
380
349
|
plucked << (values.size == 1 ? values.first : values)
|
|
381
350
|
end
|
|
@@ -419,7 +388,7 @@ module Mongoid
|
|
|
419
388
|
#
|
|
420
389
|
# @return [ Document ] The document.
|
|
421
390
|
#
|
|
422
|
-
# @
|
|
391
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
423
392
|
# documents to take.
|
|
424
393
|
def take!
|
|
425
394
|
# Do to_a first so that the Mongo#first method is not used and the
|
|
@@ -601,7 +570,7 @@ module Mongoid
|
|
|
601
570
|
#
|
|
602
571
|
# @return [ Document ] The first document.
|
|
603
572
|
#
|
|
604
|
-
# @
|
|
573
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
605
574
|
# documents available.
|
|
606
575
|
def first!
|
|
607
576
|
first || raise_document_not_found_error
|
|
@@ -643,7 +612,7 @@ module Mongoid
|
|
|
643
612
|
#
|
|
644
613
|
# @return [ Document ] The last document.
|
|
645
614
|
#
|
|
646
|
-
# @
|
|
615
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
647
616
|
# documents available.
|
|
648
617
|
def last!
|
|
649
618
|
last || raise_document_not_found_error
|
|
@@ -667,7 +636,7 @@ module Mongoid
|
|
|
667
636
|
#
|
|
668
637
|
# @return [ Document ] The second document.
|
|
669
638
|
#
|
|
670
|
-
# @
|
|
639
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
671
640
|
# documents available.
|
|
672
641
|
def second!
|
|
673
642
|
second || raise_document_not_found_error
|
|
@@ -691,7 +660,7 @@ module Mongoid
|
|
|
691
660
|
#
|
|
692
661
|
# @return [ Document ] The third document.
|
|
693
662
|
#
|
|
694
|
-
# @
|
|
663
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
695
664
|
# documents available.
|
|
696
665
|
def third!
|
|
697
666
|
third || raise_document_not_found_error
|
|
@@ -715,7 +684,7 @@ module Mongoid
|
|
|
715
684
|
#
|
|
716
685
|
# @return [ Document ] The fourth document.
|
|
717
686
|
#
|
|
718
|
-
# @
|
|
687
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
719
688
|
# documents available.
|
|
720
689
|
def fourth!
|
|
721
690
|
fourth || raise_document_not_found_error
|
|
@@ -739,7 +708,7 @@ module Mongoid
|
|
|
739
708
|
#
|
|
740
709
|
# @return [ Document ] The fifth document.
|
|
741
710
|
#
|
|
742
|
-
# @
|
|
711
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
743
712
|
# documents available.
|
|
744
713
|
def fifth!
|
|
745
714
|
fifth || raise_document_not_found_error
|
|
@@ -765,7 +734,7 @@ module Mongoid
|
|
|
765
734
|
#
|
|
766
735
|
# @return [ Document ] The second to last document.
|
|
767
736
|
#
|
|
768
|
-
# @
|
|
737
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
769
738
|
# documents available.
|
|
770
739
|
def second_to_last!
|
|
771
740
|
second_to_last || raise_document_not_found_error
|
|
@@ -791,7 +760,7 @@ module Mongoid
|
|
|
791
760
|
#
|
|
792
761
|
# @return [ Document ] The third to last document.
|
|
793
762
|
#
|
|
794
|
-
# @
|
|
763
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
795
764
|
# documents available.
|
|
796
765
|
def third_to_last!
|
|
797
766
|
third_to_last || raise_document_not_found_error
|
|
@@ -823,8 +792,8 @@ module Mongoid
|
|
|
823
792
|
# @return [ true | false ] If the update succeeded.
|
|
824
793
|
def update_documents(attributes, method = :update_one, opts = {})
|
|
825
794
|
return false unless attributes
|
|
826
|
-
|
|
827
|
-
view.send(method,
|
|
795
|
+
|
|
796
|
+
view.send(method, AtomicUpdatePreparer.prepare(attributes, klass), opts)
|
|
828
797
|
end
|
|
829
798
|
|
|
830
799
|
# Apply the field limitations.
|
|
@@ -1057,6 +1026,9 @@ module Mongoid
|
|
|
1057
1026
|
#
|
|
1058
1027
|
# @return [ true | false ] whether or not the current context
|
|
1059
1028
|
# excludes a `$where` operator.
|
|
1029
|
+
#
|
|
1030
|
+
# TODO: Remove this method when we remove the deprecated for_js API.
|
|
1031
|
+
# https://jira.mongodb.org/browse/MONGOID-5681
|
|
1060
1032
|
def valid_for_count_documents?(hash = view.filter)
|
|
1061
1033
|
# Note that `view.filter` is a BSON::Document, and all keys in a
|
|
1062
1034
|
# BSON::Document are strings; we don't need to worry about symbol
|
|
@@ -1091,7 +1063,7 @@ module Mongoid
|
|
|
1091
1063
|
end
|
|
1092
1064
|
|
|
1093
1065
|
def retrieve_nth_to_last_with_limit(n, limit)
|
|
1094
|
-
v = view.sort(inverse_sorting).limit(limit || 1)
|
|
1066
|
+
v = view.sort(inverse_sorting).skip(n).limit(limit || 1)
|
|
1095
1067
|
v = v.skip(n) if n > 0
|
|
1096
1068
|
raw_docs = v.to_a.reverse
|
|
1097
1069
|
process_raw_docs(raw_docs, limit)
|
|
@@ -1,38 +1,21 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# rubocop:todo all
|
|
2
3
|
|
|
3
4
|
require "mongoid/contextual/aggregable/none"
|
|
4
5
|
|
|
5
6
|
module Mongoid
|
|
6
7
|
module Contextual
|
|
8
|
+
|
|
9
|
+
# Context object used for performing bulk query and persistence
|
|
10
|
+
# operations on a null set. The method interface of this class
|
|
11
|
+
# is consistent with Mongoid::Contextual::Mongo.
|
|
7
12
|
class None
|
|
8
13
|
include Enumerable
|
|
9
|
-
alias :old_sum :sum
|
|
10
|
-
|
|
11
14
|
include Aggregable::None
|
|
12
15
|
include Queryable
|
|
13
16
|
|
|
14
17
|
attr_reader :criteria, :klass
|
|
15
18
|
|
|
16
|
-
alias :new_sum :sum
|
|
17
|
-
|
|
18
|
-
# Get the sum in the null context.
|
|
19
|
-
#
|
|
20
|
-
# @example Get the sum of null context.
|
|
21
|
-
# context.sum(_field)
|
|
22
|
-
#
|
|
23
|
-
# @param [ Symbol ] _field The field to sum.
|
|
24
|
-
#
|
|
25
|
-
# @return [ Integer | Symbol ] If Mongoid.broken_aggregables is
|
|
26
|
-
# set to false, this will always be zero. Otherwise, it will return the
|
|
27
|
-
# field name as a symbol.
|
|
28
|
-
def sum(_field = nil)
|
|
29
|
-
if Mongoid.broken_aggregables
|
|
30
|
-
old_sum(_field)
|
|
31
|
-
else
|
|
32
|
-
new_sum(_field)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
19
|
# Check if the context is equal to the other object.
|
|
37
20
|
#
|
|
38
21
|
# @example Check equality.
|
|
@@ -155,7 +138,7 @@ module Mongoid
|
|
|
155
138
|
# @example Get the first document in null context.
|
|
156
139
|
# context.first!
|
|
157
140
|
#
|
|
158
|
-
# @
|
|
141
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
|
|
159
142
|
def first!
|
|
160
143
|
raise_document_not_found_error
|
|
161
144
|
end
|
|
@@ -177,7 +160,7 @@ module Mongoid
|
|
|
177
160
|
# @example Get the last document in null context.
|
|
178
161
|
# context.last!
|
|
179
162
|
#
|
|
180
|
-
# @
|
|
163
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
|
|
181
164
|
def last!
|
|
182
165
|
raise_document_not_found_error
|
|
183
166
|
end
|
|
@@ -199,7 +182,7 @@ module Mongoid
|
|
|
199
182
|
# @example Take a document in null context.
|
|
200
183
|
# context.take!
|
|
201
184
|
#
|
|
202
|
-
# @
|
|
185
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
|
|
203
186
|
def take!
|
|
204
187
|
raise_document_not_found_error
|
|
205
188
|
end
|
|
@@ -219,7 +202,7 @@ module Mongoid
|
|
|
219
202
|
# @example Get the second document in null context.
|
|
220
203
|
# context.second!
|
|
221
204
|
#
|
|
222
|
-
# @
|
|
205
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
|
|
223
206
|
def second!
|
|
224
207
|
raise_document_not_found_error
|
|
225
208
|
end
|
|
@@ -239,7 +222,7 @@ module Mongoid
|
|
|
239
222
|
# @example Get the third document in null context.
|
|
240
223
|
# context.third!
|
|
241
224
|
#
|
|
242
|
-
# @
|
|
225
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
|
|
243
226
|
def third!
|
|
244
227
|
raise_document_not_found_error
|
|
245
228
|
end
|
|
@@ -259,7 +242,7 @@ module Mongoid
|
|
|
259
242
|
# @example Get the fourth document in null context.
|
|
260
243
|
# context.fourth!
|
|
261
244
|
#
|
|
262
|
-
# @
|
|
245
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
|
|
263
246
|
def fourth!
|
|
264
247
|
raise_document_not_found_error
|
|
265
248
|
end
|
|
@@ -279,7 +262,7 @@ module Mongoid
|
|
|
279
262
|
# @example Get the fifth document in null context.
|
|
280
263
|
# context.fifth!
|
|
281
264
|
#
|
|
282
|
-
# @
|
|
265
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
|
|
283
266
|
def fifth!
|
|
284
267
|
raise_document_not_found_error
|
|
285
268
|
end
|
|
@@ -299,7 +282,7 @@ module Mongoid
|
|
|
299
282
|
# @example Get the second to last document in null context.
|
|
300
283
|
# context.second_to_last!
|
|
301
284
|
#
|
|
302
|
-
# @
|
|
285
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
|
|
303
286
|
def second_to_last!
|
|
304
287
|
raise_document_not_found_error
|
|
305
288
|
end
|
|
@@ -319,7 +302,7 @@ module Mongoid
|
|
|
319
302
|
# @example Get the third to last document in null context.
|
|
320
303
|
# context.third_to_last!
|
|
321
304
|
#
|
|
322
|
-
# @
|
|
305
|
+
# @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
|
|
323
306
|
def third_to_last!
|
|
324
307
|
raise_document_not_found_error
|
|
325
308
|
end
|
|
@@ -331,7 +314,7 @@ module Mongoid
|
|
|
331
314
|
#
|
|
332
315
|
# @return [ Integer ] Always zero.
|
|
333
316
|
def length
|
|
334
|
-
|
|
317
|
+
entries.length
|
|
335
318
|
end
|
|
336
319
|
alias :size :length
|
|
337
320
|
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# rubocop:todo all
|
|
2
3
|
|
|
3
4
|
module Mongoid
|
|
4
5
|
module Contextual
|
|
6
|
+
|
|
7
|
+
# Mixin module which adds methods to Mongoid::Criteria that
|
|
8
|
+
# indicate the criteria query result will be an empty set.
|
|
5
9
|
module Queryable
|
|
6
10
|
|
|
7
11
|
# @attribute [r] collection The collection to query against.
|