mongoid 7.2.1 → 9.0.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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +20 -20
- data/LICENSE +1 -1
- data/README.md +7 -12
- data/Rakefile +58 -1
- data/lib/config/locales/en.yml +191 -60
- data/lib/mongoid/association/accessors.rb +67 -53
- data/lib/mongoid/association/bindable.rb +77 -31
- data/lib/mongoid/association/builders.rb +8 -14
- data/lib/mongoid/association/constrainable.rb +2 -5
- data/lib/mongoid/association/depending.rb +20 -12
- data/lib/mongoid/association/eager.rb +160 -0
- data/lib/mongoid/association/eager_loadable.rb +41 -11
- data/lib/mongoid/association/embedded/batchable.rb +63 -52
- data/lib/mongoid/association/embedded/cyclic.rb +4 -12
- data/lib/mongoid/association/embedded/eager.rb +23 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +29 -13
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +3 -5
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +25 -23
- data/lib/mongoid/association/embedded/embedded_in.rb +11 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -9
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +5 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +226 -203
- data/lib/mongoid/association/embedded/embeds_many.rb +3 -33
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +3 -9
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +20 -8
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +131 -42
- data/lib/mongoid/association/embedded/embeds_one.rb +4 -30
- data/lib/mongoid/association/embedded.rb +2 -1
- data/lib/mongoid/association/macros.rb +47 -16
- data/lib/mongoid/association/many.rb +12 -24
- data/lib/mongoid/association/marshalable.rb +4 -5
- data/lib/mongoid/association/nested/many.rb +14 -19
- data/lib/mongoid/association/nested/nested_buildable.rb +36 -13
- data/lib/mongoid/association/nested/one.rb +54 -26
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +3 -11
- data/lib/mongoid/association/options.rb +18 -44
- data/lib/mongoid/association/proxy.rb +49 -42
- data/lib/mongoid/association/referenced/auto_save.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -7
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +6 -6
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -2
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +23 -32
- data/lib/mongoid/association/referenced/belongs_to.rb +13 -37
- data/lib/mongoid/association/referenced/counter_cache.rb +18 -26
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +15 -8
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +1 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +191 -123
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -42
- data/lib/mongoid/association/referenced/has_many/binding.rb +1 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +1 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +471 -496
- data/lib/mongoid/association/referenced/has_many/proxy.rb +182 -179
- data/lib/mongoid/association/referenced/has_many.rb +17 -43
- data/lib/mongoid/association/referenced/has_one/binding.rb +1 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/eager.rb +3 -4
- data/lib/mongoid/association/referenced/has_one/proxy.rb +38 -41
- data/lib/mongoid/association/referenced/has_one.rb +17 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -27
- data/lib/mongoid/association/referenced.rb +1 -1
- data/lib/mongoid/association/reflections.rb +9 -9
- data/lib/mongoid/association/relatable.rb +55 -74
- data/lib/mongoid/association.rb +10 -22
- data/lib/mongoid/atomic/modifiers.rb +7 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +20 -5
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -5
- data/lib/mongoid/atomic/paths/embedded.rb +1 -3
- data/lib/mongoid/atomic/paths/root.rb +1 -5
- data/lib/mongoid/atomic/paths.rb +1 -1
- data/lib/mongoid/atomic.rb +39 -86
- data/lib/mongoid/atomic_update_preparer.rb +88 -0
- data/lib/mongoid/attributes/dynamic.rb +5 -21
- data/lib/mongoid/attributes/embedded.rb +34 -0
- data/lib/mongoid/attributes/nested.rb +9 -13
- data/lib/mongoid/attributes/processing.rb +43 -28
- data/lib/mongoid/attributes/projector.rb +120 -0
- data/lib/mongoid/attributes/readonly.rb +4 -8
- data/lib/mongoid/attributes.rb +85 -89
- data/lib/mongoid/cacheable.rb +5 -9
- data/lib/mongoid/changeable.rb +183 -97
- data/lib/mongoid/clients/factory.rb +58 -15
- data/lib/mongoid/clients/options.rb +117 -8
- data/lib/mongoid/clients/sessions.rb +246 -84
- data/lib/mongoid/clients/storage_options.rb +37 -11
- data/lib/mongoid/clients/validators/storage.rb +4 -24
- data/lib/mongoid/clients/validators.rb +1 -1
- data/lib/mongoid/clients.rb +37 -14
- data/lib/mongoid/collection_configurable.rb +59 -0
- data/lib/mongoid/composable.rb +7 -7
- data/lib/mongoid/config/defaults.rb +40 -0
- data/lib/mongoid/config/encryption.rb +213 -0
- data/lib/mongoid/config/environment.rb +25 -5
- data/lib/mongoid/config/introspection.rb +152 -0
- data/lib/mongoid/config/options.rb +11 -14
- data/lib/mongoid/config/validators/async_query_executor.rb +34 -0
- data/lib/mongoid/config/validators/client.rb +7 -23
- data/lib/mongoid/config/validators/option.rb +1 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +183 -46
- data/lib/mongoid/contextual/aggregable/memory.rb +38 -26
- data/lib/mongoid/contextual/aggregable/mongo.rb +26 -32
- data/lib/mongoid/contextual/aggregable/none.rb +66 -0
- data/lib/mongoid/contextual/aggregable.rb +18 -0
- data/lib/mongoid/contextual/atomic.rb +97 -30
- data/lib/mongoid/contextual/command.rb +3 -5
- data/lib/mongoid/contextual/map_reduce.rb +8 -33
- data/lib/mongoid/contextual/memory.rb +396 -89
- data/lib/mongoid/contextual/mongo/documents_loader.rb +178 -0
- data/lib/mongoid/contextual/mongo.rb +640 -311
- data/lib/mongoid/contextual/none.rb +244 -30
- data/lib/mongoid/contextual/queryable.rb +5 -4
- data/lib/mongoid/contextual.rb +18 -7
- data/lib/mongoid/copyable.rb +34 -14
- data/lib/mongoid/criteria/findable.rb +52 -22
- data/lib/mongoid/criteria/includable.rb +31 -34
- data/lib/mongoid/criteria/inspectable.rb +4 -3
- data/lib/mongoid/criteria/marshalable.rb +14 -7
- data/lib/mongoid/criteria/modifiable.rb +5 -19
- data/lib/mongoid/criteria/options.rb +1 -3
- data/lib/mongoid/criteria/permission.rb +6 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +3 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +1 -25
- data/lib/mongoid/criteria/queryable/extensions/array.rb +6 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -9
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -7
- data/lib/mongoid/criteria/queryable/extensions/date.rb +10 -11
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +8 -7
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +2 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +48 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -13
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +19 -34
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +6 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +8 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -5
- data/lib/mongoid/criteria/queryable/key.rb +15 -18
- data/lib/mongoid/criteria/queryable/macroable.rb +1 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +69 -50
- data/lib/mongoid/criteria/queryable/optional.rb +12 -62
- data/lib/mongoid/criteria/queryable/options.rb +3 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +2 -14
- data/lib/mongoid/criteria/queryable/selectable.rb +87 -124
- data/lib/mongoid/criteria/queryable/selector.rb +96 -25
- data/lib/mongoid/criteria/queryable/smash.rb +41 -18
- data/lib/mongoid/criteria/queryable/storable.rb +14 -9
- data/lib/mongoid/criteria/queryable.rb +12 -13
- data/lib/mongoid/criteria/scopable.rb +32 -21
- data/lib/mongoid/criteria/translator.rb +46 -0
- data/lib/mongoid/criteria.rb +60 -109
- data/lib/mongoid/deprecable.rb +38 -0
- data/lib/mongoid/deprecation.rb +29 -0
- data/lib/mongoid/document.rb +263 -173
- data/lib/mongoid/encryptable.rb +53 -0
- data/lib/mongoid/equality.rb +22 -25
- data/lib/mongoid/errors/ambiguous_relationship.rb +3 -5
- data/lib/mongoid/errors/attribute_not_loaded.rb +34 -0
- data/lib/mongoid/errors/callback.rb +1 -3
- data/lib/mongoid/errors/create_collection_failure.rb +34 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +1 -1
- data/lib/mongoid/errors/delete_restriction.rb +9 -12
- data/lib/mongoid/errors/document_not_destroyed.rb +3 -7
- data/lib/mongoid/errors/document_not_found.rb +34 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +28 -0
- data/lib/mongoid/errors/empty_config_file.rb +26 -0
- data/lib/mongoid/errors/immutable_attribute.rb +27 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +26 -0
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +33 -0
- data/lib/mongoid/errors/invalid_collection.rb +1 -1
- data/lib/mongoid/errors/invalid_config_file.rb +26 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +6 -5
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +27 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_field.rb +7 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_field_option.rb +1 -3
- data/lib/mongoid/errors/invalid_field_type.rb +27 -0
- data/lib/mongoid/errors/invalid_find.rb +1 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +23 -0
- data/lib/mongoid/errors/invalid_includes.rb +1 -3
- data/lib/mongoid/errors/invalid_index.rb +1 -3
- data/lib/mongoid/errors/invalid_options.rb +1 -3
- data/lib/mongoid/errors/invalid_path.rb +1 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +1 -5
- data/lib/mongoid/errors/invalid_query.rb +1 -1
- data/lib/mongoid/errors/invalid_relation.rb +2 -8
- data/lib/mongoid/errors/invalid_relation_option.rb +2 -4
- data/lib/mongoid/errors/invalid_scope.rb +1 -3
- data/lib/mongoid/errors/invalid_session_nesting.rb +17 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +1 -2
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -4
- data/lib/mongoid/errors/invalid_time.rb +1 -3
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +17 -0
- data/lib/mongoid/errors/inverse_not_found.rb +1 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -3
- data/lib/mongoid/errors/mixed_relations.rb +1 -3
- data/lib/mongoid/errors/mongoid_error.rb +8 -16
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +2 -4
- data/lib/mongoid/errors/no_client_config.rb +1 -3
- data/lib/mongoid/errors/no_client_database.rb +2 -4
- data/lib/mongoid/errors/no_client_hosts.rb +2 -4
- data/lib/mongoid/errors/no_clients_config.rb +1 -3
- data/lib/mongoid/errors/no_default_client.rb +1 -3
- data/lib/mongoid/errors/no_environment.rb +1 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -3
- data/lib/mongoid/errors/no_metadata.rb +1 -3
- data/lib/mongoid/errors/no_parent.rb +1 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -4
- data/lib/mongoid/errors/readonly_document.rb +2 -6
- data/lib/mongoid/errors/rollback.rb +15 -0
- data/lib/mongoid/errors/scope_overwrite.rb +1 -1
- data/lib/mongoid/errors/sessions_not_supported.rb +17 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -2
- data/lib/mongoid/errors/transaction_error.rb +25 -0
- data/lib/mongoid/errors/transactions_not_supported.rb +17 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -4
- data/lib/mongoid/errors/unknown_model.rb +1 -3
- data/lib/mongoid/errors/unsaved_document.rb +2 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -3
- data/lib/mongoid/errors/validations.rb +1 -1
- data/lib/mongoid/errors.rb +18 -5
- data/lib/mongoid/evolvable.rb +2 -4
- data/lib/mongoid/extensions/array.rb +20 -58
- data/lib/mongoid/extensions/big_decimal.rb +44 -24
- data/lib/mongoid/extensions/binary.rb +45 -0
- data/lib/mongoid/extensions/boolean.rb +11 -6
- data/lib/mongoid/extensions/date.rb +31 -29
- data/lib/mongoid/extensions/date_time.rb +5 -16
- data/lib/mongoid/extensions/decimal128.rb +3 -5
- data/lib/mongoid/extensions/false_class.rb +8 -10
- data/lib/mongoid/extensions/float.rb +11 -12
- data/lib/mongoid/extensions/hash.rb +28 -148
- data/lib/mongoid/extensions/integer.rb +13 -14
- data/lib/mongoid/extensions/module.rb +5 -5
- data/lib/mongoid/extensions/nil_class.rb +5 -7
- data/lib/mongoid/extensions/object.rb +32 -81
- data/lib/mongoid/extensions/object_id.rb +3 -7
- data/lib/mongoid/extensions/range.rb +47 -24
- data/lib/mongoid/extensions/raw_value.rb +34 -0
- data/lib/mongoid/extensions/regexp.rb +14 -7
- data/lib/mongoid/extensions/set.rb +24 -13
- data/lib/mongoid/extensions/string.rb +30 -62
- data/lib/mongoid/extensions/symbol.rb +9 -22
- data/lib/mongoid/extensions/time.rb +30 -40
- data/lib/mongoid/extensions/time_with_zone.rb +18 -11
- data/lib/mongoid/extensions/true_class.rb +8 -10
- data/lib/mongoid/extensions.rb +3 -20
- data/lib/mongoid/factory.rb +178 -37
- data/lib/mongoid/fields/encrypted.rb +48 -0
- data/lib/mongoid/fields/foreign_key.rb +39 -27
- data/lib/mongoid/fields/localized.rb +25 -15
- data/lib/mongoid/fields/standard.rb +22 -40
- data/lib/mongoid/fields/validators/macro.rb +6 -19
- data/lib/mongoid/fields/validators.rb +1 -1
- data/lib/mongoid/fields.rb +354 -76
- data/lib/mongoid/findable.rb +62 -22
- data/lib/mongoid/indexable/specification.rb +55 -34
- data/lib/mongoid/indexable/validators/options.rb +7 -9
- data/lib/mongoid/indexable.rb +2 -18
- data/lib/mongoid/inspectable.rb +34 -11
- data/lib/mongoid/interceptable.rb +197 -41
- data/lib/mongoid/loadable.rb +83 -0
- data/lib/mongoid/loggable.rb +1 -9
- data/lib/mongoid/matchable.rb +2 -6
- data/lib/mongoid/matcher/all.rb +15 -0
- data/lib/mongoid/matcher/and.rb +14 -0
- data/lib/mongoid/matcher/bits.rb +60 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +41 -0
- data/lib/mongoid/matcher/bits_all_set.rb +41 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +41 -0
- data/lib/mongoid/matcher/bits_any_set.rb +41 -0
- data/lib/mongoid/matcher/elem_match.rb +17 -1
- data/lib/mongoid/matcher/elem_match_expression.rb +14 -2
- data/lib/mongoid/matcher/eq.rb +15 -0
- data/lib/mongoid/matcher/eq_impl.rb +54 -2
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +18 -1
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +22 -14
- data/lib/mongoid/matcher/expression_operator.rb +14 -0
- data/lib/mongoid/matcher/field_expression.rb +19 -5
- data/lib/mongoid/matcher/field_operator.rb +30 -0
- data/lib/mongoid/matcher/gt.rb +15 -0
- data/lib/mongoid/matcher/gte.rb +15 -0
- data/lib/mongoid/matcher/in.rb +15 -0
- data/lib/mongoid/matcher/lt.rb +15 -0
- data/lib/mongoid/matcher/lte.rb +15 -0
- data/lib/mongoid/matcher/mod.rb +33 -0
- data/lib/mongoid/matcher/ne.rb +15 -0
- data/lib/mongoid/matcher/nin.rb +15 -0
- data/lib/mongoid/matcher/nor.rb +14 -0
- data/lib/mongoid/matcher/not.rb +16 -0
- data/lib/mongoid/matcher/or.rb +14 -0
- data/lib/mongoid/matcher/regex.rb +24 -0
- data/lib/mongoid/matcher/size.rb +16 -0
- data/lib/mongoid/matcher/type.rb +124 -0
- data/lib/mongoid/matcher.rb +59 -52
- data/lib/mongoid/persistable/creatable.rb +25 -29
- data/lib/mongoid/persistable/deletable.rb +10 -23
- data/lib/mongoid/persistable/destroyable.rb +37 -11
- data/lib/mongoid/persistable/incrementable.rb +2 -6
- data/lib/mongoid/persistable/logical.rb +1 -5
- data/lib/mongoid/persistable/maxable.rb +37 -0
- data/lib/mongoid/persistable/minable.rb +37 -0
- data/lib/mongoid/persistable/multipliable.rb +36 -0
- data/lib/mongoid/persistable/poppable.rb +1 -5
- data/lib/mongoid/persistable/pullable.rb +1 -7
- data/lib/mongoid/persistable/pushable.rb +1 -7
- data/lib/mongoid/persistable/renamable.rb +1 -5
- data/lib/mongoid/persistable/savable.rb +14 -8
- data/lib/mongoid/persistable/settable.rb +1 -5
- data/lib/mongoid/persistable/unsettable.rb +3 -7
- data/lib/mongoid/persistable/updatable.rb +114 -28
- data/lib/mongoid/persistable/upsertable.rb +33 -8
- data/lib/mongoid/persistable.rb +17 -27
- data/lib/mongoid/persistence_context.rb +111 -43
- data/lib/mongoid/positional.rb +1 -5
- data/lib/mongoid/railtie.rb +23 -15
- data/lib/mongoid/railties/bson_object_id_serializer.rb +39 -0
- data/lib/mongoid/railties/console_sandbox.rb +42 -0
- data/lib/mongoid/railties/controller_runtime.rb +21 -6
- data/lib/mongoid/railties/database.rake +19 -2
- data/lib/mongoid/reloadable.rb +45 -42
- data/lib/mongoid/scopable.rb +25 -53
- data/lib/mongoid/search_indexable.rb +167 -0
- data/lib/mongoid/selectable.rb +6 -17
- data/lib/mongoid/serializable.rb +11 -21
- data/lib/mongoid/shardable.rb +50 -16
- data/lib/mongoid/stateful.rb +66 -22
- data/lib/mongoid/stringified_symbol.rb +19 -7
- data/lib/mongoid/tasks/database.rake +25 -0
- data/lib/mongoid/tasks/database.rb +84 -8
- data/lib/mongoid/tasks/encryption.rake +59 -0
- data/lib/mongoid/tasks/encryption.rb +108 -0
- data/lib/mongoid/threaded/lifecycle.rb +6 -26
- data/lib/mongoid/threaded.rb +131 -92
- data/lib/mongoid/timestamps/created/short.rb +1 -1
- data/lib/mongoid/timestamps/created.rb +4 -4
- data/lib/mongoid/timestamps/short.rb +1 -1
- data/lib/mongoid/timestamps/timeless.rb +29 -7
- data/lib/mongoid/timestamps/updated/short.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +3 -5
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/touchable.rb +155 -29
- data/lib/mongoid/traversable.rb +180 -125
- data/lib/mongoid/utils.rb +52 -0
- data/lib/mongoid/validatable/associated.rb +97 -21
- data/lib/mongoid/validatable/format.rb +1 -1
- data/lib/mongoid/validatable/length.rb +1 -1
- data/lib/mongoid/validatable/localizable.rb +2 -4
- data/lib/mongoid/validatable/macros.rb +10 -14
- data/lib/mongoid/validatable/presence.rb +7 -13
- data/lib/mongoid/validatable/queryable.rb +9 -3
- data/lib/mongoid/validatable/uniqueness.rb +26 -39
- data/lib/mongoid/validatable.rb +20 -29
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/warnings.rb +37 -0
- data/lib/mongoid.rb +56 -22
- data/lib/rails/generators/mongoid/config/config_generator.rb +25 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +25 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +44 -64
- data/lib/rails/generators/mongoid/model/model_generator.rb +4 -1
- data/lib/rails/generators/mongoid_generator.rb +13 -1
- data/lib/rails/mongoid.rb +4 -32
- data/spec/config/mongoid.yml +16 -1
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/active_job_spec.rb +32 -0
- data/spec/integration/app_spec.rb +180 -89
- data/spec/integration/associations/belongs_to_spec.rb +19 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +58 -0
- data/spec/integration/associations/embedded_spec.rb +90 -7
- data/spec/integration/associations/embeds_many_spec.rb +197 -1
- data/spec/integration/associations/embeds_one_spec.rb +19 -1
- data/spec/integration/associations/foreign_key_spec.rb +10 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +1 -1
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +62 -0
- data/spec/integration/associations/has_many_spec.rb +1 -1
- data/spec/integration/associations/has_one_spec.rb +145 -1
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +1 -1
- data/spec/integration/associations/reverse_population_spec.rb +1 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +1 -1
- data/spec/integration/associations/scope_option_spec.rb +102 -0
- data/spec/integration/atomic/modifiers_spec.rb +1 -1
- data/spec/integration/bson_regexp_raw_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +147 -3
- data/spec/integration/callbacks_spec.rb +398 -8
- data/spec/integration/contextual/empty_spec.rb +142 -0
- data/spec/integration/criteria/alias_query_spec.rb +98 -0
- data/spec/integration/criteria/date_field_spec.rb +2 -2
- data/spec/integration/criteria/default_scope_spec.rb +52 -0
- data/spec/integration/criteria/logical_spec.rb +12 -0
- data/spec/integration/criteria/range_spec.rb +358 -0
- data/spec/integration/criteria/raw_value_spec.rb +525 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +126 -15
- data/spec/integration/discriminator_key_spec.rb +119 -81
- data/spec/integration/discriminator_value_spec.rb +1 -1
- data/spec/integration/document_spec.rb +31 -1
- data/spec/integration/dots_and_dollars_spec.rb +278 -0
- data/spec/integration/encryption_spec.rb +100 -0
- data/spec/integration/i18n_fallbacks_spec.rb +10 -52
- data/spec/integration/matcher_examples_spec.rb +21 -14
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +144 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +46 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +96 -0
- data/spec/integration/matcher_operator_data/in.yml +16 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/size.yml +0 -3
- data/spec/integration/matcher_operator_data/type.yml +64 -0
- data/spec/integration/matcher_operator_data/type_array.yml +15 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +37 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +26 -3
- data/spec/integration/matcher_spec.rb +50 -1
- data/spec/integration/persistence/range_field_spec.rb +351 -0
- data/spec/integration/server_query_spec.rb +1 -1
- data/spec/integration/shardable_spec.rb +1 -1
- data/spec/integration/stringified_symbol_field_spec.rb +17 -3
- data/spec/lite_spec_helper.rb +47 -14
- data/spec/mongoid/association/accessors_spec.rb +31 -19
- data/spec/mongoid/association/auto_save_spec.rb +73 -34
- data/spec/mongoid/association/builders_spec.rb +2 -2
- data/spec/mongoid/association/constrainable_spec.rb +1 -1
- data/spec/mongoid/association/counter_cache_spec.rb +34 -34
- data/spec/mongoid/association/depending_spec.rb +397 -358
- data/spec/mongoid/association/eager_spec.rb +56 -6
- data/spec/mongoid/association/embedded/cyclic_spec.rb +3 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +3 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +3 -2
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +55 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +110 -23
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -8
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +113 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +712 -203
- data/spec/mongoid/association/embedded/embeds_many_models.rb +189 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +14 -2
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +69 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +26 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +37 -24
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +25 -2
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -2
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +29 -1
- data/spec/mongoid/association/macros_spec.rb +10 -10
- data/spec/mongoid/association/nested/many_spec.rb +1 -1
- data/spec/mongoid/association/nested/one_spec.rb +17 -13
- data/spec/mongoid/association/options_spec.rb +1 -1
- data/spec/mongoid/association/polymorphic_spec.rb +1 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +3 -2
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +110 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +51 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +113 -59
- data/spec/mongoid/association/referenced/belongs_to_models.rb +12 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +22 -2
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +27 -22
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +32 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +386 -376
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +44 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +57 -3
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +131 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +24 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +313 -134
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1313 -2109
- data/spec/mongoid/association/referenced/has_many_models.rb +39 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_many_spec.rb +47 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +54 -10
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +18 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +134 -28
- data/spec/mongoid/association/referenced/has_one_models.rb +43 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one_spec.rb +22 -1
- data/spec/mongoid/association/reflections_spec.rb +1 -1
- data/spec/mongoid/association/syncable_spec.rb +47 -33
- data/spec/mongoid/association_spec.rb +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +1 -1
- data/spec/mongoid/atomic/paths_spec.rb +65 -27
- data/spec/mongoid/atomic_spec.rb +29 -7
- data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
- data/spec/mongoid/attributes/dynamic_spec.rb +1 -1
- data/spec/mongoid/attributes/embedded_spec.rb +118 -0
- data/spec/mongoid/attributes/nested_spec.rb +147 -78
- data/spec/mongoid/attributes/nested_spec_models.rb +49 -0
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +41 -0
- data/spec/mongoid/attributes/readonly_spec.rb +23 -23
- data/spec/mongoid/attributes_spec.rb +921 -69
- data/spec/mongoid/cacheable_spec.rb +5 -5
- data/spec/mongoid/changeable_spec.rb +468 -76
- data/spec/mongoid/clients/factory_spec.rb +152 -30
- data/spec/mongoid/clients/options_spec.rb +24 -12
- data/spec/mongoid/clients/sessions_spec.rb +49 -71
- data/spec/mongoid/clients/transactions_spec.rb +971 -176
- data/spec/mongoid/clients/transactions_spec_models.rb +159 -0
- data/spec/mongoid/clients_spec.rb +230 -22
- data/spec/mongoid/collection_configurable_spec.rb +159 -0
- data/spec/mongoid/composable_spec.rb +1 -1
- data/spec/mongoid/config/defaults_spec.rb +99 -0
- data/spec/mongoid/config/encryption_spec.rb +152 -0
- data/spec/mongoid/config/environment_spec.rb +126 -39
- data/spec/mongoid/config/introspection_spec.rb +114 -0
- data/spec/mongoid/config/options_spec.rb +1 -1
- data/spec/mongoid/config_spec.rb +375 -43
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +432 -154
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +63 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +95 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +49 -0
- data/spec/mongoid/contextual/atomic_spec.rb +329 -87
- data/spec/mongoid/contextual/map_reduce_spec.rb +5 -19
- data/spec/mongoid/contextual/memory_spec.rb +1479 -127
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +194 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3374 -1254
- data/spec/mongoid/contextual/none_spec.rb +79 -68
- data/spec/mongoid/copyable_spec.rb +465 -23
- data/spec/mongoid/copyable_spec_models.rb +1 -1
- data/spec/mongoid/criteria/findable_spec.rb +295 -229
- data/spec/mongoid/criteria/includable_spec.rb +1493 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +55 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +1 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +19 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +38 -38
- data/spec/mongoid/criteria/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -74
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +8 -20
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +135 -27
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +32 -12
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -16
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +74 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +238 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -12
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -12
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -132
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -60
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +106 -8
- data/spec/mongoid/criteria/queryable/optional_spec.rb +17 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +700 -26
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +149 -683
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +186 -6
- data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +87 -1
- data/spec/mongoid/criteria/scopable_spec.rb +128 -1
- data/spec/mongoid/criteria/translator_spec.rb +133 -0
- data/spec/mongoid/criteria_projection_spec.rb +407 -0
- data/spec/mongoid/criteria_spec.rb +1029 -1806
- data/spec/mongoid/document_fields_spec.rb +180 -5
- data/spec/mongoid/document_persistence_context_spec.rb +77 -1
- data/spec/mongoid/document_query_spec.rb +55 -4
- data/spec/mongoid/document_spec.rb +43 -172
- data/spec/mongoid/equality_spec.rb +7 -8
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -1
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
- data/spec/mongoid/errors/callback_spec.rb +1 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +2 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +77 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +1 -1
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +6 -6
- data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -2
- data/spec/mongoid/errors/invalid_field_type_spec.rb +56 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +2 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +1 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +1 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +4 -4
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_database_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -1
- data/spec/mongoid/errors/no_clients_config_spec.rb +1 -1
- data/spec/mongoid/errors/no_environment_spec.rb +4 -4
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +1 -1
- data/spec/mongoid/errors/no_parent_spec.rb +1 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +3 -3
- data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -2
- data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +1 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -1
- data/spec/mongoid/errors/validations_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +19 -265
- data/spec/mongoid/extensions/big_decimal_spec.rb +713 -213
- data/spec/mongoid/extensions/binary_spec.rb +45 -10
- data/spec/mongoid/extensions/boolean_spec.rb +69 -83
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +15 -11
- data/spec/mongoid/extensions/date_spec.rb +74 -22
- data/spec/mongoid/extensions/date_time_spec.rb +18 -19
- data/spec/mongoid/extensions/decimal128_spec.rb +1 -1
- data/spec/mongoid/extensions/false_class_spec.rb +2 -9
- data/spec/mongoid/extensions/float_spec.rb +56 -84
- data/spec/mongoid/extensions/hash_spec.rb +45 -219
- data/spec/mongoid/extensions/integer_spec.rb +53 -73
- data/spec/mongoid/extensions/module_spec.rb +1 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/extensions/object_id_spec.rb +1 -1
- data/spec/mongoid/extensions/object_spec.rb +1 -177
- data/spec/mongoid/extensions/range_spec.rb +254 -64
- data/spec/mongoid/extensions/raw_value_spec.rb +67 -0
- data/spec/mongoid/extensions/regexp_spec.rb +59 -34
- data/spec/mongoid/extensions/set_spec.rb +105 -1
- data/spec/mongoid/extensions/string_spec.rb +21 -104
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +1 -1
- data/spec/mongoid/extensions/symbol_spec.rb +15 -53
- data/spec/mongoid/extensions/time_spec.rb +345 -131
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -107
- data/spec/mongoid/extensions/true_class_spec.rb +2 -9
- data/spec/mongoid/factory_spec.rb +63 -2
- data/spec/mongoid/fields/foreign_key_spec.rb +282 -120
- data/spec/mongoid/fields/localized_spec.rb +85 -42
- data/spec/mongoid/fields/standard_spec.rb +1 -1
- data/spec/mongoid/fields_spec.rb +826 -121
- data/spec/mongoid/findable_spec.rb +442 -80
- data/spec/mongoid/indexable/specification_spec.rb +132 -14
- data/spec/mongoid/indexable_spec.rb +361 -23
- data/spec/mongoid/inspectable_spec.rb +93 -5
- data/spec/mongoid/interceptable_spec.rb +926 -116
- data/spec/mongoid/interceptable_spec_models.rb +236 -4
- data/spec/mongoid/loading_spec.rb +110 -0
- data/spec/mongoid/loggable_spec.rb +1 -1
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +68 -88
- data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -15
- data/spec/mongoid/mongoizable_spec.rb +286 -0
- data/spec/mongoid/monkey_patches_spec.rb +211 -0
- data/spec/mongoid/persistable/creatable_spec.rb +5 -5
- data/spec/mongoid/persistable/deletable_spec.rb +267 -27
- data/spec/mongoid/persistable/destroyable_spec.rb +409 -24
- data/spec/mongoid/persistable/incrementable_spec.rb +46 -9
- data/spec/mongoid/persistable/logical_spec.rb +42 -5
- data/spec/mongoid/persistable/maxable_spec.rb +147 -0
- data/spec/mongoid/persistable/minable_spec.rb +147 -0
- data/spec/mongoid/persistable/multipliable_spec.rb +227 -0
- data/spec/mongoid/persistable/poppable_spec.rb +41 -5
- data/spec/mongoid/persistable/pullable_spec.rb +81 -9
- data/spec/mongoid/persistable/pushable_spec.rb +81 -9
- data/spec/mongoid/persistable/renamable_spec.rb +40 -4
- data/spec/mongoid/persistable/savable_spec.rb +114 -20
- data/spec/mongoid/persistable/settable_spec.rb +77 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +41 -5
- data/spec/mongoid/persistable/updatable_spec.rb +64 -52
- data/spec/mongoid/persistable/upsertable_spec.rb +124 -4
- data/spec/mongoid/persistable_spec.rb +4 -4
- data/spec/mongoid/persistence_context_spec.rb +58 -59
- data/spec/mongoid/positional_spec.rb +1 -1
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +24 -0
- data/spec/mongoid/railties/console_sandbox_spec.rb +44 -0
- data/spec/mongoid/relations/proxy_spec.rb +7 -7
- data/spec/mongoid/reloadable_spec.rb +255 -30
- data/spec/mongoid/scopable_spec.rb +198 -58
- data/spec/mongoid/search_indexable_spec.rb +147 -0
- data/spec/mongoid/selectable_spec.rb +7 -7
- data/spec/mongoid/serializable_spec.rb +19 -40
- data/spec/mongoid/shardable_models.rb +15 -0
- data/spec/mongoid/shardable_spec.rb +181 -31
- data/spec/mongoid/stateful_spec.rb +152 -10
- data/spec/mongoid/tasks/database_rake_spec.rb +193 -42
- data/spec/mongoid/tasks/database_spec.rb +175 -2
- data/spec/mongoid/tasks/encryption_spec.rb +187 -0
- data/spec/mongoid/threaded_spec.rb +40 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +2 -2
- data/spec/mongoid/timestamps/created_spec.rb +2 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +3 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +4 -4
- data/spec/mongoid/timestamps/updated_spec.rb +4 -4
- data/spec/mongoid/timestamps_spec.rb +399 -11
- data/spec/mongoid/timestamps_spec_models.rb +68 -0
- data/spec/mongoid/touchable_spec.rb +971 -54
- data/spec/mongoid/touchable_spec_models.rb +154 -0
- data/spec/mongoid/traversable_spec.rb +79 -37
- data/spec/mongoid/validatable/associated_spec.rb +14 -31
- data/spec/mongoid/validatable/format_spec.rb +1 -1
- data/spec/mongoid/validatable/length_spec.rb +1 -1
- data/spec/mongoid/validatable/numericality_spec.rb +1 -1
- data/spec/mongoid/validatable/presence_spec.rb +27 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +170 -99
- data/spec/mongoid/validatable_spec.rb +4 -4
- data/spec/mongoid/warnings_spec.rb +36 -0
- data/spec/mongoid_spec.rb +61 -11
- data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -3
- data/spec/rails/mongoid_spec.rb +28 -132
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/cluster_config.rb +24 -4
- data/spec/shared/lib/mrss/constraints.rb +77 -29
- data/spec/shared/lib/mrss/docker_runner.rb +40 -4
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +64 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +78 -34
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +123 -71
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +187 -40
- data/spec/shared/shlib/set_env.sh +49 -31
- data/spec/spec_helper.rb +46 -49
- data/spec/support/authorization.rb +1 -1
- data/spec/support/client_registry.rb +10 -0
- data/spec/support/constraints.rb +25 -1
- data/spec/support/crypt/models.rb +50 -0
- data/spec/support/crypt.rb +80 -0
- data/spec/support/expectations.rb +1 -1
- data/spec/support/feature_sandbox.rb +72 -0
- data/spec/support/helpers.rb +1 -0
- data/spec/support/immutable_ids.rb +119 -0
- data/spec/support/macros.rb +107 -1
- data/spec/support/models/account.rb +2 -2
- data/spec/support/models/acolyte.rb +1 -1
- data/spec/support/models/actor.rb +1 -1
- data/spec/support/models/actress.rb +1 -1
- data/spec/support/models/address.rb +7 -1
- 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 -1
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +1 -1
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +1 -1
- data/spec/support/models/armrest.rb +1 -1
- data/spec/support/models/array_field.rb +1 -1
- data/spec/support/models/article.rb +1 -1
- data/spec/support/models/artist.rb +3 -2
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +4 -0
- data/spec/support/models/audio.rb +1 -1
- data/spec/support/models/augmentation.rb +13 -1
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +13 -1
- data/spec/support/models/bar.rb +1 -1
- data/spec/support/models/basic.rb +1 -1
- data/spec/support/models/bed.rb +1 -1
- data/spec/support/models/big_palette.rb +1 -1
- data/spec/support/models/birthday.rb +1 -1
- data/spec/support/models/bolt.rb +8 -0
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +2 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -1
- data/spec/support/models/building.rb +3 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +1 -1
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +1 -1
- data/spec/support/models/car.rb +1 -1
- data/spec/support/models/cat.rb +1 -1
- data/spec/support/models/catalog.rb +25 -0
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +4 -4
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +1 -1
- data/spec/support/models/circuit.rb +1 -1
- data/spec/support/models/circus.rb +4 -1
- data/spec/support/models/code.rb +3 -1
- data/spec/support/models/coding/pull_request.rb +1 -1
- data/spec/support/models/coding.rb +1 -1
- data/spec/support/models/comment.rb +1 -1
- data/spec/support/models/company.rb +1 -1
- data/spec/support/models/consumption_period.rb +1 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +1 -1
- data/spec/support/models/country_code.rb +3 -1
- data/spec/support/models/courier_job.rb +1 -1
- data/spec/support/models/cover.rb +11 -0
- data/spec/support/models/crate.rb +1 -1
- data/spec/support/models/customer.rb +1 -1
- data/spec/support/models/customer_address.rb +1 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +1 -1
- data/spec/support/models/description.rb +1 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +1 -1
- data/spec/support/models/doctor.rb +1 -1
- data/spec/support/models/dog.rb +1 -1
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +1 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +1 -1
- 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 -1
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +1 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +1 -1
- 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 +1 -1
- data/spec/support/models/eye_bowl.rb +1 -1
- data/spec/support/models/face.rb +1 -1
- data/spec/support/models/fanatic.rb +9 -0
- data/spec/support/models/favorite.rb +8 -2
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +1 -1
- data/spec/support/models/fish.rb +1 -1
- data/spec/support/models/folder.rb +1 -1
- data/spec/support/models/folder_item.rb +1 -1
- data/spec/support/models/fruits.rb +1 -1
- data/spec/support/models/game.rb +1 -1
- data/spec/support/models/ghost.rb +1 -1
- data/spec/support/models/guitar.rb +1 -1
- data/spec/support/models/hole.rb +13 -0
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +1 -1
- data/spec/support/models/html_writer.rb +1 -1
- data/spec/support/models/id_key.rb +1 -1
- data/spec/support/models/idnodef.rb +1 -1
- data/spec/support/models/image.rb +1 -1
- data/spec/support/models/implant.rb +10 -1
- data/spec/support/models/instrument.rb +1 -1
- data/spec/support/models/item.rb +1 -1
- data/spec/support/models/jar.rb +1 -1
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +5 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +1 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +1 -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 -1
- data/spec/support/models/manufacturer.rb +1 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +2 -1
- data/spec/support/models/message.rb +1 -1
- data/spec/support/models/minim.rb +1 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/mop.rb +10 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -1
- data/spec/support/models/name.rb +11 -1
- data/spec/support/models/name_only.rb +1 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +1 -1
- data/spec/support/models/nut.rb +8 -0
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +3 -1
- data/spec/support/models/ordered_post.rb +2 -2
- 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 +1 -1
- data/spec/support/models/override.rb +1 -1
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +1 -1
- data/spec/support/models/page.rb +1 -1
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +1 -1
- data/spec/support/models/parent.rb +1 -1
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +15 -1
- data/spec/support/models/patient.rb +1 -1
- data/spec/support/models/pdf_writer.rb +1 -1
- data/spec/support/models/pencil.rb +1 -1
- data/spec/support/models/person.rb +19 -1
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +3 -2
- data/spec/support/models/piano.rb +1 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +3 -1
- data/spec/support/models/post.rb +1 -1
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +13 -1
- data/spec/support/models/preference.rb +1 -1
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +2 -1
- data/spec/support/models/profile.rb +1 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +1 -1
- data/spec/support/models/publication/encyclopedia.rb +1 -1
- data/spec/support/models/publication/review.rb +1 -1
- data/spec/support/models/publication.rb +1 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +11 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/question.rb +1 -1
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +1 -1
- data/spec/support/models/registry.rb +2 -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 +4 -0
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_user.rb +4 -0
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +1 -1
- data/spec/support/models/school.rb +15 -0
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +8 -0
- data/spec/support/models/seat.rb +1 -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 +1 -1
- data/spec/support/models/shape.rb +1 -1
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +19 -0
- data/spec/support/models/shipment_address.rb +1 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +1 -1
- data/spec/support/models/shirt.rb +12 -0
- data/spec/support/models/shop.rb +1 -1
- data/spec/support/models/short_agent.rb +1 -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 -1
- data/spec/support/models/sound.rb +1 -1
- data/spec/support/models/spacer.rb +8 -0
- data/spec/support/models/square.rb +1 -1
- data/spec/support/models/staff.rb +1 -1
- data/spec/support/models/store_as_dup_test1.rb +1 -1
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +1 -1
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +1 -1
- data/spec/support/models/student.rb +15 -0
- data/spec/support/models/sub_item.rb +1 -1
- data/spec/support/models/subscription.rb +1 -1
- data/spec/support/models/survey.rb +1 -1
- data/spec/support/models/symptom.rb +1 -1
- data/spec/support/models/system_role.rb +1 -0
- data/spec/support/models/tag.rb +1 -1
- 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 +8 -0
- data/spec/support/models/title.rb +1 -1
- data/spec/support/models/tool.rb +1 -1
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +1 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +1 -1
- data/spec/support/models/truck.rb +1 -1
- data/spec/support/models/updatable.rb +1 -1
- data/spec/support/models/user.rb +1 -1
- data/spec/support/models/user_account.rb +1 -1
- data/spec/support/models/validation_callback.rb +1 -1
- data/spec/support/models/vehicle.rb +1 -1
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +1 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +1 -1
- data/spec/support/models/video_game.rb +1 -1
- data/spec/support/models/washer.rb +8 -0
- data/spec/support/models/weapon.rb +13 -1
- data/spec/support/models/wiki_page.rb +1 -1
- data/spec/support/models/word.rb +1 -1
- data/spec/support/models/word_origin.rb +1 -1
- data/spec/support/models/writer.rb +1 -1
- data/spec/support/rails_mock.rb +32 -0
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +3 -22
- data/spec/support/sinatra_mock.rb +7 -0
- data/spec/support/spec_config.rb +42 -7
- data.tar.gz.sig +0 -0
- metadata +883 -562
- metadata.gz.sig +0 -0
- data/lib/mongoid/association/referenced/eager.rb +0 -184
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -128
- data/lib/mongoid/contextual/geo_near.rb +0 -269
- data/lib/mongoid/errors/eager_load.rb +0 -26
- data/lib/mongoid/errors/invalid_session_use.rb +0 -26
- data/lib/mongoid/errors/invalid_storage_parent.rb +0 -28
- data/lib/mongoid/errors/invalid_value.rb +0 -18
- data/lib/mongoid/query_cache.rb +0 -333
- data/lib/support/ruby_version.rb +0 -29
- data/spec/mongoid/contextual/geo_near_spec.rb +0 -472
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -61
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -61
- data/spec/mongoid/extensions_spec.rb +0 -32
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -61
- data/spec/mongoid/query_cache_spec.rb +0 -978
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/session_registry.rb +0 -50
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
require "spec_helper"
|
|
5
|
+
require_relative "../has_and_belongs_to_many_models"
|
|
5
6
|
|
|
6
7
|
describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
8
|
+
config_override :raise_not_found_error, true
|
|
7
9
|
|
|
8
10
|
around(:each) do |example|
|
|
9
|
-
original_raise_not_found_error = Mongoid.raise_not_found_error
|
|
10
11
|
original_preferences_association = Person.relations["preferences"]
|
|
11
|
-
Mongoid.raise_not_found_error = true
|
|
12
12
|
Person.has_and_belongs_to_many :preferences, autosave: true
|
|
13
13
|
example.run
|
|
14
|
-
Mongoid.raise_not_found_error = original_raise_not_found_error
|
|
15
14
|
Person.relations["preferences"] = original_preferences_association
|
|
16
15
|
end
|
|
17
16
|
|
|
@@ -27,7 +26,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
27
26
|
context "when the inverse_of is nil" do
|
|
28
27
|
|
|
29
28
|
let!(:article) do
|
|
30
|
-
Article.create
|
|
29
|
+
Article.create!
|
|
31
30
|
end
|
|
32
31
|
|
|
33
32
|
context "when the child document is new" do
|
|
@@ -48,7 +47,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
48
47
|
context "when the child document is not new" do
|
|
49
48
|
|
|
50
49
|
let(:preference) do
|
|
51
|
-
Preference.create
|
|
50
|
+
Preference.create!
|
|
52
51
|
end
|
|
53
52
|
|
|
54
53
|
it "does not persist the child document" do
|
|
@@ -80,7 +79,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
80
79
|
context "when the parent is not a new record" do
|
|
81
80
|
|
|
82
81
|
let(:person) do
|
|
83
|
-
Person.create
|
|
82
|
+
Person.create!
|
|
84
83
|
end
|
|
85
84
|
|
|
86
85
|
let!(:preference) do
|
|
@@ -124,11 +123,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
124
123
|
context "when appending in a parent create block" do
|
|
125
124
|
|
|
126
125
|
let!(:preference) do
|
|
127
|
-
Preference.create(name: "testing")
|
|
126
|
+
Preference.create!(name: "testing")
|
|
128
127
|
end
|
|
129
128
|
|
|
130
129
|
let!(:person) do
|
|
131
|
-
Person.create do |doc|
|
|
130
|
+
Person.create! do |doc|
|
|
132
131
|
doc.preferences << preference
|
|
133
132
|
end
|
|
134
133
|
end
|
|
@@ -213,7 +212,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
213
212
|
context "when the child is already persisted" do
|
|
214
213
|
|
|
215
214
|
let!(:persisted) do
|
|
216
|
-
Preference.create(name: "testy")
|
|
215
|
+
Preference.create!(name: "testy")
|
|
217
216
|
end
|
|
218
217
|
|
|
219
218
|
let(:preference) do
|
|
@@ -222,7 +221,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
222
221
|
|
|
223
222
|
before do
|
|
224
223
|
person.preferences.send(method, preference)
|
|
225
|
-
person.save
|
|
224
|
+
person.save!
|
|
226
225
|
end
|
|
227
226
|
|
|
228
227
|
it "adds the documents to the relation" do
|
|
@@ -253,7 +252,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
253
252
|
context "when setting via the associated ids" do
|
|
254
253
|
|
|
255
254
|
let!(:persisted) do
|
|
256
|
-
Preference.create(name: "testy")
|
|
255
|
+
Preference.create!(name: "testy")
|
|
257
256
|
end
|
|
258
257
|
|
|
259
258
|
let(:preference) do
|
|
@@ -265,7 +264,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
265
264
|
end
|
|
266
265
|
|
|
267
266
|
before do
|
|
268
|
-
person.save
|
|
267
|
+
person.save!
|
|
269
268
|
end
|
|
270
269
|
|
|
271
270
|
it "adds the documents to the relation" do
|
|
@@ -293,7 +292,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
293
292
|
context "when the parent is not a new record" do
|
|
294
293
|
|
|
295
294
|
let(:person) do
|
|
296
|
-
Person.create
|
|
295
|
+
Person.create!
|
|
297
296
|
end
|
|
298
297
|
|
|
299
298
|
let(:preference) do
|
|
@@ -375,11 +374,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
375
374
|
context "when both sides have been persisted" do
|
|
376
375
|
|
|
377
376
|
let(:person) do
|
|
378
|
-
Person.create
|
|
377
|
+
Person.create!
|
|
379
378
|
end
|
|
380
379
|
|
|
381
380
|
let(:event) do
|
|
382
|
-
Event.create
|
|
381
|
+
Event.create!
|
|
383
382
|
end
|
|
384
383
|
|
|
385
384
|
before do
|
|
@@ -428,15 +427,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
428
427
|
context "when the relation also includes a has_many relation" do
|
|
429
428
|
|
|
430
429
|
let(:artwork) do
|
|
431
|
-
Artwork.create
|
|
430
|
+
Artwork.create!
|
|
432
431
|
end
|
|
433
432
|
|
|
434
433
|
let(:exhibition) do
|
|
435
|
-
Exhibition.create
|
|
434
|
+
Exhibition.create!
|
|
436
435
|
end
|
|
437
436
|
|
|
438
437
|
let(:exhibitor) do
|
|
439
|
-
Exhibitor.create(exhibition: exhibition)
|
|
438
|
+
Exhibitor.create!(exhibition: exhibition)
|
|
440
439
|
end
|
|
441
440
|
|
|
442
441
|
before do
|
|
@@ -451,11 +450,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
451
450
|
context "when the relation is self referencing" do
|
|
452
451
|
|
|
453
452
|
let(:tag_one) do
|
|
454
|
-
Tag.create(text: "one")
|
|
453
|
+
Tag.create!(text: "one")
|
|
455
454
|
end
|
|
456
455
|
|
|
457
456
|
let(:tag_two) do
|
|
458
|
-
Tag.create(text: "two")
|
|
457
|
+
Tag.create!(text: "two")
|
|
459
458
|
end
|
|
460
459
|
|
|
461
460
|
before do
|
|
@@ -564,7 +563,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
564
563
|
end
|
|
565
564
|
|
|
566
565
|
let(:preference) do
|
|
567
|
-
Preference.create(name: "one")
|
|
566
|
+
Preference.create!(name: "one")
|
|
568
567
|
end
|
|
569
568
|
|
|
570
569
|
before do
|
|
@@ -585,7 +584,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
585
584
|
context "when the document is persisted" do
|
|
586
585
|
|
|
587
586
|
before do
|
|
588
|
-
person.save
|
|
587
|
+
person.save!
|
|
589
588
|
end
|
|
590
589
|
|
|
591
590
|
it "does not add the duplicates" do
|
|
@@ -656,7 +655,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
656
655
|
end
|
|
657
656
|
|
|
658
657
|
let!(:preference) do
|
|
659
|
-
Preference.create
|
|
658
|
+
Preference.create!
|
|
660
659
|
end
|
|
661
660
|
|
|
662
661
|
before do
|
|
@@ -703,7 +702,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
703
702
|
context "when the parent is not a new record" do
|
|
704
703
|
|
|
705
704
|
let(:person) do
|
|
706
|
-
Person.create
|
|
705
|
+
Person.create!
|
|
707
706
|
end
|
|
708
707
|
|
|
709
708
|
let(:preference) do
|
|
@@ -787,7 +786,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
787
786
|
expect(person.preferences).to eq([ another_preference ])
|
|
788
787
|
end
|
|
789
788
|
|
|
790
|
-
it "persists the relation between
|
|
789
|
+
it "persists the relation between another_preference and person" do
|
|
791
790
|
expect(another_preference.people).to eq([ person ])
|
|
792
791
|
end
|
|
793
792
|
|
|
@@ -799,7 +798,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
799
798
|
context "and person is saved" do
|
|
800
799
|
|
|
801
800
|
before do
|
|
802
|
-
person.save
|
|
801
|
+
person.save!
|
|
803
802
|
person.reload
|
|
804
803
|
another_preference.reload
|
|
805
804
|
end
|
|
@@ -808,7 +807,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
808
807
|
expect(person.preferences).to eq([ another_preference ])
|
|
809
808
|
end
|
|
810
809
|
|
|
811
|
-
it "persists the relation between
|
|
810
|
+
it "persists the relation between another_preference and person" do
|
|
812
811
|
expect(another_preference.people).to eq([ person ])
|
|
813
812
|
end
|
|
814
813
|
|
|
@@ -823,11 +822,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
823
822
|
|
|
824
823
|
describe "when self-referencing" do
|
|
825
824
|
let!(:parent) do
|
|
826
|
-
Vertex.create
|
|
825
|
+
Vertex.create!
|
|
827
826
|
end
|
|
828
827
|
|
|
829
828
|
let!(:child) do
|
|
830
|
-
Vertex.create(parents: [parent])
|
|
829
|
+
Vertex.create!(parents: [parent])
|
|
831
830
|
end
|
|
832
831
|
|
|
833
832
|
before do
|
|
@@ -964,7 +963,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
964
963
|
context "when the relation has been loaded" do
|
|
965
964
|
|
|
966
965
|
let(:person) do
|
|
967
|
-
Person.create
|
|
966
|
+
Person.create!
|
|
968
967
|
end
|
|
969
968
|
|
|
970
969
|
let(:preference) do
|
|
@@ -1004,7 +1003,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1004
1003
|
end
|
|
1005
1004
|
|
|
1006
1005
|
let(:person) do
|
|
1007
|
-
Person.create
|
|
1006
|
+
Person.create!.tap do |p|
|
|
1008
1007
|
p.preferences = [ preference ]
|
|
1009
1008
|
end
|
|
1010
1009
|
end
|
|
@@ -1074,7 +1073,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1074
1073
|
context "when the parent is not a new record" do
|
|
1075
1074
|
|
|
1076
1075
|
let(:person) do
|
|
1077
|
-
Person.create
|
|
1076
|
+
Person.create!
|
|
1078
1077
|
end
|
|
1079
1078
|
|
|
1080
1079
|
let!(:preference) do
|
|
@@ -1112,7 +1111,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1112
1111
|
context "when saving the target" do
|
|
1113
1112
|
|
|
1114
1113
|
before do
|
|
1115
|
-
preference.save
|
|
1114
|
+
preference.save!
|
|
1116
1115
|
end
|
|
1117
1116
|
|
|
1118
1117
|
it "persists the parent keys" do
|
|
@@ -1131,13 +1130,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1131
1130
|
context "when the parent has been persisted" do
|
|
1132
1131
|
|
|
1133
1132
|
let!(:person) do
|
|
1134
|
-
Person.create
|
|
1133
|
+
Person.create!
|
|
1135
1134
|
end
|
|
1136
1135
|
|
|
1137
1136
|
context "when the children are persisted" do
|
|
1138
1137
|
|
|
1139
1138
|
let!(:preference) do
|
|
1140
|
-
person.preferences.create(name: "settings")
|
|
1139
|
+
person.preferences.create!(name: "settings")
|
|
1141
1140
|
end
|
|
1142
1141
|
|
|
1143
1142
|
let!(:relation) do
|
|
@@ -1309,7 +1308,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1309
1308
|
context "when the parent is not a new record" do
|
|
1310
1309
|
|
|
1311
1310
|
let(:person) do
|
|
1312
|
-
Person.create
|
|
1311
|
+
Person.create!
|
|
1313
1312
|
end
|
|
1314
1313
|
|
|
1315
1314
|
let!(:preference) do
|
|
@@ -1353,11 +1352,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1353
1352
|
context "when appending in a parent create block" do
|
|
1354
1353
|
|
|
1355
1354
|
let!(:preference) do
|
|
1356
|
-
Preference.create(name: "testing")
|
|
1355
|
+
Preference.create!(name: "testing")
|
|
1357
1356
|
end
|
|
1358
1357
|
|
|
1359
1358
|
let!(:person) do
|
|
1360
|
-
Person.create do |doc|
|
|
1359
|
+
Person.create! do |doc|
|
|
1361
1360
|
doc.preferences.concat([ preference ])
|
|
1362
1361
|
end
|
|
1363
1362
|
end
|
|
@@ -1442,7 +1441,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1442
1441
|
context "when the child is already persisted" do
|
|
1443
1442
|
|
|
1444
1443
|
let!(:persisted) do
|
|
1445
|
-
Preference.create(name: "testy")
|
|
1444
|
+
Preference.create!(name: "testy")
|
|
1446
1445
|
end
|
|
1447
1446
|
|
|
1448
1447
|
let(:preference) do
|
|
@@ -1451,7 +1450,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1451
1450
|
|
|
1452
1451
|
before do
|
|
1453
1452
|
person.preferences.concat([ preference ])
|
|
1454
|
-
person.save
|
|
1453
|
+
person.save!
|
|
1455
1454
|
end
|
|
1456
1455
|
|
|
1457
1456
|
it "adds the documents to the relation" do
|
|
@@ -1482,7 +1481,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1482
1481
|
context "when setting via the associated ids" do
|
|
1483
1482
|
|
|
1484
1483
|
let!(:persisted) do
|
|
1485
|
-
Preference.create(name: "testy")
|
|
1484
|
+
Preference.create!(name: "testy")
|
|
1486
1485
|
end
|
|
1487
1486
|
|
|
1488
1487
|
let(:preference) do
|
|
@@ -1494,7 +1493,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1494
1493
|
end
|
|
1495
1494
|
|
|
1496
1495
|
before do
|
|
1497
|
-
person.save
|
|
1496
|
+
person.save!
|
|
1498
1497
|
end
|
|
1499
1498
|
|
|
1500
1499
|
it "adds the documents to the relation" do
|
|
@@ -1522,7 +1521,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1522
1521
|
context "when the parent is not a new record" do
|
|
1523
1522
|
|
|
1524
1523
|
let(:person) do
|
|
1525
|
-
Person.create
|
|
1524
|
+
Person.create!
|
|
1526
1525
|
end
|
|
1527
1526
|
|
|
1528
1527
|
let(:preference) do
|
|
@@ -1604,11 +1603,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1604
1603
|
context "when both sides have been persisted" do
|
|
1605
1604
|
|
|
1606
1605
|
let(:person) do
|
|
1607
|
-
Person.create
|
|
1606
|
+
Person.create!
|
|
1608
1607
|
end
|
|
1609
1608
|
|
|
1610
1609
|
let(:event) do
|
|
1611
|
-
Event.create
|
|
1610
|
+
Event.create!
|
|
1612
1611
|
end
|
|
1613
1612
|
|
|
1614
1613
|
before do
|
|
@@ -1657,15 +1656,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1657
1656
|
context "when the relation also includes a has_many relation" do
|
|
1658
1657
|
|
|
1659
1658
|
let(:artwork) do
|
|
1660
|
-
Artwork.create
|
|
1659
|
+
Artwork.create!
|
|
1661
1660
|
end
|
|
1662
1661
|
|
|
1663
1662
|
let(:exhibition) do
|
|
1664
|
-
Exhibition.create
|
|
1663
|
+
Exhibition.create!
|
|
1665
1664
|
end
|
|
1666
1665
|
|
|
1667
1666
|
let(:exhibitor) do
|
|
1668
|
-
Exhibitor.create(exhibition: exhibition)
|
|
1667
|
+
Exhibitor.create!(exhibition: exhibition)
|
|
1669
1668
|
end
|
|
1670
1669
|
|
|
1671
1670
|
before do
|
|
@@ -1680,11 +1679,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1680
1679
|
context "when the relation is self referencing" do
|
|
1681
1680
|
|
|
1682
1681
|
let(:tag_one) do
|
|
1683
|
-
Tag.create(text: "one")
|
|
1682
|
+
Tag.create!(text: "one")
|
|
1684
1683
|
end
|
|
1685
1684
|
|
|
1686
1685
|
let(:tag_two) do
|
|
1687
|
-
Tag.create(text: "two")
|
|
1686
|
+
Tag.create!(text: "two")
|
|
1688
1687
|
end
|
|
1689
1688
|
|
|
1690
1689
|
before do
|
|
@@ -1735,7 +1734,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1735
1734
|
describe "#count" do
|
|
1736
1735
|
|
|
1737
1736
|
let(:person) do
|
|
1738
|
-
Person.create
|
|
1737
|
+
Person.create!
|
|
1739
1738
|
end
|
|
1740
1739
|
|
|
1741
1740
|
context "when nothing exists on the relation" do
|
|
@@ -1760,7 +1759,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1760
1759
|
describe "#any?" do
|
|
1761
1760
|
|
|
1762
1761
|
let(:person) do
|
|
1763
|
-
Person.create
|
|
1762
|
+
Person.create!
|
|
1764
1763
|
end
|
|
1765
1764
|
|
|
1766
1765
|
context "when nothing exists on the relation" do
|
|
@@ -1797,7 +1796,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1797
1796
|
context "when documents have been persisted" do
|
|
1798
1797
|
|
|
1799
1798
|
let!(:preference) do
|
|
1800
|
-
person.preferences.create(name: "setting")
|
|
1799
|
+
person.preferences.create!(name: "setting")
|
|
1801
1800
|
end
|
|
1802
1801
|
|
|
1803
1802
|
it "returns the number of persisted documents" do
|
|
@@ -1808,12 +1807,12 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1808
1807
|
context "when appending to a loaded relation" do
|
|
1809
1808
|
|
|
1810
1809
|
let!(:preference) do
|
|
1811
|
-
person.preferences.create(name: "setting")
|
|
1810
|
+
person.preferences.create!(name: "setting")
|
|
1812
1811
|
end
|
|
1813
1812
|
|
|
1814
1813
|
before do
|
|
1815
1814
|
person.preferences.count
|
|
1816
|
-
person.preferences << Preference.create(name: "two")
|
|
1815
|
+
person.preferences << Preference.create!(name: "two")
|
|
1817
1816
|
end
|
|
1818
1817
|
|
|
1819
1818
|
it "returns the number of persisted documents" do
|
|
@@ -1837,7 +1836,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1837
1836
|
context "when the documents are part of the relation" do
|
|
1838
1837
|
|
|
1839
1838
|
before do
|
|
1840
|
-
Preference.create(person_ids: [ person.id ])
|
|
1839
|
+
Preference.create!(person_ids: [ person.id ])
|
|
1841
1840
|
end
|
|
1842
1841
|
|
|
1843
1842
|
it "returns the count from the db" do
|
|
@@ -1848,7 +1847,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1848
1847
|
context "when the documents are not part of the relation" do
|
|
1849
1848
|
|
|
1850
1849
|
before do
|
|
1851
|
-
Preference.create
|
|
1850
|
+
Preference.create!
|
|
1852
1851
|
end
|
|
1853
1852
|
|
|
1854
1853
|
it "returns the count from the db" do
|
|
@@ -1862,7 +1861,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1862
1861
|
context "when documents have been persisted" do
|
|
1863
1862
|
|
|
1864
1863
|
let!(:house) do
|
|
1865
|
-
person.houses.create(name: "Wayne Manor")
|
|
1864
|
+
person.houses.create!(name: "Wayne Manor")
|
|
1866
1865
|
end
|
|
1867
1866
|
|
|
1868
1867
|
it "returns the number of persisted documents" do
|
|
@@ -1886,7 +1885,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1886
1885
|
describe "#any?" do
|
|
1887
1886
|
|
|
1888
1887
|
let(:sandwich) do
|
|
1889
|
-
Sandwich.create
|
|
1888
|
+
Sandwich.create!
|
|
1890
1889
|
end
|
|
1891
1890
|
|
|
1892
1891
|
context "when nothing exists on the relation" do
|
|
@@ -1954,7 +1953,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1954
1953
|
context "when documents have been persisted" do
|
|
1955
1954
|
|
|
1956
1955
|
let!(:meat) do
|
|
1957
|
-
sandwich.meats.create
|
|
1956
|
+
sandwich.meats.create!
|
|
1958
1957
|
end
|
|
1959
1958
|
|
|
1960
1959
|
it "returns true" do
|
|
@@ -1975,7 +1974,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1975
1974
|
|
|
1976
1975
|
context "when new documents exist in the database" do
|
|
1977
1976
|
before do
|
|
1978
|
-
Meat.create(sandwiches: [sandwich])
|
|
1977
|
+
Meat.create!(sandwiches: [sandwich])
|
|
1979
1978
|
end
|
|
1980
1979
|
|
|
1981
1980
|
it "returns true" do
|
|
@@ -1993,15 +1992,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1993
1992
|
context "when using string keys" do
|
|
1994
1993
|
|
|
1995
1994
|
let(:agent) do
|
|
1996
|
-
Agent.create(number: "007")
|
|
1995
|
+
Agent.create!(number: "007")
|
|
1997
1996
|
end
|
|
1998
1997
|
|
|
1999
1998
|
before do
|
|
2000
|
-
agent.accounts.
|
|
1999
|
+
agent.accounts.send(method, name: "test again")
|
|
2001
2000
|
end
|
|
2002
2001
|
|
|
2003
2002
|
it "does not convert the string key to an object id" do
|
|
2004
|
-
expect(agent.account_ids).to eq([ "
|
|
2003
|
+
expect(agent.account_ids).to eq([ "test-again" ])
|
|
2005
2004
|
end
|
|
2006
2005
|
end
|
|
2007
2006
|
|
|
@@ -2073,7 +2072,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2073
2072
|
context "when validation fails" do
|
|
2074
2073
|
|
|
2075
2074
|
let(:person) do
|
|
2076
|
-
Person.create
|
|
2075
|
+
Person.create!
|
|
2077
2076
|
end
|
|
2078
2077
|
|
|
2079
2078
|
context "when the relation is not polymorphic" do
|
|
@@ -2087,290 +2086,236 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2087
2086
|
end
|
|
2088
2087
|
end
|
|
2089
2088
|
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
let(:preference_one) do
|
|
2097
|
-
Preference.create(name: "Testing")
|
|
2098
|
-
end
|
|
2099
|
-
|
|
2100
|
-
let(:preference_two) do
|
|
2101
|
-
Preference.create(name: "Test")
|
|
2102
|
-
end
|
|
2103
|
-
|
|
2104
|
-
before do
|
|
2105
|
-
person.preferences << [ preference_one, preference_two ]
|
|
2106
|
-
end
|
|
2107
|
-
|
|
2108
|
-
context "when the document exists" do
|
|
2109
|
-
|
|
2110
|
-
let!(:deleted) do
|
|
2111
|
-
person.preferences.delete(preference_one)
|
|
2112
|
-
end
|
|
2113
|
-
|
|
2114
|
-
it "removes the document from the relation" do
|
|
2115
|
-
expect(person.preferences).to eq([ preference_two ])
|
|
2116
|
-
end
|
|
2089
|
+
%i[ delete delete_one ].each do |method|
|
|
2090
|
+
describe "\##{method}" do
|
|
2091
|
+
let(:person) { Person.create! }
|
|
2092
|
+
let(:preference_one) { Preference.create!(name: "Testing") }
|
|
2093
|
+
let(:preference_two) { Preference.create!(name: "Test") }
|
|
2117
2094
|
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
end
|
|
2121
|
-
|
|
2122
|
-
it "removes the document key from the foreign key" do
|
|
2123
|
-
expect(person.preference_ids).to eq([ preference_two.id ])
|
|
2124
|
-
end
|
|
2125
|
-
|
|
2126
|
-
it "removes the inverse reference" do
|
|
2127
|
-
expect(deleted.reload.people).to be_empty
|
|
2128
|
-
end
|
|
2129
|
-
|
|
2130
|
-
it "removes the base id from the inverse keys" do
|
|
2131
|
-
expect(deleted.reload.person_ids).to be_empty
|
|
2095
|
+
before do
|
|
2096
|
+
person.preferences << [ preference_one, preference_two ]
|
|
2132
2097
|
end
|
|
2133
2098
|
|
|
2134
|
-
context
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
person.reload
|
|
2138
|
-
preference_one.reload
|
|
2139
|
-
preference_two.reload
|
|
2099
|
+
context 'when the document exists' do
|
|
2100
|
+
let!(:deleted) do
|
|
2101
|
+
person.preferences.send(method, preference_one)
|
|
2140
2102
|
end
|
|
2141
2103
|
|
|
2142
|
-
it
|
|
2104
|
+
it 'removes the document from the relation' do
|
|
2143
2105
|
expect(person.preferences).to eq([ preference_two ])
|
|
2144
2106
|
end
|
|
2145
2107
|
|
|
2146
|
-
it
|
|
2147
|
-
expect(
|
|
2108
|
+
it 'returns the document' do
|
|
2109
|
+
expect(deleted).to eq(preference_one)
|
|
2148
2110
|
end
|
|
2149
|
-
end
|
|
2150
|
-
end
|
|
2151
|
-
|
|
2152
|
-
context "when the document does not exist" do
|
|
2153
|
-
|
|
2154
|
-
let!(:deleted) do
|
|
2155
|
-
person.preferences.delete(Preference.new)
|
|
2156
|
-
end
|
|
2157
|
-
|
|
2158
|
-
it "returns nil" do
|
|
2159
|
-
expect(deleted).to be_nil
|
|
2160
|
-
end
|
|
2161
|
-
|
|
2162
|
-
it "does not modify the relation" do
|
|
2163
|
-
expect(person.preferences).to eq([ preference_one, preference_two ])
|
|
2164
|
-
end
|
|
2165
|
-
|
|
2166
|
-
it "does not modify the keys" do
|
|
2167
|
-
expect(person.preference_ids).to eq([ preference_one.id, preference_two.id ])
|
|
2168
|
-
end
|
|
2169
|
-
end
|
|
2170
|
-
|
|
2171
|
-
context "when :dependent => :nullify is set" do
|
|
2172
|
-
|
|
2173
|
-
context "when :inverse_of is set" do
|
|
2174
2111
|
|
|
2175
|
-
|
|
2176
|
-
|
|
2112
|
+
it 'removes the document key from the foreign key' do
|
|
2113
|
+
expect(person.preference_ids).to eq([ preference_two.id ])
|
|
2177
2114
|
end
|
|
2178
2115
|
|
|
2179
|
-
|
|
2180
|
-
|
|
2116
|
+
it 'removes the inverse reference' do
|
|
2117
|
+
expect(deleted.reload.people).to be_empty
|
|
2181
2118
|
end
|
|
2182
2119
|
|
|
2183
|
-
it
|
|
2184
|
-
expect(
|
|
2120
|
+
it 'removes the base id from the inverse keys' do
|
|
2121
|
+
expect(deleted.reload.person_ids).to be_empty
|
|
2185
2122
|
end
|
|
2186
|
-
end
|
|
2187
|
-
end
|
|
2188
2123
|
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2124
|
+
context 'and person and preferences are reloaded' do
|
|
2125
|
+
before do
|
|
2126
|
+
person.reload
|
|
2127
|
+
preference_one.reload
|
|
2128
|
+
preference_two.reload
|
|
2129
|
+
end
|
|
2194
2130
|
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2131
|
+
it 'nullifies the deleted preference' do
|
|
2132
|
+
expect(person.preferences).to eq([ preference_two ])
|
|
2133
|
+
end
|
|
2198
2134
|
|
|
2199
|
-
|
|
2200
|
-
|
|
2135
|
+
it 'retains the ids for one preference' do
|
|
2136
|
+
expect(person.preference_ids).to eq([ preference_two.id ])
|
|
2137
|
+
end
|
|
2138
|
+
end
|
|
2201
2139
|
end
|
|
2202
2140
|
|
|
2203
|
-
context
|
|
2204
|
-
|
|
2141
|
+
context 'when the document does not exist' do
|
|
2205
2142
|
let!(:deleted) do
|
|
2206
|
-
|
|
2207
|
-
end
|
|
2208
|
-
|
|
2209
|
-
it "deletes the document from the relation" do
|
|
2210
|
-
expect(tag_one.related).to be_empty
|
|
2143
|
+
person.preferences.send(method, Preference.new)
|
|
2211
2144
|
end
|
|
2212
2145
|
|
|
2213
|
-
it
|
|
2214
|
-
expect(
|
|
2146
|
+
it 'returns nil' do
|
|
2147
|
+
expect(deleted).to be_nil
|
|
2215
2148
|
end
|
|
2216
2149
|
|
|
2217
|
-
it
|
|
2218
|
-
expect(
|
|
2150
|
+
it 'does not modify the relation' do
|
|
2151
|
+
expect(person.preferences).to eq([ preference_one, preference_two ])
|
|
2219
2152
|
end
|
|
2220
2153
|
|
|
2221
|
-
it
|
|
2222
|
-
expect(
|
|
2154
|
+
it 'does not modify the keys' do
|
|
2155
|
+
expect(person.preference_ids).to eq([ preference_one.id, preference_two.id ])
|
|
2223
2156
|
end
|
|
2224
2157
|
end
|
|
2225
2158
|
|
|
2226
|
-
context
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
let(:reloaded) do
|
|
2231
|
-
tag_one.reload
|
|
2232
|
-
end
|
|
2233
|
-
|
|
2234
|
-
let!(:deleted) do
|
|
2235
|
-
reloaded.related.delete(tag_two)
|
|
2236
|
-
end
|
|
2159
|
+
context 'when :dependent => :nullify is set' do
|
|
2160
|
+
context 'when :inverse_of is set' do
|
|
2161
|
+
let(:event) { Event.create! }
|
|
2237
2162
|
|
|
2238
|
-
|
|
2239
|
-
|
|
2163
|
+
before do
|
|
2164
|
+
person.administrated_events << [ event ]
|
|
2240
2165
|
end
|
|
2241
2166
|
|
|
2242
|
-
it
|
|
2243
|
-
expect(
|
|
2167
|
+
it 'deletes the document' do
|
|
2168
|
+
expect(event.delete).to be true
|
|
2244
2169
|
end
|
|
2170
|
+
end
|
|
2171
|
+
end
|
|
2245
2172
|
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2173
|
+
context 'when the relationships are self referencing' do
|
|
2174
|
+
let(:tag_one) { Tag.create!(text: "one") }
|
|
2175
|
+
let(:tag_two) { Tag.create!(text: "two") }
|
|
2249
2176
|
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
end
|
|
2177
|
+
before do
|
|
2178
|
+
tag_one.related << tag_two
|
|
2253
2179
|
end
|
|
2254
2180
|
|
|
2255
|
-
context
|
|
2256
|
-
|
|
2257
|
-
let(:reloaded) do
|
|
2258
|
-
tag_two.reload
|
|
2259
|
-
end
|
|
2181
|
+
context 'when deleting without reloading' do
|
|
2182
|
+
let!(:deleted) { tag_one.related.send(method, tag_two) }
|
|
2260
2183
|
|
|
2261
|
-
|
|
2262
|
-
|
|
2184
|
+
it 'deletes the document from the relation' do
|
|
2185
|
+
expect(tag_one.related).to be_empty
|
|
2263
2186
|
end
|
|
2264
2187
|
|
|
2265
|
-
it
|
|
2266
|
-
expect(
|
|
2188
|
+
it 'deletes the foreign key from the relation' do
|
|
2189
|
+
expect(tag_one.related_ids).to be_empty
|
|
2267
2190
|
end
|
|
2268
2191
|
|
|
2269
|
-
it
|
|
2270
|
-
expect(
|
|
2192
|
+
it 'removes the reference from the inverse' do
|
|
2193
|
+
expect(deleted.related).to be_empty
|
|
2271
2194
|
end
|
|
2272
2195
|
|
|
2273
|
-
it
|
|
2196
|
+
it 'removes the foreign keys from the inverse' do
|
|
2274
2197
|
expect(deleted.related_ids).to be_empty
|
|
2275
2198
|
end
|
|
2276
2199
|
end
|
|
2277
|
-
end
|
|
2278
|
-
end
|
|
2279
2200
|
|
|
2280
|
-
|
|
2201
|
+
context 'when deleting with reloading' do
|
|
2202
|
+
context "when deleting from the front side" do
|
|
2203
|
+
let(:reloaded) { tag_one.reload }
|
|
2204
|
+
let!(:deleted) { reloaded.related.send(method, tag_two) }
|
|
2281
2205
|
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2206
|
+
it 'deletes the document from the relation' do
|
|
2207
|
+
expect(reloaded.related).to be_empty
|
|
2208
|
+
end
|
|
2285
2209
|
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2210
|
+
it 'deletes the foreign key from the relation' do
|
|
2211
|
+
expect(reloaded.related_ids).to be_empty
|
|
2212
|
+
end
|
|
2289
2213
|
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2214
|
+
it 'removes the reference from the inverse' do
|
|
2215
|
+
expect(deleted.related).to be_empty
|
|
2216
|
+
end
|
|
2293
2217
|
|
|
2294
|
-
|
|
2218
|
+
it 'removes the foreign keys from the inverse' do
|
|
2219
|
+
expect(deleted.related_ids).to be_empty
|
|
2220
|
+
end
|
|
2221
|
+
end
|
|
2295
2222
|
|
|
2296
|
-
|
|
2223
|
+
context 'when deleting from the inverse side' do
|
|
2224
|
+
let(:reloaded) { tag_two.reload }
|
|
2225
|
+
let!(:deleted) { reloaded.related.send(method, tag_one) }
|
|
2297
2226
|
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2227
|
+
it 'deletes the document from the relation' do
|
|
2228
|
+
expect(reloaded.related).to be_empty
|
|
2229
|
+
end
|
|
2301
2230
|
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2231
|
+
it 'deletes the foreign key from the relation' do
|
|
2232
|
+
expect(reloaded.related_ids).to be_empty
|
|
2233
|
+
end
|
|
2305
2234
|
|
|
2306
|
-
|
|
2307
|
-
|
|
2235
|
+
it 'removes the foreign keys from the inverse' do
|
|
2236
|
+
expect(deleted.related_ids).to be_empty
|
|
2237
|
+
end
|
|
2308
2238
|
end
|
|
2309
2239
|
end
|
|
2240
|
+
end
|
|
2310
2241
|
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
expect(post).to receive(:before_remove_tag).and_raise
|
|
2315
|
-
begin; post.tags.delete(tag); rescue; end
|
|
2316
|
-
end
|
|
2242
|
+
context 'when the association has callbacks' do
|
|
2243
|
+
let(:post) { Post.new }
|
|
2244
|
+
let(:tag) { Tag.new }
|
|
2317
2245
|
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
end
|
|
2246
|
+
before do
|
|
2247
|
+
post.tags << tag
|
|
2321
2248
|
end
|
|
2322
|
-
end
|
|
2323
2249
|
|
|
2324
|
-
|
|
2250
|
+
context 'when the callback is a before_remove' do
|
|
2251
|
+
context 'when there are no errors' do
|
|
2252
|
+
before do
|
|
2253
|
+
post.tags.send(method, tag)
|
|
2254
|
+
end
|
|
2325
2255
|
|
|
2326
|
-
|
|
2256
|
+
it 'executes the callback' do
|
|
2257
|
+
expect(post.before_remove_called).to be true
|
|
2258
|
+
end
|
|
2327
2259
|
|
|
2328
|
-
|
|
2329
|
-
|
|
2260
|
+
it 'removes the document from the relation' do
|
|
2261
|
+
expect(post.tags).to be_empty
|
|
2262
|
+
end
|
|
2330
2263
|
end
|
|
2331
2264
|
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2265
|
+
context "when errors are raised" do
|
|
2266
|
+
before do
|
|
2267
|
+
expect(post).to receive(:before_remove_tag).and_raise
|
|
2268
|
+
begin; post.tags.send(method, tag); rescue; end
|
|
2269
|
+
end
|
|
2335
2270
|
|
|
2336
|
-
|
|
2337
|
-
|
|
2271
|
+
it 'does not remove the document from the relation' do
|
|
2272
|
+
expect(post.tags).to eq([ tag ])
|
|
2273
|
+
end
|
|
2338
2274
|
end
|
|
2339
2275
|
end
|
|
2340
2276
|
|
|
2341
|
-
context
|
|
2277
|
+
context 'when the callback is an after_remove' do
|
|
2278
|
+
context 'when no errors are raised' do
|
|
2279
|
+
before do
|
|
2280
|
+
post.tags.send(method, tag)
|
|
2281
|
+
end
|
|
2342
2282
|
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2283
|
+
it 'executes the callback' do
|
|
2284
|
+
expect(post.after_remove_called).to be true
|
|
2285
|
+
end
|
|
2286
|
+
|
|
2287
|
+
it 'removes the document from the relation' do
|
|
2288
|
+
expect(post.tags).to be_empty
|
|
2289
|
+
end
|
|
2346
2290
|
end
|
|
2347
2291
|
|
|
2348
|
-
|
|
2349
|
-
|
|
2292
|
+
context 'when errors are raised' do
|
|
2293
|
+
before do
|
|
2294
|
+
expect(post).to receive(:after_remove_tag).and_raise
|
|
2295
|
+
begin; post.tags.send(method, tag); rescue; end
|
|
2296
|
+
end
|
|
2297
|
+
|
|
2298
|
+
it 'removes the document from the relation' do
|
|
2299
|
+
expect(post.tags).to be_empty
|
|
2300
|
+
end
|
|
2350
2301
|
end
|
|
2351
2302
|
end
|
|
2352
2303
|
end
|
|
2353
2304
|
end
|
|
2354
2305
|
end
|
|
2355
2306
|
|
|
2356
|
-
[
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
context "when conditions are provided" do
|
|
2363
|
-
|
|
2364
|
-
let(:person) do
|
|
2365
|
-
Person.create
|
|
2366
|
-
end
|
|
2307
|
+
%i[ delete_all destroy_all ].each do |method|
|
|
2308
|
+
describe "\##{method}" do
|
|
2309
|
+
context 'when the relation is not polymorphic' do
|
|
2310
|
+
context 'when conditions are provided' do
|
|
2311
|
+
let(:person) { Person.create! }
|
|
2367
2312
|
|
|
2368
2313
|
let!(:preference_one) do
|
|
2369
|
-
person.preferences.create(name: "Testing")
|
|
2314
|
+
person.preferences.create!(name: "Testing")
|
|
2370
2315
|
end
|
|
2371
2316
|
|
|
2372
2317
|
let!(:preference_two) do
|
|
2373
|
-
person.preferences.create(name: "Test")
|
|
2318
|
+
person.preferences.create!(name: "Test")
|
|
2374
2319
|
end
|
|
2375
2320
|
|
|
2376
2321
|
let!(:deleted) do
|
|
@@ -2395,14 +2340,18 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2395
2340
|
it "removes the ids from the foreign key" do
|
|
2396
2341
|
expect(person.preference_ids).to eq([ preference_two.id ])
|
|
2397
2342
|
end
|
|
2343
|
+
|
|
2344
|
+
it "sets the association locally" do
|
|
2345
|
+
expect(person.preferences).to eq([preference_two])
|
|
2346
|
+
end
|
|
2398
2347
|
end
|
|
2399
2348
|
|
|
2400
2349
|
context "when conditions are not provided" do
|
|
2401
2350
|
|
|
2402
2351
|
let(:person) do
|
|
2403
|
-
Person.create
|
|
2404
|
-
person.preferences.create(name: "Testing")
|
|
2405
|
-
person.preferences.create(name: "Test")
|
|
2352
|
+
Person.create!.tap do |person|
|
|
2353
|
+
person.preferences.create!(name: "Testing")
|
|
2354
|
+
person.preferences.create!(name: "Test")
|
|
2406
2355
|
end
|
|
2407
2356
|
end
|
|
2408
2357
|
|
|
@@ -2421,6 +2370,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2421
2370
|
it "returns the number of documents deleted" do
|
|
2422
2371
|
expect(deleted).to eq(2)
|
|
2423
2372
|
end
|
|
2373
|
+
|
|
2374
|
+
it "sets the association locally" do
|
|
2375
|
+
expect(person.preferences).to eq([])
|
|
2376
|
+
end
|
|
2424
2377
|
end
|
|
2425
2378
|
end
|
|
2426
2379
|
end
|
|
@@ -2436,13 +2389,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2436
2389
|
describe "#exists?" do
|
|
2437
2390
|
|
|
2438
2391
|
let!(:person) do
|
|
2439
|
-
Person.create
|
|
2392
|
+
Person.create!
|
|
2440
2393
|
end
|
|
2441
2394
|
|
|
2442
2395
|
context "when documents exist in the database" do
|
|
2443
2396
|
|
|
2444
2397
|
before do
|
|
2445
|
-
person.preferences.create
|
|
2398
|
+
person.preferences.create!
|
|
2446
2399
|
end
|
|
2447
2400
|
|
|
2448
2401
|
it "returns true" do
|
|
@@ -2467,23 +2420,23 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2467
2420
|
context "when the relation is not polymorphic" do
|
|
2468
2421
|
|
|
2469
2422
|
let(:person) do
|
|
2470
|
-
Person.create
|
|
2423
|
+
Person.create!
|
|
2471
2424
|
end
|
|
2472
2425
|
|
|
2473
2426
|
let!(:preference_one) do
|
|
2474
|
-
person.preferences.create(name: "Test")
|
|
2427
|
+
person.preferences.create!(name: "Test")
|
|
2475
2428
|
end
|
|
2476
2429
|
|
|
2477
2430
|
let!(:preference_two) do
|
|
2478
|
-
person.preferences.create(name: "OMG I has relations")
|
|
2431
|
+
person.preferences.create!(name: "OMG I has relations")
|
|
2479
2432
|
end
|
|
2480
2433
|
|
|
2481
2434
|
let!(:unrelated_pref) do
|
|
2482
|
-
Preference.create(name: "orphan annie")
|
|
2435
|
+
Preference.create!(name: "orphan annie")
|
|
2483
2436
|
end
|
|
2484
2437
|
|
|
2485
2438
|
let!(:unrelated_pref_two) do
|
|
2486
|
-
Preference.create(name: "orphan two")
|
|
2439
|
+
Preference.create!(name: "orphan two")
|
|
2487
2440
|
end
|
|
2488
2441
|
|
|
2489
2442
|
context "when providing an id" do
|
|
@@ -2508,39 +2461,29 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2508
2461
|
it "raises an error" do
|
|
2509
2462
|
expect {
|
|
2510
2463
|
preference
|
|
2511
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2464
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2512
2465
|
end
|
|
2513
2466
|
end
|
|
2514
2467
|
|
|
2515
2468
|
context "when the id does not match" do
|
|
2516
2469
|
|
|
2517
2470
|
context "when config set to raise error" do
|
|
2518
|
-
|
|
2519
|
-
before do
|
|
2520
|
-
Mongoid.raise_not_found_error = true
|
|
2521
|
-
end
|
|
2471
|
+
config_override :raise_not_found_error, true
|
|
2522
2472
|
|
|
2523
2473
|
it "raises an error" do
|
|
2524
2474
|
expect {
|
|
2525
2475
|
person.preferences.find(BSON::ObjectId.new)
|
|
2526
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2476
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2527
2477
|
end
|
|
2528
2478
|
end
|
|
2529
2479
|
|
|
2530
2480
|
context "when config set not to raise error" do
|
|
2481
|
+
config_override :raise_not_found_error, false
|
|
2531
2482
|
|
|
2532
2483
|
let(:preference) do
|
|
2533
2484
|
person.preferences.find(BSON::ObjectId.new)
|
|
2534
2485
|
end
|
|
2535
2486
|
|
|
2536
|
-
before do
|
|
2537
|
-
Mongoid.raise_not_found_error = false
|
|
2538
|
-
end
|
|
2539
|
-
|
|
2540
|
-
after do
|
|
2541
|
-
Mongoid.raise_not_found_error = true
|
|
2542
|
-
end
|
|
2543
|
-
|
|
2544
2487
|
it "returns nil" do
|
|
2545
2488
|
expect(preference).to be_nil
|
|
2546
2489
|
end
|
|
@@ -2561,7 +2504,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2561
2504
|
end
|
|
2562
2505
|
end
|
|
2563
2506
|
|
|
2564
|
-
context "when the ids
|
|
2507
|
+
context "when the ids match unreferenced documents" do
|
|
2565
2508
|
|
|
2566
2509
|
let(:preferences) do
|
|
2567
2510
|
person.preferences.find(
|
|
@@ -2572,39 +2515,29 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2572
2515
|
it "raises an error" do
|
|
2573
2516
|
expect {
|
|
2574
2517
|
preferences
|
|
2575
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2518
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2576
2519
|
end
|
|
2577
2520
|
end
|
|
2578
2521
|
|
|
2579
2522
|
context "when the ids do not match" do
|
|
2580
2523
|
|
|
2581
2524
|
context "when config set to raise error" do
|
|
2582
|
-
|
|
2583
|
-
before do
|
|
2584
|
-
Mongoid.raise_not_found_error = true
|
|
2585
|
-
end
|
|
2525
|
+
config_override :raise_not_found_error, true
|
|
2586
2526
|
|
|
2587
2527
|
it "raises an error" do
|
|
2588
2528
|
expect {
|
|
2589
2529
|
person.preferences.find([ BSON::ObjectId.new ])
|
|
2590
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2530
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2591
2531
|
end
|
|
2592
2532
|
end
|
|
2593
2533
|
|
|
2594
2534
|
context "when config set not to raise error" do
|
|
2535
|
+
config_override :raise_not_found_error, false
|
|
2595
2536
|
|
|
2596
2537
|
let(:preferences) do
|
|
2597
2538
|
person.preferences.find([ BSON::ObjectId.new ])
|
|
2598
2539
|
end
|
|
2599
2540
|
|
|
2600
|
-
before do
|
|
2601
|
-
Mongoid.raise_not_found_error = false
|
|
2602
|
-
end
|
|
2603
|
-
|
|
2604
|
-
after do
|
|
2605
|
-
Mongoid.raise_not_found_error = true
|
|
2606
|
-
end
|
|
2607
|
-
|
|
2608
2541
|
it "returns an empty array" do
|
|
2609
2542
|
expect(preferences).to be_empty
|
|
2610
2543
|
end
|
|
@@ -2619,11 +2552,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2619
2552
|
context "when the relation is not polymorphic" do
|
|
2620
2553
|
|
|
2621
2554
|
let(:person) do
|
|
2622
|
-
Person.create
|
|
2555
|
+
Person.create!
|
|
2623
2556
|
end
|
|
2624
2557
|
|
|
2625
2558
|
let!(:preference) do
|
|
2626
|
-
person.preferences.create(name: "Testing")
|
|
2559
|
+
person.preferences.create!(name: "Testing")
|
|
2627
2560
|
end
|
|
2628
2561
|
|
|
2629
2562
|
context "when the document exists" do
|
|
@@ -2659,11 +2592,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2659
2592
|
context "when the relation is not polymorphic" do
|
|
2660
2593
|
|
|
2661
2594
|
let(:person) do
|
|
2662
|
-
Person.create
|
|
2595
|
+
Person.create!
|
|
2663
2596
|
end
|
|
2664
2597
|
|
|
2665
2598
|
let!(:preference) do
|
|
2666
|
-
person.preferences.create(name: "Testing")
|
|
2599
|
+
person.preferences.create!(name: "Testing")
|
|
2667
2600
|
end
|
|
2668
2601
|
|
|
2669
2602
|
context "when the document exists" do
|
|
@@ -2708,11 +2641,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2708
2641
|
context "when the relation is not polymorphic" do
|
|
2709
2642
|
|
|
2710
2643
|
let(:person) do
|
|
2711
|
-
Person.create
|
|
2644
|
+
Person.create!
|
|
2712
2645
|
end
|
|
2713
2646
|
|
|
2714
2647
|
let!(:preference) do
|
|
2715
|
-
person.preferences.create(name: "Testing")
|
|
2648
|
+
person.preferences.create!(name: "Testing")
|
|
2716
2649
|
end
|
|
2717
2650
|
|
|
2718
2651
|
context "when the document exists" do
|
|
@@ -2746,15 +2679,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2746
2679
|
describe "#max" do
|
|
2747
2680
|
|
|
2748
2681
|
let(:person) do
|
|
2749
|
-
Person.create
|
|
2682
|
+
Person.create!
|
|
2750
2683
|
end
|
|
2751
2684
|
|
|
2752
2685
|
let(:preference_one) do
|
|
2753
|
-
Preference.create(ranking: 5)
|
|
2686
|
+
Preference.create!(ranking: 5)
|
|
2754
2687
|
end
|
|
2755
2688
|
|
|
2756
2689
|
let(:preference_two) do
|
|
2757
|
-
Preference.create(ranking: 10)
|
|
2690
|
+
Preference.create!(ranking: 10)
|
|
2758
2691
|
end
|
|
2759
2692
|
|
|
2760
2693
|
before do
|
|
@@ -2775,15 +2708,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2775
2708
|
describe "#max_by" do
|
|
2776
2709
|
|
|
2777
2710
|
let(:person) do
|
|
2778
|
-
Person.create
|
|
2711
|
+
Person.create!
|
|
2779
2712
|
end
|
|
2780
2713
|
|
|
2781
2714
|
let(:preference_one) do
|
|
2782
|
-
Preference.create(ranking: 5)
|
|
2715
|
+
Preference.create!(ranking: 5)
|
|
2783
2716
|
end
|
|
2784
2717
|
|
|
2785
2718
|
let(:preference_two) do
|
|
2786
|
-
Preference.create(ranking: 10)
|
|
2719
|
+
Preference.create!(ranking: 10)
|
|
2787
2720
|
end
|
|
2788
2721
|
|
|
2789
2722
|
before do
|
|
@@ -2802,19 +2735,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2802
2735
|
describe "#method_missing" do
|
|
2803
2736
|
|
|
2804
2737
|
let!(:person) do
|
|
2805
|
-
Person.create
|
|
2738
|
+
Person.create!
|
|
2806
2739
|
end
|
|
2807
2740
|
|
|
2808
2741
|
let!(:preference_one) do
|
|
2809
|
-
person.preferences.create(name: "First", value: "Posting")
|
|
2742
|
+
person.preferences.create!(name: "First", value: "Posting")
|
|
2810
2743
|
end
|
|
2811
2744
|
|
|
2812
2745
|
let!(:preference_two) do
|
|
2813
|
-
person.preferences.create(name: "Second", value: "Testing")
|
|
2746
|
+
person.preferences.create!(name: "Second", value: "Testing")
|
|
2814
2747
|
end
|
|
2815
2748
|
|
|
2816
2749
|
let!(:unrelated) do
|
|
2817
|
-
Preference.create(name: "Third")
|
|
2750
|
+
Preference.create!(name: "Third")
|
|
2818
2751
|
end
|
|
2819
2752
|
|
|
2820
2753
|
context "when providing a single criteria" do
|
|
@@ -2828,7 +2761,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2828
2761
|
end
|
|
2829
2762
|
|
|
2830
2763
|
context 'when providing a collation' do
|
|
2831
|
-
min_server_version '3.4'
|
|
2832
2764
|
|
|
2833
2765
|
let(:preferences) do
|
|
2834
2766
|
person.preferences.where(name: "FIRST").collation(locale: 'en_US', strength: 2).to_a
|
|
@@ -2889,7 +2821,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2889
2821
|
context "when the inverse relation is not defined" do
|
|
2890
2822
|
|
|
2891
2823
|
let!(:house) do
|
|
2892
|
-
person.houses.create(name: "Wayne Manor")
|
|
2824
|
+
person.houses.create!(name: "Wayne Manor")
|
|
2893
2825
|
end
|
|
2894
2826
|
|
|
2895
2827
|
it "returns the distinct values for the fields" do
|
|
@@ -2903,15 +2835,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2903
2835
|
describe "#min" do
|
|
2904
2836
|
|
|
2905
2837
|
let(:person) do
|
|
2906
|
-
Person.create
|
|
2838
|
+
Person.create!
|
|
2907
2839
|
end
|
|
2908
2840
|
|
|
2909
2841
|
let(:preference_one) do
|
|
2910
|
-
Preference.create(ranking: 5)
|
|
2842
|
+
Preference.create!(ranking: 5)
|
|
2911
2843
|
end
|
|
2912
2844
|
|
|
2913
2845
|
let(:preference_two) do
|
|
2914
|
-
Preference.create(ranking: 10)
|
|
2846
|
+
Preference.create!(ranking: 10)
|
|
2915
2847
|
end
|
|
2916
2848
|
|
|
2917
2849
|
before do
|
|
@@ -2932,15 +2864,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2932
2864
|
describe "#min_by" do
|
|
2933
2865
|
|
|
2934
2866
|
let(:person) do
|
|
2935
|
-
Person.create
|
|
2867
|
+
Person.create!
|
|
2936
2868
|
end
|
|
2937
2869
|
|
|
2938
2870
|
let(:preference_one) do
|
|
2939
|
-
Preference.create(ranking: 5)
|
|
2871
|
+
Preference.create!(ranking: 5)
|
|
2940
2872
|
end
|
|
2941
2873
|
|
|
2942
2874
|
let(:preference_two) do
|
|
2943
|
-
Preference.create(ranking: 10)
|
|
2875
|
+
Preference.create!(ranking: 10)
|
|
2944
2876
|
end
|
|
2945
2877
|
|
|
2946
2878
|
before do
|
|
@@ -2966,15 +2898,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2966
2898
|
describe "#nullify_all" do
|
|
2967
2899
|
|
|
2968
2900
|
let(:person) do
|
|
2969
|
-
Person.create
|
|
2901
|
+
Person.create!
|
|
2970
2902
|
end
|
|
2971
2903
|
|
|
2972
2904
|
let!(:preference_one) do
|
|
2973
|
-
person.preferences.create(name: "One")
|
|
2905
|
+
person.preferences.create!(name: "One")
|
|
2974
2906
|
end
|
|
2975
2907
|
|
|
2976
2908
|
let!(:preference_two) do
|
|
2977
|
-
person.preferences.create(name: "Two")
|
|
2909
|
+
person.preferences.create!(name: "Two")
|
|
2978
2910
|
end
|
|
2979
2911
|
|
|
2980
2912
|
before do
|
|
@@ -3095,13 +3027,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3095
3027
|
describe "##{method}" do
|
|
3096
3028
|
|
|
3097
3029
|
let(:person) do
|
|
3098
|
-
Person.create
|
|
3030
|
+
Person.create!
|
|
3099
3031
|
end
|
|
3100
3032
|
|
|
3101
3033
|
context "when documents have been persisted" do
|
|
3102
3034
|
|
|
3103
3035
|
let!(:preference) do
|
|
3104
|
-
person.preferences.create(name: "Testing")
|
|
3036
|
+
person.preferences.create!(name: "Testing")
|
|
3105
3037
|
end
|
|
3106
3038
|
|
|
3107
3039
|
it "returns the number of documents" do
|
|
@@ -3113,7 +3045,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3113
3045
|
|
|
3114
3046
|
before do
|
|
3115
3047
|
person.preferences.build(name: "Test")
|
|
3116
|
-
person.preferences.create(name: "Test 2")
|
|
3048
|
+
person.preferences.create!(name: "Test 2")
|
|
3117
3049
|
end
|
|
3118
3050
|
|
|
3119
3051
|
it "returns the total number of documents" do
|
|
@@ -3128,15 +3060,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3128
3060
|
context "when the relation has no default scope" do
|
|
3129
3061
|
|
|
3130
3062
|
let!(:person) do
|
|
3131
|
-
Person.create
|
|
3063
|
+
Person.create!
|
|
3132
3064
|
end
|
|
3133
3065
|
|
|
3134
3066
|
let!(:preference_one) do
|
|
3135
|
-
person.preferences.create(name: "first")
|
|
3067
|
+
person.preferences.create!(name: "first")
|
|
3136
3068
|
end
|
|
3137
3069
|
|
|
3138
3070
|
let!(:preference_two) do
|
|
3139
|
-
Preference.create(name: "second")
|
|
3071
|
+
Preference.create!(name: "second")
|
|
3140
3072
|
end
|
|
3141
3073
|
|
|
3142
3074
|
let(:unscoped) do
|
|
@@ -3151,15 +3083,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3151
3083
|
context "when the relation has a default scope" do
|
|
3152
3084
|
|
|
3153
3085
|
let!(:person) do
|
|
3154
|
-
Person.create
|
|
3086
|
+
Person.create!
|
|
3155
3087
|
end
|
|
3156
3088
|
|
|
3157
3089
|
let!(:house_one) do
|
|
3158
|
-
person.houses.create(name: "first")
|
|
3090
|
+
person.houses.create!(name: "first")
|
|
3159
3091
|
end
|
|
3160
3092
|
|
|
3161
3093
|
let!(:house_two) do
|
|
3162
|
-
House.create(name: "second")
|
|
3094
|
+
House.create!(name: "second")
|
|
3163
3095
|
end
|
|
3164
3096
|
|
|
3165
3097
|
let(:unscoped) do
|
|
@@ -3195,10 +3127,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3195
3127
|
end
|
|
3196
3128
|
|
|
3197
3129
|
before do
|
|
3198
|
-
person.update_attributes(
|
|
3130
|
+
person.update_attributes!(
|
|
3199
3131
|
houses: [ wife_house, exwife_house, girlfriend_house ]
|
|
3200
3132
|
)
|
|
3201
|
-
person.update_attributes(house_ids: [ girlfriend_house.id ])
|
|
3133
|
+
person.update_attributes!(house_ids: [ girlfriend_house.id ])
|
|
3202
3134
|
end
|
|
3203
3135
|
|
|
3204
3136
|
context "when reloading" do
|
|
@@ -3245,7 +3177,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3245
3177
|
end
|
|
3246
3178
|
|
|
3247
3179
|
let!(:business) do
|
|
3248
|
-
Business.create(name: "serious", owners: [ user ])
|
|
3180
|
+
Business.create!(name: "serious", owners: [ user ])
|
|
3249
3181
|
end
|
|
3250
3182
|
|
|
3251
3183
|
before do
|
|
@@ -3288,11 +3220,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3288
3220
|
context "when the documents are persisted" do
|
|
3289
3221
|
|
|
3290
3222
|
let(:user) do
|
|
3291
|
-
User.create(name: "tst")
|
|
3223
|
+
User.create!(name: "tst")
|
|
3292
3224
|
end
|
|
3293
3225
|
|
|
3294
3226
|
let(:business) do
|
|
3295
|
-
Business.create(name: "srs", owners: [ user ])
|
|
3227
|
+
Business.create!(name: "srs", owners: [ user ])
|
|
3296
3228
|
end
|
|
3297
3229
|
|
|
3298
3230
|
before do
|
|
@@ -3336,11 +3268,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3336
3268
|
context "when binding the relation multiple times" do
|
|
3337
3269
|
|
|
3338
3270
|
let(:person) do
|
|
3339
|
-
Person.create
|
|
3271
|
+
Person.create!
|
|
3340
3272
|
end
|
|
3341
3273
|
|
|
3342
3274
|
let(:preference) do
|
|
3343
|
-
person.preferences.create(name: "testing")
|
|
3275
|
+
person.preferences.create!(name: "testing")
|
|
3344
3276
|
end
|
|
3345
3277
|
|
|
3346
3278
|
before do
|
|
@@ -3359,19 +3291,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3359
3291
|
context "when the association has order criteria" do
|
|
3360
3292
|
|
|
3361
3293
|
let(:person) do
|
|
3362
|
-
Person.create
|
|
3294
|
+
Person.create!
|
|
3363
3295
|
end
|
|
3364
3296
|
|
|
3365
3297
|
let(:preference_one) do
|
|
3366
|
-
OrderedPreference.create(name: 'preference-1', value: 10)
|
|
3298
|
+
OrderedPreference.create!(name: 'preference-1', value: 10)
|
|
3367
3299
|
end
|
|
3368
3300
|
|
|
3369
3301
|
let(:preference_two) do
|
|
3370
|
-
OrderedPreference.create(name: 'preference-2', value: 20)
|
|
3302
|
+
OrderedPreference.create!(name: 'preference-2', value: 20)
|
|
3371
3303
|
end
|
|
3372
3304
|
|
|
3373
3305
|
let(:preference_three) do
|
|
3374
|
-
OrderedPreference.create(name: 'preference-3', value: 20)
|
|
3306
|
+
OrderedPreference.create!(name: 'preference-3', value: 20)
|
|
3375
3307
|
end
|
|
3376
3308
|
|
|
3377
3309
|
before do
|
|
@@ -3395,7 +3327,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3395
3327
|
context "when the parent is not a new record and freshly loaded" do
|
|
3396
3328
|
|
|
3397
3329
|
let(:person) do
|
|
3398
|
-
Person.create
|
|
3330
|
+
Person.create!
|
|
3399
3331
|
end
|
|
3400
3332
|
|
|
3401
3333
|
let(:preference) do
|
|
@@ -3404,7 +3336,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3404
3336
|
|
|
3405
3337
|
before do
|
|
3406
3338
|
person.preferences = [ preference ]
|
|
3407
|
-
person.save
|
|
3339
|
+
person.save!
|
|
3408
3340
|
person.reload
|
|
3409
3341
|
person.preferences = nil
|
|
3410
3342
|
end
|
|
@@ -3427,15 +3359,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3427
3359
|
context "when reloading the relation" do
|
|
3428
3360
|
|
|
3429
3361
|
let!(:person) do
|
|
3430
|
-
Person.create
|
|
3362
|
+
Person.create!
|
|
3431
3363
|
end
|
|
3432
3364
|
|
|
3433
3365
|
let!(:preference_one) do
|
|
3434
|
-
Preference.create(name: "one")
|
|
3366
|
+
Preference.create!(name: "one")
|
|
3435
3367
|
end
|
|
3436
3368
|
|
|
3437
3369
|
let!(:preference_two) do
|
|
3438
|
-
Preference.create(name: "two")
|
|
3370
|
+
Preference.create!(name: "two")
|
|
3439
3371
|
end
|
|
3440
3372
|
|
|
3441
3373
|
before do
|
|
@@ -3479,7 +3411,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3479
3411
|
context "when the document is new" do
|
|
3480
3412
|
|
|
3481
3413
|
let!(:person) do
|
|
3482
|
-
Person.create(preference_names: "one, two")
|
|
3414
|
+
Person.create!(preference_names: "one, two")
|
|
3483
3415
|
end
|
|
3484
3416
|
|
|
3485
3417
|
let(:preference_one) do
|
|
@@ -3515,23 +3447,23 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3515
3447
|
end
|
|
3516
3448
|
|
|
3517
3449
|
let(:preference_one) do
|
|
3518
|
-
Preference.create(name: "one")
|
|
3450
|
+
Preference.create!(name: "one")
|
|
3519
3451
|
end
|
|
3520
3452
|
|
|
3521
3453
|
let(:preference_two) do
|
|
3522
|
-
Preference.create(name: "two")
|
|
3454
|
+
Preference.create!(name: "two")
|
|
3523
3455
|
end
|
|
3524
3456
|
|
|
3525
3457
|
before do
|
|
3526
3458
|
person.preference_ids = [ preference_one.id, preference_two.id ]
|
|
3527
|
-
person.save
|
|
3459
|
+
person.save!
|
|
3528
3460
|
end
|
|
3529
3461
|
|
|
3530
3462
|
context "and the order is changed" do
|
|
3531
3463
|
|
|
3532
3464
|
before do
|
|
3533
3465
|
person.preference_ids = [ preference_two.id, preference_one.id ]
|
|
3534
|
-
person.save
|
|
3466
|
+
person.save!
|
|
3535
3467
|
end
|
|
3536
3468
|
|
|
3537
3469
|
let(:reloaded) do
|
|
@@ -3548,13 +3480,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3548
3480
|
context "and the order is changed and an element is added" do
|
|
3549
3481
|
|
|
3550
3482
|
let(:preference_three) do
|
|
3551
|
-
Preference.create(name: "three")
|
|
3483
|
+
Preference.create!(name: "three")
|
|
3552
3484
|
end
|
|
3553
3485
|
|
|
3554
3486
|
before do
|
|
3555
3487
|
person.preference_ids =
|
|
3556
3488
|
[ preference_two.id, preference_one.id, preference_three.id ]
|
|
3557
|
-
person.save
|
|
3489
|
+
person.save!
|
|
3558
3490
|
end
|
|
3559
3491
|
|
|
3560
3492
|
let(:reloaded) do
|
|
@@ -3571,16 +3503,16 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3571
3503
|
context "and the order is changed and an element is removed" do
|
|
3572
3504
|
|
|
3573
3505
|
let(:preference_three) do
|
|
3574
|
-
Preference.create(name: "three")
|
|
3506
|
+
Preference.create!(name: "three")
|
|
3575
3507
|
end
|
|
3576
3508
|
|
|
3577
3509
|
before do
|
|
3578
3510
|
person.preference_ids =
|
|
3579
3511
|
[ preference_one.id, preference_two.id, preference_three.id ]
|
|
3580
|
-
person.save
|
|
3512
|
+
person.save!
|
|
3581
3513
|
person.preference_ids =
|
|
3582
3514
|
[ preference_three.id, preference_two.id ]
|
|
3583
|
-
person.save
|
|
3515
|
+
person.save!
|
|
3584
3516
|
end
|
|
3585
3517
|
|
|
3586
3518
|
let(:reloaded) do
|
|
@@ -3630,15 +3562,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3630
3562
|
context "when the relation exists" do
|
|
3631
3563
|
|
|
3632
3564
|
let!(:person) do
|
|
3633
|
-
Person.create
|
|
3565
|
+
Person.create!
|
|
3634
3566
|
end
|
|
3635
3567
|
|
|
3636
3568
|
let!(:pref_one) do
|
|
3637
|
-
person.preferences.create
|
|
3569
|
+
person.preferences.create!
|
|
3638
3570
|
end
|
|
3639
3571
|
|
|
3640
3572
|
let!(:pref_two) do
|
|
3641
|
-
Preference.create
|
|
3573
|
+
Preference.create!
|
|
3642
3574
|
end
|
|
3643
3575
|
|
|
3644
3576
|
before do
|
|
@@ -3654,15 +3586,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3654
3586
|
context "when using a different primary key" do
|
|
3655
3587
|
|
|
3656
3588
|
let(:dog) do
|
|
3657
|
-
Dog.create(name: 'Doggie')
|
|
3589
|
+
Dog.create!(name: 'Doggie')
|
|
3658
3590
|
end
|
|
3659
3591
|
|
|
3660
3592
|
let(:cat) do
|
|
3661
|
-
Cat.create(name: 'Kitty')
|
|
3593
|
+
Cat.create!(name: 'Kitty')
|
|
3594
|
+
end
|
|
3595
|
+
|
|
3596
|
+
let(:another_cat) do
|
|
3597
|
+
Cat.create!(name: 'Kitten')
|
|
3662
3598
|
end
|
|
3663
3599
|
|
|
3664
3600
|
let(:fire_hydrant) do
|
|
3665
|
-
FireHydrant.create(location: '221B Baker Street')
|
|
3601
|
+
FireHydrant.create!(location: '221B Baker Street')
|
|
3666
3602
|
end
|
|
3667
3603
|
|
|
3668
3604
|
context "when adding to a one-way many to many" do
|
|
@@ -3676,6 +3612,28 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3676
3612
|
end
|
|
3677
3613
|
end
|
|
3678
3614
|
|
|
3615
|
+
context "when adding multiple documents to a one-way many to many" do
|
|
3616
|
+
|
|
3617
|
+
before do
|
|
3618
|
+
fire_hydrant.cats.push([cat, another_cat])
|
|
3619
|
+
end
|
|
3620
|
+
|
|
3621
|
+
it "adds the pk values to the fk set" do
|
|
3622
|
+
expect(fire_hydrant.cat_ids).to eq([cat.name, another_cat.name])
|
|
3623
|
+
end
|
|
3624
|
+
end
|
|
3625
|
+
|
|
3626
|
+
context "when adding a new document to a one-way many to many" do
|
|
3627
|
+
|
|
3628
|
+
before do
|
|
3629
|
+
fire_hydrant.cats.build name: 'Kitten'
|
|
3630
|
+
end
|
|
3631
|
+
|
|
3632
|
+
it "adds the pk values to the fk set" do
|
|
3633
|
+
expect(fire_hydrant.cat_ids).to eq(['Kitten'])
|
|
3634
|
+
end
|
|
3635
|
+
end
|
|
3636
|
+
|
|
3679
3637
|
context "when adding to a two-way many to many" do
|
|
3680
3638
|
|
|
3681
3639
|
before do
|
|
@@ -3732,10 +3690,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3732
3690
|
end
|
|
3733
3691
|
|
|
3734
3692
|
it "should assign relation from both sides" do
|
|
3735
|
-
p1 = Project.create name: 'Foo'
|
|
3736
|
-
p2 = Project.create name: 'Bar'
|
|
3737
|
-
d1 = Distributor.create name: 'Rock'
|
|
3738
|
-
d2 = Distributor.create name: 'Soul'
|
|
3693
|
+
p1 = Project.create! name: 'Foo'
|
|
3694
|
+
p2 = Project.create! name: 'Bar'
|
|
3695
|
+
d1 = Distributor.create! name: 'Rock'
|
|
3696
|
+
d2 = Distributor.create! name: 'Soul'
|
|
3739
3697
|
|
|
3740
3698
|
p1.distributors << d1
|
|
3741
3699
|
expect(p1.d_ids).to match_array([d1.id])
|
|
@@ -3745,4 +3703,56 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3745
3703
|
expect(p2.d_ids).to match_array([d2.id])
|
|
3746
3704
|
end
|
|
3747
3705
|
end
|
|
3706
|
+
|
|
3707
|
+
context "when accesing own _id from parent's foreign key in default" do
|
|
3708
|
+
let!(:contract) { HabtmmContract.create! }
|
|
3709
|
+
let!(:signature) { contract.signatures.create! }
|
|
3710
|
+
|
|
3711
|
+
it "is nil" do
|
|
3712
|
+
expect(signature.favorite_signature).to be nil
|
|
3713
|
+
end
|
|
3714
|
+
end
|
|
3715
|
+
|
|
3716
|
+
context "when setting an association on a model that uses the class_name option" do
|
|
3717
|
+
let!(:contract) { HabtmmContract.create! }
|
|
3718
|
+
let!(:signature) { HabtmmSignature.create!(contracts: [contract]) }
|
|
3719
|
+
|
|
3720
|
+
it "populates the inverse foreign key" do
|
|
3721
|
+
expect(signature.contracts.first.signature_ids).to eq([signature.id])
|
|
3722
|
+
end
|
|
3723
|
+
end
|
|
3724
|
+
|
|
3725
|
+
context "when there is a foreign key in the aliased associations" do
|
|
3726
|
+
it "has the correct aliases" do
|
|
3727
|
+
expect(Dog.aliased_associations["breed_ids"]).to eq("breeds")
|
|
3728
|
+
expect(Breed.aliased_associations["dog_ids"]).to eq("dogs")
|
|
3729
|
+
end
|
|
3730
|
+
end
|
|
3731
|
+
|
|
3732
|
+
# This test is for MONGOID-5344 which tests that the initial call to
|
|
3733
|
+
# signature_ids refers to the same array as subsequent calls to signature_ids.
|
|
3734
|
+
# Prior to the change in that ticket, this test broke because the array
|
|
3735
|
+
# returned from write_attribute (which is triggered the first time the
|
|
3736
|
+
# foreign key array is referenced, to set the default), refers to a different
|
|
3737
|
+
# array to the one stored in the attributes hash. This happened because,
|
|
3738
|
+
# when retrieving a document from the database, the attributes hash is actually
|
|
3739
|
+
# a BSON::Document, which applies a transformation to the array before
|
|
3740
|
+
# storing it.
|
|
3741
|
+
context "when executing concat on foreign key array from the db" do
|
|
3742
|
+
before do
|
|
3743
|
+
HabtmmContract.create!
|
|
3744
|
+
HabtmmSignature.create!
|
|
3745
|
+
end
|
|
3746
|
+
|
|
3747
|
+
let!(:contract) { HabtmmContract.first }
|
|
3748
|
+
let!(:signature) { HabtmmSignature.first }
|
|
3749
|
+
|
|
3750
|
+
before do
|
|
3751
|
+
contract.signature_ids.concat([signature.id])
|
|
3752
|
+
end
|
|
3753
|
+
|
|
3754
|
+
it "works on the first attempt" do
|
|
3755
|
+
expect(contract.signature_ids).to eq([signature.id])
|
|
3756
|
+
end
|
|
3757
|
+
end
|
|
3748
3758
|
end
|