mongoid 7.5.3 → 8.1.2
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 +3 -3
- data/README.md +6 -6
- data/Rakefile +25 -0
- data/lib/config/locales/en.yml +92 -43
- data/lib/mongoid/association/accessors.rb +40 -11
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +5 -3
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +34 -11
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +69 -45
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +8 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +45 -7
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +15 -4
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
- data/lib/mongoid/association/referenced/has_many/proxy.rb +29 -19
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +4 -4
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic.rb +7 -0
- data/lib/mongoid/attributes/dynamic.rb +4 -4
- data/lib/mongoid/attributes/nested.rb +6 -6
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +3 -3
- data/lib/mongoid/attributes.rb +51 -42
- data/lib/mongoid/changeable.rb +147 -14
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/storage_options.rb +2 -5
- data/lib/mongoid/clients/validators/storage.rb +3 -15
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +2 -0
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/options.rb +3 -0
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config/validators.rb +1 -0
- data/lib/mongoid/config.rb +140 -18
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +285 -58
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +517 -346
- data/lib/mongoid/contextual/none.rb +193 -20
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +14 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +8 -5
- data/lib/mongoid/criteria/includable.rb +27 -22
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -9
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +4 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
- data/lib/mongoid/criteria/queryable/optional.rb +11 -17
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +47 -38
- data/lib/mongoid/criteria/queryable/selector.rb +93 -8
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +20 -40
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +127 -35
- data/lib/mongoid/equality.rb +8 -8
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +6 -3
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +19 -8
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +10 -8
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +29 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +55 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +19 -4
- data/lib/mongoid/fields/standard.rb +17 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +129 -20
- data/lib/mongoid/findable.rb +54 -24
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +76 -15
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher/eq_impl.rb +1 -1
- data/lib/mongoid/matcher/type.rb +1 -1
- data/lib/mongoid/matcher.rb +33 -13
- data/lib/mongoid/persistable/creatable.rb +19 -9
- data/lib/mongoid/persistable/deletable.rb +2 -2
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +14 -2
- data/lib/mongoid/persistable/unsettable.rb +2 -2
- data/lib/mongoid/persistable/updatable.rb +69 -12
- data/lib/mongoid/persistable/upsertable.rb +21 -2
- data/lib/mongoid/persistable.rb +6 -3
- data/lib/mongoid/persistence_context.rb +6 -4
- data/lib/mongoid/query_cache.rb +13 -261
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +15 -13
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/stateful.rb +57 -10
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +20 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +42 -12
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +5 -4
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +5 -7
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +9 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +19 -4
- data/lib/mongoid.rb +17 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +10 -14
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +132 -1
- data/spec/integration/callbacks_spec.rb +360 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +118 -80
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -32
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +255 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -177
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +15 -1
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +510 -33
- data/spec/mongoid/changeable_spec.rb +429 -37
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +149 -15
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config_spec.rb +214 -31
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +850 -88
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +1572 -435
- data/spec/mongoid/contextual/none_spec.rb +60 -21
- data/spec/mongoid/copyable_spec.rb +453 -11
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
- data/spec/mongoid/criteria/queryable/selector_spec.rb +90 -5
- data/spec/mongoid/criteria/queryable/storable_spec.rb +72 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +1 -5
- data/spec/mongoid/criteria_spec.rb +469 -1205
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +639 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +80 -37
- data/spec/mongoid/fields_spec.rb +500 -84
- data/spec/mongoid/findable_spec.rb +450 -58
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +55 -30
- data/spec/mongoid/interceptable_spec.rb +599 -8
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +28 -8
- data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
- data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
- data/spec/mongoid/persistable/logical_spec.rb +37 -0
- data/spec/mongoid/persistable/poppable_spec.rb +36 -0
- data/spec/mongoid/persistable/pullable_spec.rb +72 -0
- data/spec/mongoid/persistable/pushable_spec.rb +72 -0
- data/spec/mongoid/persistable/renamable_spec.rb +36 -0
- data/spec/mongoid/persistable/savable_spec.rb +96 -0
- data/spec/mongoid/persistable/settable_spec.rb +37 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
- data/spec/mongoid/persistable/updatable_spec.rb +20 -28
- data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
- data/spec/mongoid/persistence_context_spec.rb +31 -57
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +56 -215
- data/spec/mongoid/reloadable_spec.rb +83 -6
- data/spec/mongoid/scopable_spec.rb +91 -1
- data/spec/mongoid/serializable_spec.rb +9 -30
- data/spec/mongoid/shardable_spec.rb +4 -4
- data/spec/mongoid/stateful_spec.rb +150 -8
- data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
- data/spec/mongoid/tasks/database_spec.rb +127 -0
- data/spec/mongoid/timestamps_spec.rb +392 -4
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +390 -2
- data/spec/mongoid/touchable_spec_models.rb +14 -8
- data/spec/mongoid/traversable_spec.rb +13 -35
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +34 -16
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/spec_helper.rb +5 -0
- data/spec/support/constraints.rb +24 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +78 -0
- data/spec/support/models/artist.rb +0 -1
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +4 -0
- data/spec/support/models/book.rb +1 -0
- data/spec/support/models/building.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/product.rb +1 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +0 -0
- metadata +718 -641
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
data/lib/mongoid/config.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "mongoid/config/defaults"
|
|
3
4
|
require "mongoid/config/environment"
|
|
4
5
|
require "mongoid/config/options"
|
|
5
6
|
require "mongoid/config/validators"
|
|
@@ -11,6 +12,7 @@ module Mongoid
|
|
|
11
12
|
module Config
|
|
12
13
|
extend Forwardable
|
|
13
14
|
extend Options
|
|
15
|
+
extend Defaults
|
|
14
16
|
extend self
|
|
15
17
|
|
|
16
18
|
def_delegators ::Mongoid, :logger, :logger=
|
|
@@ -70,57 +72,125 @@ module Mongoid
|
|
|
70
72
|
|
|
71
73
|
# Use ActiveSupport's time zone in time operations instead of the
|
|
72
74
|
# Ruby default time zone.
|
|
75
|
+
# @deprecated
|
|
73
76
|
option :use_activesupport_time_zone, default: true
|
|
74
77
|
|
|
75
78
|
# Return stored times as UTC.
|
|
76
79
|
option :use_utc, default: false
|
|
77
80
|
|
|
81
|
+
# Store BigDecimals as Decimal128s instead of strings in the db.
|
|
82
|
+
option :map_big_decimal_to_decimal128, default: true
|
|
83
|
+
|
|
78
84
|
# Update embedded documents correctly when setting it, unsetting it
|
|
79
85
|
# and resetting it. See MONGOID-5206 and MONGOID-5240 for more details.
|
|
80
|
-
option :broken_updates, default:
|
|
86
|
+
option :broken_updates, default: false
|
|
81
87
|
|
|
82
88
|
# Maintain legacy behavior of === on Mongoid documents, which returns
|
|
83
89
|
# true in a number of cases where Ruby's === implementation would
|
|
84
90
|
# return false.
|
|
85
|
-
option :legacy_triple_equals, default:
|
|
91
|
+
option :legacy_triple_equals, default: false
|
|
86
92
|
|
|
87
93
|
# When exiting a nested `with_scope' block, set the current scope to
|
|
88
94
|
# nil instead of the parent scope for backwards compatibility.
|
|
89
|
-
option :broken_scoping, default:
|
|
95
|
+
option :broken_scoping, default: false
|
|
90
96
|
|
|
91
97
|
# Maintain broken behavior of sum over empty result sets for backwards
|
|
92
98
|
# compatibility.
|
|
93
|
-
option :broken_aggregables, default:
|
|
99
|
+
option :broken_aggregables, default: false
|
|
94
100
|
|
|
95
101
|
# Ignore aliased fields in embedded documents when performing pluck and
|
|
96
102
|
# distinct operations, for backwards compatibility.
|
|
97
|
-
option :broken_alias_handling, default:
|
|
103
|
+
option :broken_alias_handling, default: false
|
|
98
104
|
|
|
99
105
|
# Maintain broken `and' behavior when using the same operator on the same
|
|
100
106
|
# field multiple times for backwards compatibility.
|
|
101
|
-
option :broken_and, default:
|
|
107
|
+
option :broken_and, default: false
|
|
102
108
|
|
|
103
109
|
# Use millisecond precision when comparing Time objects with the _matches?
|
|
104
110
|
# function.
|
|
105
|
-
option :compare_time_by_ms, default:
|
|
111
|
+
option :compare_time_by_ms, default: true
|
|
106
112
|
|
|
107
113
|
# Use bson-ruby's implementation of as_json for BSON::ObjectId instead of
|
|
108
114
|
# the one monkey-patched into Mongoid.
|
|
109
|
-
option :object_id_as_json_oid, default:
|
|
115
|
+
option :object_id_as_json_oid, default: false
|
|
110
116
|
|
|
111
117
|
# Maintain legacy behavior of pluck and distinct, which does not
|
|
112
118
|
# demongoize the values on returning them.
|
|
113
|
-
option :legacy_pluck_distinct, default:
|
|
119
|
+
option :legacy_pluck_distinct, default: false
|
|
114
120
|
|
|
115
121
|
# Combine chained operators, which use the same field and operator,
|
|
116
122
|
# using and's instead of overwriting them.
|
|
117
|
-
option :overwrite_chained_operators, default:
|
|
123
|
+
option :overwrite_chained_operators, default: false
|
|
118
124
|
|
|
119
125
|
# When this flag is true, the attributes method on a document will return
|
|
120
126
|
# a BSON::Document when that document is retrieved from the database, and
|
|
121
127
|
# a Hash otherwise. When this flag is false, the attributes method will
|
|
122
128
|
# always return a Hash.
|
|
123
|
-
option :legacy_attributes, default:
|
|
129
|
+
option :legacy_attributes, default: false
|
|
130
|
+
|
|
131
|
+
# Allow BSON::Decimal128 to be parsed and returned directly in
|
|
132
|
+
# field values. When BSON 5 is present and the this option is set to false
|
|
133
|
+
# (the default), BSON::Decimal128 values in the database will be returned
|
|
134
|
+
# as BigDecimal.
|
|
135
|
+
#
|
|
136
|
+
# @note this option only has effect when BSON 5+ is present. Otherwise,
|
|
137
|
+
# the setting is ignored.
|
|
138
|
+
option :allow_bson5_decimal128, default: false, on_change: -> (allow) do
|
|
139
|
+
if BSON::VERSION >= '5.0.0'
|
|
140
|
+
if allow
|
|
141
|
+
BSON::Registry.register(BSON::Decimal128::BSON_TYPE, BSON::Decimal128)
|
|
142
|
+
else
|
|
143
|
+
BSON::Registry.register(BSON::Decimal128::BSON_TYPE, BigDecimal)
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# Sets the async_query_executor for the application. By default the thread pool executor
|
|
149
|
+
# is set to `:immediate. Options are:
|
|
150
|
+
#
|
|
151
|
+
# - :immediate - Initializes a single +Concurrent::ImmediateExecutor+
|
|
152
|
+
# - :global_thread_pool - Initializes a single +Concurrent::ThreadPoolExecutor+
|
|
153
|
+
# that uses the +async_query_concurrency+ for the +max_threads+ value.
|
|
154
|
+
option :async_query_executor, default: :immediate
|
|
155
|
+
|
|
156
|
+
# Defines how many asynchronous queries can be executed concurrently.
|
|
157
|
+
# This option should be set only if `async_query_executor` is set
|
|
158
|
+
# to `:global_thread_pool`.
|
|
159
|
+
option :global_executor_concurrency, default: nil
|
|
160
|
+
|
|
161
|
+
# When this flag is false, a document will become read-only only once the
|
|
162
|
+
# #readonly! method is called, and an error will be raised on attempting
|
|
163
|
+
# to save or update such documents, instead of just on delete. When this
|
|
164
|
+
# flag is true, a document is only read-only if it has been projected
|
|
165
|
+
# using #only or #without, and read-only documents will not be
|
|
166
|
+
# deletable/destroyable, but they will be savable/updatable.
|
|
167
|
+
# When this feature flag is turned on, the read-only state will be reset on
|
|
168
|
+
# reload, but when it is turned off, it won't be.
|
|
169
|
+
option :legacy_readonly, default: true
|
|
170
|
+
|
|
171
|
+
# When this flag is true, any attempt to change the _id of a persisted
|
|
172
|
+
# document will raise an exception (`Errors::ImmutableAttribute`).
|
|
173
|
+
# This will be the default in 9.0. When this flag is false (the default
|
|
174
|
+
# in 8.x), changing the _id of a persisted document might be ignored,
|
|
175
|
+
# or it might work, depending on the situation.
|
|
176
|
+
option :immutable_ids, default: false
|
|
177
|
+
|
|
178
|
+
# When this flag is true, callbacks for every embedded document will be
|
|
179
|
+
# called only once, even if the embedded document is embedded in multiple
|
|
180
|
+
# documents in the root document's dependencies graph.
|
|
181
|
+
# This will be the default in 9.0. Setting this flag to false restores the
|
|
182
|
+
# pre-9.0 behavior, where callbacks are called for every occurrence of an
|
|
183
|
+
# embedded document. The pre-9.0 behavior leads to a problem that for multi
|
|
184
|
+
# level nested documents callbacks are called multiple times.
|
|
185
|
+
# See https://jira.mongodb.org/browse/MONGOID-5542
|
|
186
|
+
option :prevent_multiple_calls_of_embedded_callbacks, default: false
|
|
187
|
+
|
|
188
|
+
# Returns the Config singleton, for use in the configure DSL.
|
|
189
|
+
#
|
|
190
|
+
# @return [ self ] The Config singleton.
|
|
191
|
+
def config
|
|
192
|
+
self
|
|
193
|
+
end
|
|
124
194
|
|
|
125
195
|
# Has Mongoid been configured? This is checking that at least a valid
|
|
126
196
|
# client config exists.
|
|
@@ -128,7 +198,7 @@ module Mongoid
|
|
|
128
198
|
# @example Is Mongoid configured?
|
|
129
199
|
# config.configured?
|
|
130
200
|
#
|
|
131
|
-
# @return [ true
|
|
201
|
+
# @return [ true | false ] If Mongoid is configured.
|
|
132
202
|
def configured?
|
|
133
203
|
clients.key?(:default)
|
|
134
204
|
end
|
|
@@ -169,7 +239,7 @@ module Mongoid
|
|
|
169
239
|
# Mongoid.load!("/path/to/mongoid.yml")
|
|
170
240
|
#
|
|
171
241
|
# @param [ String ] path The path to the file.
|
|
172
|
-
# @param [ String
|
|
242
|
+
# @param [ String | Symbol ] environment The environment to load.
|
|
173
243
|
def load!(path, environment = nil)
|
|
174
244
|
settings = Environment.load_yaml(path, environment)
|
|
175
245
|
if settings.present?
|
|
@@ -203,6 +273,17 @@ module Mongoid
|
|
|
203
273
|
end
|
|
204
274
|
end
|
|
205
275
|
|
|
276
|
+
# Deregister a model in the application with Mongoid.
|
|
277
|
+
#
|
|
278
|
+
# @param [ Class ] klass The model to deregister.
|
|
279
|
+
#
|
|
280
|
+
# @api private
|
|
281
|
+
def deregister_model(klass)
|
|
282
|
+
LOCK.synchronize do
|
|
283
|
+
models.delete(klass)
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
|
|
206
287
|
# From a hash of settings, load all the configuration.
|
|
207
288
|
#
|
|
208
289
|
# @example Load the configuration.
|
|
@@ -213,6 +294,7 @@ module Mongoid
|
|
|
213
294
|
configuration = settings.with_indifferent_access
|
|
214
295
|
self.options = configuration[:options]
|
|
215
296
|
self.clients = configuration[:clients]
|
|
297
|
+
Mongo.options = configuration[:driver_options] || {}
|
|
216
298
|
set_log_levels
|
|
217
299
|
end
|
|
218
300
|
|
|
@@ -221,9 +303,9 @@ module Mongoid
|
|
|
221
303
|
# @example Override the database globally.
|
|
222
304
|
# config.override_database(:optional)
|
|
223
305
|
#
|
|
224
|
-
# @param [ String
|
|
306
|
+
# @param [ String | Symbol ] name The name of the database.
|
|
225
307
|
#
|
|
226
|
-
# @return [ String
|
|
308
|
+
# @return [ String | Symbol ] The global override.
|
|
227
309
|
def override_database(name)
|
|
228
310
|
Threaded.database_override = name
|
|
229
311
|
end
|
|
@@ -233,9 +315,9 @@ module Mongoid
|
|
|
233
315
|
# @example Override the client globally.
|
|
234
316
|
# config.override_client(:optional)
|
|
235
317
|
#
|
|
236
|
-
# @param [ String
|
|
318
|
+
# @param [ String | Symbol ] name The name of the client.
|
|
237
319
|
#
|
|
238
|
-
# @return [ String
|
|
320
|
+
# @return [ String | Symbol ] The global override.
|
|
239
321
|
def override_client(name)
|
|
240
322
|
Threaded.client_override = name ? name.to_s : nil
|
|
241
323
|
end
|
|
@@ -274,6 +356,7 @@ module Mongoid
|
|
|
274
356
|
# @param [ Hash ] options The configuration options.
|
|
275
357
|
def options=(options)
|
|
276
358
|
if options
|
|
359
|
+
Validators::AsyncQueryExecutor.validate(options)
|
|
277
360
|
options.each_pair do |option, value|
|
|
278
361
|
Validators::Option.validate(option)
|
|
279
362
|
send("#{option}=", value)
|
|
@@ -306,7 +389,7 @@ module Mongoid
|
|
|
306
389
|
# @example Is the application using passenger?
|
|
307
390
|
# config.running_with_passenger?
|
|
308
391
|
#
|
|
309
|
-
# @return [ true
|
|
392
|
+
# @return [ true | false ] If the app is deployed on Passenger.
|
|
310
393
|
def running_with_passenger?
|
|
311
394
|
@running_with_passenger ||= defined?(PhusionPassenger)
|
|
312
395
|
end
|
|
@@ -341,5 +424,44 @@ module Mongoid
|
|
|
341
424
|
client
|
|
342
425
|
end
|
|
343
426
|
end
|
|
427
|
+
|
|
428
|
+
module DeprecatedOptions
|
|
429
|
+
OPTIONS = %i[ use_activesupport_time_zone
|
|
430
|
+
broken_aggregables
|
|
431
|
+
broken_alias_handling
|
|
432
|
+
broken_and
|
|
433
|
+
broken_scoping
|
|
434
|
+
broken_updates
|
|
435
|
+
compare_time_by_ms
|
|
436
|
+
legacy_attributes
|
|
437
|
+
legacy_pluck_distinct
|
|
438
|
+
legacy_triple_equals
|
|
439
|
+
object_id_as_json_oid
|
|
440
|
+
overwrite_chained_operators ]
|
|
441
|
+
|
|
442
|
+
if RUBY_VERSION < '3.0'
|
|
443
|
+
def self.prepended(klass)
|
|
444
|
+
klass.class_eval do
|
|
445
|
+
OPTIONS.each do |option|
|
|
446
|
+
alias_method :"#{option}_without_deprecation=", :"#{option}="
|
|
447
|
+
|
|
448
|
+
define_method(:"#{option}=") do |value|
|
|
449
|
+
Mongoid::Warnings.send(:"warn_#{option}_deprecated")
|
|
450
|
+
send(:"#{option}_without_deprecation=", value)
|
|
451
|
+
end
|
|
452
|
+
end
|
|
453
|
+
end
|
|
454
|
+
end
|
|
455
|
+
else
|
|
456
|
+
OPTIONS.each do |option|
|
|
457
|
+
define_method(:"#{option}=") do |value|
|
|
458
|
+
Mongoid::Warnings.send(:"warn_#{option}_deprecated")
|
|
459
|
+
super(value)
|
|
460
|
+
end
|
|
461
|
+
end
|
|
462
|
+
end
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
prepend DeprecatedOptions
|
|
344
466
|
end
|
|
345
467
|
end
|
|
@@ -9,7 +9,7 @@ module Mongoid
|
|
|
9
9
|
# Get all the aggregate values for the provided field.
|
|
10
10
|
# Provided for interface consistency with Aggregable::Mongo.
|
|
11
11
|
#
|
|
12
|
-
# @param [ String
|
|
12
|
+
# @param [ String | Symbol ] field The field name.
|
|
13
13
|
#
|
|
14
14
|
# @return [ Hash ] A Hash containing the aggregate values.
|
|
15
15
|
# If no documents are present, then returned Hash will have
|
|
@@ -27,9 +27,13 @@ module Mongoid
|
|
|
27
27
|
#
|
|
28
28
|
# @param [ Symbol ] field The field to average.
|
|
29
29
|
#
|
|
30
|
-
# @return [
|
|
30
|
+
# @return [ Numeric ] The average.
|
|
31
31
|
def avg(field)
|
|
32
|
-
count
|
|
32
|
+
total = count { |doc| !doc.send(field).nil? }
|
|
33
|
+
return nil unless total > 0
|
|
34
|
+
|
|
35
|
+
total = total.to_f if total.is_a?(Integer)
|
|
36
|
+
sum(field) / total
|
|
33
37
|
end
|
|
34
38
|
|
|
35
39
|
# Get the max value of the provided field. If provided a block, will
|
|
@@ -46,10 +50,12 @@ module Mongoid
|
|
|
46
50
|
#
|
|
47
51
|
# @param [ Symbol ] field The field to max.
|
|
48
52
|
#
|
|
49
|
-
# @return [
|
|
53
|
+
# @return [ Numeric | Document ] The max value or document with the max
|
|
50
54
|
# value.
|
|
51
55
|
def max(field = nil)
|
|
52
|
-
|
|
56
|
+
return super() if block_given?
|
|
57
|
+
|
|
58
|
+
aggregate_by(field, :max)
|
|
53
59
|
end
|
|
54
60
|
|
|
55
61
|
# Get the min value of the provided field. If provided a block, will
|
|
@@ -66,10 +72,12 @@ module Mongoid
|
|
|
66
72
|
#
|
|
67
73
|
# @param [ Symbol ] field The field to min.
|
|
68
74
|
#
|
|
69
|
-
# @return [
|
|
75
|
+
# @return [ Numeric | Document ] The min value or document with the min
|
|
70
76
|
# value.
|
|
71
77
|
def min(field = nil)
|
|
72
|
-
|
|
78
|
+
return super() if block_given?
|
|
79
|
+
|
|
80
|
+
aggregate_by(field, :min)
|
|
73
81
|
end
|
|
74
82
|
|
|
75
83
|
# Get the sum value of the provided field. If provided a block, will
|
|
@@ -83,13 +91,11 @@ module Mongoid
|
|
|
83
91
|
#
|
|
84
92
|
# @param [ Symbol ] field The field to sum.
|
|
85
93
|
#
|
|
86
|
-
# @return [
|
|
94
|
+
# @return [ Numeric ] The sum value.
|
|
87
95
|
def sum(field = nil)
|
|
88
|
-
if block_given?
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
count > 0 ? super(0) { |doc| doc.public_send(field) } : 0
|
|
92
|
-
end
|
|
96
|
+
return super() if block_given?
|
|
97
|
+
|
|
98
|
+
aggregate_by(field, :sum) || 0
|
|
93
99
|
end
|
|
94
100
|
|
|
95
101
|
private
|
|
@@ -99,14 +105,16 @@ module Mongoid
|
|
|
99
105
|
# @api private
|
|
100
106
|
#
|
|
101
107
|
# @example Aggregate by the field and method.
|
|
102
|
-
# aggregable.aggregate_by(:
|
|
108
|
+
# aggregable.aggregate_by(:likes, :min_by)
|
|
103
109
|
#
|
|
104
110
|
# @param [ Symbol ] field The field to aggregate on.
|
|
105
111
|
# @param [ Symbol ] method The method (min_by or max_by).
|
|
106
112
|
#
|
|
107
|
-
# @return [
|
|
113
|
+
# @return [ Numeric | nil ] The aggregate.
|
|
108
114
|
def aggregate_by(field, method)
|
|
109
|
-
|
|
115
|
+
return nil unless any?
|
|
116
|
+
|
|
117
|
+
map { |doc| doc.public_send(field) }.compact.public_send(method)
|
|
110
118
|
end
|
|
111
119
|
end
|
|
112
120
|
end
|
|
@@ -20,13 +20,13 @@ module Mongoid
|
|
|
20
20
|
# # "avg" => 750.0
|
|
21
21
|
# # }
|
|
22
22
|
#
|
|
23
|
-
# @param [ String
|
|
23
|
+
# @param [ String | Symbol ] field The field name.
|
|
24
24
|
#
|
|
25
25
|
# @return [ Hash ] A Hash containing the aggregate values.
|
|
26
26
|
# If no documents are found, then returned Hash will have
|
|
27
27
|
# count, sum of 0 and max, min, avg of nil.
|
|
28
28
|
def aggregates(field)
|
|
29
|
-
result = collection.
|
|
29
|
+
result = collection.aggregate(pipeline(field), session: _session).to_a
|
|
30
30
|
if result.empty?
|
|
31
31
|
if Mongoid.broken_aggregables
|
|
32
32
|
{ "count" => 0, "sum" => nil, "avg" => nil, "min" => nil, "max" => nil }
|
|
@@ -64,7 +64,7 @@ module Mongoid
|
|
|
64
64
|
#
|
|
65
65
|
# @param [ Symbol ] field The field to max.
|
|
66
66
|
#
|
|
67
|
-
# @return [ Float
|
|
67
|
+
# @return [ Float | Document ] The max value or document with the max
|
|
68
68
|
# value.
|
|
69
69
|
def max(field = nil)
|
|
70
70
|
block_given? ? super() : aggregates(field)["max"]
|
|
@@ -84,7 +84,7 @@ module Mongoid
|
|
|
84
84
|
#
|
|
85
85
|
# @param [ Symbol ] field The field to min.
|
|
86
86
|
#
|
|
87
|
-
# @return [ Float
|
|
87
|
+
# @return [ Float | Document ] The min value or document with the min
|
|
88
88
|
# value.
|
|
89
89
|
def min(field = nil)
|
|
90
90
|
block_given? ? super() : aggregates(field)["min"]
|
|
@@ -115,7 +115,7 @@ module Mongoid
|
|
|
115
115
|
# @example Get the pipeline.
|
|
116
116
|
# aggregable.pipeline(:likes)
|
|
117
117
|
#
|
|
118
|
-
# @param [ String
|
|
118
|
+
# @param [ String | Symbol ] field The name of the field.
|
|
119
119
|
#
|
|
120
120
|
# @return [ Array ] The array of pipeline operators.
|
|
121
121
|
def pipeline(field)
|
|
@@ -11,7 +11,7 @@ module Mongoid
|
|
|
11
11
|
# Get all the aggregate values for the provided field in null context.
|
|
12
12
|
# Provided for interface consistency with Aggregable::Mongo.
|
|
13
13
|
#
|
|
14
|
-
# @param [ String
|
|
14
|
+
# @param [ String | Symbol ] _field The field name.
|
|
15
15
|
#
|
|
16
16
|
# @return [ Hash ] A Hash with count, sum of 0 and max, min, avg of nil.
|
|
17
17
|
def aggregates(_field)
|
|
@@ -150,7 +150,7 @@ module Mongoid
|
|
|
150
150
|
# @example Unset the field on the matches.
|
|
151
151
|
# context.unset(:name)
|
|
152
152
|
#
|
|
153
|
-
# @param [ String | Symbol | Array<String|Symbol> | Hash ] args
|
|
153
|
+
# @param [ [ String | Symbol | Array<String | Symbol> | Hash ]... ] *args
|
|
154
154
|
# The name(s) of the field(s) to unset.
|
|
155
155
|
# If a Hash is specified, its keys will be used irrespective of what
|
|
156
156
|
# each key's value is, even if the value is nil or false.
|
|
@@ -16,7 +16,7 @@ module Mongoid
|
|
|
16
16
|
# @example Get the average distance.
|
|
17
17
|
# geo_near.average_distance
|
|
18
18
|
#
|
|
19
|
-
# @return [ Float
|
|
19
|
+
# @return [ Float | nil ] The average distance.
|
|
20
20
|
def average_distance
|
|
21
21
|
average = stats["avgDistance"]
|
|
22
22
|
(average.nil? || average.nan?) ? nil : average
|
|
@@ -46,7 +46,7 @@ module Mongoid
|
|
|
46
46
|
# @example Provide the distance multiplier.
|
|
47
47
|
# geo_near.distance_multiplier(13113.1)
|
|
48
48
|
#
|
|
49
|
-
# @param [ Integer
|
|
49
|
+
# @param [ Integer | Float ] value The distance multiplier.
|
|
50
50
|
#
|
|
51
51
|
# @return [ GeoNear ] The GeoNear wrapper.
|
|
52
52
|
def distance_multiplier(value)
|
|
@@ -98,9 +98,9 @@ module Mongoid
|
|
|
98
98
|
# @example Get the max distance.
|
|
99
99
|
# geo_near.max_distance
|
|
100
100
|
#
|
|
101
|
-
# @param [ Integer
|
|
101
|
+
# @param [ Integer | Float ] value The maximum distance.
|
|
102
102
|
#
|
|
103
|
-
# @return [ GeoNear
|
|
103
|
+
# @return [ GeoNear | Float ] The GeoNear command or the value.
|
|
104
104
|
def max_distance(value = nil)
|
|
105
105
|
if value
|
|
106
106
|
command[:maxDistance] = value
|
|
@@ -115,7 +115,7 @@ module Mongoid
|
|
|
115
115
|
# @example Set the min distance.
|
|
116
116
|
# geo_near.min_distance(0.5)
|
|
117
117
|
#
|
|
118
|
-
# @param [ Integer
|
|
118
|
+
# @param [ Integer | Float ] value The minimum distance.
|
|
119
119
|
#
|
|
120
120
|
# @return [ GeoNear ] The GeoNear command.
|
|
121
121
|
def min_distance(value)
|
|
@@ -139,7 +139,7 @@ module Mongoid
|
|
|
139
139
|
# @example Set the unique flag.
|
|
140
140
|
# geo_near.unique(false)
|
|
141
141
|
#
|
|
142
|
-
# @param [ true
|
|
142
|
+
# @param [ true | false ] value Whether to return unique documents.
|
|
143
143
|
#
|
|
144
144
|
# @return [ GeoNear ] The command.
|
|
145
145
|
def unique(value = true)
|
|
@@ -211,7 +211,7 @@ module Mongoid
|
|
|
211
211
|
# @example Get the documents.
|
|
212
212
|
# geo_near.documents
|
|
213
213
|
#
|
|
214
|
-
# @return [ Array
|
|
214
|
+
# @return [ Array | Cursor ] The documents.
|
|
215
215
|
def documents
|
|
216
216
|
results["results"].map do |attributes|
|
|
217
217
|
doc = Factory.from_db(criteria.klass, attributes["obj"], criteria)
|
|
@@ -121,7 +121,7 @@ module Mongoid
|
|
|
121
121
|
# @return [ MapReduce ] The map/reduce object.
|
|
122
122
|
def out(location)
|
|
123
123
|
normalized = location.dup
|
|
124
|
-
normalized.
|
|
124
|
+
normalized.transform_values! do |value|
|
|
125
125
|
value.is_a?(::Symbol) ? value.to_s : value
|
|
126
126
|
end
|
|
127
127
|
@map_reduce = @map_reduce.out(normalized)
|
|
@@ -147,7 +147,7 @@ module Mongoid
|
|
|
147
147
|
def raw
|
|
148
148
|
validate_out!
|
|
149
149
|
cmd = command
|
|
150
|
-
opts = { read:
|
|
150
|
+
opts = { read: criteria.options.fetch(:read) } if criteria.options[:read]
|
|
151
151
|
@map_reduce.database.command(cmd, (opts || {}).merge(session: _session)).first
|
|
152
152
|
end
|
|
153
153
|
alias :results :raw
|