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,18 +1,18 @@
|
|
|
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::Depending do
|
|
6
|
+
around do |example|
|
|
7
|
+
relations_before = Person.relations
|
|
8
|
+
example.run
|
|
9
|
+
Person.relations = relations_before
|
|
10
|
+
end
|
|
7
11
|
|
|
8
12
|
describe '.included' do
|
|
9
|
-
|
|
10
13
|
context 'when a destroy dependent is defined' do
|
|
11
|
-
|
|
12
14
|
context 'when the model is a subclass' do
|
|
13
|
-
|
|
14
15
|
context 'when transitive dependents are defined' do
|
|
15
|
-
|
|
16
16
|
let(:define_classes) do
|
|
17
17
|
class DependentReportCard
|
|
18
18
|
include Mongoid::Document
|
|
@@ -40,7 +40,7 @@ describe Mongoid::Association::Depending do
|
|
|
40
40
|
class DependentCollegeUser < DependentUser; end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
it
|
|
43
|
+
it 'does not add the dependent to superclass' do
|
|
44
44
|
define_classes
|
|
45
45
|
|
|
46
46
|
expect(DependentUser.dependents).to be_empty
|
|
@@ -74,7 +74,10 @@ describe Mongoid::Association::Depending do
|
|
|
74
74
|
r = DependentReportCard.create!(dependent_student: s)
|
|
75
75
|
s.destroy!
|
|
76
76
|
|
|
77
|
-
expect
|
|
77
|
+
expect do
|
|
78
|
+
DependentReportCard.find(r.id)
|
|
79
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
80
|
+
/Document\(s\) not found for class DependentReportCard with id\(s\)/)
|
|
78
81
|
end
|
|
79
82
|
|
|
80
83
|
it 'facilitates proper transitive destroying of the object' do
|
|
@@ -85,7 +88,10 @@ describe Mongoid::Association::Depending do
|
|
|
85
88
|
r = DependentReportCard.create!(dependent_student: s)
|
|
86
89
|
s.destroy!
|
|
87
90
|
|
|
88
|
-
expect
|
|
91
|
+
expect do
|
|
92
|
+
DependentReportCard.find(r.id)
|
|
93
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
94
|
+
/Document\(s\) not found for class DependentReportCard with id\(s\)/)
|
|
89
95
|
end
|
|
90
96
|
|
|
91
97
|
it 'adds the dependent to subclasses' do
|
|
@@ -106,7 +112,10 @@ describe Mongoid::Association::Depending do
|
|
|
106
112
|
r = DependentReportCard.create!(dependent_student: s)
|
|
107
113
|
s.destroy!
|
|
108
114
|
|
|
109
|
-
expect
|
|
115
|
+
expect do
|
|
116
|
+
DependentReportCard.find(r.id)
|
|
117
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
118
|
+
/Document\(s\) not found for class DependentReportCard with id\(s\)/)
|
|
110
119
|
end
|
|
111
120
|
|
|
112
121
|
it "doesn't add the dependent to sibling classes" do
|
|
@@ -142,6 +151,7 @@ describe Mongoid::Association::Depending do
|
|
|
142
151
|
|
|
143
152
|
class DependentSuperclass
|
|
144
153
|
include Mongoid::Document
|
|
154
|
+
|
|
145
155
|
has_one :dependent_owned_one
|
|
146
156
|
has_one :dependent_owned_two
|
|
147
157
|
end
|
|
@@ -176,9 +186,10 @@ describe Mongoid::Association::Depending do
|
|
|
176
186
|
owned = DependentOwnedOne.create!(dependent_superclass: subclass)
|
|
177
187
|
subclass.destroy!
|
|
178
188
|
|
|
179
|
-
expect
|
|
189
|
+
expect do
|
|
180
190
|
DependentOwnedOne.find(owned.id)
|
|
181
|
-
|
|
191
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
192
|
+
/Document\(s\) not found for class DependentOwnedOne with id\(s\)/)
|
|
182
193
|
end
|
|
183
194
|
end
|
|
184
195
|
|
|
@@ -251,65 +262,56 @@ describe Mongoid::Association::Depending do
|
|
|
251
262
|
dep = Dep.create!(double_assoc: two)
|
|
252
263
|
two.destroy!
|
|
253
264
|
|
|
254
|
-
expect
|
|
265
|
+
expect do
|
|
266
|
+
Dep.find(dep.id)
|
|
267
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
268
|
+
/Document\(s\) not found for class Dep with id\(s\)/)
|
|
255
269
|
end
|
|
256
270
|
end
|
|
257
271
|
end
|
|
258
272
|
end
|
|
259
273
|
end
|
|
260
274
|
|
|
261
|
-
|
|
262
|
-
relations_before = Person.relations
|
|
263
|
-
example.run
|
|
264
|
-
Person.relations = relations_before
|
|
265
|
-
end
|
|
266
|
-
|
|
267
|
-
describe "#apply_destroy_dependencies!" do
|
|
268
|
-
|
|
275
|
+
describe '#apply_destroy_dependencies!' do
|
|
269
276
|
let(:band) do
|
|
270
277
|
Band.new
|
|
271
278
|
end
|
|
272
279
|
|
|
273
|
-
context
|
|
274
|
-
|
|
275
|
-
context "when the association has no dependent strategy" do
|
|
276
|
-
|
|
280
|
+
context 'when the association exists in the list of dependencies' do
|
|
281
|
+
context 'when the association has no dependent strategy' do
|
|
277
282
|
before do
|
|
278
|
-
band.dependents.push(Band.relations[
|
|
283
|
+
band.dependents.push(Band.relations['records'])
|
|
279
284
|
end
|
|
280
285
|
|
|
281
286
|
after do
|
|
282
|
-
band.dependents.delete(Band.relations[
|
|
287
|
+
band.dependents.delete(Band.relations['records'])
|
|
283
288
|
end
|
|
284
289
|
|
|
285
|
-
it
|
|
286
|
-
expect(band.apply_destroy_dependencies!).to eq([Band.relations[
|
|
290
|
+
it 'ignores the dependency' do
|
|
291
|
+
expect(band.apply_destroy_dependencies!).to eq([ Band.relations['records'] ])
|
|
287
292
|
end
|
|
288
293
|
end
|
|
289
294
|
end
|
|
290
295
|
end
|
|
291
296
|
|
|
292
|
-
describe
|
|
293
|
-
|
|
297
|
+
describe '.define_dependency!' do
|
|
294
298
|
let(:klass) do
|
|
295
299
|
Class.new.tap { |c| c.send(:include, Mongoid::Document) }
|
|
296
300
|
end
|
|
297
301
|
|
|
298
|
-
context
|
|
299
|
-
|
|
302
|
+
context 'when the association metadata doesnt exist' do
|
|
300
303
|
before do
|
|
301
|
-
klass.dependents.push(
|
|
304
|
+
klass.dependents.push('nothing')
|
|
302
305
|
end
|
|
303
306
|
|
|
304
|
-
it
|
|
305
|
-
expect
|
|
307
|
+
it 'does not raise an error' do
|
|
308
|
+
expect do
|
|
306
309
|
klass.new.apply_destroy_dependencies!
|
|
307
|
-
|
|
310
|
+
end.not_to raise_error
|
|
308
311
|
end
|
|
309
312
|
end
|
|
310
313
|
|
|
311
|
-
context
|
|
312
|
-
|
|
314
|
+
context 'when a dependent option is provided' do
|
|
313
315
|
let!(:association) do
|
|
314
316
|
klass.has_many :posts, dependent: :destroy
|
|
315
317
|
end
|
|
@@ -318,13 +320,12 @@ describe Mongoid::Association::Depending do
|
|
|
318
320
|
klass.relations.delete(association.name.to_s)
|
|
319
321
|
end
|
|
320
322
|
|
|
321
|
-
it
|
|
322
|
-
expect(klass.dependents).to include(klass.relations[
|
|
323
|
+
it 'adds the relation to the dependents' do
|
|
324
|
+
expect(klass.dependents).to include(klass.relations['posts'])
|
|
323
325
|
end
|
|
324
326
|
end
|
|
325
327
|
|
|
326
|
-
context
|
|
327
|
-
|
|
328
|
+
context 'when no dependent option is provided' do
|
|
328
329
|
let!(:association) do
|
|
329
330
|
klass.has_many :posts
|
|
330
331
|
end
|
|
@@ -333,13 +334,12 @@ describe Mongoid::Association::Depending do
|
|
|
333
334
|
klass.relations.delete(association.name.to_s)
|
|
334
335
|
end
|
|
335
336
|
|
|
336
|
-
it
|
|
337
|
-
expect(klass.dependents).
|
|
337
|
+
it 'does not add a relation to the dependents' do
|
|
338
|
+
expect(klass.dependents).not_to include(association)
|
|
338
339
|
end
|
|
339
340
|
end
|
|
340
341
|
|
|
341
342
|
context 'when the class is defined more than once' do
|
|
342
|
-
|
|
343
343
|
let!(:association) do
|
|
344
344
|
klass.has_many :posts, dependent: :destroy
|
|
345
345
|
klass.has_many :posts, dependent: :destroy
|
|
@@ -352,86 +352,82 @@ describe Mongoid::Association::Depending do
|
|
|
352
352
|
end
|
|
353
353
|
|
|
354
354
|
describe '#delete and #destroy' do
|
|
355
|
-
context
|
|
356
|
-
|
|
355
|
+
context 'when cascading removals' do
|
|
357
356
|
shared_examples 'destroys dependents if parent is destroyed but does not if parent is deleted' do
|
|
358
|
-
|
|
357
|
+
describe '#destroy' do
|
|
359
358
|
before do
|
|
360
359
|
parent.destroy
|
|
361
360
|
end
|
|
362
361
|
|
|
363
|
-
it
|
|
364
|
-
expect
|
|
362
|
+
it 'deletes the associated documents' do
|
|
363
|
+
expect do
|
|
365
364
|
child.class.find(child.id)
|
|
366
|
-
|
|
365
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
366
|
+
/Document\(s\) not found for class #{child.class} with id\(s\)/)
|
|
367
367
|
end
|
|
368
368
|
end
|
|
369
369
|
|
|
370
|
-
|
|
370
|
+
describe '#delete' do
|
|
371
371
|
before do
|
|
372
372
|
parent.delete
|
|
373
373
|
end
|
|
374
374
|
|
|
375
|
-
it
|
|
376
|
-
child.class.find(child.id).should
|
|
375
|
+
it 'does not delete the associated documents' do
|
|
376
|
+
child.class.find(child.id).should eq child
|
|
377
377
|
end
|
|
378
378
|
end
|
|
379
379
|
end
|
|
380
380
|
|
|
381
|
-
context
|
|
382
|
-
|
|
381
|
+
context 'when strategy is delete' do
|
|
383
382
|
let(:parent) do
|
|
384
383
|
Person.create!
|
|
385
384
|
end
|
|
386
385
|
|
|
387
386
|
let!(:child) do
|
|
388
|
-
parent.posts.create!(title:
|
|
387
|
+
parent.posts.create!(title: 'Testing')
|
|
389
388
|
end
|
|
390
389
|
|
|
391
390
|
include_examples 'destroys dependents if parent is destroyed but does not if parent is deleted'
|
|
392
391
|
end
|
|
393
392
|
|
|
394
|
-
context
|
|
395
|
-
|
|
393
|
+
context 'when strategy is destroy' do
|
|
396
394
|
let(:parent) do
|
|
397
395
|
Person.create!
|
|
398
396
|
end
|
|
399
397
|
|
|
400
398
|
let!(:child) do
|
|
401
|
-
parent.create_game(name:
|
|
399
|
+
parent.create_game(name: 'Pong')
|
|
402
400
|
end
|
|
403
401
|
|
|
404
402
|
include_examples 'destroys dependents if parent is destroyed but does not if parent is deleted'
|
|
405
403
|
end
|
|
406
404
|
|
|
407
|
-
context
|
|
408
|
-
|
|
405
|
+
context 'when strategy is nullify' do
|
|
409
406
|
shared_examples 'removes references if parent is destroyed but does not if parent is deleted' do
|
|
410
|
-
|
|
407
|
+
describe '#destroy' do
|
|
411
408
|
before do
|
|
412
409
|
parent.destroy
|
|
413
410
|
end
|
|
414
411
|
|
|
415
|
-
it
|
|
412
|
+
it 'removes the references to the removed document' do
|
|
416
413
|
expect(from_db.ratable_id).to be_nil
|
|
417
414
|
end
|
|
418
415
|
end
|
|
419
416
|
|
|
420
|
-
|
|
417
|
+
describe '#delete' do
|
|
421
418
|
before do
|
|
422
419
|
parent.delete
|
|
423
420
|
end
|
|
424
421
|
|
|
425
|
-
it
|
|
426
|
-
from_db.ratable_id.should
|
|
422
|
+
it 'does not remove the references to the removed document' do
|
|
423
|
+
from_db.ratable_id.should eq parent.id
|
|
427
424
|
end
|
|
428
425
|
end
|
|
429
426
|
end
|
|
430
427
|
|
|
431
|
-
context
|
|
432
|
-
|
|
428
|
+
context 'when nullifying a references many' do
|
|
433
429
|
let(:parent) do
|
|
434
|
-
Movie.create!(title:
|
|
430
|
+
Movie.create!(title: 'Bladerunner')
|
|
435
431
|
end
|
|
436
432
|
|
|
437
433
|
let!(:rating) do
|
|
@@ -445,12 +441,10 @@ describe Mongoid::Association::Depending do
|
|
|
445
441
|
include_examples 'removes references if parent is destroyed but does not if parent is deleted'
|
|
446
442
|
end
|
|
447
443
|
|
|
448
|
-
context
|
|
449
|
-
|
|
450
|
-
context "when the relation exists" do
|
|
451
|
-
|
|
444
|
+
context 'when nullifying a references one' do
|
|
445
|
+
context 'when the relation exists' do
|
|
452
446
|
let(:parent) do
|
|
453
|
-
Book.create!(title:
|
|
447
|
+
Book.create!(title: 'Neuromancer')
|
|
454
448
|
end
|
|
455
449
|
|
|
456
450
|
let!(:rating) do
|
|
@@ -464,16 +458,14 @@ describe Mongoid::Association::Depending do
|
|
|
464
458
|
include_examples 'removes references if parent is destroyed but does not if parent is deleted'
|
|
465
459
|
end
|
|
466
460
|
|
|
467
|
-
context
|
|
468
|
-
|
|
461
|
+
context 'when no association target exists' do
|
|
469
462
|
let(:parent) do
|
|
470
|
-
Book.create!(title:
|
|
463
|
+
Book.create!(title: 'Neuromancer')
|
|
471
464
|
end
|
|
472
465
|
|
|
473
|
-
[
|
|
474
|
-
|
|
466
|
+
%i[delete destroy].each do |method|
|
|
475
467
|
describe "##{method}" do
|
|
476
|
-
it
|
|
468
|
+
it 'succeeds' do
|
|
477
469
|
expect(parent.send(method)).to be true
|
|
478
470
|
end
|
|
479
471
|
end
|
|
@@ -481,44 +473,43 @@ describe Mongoid::Association::Depending do
|
|
|
481
473
|
end
|
|
482
474
|
end
|
|
483
475
|
|
|
484
|
-
context
|
|
485
|
-
|
|
476
|
+
context 'when nullifying a many to many' do
|
|
486
477
|
let(:person) do
|
|
487
478
|
Person.create!
|
|
488
479
|
end
|
|
489
480
|
|
|
490
481
|
let!(:preference) do
|
|
491
|
-
person.preferences.create!(name:
|
|
482
|
+
person.preferences.create!(name: 'Setting')
|
|
492
483
|
end
|
|
493
484
|
|
|
494
485
|
let(:from_db) do
|
|
495
486
|
Preference.find(preference.id)
|
|
496
487
|
end
|
|
497
488
|
|
|
498
|
-
|
|
489
|
+
describe '#destroy' do
|
|
499
490
|
before do
|
|
500
491
|
person.destroy
|
|
501
492
|
end
|
|
502
493
|
|
|
503
|
-
it
|
|
504
|
-
expect(person.preference_ids).
|
|
494
|
+
it 'removes the references from the removed document' do
|
|
495
|
+
expect(person.preference_ids).not_to include(preference.id)
|
|
505
496
|
end
|
|
506
497
|
|
|
507
|
-
it
|
|
508
|
-
expect(from_db.person_ids).
|
|
498
|
+
it 'removes the references to the removed document' do
|
|
499
|
+
expect(from_db.person_ids).not_to include(person.id)
|
|
509
500
|
end
|
|
510
501
|
end
|
|
511
502
|
|
|
512
|
-
|
|
503
|
+
describe '#delete' do
|
|
513
504
|
before do
|
|
514
505
|
person.delete
|
|
515
506
|
end
|
|
516
507
|
|
|
517
|
-
it
|
|
508
|
+
it 'keeps the references from the removed document' do
|
|
518
509
|
expect(person.preference_ids).to include(preference.id)
|
|
519
510
|
end
|
|
520
511
|
|
|
521
|
-
it
|
|
512
|
+
it 'keeps the references to the removed document' do
|
|
522
513
|
expect(from_db.person_ids).to include(person.id)
|
|
523
514
|
end
|
|
524
515
|
end
|
|
@@ -526,14 +517,13 @@ describe Mongoid::Association::Depending do
|
|
|
526
517
|
end
|
|
527
518
|
|
|
528
519
|
shared_examples 'deletes the parent with #delete and #destroy' do
|
|
529
|
-
[
|
|
530
|
-
|
|
520
|
+
%i[delete destroy].each do |method|
|
|
531
521
|
describe "##{method}" do
|
|
532
|
-
it
|
|
533
|
-
expect { person.send(method) }.
|
|
522
|
+
it 'raises no error' do
|
|
523
|
+
expect { person.send(method) }.not_to raise_error
|
|
534
524
|
end
|
|
535
525
|
|
|
536
|
-
it
|
|
526
|
+
it 'deletes the parent' do
|
|
537
527
|
person.send(method)
|
|
538
528
|
expect(person).to be_destroyed
|
|
539
529
|
end
|
|
@@ -542,24 +532,22 @@ describe Mongoid::Association::Depending do
|
|
|
542
532
|
end
|
|
543
533
|
|
|
544
534
|
shared_examples 'raises an error with #destroy and deletes the parent with #delete' do
|
|
545
|
-
|
|
546
|
-
it
|
|
535
|
+
describe '#destroy' do
|
|
536
|
+
it 'raises DeleteRestriction error' do
|
|
547
537
|
expect { person.destroy }.to raise_error(Mongoid::Errors::DeleteRestriction)
|
|
548
538
|
end
|
|
549
539
|
end
|
|
550
540
|
|
|
551
|
-
|
|
552
|
-
it
|
|
541
|
+
describe '#delete' do
|
|
542
|
+
it 'deletes the parent' do
|
|
553
543
|
person.delete
|
|
554
544
|
expect(person).to be_destroyed
|
|
555
545
|
end
|
|
556
546
|
end
|
|
557
547
|
end
|
|
558
548
|
|
|
559
|
-
context
|
|
560
|
-
|
|
561
|
-
context "when restricting a references many" do
|
|
562
|
-
|
|
549
|
+
context 'when dependent is restrict_with_exception' do
|
|
550
|
+
context 'when restricting a references many' do
|
|
563
551
|
let!(:association) do
|
|
564
552
|
Person.has_many :drugs, dependent: :restrict_with_exception
|
|
565
553
|
end
|
|
@@ -569,8 +557,7 @@ describe Mongoid::Association::Depending do
|
|
|
569
557
|
Person.has_many :drugs, validate: false
|
|
570
558
|
end
|
|
571
559
|
|
|
572
|
-
context
|
|
573
|
-
|
|
560
|
+
context 'when the relation is empty' do
|
|
574
561
|
let(:person) do
|
|
575
562
|
Person.new drugs: []
|
|
576
563
|
end
|
|
@@ -578,18 +565,16 @@ describe Mongoid::Association::Depending do
|
|
|
578
565
|
include_examples 'deletes the parent with #delete and #destroy'
|
|
579
566
|
end
|
|
580
567
|
|
|
581
|
-
context
|
|
582
|
-
|
|
568
|
+
context 'when the relation is not empty' do
|
|
583
569
|
let(:person) do
|
|
584
|
-
Person.new drugs: [Drug.new]
|
|
570
|
+
Person.new drugs: [ Drug.new ]
|
|
585
571
|
end
|
|
586
572
|
|
|
587
573
|
include_examples 'raises an error with #destroy and deletes the parent with #delete'
|
|
588
574
|
end
|
|
589
575
|
end
|
|
590
576
|
|
|
591
|
-
context
|
|
592
|
-
|
|
577
|
+
context 'when restricting a references one' do
|
|
593
578
|
let!(:association) do
|
|
594
579
|
Person.has_one :account, dependent: :restrict_with_exception
|
|
595
580
|
end
|
|
@@ -599,8 +584,7 @@ describe Mongoid::Association::Depending do
|
|
|
599
584
|
Person.has_one :account, validate: false
|
|
600
585
|
end
|
|
601
586
|
|
|
602
|
-
context
|
|
603
|
-
|
|
587
|
+
context 'when the relation is empty' do
|
|
604
588
|
let(:person) do
|
|
605
589
|
Person.new account: nil
|
|
606
590
|
end
|
|
@@ -608,8 +592,7 @@ describe Mongoid::Association::Depending do
|
|
|
608
592
|
include_examples 'deletes the parent with #delete and #destroy'
|
|
609
593
|
end
|
|
610
594
|
|
|
611
|
-
context
|
|
612
|
-
|
|
595
|
+
context 'when the relation is not empty' do
|
|
613
596
|
let(:person) do
|
|
614
597
|
Person.new account: Account.new(name: 'test')
|
|
615
598
|
end
|
|
@@ -618,8 +601,7 @@ describe Mongoid::Association::Depending do
|
|
|
618
601
|
end
|
|
619
602
|
end
|
|
620
603
|
|
|
621
|
-
context
|
|
622
|
-
|
|
604
|
+
context 'when restricting a many to many' do
|
|
623
605
|
let!(:association) do
|
|
624
606
|
Person.has_and_belongs_to_many :houses, dependent: :restrict_with_exception
|
|
625
607
|
end
|
|
@@ -629,8 +611,7 @@ describe Mongoid::Association::Depending do
|
|
|
629
611
|
Person.has_and_belongs_to_many :houses, validate: false
|
|
630
612
|
end
|
|
631
613
|
|
|
632
|
-
context
|
|
633
|
-
|
|
614
|
+
context 'when the relation is empty' do
|
|
634
615
|
let(:person) do
|
|
635
616
|
Person.new houses: []
|
|
636
617
|
end
|
|
@@ -638,10 +619,9 @@ describe Mongoid::Association::Depending do
|
|
|
638
619
|
include_examples 'deletes the parent with #delete and #destroy'
|
|
639
620
|
end
|
|
640
621
|
|
|
641
|
-
context
|
|
642
|
-
|
|
622
|
+
context 'when the relation is not empty' do
|
|
643
623
|
let(:person) do
|
|
644
|
-
Person.new houses: [House.new]
|
|
624
|
+
Person.new houses: [ House.new ]
|
|
645
625
|
end
|
|
646
626
|
|
|
647
627
|
include_examples 'raises an error with #destroy and deletes the parent with #delete'
|
|
@@ -651,15 +631,12 @@ describe Mongoid::Association::Depending do
|
|
|
651
631
|
end
|
|
652
632
|
|
|
653
633
|
context 'when the strategy is :delete_all' do
|
|
654
|
-
|
|
655
634
|
let(:person) do
|
|
656
635
|
Person.create!
|
|
657
636
|
end
|
|
658
637
|
|
|
659
|
-
context
|
|
660
|
-
|
|
661
|
-
context "when the relation exists" do
|
|
662
|
-
|
|
638
|
+
context 'when cascading a has one' do
|
|
639
|
+
context 'when the relation exists' do
|
|
663
640
|
let!(:home) do
|
|
664
641
|
person.create_home
|
|
665
642
|
end
|
|
@@ -668,79 +645,77 @@ describe Mongoid::Association::Depending do
|
|
|
668
645
|
person.destroy
|
|
669
646
|
end
|
|
670
647
|
|
|
671
|
-
it
|
|
648
|
+
it 'deletes the dependents' do
|
|
672
649
|
expect(home).to be_destroyed
|
|
673
650
|
end
|
|
674
651
|
|
|
675
|
-
it
|
|
676
|
-
expect
|
|
652
|
+
it 'persists the deletion' do
|
|
653
|
+
expect do
|
|
677
654
|
home.reload
|
|
678
|
-
|
|
655
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Home with id\(s\)/)
|
|
679
656
|
end
|
|
680
657
|
end
|
|
681
658
|
|
|
682
|
-
context
|
|
683
|
-
|
|
659
|
+
context 'when the association target does not exist' do
|
|
684
660
|
before do
|
|
685
661
|
person.destroy
|
|
686
662
|
end
|
|
687
663
|
|
|
688
|
-
it
|
|
664
|
+
it 'deletes the base document' do
|
|
689
665
|
expect(person).to be_destroyed
|
|
690
666
|
end
|
|
691
667
|
end
|
|
692
668
|
end
|
|
693
669
|
|
|
694
|
-
context
|
|
695
|
-
|
|
696
|
-
context "when the relation has documents" do
|
|
697
|
-
|
|
670
|
+
context 'when cascading a has many' do
|
|
671
|
+
context 'when the relation has documents' do
|
|
698
672
|
let!(:post_one) do
|
|
699
|
-
person.posts.create!(title:
|
|
673
|
+
person.posts.create!(title: 'one')
|
|
700
674
|
end
|
|
701
675
|
|
|
702
676
|
let!(:post_two) do
|
|
703
|
-
person.posts.create!(title:
|
|
677
|
+
person.posts.create!(title: 'two')
|
|
704
678
|
end
|
|
705
679
|
|
|
706
|
-
context
|
|
707
|
-
|
|
680
|
+
context 'when the documents are in memory' do
|
|
708
681
|
before do
|
|
709
|
-
expect(post_one).
|
|
710
|
-
expect(post_two).
|
|
682
|
+
expect(post_one).not_to receive(:delete)
|
|
683
|
+
expect(post_two).not_to receive(:delete)
|
|
711
684
|
person.destroy
|
|
712
685
|
end
|
|
713
686
|
|
|
714
|
-
it
|
|
687
|
+
it 'deletes the first document' do
|
|
715
688
|
expect(post_one).to be_destroyed
|
|
716
689
|
end
|
|
717
690
|
|
|
718
|
-
it
|
|
691
|
+
it 'deletes the second document' do
|
|
719
692
|
expect(post_two).to be_destroyed
|
|
720
693
|
end
|
|
721
694
|
|
|
722
|
-
it
|
|
695
|
+
it 'unbinds the first document' do
|
|
723
696
|
expect(post_one.person).to be_nil
|
|
724
697
|
end
|
|
725
698
|
|
|
726
|
-
it
|
|
699
|
+
it 'unbinds the second document' do
|
|
727
700
|
expect(post_two.person).to be_nil
|
|
728
701
|
end
|
|
729
702
|
|
|
730
|
-
it
|
|
703
|
+
it 'removes the documents from the relation' do
|
|
731
704
|
expect(person.posts).to be_empty
|
|
732
705
|
end
|
|
733
706
|
|
|
734
|
-
it
|
|
735
|
-
expect
|
|
707
|
+
it 'persists the first deletion' do
|
|
708
|
+
expect do
|
|
736
709
|
post_one.reload
|
|
737
|
-
|
|
710
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
711
|
+
/Document\(s\) not found for class Post with id\(s\)/)
|
|
738
712
|
end
|
|
739
713
|
|
|
740
|
-
it
|
|
741
|
-
expect
|
|
714
|
+
it 'persists the second deletion' do
|
|
715
|
+
expect do
|
|
742
716
|
post_two.reload
|
|
743
|
-
|
|
717
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
718
|
+
/Document\(s\) not found for class Post with id\(s\)/)
|
|
744
719
|
end
|
|
745
720
|
end
|
|
746
721
|
end
|
|
@@ -748,77 +723,68 @@ describe Mongoid::Association::Depending do
|
|
|
748
723
|
end
|
|
749
724
|
|
|
750
725
|
context 'when the strategy is :destroy' do
|
|
751
|
-
|
|
752
726
|
let!(:association) do
|
|
753
|
-
Person.has_many :destroyable_posts, class_name:
|
|
727
|
+
Person.has_many :destroyable_posts, class_name: 'Post', dependent: :destroy
|
|
754
728
|
end
|
|
755
|
-
|
|
756
|
-
after do
|
|
757
|
-
Person.dependents.delete(association)
|
|
758
|
-
end
|
|
759
|
-
|
|
760
729
|
let(:person) do
|
|
761
730
|
Person.new
|
|
762
731
|
end
|
|
763
|
-
|
|
764
732
|
let(:post) do
|
|
765
733
|
Post.new
|
|
766
734
|
end
|
|
767
735
|
|
|
768
|
-
|
|
736
|
+
after do
|
|
737
|
+
Person.dependents.delete(association)
|
|
738
|
+
end
|
|
769
739
|
|
|
740
|
+
context 'when the documents exist' do
|
|
770
741
|
before do
|
|
771
742
|
expect(post).to receive(:destroy)
|
|
772
743
|
person.destroyable_posts << post
|
|
773
744
|
end
|
|
774
745
|
|
|
775
|
-
it
|
|
746
|
+
it 'destroys all documents in the association' do
|
|
776
747
|
person.destroy
|
|
777
748
|
end
|
|
778
749
|
end
|
|
779
750
|
|
|
780
|
-
context
|
|
781
|
-
|
|
751
|
+
context 'when no documents exist' do
|
|
782
752
|
before do
|
|
783
|
-
expect(post).
|
|
753
|
+
expect(post).not_to receive(:destroy)
|
|
784
754
|
end
|
|
785
755
|
|
|
786
|
-
it
|
|
756
|
+
it 'does not destroy the association target' do
|
|
787
757
|
person.destroy
|
|
788
758
|
end
|
|
789
759
|
end
|
|
790
760
|
end
|
|
791
761
|
|
|
792
762
|
context 'when the strategy is :nullify' do
|
|
793
|
-
|
|
794
763
|
let!(:association) do
|
|
795
|
-
Person.has_many :nullifyable_posts, class_name:
|
|
796
|
-
end
|
|
797
|
-
|
|
798
|
-
after do
|
|
799
|
-
Person.dependents.delete(association)
|
|
764
|
+
Person.has_many :nullifyable_posts, class_name: 'Post', dependent: :nullify
|
|
800
765
|
end
|
|
801
|
-
|
|
802
766
|
let(:person) do
|
|
803
767
|
Person.new
|
|
804
768
|
end
|
|
805
|
-
|
|
806
769
|
let(:posts_relation) do
|
|
807
770
|
person.posts
|
|
808
771
|
end
|
|
809
772
|
|
|
773
|
+
after do
|
|
774
|
+
Person.dependents.delete(association)
|
|
775
|
+
end
|
|
776
|
+
|
|
810
777
|
before do
|
|
811
778
|
allow(person).to receive(:nullifyable_posts).and_return(posts_relation)
|
|
812
779
|
expect(posts_relation).to receive(:nullify)
|
|
813
780
|
end
|
|
814
781
|
|
|
815
|
-
it
|
|
782
|
+
it 'nullifies the association target' do
|
|
816
783
|
person.destroy
|
|
817
784
|
end
|
|
818
785
|
end
|
|
819
786
|
|
|
820
787
|
context 'when the strategy is :restrict_with_exception' do
|
|
821
|
-
|
|
822
788
|
let(:person) do
|
|
823
789
|
Person.new
|
|
824
790
|
end
|
|
@@ -828,7 +794,7 @@ describe Mongoid::Association::Depending do
|
|
|
828
794
|
end
|
|
829
795
|
|
|
830
796
|
let!(:association) do
|
|
831
|
-
Person.has_many :restrictable_posts, class_name:
|
|
797
|
+
Person.has_many :restrictable_posts, class_name: 'Post', dependent: :restrict_with_exception
|
|
832
798
|
end
|
|
833
799
|
|
|
834
800
|
after do
|
|
@@ -836,11 +802,10 @@ describe Mongoid::Association::Depending do
|
|
|
836
802
|
end
|
|
837
803
|
|
|
838
804
|
context 'when there are related objects' do
|
|
839
|
-
|
|
840
805
|
before do
|
|
841
806
|
person.restrictable_posts << post
|
|
842
|
-
expect(post).
|
|
843
|
-
expect(post).
|
|
807
|
+
expect(post).not_to receive(:delete)
|
|
808
|
+
expect(post).not_to receive(:destroy)
|
|
844
809
|
end
|
|
845
810
|
|
|
846
811
|
it 'raises an exception and leaves the related one intact' do
|
|
@@ -849,10 +814,9 @@ describe Mongoid::Association::Depending do
|
|
|
849
814
|
end
|
|
850
815
|
|
|
851
816
|
context 'when there are no related objects' do
|
|
852
|
-
|
|
853
817
|
before do
|
|
854
|
-
expect(post).
|
|
855
|
-
expect(post).
|
|
818
|
+
expect(post).not_to receive(:delete)
|
|
819
|
+
expect(post).not_to receive(:destroy)
|
|
856
820
|
end
|
|
857
821
|
|
|
858
822
|
it 'deletes the object and leaves the other one intact' do
|
|
@@ -862,9 +826,7 @@ describe Mongoid::Association::Depending do
|
|
|
862
826
|
end
|
|
863
827
|
|
|
864
828
|
context 'when the strategy is :restrict_with_error' do
|
|
865
|
-
|
|
866
|
-
context "when restricting a one-to-many" do
|
|
867
|
-
|
|
829
|
+
context 'when restricting a one-to-many' do
|
|
868
830
|
let(:person) do
|
|
869
831
|
Person.new
|
|
870
832
|
end
|
|
@@ -874,7 +836,7 @@ describe Mongoid::Association::Depending do
|
|
|
874
836
|
end
|
|
875
837
|
|
|
876
838
|
let!(:association) do
|
|
877
|
-
Person.has_many :restrictable_posts, class_name:
|
|
839
|
+
Person.has_many :restrictable_posts, class_name: 'Post', dependent: :restrict_with_error
|
|
878
840
|
end
|
|
879
841
|
|
|
880
842
|
after do
|
|
@@ -882,7 +844,6 @@ describe Mongoid::Association::Depending do
|
|
|
882
844
|
end
|
|
883
845
|
|
|
884
846
|
context 'when there are related objects' do
|
|
885
|
-
|
|
886
847
|
before do
|
|
887
848
|
person.restrictable_posts << post
|
|
888
849
|
end
|
|
@@ -890,16 +851,15 @@ describe Mongoid::Association::Depending do
|
|
|
890
851
|
it 'adds an error to the parent object' do
|
|
891
852
|
expect(person.destroy).to be(false)
|
|
892
853
|
|
|
893
|
-
person.errors[:restrictable_posts].first.should
|
|
894
|
-
|
|
854
|
+
person.errors[:restrictable_posts].first.should eq \
|
|
855
|
+
'is not empty and prevents the document from being destroyed'
|
|
895
856
|
end
|
|
896
857
|
end
|
|
897
858
|
|
|
898
859
|
context 'when there are no related objects' do
|
|
899
|
-
|
|
900
860
|
before do
|
|
901
|
-
expect(post).
|
|
902
|
-
expect(post).
|
|
861
|
+
expect(post).not_to receive(:delete)
|
|
862
|
+
expect(post).not_to receive(:destroy)
|
|
903
863
|
end
|
|
904
864
|
|
|
905
865
|
it 'deletes the object and leaves the other one intact' do
|
|
@@ -917,39 +877,37 @@ describe Mongoid::Association::Depending do
|
|
|
917
877
|
it 'doesn\'t raise an exception' do
|
|
918
878
|
person.with_session do |session|
|
|
919
879
|
session.with_transaction do
|
|
920
|
-
expect { person.destroy }.
|
|
880
|
+
expect { person.destroy }.not_to raise_error
|
|
921
881
|
end
|
|
922
882
|
end
|
|
923
883
|
end
|
|
924
884
|
end
|
|
925
885
|
end
|
|
926
886
|
|
|
927
|
-
context
|
|
928
|
-
|
|
887
|
+
context 'when restricting a many to many' do
|
|
929
888
|
let!(:association) do
|
|
930
889
|
Person.has_and_belongs_to_many :houses, dependent: :restrict_with_error
|
|
931
890
|
end
|
|
891
|
+
let(:person) do
|
|
892
|
+
Person.new houses: [ House.new ]
|
|
893
|
+
end
|
|
932
894
|
|
|
933
895
|
after do
|
|
934
896
|
Person.dependents.delete(association)
|
|
935
897
|
Person.has_and_belongs_to_many :houses, validate: false
|
|
936
898
|
end
|
|
937
899
|
|
|
938
|
-
|
|
939
|
-
Person.new houses: [House.new]
|
|
940
|
-
end
|
|
941
|
-
|
|
942
|
-
it "returns false" do
|
|
900
|
+
it 'returns false' do
|
|
943
901
|
expect(person.destroy).to be false
|
|
944
902
|
end
|
|
945
903
|
|
|
946
|
-
context
|
|
904
|
+
context 'when inside a transaction' do
|
|
947
905
|
require_transaction_support
|
|
948
906
|
|
|
949
907
|
it 'doesn\'t raise an exception inside a transaction' do
|
|
950
908
|
person.with_session do |session|
|
|
951
909
|
session.with_transaction do
|
|
952
|
-
expect { person.destroy }.
|
|
910
|
+
expect { person.destroy }.not_to raise_error
|
|
953
911
|
end
|
|
954
912
|
end
|
|
955
913
|
end
|