mongoid 7.4.3 → 8.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +3 -3
- data/Rakefile +25 -0
- data/lib/config/locales/en.yml +52 -28
- data/lib/mongoid/association/accessors.rb +38 -9
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +33 -10
- 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/proxy.rb +2 -2
- 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 +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +65 -41
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +23 -4
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +28 -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 +5 -5
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +14 -3
- 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 +20 -24
- data/lib/mongoid/association/referenced/has_many/proxy.rb +26 -16
- 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 +2 -2
- 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 +3 -3
- data/lib/mongoid/attributes/nested.rb +5 -5
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +1 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/attributes.rb +43 -40
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +43 -10
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/validators/storage.rb +3 -3
- data/lib/mongoid/config/options.rb +3 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config.rb +62 -17
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +180 -21
- data/lib/mongoid/contextual/mongo.rb +260 -217
- data/lib/mongoid/contextual/none.rb +67 -5
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +7 -4
- data/lib/mongoid/criteria/includable.rb +24 -20
- 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 -14
- 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 -15
- 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 +3 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +21 -0
- data/lib/mongoid/criteria/queryable/optional.rb +5 -11
- 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 +31 -37
- data/lib/mongoid/criteria/queryable/selector.rb +93 -8
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +16 -35
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +135 -34
- data/lib/mongoid/equality.rb +8 -8
- data/lib/mongoid/errors/document_not_found.rb +33 -12
- 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_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/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 +2 -2
- 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 +8 -6
- 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 +27 -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 +9 -4
- data/lib/mongoid/fields/standard.rb +7 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +233 -40
- data/lib/mongoid/findable.rb +34 -13
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +185 -16
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher.rb +33 -13
- data/lib/mongoid/persistable/creatable.rb +18 -9
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +2 -2
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +19 -12
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistable.rb +3 -3
- data/lib/mongoid/persistence_context.rb +63 -10
- data/lib/mongoid/query_cache.rb +8 -260
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +26 -22
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/shardable.rb +35 -11
- data/lib/mongoid/stateful.rb +35 -9
- data/lib/mongoid/tasks/database.rb +0 -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/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +6 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +2 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -12
- 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 +95 -1
- data/spec/integration/callbacks_spec.rb +246 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +115 -76
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +1 -17
- 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 +69 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +235 -40
- data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -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_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 +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +202 -201
- 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 +8 -8
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +160 -119
- 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 +14 -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_spec.rb +551 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/options_spec.rb +1 -0
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +57 -2
- data/spec/mongoid/config_spec.rb +78 -18
- 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 +1336 -69
- data/spec/mongoid/contextual/mongo_spec.rb +1253 -247
- data/spec/mongoid/contextual/none_spec.rb +38 -0
- data/spec/mongoid/copyable_spec.rb +451 -1
- 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 +0 -59
- 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/selectable_logical_spec.rb +50 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +289 -124
- data/spec/mongoid/criteria/queryable/selector_spec.rb +89 -4
- data/spec/mongoid/criteria/queryable/storable_spec.rb +72 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +0 -1
- data/spec/mongoid/criteria_spec.rb +475 -1199
- 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 +76 -0
- 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/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 +634 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +37 -12
- data/spec/mongoid/fields_spec.rb +364 -50
- data/spec/mongoid/findable_spec.rb +80 -15
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +39 -20
- data/spec/mongoid/interceptable_spec.rb +807 -27
- 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 +2 -2
- data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
- data/spec/mongoid/persistence_context_spec.rb +50 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +0 -154
- data/spec/mongoid/reloadable_spec.rb +59 -2
- data/spec/mongoid/scopable_spec.rb +54 -16
- data/spec/mongoid/shardable_models.rb +14 -0
- data/spec/mongoid/shardable_spec.rb +157 -51
- data/spec/mongoid/stateful_spec.rb +28 -0
- data/spec/mongoid/timestamps_spec.rb +390 -0
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +116 -0
- data/spec/mongoid/touchable_spec_models.rb +12 -8
- data/spec/mongoid/traversable_spec.rb +4 -11
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +59 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +1 -1
- 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 +7 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +10 -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 +32 -8
- data/spec/shared/shlib/set_env.sh +4 -4
- data/spec/support/constraints.rb +24 -0
- data/spec/support/macros.rb +46 -0
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +3 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/code.rb +2 -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/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 +4 -1
- metadata +682 -635
- 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/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
|
|
@@ -1077,8 +1078,8 @@ describe Mongoid::Attributes do
|
|
1077
1078
|
context "after the attribute has been assigned" do
|
1078
1079
|
|
1079
1080
|
it "returns the default value" do
|
1080
|
-
person.age = "
|
1081
|
-
expect(person.age_before_type_cast).to eq("
|
1081
|
+
person.age = "42"
|
1082
|
+
expect(person.age_before_type_cast).to eq("42")
|
1082
1083
|
end
|
1083
1084
|
end
|
1084
1085
|
|
@@ -1265,15 +1266,15 @@ describe Mongoid::Attributes do
|
|
1265
1266
|
|
1266
1267
|
context "before the attribute has been assigned" do
|
1267
1268
|
|
1268
|
-
it "returns
|
1269
|
-
expect(person.has_attribute_before_type_cast?(:age)).to be
|
1269
|
+
it "returns true" do
|
1270
|
+
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
1270
1271
|
end
|
1271
1272
|
end
|
1272
1273
|
|
1273
1274
|
context "after the attribute has been assigned" do
|
1274
1275
|
|
1275
1276
|
it "returns true" do
|
1276
|
-
person.age = '
|
1277
|
+
person.age = '42'
|
1277
1278
|
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
1278
1279
|
end
|
1279
1280
|
end
|
@@ -1528,12 +1529,13 @@ describe Mongoid::Attributes do
|
|
1528
1529
|
end
|
1529
1530
|
|
1530
1531
|
context "when setting an attribute that needs type casting" do
|
1532
|
+
|
1531
1533
|
let(:person) do
|
1532
|
-
Person.new(age: "
|
1534
|
+
Person.new(age: "42")
|
1533
1535
|
end
|
1534
1536
|
|
1535
1537
|
it "should store the attribute before type cast" do
|
1536
|
-
expect(person.age_before_type_cast).to eq("
|
1538
|
+
expect(person.age_before_type_cast).to eq("42")
|
1537
1539
|
end
|
1538
1540
|
end
|
1539
1541
|
|
@@ -1581,16 +1583,14 @@ describe Mongoid::Attributes do
|
|
1581
1583
|
context "when attribute is a Hash" do
|
1582
1584
|
let(:person) { Person.new map: { somekey: "somevalue" } }
|
1583
1585
|
|
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/)
|
1586
|
+
it "writes nil when trying to set a value of invalid type - array" do
|
1587
|
+
person.map = []
|
1588
|
+
expect(person.map).to be_nil
|
1588
1589
|
end
|
1589
1590
|
|
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/)
|
1591
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
1592
|
+
person.map = false
|
1593
|
+
expect(person.map).to be_nil
|
1594
1594
|
end
|
1595
1595
|
|
1596
1596
|
it "can set a Hash value" do
|
@@ -1605,16 +1605,14 @@ describe Mongoid::Attributes do
|
|
1605
1605
|
expect(person.aliases).to eq([ :alias_1 ])
|
1606
1606
|
end
|
1607
1607
|
|
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/)
|
1608
|
+
it "writes nil when trying to set a value of invalid type - hash" do
|
1609
|
+
person.aliases = {}
|
1610
|
+
expect(person.aliases).to be_nil
|
1612
1611
|
end
|
1613
1612
|
|
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/)
|
1613
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
1614
|
+
person.aliases = false
|
1615
|
+
expect(person.aliases).to be_nil
|
1618
1616
|
end
|
1619
1617
|
end
|
1620
1618
|
|
@@ -1675,6 +1673,50 @@ describe Mongoid::Attributes do
|
|
1675
1673
|
end
|
1676
1674
|
end
|
1677
1675
|
end
|
1676
|
+
|
1677
|
+
context "when comparing the object_ids of the written value" do
|
1678
|
+
config_override :legacy_attributes, false
|
1679
|
+
|
1680
|
+
before do
|
1681
|
+
Person.create!
|
1682
|
+
end
|
1683
|
+
|
1684
|
+
let(:person) do
|
1685
|
+
Person.first
|
1686
|
+
end
|
1687
|
+
|
1688
|
+
context "when the field is not resizable" do
|
1689
|
+
let(:test) do
|
1690
|
+
person.write_attribute(:test, "aliased field to test")
|
1691
|
+
end
|
1692
|
+
|
1693
|
+
it "has the same object_id as the attributes hash value" do
|
1694
|
+
expect(test.object_id).to eq(person.test.object_id)
|
1695
|
+
end
|
1696
|
+
end
|
1697
|
+
|
1698
|
+
context "when the field is resizable" do
|
1699
|
+
|
1700
|
+
let(:arrays) do
|
1701
|
+
person.write_attribute(:arrays, [])
|
1702
|
+
end
|
1703
|
+
|
1704
|
+
it "has the same object_id as the attributes hash value" do
|
1705
|
+
expect(arrays.object_id).to eq(person.arrays.object_id)
|
1706
|
+
end
|
1707
|
+
end
|
1708
|
+
|
1709
|
+
context "when the field is a HABTM foreign key array" do
|
1710
|
+
|
1711
|
+
let(:preference_ids) do
|
1712
|
+
person.write_attribute(:preference_ids, [])
|
1713
|
+
end
|
1714
|
+
|
1715
|
+
it "has the same object_id as the attributes hash value" do
|
1716
|
+
expect(preference_ids.object_id).to eq(person.preference_ids.object_id)
|
1717
|
+
end
|
1718
|
+
end
|
1719
|
+
end
|
1678
1720
|
end
|
1679
1721
|
|
1680
1722
|
describe "#typed_value_for" do
|
@@ -1855,11 +1897,11 @@ describe Mongoid::Attributes do
|
|
1855
1897
|
end
|
1856
1898
|
|
1857
1899
|
it "has 3 new entries" do
|
1858
|
-
expect(pet.vet_visits.count).to eq
|
1900
|
+
expect(pet.vet_visits.count).to eq 3
|
1859
1901
|
end
|
1860
1902
|
|
1861
1903
|
it "persists the changes" do
|
1862
|
-
expect(pet.reload.vet_visits.count).to eq
|
1904
|
+
expect(pet.reload.vet_visits.count).to eq 3
|
1863
1905
|
end
|
1864
1906
|
end
|
1865
1907
|
|
@@ -2029,8 +2071,8 @@ describe Mongoid::Attributes do
|
|
2029
2071
|
end
|
2030
2072
|
|
2031
2073
|
it "aliases *_before_type_cast" do
|
2032
|
-
product.cost = "
|
2033
|
-
expect(product.cost_before_type_cast).to eq("
|
2074
|
+
product.cost = "42"
|
2075
|
+
expect(product.cost_before_type_cast).to eq("42")
|
2034
2076
|
end
|
2035
2077
|
end
|
2036
2078
|
|
@@ -2214,4 +2256,486 @@ describe Mongoid::Attributes do
|
|
2214
2256
|
end
|
2215
2257
|
end
|
2216
2258
|
end
|
2259
|
+
|
2260
|
+
context "when an attribute is removed then set" do
|
2261
|
+
let(:cat) { Cat.create!(name: "Neil") }
|
2262
|
+
|
2263
|
+
before do
|
2264
|
+
cat.remove_attribute("name")
|
2265
|
+
cat.name = "Nissim"
|
2266
|
+
cat.save!
|
2267
|
+
cat.reload
|
2268
|
+
end
|
2269
|
+
|
2270
|
+
it "correctly sets the attribute" do
|
2271
|
+
expect(cat.name).to eq("Nissim")
|
2272
|
+
end
|
2273
|
+
end
|
2274
|
+
|
2275
|
+
describe "attributes after setting an association without reloading" do
|
2276
|
+
|
2277
|
+
context "on embeds_many" do
|
2278
|
+
|
2279
|
+
context "when not setting anything" do
|
2280
|
+
let(:doc) { NestedBook.create! }
|
2281
|
+
|
2282
|
+
it "doesn't add attributes" do
|
2283
|
+
expect(doc.attributes).to_not have_key("pages")
|
2284
|
+
end
|
2285
|
+
|
2286
|
+
it "has the same attributes after reloading" do
|
2287
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2288
|
+
end
|
2289
|
+
end
|
2290
|
+
|
2291
|
+
context "when using nested attributes" do
|
2292
|
+
let(:doc) { NestedBook.create! }
|
2293
|
+
|
2294
|
+
before do
|
2295
|
+
doc.update_attributes({ pages_attributes: [ {} ] })
|
2296
|
+
end
|
2297
|
+
|
2298
|
+
it "updates the attributes" do
|
2299
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2300
|
+
end
|
2301
|
+
|
2302
|
+
it "has the same attributes after reloading" do
|
2303
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2304
|
+
end
|
2305
|
+
end
|
2306
|
+
|
2307
|
+
context "when doing assignments" do
|
2308
|
+
let(:doc) { NestedBook.create! }
|
2309
|
+
before do
|
2310
|
+
doc.pages = [NestedPage.new]
|
2311
|
+
end
|
2312
|
+
|
2313
|
+
it "updates the attributes" do
|
2314
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2315
|
+
end
|
2316
|
+
|
2317
|
+
it "has the same attributes after reloading" do
|
2318
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2319
|
+
end
|
2320
|
+
end
|
2321
|
+
|
2322
|
+
context "when replacing assignments" do
|
2323
|
+
let(:doc) { NestedBook.create! }
|
2324
|
+
before do
|
2325
|
+
doc.pages = [NestedPage.new(number: 1)]
|
2326
|
+
doc.pages = [NestedPage.new(number: 2)]
|
2327
|
+
end
|
2328
|
+
|
2329
|
+
it "updates the attributes" do
|
2330
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id, "number" => 2 }])
|
2331
|
+
end
|
2332
|
+
|
2333
|
+
it "has the same attributes after reloading" do
|
2334
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2335
|
+
end
|
2336
|
+
end
|
2337
|
+
|
2338
|
+
context "when setting to nil" do
|
2339
|
+
let(:doc) { NestedBook.create! }
|
2340
|
+
before do
|
2341
|
+
doc.pages = [NestedPage.new(number: 1)]
|
2342
|
+
doc.pages = nil
|
2343
|
+
end
|
2344
|
+
|
2345
|
+
it "updates the attributes" do
|
2346
|
+
expect(doc.attributes).to_not have_key("pages")
|
2347
|
+
end
|
2348
|
+
|
2349
|
+
it "has the same attributes after reloading" do
|
2350
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
2351
|
+
end
|
2352
|
+
end
|
2353
|
+
|
2354
|
+
context "when setting to nil and back" do
|
2355
|
+
let(:doc) { NestedBook.create! }
|
2356
|
+
let(:page) { NestedPage.new }
|
2357
|
+
before do
|
2358
|
+
doc.pages = [page]
|
2359
|
+
doc.pages = nil
|
2360
|
+
doc.pages = [page]
|
2361
|
+
end
|
2362
|
+
|
2363
|
+
it "updates the attributes" do
|
2364
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2365
|
+
end
|
2366
|
+
|
2367
|
+
it "has the same attributes after reloading" do
|
2368
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2369
|
+
end
|
2370
|
+
end
|
2371
|
+
|
2372
|
+
context "when pushing" do
|
2373
|
+
let(:doc) { NestedBook.create! }
|
2374
|
+
before do
|
2375
|
+
doc.pages << NestedPage.new
|
2376
|
+
end
|
2377
|
+
|
2378
|
+
it "updates the attributes" do
|
2379
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2380
|
+
end
|
2381
|
+
|
2382
|
+
it "has the same attributes after reloading" do
|
2383
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2384
|
+
end
|
2385
|
+
end
|
2386
|
+
|
2387
|
+
[:shift, :pop].each do |meth|
|
2388
|
+
context "when performing #{meth}" do
|
2389
|
+
let(:doc) { NestedBook.create! }
|
2390
|
+
before do
|
2391
|
+
doc.pages << NestedPage.new
|
2392
|
+
doc.pages << NestedPage.new
|
2393
|
+
doc.pages << NestedPage.new
|
2394
|
+
|
2395
|
+
doc.pages.send(meth, 2)
|
2396
|
+
end
|
2397
|
+
|
2398
|
+
it "updates the attributes" do
|
2399
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2400
|
+
end
|
2401
|
+
|
2402
|
+
it "has the same attributes after reloading" do
|
2403
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2404
|
+
end
|
2405
|
+
end
|
2406
|
+
end
|
2407
|
+
|
2408
|
+
context "when concatting" do
|
2409
|
+
let(:doc) { NestedBook.create! }
|
2410
|
+
before do
|
2411
|
+
doc.pages << NestedPage.new
|
2412
|
+
doc.pages.concat([NestedPage.new, NestedPage.new])
|
2413
|
+
end
|
2414
|
+
|
2415
|
+
it "updates the attributes" do
|
2416
|
+
expect(doc.attributes["pages"].count).to eq 3
|
2417
|
+
end
|
2418
|
+
|
2419
|
+
it "has the same attributes after reloading" do
|
2420
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2421
|
+
end
|
2422
|
+
end
|
2423
|
+
|
2424
|
+
[:build, :create].each do |meth|
|
2425
|
+
context "when preforming #{meth}" do
|
2426
|
+
let(:doc) { NestedBook.create! }
|
2427
|
+
before do
|
2428
|
+
doc.pages.send(meth)
|
2429
|
+
end
|
2430
|
+
|
2431
|
+
it "updates the attributes" do
|
2432
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2433
|
+
end
|
2434
|
+
|
2435
|
+
it "has the same attributes after reloading" do
|
2436
|
+
doc.pages.first.save
|
2437
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2438
|
+
end
|
2439
|
+
end
|
2440
|
+
end
|
2441
|
+
|
2442
|
+
context "when clearing" do
|
2443
|
+
let(:doc) { NestedBook.create! }
|
2444
|
+
before do
|
2445
|
+
doc.pages << NestedPage.new
|
2446
|
+
doc.pages << NestedPage.new
|
2447
|
+
doc.pages << NestedPage.new
|
2448
|
+
|
2449
|
+
doc.pages.clear
|
2450
|
+
end
|
2451
|
+
|
2452
|
+
it "updates the attributes" do
|
2453
|
+
expect(doc.attributes).to_not have_key("pages")
|
2454
|
+
end
|
2455
|
+
|
2456
|
+
it "has the same attributes after reloading" do
|
2457
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2458
|
+
end
|
2459
|
+
end
|
2460
|
+
|
2461
|
+
[:delete_all, :destroy_all, :remove_all].each do |meth|
|
2462
|
+
context "when performing: #{meth}" do
|
2463
|
+
let(:doc) { NestedBook.create! }
|
2464
|
+
before do
|
2465
|
+
doc.pages << NestedPage.new
|
2466
|
+
doc.pages << NestedPage.new
|
2467
|
+
doc.pages << NestedPage.new
|
2468
|
+
|
2469
|
+
doc.pages.send(meth)
|
2470
|
+
end
|
2471
|
+
|
2472
|
+
it "updates the attributes" do
|
2473
|
+
expect(doc.attributes).to_not have_key("pages")
|
2474
|
+
end
|
2475
|
+
|
2476
|
+
it "has the same attributes after reloading" do
|
2477
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
2478
|
+
end
|
2479
|
+
end
|
2480
|
+
end
|
2481
|
+
|
2482
|
+
context "when deleting" do
|
2483
|
+
let(:doc) { NestedBook.create! }
|
2484
|
+
let(:page) { NestedPage.new }
|
2485
|
+
before do
|
2486
|
+
doc.pages << page
|
2487
|
+
doc.pages << NestedPage.new
|
2488
|
+
doc.pages << NestedPage.new
|
2489
|
+
|
2490
|
+
doc.pages.delete(page)
|
2491
|
+
end
|
2492
|
+
|
2493
|
+
it "updates the attributes" do
|
2494
|
+
expect(doc.attributes["pages"].count).to eq 2
|
2495
|
+
end
|
2496
|
+
|
2497
|
+
it "has the same attributes after reloading" do
|
2498
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2499
|
+
end
|
2500
|
+
end
|
2501
|
+
|
2502
|
+
context "when doing _remove" do
|
2503
|
+
let(:doc) { NestedBook.create! }
|
2504
|
+
let(:page) { NestedPage.new }
|
2505
|
+
before do
|
2506
|
+
doc.pages << page
|
2507
|
+
doc.pages << NestedPage.new
|
2508
|
+
doc.pages << NestedPage.new
|
2509
|
+
|
2510
|
+
doc.pages._remove(page)
|
2511
|
+
end
|
2512
|
+
|
2513
|
+
it "updates the attributes" do
|
2514
|
+
expect(doc.attributes["pages"].count).to eq 2
|
2515
|
+
end
|
2516
|
+
end
|
2517
|
+
|
2518
|
+
context "when assigning an array of hashes" do
|
2519
|
+
let(:doc) { NestedBook.create! }
|
2520
|
+
before do
|
2521
|
+
doc.pages = [{}]
|
2522
|
+
end
|
2523
|
+
|
2524
|
+
it "updates the attributes" do
|
2525
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2526
|
+
end
|
2527
|
+
|
2528
|
+
it "has the same attributes after reloading" do
|
2529
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2530
|
+
end
|
2531
|
+
end
|
2532
|
+
|
2533
|
+
context "when assigning twice" do
|
2534
|
+
let(:doc) { NestedBook.create! }
|
2535
|
+
before do
|
2536
|
+
doc.pages = [{ number: 1 }]
|
2537
|
+
doc.pages = [{}]
|
2538
|
+
end
|
2539
|
+
|
2540
|
+
it "updates the attributes" do
|
2541
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
2542
|
+
end
|
2543
|
+
|
2544
|
+
it "has the same attributes after reloading" do
|
2545
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2546
|
+
end
|
2547
|
+
end
|
2548
|
+
end
|
2549
|
+
|
2550
|
+
context "on embeds_one" do
|
2551
|
+
|
2552
|
+
let(:attrs) { { "title" => "Title" } }
|
2553
|
+
|
2554
|
+
context "when using nested attributes" do
|
2555
|
+
let(:doc) { NestedBook.create! }
|
2556
|
+
|
2557
|
+
before do
|
2558
|
+
doc.update_attributes({ cover_attributes: attrs })
|
2559
|
+
end
|
2560
|
+
|
2561
|
+
it "updates the attributes" do
|
2562
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2563
|
+
end
|
2564
|
+
|
2565
|
+
it "has the same attributes after reloading" do
|
2566
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2567
|
+
end
|
2568
|
+
end
|
2569
|
+
|
2570
|
+
context "when doing assignments" do
|
2571
|
+
let(:doc) { NestedBook.create! }
|
2572
|
+
before do
|
2573
|
+
doc.cover = NestedCover.new(attrs)
|
2574
|
+
end
|
2575
|
+
|
2576
|
+
it "updates the attributes" do
|
2577
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2578
|
+
end
|
2579
|
+
|
2580
|
+
it "has the same attributes after reloading" do
|
2581
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2582
|
+
end
|
2583
|
+
end
|
2584
|
+
|
2585
|
+
context "when replacing assignments" do
|
2586
|
+
let(:doc) { NestedBook.create! }
|
2587
|
+
before do
|
2588
|
+
doc.cover = NestedCover.new("title" => "Title1")
|
2589
|
+
doc.cover = NestedCover.new(attrs)
|
2590
|
+
end
|
2591
|
+
|
2592
|
+
it "updates the attributes" do
|
2593
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2594
|
+
end
|
2595
|
+
|
2596
|
+
it "has the same attributes after reloading" do
|
2597
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2598
|
+
end
|
2599
|
+
end
|
2600
|
+
|
2601
|
+
context "when setting to nil" do
|
2602
|
+
let(:doc) { NestedBook.create! }
|
2603
|
+
before do
|
2604
|
+
doc.cover = NestedCover.new(attrs)
|
2605
|
+
doc.cover = nil
|
2606
|
+
end
|
2607
|
+
|
2608
|
+
it "updates the attributes" do
|
2609
|
+
expect(doc.attributes.key?("cover")).to be false
|
2610
|
+
end
|
2611
|
+
|
2612
|
+
it "has the same attributes after reloading" do
|
2613
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2614
|
+
end
|
2615
|
+
end
|
2616
|
+
|
2617
|
+
context "when setting to nil and back" do
|
2618
|
+
let(:doc) { NestedBook.create! }
|
2619
|
+
before do
|
2620
|
+
doc.cover = NestedCover.new(attrs)
|
2621
|
+
doc.cover = nil
|
2622
|
+
doc.cover = NestedCover.new(attrs)
|
2623
|
+
end
|
2624
|
+
|
2625
|
+
it "updates the attributes" do
|
2626
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2627
|
+
end
|
2628
|
+
|
2629
|
+
|
2630
|
+
it "has the same attributes after reloading" do
|
2631
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2632
|
+
end
|
2633
|
+
end
|
2634
|
+
|
2635
|
+
[:build, :create].each do |meth|
|
2636
|
+
context "when preforming #{meth}" do
|
2637
|
+
let(:doc) { NestedBook.create! }
|
2638
|
+
before do
|
2639
|
+
doc.send("#{meth}_cover", attrs)
|
2640
|
+
end
|
2641
|
+
|
2642
|
+
it "updates the attributes" do
|
2643
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2644
|
+
end
|
2645
|
+
|
2646
|
+
it "has the same attributes after reloading" do
|
2647
|
+
doc.cover.save
|
2648
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2649
|
+
end
|
2650
|
+
end
|
2651
|
+
end
|
2652
|
+
|
2653
|
+
context "when assigning a hash" do
|
2654
|
+
let(:doc) { NestedBook.create! }
|
2655
|
+
before do
|
2656
|
+
doc.cover = attrs
|
2657
|
+
end
|
2658
|
+
|
2659
|
+
it "updates the attributes" do
|
2660
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2661
|
+
end
|
2662
|
+
|
2663
|
+
it "has the same attributes after reloading" do
|
2664
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2665
|
+
end
|
2666
|
+
end
|
2667
|
+
|
2668
|
+
context "when assigning twice" do
|
2669
|
+
let(:doc) { NestedBook.create! }
|
2670
|
+
before do
|
2671
|
+
doc.cover = { "title" => "1984" }
|
2672
|
+
doc.cover = attrs
|
2673
|
+
end
|
2674
|
+
|
2675
|
+
it "updates the attributes" do
|
2676
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
2677
|
+
end
|
2678
|
+
|
2679
|
+
it "has the same attributes after reloading" do
|
2680
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
2681
|
+
end
|
2682
|
+
end
|
2683
|
+
end
|
2684
|
+
end
|
2685
|
+
|
2686
|
+
context "when modifiying a hash referenced with the [] notation" do
|
2687
|
+
let(:church) { Church.create!(location: { x: 1 }) }
|
2688
|
+
|
2689
|
+
before do
|
2690
|
+
church[:location].merge!(y: 2)
|
2691
|
+
church.save!
|
2692
|
+
church.reload
|
2693
|
+
end
|
2694
|
+
|
2695
|
+
it "persists the updated hash" do
|
2696
|
+
church.location.should == { "x" => 1, "y" => 2 }
|
2697
|
+
end
|
2698
|
+
end
|
2699
|
+
|
2700
|
+
context "when modifiying a set referenced with the [] notation" do
|
2701
|
+
let(:catalog) { Catalog.create!(set_field: [ 1 ].to_set) }
|
2702
|
+
|
2703
|
+
before do
|
2704
|
+
catalog[:set_field] << 2
|
2705
|
+
catalog.save!
|
2706
|
+
catalog.reload
|
2707
|
+
end
|
2708
|
+
|
2709
|
+
it "persists the updated hash" do
|
2710
|
+
pending "MONGOID-2951"
|
2711
|
+
catalog.set_field.should == Set.new([ 1, 2 ])
|
2712
|
+
end
|
2713
|
+
end
|
2714
|
+
|
2715
|
+
context 'when an embedded field has a capitalized store_as name' do
|
2716
|
+
let(:person) { Person.new(Purse: { brand: 'Gucci' }) }
|
2717
|
+
|
2718
|
+
it 'sets the value' do
|
2719
|
+
expect(person.purse.brand).to eq('Gucci')
|
2720
|
+
end
|
2721
|
+
|
2722
|
+
it 'saves successfully' do
|
2723
|
+
expect(person.save!).to eq(true)
|
2724
|
+
end
|
2725
|
+
|
2726
|
+
context 'when persisted' do
|
2727
|
+
before do
|
2728
|
+
person.save!
|
2729
|
+
person.reload
|
2730
|
+
end
|
2731
|
+
|
2732
|
+
it 'persists the value' do
|
2733
|
+
expect(person.reload.purse.brand).to eq('Gucci')
|
2734
|
+
end
|
2735
|
+
|
2736
|
+
it 'uses the correct key in the database' do
|
2737
|
+
expect(person.collection.find(_id: person.id).first['Purse']['_id']).to eq(person.purse.id)
|
2738
|
+
end
|
2739
|
+
end
|
2740
|
+
end
|
2217
2741
|
end
|
@@ -45,7 +45,7 @@ describe Mongoid::Cacheable do
|
|
45
45
|
context "with the default cache_timestamp_format" do
|
46
46
|
|
47
47
|
let!(:updated_at) do
|
48
|
-
document.updated_at.utc.
|
48
|
+
document.updated_at.utc.to_formatted_s(:nsec)
|
49
49
|
end
|
50
50
|
|
51
51
|
it "has the id and updated_at key name" do
|
@@ -64,7 +64,7 @@ describe Mongoid::Cacheable do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
let!(:updated_at) do
|
67
|
-
document.updated_at.utc.
|
67
|
+
document.updated_at.utc.to_formatted_s(:number)
|
68
68
|
end
|
69
69
|
|
70
70
|
it "has the id and updated_at key name" do
|
@@ -103,7 +103,7 @@ describe Mongoid::Cacheable do
|
|
103
103
|
end
|
104
104
|
|
105
105
|
let!(:updated_at) do
|
106
|
-
agent.updated_at.utc.
|
106
|
+
agent.updated_at.utc.to_formatted_s(:nsec)
|
107
107
|
end
|
108
108
|
|
109
109
|
it "has the id and updated_at key name" do
|