mongoid 7.5.4 → 8.1.9
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
- data/CHANGELOG.md +3 -3
- data/README.md +6 -6
- data/Rakefile +44 -46
- data/lib/config/locales/en.yml +92 -43
- data/lib/mongoid/association/accessors.rb +44 -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 +32 -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 +85 -46
- 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 +40 -21
- 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 +16 -7
- 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 +11 -6
- 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 +153 -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 +540 -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 +15 -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 +48 -39
- 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/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +20 -40
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +135 -36
- data/lib/mongoid/equality.rb +9 -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 +38 -9
- 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 +142 -28
- 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 +187 -16
- 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 +48 -14
- 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 +17 -13
- 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 +9 -2
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +3 -4
- data/lib/mongoid/traversable.rb +41 -5
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +98 -17
- 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 +17 -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 +24 -19
- 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 +61 -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 +381 -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 +26 -3
- 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 +290 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -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 +19 -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 +215 -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/association_spec.rb +60 -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/readonly_spec.rb +19 -0
- data/spec/mongoid/attributes_spec.rb +526 -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 +2256 -1005
- 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 +107 -86
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
- 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 +59 -41
- data/spec/mongoid/equality_spec.rb +6 -0
- 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 +503 -87
- 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 +904 -22
- data/spec/mongoid/interceptable_spec_models.rb +189 -22
- 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 +25 -39
- 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/created_spec.rb +23 -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/associated_spec.rb +27 -34
- 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 +5 -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/lat_lng.rb +6 -0
- data/spec/support/models/name.rb +10 -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
- metadata +98 -96
- checksums.yaml.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/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -231
- data/spec/shared/lib/mrss/constraints.rb +0 -378
- data/spec/shared/lib/mrss/docker_runner.rb +0 -291
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
- data/spec/shared/lib/mrss/session_registry.rb +0 -69
- data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -15
- data/spec/shared/share/Dockerfile.erb +0 -325
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/config.sh +0 -27
- data/spec/shared/shlib/distro.sh +0 -74
- data/spec/shared/shlib/server.sh +0 -392
- data/spec/shared/shlib/set_env.sh +0 -169
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -3
@@ -13,7 +13,7 @@ module Mongoid
|
|
13
13
|
# @example Merge in another selector.
|
14
14
|
# selector.merge!(name: "test")
|
15
15
|
#
|
16
|
-
# @param [ Hash
|
16
|
+
# @param [ Hash | Selector ] other The object to merge in.
|
17
17
|
#
|
18
18
|
# @return [ Selector ] The selector.
|
19
19
|
def merge!(other)
|
@@ -43,7 +43,7 @@ module Mongoid
|
|
43
43
|
# @example Store a value in the selector.
|
44
44
|
# selector.store(:key, "testing")
|
45
45
|
#
|
46
|
-
# @param [ String
|
46
|
+
# @param [ String | Symbol ] key The name of the attribute.
|
47
47
|
# @param [ Object ] value The value to add.
|
48
48
|
#
|
49
49
|
# @return [ Object ] The stored object.
|
@@ -53,8 +53,7 @@ module Mongoid
|
|
53
53
|
store_name = name
|
54
54
|
store_value = evolve_multi(value)
|
55
55
|
else
|
56
|
-
store_name =
|
57
|
-
store_value = evolve(serializer, value)
|
56
|
+
store_name, store_value = store_creds(name, serializer, value)
|
58
57
|
end
|
59
58
|
super(store_name, store_value)
|
60
59
|
end
|
@@ -74,6 +73,24 @@ module Mongoid
|
|
74
73
|
|
75
74
|
private
|
76
75
|
|
76
|
+
# Get the store name and store value. If the value is of type range,
|
77
|
+
# we need may need to change the store_name as well as the store_value,
|
78
|
+
# therefore, we cannot just use the evole method.
|
79
|
+
#
|
80
|
+
# @param [ String ] name The name of the field.
|
81
|
+
# @param [ Object ] serializer The optional serializer for the field.
|
82
|
+
# @param [ Object ] value The value to serialize.
|
83
|
+
#
|
84
|
+
# @return [ Array<String, String> ] The store name and store value.
|
85
|
+
def store_creds(name, serializer, value)
|
86
|
+
store_name = localized_key(name, serializer)
|
87
|
+
if Range === value
|
88
|
+
evolve_range(store_name, serializer, value)
|
89
|
+
else
|
90
|
+
[ store_name, evolve(serializer, value) ]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
77
94
|
# Evolves a multi-list selection, like an $and or $or criterion, and
|
78
95
|
# performs the necessary serialization.
|
79
96
|
#
|
@@ -103,11 +120,10 @@ module Mongoid
|
|
103
120
|
# some reason, although per its documentation Smash supposedly
|
104
121
|
# owns both.
|
105
122
|
name, serializer = storage_pair(key)
|
106
|
-
final_key = localized_key(name, serializer)
|
107
123
|
# This performs type conversions on the value and transformations
|
108
124
|
# that depend on the type of the field that the value is stored
|
109
125
|
# in, but not transformations that have to do with query shape.
|
110
|
-
evolved_value =
|
126
|
+
final_key, evolved_value = store_creds(name, serializer, value)
|
111
127
|
|
112
128
|
# This builds a query shape around the value, when the query
|
113
129
|
# involves complex keys. For example, {:foo.lt => 5} produces
|
@@ -139,6 +155,8 @@ module Mongoid
|
|
139
155
|
evolve_hash(serializer, value)
|
140
156
|
when Array
|
141
157
|
evolve_array(serializer, value)
|
158
|
+
when Range
|
159
|
+
value.__evolve_range__(serializer: serializer)
|
142
160
|
else
|
143
161
|
(serializer || value.class).evolve(value)
|
144
162
|
end
|
@@ -182,6 +200,73 @@ module Mongoid
|
|
182
200
|
end
|
183
201
|
end
|
184
202
|
|
203
|
+
# Evolve a single key selection with range values. This method traverses
|
204
|
+
# the association tree to build a query for the given value and
|
205
|
+
# serializer. There are three parts to the query here:
|
206
|
+
#
|
207
|
+
# (1) "klass.child.gchild" => {
|
208
|
+
# "$elemMatch" => {
|
209
|
+
# (2) "ggchild.field" => (3) { "$gte" => 6, "$lte" => 10 }
|
210
|
+
# }
|
211
|
+
# }
|
212
|
+
# (1) The first n fields are dotted together until the last
|
213
|
+
# embeds_many or field of type array. In the above case, gchild
|
214
|
+
# would be an embeds_many or Array, and ggchild would be an
|
215
|
+
# embeds_one or a hash.
|
216
|
+
# (2) The last fields are used inside the $elemMatch. This one is
|
217
|
+
# actually optional, and will be ignored if the last field is an
|
218
|
+
# array or embeds_many. If the last field is an array (1), (2) and
|
219
|
+
# (3) will look like:
|
220
|
+
#
|
221
|
+
# "klass.child.gchild.ggchild.field" => {
|
222
|
+
# { "$elemMatch" => { "$gte" => 6, "$lte" => 10 } }
|
223
|
+
# }
|
224
|
+
#
|
225
|
+
# (3) This is calculated by:
|
226
|
+
#
|
227
|
+
# value.__evolve_range__(serializer: serializer).
|
228
|
+
#
|
229
|
+
# @api private
|
230
|
+
#
|
231
|
+
# @param [ String ] key The to store the range for.
|
232
|
+
# @param [ Object ] serializer The optional serializer for the field.
|
233
|
+
# @param [ Range ] value The Range to serialize.
|
234
|
+
#
|
235
|
+
# @return [ Array<String, Hash> ] The store name and serialized Range.
|
236
|
+
def evolve_range(key, serializer, value)
|
237
|
+
v = value.__evolve_range__(serializer: serializer)
|
238
|
+
assocs = []
|
239
|
+
Fields.traverse_association_tree(key, serializers, associations, aliased_associations) do |meth, obj, is_field|
|
240
|
+
assocs.push([meth, obj, is_field])
|
241
|
+
end
|
242
|
+
|
243
|
+
# Iterate backwards until you get a field with type
|
244
|
+
# Array or an embeds_many association.
|
245
|
+
inner_key = ""
|
246
|
+
loop do
|
247
|
+
# If there are no arrays or embeds_many associations, just return
|
248
|
+
# the key and value without $elemMatch.
|
249
|
+
return [ key, v ] if assocs.empty?
|
250
|
+
|
251
|
+
meth, obj, is_field = assocs.last
|
252
|
+
break if (is_field && obj.type == Array) || (!is_field && obj.is_a?(Association::Embedded::EmbedsMany))
|
253
|
+
|
254
|
+
assocs.pop
|
255
|
+
inner_key = "#{meth}.#{inner_key}"
|
256
|
+
end
|
257
|
+
|
258
|
+
# If the last array or embeds_many association is the last field,
|
259
|
+
# the inner key (2) is ignored, and the outer key (1) is the original
|
260
|
+
# key.
|
261
|
+
if inner_key.blank?
|
262
|
+
[ key, { "$elemMatch" => v }]
|
263
|
+
else
|
264
|
+
store_key = assocs.map(&:first).join('.')
|
265
|
+
store_value = { "$elemMatch" => { inner_key.chop => v } }
|
266
|
+
[ store_key, store_value ]
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
185
270
|
# Determines if the selection is a multi-select, like an $and or $or or $nor
|
186
271
|
# selection.
|
187
272
|
#
|
@@ -192,7 +277,7 @@ module Mongoid
|
|
192
277
|
#
|
193
278
|
# @param [ String ] key The key to check.
|
194
279
|
#
|
195
|
-
# @return [ true
|
280
|
+
# @return [ true | false ] If the key is for a multi-select.
|
196
281
|
def multi_selection?(key)
|
197
282
|
%w($and $or $nor).include?(key)
|
198
283
|
end
|
@@ -8,8 +8,16 @@ module Mongoid
|
|
8
8
|
class Smash < Hash
|
9
9
|
|
10
10
|
# @attribute [r] aliases The aliases.
|
11
|
+
attr_reader :aliases
|
12
|
+
|
11
13
|
# @attribute [r] serializers The serializers.
|
12
|
-
attr_reader :
|
14
|
+
attr_reader :serializers
|
15
|
+
|
16
|
+
# @attribute [r] associations The associations.
|
17
|
+
attr_reader :associations
|
18
|
+
|
19
|
+
# @attribute [r] aliased_associations The aliased_associations.
|
20
|
+
attr_reader :aliased_associations
|
13
21
|
|
14
22
|
# Perform a deep copy of the smash.
|
15
23
|
#
|
@@ -18,7 +26,7 @@ module Mongoid
|
|
18
26
|
#
|
19
27
|
# @return [ Smash ] The copied hash.
|
20
28
|
def __deep_copy__
|
21
|
-
self.class.new(aliases, serializers) do |copy|
|
29
|
+
self.class.new(aliases, serializers, associations, aliased_associations) do |copy|
|
22
30
|
each_pair do |key, value|
|
23
31
|
copy.store(key, value.__deep_copy__)
|
24
32
|
end
|
@@ -36,8 +44,15 @@ module Mongoid
|
|
36
44
|
# responsible for serializing values. The keys of the hash must be
|
37
45
|
# strings that match the field name, and the values must respond to
|
38
46
|
# #localized? and #evolve(object).
|
39
|
-
|
40
|
-
|
47
|
+
# @param [ Hash ] associations An optional hash of names to association
|
48
|
+
# objects.
|
49
|
+
# @param [ Hash ] aliased_associations An optional hash of mappings from
|
50
|
+
# aliases for associations to their actual field names in the database.
|
51
|
+
def initialize(aliases = {}, serializers = {}, associations = {}, aliased_associations = {})
|
52
|
+
@aliases = aliases
|
53
|
+
@serializers = serializers
|
54
|
+
@associations = associations
|
55
|
+
@aliased_associations = aliased_associations
|
41
56
|
yield(self) if block_given?
|
42
57
|
end
|
43
58
|
|
@@ -80,14 +95,32 @@ module Mongoid
|
|
80
95
|
# @example Get the name and serializer.
|
81
96
|
# smash.storage_pair("id")
|
82
97
|
#
|
83
|
-
# @param [ Symbol
|
98
|
+
# @param [ Symbol | String ] key The key provided to the selection.
|
84
99
|
#
|
85
100
|
# @return [ Array<String, Object> ] The name of the db field and
|
86
101
|
# serializer.
|
87
102
|
def storage_pair(key)
|
88
103
|
field = key.to_s
|
89
|
-
name =
|
90
|
-
[ name,
|
104
|
+
name = Fields.database_field_name(field, associations, aliases, aliased_associations)
|
105
|
+
[ name, get_serializer(name) ]
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
# Retrieves the serializer for the given name. If the name exists in
|
111
|
+
# the serializers hash then return that immediately, otherwise
|
112
|
+
# recursively look through the associations and find the appropriate
|
113
|
+
# field.
|
114
|
+
#
|
115
|
+
# @param [ String ] name The name of the db field.
|
116
|
+
#
|
117
|
+
# @return [ Object ] The serializer.
|
118
|
+
def get_serializer(name)
|
119
|
+
if s = serializers[name]
|
120
|
+
s
|
121
|
+
else
|
122
|
+
Fields.traverse_association_tree(name, serializers, associations, aliased_associations)
|
123
|
+
end
|
91
124
|
end
|
92
125
|
end
|
93
126
|
end
|
@@ -33,9 +33,10 @@ module Mongoid
|
|
33
33
|
include Optional
|
34
34
|
|
35
35
|
# @attribute [r] aliases The aliases.
|
36
|
-
|
36
|
+
attr_reader :aliases
|
37
|
+
|
37
38
|
# @attribute [r] serializers The serializers.
|
38
|
-
attr_reader :
|
39
|
+
attr_reader :serializers
|
39
40
|
|
40
41
|
# Is this queryable equal to another object? Is true if the selector and
|
41
42
|
# options are equal.
|
@@ -45,7 +46,7 @@ module Mongoid
|
|
45
46
|
#
|
46
47
|
# @param [ Object ] other The object to compare against.
|
47
48
|
#
|
48
|
-
# @return [ true
|
49
|
+
# @return [ true | false ] If the objects are equal.
|
49
50
|
def ==(other)
|
50
51
|
return false unless other.is_a?(Queryable)
|
51
52
|
selector == other.selector && options == other.options
|
@@ -59,11 +60,15 @@ module Mongoid
|
|
59
60
|
#
|
60
61
|
# @param [ Hash ] aliases The optional field aliases.
|
61
62
|
# @param [ Hash ] serializers The optional field serializers.
|
63
|
+
# @param [ Hash ] associations The optional associations.
|
64
|
+
# @param [ Hash ] aliased_associations The optional aliased associations.
|
62
65
|
# @param [ Symbol ] driver The driver being used.
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
@
|
66
|
+
#
|
67
|
+
# @api private
|
68
|
+
def initialize(aliases = {}, serializers = {}, associations = {}, aliased_associations = {})
|
69
|
+
@aliases, @serializers = aliases, serializers
|
70
|
+
@options = Options.new(aliases, serializers, associations, aliased_associations)
|
71
|
+
@selector = Selector.new(aliases, serializers, associations, aliased_associations)
|
67
72
|
@pipeline = Pipeline.new(aliases)
|
68
73
|
@aggregating = nil
|
69
74
|
yield(self) if block_given?
|
@@ -83,7 +83,7 @@ module Mongoid
|
|
83
83
|
# @example Is the default scope applied?
|
84
84
|
# criteria.scoped?
|
85
85
|
#
|
86
|
-
# @return [ true
|
86
|
+
# @return [ true | false ] If the default scope is applied.
|
87
87
|
def scoped?
|
88
88
|
!!(defined?(@scoped) ? @scoped : nil)
|
89
89
|
end
|
@@ -108,7 +108,7 @@ module Mongoid
|
|
108
108
|
# @example Is the criteria unscoped?
|
109
109
|
# criteria.unscoped?
|
110
110
|
#
|
111
|
-
# @return [ true
|
111
|
+
# @return [ true | false ] If the criteria is force unscoped.
|
112
112
|
def unscoped?
|
113
113
|
!!(defined?(@unscoped) ? @unscoped : nil)
|
114
114
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
class Criteria
|
5
|
+
|
6
|
+
# This is a helper module for translating atomic and composite
|
7
|
+
# Ruby values into corresponding query and option components.
|
8
|
+
# Originally implemented as patches to core classes, that approach
|
9
|
+
# has generally fallen into disfavor, as it bleeds too much into
|
10
|
+
# the public namespace.
|
11
|
+
#
|
12
|
+
# @api private
|
13
|
+
module Translator
|
14
|
+
extend self
|
15
|
+
|
16
|
+
# Converts the given value to a direction specification for use in
|
17
|
+
# sorting.
|
18
|
+
#
|
19
|
+
# @example Convert the value to a direction.
|
20
|
+
# Translator.to_direction(:desc)
|
21
|
+
# Translator.to_direction("1")
|
22
|
+
# Translator.to_direction(-1)
|
23
|
+
# Translator.to_direction(score: { "$meta": "textScore" })
|
24
|
+
#
|
25
|
+
# @param [ Hash | Numeric | String | Symbol ] value The value to convert.
|
26
|
+
#
|
27
|
+
# @return [ Hash | Numeric ] The direction.
|
28
|
+
def to_direction(value)
|
29
|
+
case value
|
30
|
+
when Hash then
|
31
|
+
value
|
32
|
+
when Numeric then
|
33
|
+
value
|
34
|
+
when String then
|
35
|
+
value =~ /desc/i ? -1 : 1
|
36
|
+
when Symbol then
|
37
|
+
to_direction(value.to_s)
|
38
|
+
else
|
39
|
+
raise ArgumentError, "cannot translate #{value.inspect} (#{value.class}) to a direction specification"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
data/lib/mongoid/criteria.rb
CHANGED
@@ -8,6 +8,7 @@ require "mongoid/criteria/modifiable"
|
|
8
8
|
require "mongoid/criteria/queryable"
|
9
9
|
require "mongoid/criteria/scopable"
|
10
10
|
require "mongoid/criteria/options"
|
11
|
+
require "mongoid/criteria/translator"
|
11
12
|
|
12
13
|
module Mongoid
|
13
14
|
|
@@ -52,7 +53,7 @@ module Mongoid
|
|
52
53
|
#
|
53
54
|
# @param [ Object ] other The other +Enumerable+ or +Criteria+ to compare to.
|
54
55
|
#
|
55
|
-
# @return [ true
|
56
|
+
# @return [ true | false ] If the objects are equal.
|
56
57
|
def ==(other)
|
57
58
|
return super if other.respond_to?(:selector)
|
58
59
|
entries == other
|
@@ -73,6 +74,9 @@ module Mongoid
|
|
73
74
|
# treated by Mongoid - the decision between delegating to +Findable+ vs
|
74
75
|
# +Enumerable+ is made solely based on whether +find+ is passed a block.
|
75
76
|
#
|
77
|
+
# @note Each argument can be an individual id, an array of ids or
|
78
|
+
# a nested array. Each array will be flattened.
|
79
|
+
#
|
76
80
|
# @example Finds a document by its _id, invokes Findable#find.
|
77
81
|
# critera.find("1234")
|
78
82
|
#
|
@@ -85,6 +89,9 @@ module Mongoid
|
|
85
89
|
# @example Tries to find a document whose _id is the stringification of the provided Proc, typically failing.
|
86
90
|
# enumerator = criteria.find(-> { "Default Band" })
|
87
91
|
#
|
92
|
+
# @param [ [ Object | Array<Object> ]... ] *args The id(s).
|
93
|
+
# @param [ Proc ] block Optional block to pass.
|
94
|
+
#
|
88
95
|
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
89
96
|
#
|
90
97
|
# @raise Errors::DocumentNotFound If the parameters were _id values and
|
@@ -112,33 +119,6 @@ module Mongoid
|
|
112
119
|
entries.as_json(options)
|
113
120
|
end
|
114
121
|
|
115
|
-
# Tells the criteria that the cursor that gets returned needs to be
|
116
|
-
# cached. This is so multiple iterations don't hit the database multiple
|
117
|
-
# times, however this is not advisable when working with large data sets
|
118
|
-
# as the entire results will get stored in memory.
|
119
|
-
#
|
120
|
-
# @example Flag the criteria as cached.
|
121
|
-
# criteria.cache
|
122
|
-
#
|
123
|
-
# @return [ Criteria ] The cloned criteria.
|
124
|
-
def cache
|
125
|
-
Mongoid::Warnings.warn_criteria_cache_deprecated
|
126
|
-
crit = clone
|
127
|
-
crit.options.merge!(cache: true)
|
128
|
-
crit
|
129
|
-
end
|
130
|
-
|
131
|
-
# Will return true if the cache option has been set.
|
132
|
-
#
|
133
|
-
# @example Is the criteria cached?
|
134
|
-
# criteria.cached?
|
135
|
-
#
|
136
|
-
# @return [ true, false ] If the criteria is flagged as cached.
|
137
|
-
def cached?
|
138
|
-
Mongoid::Warnings.warn_criteria_cache_deprecated
|
139
|
-
options[:cache] == true
|
140
|
-
end
|
141
|
-
|
142
122
|
# Get the documents from the embedded criteria.
|
143
123
|
#
|
144
124
|
# @example Get the documents.
|
@@ -165,7 +145,7 @@ module Mongoid
|
|
165
145
|
# @example Is the criteria for embedded documents?
|
166
146
|
# criteria.embedded?
|
167
147
|
#
|
168
|
-
# @return [ true
|
148
|
+
# @return [ true | false ] If the criteria is embedded.
|
169
149
|
def embedded?
|
170
150
|
!!@embedded
|
171
151
|
end
|
@@ -232,7 +212,7 @@ module Mongoid
|
|
232
212
|
@klass = klass
|
233
213
|
@embedded = nil
|
234
214
|
@none = nil
|
235
|
-
klass ? super(klass.aliased_fields, klass.fields) : super({}, {})
|
215
|
+
klass ? super(klass.aliased_fields, klass.fields, klass.relations, klass.aliased_associations) : super({}, {}, {}, {})
|
236
216
|
end
|
237
217
|
|
238
218
|
# Merges another object with this +Criteria+ and returns a new criteria.
|
@@ -295,7 +275,7 @@ module Mongoid
|
|
295
275
|
# @example Is the criteria a none criteria?
|
296
276
|
# criteria.empty_and_chainable?
|
297
277
|
#
|
298
|
-
# @return [ true
|
278
|
+
# @return [ true | false ] If the criteria is a none.
|
299
279
|
def empty_and_chainable?
|
300
280
|
!!@none
|
301
281
|
end
|
@@ -305,7 +285,7 @@ module Mongoid
|
|
305
285
|
# @example Limit the fields returned from the database.
|
306
286
|
# Band.only(:name)
|
307
287
|
#
|
308
|
-
# @param [ Array<Symbol> ] args The
|
288
|
+
# @param [ [ Symbol | Array<Symbol> ]... ] *args The field name(s).
|
309
289
|
#
|
310
290
|
# @return [ Criteria ] The cloned criteria.
|
311
291
|
def only(*args)
|
@@ -339,7 +319,7 @@ module Mongoid
|
|
339
319
|
# @example Exclude fields returned from the database.
|
340
320
|
# Band.without(:name)
|
341
321
|
#
|
342
|
-
# @param [
|
322
|
+
# @param [ Symbol... ] *args The field name(s).
|
343
323
|
#
|
344
324
|
# @return [ Criteria ] The cloned criteria.
|
345
325
|
def without(*args)
|
@@ -353,9 +333,9 @@ module Mongoid
|
|
353
333
|
# crtiteria.respond_to?(:each)
|
354
334
|
#
|
355
335
|
# @param [ Symbol ] name The name of the class method on the +Document+.
|
356
|
-
# @param [ true
|
336
|
+
# @param [ true | false ] include_private Whether to include privates.
|
357
337
|
#
|
358
|
-
# @return [ true
|
338
|
+
# @return [ true | false ] If the criteria responds to the method.
|
359
339
|
def respond_to?(name, include_private = false)
|
360
340
|
super || klass.respond_to?(name) || CHECK.respond_to?(name, include_private)
|
361
341
|
end
|
@@ -406,7 +386,8 @@ module Mongoid
|
|
406
386
|
# @example Add a javascript selection.
|
407
387
|
# criteria.where("this.name == 'syd'")
|
408
388
|
#
|
409
|
-
# @param [
|
389
|
+
# @param [ [ Hash | String ]... ] *args The standard selection
|
390
|
+
# or javascript string.
|
410
391
|
#
|
411
392
|
# @raise [ UnsupportedJavascript ] If provided a string and the criteria
|
412
393
|
# is embedded.
|
@@ -432,7 +413,6 @@ module Mongoid
|
|
432
413
|
super
|
433
414
|
end
|
434
415
|
|
435
|
-
|
436
416
|
# Get a version of this criteria without the options.
|
437
417
|
#
|
438
418
|
# @example Get the criteria without options.
|
@@ -517,7 +497,7 @@ module Mongoid
|
|
517
497
|
# criteria.method_missing(:name)
|
518
498
|
#
|
519
499
|
# @param [ Symbol ] name The method name.
|
520
|
-
# @param [
|
500
|
+
# @param [ Object... ] *args The arguments.
|
521
501
|
#
|
522
502
|
# @return [ Object ] The result of the method call.
|
523
503
|
ruby2_keywords def method_missing(name, *args, &block)
|
@@ -538,7 +518,7 @@ module Mongoid
|
|
538
518
|
# @example Add the type selection.
|
539
519
|
# criteria.merge_type_selection
|
540
520
|
#
|
541
|
-
# @return [ true
|
521
|
+
# @return [ true | false ] If type selection was added.
|
542
522
|
def merge_type_selection
|
543
523
|
selector.merge!(type_selection) if type_selectable?
|
544
524
|
end
|
@@ -550,7 +530,7 @@ module Mongoid
|
|
550
530
|
# @example If the criteria type selectable?
|
551
531
|
# criteria.type_selectable?
|
552
532
|
#
|
553
|
-
# @return [ true
|
533
|
+
# @return [ true | false ] If type selection should be added.
|
554
534
|
def type_selectable?
|
555
535
|
klass.hereditary? &&
|
556
536
|
!selector.keys.include?(self.discriminator_key) &&
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "mongoid/deprecation"
|
4
|
+
|
5
|
+
module Mongoid
|
6
|
+
|
7
|
+
# Adds ability to declare Mongoid-specific deprecations.
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
module Deprecable
|
11
|
+
|
12
|
+
# Declares method(s) as deprecated.
|
13
|
+
#
|
14
|
+
# @example Deprecate a method.
|
15
|
+
# Mongoid.deprecate(Cat, :meow); Cat.new.meow
|
16
|
+
# #=> Mongoid.logger.warn("meow is deprecated and will be removed from Mongoid 8.0")
|
17
|
+
#
|
18
|
+
# @example Deprecate a method and declare the replacement method.
|
19
|
+
# Mongoid.deprecate(Cat, meow: :speak); Cat.new.meow
|
20
|
+
# #=> Mongoid.logger.warn("meow is deprecated and will be removed from Mongoid 8.0 (use speak instead)")
|
21
|
+
#
|
22
|
+
# @example Deprecate a method and give replacement instructions.
|
23
|
+
# Mongoid.deprecate(Cat, meow: 'eat :catnip instead'); Cat.new.meow
|
24
|
+
# #=> Mongoid.logger.warn("meow is deprecated and will be removed from Mongoid 8.0 (eat :catnip instead)")
|
25
|
+
#
|
26
|
+
# @param [ Module ] target_module The parent which contains the method.
|
27
|
+
# @param [ [ Symbol | Hash<Symbol, [ Symbol | String ]> ]... ] *method_descriptors
|
28
|
+
# The methods to deprecate, with optional replacement instructions.
|
29
|
+
def deprecate(target_module, *method_descriptors)
|
30
|
+
@_deprecator ||= Mongoid::Deprecation.new
|
31
|
+
@_deprecator.deprecate_methods(target_module, *method_descriptors)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Ensure Mongoid.deprecate can be used during initialization
|
37
|
+
Mongoid.extend(Mongoid::Deprecable)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
|
5
|
+
# Utility class for logging deprecation warnings.
|
6
|
+
class Deprecation < ::ActiveSupport::Deprecation
|
7
|
+
|
8
|
+
@gem_name = 'Mongoid'
|
9
|
+
|
10
|
+
# Per change policy, deprecations will be removed in the next major version.
|
11
|
+
@deprecation_horizon = "#{Mongoid::VERSION.split('.').first.to_i + 1}.0".freeze
|
12
|
+
|
13
|
+
# Overrides default ActiveSupport::Deprecation behavior
|
14
|
+
# to use Mongoid's logger.
|
15
|
+
#
|
16
|
+
# @return Array<Proc> The deprecation behavior.
|
17
|
+
def behavior
|
18
|
+
@behavior ||= Array(->(*args) {
|
19
|
+
logger = Mongoid.logger
|
20
|
+
logger.warn(args[0])
|
21
|
+
logger.debug(args[1].join("\n ")) if debug
|
22
|
+
})
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|