mongoid 7.5.4 → 8.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -3
- data/README.md +6 -6
- data/Rakefile +44 -46
- data/lib/config/locales/en.yml +92 -43
- data/lib/mongoid/association/accessors.rb +44 -11
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +5 -3
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +32 -7
- data/lib/mongoid/association/embedded/batchable.rb +34 -11
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +85 -46
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +8 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +45 -7
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +15 -4
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
- data/lib/mongoid/association/referenced/has_many/proxy.rb +40 -21
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +4 -4
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic.rb +16 -7
- data/lib/mongoid/attributes/dynamic.rb +4 -4
- data/lib/mongoid/attributes/nested.rb +6 -6
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +11 -6
- data/lib/mongoid/attributes.rb +51 -42
- data/lib/mongoid/changeable.rb +147 -14
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/storage_options.rb +2 -5
- data/lib/mongoid/clients/validators/storage.rb +3 -15
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +2 -0
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/options.rb +3 -0
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config/validators.rb +1 -0
- data/lib/mongoid/config.rb +153 -18
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +285 -58
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +540 -346
- data/lib/mongoid/contextual/none.rb +193 -20
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +14 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +8 -5
- data/lib/mongoid/criteria/includable.rb +27 -22
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -9
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +4 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
- data/lib/mongoid/criteria/queryable/optional.rb +11 -17
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +48 -39
- data/lib/mongoid/criteria/queryable/selector.rb +92 -7
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +20 -40
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +135 -36
- data/lib/mongoid/equality.rb +9 -8
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +6 -3
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +38 -9
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +10 -8
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +29 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +55 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +19 -4
- data/lib/mongoid/fields/standard.rb +17 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +142 -28
- data/lib/mongoid/findable.rb +54 -24
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +187 -16
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher/eq_impl.rb +1 -1
- data/lib/mongoid/matcher/type.rb +1 -1
- data/lib/mongoid/matcher.rb +48 -14
- data/lib/mongoid/persistable/creatable.rb +19 -9
- data/lib/mongoid/persistable/deletable.rb +2 -2
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +14 -2
- data/lib/mongoid/persistable/unsettable.rb +2 -2
- data/lib/mongoid/persistable/updatable.rb +69 -12
- data/lib/mongoid/persistable/upsertable.rb +21 -2
- data/lib/mongoid/persistable.rb +6 -3
- data/lib/mongoid/persistence_context.rb +6 -4
- data/lib/mongoid/query_cache.rb +13 -261
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +15 -13
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +17 -13
- data/lib/mongoid/stateful.rb +57 -10
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +20 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +42 -12
- data/lib/mongoid/timestamps/created.rb +9 -2
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +3 -4
- data/lib/mongoid/traversable.rb +41 -5
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +98 -17
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +5 -7
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +17 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +19 -4
- data/lib/mongoid.rb +17 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +24 -19
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +132 -1
- data/spec/integration/callbacks_spec.rb +381 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +118 -80
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -32
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +26 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +290 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +19 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +215 -177
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +15 -1
- data/spec/mongoid/association_spec.rb +60 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes/readonly_spec.rb +19 -0
- data/spec/mongoid/attributes_spec.rb +526 -33
- data/spec/mongoid/changeable_spec.rb +429 -37
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +149 -15
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config_spec.rb +214 -31
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +850 -88
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +2256 -1005
- data/spec/mongoid/contextual/none_spec.rb +60 -21
- data/spec/mongoid/copyable_spec.rb +453 -11
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +107 -86
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +1 -5
- data/spec/mongoid/criteria_spec.rb +469 -1205
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +59 -41
- data/spec/mongoid/equality_spec.rb +6 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +639 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +80 -37
- data/spec/mongoid/fields_spec.rb +503 -87
- data/spec/mongoid/findable_spec.rb +450 -58
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +55 -30
- data/spec/mongoid/interceptable_spec.rb +904 -22
- data/spec/mongoid/interceptable_spec_models.rb +189 -22
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +28 -8
- data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
- data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
- data/spec/mongoid/persistable/logical_spec.rb +37 -0
- data/spec/mongoid/persistable/poppable_spec.rb +36 -0
- data/spec/mongoid/persistable/pullable_spec.rb +72 -0
- data/spec/mongoid/persistable/pushable_spec.rb +72 -0
- data/spec/mongoid/persistable/renamable_spec.rb +36 -0
- data/spec/mongoid/persistable/savable_spec.rb +96 -0
- data/spec/mongoid/persistable/settable_spec.rb +37 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
- data/spec/mongoid/persistable/updatable_spec.rb +20 -28
- data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
- data/spec/mongoid/persistence_context_spec.rb +31 -57
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +56 -215
- data/spec/mongoid/reloadable_spec.rb +83 -6
- data/spec/mongoid/scopable_spec.rb +91 -1
- data/spec/mongoid/serializable_spec.rb +25 -39
- data/spec/mongoid/shardable_spec.rb +4 -4
- data/spec/mongoid/stateful_spec.rb +150 -8
- data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
- data/spec/mongoid/tasks/database_spec.rb +127 -0
- data/spec/mongoid/timestamps/created_spec.rb +23 -0
- data/spec/mongoid/timestamps_spec.rb +392 -4
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +390 -2
- data/spec/mongoid/touchable_spec_models.rb +14 -8
- data/spec/mongoid/traversable_spec.rb +13 -35
- data/spec/mongoid/validatable/associated_spec.rb +27 -34
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +34 -16
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/spec_helper.rb +5 -0
- data/spec/support/constraints.rb +24 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +78 -0
- data/spec/support/models/artist.rb +0 -1
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +5 -0
- data/spec/support/models/book.rb +1 -0
- data/spec/support/models/building.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/lat_lng.rb +6 -0
- data/spec/support/models/name.rb +10 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/product.rb +1 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- metadata +98 -96
- checksums.yaml.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
- data/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -231
- data/spec/shared/lib/mrss/constraints.rb +0 -378
- data/spec/shared/lib/mrss/docker_runner.rb +0 -291
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
- data/spec/shared/lib/mrss/session_registry.rb +0 -69
- data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -15
- data/spec/shared/share/Dockerfile.erb +0 -325
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/config.sh +0 -27
- data/spec/shared/shlib/distro.sh +0 -74
- data/spec/shared/shlib/server.sh +0 -392
- data/spec/shared/shlib/set_env.sh +0 -169
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -3
@@ -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
|
@@ -14,19 +14,19 @@ describe Mongoid::Serializable do
|
|
14
14
|
expect(guitar.send(:field_names, {})).to eq(guitar.fields.except("_type").keys.sort)
|
15
15
|
end
|
16
16
|
|
17
|
-
context "when using a custom discriminator_key" do
|
18
|
-
before do
|
17
|
+
context "when using a custom discriminator_key" do
|
18
|
+
before do
|
19
19
|
Instrument.discriminator_key = "dkey"
|
20
20
|
end
|
21
21
|
|
22
|
-
after do
|
22
|
+
after do
|
23
23
|
Instrument.discriminator_key = nil
|
24
24
|
end
|
25
25
|
|
26
26
|
let(:guitar) do
|
27
27
|
Guitar.new
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
it "includes _type but does not include the new discriminator key" do
|
31
31
|
expect(guitar.send(:field_names, {})).to eq(guitar.fields.except("dkey").keys.sort)
|
32
32
|
end
|
@@ -41,15 +41,11 @@ describe Mongoid::Serializable do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
after do
|
44
|
-
Mongoid.include_root_in_json = false
|
45
44
|
reload_model(:Minim)
|
46
45
|
end
|
47
46
|
|
48
47
|
context "when global config is set to true" do
|
49
|
-
|
50
|
-
before do
|
51
|
-
Mongoid.include_root_in_json = true
|
52
|
-
end
|
48
|
+
config_override :include_root_in_json, true
|
53
49
|
|
54
50
|
it "returns true" do
|
55
51
|
expect(Minim.public_send(meth)).to be true
|
@@ -67,10 +63,7 @@ describe Mongoid::Serializable do
|
|
67
63
|
end
|
68
64
|
|
69
65
|
context "when global config set to false" do
|
70
|
-
|
71
|
-
before do
|
72
|
-
Mongoid.include_root_in_json = false
|
73
|
-
end
|
66
|
+
config_override :include_root_in_json, false
|
74
67
|
|
75
68
|
it "returns false" do
|
76
69
|
expect(Minim.public_send(meth)).to be false
|
@@ -89,13 +82,13 @@ describe Mongoid::Serializable do
|
|
89
82
|
end
|
90
83
|
|
91
84
|
describe "#include_root_in_json" do
|
85
|
+
config_override :include_root_in_json, false
|
92
86
|
|
93
87
|
before do
|
94
88
|
reload_model(:Minim)
|
95
89
|
end
|
96
90
|
|
97
91
|
after do
|
98
|
-
Mongoid.include_root_in_json = false
|
99
92
|
reload_model(:Minim)
|
100
93
|
end
|
101
94
|
|
@@ -127,10 +120,6 @@ describe Mongoid::Serializable do
|
|
127
120
|
|
128
121
|
context "when global config set to false" do
|
129
122
|
|
130
|
-
before do
|
131
|
-
Mongoid.include_root_in_json = false
|
132
|
-
end
|
133
|
-
|
134
123
|
it "returns false" do
|
135
124
|
expect(minim.public_send(meth)).to be false
|
136
125
|
end
|
@@ -297,14 +286,7 @@ describe Mongoid::Serializable do
|
|
297
286
|
end
|
298
287
|
|
299
288
|
context "when include_type_for_serialization is true" do
|
300
|
-
|
301
|
-
before do
|
302
|
-
Mongoid.include_type_for_serialization = true
|
303
|
-
end
|
304
|
-
|
305
|
-
after do
|
306
|
-
Mongoid.include_type_for_serialization = false
|
307
|
-
end
|
289
|
+
config_override :include_type_for_serialization, true
|
308
290
|
|
309
291
|
it "includes _type field" do
|
310
292
|
expect(person.serializable_hash.keys).to include '_type'
|
@@ -528,13 +510,15 @@ describe Mongoid::Serializable do
|
|
528
510
|
end
|
529
511
|
|
530
512
|
it "includes the first relation" do
|
531
|
-
expect(relation_hash[0]).to include
|
513
|
+
expect(relation_hash[0]).to include(
|
532
514
|
{ "_id" => "kudamm", "street" => "Kudamm" }
|
515
|
+
)
|
533
516
|
end
|
534
517
|
|
535
518
|
it "includes the second relation" do
|
536
|
-
expect(relation_hash[1]).to include
|
519
|
+
expect(relation_hash[1]).to include(
|
537
520
|
{ "_id" => "tauentzienstr", "street" => "Tauentzienstr" }
|
521
|
+
)
|
538
522
|
end
|
539
523
|
end
|
540
524
|
|
@@ -545,13 +529,15 @@ describe Mongoid::Serializable do
|
|
545
529
|
end
|
546
530
|
|
547
531
|
it "includes the first relation" do
|
548
|
-
expect(relation_hash[0]).to include
|
532
|
+
expect(relation_hash[0]).to include(
|
549
533
|
{ "_id" => "kudamm", "street" => "Kudamm" }
|
534
|
+
)
|
550
535
|
end
|
551
536
|
|
552
537
|
it "includes the second relation" do
|
553
|
-
expect(relation_hash[1]).to include
|
538
|
+
expect(relation_hash[1]).to include(
|
554
539
|
{ "_id" => "tauentzienstr", "street" => "Tauentzienstr" }
|
540
|
+
)
|
555
541
|
end
|
556
542
|
end
|
557
543
|
|
@@ -670,8 +656,9 @@ describe Mongoid::Serializable do
|
|
670
656
|
end
|
671
657
|
|
672
658
|
it "includes the specified relation" do
|
673
|
-
expect(relation_hash).to include
|
674
|
-
{ "_id" => "
|
659
|
+
expect(relation_hash).to include(
|
660
|
+
{ "_id" => "Leo-Marvin", "first_name" => "Leo", "last_name" => "Marvin" }
|
661
|
+
)
|
675
662
|
end
|
676
663
|
end
|
677
664
|
|
@@ -682,8 +669,9 @@ describe Mongoid::Serializable do
|
|
682
669
|
end
|
683
670
|
|
684
671
|
it "includes the specified relation" do
|
685
|
-
expect(relation_hash).to include
|
686
|
-
{ "_id" => "
|
672
|
+
expect(relation_hash).to include(
|
673
|
+
{ "_id" => "Leo-Marvin", "first_name" => "Leo", "last_name" => "Marvin" }
|
674
|
+
)
|
687
675
|
end
|
688
676
|
end
|
689
677
|
|
@@ -694,8 +682,9 @@ describe Mongoid::Serializable do
|
|
694
682
|
end
|
695
683
|
|
696
684
|
it "includes the specified relation sans exceptions" do
|
697
|
-
expect(relation_hash).to include
|
685
|
+
expect(relation_hash).to include(
|
698
686
|
{ "first_name" => "Leo", "last_name" => "Marvin" }
|
687
|
+
)
|
699
688
|
end
|
700
689
|
end
|
701
690
|
end
|
@@ -881,16 +870,13 @@ describe Mongoid::Serializable do
|
|
881
870
|
end
|
882
871
|
|
883
872
|
context "when including root in json via Mongoid" do
|
873
|
+
config_override :include_root_in_json, false
|
884
874
|
|
885
875
|
before do
|
886
876
|
account.include_root_in_json.should be false
|
887
877
|
Mongoid.include_root_in_json = true
|
888
878
|
end
|
889
879
|
|
890
|
-
after do
|
891
|
-
Mongoid.include_root_in_json = false
|
892
|
-
end
|
893
|
-
|
894
880
|
it "uses the mongoid configuration" do
|
895
881
|
expect(JSON.parse(account.to_json)).to have_key("account")
|
896
882
|
end
|
@@ -233,10 +233,10 @@ describe Mongoid::Shardable do
|
|
233
233
|
instance.destroy
|
234
234
|
end
|
235
235
|
|
236
|
-
it "raises a DocumentNotFound error" do
|
236
|
+
it "raises a DocumentNotFound error with the shard key in the description on reload" do
|
237
237
|
expect do
|
238
238
|
instance.reload
|
239
|
-
end.to raise_error(Mongoid::Errors::DocumentNotFound)
|
239
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Band with id #{instance.id.to_s} and shard key name: a-brand-name./)
|
240
240
|
end
|
241
241
|
end
|
242
242
|
end
|
@@ -284,10 +284,10 @@ describe Mongoid::Shardable do
|
|
284
284
|
instance.destroy
|
285
285
|
end
|
286
286
|
|
287
|
-
it "raises a DocumentNotFound error" do
|
287
|
+
it "raises a DocumentNotFound error with the shard key in the description on reload" do
|
288
288
|
expect do
|
289
289
|
instance.reload
|
290
|
-
end.to raise_error(Mongoid::Errors::DocumentNotFound)
|
290
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class SmReview with id #{instance.id.to_s} and shard key author.name: Arthur Conan Doyle./)
|
291
291
|
end
|
292
292
|
end
|
293
293
|
end
|
@@ -40,6 +40,25 @@ describe Mongoid::Stateful do
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
describe '#previously_new_record?' do
|
44
|
+
it "returns correct values" do
|
45
|
+
person = Person.new
|
46
|
+
expect(person).not_to be_a_previously_new_record
|
47
|
+
person.save!
|
48
|
+
expect(person).to be_a_previously_new_record
|
49
|
+
person.title = "Title"
|
50
|
+
person.save!
|
51
|
+
expect(person).not_to be_a_previously_new_record
|
52
|
+
end
|
53
|
+
|
54
|
+
it "resets after reload" do
|
55
|
+
person = Person.create!
|
56
|
+
expect(person).to be_a_previously_new_record
|
57
|
+
person.reload
|
58
|
+
expect(person).not_to be_a_previously_new_record
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
43
62
|
describe "#persisted?" do
|
44
63
|
|
45
64
|
let(:person) do
|
@@ -62,6 +81,15 @@ describe Mongoid::Stateful do
|
|
62
81
|
end
|
63
82
|
end
|
64
83
|
|
84
|
+
describe "#previously_persisted?" do
|
85
|
+
it "returns true after being destroyed" do
|
86
|
+
person = Person.create!
|
87
|
+
expect(person).not_to be_previously_persisted
|
88
|
+
person.destroy
|
89
|
+
expect(person).to be_previously_persisted
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
65
93
|
describe "destroyed?" do
|
66
94
|
|
67
95
|
let(:person) do
|
@@ -108,21 +136,135 @@ describe Mongoid::Stateful do
|
|
108
136
|
Band.new
|
109
137
|
end
|
110
138
|
|
111
|
-
context "when
|
139
|
+
context "when legacy_readonly is true" do
|
140
|
+
config_override :legacy_readonly, true
|
112
141
|
|
113
|
-
|
114
|
-
|
142
|
+
context "when the selected fields are set" do
|
143
|
+
|
144
|
+
before do
|
145
|
+
document.__selected_fields = { test: 1 }
|
146
|
+
end
|
147
|
+
|
148
|
+
it "returns true" do
|
149
|
+
expect(document).to be_readonly
|
150
|
+
end
|
115
151
|
end
|
116
152
|
|
117
|
-
|
118
|
-
|
153
|
+
context "when no readonly has been set" do
|
154
|
+
|
155
|
+
it "returns false" do
|
156
|
+
expect(document).to_not be_readonly
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context "when the readonly! method is called" do
|
161
|
+
|
162
|
+
let(:op) do
|
163
|
+
document.readonly!
|
164
|
+
end
|
165
|
+
|
166
|
+
it "returns false" do
|
167
|
+
op
|
168
|
+
expect(document).to_not be_readonly
|
169
|
+
end
|
170
|
+
|
171
|
+
it "warns" do
|
172
|
+
expect(Mongoid::Warnings).to receive(:warn_legacy_readonly)
|
173
|
+
op
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
context "when overriding readonly?" do
|
178
|
+
|
179
|
+
let(:doc) { ReadonlyModel.create! }
|
180
|
+
|
181
|
+
before do
|
182
|
+
class ReadonlyModel
|
183
|
+
include Mongoid::Document
|
184
|
+
|
185
|
+
attr_accessor :locked
|
186
|
+
|
187
|
+
def readonly?
|
188
|
+
!!locked
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
after do
|
194
|
+
Object.send(:remove_const, :ReadonlyModel)
|
195
|
+
end
|
196
|
+
|
197
|
+
it "raises when readonly? is true" do
|
198
|
+
expect(doc.readonly?).to be false
|
199
|
+
doc.locked = true
|
200
|
+
expect(doc.readonly?).to be true
|
201
|
+
expect do
|
202
|
+
doc.destroy
|
203
|
+
end.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
204
|
+
end
|
119
205
|
end
|
120
206
|
end
|
121
207
|
|
122
|
-
context "when
|
208
|
+
context "when legacy_readonly is false" do
|
209
|
+
config_override :legacy_readonly, false
|
123
210
|
|
124
|
-
|
125
|
-
|
211
|
+
context "when the selected fields are set" do
|
212
|
+
|
213
|
+
before do
|
214
|
+
document.__selected_fields = { test: 1 }
|
215
|
+
end
|
216
|
+
|
217
|
+
it "returns false" do
|
218
|
+
expect(document).to_not be_readonly
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
context "when the readonly! method is called" do
|
223
|
+
|
224
|
+
before do
|
225
|
+
document.readonly!
|
226
|
+
end
|
227
|
+
|
228
|
+
it "returns true" do
|
229
|
+
expect(document).to be_readonly
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
context "when no readonly has been set" do
|
234
|
+
|
235
|
+
it "returns false" do
|
236
|
+
expect(document).to_not be_readonly
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
context "when overriding readonly?" do
|
241
|
+
|
242
|
+
let(:doc) { ReadonlyModel.new }
|
243
|
+
|
244
|
+
before do
|
245
|
+
class ReadonlyModel
|
246
|
+
include Mongoid::Document
|
247
|
+
|
248
|
+
attr_accessor :locked
|
249
|
+
|
250
|
+
def readonly?
|
251
|
+
!!locked
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
after do
|
257
|
+
Object.send(:remove_const, :ReadonlyModel)
|
258
|
+
end
|
259
|
+
|
260
|
+
it "raises when readonly? is true" do
|
261
|
+
expect(doc.readonly?).to be false
|
262
|
+
doc.locked = true
|
263
|
+
expect(doc.readonly?).to be true
|
264
|
+
expect do
|
265
|
+
doc.save!
|
266
|
+
end.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
267
|
+
end
|
126
268
|
end
|
127
269
|
end
|
128
270
|
end
|