mongoid 7.3.5 → 7.5.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 +0 -0
- data/CHANGELOG.md +17 -17
- data/README.md +3 -3
- data/lib/config/locales/en.yml +28 -20
- data/lib/mongoid/association/accessors.rb +0 -27
- data/lib/mongoid/association/bindable.rb +0 -21
- data/lib/mongoid/association/builders.rb +0 -9
- data/lib/mongoid/association/constrainable.rb +0 -3
- data/lib/mongoid/association/depending.rb +0 -7
- data/lib/mongoid/association/eager_loadable.rb +0 -3
- data/lib/mongoid/association/embedded/batchable.rb +12 -59
- data/lib/mongoid/association/embedded/cyclic.rb +2 -11
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +0 -3
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +0 -13
- data/lib/mongoid/association/embedded/embedded_in.rb +0 -23
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +0 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +31 -44
- data/lib/mongoid/association/embedded/embeds_many.rb +0 -31
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +0 -3
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +26 -14
- data/lib/mongoid/association/embedded/embeds_one.rb +0 -27
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +26 -5
- data/lib/mongoid/association/many.rb +0 -17
- data/lib/mongoid/association/marshalable.rb +0 -5
- data/lib/mongoid/association/nested/many.rb +0 -11
- data/lib/mongoid/association/nested/nested_buildable.rb +0 -9
- data/lib/mongoid/association/nested/one.rb +1 -16
- data/lib/mongoid/association/nested.rb +0 -3
- data/lib/mongoid/association/one.rb +1 -10
- data/lib/mongoid/association/options.rb +0 -33
- data/lib/mongoid/association/proxy.rb +0 -21
- data/lib/mongoid/association/referenced/auto_save.rb +0 -9
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +0 -7
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +4 -5
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +0 -13
- data/lib/mongoid/association/referenced/belongs_to.rb +9 -34
- data/lib/mongoid/association/referenced/counter_cache.rb +2 -15
- data/lib/mongoid/association/referenced/eager.rb +3 -24
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +12 -39
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +11 -38
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -64
- data/lib/mongoid/association/referenced/has_many/proxy.rb +20 -63
- data/lib/mongoid/association/referenced/has_many.rb +12 -39
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +3 -4
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -15
- data/lib/mongoid/association/referenced/has_one/proxy.rb +0 -9
- data/lib/mongoid/association/referenced/has_one.rb +9 -32
- data/lib/mongoid/association/referenced/syncable.rb +0 -17
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +0 -1
- data/lib/mongoid/association/relatable.rb +0 -61
- data/lib/mongoid/association.rb +0 -17
- data/lib/mongoid/atomic/modifiers.rb +4 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +0 -24
- data/lib/mongoid/atomic/paths/embedded/one.rb +0 -5
- data/lib/mongoid/atomic/paths/embedded.rb +0 -3
- data/lib/mongoid/atomic/paths/root.rb +0 -5
- data/lib/mongoid/atomic/paths.rb +0 -1
- data/lib/mongoid/atomic.rb +1 -42
- data/lib/mongoid/attributes/dynamic.rb +0 -17
- data/lib/mongoid/attributes/nested.rb +0 -5
- data/lib/mongoid/attributes/processing.rb +1 -18
- data/lib/mongoid/attributes/projector.rb +0 -1
- data/lib/mongoid/attributes/readonly.rb +0 -5
- data/lib/mongoid/attributes.rb +0 -33
- data/lib/mongoid/cacheable.rb +1 -6
- data/lib/mongoid/changeable.rb +3 -59
- data/lib/mongoid/clients/factory.rb +0 -7
- data/lib/mongoid/clients/options.rb +0 -5
- data/lib/mongoid/clients/sessions.rb +0 -7
- data/lib/mongoid/clients/storage_options.rb +0 -7
- data/lib/mongoid/clients/validators/storage.rb +0 -9
- data/lib/mongoid/clients/validators.rb +0 -1
- data/lib/mongoid/clients.rb +0 -9
- data/lib/mongoid/composable.rb +0 -7
- data/lib/mongoid/config/environment.rb +21 -6
- data/lib/mongoid/config/options.rb +0 -11
- data/lib/mongoid/config/validators/client.rb +0 -17
- data/lib/mongoid/config/validators/option.rb +0 -3
- data/lib/mongoid/config/validators.rb +0 -1
- data/lib/mongoid/config.rb +43 -30
- data/lib/mongoid/contextual/aggregable/memory.rb +14 -11
- data/lib/mongoid/contextual/aggregable/mongo.rb +15 -20
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +0 -25
- data/lib/mongoid/contextual/command.rb +0 -5
- data/lib/mongoid/contextual/geo_near.rb +1 -34
- data/lib/mongoid/contextual/map_reduce.rb +0 -31
- data/lib/mongoid/contextual/memory.rb +147 -70
- data/lib/mongoid/contextual/mongo.rb +249 -103
- data/lib/mongoid/contextual/none.rb +83 -28
- data/lib/mongoid/contextual/queryable.rb +0 -3
- data/lib/mongoid/contextual.rb +0 -5
- data/lib/mongoid/copyable.rb +0 -5
- data/lib/mongoid/criteria/findable.rb +0 -13
- data/lib/mongoid/criteria/includable.rb +0 -9
- data/lib/mongoid/criteria/inspectable.rb +0 -3
- data/lib/mongoid/criteria/marshalable.rb +0 -5
- data/lib/mongoid/criteria/modifiable.rb +0 -19
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +0 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +0 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -1
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -25
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +0 -3
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +0 -3
- data/lib/mongoid/criteria/queryable/extensions/date.rb +0 -7
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +0 -5
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -24
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +0 -11
- data/lib/mongoid/criteria/queryable/extensions/object.rb +1 -28
- data/lib/mongoid/criteria/queryable/extensions/range.rb +38 -16
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +0 -9
- data/lib/mongoid/criteria/queryable/extensions/set.rb +0 -3
- data/lib/mongoid/criteria/queryable/extensions/string.rb +0 -17
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +0 -9
- data/lib/mongoid/criteria/queryable/extensions/time.rb +0 -7
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +0 -7
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -1
- data/lib/mongoid/criteria/queryable/key.rb +1 -14
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +22 -30
- data/lib/mongoid/criteria/queryable/optional.rb +0 -45
- data/lib/mongoid/criteria/queryable/options.rb +0 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +0 -13
- data/lib/mongoid/criteria/queryable/selectable.rb +45 -76
- data/lib/mongoid/criteria/queryable/selector.rb +0 -17
- data/lib/mongoid/criteria/queryable/smash.rb +0 -11
- data/lib/mongoid/criteria/queryable/storable.rb +6 -2
- data/lib/mongoid/criteria/queryable.rb +0 -7
- data/lib/mongoid/criteria/scopable.rb +25 -19
- data/lib/mongoid/criteria.rb +2 -57
- data/lib/mongoid/document.rb +1 -50
- data/lib/mongoid/equality.rb +26 -10
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/callback.rb +0 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
- data/lib/mongoid/errors/delete_restriction.rb +0 -3
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
- data/lib/mongoid/errors/document_not_found.rb +23 -15
- data/lib/mongoid/errors/eager_load.rb +0 -3
- data/lib/mongoid/errors/empty_config_file.rb +0 -1
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -3
- data/lib/mongoid/errors/invalid_collection.rb +0 -1
- data/lib/mongoid/errors/invalid_config_file.rb +0 -1
- data/lib/mongoid/errors/invalid_config_option.rb +0 -3
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +0 -3
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +0 -1
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +0 -1
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +0 -1
- data/lib/mongoid/errors/invalid_expression_operator.rb +0 -1
- data/lib/mongoid/errors/invalid_field.rb +0 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +0 -1
- data/lib/mongoid/errors/invalid_field_option.rb +0 -3
- data/lib/mongoid/errors/invalid_find.rb +0 -3
- data/lib/mongoid/errors/invalid_includes.rb +0 -3
- data/lib/mongoid/errors/invalid_index.rb +0 -3
- data/lib/mongoid/errors/invalid_options.rb +0 -3
- data/lib/mongoid/errors/invalid_path.rb +0 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +0 -5
- data/lib/mongoid/errors/invalid_query.rb +0 -1
- data/lib/mongoid/errors/invalid_relation.rb +0 -7
- data/lib/mongoid/errors/invalid_relation_option.rb +0 -3
- data/lib/mongoid/errors/invalid_scope.rb +0 -3
- data/lib/mongoid/errors/invalid_session_use.rb +1 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +0 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +0 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +0 -3
- data/lib/mongoid/errors/invalid_time.rb +0 -3
- data/lib/mongoid/errors/invalid_value.rb +0 -1
- data/lib/mongoid/errors/inverse_not_found.rb +0 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +0 -3
- data/lib/mongoid/errors/mixed_relations.rb +0 -3
- data/lib/mongoid/errors/mongoid_error.rb +0 -9
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +0 -3
- data/lib/mongoid/errors/no_client_config.rb +0 -3
- data/lib/mongoid/errors/no_client_database.rb +0 -3
- data/lib/mongoid/errors/no_client_hosts.rb +0 -3
- data/lib/mongoid/errors/no_clients_config.rb +0 -3
- data/lib/mongoid/errors/no_default_client.rb +0 -3
- data/lib/mongoid/errors/no_environment.rb +0 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +0 -3
- data/lib/mongoid/errors/no_metadata.rb +0 -3
- data/lib/mongoid/errors/no_parent.rb +0 -3
- data/lib/mongoid/errors/readonly_attribute.rb +0 -3
- data/lib/mongoid/errors/readonly_document.rb +1 -6
- data/lib/mongoid/errors/scope_overwrite.rb +0 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +0 -1
- data/lib/mongoid/errors/unknown_attribute.rb +0 -3
- data/lib/mongoid/errors/unknown_model.rb +0 -3
- data/lib/mongoid/errors/unsaved_document.rb +1 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +0 -3
- data/lib/mongoid/errors/validations.rb +0 -1
- data/lib/mongoid/errors.rb +0 -1
- data/lib/mongoid/evolvable.rb +0 -3
- data/lib/mongoid/extensions/array.rb +3 -29
- data/lib/mongoid/extensions/big_decimal.rb +0 -11
- data/lib/mongoid/extensions/boolean.rb +0 -3
- data/lib/mongoid/extensions/date.rb +0 -9
- data/lib/mongoid/extensions/date_time.rb +0 -9
- data/lib/mongoid/extensions/decimal128.rb +0 -5
- data/lib/mongoid/extensions/false_class.rb +1 -6
- data/lib/mongoid/extensions/float.rb +0 -7
- data/lib/mongoid/extensions/hash.rb +0 -27
- data/lib/mongoid/extensions/integer.rb +0 -9
- data/lib/mongoid/extensions/module.rb +0 -3
- data/lib/mongoid/extensions/nil_class.rb +0 -5
- data/lib/mongoid/extensions/object.rb +1 -40
- data/lib/mongoid/extensions/object_id.rb +0 -7
- data/lib/mongoid/extensions/range.rb +0 -11
- data/lib/mongoid/extensions/regexp.rb +0 -3
- data/lib/mongoid/extensions/set.rb +0 -7
- data/lib/mongoid/extensions/string.rb +1 -30
- data/lib/mongoid/extensions/symbol.rb +0 -7
- data/lib/mongoid/extensions/time.rb +0 -11
- data/lib/mongoid/extensions/time_with_zone.rb +13 -9
- data/lib/mongoid/extensions/true_class.rb +1 -6
- data/lib/mongoid/extensions.rb +15 -3
- data/lib/mongoid/factory.rb +1 -2
- data/lib/mongoid/fields/foreign_key.rb +0 -21
- data/lib/mongoid/fields/localized.rb +0 -11
- data/lib/mongoid/fields/standard.rb +0 -33
- data/lib/mongoid/fields/validators/macro.rb +0 -9
- data/lib/mongoid/fields/validators.rb +0 -1
- data/lib/mongoid/fields.rb +191 -60
- data/lib/mongoid/findable.rb +20 -10
- data/lib/mongoid/indexable/specification.rb +0 -15
- data/lib/mongoid/indexable/validators/options.rb +0 -7
- data/lib/mongoid/indexable.rb +1 -18
- data/lib/mongoid/inspectable.rb +1 -10
- data/lib/mongoid/interceptable.rb +0 -25
- data/lib/mongoid/loggable.rb +0 -9
- data/lib/mongoid/matchable.rb +0 -5
- data/lib/mongoid/matcher/eq_impl.rb +37 -2
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +6 -1
- data/lib/mongoid/persistable/creatable.rb +1 -20
- data/lib/mongoid/persistable/deletable.rb +0 -17
- data/lib/mongoid/persistable/destroyable.rb +0 -7
- data/lib/mongoid/persistable/incrementable.rb +0 -5
- data/lib/mongoid/persistable/logical.rb +0 -5
- data/lib/mongoid/persistable/poppable.rb +0 -5
- data/lib/mongoid/persistable/pullable.rb +0 -7
- data/lib/mongoid/persistable/pushable.rb +0 -7
- data/lib/mongoid/persistable/renamable.rb +0 -5
- data/lib/mongoid/persistable/savable.rb +0 -7
- data/lib/mongoid/persistable/settable.rb +0 -5
- data/lib/mongoid/persistable/unsettable.rb +0 -5
- data/lib/mongoid/persistable/updatable.rb +2 -17
- data/lib/mongoid/persistable/upsertable.rb +0 -7
- data/lib/mongoid/persistable.rb +0 -23
- data/lib/mongoid/persistence_context.rb +0 -27
- data/lib/mongoid/positional.rb +0 -5
- data/lib/mongoid/query_cache.rb +0 -33
- data/lib/mongoid/railtie.rb +0 -15
- data/lib/mongoid/railties/controller_runtime.rb +0 -1
- data/lib/mongoid/reloadable.rb +4 -16
- data/lib/mongoid/scopable.rb +6 -34
- data/lib/mongoid/selectable.rb +0 -9
- data/lib/mongoid/serializable.rb +0 -15
- data/lib/mongoid/shardable.rb +0 -7
- data/lib/mongoid/stateful.rb +0 -9
- data/lib/mongoid/stringified_symbol.rb +2 -3
- data/lib/mongoid/tasks/database.rb +0 -5
- data/lib/mongoid/threaded/lifecycle.rb +0 -21
- data/lib/mongoid/threaded.rb +0 -55
- data/lib/mongoid/timestamps/created/short.rb +0 -1
- data/lib/mongoid/timestamps/created.rb +0 -1
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +0 -7
- data/lib/mongoid/timestamps/updated/short.rb +0 -1
- data/lib/mongoid/timestamps/updated.rb +0 -3
- data/lib/mongoid/timestamps.rb +0 -1
- data/lib/mongoid/touchable.rb +0 -7
- data/lib/mongoid/traversable.rb +67 -53
- data/lib/mongoid/validatable/associated.rb +0 -3
- data/lib/mongoid/validatable/format.rb +0 -1
- data/lib/mongoid/validatable/length.rb +0 -1
- data/lib/mongoid/validatable/localizable.rb +0 -3
- data/lib/mongoid/validatable/macros.rb +0 -7
- data/lib/mongoid/validatable/presence.rb +1 -8
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +15 -30
- data/lib/mongoid/validatable.rb +1 -22
- data/lib/mongoid/version.rb +1 -2
- data/lib/mongoid/warnings.rb +29 -0
- data/lib/mongoid.rb +1 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +0 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -3
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid_generator.rb +0 -1
- data/lib/rails/mongoid.rb +0 -3
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +20 -15
- data/spec/integration/associations/belongs_to_spec.rb +0 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +0 -1
- data/spec/integration/associations/embeds_many_spec.rb +0 -1
- data/spec/integration/associations/embeds_one_spec.rb +0 -1
- data/spec/integration/associations/foreign_key_spec.rb +0 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
- data/spec/integration/associations/has_many_spec.rb +0 -1
- data/spec/integration/associations/has_one_spec.rb +0 -1
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +0 -1
- data/spec/integration/associations/reverse_population_spec.rb +0 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +0 -1
- data/spec/integration/bson_regexp_raw_spec.rb +0 -1
- data/spec/integration/callbacks_models.rb +12 -0
- data/spec/integration/callbacks_spec.rb +18 -6
- data/spec/integration/contextual/empty_spec.rb +0 -1
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +0 -1
- data/spec/integration/criteria/default_scope_spec.rb +51 -0
- data/spec/integration/criteria/logical_spec.rb +30 -0
- data/spec/integration/criteria/range_spec.rb +265 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +0 -1
- data/spec/integration/discriminator_value_spec.rb +0 -1
- data/spec/integration/document_spec.rb +0 -1
- data/spec/integration/i18n_fallbacks_spec.rb +15 -2
- data/spec/integration/matcher_examples_spec.rb +0 -1
- data/spec/integration/matcher_operator_spec.rb +27 -3
- data/spec/integration/matcher_spec.rb +95 -1
- data/spec/integration/server_query_spec.rb +0 -1
- data/spec/integration/shardable_spec.rb +0 -1
- data/spec/integration/stringified_symbol_field_spec.rb +14 -1
- data/spec/lite_spec_helper.rb +1 -2
- data/spec/mongoid/association/accessors_spec.rb +44 -15
- data/spec/mongoid/association/auto_save_spec.rb +72 -34
- data/spec/mongoid/association/builders_spec.rb +1 -2
- data/spec/mongoid/association/constrainable_spec.rb +0 -1
- data/spec/mongoid/association/counter_cache_spec.rb +32 -33
- data/spec/mongoid/association/depending_spec.rb +12 -13
- data/spec/mongoid/association/eager_spec.rb +4 -5
- data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +13 -14
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +384 -156
- data/spec/mongoid/association/embedded/embeds_many_models.rb +0 -122
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +21 -22
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +0 -1
- data/spec/mongoid/association/macros_spec.rb +9 -10
- data/spec/mongoid/association/nested/many_spec.rb +0 -1
- data/spec/mongoid/association/nested/one_spec.rb +0 -1
- data/spec/mongoid/association/options_spec.rb +0 -1
- data/spec/mongoid/association/polymorphic_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +55 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +57 -53
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +22 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +179 -162
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +18 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +21 -1
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +21 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +113 -33
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +225 -178
- data/spec/mongoid/association/referenced/has_many_models.rb +18 -1
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +21 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +51 -8
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +26 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +18 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one_spec.rb +21 -1
- data/spec/mongoid/association/reflections_spec.rb +0 -1
- data/spec/mongoid/association/syncable_spec.rb +31 -32
- data/spec/mongoid/association_spec.rb +0 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
- data/spec/mongoid/atomic/paths_spec.rb +0 -1
- data/spec/mongoid/atomic_spec.rb +28 -7
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +66 -67
- data/spec/mongoid/attributes/projector_spec.rb +5 -2
- data/spec/mongoid/attributes/readonly_spec.rb +22 -23
- data/spec/mongoid/attributes_spec.rb +32 -33
- data/spec/mongoid/cacheable_spec.rb +1 -2
- data/spec/mongoid/changeable_spec.rb +35 -36
- data/spec/mongoid/clients/factory_spec.rb +11 -13
- data/spec/mongoid/clients/options_spec.rb +5 -5
- data/spec/mongoid/clients/sessions_spec.rb +22 -23
- data/spec/mongoid/clients/transactions_spec.rb +49 -27
- data/spec/mongoid/clients_spec.rb +6 -7
- data/spec/mongoid/composable_spec.rb +0 -1
- data/spec/mongoid/config/environment_spec.rb +39 -2
- data/spec/mongoid/config/options_spec.rb +0 -1
- data/spec/mongoid/config_spec.rb +154 -4
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +51 -12
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +120 -21
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +46 -47
- data/spec/mongoid/contextual/geo_near_spec.rb +17 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -3
- data/spec/mongoid/contextual/memory_spec.rb +849 -89
- data/spec/mongoid/contextual/mongo_spec.rb +1185 -160
- data/spec/mongoid/contextual/none_spec.rb +43 -72
- data/spec/mongoid/copyable_spec.rb +12 -13
- data/spec/mongoid/copyable_spec_models.rb +0 -1
- data/spec/mongoid/criteria/findable_spec.rb +23 -24
- data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +0 -1
- data/spec/mongoid/criteria/modifiable_spec.rb +36 -37
- data/spec/mongoid/criteria/options_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/options_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +0 -1
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +227 -55
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/selector_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
- data/spec/mongoid/criteria/scopable_spec.rb +127 -1
- data/spec/mongoid/criteria_projection_spec.rb +3 -4
- data/spec/mongoid/criteria_spec.rb +523 -187
- data/spec/mongoid/document_fields_spec.rb +0 -1
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +0 -1
- data/spec/mongoid/document_spec.rb +11 -33
- data/spec/mongoid/equality_spec.rb +142 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
- data/spec/mongoid/errors/callback_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +49 -1
- data/spec/mongoid/errors/eager_load_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +1 -2
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_database_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_hosts_spec.rb +0 -1
- data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_environment_spec.rb +0 -1
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
- data/spec/mongoid/errors/no_parent_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +0 -1
- data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +0 -1
- data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
- data/spec/mongoid/errors/validations_spec.rb +0 -1
- data/spec/mongoid/extensions/array_spec.rb +0 -1
- data/spec/mongoid/extensions/big_decimal_spec.rb +0 -1
- data/spec/mongoid/extensions/binary_spec.rb +0 -1
- data/spec/mongoid/extensions/boolean_spec.rb +0 -1
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +0 -1
- data/spec/mongoid/extensions/date_spec.rb +0 -1
- data/spec/mongoid/extensions/date_time_spec.rb +0 -1
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
- data/spec/mongoid/extensions/false_class_spec.rb +0 -1
- data/spec/mongoid/extensions/float_spec.rb +0 -1
- data/spec/mongoid/extensions/hash_spec.rb +0 -1
- data/spec/mongoid/extensions/integer_spec.rb +0 -1
- data/spec/mongoid/extensions/module_spec.rb +0 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/extensions/object_id_spec.rb +0 -1
- data/spec/mongoid/extensions/object_spec.rb +0 -1
- data/spec/mongoid/extensions/range_spec.rb +0 -1
- data/spec/mongoid/extensions/regexp_spec.rb +0 -1
- data/spec/mongoid/extensions/set_spec.rb +0 -1
- data/spec/mongoid/extensions/string_spec.rb +2 -3
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +0 -1
- data/spec/mongoid/extensions/symbol_spec.rb +0 -1
- data/spec/mongoid/extensions/time_spec.rb +0 -1
- data/spec/mongoid/extensions/time_with_zone_spec.rb +0 -1
- data/spec/mongoid/extensions/true_class_spec.rb +0 -1
- data/spec/mongoid/extensions_spec.rb +14 -3
- data/spec/mongoid/factory_spec.rb +1 -1
- data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
- data/spec/mongoid/fields/localized_spec.rb +0 -1
- data/spec/mongoid/fields/standard_spec.rb +0 -1
- data/spec/mongoid/fields_spec.rb +326 -31
- data/spec/mongoid/findable_spec.rb +51 -22
- data/spec/mongoid/indexable/specification_spec.rb +0 -1
- data/spec/mongoid/indexable_spec.rb +0 -1
- data/spec/mongoid/inspectable_spec.rb +0 -1
- data/spec/mongoid/interceptable_spec.rb +102 -95
- data/spec/mongoid/loggable_spec.rb +0 -1
- data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -2
- data/spec/mongoid/persistable/creatable_spec.rb +2 -3
- data/spec/mongoid/persistable/deletable_spec.rb +18 -19
- data/spec/mongoid/persistable/destroyable_spec.rb +8 -9
- data/spec/mongoid/persistable/incrementable_spec.rb +8 -9
- data/spec/mongoid/persistable/logical_spec.rb +4 -5
- data/spec/mongoid/persistable/poppable_spec.rb +4 -5
- data/spec/mongoid/persistable/pullable_spec.rb +8 -9
- data/spec/mongoid/persistable/pushable_spec.rb +8 -9
- data/spec/mongoid/persistable/renamable_spec.rb +3 -4
- data/spec/mongoid/persistable/savable_spec.rb +15 -11
- data/spec/mongoid/persistable/settable_spec.rb +9 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +4 -5
- data/spec/mongoid/persistable/updatable_spec.rb +41 -24
- data/spec/mongoid/persistable/upsertable_spec.rb +1 -2
- data/spec/mongoid/persistable_spec.rb +1 -2
- data/spec/mongoid/persistence_context_spec.rb +0 -1
- data/spec/mongoid/positional_spec.rb +0 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +1 -2
- data/spec/mongoid/query_cache_spec.rb +30 -8
- data/spec/mongoid/relations/proxy_spec.rb +6 -7
- data/spec/mongoid/reloadable_spec.rb +209 -23
- data/spec/mongoid/scopable_spec.rb +54 -22
- data/spec/mongoid/selectable_spec.rb +6 -7
- data/spec/mongoid/serializable_spec.rb +9 -10
- data/spec/mongoid/shardable_spec.rb +2 -3
- data/spec/mongoid/stateful_spec.rb +1 -2
- data/spec/mongoid/tasks/database_rake_spec.rb +0 -1
- data/spec/mongoid/tasks/database_spec.rb +0 -1
- data/spec/mongoid/threaded_spec.rb +2 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
- data/spec/mongoid/timestamps/created_spec.rb +1 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
- data/spec/mongoid/timestamps/updated_spec.rb +3 -4
- data/spec/mongoid/timestamps_spec.rb +6 -7
- data/spec/mongoid/touchable_spec.rb +15 -20
- data/spec/mongoid/touchable_spec_models.rb +0 -1
- data/spec/mongoid/traversable_spec.rb +65 -2
- data/spec/mongoid/validatable/associated_spec.rb +0 -1
- data/spec/mongoid/validatable/format_spec.rb +0 -1
- data/spec/mongoid/validatable/length_spec.rb +0 -1
- data/spec/mongoid/validatable/numericality_spec.rb +0 -1
- data/spec/mongoid/validatable/presence_spec.rb +26 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +67 -68
- data/spec/mongoid/validatable_spec.rb +2 -3
- data/spec/mongoid_spec.rb +0 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -1
- data/spec/rails/mongoid_spec.rb +0 -1
- data/spec/shared/lib/mrss/constraints.rb +10 -17
- data/spec/shared/lib/mrss/docker_runner.rb +23 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
- data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
- data/spec/shared/share/Dockerfile.erb +56 -54
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +46 -21
- data/spec/shared/shlib/set_env.sh +43 -5
- data/spec/spec_helper.rb +12 -22
- data/spec/support/authorization.rb +0 -1
- data/spec/support/constraints.rb +0 -1
- data/spec/support/expectations.rb +0 -1
- data/spec/support/macros.rb +31 -1
- data/spec/support/models/account.rb +1 -2
- data/spec/support/models/acolyte.rb +0 -1
- data/spec/support/models/actor.rb +0 -1
- data/spec/support/models/actress.rb +0 -1
- data/spec/support/models/address.rb +0 -1
- data/spec/support/models/address_component.rb +0 -1
- data/spec/support/models/address_number.rb +0 -1
- data/spec/support/models/agency.rb +0 -1
- data/spec/support/models/agent.rb +0 -1
- data/spec/support/models/album.rb +0 -1
- data/spec/support/models/alert.rb +0 -1
- data/spec/support/models/animal.rb +0 -1
- data/spec/support/models/answer.rb +0 -1
- data/spec/support/models/appointment.rb +0 -1
- data/spec/support/models/armrest.rb +0 -1
- data/spec/support/models/array_field.rb +0 -1
- data/spec/support/models/article.rb +0 -1
- data/spec/support/models/artist.rb +2 -1
- data/spec/support/models/artwork.rb +0 -1
- data/spec/support/models/audio.rb +0 -1
- data/spec/support/models/augmentation.rb +0 -1
- data/spec/support/models/author.rb +0 -1
- data/spec/support/models/baby.rb +0 -1
- data/spec/support/models/band.rb +4 -1
- data/spec/support/models/bar.rb +0 -1
- data/spec/support/models/basic.rb +0 -1
- data/spec/support/models/bed.rb +0 -1
- data/spec/support/models/big_palette.rb +0 -1
- data/spec/support/models/birthday.rb +0 -1
- data/spec/support/models/bolt.rb +0 -1
- data/spec/support/models/bomb.rb +0 -1
- data/spec/support/models/book.rb +0 -1
- data/spec/support/models/breed.rb +0 -1
- data/spec/support/models/browser.rb +0 -1
- data/spec/support/models/building.rb +0 -1
- data/spec/support/models/building_address.rb +0 -1
- data/spec/support/models/bus.rb +0 -1
- data/spec/support/models/business.rb +0 -1
- data/spec/support/models/callback_test.rb +0 -1
- data/spec/support/models/canvas.rb +0 -1
- data/spec/support/models/car.rb +0 -1
- data/spec/support/models/cat.rb +0 -1
- data/spec/support/models/category.rb +0 -1
- data/spec/support/models/child.rb +0 -1
- data/spec/support/models/child_doc.rb +3 -4
- data/spec/support/models/church.rb +0 -1
- data/spec/support/models/circle.rb +0 -1
- data/spec/support/models/circuit.rb +0 -1
- data/spec/support/models/circus.rb +0 -1
- data/spec/support/models/code.rb +2 -1
- data/spec/support/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +0 -1
- data/spec/support/models/comment.rb +0 -1
- data/spec/support/models/company.rb +0 -1
- data/spec/support/models/consumption_period.rb +0 -1
- data/spec/support/models/contextable_item.rb +0 -1
- data/spec/support/models/contractor.rb +0 -1
- data/spec/support/models/cookie.rb +0 -1
- data/spec/support/models/country_code.rb +2 -1
- data/spec/support/models/courier_job.rb +0 -1
- data/spec/support/models/crate.rb +0 -1
- data/spec/support/models/customer.rb +0 -1
- data/spec/support/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +0 -1
- data/spec/support/models/definition.rb +0 -1
- data/spec/support/models/delegating_patient.rb +0 -1
- data/spec/support/models/description.rb +0 -1
- data/spec/support/models/dictionary.rb +0 -1
- data/spec/support/models/division.rb +0 -1
- data/spec/support/models/doctor.rb +0 -1
- data/spec/support/models/dog.rb +0 -1
- data/spec/support/models/dokument.rb +0 -1
- data/spec/support/models/draft.rb +0 -1
- data/spec/support/models/dragon.rb +0 -1
- data/spec/support/models/driver.rb +0 -1
- data/spec/support/models/drug.rb +0 -1
- data/spec/support/models/dungeon.rb +0 -1
- data/spec/support/models/edit.rb +0 -1
- data/spec/support/models/email.rb +0 -1
- data/spec/support/models/employer.rb +0 -1
- data/spec/support/models/entry.rb +0 -1
- data/spec/support/models/eraser.rb +0 -1
- data/spec/support/models/even.rb +0 -1
- data/spec/support/models/event.rb +0 -1
- data/spec/support/models/exhibition.rb +0 -1
- data/spec/support/models/exhibitor.rb +0 -1
- data/spec/support/models/explosion.rb +0 -1
- data/spec/support/models/eye.rb +0 -1
- data/spec/support/models/eye_bowl.rb +0 -1
- data/spec/support/models/face.rb +0 -1
- data/spec/support/models/favorite.rb +0 -1
- data/spec/support/models/filesystem.rb +0 -1
- data/spec/support/models/fire_hydrant.rb +0 -1
- data/spec/support/models/firefox.rb +0 -1
- data/spec/support/models/fish.rb +0 -1
- data/spec/support/models/folder.rb +0 -1
- data/spec/support/models/folder_item.rb +0 -1
- data/spec/support/models/fruits.rb +0 -1
- data/spec/support/models/game.rb +0 -1
- data/spec/support/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +0 -1
- data/spec/support/models/hole.rb +0 -1
- data/spec/support/models/home.rb +0 -1
- data/spec/support/models/house.rb +0 -1
- data/spec/support/models/html_writer.rb +0 -1
- data/spec/support/models/id_key.rb +0 -1
- data/spec/support/models/idnodef.rb +0 -1
- data/spec/support/models/image.rb +0 -1
- data/spec/support/models/implant.rb +0 -1
- data/spec/support/models/instrument.rb +0 -1
- data/spec/support/models/item.rb +0 -1
- data/spec/support/models/jar.rb +0 -1
- data/spec/support/models/kaleidoscope.rb +0 -1
- data/spec/support/models/kangaroo.rb +0 -1
- data/spec/support/models/label.rb +2 -2
- data/spec/support/models/language.rb +0 -1
- data/spec/support/models/lat_lng.rb +0 -1
- data/spec/support/models/league.rb +0 -1
- data/spec/support/models/learner.rb +0 -1
- data/spec/support/models/line_item.rb +0 -1
- data/spec/support/models/location.rb +0 -1
- data/spec/support/models/login.rb +0 -1
- data/spec/support/models/manufacturer.rb +0 -1
- data/spec/support/models/meat.rb +0 -1
- data/spec/support/models/membership.rb +1 -1
- data/spec/support/models/message.rb +0 -1
- data/spec/support/models/minim.rb +0 -1
- data/spec/support/models/mixed_drink.rb +0 -1
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/movie.rb +0 -1
- data/spec/support/models/my_hash.rb +0 -1
- data/spec/support/models/name.rb +0 -1
- data/spec/support/models/name_only.rb +0 -1
- data/spec/support/models/node.rb +0 -1
- data/spec/support/models/note.rb +0 -1
- data/spec/support/models/nut.rb +0 -1
- data/spec/support/models/odd.rb +0 -1
- data/spec/support/models/order.rb +2 -1
- data/spec/support/models/ordered_post.rb +1 -2
- data/spec/support/models/ordered_preference.rb +0 -1
- data/spec/support/models/oscar.rb +0 -1
- data/spec/support/models/other_owner_object.rb +0 -1
- data/spec/support/models/override.rb +0 -1
- data/spec/support/models/ownable.rb +0 -1
- data/spec/support/models/owner.rb +0 -1
- data/spec/support/models/pack.rb +0 -1
- data/spec/support/models/page.rb +0 -1
- data/spec/support/models/page_question.rb +0 -1
- data/spec/support/models/palette.rb +0 -1
- data/spec/support/models/parent.rb +0 -1
- data/spec/support/models/parent_doc.rb +0 -1
- data/spec/support/models/passport.rb +5 -1
- data/spec/support/models/patient.rb +0 -1
- data/spec/support/models/pdf_writer.rb +0 -1
- data/spec/support/models/pencil.rb +0 -1
- data/spec/support/models/person.rb +1 -1
- data/spec/support/models/pet.rb +0 -1
- data/spec/support/models/pet_owner.rb +0 -1
- data/spec/support/models/phone.rb +2 -2
- data/spec/support/models/piano.rb +0 -1
- data/spec/support/models/pizza.rb +0 -1
- data/spec/support/models/player.rb +0 -1
- data/spec/support/models/post.rb +0 -1
- data/spec/support/models/post_genre.rb +0 -1
- data/spec/support/models/powerup.rb +0 -1
- data/spec/support/models/preference.rb +0 -1
- data/spec/support/models/princess.rb +0 -1
- data/spec/support/models/product.rb +0 -1
- data/spec/support/models/profile.rb +0 -1
- data/spec/support/models/pronunciation.rb +0 -1
- data/spec/support/models/pub.rb +0 -1
- data/spec/support/models/publication/encyclopedia.rb +0 -1
- data/spec/support/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +0 -1
- data/spec/support/models/purchase.rb +0 -1
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/support/models/question.rb +0 -1
- data/spec/support/models/quiz.rb +0 -1
- data/spec/support/models/rating.rb +0 -1
- data/spec/support/models/record.rb +0 -1
- data/spec/support/models/registry.rb +0 -1
- data/spec/support/models/role.rb +0 -1
- data/spec/support/models/root_category.rb +0 -1
- data/spec/support/models/sandwich.rb +0 -1
- data/spec/support/models/scheduler.rb +0 -1
- data/spec/support/models/scribe.rb +0 -1
- data/spec/support/models/sealer.rb +0 -1
- data/spec/support/models/seat.rb +0 -1
- data/spec/support/models/seo.rb +0 -1
- data/spec/support/models/series.rb +0 -1
- data/spec/support/models/server.rb +0 -1
- data/spec/support/models/service.rb +0 -1
- data/spec/support/models/shape.rb +0 -1
- data/spec/support/models/shelf.rb +0 -1
- data/spec/support/models/shipment_address.rb +0 -1
- data/spec/support/models/shipping_container.rb +0 -1
- data/spec/support/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +0 -1
- data/spec/support/models/shop.rb +0 -1
- data/spec/support/models/short_agent.rb +0 -1
- data/spec/support/models/short_quiz.rb +0 -1
- data/spec/support/models/simple.rb +0 -1
- data/spec/support/models/slave.rb +0 -1
- data/spec/support/models/song.rb +0 -1
- data/spec/support/models/sound.rb +0 -1
- data/spec/support/models/spacer.rb +0 -1
- data/spec/support/models/square.rb +0 -1
- data/spec/support/models/staff.rb +0 -1
- data/spec/support/models/store_as_dup_test1.rb +0 -1
- data/spec/support/models/store_as_dup_test2.rb +0 -1
- data/spec/support/models/store_as_dup_test3.rb +0 -1
- data/spec/support/models/store_as_dup_test4.rb +0 -1
- data/spec/support/models/strategy.rb +0 -1
- data/spec/support/models/sub_item.rb +0 -1
- data/spec/support/models/subscription.rb +0 -1
- data/spec/support/models/survey.rb +0 -1
- data/spec/support/models/symptom.rb +0 -1
- data/spec/support/models/tag.rb +0 -1
- data/spec/support/models/target.rb +0 -1
- data/spec/support/models/template.rb +0 -1
- data/spec/support/models/thing.rb +0 -1
- data/spec/support/models/threadlocker.rb +0 -1
- data/spec/support/models/title.rb +0 -1
- data/spec/support/models/tool.rb +0 -1
- data/spec/support/models/topping.rb +0 -1
- data/spec/support/models/toy.rb +0 -1
- data/spec/support/models/track.rb +0 -1
- data/spec/support/models/translation.rb +0 -1
- data/spec/support/models/tree.rb +0 -1
- data/spec/support/models/truck.rb +0 -1
- data/spec/support/models/updatable.rb +0 -1
- data/spec/support/models/user.rb +0 -1
- data/spec/support/models/user_account.rb +0 -1
- data/spec/support/models/validation_callback.rb +0 -1
- data/spec/support/models/vehicle.rb +0 -1
- data/spec/support/models/version.rb +0 -1
- data/spec/support/models/vertex.rb +0 -1
- data/spec/support/models/vet_visit.rb +0 -1
- data/spec/support/models/video.rb +0 -1
- data/spec/support/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +0 -1
- data/spec/support/models/weapon.rb +0 -1
- data/spec/support/models/wiki_page.rb +0 -1
- data/spec/support/models/word.rb +0 -1
- data/spec/support/models/word_origin.rb +0 -1
- data/spec/support/models/writer.rb +0 -1
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/spec_config.rb +7 -1
- data.tar.gz.sig +0 -0
- metadata +51 -11
- metadata.gz.sig +0 -0
- data/lib/support/ruby_version.rb +0 -29
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
require "mongoid/contextual/atomic"
|
|
5
4
|
require "mongoid/contextual/aggregable/mongo"
|
|
@@ -19,8 +18,6 @@ module Mongoid
|
|
|
19
18
|
include Queryable
|
|
20
19
|
|
|
21
20
|
# Options constant.
|
|
22
|
-
#
|
|
23
|
-
# @since 5.0.0
|
|
24
21
|
OPTIONS = [ :hint,
|
|
25
22
|
:limit,
|
|
26
23
|
:skip,
|
|
@@ -44,9 +41,8 @@ module Mongoid
|
|
|
44
41
|
# context.cached?
|
|
45
42
|
#
|
|
46
43
|
# @return [ true, false ] If the context is cached.
|
|
47
|
-
#
|
|
48
|
-
# @since 3.0.0
|
|
49
44
|
def cached?
|
|
45
|
+
Mongoid::Warnings.warn_criteria_cache_deprecated
|
|
50
46
|
!!@cache
|
|
51
47
|
end
|
|
52
48
|
|
|
@@ -67,8 +63,6 @@ module Mongoid
|
|
|
67
63
|
# into the count.
|
|
68
64
|
#
|
|
69
65
|
# @return [ Integer ] The number of matches.
|
|
70
|
-
#
|
|
71
|
-
# @since 3.0.0
|
|
72
66
|
def count(options = {}, &block)
|
|
73
67
|
return super(&block) if block_given?
|
|
74
68
|
try_cache(:count) { view.count_documents(options) }
|
|
@@ -99,8 +93,6 @@ module Mongoid
|
|
|
99
93
|
# context.delete
|
|
100
94
|
#
|
|
101
95
|
# @return [ nil ] Nil.
|
|
102
|
-
#
|
|
103
|
-
# @since 3.0.0
|
|
104
96
|
def delete
|
|
105
97
|
view.delete_many.deleted_count
|
|
106
98
|
end
|
|
@@ -112,8 +104,6 @@ module Mongoid
|
|
|
112
104
|
# context.destroy
|
|
113
105
|
#
|
|
114
106
|
# @return [ nil ] Nil.
|
|
115
|
-
#
|
|
116
|
-
# @since 3.0.0
|
|
117
107
|
def destroy
|
|
118
108
|
each.inject(0) do |count, doc|
|
|
119
109
|
doc.destroy
|
|
@@ -131,11 +121,20 @@ module Mongoid
|
|
|
131
121
|
# @param [ String, Symbol ] field The name of the field.
|
|
132
122
|
#
|
|
133
123
|
# @return [ Array<Object> ] The distinct values for the field.
|
|
134
|
-
#
|
|
135
|
-
# @since 3.0.0
|
|
136
124
|
def distinct(field)
|
|
137
|
-
|
|
138
|
-
|
|
125
|
+
name = if Mongoid.legacy_pluck_distinct
|
|
126
|
+
klass.database_field_name(field)
|
|
127
|
+
else
|
|
128
|
+
klass.cleanse_localized_field_names(field)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
view.distinct(name).map do |value|
|
|
132
|
+
if Mongoid.legacy_pluck_distinct
|
|
133
|
+
value.class.demongoize(value)
|
|
134
|
+
else
|
|
135
|
+
is_translation = "#{name}_translations" == field.to_s
|
|
136
|
+
recursive_demongoize(name, value, is_translation)
|
|
137
|
+
end
|
|
139
138
|
end
|
|
140
139
|
end
|
|
141
140
|
|
|
@@ -148,8 +147,6 @@ module Mongoid
|
|
|
148
147
|
# end
|
|
149
148
|
#
|
|
150
149
|
# @return [ Enumerator ] The enumerator.
|
|
151
|
-
#
|
|
152
|
-
# @since 3.0.0
|
|
153
150
|
def each(&block)
|
|
154
151
|
if block_given?
|
|
155
152
|
documents_for_iteration.each do |doc|
|
|
@@ -172,8 +169,6 @@ module Mongoid
|
|
|
172
169
|
# used to determine the value.
|
|
173
170
|
#
|
|
174
171
|
# @return [ true, false ] If the count is more than zero.
|
|
175
|
-
#
|
|
176
|
-
# @since 3.0.0
|
|
177
172
|
def exists?
|
|
178
173
|
return !documents.empty? if cached? && cache_loaded?
|
|
179
174
|
return @count > 0 if instance_variable_defined?(:@count)
|
|
@@ -189,8 +184,6 @@ module Mongoid
|
|
|
189
184
|
# Band.where(name: "Depeche Mode").explain
|
|
190
185
|
#
|
|
191
186
|
# @return [ Hash ] The explain result.
|
|
192
|
-
#
|
|
193
|
-
# @since 3.0.0
|
|
194
187
|
def explain
|
|
195
188
|
view.explain
|
|
196
189
|
end
|
|
@@ -209,8 +202,6 @@ module Mongoid
|
|
|
209
202
|
# @option options [ true, false ] :upsert Create the document if it doesn't exist.
|
|
210
203
|
#
|
|
211
204
|
# @return [ Document ] The result of the command.
|
|
212
|
-
#
|
|
213
|
-
# @since 5.0.0
|
|
214
205
|
def find_one_and_update(update, options = {})
|
|
215
206
|
if doc = view.find_one_and_update(update, options)
|
|
216
207
|
Factory.from_db(klass, doc)
|
|
@@ -231,8 +222,6 @@ module Mongoid
|
|
|
231
222
|
# @option options [ true, false ] :upsert Create the document if it doesn't exist.
|
|
232
223
|
#
|
|
233
224
|
# @return [ Document ] The result of the command.
|
|
234
|
-
#
|
|
235
|
-
# @since 5.0.0
|
|
236
225
|
def find_one_and_replace(replacement, options = {})
|
|
237
226
|
if doc = view.find_one_and_replace(replacement, options)
|
|
238
227
|
Factory.from_db(klass, doc)
|
|
@@ -246,8 +235,6 @@ module Mongoid
|
|
|
246
235
|
# context.find_one_and_delete
|
|
247
236
|
#
|
|
248
237
|
# @return [ Document ] The result of the command.
|
|
249
|
-
#
|
|
250
|
-
# @since 5.0.0
|
|
251
238
|
def find_one_and_delete
|
|
252
239
|
if doc = view.find_one_and_delete
|
|
253
240
|
Factory.from_db(klass, doc)
|
|
@@ -265,27 +252,28 @@ module Mongoid
|
|
|
265
252
|
# and have no sort defined on the criteria, use the option { id_sort: :none }.
|
|
266
253
|
# Be aware that #first/#last won't guarantee order in this case.
|
|
267
254
|
#
|
|
268
|
-
# @param [ Hash ]
|
|
255
|
+
# @param [ Integer | Hash ] limit_or_opts The number of documents to
|
|
256
|
+
# return, or a hash of options.
|
|
269
257
|
#
|
|
270
|
-
# @option
|
|
271
|
-
# is defined on the criteria.
|
|
258
|
+
# @option limit_or_opts [ :none ] :id_sort This option is deprecated.
|
|
259
|
+
# Don't apply a sort on _id if no other sort is defined on the criteria.
|
|
272
260
|
#
|
|
273
261
|
# @return [ Document ] The first document.
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
262
|
+
def first(limit_or_opts = nil)
|
|
263
|
+
limit = limit_or_opts unless limit_or_opts.is_a?(Hash)
|
|
264
|
+
if cached? && cache_loaded?
|
|
265
|
+
return limit ? documents.first(limit) : documents.first
|
|
266
|
+
end
|
|
267
|
+
try_numbered_cache(:first, limit) do
|
|
268
|
+
if limit_or_opts.try(:key?, :id_sort)
|
|
269
|
+
Mongoid::Warnings.warn_id_sort_deprecated
|
|
270
|
+
end
|
|
271
|
+
sorted_view = view
|
|
272
|
+
if sort = view.sort || ({ _id: 1 } unless limit_or_opts.try(:fetch, :id_sort) == :none)
|
|
273
|
+
sorted_view = view.sort(sort)
|
|
274
|
+
end
|
|
275
|
+
if raw_docs = sorted_view.limit(limit || 1).to_a
|
|
276
|
+
process_raw_docs(raw_docs, limit)
|
|
289
277
|
end
|
|
290
278
|
end
|
|
291
279
|
end
|
|
@@ -294,8 +282,6 @@ module Mongoid
|
|
|
294
282
|
# Return the first result without applying sort
|
|
295
283
|
#
|
|
296
284
|
# @api private
|
|
297
|
-
#
|
|
298
|
-
# @since 4.0.2
|
|
299
285
|
def find_first
|
|
300
286
|
return documents.first if cached? && cache_loaded?
|
|
301
287
|
if raw_doc = view.first
|
|
@@ -323,8 +309,6 @@ module Mongoid
|
|
|
323
309
|
# @return [ GeoNear ] The GeoNear command.
|
|
324
310
|
#
|
|
325
311
|
# @deprecated
|
|
326
|
-
#
|
|
327
|
-
# @since 3.1.0
|
|
328
312
|
def geo_near(coordinates)
|
|
329
313
|
GeoNear.new(collection, criteria, coordinates)
|
|
330
314
|
end
|
|
@@ -345,6 +329,10 @@ module Mongoid
|
|
|
345
329
|
#
|
|
346
330
|
# @return [ Array ] The result of mapping.
|
|
347
331
|
def map(field = nil, &block)
|
|
332
|
+
if !field.nil?
|
|
333
|
+
Mongoid::Warnings.warn_map_field_deprecated
|
|
334
|
+
end
|
|
335
|
+
|
|
348
336
|
if block_given?
|
|
349
337
|
super(&block)
|
|
350
338
|
else
|
|
@@ -359,8 +347,6 @@ module Mongoid
|
|
|
359
347
|
# Mongo.new(criteria)
|
|
360
348
|
#
|
|
361
349
|
# @param [ Criteria ] criteria The criteria.
|
|
362
|
-
#
|
|
363
|
-
# @since 3.0.0
|
|
364
350
|
def initialize(criteria)
|
|
365
351
|
@criteria, @klass, @cache = criteria, criteria.klass, criteria.options[:cache]
|
|
366
352
|
@collection = @klass.collection
|
|
@@ -382,21 +368,26 @@ module Mongoid
|
|
|
382
368
|
# and have no sort defined on the criteria, use the option { id_sort: :none }.
|
|
383
369
|
# Be aware that #first/#last won't guarantee order in this case.
|
|
384
370
|
#
|
|
385
|
-
# @param [ Hash ]
|
|
371
|
+
# @param [ Integer | Hash ] limit_or_opts The number of documents to
|
|
372
|
+
# return, or a hash of options.
|
|
386
373
|
#
|
|
387
|
-
# @option
|
|
388
|
-
# is defined on the criteria.
|
|
374
|
+
# @option limit_or_opts [ :none ] :id_sort This option is deprecated.
|
|
375
|
+
# Don't apply a sort on _id if no other sort is defined on the criteria.
|
|
389
376
|
#
|
|
390
|
-
# @
|
|
391
|
-
def last(
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
377
|
+
# @return [ Document ] The last document.
|
|
378
|
+
def last(limit_or_opts = nil)
|
|
379
|
+
limit = limit_or_opts unless limit_or_opts.is_a?(Hash)
|
|
380
|
+
if cached? && cache_loaded?
|
|
381
|
+
return limit ? documents.last(limit) : documents.last
|
|
382
|
+
end
|
|
383
|
+
res = try_numbered_cache(:last, limit) do
|
|
384
|
+
with_inverse_sorting(limit_or_opts) do
|
|
385
|
+
if raw_docs = view.limit(limit || 1).to_a
|
|
386
|
+
process_raw_docs(raw_docs, limit)
|
|
397
387
|
end
|
|
398
388
|
end
|
|
399
389
|
end
|
|
390
|
+
res.is_a?(Array) ? res.reverse : res
|
|
400
391
|
end
|
|
401
392
|
|
|
402
393
|
# Get's the number of documents matching the query selector.
|
|
@@ -405,8 +396,6 @@ module Mongoid
|
|
|
405
396
|
# context.length
|
|
406
397
|
#
|
|
407
398
|
# @return [ Integer ] The number of documents.
|
|
408
|
-
#
|
|
409
|
-
# @since 3.0.0
|
|
410
399
|
def length
|
|
411
400
|
@length ||= self.count
|
|
412
401
|
end
|
|
@@ -420,12 +409,48 @@ module Mongoid
|
|
|
420
409
|
# @param [ Integer ] value The number of documents to return.
|
|
421
410
|
#
|
|
422
411
|
# @return [ Mongo ] The context.
|
|
423
|
-
#
|
|
424
|
-
# @since 3.0.0
|
|
425
412
|
def limit(value)
|
|
426
413
|
@view = view.limit(value) and self
|
|
427
414
|
end
|
|
428
415
|
|
|
416
|
+
# Take the given number of documents from the database.
|
|
417
|
+
#
|
|
418
|
+
# @example Take 10 documents
|
|
419
|
+
# context.take(10)
|
|
420
|
+
#
|
|
421
|
+
# @param [ Integer | nil ] limit The number of documents to return or nil.
|
|
422
|
+
#
|
|
423
|
+
# @return [ Document | Array<Document> ] The list of documents, or one
|
|
424
|
+
# document if no value was given.
|
|
425
|
+
def take(limit = nil)
|
|
426
|
+
if limit
|
|
427
|
+
limit(limit).to_a
|
|
428
|
+
else
|
|
429
|
+
# Do to_a first so that the Mongo#first method is not used and the
|
|
430
|
+
# result is not sorted.
|
|
431
|
+
limit(1).to_a.first
|
|
432
|
+
end
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
# Take one document from the database and raise an error if there are none.
|
|
436
|
+
#
|
|
437
|
+
# @example Take a document
|
|
438
|
+
# context.take!
|
|
439
|
+
#
|
|
440
|
+
# @return [ Document ] The document.
|
|
441
|
+
#
|
|
442
|
+
# @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
|
|
443
|
+
# documents to take.
|
|
444
|
+
def take!
|
|
445
|
+
# Do to_a first so that the Mongo#first method is not used and the
|
|
446
|
+
# result is not sorted.
|
|
447
|
+
if fst = limit(1).to_a.first
|
|
448
|
+
fst
|
|
449
|
+
else
|
|
450
|
+
raise Errors::DocumentNotFound.new(klass, nil, nil)
|
|
451
|
+
end
|
|
452
|
+
end
|
|
453
|
+
|
|
429
454
|
# Initiate a map/reduce operation from the context.
|
|
430
455
|
#
|
|
431
456
|
# @example Initiate a map/reduce.
|
|
@@ -435,8 +460,6 @@ module Mongoid
|
|
|
435
460
|
# @param [ String ] reduce The reduce js function.
|
|
436
461
|
#
|
|
437
462
|
# @return [ MapReduce ] The map/reduce lazy wrapper.
|
|
438
|
-
#
|
|
439
|
-
# @since 3.0.0
|
|
440
463
|
def map_reduce(map, reduce)
|
|
441
464
|
MapReduce.new(collection, criteria, map, reduce)
|
|
442
465
|
end
|
|
@@ -453,17 +476,30 @@ module Mongoid
|
|
|
453
476
|
# @param [ String, Symbol, Array ] fields Fields to pluck.
|
|
454
477
|
#
|
|
455
478
|
# @return [ Array<Object, Array> ] The plucked values.
|
|
456
|
-
#
|
|
457
|
-
# @since 3.1.0
|
|
458
479
|
def pluck(*fields)
|
|
480
|
+
# Multiple fields can map to the same field name. For example, plucking
|
|
481
|
+
# a field and its _translations field map to the same field in the database.
|
|
482
|
+
# because of this, we need to keep track of the fields requested.
|
|
483
|
+
normalized_field_names = []
|
|
459
484
|
normalized_select = fields.inject({}) do |hash, f|
|
|
460
|
-
|
|
485
|
+
db_fn = klass.database_field_name(f)
|
|
486
|
+
normalized_field_names.push(db_fn)
|
|
487
|
+
|
|
488
|
+
if Mongoid.legacy_pluck_distinct
|
|
489
|
+
hash[db_fn] = true
|
|
490
|
+
else
|
|
491
|
+
hash[klass.cleanse_localized_field_names(f)] = true
|
|
492
|
+
end
|
|
461
493
|
hash
|
|
462
494
|
end
|
|
463
495
|
|
|
464
496
|
view.projection(normalized_select).reduce([]) do |plucked, doc|
|
|
465
|
-
values =
|
|
466
|
-
|
|
497
|
+
values = normalized_field_names.map do |n|
|
|
498
|
+
if Mongoid.legacy_pluck_distinct
|
|
499
|
+
n.include?('.') ? doc[n.partition('.')[0]] : doc[n]
|
|
500
|
+
else
|
|
501
|
+
extract_value(doc, n)
|
|
502
|
+
end
|
|
467
503
|
end
|
|
468
504
|
plucked << (values.size == 1 ? values.first : values)
|
|
469
505
|
end
|
|
@@ -477,8 +513,6 @@ module Mongoid
|
|
|
477
513
|
# @param [ Integer ] value The number of documents to skip.
|
|
478
514
|
#
|
|
479
515
|
# @return [ Mongo ] The context.
|
|
480
|
-
#
|
|
481
|
-
# @since 3.0.0
|
|
482
516
|
def skip(value)
|
|
483
517
|
@view = view.skip(value) and self
|
|
484
518
|
end
|
|
@@ -492,8 +526,6 @@ module Mongoid
|
|
|
492
526
|
# pairs.
|
|
493
527
|
#
|
|
494
528
|
# @return [ Mongo ] The context.
|
|
495
|
-
#
|
|
496
|
-
# @since 3.0.0
|
|
497
529
|
def sort(values = nil, &block)
|
|
498
530
|
if block_given?
|
|
499
531
|
super(&block)
|
|
@@ -517,8 +549,6 @@ module Mongoid
|
|
|
517
549
|
# an update should apply.
|
|
518
550
|
#
|
|
519
551
|
# @return [ nil, false ] False if no attributes were provided.
|
|
520
|
-
#
|
|
521
|
-
# @since 3.0.0
|
|
522
552
|
def update(attributes = nil, opts = {})
|
|
523
553
|
update_documents(attributes, :update_one, opts)
|
|
524
554
|
end
|
|
@@ -535,8 +565,6 @@ module Mongoid
|
|
|
535
565
|
# an update should apply.
|
|
536
566
|
#
|
|
537
567
|
# @return [ nil, false ] False if no attributes were provided.
|
|
538
|
-
#
|
|
539
|
-
# @since 3.0.0
|
|
540
568
|
def update_all(attributes = nil, opts = {})
|
|
541
569
|
update_documents(attributes, :update_many, opts)
|
|
542
570
|
end
|
|
@@ -548,8 +576,6 @@ module Mongoid
|
|
|
548
576
|
# @param [ String, Symbol ] key The instance variable name
|
|
549
577
|
#
|
|
550
578
|
# @return the result of the block
|
|
551
|
-
#
|
|
552
|
-
# @since 3.1.4
|
|
553
579
|
def try_cache(key, &block)
|
|
554
580
|
unless cached?
|
|
555
581
|
yield
|
|
@@ -561,6 +587,31 @@ module Mongoid
|
|
|
561
587
|
end
|
|
562
588
|
end
|
|
563
589
|
|
|
590
|
+
# yield the block given or return the cached value
|
|
591
|
+
#
|
|
592
|
+
# @param [ String, Symbol ] key The instance variable name
|
|
593
|
+
# @param [ Integer | nil ] n The number of documents requested or nil
|
|
594
|
+
# if none is requested.
|
|
595
|
+
#
|
|
596
|
+
# @return [ Object ] The result of the block.
|
|
597
|
+
def try_numbered_cache(key, n, &block)
|
|
598
|
+
unless cached?
|
|
599
|
+
yield if block_given?
|
|
600
|
+
else
|
|
601
|
+
len = n || 1
|
|
602
|
+
ret = instance_variable_get("@#{key}")
|
|
603
|
+
if !ret || ret.length < len
|
|
604
|
+
instance_variable_set("@#{key}", ret = Array.wrap(yield))
|
|
605
|
+
elsif !n
|
|
606
|
+
ret.is_a?(Array) ? ret.first : ret
|
|
607
|
+
elsif ret.length > len
|
|
608
|
+
ret.first(n)
|
|
609
|
+
else
|
|
610
|
+
ret
|
|
611
|
+
end
|
|
612
|
+
end
|
|
613
|
+
end
|
|
614
|
+
|
|
564
615
|
# Update the documents for the provided method.
|
|
565
616
|
#
|
|
566
617
|
# @api private
|
|
@@ -572,8 +623,6 @@ module Mongoid
|
|
|
572
623
|
# @param [ Symbol ] method The method to use.
|
|
573
624
|
#
|
|
574
625
|
# @return [ true, false ] If the update succeeded.
|
|
575
|
-
#
|
|
576
|
-
# @since 3.0.4
|
|
577
626
|
def update_documents(attributes, method = :update_one, opts = {})
|
|
578
627
|
return false unless attributes
|
|
579
628
|
attributes = Hash[attributes.map { |k, v| [klass.database_field_name(k.to_s), v] }]
|
|
@@ -586,8 +635,6 @@ module Mongoid
|
|
|
586
635
|
#
|
|
587
636
|
# @example Apply the field limitations.
|
|
588
637
|
# context.apply_fields
|
|
589
|
-
#
|
|
590
|
-
# @since 3.0.0
|
|
591
638
|
def apply_fields
|
|
592
639
|
if spec = criteria.options[:fields]
|
|
593
640
|
@view = view.projection(spec)
|
|
@@ -600,8 +647,6 @@ module Mongoid
|
|
|
600
647
|
#
|
|
601
648
|
# @example Apply all options.
|
|
602
649
|
# context.apply_options
|
|
603
|
-
#
|
|
604
|
-
# @since 3.1.0
|
|
605
650
|
def apply_options
|
|
606
651
|
apply_fields
|
|
607
652
|
OPTIONS.each do |name|
|
|
@@ -618,8 +663,6 @@ module Mongoid
|
|
|
618
663
|
#
|
|
619
664
|
# @example Apply the skip option.
|
|
620
665
|
# context.apply_option(:skip)
|
|
621
|
-
#
|
|
622
|
-
# @since 3.1.0
|
|
623
666
|
def apply_option(name)
|
|
624
667
|
if spec = criteria.options[name]
|
|
625
668
|
@view = view.send(name, spec)
|
|
@@ -632,11 +675,11 @@ module Mongoid
|
|
|
632
675
|
#
|
|
633
676
|
# @example Apply the inverse sorting params to the given block
|
|
634
677
|
# context.with_inverse_sorting
|
|
635
|
-
#
|
|
636
|
-
# @since 3.0.0
|
|
637
678
|
def with_inverse_sorting(opts = {})
|
|
679
|
+
Mongoid::Warnings.warn_id_sort_deprecated if opts.try(:key?, :id_sort)
|
|
680
|
+
|
|
638
681
|
begin
|
|
639
|
-
if sort = criteria.options[:sort] || ( { _id: 1 } unless opts
|
|
682
|
+
if sort = criteria.options[:sort] || ( { _id: 1 } unless opts.try(:fetch, :id_sort) == :none )
|
|
640
683
|
@view = view.sort(Hash[sort.map{|k, v| [k, -1*v]}])
|
|
641
684
|
end
|
|
642
685
|
yield
|
|
@@ -653,8 +696,6 @@ module Mongoid
|
|
|
653
696
|
# context.cacheable?
|
|
654
697
|
#
|
|
655
698
|
# @return [ true, false ] If caching, and the cache isn't loaded.
|
|
656
|
-
#
|
|
657
|
-
# @since 3.0.0
|
|
658
699
|
def cacheable?
|
|
659
700
|
cached? && !cache_loaded?
|
|
660
701
|
end
|
|
@@ -668,8 +709,6 @@ module Mongoid
|
|
|
668
709
|
# context.cache_loaded?
|
|
669
710
|
#
|
|
670
711
|
# @return [ true, false ] If the cache is loaded.
|
|
671
|
-
#
|
|
672
|
-
# @since 3.0.0
|
|
673
712
|
def cache_loaded?
|
|
674
713
|
!!@cache_loaded
|
|
675
714
|
end
|
|
@@ -682,8 +721,6 @@ module Mongoid
|
|
|
682
721
|
# context.documents
|
|
683
722
|
#
|
|
684
723
|
# @return [ Array<Document> ] The documents.
|
|
685
|
-
#
|
|
686
|
-
# @since 3.0.0
|
|
687
724
|
def documents
|
|
688
725
|
@documents ||= []
|
|
689
726
|
end
|
|
@@ -702,8 +739,6 @@ module Mongoid
|
|
|
702
739
|
# context.documents_for_iteration
|
|
703
740
|
#
|
|
704
741
|
# @return [ Array<Document>, Mongo::Collection::View ] The docs to iterate.
|
|
705
|
-
#
|
|
706
|
-
# @since 3.0.0
|
|
707
742
|
def documents_for_iteration
|
|
708
743
|
return documents if cached? && !documents.empty?
|
|
709
744
|
return view unless eager_loadable?
|
|
@@ -721,8 +756,6 @@ module Mongoid
|
|
|
721
756
|
# end
|
|
722
757
|
#
|
|
723
758
|
# @param [ Document ] document The document to yield to.
|
|
724
|
-
#
|
|
725
|
-
# @since 3.0.0
|
|
726
759
|
def yield_document(document, &block)
|
|
727
760
|
doc = document.respond_to?(:_id) ?
|
|
728
761
|
document : Factory.from_db(klass, document, criteria)
|
|
@@ -739,6 +772,119 @@ module Mongoid
|
|
|
739
772
|
def acknowledged_write?
|
|
740
773
|
collection.write_concern.nil? || collection.write_concern.acknowledged?
|
|
741
774
|
end
|
|
775
|
+
|
|
776
|
+
# Extracts the value for the given field name from the given attribute
|
|
777
|
+
# hash.
|
|
778
|
+
#
|
|
779
|
+
# @param [ Hash ] attrs The attributes hash.
|
|
780
|
+
# @param [ String ] field_name The name of the field to extract.
|
|
781
|
+
#
|
|
782
|
+
# @param [ Object ] The value for the given field name
|
|
783
|
+
def extract_value(attrs, field_name)
|
|
784
|
+
def fetch_and_demongoize(d, meth, klass)
|
|
785
|
+
res = d.try(:fetch, meth, nil)
|
|
786
|
+
if field = klass.fields[meth]
|
|
787
|
+
field.demongoize(res)
|
|
788
|
+
else
|
|
789
|
+
res.class.demongoize(res)
|
|
790
|
+
end
|
|
791
|
+
end
|
|
792
|
+
|
|
793
|
+
k = klass
|
|
794
|
+
meths = field_name.split('.')
|
|
795
|
+
meths.each_with_index.inject(attrs) do |curr, (meth, i)|
|
|
796
|
+
is_translation = false
|
|
797
|
+
if !k.fields.key?(meth) && !k.relations.key?(meth)
|
|
798
|
+
if tr = meth.match(/(.*)_translations\z/)&.captures&.first
|
|
799
|
+
is_translation = true
|
|
800
|
+
meth = tr
|
|
801
|
+
end
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
# 1. If curr is an array fetch from all elements in the array.
|
|
805
|
+
# 2. If the field is localized, and is not an _translations field
|
|
806
|
+
# (_translations fields don't show up in the fields hash).
|
|
807
|
+
# - If this is the end of the methods, return the translation for
|
|
808
|
+
# the current locale.
|
|
809
|
+
# - Otherwise, return the whole translations hash so the next method
|
|
810
|
+
# can select the language it wants.
|
|
811
|
+
# 3. If the meth is an _translations field, do not demongoize the
|
|
812
|
+
# value so the full hash is returned.
|
|
813
|
+
# 4. Otherwise, fetch and demongoize the value for the key meth.
|
|
814
|
+
if curr.is_a? Array
|
|
815
|
+
res = curr.map { |x| fetch_and_demongoize(x, meth, k) }
|
|
816
|
+
res.empty? ? nil : res
|
|
817
|
+
elsif !is_translation && k.fields[meth]&.localized?
|
|
818
|
+
if i < meths.length-1
|
|
819
|
+
curr.try(:fetch, meth, nil)
|
|
820
|
+
else
|
|
821
|
+
fetch_and_demongoize(curr, meth, k)
|
|
822
|
+
end
|
|
823
|
+
elsif is_translation
|
|
824
|
+
curr.try(:fetch, meth, nil)
|
|
825
|
+
else
|
|
826
|
+
fetch_and_demongoize(curr, meth, k)
|
|
827
|
+
end.tap do
|
|
828
|
+
if as = k.try(:aliased_associations)
|
|
829
|
+
if a = as.fetch(meth, nil)
|
|
830
|
+
meth = a
|
|
831
|
+
end
|
|
832
|
+
end
|
|
833
|
+
|
|
834
|
+
if relation = k.relations[meth]
|
|
835
|
+
k = relation.klass
|
|
836
|
+
end
|
|
837
|
+
end
|
|
838
|
+
end
|
|
839
|
+
end
|
|
840
|
+
|
|
841
|
+
# Recursively demongoize the given value. This method recursively traverses
|
|
842
|
+
# the class tree to find the correct field to use to demongoize the value.
|
|
843
|
+
#
|
|
844
|
+
# @param [ String ] field_name The name of the field to demongoize.
|
|
845
|
+
# @param [ Object ] value The value to demongoize.
|
|
846
|
+
# @param [ Boolean ] is_translation The field we are retrieving is an
|
|
847
|
+
# _translations field.
|
|
848
|
+
#
|
|
849
|
+
# @return [ Object ] The demongoized value.
|
|
850
|
+
def recursive_demongoize(field_name, value, is_translation)
|
|
851
|
+
k = klass
|
|
852
|
+
field_name.split('.').each do |meth|
|
|
853
|
+
if as = k.try(:aliased_associations)
|
|
854
|
+
if a = as.fetch(meth, nil)
|
|
855
|
+
meth = a.to_s
|
|
856
|
+
end
|
|
857
|
+
end
|
|
858
|
+
|
|
859
|
+
if relation = k.relations[meth]
|
|
860
|
+
k = relation.klass
|
|
861
|
+
elsif field = k.fields[meth]
|
|
862
|
+
# If it's a localized field that's not a hash, don't demongoize
|
|
863
|
+
# again, we already have the translation. If it's an _translation
|
|
864
|
+
# field, don't demongoize, we want the full hash not just a
|
|
865
|
+
# specific translation.
|
|
866
|
+
if field.localized? && (!value.is_a?(Hash) || is_translation)
|
|
867
|
+
return value.class.demongoize(value)
|
|
868
|
+
else
|
|
869
|
+
return field.demongoize(value)
|
|
870
|
+
end
|
|
871
|
+
else
|
|
872
|
+
return value.class.demongoize(value)
|
|
873
|
+
end
|
|
874
|
+
end
|
|
875
|
+
end
|
|
876
|
+
|
|
877
|
+
# Process the raw documents retrieved for #first/#last.
|
|
878
|
+
#
|
|
879
|
+
# @return [ Array<Document> | Document ] The list of documents or a
|
|
880
|
+
# single document.
|
|
881
|
+
def process_raw_docs(raw_docs, limit)
|
|
882
|
+
docs = raw_docs.map do |d|
|
|
883
|
+
Factory.from_db(klass, d, criteria)
|
|
884
|
+
end
|
|
885
|
+
docs = eager_load(docs)
|
|
886
|
+
limit ? docs : docs.first
|
|
887
|
+
end
|
|
742
888
|
end
|
|
743
889
|
end
|
|
744
890
|
end
|