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,12 +1,9 @@
|
|
|
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::Embedded::EmbedsOne::Proxy do
|
|
7
|
-
|
|
8
|
-
describe "#===" do
|
|
9
|
-
|
|
6
|
+
describe '#===' do
|
|
10
7
|
let(:base) do
|
|
11
8
|
Person.new
|
|
12
9
|
end
|
|
@@ -16,27 +13,23 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
16
13
|
end
|
|
17
14
|
|
|
18
15
|
let(:association) do
|
|
19
|
-
Person.relations[
|
|
16
|
+
Person.relations['name']
|
|
20
17
|
end
|
|
21
18
|
|
|
22
19
|
let(:relation) do
|
|
23
20
|
described_class.new(base, target, association)
|
|
24
21
|
end
|
|
25
22
|
|
|
26
|
-
context
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
expect((relation === Name.new)).to be true
|
|
23
|
+
context 'when the proxied document is same class' do
|
|
24
|
+
it 'returns true' do
|
|
25
|
+
expect(relation === Name.new).to be true
|
|
30
26
|
end
|
|
31
27
|
end
|
|
32
28
|
end
|
|
33
29
|
|
|
34
|
-
describe
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
context "when the parent is a new record" do
|
|
39
|
-
|
|
30
|
+
describe '#=' do
|
|
31
|
+
context 'when the relation is not cyclic' do
|
|
32
|
+
context 'when the parent is a new record' do
|
|
40
33
|
let(:person) do
|
|
41
34
|
Person.new
|
|
42
35
|
end
|
|
@@ -49,24 +42,23 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
49
42
|
person.name = name
|
|
50
43
|
end
|
|
51
44
|
|
|
52
|
-
it
|
|
45
|
+
it 'sets the target of the relation' do
|
|
53
46
|
expect(person.name).to eq(name)
|
|
54
47
|
end
|
|
55
48
|
|
|
56
|
-
it
|
|
49
|
+
it 'sets the base on the inverse relation' do
|
|
57
50
|
expect(name.namable).to eq(person)
|
|
58
51
|
end
|
|
59
52
|
|
|
60
|
-
it
|
|
53
|
+
it 'sets the same instance on the inverse relation' do
|
|
61
54
|
expect(name.namable).to eql(person)
|
|
62
55
|
end
|
|
63
56
|
|
|
64
|
-
it
|
|
65
|
-
expect(name).
|
|
57
|
+
it 'does not save the target' do
|
|
58
|
+
expect(name).not_to be_persisted
|
|
66
59
|
end
|
|
67
60
|
|
|
68
|
-
context
|
|
69
|
-
|
|
61
|
+
context 'with overwritten getter' do
|
|
70
62
|
before do
|
|
71
63
|
person.name = nil
|
|
72
64
|
def person.name_with_default
|
|
@@ -78,15 +70,14 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
78
70
|
end
|
|
79
71
|
end
|
|
80
72
|
|
|
81
|
-
it
|
|
73
|
+
it 'sets the target without an infinite recursion' do
|
|
82
74
|
person.name = name
|
|
83
75
|
expect(person.name).to be_present
|
|
84
76
|
end
|
|
85
77
|
end
|
|
86
78
|
end
|
|
87
79
|
|
|
88
|
-
context
|
|
89
|
-
|
|
80
|
+
context 'when the parent is not a new record' do
|
|
90
81
|
let(:person) do
|
|
91
82
|
Person.create!
|
|
92
83
|
end
|
|
@@ -95,8 +86,7 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
95
86
|
Name.new
|
|
96
87
|
end
|
|
97
88
|
|
|
98
|
-
context
|
|
99
|
-
|
|
89
|
+
context 'when setting with a hash' do
|
|
100
90
|
before do
|
|
101
91
|
person.name = {}
|
|
102
92
|
end
|
|
@@ -105,74 +95,70 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
105
95
|
person.name
|
|
106
96
|
end
|
|
107
97
|
|
|
108
|
-
it
|
|
98
|
+
it 'sets the target of the relation' do
|
|
109
99
|
expect(person.name).to eq(child_name)
|
|
110
100
|
end
|
|
111
101
|
|
|
112
|
-
it
|
|
102
|
+
it 'sets the base on the inverse relation' do
|
|
113
103
|
expect(child_name.namable).to eq(person)
|
|
114
104
|
end
|
|
115
105
|
|
|
116
|
-
it
|
|
106
|
+
it 'sets the same instance on the inverse relation' do
|
|
117
107
|
expect(child_name.namable).to eql(person)
|
|
118
108
|
end
|
|
119
109
|
|
|
120
|
-
it
|
|
110
|
+
it 'saves the target' do
|
|
121
111
|
expect(child_name).to be_persisted
|
|
122
112
|
end
|
|
123
113
|
|
|
124
|
-
context
|
|
125
|
-
|
|
114
|
+
context 'when replacing a relation with a hash' do
|
|
126
115
|
before do
|
|
127
116
|
person.name = {}
|
|
128
117
|
end
|
|
129
118
|
|
|
130
|
-
it
|
|
119
|
+
it 'sets the relation with the proper object' do
|
|
131
120
|
expect(person.name).to be_a(Name)
|
|
132
121
|
end
|
|
133
122
|
end
|
|
134
123
|
end
|
|
135
124
|
|
|
136
|
-
context
|
|
137
|
-
|
|
125
|
+
context 'when setting to the same document' do
|
|
138
126
|
before do
|
|
139
127
|
person.name = name
|
|
140
128
|
person.name = person.name
|
|
141
129
|
end
|
|
142
130
|
|
|
143
|
-
it
|
|
131
|
+
it 'does not change the relation' do
|
|
144
132
|
expect(person.name).to eq(name)
|
|
145
133
|
end
|
|
146
134
|
|
|
147
|
-
it
|
|
135
|
+
it 'does not persist any change' do
|
|
148
136
|
expect(person.reload.name).to eq(name)
|
|
149
137
|
end
|
|
150
138
|
end
|
|
151
139
|
|
|
152
|
-
context
|
|
153
|
-
|
|
140
|
+
context 'when setting directly' do
|
|
154
141
|
before do
|
|
155
142
|
person.name = name
|
|
156
143
|
end
|
|
157
144
|
|
|
158
|
-
it
|
|
145
|
+
it 'sets the target of the relation' do
|
|
159
146
|
expect(person.name).to eq(name)
|
|
160
147
|
end
|
|
161
148
|
|
|
162
|
-
it
|
|
149
|
+
it 'sets the base on the inverse relation' do
|
|
163
150
|
expect(name.namable).to eq(person)
|
|
164
151
|
end
|
|
165
152
|
|
|
166
|
-
it
|
|
153
|
+
it 'sets the same instance on the inverse relation' do
|
|
167
154
|
expect(name.namable).to eql(person)
|
|
168
155
|
end
|
|
169
156
|
|
|
170
|
-
it
|
|
157
|
+
it 'saves the target' do
|
|
171
158
|
expect(name).to be_persisted
|
|
172
159
|
end
|
|
173
160
|
|
|
174
|
-
context
|
|
175
|
-
|
|
161
|
+
context 'when replacing an existing document' do
|
|
176
162
|
let(:pet_owner) do
|
|
177
163
|
PetOwner.create!
|
|
178
164
|
end
|
|
@@ -190,22 +176,21 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
190
176
|
pet_owner.pet = pet_two
|
|
191
177
|
end
|
|
192
178
|
|
|
193
|
-
it
|
|
179
|
+
it 'runs the destroy callbacks on the old document' do
|
|
194
180
|
expect(pet_one.destroy_flag).to be true
|
|
195
181
|
end
|
|
196
182
|
|
|
197
|
-
it
|
|
198
|
-
expect(pet_one.name).to eq(
|
|
183
|
+
it 'keeps the name of the destroyed' do
|
|
184
|
+
expect(pet_one.name).to eq('kika')
|
|
199
185
|
end
|
|
200
186
|
|
|
201
|
-
it
|
|
202
|
-
expect(pet_owner.pet.name).to eq(
|
|
187
|
+
it 'saves the new name' do
|
|
188
|
+
expect(pet_owner.pet.name).to eq('tiksy')
|
|
203
189
|
end
|
|
204
190
|
end
|
|
205
191
|
end
|
|
206
192
|
|
|
207
193
|
context 'when the original document does not need to be unset because it will be replaced by the $set' do
|
|
208
|
-
|
|
209
194
|
let!(:pet_owner) do
|
|
210
195
|
PetOwner.create!(pet: pet_one)
|
|
211
196
|
end
|
|
@@ -219,7 +204,7 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
219
204
|
end
|
|
220
205
|
|
|
221
206
|
before do
|
|
222
|
-
expect(Mongo::Logger.logger).to receive(:debug?).
|
|
207
|
+
expect(Mongo::Logger.logger).to receive(:debug?).twice
|
|
223
208
|
end
|
|
224
209
|
|
|
225
210
|
it 'does not execute an unnecessary unset for the relation' do
|
|
@@ -227,27 +212,24 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
227
212
|
end
|
|
228
213
|
end
|
|
229
214
|
|
|
230
|
-
context
|
|
231
|
-
|
|
215
|
+
context 'when setting via the parent attributes' do
|
|
232
216
|
before do
|
|
233
217
|
person.attributes = { name: name }
|
|
234
218
|
end
|
|
235
219
|
|
|
236
|
-
it
|
|
220
|
+
it 'sets the target of the relation' do
|
|
237
221
|
expect(person.name).to eq(name)
|
|
238
222
|
end
|
|
239
223
|
|
|
240
|
-
it
|
|
241
|
-
expect(name).
|
|
224
|
+
it 'does not save the target' do
|
|
225
|
+
expect(name).not_to be_persisted
|
|
242
226
|
end
|
|
243
227
|
end
|
|
244
228
|
end
|
|
245
229
|
end
|
|
246
230
|
|
|
247
|
-
context
|
|
248
|
-
|
|
249
|
-
context "when the parent is a new record" do
|
|
250
|
-
|
|
231
|
+
context 'when the relation is cyclic' do
|
|
232
|
+
context 'when the parent is a new record' do
|
|
251
233
|
let(:parent_shelf) do
|
|
252
234
|
Shelf.new
|
|
253
235
|
end
|
|
@@ -260,25 +242,24 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
260
242
|
parent_shelf.child_shelf = child_shelf
|
|
261
243
|
end
|
|
262
244
|
|
|
263
|
-
it
|
|
245
|
+
it 'sets the target of the relation' do
|
|
264
246
|
expect(parent_shelf.child_shelf).to eq(child_shelf)
|
|
265
247
|
end
|
|
266
248
|
|
|
267
|
-
it
|
|
249
|
+
it 'sets the base on the inverse relation' do
|
|
268
250
|
expect(child_shelf.parent_shelf).to eq(parent_shelf)
|
|
269
251
|
end
|
|
270
252
|
|
|
271
|
-
it
|
|
253
|
+
it 'sets the same instance on the inverse relation' do
|
|
272
254
|
expect(child_shelf.parent_shelf).to eql(parent_shelf)
|
|
273
255
|
end
|
|
274
256
|
|
|
275
|
-
it
|
|
276
|
-
expect(child_shelf).
|
|
257
|
+
it 'does not save the target' do
|
|
258
|
+
expect(child_shelf).not_to be_persisted
|
|
277
259
|
end
|
|
278
260
|
end
|
|
279
261
|
|
|
280
|
-
context
|
|
281
|
-
|
|
262
|
+
context 'when the parent is not a new record' do
|
|
282
263
|
let(:parent_shelf) do
|
|
283
264
|
Shelf.create!
|
|
284
265
|
end
|
|
@@ -291,26 +272,25 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
291
272
|
parent_shelf.child_shelf = child_shelf
|
|
292
273
|
end
|
|
293
274
|
|
|
294
|
-
it
|
|
275
|
+
it 'sets the target of the relation' do
|
|
295
276
|
expect(parent_shelf.child_shelf).to eq(child_shelf)
|
|
296
277
|
end
|
|
297
278
|
|
|
298
|
-
it
|
|
279
|
+
it 'sets the base on the inverse relation' do
|
|
299
280
|
expect(child_shelf.parent_shelf).to eq(parent_shelf)
|
|
300
281
|
end
|
|
301
282
|
|
|
302
|
-
it
|
|
283
|
+
it 'sets the same instance on the inverse relation' do
|
|
303
284
|
expect(child_shelf.parent_shelf).to eql(parent_shelf)
|
|
304
285
|
end
|
|
305
286
|
|
|
306
|
-
it
|
|
287
|
+
it 'saves the target' do
|
|
307
288
|
expect(child_shelf).to be_persisted
|
|
308
289
|
end
|
|
309
290
|
end
|
|
310
291
|
end
|
|
311
292
|
|
|
312
|
-
context
|
|
313
|
-
|
|
293
|
+
context 'when setting a new document multiple times in a row' do
|
|
314
294
|
let(:parent) do
|
|
315
295
|
Parent.create!
|
|
316
296
|
end
|
|
@@ -321,18 +301,15 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
321
301
|
parent.first_child = Child.new
|
|
322
302
|
end
|
|
323
303
|
|
|
324
|
-
it
|
|
304
|
+
it 'saves the child document' do
|
|
325
305
|
expect(parent.first_child).to be_a(Child)
|
|
326
306
|
end
|
|
327
307
|
end
|
|
328
308
|
end
|
|
329
309
|
|
|
330
|
-
describe
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
context "when the parent is a new record" do
|
|
335
|
-
|
|
310
|
+
describe '#= nil' do
|
|
311
|
+
context 'when the relation is not cyclic' do
|
|
312
|
+
context 'when the parent is a new record' do
|
|
336
313
|
let(:person) do
|
|
337
314
|
Person.new
|
|
338
315
|
end
|
|
@@ -346,17 +323,16 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
346
323
|
person.name = nil
|
|
347
324
|
end
|
|
348
325
|
|
|
349
|
-
it
|
|
326
|
+
it 'sets the relation to nil' do
|
|
350
327
|
expect(person.name).to be_nil
|
|
351
328
|
end
|
|
352
329
|
|
|
353
|
-
it
|
|
330
|
+
it 'removes the inverse relation' do
|
|
354
331
|
expect(name.namable).to be_nil
|
|
355
332
|
end
|
|
356
333
|
end
|
|
357
334
|
|
|
358
|
-
context
|
|
359
|
-
|
|
335
|
+
context 'when the inverse is already nil' do
|
|
360
336
|
let(:person) do
|
|
361
337
|
Person.new
|
|
362
338
|
end
|
|
@@ -365,13 +341,12 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
365
341
|
person.name = nil
|
|
366
342
|
end
|
|
367
343
|
|
|
368
|
-
it
|
|
344
|
+
it 'sets the relation to nil' do
|
|
369
345
|
expect(person.name).to be_nil
|
|
370
346
|
end
|
|
371
347
|
end
|
|
372
348
|
|
|
373
|
-
context
|
|
374
|
-
|
|
349
|
+
context 'when the parent is persisted' do
|
|
375
350
|
let(:person) do
|
|
376
351
|
Person.create!
|
|
377
352
|
end
|
|
@@ -380,48 +355,44 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
380
355
|
Name.new
|
|
381
356
|
end
|
|
382
357
|
|
|
383
|
-
context
|
|
384
|
-
|
|
358
|
+
context 'when setting directly' do
|
|
385
359
|
before do
|
|
386
360
|
person.name = name
|
|
387
361
|
person.name = nil
|
|
388
362
|
end
|
|
389
363
|
|
|
390
|
-
it
|
|
364
|
+
it 'sets the relation to nil' do
|
|
391
365
|
expect(person.name).to be_nil
|
|
392
366
|
end
|
|
393
367
|
|
|
394
|
-
it
|
|
368
|
+
it 'removed the inverse relation' do
|
|
395
369
|
expect(name.namable).to be_nil
|
|
396
370
|
end
|
|
397
371
|
|
|
398
|
-
it
|
|
372
|
+
it 'deletes the child document' do
|
|
399
373
|
expect(name).to be_destroyed
|
|
400
374
|
end
|
|
401
375
|
end
|
|
402
376
|
|
|
403
|
-
context
|
|
404
|
-
|
|
377
|
+
context 'when setting via parent attributes' do
|
|
405
378
|
before do
|
|
406
379
|
person.name = name
|
|
407
380
|
person.attributes = { name: nil }
|
|
408
381
|
end
|
|
409
382
|
|
|
410
|
-
it
|
|
383
|
+
it 'sets the relation to nil' do
|
|
411
384
|
expect(person.name).to be_nil
|
|
412
385
|
end
|
|
413
386
|
|
|
414
|
-
it
|
|
415
|
-
expect(name).
|
|
387
|
+
it 'does not delete the child document' do
|
|
388
|
+
expect(name).not_to be_destroyed
|
|
416
389
|
end
|
|
417
390
|
end
|
|
418
391
|
end
|
|
419
392
|
end
|
|
420
393
|
|
|
421
|
-
context
|
|
422
|
-
|
|
423
|
-
context "when the parent is a new record" do
|
|
424
|
-
|
|
394
|
+
context 'when the relation is cyclic' do
|
|
395
|
+
context 'when the parent is a new record' do
|
|
425
396
|
let(:parent_shelf) do
|
|
426
397
|
Shelf.new
|
|
427
398
|
end
|
|
@@ -435,17 +406,16 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
435
406
|
parent_shelf.child_shelf = nil
|
|
436
407
|
end
|
|
437
408
|
|
|
438
|
-
it
|
|
409
|
+
it 'sets the relation to nil' do
|
|
439
410
|
expect(parent_shelf.child_shelf).to be_nil
|
|
440
411
|
end
|
|
441
412
|
|
|
442
|
-
it
|
|
413
|
+
it 'removes the inverse relation' do
|
|
443
414
|
expect(child_shelf.parent_shelf).to be_nil
|
|
444
415
|
end
|
|
445
416
|
end
|
|
446
417
|
|
|
447
|
-
context
|
|
448
|
-
|
|
418
|
+
context 'when the inverse is already nil' do
|
|
449
419
|
let(:parent_shelf) do
|
|
450
420
|
Shelf.new
|
|
451
421
|
end
|
|
@@ -454,13 +424,12 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
454
424
|
parent_shelf.child_shelf = nil
|
|
455
425
|
end
|
|
456
426
|
|
|
457
|
-
it
|
|
427
|
+
it 'sets the relation to nil' do
|
|
458
428
|
expect(parent_shelf.child_shelf).to be_nil
|
|
459
429
|
end
|
|
460
430
|
end
|
|
461
431
|
|
|
462
|
-
context
|
|
463
|
-
|
|
432
|
+
context 'when the documents are not new records' do
|
|
464
433
|
let(:parent_shelf) do
|
|
465
434
|
Shelf.create!
|
|
466
435
|
end
|
|
@@ -474,15 +443,15 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
474
443
|
parent_shelf.child_shelf = nil
|
|
475
444
|
end
|
|
476
445
|
|
|
477
|
-
it
|
|
446
|
+
it 'sets the relation to nil' do
|
|
478
447
|
expect(parent_shelf.child_shelf).to be_nil
|
|
479
448
|
end
|
|
480
449
|
|
|
481
|
-
it
|
|
450
|
+
it 'removed the inverse relation' do
|
|
482
451
|
expect(child_shelf.parent_shelf).to be_nil
|
|
483
452
|
end
|
|
484
453
|
|
|
485
|
-
it
|
|
454
|
+
it 'deletes the child document' do
|
|
486
455
|
expect(child_shelf).to be_destroyed
|
|
487
456
|
end
|
|
488
457
|
end
|
|
@@ -490,15 +459,10 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
490
459
|
end
|
|
491
460
|
|
|
492
461
|
describe "#build_#\{name}" do
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
context "when not providing any attributes" do
|
|
499
|
-
|
|
500
|
-
context "when building once" do
|
|
501
|
-
|
|
462
|
+
context 'when the relation is not cyclic' do
|
|
463
|
+
context 'when the parent is a new record' do
|
|
464
|
+
context 'when not providing any attributes' do
|
|
465
|
+
context 'when building once' do
|
|
502
466
|
let(:person) do
|
|
503
467
|
Person.new
|
|
504
468
|
end
|
|
@@ -507,25 +471,24 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
507
471
|
person.build_name
|
|
508
472
|
end
|
|
509
473
|
|
|
510
|
-
it
|
|
474
|
+
it 'sets the target of the relation' do
|
|
511
475
|
expect(person.name).to eq(name)
|
|
512
476
|
end
|
|
513
477
|
|
|
514
|
-
it
|
|
478
|
+
it 'sets the base on the inverse relation' do
|
|
515
479
|
expect(name.namable).to eq(person)
|
|
516
480
|
end
|
|
517
481
|
|
|
518
|
-
it
|
|
482
|
+
it 'sets no attributes' do
|
|
519
483
|
expect(name.first_name).to be_nil
|
|
520
484
|
end
|
|
521
485
|
|
|
522
|
-
it
|
|
523
|
-
expect(name).
|
|
486
|
+
it 'does not save the target' do
|
|
487
|
+
expect(name).not_to be_persisted
|
|
524
488
|
end
|
|
525
489
|
end
|
|
526
490
|
|
|
527
|
-
context
|
|
528
|
-
|
|
491
|
+
context 'when building twice' do
|
|
529
492
|
let(:person) do
|
|
530
493
|
Person.new
|
|
531
494
|
end
|
|
@@ -535,26 +498,25 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
535
498
|
person.build_name
|
|
536
499
|
end
|
|
537
500
|
|
|
538
|
-
it
|
|
501
|
+
it 'sets the target of the relation' do
|
|
539
502
|
expect(person.name).to eq(name)
|
|
540
503
|
end
|
|
541
504
|
|
|
542
|
-
it
|
|
505
|
+
it 'sets the base on the inverse relation' do
|
|
543
506
|
expect(name.namable).to eq(person)
|
|
544
507
|
end
|
|
545
508
|
|
|
546
|
-
it
|
|
509
|
+
it 'sets no attributes' do
|
|
547
510
|
expect(name.first_name).to be_nil
|
|
548
511
|
end
|
|
549
512
|
|
|
550
|
-
it
|
|
551
|
-
expect(name).
|
|
513
|
+
it 'does not save the target' do
|
|
514
|
+
expect(name).not_to be_persisted
|
|
552
515
|
end
|
|
553
516
|
end
|
|
554
517
|
end
|
|
555
518
|
|
|
556
|
-
context
|
|
557
|
-
|
|
519
|
+
context 'when passing nil as the attributes' do
|
|
558
520
|
let(:person) do
|
|
559
521
|
Person.new
|
|
560
522
|
end
|
|
@@ -563,71 +525,67 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
563
525
|
person.build_name(nil)
|
|
564
526
|
end
|
|
565
527
|
|
|
566
|
-
it
|
|
528
|
+
it 'sets the target of the relation' do
|
|
567
529
|
expect(person.name).to eq(name)
|
|
568
530
|
end
|
|
569
531
|
|
|
570
|
-
it
|
|
532
|
+
it 'sets the base on the inverse relation' do
|
|
571
533
|
expect(name.namable).to eq(person)
|
|
572
534
|
end
|
|
573
535
|
|
|
574
|
-
it
|
|
536
|
+
it 'sets no attributes' do
|
|
575
537
|
expect(name.first_name).to be_nil
|
|
576
538
|
end
|
|
577
539
|
|
|
578
|
-
it
|
|
579
|
-
expect(name).
|
|
540
|
+
it 'does not save the target' do
|
|
541
|
+
expect(name).not_to be_persisted
|
|
580
542
|
end
|
|
581
543
|
end
|
|
582
544
|
|
|
583
|
-
context
|
|
584
|
-
|
|
545
|
+
context 'when providing attributes' do
|
|
585
546
|
let(:person) do
|
|
586
547
|
Person.new
|
|
587
548
|
end
|
|
588
549
|
|
|
589
550
|
let!(:name) do
|
|
590
|
-
person.build_name(first_name:
|
|
551
|
+
person.build_name(first_name: 'James')
|
|
591
552
|
end
|
|
592
553
|
|
|
593
|
-
it
|
|
554
|
+
it 'sets the target of the relation' do
|
|
594
555
|
expect(person.name).to eq(name)
|
|
595
556
|
end
|
|
596
557
|
|
|
597
|
-
it
|
|
558
|
+
it 'sets the base on the inverse relation' do
|
|
598
559
|
expect(name.namable).to eq(person)
|
|
599
560
|
end
|
|
600
561
|
|
|
601
|
-
it
|
|
602
|
-
expect(name.first_name).to eq(
|
|
562
|
+
it 'sets the attributes' do
|
|
563
|
+
expect(name.first_name).to eq('James')
|
|
603
564
|
end
|
|
604
565
|
|
|
605
|
-
it
|
|
606
|
-
expect(name).
|
|
566
|
+
it 'does not save the target' do
|
|
567
|
+
expect(name).not_to be_persisted
|
|
607
568
|
end
|
|
608
569
|
end
|
|
609
570
|
end
|
|
610
571
|
|
|
611
|
-
context
|
|
612
|
-
|
|
572
|
+
context 'when the parent is not a new record' do
|
|
613
573
|
let(:person) do
|
|
614
574
|
Person.create!
|
|
615
575
|
end
|
|
616
576
|
|
|
617
577
|
let!(:name) do
|
|
618
|
-
person.build_name(first_name:
|
|
578
|
+
person.build_name(first_name: 'James')
|
|
619
579
|
end
|
|
620
580
|
|
|
621
|
-
it
|
|
622
|
-
expect(name).
|
|
581
|
+
it 'does not save the target' do
|
|
582
|
+
expect(name).not_to be_persisted
|
|
623
583
|
end
|
|
624
584
|
end
|
|
625
585
|
end
|
|
626
586
|
|
|
627
|
-
context
|
|
628
|
-
|
|
629
|
-
context "when the parent is a new record" do
|
|
630
|
-
|
|
587
|
+
context 'when the relation is cyclic' do
|
|
588
|
+
context 'when the parent is a new record' do
|
|
631
589
|
let(:parent_shelf) do
|
|
632
590
|
Shelf.new
|
|
633
591
|
end
|
|
@@ -636,25 +594,24 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
636
594
|
parent_shelf.build_child_shelf(level: 1)
|
|
637
595
|
end
|
|
638
596
|
|
|
639
|
-
it
|
|
597
|
+
it 'sets the target of the relation' do
|
|
640
598
|
expect(parent_shelf.child_shelf).to eq(child_shelf)
|
|
641
599
|
end
|
|
642
600
|
|
|
643
|
-
it
|
|
601
|
+
it 'sets the base on the inverse relation' do
|
|
644
602
|
expect(child_shelf.parent_shelf).to eq(parent_shelf)
|
|
645
603
|
end
|
|
646
604
|
|
|
647
|
-
it
|
|
605
|
+
it 'sets the attributes' do
|
|
648
606
|
expect(child_shelf.level).to eq(1)
|
|
649
607
|
end
|
|
650
608
|
|
|
651
|
-
it
|
|
652
|
-
expect(child_shelf).
|
|
609
|
+
it 'does not save the target' do
|
|
610
|
+
expect(child_shelf).not_to be_persisted
|
|
653
611
|
end
|
|
654
612
|
end
|
|
655
613
|
|
|
656
|
-
context
|
|
657
|
-
|
|
614
|
+
context 'when the parent is not a new record' do
|
|
658
615
|
let(:parent_shelf) do
|
|
659
616
|
Shelf.create!
|
|
660
617
|
end
|
|
@@ -663,19 +620,16 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
663
620
|
parent_shelf.build_child_shelf(level: 2)
|
|
664
621
|
end
|
|
665
622
|
|
|
666
|
-
it
|
|
667
|
-
expect(child_shelf).
|
|
623
|
+
it 'does not save the target' do
|
|
624
|
+
expect(child_shelf).not_to be_persisted
|
|
668
625
|
end
|
|
669
626
|
end
|
|
670
627
|
end
|
|
671
628
|
end
|
|
672
629
|
|
|
673
630
|
describe "#create_#\{name}" do
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
context "when not providing any attributes" do
|
|
678
|
-
|
|
631
|
+
context 'when the parent is a new record' do
|
|
632
|
+
context 'when not providing any attributes' do
|
|
679
633
|
let(:person) do
|
|
680
634
|
Person.new
|
|
681
635
|
end
|
|
@@ -684,25 +638,24 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
684
638
|
person.create_name
|
|
685
639
|
end
|
|
686
640
|
|
|
687
|
-
it
|
|
641
|
+
it 'sets the target of the relation' do
|
|
688
642
|
expect(person.name).to eq(name)
|
|
689
643
|
end
|
|
690
644
|
|
|
691
|
-
it
|
|
645
|
+
it 'sets the base on the inverse relation' do
|
|
692
646
|
expect(name.namable).to eq(person)
|
|
693
647
|
end
|
|
694
648
|
|
|
695
|
-
it
|
|
649
|
+
it 'sets no attributes' do
|
|
696
650
|
expect(name.first_name).to be_nil
|
|
697
651
|
end
|
|
698
652
|
|
|
699
|
-
it
|
|
653
|
+
it 'saves the target' do
|
|
700
654
|
expect(name).to be_persisted
|
|
701
655
|
end
|
|
702
656
|
end
|
|
703
657
|
|
|
704
|
-
context
|
|
705
|
-
|
|
658
|
+
context 'when passing nil as the attributes' do
|
|
706
659
|
let(:person) do
|
|
707
660
|
Person.new
|
|
708
661
|
end
|
|
@@ -711,73 +664,68 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
711
664
|
person.create_name(nil)
|
|
712
665
|
end
|
|
713
666
|
|
|
714
|
-
it
|
|
667
|
+
it 'sets the target of the relation' do
|
|
715
668
|
expect(person.name).to eq(name)
|
|
716
669
|
end
|
|
717
670
|
|
|
718
|
-
it
|
|
671
|
+
it 'sets the base on the inverse relation' do
|
|
719
672
|
expect(name.namable).to eq(person)
|
|
720
673
|
end
|
|
721
674
|
|
|
722
|
-
it
|
|
675
|
+
it 'sets no attributes' do
|
|
723
676
|
expect(name.first_name).to be_nil
|
|
724
677
|
end
|
|
725
678
|
|
|
726
|
-
it
|
|
679
|
+
it 'saves the target' do
|
|
727
680
|
expect(name).to be_persisted
|
|
728
681
|
end
|
|
729
682
|
end
|
|
730
683
|
|
|
731
|
-
context
|
|
732
|
-
|
|
684
|
+
context 'when providing attributes' do
|
|
733
685
|
let(:person) do
|
|
734
686
|
Person.new
|
|
735
687
|
end
|
|
736
688
|
|
|
737
689
|
let!(:name) do
|
|
738
|
-
person.create_name(first_name:
|
|
690
|
+
person.create_name(first_name: 'James')
|
|
739
691
|
end
|
|
740
692
|
|
|
741
|
-
it
|
|
693
|
+
it 'sets the target of the relation' do
|
|
742
694
|
expect(person.name).to eq(name)
|
|
743
695
|
end
|
|
744
696
|
|
|
745
|
-
it
|
|
697
|
+
it 'sets the base on the inverse relation' do
|
|
746
698
|
expect(name.namable).to eq(person)
|
|
747
699
|
end
|
|
748
700
|
|
|
749
|
-
it
|
|
750
|
-
expect(name.first_name).to eq(
|
|
701
|
+
it 'sets the attributes' do
|
|
702
|
+
expect(name.first_name).to eq('James')
|
|
751
703
|
end
|
|
752
704
|
|
|
753
|
-
it
|
|
705
|
+
it 'saves the target' do
|
|
754
706
|
expect(name).to be_persisted
|
|
755
707
|
end
|
|
756
708
|
end
|
|
757
709
|
|
|
758
|
-
context
|
|
759
|
-
|
|
710
|
+
context 'when the parent is not a new record' do
|
|
760
711
|
let(:person) do
|
|
761
712
|
Person.create!
|
|
762
713
|
end
|
|
763
714
|
|
|
764
715
|
let!(:name) do
|
|
765
|
-
person.create_name(first_name:
|
|
716
|
+
person.create_name(first_name: 'James')
|
|
766
717
|
end
|
|
767
718
|
|
|
768
|
-
it
|
|
719
|
+
it 'does not save the target' do
|
|
769
720
|
expect(name).to be_persisted
|
|
770
721
|
end
|
|
771
722
|
end
|
|
772
723
|
end
|
|
773
724
|
end
|
|
774
725
|
|
|
775
|
-
describe
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
context "when the embedded document inherits its relationship" do
|
|
780
|
-
|
|
726
|
+
describe 'when the relationship is polymorphic' do
|
|
727
|
+
context 'when updating an aliased embedded document' do
|
|
728
|
+
context 'when the embedded document inherits its relationship' do
|
|
781
729
|
let(:courier_job) do
|
|
782
730
|
CourierJob.create!
|
|
783
731
|
end
|
|
@@ -793,7 +741,7 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
793
741
|
after do
|
|
794
742
|
# Note that this is necessary, otherwise all further Address objects will be
|
|
795
743
|
# saved with a "_type" attributes. See Traversable#inherited for why.
|
|
796
|
-
Address.send(:remove_defaults,
|
|
744
|
+
Address.send(:remove_defaults, '_type')
|
|
797
745
|
end
|
|
798
746
|
|
|
799
747
|
before do
|
|
@@ -802,28 +750,26 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
802
750
|
courier_job.reload
|
|
803
751
|
end
|
|
804
752
|
|
|
805
|
-
it
|
|
753
|
+
it 'the child is embedded correctly' do
|
|
806
754
|
expect(courier_job.drop_address).to eq(new_child)
|
|
807
755
|
end
|
|
808
756
|
end
|
|
809
757
|
end
|
|
810
758
|
end
|
|
811
759
|
|
|
812
|
-
describe
|
|
813
|
-
|
|
814
|
-
it "returns true" do
|
|
760
|
+
describe '.embedded?' do
|
|
761
|
+
it 'returns true' do
|
|
815
762
|
expect(described_class).to be_embedded
|
|
816
763
|
end
|
|
817
764
|
end
|
|
818
765
|
|
|
819
|
-
describe
|
|
820
|
-
|
|
766
|
+
describe '#respond_to?' do
|
|
821
767
|
let(:person) do
|
|
822
768
|
Person.new
|
|
823
769
|
end
|
|
824
770
|
|
|
825
771
|
let!(:name) do
|
|
826
|
-
person.build_name(first_name:
|
|
772
|
+
person.build_name(first_name: 'Tony')
|
|
827
773
|
end
|
|
828
774
|
|
|
829
775
|
let(:document) do
|
|
@@ -831,57 +777,52 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
831
777
|
end
|
|
832
778
|
|
|
833
779
|
Mongoid::Document.public_instance_methods(true).each do |method|
|
|
834
|
-
|
|
835
780
|
context "when checking #{method}" do
|
|
836
|
-
|
|
837
|
-
it "returns true" do
|
|
781
|
+
it 'returns true' do
|
|
838
782
|
expect(document.respond_to?(method)).to be true
|
|
839
783
|
end
|
|
840
784
|
end
|
|
841
785
|
end
|
|
842
786
|
|
|
843
|
-
it
|
|
787
|
+
it 'responds to persisted?' do
|
|
844
788
|
expect(document).to respond_to(:persisted?)
|
|
845
789
|
end
|
|
846
790
|
end
|
|
847
791
|
|
|
848
|
-
context
|
|
849
|
-
|
|
792
|
+
context 'when the embedded document has an array field' do
|
|
850
793
|
let!(:person) do
|
|
851
794
|
Person.create!
|
|
852
795
|
end
|
|
853
796
|
|
|
854
797
|
let!(:name) do
|
|
855
798
|
person.create_name(
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
799
|
+
first_name: 'Syd',
|
|
800
|
+
last_name: 'Vicious',
|
|
801
|
+
aliases: nil
|
|
859
802
|
)
|
|
860
803
|
end
|
|
861
804
|
|
|
862
|
-
context
|
|
863
|
-
|
|
805
|
+
context 'when saving the array on a persisted document' do
|
|
864
806
|
let(:from_db) do
|
|
865
807
|
Person.find(person.id).name
|
|
866
808
|
end
|
|
867
809
|
|
|
868
810
|
before do
|
|
869
|
-
from_db.aliases = [
|
|
811
|
+
from_db.aliases = %w[Syd Sydney]
|
|
870
812
|
from_db.save!
|
|
871
813
|
end
|
|
872
814
|
|
|
873
|
-
it
|
|
874
|
-
expect(from_db.aliases).to eq([
|
|
815
|
+
it 'sets the values of the array' do
|
|
816
|
+
expect(from_db.aliases).to eq(%w[Syd Sydney])
|
|
875
817
|
end
|
|
876
818
|
|
|
877
|
-
it
|
|
878
|
-
expect(Person.find(person.id).name.aliases).to eq([
|
|
819
|
+
it 'persists the array' do
|
|
820
|
+
expect(Person.find(person.id).name.aliases).to eq(%w[Syd Sydney])
|
|
879
821
|
end
|
|
880
822
|
end
|
|
881
823
|
end
|
|
882
824
|
|
|
883
|
-
context
|
|
884
|
-
|
|
825
|
+
context 'when embedding a many under a one' do
|
|
885
826
|
let!(:person) do
|
|
886
827
|
Person.create!
|
|
887
828
|
end
|
|
@@ -890,14 +831,12 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
890
831
|
person.create_name
|
|
891
832
|
end
|
|
892
833
|
|
|
893
|
-
context
|
|
894
|
-
|
|
834
|
+
context 'when the documents are reloaded from the database' do
|
|
895
835
|
let(:from_db) do
|
|
896
836
|
Person.first
|
|
897
837
|
end
|
|
898
838
|
|
|
899
|
-
context
|
|
900
|
-
|
|
839
|
+
context 'when adding a new many' do
|
|
901
840
|
let(:name) do
|
|
902
841
|
from_db.name
|
|
903
842
|
end
|
|
@@ -906,48 +845,44 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
906
845
|
name.translations.new
|
|
907
846
|
end
|
|
908
847
|
|
|
909
|
-
context
|
|
910
|
-
|
|
848
|
+
context 'when saving the root' do
|
|
911
849
|
before do
|
|
912
850
|
from_db.save!
|
|
913
851
|
end
|
|
914
852
|
|
|
915
|
-
it
|
|
916
|
-
expect(from_db.reload.name.translations).
|
|
853
|
+
it 'persists the new document on the first save' do
|
|
854
|
+
expect(from_db.reload.name.translations).not_to be_empty
|
|
917
855
|
end
|
|
918
856
|
end
|
|
919
857
|
end
|
|
920
858
|
end
|
|
921
859
|
end
|
|
922
860
|
|
|
923
|
-
context
|
|
924
|
-
|
|
861
|
+
context 'when embedding a one under a many' do
|
|
925
862
|
let!(:person) do
|
|
926
863
|
Person.create!
|
|
927
864
|
end
|
|
928
865
|
|
|
929
866
|
let!(:address_one) do
|
|
930
|
-
person.addresses.create!(street:
|
|
867
|
+
person.addresses.create!(street: 'hobrecht')
|
|
931
868
|
end
|
|
932
869
|
|
|
933
870
|
let!(:address_two) do
|
|
934
|
-
person.addresses.create!(street:
|
|
871
|
+
person.addresses.create!(street: 'kreuzberg')
|
|
935
872
|
end
|
|
936
873
|
|
|
937
|
-
context
|
|
938
|
-
|
|
874
|
+
context 'when a parent was removed outside of mongoid' do
|
|
939
875
|
before do
|
|
940
876
|
person.collection.find(_id: person.id).update_one(
|
|
941
|
-
|
|
877
|
+
'$pull' => { 'addresses' => { _id: address_one.id } }
|
|
942
878
|
)
|
|
943
879
|
end
|
|
944
880
|
|
|
945
|
-
it
|
|
881
|
+
it 'reloads the correct number' do
|
|
946
882
|
expect(person.reload.addresses.count).to eq(1)
|
|
947
883
|
end
|
|
948
884
|
|
|
949
|
-
context
|
|
950
|
-
|
|
885
|
+
context 'when adding a child' do
|
|
951
886
|
let(:code) do
|
|
952
887
|
Code.new
|
|
953
888
|
end
|
|
@@ -956,27 +891,25 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
956
891
|
address_two.code = code
|
|
957
892
|
end
|
|
958
893
|
|
|
959
|
-
it
|
|
894
|
+
it 'reloads the correct number' do
|
|
960
895
|
expect(person.reload.addresses.count).to eq(1)
|
|
961
896
|
end
|
|
962
897
|
end
|
|
963
898
|
end
|
|
964
899
|
end
|
|
965
900
|
|
|
966
|
-
context
|
|
967
|
-
|
|
901
|
+
context 'when embedded documents are stored without ids' do
|
|
968
902
|
let!(:band) do
|
|
969
|
-
Band.create!(name:
|
|
903
|
+
Band.create!(name: 'Moderat')
|
|
970
904
|
end
|
|
971
905
|
|
|
972
906
|
before do
|
|
973
|
-
band.collection
|
|
974
|
-
find(_id: band.id)
|
|
975
|
-
update_one(
|
|
907
|
+
band.collection
|
|
908
|
+
.find(_id: band.id)
|
|
909
|
+
.update_one('$set' => { label: { _id: BSON::ObjectId.new, name: 'Mute' } })
|
|
976
910
|
end
|
|
977
911
|
|
|
978
|
-
context
|
|
979
|
-
|
|
912
|
+
context 'when loading the documents' do
|
|
980
913
|
before do
|
|
981
914
|
band.reload
|
|
982
915
|
end
|
|
@@ -985,33 +918,31 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
985
918
|
band.label
|
|
986
919
|
end
|
|
987
920
|
|
|
988
|
-
it
|
|
989
|
-
expect(label.name).to eq(
|
|
921
|
+
it 'creates proper documents from the db' do
|
|
922
|
+
expect(label.name).to eq('Mute')
|
|
990
923
|
end
|
|
991
924
|
|
|
992
|
-
it
|
|
993
|
-
expect(label.id).
|
|
925
|
+
it 'assigns ids to the documents' do
|
|
926
|
+
expect(label.id).not_to be_nil
|
|
994
927
|
end
|
|
995
928
|
|
|
996
|
-
context
|
|
997
|
-
|
|
929
|
+
context 'when subsequently updating the documents' do
|
|
998
930
|
before do
|
|
999
|
-
label.update_attribute(:name,
|
|
931
|
+
label.update_attribute(:name, 'Interscope')
|
|
1000
932
|
end
|
|
1001
933
|
|
|
1002
|
-
it
|
|
1003
|
-
expect(label.name).to eq(
|
|
934
|
+
it 'updates the document' do
|
|
935
|
+
expect(label.name).to eq('Interscope')
|
|
1004
936
|
end
|
|
1005
937
|
|
|
1006
|
-
it
|
|
1007
|
-
expect(label.reload.name).to eq(
|
|
938
|
+
it 'persists the change' do
|
|
939
|
+
expect(label.reload.name).to eq('Interscope')
|
|
1008
940
|
end
|
|
1009
941
|
end
|
|
1010
942
|
end
|
|
1011
943
|
end
|
|
1012
944
|
|
|
1013
|
-
context
|
|
1014
|
-
|
|
945
|
+
context 'when parent validation of child is set to false' do
|
|
1015
946
|
let(:building) do
|
|
1016
947
|
building = Building.create!
|
|
1017
948
|
building.building_address = BuildingAddress.new
|
|
@@ -1019,21 +950,21 @@ describe Mongoid::Association::Embedded::EmbedsOne::Proxy do
|
|
|
1019
950
|
building.reload
|
|
1020
951
|
end
|
|
1021
952
|
|
|
1022
|
-
it
|
|
953
|
+
it 'parent successfully embeds an invalid child' do
|
|
1023
954
|
expect(building.building_address).to be_a(BuildingAddress)
|
|
1024
955
|
end
|
|
1025
956
|
end
|
|
1026
957
|
|
|
1027
|
-
context
|
|
958
|
+
context 'when assigning a hash' do
|
|
1028
959
|
let(:building) { Building.create! }
|
|
1029
960
|
|
|
1030
961
|
before do
|
|
1031
|
-
building.building_address = { city:
|
|
962
|
+
building.building_address = { city: 'NYC' }
|
|
1032
963
|
end
|
|
1033
964
|
|
|
1034
|
-
it
|
|
965
|
+
it 'creates the objects correctly' do
|
|
1035
966
|
expect(building.building_address).to be_a(BuildingAddress)
|
|
1036
|
-
expect(building.building_address.city).to eq(
|
|
967
|
+
expect(building.building_address.city).to eq('NYC')
|
|
1037
968
|
end
|
|
1038
969
|
end
|
|
1039
970
|
end
|