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
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
|
+
require_relative './attributes/nested_spec_models'
|
4
5
|
|
5
6
|
describe Mongoid::Attributes do
|
6
7
|
|
@@ -287,6 +288,22 @@ describe Mongoid::Attributes do
|
|
287
288
|
end
|
288
289
|
end
|
289
290
|
|
291
|
+
context "when given nil" do
|
292
|
+
|
293
|
+
it "returns nil" do
|
294
|
+
expect(person[nil]).to be nil
|
295
|
+
end
|
296
|
+
|
297
|
+
end
|
298
|
+
|
299
|
+
context "when given an empty string" do
|
300
|
+
|
301
|
+
it "returns nil" do
|
302
|
+
expect(person[""]).to be nil
|
303
|
+
end
|
304
|
+
|
305
|
+
end
|
306
|
+
|
290
307
|
context "when the field was not explicitly defined" do
|
291
308
|
|
292
309
|
context "when excluding with only and the field was not excluded" do
|
@@ -392,11 +409,10 @@ describe Mongoid::Attributes do
|
|
392
409
|
end
|
393
410
|
|
394
411
|
context "when reloaded" do
|
412
|
+
config_override :raise_not_found_error, false
|
395
413
|
|
396
414
|
before do
|
397
|
-
Mongoid.raise_not_found_error = false
|
398
415
|
person.reload
|
399
|
-
Mongoid.raise_not_found_error = true
|
400
416
|
end
|
401
417
|
|
402
418
|
it "returns the default value" do
|
@@ -1029,14 +1045,13 @@ describe Mongoid::Attributes do
|
|
1029
1045
|
end
|
1030
1046
|
|
1031
1047
|
context "when the attribute does not exist" do
|
1048
|
+
config_override :raise_not_found_error, false
|
1032
1049
|
|
1033
1050
|
before do
|
1034
1051
|
person.collection
|
1035
1052
|
.find({ _id: person.id })
|
1036
1053
|
.update_one({ "$unset" => { age: 1 }})
|
1037
|
-
Mongoid.raise_not_found_error = false
|
1038
1054
|
person.reload
|
1039
|
-
Mongoid.raise_not_found_error = true
|
1040
1055
|
end
|
1041
1056
|
|
1042
1057
|
it "returns the default value" do
|
@@ -1077,8 +1092,8 @@ describe Mongoid::Attributes do
|
|
1077
1092
|
context "after the attribute has been assigned" do
|
1078
1093
|
|
1079
1094
|
it "returns the default value" do
|
1080
|
-
person.age = "
|
1081
|
-
expect(person.age_before_type_cast).to eq("
|
1095
|
+
person.age = "42"
|
1096
|
+
expect(person.age_before_type_cast).to eq("42")
|
1082
1097
|
end
|
1083
1098
|
end
|
1084
1099
|
|
@@ -1160,14 +1175,13 @@ describe Mongoid::Attributes do
|
|
1160
1175
|
end
|
1161
1176
|
|
1162
1177
|
context "when the attribute does not exist" do
|
1178
|
+
config_override :raise_not_found_error, false
|
1163
1179
|
|
1164
1180
|
before do
|
1165
1181
|
person.collection
|
1166
1182
|
.find({ _id: person.id })
|
1167
1183
|
.update_one({ "$unset" => { age: 1 }})
|
1168
|
-
Mongoid.raise_not_found_error = false
|
1169
1184
|
person.reload
|
1170
|
-
Mongoid.raise_not_found_error = true
|
1171
1185
|
end
|
1172
1186
|
|
1173
1187
|
it "returns true" do
|
@@ -1265,15 +1279,15 @@ describe Mongoid::Attributes do
|
|
1265
1279
|
|
1266
1280
|
context "before the attribute has been assigned" do
|
1267
1281
|
|
1268
|
-
it "returns
|
1269
|
-
expect(person.has_attribute_before_type_cast?(:age)).to be
|
1282
|
+
it "returns true" do
|
1283
|
+
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
1270
1284
|
end
|
1271
1285
|
end
|
1272
1286
|
|
1273
1287
|
context "after the attribute has been assigned" do
|
1274
1288
|
|
1275
1289
|
it "returns true" do
|
1276
|
-
person.age = '
|
1290
|
+
person.age = '42'
|
1277
1291
|
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
1278
1292
|
end
|
1279
1293
|
end
|
@@ -1528,12 +1542,13 @@ describe Mongoid::Attributes do
|
|
1528
1542
|
end
|
1529
1543
|
|
1530
1544
|
context "when setting an attribute that needs type casting" do
|
1545
|
+
|
1531
1546
|
let(:person) do
|
1532
|
-
Person.new(age: "
|
1547
|
+
Person.new(age: "42")
|
1533
1548
|
end
|
1534
1549
|
|
1535
1550
|
it "should store the attribute before type cast" do
|
1536
|
-
expect(person.age_before_type_cast).to eq("
|
1551
|
+
expect(person.age_before_type_cast).to eq("42")
|
1537
1552
|
end
|
1538
1553
|
end
|
1539
1554
|
|
@@ -1581,16 +1596,14 @@ describe Mongoid::Attributes do
|
|
1581
1596
|
context "when attribute is a Hash" do
|
1582
1597
|
let(:person) { Person.new map: { somekey: "somevalue" } }
|
1583
1598
|
|
1584
|
-
it "
|
1585
|
-
|
1586
|
-
|
1587
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type Array cannot be written to a field of type Hash/)
|
1599
|
+
it "writes nil when trying to set a value of invalid type - array" do
|
1600
|
+
person.map = []
|
1601
|
+
expect(person.map).to be_nil
|
1588
1602
|
end
|
1589
1603
|
|
1590
|
-
it "
|
1591
|
-
|
1592
|
-
|
1593
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type FalseClass cannot be written to a field of type Hash/)
|
1604
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
1605
|
+
person.map = false
|
1606
|
+
expect(person.map).to be_nil
|
1594
1607
|
end
|
1595
1608
|
|
1596
1609
|
it "can set a Hash value" do
|
@@ -1605,16 +1618,14 @@ describe Mongoid::Attributes do
|
|
1605
1618
|
expect(person.aliases).to eq([ :alias_1 ])
|
1606
1619
|
end
|
1607
1620
|
|
1608
|
-
it "
|
1609
|
-
|
1610
|
-
|
1611
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type Hash cannot be written to a field of type Array/)
|
1621
|
+
it "writes nil when trying to set a value of invalid type - hash" do
|
1622
|
+
person.aliases = {}
|
1623
|
+
expect(person.aliases).to be_nil
|
1612
1624
|
end
|
1613
1625
|
|
1614
|
-
it "
|
1615
|
-
|
1616
|
-
|
1617
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type FalseClass cannot be written to a field of type Array/)
|
1626
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
1627
|
+
person.aliases = false
|
1628
|
+
expect(person.aliases).to be_nil
|
1618
1629
|
end
|
1619
1630
|
end
|
1620
1631
|
|
@@ -1899,11 +1910,11 @@ describe Mongoid::Attributes do
|
|
1899
1910
|
end
|
1900
1911
|
|
1901
1912
|
it "has 3 new entries" do
|
1902
|
-
expect(pet.vet_visits.count).to eq
|
1913
|
+
expect(pet.vet_visits.count).to eq 3
|
1903
1914
|
end
|
1904
1915
|
|
1905
1916
|
it "persists the changes" do
|
1906
|
-
expect(pet.reload.vet_visits.count).to eq
|
1917
|
+
expect(pet.reload.vet_visits.count).to eq 3
|
1907
1918
|
end
|
1908
1919
|
end
|
1909
1920
|
|
@@ -2073,8 +2084,8 @@ describe Mongoid::Attributes do
|
|
2073
2084
|
end
|
2074
2085
|
|
2075
2086
|
it "aliases *_before_type_cast" do
|
2076
|
-
product.cost = "
|
2077
|
-
expect(product.cost_before_type_cast).to eq("
|
2087
|
+
product.cost = "42"
|
2088
|
+
expect(product.cost_before_type_cast).to eq("42")
|
2078
2089
|
end
|
2079
2090
|
end
|
2080
2091
|
|
@@ -2258,4 +2269,486 @@ describe Mongoid::Attributes do
|
|
2258
2269
|
end
|
2259
2270
|
end
|
2260
2271
|
end
|
2272
|
+
|
2273
|
+
context "when an attribute is removed then set" do
|
2274
|
+
let(:cat) { Cat.create!(name: "Neil") }
|
2275
|
+
|
2276
|
+
before do
|
2277
|
+
cat.remove_attribute("name")
|
2278
|
+
cat.name = "Nissim"
|
2279
|
+
cat.save!
|
2280
|
+
cat.reload
|
2281
|
+
end
|
2282
|
+
|
2283
|
+
it "correctly sets the attribute" do
|
2284
|
+
expect(cat.name).to eq("Nissim")
|
2285
|
+
end
|
2286
|
+
end
|
2287
|
+
|
2288
|
+
describe "attributes after setting an association without reloading" do
|
2289
|
+
|
2290
|
+
context "on embeds_many" do
|
2291
|
+
|
2292
|
+
context "when not setting anything" do
|
2293
|
+
let(:doc) { NestedBook.create! }
|
2294
|
+
|
2295
|
+
it "doesn't add attributes" do
|
2296
|
+
expect(doc.attributes).to_not have_key("pages")
|
2297
|
+
end
|
2298
|
+
|
2299
|
+
it "has the same attributes after reloading" do
|
2300
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2301
|
+
end
|
2302
|
+
end
|
2303
|
+
|
2304
|
+
context "when using nested attributes" do
|
2305
|
+
let(:doc) { NestedBook.create! }
|
2306
|
+
|
2307
|
+
before do
|
2308
|
+
doc.update_attributes({ pages_attributes: [ {} ] })
|
2309
|
+
end
|
2310
|
+
|
2311
|
+
it "updates the attributes" do
|
2312
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2313
|
+
end
|
2314
|
+
|
2315
|
+
it "has the same attributes after reloading" do
|
2316
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2317
|
+
end
|
2318
|
+
end
|
2319
|
+
|
2320
|
+
context "when doing assignments" do
|
2321
|
+
let(:doc) { NestedBook.create! }
|
2322
|
+
before do
|
2323
|
+
doc.pages = [NestedPage.new]
|
2324
|
+
end
|
2325
|
+
|
2326
|
+
it "updates the attributes" do
|
2327
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2328
|
+
end
|
2329
|
+
|
2330
|
+
it "has the same attributes after reloading" do
|
2331
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2332
|
+
end
|
2333
|
+
end
|
2334
|
+
|
2335
|
+
context "when replacing assignments" do
|
2336
|
+
let(:doc) { NestedBook.create! }
|
2337
|
+
before do
|
2338
|
+
doc.pages = [NestedPage.new(number: 1)]
|
2339
|
+
doc.pages = [NestedPage.new(number: 2)]
|
2340
|
+
end
|
2341
|
+
|
2342
|
+
it "updates the attributes" do
|
2343
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id, "number" => 2 }])
|
2344
|
+
end
|
2345
|
+
|
2346
|
+
it "has the same attributes after reloading" do
|
2347
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2348
|
+
end
|
2349
|
+
end
|
2350
|
+
|
2351
|
+
context "when setting to nil" do
|
2352
|
+
let(:doc) { NestedBook.create! }
|
2353
|
+
before do
|
2354
|
+
doc.pages = [NestedPage.new(number: 1)]
|
2355
|
+
doc.pages = nil
|
2356
|
+
end
|
2357
|
+
|
2358
|
+
it "updates the attributes" do
|
2359
|
+
expect(doc.attributes).to_not have_key("pages")
|
2360
|
+
end
|
2361
|
+
|
2362
|
+
it "has the same attributes after reloading" do
|
2363
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
2364
|
+
end
|
2365
|
+
end
|
2366
|
+
|
2367
|
+
context "when setting to nil and back" do
|
2368
|
+
let(:doc) { NestedBook.create! }
|
2369
|
+
let(:page) { NestedPage.new }
|
2370
|
+
before do
|
2371
|
+
doc.pages = [page]
|
2372
|
+
doc.pages = nil
|
2373
|
+
doc.pages = [page]
|
2374
|
+
end
|
2375
|
+
|
2376
|
+
it "updates the attributes" do
|
2377
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2378
|
+
end
|
2379
|
+
|
2380
|
+
it "has the same attributes after reloading" do
|
2381
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2382
|
+
end
|
2383
|
+
end
|
2384
|
+
|
2385
|
+
context "when pushing" do
|
2386
|
+
let(:doc) { NestedBook.create! }
|
2387
|
+
before do
|
2388
|
+
doc.pages << NestedPage.new
|
2389
|
+
end
|
2390
|
+
|
2391
|
+
it "updates the attributes" do
|
2392
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2393
|
+
end
|
2394
|
+
|
2395
|
+
it "has the same attributes after reloading" do
|
2396
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2397
|
+
end
|
2398
|
+
end
|
2399
|
+
|
2400
|
+
[:shift, :pop].each do |meth|
|
2401
|
+
context "when performing #{meth}" do
|
2402
|
+
let(:doc) { NestedBook.create! }
|
2403
|
+
before do
|
2404
|
+
doc.pages << NestedPage.new
|
2405
|
+
doc.pages << NestedPage.new
|
2406
|
+
doc.pages << NestedPage.new
|
2407
|
+
|
2408
|
+
doc.pages.send(meth, 2)
|
2409
|
+
end
|
2410
|
+
|
2411
|
+
it "updates the attributes" do
|
2412
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2413
|
+
end
|
2414
|
+
|
2415
|
+
it "has the same attributes after reloading" do
|
2416
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2417
|
+
end
|
2418
|
+
end
|
2419
|
+
end
|
2420
|
+
|
2421
|
+
context "when concatting" do
|
2422
|
+
let(:doc) { NestedBook.create! }
|
2423
|
+
before do
|
2424
|
+
doc.pages << NestedPage.new
|
2425
|
+
doc.pages.concat([NestedPage.new, NestedPage.new])
|
2426
|
+
end
|
2427
|
+
|
2428
|
+
it "updates the attributes" do
|
2429
|
+
expect(doc.attributes["pages"].count).to eq 3
|
2430
|
+
end
|
2431
|
+
|
2432
|
+
it "has the same attributes after reloading" do
|
2433
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2434
|
+
end
|
2435
|
+
end
|
2436
|
+
|
2437
|
+
[:build, :create].each do |meth|
|
2438
|
+
context "when preforming #{meth}" do
|
2439
|
+
let(:doc) { NestedBook.create! }
|
2440
|
+
before do
|
2441
|
+
doc.pages.send(meth)
|
2442
|
+
end
|
2443
|
+
|
2444
|
+
it "updates the attributes" do
|
2445
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2446
|
+
end
|
2447
|
+
|
2448
|
+
it "has the same attributes after reloading" do
|
2449
|
+
doc.pages.first.save
|
2450
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2451
|
+
end
|
2452
|
+
end
|
2453
|
+
end
|
2454
|
+
|
2455
|
+
context "when clearing" do
|
2456
|
+
let(:doc) { NestedBook.create! }
|
2457
|
+
before do
|
2458
|
+
doc.pages << NestedPage.new
|
2459
|
+
doc.pages << NestedPage.new
|
2460
|
+
doc.pages << NestedPage.new
|
2461
|
+
|
2462
|
+
doc.pages.clear
|
2463
|
+
end
|
2464
|
+
|
2465
|
+
it "updates the attributes" do
|
2466
|
+
expect(doc.attributes).to_not have_key("pages")
|
2467
|
+
end
|
2468
|
+
|
2469
|
+
it "has the same attributes after reloading" do
|
2470
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2471
|
+
end
|
2472
|
+
end
|
2473
|
+
|
2474
|
+
[:delete_all, :destroy_all, :remove_all].each do |meth|
|
2475
|
+
context "when performing: #{meth}" do
|
2476
|
+
let(:doc) { NestedBook.create! }
|
2477
|
+
before do
|
2478
|
+
doc.pages << NestedPage.new
|
2479
|
+
doc.pages << NestedPage.new
|
2480
|
+
doc.pages << NestedPage.new
|
2481
|
+
|
2482
|
+
doc.pages.send(meth)
|
2483
|
+
end
|
2484
|
+
|
2485
|
+
it "updates the attributes" do
|
2486
|
+
expect(doc.attributes).to_not have_key("pages")
|
2487
|
+
end
|
2488
|
+
|
2489
|
+
it "has the same attributes after reloading" do
|
2490
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
2491
|
+
end
|
2492
|
+
end
|
2493
|
+
end
|
2494
|
+
|
2495
|
+
context "when deleting" do
|
2496
|
+
let(:doc) { NestedBook.create! }
|
2497
|
+
let(:page) { NestedPage.new }
|
2498
|
+
before do
|
2499
|
+
doc.pages << page
|
2500
|
+
doc.pages << NestedPage.new
|
2501
|
+
doc.pages << NestedPage.new
|
2502
|
+
|
2503
|
+
doc.pages.delete(page)
|
2504
|
+
end
|
2505
|
+
|
2506
|
+
it "updates the attributes" do
|
2507
|
+
expect(doc.attributes["pages"].count).to eq 2
|
2508
|
+
end
|
2509
|
+
|
2510
|
+
it "has the same attributes after reloading" do
|
2511
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2512
|
+
end
|
2513
|
+
end
|
2514
|
+
|
2515
|
+
context "when doing _remove" do
|
2516
|
+
let(:doc) { NestedBook.create! }
|
2517
|
+
let(:page) { NestedPage.new }
|
2518
|
+
before do
|
2519
|
+
doc.pages << page
|
2520
|
+
doc.pages << NestedPage.new
|
2521
|
+
doc.pages << NestedPage.new
|
2522
|
+
|
2523
|
+
doc.pages._remove(page)
|
2524
|
+
end
|
2525
|
+
|
2526
|
+
it "updates the attributes" do
|
2527
|
+
expect(doc.attributes["pages"].count).to eq 2
|
2528
|
+
end
|
2529
|
+
end
|
2530
|
+
|
2531
|
+
context "when assigning an array of hashes" do
|
2532
|
+
let(:doc) { NestedBook.create! }
|
2533
|
+
before do
|
2534
|
+
doc.pages = [{}]
|
2535
|
+
end
|
2536
|
+
|
2537
|
+
it "updates the attributes" do
|
2538
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2539
|
+
end
|
2540
|
+
|
2541
|
+
it "has the same attributes after reloading" do
|
2542
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2543
|
+
end
|
2544
|
+
end
|
2545
|
+
|
2546
|
+
context "when assigning twice" do
|
2547
|
+
let(:doc) { NestedBook.create! }
|
2548
|
+
before do
|
2549
|
+
doc.pages = [{ number: 1 }]
|
2550
|
+
doc.pages = [{}]
|
2551
|
+
end
|
2552
|
+
|
2553
|
+
it "updates the attributes" do
|
2554
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2555
|
+
end
|
2556
|
+
|
2557
|
+
it "has the same attributes after reloading" do
|
2558
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2559
|
+
end
|
2560
|
+
end
|
2561
|
+
end
|
2562
|
+
|
2563
|
+
context "on embeds_one" do
|
2564
|
+
|
2565
|
+
let(:attrs) { { "title" => "Title" } }
|
2566
|
+
|
2567
|
+
context "when using nested attributes" do
|
2568
|
+
let(:doc) { NestedBook.create! }
|
2569
|
+
|
2570
|
+
before do
|
2571
|
+
doc.update_attributes({ cover_attributes: attrs })
|
2572
|
+
end
|
2573
|
+
|
2574
|
+
it "updates the attributes" do
|
2575
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2576
|
+
end
|
2577
|
+
|
2578
|
+
it "has the same attributes after reloading" do
|
2579
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2580
|
+
end
|
2581
|
+
end
|
2582
|
+
|
2583
|
+
context "when doing assignments" do
|
2584
|
+
let(:doc) { NestedBook.create! }
|
2585
|
+
before do
|
2586
|
+
doc.cover = NestedCover.new(attrs)
|
2587
|
+
end
|
2588
|
+
|
2589
|
+
it "updates the attributes" do
|
2590
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2591
|
+
end
|
2592
|
+
|
2593
|
+
it "has the same attributes after reloading" do
|
2594
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2595
|
+
end
|
2596
|
+
end
|
2597
|
+
|
2598
|
+
context "when replacing assignments" do
|
2599
|
+
let(:doc) { NestedBook.create! }
|
2600
|
+
before do
|
2601
|
+
doc.cover = NestedCover.new("title" => "Title1")
|
2602
|
+
doc.cover = NestedCover.new(attrs)
|
2603
|
+
end
|
2604
|
+
|
2605
|
+
it "updates the attributes" do
|
2606
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2607
|
+
end
|
2608
|
+
|
2609
|
+
it "has the same attributes after reloading" do
|
2610
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2611
|
+
end
|
2612
|
+
end
|
2613
|
+
|
2614
|
+
context "when setting to nil" do
|
2615
|
+
let(:doc) { NestedBook.create! }
|
2616
|
+
before do
|
2617
|
+
doc.cover = NestedCover.new(attrs)
|
2618
|
+
doc.cover = nil
|
2619
|
+
end
|
2620
|
+
|
2621
|
+
it "updates the attributes" do
|
2622
|
+
expect(doc.attributes.key?("cover")).to be false
|
2623
|
+
end
|
2624
|
+
|
2625
|
+
it "has the same attributes after reloading" do
|
2626
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2627
|
+
end
|
2628
|
+
end
|
2629
|
+
|
2630
|
+
context "when setting to nil and back" do
|
2631
|
+
let(:doc) { NestedBook.create! }
|
2632
|
+
before do
|
2633
|
+
doc.cover = NestedCover.new(attrs)
|
2634
|
+
doc.cover = nil
|
2635
|
+
doc.cover = NestedCover.new(attrs)
|
2636
|
+
end
|
2637
|
+
|
2638
|
+
it "updates the attributes" do
|
2639
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2640
|
+
end
|
2641
|
+
|
2642
|
+
|
2643
|
+
it "has the same attributes after reloading" do
|
2644
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2645
|
+
end
|
2646
|
+
end
|
2647
|
+
|
2648
|
+
[:build, :create].each do |meth|
|
2649
|
+
context "when preforming #{meth}" do
|
2650
|
+
let(:doc) { NestedBook.create! }
|
2651
|
+
before do
|
2652
|
+
doc.send("#{meth}_cover", attrs)
|
2653
|
+
end
|
2654
|
+
|
2655
|
+
it "updates the attributes" do
|
2656
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2657
|
+
end
|
2658
|
+
|
2659
|
+
it "has the same attributes after reloading" do
|
2660
|
+
doc.cover.save
|
2661
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2662
|
+
end
|
2663
|
+
end
|
2664
|
+
end
|
2665
|
+
|
2666
|
+
context "when assigning a hash" do
|
2667
|
+
let(:doc) { NestedBook.create! }
|
2668
|
+
before do
|
2669
|
+
doc.cover = attrs
|
2670
|
+
end
|
2671
|
+
|
2672
|
+
it "updates the attributes" do
|
2673
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2674
|
+
end
|
2675
|
+
|
2676
|
+
it "has the same attributes after reloading" do
|
2677
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2678
|
+
end
|
2679
|
+
end
|
2680
|
+
|
2681
|
+
context "when assigning twice" do
|
2682
|
+
let(:doc) { NestedBook.create! }
|
2683
|
+
before do
|
2684
|
+
doc.cover = { "title" => "1984" }
|
2685
|
+
doc.cover = attrs
|
2686
|
+
end
|
2687
|
+
|
2688
|
+
it "updates the attributes" do
|
2689
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2690
|
+
end
|
2691
|
+
|
2692
|
+
it "has the same attributes after reloading" do
|
2693
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2694
|
+
end
|
2695
|
+
end
|
2696
|
+
end
|
2697
|
+
end
|
2698
|
+
|
2699
|
+
context "when modifiying a hash referenced with the [] notation" do
|
2700
|
+
let(:church) { Church.create!(location: { x: 1 }) }
|
2701
|
+
|
2702
|
+
before do
|
2703
|
+
church[:location].merge!(y: 2)
|
2704
|
+
church.save!
|
2705
|
+
church.reload
|
2706
|
+
end
|
2707
|
+
|
2708
|
+
it "persists the updated hash" do
|
2709
|
+
church.location.should == { "x" => 1, "y" => 2 }
|
2710
|
+
end
|
2711
|
+
end
|
2712
|
+
|
2713
|
+
context "when modifiying a set referenced with the [] notation" do
|
2714
|
+
let(:catalog) { Catalog.create!(set_field: [ 1 ].to_set) }
|
2715
|
+
|
2716
|
+
before do
|
2717
|
+
catalog[:set_field] << 2
|
2718
|
+
catalog.save!
|
2719
|
+
catalog.reload
|
2720
|
+
end
|
2721
|
+
|
2722
|
+
it "persists the updated hash" do
|
2723
|
+
pending "MONGOID-2951"
|
2724
|
+
catalog.set_field.should == Set.new([ 1, 2 ])
|
2725
|
+
end
|
2726
|
+
end
|
2727
|
+
|
2728
|
+
context 'when an embedded field has a capitalized store_as name' do
|
2729
|
+
let(:person) { Person.new(Purse: { brand: 'Gucci' }) }
|
2730
|
+
|
2731
|
+
it 'sets the value' do
|
2732
|
+
expect(person.purse.brand).to eq('Gucci')
|
2733
|
+
end
|
2734
|
+
|
2735
|
+
it 'saves successfully' do
|
2736
|
+
expect(person.save!).to eq(true)
|
2737
|
+
end
|
2738
|
+
|
2739
|
+
context 'when persisted' do
|
2740
|
+
before do
|
2741
|
+
person.save!
|
2742
|
+
person.reload
|
2743
|
+
end
|
2744
|
+
|
2745
|
+
it 'persists the value' do
|
2746
|
+
expect(person.reload.purse.brand).to eq('Gucci')
|
2747
|
+
end
|
2748
|
+
|
2749
|
+
it 'uses the correct key in the database' do
|
2750
|
+
expect(person.collection.find(_id: person.id).first['Purse']['_id']).to eq(person.purse.id)
|
2751
|
+
end
|
2752
|
+
end
|
2753
|
+
end
|
2261
2754
|
end
|