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,7 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
require "spec_helper"
|
|
5
|
+
require_relative '../association/referenced/has_many_models'
|
|
6
|
+
require_relative '../association/referenced/has_and_belongs_to_many_models'
|
|
7
|
+
require_relative './nested_spec_models'
|
|
5
8
|
|
|
6
9
|
describe Mongoid::Attributes::Nested do
|
|
7
10
|
|
|
@@ -192,7 +195,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
192
195
|
end
|
|
193
196
|
|
|
194
197
|
context "when adding existing document to a relation" do
|
|
195
|
-
let(:preference) { Preference.create(name: 'sample preference') }
|
|
198
|
+
let(:preference) { Preference.create!(name: 'sample preference') }
|
|
196
199
|
let(:person) do
|
|
197
200
|
Person.new(
|
|
198
201
|
preferences_attributes: { 0 => { id: preference.id, name: preference.name } }
|
|
@@ -243,7 +246,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
243
246
|
context "when the parent document is persisted" do
|
|
244
247
|
|
|
245
248
|
let(:person) do
|
|
246
|
-
Person.create
|
|
249
|
+
Person.create!
|
|
247
250
|
end
|
|
248
251
|
|
|
249
252
|
before do
|
|
@@ -273,7 +276,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
273
276
|
context "when saving the parent" do
|
|
274
277
|
|
|
275
278
|
before do
|
|
276
|
-
person.save
|
|
279
|
+
person.save!
|
|
277
280
|
person.reload
|
|
278
281
|
end
|
|
279
282
|
|
|
@@ -375,7 +378,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
375
378
|
context "when all attributes are empty" do
|
|
376
379
|
|
|
377
380
|
let(:product) do
|
|
378
|
-
Product.create(name: "testing")
|
|
381
|
+
Product.create!(name: "testing")
|
|
379
382
|
end
|
|
380
383
|
|
|
381
384
|
it "does not add the document" do
|
|
@@ -608,7 +611,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
608
611
|
end
|
|
609
612
|
|
|
610
613
|
let(:owner) do
|
|
611
|
-
PetOwner.create
|
|
614
|
+
PetOwner.create!
|
|
612
615
|
end
|
|
613
616
|
|
|
614
617
|
let!(:pet) do
|
|
@@ -617,7 +620,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
617
620
|
|
|
618
621
|
before do
|
|
619
622
|
owner.pet_attributes = { id: pet.id, _destroy: truth }
|
|
620
|
-
owner.save
|
|
623
|
+
owner.save!
|
|
621
624
|
end
|
|
622
625
|
|
|
623
626
|
it "destroys the existing document" do
|
|
@@ -1035,7 +1038,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1035
1038
|
context "when the parent document is persisted" do
|
|
1036
1039
|
|
|
1037
1040
|
let(:person) do
|
|
1038
|
-
Person.create
|
|
1041
|
+
Person.create!
|
|
1039
1042
|
end
|
|
1040
1043
|
|
|
1041
1044
|
before do
|
|
@@ -1069,7 +1072,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1069
1072
|
context "when saving the parent" do
|
|
1070
1073
|
|
|
1071
1074
|
before do
|
|
1072
|
-
person.save
|
|
1075
|
+
person.save!
|
|
1073
1076
|
person.reload
|
|
1074
1077
|
end
|
|
1075
1078
|
|
|
@@ -1185,7 +1188,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1185
1188
|
context "when the parent is saved" do
|
|
1186
1189
|
|
|
1187
1190
|
before do
|
|
1188
|
-
band.save
|
|
1191
|
+
band.save!
|
|
1189
1192
|
end
|
|
1190
1193
|
|
|
1191
1194
|
it "runs the first child create callbacks" do
|
|
@@ -1354,7 +1357,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1354
1357
|
expect {
|
|
1355
1358
|
person.addresses_attributes =
|
|
1356
1359
|
{ "foo" => { "id" => "test", "street" => "Test" } }
|
|
1357
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
1360
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
1358
1361
|
end
|
|
1359
1362
|
end
|
|
1360
1363
|
end
|
|
@@ -1377,7 +1380,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1377
1380
|
end
|
|
1378
1381
|
|
|
1379
1382
|
let!(:record) do
|
|
1380
|
-
band.records.create
|
|
1383
|
+
band.records.create!
|
|
1381
1384
|
end
|
|
1382
1385
|
|
|
1383
1386
|
let(:attributes) do
|
|
@@ -1415,17 +1418,17 @@ describe Mongoid::Attributes::Nested do
|
|
|
1415
1418
|
end
|
|
1416
1419
|
|
|
1417
1420
|
let!(:band) do
|
|
1418
|
-
Band.create
|
|
1421
|
+
Band.create!
|
|
1419
1422
|
end
|
|
1420
1423
|
|
|
1421
1424
|
let!(:record) do
|
|
1422
|
-
band.records.create
|
|
1425
|
+
band.records.create!
|
|
1423
1426
|
end
|
|
1424
1427
|
|
|
1425
1428
|
before do
|
|
1426
1429
|
band.records_attributes =
|
|
1427
1430
|
{ "foo" => { "id" => record.id, "_destroy" => true }}
|
|
1428
|
-
band.save
|
|
1431
|
+
band.save!
|
|
1429
1432
|
end
|
|
1430
1433
|
|
|
1431
1434
|
it "deletes the child document" do
|
|
@@ -1450,7 +1453,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1450
1453
|
context "when the parent is persisted" do
|
|
1451
1454
|
|
|
1452
1455
|
let!(:persisted) do
|
|
1453
|
-
Person.create(age: 42)
|
|
1456
|
+
Person.create!(age: 42)
|
|
1454
1457
|
end
|
|
1455
1458
|
|
|
1456
1459
|
context "when the child halts the callback chain in a before callback" do
|
|
@@ -1458,11 +1461,11 @@ describe Mongoid::Attributes::Nested do
|
|
|
1458
1461
|
context "when the child is not paranoid" do
|
|
1459
1462
|
|
|
1460
1463
|
let(:actor) do
|
|
1461
|
-
Actor.create
|
|
1464
|
+
Actor.create!
|
|
1462
1465
|
end
|
|
1463
1466
|
|
|
1464
1467
|
let!(:thing) do
|
|
1465
|
-
actor.things.create
|
|
1468
|
+
actor.things.create!
|
|
1466
1469
|
end
|
|
1467
1470
|
|
|
1468
1471
|
before do
|
|
@@ -1480,11 +1483,11 @@ describe Mongoid::Attributes::Nested do
|
|
|
1480
1483
|
context "when only 1 child has the default persisted" do
|
|
1481
1484
|
|
|
1482
1485
|
let!(:app_one) do
|
|
1483
|
-
persisted.appointments.create
|
|
1486
|
+
persisted.appointments.create!
|
|
1484
1487
|
end
|
|
1485
1488
|
|
|
1486
1489
|
let!(:app_two) do
|
|
1487
|
-
persisted.appointments.create
|
|
1490
|
+
persisted.appointments.create!.tap do |app|
|
|
1488
1491
|
app.unset(:timed)
|
|
1489
1492
|
end
|
|
1490
1493
|
end
|
|
@@ -1501,7 +1504,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1501
1504
|
"bar" => { "id" => app_one.id, "_destroy" => true },
|
|
1502
1505
|
"foo" => { "id" => app_two.id, "_destroy" => true }
|
|
1503
1506
|
}
|
|
1504
|
-
from_db.save
|
|
1507
|
+
from_db.save!
|
|
1505
1508
|
end
|
|
1506
1509
|
|
|
1507
1510
|
it "destroys both children" do
|
|
@@ -1576,7 +1579,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1576
1579
|
context "when the parent is persisted" do
|
|
1577
1580
|
|
|
1578
1581
|
let!(:persisted) do
|
|
1579
|
-
Person.create do |p|
|
|
1582
|
+
Person.create! do |p|
|
|
1580
1583
|
p.addresses << [ address_one, address_two ]
|
|
1581
1584
|
end
|
|
1582
1585
|
end
|
|
@@ -1623,7 +1626,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1623
1626
|
context "when saving the parent" do
|
|
1624
1627
|
|
|
1625
1628
|
before do
|
|
1626
|
-
persisted.save
|
|
1629
|
+
persisted.save!
|
|
1627
1630
|
end
|
|
1628
1631
|
|
|
1629
1632
|
it "deletes the marked document from the relation" do
|
|
@@ -1679,7 +1682,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
1679
1682
|
context "when saving the parent" do
|
|
1680
1683
|
|
|
1681
1684
|
before do
|
|
1682
|
-
persisted.save
|
|
1685
|
+
persisted.save!
|
|
1683
1686
|
end
|
|
1684
1687
|
|
|
1685
1688
|
it "deletes the marked document from the relation" do
|
|
@@ -2391,8 +2394,8 @@ describe Mongoid::Attributes::Nested do
|
|
|
2391
2394
|
end
|
|
2392
2395
|
|
|
2393
2396
|
before do
|
|
2394
|
-
pizza.topping = Topping.create(name: "cheese")
|
|
2395
|
-
pizza.update_attributes(topping_attributes: { name: "onions" })
|
|
2397
|
+
pizza.topping = Topping.create!(name: "cheese")
|
|
2398
|
+
pizza.update_attributes!(topping_attributes: { name: "onions" })
|
|
2396
2399
|
end
|
|
2397
2400
|
|
|
2398
2401
|
it "persists the attribute changes" do
|
|
@@ -2967,7 +2970,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
2967
2970
|
context "when ids are passed" do
|
|
2968
2971
|
|
|
2969
2972
|
let(:person) do
|
|
2970
|
-
Person.create
|
|
2973
|
+
Person.create!
|
|
2971
2974
|
end
|
|
2972
2975
|
|
|
2973
2976
|
before do
|
|
@@ -3013,7 +3016,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3013
3016
|
{ "0" =>
|
|
3014
3017
|
{ "id" => BSON::ObjectId.new.to_s, "title" => "Rogue" }
|
|
3015
3018
|
}
|
|
3016
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
3019
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
|
3017
3020
|
end
|
|
3018
3021
|
end
|
|
3019
3022
|
end
|
|
@@ -3032,7 +3035,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3032
3035
|
"0" => { "id" => post_one.id, "title" => "testing again" },
|
|
3033
3036
|
"1" => { "id" => post_two.id, "title" => "$$$" }
|
|
3034
3037
|
}
|
|
3035
|
-
person.save
|
|
3038
|
+
person.save!
|
|
3036
3039
|
end
|
|
3037
3040
|
|
|
3038
3041
|
it "does not perist the invalid value" do
|
|
@@ -3047,7 +3050,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3047
3050
|
expect {
|
|
3048
3051
|
person.posts_attributes =
|
|
3049
3052
|
{ "foo" => { "id" => "test", "title" => "Test" } }
|
|
3050
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
3053
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Post with id\(s\)/)
|
|
3051
3054
|
end
|
|
3052
3055
|
end
|
|
3053
3056
|
end
|
|
@@ -3308,7 +3311,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3308
3311
|
context "when the parent is saved" do
|
|
3309
3312
|
|
|
3310
3313
|
before do
|
|
3311
|
-
person.save
|
|
3314
|
+
person.save!
|
|
3312
3315
|
person.posts_attributes =
|
|
3313
3316
|
[
|
|
3314
3317
|
{ "title" => "Third" },
|
|
@@ -3723,7 +3726,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3723
3726
|
context "when ids are passed" do
|
|
3724
3727
|
|
|
3725
3728
|
let(:person) do
|
|
3726
|
-
Person.create
|
|
3729
|
+
Person.create!
|
|
3727
3730
|
end
|
|
3728
3731
|
|
|
3729
3732
|
before do
|
|
@@ -3764,7 +3767,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
3764
3767
|
expect {
|
|
3765
3768
|
person.preferences_attributes =
|
|
3766
3769
|
{ "foo" => { "id" => "test", "name" => "Test" } }
|
|
3767
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
3770
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
3768
3771
|
end
|
|
3769
3772
|
end
|
|
3770
3773
|
end
|
|
@@ -4305,7 +4308,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4305
4308
|
end
|
|
4306
4309
|
end
|
|
4307
4310
|
|
|
4308
|
-
describe "#update_attributes" do
|
|
4311
|
+
describe "#update_attributes!" do
|
|
4309
4312
|
|
|
4310
4313
|
before do
|
|
4311
4314
|
Person.send(:undef_method, :addresses_attributes=)
|
|
@@ -4315,11 +4318,11 @@ describe Mongoid::Attributes::Nested do
|
|
|
4315
4318
|
context "when embedding one level behind a has many" do
|
|
4316
4319
|
|
|
4317
4320
|
let(:node) do
|
|
4318
|
-
Node.create
|
|
4321
|
+
Node.create!
|
|
4319
4322
|
end
|
|
4320
4323
|
|
|
4321
4324
|
let!(:server) do
|
|
4322
|
-
node.servers.create(name: "prod")
|
|
4325
|
+
node.servers.create!(name: "prod")
|
|
4323
4326
|
end
|
|
4324
4327
|
|
|
4325
4328
|
context "when adding a new embedded document" do
|
|
@@ -4338,7 +4341,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4338
4341
|
end
|
|
4339
4342
|
|
|
4340
4343
|
before do
|
|
4341
|
-
node.update_attributes(attributes)
|
|
4344
|
+
node.update_attributes!(attributes)
|
|
4342
4345
|
end
|
|
4343
4346
|
|
|
4344
4347
|
it "adds the new embedded document" do
|
|
@@ -4354,11 +4357,11 @@ describe Mongoid::Attributes::Nested do
|
|
|
4354
4357
|
context "when deleting the child document" do
|
|
4355
4358
|
|
|
4356
4359
|
let(:person) do
|
|
4357
|
-
Person.create
|
|
4360
|
+
Person.create!
|
|
4358
4361
|
end
|
|
4359
4362
|
|
|
4360
4363
|
let!(:service) do
|
|
4361
|
-
person.services.create(sid: "123")
|
|
4364
|
+
person.services.create!(sid: "123")
|
|
4362
4365
|
end
|
|
4363
4366
|
|
|
4364
4367
|
let(:attributes) do
|
|
@@ -4370,7 +4373,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4370
4373
|
end
|
|
4371
4374
|
|
|
4372
4375
|
before do
|
|
4373
|
-
person.update_attributes(attributes)
|
|
4376
|
+
person.update_attributes!(attributes)
|
|
4374
4377
|
end
|
|
4375
4378
|
|
|
4376
4379
|
it "removes the document from the parent" do
|
|
@@ -4396,27 +4399,20 @@ describe Mongoid::Attributes::Nested do
|
|
|
4396
4399
|
|
|
4397
4400
|
context "when nesting multiple levels and parent is timestamped" do
|
|
4398
4401
|
|
|
4399
|
-
around do |example|
|
|
4400
|
-
original_relations = Location.relations
|
|
4401
|
-
Location.embedded_in :address, touch: true
|
|
4402
|
-
example.run
|
|
4403
|
-
Location.relations = original_relations
|
|
4404
|
-
end
|
|
4405
|
-
|
|
4406
4402
|
after do
|
|
4407
4403
|
Address.reset_callbacks(:save)
|
|
4408
4404
|
end
|
|
4409
4405
|
|
|
4410
4406
|
let(:dokument) do
|
|
4411
|
-
Dokument.create
|
|
4407
|
+
Dokument.create!
|
|
4412
4408
|
end
|
|
4413
4409
|
|
|
4414
4410
|
let!(:address) do
|
|
4415
|
-
dokument.addresses.create(street: "hobrecht")
|
|
4411
|
+
dokument.addresses.create!(street: "hobrecht")
|
|
4416
4412
|
end
|
|
4417
4413
|
|
|
4418
4414
|
let!(:location) do
|
|
4419
|
-
address.locations.create(name: "work")
|
|
4415
|
+
address.locations.create!(name: "work")
|
|
4420
4416
|
end
|
|
4421
4417
|
|
|
4422
4418
|
let(:attributes) do
|
|
@@ -4428,7 +4424,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4428
4424
|
end
|
|
4429
4425
|
|
|
4430
4426
|
before do
|
|
4431
|
-
address.update_attributes(attributes)
|
|
4427
|
+
address.update_attributes!(attributes)
|
|
4432
4428
|
address.reload
|
|
4433
4429
|
end
|
|
4434
4430
|
|
|
@@ -4440,21 +4436,21 @@ describe Mongoid::Attributes::Nested do
|
|
|
4440
4436
|
context "when nesting multiple levels" do
|
|
4441
4437
|
|
|
4442
4438
|
let!(:person) do
|
|
4443
|
-
Person.create
|
|
4439
|
+
Person.create!
|
|
4444
4440
|
end
|
|
4445
4441
|
|
|
4446
4442
|
context "when second level is a one to many" do
|
|
4447
4443
|
|
|
4448
4444
|
let(:person_one) do
|
|
4449
|
-
Person.create
|
|
4445
|
+
Person.create!
|
|
4450
4446
|
end
|
|
4451
4447
|
|
|
4452
4448
|
let!(:address_one) do
|
|
4453
|
-
person_one.addresses.create(street: "hobrecht")
|
|
4449
|
+
person_one.addresses.create!(street: "hobrecht")
|
|
4454
4450
|
end
|
|
4455
4451
|
|
|
4456
4452
|
let!(:location_one) do
|
|
4457
|
-
address_one.locations.create(name: "home")
|
|
4453
|
+
address_one.locations.create!(name: "home")
|
|
4458
4454
|
end
|
|
4459
4455
|
|
|
4460
4456
|
context "when destroying a second level document" do
|
|
@@ -4471,7 +4467,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4471
4467
|
end
|
|
4472
4468
|
|
|
4473
4469
|
before do
|
|
4474
|
-
person_one.update_attributes(attributes)
|
|
4470
|
+
person_one.update_attributes!(attributes)
|
|
4475
4471
|
end
|
|
4476
4472
|
|
|
4477
4473
|
it "deletes the document from the relation" do
|
|
@@ -4486,15 +4482,15 @@ describe Mongoid::Attributes::Nested do
|
|
|
4486
4482
|
context "when destroying a second level document with callbacks" do
|
|
4487
4483
|
|
|
4488
4484
|
let(:band) do
|
|
4489
|
-
Band.create(name: "Tool")
|
|
4485
|
+
Band.create!(name: "Tool")
|
|
4490
4486
|
end
|
|
4491
4487
|
|
|
4492
4488
|
let(:record) do
|
|
4493
|
-
band.records.create(name: "Undertow")
|
|
4489
|
+
band.records.create!(name: "Undertow")
|
|
4494
4490
|
end
|
|
4495
4491
|
|
|
4496
4492
|
let!(:track) do
|
|
4497
|
-
record.tracks.create(name: "Sober")
|
|
4493
|
+
record.tracks.create!(name: "Sober")
|
|
4498
4494
|
end
|
|
4499
4495
|
|
|
4500
4496
|
context "when cascading callbacks" do
|
|
@@ -4521,7 +4517,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4521
4517
|
end
|
|
4522
4518
|
|
|
4523
4519
|
before do
|
|
4524
|
-
band.update_attributes(attributes)
|
|
4520
|
+
band.update_attributes!(attributes)
|
|
4525
4521
|
end
|
|
4526
4522
|
|
|
4527
4523
|
it "removes the child from the relation" do
|
|
@@ -4554,7 +4550,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4554
4550
|
end
|
|
4555
4551
|
|
|
4556
4552
|
before do
|
|
4557
|
-
person.update_attributes(attributes)
|
|
4553
|
+
person.update_attributes!(attributes)
|
|
4558
4554
|
end
|
|
4559
4555
|
|
|
4560
4556
|
let(:address) do
|
|
@@ -4577,11 +4573,11 @@ describe Mongoid::Attributes::Nested do
|
|
|
4577
4573
|
context "when adding to an existing document in the first level" do
|
|
4578
4574
|
|
|
4579
4575
|
let!(:address) do
|
|
4580
|
-
person.addresses.create(street: "hobrecht")
|
|
4576
|
+
person.addresses.create!(street: "hobrecht")
|
|
4581
4577
|
end
|
|
4582
4578
|
|
|
4583
4579
|
let!(:location) do
|
|
4584
|
-
address.locations.create(name: "work")
|
|
4580
|
+
address.locations.create!(name: "work")
|
|
4585
4581
|
end
|
|
4586
4582
|
|
|
4587
4583
|
let(:attributes) do
|
|
@@ -4594,7 +4590,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4594
4590
|
end
|
|
4595
4591
|
|
|
4596
4592
|
before do
|
|
4597
|
-
person.update_attributes(attributes)
|
|
4593
|
+
person.update_attributes!(attributes)
|
|
4598
4594
|
person.reload
|
|
4599
4595
|
end
|
|
4600
4596
|
|
|
@@ -4625,7 +4621,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4625
4621
|
end
|
|
4626
4622
|
|
|
4627
4623
|
before do
|
|
4628
|
-
person.update_attributes(attributes)
|
|
4624
|
+
person.update_attributes!(attributes)
|
|
4629
4625
|
end
|
|
4630
4626
|
|
|
4631
4627
|
let(:address) do
|
|
@@ -4651,7 +4647,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4651
4647
|
context "when the nested document is not polymorphic" do
|
|
4652
4648
|
|
|
4653
4649
|
let!(:address) do
|
|
4654
|
-
person.addresses.create(street: "Alexanderstr", number: 1)
|
|
4650
|
+
person.addresses.create!(street: "Alexanderstr", number: 1)
|
|
4655
4651
|
end
|
|
4656
4652
|
|
|
4657
4653
|
let!(:code) do
|
|
@@ -4674,7 +4670,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4674
4670
|
end
|
|
4675
4671
|
|
|
4676
4672
|
before do
|
|
4677
|
-
person.update_attributes(attributes)
|
|
4673
|
+
person.update_attributes!(attributes)
|
|
4678
4674
|
end
|
|
4679
4675
|
|
|
4680
4676
|
it "updates the first level embedded document" do
|
|
@@ -4691,7 +4687,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4691
4687
|
context "when the first level is an embeds many" do
|
|
4692
4688
|
|
|
4693
4689
|
let!(:address) do
|
|
4694
|
-
person.addresses.create(street: "Alexanderstr", number: 1)
|
|
4690
|
+
person.addresses.create!(street: "Alexanderstr", number: 1)
|
|
4695
4691
|
end
|
|
4696
4692
|
|
|
4697
4693
|
let!(:target) do
|
|
@@ -4714,7 +4710,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4714
4710
|
end
|
|
4715
4711
|
|
|
4716
4712
|
before do
|
|
4717
|
-
person.update_attributes(attributes)
|
|
4713
|
+
person.update_attributes!(attributes)
|
|
4718
4714
|
end
|
|
4719
4715
|
|
|
4720
4716
|
it "updates the first level embedded document" do
|
|
@@ -4750,7 +4746,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4750
4746
|
end
|
|
4751
4747
|
|
|
4752
4748
|
before do
|
|
4753
|
-
person.update_attributes(attributes)
|
|
4749
|
+
person.update_attributes!(attributes)
|
|
4754
4750
|
end
|
|
4755
4751
|
|
|
4756
4752
|
it "updates the nested embedded document" do
|
|
@@ -4767,7 +4763,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4767
4763
|
context "when updating with valid attributes" do
|
|
4768
4764
|
|
|
4769
4765
|
let(:user) do
|
|
4770
|
-
User.create
|
|
4766
|
+
User.create!
|
|
4771
4767
|
end
|
|
4772
4768
|
|
|
4773
4769
|
let(:params) do
|
|
@@ -4777,7 +4773,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4777
4773
|
end
|
|
4778
4774
|
|
|
4779
4775
|
before do
|
|
4780
|
-
user.update_attributes(params)
|
|
4776
|
+
user.update_attributes!(params)
|
|
4781
4777
|
end
|
|
4782
4778
|
|
|
4783
4779
|
around do |example|
|
|
@@ -4803,11 +4799,11 @@ describe Mongoid::Attributes::Nested do
|
|
|
4803
4799
|
context "when the document is freshly loaded from the db" do
|
|
4804
4800
|
|
|
4805
4801
|
let!(:node) do
|
|
4806
|
-
Node.create
|
|
4802
|
+
Node.create!
|
|
4807
4803
|
end
|
|
4808
4804
|
|
|
4809
4805
|
let!(:server) do
|
|
4810
|
-
node.servers.create(name: "test")
|
|
4806
|
+
node.servers.create!(name: "test")
|
|
4811
4807
|
end
|
|
4812
4808
|
|
|
4813
4809
|
before do
|
|
@@ -4840,11 +4836,11 @@ describe Mongoid::Attributes::Nested do
|
|
|
4840
4836
|
context "when the relation is an embeds many" do
|
|
4841
4837
|
|
|
4842
4838
|
let(:league) do
|
|
4843
|
-
League.create
|
|
4839
|
+
League.create!
|
|
4844
4840
|
end
|
|
4845
4841
|
|
|
4846
4842
|
let!(:division) do
|
|
4847
|
-
league.divisions.create(name: "Old Name")
|
|
4843
|
+
league.divisions.create!(name: "Old Name")
|
|
4848
4844
|
end
|
|
4849
4845
|
|
|
4850
4846
|
context "when additional validation is set" do
|
|
@@ -4899,7 +4895,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4899
4895
|
end
|
|
4900
4896
|
|
|
4901
4897
|
before do
|
|
4902
|
-
league.update_attributes(params)
|
|
4898
|
+
league.update_attributes!(params)
|
|
4903
4899
|
end
|
|
4904
4900
|
|
|
4905
4901
|
it "sets the nested attributes" do
|
|
@@ -4919,7 +4915,7 @@ describe Mongoid::Attributes::Nested do
|
|
|
4919
4915
|
end
|
|
4920
4916
|
|
|
4921
4917
|
before do
|
|
4922
|
-
league.update_attributes(new_params)
|
|
4918
|
+
league.update_attributes!(new_params)
|
|
4923
4919
|
end
|
|
4924
4920
|
|
|
4925
4921
|
it "sets the nested attributes" do
|
|
@@ -4929,4 +4925,77 @@ describe Mongoid::Attributes::Nested do
|
|
|
4929
4925
|
end
|
|
4930
4926
|
end
|
|
4931
4927
|
end
|
|
4928
|
+
|
|
4929
|
+
context "when destroying has_many child using nested attributes" do
|
|
4930
|
+
let(:school) do
|
|
4931
|
+
School.create
|
|
4932
|
+
end
|
|
4933
|
+
|
|
4934
|
+
let!(:student) do
|
|
4935
|
+
school.students.create
|
|
4936
|
+
end
|
|
4937
|
+
|
|
4938
|
+
before do
|
|
4939
|
+
school.attributes = {
|
|
4940
|
+
'_id': school.id,
|
|
4941
|
+
'students_attributes': [{
|
|
4942
|
+
'_id': student.id,
|
|
4943
|
+
'_destroy': 1
|
|
4944
|
+
}]
|
|
4945
|
+
}
|
|
4946
|
+
end
|
|
4947
|
+
|
|
4948
|
+
it "is able to access the parent in the after_destroy callback" do
|
|
4949
|
+
expect(school.after_destroy_triggered).to eq(true)
|
|
4950
|
+
end
|
|
4951
|
+
end
|
|
4952
|
+
|
|
4953
|
+
context "when destroying has_many child using nested attributes" do
|
|
4954
|
+
let(:school) do
|
|
4955
|
+
HabtmmSchool.create!(students: [student])
|
|
4956
|
+
end
|
|
4957
|
+
|
|
4958
|
+
let(:student) do
|
|
4959
|
+
HabtmmStudent.create!
|
|
4960
|
+
end
|
|
4961
|
+
|
|
4962
|
+
before do
|
|
4963
|
+
student.schools << school
|
|
4964
|
+
school.attributes = {
|
|
4965
|
+
'_id': school.id,
|
|
4966
|
+
'students_attributes': [{
|
|
4967
|
+
'_id': student.id,
|
|
4968
|
+
'_destroy': 1
|
|
4969
|
+
}]
|
|
4970
|
+
}
|
|
4971
|
+
end
|
|
4972
|
+
|
|
4973
|
+
it "is able to access the parent in the after_destroy callback" do
|
|
4974
|
+
expect(school.reload.after_destroy_triggered).to eq(true)
|
|
4975
|
+
end
|
|
4976
|
+
end
|
|
4977
|
+
|
|
4978
|
+
context "when using a multi-leveled nested attribute on a referenced association" do
|
|
4979
|
+
let(:author) { NestedAuthor.create }
|
|
4980
|
+
let(:one_level_params) { { post_attributes: { title: 'test' } } }
|
|
4981
|
+
let(:two_levels_params) { { post_attributes: { comments_attributes: [ { body: 'test' } ] } } }
|
|
4982
|
+
|
|
4983
|
+
it "creates a 1st-depth child model" do
|
|
4984
|
+
author.update_attributes(one_level_params)
|
|
4985
|
+
expect(author.post.persisted?).to be true
|
|
4986
|
+
end
|
|
4987
|
+
|
|
4988
|
+
it "creates a 1st-depth child model, and a 2nd-depth child model" do
|
|
4989
|
+
author.update_attributes(two_levels_params)
|
|
4990
|
+
expect(author.post.comments.count).to eq 1
|
|
4991
|
+
end
|
|
4992
|
+
|
|
4993
|
+
context "the 1st-depth child model already exists" do
|
|
4994
|
+
it "creates a 2nd-depth child model" do
|
|
4995
|
+
author.create_post(title: 'test')
|
|
4996
|
+
author.update_attributes(two_levels_params)
|
|
4997
|
+
expect(author.post.comments.count).to eq 1
|
|
4998
|
+
end
|
|
4999
|
+
end
|
|
5000
|
+
end
|
|
4932
5001
|
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# rubocop:todo all
|
|
3
|
+
|
|
4
|
+
class NestedAuthor
|
|
5
|
+
include Mongoid::Document
|
|
6
|
+
|
|
7
|
+
field :name, type: String
|
|
8
|
+
has_one :post, class_name: "NestedPost"
|
|
9
|
+
accepts_nested_attributes_for :post
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class NestedComment
|
|
13
|
+
include Mongoid::Document
|
|
14
|
+
|
|
15
|
+
field :body, type: String
|
|
16
|
+
belongs_to :post, class_name: "NestedPost"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class NestedPost
|
|
20
|
+
include Mongoid::Document
|
|
21
|
+
|
|
22
|
+
field :title, type: String
|
|
23
|
+
belongs_to :author, class_name: "NestedAuthor"
|
|
24
|
+
has_many :comments, class_name: "NestedComment"
|
|
25
|
+
accepts_nested_attributes_for :comments
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class NestedBook
|
|
29
|
+
include Mongoid::Document
|
|
30
|
+
|
|
31
|
+
embeds_one :cover, class_name: "NestedCover"
|
|
32
|
+
embeds_many :pages, class_name: "NestedPage"
|
|
33
|
+
|
|
34
|
+
accepts_nested_attributes_for :cover, :pages
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class NestedCover
|
|
38
|
+
include Mongoid::Document
|
|
39
|
+
|
|
40
|
+
field :title, type: String
|
|
41
|
+
embedded_in :book, class_name: "NestedBook"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
class NestedPage
|
|
45
|
+
include Mongoid::Document
|
|
46
|
+
|
|
47
|
+
field :number, type: Integer
|
|
48
|
+
embedded_in :book, class_name: "NestedBook"
|
|
49
|
+
end
|