mongoid 7.5.4 → 8.1.3
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/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 +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 +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.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/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 +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 +92 -7
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +20 -40
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +127 -35
- data/lib/mongoid/equality.rb +8 -8
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +6 -3
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +37 -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 +188 -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 +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 +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 +10 -6
- 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 +381 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +118 -80
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -32
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +255 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -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 +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 +173 -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 +510 -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 +2309 -1127
- data/spec/mongoid/contextual/none_spec.rb +60 -21
- data/spec/mongoid/copyable_spec.rb +453 -11
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +1 -5
- data/spec/mongoid/criteria_spec.rb +469 -1205
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +639 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +80 -37
- data/spec/mongoid/fields_spec.rb +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 +824 -22
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +28 -8
- data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
- data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
- data/spec/mongoid/persistable/logical_spec.rb +37 -0
- data/spec/mongoid/persistable/poppable_spec.rb +36 -0
- data/spec/mongoid/persistable/pullable_spec.rb +72 -0
- data/spec/mongoid/persistable/pushable_spec.rb +72 -0
- data/spec/mongoid/persistable/renamable_spec.rb +36 -0
- data/spec/mongoid/persistable/savable_spec.rb +96 -0
- data/spec/mongoid/persistable/settable_spec.rb +37 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
- data/spec/mongoid/persistable/updatable_spec.rb +20 -28
- data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
- data/spec/mongoid/persistence_context_spec.rb +31 -57
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +56 -215
- data/spec/mongoid/reloadable_spec.rb +83 -6
- data/spec/mongoid/scopable_spec.rb +91 -1
- data/spec/mongoid/serializable_spec.rb +9 -30
- data/spec/mongoid/shardable_spec.rb +4 -4
- data/spec/mongoid/stateful_spec.rb +150 -8
- data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
- data/spec/mongoid/tasks/database_spec.rb +127 -0
- data/spec/mongoid/timestamps_spec.rb +392 -4
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +390 -2
- data/spec/mongoid/touchable_spec_models.rb +14 -8
- data/spec/mongoid/traversable_spec.rb +13 -35
- data/spec/mongoid/validatable/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/shared/lib/mrss/docker_runner.rb +8 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +2 -2
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +36 -40
- data/spec/shared/shlib/server.sh +28 -4
- data/spec/shared/shlib/set_env.sh +4 -4
- 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 +100 -22
- 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
@@ -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
|
|
@@ -392,11 +393,10 @@ describe Mongoid::Attributes do
|
|
392
393
|
end
|
393
394
|
|
394
395
|
context "when reloaded" do
|
396
|
+
config_override :raise_not_found_error, false
|
395
397
|
|
396
398
|
before do
|
397
|
-
Mongoid.raise_not_found_error = false
|
398
399
|
person.reload
|
399
|
-
Mongoid.raise_not_found_error = true
|
400
400
|
end
|
401
401
|
|
402
402
|
it "returns the default value" do
|
@@ -1029,14 +1029,13 @@ describe Mongoid::Attributes do
|
|
1029
1029
|
end
|
1030
1030
|
|
1031
1031
|
context "when the attribute does not exist" do
|
1032
|
+
config_override :raise_not_found_error, false
|
1032
1033
|
|
1033
1034
|
before do
|
1034
1035
|
person.collection
|
1035
1036
|
.find({ _id: person.id })
|
1036
1037
|
.update_one({ "$unset" => { age: 1 }})
|
1037
|
-
Mongoid.raise_not_found_error = false
|
1038
1038
|
person.reload
|
1039
|
-
Mongoid.raise_not_found_error = true
|
1040
1039
|
end
|
1041
1040
|
|
1042
1041
|
it "returns the default value" do
|
@@ -1077,8 +1076,8 @@ describe Mongoid::Attributes do
|
|
1077
1076
|
context "after the attribute has been assigned" do
|
1078
1077
|
|
1079
1078
|
it "returns the default value" do
|
1080
|
-
person.age = "
|
1081
|
-
expect(person.age_before_type_cast).to eq("
|
1079
|
+
person.age = "42"
|
1080
|
+
expect(person.age_before_type_cast).to eq("42")
|
1082
1081
|
end
|
1083
1082
|
end
|
1084
1083
|
|
@@ -1160,14 +1159,13 @@ describe Mongoid::Attributes do
|
|
1160
1159
|
end
|
1161
1160
|
|
1162
1161
|
context "when the attribute does not exist" do
|
1162
|
+
config_override :raise_not_found_error, false
|
1163
1163
|
|
1164
1164
|
before do
|
1165
1165
|
person.collection
|
1166
1166
|
.find({ _id: person.id })
|
1167
1167
|
.update_one({ "$unset" => { age: 1 }})
|
1168
|
-
Mongoid.raise_not_found_error = false
|
1169
1168
|
person.reload
|
1170
|
-
Mongoid.raise_not_found_error = true
|
1171
1169
|
end
|
1172
1170
|
|
1173
1171
|
it "returns true" do
|
@@ -1265,15 +1263,15 @@ describe Mongoid::Attributes do
|
|
1265
1263
|
|
1266
1264
|
context "before the attribute has been assigned" do
|
1267
1265
|
|
1268
|
-
it "returns
|
1269
|
-
expect(person.has_attribute_before_type_cast?(:age)).to be
|
1266
|
+
it "returns true" do
|
1267
|
+
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
1270
1268
|
end
|
1271
1269
|
end
|
1272
1270
|
|
1273
1271
|
context "after the attribute has been assigned" do
|
1274
1272
|
|
1275
1273
|
it "returns true" do
|
1276
|
-
person.age = '
|
1274
|
+
person.age = '42'
|
1277
1275
|
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
1278
1276
|
end
|
1279
1277
|
end
|
@@ -1528,12 +1526,13 @@ describe Mongoid::Attributes do
|
|
1528
1526
|
end
|
1529
1527
|
|
1530
1528
|
context "when setting an attribute that needs type casting" do
|
1529
|
+
|
1531
1530
|
let(:person) do
|
1532
|
-
Person.new(age: "
|
1531
|
+
Person.new(age: "42")
|
1533
1532
|
end
|
1534
1533
|
|
1535
1534
|
it "should store the attribute before type cast" do
|
1536
|
-
expect(person.age_before_type_cast).to eq("
|
1535
|
+
expect(person.age_before_type_cast).to eq("42")
|
1537
1536
|
end
|
1538
1537
|
end
|
1539
1538
|
|
@@ -1581,16 +1580,14 @@ describe Mongoid::Attributes do
|
|
1581
1580
|
context "when attribute is a Hash" do
|
1582
1581
|
let(:person) { Person.new map: { somekey: "somevalue" } }
|
1583
1582
|
|
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/)
|
1583
|
+
it "writes nil when trying to set a value of invalid type - array" do
|
1584
|
+
person.map = []
|
1585
|
+
expect(person.map).to be_nil
|
1588
1586
|
end
|
1589
1587
|
|
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/)
|
1588
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
1589
|
+
person.map = false
|
1590
|
+
expect(person.map).to be_nil
|
1594
1591
|
end
|
1595
1592
|
|
1596
1593
|
it "can set a Hash value" do
|
@@ -1605,16 +1602,14 @@ describe Mongoid::Attributes do
|
|
1605
1602
|
expect(person.aliases).to eq([ :alias_1 ])
|
1606
1603
|
end
|
1607
1604
|
|
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/)
|
1605
|
+
it "writes nil when trying to set a value of invalid type - hash" do
|
1606
|
+
person.aliases = {}
|
1607
|
+
expect(person.aliases).to be_nil
|
1612
1608
|
end
|
1613
1609
|
|
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/)
|
1610
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
1611
|
+
person.aliases = false
|
1612
|
+
expect(person.aliases).to be_nil
|
1618
1613
|
end
|
1619
1614
|
end
|
1620
1615
|
|
@@ -1899,11 +1894,11 @@ describe Mongoid::Attributes do
|
|
1899
1894
|
end
|
1900
1895
|
|
1901
1896
|
it "has 3 new entries" do
|
1902
|
-
expect(pet.vet_visits.count).to eq
|
1897
|
+
expect(pet.vet_visits.count).to eq 3
|
1903
1898
|
end
|
1904
1899
|
|
1905
1900
|
it "persists the changes" do
|
1906
|
-
expect(pet.reload.vet_visits.count).to eq
|
1901
|
+
expect(pet.reload.vet_visits.count).to eq 3
|
1907
1902
|
end
|
1908
1903
|
end
|
1909
1904
|
|
@@ -2073,8 +2068,8 @@ describe Mongoid::Attributes do
|
|
2073
2068
|
end
|
2074
2069
|
|
2075
2070
|
it "aliases *_before_type_cast" do
|
2076
|
-
product.cost = "
|
2077
|
-
expect(product.cost_before_type_cast).to eq("
|
2071
|
+
product.cost = "42"
|
2072
|
+
expect(product.cost_before_type_cast).to eq("42")
|
2078
2073
|
end
|
2079
2074
|
end
|
2080
2075
|
|
@@ -2258,4 +2253,486 @@ describe Mongoid::Attributes do
|
|
2258
2253
|
end
|
2259
2254
|
end
|
2260
2255
|
end
|
2256
|
+
|
2257
|
+
context "when an attribute is removed then set" do
|
2258
|
+
let(:cat) { Cat.create!(name: "Neil") }
|
2259
|
+
|
2260
|
+
before do
|
2261
|
+
cat.remove_attribute("name")
|
2262
|
+
cat.name = "Nissim"
|
2263
|
+
cat.save!
|
2264
|
+
cat.reload
|
2265
|
+
end
|
2266
|
+
|
2267
|
+
it "correctly sets the attribute" do
|
2268
|
+
expect(cat.name).to eq("Nissim")
|
2269
|
+
end
|
2270
|
+
end
|
2271
|
+
|
2272
|
+
describe "attributes after setting an association without reloading" do
|
2273
|
+
|
2274
|
+
context "on embeds_many" do
|
2275
|
+
|
2276
|
+
context "when not setting anything" do
|
2277
|
+
let(:doc) { NestedBook.create! }
|
2278
|
+
|
2279
|
+
it "doesn't add attributes" do
|
2280
|
+
expect(doc.attributes).to_not have_key("pages")
|
2281
|
+
end
|
2282
|
+
|
2283
|
+
it "has the same attributes after reloading" do
|
2284
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2285
|
+
end
|
2286
|
+
end
|
2287
|
+
|
2288
|
+
context "when using nested attributes" do
|
2289
|
+
let(:doc) { NestedBook.create! }
|
2290
|
+
|
2291
|
+
before do
|
2292
|
+
doc.update_attributes({ pages_attributes: [ {} ] })
|
2293
|
+
end
|
2294
|
+
|
2295
|
+
it "updates the attributes" do
|
2296
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
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 doing assignments" do
|
2305
|
+
let(:doc) { NestedBook.create! }
|
2306
|
+
before do
|
2307
|
+
doc.pages = [NestedPage.new]
|
2308
|
+
end
|
2309
|
+
|
2310
|
+
it "updates the attributes" do
|
2311
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2312
|
+
end
|
2313
|
+
|
2314
|
+
it "has the same attributes after reloading" do
|
2315
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2316
|
+
end
|
2317
|
+
end
|
2318
|
+
|
2319
|
+
context "when replacing assignments" do
|
2320
|
+
let(:doc) { NestedBook.create! }
|
2321
|
+
before do
|
2322
|
+
doc.pages = [NestedPage.new(number: 1)]
|
2323
|
+
doc.pages = [NestedPage.new(number: 2)]
|
2324
|
+
end
|
2325
|
+
|
2326
|
+
it "updates the attributes" do
|
2327
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id, "number" => 2 }])
|
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 setting to nil" do
|
2336
|
+
let(:doc) { NestedBook.create! }
|
2337
|
+
before do
|
2338
|
+
doc.pages = [NestedPage.new(number: 1)]
|
2339
|
+
doc.pages = nil
|
2340
|
+
end
|
2341
|
+
|
2342
|
+
it "updates the attributes" do
|
2343
|
+
expect(doc.attributes).to_not have_key("pages")
|
2344
|
+
end
|
2345
|
+
|
2346
|
+
it "has the same attributes after reloading" do
|
2347
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
2348
|
+
end
|
2349
|
+
end
|
2350
|
+
|
2351
|
+
context "when setting to nil and back" do
|
2352
|
+
let(:doc) { NestedBook.create! }
|
2353
|
+
let(:page) { NestedPage.new }
|
2354
|
+
before do
|
2355
|
+
doc.pages = [page]
|
2356
|
+
doc.pages = nil
|
2357
|
+
doc.pages = [page]
|
2358
|
+
end
|
2359
|
+
|
2360
|
+
it "updates the attributes" do
|
2361
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2362
|
+
end
|
2363
|
+
|
2364
|
+
it "has the same attributes after reloading" do
|
2365
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2366
|
+
end
|
2367
|
+
end
|
2368
|
+
|
2369
|
+
context "when pushing" do
|
2370
|
+
let(:doc) { NestedBook.create! }
|
2371
|
+
before do
|
2372
|
+
doc.pages << NestedPage.new
|
2373
|
+
end
|
2374
|
+
|
2375
|
+
it "updates the attributes" do
|
2376
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2377
|
+
end
|
2378
|
+
|
2379
|
+
it "has the same attributes after reloading" do
|
2380
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2381
|
+
end
|
2382
|
+
end
|
2383
|
+
|
2384
|
+
[:shift, :pop].each do |meth|
|
2385
|
+
context "when performing #{meth}" do
|
2386
|
+
let(:doc) { NestedBook.create! }
|
2387
|
+
before do
|
2388
|
+
doc.pages << NestedPage.new
|
2389
|
+
doc.pages << NestedPage.new
|
2390
|
+
doc.pages << NestedPage.new
|
2391
|
+
|
2392
|
+
doc.pages.send(meth, 2)
|
2393
|
+
end
|
2394
|
+
|
2395
|
+
it "updates the attributes" do
|
2396
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2397
|
+
end
|
2398
|
+
|
2399
|
+
it "has the same attributes after reloading" do
|
2400
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2401
|
+
end
|
2402
|
+
end
|
2403
|
+
end
|
2404
|
+
|
2405
|
+
context "when concatting" do
|
2406
|
+
let(:doc) { NestedBook.create! }
|
2407
|
+
before do
|
2408
|
+
doc.pages << NestedPage.new
|
2409
|
+
doc.pages.concat([NestedPage.new, NestedPage.new])
|
2410
|
+
end
|
2411
|
+
|
2412
|
+
it "updates the attributes" do
|
2413
|
+
expect(doc.attributes["pages"].count).to eq 3
|
2414
|
+
end
|
2415
|
+
|
2416
|
+
it "has the same attributes after reloading" do
|
2417
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2418
|
+
end
|
2419
|
+
end
|
2420
|
+
|
2421
|
+
[:build, :create].each do |meth|
|
2422
|
+
context "when preforming #{meth}" do
|
2423
|
+
let(:doc) { NestedBook.create! }
|
2424
|
+
before do
|
2425
|
+
doc.pages.send(meth)
|
2426
|
+
end
|
2427
|
+
|
2428
|
+
it "updates the attributes" do
|
2429
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2430
|
+
end
|
2431
|
+
|
2432
|
+
it "has the same attributes after reloading" do
|
2433
|
+
doc.pages.first.save
|
2434
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2435
|
+
end
|
2436
|
+
end
|
2437
|
+
end
|
2438
|
+
|
2439
|
+
context "when clearing" do
|
2440
|
+
let(:doc) { NestedBook.create! }
|
2441
|
+
before do
|
2442
|
+
doc.pages << NestedPage.new
|
2443
|
+
doc.pages << NestedPage.new
|
2444
|
+
doc.pages << NestedPage.new
|
2445
|
+
|
2446
|
+
doc.pages.clear
|
2447
|
+
end
|
2448
|
+
|
2449
|
+
it "updates the attributes" do
|
2450
|
+
expect(doc.attributes).to_not have_key("pages")
|
2451
|
+
end
|
2452
|
+
|
2453
|
+
it "has the same attributes after reloading" do
|
2454
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2455
|
+
end
|
2456
|
+
end
|
2457
|
+
|
2458
|
+
[:delete_all, :destroy_all, :remove_all].each do |meth|
|
2459
|
+
context "when performing: #{meth}" do
|
2460
|
+
let(:doc) { NestedBook.create! }
|
2461
|
+
before do
|
2462
|
+
doc.pages << NestedPage.new
|
2463
|
+
doc.pages << NestedPage.new
|
2464
|
+
doc.pages << NestedPage.new
|
2465
|
+
|
2466
|
+
doc.pages.send(meth)
|
2467
|
+
end
|
2468
|
+
|
2469
|
+
it "updates the attributes" do
|
2470
|
+
expect(doc.attributes).to_not have_key("pages")
|
2471
|
+
end
|
2472
|
+
|
2473
|
+
it "has the same attributes after reloading" do
|
2474
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
2475
|
+
end
|
2476
|
+
end
|
2477
|
+
end
|
2478
|
+
|
2479
|
+
context "when deleting" do
|
2480
|
+
let(:doc) { NestedBook.create! }
|
2481
|
+
let(:page) { NestedPage.new }
|
2482
|
+
before do
|
2483
|
+
doc.pages << page
|
2484
|
+
doc.pages << NestedPage.new
|
2485
|
+
doc.pages << NestedPage.new
|
2486
|
+
|
2487
|
+
doc.pages.delete(page)
|
2488
|
+
end
|
2489
|
+
|
2490
|
+
it "updates the attributes" do
|
2491
|
+
expect(doc.attributes["pages"].count).to eq 2
|
2492
|
+
end
|
2493
|
+
|
2494
|
+
it "has the same attributes after reloading" do
|
2495
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2496
|
+
end
|
2497
|
+
end
|
2498
|
+
|
2499
|
+
context "when doing _remove" do
|
2500
|
+
let(:doc) { NestedBook.create! }
|
2501
|
+
let(:page) { NestedPage.new }
|
2502
|
+
before do
|
2503
|
+
doc.pages << page
|
2504
|
+
doc.pages << NestedPage.new
|
2505
|
+
doc.pages << NestedPage.new
|
2506
|
+
|
2507
|
+
doc.pages._remove(page)
|
2508
|
+
end
|
2509
|
+
|
2510
|
+
it "updates the attributes" do
|
2511
|
+
expect(doc.attributes["pages"].count).to eq 2
|
2512
|
+
end
|
2513
|
+
end
|
2514
|
+
|
2515
|
+
context "when assigning an array of hashes" do
|
2516
|
+
let(:doc) { NestedBook.create! }
|
2517
|
+
before do
|
2518
|
+
doc.pages = [{}]
|
2519
|
+
end
|
2520
|
+
|
2521
|
+
it "updates the attributes" do
|
2522
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2523
|
+
end
|
2524
|
+
|
2525
|
+
it "has the same attributes after reloading" do
|
2526
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2527
|
+
end
|
2528
|
+
end
|
2529
|
+
|
2530
|
+
context "when assigning twice" do
|
2531
|
+
let(:doc) { NestedBook.create! }
|
2532
|
+
before do
|
2533
|
+
doc.pages = [{ number: 1 }]
|
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
|
+
end
|
2546
|
+
|
2547
|
+
context "on embeds_one" do
|
2548
|
+
|
2549
|
+
let(:attrs) { { "title" => "Title" } }
|
2550
|
+
|
2551
|
+
context "when using nested attributes" do
|
2552
|
+
let(:doc) { NestedBook.create! }
|
2553
|
+
|
2554
|
+
before do
|
2555
|
+
doc.update_attributes({ cover_attributes: attrs })
|
2556
|
+
end
|
2557
|
+
|
2558
|
+
it "updates the attributes" do
|
2559
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2560
|
+
end
|
2561
|
+
|
2562
|
+
it "has the same attributes after reloading" do
|
2563
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2564
|
+
end
|
2565
|
+
end
|
2566
|
+
|
2567
|
+
context "when doing assignments" do
|
2568
|
+
let(:doc) { NestedBook.create! }
|
2569
|
+
before do
|
2570
|
+
doc.cover = NestedCover.new(attrs)
|
2571
|
+
end
|
2572
|
+
|
2573
|
+
it "updates the attributes" do
|
2574
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2575
|
+
end
|
2576
|
+
|
2577
|
+
it "has the same attributes after reloading" do
|
2578
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2579
|
+
end
|
2580
|
+
end
|
2581
|
+
|
2582
|
+
context "when replacing assignments" do
|
2583
|
+
let(:doc) { NestedBook.create! }
|
2584
|
+
before do
|
2585
|
+
doc.cover = NestedCover.new("title" => "Title1")
|
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 setting to nil" do
|
2599
|
+
let(:doc) { NestedBook.create! }
|
2600
|
+
before do
|
2601
|
+
doc.cover = NestedCover.new(attrs)
|
2602
|
+
doc.cover = nil
|
2603
|
+
end
|
2604
|
+
|
2605
|
+
it "updates the attributes" do
|
2606
|
+
expect(doc.attributes.key?("cover")).to be false
|
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 and back" do
|
2615
|
+
let(:doc) { NestedBook.create! }
|
2616
|
+
before do
|
2617
|
+
doc.cover = NestedCover.new(attrs)
|
2618
|
+
doc.cover = nil
|
2619
|
+
doc.cover = NestedCover.new(attrs)
|
2620
|
+
end
|
2621
|
+
|
2622
|
+
it "updates the attributes" do
|
2623
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2624
|
+
end
|
2625
|
+
|
2626
|
+
|
2627
|
+
it "has the same attributes after reloading" do
|
2628
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2629
|
+
end
|
2630
|
+
end
|
2631
|
+
|
2632
|
+
[:build, :create].each do |meth|
|
2633
|
+
context "when preforming #{meth}" do
|
2634
|
+
let(:doc) { NestedBook.create! }
|
2635
|
+
before do
|
2636
|
+
doc.send("#{meth}_cover", attrs)
|
2637
|
+
end
|
2638
|
+
|
2639
|
+
it "updates the attributes" do
|
2640
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2641
|
+
end
|
2642
|
+
|
2643
|
+
it "has the same attributes after reloading" do
|
2644
|
+
doc.cover.save
|
2645
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2646
|
+
end
|
2647
|
+
end
|
2648
|
+
end
|
2649
|
+
|
2650
|
+
context "when assigning a hash" do
|
2651
|
+
let(:doc) { NestedBook.create! }
|
2652
|
+
before do
|
2653
|
+
doc.cover = attrs
|
2654
|
+
end
|
2655
|
+
|
2656
|
+
it "updates the attributes" do
|
2657
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2658
|
+
end
|
2659
|
+
|
2660
|
+
it "has the same attributes after reloading" do
|
2661
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2662
|
+
end
|
2663
|
+
end
|
2664
|
+
|
2665
|
+
context "when assigning twice" do
|
2666
|
+
let(:doc) { NestedBook.create! }
|
2667
|
+
before do
|
2668
|
+
doc.cover = { "title" => "1984" }
|
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
|
+
end
|
2681
|
+
end
|
2682
|
+
|
2683
|
+
context "when modifiying a hash referenced with the [] notation" do
|
2684
|
+
let(:church) { Church.create!(location: { x: 1 }) }
|
2685
|
+
|
2686
|
+
before do
|
2687
|
+
church[:location].merge!(y: 2)
|
2688
|
+
church.save!
|
2689
|
+
church.reload
|
2690
|
+
end
|
2691
|
+
|
2692
|
+
it "persists the updated hash" do
|
2693
|
+
church.location.should == { "x" => 1, "y" => 2 }
|
2694
|
+
end
|
2695
|
+
end
|
2696
|
+
|
2697
|
+
context "when modifiying a set referenced with the [] notation" do
|
2698
|
+
let(:catalog) { Catalog.create!(set_field: [ 1 ].to_set) }
|
2699
|
+
|
2700
|
+
before do
|
2701
|
+
catalog[:set_field] << 2
|
2702
|
+
catalog.save!
|
2703
|
+
catalog.reload
|
2704
|
+
end
|
2705
|
+
|
2706
|
+
it "persists the updated hash" do
|
2707
|
+
pending "MONGOID-2951"
|
2708
|
+
catalog.set_field.should == Set.new([ 1, 2 ])
|
2709
|
+
end
|
2710
|
+
end
|
2711
|
+
|
2712
|
+
context 'when an embedded field has a capitalized store_as name' do
|
2713
|
+
let(:person) { Person.new(Purse: { brand: 'Gucci' }) }
|
2714
|
+
|
2715
|
+
it 'sets the value' do
|
2716
|
+
expect(person.purse.brand).to eq('Gucci')
|
2717
|
+
end
|
2718
|
+
|
2719
|
+
it 'saves successfully' do
|
2720
|
+
expect(person.save!).to eq(true)
|
2721
|
+
end
|
2722
|
+
|
2723
|
+
context 'when persisted' do
|
2724
|
+
before do
|
2725
|
+
person.save!
|
2726
|
+
person.reload
|
2727
|
+
end
|
2728
|
+
|
2729
|
+
it 'persists the value' do
|
2730
|
+
expect(person.reload.purse.brand).to eq('Gucci')
|
2731
|
+
end
|
2732
|
+
|
2733
|
+
it 'uses the correct key in the database' do
|
2734
|
+
expect(person.collection.find(_id: person.id).first['Purse']['_id']).to eq(person.purse.id)
|
2735
|
+
end
|
2736
|
+
end
|
2737
|
+
end
|
2261
2738
|
end
|