mongoid 7.5.0 → 8.0.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/README.md +3 -3
- data/lib/config/locales/en.yml +47 -30
- data/lib/mongoid/association/accessors.rb +38 -9
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +53 -13
- 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/proxy.rb +2 -2
- 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 +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +50 -28
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +23 -4
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +2 -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 +5 -5
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +14 -3
- 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 +66 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -28
- data/lib/mongoid/association/referenced/has_many/proxy.rb +24 -18
- 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 +2 -2
- 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/paths/embedded/many.rb +19 -0
- data/lib/mongoid/attributes/dynamic.rb +3 -3
- data/lib/mongoid/attributes/nested.rb +5 -5
- data/lib/mongoid/attributes/processing.rb +10 -3
- data/lib/mongoid/attributes/projector.rb +1 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/attributes.rb +43 -40
- data/lib/mongoid/changeable.rb +42 -7
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/validators/storage.rb +3 -3
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config.rb +27 -17
- 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 +59 -32
- data/lib/mongoid/contextual/mongo.rb +184 -256
- data/lib/mongoid/contextual/none.rb +34 -16
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +7 -4
- data/lib/mongoid/criteria/includable.rb +24 -20
- 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 +2 -15
- 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 +0 -16
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- 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 +3 -3
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -2
- 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 +3 -3
- data/lib/mongoid/criteria/queryable/optional.rb +5 -11
- 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 +5 -27
- data/lib/mongoid/criteria/queryable/selector.rb +92 -7
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria.rb +15 -37
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +98 -36
- data/lib/mongoid/equality.rb +12 -12
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- 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_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/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 +2 -2
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +29 -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 +4 -5
- data/lib/mongoid/extensions/hash.rb +13 -6
- data/lib/mongoid/extensions/integer.rb +4 -5
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +8 -6
- 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 +27 -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 +42 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +2 -2
- data/lib/mongoid/fields/standard.rb +7 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +57 -15
- data/lib/mongoid/findable.rb +28 -22
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +73 -13
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher.rb +12 -7
- data/lib/mongoid/persistable/creatable.rb +18 -9
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +2 -2
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +19 -12
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistable.rb +3 -3
- data/lib/mongoid/persistence_context.rb +22 -5
- data/lib/mongoid/query_cache.rb +8 -260
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +7 -3
- data/lib/mongoid/scopable.rb +17 -15
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/stateful.rb +35 -9
- data/lib/mongoid/tasks/database.rb +0 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +9 -9
- 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 +4 -3
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +6 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +3 -4
- data/lib/mongoid.rb +1 -0
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -12
- 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 +95 -1
- data/spec/integration/callbacks_spec.rb +226 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +115 -76
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +1 -15
- 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 +69 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +219 -8
- data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -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_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 +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +67 -4
- 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 +82 -13
- 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 +14 -0
- 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 +524 -27
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +32 -2
- data/spec/mongoid/config_spec.rb +58 -13
- 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 +521 -14
- data/spec/mongoid/contextual/mongo_spec.rb +564 -394
- data/spec/mongoid/contextual/none_spec.rb +11 -19
- data/spec/mongoid/copyable_spec.rb +451 -1
- 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/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 +0 -484
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
- data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
- data/spec/mongoid/criteria_spec.rb +469 -1201
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/equality_spec.rb +12 -12
- 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/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 +697 -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 +48 -76
- data/spec/mongoid/extensions/hash_spec.rb +30 -0
- data/spec/mongoid/extensions/integer_spec.rb +45 -66
- 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 +634 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields_spec.rb +321 -50
- data/spec/mongoid/findable_spec.rb +64 -29
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +39 -20
- data/spec/mongoid/interceptable_spec.rb +584 -5
- 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 +2 -2
- data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
- data/spec/mongoid/persistence_context_spec.rb +50 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +0 -154
- data/spec/mongoid/reloadable_spec.rb +35 -2
- data/spec/mongoid/scopable_spec.rb +54 -16
- data/spec/mongoid/shardable_spec.rb +14 -0
- data/spec/mongoid/stateful_spec.rb +28 -0
- data/spec/mongoid/timestamps_spec.rb +390 -0
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +116 -0
- data/spec/mongoid/touchable_spec_models.rb +12 -8
- data/spec/mongoid/traversable_spec.rb +4 -11
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
- data/spec/support/constraints.rb +24 -0
- data/spec/support/macros.rb +30 -0
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +3 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -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 +1 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -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 +49 -13
- 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/errors/eager_load_spec.rb +0 -31
@@ -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
|
@@ -25,7 +25,7 @@ module Mongoid
|
|
25
25
|
#
|
26
26
|
# @param [ Array ] other The other array.
|
27
27
|
#
|
28
|
-
# @return [ true
|
28
|
+
# @return [ true | false ] If the objects are equal.
|
29
29
|
def ==(other)
|
30
30
|
return false unless other.respond_to?(:entries)
|
31
31
|
entries == other.entries
|
@@ -74,7 +74,7 @@ module Mongoid
|
|
74
74
|
# @example Get the distinct values.
|
75
75
|
# context.distinct(:name)
|
76
76
|
#
|
77
|
-
# @param [ String
|
77
|
+
# @param [ String | Symbol ] field The name of the field.
|
78
78
|
#
|
79
79
|
# @return [ Array<Object> ] The distinct values for the field.
|
80
80
|
def distinct(field)
|
@@ -110,9 +110,9 @@ module Mongoid
|
|
110
110
|
# @example Do any documents exist for the context.
|
111
111
|
# context.exists?
|
112
112
|
#
|
113
|
-
# @return [ true
|
113
|
+
# @return [ true | false ] If the count is more than zero.
|
114
114
|
def exists?
|
115
|
-
|
115
|
+
any?
|
116
116
|
end
|
117
117
|
|
118
118
|
# Get the first document in the database for the criteria's selector.
|
@@ -120,15 +120,14 @@ module Mongoid
|
|
120
120
|
# @example Get the first document.
|
121
121
|
# context.first
|
122
122
|
#
|
123
|
-
# @param [ Integer
|
124
|
-
# return, or a hash of options.
|
123
|
+
# @param [ Integer ] limit The number of documents to return.
|
125
124
|
#
|
126
125
|
# @return [ Document ] The first document.
|
127
|
-
def first(
|
128
|
-
if
|
129
|
-
eager_load(
|
126
|
+
def first(limit = nil)
|
127
|
+
if limit
|
128
|
+
eager_load(documents.first(limit))
|
130
129
|
else
|
131
|
-
eager_load(documents.first
|
130
|
+
eager_load([documents.first]).first
|
132
131
|
end
|
133
132
|
end
|
134
133
|
alias :one :first
|
@@ -170,18 +169,14 @@ module Mongoid
|
|
170
169
|
# @example Get the last document.
|
171
170
|
# context.last
|
172
171
|
#
|
173
|
-
# @param [ Integer
|
174
|
-
# return, or a hash of options.
|
175
|
-
#
|
176
|
-
# @option limit_or_opts [ :none ] :id_sort This option is deprecated.
|
177
|
-
# Don't apply a sort on _id if no other sort is defined on the criteria.
|
172
|
+
# @param [ Integer ] limit The number of documents to return.
|
178
173
|
#
|
179
174
|
# @return [ Document ] The last document.
|
180
|
-
def last(
|
181
|
-
if
|
182
|
-
eager_load(
|
175
|
+
def last(limit = nil)
|
176
|
+
if limit
|
177
|
+
eager_load(documents.last(limit))
|
183
178
|
else
|
184
|
-
eager_load(documents.last
|
179
|
+
eager_load([documents.last]).first
|
185
180
|
end
|
186
181
|
end
|
187
182
|
|
@@ -236,28 +231,44 @@ module Mongoid
|
|
236
231
|
#
|
237
232
|
# @param [ Integer ] value The number of documents to return.
|
238
233
|
#
|
239
|
-
# @return [
|
234
|
+
# @return [ Memory ] The context.
|
240
235
|
def limit(value)
|
241
236
|
self.limiting = value
|
242
237
|
self
|
243
238
|
end
|
244
239
|
|
240
|
+
# Pluck the field values in memory.
|
241
|
+
#
|
242
|
+
# @example Get the values in memory.
|
243
|
+
# context.pluck(:name)
|
244
|
+
#
|
245
|
+
# @param [ String | Symbol ] *fields Field(s) to pluck.
|
246
|
+
#
|
247
|
+
# @return [ Array<Object> | Array<Array<Object>> ] The plucked values.
|
245
248
|
def pluck(*fields)
|
246
249
|
if Mongoid.legacy_pluck_distinct
|
247
250
|
documents.pluck(*fields)
|
248
251
|
else
|
249
|
-
documents.map do |
|
250
|
-
|
251
|
-
retrieve_value_at_path(d, fields.first)
|
252
|
-
else
|
253
|
-
fields.map do |field|
|
254
|
-
retrieve_value_at_path(d, field)
|
255
|
-
end
|
256
|
-
end
|
252
|
+
documents.map do |doc|
|
253
|
+
pluck_from_doc(doc, *fields)
|
257
254
|
end
|
258
255
|
end
|
259
256
|
end
|
260
257
|
|
258
|
+
# Pick the field values in memory.
|
259
|
+
#
|
260
|
+
# @example Get the values in memory.
|
261
|
+
# context.pick(:name)
|
262
|
+
#
|
263
|
+
# @param [ String | Symbol ] *fields Field(s) to pick.
|
264
|
+
#
|
265
|
+
# @return [ Object, Array<Object> ] The picked values.
|
266
|
+
def pick(*fields)
|
267
|
+
if doc = documents.first
|
268
|
+
pluck_from_doc(doc, *fields)
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
261
272
|
# Tally the field values in memory.
|
262
273
|
#
|
263
274
|
# @example Get the counts of values in memory.
|
@@ -281,7 +292,7 @@ module Mongoid
|
|
281
292
|
#
|
282
293
|
# @param [ Integer ] value The number of documents to skip.
|
283
294
|
#
|
284
|
-
# @return [
|
295
|
+
# @return [ Memory ] The context.
|
285
296
|
def skip(value)
|
286
297
|
self.skipping = value
|
287
298
|
self
|
@@ -295,7 +306,7 @@ module Mongoid
|
|
295
306
|
# @param [ Hash ] values The sorting values as field/direction(1/-1)
|
296
307
|
# pairs.
|
297
308
|
#
|
298
|
-
# @return [
|
309
|
+
# @return [ Memory ] The context.
|
299
310
|
def sort(values)
|
300
311
|
in_place_sort(values) and self
|
301
312
|
end
|
@@ -307,7 +318,7 @@ module Mongoid
|
|
307
318
|
#
|
308
319
|
# @param [ Hash ] attributes The new attributes for the document.
|
309
320
|
#
|
310
|
-
# @return [ nil
|
321
|
+
# @return [ nil | false ] False if no attributes were provided.
|
311
322
|
def update(attributes = nil)
|
312
323
|
update_documents(attributes, [ first ])
|
313
324
|
end
|
@@ -319,7 +330,7 @@ module Mongoid
|
|
319
330
|
#
|
320
331
|
# @param [ Hash ] attributes The new attributes for each document.
|
321
332
|
#
|
322
|
-
# @return [ nil
|
333
|
+
# @return [ nil | false ] False if no attributes were provided.
|
323
334
|
def update_all(attributes = nil)
|
324
335
|
update_documents(attributes, entries)
|
325
336
|
end
|
@@ -546,6 +557,22 @@ module Mongoid
|
|
546
557
|
retrieve_value_at_path(curr, remaining)
|
547
558
|
end
|
548
559
|
end
|
560
|
+
|
561
|
+
# Pluck the field values from the given document.
|
562
|
+
#
|
563
|
+
# @param [ Document ] doc The document to pluck from.
|
564
|
+
# @param [ String | Symbol ] *fields Field(s) to pluck.
|
565
|
+
#
|
566
|
+
# @return [ Object, Array<Object> ] The plucked values.
|
567
|
+
def pluck_from_doc(doc, *fields)
|
568
|
+
if fields.length == 1
|
569
|
+
retrieve_value_at_path(doc, fields.first)
|
570
|
+
else
|
571
|
+
fields.map do |field|
|
572
|
+
retrieve_value_at_path(doc, field)
|
573
|
+
end
|
574
|
+
end
|
575
|
+
end
|
549
576
|
end
|
550
577
|
end
|
551
578
|
end
|