mongoid 7.5.1 → 8.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +3 -3
- data/README.md +6 -6
- data/Rakefile +25 -0
- data/lib/config/locales/en.yml +92 -43
- data/lib/mongoid/association/accessors.rb +40 -11
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +5 -3
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +54 -14
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +69 -45
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +8 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +45 -7
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +15 -4
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
- data/lib/mongoid/association/referenced/has_many/proxy.rb +29 -19
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +4 -4
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +19 -0
- data/lib/mongoid/atomic.rb +7 -0
- data/lib/mongoid/attributes/dynamic.rb +4 -4
- data/lib/mongoid/attributes/nested.rb +6 -6
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +3 -3
- data/lib/mongoid/attributes.rb +51 -42
- data/lib/mongoid/cacheable.rb +2 -2
- 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 +145 -17
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +285 -58
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +521 -333
- data/lib/mongoid/contextual/none.rb +193 -20
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +14 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +8 -5
- data/lib/mongoid/criteria/includable.rb +27 -22
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -9
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +4 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
- data/lib/mongoid/criteria/queryable/optional.rb +11 -17
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +47 -38
- data/lib/mongoid/criteria/queryable/selector.rb +93 -8
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +20 -40
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +135 -36
- data/lib/mongoid/equality.rb +8 -8
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +6 -3
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +19 -8
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +10 -8
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +29 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +55 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +19 -4
- data/lib/mongoid/fields/standard.rb +17 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +129 -20
- data/lib/mongoid/findable.rb +54 -24
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +76 -15
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher/eq_impl.rb +1 -1
- data/lib/mongoid/matcher/type.rb +1 -1
- data/lib/mongoid/matcher.rb +33 -13
- data/lib/mongoid/persistable/creatable.rb +19 -9
- data/lib/mongoid/persistable/deletable.rb +2 -2
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +14 -2
- data/lib/mongoid/persistable/unsettable.rb +2 -2
- data/lib/mongoid/persistable/updatable.rb +69 -12
- data/lib/mongoid/persistable/upsertable.rb +21 -2
- data/lib/mongoid/persistable.rb +6 -3
- data/lib/mongoid/persistence_context.rb +63 -10
- data/lib/mongoid/query_cache.rb +13 -261
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +15 -13
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/shardable.rb +35 -11
- data/lib/mongoid/stateful.rb +57 -10
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +20 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +42 -12
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +5 -4
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +5 -7
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +9 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +19 -4
- data/lib/mongoid.rb +17 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +10 -14
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +132 -1
- data/spec/integration/callbacks_spec.rb +360 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +118 -80
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -32
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +276 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +158 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +215 -228
- 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 +193 -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 +554 -33
- data/spec/mongoid/cacheable_spec.rb +3 -3
- 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 +179 -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 +220 -30
- 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 +1570 -413
- data/spec/mongoid/contextual/none_spec.rb +60 -21
- data/spec/mongoid/copyable_spec.rb +453 -11
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
- data/spec/mongoid/criteria/queryable/selector_spec.rb +90 -5
- data/spec/mongoid/criteria/queryable/storable_spec.rb +72 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +1 -5
- data/spec/mongoid/criteria_spec.rb +469 -1205
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +639 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +80 -37
- data/spec/mongoid/fields_spec.rb +500 -84
- data/spec/mongoid/findable_spec.rb +450 -58
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +55 -30
- data/spec/mongoid/interceptable_spec.rb +599 -8
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +28 -8
- data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
- data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
- data/spec/mongoid/persistable/logical_spec.rb +37 -0
- data/spec/mongoid/persistable/poppable_spec.rb +36 -0
- data/spec/mongoid/persistable/pullable_spec.rb +72 -0
- data/spec/mongoid/persistable/pushable_spec.rb +72 -0
- data/spec/mongoid/persistable/renamable_spec.rb +36 -0
- data/spec/mongoid/persistable/savable_spec.rb +96 -0
- data/spec/mongoid/persistable/settable_spec.rb +37 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
- data/spec/mongoid/persistable/updatable_spec.rb +20 -28
- data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
- data/spec/mongoid/persistence_context_spec.rb +57 -58
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +56 -215
- data/spec/mongoid/reloadable_spec.rb +83 -6
- data/spec/mongoid/scopable_spec.rb +91 -1
- data/spec/mongoid/serializable_spec.rb +9 -30
- data/spec/mongoid/shardable_models.rb +14 -0
- data/spec/mongoid/shardable_spec.rb +157 -51
- data/spec/mongoid/stateful_spec.rb +150 -8
- data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
- data/spec/mongoid/tasks/database_spec.rb +127 -0
- data/spec/mongoid/timestamps_spec.rb +392 -4
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +390 -2
- data/spec/mongoid/touchable_spec_models.rb +14 -8
- data/spec/mongoid/traversable_spec.rb +13 -35
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +34 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/lite_constraints.rb +8 -0
- data/spec/shared/shlib/server.sh +5 -5
- data/spec/spec_helper.rb +5 -0
- data/spec/support/constraints.rb +24 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +78 -0
- data/spec/support/models/artist.rb +0 -1
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +4 -0
- data/spec/support/models/book.rb +1 -0
- data/spec/support/models/building.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/product.rb +1 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +0 -0
- metadata +720 -638
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
|
@@ -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
|
|
@@ -103,7 +103,7 @@ describe Mongoid::Reloadable do
|
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
it "resets attributes_before_type_cast" do
|
|
106
|
-
expect(person.attributes_before_type_cast).to
|
|
106
|
+
expect(person.attributes_before_type_cast).to eq(person.attributes)
|
|
107
107
|
end
|
|
108
108
|
end
|
|
109
109
|
|
|
@@ -114,7 +114,7 @@ describe Mongoid::Reloadable do
|
|
|
114
114
|
it "raises an error" do
|
|
115
115
|
expect {
|
|
116
116
|
Person.new.reload
|
|
117
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
117
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Person with id\(s\)/)
|
|
118
118
|
end
|
|
119
119
|
end
|
|
120
120
|
|
|
@@ -390,6 +390,30 @@ describe Mongoid::Reloadable do
|
|
|
390
390
|
end
|
|
391
391
|
end
|
|
392
392
|
|
|
393
|
+
context 'when embeds_many is modified' do
|
|
394
|
+
let(:contractor1) { Contractor.new(name: 'b') }
|
|
395
|
+
let(:contractor2) { Contractor.new(name: 'c') }
|
|
396
|
+
|
|
397
|
+
let(:building) do
|
|
398
|
+
Building.create!(name: 'a', contractors: [ contractor1 ])
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
let(:more_contractors) { building.contractors + [ contractor2 ] }
|
|
402
|
+
|
|
403
|
+
let(:modified_building) do
|
|
404
|
+
building.tap do
|
|
405
|
+
building.assign_attributes contractors: more_contractors
|
|
406
|
+
end
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
let(:reloaded_building) { modified_building.reload }
|
|
410
|
+
|
|
411
|
+
it 'resets delayed_atomic_sets' do
|
|
412
|
+
expect(modified_building.delayed_atomic_sets).not_to be_empty
|
|
413
|
+
expect(reloaded_building.delayed_atomic_sets).to be_empty
|
|
414
|
+
end
|
|
415
|
+
end
|
|
416
|
+
|
|
393
417
|
context "when embedded document is nil" do
|
|
394
418
|
|
|
395
419
|
let(:palette) do
|
|
@@ -488,12 +512,32 @@ describe Mongoid::Reloadable do
|
|
|
488
512
|
Person.create!
|
|
489
513
|
end
|
|
490
514
|
|
|
491
|
-
|
|
492
|
-
|
|
515
|
+
context "when legacy_readonly is on" do
|
|
516
|
+
config_override :legacy_readonly, true
|
|
517
|
+
|
|
518
|
+
let(:reloaded) do
|
|
519
|
+
Person.only(:name).first.reload
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
it 'resets the readonly state after reloading' do
|
|
523
|
+
expect(reloaded.readonly?).to be(false)
|
|
524
|
+
end
|
|
493
525
|
end
|
|
494
526
|
|
|
495
|
-
|
|
496
|
-
|
|
527
|
+
context "when legacy_readonly is off" do
|
|
528
|
+
config_override :legacy_readonly, false
|
|
529
|
+
|
|
530
|
+
let(:reloaded) do
|
|
531
|
+
Person.only(:name).first.tap do |doc|
|
|
532
|
+
doc.readonly!
|
|
533
|
+
expect(doc.readonly?).to be true
|
|
534
|
+
doc.reload
|
|
535
|
+
end
|
|
536
|
+
end
|
|
537
|
+
|
|
538
|
+
it 'does not reset the readonly state after reloading' do
|
|
539
|
+
expect(reloaded.readonly?).to be(true)
|
|
540
|
+
end
|
|
497
541
|
end
|
|
498
542
|
end
|
|
499
543
|
|
|
@@ -628,5 +672,38 @@ describe Mongoid::Reloadable do
|
|
|
628
672
|
church.acolytes.first.name.should == 'Borg'
|
|
629
673
|
end
|
|
630
674
|
end
|
|
675
|
+
|
|
676
|
+
context 'when document has previous changes' do
|
|
677
|
+
context 'when document was updated' do
|
|
678
|
+
let(:person) do
|
|
679
|
+
Person.create!(title: 'Sir')
|
|
680
|
+
end
|
|
681
|
+
|
|
682
|
+
before do
|
|
683
|
+
person.title = 'Madam'
|
|
684
|
+
person.save!
|
|
685
|
+
person.reload
|
|
686
|
+
end
|
|
687
|
+
|
|
688
|
+
it "resets previous changes" do
|
|
689
|
+
expect(person.title_previously_was).to be_nil
|
|
690
|
+
expect(person).not_to be_previously_persisted
|
|
691
|
+
end
|
|
692
|
+
end
|
|
693
|
+
|
|
694
|
+
context 'when document was created' do
|
|
695
|
+
let(:person) do
|
|
696
|
+
Person.create!(title: 'Sir')
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
before do
|
|
700
|
+
person.reload
|
|
701
|
+
end
|
|
702
|
+
|
|
703
|
+
it "resets previous changes" do
|
|
704
|
+
expect(person).not_to be_previously_new_record
|
|
705
|
+
end
|
|
706
|
+
end
|
|
707
|
+
end
|
|
631
708
|
end
|
|
632
709
|
end
|
|
@@ -121,6 +121,76 @@ describe Mongoid::Scopable do
|
|
|
121
121
|
expect(selector).to eq({'active' => true})
|
|
122
122
|
end
|
|
123
123
|
end
|
|
124
|
+
|
|
125
|
+
context "when the default scope is dotted" do
|
|
126
|
+
|
|
127
|
+
let(:criteria) do
|
|
128
|
+
Band.where('tags.foo' => 'bar')
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
before do
|
|
132
|
+
Band.default_scope ->{ criteria }
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
after do
|
|
136
|
+
Band.default_scoping = nil
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
let!(:band) do
|
|
140
|
+
Band.create!
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it "adds the scope as a dotted key attribute" do
|
|
144
|
+
expect(band.attributes['tags.foo']).to eq('bar')
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "adds the default scope to the class" do
|
|
148
|
+
expect(Band.default_scoping.call).to eq(criteria)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "flags as being default scoped" do
|
|
152
|
+
expect(Band).to be_default_scoping
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "does not find the correct document" do
|
|
156
|
+
expect(Band.count).to eq(0)
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
context "when the default scope is dotted with a query" do
|
|
161
|
+
|
|
162
|
+
let(:criteria) do
|
|
163
|
+
Band.where('tags.foo' => {'$eq' => 'bar'})
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
before do
|
|
167
|
+
Band.default_scope ->{ criteria }
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
after do
|
|
171
|
+
Band.default_scoping = nil
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
let!(:band) do
|
|
175
|
+
Band.create!('tags' => { 'foo' => 'bar' })
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it "does not add the scope as a dotted key attribute" do
|
|
179
|
+
expect(band.attributes).to_not have_key('tags.foo')
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
it "adds the default scope to the class" do
|
|
183
|
+
expect(Band.default_scoping.call).to eq(criteria)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it "flags as being default scoped" do
|
|
187
|
+
expect(Band).to be_default_scoping
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
it "finds the correct document" do
|
|
191
|
+
expect(Band.where.first).to eq(band)
|
|
192
|
+
end
|
|
193
|
+
end
|
|
124
194
|
end
|
|
125
195
|
|
|
126
196
|
describe ".default_scopable?" do
|
|
@@ -801,9 +871,11 @@ describe Mongoid::Scopable do
|
|
|
801
871
|
"$or" => [
|
|
802
872
|
{ "ccc" => nil },
|
|
803
873
|
{ "ccc" => { "$gt" => 1.0 }},
|
|
874
|
+
],
|
|
875
|
+
'$and' => ['$or' => [
|
|
804
876
|
{ "aaa" => { "$gt" => 0.0 }},
|
|
805
877
|
{ "bbb" => { "$gt" => 0.0 }}
|
|
806
|
-
]
|
|
878
|
+
]],
|
|
807
879
|
})
|
|
808
880
|
end
|
|
809
881
|
end
|
|
@@ -1188,6 +1260,24 @@ describe Mongoid::Scopable do
|
|
|
1188
1260
|
end
|
|
1189
1261
|
end
|
|
1190
1262
|
end
|
|
1263
|
+
|
|
1264
|
+
context 'when nesting unscoped under with_scope' do
|
|
1265
|
+
let(:c1) { Band.where(active: true) }
|
|
1266
|
+
|
|
1267
|
+
it 'restores previous scope' do
|
|
1268
|
+
pending 'MONGOID-5214'
|
|
1269
|
+
|
|
1270
|
+
Band.with_scope(c1) do |crit|
|
|
1271
|
+
Band.unscoped do |crit2|
|
|
1272
|
+
Mongoid::Threaded.current_scope(Band).should be nil
|
|
1273
|
+
end
|
|
1274
|
+
|
|
1275
|
+
Mongoid::Threaded.current_scope(Band).selector.should == {
|
|
1276
|
+
'active' => true,
|
|
1277
|
+
}
|
|
1278
|
+
end
|
|
1279
|
+
end
|
|
1280
|
+
end
|
|
1191
1281
|
end
|
|
1192
1282
|
|
|
1193
1283
|
describe ".without_default_scope" do
|