mongoid 7.5.4 → 8.1.7
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 +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 +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 +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 +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 +47 -38
- 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 +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 +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 +186 -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 +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +3 -4
- data/lib/mongoid/traversable.rb +10 -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 +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 +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/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 +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 +78 -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 +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 +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 +824 -22
- 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 +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_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 +101 -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
@@ -42,8 +42,10 @@ describe Mongoid::Persistable::Upsertable do
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
let(:options) { {} }
|
46
|
+
|
45
47
|
before do
|
46
|
-
updated.upsert
|
48
|
+
updated.upsert(options)
|
47
49
|
end
|
48
50
|
|
49
51
|
it "updates the existing document" do
|
@@ -53,6 +55,47 @@ describe Mongoid::Persistable::Upsertable do
|
|
53
55
|
it "flags the document as persisted" do
|
54
56
|
expect(existing).to be_persisted
|
55
57
|
end
|
58
|
+
|
59
|
+
shared_examples "replaces the existing fields" do
|
60
|
+
it 'replaces the existing fields' do
|
61
|
+
Band.count.should == 1
|
62
|
+
|
63
|
+
existing.reload
|
64
|
+
existing.views.should be nil
|
65
|
+
existing.name.should == 'Tool'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
shared_examples "retains the existing fields" do
|
70
|
+
it 'retains the existing fields' do
|
71
|
+
Band.count.should == 1
|
72
|
+
|
73
|
+
existing.reload
|
74
|
+
existing.views.should eq(42)
|
75
|
+
existing.name.should == 'Tool'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'when existing document contains other fields' do
|
80
|
+
let!(:existing) do
|
81
|
+
Band.create!(name: "Photek", views: 42)
|
82
|
+
end
|
83
|
+
|
84
|
+
context "when not passing any options" do
|
85
|
+
let(:options) { {} }
|
86
|
+
it_behaves_like "replaces the existing fields"
|
87
|
+
end
|
88
|
+
|
89
|
+
context "when passing replace: false" do
|
90
|
+
let(:options) { { replace: false } }
|
91
|
+
it_behaves_like "retains the existing fields"
|
92
|
+
end
|
93
|
+
|
94
|
+
context "when passing replace: true" do
|
95
|
+
let(:options) { { replace: true } }
|
96
|
+
it_behaves_like "replaces the existing fields"
|
97
|
+
end
|
98
|
+
end
|
56
99
|
end
|
57
100
|
|
58
101
|
context "when no matching document exists in the db" do
|
@@ -104,5 +147,50 @@ describe Mongoid::Persistable::Upsertable do
|
|
104
147
|
end
|
105
148
|
end
|
106
149
|
end
|
150
|
+
|
151
|
+
context "when the document is readonly" do
|
152
|
+
|
153
|
+
context "when legacy_readonly is true" do
|
154
|
+
config_override :legacy_readonly, true
|
155
|
+
|
156
|
+
let!(:existing) do
|
157
|
+
Band.create!(name: "Photek")
|
158
|
+
end
|
159
|
+
|
160
|
+
before do
|
161
|
+
existing.name = "Depeche Mode"
|
162
|
+
end
|
163
|
+
|
164
|
+
let!(:upsert) do
|
165
|
+
existing.upsert
|
166
|
+
end
|
167
|
+
|
168
|
+
it "updates the existing document" do
|
169
|
+
expect(existing.reload.name).to eq("Depeche Mode")
|
170
|
+
end
|
171
|
+
|
172
|
+
it "returns true" do
|
173
|
+
expect(upsert).to be true
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
context "when legacy_readonly is false" do
|
178
|
+
config_override :legacy_readonly, false
|
179
|
+
|
180
|
+
let!(:existing) do
|
181
|
+
Band.create!(name: "Photek").tap(&:readonly!)
|
182
|
+
end
|
183
|
+
|
184
|
+
before do
|
185
|
+
existing.name = "Depeche Mode"
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'raises a ReadonlyDocument error' do
|
189
|
+
expect do
|
190
|
+
existing.upsert
|
191
|
+
end.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
107
195
|
end
|
108
196
|
end
|
@@ -411,19 +411,12 @@ describe Mongoid::PersistenceContext do
|
|
411
411
|
end
|
412
412
|
|
413
413
|
context 'when there is a database override' do
|
414
|
+
persistence_context_override :database, :other
|
414
415
|
|
415
416
|
before do
|
416
417
|
object.store_in database: :musique
|
417
418
|
end
|
418
419
|
|
419
|
-
before do
|
420
|
-
Mongoid::Threaded.database_override = :other
|
421
|
-
end
|
422
|
-
|
423
|
-
after do
|
424
|
-
Mongoid::Threaded.database_override = nil
|
425
|
-
end
|
426
|
-
|
427
420
|
it 'uses the override' do
|
428
421
|
expect(persistence_context.database_name).to eq(:other)
|
429
422
|
end
|
@@ -458,14 +451,7 @@ describe Mongoid::PersistenceContext do
|
|
458
451
|
end
|
459
452
|
|
460
453
|
context 'when there is a database override' do
|
461
|
-
|
462
|
-
before do
|
463
|
-
Mongoid::Threaded.database_override = :other
|
464
|
-
end
|
465
|
-
|
466
|
-
after do
|
467
|
-
Mongoid::Threaded.database_override = nil
|
468
|
-
end
|
454
|
+
persistence_context_override :database, :other
|
469
455
|
|
470
456
|
it 'uses the persistence context options' do
|
471
457
|
expect(persistence_context.database_name).to eq(:musique)
|
@@ -517,14 +503,7 @@ describe Mongoid::PersistenceContext do
|
|
517
503
|
end
|
518
504
|
|
519
505
|
context 'when there is a database override' do
|
520
|
-
|
521
|
-
before do
|
522
|
-
Mongoid::Threaded.database_override = :other
|
523
|
-
end
|
524
|
-
|
525
|
-
after do
|
526
|
-
Mongoid::Threaded.database_override = nil
|
527
|
-
end
|
506
|
+
persistence_context_override :database, :other
|
528
507
|
|
529
508
|
it 'uses the persistence context options' do
|
530
509
|
expect(persistence_context.database_name).to eq(:musique)
|
@@ -535,14 +514,7 @@ describe Mongoid::PersistenceContext do
|
|
535
514
|
context 'when there are no options passed to the Persistence Context' do
|
536
515
|
|
537
516
|
context 'when there is a database override' do
|
538
|
-
|
539
|
-
before do
|
540
|
-
Mongoid::Threaded.database_override = :other
|
541
|
-
end
|
542
|
-
|
543
|
-
after do
|
544
|
-
Mongoid::Threaded.database_override = nil
|
545
|
-
end
|
517
|
+
persistence_context_override :database, :other
|
546
518
|
|
547
519
|
it 'uses the database override options' do
|
548
520
|
expect(persistence_context.database_name).to eq(Mongoid::Threaded.database_override)
|
@@ -585,15 +557,7 @@ describe Mongoid::PersistenceContext do
|
|
585
557
|
end
|
586
558
|
|
587
559
|
context 'when there is a client override' do
|
588
|
-
|
589
|
-
before do
|
590
|
-
Mongoid::Threaded.client_override = :other
|
591
|
-
end
|
592
|
-
|
593
|
-
after do
|
594
|
-
persistence_context.client.close
|
595
|
-
Mongoid::Threaded.client_override = nil
|
596
|
-
end
|
560
|
+
persistence_context_override :client, :other
|
597
561
|
|
598
562
|
it 'uses the client option' do
|
599
563
|
expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
|
@@ -637,14 +601,7 @@ describe Mongoid::PersistenceContext do
|
|
637
601
|
end
|
638
602
|
|
639
603
|
context 'when there is a client override' do
|
640
|
-
|
641
|
-
before do
|
642
|
-
Mongoid::Threaded.client_override = :alternative
|
643
|
-
end
|
644
|
-
|
645
|
-
after do
|
646
|
-
Mongoid::Threaded.client_override = nil
|
647
|
-
end
|
604
|
+
persistence_context_override :client, :alternative
|
648
605
|
|
649
606
|
it 'uses the client override' do
|
650
607
|
expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
|
@@ -680,14 +637,7 @@ describe Mongoid::PersistenceContext do
|
|
680
637
|
end
|
681
638
|
|
682
639
|
context 'when there is a client override' do
|
683
|
-
|
684
|
-
before do
|
685
|
-
Mongoid::Threaded.client_override = :alternative
|
686
|
-
end
|
687
|
-
|
688
|
-
after do
|
689
|
-
Mongoid::Threaded.client_override = nil
|
690
|
-
end
|
640
|
+
persistence_context_override :client, :alternative
|
691
641
|
|
692
642
|
it 'uses the client override' do
|
693
643
|
expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
|
@@ -718,4 +668,28 @@ describe Mongoid::PersistenceContext do
|
|
718
668
|
end
|
719
669
|
end
|
720
670
|
end
|
671
|
+
|
672
|
+
context "when using an alternate database to update a document" do
|
673
|
+
let(:user) do
|
674
|
+
User.new(name: '1')
|
675
|
+
end
|
676
|
+
|
677
|
+
before do
|
678
|
+
user.with(database: database_id_alt) do |u|
|
679
|
+
u.save!
|
680
|
+
end
|
681
|
+
|
682
|
+
expect do
|
683
|
+
user.with(database: database_id_alt) do |u|
|
684
|
+
u.update(name:'2')
|
685
|
+
end
|
686
|
+
end.to_not raise_error
|
687
|
+
end
|
688
|
+
|
689
|
+
it "persists the update" do
|
690
|
+
User.with("database" => database_id_alt) do |klass|
|
691
|
+
expect(klass.find(user._id).name).to eq("2")
|
692
|
+
end
|
693
|
+
end
|
694
|
+
end
|
721
695
|
end
|
@@ -40,29 +40,11 @@ describe Mongoid::QueryCache::Middleware do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
context 'with driver query cache' do
|
43
|
-
min_driver_version '2.14'
|
44
43
|
|
45
44
|
it "cleans the query cache after it responds" do
|
46
45
|
middleware.call({})
|
47
46
|
expect(Mongo::QueryCache.send(:cache_table)).to be_empty
|
48
47
|
end
|
49
48
|
end
|
50
|
-
|
51
|
-
context 'with mongoid query cache' do
|
52
|
-
max_driver_version '2.13'
|
53
|
-
|
54
|
-
it "cleans the query cache after it responds" do
|
55
|
-
middleware.call({})
|
56
|
-
expect(Mongoid::QueryCache.cache_table).to be_empty
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context 'when driver implements query cache middleware' do
|
62
|
-
min_driver_version '2.15'
|
63
|
-
|
64
|
-
it 'uses the driver query cache middleware' do
|
65
|
-
Mongoid::QueryCache::Middleware.should be Mongo::QueryCache::Middleware
|
66
|
-
end
|
67
49
|
end
|
68
50
|
end
|
@@ -24,81 +24,12 @@ describe Mongoid::QueryCache do
|
|
24
24
|
Mrss::SessionRegistry.instance.verify_sessions_ended!
|
25
25
|
end
|
26
26
|
|
27
|
-
let(:reset_legacy_qc_warning) do
|
28
|
-
begin
|
29
|
-
Mongoid::QueryCache.remove_instance_variable('@legacy_query_cache_warned')
|
30
|
-
rescue NameError
|
31
|
-
# raised if the instance variable wasn't set
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
27
|
describe '#cache' do
|
36
|
-
context 'with driver query cache' do
|
37
|
-
min_driver_version '2.14'
|
38
|
-
|
39
|
-
it 'does not log a deprecation warning' do
|
40
|
-
reset_legacy_qc_warning
|
41
|
-
|
42
|
-
expect_any_instance_of(Logger).to_not receive(:warn).with(
|
43
|
-
described_class::LEGACY_WARNING
|
44
|
-
)
|
45
|
-
described_class.cache { }
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'when query cache is not enabled' do
|
49
|
-
before do
|
50
|
-
Mongoid::QueryCache.enabled = false
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'turns on the query cache within the block' do
|
54
|
-
expect(Mongoid::QueryCache.enabled?).to be false
|
55
|
-
|
56
|
-
Mongoid::QueryCache.cache do
|
57
|
-
expect(Mongoid::QueryCache.enabled?).to be true
|
58
|
-
end
|
59
|
-
|
60
|
-
expect(Mongoid::QueryCache.enabled?).to be false
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context 'when query cache is enabled' do
|
65
|
-
before do
|
66
|
-
Mongoid::QueryCache.enabled = true
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'keeps the query cache enabled within the block' do
|
70
|
-
expect(Mongoid::QueryCache.enabled?).to be true
|
71
|
-
|
72
|
-
Mongoid::QueryCache.cache do
|
73
|
-
expect(Mongoid::QueryCache.enabled?).to be true
|
74
|
-
end
|
75
|
-
|
76
|
-
expect(Mongoid::QueryCache.enabled?).to be true
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context 'nested inside #uncached' do
|
81
|
-
it 'turns on the query cache in the block' do
|
82
|
-
Mongoid::QueryCache.uncached do
|
83
|
-
expect(Mongoid::QueryCache.enabled?).to be false
|
84
|
-
|
85
|
-
Mongoid::QueryCache.cache do
|
86
|
-
expect(Mongoid::QueryCache.enabled?).to be true
|
87
|
-
end
|
88
28
|
|
89
|
-
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
context 'with mongoid query cache' do
|
96
|
-
max_driver_version '2.13'
|
29
|
+
context 'with driver query cache' do
|
97
30
|
|
98
31
|
context 'when query cache is not enabled' do
|
99
|
-
|
100
|
-
Mongoid::QueryCache.enabled = false
|
101
|
-
end
|
32
|
+
override_query_cache false
|
102
33
|
|
103
34
|
it 'turns on the query cache within the block' do
|
104
35
|
expect(Mongoid::QueryCache.enabled?).to be false
|
@@ -112,9 +43,7 @@ describe Mongoid::QueryCache do
|
|
112
43
|
end
|
113
44
|
|
114
45
|
context 'when query cache is enabled' do
|
115
|
-
|
116
|
-
Mongoid::QueryCache.enabled = true
|
117
|
-
end
|
46
|
+
override_query_cache true
|
118
47
|
|
119
48
|
it 'keeps the query cache enabled within the block' do
|
120
49
|
expect(Mongoid::QueryCache.enabled?).to be true
|
@@ -144,70 +73,11 @@ describe Mongoid::QueryCache do
|
|
144
73
|
end
|
145
74
|
|
146
75
|
describe '#uncached' do
|
147
|
-
context 'with driver query cache' do
|
148
|
-
min_driver_version '2.14'
|
149
|
-
|
150
|
-
context 'when query cache is not enabled' do
|
151
|
-
before do
|
152
|
-
Mongoid::QueryCache.enabled = false
|
153
|
-
end
|
154
|
-
|
155
|
-
it 'keeps the query cache turned off within the block' do
|
156
|
-
expect(Mongoid::QueryCache.enabled?).to be false
|
157
|
-
|
158
|
-
Mongoid::QueryCache.uncached do
|
159
|
-
expect(Mongoid::QueryCache.enabled?).to be false
|
160
|
-
end
|
161
76
|
|
162
|
-
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
context 'when query cache is enabled' do
|
167
|
-
before do
|
168
|
-
Mongoid::QueryCache.enabled = true
|
169
|
-
end
|
170
|
-
|
171
|
-
it 'turns off the query cache within the block' do
|
172
|
-
expect(Mongoid::QueryCache.enabled?).to be true
|
173
|
-
|
174
|
-
Mongoid::QueryCache.uncached do
|
175
|
-
expect(Mongoid::QueryCache.enabled?).to be false
|
176
|
-
end
|
177
|
-
|
178
|
-
expect(Mongoid::QueryCache.enabled?).to be true
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
context 'nested inside #cache' do
|
183
|
-
it 'turns on the query cache in the block' do
|
184
|
-
Mongoid::QueryCache.cache do
|
185
|
-
expect(Mongoid::QueryCache.enabled?).to be true
|
186
|
-
|
187
|
-
Mongoid::QueryCache.uncached do
|
188
|
-
expect(Mongoid::QueryCache.enabled?).to be false
|
189
|
-
end
|
190
|
-
|
191
|
-
expect(Mongoid::QueryCache.enabled?).to be true
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
context 'with mongoid query cache' do
|
198
|
-
max_driver_version '2.13'
|
199
|
-
|
200
|
-
it 'logs a deprecation warning' do
|
201
|
-
reset_legacy_qc_warning
|
202
|
-
|
203
|
-
expect_any_instance_of(Logger).to receive(:warn).with(described_class::LEGACY_WARNING)
|
204
|
-
described_class.cache { }
|
205
|
-
end
|
77
|
+
context 'with driver query cache' do
|
206
78
|
|
207
79
|
context 'when query cache is not enabled' do
|
208
|
-
|
209
|
-
Mongoid::QueryCache.enabled = false
|
210
|
-
end
|
80
|
+
override_query_cache false
|
211
81
|
|
212
82
|
it 'keeps the query cache turned off within the block' do
|
213
83
|
expect(Mongoid::QueryCache.enabled?).to be false
|
@@ -221,9 +91,7 @@ describe Mongoid::QueryCache do
|
|
221
91
|
end
|
222
92
|
|
223
93
|
context 'when query cache is enabled' do
|
224
|
-
|
225
|
-
Mongoid::QueryCache.enabled = true
|
226
|
-
end
|
94
|
+
override_query_cache true
|
227
95
|
|
228
96
|
it 'turns off the query cache within the block' do
|
229
97
|
expect(Mongoid::QueryCache.enabled?).to be true
|
@@ -277,10 +145,7 @@ describe Mongoid::QueryCache do
|
|
277
145
|
end
|
278
146
|
|
279
147
|
context 'does not query for the relation and instead sets the base' do
|
280
|
-
|
281
|
-
before do
|
282
|
-
Mongoid::QueryCache.enabled = false
|
283
|
-
end
|
148
|
+
override_query_cache false
|
284
149
|
|
285
150
|
it 'queries for each access to the base' do
|
286
151
|
expect(server).to receive(:with_connection).exactly(0).times.and_call_original
|
@@ -298,10 +163,7 @@ describe Mongoid::QueryCache do
|
|
298
163
|
end
|
299
164
|
|
300
165
|
context 'when query cache is disabled' do
|
301
|
-
|
302
|
-
before do
|
303
|
-
Mongoid::QueryCache.enabled = false
|
304
|
-
end
|
166
|
+
override_query_cache false
|
305
167
|
|
306
168
|
it 'does not query for access to the base' do
|
307
169
|
expect(server).to receive(:context).exactly(0).times.and_call_original
|
@@ -312,10 +174,7 @@ describe Mongoid::QueryCache do
|
|
312
174
|
end
|
313
175
|
|
314
176
|
context 'when query cache is enabled' do
|
315
|
-
|
316
|
-
before do
|
317
|
-
Mongoid::QueryCache.enabled = true
|
318
|
-
end
|
177
|
+
override_query_cache true
|
319
178
|
|
320
179
|
it 'does not query for access to the base' do
|
321
180
|
expect(server).to receive(:context).exactly(0).times.and_call_original
|
@@ -328,7 +187,6 @@ describe Mongoid::QueryCache do
|
|
328
187
|
end
|
329
188
|
|
330
189
|
context 'when driver query cache exists' do
|
331
|
-
min_driver_version '2.14'
|
332
190
|
|
333
191
|
before do
|
334
192
|
Band.all.to_a
|
@@ -362,10 +220,7 @@ describe Mongoid::QueryCache do
|
|
362
220
|
end
|
363
221
|
|
364
222
|
context 'when block is cached' do
|
365
|
-
|
366
|
-
before do
|
367
|
-
Mongoid::QueryCache.enabled = false
|
368
|
-
end
|
223
|
+
override_query_cache false
|
369
224
|
|
370
225
|
it 'uses the driver query cache' do
|
371
226
|
expect(Mongo::QueryCache).to receive(:cache).and_call_original
|
@@ -378,10 +233,7 @@ describe Mongoid::QueryCache do
|
|
378
233
|
end
|
379
234
|
|
380
235
|
context 'when block is uncached' do
|
381
|
-
|
382
|
-
before do
|
383
|
-
Mongoid::QueryCache.enabled = true
|
384
|
-
end
|
236
|
+
override_query_cache true
|
385
237
|
|
386
238
|
it 'uses the driver query cache' do
|
387
239
|
expect(Mongo::QueryCache).to receive(:uncached).and_call_original
|
@@ -424,14 +276,6 @@ describe Mongoid::QueryCache do
|
|
424
276
|
end
|
425
277
|
end
|
426
278
|
|
427
|
-
context 'when drivers query cache does not exist' do
|
428
|
-
max_driver_version '2.13'
|
429
|
-
|
430
|
-
it 'does not recognize the driver query cache' do
|
431
|
-
expect(defined?(Mongo::QueryCache)).to be_nil
|
432
|
-
end
|
433
|
-
end
|
434
|
-
|
435
279
|
context "when querying for a single document" do
|
436
280
|
|
437
281
|
[ :first, :one, :last ].each do |method|
|
@@ -441,10 +285,7 @@ describe Mongoid::QueryCache do
|
|
441
285
|
end
|
442
286
|
|
443
287
|
context "when query cache is disabled" do
|
444
|
-
|
445
|
-
before do
|
446
|
-
Mongoid::QueryCache.enabled = false
|
447
|
-
end
|
288
|
+
override_query_cache false
|
448
289
|
|
449
290
|
it "queries again" do
|
450
291
|
expect_query(1) do
|
@@ -567,10 +408,7 @@ describe Mongoid::QueryCache do
|
|
567
408
|
end
|
568
409
|
|
569
410
|
context "when query cache is disabled" do
|
570
|
-
|
571
|
-
before do
|
572
|
-
Mongoid::QueryCache.enabled = false
|
573
|
-
end
|
411
|
+
override_query_cache false
|
574
412
|
|
575
413
|
it "queries again" do
|
576
414
|
expect_query(1) do
|
@@ -662,12 +500,8 @@ describe Mongoid::QueryCache do
|
|
662
500
|
end
|
663
501
|
|
664
502
|
context "when the next query has a limit" do
|
665
|
-
# Server versions older than 3.2 also perform a killCursors operation,
|
666
|
-
# which causes this test to fail.
|
667
|
-
min_server_version '3.2'
|
668
503
|
|
669
504
|
context 'with driver query cache' do
|
670
|
-
min_driver_version '2.14'
|
671
505
|
|
672
506
|
# The driver query cache re-uses results with a larger limit
|
673
507
|
it 'does not query again' do
|
@@ -678,18 +512,6 @@ describe Mongoid::QueryCache do
|
|
678
512
|
end
|
679
513
|
end
|
680
514
|
end
|
681
|
-
|
682
|
-
context 'with mongoid query cache' do
|
683
|
-
max_driver_version '2.13'
|
684
|
-
|
685
|
-
it 'queries again' do
|
686
|
-
expect_query(1) do
|
687
|
-
result = game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
|
688
|
-
expect(result.length).to eq(2)
|
689
|
-
expect(result.map { |r| r['value'] }).to eq([6, 7])
|
690
|
-
end
|
691
|
-
end
|
692
|
-
end
|
693
515
|
end
|
694
516
|
|
695
517
|
context "when the new query does not have a limit" do
|
@@ -812,13 +634,7 @@ describe Mongoid::QueryCache do
|
|
812
634
|
end
|
813
635
|
|
814
636
|
context "when query caching is enabled and the batch_size is set" do
|
815
|
-
|
816
|
-
around(:each) do |example|
|
817
|
-
query_cache_enabled = Mongoid::QueryCache.enabled?
|
818
|
-
Mongoid::QueryCache.enabled = true
|
819
|
-
example.run
|
820
|
-
Mongoid::QueryCache.enabled = query_cache_enabled
|
821
|
-
end
|
637
|
+
override_query_cache true
|
822
638
|
|
823
639
|
it "does not raise an error when requesting the second batch" do
|
824
640
|
expect {
|
@@ -827,7 +643,6 @@ describe Mongoid::QueryCache do
|
|
827
643
|
end
|
828
644
|
}.not_to raise_error
|
829
645
|
end
|
830
|
-
|
831
646
|
end
|
832
647
|
end
|
833
648
|
|
@@ -895,10 +710,7 @@ describe Mongoid::QueryCache do
|
|
895
710
|
end
|
896
711
|
|
897
712
|
context 'when query cache is disabled' do
|
898
|
-
|
899
|
-
before do
|
900
|
-
Mongoid::QueryCache.enabled = false
|
901
|
-
end
|
713
|
+
override_query_cache false
|
902
714
|
|
903
715
|
it "queries again" do
|
904
716
|
band = Band.find(band_id)
|
@@ -962,15 +774,15 @@ describe Mongoid::QueryCache do
|
|
962
774
|
end
|
963
775
|
|
964
776
|
context 'when the initial query does not exhaust the results' do
|
777
|
+
override_query_cache true
|
778
|
+
|
965
779
|
before do
|
966
|
-
Mongoid::QueryCache.enabled = true
|
967
780
|
10.times { Band.create! }
|
968
781
|
|
969
782
|
Band.batch_size(4).to_a
|
970
783
|
end
|
971
784
|
|
972
785
|
context 'with driver query cache' do
|
973
|
-
min_driver_version '2.14'
|
974
786
|
|
975
787
|
# The driver query cache caches multi-batch cursors
|
976
788
|
it 'does cache the result' do
|
@@ -979,16 +791,6 @@ describe Mongoid::QueryCache do
|
|
979
791
|
end
|
980
792
|
end
|
981
793
|
end
|
982
|
-
|
983
|
-
context 'with mongoid query cache' do
|
984
|
-
max_driver_version '2.13'
|
985
|
-
|
986
|
-
it 'does not cache the result' do
|
987
|
-
expect_query(1) do
|
988
|
-
expect(Band.all.map(&:id).size).to eq(10)
|
989
|
-
end
|
990
|
-
end
|
991
|
-
end
|
992
794
|
end
|
993
795
|
|
994
796
|
context 'when storing in system collection' do
|
@@ -1021,4 +823,43 @@ describe Mongoid::QueryCache do
|
|
1021
823
|
school.students.to_a.length.should == 5
|
1022
824
|
end
|
1023
825
|
end
|
826
|
+
|
827
|
+
describe 'deprecation warnings' do
|
828
|
+
|
829
|
+
context '#cache' do
|
830
|
+
it 'should raise a warning' do
|
831
|
+
expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
|
832
|
+
Mongoid::QueryCache.cache {}
|
833
|
+
end
|
834
|
+
end
|
835
|
+
|
836
|
+
context '#uncached' do
|
837
|
+
it 'should raise a warning' do
|
838
|
+
expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
|
839
|
+
Mongoid::QueryCache.uncached {}
|
840
|
+
end
|
841
|
+
end
|
842
|
+
|
843
|
+
context '#clear_cache' do
|
844
|
+
it 'should raise a warning' do
|
845
|
+
expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache_clear)
|
846
|
+
Mongoid::QueryCache.clear_cache
|
847
|
+
end
|
848
|
+
end
|
849
|
+
|
850
|
+
context '#enabled?' do
|
851
|
+
it 'should raise a warning' do
|
852
|
+
expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
|
853
|
+
Mongoid::QueryCache.enabled?
|
854
|
+
end
|
855
|
+
end
|
856
|
+
|
857
|
+
context '#enabled=' do
|
858
|
+
it 'should raise a warning' do
|
859
|
+
old_enabled = Mongoid::QueryCache.enabled?
|
860
|
+
expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
|
861
|
+
Mongoid::QueryCache.enabled = old_enabled
|
862
|
+
end
|
863
|
+
end
|
864
|
+
end
|
1024
865
|
end
|