mongoid 9.0.11 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -8
- data/README.md +5 -11
- data/Rakefile +35 -38
- data/lib/config/locales/en.yml +11 -0
- data/lib/mongoid/association/accessors.rb +19 -26
- data/lib/mongoid/association/bindable.rb +43 -45
- data/lib/mongoid/association/builders.rb +18 -15
- data/lib/mongoid/association/constrainable.rb +3 -5
- data/lib/mongoid/association/depending.rb +34 -38
- data/lib/mongoid/association/eager.rb +47 -13
- data/lib/mongoid/association/eager_loadable.rb +152 -24
- data/lib/mongoid/association/embedded/batchable.rb +28 -30
- data/lib/mongoid/association/embedded/cyclic.rb +8 -11
- data/lib/mongoid/association/embedded/eager.rb +1 -6
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +6 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +25 -22
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many.rb +24 -21
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +2 -6
- data/lib/mongoid/association/embedded/embeds_one.rb +20 -18
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +3 -7
- data/lib/mongoid/association/many.rb +75 -3
- data/lib/mongoid/association/marshalable.rb +0 -3
- data/lib/mongoid/association/nested/many.rb +18 -13
- data/lib/mongoid/association/nested/nested_buildable.rb +6 -9
- data/lib/mongoid/association/nested/one.rb +4 -7
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +0 -3
- data/lib/mongoid/association/options.rb +8 -7
- data/lib/mongoid/association/referenced/auto_save.rb +0 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +23 -5
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +1 -3
- data/lib/mongoid/association/referenced/belongs_to.rb +48 -43
- data/lib/mongoid/association/referenced/counter_cache.rb +5 -10
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +8 -4
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +52 -47
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_many/buildable.rb +11 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +107 -38
- data/lib/mongoid/association/referenced/has_many/proxy.rb +10 -6
- data/lib/mongoid/association/referenced/has_many.rb +30 -24
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_one.rb +26 -21
- data/lib/mongoid/association/referenced/syncable.rb +30 -34
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +0 -3
- data/lib/mongoid/association/relatable.rb +69 -66
- data/lib/mongoid/association.rb +12 -15
- data/lib/mongoid/atomic/modifiers.rb +65 -25
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +2 -4
- data/lib/mongoid/atomic/paths/embedded.rb +3 -6
- data/lib/mongoid/atomic/paths/root.rb +1 -4
- data/lib/mongoid/atomic/paths.rb +2 -3
- data/lib/mongoid/atomic.rb +0 -3
- data/lib/mongoid/attributes/dynamic.rb +6 -7
- data/lib/mongoid/attributes/nested.rb +8 -10
- data/lib/mongoid/attributes/projector.rb +7 -20
- data/lib/mongoid/attributes/readonly.rb +6 -11
- data/lib/mongoid/attributes.rb +18 -34
- data/lib/mongoid/cacheable.rb +24 -6
- data/lib/mongoid/clients/factory.rb +12 -15
- data/lib/mongoid/clients/options.rb +2 -5
- data/lib/mongoid/clients/sessions.rb +50 -60
- data/lib/mongoid/clients/storage_options.rb +1 -4
- data/lib/mongoid/clients/validators/storage.rb +2 -3
- data/lib/mongoid/clients/validators.rb +1 -2
- data/lib/mongoid/clients.rb +8 -11
- data/lib/mongoid/collection_configurable.rb +10 -14
- data/lib/mongoid/composable.rb +30 -34
- data/lib/mongoid/config/defaults.rb +7 -4
- data/lib/mongoid/config/encryption.rb +1 -3
- data/lib/mongoid/config/environment.rb +7 -16
- data/lib/mongoid/config/introspection.rb +14 -16
- data/lib/mongoid/config/options.rb +16 -10
- data/lib/mongoid/config/validators/async_query_executor.rb +3 -6
- data/lib/mongoid/config/validators/client.rb +12 -15
- data/lib/mongoid/config/validators/option.rb +3 -5
- data/lib/mongoid/config/validators.rb +3 -4
- data/lib/mongoid/config.rb +132 -42
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -4
- data/lib/mongoid/contextual/aggregable/mongo.rb +20 -22
- data/lib/mongoid/contextual/aggregable/none.rb +2 -4
- data/lib/mongoid/contextual/aggregable.rb +5 -7
- data/lib/mongoid/contextual/atomic.rb +20 -24
- data/lib/mongoid/contextual/command.rb +0 -3
- data/lib/mongoid/contextual/map_reduce.rb +12 -16
- data/lib/mongoid/contextual/memory.rb +72 -65
- data/lib/mongoid/contextual/mongo/documents_loader.rb +2 -3
- data/lib/mongoid/contextual/mongo.rb +169 -85
- data/lib/mongoid/contextual/none.rb +9 -9
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +18 -7
- data/lib/mongoid/copyable.rb +7 -9
- data/lib/mongoid/criteria/findable.rb +5 -7
- data/lib/mongoid/criteria/includable.rb +37 -8
- data/lib/mongoid/criteria/inspectable.rb +2 -5
- data/lib/mongoid/criteria/marshalable.rb +4 -8
- data/lib/mongoid/criteria/modifiable.rb +3 -11
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +34 -37
- data/lib/mongoid/criteria/queryable/aggregable.rb +9 -10
- data/lib/mongoid/criteria/queryable/expandable.rb +4 -9
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -10
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +20 -11
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -11
- data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -8
- data/lib/mongoid/criteria/queryable/extensions/range.rb +6 -9
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -12
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -6
- data/lib/mongoid/criteria/queryable/extensions/string.rb +5 -9
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +2 -12
- data/lib/mongoid/criteria/queryable/extensions.rb +18 -21
- data/lib/mongoid/criteria/queryable/key.rb +12 -18
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +31 -39
- data/lib/mongoid/criteria/queryable/optional.rb +17 -18
- data/lib/mongoid/criteria/queryable/options.rb +20 -9
- data/lib/mongoid/criteria/queryable/pipeline.rb +6 -9
- data/lib/mongoid/criteria/queryable/selectable.rb +131 -193
- data/lib/mongoid/criteria/queryable/selector.rb +20 -29
- data/lib/mongoid/criteria/queryable/smash.rb +1 -6
- data/lib/mongoid/criteria/queryable/storable.rb +20 -39
- data/lib/mongoid/criteria/queryable.rb +25 -15
- data/lib/mongoid/criteria/scopable.rb +5 -11
- data/lib/mongoid/criteria/translator.rb +5 -8
- data/lib/mongoid/criteria.rb +109 -54
- data/lib/mongoid/deprecable.rb +1 -4
- data/lib/mongoid/deprecation.rb +2 -6
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/encryptable.rb +1 -2
- data/lib/mongoid/equality.rb +4 -5
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/attribute_not_loaded.rb +1 -4
- data/lib/mongoid/errors/callback.rb +1 -4
- data/lib/mongoid/errors/create_collection_failure.rb +8 -11
- data/lib/mongoid/errors/criteria_argument_required.rb +2 -5
- data/lib/mongoid/errors/delete_restriction.rb +1 -4
- data/lib/mongoid/errors/document_not_destroyed.rb +1 -4
- data/lib/mongoid/errors/document_not_found.rb +16 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +7 -10
- data/lib/mongoid/errors/empty_config_file.rb +1 -4
- data/lib/mongoid/errors/immutable_attribute.rb +1 -4
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -4
- data/lib/mongoid/errors/invalid_async_query_executor.rb +2 -5
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +2 -5
- data/lib/mongoid/errors/invalid_collection.rb +1 -3
- data/lib/mongoid/errors/invalid_config_file.rb +1 -4
- data/lib/mongoid/errors/invalid_config_option.rb +2 -5
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +6 -10
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +2 -4
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -4
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +1 -4
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +1 -4
- data/lib/mongoid/errors/invalid_expression_operator.rb +3 -7
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_field_option.rb +2 -5
- data/lib/mongoid/errors/invalid_field_type.rb +1 -4
- data/lib/mongoid/errors/invalid_find.rb +1 -4
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -4
- data/lib/mongoid/errors/invalid_includes.rb +3 -6
- data/lib/mongoid/errors/invalid_index.rb +1 -4
- data/lib/mongoid/errors/invalid_options.rb +1 -4
- data/lib/mongoid/errors/invalid_path.rb +1 -4
- data/lib/mongoid/errors/invalid_persistence_option.rb +4 -7
- data/lib/mongoid/errors/invalid_query.rb +6 -11
- data/lib/mongoid/errors/invalid_relation.rb +10 -13
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -7
- data/lib/mongoid/errors/invalid_scope.rb +1 -4
- data/lib/mongoid/errors/invalid_session_nesting.rb +0 -3
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +2 -4
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_time.rb +1 -4
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +1 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -4
- data/lib/mongoid/errors/mixed_relations.rb +1 -3
- data/lib/mongoid/errors/mongoid_error.rb +7 -11
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +1 -4
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +1 -4
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +1 -4
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -4
- data/lib/mongoid/errors/no_metadata.rb +1 -4
- data/lib/mongoid/errors/no_parent.rb +1 -4
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -4
- data/lib/mongoid/errors/rollback.rb +0 -2
- data/lib/mongoid/errors/scope_overwrite.rb +2 -4
- data/lib/mongoid/errors/sessions_not_supported.rb +0 -3
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -3
- data/lib/mongoid/errors/transaction_error.rb +0 -3
- data/lib/mongoid/errors/transactions_not_supported.rb +0 -3
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +1 -4
- data/lib/mongoid/errors/unregistered_class.rb +1 -1
- data/lib/mongoid/errors/unsaved_document.rb +1 -3
- data/lib/mongoid/errors/unsupported_isolation_level.rb +22 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -4
- data/lib/mongoid/errors/validations.rb +3 -5
- data/lib/mongoid/errors.rb +72 -72
- data/lib/mongoid/evolvable.rb +0 -3
- data/lib/mongoid/extensions/array.rb +5 -7
- data/lib/mongoid/extensions/big_decimal.rb +6 -7
- data/lib/mongoid/extensions/binary.rb +3 -6
- data/lib/mongoid/extensions/boolean.rb +4 -7
- data/lib/mongoid/extensions/bson_document.rb +28 -0
- data/lib/mongoid/extensions/date.rb +10 -14
- data/lib/mongoid/extensions/date_time.rb +2 -6
- data/lib/mongoid/extensions/decimal128.rb +1 -5
- data/lib/mongoid/extensions/false_class.rb +3 -5
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +5 -10
- data/lib/mongoid/extensions/integer.rb +5 -10
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -1
- data/lib/mongoid/extensions/object.rb +9 -14
- data/lib/mongoid/extensions/object_id.rb +2 -6
- data/lib/mongoid/extensions/range.rb +14 -15
- data/lib/mongoid/extensions/raw_value.rb +0 -3
- data/lib/mongoid/extensions/regexp.rb +3 -6
- data/lib/mongoid/extensions/set.rb +3 -4
- data/lib/mongoid/extensions/string.rb +8 -12
- data/lib/mongoid/extensions/symbol.rb +3 -7
- data/lib/mongoid/extensions/time.rb +24 -26
- data/lib/mongoid/extensions/time_with_zone.rb +4 -7
- data/lib/mongoid/extensions/true_class.rb +3 -5
- data/lib/mongoid/extensions.rb +26 -26
- data/lib/mongoid/factory.rb +5 -9
- data/lib/mongoid/fields/encrypted.rb +0 -1
- data/lib/mongoid/fields/foreign_key.rb +9 -10
- data/lib/mongoid/fields/localized.rb +12 -12
- data/lib/mongoid/fields/standard.rb +5 -7
- data/lib/mongoid/fields/validators/macro.rb +23 -34
- data/lib/mongoid/fields/validators.rb +1 -2
- data/lib/mongoid/fields.rb +151 -58
- data/lib/mongoid/findable.rb +82 -53
- data/lib/mongoid/indexable/specification.rb +20 -6
- data/lib/mongoid/indexable/validators/options.rb +33 -40
- data/lib/mongoid/indexable.rb +26 -25
- data/lib/mongoid/inspectable.rb +4 -7
- data/lib/mongoid/interceptable.rb +41 -40
- data/lib/mongoid/loadable.rb +17 -18
- data/lib/mongoid/loggable.rb +4 -8
- data/lib/mongoid/matchable.rb +0 -2
- data/lib/mongoid/matcher/all.rb +2 -5
- data/lib/mongoid/matcher/and.rb +0 -3
- data/lib/mongoid/matcher/bits.rb +13 -8
- data/lib/mongoid/matcher/bits_all_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_all_set.rb +1 -3
- data/lib/mongoid/matcher/bits_any_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_any_set.rb +1 -3
- data/lib/mongoid/matcher/elem_match.rb +13 -15
- data/lib/mongoid/matcher/elem_match_expression.rb +0 -3
- data/lib/mongoid/matcher/eq.rb +0 -3
- data/lib/mongoid/matcher/eq_impl.rb +12 -17
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +4 -7
- data/lib/mongoid/matcher/exists.rb +1 -4
- data/lib/mongoid/matcher/expression.rb +5 -10
- data/lib/mongoid/matcher/expression_operator.rb +1 -3
- data/lib/mongoid/matcher/field_expression.rb +10 -13
- data/lib/mongoid/matcher/field_operator.rb +4 -6
- data/lib/mongoid/matcher/gt.rb +0 -3
- data/lib/mongoid/matcher/gte.rb +0 -3
- data/lib/mongoid/matcher/in.rb +9 -12
- data/lib/mongoid/matcher/lt.rb +0 -3
- data/lib/mongoid/matcher/lte.rb +0 -3
- data/lib/mongoid/matcher/mod.rb +4 -8
- data/lib/mongoid/matcher/ne.rb +0 -3
- data/lib/mongoid/matcher/nin.rb +0 -3
- data/lib/mongoid/matcher/nor.rb +1 -6
- data/lib/mongoid/matcher/not.rb +0 -3
- data/lib/mongoid/matcher/or.rb +0 -3
- data/lib/mongoid/matcher/regex.rb +11 -14
- data/lib/mongoid/matcher/size.rb +2 -5
- data/lib/mongoid/matcher/type.rb +32 -37
- data/lib/mongoid/matcher.rb +7 -15
- data/lib/mongoid/model_resolver.rb +1 -0
- data/lib/mongoid/persistable/creatable.rb +23 -7
- data/lib/mongoid/persistable/deletable.rb +6 -7
- data/lib/mongoid/persistable/destroyable.rb +2 -6
- data/lib/mongoid/persistable/incrementable.rb +1 -3
- data/lib/mongoid/persistable/logical.rb +3 -5
- data/lib/mongoid/persistable/maxable.rb +2 -4
- data/lib/mongoid/persistable/minable.rb +2 -4
- data/lib/mongoid/persistable/multipliable.rb +1 -3
- data/lib/mongoid/persistable/poppable.rb +2 -4
- data/lib/mongoid/persistable/pullable.rb +3 -5
- data/lib/mongoid/persistable/pushable.rb +5 -7
- data/lib/mongoid/persistable/renamable.rb +1 -3
- data/lib/mongoid/persistable/savable.rb +0 -3
- data/lib/mongoid/persistable/settable.rb +4 -13
- data/lib/mongoid/persistable/unsettable.rb +1 -3
- data/lib/mongoid/persistable/updatable.rb +16 -24
- data/lib/mongoid/persistable/upsertable.rb +8 -10
- data/lib/mongoid/persistable.rb +28 -27
- data/lib/mongoid/persistence_context.rb +34 -41
- data/lib/mongoid/pluckable.rb +0 -2
- data/lib/mongoid/positional.rb +5 -11
- data/lib/mongoid/railtie.rb +16 -22
- data/lib/mongoid/railties/console_sandbox.rb +6 -8
- data/lib/mongoid/railties/controller_runtime.rb +7 -11
- data/lib/mongoid/railties/database.rake +42 -44
- data/lib/mongoid/scopable.rb +23 -31
- data/lib/mongoid/search_indexable.rb +330 -0
- data/lib/mongoid/selectable.rb +1 -3
- data/lib/mongoid/serializable.rb +6 -8
- data/lib/mongoid/shardable.rb +8 -17
- data/lib/mongoid/stateful.rb +5 -10
- data/lib/mongoid/stringified_symbol.rb +5 -9
- data/lib/mongoid/tasks/database.rake +31 -32
- data/lib/mongoid/tasks/database.rb +28 -30
- data/lib/mongoid/tasks/encryption.rb +10 -15
- data/lib/mongoid/threaded/lifecycle.rb +6 -9
- data/lib/mongoid/threaded.rb +132 -32
- data/lib/mongoid/timestamps/created/short.rb +2 -3
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +8 -13
- data/lib/mongoid/timestamps/updated/short.rb +2 -3
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +4 -6
- data/lib/mongoid/touchable.rb +19 -11
- data/lib/mongoid/traversable.rb +3 -2
- data/lib/mongoid/validatable/associated.rb +1 -5
- data/lib/mongoid/validatable/format.rb +0 -2
- data/lib/mongoid/validatable/length.rb +0 -2
- data/lib/mongoid/validatable/localizable.rb +0 -3
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/numericality.rb +24 -3
- data/lib/mongoid/validatable/presence.rb +8 -10
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +12 -14
- data/lib/mongoid/validatable.rb +15 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +10 -11
- data/lib/mongoid.rb +30 -34
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -4
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +4 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +2 -2
- data/lib/rails/generators/mongoid/model/model_generator.rb +5 -8
- data/lib/rails/generators/mongoid_generator.rb +6 -10
- data/lib/rails/mongoid.rb +1 -3
- data/spec/integration/active_job_spec.rb +1 -2
- data/spec/integration/app_spec.rb +142 -178
- data/spec/integration/associations/belongs_to_spec.rb +30 -28
- data/spec/integration/associations/embedded_dirty_spec.rb +0 -1
- data/spec/integration/associations/embedded_spec.rb +41 -43
- data/spec/integration/associations/embeds_many_spec.rb +46 -29
- data/spec/integration/associations/embeds_one_spec.rb +2 -1
- data/spec/integration/associations/foreign_key_spec.rb +10 -11
- data/spec/integration/associations/foreign_key_spec_models.rb +8 -9
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +16 -13
- data/spec/integration/associations/has_many_spec.rb +17 -18
- data/spec/integration/associations/has_one_spec.rb +42 -45
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +36 -39
- data/spec/integration/associations/reverse_population_spec.rb +4 -5
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +18 -20
- data/spec/integration/atomic/modifiers_spec.rb +72 -52
- data/spec/integration/bson_regexp_raw_spec.rb +2 -3
- data/spec/integration/caching_spec.rb +68 -0
- data/spec/integration/callbacks_models.rb +11 -9
- data/spec/integration/callbacks_spec.rb +78 -80
- data/spec/integration/contextual/empty_spec.rb +19 -20
- data/spec/integration/criteria/alias_query_spec.rb +12 -19
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +23 -18
- data/spec/integration/criteria/logical_spec.rb +18 -19
- data/spec/integration/criteria/range_spec.rb +77 -86
- data/spec/integration/criteria/raw_value_spec.rb +122 -109
- data/spec/integration/criteria/time_with_zone_spec.rb +33 -24
- data/spec/integration/discriminator_key_spec.rb +85 -85
- data/spec/integration/discriminator_value_spec.rb +70 -73
- data/spec/integration/document_spec.rb +9 -10
- data/spec/integration/dots_and_dollars_spec.rb +104 -119
- data/spec/integration/encryption_spec.rb +8 -11
- data/spec/integration/i18n_fallbacks_spec.rb +7 -8
- data/spec/integration/isolation_state_spec.rb +241 -0
- data/spec/integration/matcher_examples_spec.rb +145 -168
- data/spec/integration/matcher_operator_data/in.yml +6 -6
- data/spec/integration/matcher_operator_spec.rb +16 -26
- data/spec/integration/matcher_spec.rb +31 -32
- data/spec/integration/persistence/collection_options_spec.rb +0 -2
- data/spec/integration/persistence/range_field_spec.rb +24 -2
- data/spec/integration/server_query_spec.rb +43 -37
- data/spec/integration/shardable_spec.rb +10 -11
- data/spec/integration/stringified_symbol_field_spec.rb +28 -43
- data/spec/lite_spec_helper.rb +11 -12
- data/spec/mongoid/association/accessors_spec.rb +197 -285
- data/spec/mongoid/association/auto_save_spec.rb +62 -93
- data/spec/mongoid/association/builders_spec.rb +121 -74
- data/spec/mongoid/association/constrainable_spec.rb +9 -22
- data/spec/mongoid/association/counter_cache_spec.rb +71 -104
- data/spec/mongoid/association/depending_spec.rb +166 -208
- data/spec/mongoid/association/eager_spec.rb +416 -80
- data/spec/mongoid/association/embedded/cyclic_spec.rb +36 -48
- data/spec/mongoid/association/embedded/dirty_spec.rb +15 -20
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +36 -54
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +8 -15
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +135 -175
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +25 -127
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +9 -14
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +38 -51
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1151 -1340
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -17
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +11 -11
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +25 -138
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +15 -23
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +18 -26
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +204 -273
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +5 -6
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -143
- data/spec/mongoid/association/macros_spec.rb +213 -300
- data/spec/mongoid/association/nested/many_spec.rb +51 -73
- data/spec/mongoid/association/nested/one_spec.rb +56 -80
- data/spec/mongoid/association/options_spec.rb +187 -310
- data/spec/mongoid/association/polymorphic_spec.rb +35 -53
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +55 -76
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +36 -41
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +81 -101
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +258 -345
- data/spec/mongoid/association/referenced/belongs_to_models.rb +4 -3
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +91 -294
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +42 -56
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +41 -32
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +36 -42
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +8 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +771 -975
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +9 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +5 -6
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +59 -177
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +29 -43
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +53 -53
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +104 -67
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +431 -675
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -11
- data/spec/mongoid/association/referenced/has_many_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_many_spec.rb +44 -188
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +26 -38
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +28 -29
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +29 -42
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +270 -332
- data/spec/mongoid/association/referenced/has_one_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_one_spec.rb +40 -188
- data/spec/mongoid/association/reflections_spec.rb +14 -24
- data/spec/mongoid/association/syncable_spec.rb +102 -125
- data/spec/mongoid/association_spec.rb +47 -70
- data/spec/mongoid/atomic/modifiers_spec.rb +184 -197
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +39 -52
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +35 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +9 -15
- data/spec/mongoid/atomic/paths_spec.rb +81 -117
- data/spec/mongoid/atomic_spec.rb +156 -171
- data/spec/mongoid/attributes/dynamic_spec.rb +5 -6
- data/spec/mongoid/attributes/nested_spec.rb +1219 -1692
- data/spec/mongoid/attributes/nested_spec_models.rb +8 -9
- data/spec/mongoid/attributes/projector_spec.rb +2 -6
- data/spec/mongoid/attributes/readonly_spec.rb +73 -97
- data/spec/mongoid/attributes_spec.rb +669 -826
- data/spec/mongoid/cacheable_spec.rb +74 -44
- data/spec/mongoid/changeable_spec.rb +591 -733
- data/spec/mongoid/clients/factory_spec.rb +122 -154
- data/spec/mongoid/clients/options_spec.rb +40 -59
- data/spec/mongoid/clients/sessions_spec.rb +25 -44
- data/spec/mongoid/clients/transactions_spec.rb +33 -50
- data/spec/mongoid/clients/transactions_spec_models.rb +3 -4
- data/spec/mongoid/clients_spec.rb +265 -355
- data/spec/mongoid/collection_configurable_spec.rb +9 -12
- data/spec/mongoid/composable_spec.rb +2 -9
- data/spec/mongoid/config/defaults_spec.rb +24 -31
- data/spec/mongoid/config/encryption_spec.rb +54 -57
- data/spec/mongoid/config/environment_spec.rb +30 -40
- data/spec/mongoid/config/introspection_spec.rb +42 -37
- data/spec/mongoid/config/options_spec.rb +14 -21
- data/spec/mongoid/config_spec.rb +145 -195
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +98 -135
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +4 -7
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +149 -187
- data/spec/mongoid/contextual/aggregable/none_spec.rb +14 -16
- data/spec/mongoid/contextual/atomic_spec.rb +223 -271
- data/spec/mongoid/contextual/map_reduce_spec.rb +110 -138
- data/spec/mongoid/contextual/memory_spec.rb +706 -854
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +12 -13
- data/spec/mongoid/contextual/mongo_spec.rb +1008 -1213
- data/spec/mongoid/contextual/none_spec.rb +54 -59
- data/spec/mongoid/contextual/short_circuit_spec.rb +139 -0
- data/spec/mongoid/copyable_spec.rb +254 -300
- data/spec/mongoid/copyable_spec_models.rb +0 -1
- data/spec/mongoid/criteria/findable_spec.rb +322 -387
- data/spec/mongoid/criteria/includable_spec.rb +421 -372
- data/spec/mongoid/criteria/includable_spec_models.rb +16 -7
- data/spec/mongoid/criteria/inspectable_spec.rb +11 -14
- data/spec/mongoid/criteria/marshalable_spec.rb +11 -14
- data/spec/mongoid/criteria/modifiable_spec.rb +366 -512
- data/spec/mongoid/criteria/options_spec.rb +2 -7
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +112 -141
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +8 -11
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +127 -184
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +123 -60
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +84 -117
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +44 -65
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +86 -108
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +94 -33
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +103 -138
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +95 -34
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +25 -38
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +26 -28
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +32 -54
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +136 -130
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +16 -24
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +15 -24
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +12 -19
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -63
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +28 -42
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +73 -96
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +71 -92
- data/spec/mongoid/criteria/queryable/key_spec.rb +32 -36
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +44 -49
- data/spec/mongoid/criteria/queryable/optional_spec.rb +373 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +172 -123
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +65 -87
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +41 -53
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +576 -680
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +7 -11
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +807 -998
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +154 -191
- data/spec/mongoid/criteria/queryable/selector_spec.rb +294 -390
- data/spec/mongoid/criteria/queryable/smash_spec.rb +6 -11
- data/spec/mongoid/criteria/queryable/storable_spec.rb +54 -81
- data/spec/mongoid/criteria/queryable_mql_spec.rb +92 -0
- data/spec/mongoid/criteria/scopable_spec.rb +102 -138
- data/spec/mongoid/criteria/translator_spec.rb +59 -60
- data/spec/mongoid/criteria_projection_spec.rb +81 -99
- data/spec/mongoid/criteria_spec.rb +935 -950
- data/spec/mongoid/document_fields_spec.rb +28 -30
- data/spec/mongoid/document_persistence_context_spec.rb +13 -15
- data/spec/mongoid/document_query_spec.rb +9 -12
- data/spec/mongoid/document_spec.rb +317 -409
- data/spec/mongoid/equality_spec.rb +69 -102
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -11
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +7 -10
- data/spec/mongoid/errors/callback_spec.rb +8 -11
- data/spec/mongoid/errors/delete_restriction_spec.rb +5 -8
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +7 -10
- data/spec/mongoid/errors/document_not_found_spec.rb +51 -61
- data/spec/mongoid/errors/invalid_collection_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_config_file_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_config_option_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_field_option_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_field_spec.rb +10 -11
- data/spec/mongoid/errors/invalid_field_type_spec.rb +9 -12
- data/spec/mongoid/errors/invalid_find_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_includes_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_index_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_path_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_relation_spec.rb +15 -16
- data/spec/mongoid/errors/invalid_scope_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -6
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_time_spec.rb +8 -11
- data/spec/mongoid/errors/inverse_not_found_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_relations_spec.rb +8 -11
- data/spec/mongoid/errors/mongoid_error_spec.rb +21 -24
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -9
- data/spec/mongoid/errors/no_client_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_client_database_spec.rb +9 -12
- data/spec/mongoid/errors/no_client_hosts_spec.rb +9 -12
- data/spec/mongoid/errors/no_clients_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_environment_spec.rb +8 -11
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +8 -11
- data/spec/mongoid/errors/no_metadata_spec.rb +7 -10
- data/spec/mongoid/errors/no_parent_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_attribute_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_document_spec.rb +6 -9
- data/spec/mongoid/errors/scope_overwrite_spec.rb +9 -12
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +9 -12
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -8
- data/spec/mongoid/errors/unsaved_document_spec.rb +8 -11
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +9 -12
- data/spec/mongoid/errors/validations_spec.rb +11 -14
- data/spec/mongoid/extensions/array_spec.rb +70 -92
- data/spec/mongoid/extensions/big_decimal_spec.rb +233 -313
- data/spec/mongoid/extensions/binary_spec.rb +21 -32
- data/spec/mongoid/extensions/boolean_spec.rb +52 -75
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +43 -54
- data/spec/mongoid/extensions/date_spec.rb +26 -38
- data/spec/mongoid/extensions/date_time_spec.rb +22 -32
- data/spec/mongoid/extensions/decimal128_spec.rb +12 -18
- data/spec/mongoid/extensions/false_class_spec.rb +10 -17
- data/spec/mongoid/extensions/float_spec.rb +40 -61
- data/spec/mongoid/extensions/hash_spec.rb +46 -64
- data/spec/mongoid/extensions/integer_spec.rb +40 -61
- data/spec/mongoid/extensions/module_spec.rb +13 -18
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -5
- data/spec/mongoid/extensions/object_id_spec.rb +159 -247
- data/spec/mongoid/extensions/object_spec.rb +31 -47
- data/spec/mongoid/extensions/range_spec.rb +112 -115
- data/spec/mongoid/extensions/raw_value_spec.rb +10 -12
- data/spec/mongoid/extensions/regexp_spec.rb +23 -36
- data/spec/mongoid/extensions/set_spec.rb +38 -49
- data/spec/mongoid/extensions/string_spec.rb +118 -167
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +29 -43
- data/spec/mongoid/extensions/symbol_spec.rb +12 -20
- data/spec/mongoid/extensions/time_spec.rb +160 -202
- data/spec/mongoid/extensions/time_with_zone_spec.rb +79 -105
- data/spec/mongoid/extensions/true_class_spec.rb +10 -17
- data/spec/mongoid/factory_spec.rb +125 -148
- data/spec/mongoid/fields/foreign_key_spec.rb +124 -169
- data/spec/mongoid/fields/localized_spec.rb +140 -185
- data/spec/mongoid/fields/standard_spec.rb +43 -59
- data/spec/mongoid/fields_spec.rb +751 -620
- data/spec/mongoid/findable_spec.rb +260 -228
- data/spec/mongoid/indexable/specification_spec.rb +42 -58
- data/spec/mongoid/indexable_spec.rb +260 -264
- data/spec/mongoid/inspectable_spec.rb +45 -55
- data/spec/mongoid/interceptable_spec.rb +784 -922
- data/spec/mongoid/interceptable_spec_models.rb +35 -35
- data/spec/mongoid/loading_spec.rb +47 -43
- data/spec/mongoid/loggable_spec.rb +3 -6
- data/spec/mongoid/matcher/extract_attribute_spec.rb +2 -6
- data/spec/mongoid/mongoizable_spec.rb +81 -90
- data/spec/mongoid/monkey_patches_spec.rb +4 -0
- data/spec/mongoid/persistable/creatable_spec.rb +181 -220
- data/spec/mongoid/persistable/deletable_spec.rb +139 -179
- data/spec/mongoid/persistable/destroyable_spec.rb +135 -164
- data/spec/mongoid/persistable/incrementable_spec.rb +65 -84
- data/spec/mongoid/persistable/logical_spec.rb +48 -61
- data/spec/mongoid/persistable/maxable_spec.rb +45 -44
- data/spec/mongoid/persistable/minable_spec.rb +45 -44
- data/spec/mongoid/persistable/multipliable_spec.rb +54 -69
- data/spec/mongoid/persistable/poppable_spec.rb +47 -60
- data/spec/mongoid/persistable/pullable_spec.rb +79 -103
- data/spec/mongoid/persistable/pushable_spec.rb +106 -131
- data/spec/mongoid/persistable/renamable_spec.rb +52 -65
- data/spec/mongoid/persistable/savable_spec.rb +152 -189
- data/spec/mongoid/persistable/settable_spec.rb +121 -145
- data/spec/mongoid/persistable/unsettable_spec.rb +56 -73
- data/spec/mongoid/persistable/updatable_spec.rb +185 -232
- data/spec/mongoid/persistable/upsertable_spec.rb +66 -77
- data/spec/mongoid/persistable_spec.rb +132 -139
- data/spec/mongoid/persistence_context_spec.rb +31 -89
- data/spec/mongoid/positional_spec.rb +67 -79
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +0 -3
- data/spec/mongoid/railties/console_sandbox_spec.rb +0 -1
- data/spec/mongoid/relations/proxy_spec.rb +0 -1
- data/spec/mongoid/reloadable_spec.rb +250 -145
- data/spec/mongoid/scopable_spec.rb +319 -398
- data/spec/mongoid/search_indexable_spec.rb +446 -41
- data/spec/mongoid/selectable_spec.rb +36 -51
- data/spec/mongoid/serializable_spec.rb +269 -312
- data/spec/mongoid/shardable_models.rb +5 -5
- data/spec/mongoid/shardable_spec.rb +44 -46
- data/spec/mongoid/stateful_spec.rb +55 -75
- data/spec/mongoid/tasks/database_rake_spec.rb +138 -141
- data/spec/mongoid/tasks/database_spec.rb +80 -80
- data/spec/mongoid/tasks/encryption_spec.rb +22 -20
- data/spec/mongoid/threaded_spec.rb +57 -83
- data/spec/mongoid/timestamps/created/short_spec.rb +12 -16
- data/spec/mongoid/timestamps/created_spec.rb +16 -20
- data/spec/mongoid/timestamps/timeless_spec.rb +31 -43
- data/spec/mongoid/timestamps/updated/short_spec.rb +21 -28
- data/spec/mongoid/timestamps/updated_spec.rb +18 -25
- data/spec/mongoid/timestamps_spec.rb +171 -188
- data/spec/mongoid/timestamps_spec_models.rb +12 -13
- data/spec/mongoid/touchable_spec.rb +330 -294
- data/spec/mongoid/touchable_spec_models.rb +35 -37
- data/spec/mongoid/traversable_spec.rb +435 -471
- data/spec/mongoid/validatable/associated_spec.rb +42 -60
- data/spec/mongoid/validatable/format_spec.rb +24 -34
- data/spec/mongoid/validatable/length_spec.rb +62 -86
- data/spec/mongoid/validatable/numericality_spec.rb +114 -23
- data/spec/mongoid/validatable/presence_spec.rb +149 -203
- data/spec/mongoid/validatable/uniqueness_spec.rb +632 -830
- data/spec/mongoid/validatable_spec.rb +71 -103
- data/spec/mongoid/warnings_spec.rb +5 -9
- data/spec/mongoid_spec.rb +25 -41
- data/spec/rails/controller_extension/controller_runtime_spec.rb +45 -49
- data/spec/rails/mongoid_spec.rb +15 -15
- data/spec/shared/lib/mrss/cluster_config.rb +5 -40
- data/spec/shared/lib/mrss/constraints.rb +7 -46
- data/spec/shared/lib/mrss/docker_runner.rb +10 -21
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -31
- data/spec/shared/lib/mrss/release/candidate.rb +18 -12
- data/spec/shared/lib/mrss/server_version_registry.rb +1 -5
- data/spec/shared/share/Dockerfile.erb +6 -8
- data/spec/shared/shlib/server.sh +0 -50
- data/spec/shared/shlib/set_env.sh +4 -10
- data/spec/spec_helper.rb +54 -31
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +1 -2
- data/spec/support/constraints.rb +8 -25
- data/spec/support/crypt/models.rb +7 -8
- data/spec/support/crypt.rb +6 -9
- data/spec/support/expectations.rb +21 -7
- data/spec/support/feature_sandbox.rb +1 -4
- data/spec/support/helpers.rb +0 -1
- data/spec/support/immutable_ids.rb +20 -21
- data/spec/support/macros.rb +1 -3
- data/spec/support/models/account.rb +4 -5
- data/spec/support/models/acolyte.rb +5 -5
- data/spec/support/models/actor.rb +3 -3
- data/spec/support/models/actress.rb +0 -1
- data/spec/support/models/address.rb +11 -11
- data/spec/support/models/address_component.rb +1 -1
- data/spec/support/models/address_number.rb +1 -1
- data/spec/support/models/agency.rb +1 -1
- data/spec/support/models/agent.rb +1 -1
- data/spec/support/models/album.rb +1 -2
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +4 -5
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +2 -2
- data/spec/support/models/armrest.rb +0 -1
- data/spec/support/models/array_field.rb +0 -1
- data/spec/support/models/article.rb +0 -1
- data/spec/support/models/artist.rb +16 -12
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +0 -1
- data/spec/support/models/audio.rb +2 -2
- data/spec/support/models/augmentation.rb +1 -2
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +0 -1
- data/spec/support/models/bar.rb +2 -2
- data/spec/support/models/basic.rb +0 -1
- data/spec/support/models/bed.rb +0 -1
- data/spec/support/models/big_palette.rb +0 -1
- data/spec/support/models/birthday.rb +3 -5
- data/spec/support/models/bolt.rb +0 -1
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +1 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -2
- data/spec/support/models/building.rb +0 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +2 -2
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +5 -6
- data/spec/support/models/car.rb +0 -1
- data/spec/support/models/cat.rb +0 -2
- data/spec/support/models/catalog.rb +0 -1
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +5 -6
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +0 -1
- data/spec/support/models/circuit.rb +2 -2
- data/spec/support/models/circus.rb +0 -1
- data/spec/support/models/code.rb +2 -1
- data/spec/support/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +0 -1
- data/spec/support/models/comment.rb +0 -1
- data/spec/support/models/company.rb +0 -1
- data/spec/support/models/consumption_period.rb +0 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +0 -1
- data/spec/support/models/country_code.rb +2 -3
- data/spec/support/models/courier_job.rb +2 -2
- data/spec/support/models/cover.rb +0 -1
- data/spec/support/models/crate.rb +0 -1
- data/spec/support/models/customer.rb +0 -1
- data/spec/support/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +0 -1
- data/spec/support/models/description.rb +0 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +2 -2
- data/spec/support/models/doctor.rb +0 -1
- data/spec/support/models/dog.rb +2 -2
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +0 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +2 -2
- data/spec/support/models/drug.rb +1 -1
- data/spec/support/models/dungeon.rb +1 -1
- data/spec/support/models/edit.rb +1 -1
- data/spec/support/models/email.rb +1 -1
- data/spec/support/models/employer.rb +1 -2
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +0 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +3 -4
- data/spec/support/models/exhibition.rb +1 -1
- data/spec/support/models/exhibitor.rb +1 -1
- data/spec/support/models/explosion.rb +1 -1
- data/spec/support/models/eye.rb +0 -1
- data/spec/support/models/eye_bowl.rb +2 -3
- data/spec/support/models/face.rb +2 -3
- data/spec/support/models/fanatic.rb +1 -1
- data/spec/support/models/favorite.rb +1 -1
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +0 -1
- data/spec/support/models/fish.rb +0 -1
- data/spec/support/models/folder.rb +0 -2
- data/spec/support/models/folder_item.rb +1 -3
- data/spec/support/models/fruits.rb +9 -5
- data/spec/support/models/game.rb +3 -4
- data/spec/support/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +0 -1
- data/spec/support/models/hole.rb +0 -1
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +2 -2
- data/spec/support/models/html_writer.rb +0 -1
- data/spec/support/models/id_key.rb +3 -3
- data/spec/support/models/idnodef.rb +0 -1
- data/spec/support/models/image.rb +0 -1
- data/spec/support/models/implant.rb +1 -2
- data/spec/support/models/instrument.rb +2 -3
- data/spec/support/models/item.rb +2 -2
- data/spec/support/models/jar.rb +1 -2
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +2 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +0 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +0 -1
- data/spec/support/models/line_item.rb +1 -1
- data/spec/support/models/location.rb +1 -1
- data/spec/support/models/login.rb +1 -2
- data/spec/support/models/manufacturer.rb +0 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +1 -1
- data/spec/support/models/message.rb +1 -2
- data/spec/support/models/minim.rb +0 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/modifier_models.rb +25 -0
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -2
- data/spec/support/models/name.rb +4 -5
- data/spec/support/models/name_only.rb +0 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +3 -3
- data/spec/support/models/nut.rb +0 -1
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +1 -1
- data/spec/support/models/ordered_post.rb +1 -1
- data/spec/support/models/ordered_preference.rb +1 -1
- data/spec/support/models/oscar.rb +1 -1
- data/spec/support/models/other_owner_object.rb +0 -1
- data/spec/support/models/override.rb +3 -11
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +0 -1
- data/spec/support/models/page.rb +3 -3
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +2 -2
- data/spec/support/models/parent.rb +2 -2
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +0 -1
- data/spec/support/models/patient.rb +2 -2
- data/spec/support/models/pdf_writer.rb +0 -1
- data/spec/support/models/pencil.rb +0 -1
- data/spec/support/models/person.rb +32 -28
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +1 -2
- data/spec/support/models/piano.rb +0 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +5 -5
- data/spec/support/models/post.rb +12 -12
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +1 -2
- data/spec/support/models/preference.rb +2 -2
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +3 -3
- data/spec/support/models/profile.rb +2 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +2 -2
- data/spec/support/models/publication/encyclopedia.rb +0 -1
- data/spec/support/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +0 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +1 -1
- data/spec/support/models/question.rb +2 -2
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +2 -3
- data/spec/support/models/registry.rb +1 -1
- data/spec/support/models/role.rb +1 -1
- data/spec/support/models/root_category.rb +1 -1
- data/spec/support/models/sandbox/app/models/app_models_message.rb +0 -1
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_user.rb +0 -1
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +0 -1
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +0 -1
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +0 -1
- data/spec/support/models/seat.rb +0 -1
- data/spec/support/models/seo.rb +1 -1
- data/spec/support/models/series.rb +1 -1
- data/spec/support/models/server.rb +1 -1
- data/spec/support/models/service.rb +2 -2
- data/spec/support/models/shape.rb +3 -3
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +2 -2
- data/spec/support/models/shipment_address.rb +0 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +0 -1
- data/spec/support/models/shop.rb +2 -2
- data/spec/support/models/short_agent.rb +0 -1
- data/spec/support/models/short_quiz.rb +1 -1
- data/spec/support/models/simple.rb +1 -1
- data/spec/support/models/slave.rb +1 -1
- data/spec/support/models/song.rb +1 -2
- data/spec/support/models/sound.rb +2 -2
- data/spec/support/models/spacer.rb +0 -1
- data/spec/support/models/square.rb +0 -1
- data/spec/support/models/staff.rb +0 -1
- data/spec/support/models/store_as_dup_test1.rb +2 -2
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +2 -2
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +1 -2
- data/spec/support/models/sub_item.rb +0 -1
- data/spec/support/models/subscription.rb +2 -2
- data/spec/support/models/survey.rb +2 -2
- data/spec/support/models/symptom.rb +2 -2
- data/spec/support/models/system_role.rb +2 -3
- data/spec/support/models/tag.rb +2 -2
- data/spec/support/models/target.rb +1 -1
- data/spec/support/models/template.rb +1 -1
- data/spec/support/models/thing.rb +1 -1
- data/spec/support/models/threadlocker.rb +0 -1
- data/spec/support/models/title.rb +0 -1
- data/spec/support/models/tool.rb +3 -3
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +0 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +2 -3
- data/spec/support/models/truck.rb +0 -1
- data/spec/support/models/updatable.rb +0 -1
- data/spec/support/models/user.rb +3 -4
- data/spec/support/models/user_account.rb +3 -3
- data/spec/support/models/validation_callback.rb +4 -4
- data/spec/support/models/vehicle.rb +2 -3
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +0 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +2 -2
- data/spec/support/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +0 -1
- data/spec/support/models/weapon.rb +1 -2
- data/spec/support/models/wiki_page.rb +2 -3
- data/spec/support/models/word.rb +2 -2
- data/spec/support/models/word_origin.rb +1 -2
- data/spec/support/models/writer.rb +3 -3
- data/spec/support/rails_mock.rb +7 -12
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/sinatra_mock.rb +4 -2
- data/spec/support/spec_config.rb +19 -18
- metadata +14 -2
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
3
|
+
require 'spec_helper'
|
|
5
4
|
|
|
6
5
|
describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
context "when the relationship is an illegal embedded reference" do
|
|
11
|
-
|
|
6
|
+
describe '#=' do
|
|
7
|
+
context 'when the relationship is an illegal embedded reference' do
|
|
12
8
|
let(:game) do
|
|
13
9
|
Game.new
|
|
14
10
|
end
|
|
@@ -17,15 +13,14 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
17
13
|
Video.new
|
|
18
14
|
end
|
|
19
15
|
|
|
20
|
-
it
|
|
21
|
-
expect
|
|
16
|
+
it 'raises a mixed relation error' do
|
|
17
|
+
expect do
|
|
22
18
|
game.video = video
|
|
23
|
-
|
|
19
|
+
end.to raise_error(Mongoid::Errors::MixedRelations)
|
|
24
20
|
end
|
|
25
21
|
end
|
|
26
22
|
|
|
27
|
-
context
|
|
28
|
-
|
|
23
|
+
context 'when the relation is cyclic' do
|
|
29
24
|
let(:user) do
|
|
30
25
|
User.new
|
|
31
26
|
end
|
|
@@ -38,15 +33,13 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
38
33
|
user.role = role
|
|
39
34
|
end
|
|
40
35
|
|
|
41
|
-
it
|
|
36
|
+
it 'does not raise an error' do
|
|
42
37
|
expect(user.role).to eq(role)
|
|
43
38
|
end
|
|
44
39
|
end
|
|
45
40
|
|
|
46
|
-
context
|
|
47
|
-
|
|
48
|
-
context "when the parent is a new record" do
|
|
49
|
-
|
|
41
|
+
context 'when the relation is not polymorphic' do
|
|
42
|
+
context 'when the parent is a new record' do
|
|
50
43
|
let(:person) do
|
|
51
44
|
Person.new
|
|
52
45
|
end
|
|
@@ -56,37 +49,36 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
56
49
|
end
|
|
57
50
|
|
|
58
51
|
let(:association) do
|
|
59
|
-
Game.relations[
|
|
52
|
+
Game.relations['person']
|
|
60
53
|
end
|
|
61
54
|
|
|
62
55
|
before do
|
|
63
|
-
expect(association).
|
|
56
|
+
expect(association).not_to receive(:criteria)
|
|
64
57
|
person.game = game
|
|
65
58
|
end
|
|
66
59
|
|
|
67
|
-
it
|
|
60
|
+
it 'sets the target of the relation' do
|
|
68
61
|
expect(person.game._target).to eq(game)
|
|
69
62
|
end
|
|
70
63
|
|
|
71
|
-
it
|
|
64
|
+
it 'sets the foreign key on the relation' do
|
|
72
65
|
expect(game.person_id).to eq(person.id)
|
|
73
66
|
end
|
|
74
67
|
|
|
75
|
-
it
|
|
68
|
+
it 'sets the base on the inverse relation' do
|
|
76
69
|
expect(game.person).to eq(person)
|
|
77
70
|
end
|
|
78
71
|
|
|
79
|
-
it
|
|
72
|
+
it 'sets the same instance on the inverse relation' do
|
|
80
73
|
expect(game.person).to eql(person)
|
|
81
74
|
end
|
|
82
75
|
|
|
83
|
-
it
|
|
84
|
-
expect(game).
|
|
76
|
+
it 'does not save the target' do
|
|
77
|
+
expect(game).not_to be_persisted
|
|
85
78
|
end
|
|
86
79
|
end
|
|
87
80
|
|
|
88
|
-
context
|
|
89
|
-
|
|
81
|
+
context 'when the parent is not a new record' do
|
|
90
82
|
let(:person) do
|
|
91
83
|
Person.create!
|
|
92
84
|
end
|
|
@@ -99,49 +91,47 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
99
91
|
person.game = game
|
|
100
92
|
end
|
|
101
93
|
|
|
102
|
-
it
|
|
94
|
+
it 'sets the target of the relation' do
|
|
103
95
|
expect(person.game._target).to eq(game)
|
|
104
96
|
end
|
|
105
97
|
|
|
106
|
-
it
|
|
98
|
+
it 'sets the foreign key of the relation' do
|
|
107
99
|
expect(game.person_id).to eq(person.id)
|
|
108
100
|
end
|
|
109
101
|
|
|
110
|
-
it
|
|
102
|
+
it 'sets the base on the inverse relation' do
|
|
111
103
|
expect(game.person).to eq(person)
|
|
112
104
|
end
|
|
113
105
|
|
|
114
|
-
it
|
|
106
|
+
it 'sets the same instance on the inverse relation' do
|
|
115
107
|
expect(game.person).to eql(person)
|
|
116
108
|
end
|
|
117
109
|
|
|
118
|
-
it
|
|
110
|
+
it 'saves the target' do
|
|
119
111
|
expect(game).to be_persisted
|
|
120
112
|
end
|
|
121
113
|
|
|
122
|
-
context
|
|
123
|
-
|
|
114
|
+
context 'when reloading the parent' do
|
|
124
115
|
before do
|
|
125
116
|
person.reload
|
|
126
117
|
end
|
|
127
118
|
|
|
128
|
-
context
|
|
129
|
-
|
|
119
|
+
context 'when setting a new document on the relation' do
|
|
130
120
|
before do
|
|
131
121
|
person.game = Game.new
|
|
132
122
|
end
|
|
133
123
|
|
|
134
|
-
it
|
|
135
|
-
expect
|
|
124
|
+
it 'detaches the previous relation' do
|
|
125
|
+
expect do
|
|
136
126
|
game.reload
|
|
137
|
-
|
|
127
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
128
|
+
/Document\(s\) not found for class Game with id\(s\)/)
|
|
138
129
|
end
|
|
139
130
|
end
|
|
140
131
|
end
|
|
141
132
|
end
|
|
142
133
|
|
|
143
|
-
context
|
|
144
|
-
|
|
134
|
+
context 'when relation have a different primary_key' do
|
|
145
135
|
let(:person) do
|
|
146
136
|
Person.create!
|
|
147
137
|
end
|
|
@@ -154,32 +144,30 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
154
144
|
person.cat = cat
|
|
155
145
|
end
|
|
156
146
|
|
|
157
|
-
it
|
|
147
|
+
it 'sets the target of the relation' do
|
|
158
148
|
expect(person.cat._target).to eq(cat)
|
|
159
149
|
end
|
|
160
150
|
|
|
161
|
-
it
|
|
151
|
+
it 'sets the foreign key of the relation' do
|
|
162
152
|
expect(cat.person_id).to eq(person.username)
|
|
163
153
|
end
|
|
164
154
|
|
|
165
|
-
it
|
|
155
|
+
it 'sets the base on the inverse relation' do
|
|
166
156
|
expect(cat.person).to eq(person)
|
|
167
157
|
end
|
|
168
158
|
|
|
169
|
-
it
|
|
159
|
+
it 'sets the same instance on the inverse relation' do
|
|
170
160
|
expect(cat.person).to eql(person)
|
|
171
161
|
end
|
|
172
162
|
|
|
173
|
-
it
|
|
163
|
+
it 'saves the target' do
|
|
174
164
|
expect(cat).to be_persisted
|
|
175
165
|
end
|
|
176
166
|
end
|
|
177
167
|
end
|
|
178
168
|
|
|
179
|
-
context
|
|
180
|
-
|
|
181
|
-
context "when the parent is a new record" do
|
|
182
|
-
|
|
169
|
+
context 'when the relation is polymorphic' do
|
|
170
|
+
context 'when the parent is a new record' do
|
|
183
171
|
let(:bar) do
|
|
184
172
|
Bar.new
|
|
185
173
|
end
|
|
@@ -192,29 +180,28 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
192
180
|
bar.rating = rating
|
|
193
181
|
end
|
|
194
182
|
|
|
195
|
-
it
|
|
183
|
+
it 'sets the target of the relation' do
|
|
196
184
|
expect(bar.rating._target).to eq(rating)
|
|
197
185
|
end
|
|
198
186
|
|
|
199
|
-
it
|
|
187
|
+
it 'sets the foreign key on the relation' do
|
|
200
188
|
expect(rating.ratable_id).to eq(bar.id)
|
|
201
189
|
end
|
|
202
190
|
|
|
203
|
-
it
|
|
191
|
+
it 'sets the base on the inverse relation' do
|
|
204
192
|
expect(rating.ratable).to eq(bar)
|
|
205
193
|
end
|
|
206
194
|
|
|
207
|
-
it
|
|
195
|
+
it 'sets the same instance on the inverse relation' do
|
|
208
196
|
expect(rating.ratable).to eql(bar)
|
|
209
197
|
end
|
|
210
198
|
|
|
211
|
-
it
|
|
212
|
-
expect(rating).
|
|
199
|
+
it 'does not save the target' do
|
|
200
|
+
expect(rating).not_to be_persisted
|
|
213
201
|
end
|
|
214
202
|
end
|
|
215
203
|
|
|
216
|
-
context
|
|
217
|
-
|
|
204
|
+
context 'when the parent is not a new record' do
|
|
218
205
|
let(:bar) do
|
|
219
206
|
Bar.create!
|
|
220
207
|
end
|
|
@@ -227,396 +214,378 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
227
214
|
bar.rating = rating
|
|
228
215
|
end
|
|
229
216
|
|
|
230
|
-
it
|
|
217
|
+
it 'sets the target of the relation' do
|
|
231
218
|
expect(bar.rating._target).to eq(rating)
|
|
232
219
|
end
|
|
233
220
|
|
|
234
|
-
it
|
|
221
|
+
it 'sets the foreign key of the relation' do
|
|
235
222
|
expect(rating.ratable_id).to eq(bar.id)
|
|
236
223
|
end
|
|
237
224
|
|
|
238
|
-
it
|
|
225
|
+
it 'sets the base on the inverse relation' do
|
|
239
226
|
expect(rating.ratable).to eq(bar)
|
|
240
227
|
end
|
|
241
228
|
|
|
242
|
-
it
|
|
229
|
+
it 'sets the same instance on the inverse relation' do
|
|
243
230
|
expect(rating.ratable).to eql(bar)
|
|
244
231
|
end
|
|
245
232
|
|
|
246
|
-
it
|
|
233
|
+
it 'saves the target' do
|
|
247
234
|
expect(rating).to be_persisted
|
|
248
235
|
end
|
|
249
236
|
end
|
|
250
237
|
|
|
251
|
-
context
|
|
252
|
-
|
|
238
|
+
context 'when replacing an existing persisted (dependent: :destroy) relation' do
|
|
253
239
|
let!(:person) do
|
|
254
240
|
Person.create!
|
|
255
241
|
end
|
|
256
242
|
|
|
257
243
|
let!(:game) do
|
|
258
|
-
person.create_game(name:
|
|
244
|
+
person.create_game(name: 'Starcraft')
|
|
259
245
|
end
|
|
260
246
|
|
|
261
|
-
context
|
|
262
|
-
|
|
247
|
+
context 'with a new one created via the parent' do
|
|
263
248
|
let!(:new_game) do
|
|
264
|
-
person.create_game(name:
|
|
249
|
+
person.create_game(name: 'Starcraft 2')
|
|
265
250
|
end
|
|
266
251
|
|
|
267
|
-
it
|
|
252
|
+
it 'sets the new relation on the parent' do
|
|
268
253
|
expect(person.game).to eq(new_game)
|
|
269
254
|
end
|
|
270
255
|
|
|
271
|
-
it
|
|
256
|
+
it 'removes the old foreign key reference' do
|
|
272
257
|
expect(game.person_id).to be_nil
|
|
273
258
|
end
|
|
274
259
|
|
|
275
|
-
it
|
|
260
|
+
it 'removes the reference to the parent' do
|
|
276
261
|
expect(game.person).to be_nil
|
|
277
262
|
end
|
|
278
263
|
|
|
279
|
-
it
|
|
264
|
+
it 'destroys the old child' do
|
|
280
265
|
expect(game).to be_destroyed
|
|
281
266
|
end
|
|
282
267
|
|
|
283
|
-
it
|
|
268
|
+
it 'leaves the old child unpersisted' do
|
|
284
269
|
expect(game.persisted?).to be false
|
|
285
270
|
end
|
|
286
271
|
|
|
287
|
-
it
|
|
272
|
+
it 'leaves the new child persisted' do
|
|
288
273
|
expect(new_game.persisted?).to be true
|
|
289
274
|
end
|
|
290
275
|
end
|
|
291
276
|
|
|
292
|
-
context
|
|
293
|
-
|
|
277
|
+
context 'with a new one built via the parent' do
|
|
294
278
|
let!(:new_game) do
|
|
295
|
-
person.build_game(name:
|
|
279
|
+
person.build_game(name: 'Starcraft 2')
|
|
296
280
|
end
|
|
297
281
|
|
|
298
|
-
it
|
|
282
|
+
it 'sets the new relation on the parent' do
|
|
299
283
|
expect(person.game).to eq(new_game)
|
|
300
284
|
end
|
|
301
285
|
|
|
302
|
-
it
|
|
286
|
+
it 'removes the old foreign key reference' do
|
|
303
287
|
expect(game.person_id).to be_nil
|
|
304
288
|
end
|
|
305
289
|
|
|
306
|
-
it
|
|
290
|
+
it 'removes the reference to the parent' do
|
|
307
291
|
expect(game.person).to be_nil
|
|
308
292
|
end
|
|
309
293
|
|
|
310
|
-
it
|
|
311
|
-
expect(game).
|
|
294
|
+
it 'does not destroy the old child' do
|
|
295
|
+
expect(game).not_to be_destroyed
|
|
312
296
|
end
|
|
313
297
|
|
|
314
|
-
it
|
|
298
|
+
it 'leaves the old child persisted' do
|
|
315
299
|
expect(game.persisted?).to be true
|
|
316
300
|
end
|
|
317
301
|
|
|
318
|
-
it
|
|
302
|
+
it 'leaves the new child unpersisted' do
|
|
319
303
|
expect(new_game.persisted?).to be false
|
|
320
304
|
end
|
|
321
305
|
end
|
|
322
306
|
end
|
|
323
307
|
|
|
324
|
-
context
|
|
325
|
-
|
|
308
|
+
context 'when replacing an existing unpersisted (dependent: :destroy) relation' do
|
|
326
309
|
let!(:person) do
|
|
327
310
|
Person.create!
|
|
328
311
|
end
|
|
329
312
|
|
|
330
313
|
let!(:game) do
|
|
331
|
-
person.build_game(name:
|
|
314
|
+
person.build_game(name: 'Starcraft')
|
|
332
315
|
end
|
|
333
316
|
|
|
334
|
-
context
|
|
335
|
-
|
|
317
|
+
context 'with a new one created via the parent' do
|
|
336
318
|
let!(:new_game) do
|
|
337
|
-
person.create_game(name:
|
|
319
|
+
person.create_game(name: 'Starcraft 2')
|
|
338
320
|
end
|
|
339
321
|
|
|
340
|
-
it
|
|
322
|
+
it 'sets the new relation on the parent' do
|
|
341
323
|
expect(person.game).to eq(new_game)
|
|
342
324
|
end
|
|
343
325
|
|
|
344
|
-
it
|
|
326
|
+
it 'removes the old foreign key reference' do
|
|
345
327
|
expect(game.person_id).to be_nil
|
|
346
328
|
end
|
|
347
329
|
|
|
348
|
-
it
|
|
330
|
+
it 'removes the reference to the parent' do
|
|
349
331
|
expect(game.person).to be_nil
|
|
350
332
|
end
|
|
351
333
|
|
|
352
|
-
it
|
|
334
|
+
it 'destroys the old child' do
|
|
353
335
|
expect(game).to be_destroyed
|
|
354
336
|
end
|
|
355
337
|
|
|
356
|
-
it
|
|
338
|
+
it 'leaves the old child unpersisted' do
|
|
357
339
|
expect(game.persisted?).to be false
|
|
358
340
|
end
|
|
359
341
|
|
|
360
|
-
it
|
|
342
|
+
it 'leaves the new child persisted' do
|
|
361
343
|
expect(new_game.persisted?).to be true
|
|
362
344
|
end
|
|
363
345
|
end
|
|
364
346
|
|
|
365
|
-
context
|
|
366
|
-
|
|
347
|
+
context 'with a new one built via the parent' do
|
|
367
348
|
let!(:new_game) do
|
|
368
|
-
person.build_game(name:
|
|
349
|
+
person.build_game(name: 'Starcraft 2')
|
|
369
350
|
end
|
|
370
351
|
|
|
371
|
-
it
|
|
352
|
+
it 'sets the new relation on the parent' do
|
|
372
353
|
expect(person.game).to eq(new_game)
|
|
373
354
|
end
|
|
374
355
|
|
|
375
|
-
it
|
|
356
|
+
it 'removes the old foreign key reference' do
|
|
376
357
|
expect(game.person_id).to be_nil
|
|
377
358
|
end
|
|
378
359
|
|
|
379
|
-
it
|
|
360
|
+
it 'removes the reference to the parent' do
|
|
380
361
|
expect(game.person).to be_nil
|
|
381
362
|
end
|
|
382
363
|
|
|
383
|
-
it
|
|
384
|
-
expect(game).
|
|
364
|
+
it 'does not destroy the old child' do
|
|
365
|
+
expect(game).not_to be_destroyed
|
|
385
366
|
end
|
|
386
367
|
|
|
387
|
-
it
|
|
368
|
+
it 'leaves the old child unpersisted' do
|
|
388
369
|
expect(game.persisted?).to be false
|
|
389
370
|
end
|
|
390
371
|
|
|
391
|
-
it
|
|
372
|
+
it 'leaves the new child unpersisted' do
|
|
392
373
|
expect(new_game.persisted?).to be false
|
|
393
374
|
end
|
|
394
375
|
end
|
|
395
376
|
end
|
|
396
377
|
|
|
397
|
-
context
|
|
398
|
-
|
|
378
|
+
context 'when replacing an existing persisted (dependent: :nullify) relation' do
|
|
399
379
|
let!(:person) do
|
|
400
380
|
Person.create!
|
|
401
381
|
end
|
|
402
382
|
|
|
403
383
|
let!(:cat) do
|
|
404
|
-
person.create_cat(name:
|
|
384
|
+
person.create_cat(name: 'Cuddles')
|
|
405
385
|
end
|
|
406
386
|
|
|
407
|
-
context
|
|
408
|
-
|
|
387
|
+
context 'with a new one created via the parent' do
|
|
409
388
|
let!(:new_cat) do
|
|
410
|
-
person.create_cat(name:
|
|
389
|
+
person.create_cat(name: 'Brutus')
|
|
411
390
|
end
|
|
412
391
|
|
|
413
|
-
it
|
|
392
|
+
it 'sets the new relation on the parent' do
|
|
414
393
|
expect(person.cat).to eq(new_cat)
|
|
415
394
|
end
|
|
416
395
|
|
|
417
|
-
it
|
|
396
|
+
it 'removes the old foreign key reference' do
|
|
418
397
|
expect(cat.person_id).to be_nil
|
|
419
398
|
end
|
|
420
399
|
|
|
421
|
-
it
|
|
400
|
+
it 'removes the reference to the parent' do
|
|
422
401
|
expect(cat.person).to be_nil
|
|
423
402
|
end
|
|
424
403
|
|
|
425
|
-
it
|
|
426
|
-
expect(cat).
|
|
404
|
+
it 'does not destroy the old child' do
|
|
405
|
+
expect(cat).not_to be_destroyed
|
|
427
406
|
end
|
|
428
407
|
|
|
429
|
-
it
|
|
408
|
+
it 'leaves the old child persisted' do
|
|
430
409
|
expect(cat.persisted?).to be true
|
|
431
410
|
end
|
|
432
411
|
|
|
433
|
-
it
|
|
412
|
+
it 'leaves the new child persisted' do
|
|
434
413
|
expect(new_cat.persisted?).to be true
|
|
435
414
|
end
|
|
436
415
|
end
|
|
437
416
|
|
|
438
|
-
context
|
|
439
|
-
|
|
417
|
+
context 'with a new one built via the parent' do
|
|
440
418
|
let!(:new_cat) do
|
|
441
|
-
person.build_cat(name:
|
|
419
|
+
person.build_cat(name: 'Brutus')
|
|
442
420
|
end
|
|
443
421
|
|
|
444
|
-
it
|
|
422
|
+
it 'sets the new relation on the parent' do
|
|
445
423
|
expect(person.cat).to eq(new_cat)
|
|
446
424
|
end
|
|
447
425
|
|
|
448
|
-
it
|
|
426
|
+
it 'removes the old foreign key reference' do
|
|
449
427
|
expect(cat.person_id).to be_nil
|
|
450
428
|
end
|
|
451
429
|
|
|
452
|
-
it
|
|
430
|
+
it 'removes the reference to the parent' do
|
|
453
431
|
expect(cat.person).to be_nil
|
|
454
432
|
end
|
|
455
433
|
|
|
456
|
-
it
|
|
457
|
-
expect(cat).
|
|
434
|
+
it 'does not destroy the old child' do
|
|
435
|
+
expect(cat).not_to be_destroyed
|
|
458
436
|
end
|
|
459
437
|
|
|
460
|
-
it
|
|
438
|
+
it 'leaves the old child persisted' do
|
|
461
439
|
expect(cat.persisted?).to be true
|
|
462
440
|
end
|
|
463
441
|
|
|
464
|
-
it
|
|
442
|
+
it 'leaves the new child unpersisted' do
|
|
465
443
|
expect(new_cat.persisted?).to be false
|
|
466
444
|
end
|
|
467
445
|
end
|
|
468
446
|
end
|
|
469
447
|
|
|
470
|
-
context
|
|
471
|
-
|
|
448
|
+
context 'when replacing an existing unpersisted (dependent: :nullify) relation' do
|
|
472
449
|
let!(:person) do
|
|
473
450
|
Person.create!
|
|
474
451
|
end
|
|
475
452
|
|
|
476
453
|
let!(:cat) do
|
|
477
|
-
person.build_cat(name:
|
|
454
|
+
person.build_cat(name: 'Cuddles')
|
|
478
455
|
end
|
|
479
456
|
|
|
480
|
-
context
|
|
481
|
-
|
|
457
|
+
context 'with a new one created via the parent' do
|
|
482
458
|
let!(:new_cat) do
|
|
483
|
-
person.create_cat(name:
|
|
459
|
+
person.create_cat(name: 'Brutus')
|
|
484
460
|
end
|
|
485
461
|
|
|
486
|
-
it
|
|
462
|
+
it 'sets the new relation on the parent' do
|
|
487
463
|
expect(person.cat).to eq(new_cat)
|
|
488
464
|
end
|
|
489
465
|
|
|
490
|
-
it
|
|
466
|
+
it 'removes the old foreign key reference' do
|
|
491
467
|
expect(cat.person_id).to be_nil
|
|
492
468
|
end
|
|
493
469
|
|
|
494
|
-
it
|
|
470
|
+
it 'removes the reference to the parent' do
|
|
495
471
|
expect(cat.person).to be_nil
|
|
496
472
|
end
|
|
497
473
|
|
|
498
|
-
it
|
|
499
|
-
expect(cat).
|
|
474
|
+
it 'does not destroy the old child' do
|
|
475
|
+
expect(cat).not_to be_destroyed
|
|
500
476
|
end
|
|
501
477
|
|
|
502
|
-
it
|
|
478
|
+
it 'leaves the old child unpersisted' do
|
|
503
479
|
expect(cat.persisted?).to be false
|
|
504
480
|
end
|
|
505
481
|
|
|
506
|
-
it
|
|
482
|
+
it 'leaves the new child persisted' do
|
|
507
483
|
expect(new_cat.persisted?).to be true
|
|
508
484
|
end
|
|
509
485
|
end
|
|
510
486
|
|
|
511
|
-
context
|
|
512
|
-
|
|
487
|
+
context 'with a new one built via the parent' do
|
|
513
488
|
let!(:new_cat) do
|
|
514
|
-
person.build_cat(name:
|
|
489
|
+
person.build_cat(name: 'Brutus')
|
|
515
490
|
end
|
|
516
491
|
|
|
517
|
-
it
|
|
492
|
+
it 'sets the new relation on the parent' do
|
|
518
493
|
expect(person.cat).to eq(new_cat)
|
|
519
494
|
end
|
|
520
495
|
|
|
521
|
-
it
|
|
496
|
+
it 'removes the old foreign key reference' do
|
|
522
497
|
expect(cat.person_id).to be_nil
|
|
523
498
|
end
|
|
524
499
|
|
|
525
|
-
it
|
|
500
|
+
it 'removes the reference to the parent' do
|
|
526
501
|
expect(cat.person).to be_nil
|
|
527
502
|
end
|
|
528
503
|
|
|
529
|
-
it
|
|
530
|
-
expect(cat).
|
|
504
|
+
it 'does not destroy the old child' do
|
|
505
|
+
expect(cat).not_to be_destroyed
|
|
531
506
|
end
|
|
532
507
|
|
|
533
|
-
it
|
|
508
|
+
it 'leaves the old child unpersisted' do
|
|
534
509
|
expect(cat.persisted?).to be false
|
|
535
510
|
end
|
|
536
511
|
|
|
537
|
-
it
|
|
512
|
+
it 'leaves the new child unpersisted' do
|
|
538
513
|
expect(new_cat.persisted?).to be false
|
|
539
514
|
end
|
|
540
515
|
end
|
|
541
516
|
end
|
|
542
517
|
|
|
543
|
-
context
|
|
544
|
-
|
|
518
|
+
context 'when replacing an existing relation with a new one' do
|
|
545
519
|
let!(:person) do
|
|
546
520
|
Person.create!
|
|
547
521
|
end
|
|
548
522
|
|
|
549
|
-
context
|
|
550
|
-
|
|
523
|
+
context 'when dependent is destroy' do
|
|
551
524
|
let!(:game) do
|
|
552
|
-
person.create_game(name:
|
|
525
|
+
person.create_game(name: 'Starcraft')
|
|
553
526
|
end
|
|
554
527
|
|
|
555
528
|
let!(:new_game) do
|
|
556
|
-
Game.create!(name:
|
|
529
|
+
Game.create!(name: 'Starcraft 2')
|
|
557
530
|
end
|
|
558
531
|
|
|
559
532
|
before do
|
|
560
533
|
person.game = new_game
|
|
561
534
|
end
|
|
562
535
|
|
|
563
|
-
it
|
|
536
|
+
it 'sets the new relation on the parent' do
|
|
564
537
|
expect(person.game).to eq(new_game)
|
|
565
538
|
end
|
|
566
539
|
|
|
567
|
-
it
|
|
540
|
+
it 'removes the old foreign key reference' do
|
|
568
541
|
expect(game.person_id).to be_nil
|
|
569
542
|
end
|
|
570
543
|
|
|
571
|
-
it
|
|
544
|
+
it 'removes the reference to the parent' do
|
|
572
545
|
expect(game.person).to be_nil
|
|
573
546
|
end
|
|
574
547
|
|
|
575
|
-
it
|
|
548
|
+
it 'destroys the old child' do
|
|
576
549
|
expect(game).to be_destroyed
|
|
577
550
|
end
|
|
578
551
|
end
|
|
579
552
|
|
|
580
|
-
context
|
|
581
|
-
|
|
553
|
+
context 'when dependent is not set' do
|
|
582
554
|
let!(:account) do
|
|
583
|
-
person.create_account(name:
|
|
555
|
+
person.create_account(name: 'savings')
|
|
584
556
|
end
|
|
585
557
|
|
|
586
558
|
let!(:new_account) do
|
|
587
|
-
Account.create!(name:
|
|
559
|
+
Account.create!(name: 'checking')
|
|
588
560
|
end
|
|
589
561
|
|
|
590
562
|
before do
|
|
591
563
|
person.account = new_account
|
|
592
564
|
end
|
|
593
565
|
|
|
594
|
-
it
|
|
566
|
+
it 'sets the new relation on the parent' do
|
|
595
567
|
expect(person.account).to eq(new_account)
|
|
596
568
|
end
|
|
597
569
|
|
|
598
|
-
it
|
|
570
|
+
it 'removes the old foreign key reference' do
|
|
599
571
|
expect(account.person_id).to be_nil
|
|
600
572
|
end
|
|
601
573
|
|
|
602
|
-
it
|
|
574
|
+
it 'removes the reference to the parent' do
|
|
603
575
|
expect(account.person).to be_nil
|
|
604
576
|
end
|
|
605
577
|
|
|
606
|
-
it
|
|
607
|
-
expect(account).
|
|
578
|
+
it 'nullifies the old child' do
|
|
579
|
+
expect(account).not_to be_destroyed
|
|
608
580
|
end
|
|
609
581
|
end
|
|
610
582
|
end
|
|
611
583
|
end
|
|
612
584
|
end
|
|
613
585
|
|
|
614
|
-
describe
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
context "when the parent is a new record" do
|
|
619
|
-
|
|
586
|
+
describe '#= nil' do
|
|
587
|
+
context 'when the relation is not polymorphic' do
|
|
588
|
+
context 'when the parent is a new record' do
|
|
620
589
|
let(:person) do
|
|
621
590
|
Person.new
|
|
622
591
|
end
|
|
@@ -630,21 +599,20 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
630
599
|
person.game = nil
|
|
631
600
|
end
|
|
632
601
|
|
|
633
|
-
it
|
|
602
|
+
it 'sets the relation to nil' do
|
|
634
603
|
expect(person.game).to be_nil
|
|
635
604
|
end
|
|
636
605
|
|
|
637
|
-
it
|
|
606
|
+
it 'removed the inverse relation' do
|
|
638
607
|
expect(game.person).to be_nil
|
|
639
608
|
end
|
|
640
609
|
|
|
641
|
-
it
|
|
610
|
+
it 'removes the foreign key value' do
|
|
642
611
|
expect(game.person_id).to be_nil
|
|
643
612
|
end
|
|
644
613
|
end
|
|
645
614
|
|
|
646
|
-
context
|
|
647
|
-
|
|
615
|
+
context 'when the parent is not a new record' do
|
|
648
616
|
let(:person) do
|
|
649
617
|
Person.create!
|
|
650
618
|
end
|
|
@@ -658,28 +626,26 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
658
626
|
person.game = nil
|
|
659
627
|
end
|
|
660
628
|
|
|
661
|
-
it
|
|
629
|
+
it 'sets the relation to nil' do
|
|
662
630
|
expect(person.game).to be_nil
|
|
663
631
|
end
|
|
664
632
|
|
|
665
|
-
it
|
|
633
|
+
it 'removed the inverse relation' do
|
|
666
634
|
expect(game.person).to be_nil
|
|
667
635
|
end
|
|
668
636
|
|
|
669
|
-
it
|
|
637
|
+
it 'removes the foreign key value' do
|
|
670
638
|
expect(game.person_id).to be_nil
|
|
671
639
|
end
|
|
672
640
|
|
|
673
|
-
it
|
|
641
|
+
it 'deletes the target from the database' do
|
|
674
642
|
expect(game).to be_destroyed
|
|
675
643
|
end
|
|
676
644
|
end
|
|
677
645
|
end
|
|
678
646
|
|
|
679
|
-
context
|
|
680
|
-
|
|
681
|
-
context "when the parent is a new record" do
|
|
682
|
-
|
|
647
|
+
context 'when the relation is polymorphic' do
|
|
648
|
+
context 'when the parent is a new record' do
|
|
683
649
|
let(:bar) do
|
|
684
650
|
Bar.new
|
|
685
651
|
end
|
|
@@ -693,21 +659,20 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
693
659
|
bar.rating = nil
|
|
694
660
|
end
|
|
695
661
|
|
|
696
|
-
it
|
|
662
|
+
it 'sets the relation to nil' do
|
|
697
663
|
expect(bar.rating).to be_nil
|
|
698
664
|
end
|
|
699
665
|
|
|
700
|
-
it
|
|
666
|
+
it 'removed the inverse relation' do
|
|
701
667
|
expect(rating.ratable).to be_nil
|
|
702
668
|
end
|
|
703
669
|
|
|
704
|
-
it
|
|
670
|
+
it 'removes the foreign key value' do
|
|
705
671
|
expect(rating.ratable_id).to be_nil
|
|
706
672
|
end
|
|
707
673
|
end
|
|
708
674
|
|
|
709
|
-
context
|
|
710
|
-
|
|
675
|
+
context 'when the parent is not a new record' do
|
|
711
676
|
let(:bar) do
|
|
712
677
|
Bar.create!
|
|
713
678
|
end
|
|
@@ -721,44 +686,40 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
721
686
|
bar.rating = nil
|
|
722
687
|
end
|
|
723
688
|
|
|
724
|
-
it
|
|
689
|
+
it 'sets the relation to nil' do
|
|
725
690
|
expect(bar.rating).to be_nil
|
|
726
691
|
end
|
|
727
692
|
|
|
728
|
-
it
|
|
693
|
+
it 'removed the inverse relation' do
|
|
729
694
|
expect(rating.ratable).to be_nil
|
|
730
695
|
end
|
|
731
696
|
|
|
732
|
-
it
|
|
697
|
+
it 'removes the foreign key value' do
|
|
733
698
|
expect(rating.ratable_id).to be_nil
|
|
734
699
|
end
|
|
735
700
|
|
|
736
|
-
it
|
|
737
|
-
expect(rating).
|
|
701
|
+
it 'applies the appropriate dependent option' do
|
|
702
|
+
expect(rating).not_to be_destroyed
|
|
738
703
|
end
|
|
739
704
|
end
|
|
740
705
|
end
|
|
741
706
|
end
|
|
742
707
|
|
|
743
708
|
describe "#build_#\{name}" do
|
|
744
|
-
|
|
745
|
-
context "when the relationship is an illegal embedded reference" do
|
|
746
|
-
|
|
709
|
+
context 'when the relationship is an illegal embedded reference' do
|
|
747
710
|
let(:game) do
|
|
748
711
|
Game.new
|
|
749
712
|
end
|
|
750
713
|
|
|
751
|
-
it
|
|
752
|
-
expect
|
|
753
|
-
game.build_video(title:
|
|
754
|
-
|
|
714
|
+
it 'raises a mixed relation error' do
|
|
715
|
+
expect do
|
|
716
|
+
game.build_video(title: 'Tron')
|
|
717
|
+
end.to raise_error(Mongoid::Errors::MixedRelations)
|
|
755
718
|
end
|
|
756
719
|
end
|
|
757
720
|
|
|
758
|
-
context
|
|
759
|
-
|
|
760
|
-
context "when using object ids" do
|
|
761
|
-
|
|
721
|
+
context 'when the relation is not polymorphic' do
|
|
722
|
+
context 'when using object ids' do
|
|
762
723
|
let(:person) do
|
|
763
724
|
Person.create!
|
|
764
725
|
end
|
|
@@ -767,25 +728,24 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
767
728
|
person.build_game(score: 50)
|
|
768
729
|
end
|
|
769
730
|
|
|
770
|
-
it
|
|
731
|
+
it 'returns a new document' do
|
|
771
732
|
expect(game.score).to eq(50)
|
|
772
733
|
end
|
|
773
734
|
|
|
774
|
-
it
|
|
735
|
+
it 'sets the foreign key on the document' do
|
|
775
736
|
expect(game.person_id).to eq(person.id)
|
|
776
737
|
end
|
|
777
738
|
|
|
778
|
-
it
|
|
739
|
+
it 'sets the inverse relation' do
|
|
779
740
|
expect(game.person).to eq(person)
|
|
780
741
|
end
|
|
781
742
|
|
|
782
|
-
it
|
|
783
|
-
expect(game).
|
|
743
|
+
it 'does not save the built document' do
|
|
744
|
+
expect(game).not_to be_persisted
|
|
784
745
|
end
|
|
785
746
|
end
|
|
786
747
|
|
|
787
|
-
context
|
|
788
|
-
|
|
748
|
+
context 'when providing no attributes' do
|
|
789
749
|
let(:person) do
|
|
790
750
|
Person.create!
|
|
791
751
|
end
|
|
@@ -794,21 +754,20 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
794
754
|
person.build_game
|
|
795
755
|
end
|
|
796
756
|
|
|
797
|
-
it
|
|
757
|
+
it 'sets the foreign key on the document' do
|
|
798
758
|
expect(game.person_id).to eq(person.id)
|
|
799
759
|
end
|
|
800
760
|
|
|
801
|
-
it
|
|
761
|
+
it 'sets the inverse relation' do
|
|
802
762
|
expect(game.person).to eq(person)
|
|
803
763
|
end
|
|
804
764
|
|
|
805
|
-
it
|
|
806
|
-
expect(game).
|
|
765
|
+
it 'does not save the built document' do
|
|
766
|
+
expect(game).not_to be_persisted
|
|
807
767
|
end
|
|
808
768
|
end
|
|
809
769
|
|
|
810
|
-
context
|
|
811
|
-
|
|
770
|
+
context 'when providing nil attributes' do
|
|
812
771
|
let(:person) do
|
|
813
772
|
Person.create!
|
|
814
773
|
end
|
|
@@ -817,24 +776,22 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
817
776
|
person.build_game(nil)
|
|
818
777
|
end
|
|
819
778
|
|
|
820
|
-
it
|
|
779
|
+
it 'sets the foreign key on the document' do
|
|
821
780
|
expect(game.person_id).to eq(person.id)
|
|
822
781
|
end
|
|
823
782
|
|
|
824
|
-
it
|
|
783
|
+
it 'sets the inverse relation' do
|
|
825
784
|
expect(game.person).to eq(person)
|
|
826
785
|
end
|
|
827
786
|
|
|
828
|
-
it
|
|
829
|
-
expect(game).
|
|
787
|
+
it 'does not save the built document' do
|
|
788
|
+
expect(game).not_to be_persisted
|
|
830
789
|
end
|
|
831
790
|
end
|
|
832
791
|
end
|
|
833
792
|
|
|
834
|
-
context
|
|
835
|
-
|
|
836
|
-
context "when using object ids" do
|
|
837
|
-
|
|
793
|
+
context 'when the relation is polymorphic' do
|
|
794
|
+
context 'when using object ids' do
|
|
838
795
|
let(:bar) do
|
|
839
796
|
Bar.create!
|
|
840
797
|
end
|
|
@@ -843,42 +800,39 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
843
800
|
bar.build_rating(value: 5)
|
|
844
801
|
end
|
|
845
802
|
|
|
846
|
-
it
|
|
803
|
+
it 'returns a new document' do
|
|
847
804
|
expect(rating.value).to eq(5)
|
|
848
805
|
end
|
|
849
806
|
|
|
850
|
-
it
|
|
807
|
+
it 'sets the foreign key on the document' do
|
|
851
808
|
expect(rating.ratable_id).to eq(bar.id)
|
|
852
809
|
end
|
|
853
810
|
|
|
854
|
-
it
|
|
811
|
+
it 'sets the inverse relation' do
|
|
855
812
|
expect(rating.ratable).to eq(bar)
|
|
856
813
|
end
|
|
857
814
|
|
|
858
|
-
it
|
|
859
|
-
expect(rating).
|
|
815
|
+
it 'does not save the built document' do
|
|
816
|
+
expect(rating).not_to be_persisted
|
|
860
817
|
end
|
|
861
818
|
end
|
|
862
819
|
end
|
|
863
820
|
end
|
|
864
821
|
|
|
865
822
|
describe "#create_#\{name}" do
|
|
866
|
-
|
|
867
|
-
context "when the relationship is an illegal embedded reference" do
|
|
868
|
-
|
|
823
|
+
context 'when the relationship is an illegal embedded reference' do
|
|
869
824
|
let(:game) do
|
|
870
825
|
Game.new
|
|
871
826
|
end
|
|
872
827
|
|
|
873
|
-
it
|
|
874
|
-
expect
|
|
875
|
-
game.create_video(title:
|
|
876
|
-
|
|
828
|
+
it 'raises a mixed relation error' do
|
|
829
|
+
expect do
|
|
830
|
+
game.create_video(title: 'Tron')
|
|
831
|
+
end.to raise_error(Mongoid::Errors::MixedRelations)
|
|
877
832
|
end
|
|
878
833
|
end
|
|
879
834
|
|
|
880
|
-
context
|
|
881
|
-
|
|
835
|
+
context 'when the relation is not polymorphic' do
|
|
882
836
|
let(:person) do
|
|
883
837
|
Person.create!
|
|
884
838
|
end
|
|
@@ -887,25 +841,24 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
887
841
|
person.create_game(score: 50)
|
|
888
842
|
end
|
|
889
843
|
|
|
890
|
-
it
|
|
844
|
+
it 'returns a new document' do
|
|
891
845
|
expect(game.score).to eq(50)
|
|
892
846
|
end
|
|
893
847
|
|
|
894
|
-
it
|
|
848
|
+
it 'sets the foreign key on the document' do
|
|
895
849
|
expect(game.person_id).to eq(person.id)
|
|
896
850
|
end
|
|
897
851
|
|
|
898
|
-
it
|
|
852
|
+
it 'sets the inverse relation' do
|
|
899
853
|
expect(game.person).to eq(person)
|
|
900
854
|
end
|
|
901
855
|
|
|
902
|
-
it
|
|
856
|
+
it 'saves the document' do
|
|
903
857
|
expect(game).to be_persisted
|
|
904
858
|
end
|
|
905
859
|
end
|
|
906
860
|
|
|
907
|
-
context
|
|
908
|
-
|
|
861
|
+
context 'when providing no attributes' do
|
|
909
862
|
let(:person) do
|
|
910
863
|
Person.create!
|
|
911
864
|
end
|
|
@@ -914,21 +867,20 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
914
867
|
person.create_game
|
|
915
868
|
end
|
|
916
869
|
|
|
917
|
-
it
|
|
870
|
+
it 'sets the foreign key on the document' do
|
|
918
871
|
expect(game.person_id).to eq(person.id)
|
|
919
872
|
end
|
|
920
873
|
|
|
921
|
-
it
|
|
874
|
+
it 'sets the inverse relation' do
|
|
922
875
|
expect(game.person).to eq(person)
|
|
923
876
|
end
|
|
924
877
|
|
|
925
|
-
it
|
|
878
|
+
it 'saves the document' do
|
|
926
879
|
expect(game).to be_persisted
|
|
927
880
|
end
|
|
928
881
|
end
|
|
929
882
|
|
|
930
|
-
context
|
|
931
|
-
|
|
883
|
+
context 'when providing nil attributes' do
|
|
932
884
|
let(:person) do
|
|
933
885
|
Person.create!
|
|
934
886
|
end
|
|
@@ -937,21 +889,20 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
937
889
|
person.create_game(nil)
|
|
938
890
|
end
|
|
939
891
|
|
|
940
|
-
it
|
|
892
|
+
it 'sets the foreign key on the document' do
|
|
941
893
|
expect(game.person_id).to eq(person.id)
|
|
942
894
|
end
|
|
943
895
|
|
|
944
|
-
it
|
|
896
|
+
it 'sets the inverse relation' do
|
|
945
897
|
expect(game.person).to eq(person)
|
|
946
898
|
end
|
|
947
899
|
|
|
948
|
-
it
|
|
900
|
+
it 'saves the document' do
|
|
949
901
|
expect(game).to be_persisted
|
|
950
902
|
end
|
|
951
903
|
end
|
|
952
904
|
|
|
953
|
-
context
|
|
954
|
-
|
|
905
|
+
context 'when the relation is polymorphic' do
|
|
955
906
|
let(:bar) do
|
|
956
907
|
Bar.create!
|
|
957
908
|
end
|
|
@@ -960,58 +911,54 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
960
911
|
bar.create_rating(value: 5)
|
|
961
912
|
end
|
|
962
913
|
|
|
963
|
-
it
|
|
914
|
+
it 'returns a new document' do
|
|
964
915
|
expect(rating.value).to eq(5)
|
|
965
916
|
end
|
|
966
917
|
|
|
967
|
-
it
|
|
918
|
+
it 'sets the foreign key on the document' do
|
|
968
919
|
expect(rating.ratable_id).to eq(bar.id)
|
|
969
920
|
end
|
|
970
921
|
|
|
971
|
-
it
|
|
922
|
+
it 'sets the inverse relation' do
|
|
972
923
|
expect(rating.ratable).to eq(bar)
|
|
973
924
|
end
|
|
974
925
|
|
|
975
|
-
it
|
|
926
|
+
it 'saves the document' do
|
|
976
927
|
expect(rating).to be_persisted
|
|
977
928
|
end
|
|
978
929
|
end
|
|
979
930
|
end
|
|
980
931
|
|
|
981
|
-
describe
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
expect(described_class).to_not be_embedded
|
|
932
|
+
describe '.embedded?' do
|
|
933
|
+
it 'returns false' do
|
|
934
|
+
expect(described_class).not_to be_embedded
|
|
985
935
|
end
|
|
986
936
|
end
|
|
987
937
|
|
|
988
|
-
describe
|
|
989
|
-
|
|
938
|
+
describe '#nullify' do
|
|
990
939
|
let(:person) do
|
|
991
940
|
Person.create!
|
|
992
941
|
end
|
|
993
942
|
|
|
994
943
|
let!(:game) do
|
|
995
|
-
person.create_game(name:
|
|
944
|
+
person.create_game(name: 'Starcraft II')
|
|
996
945
|
end
|
|
997
946
|
|
|
998
|
-
context
|
|
999
|
-
|
|
947
|
+
context 'when the instance has been set' do
|
|
1000
948
|
before do
|
|
1001
949
|
person.game.nullify
|
|
1002
950
|
end
|
|
1003
951
|
|
|
1004
|
-
it
|
|
952
|
+
it 'removes the foreign key from the target' do
|
|
1005
953
|
expect(game.person_id).to be_nil
|
|
1006
954
|
end
|
|
1007
955
|
|
|
1008
|
-
it
|
|
956
|
+
it 'removes the reference from the target' do
|
|
1009
957
|
expect(game.person).to be_nil
|
|
1010
958
|
end
|
|
1011
959
|
end
|
|
1012
960
|
|
|
1013
|
-
context
|
|
1014
|
-
|
|
961
|
+
context 'when the instance has been reloaded' do
|
|
1015
962
|
let(:from_db) do
|
|
1016
963
|
Person.find(person.id)
|
|
1017
964
|
end
|
|
@@ -1024,24 +971,23 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
1024
971
|
from_db.game.nullify
|
|
1025
972
|
end
|
|
1026
973
|
|
|
1027
|
-
it
|
|
974
|
+
it 'removes the foreign key from the target' do
|
|
1028
975
|
expect(game_reloaded.person_id).to be_nil
|
|
1029
976
|
end
|
|
1030
977
|
|
|
1031
|
-
it
|
|
978
|
+
it 'removes the reference from the target' do
|
|
1032
979
|
expect(game_reloaded.person).to be_nil
|
|
1033
980
|
end
|
|
1034
981
|
end
|
|
1035
982
|
end
|
|
1036
983
|
|
|
1037
|
-
describe
|
|
1038
|
-
|
|
984
|
+
describe '#respond_to?' do
|
|
1039
985
|
let(:person) do
|
|
1040
986
|
Person.new
|
|
1041
987
|
end
|
|
1042
988
|
|
|
1043
989
|
let!(:game) do
|
|
1044
|
-
person.build_game(name:
|
|
990
|
+
person.build_game(name: 'Tron')
|
|
1045
991
|
end
|
|
1046
992
|
|
|
1047
993
|
let(:document) do
|
|
@@ -1049,56 +995,51 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
1049
995
|
end
|
|
1050
996
|
|
|
1051
997
|
Mongoid::Document.public_instance_methods(true).each do |method|
|
|
1052
|
-
|
|
1053
998
|
context "when checking #{method}" do
|
|
1054
|
-
|
|
1055
|
-
it "returns true" do
|
|
999
|
+
it 'returns true' do
|
|
1056
1000
|
expect(document.respond_to?(method)).to be true
|
|
1057
1001
|
end
|
|
1058
1002
|
end
|
|
1059
1003
|
end
|
|
1060
1004
|
end
|
|
1061
1005
|
|
|
1062
|
-
context
|
|
1063
|
-
|
|
1006
|
+
context 'when reloading the relation' do
|
|
1064
1007
|
let!(:person) do
|
|
1065
1008
|
Person.create!
|
|
1066
1009
|
end
|
|
1067
1010
|
|
|
1068
1011
|
let!(:game_one) do
|
|
1069
|
-
Game.create!(name:
|
|
1012
|
+
Game.create!(name: 'Warcraft 3')
|
|
1070
1013
|
end
|
|
1071
1014
|
|
|
1072
1015
|
let!(:game_two) do
|
|
1073
|
-
Game.create!(name:
|
|
1016
|
+
Game.create!(name: 'Starcraft 2')
|
|
1074
1017
|
end
|
|
1075
1018
|
|
|
1076
1019
|
before do
|
|
1077
1020
|
person.game = game_one
|
|
1078
1021
|
end
|
|
1079
1022
|
|
|
1080
|
-
context
|
|
1081
|
-
|
|
1023
|
+
context 'when the relation references the same document' do
|
|
1082
1024
|
before do
|
|
1083
|
-
Game.collection.find({ _id: game_one.id })
|
|
1084
|
-
update_one({
|
|
1025
|
+
Game.collection.find({ _id: game_one.id })
|
|
1026
|
+
.update_one({ '$set' => { name: 'Diablo 2' } })
|
|
1085
1027
|
end
|
|
1086
1028
|
|
|
1087
1029
|
let(:reloaded) do
|
|
1088
1030
|
person.game(true)
|
|
1089
1031
|
end
|
|
1090
1032
|
|
|
1091
|
-
it
|
|
1092
|
-
expect(reloaded.name).to eq(
|
|
1033
|
+
it 'reloads the document from the database' do
|
|
1034
|
+
expect(reloaded.name).to eq('Diablo 2')
|
|
1093
1035
|
end
|
|
1094
1036
|
|
|
1095
|
-
it
|
|
1096
|
-
expect(reloaded).
|
|
1037
|
+
it 'sets a new document instance' do
|
|
1038
|
+
expect(reloaded).not_to equal(game_one)
|
|
1097
1039
|
end
|
|
1098
1040
|
end
|
|
1099
1041
|
|
|
1100
|
-
context
|
|
1101
|
-
|
|
1042
|
+
context 'when the relation references a different document' do
|
|
1102
1043
|
before do
|
|
1103
1044
|
person.game = game_two
|
|
1104
1045
|
end
|
|
@@ -1107,20 +1048,18 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
1107
1048
|
person.game(true)
|
|
1108
1049
|
end
|
|
1109
1050
|
|
|
1110
|
-
it
|
|
1111
|
-
expect(reloaded.name).to eq(
|
|
1051
|
+
it 'reloads the new document from the database' do
|
|
1052
|
+
expect(reloaded.name).to eq('Starcraft 2')
|
|
1112
1053
|
end
|
|
1113
1054
|
|
|
1114
|
-
it
|
|
1115
|
-
expect(reloaded).
|
|
1055
|
+
it 'sets a new document instance' do
|
|
1056
|
+
expect(reloaded).not_to equal(game_one)
|
|
1116
1057
|
end
|
|
1117
1058
|
end
|
|
1118
1059
|
end
|
|
1119
1060
|
|
|
1120
|
-
context
|
|
1121
|
-
|
|
1122
|
-
context "when autobuild is true for child" do
|
|
1123
|
-
|
|
1061
|
+
context 'when dependent is set to delete for child' do
|
|
1062
|
+
context 'when autobuild is true for child' do
|
|
1124
1063
|
let(:explosion) do
|
|
1125
1064
|
Explosion.create!
|
|
1126
1065
|
end
|
|
@@ -1135,27 +1074,27 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
1135
1074
|
bomb.explosion.clear
|
|
1136
1075
|
end
|
|
1137
1076
|
|
|
1138
|
-
it
|
|
1139
|
-
expect{ clear_child }.not_to raise_error
|
|
1077
|
+
it 'clearing the child raises no error' do
|
|
1078
|
+
expect { clear_child }.not_to raise_error
|
|
1140
1079
|
end
|
|
1141
1080
|
end
|
|
1142
1081
|
end
|
|
1143
1082
|
|
|
1144
|
-
context
|
|
1145
|
-
it
|
|
1083
|
+
context 'when there is a foreign key in the aliased associations' do
|
|
1084
|
+
it 'has the correct aliases' do
|
|
1146
1085
|
# Instances of Driver do not respond to vehicle_id.
|
|
1147
|
-
expect(Driver.aliased_associations.key?(
|
|
1148
|
-
expect(Vehicle.aliased_associations.key?(
|
|
1149
|
-
expect(Vehicle.aliased_fields[
|
|
1086
|
+
expect(Driver.aliased_associations.key?('vehicle_id')).to be false
|
|
1087
|
+
expect(Vehicle.aliased_associations.key?('driver_id')).to be false
|
|
1088
|
+
expect(Vehicle.aliased_fields['driver']).to eq('driver_id')
|
|
1150
1089
|
end
|
|
1151
1090
|
end
|
|
1152
1091
|
|
|
1153
|
-
context
|
|
1154
|
-
|
|
1092
|
+
context 'when the document is not persisted and the association is invalid' do
|
|
1155
1093
|
before do
|
|
1156
1094
|
class HomParent
|
|
1157
1095
|
include Mongoid::Document
|
|
1158
|
-
|
|
1096
|
+
|
|
1097
|
+
has_one :child, class_name: 'HomChild'
|
|
1159
1098
|
field :name
|
|
1160
1099
|
validates :name, presence: true
|
|
1161
1100
|
end
|
|
@@ -1179,20 +1118,19 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
1179
1118
|
let(:child) { HomChild.new }
|
|
1180
1119
|
let(:parent) { HomParent.new }
|
|
1181
1120
|
|
|
1182
|
-
|
|
1183
|
-
context "when belongs_to_required_by_default is true" do
|
|
1121
|
+
context 'when belongs_to_required_by_default is true' do
|
|
1184
1122
|
config_override :belongs_to_required_by_default, true
|
|
1185
1123
|
|
|
1186
|
-
context
|
|
1124
|
+
context 'when optional is true' do
|
|
1187
1125
|
let(:optional) { true }
|
|
1188
1126
|
|
|
1189
|
-
it
|
|
1127
|
+
it 'persists the child with the parent_id' do
|
|
1190
1128
|
expect(HomChild.first.parent_id).to eq(parent._id)
|
|
1191
1129
|
expect(HomParent.count).to eq(0)
|
|
1192
1130
|
end
|
|
1193
1131
|
end
|
|
1194
1132
|
|
|
1195
|
-
context
|
|
1133
|
+
context 'when optional is false' do
|
|
1196
1134
|
let(:optional) { false }
|
|
1197
1135
|
|
|
1198
1136
|
it "doesn't persist the parent or the child" do
|
|
@@ -1201,7 +1139,7 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
1201
1139
|
end
|
|
1202
1140
|
end
|
|
1203
1141
|
|
|
1204
|
-
context
|
|
1142
|
+
context 'when optional is not set' do
|
|
1205
1143
|
let(:belongs_to) do
|
|
1206
1144
|
HomChild.belongs_to :parent, autosave: true, validate: false
|
|
1207
1145
|
end
|
|
@@ -1213,19 +1151,19 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
1213
1151
|
end
|
|
1214
1152
|
end
|
|
1215
1153
|
|
|
1216
|
-
context
|
|
1154
|
+
context 'when belongs_to_required_by_default is false' do
|
|
1217
1155
|
config_override :belongs_to_required_by_default, false
|
|
1218
1156
|
|
|
1219
|
-
context
|
|
1157
|
+
context 'when optional is true' do
|
|
1220
1158
|
let(:optional) { true }
|
|
1221
1159
|
|
|
1222
|
-
it
|
|
1160
|
+
it 'persists the child with the parent_id' do
|
|
1223
1161
|
expect(HomChild.first.parent_id).to eq(parent._id)
|
|
1224
1162
|
expect(HomParent.count).to eq(0)
|
|
1225
1163
|
end
|
|
1226
1164
|
end
|
|
1227
1165
|
|
|
1228
|
-
context
|
|
1166
|
+
context 'when optional is false' do
|
|
1229
1167
|
let(:optional) { false }
|
|
1230
1168
|
|
|
1231
1169
|
it "doesn't persist the parent or the child" do
|
|
@@ -1234,12 +1172,12 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
|
|
|
1234
1172
|
end
|
|
1235
1173
|
end
|
|
1236
1174
|
|
|
1237
|
-
context
|
|
1175
|
+
context 'when optional is not set' do
|
|
1238
1176
|
let(:belongs_to) do
|
|
1239
1177
|
HomChild.belongs_to :parent, autosave: true, validate: false
|
|
1240
1178
|
end
|
|
1241
1179
|
|
|
1242
|
-
it
|
|
1180
|
+
it 'persists the child with the parent_id' do
|
|
1243
1181
|
expect(HomChild.first.parent_id).to eq(parent._id)
|
|
1244
1182
|
expect(HomParent.count).to eq(0)
|
|
1245
1183
|
end
|