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
@@ -138,5 +138,114 @@ describe Mongoid::Association::Referenced::HasMany::Buildable do
|
|
138
138
|
end
|
139
139
|
end
|
140
140
|
end
|
141
|
+
|
142
|
+
context 'when the object is already associated with another object' do
|
143
|
+
|
144
|
+
context "when using <<" do
|
145
|
+
|
146
|
+
let(:person1) do
|
147
|
+
Person.new
|
148
|
+
end
|
149
|
+
|
150
|
+
let(:person2) do
|
151
|
+
Person.new
|
152
|
+
end
|
153
|
+
|
154
|
+
let(:drug) do
|
155
|
+
Drug.new
|
156
|
+
end
|
157
|
+
|
158
|
+
before do
|
159
|
+
person1.drugs << drug
|
160
|
+
person2.drugs << drug
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'clears the object of its previous association' do
|
164
|
+
expect(person1.drugs).to eq([])
|
165
|
+
expect(person1.drug_ids).to eq([])
|
166
|
+
expect(person2.drugs).to eq([drug])
|
167
|
+
expect(person2.drug_ids).to eq([drug._id])
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
context "when using concat" do
|
172
|
+
|
173
|
+
let(:person1) do
|
174
|
+
Person.new
|
175
|
+
end
|
176
|
+
|
177
|
+
let(:person2) do
|
178
|
+
Person.new
|
179
|
+
end
|
180
|
+
|
181
|
+
let(:drug) do
|
182
|
+
Drug.new
|
183
|
+
end
|
184
|
+
|
185
|
+
before do
|
186
|
+
person1.drugs.concat([drug])
|
187
|
+
person2.drugs.concat([drug])
|
188
|
+
end
|
189
|
+
|
190
|
+
it 'clears the object of its previous association' do
|
191
|
+
expect(person1.drugs).to eq([])
|
192
|
+
expect(person1.drug_ids).to eq([])
|
193
|
+
expect(person2.drugs).to eq([drug])
|
194
|
+
expect(person2.drug_ids).to eq([drug._id])
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
context "when using =" do
|
199
|
+
|
200
|
+
let(:person1) do
|
201
|
+
Person.new
|
202
|
+
end
|
203
|
+
|
204
|
+
let(:person2) do
|
205
|
+
Person.new
|
206
|
+
end
|
207
|
+
|
208
|
+
let(:drug) do
|
209
|
+
Drug.new
|
210
|
+
end
|
211
|
+
|
212
|
+
before do
|
213
|
+
person1.drugs = [drug]
|
214
|
+
person2.drugs = [drug]
|
215
|
+
end
|
216
|
+
|
217
|
+
it 'clears the object of its previous association' do
|
218
|
+
expect(person1.drugs).to eq([])
|
219
|
+
expect(person1.drug_ids).to eq([])
|
220
|
+
expect(person2.drugs).to eq([drug])
|
221
|
+
expect(person2.drug_ids).to eq([drug._id])
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
context "when using = on the same document twice" do
|
226
|
+
|
227
|
+
let(:person1) do
|
228
|
+
Person.new
|
229
|
+
end
|
230
|
+
|
231
|
+
let(:person2) do
|
232
|
+
Person.new
|
233
|
+
end
|
234
|
+
|
235
|
+
let(:drug) do
|
236
|
+
Drug.new
|
237
|
+
end
|
238
|
+
|
239
|
+
before do
|
240
|
+
person1.drugs = [drug]
|
241
|
+
person1.drugs = [drug]
|
242
|
+
end
|
243
|
+
|
244
|
+
it 'clears the object of its previous association' do
|
245
|
+
expect(person1.drugs).to eq([drug])
|
246
|
+
expect(person1.drug_ids).to eq([drug._id])
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
141
250
|
end
|
142
251
|
end
|
@@ -1237,7 +1237,7 @@ describe Mongoid::Association::Referenced::HasMany::Enumerable do
|
|
1237
1237
|
end
|
1238
1238
|
end
|
1239
1239
|
|
1240
|
-
context 'when
|
1240
|
+
context 'when including a limit' do
|
1241
1241
|
|
1242
1242
|
let(:person) do
|
1243
1243
|
Person.create!
|
@@ -1259,12 +1259,12 @@ describe Mongoid::Association::Referenced::HasMany::Enumerable do
|
|
1259
1259
|
person.posts.create!(title: "Two")
|
1260
1260
|
end
|
1261
1261
|
|
1262
|
-
it '
|
1263
|
-
expect(enumerable.first(
|
1262
|
+
it 'returns the matching document' do
|
1263
|
+
expect(enumerable.first(1)).to eq([first_post])
|
1264
1264
|
end
|
1265
1265
|
end
|
1266
1266
|
|
1267
|
-
context 'when
|
1267
|
+
context 'when no parameters are provided' do
|
1268
1268
|
|
1269
1269
|
let(:person) do
|
1270
1270
|
Person.create!
|
@@ -1707,7 +1707,7 @@ describe Mongoid::Association::Referenced::HasMany::Enumerable do
|
|
1707
1707
|
end
|
1708
1708
|
end
|
1709
1709
|
|
1710
|
-
context 'when
|
1710
|
+
context 'when including a limit' do
|
1711
1711
|
|
1712
1712
|
let(:person) do
|
1713
1713
|
Person.create!
|
@@ -1729,12 +1729,12 @@ describe Mongoid::Association::Referenced::HasMany::Enumerable do
|
|
1729
1729
|
person.posts.create!(title: "Two")
|
1730
1730
|
end
|
1731
1731
|
|
1732
|
-
it '
|
1733
|
-
expect(enumerable.last(
|
1732
|
+
it 'returns the matching document' do
|
1733
|
+
expect(enumerable.last(1)).to eq([second_post])
|
1734
1734
|
end
|
1735
1735
|
end
|
1736
1736
|
|
1737
|
-
context 'when
|
1737
|
+
context 'when no parameters are provided' do
|
1738
1738
|
|
1739
1739
|
let(:person) do
|
1740
1740
|
Person.create!
|
@@ -2,6 +2,26 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
+
module RefHasManySpec
|
6
|
+
module OverrideInitialize
|
7
|
+
class Parent
|
8
|
+
include Mongoid::Document
|
9
|
+
has_many :children, inverse_of: :parent
|
10
|
+
end
|
11
|
+
|
12
|
+
class Child
|
13
|
+
include Mongoid::Document
|
14
|
+
belongs_to :parent
|
15
|
+
field :name, type: String
|
16
|
+
|
17
|
+
def initialize(*args)
|
18
|
+
super
|
19
|
+
self.name ||= "default"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
5
25
|
describe Mongoid::Association::Referenced::HasMany::Proxy do
|
6
26
|
|
7
27
|
before :all do
|
@@ -877,6 +897,14 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
877
897
|
[ :build, :new ].each do |method|
|
878
898
|
|
879
899
|
describe "##{method}" do
|
900
|
+
context 'when model has #initialize' do
|
901
|
+
let(:parent) { RefHasManySpec::OverrideInitialize::Parent.create }
|
902
|
+
let(:child) { parent.children.send(method) }
|
903
|
+
|
904
|
+
it 'should call #initialize' do
|
905
|
+
expect(child.name).to be == "default"
|
906
|
+
end
|
907
|
+
end
|
880
908
|
|
881
909
|
context "when the association is not polymorphic" do
|
882
910
|
|
@@ -2077,154 +2105,114 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2077
2105
|
end
|
2078
2106
|
end
|
2079
2107
|
|
2080
|
-
|
2081
|
-
|
2082
|
-
|
2083
|
-
Person.create!(username: 'arthurnn')
|
2084
|
-
end
|
2108
|
+
%i[ delete delete_one ].each do |method|
|
2109
|
+
describe "##{method}" do
|
2110
|
+
let!(:person) { Person.create!(username: 'arthurnn') }
|
2085
2111
|
|
2086
|
-
|
2112
|
+
context 'when the document is found' do
|
2113
|
+
context 'when no dependent option is set' do
|
2114
|
+
context 'when we are assigning attributes' do
|
2115
|
+
let!(:drug) { person.drugs.create! }
|
2116
|
+
let(:deleted) { person.drugs.send(method, drug) }
|
2087
2117
|
|
2088
|
-
|
2118
|
+
before do
|
2119
|
+
Mongoid::Threaded.begin_execution(:assign)
|
2120
|
+
end
|
2089
2121
|
|
2090
|
-
|
2122
|
+
after do
|
2123
|
+
Mongoid::Threaded.exit_execution(:assign)
|
2124
|
+
end
|
2091
2125
|
|
2092
|
-
|
2093
|
-
|
2126
|
+
it 'does not cascade' do
|
2127
|
+
expect(deleted.changes.keys).to eq([ 'person_id' ])
|
2128
|
+
end
|
2094
2129
|
end
|
2095
2130
|
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2131
|
+
context 'when the document is loaded' do
|
2132
|
+
let!(:drug) { person.drugs.create! }
|
2133
|
+
let!(:deleted) { person.drugs.send(method, drug) }
|
2099
2134
|
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2135
|
+
it 'returns the document' do
|
2136
|
+
expect(deleted).to eq(drug)
|
2137
|
+
end
|
2103
2138
|
|
2104
|
-
|
2105
|
-
|
2106
|
-
|
2139
|
+
it 'deletes the foreign key' do
|
2140
|
+
expect(drug.person_id).to be_nil
|
2141
|
+
end
|
2107
2142
|
|
2108
|
-
|
2109
|
-
|
2143
|
+
it 'removes the document from the association' do
|
2144
|
+
expect(person.drugs).not_to include(drug)
|
2145
|
+
end
|
2110
2146
|
end
|
2111
|
-
end
|
2112
2147
|
|
2113
|
-
|
2148
|
+
context 'when the document is not loaded' do
|
2149
|
+
let!(:drug) { Drug.create!(person_id: person.username) }
|
2150
|
+
let!(:deleted) { person.drugs.send(method, drug) }
|
2114
2151
|
|
2115
|
-
|
2116
|
-
|
2117
|
-
|
2152
|
+
it 'returns the document' do
|
2153
|
+
expect(deleted).to eq(drug)
|
2154
|
+
end
|
2118
2155
|
|
2119
|
-
|
2120
|
-
|
2121
|
-
|
2156
|
+
it 'deletes the foreign key' do
|
2157
|
+
expect(drug.person_id).to be_nil
|
2158
|
+
end
|
2122
2159
|
|
2123
|
-
|
2124
|
-
|
2160
|
+
it 'removes the document from the association' do
|
2161
|
+
expect(person.drugs).not_to include(drug)
|
2162
|
+
end
|
2125
2163
|
end
|
2164
|
+
end
|
2126
2165
|
|
2127
|
-
|
2128
|
-
|
2129
|
-
|
2166
|
+
context 'when dependent is delete' do
|
2167
|
+
context 'when the document is loaded' do
|
2168
|
+
let!(:post) { person.posts.create!(title: 'test') }
|
2169
|
+
let!(:deleted) { person.posts.send(method, post) }
|
2130
2170
|
|
2131
|
-
|
2132
|
-
|
2133
|
-
|
2134
|
-
end
|
2171
|
+
it 'returns the document' do
|
2172
|
+
expect(deleted).to eq(post)
|
2173
|
+
end
|
2135
2174
|
|
2136
|
-
|
2175
|
+
it 'deletes the document' do
|
2176
|
+
expect(post).to be_destroyed
|
2177
|
+
end
|
2137
2178
|
|
2138
|
-
|
2139
|
-
|
2179
|
+
it 'removes the document from the association' do
|
2180
|
+
expect(person.posts).not_to include(post)
|
2181
|
+
end
|
2140
2182
|
end
|
2141
2183
|
|
2142
|
-
|
2143
|
-
person.
|
2144
|
-
|
2184
|
+
context 'when the document is not loaded' do
|
2185
|
+
let!(:post) { Post.create!(title: 'foo', person_id: person.id) }
|
2186
|
+
let!(:deleted) { person.posts.send(method, post) }
|
2145
2187
|
|
2146
|
-
|
2147
|
-
|
2148
|
-
|
2188
|
+
it 'returns the document' do
|
2189
|
+
expect(deleted).to eq(post)
|
2190
|
+
end
|
2149
2191
|
|
2150
|
-
|
2151
|
-
|
2152
|
-
|
2192
|
+
it 'deletes the document' do
|
2193
|
+
expect(post).to be_destroyed
|
2194
|
+
end
|
2153
2195
|
|
2154
|
-
|
2155
|
-
|
2196
|
+
it 'removes the document from the association' do
|
2197
|
+
expect(person.posts).not_to include(post)
|
2198
|
+
end
|
2156
2199
|
end
|
2157
2200
|
end
|
2158
2201
|
end
|
2159
2202
|
|
2160
|
-
context
|
2161
|
-
|
2162
|
-
|
2163
|
-
|
2164
|
-
let!(:post) do
|
2165
|
-
person.posts.create!(title: "test")
|
2166
|
-
end
|
2167
|
-
|
2168
|
-
let!(:deleted) do
|
2169
|
-
person.posts.delete(post)
|
2170
|
-
end
|
2203
|
+
context 'when the document is not found' do
|
2204
|
+
let!(:post) { Post.create!(title: 'foo') }
|
2205
|
+
let!(:deleted) { person.posts.send(method, post) }
|
2171
2206
|
|
2172
|
-
|
2173
|
-
|
2174
|
-
end
|
2175
|
-
|
2176
|
-
it "deletes the document" do
|
2177
|
-
expect(post).to be_destroyed
|
2178
|
-
end
|
2179
|
-
|
2180
|
-
it "removes the document from the association" do
|
2181
|
-
expect(person.posts).to_not include(post)
|
2182
|
-
end
|
2207
|
+
it 'returns nil' do
|
2208
|
+
expect(deleted).to be_nil
|
2183
2209
|
end
|
2184
2210
|
|
2185
|
-
|
2186
|
-
|
2187
|
-
let!(:post) do
|
2188
|
-
Post.create!(title: "foo", person_id: person.id)
|
2189
|
-
end
|
2190
|
-
|
2191
|
-
let!(:deleted) do
|
2192
|
-
person.posts.delete(post)
|
2193
|
-
end
|
2194
|
-
|
2195
|
-
it "returns the document" do
|
2196
|
-
expect(deleted).to eq(post)
|
2197
|
-
end
|
2198
|
-
|
2199
|
-
it "deletes the document" do
|
2200
|
-
expect(post).to be_destroyed
|
2201
|
-
end
|
2202
|
-
|
2203
|
-
it "removes the document from the association" do
|
2204
|
-
expect(person.posts).to_not include(post)
|
2205
|
-
end
|
2211
|
+
it 'does not delete the document' do
|
2212
|
+
expect(post).to be_persisted
|
2206
2213
|
end
|
2207
2214
|
end
|
2208
2215
|
end
|
2209
|
-
|
2210
|
-
context "when the document is not found" do
|
2211
|
-
|
2212
|
-
let!(:post) do
|
2213
|
-
Post.create!(title: "foo")
|
2214
|
-
end
|
2215
|
-
|
2216
|
-
let!(:deleted) do
|
2217
|
-
person.posts.delete(post)
|
2218
|
-
end
|
2219
|
-
|
2220
|
-
it "returns nil" do
|
2221
|
-
expect(deleted).to be_nil
|
2222
|
-
end
|
2223
|
-
|
2224
|
-
it "does not delete the document" do
|
2225
|
-
expect(post).to be_persisted
|
2226
|
-
end
|
2227
|
-
end
|
2228
2216
|
end
|
2229
2217
|
|
2230
2218
|
[ :delete_all, :destroy_all ].each do |method|
|
@@ -2540,7 +2528,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2540
2528
|
it "raises an error" do
|
2541
2529
|
expect {
|
2542
2530
|
person.posts.find(post.id)
|
2543
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2531
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
2544
2532
|
end
|
2545
2533
|
end
|
2546
2534
|
|
@@ -2555,7 +2543,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2555
2543
|
it "raises an error" do
|
2556
2544
|
expect {
|
2557
2545
|
person.posts.find(BSON::ObjectId.new)
|
2558
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2546
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
2559
2547
|
end
|
2560
2548
|
end
|
2561
2549
|
|
@@ -2604,7 +2592,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2604
2592
|
it "raises an error" do
|
2605
2593
|
expect {
|
2606
2594
|
person.posts.find([ BSON::ObjectId.new ])
|
2607
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2595
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
2608
2596
|
end
|
2609
2597
|
end
|
2610
2598
|
|
@@ -2668,7 +2656,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2668
2656
|
it "raises an error" do
|
2669
2657
|
expect {
|
2670
2658
|
movie.ratings.find(BSON::ObjectId.new)
|
2671
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2659
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Rating with id\(s\)/)
|
2672
2660
|
end
|
2673
2661
|
end
|
2674
2662
|
|
@@ -2725,7 +2713,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2725
2713
|
it "raises an error" do
|
2726
2714
|
expect {
|
2727
2715
|
movie.ratings.find([ BSON::ObjectId.new ])
|
2728
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
2716
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Rating with id\(s\)/)
|
2729
2717
|
end
|
2730
2718
|
end
|
2731
2719
|
|
@@ -4105,4 +4093,57 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
4105
4093
|
expect(band.same_name).to eq([agent])
|
4106
4094
|
end
|
4107
4095
|
end
|
4096
|
+
|
4097
|
+
context "when removing a document with counter_cache on" do
|
4098
|
+
let(:post) { Post.create! }
|
4099
|
+
let(:person1) { Person.create! }
|
4100
|
+
let(:person2) { Person.create! }
|
4101
|
+
|
4102
|
+
before do
|
4103
|
+
post.update_attribute(:person, person1)
|
4104
|
+
expect(person1.posts_count).to eq 1
|
4105
|
+
|
4106
|
+
person2
|
4107
|
+
post.update_attribute(:person, person2)
|
4108
|
+
person1.reload
|
4109
|
+
expect(person1.posts_count).to eq 0
|
4110
|
+
expect(person2.posts_count).to eq 1
|
4111
|
+
|
4112
|
+
post.update_attribute(:person, nil)
|
4113
|
+
person1.reload
|
4114
|
+
person2.reload
|
4115
|
+
end
|
4116
|
+
|
4117
|
+
it "the count field is updated" do
|
4118
|
+
expect(person2.posts_count).to eq 0
|
4119
|
+
end
|
4120
|
+
end
|
4121
|
+
|
4122
|
+
context "when there is a foreign key in the aliased associations" do
|
4123
|
+
it "has the correct aliases" do
|
4124
|
+
expect(Band.aliased_associations["artist_ids"]).to eq("artists")
|
4125
|
+
expect(Artist.aliased_associations.key?("band_id")).to be false
|
4126
|
+
expect(Artist.aliased_fields["band"]).to eq("band_id")
|
4127
|
+
end
|
4128
|
+
end
|
4129
|
+
|
4130
|
+
context "when executing concat on foreign key array from the db" do
|
4131
|
+
config_override :legacy_attributes, false
|
4132
|
+
|
4133
|
+
before do
|
4134
|
+
Agent.create!
|
4135
|
+
Basic.create!
|
4136
|
+
end
|
4137
|
+
|
4138
|
+
let!(:agent) { Agent.first }
|
4139
|
+
let!(:basic) { Basic.first }
|
4140
|
+
|
4141
|
+
before do
|
4142
|
+
agent.basic_ids.concat([basic.id])
|
4143
|
+
end
|
4144
|
+
|
4145
|
+
it "works on the first attempt" do
|
4146
|
+
expect(agent.basic_ids).to eq([basic.id])
|
4147
|
+
end
|
4148
|
+
end
|
4108
4149
|
end
|
@@ -42,6 +42,7 @@ end
|
|
42
42
|
|
43
43
|
class HmmSchool
|
44
44
|
include Mongoid::Document
|
45
|
+
include Mongoid::Timestamps
|
45
46
|
|
46
47
|
has_many :students, class_name: 'HmmStudent'
|
47
48
|
|
@@ -51,8 +52,9 @@ end
|
|
51
52
|
|
52
53
|
class HmmStudent
|
53
54
|
include Mongoid::Document
|
55
|
+
include Mongoid::Timestamps
|
54
56
|
|
55
|
-
belongs_to :school, class_name: 'HmmSchool'
|
57
|
+
belongs_to :school, class_name: 'HmmSchool', touch: true
|
56
58
|
|
57
59
|
field :name, type: String
|
58
60
|
field :grade, type: Integer, default: 3
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
|
+
require_relative './has_many_models'
|
4
5
|
|
5
6
|
describe Mongoid::Association::Referenced::HasMany do
|
6
7
|
|
@@ -1245,4 +1246,28 @@ describe Mongoid::Association::Referenced::HasMany do
|
|
1245
1246
|
expect(association.create_relation(owner, target)).to be_a(Array)
|
1246
1247
|
end
|
1247
1248
|
end
|
1249
|
+
|
1250
|
+
context "when adding an object to the association" do
|
1251
|
+
let!(:start_time) { Timecop.freeze(Time.at(Time.now.to_i)) }
|
1252
|
+
|
1253
|
+
let(:update_time) do
|
1254
|
+
Timecop.freeze(Time.at(Time.now.to_i) + 2)
|
1255
|
+
end
|
1256
|
+
|
1257
|
+
after do
|
1258
|
+
Timecop.return
|
1259
|
+
end
|
1260
|
+
|
1261
|
+
let!(:school) { HmmSchool.create! }
|
1262
|
+
let!(:student) { HmmStudent.create! }
|
1263
|
+
|
1264
|
+
before do
|
1265
|
+
update_time
|
1266
|
+
student.update(school: school)
|
1267
|
+
end
|
1268
|
+
|
1269
|
+
it "updates the updated_at" do
|
1270
|
+
expect(student.updated_at).to eq(update_time)
|
1271
|
+
end
|
1272
|
+
end
|
1248
1273
|
end
|
@@ -91,7 +91,7 @@ describe Mongoid::Association::Referenced::HasOne::Buildable do
|
|
91
91
|
expect(document).to eq(object)
|
92
92
|
end
|
93
93
|
|
94
|
-
context 'when the object is already
|
94
|
+
context 'when the object is already associated with another object' do
|
95
95
|
|
96
96
|
let(:original_person) do
|
97
97
|
Person.new
|
@@ -105,7 +105,7 @@ describe Mongoid::Association::Referenced::HasOne::Buildable do
|
|
105
105
|
association.build(Person.new, object)
|
106
106
|
end
|
107
107
|
|
108
|
-
it 'clears the object of its previous
|
108
|
+
it 'clears the object of its previous association' do
|
109
109
|
expect(original_person.account).to be_nil
|
110
110
|
end
|
111
111
|
|