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,11 +1,19 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
require "spec_helper"
|
|
5
5
|
require_relative './interceptable_spec_models'
|
|
6
6
|
|
|
7
7
|
describe Mongoid::Interceptable do
|
|
8
8
|
|
|
9
|
+
before do
|
|
10
|
+
# The find and initialize callbacks I added were causing failures
|
|
11
|
+
# because they were causing updates when we were asserting no updates
|
|
12
|
+
# happened.
|
|
13
|
+
Label.reset_callbacks(:initialize)
|
|
14
|
+
Label.reset_callbacks(:find)
|
|
15
|
+
end
|
|
16
|
+
|
|
9
17
|
class TestClass
|
|
10
18
|
include Mongoid::Interceptable
|
|
11
19
|
|
|
@@ -78,7 +86,7 @@ describe Mongoid::Interceptable do
|
|
|
78
86
|
describe ".after_find" do
|
|
79
87
|
|
|
80
88
|
let!(:player) do
|
|
81
|
-
Player.create
|
|
89
|
+
Player.create!
|
|
82
90
|
end
|
|
83
91
|
|
|
84
92
|
context "when the callback is on a root document" do
|
|
@@ -131,7 +139,7 @@ describe Mongoid::Interceptable do
|
|
|
131
139
|
context "when the callback is on an embedded document" do
|
|
132
140
|
|
|
133
141
|
let!(:implant) do
|
|
134
|
-
player.implants.create
|
|
142
|
+
player.implants.create!
|
|
135
143
|
end
|
|
136
144
|
|
|
137
145
|
context "when when the document is instantiated" do
|
|
@@ -201,7 +209,7 @@ describe Mongoid::Interceptable do
|
|
|
201
209
|
]
|
|
202
210
|
})
|
|
203
211
|
book.id = '123'
|
|
204
|
-
book.save
|
|
212
|
+
book.save!
|
|
205
213
|
book
|
|
206
214
|
end
|
|
207
215
|
|
|
@@ -213,7 +221,7 @@ describe Mongoid::Interceptable do
|
|
|
213
221
|
book.pages.each do | page |
|
|
214
222
|
page.notes.destroy_all
|
|
215
223
|
page.notes.new(message: new_message)
|
|
216
|
-
page.save
|
|
224
|
+
page.save!
|
|
217
225
|
end
|
|
218
226
|
end
|
|
219
227
|
|
|
@@ -276,7 +284,7 @@ describe Mongoid::Interceptable do
|
|
|
276
284
|
|
|
277
285
|
before do
|
|
278
286
|
expect(artist).to receive(:before_create_stub).once.and_return(true)
|
|
279
|
-
artist.save
|
|
287
|
+
artist.save!
|
|
280
288
|
end
|
|
281
289
|
|
|
282
290
|
it "gets saved" do
|
|
@@ -321,7 +329,7 @@ describe Mongoid::Interceptable do
|
|
|
321
329
|
end
|
|
322
330
|
|
|
323
331
|
it "the save returns true" do
|
|
324
|
-
expect(artist.save).to be true
|
|
332
|
+
expect(artist.save!).to be true
|
|
325
333
|
end
|
|
326
334
|
end
|
|
327
335
|
|
|
@@ -345,7 +353,7 @@ describe Mongoid::Interceptable do
|
|
|
345
353
|
context "when updating" do
|
|
346
354
|
|
|
347
355
|
let(:artist) do
|
|
348
|
-
Artist.create(name: "Depeche Mode").tap do |artist|
|
|
356
|
+
Artist.create!(name: "Depeche Mode").tap do |artist|
|
|
349
357
|
artist.name = "The Mountain Goats"
|
|
350
358
|
end
|
|
351
359
|
end
|
|
@@ -361,7 +369,7 @@ describe Mongoid::Interceptable do
|
|
|
361
369
|
end
|
|
362
370
|
|
|
363
371
|
it "the save returns true" do
|
|
364
|
-
expect(artist.save).to be true
|
|
372
|
+
expect(artist.save!).to be true
|
|
365
373
|
end
|
|
366
374
|
end
|
|
367
375
|
|
|
@@ -386,7 +394,7 @@ describe Mongoid::Interceptable do
|
|
|
386
394
|
describe ".before_destroy" do
|
|
387
395
|
|
|
388
396
|
let(:artist) do
|
|
389
|
-
Artist.create(name: "Depeche Mode")
|
|
397
|
+
Artist.create!(name: "Depeche Mode")
|
|
390
398
|
end
|
|
391
399
|
|
|
392
400
|
before do
|
|
@@ -431,7 +439,7 @@ describe Mongoid::Interceptable do
|
|
|
431
439
|
end
|
|
432
440
|
|
|
433
441
|
let!(:record) do
|
|
434
|
-
moderat.records.create(name: "Moderat")
|
|
442
|
+
moderat.records.create!(name: "Moderat")
|
|
435
443
|
end
|
|
436
444
|
|
|
437
445
|
before do
|
|
@@ -545,7 +553,7 @@ describe Mongoid::Interceptable do
|
|
|
545
553
|
|
|
546
554
|
it "does not cascade to the child" do
|
|
547
555
|
Band.accepts_nested_attributes_for :records, allow_destroy: true
|
|
548
|
-
expect(band.update_attributes(attributes)).to be true
|
|
556
|
+
expect(band.update_attributes!(attributes)).to be true
|
|
549
557
|
end
|
|
550
558
|
end
|
|
551
559
|
end
|
|
@@ -573,10 +581,24 @@ describe Mongoid::Interceptable do
|
|
|
573
581
|
end
|
|
574
582
|
|
|
575
583
|
context "when saving the root" do
|
|
584
|
+
context 'with prevent_multiple_calls_of_embedded_callbacks enabled' do
|
|
585
|
+
config_override :prevent_multiple_calls_of_embedded_callbacks, true
|
|
586
|
+
config_override :around_callbacks_for_embeds, true
|
|
587
|
+
|
|
588
|
+
it "executes the callbacks only once for each document" do
|
|
589
|
+
expect(note).to receive(:update_saved).once
|
|
590
|
+
band.save!
|
|
591
|
+
end
|
|
592
|
+
end
|
|
593
|
+
|
|
594
|
+
context 'with prevent_multiple_calls_of_embedded_callbacks disabled' do
|
|
595
|
+
config_override :prevent_multiple_calls_of_embedded_callbacks, false
|
|
596
|
+
config_override :around_callbacks_for_embeds, true
|
|
576
597
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
598
|
+
it "executes the callbacks once for each ember" do
|
|
599
|
+
expect(note).to receive(:update_saved).twice
|
|
600
|
+
band.save!
|
|
601
|
+
end
|
|
580
602
|
end
|
|
581
603
|
end
|
|
582
604
|
end
|
|
@@ -585,7 +607,7 @@ describe Mongoid::Interceptable do
|
|
|
585
607
|
context "when cascading after initialize" do
|
|
586
608
|
|
|
587
609
|
let!(:person) do
|
|
588
|
-
Person.create
|
|
610
|
+
Person.create!
|
|
589
611
|
end
|
|
590
612
|
|
|
591
613
|
before do
|
|
@@ -624,7 +646,7 @@ describe Mongoid::Interceptable do
|
|
|
624
646
|
end
|
|
625
647
|
|
|
626
648
|
before do
|
|
627
|
-
band.save
|
|
649
|
+
band.save!
|
|
628
650
|
end
|
|
629
651
|
|
|
630
652
|
it "executes the callback" do
|
|
@@ -635,7 +657,7 @@ describe Mongoid::Interceptable do
|
|
|
635
657
|
context "when the parent is persisted" do
|
|
636
658
|
|
|
637
659
|
let(:band) do
|
|
638
|
-
Band.create(name: "Moderat")
|
|
660
|
+
Band.create!(name: "Moderat")
|
|
639
661
|
end
|
|
640
662
|
|
|
641
663
|
let!(:label) do
|
|
@@ -643,7 +665,7 @@ describe Mongoid::Interceptable do
|
|
|
643
665
|
end
|
|
644
666
|
|
|
645
667
|
before do
|
|
646
|
-
band.save
|
|
668
|
+
band.save!
|
|
647
669
|
end
|
|
648
670
|
|
|
649
671
|
it "executes the callback" do
|
|
@@ -655,7 +677,7 @@ describe Mongoid::Interceptable do
|
|
|
655
677
|
context "when the child is persisted" do
|
|
656
678
|
|
|
657
679
|
let(:band) do
|
|
658
|
-
Band.create(name: "Moderat")
|
|
680
|
+
Band.create!(name: "Moderat")
|
|
659
681
|
end
|
|
660
682
|
|
|
661
683
|
let!(:label) do
|
|
@@ -664,7 +686,7 @@ describe Mongoid::Interceptable do
|
|
|
664
686
|
|
|
665
687
|
before do
|
|
666
688
|
label.after_create_called = false
|
|
667
|
-
band.save
|
|
689
|
+
band.save!
|
|
668
690
|
end
|
|
669
691
|
|
|
670
692
|
it "does not execute the callback" do
|
|
@@ -688,7 +710,7 @@ describe Mongoid::Interceptable do
|
|
|
688
710
|
end
|
|
689
711
|
|
|
690
712
|
before do
|
|
691
|
-
band.save
|
|
713
|
+
band.save!
|
|
692
714
|
end
|
|
693
715
|
|
|
694
716
|
it "executes the callback" do
|
|
@@ -699,7 +721,7 @@ describe Mongoid::Interceptable do
|
|
|
699
721
|
context "when the parent is persisted" do
|
|
700
722
|
|
|
701
723
|
let(:band) do
|
|
702
|
-
Band.create(name: "Moderat")
|
|
724
|
+
Band.create!(name: "Moderat")
|
|
703
725
|
end
|
|
704
726
|
|
|
705
727
|
let!(:label) do
|
|
@@ -707,7 +729,7 @@ describe Mongoid::Interceptable do
|
|
|
707
729
|
end
|
|
708
730
|
|
|
709
731
|
before do
|
|
710
|
-
band.save
|
|
732
|
+
band.save!
|
|
711
733
|
end
|
|
712
734
|
|
|
713
735
|
it "executes the callback" do
|
|
@@ -719,7 +741,7 @@ describe Mongoid::Interceptable do
|
|
|
719
741
|
context "when the child is persisted" do
|
|
720
742
|
|
|
721
743
|
let(:band) do
|
|
722
|
-
Band.create(name: "Moderat")
|
|
744
|
+
Band.create!(name: "Moderat")
|
|
723
745
|
end
|
|
724
746
|
|
|
725
747
|
let!(:label) do
|
|
@@ -727,7 +749,7 @@ describe Mongoid::Interceptable do
|
|
|
727
749
|
end
|
|
728
750
|
|
|
729
751
|
before do
|
|
730
|
-
band.save
|
|
752
|
+
band.save!
|
|
731
753
|
end
|
|
732
754
|
|
|
733
755
|
it "executes the callback" do
|
|
@@ -751,7 +773,7 @@ describe Mongoid::Interceptable do
|
|
|
751
773
|
end
|
|
752
774
|
|
|
753
775
|
before do
|
|
754
|
-
band.save
|
|
776
|
+
band.save!
|
|
755
777
|
end
|
|
756
778
|
|
|
757
779
|
it "does not execute the callback" do
|
|
@@ -762,7 +784,7 @@ describe Mongoid::Interceptable do
|
|
|
762
784
|
context "when the parent is persisted" do
|
|
763
785
|
|
|
764
786
|
let(:band) do
|
|
765
|
-
Band.create(name: "Moderat")
|
|
787
|
+
Band.create!(name: "Moderat")
|
|
766
788
|
end
|
|
767
789
|
|
|
768
790
|
let!(:label) do
|
|
@@ -770,7 +792,7 @@ describe Mongoid::Interceptable do
|
|
|
770
792
|
end
|
|
771
793
|
|
|
772
794
|
before do
|
|
773
|
-
band.save
|
|
795
|
+
band.save!
|
|
774
796
|
end
|
|
775
797
|
|
|
776
798
|
it "does not execute the callback" do
|
|
@@ -782,7 +804,7 @@ describe Mongoid::Interceptable do
|
|
|
782
804
|
context "when the child is persisted" do
|
|
783
805
|
|
|
784
806
|
let(:band) do
|
|
785
|
-
Band.create(name: "Moderat")
|
|
807
|
+
Band.create!(name: "Moderat")
|
|
786
808
|
end
|
|
787
809
|
|
|
788
810
|
context "when the child is dirty" do
|
|
@@ -793,7 +815,7 @@ describe Mongoid::Interceptable do
|
|
|
793
815
|
|
|
794
816
|
before do
|
|
795
817
|
label.name = "Nothing"
|
|
796
|
-
band.save
|
|
818
|
+
band.save!
|
|
797
819
|
end
|
|
798
820
|
|
|
799
821
|
it "executes the callback" do
|
|
@@ -808,7 +830,7 @@ describe Mongoid::Interceptable do
|
|
|
808
830
|
end
|
|
809
831
|
|
|
810
832
|
before do
|
|
811
|
-
band.save
|
|
833
|
+
band.save!
|
|
812
834
|
end
|
|
813
835
|
|
|
814
836
|
it "does not execute the callback" do
|
|
@@ -833,7 +855,7 @@ describe Mongoid::Interceptable do
|
|
|
833
855
|
end
|
|
834
856
|
|
|
835
857
|
before do
|
|
836
|
-
band.save
|
|
858
|
+
band.save!
|
|
837
859
|
end
|
|
838
860
|
|
|
839
861
|
it "executes the callback" do
|
|
@@ -844,7 +866,7 @@ describe Mongoid::Interceptable do
|
|
|
844
866
|
context "when the parent is persisted" do
|
|
845
867
|
|
|
846
868
|
let(:band) do
|
|
847
|
-
Band.create(name: "Moderat")
|
|
869
|
+
Band.create!(name: "Moderat")
|
|
848
870
|
end
|
|
849
871
|
|
|
850
872
|
let!(:label) do
|
|
@@ -852,7 +874,7 @@ describe Mongoid::Interceptable do
|
|
|
852
874
|
end
|
|
853
875
|
|
|
854
876
|
before do
|
|
855
|
-
band.save
|
|
877
|
+
band.save!
|
|
856
878
|
end
|
|
857
879
|
|
|
858
880
|
it "executes the callback" do
|
|
@@ -864,7 +886,7 @@ describe Mongoid::Interceptable do
|
|
|
864
886
|
context "when the child is persisted" do
|
|
865
887
|
|
|
866
888
|
let(:band) do
|
|
867
|
-
Band.create(name: "Moderat")
|
|
889
|
+
Band.create!(name: "Moderat")
|
|
868
890
|
end
|
|
869
891
|
|
|
870
892
|
let!(:label) do
|
|
@@ -872,7 +894,7 @@ describe Mongoid::Interceptable do
|
|
|
872
894
|
end
|
|
873
895
|
|
|
874
896
|
before do
|
|
875
|
-
band.save
|
|
897
|
+
band.save!
|
|
876
898
|
end
|
|
877
899
|
|
|
878
900
|
it "executes the callback" do
|
|
@@ -896,7 +918,7 @@ describe Mongoid::Interceptable do
|
|
|
896
918
|
end
|
|
897
919
|
|
|
898
920
|
before do
|
|
899
|
-
band.save
|
|
921
|
+
band.save!
|
|
900
922
|
end
|
|
901
923
|
|
|
902
924
|
it "executes the callback" do
|
|
@@ -907,7 +929,7 @@ describe Mongoid::Interceptable do
|
|
|
907
929
|
context "when the parent is persisted" do
|
|
908
930
|
|
|
909
931
|
let(:band) do
|
|
910
|
-
Band.create(name: "Moderat")
|
|
932
|
+
Band.create!(name: "Moderat")
|
|
911
933
|
end
|
|
912
934
|
|
|
913
935
|
let!(:record) do
|
|
@@ -915,7 +937,7 @@ describe Mongoid::Interceptable do
|
|
|
915
937
|
end
|
|
916
938
|
|
|
917
939
|
before do
|
|
918
|
-
band.save
|
|
940
|
+
band.save!
|
|
919
941
|
end
|
|
920
942
|
|
|
921
943
|
it "executes the callback" do
|
|
@@ -927,16 +949,16 @@ describe Mongoid::Interceptable do
|
|
|
927
949
|
context "when the child is persisted" do
|
|
928
950
|
|
|
929
951
|
let(:band) do
|
|
930
|
-
Band.create(name: "Moderat")
|
|
952
|
+
Band.create!(name: "Moderat")
|
|
931
953
|
end
|
|
932
954
|
|
|
933
955
|
let!(:record) do
|
|
934
|
-
band.records.create(name: "Moderat")
|
|
956
|
+
band.records.create!(name: "Moderat")
|
|
935
957
|
end
|
|
936
958
|
|
|
937
959
|
before do
|
|
938
960
|
record.before_create_called = false
|
|
939
|
-
band.save
|
|
961
|
+
band.save!
|
|
940
962
|
end
|
|
941
963
|
|
|
942
964
|
it "does not execute the callback" do
|
|
@@ -960,7 +982,7 @@ describe Mongoid::Interceptable do
|
|
|
960
982
|
end
|
|
961
983
|
|
|
962
984
|
before do
|
|
963
|
-
band.save
|
|
985
|
+
band.save!
|
|
964
986
|
end
|
|
965
987
|
|
|
966
988
|
it "executes the callback" do
|
|
@@ -975,7 +997,7 @@ describe Mongoid::Interceptable do
|
|
|
975
997
|
context "when the parent is persisted" do
|
|
976
998
|
|
|
977
999
|
let(:band) do
|
|
978
|
-
Band.create(name: "Moderat")
|
|
1000
|
+
Band.create!(name: "Moderat")
|
|
979
1001
|
end
|
|
980
1002
|
|
|
981
1003
|
let!(:record) do
|
|
@@ -983,7 +1005,7 @@ describe Mongoid::Interceptable do
|
|
|
983
1005
|
end
|
|
984
1006
|
|
|
985
1007
|
before do
|
|
986
|
-
band.save
|
|
1008
|
+
band.save!
|
|
987
1009
|
end
|
|
988
1010
|
|
|
989
1011
|
it "executes the callback" do
|
|
@@ -999,15 +1021,15 @@ describe Mongoid::Interceptable do
|
|
|
999
1021
|
context "when the child is persisted" do
|
|
1000
1022
|
|
|
1001
1023
|
let(:band) do
|
|
1002
|
-
Band.create(name: "Moderat")
|
|
1024
|
+
Band.create!(name: "Moderat")
|
|
1003
1025
|
end
|
|
1004
1026
|
|
|
1005
1027
|
let!(:record) do
|
|
1006
|
-
band.records.create(name: "Moderat")
|
|
1028
|
+
band.records.create!(name: "Moderat")
|
|
1007
1029
|
end
|
|
1008
1030
|
|
|
1009
1031
|
before do
|
|
1010
|
-
band.save
|
|
1032
|
+
band.save!
|
|
1011
1033
|
end
|
|
1012
1034
|
|
|
1013
1035
|
it "executes the callback" do
|
|
@@ -1022,7 +1044,7 @@ describe Mongoid::Interceptable do
|
|
|
1022
1044
|
context "when the child is created" do
|
|
1023
1045
|
|
|
1024
1046
|
let!(:band) do
|
|
1025
|
-
Band.create
|
|
1047
|
+
Band.create!
|
|
1026
1048
|
end
|
|
1027
1049
|
|
|
1028
1050
|
let!(:label) do
|
|
@@ -1050,7 +1072,7 @@ describe Mongoid::Interceptable do
|
|
|
1050
1072
|
end
|
|
1051
1073
|
|
|
1052
1074
|
before do
|
|
1053
|
-
band.save
|
|
1075
|
+
band.save!
|
|
1054
1076
|
end
|
|
1055
1077
|
|
|
1056
1078
|
it "does not execute the callback" do
|
|
@@ -1061,7 +1083,7 @@ describe Mongoid::Interceptable do
|
|
|
1061
1083
|
context "when the parent is persisted" do
|
|
1062
1084
|
|
|
1063
1085
|
let(:band) do
|
|
1064
|
-
Band.create(name: "Moderat")
|
|
1086
|
+
Band.create!(name: "Moderat")
|
|
1065
1087
|
end
|
|
1066
1088
|
|
|
1067
1089
|
let!(:record) do
|
|
@@ -1069,7 +1091,7 @@ describe Mongoid::Interceptable do
|
|
|
1069
1091
|
end
|
|
1070
1092
|
|
|
1071
1093
|
before do
|
|
1072
|
-
band.save
|
|
1094
|
+
band.save!
|
|
1073
1095
|
end
|
|
1074
1096
|
|
|
1075
1097
|
it "does not execute the callback" do
|
|
@@ -1081,18 +1103,18 @@ describe Mongoid::Interceptable do
|
|
|
1081
1103
|
context "when the child is persisted" do
|
|
1082
1104
|
|
|
1083
1105
|
let(:band) do
|
|
1084
|
-
Band.create(name: "Moderat")
|
|
1106
|
+
Band.create!(name: "Moderat")
|
|
1085
1107
|
end
|
|
1086
1108
|
|
|
1087
1109
|
let!(:record) do
|
|
1088
|
-
band.records.create(name: "Moderat")
|
|
1110
|
+
band.records.create!(name: "Moderat")
|
|
1089
1111
|
end
|
|
1090
1112
|
|
|
1091
1113
|
context "when the child is dirty" do
|
|
1092
1114
|
|
|
1093
1115
|
before do
|
|
1094
1116
|
record.name = "Nothing"
|
|
1095
|
-
band.save
|
|
1117
|
+
band.save!
|
|
1096
1118
|
end
|
|
1097
1119
|
|
|
1098
1120
|
it "executes the callback" do
|
|
@@ -1107,7 +1129,7 @@ describe Mongoid::Interceptable do
|
|
|
1107
1129
|
context "when the child is not dirty" do
|
|
1108
1130
|
|
|
1109
1131
|
before do
|
|
1110
|
-
band.save
|
|
1132
|
+
band.save!
|
|
1111
1133
|
end
|
|
1112
1134
|
|
|
1113
1135
|
it "does not execute the callback" do
|
|
@@ -1132,7 +1154,7 @@ describe Mongoid::Interceptable do
|
|
|
1132
1154
|
end
|
|
1133
1155
|
|
|
1134
1156
|
before do
|
|
1135
|
-
band.save
|
|
1157
|
+
band.save!
|
|
1136
1158
|
end
|
|
1137
1159
|
|
|
1138
1160
|
it "executes the callback" do
|
|
@@ -1147,7 +1169,7 @@ describe Mongoid::Interceptable do
|
|
|
1147
1169
|
context "when the parent is persisted" do
|
|
1148
1170
|
|
|
1149
1171
|
let(:band) do
|
|
1150
|
-
Band.create(name: "Moderat")
|
|
1172
|
+
Band.create!(name: "Moderat")
|
|
1151
1173
|
end
|
|
1152
1174
|
|
|
1153
1175
|
let!(:record) do
|
|
@@ -1155,7 +1177,7 @@ describe Mongoid::Interceptable do
|
|
|
1155
1177
|
end
|
|
1156
1178
|
|
|
1157
1179
|
before do
|
|
1158
|
-
band.save
|
|
1180
|
+
band.save!
|
|
1159
1181
|
end
|
|
1160
1182
|
|
|
1161
1183
|
it "executes the callback" do
|
|
@@ -1170,7 +1192,7 @@ describe Mongoid::Interceptable do
|
|
|
1170
1192
|
context 'when the parent is updated' do
|
|
1171
1193
|
|
|
1172
1194
|
let(:band) do
|
|
1173
|
-
Band.create(name: "Moderat")
|
|
1195
|
+
Band.create!(name: "Moderat")
|
|
1174
1196
|
end
|
|
1175
1197
|
|
|
1176
1198
|
before do
|
|
@@ -1190,7 +1212,7 @@ describe Mongoid::Interceptable do
|
|
|
1190
1212
|
context 'when the parent is updated' do
|
|
1191
1213
|
|
|
1192
1214
|
let(:band) do
|
|
1193
|
-
Band.create(name: "Moderat")
|
|
1215
|
+
Band.create!(name: "Moderat")
|
|
1194
1216
|
end
|
|
1195
1217
|
|
|
1196
1218
|
before do
|
|
@@ -1209,15 +1231,15 @@ describe Mongoid::Interceptable do
|
|
|
1209
1231
|
context "when the child is persisted" do
|
|
1210
1232
|
|
|
1211
1233
|
let(:band) do
|
|
1212
|
-
Band.create(name: "Moderat")
|
|
1234
|
+
Band.create!(name: "Moderat")
|
|
1213
1235
|
end
|
|
1214
1236
|
|
|
1215
1237
|
let!(:record) do
|
|
1216
|
-
band.records.create(name: "Moderat")
|
|
1238
|
+
band.records.create!(name: "Moderat")
|
|
1217
1239
|
end
|
|
1218
1240
|
|
|
1219
1241
|
before do
|
|
1220
|
-
band.save
|
|
1242
|
+
band.save!
|
|
1221
1243
|
end
|
|
1222
1244
|
|
|
1223
1245
|
it "executes the callback" do
|
|
@@ -1252,7 +1274,7 @@ describe Mongoid::Interceptable do
|
|
|
1252
1274
|
end
|
|
1253
1275
|
|
|
1254
1276
|
before do
|
|
1255
|
-
band.save
|
|
1277
|
+
band.save!
|
|
1256
1278
|
end
|
|
1257
1279
|
|
|
1258
1280
|
it "executes the callback" do
|
|
@@ -1263,7 +1285,7 @@ describe Mongoid::Interceptable do
|
|
|
1263
1285
|
context "when the root is persisted" do
|
|
1264
1286
|
|
|
1265
1287
|
let(:band) do
|
|
1266
|
-
Band.create(name: "Moderat")
|
|
1288
|
+
Band.create!(name: "Moderat")
|
|
1267
1289
|
end
|
|
1268
1290
|
|
|
1269
1291
|
let!(:record) do
|
|
@@ -1275,7 +1297,7 @@ describe Mongoid::Interceptable do
|
|
|
1275
1297
|
end
|
|
1276
1298
|
|
|
1277
1299
|
before do
|
|
1278
|
-
band.save
|
|
1300
|
+
band.save!
|
|
1279
1301
|
end
|
|
1280
1302
|
|
|
1281
1303
|
it "executes the callback" do
|
|
@@ -1287,20 +1309,20 @@ describe Mongoid::Interceptable do
|
|
|
1287
1309
|
context "when the child is persisted" do
|
|
1288
1310
|
|
|
1289
1311
|
let(:band) do
|
|
1290
|
-
Band.create(name: "Moderat")
|
|
1312
|
+
Band.create!(name: "Moderat")
|
|
1291
1313
|
end
|
|
1292
1314
|
|
|
1293
1315
|
let!(:record) do
|
|
1294
|
-
band.records.create(name: "Moderat")
|
|
1316
|
+
band.records.create!(name: "Moderat")
|
|
1295
1317
|
end
|
|
1296
1318
|
|
|
1297
1319
|
let!(:track) do
|
|
1298
|
-
record.tracks.create(name: "Berlin")
|
|
1320
|
+
record.tracks.create!(name: "Berlin")
|
|
1299
1321
|
end
|
|
1300
1322
|
|
|
1301
1323
|
before do
|
|
1302
1324
|
track.before_create_called = false
|
|
1303
|
-
band.save
|
|
1325
|
+
band.save!
|
|
1304
1326
|
end
|
|
1305
1327
|
|
|
1306
1328
|
it "does not execute the callback" do
|
|
@@ -1328,7 +1350,7 @@ describe Mongoid::Interceptable do
|
|
|
1328
1350
|
end
|
|
1329
1351
|
|
|
1330
1352
|
before do
|
|
1331
|
-
band.save
|
|
1353
|
+
band.save!
|
|
1332
1354
|
end
|
|
1333
1355
|
|
|
1334
1356
|
let(:reloaded) do
|
|
@@ -1347,7 +1369,7 @@ describe Mongoid::Interceptable do
|
|
|
1347
1369
|
context "when the parent is persisted" do
|
|
1348
1370
|
|
|
1349
1371
|
let(:band) do
|
|
1350
|
-
Band.create(name: "Moderat")
|
|
1372
|
+
Band.create!(name: "Moderat")
|
|
1351
1373
|
end
|
|
1352
1374
|
|
|
1353
1375
|
let!(:record) do
|
|
@@ -1359,7 +1381,7 @@ describe Mongoid::Interceptable do
|
|
|
1359
1381
|
end
|
|
1360
1382
|
|
|
1361
1383
|
before do
|
|
1362
|
-
band.save
|
|
1384
|
+
band.save!
|
|
1363
1385
|
end
|
|
1364
1386
|
|
|
1365
1387
|
let(:reloaded) do
|
|
@@ -1379,19 +1401,19 @@ describe Mongoid::Interceptable do
|
|
|
1379
1401
|
context "when the child is persisted" do
|
|
1380
1402
|
|
|
1381
1403
|
let(:band) do
|
|
1382
|
-
Band.create(name: "Moderat")
|
|
1404
|
+
Band.create!(name: "Moderat")
|
|
1383
1405
|
end
|
|
1384
1406
|
|
|
1385
1407
|
let!(:record) do
|
|
1386
|
-
band.records.create(name: "Moderat")
|
|
1408
|
+
band.records.create!(name: "Moderat")
|
|
1387
1409
|
end
|
|
1388
1410
|
|
|
1389
1411
|
let!(:track) do
|
|
1390
|
-
record.tracks.create(name: "Berlin")
|
|
1412
|
+
record.tracks.create!(name: "Berlin")
|
|
1391
1413
|
end
|
|
1392
1414
|
|
|
1393
1415
|
before do
|
|
1394
|
-
band.save
|
|
1416
|
+
band.save!
|
|
1395
1417
|
end
|
|
1396
1418
|
|
|
1397
1419
|
let(:reloaded) do
|
|
@@ -1427,7 +1449,7 @@ describe Mongoid::Interceptable do
|
|
|
1427
1449
|
end
|
|
1428
1450
|
|
|
1429
1451
|
before do
|
|
1430
|
-
band.save
|
|
1452
|
+
band.save!
|
|
1431
1453
|
end
|
|
1432
1454
|
|
|
1433
1455
|
it "does not execute the callback" do
|
|
@@ -1438,7 +1460,7 @@ describe Mongoid::Interceptable do
|
|
|
1438
1460
|
context "when the parent is persisted" do
|
|
1439
1461
|
|
|
1440
1462
|
let(:band) do
|
|
1441
|
-
Band.create(name: "Moderat")
|
|
1463
|
+
Band.create!(name: "Moderat")
|
|
1442
1464
|
end
|
|
1443
1465
|
|
|
1444
1466
|
let!(:record) do
|
|
@@ -1450,7 +1472,7 @@ describe Mongoid::Interceptable do
|
|
|
1450
1472
|
end
|
|
1451
1473
|
|
|
1452
1474
|
before do
|
|
1453
|
-
band.save
|
|
1475
|
+
band.save!
|
|
1454
1476
|
end
|
|
1455
1477
|
|
|
1456
1478
|
it "does not execute the callback" do
|
|
@@ -1462,22 +1484,22 @@ describe Mongoid::Interceptable do
|
|
|
1462
1484
|
context "when the child is persisted" do
|
|
1463
1485
|
|
|
1464
1486
|
let(:band) do
|
|
1465
|
-
Band.create(name: "Moderat")
|
|
1487
|
+
Band.create!(name: "Moderat")
|
|
1466
1488
|
end
|
|
1467
1489
|
|
|
1468
1490
|
let!(:record) do
|
|
1469
|
-
band.records.create(name: "Moderat")
|
|
1491
|
+
band.records.create!(name: "Moderat")
|
|
1470
1492
|
end
|
|
1471
1493
|
|
|
1472
1494
|
let!(:track) do
|
|
1473
|
-
record.tracks.create(name: "Berlin")
|
|
1495
|
+
record.tracks.create!(name: "Berlin")
|
|
1474
1496
|
end
|
|
1475
1497
|
|
|
1476
1498
|
context "when the child is dirty" do
|
|
1477
1499
|
|
|
1478
1500
|
before do
|
|
1479
1501
|
track.name = "Rusty Nails"
|
|
1480
|
-
band.save
|
|
1502
|
+
band.save!
|
|
1481
1503
|
end
|
|
1482
1504
|
|
|
1483
1505
|
let(:reloaded) do
|
|
@@ -1496,7 +1518,7 @@ describe Mongoid::Interceptable do
|
|
|
1496
1518
|
context "when the child is not dirty" do
|
|
1497
1519
|
|
|
1498
1520
|
before do
|
|
1499
|
-
band.save
|
|
1521
|
+
band.save!
|
|
1500
1522
|
end
|
|
1501
1523
|
|
|
1502
1524
|
it "does not execute the callback" do
|
|
@@ -1544,7 +1566,7 @@ describe Mongoid::Interceptable do
|
|
|
1544
1566
|
end
|
|
1545
1567
|
|
|
1546
1568
|
before do
|
|
1547
|
-
band.save
|
|
1569
|
+
band.save!
|
|
1548
1570
|
end
|
|
1549
1571
|
|
|
1550
1572
|
it "executes the callback" do
|
|
@@ -1555,7 +1577,7 @@ describe Mongoid::Interceptable do
|
|
|
1555
1577
|
context "when the parent is persisted" do
|
|
1556
1578
|
|
|
1557
1579
|
let(:band) do
|
|
1558
|
-
Band.create(name: "Moderat")
|
|
1580
|
+
Band.create!(name: "Moderat")
|
|
1559
1581
|
end
|
|
1560
1582
|
|
|
1561
1583
|
let!(:record) do
|
|
@@ -1567,7 +1589,7 @@ describe Mongoid::Interceptable do
|
|
|
1567
1589
|
end
|
|
1568
1590
|
|
|
1569
1591
|
before do
|
|
1570
|
-
band.save
|
|
1592
|
+
band.save!
|
|
1571
1593
|
end
|
|
1572
1594
|
|
|
1573
1595
|
it "executes the callback" do
|
|
@@ -1579,19 +1601,19 @@ describe Mongoid::Interceptable do
|
|
|
1579
1601
|
context "when the child is persisted" do
|
|
1580
1602
|
|
|
1581
1603
|
let(:band) do
|
|
1582
|
-
Band.create(name: "Moderat")
|
|
1604
|
+
Band.create!(name: "Moderat")
|
|
1583
1605
|
end
|
|
1584
1606
|
|
|
1585
1607
|
let!(:record) do
|
|
1586
|
-
band.records.create(name: "Moderat")
|
|
1608
|
+
band.records.create!(name: "Moderat")
|
|
1587
1609
|
end
|
|
1588
1610
|
|
|
1589
1611
|
let!(:track) do
|
|
1590
|
-
record.tracks.create(name: "Berlin")
|
|
1612
|
+
record.tracks.create!(name: "Berlin")
|
|
1591
1613
|
end
|
|
1592
1614
|
|
|
1593
1615
|
before do
|
|
1594
|
-
band.save
|
|
1616
|
+
band.save!
|
|
1595
1617
|
end
|
|
1596
1618
|
|
|
1597
1619
|
it "executes the callback" do
|
|
@@ -1618,11 +1640,11 @@ describe Mongoid::Interceptable do
|
|
|
1618
1640
|
end
|
|
1619
1641
|
|
|
1620
1642
|
before do
|
|
1621
|
-
parent.save
|
|
1643
|
+
parent.save!
|
|
1622
1644
|
end
|
|
1623
1645
|
|
|
1624
1646
|
it "does not duplicate the child documents" do
|
|
1625
|
-
parent.children.create(position: 1)
|
|
1647
|
+
parent.children.create!(position: 1)
|
|
1626
1648
|
expect(ParentDoc.find(parent.id).children.size).to eq(1)
|
|
1627
1649
|
end
|
|
1628
1650
|
end
|
|
@@ -1673,7 +1695,7 @@ describe Mongoid::Interceptable do
|
|
|
1673
1695
|
context "when updating a document" do
|
|
1674
1696
|
|
|
1675
1697
|
let(:person) do
|
|
1676
|
-
Person.create
|
|
1698
|
+
Person.create!.tap do |person|
|
|
1677
1699
|
person.attributes = {
|
|
1678
1700
|
mode: :prevent_save,
|
|
1679
1701
|
title: "Associate",
|
|
@@ -1739,8 +1761,12 @@ describe Mongoid::Interceptable do
|
|
|
1739
1761
|
[InterceptableSpec::CbChild, :after_validation],
|
|
1740
1762
|
[InterceptableSpec::CbParent, :after_validation],
|
|
1741
1763
|
[InterceptableSpec::CbParent, :before_save],
|
|
1764
|
+
[InterceptableSpec::CbParent, :around_save_open],
|
|
1742
1765
|
[InterceptableSpec::CbParent, :before_create],
|
|
1766
|
+
[InterceptableSpec::CbParent, :around_create_open],
|
|
1767
|
+
[InterceptableSpec::CbParent, :around_create_close],
|
|
1743
1768
|
[InterceptableSpec::CbParent, :after_create],
|
|
1769
|
+
[InterceptableSpec::CbParent, :around_save_close],
|
|
1744
1770
|
[InterceptableSpec::CbParent, :after_save],
|
|
1745
1771
|
]
|
|
1746
1772
|
end
|
|
@@ -1760,28 +1786,812 @@ describe Mongoid::Interceptable do
|
|
|
1760
1786
|
end
|
|
1761
1787
|
end
|
|
1762
1788
|
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
[
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1789
|
+
context 'with around callbacks' do
|
|
1790
|
+
config_override :around_callbacks_for_embeds, true
|
|
1791
|
+
|
|
1792
|
+
let(:expected) do
|
|
1793
|
+
[
|
|
1794
|
+
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1795
|
+
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1796
|
+
[InterceptableSpec::CbParent, :before_validation],
|
|
1797
|
+
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1798
|
+
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1799
|
+
|
|
1800
|
+
[InterceptableSpec::CbParent, :after_validation],
|
|
1801
|
+
[InterceptableSpec::CbParent, :before_save],
|
|
1802
|
+
[InterceptableSpec::CbParent, :around_save_open],
|
|
1803
|
+
[InterceptableSpec::CbParent, :before_create],
|
|
1804
|
+
[InterceptableSpec::CbParent, :around_create_open],
|
|
1805
|
+
|
|
1806
|
+
[InterceptableSpec::CbCascadedChild, :before_save],
|
|
1807
|
+
[InterceptableSpec::CbCascadedChild, :around_save_open],
|
|
1808
|
+
[InterceptableSpec::CbCascadedChild, :before_create],
|
|
1809
|
+
[InterceptableSpec::CbCascadedChild, :around_create_open],
|
|
1810
|
+
|
|
1811
|
+
[InterceptableSpec::CbCascadedChild, :around_create_close],
|
|
1812
|
+
[InterceptableSpec::CbCascadedChild, :after_create],
|
|
1813
|
+
[InterceptableSpec::CbCascadedChild, :around_save_close],
|
|
1814
|
+
[InterceptableSpec::CbCascadedChild, :after_save],
|
|
1815
|
+
|
|
1816
|
+
[InterceptableSpec::CbParent, :around_create_close],
|
|
1817
|
+
[InterceptableSpec::CbParent, :after_create],
|
|
1818
|
+
[InterceptableSpec::CbParent, :around_save_close],
|
|
1819
|
+
[InterceptableSpec::CbParent, :after_save]
|
|
1820
|
+
]
|
|
1821
|
+
end
|
|
1822
|
+
|
|
1823
|
+
it 'calls callbacks in the right order' do
|
|
1824
|
+
parent.save!
|
|
1825
|
+
expect(registry.calls).to eq expected
|
|
1826
|
+
end
|
|
1778
1827
|
end
|
|
1779
1828
|
|
|
1780
|
-
|
|
1781
|
-
|
|
1829
|
+
context 'without around callbacks' do
|
|
1830
|
+
config_override :around_callbacks_for_embeds, false
|
|
1782
1831
|
|
|
1783
|
-
|
|
1784
|
-
|
|
1832
|
+
let(:expected) do
|
|
1833
|
+
[
|
|
1834
|
+
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1835
|
+
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1836
|
+
[InterceptableSpec::CbParent, :before_validation],
|
|
1837
|
+
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1838
|
+
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1839
|
+
|
|
1840
|
+
[InterceptableSpec::CbParent, :after_validation],
|
|
1841
|
+
[InterceptableSpec::CbParent, :before_save],
|
|
1842
|
+
[InterceptableSpec::CbParent, :around_save_open],
|
|
1843
|
+
[InterceptableSpec::CbParent, :before_create],
|
|
1844
|
+
[InterceptableSpec::CbParent, :around_create_open],
|
|
1845
|
+
|
|
1846
|
+
[InterceptableSpec::CbCascadedChild, :before_save],
|
|
1847
|
+
[InterceptableSpec::CbCascadedChild, :before_create],
|
|
1848
|
+
|
|
1849
|
+
[InterceptableSpec::CbCascadedChild, :after_create],
|
|
1850
|
+
[InterceptableSpec::CbCascadedChild, :after_save],
|
|
1851
|
+
|
|
1852
|
+
[InterceptableSpec::CbParent, :around_create_close],
|
|
1853
|
+
[InterceptableSpec::CbParent, :after_create],
|
|
1854
|
+
[InterceptableSpec::CbParent, :around_save_close],
|
|
1855
|
+
[InterceptableSpec::CbParent, :after_save]
|
|
1856
|
+
]
|
|
1857
|
+
end
|
|
1858
|
+
|
|
1859
|
+
it 'calls callbacks in the right order' do
|
|
1860
|
+
parent.save!
|
|
1861
|
+
expect(registry.calls).to eq expected
|
|
1862
|
+
end
|
|
1863
|
+
end
|
|
1864
|
+
end
|
|
1865
|
+
|
|
1866
|
+
context "with associations" do
|
|
1867
|
+
context "has_one" do
|
|
1868
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
1869
|
+
|
|
1870
|
+
let(:parent) do
|
|
1871
|
+
InterceptableSpec::CbHasOneParent.new(registry).tap do |parent|
|
|
1872
|
+
parent.child = InterceptableSpec::CbHasOneChild.new(registry)
|
|
1873
|
+
end
|
|
1874
|
+
end
|
|
1875
|
+
|
|
1876
|
+
let(:expected) do
|
|
1877
|
+
[
|
|
1878
|
+
[InterceptableSpec::CbHasOneParent, :before_validation],
|
|
1879
|
+
[InterceptableSpec::CbHasOneChild, :before_validation],
|
|
1880
|
+
[InterceptableSpec::CbHasOneChild, :after_validation],
|
|
1881
|
+
[InterceptableSpec::CbHasOneParent, :after_validation],
|
|
1882
|
+
[InterceptableSpec::CbHasOneParent, :before_save],
|
|
1883
|
+
|
|
1884
|
+
[InterceptableSpec::CbHasOneParent, :around_save_open],
|
|
1885
|
+
[InterceptableSpec::CbHasOneParent, :before_create],
|
|
1886
|
+
[InterceptableSpec::CbHasOneParent, :around_create_open],
|
|
1887
|
+
|
|
1888
|
+
[InterceptableSpec::CbHasOneParent, :insert_into_database],
|
|
1889
|
+
|
|
1890
|
+
[InterceptableSpec::CbHasOneChild, :before_validation],
|
|
1891
|
+
[InterceptableSpec::CbHasOneChild, :after_validation],
|
|
1892
|
+
[InterceptableSpec::CbHasOneChild, :before_save],
|
|
1893
|
+
[InterceptableSpec::CbHasOneChild, :around_save_open],
|
|
1894
|
+
[InterceptableSpec::CbHasOneChild, :before_create],
|
|
1895
|
+
[InterceptableSpec::CbHasOneChild, :around_create_open],
|
|
1896
|
+
|
|
1897
|
+
[InterceptableSpec::CbHasOneChild, :around_create_close],
|
|
1898
|
+
[InterceptableSpec::CbHasOneChild, :after_create],
|
|
1899
|
+
[InterceptableSpec::CbHasOneChild, :around_save_close],
|
|
1900
|
+
[InterceptableSpec::CbHasOneChild, :after_save],
|
|
1901
|
+
|
|
1902
|
+
[InterceptableSpec::CbHasOneParent, :around_create_close],
|
|
1903
|
+
[InterceptableSpec::CbHasOneParent, :after_create],
|
|
1904
|
+
[InterceptableSpec::CbHasOneParent, :around_save_close],
|
|
1905
|
+
[InterceptableSpec::CbHasOneParent, :after_save],
|
|
1906
|
+
]
|
|
1907
|
+
end
|
|
1908
|
+
|
|
1909
|
+
it 'calls callbacks in the right order' do
|
|
1910
|
+
parent.save!
|
|
1911
|
+
expect(registry.calls).to eq expected
|
|
1912
|
+
end
|
|
1913
|
+
end
|
|
1914
|
+
|
|
1915
|
+
context "embeds_one" do
|
|
1916
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
1917
|
+
|
|
1918
|
+
let(:parent) do
|
|
1919
|
+
InterceptableSpec::CbEmbedsOneParent.new(registry).tap do |parent|
|
|
1920
|
+
parent.child = InterceptableSpec::CbEmbedsOneChild.new(registry)
|
|
1921
|
+
end
|
|
1922
|
+
end
|
|
1923
|
+
|
|
1924
|
+
context "create" do
|
|
1925
|
+
context "with around callbacks" do
|
|
1926
|
+
config_override :around_callbacks_for_embeds, true
|
|
1927
|
+
|
|
1928
|
+
let(:expected) do
|
|
1929
|
+
[
|
|
1930
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1931
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1932
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_validation],
|
|
1933
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1934
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1935
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_validation],
|
|
1936
|
+
|
|
1937
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_save],
|
|
1938
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_open],
|
|
1939
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_create],
|
|
1940
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_create_open],
|
|
1941
|
+
|
|
1942
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_save],
|
|
1943
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_open],
|
|
1944
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_create],
|
|
1945
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_create_open],
|
|
1946
|
+
|
|
1947
|
+
[InterceptableSpec::CbEmbedsOneParent, :insert_into_database],
|
|
1948
|
+
|
|
1949
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_create_close],
|
|
1950
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_create],
|
|
1951
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_close],
|
|
1952
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_save],
|
|
1953
|
+
|
|
1954
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_create_close],
|
|
1955
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_create],
|
|
1956
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_close],
|
|
1957
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_save]
|
|
1958
|
+
]
|
|
1959
|
+
end
|
|
1960
|
+
|
|
1961
|
+
it 'calls callbacks in the right order' do
|
|
1962
|
+
parent.save!
|
|
1963
|
+
expect(registry.calls).to eq expected
|
|
1964
|
+
end
|
|
1965
|
+
end
|
|
1966
|
+
|
|
1967
|
+
context "without around callbacks" do
|
|
1968
|
+
config_override :around_callbacks_for_embeds, false
|
|
1969
|
+
|
|
1970
|
+
let(:expected) do
|
|
1971
|
+
[
|
|
1972
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1973
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1974
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_validation],
|
|
1975
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1976
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1977
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_validation],
|
|
1978
|
+
|
|
1979
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_save],
|
|
1980
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_open],
|
|
1981
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_create],
|
|
1982
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_create_open],
|
|
1983
|
+
|
|
1984
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_save],
|
|
1985
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_create],
|
|
1986
|
+
|
|
1987
|
+
[InterceptableSpec::CbEmbedsOneParent, :insert_into_database],
|
|
1988
|
+
|
|
1989
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_create],
|
|
1990
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_save],
|
|
1991
|
+
|
|
1992
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_create_close],
|
|
1993
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_create],
|
|
1994
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_close],
|
|
1995
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_save]
|
|
1996
|
+
]
|
|
1997
|
+
end
|
|
1998
|
+
|
|
1999
|
+
it 'calls callbacks in the right order' do
|
|
2000
|
+
parent.save!
|
|
2001
|
+
expect(registry.calls).to eq expected
|
|
2002
|
+
end
|
|
2003
|
+
end
|
|
2004
|
+
end
|
|
2005
|
+
|
|
2006
|
+
context "update" do
|
|
2007
|
+
context "with around callbacks" do
|
|
2008
|
+
config_override :around_callbacks_for_embeds, true
|
|
2009
|
+
|
|
2010
|
+
let(:expected) do
|
|
2011
|
+
[
|
|
2012
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
2013
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
2014
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_validation],
|
|
2015
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
2016
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
2017
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_validation],
|
|
2018
|
+
|
|
2019
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_save],
|
|
2020
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_open],
|
|
2021
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_update],
|
|
2022
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_update_open],
|
|
2023
|
+
|
|
2024
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_save],
|
|
2025
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_open],
|
|
2026
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_update],
|
|
2027
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_update_open],
|
|
2028
|
+
|
|
2029
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_update_close],
|
|
2030
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_update],
|
|
2031
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_close],
|
|
2032
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_save],
|
|
2033
|
+
|
|
2034
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_update_close],
|
|
2035
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_update],
|
|
2036
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_close],
|
|
2037
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_save]
|
|
2038
|
+
]
|
|
2039
|
+
end
|
|
2040
|
+
|
|
2041
|
+
it 'calls callbacks in the right order' do
|
|
2042
|
+
parent.callback_registry = nil
|
|
2043
|
+
parent.child.callback_registry = nil
|
|
2044
|
+
parent.save!
|
|
2045
|
+
|
|
2046
|
+
parent.callback_registry = registry
|
|
2047
|
+
parent.child.callback_registry = registry
|
|
2048
|
+
parent.name = "name"
|
|
2049
|
+
parent.child.age = 10
|
|
2050
|
+
|
|
2051
|
+
parent.save!
|
|
2052
|
+
expect(registry.calls).to eq expected
|
|
2053
|
+
end
|
|
2054
|
+
end
|
|
2055
|
+
|
|
2056
|
+
context "without around callbacks" do
|
|
2057
|
+
config_override :around_callbacks_for_embeds, false
|
|
2058
|
+
|
|
2059
|
+
let(:expected) do
|
|
2060
|
+
[
|
|
2061
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
2062
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
2063
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_validation],
|
|
2064
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
2065
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
2066
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_validation],
|
|
2067
|
+
|
|
2068
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_save],
|
|
2069
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_open],
|
|
2070
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_update],
|
|
2071
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_update_open],
|
|
2072
|
+
|
|
2073
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_save],
|
|
2074
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_update],
|
|
2075
|
+
|
|
2076
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_update],
|
|
2077
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_save],
|
|
2078
|
+
|
|
2079
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_update_close],
|
|
2080
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_update],
|
|
2081
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_close],
|
|
2082
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_save]
|
|
2083
|
+
]
|
|
2084
|
+
end
|
|
2085
|
+
|
|
2086
|
+
it 'calls callbacks in the right order' do
|
|
2087
|
+
parent.callback_registry = nil
|
|
2088
|
+
parent.child.callback_registry = nil
|
|
2089
|
+
parent.save!
|
|
2090
|
+
|
|
2091
|
+
parent.callback_registry = registry
|
|
2092
|
+
parent.child.callback_registry = registry
|
|
2093
|
+
parent.name = "name"
|
|
2094
|
+
parent.child.age = 10
|
|
2095
|
+
|
|
2096
|
+
parent.save!
|
|
2097
|
+
expect(registry.calls).to eq expected
|
|
2098
|
+
end
|
|
2099
|
+
end
|
|
2100
|
+
end
|
|
2101
|
+
end
|
|
2102
|
+
|
|
2103
|
+
context "has_many" do
|
|
2104
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
2105
|
+
|
|
2106
|
+
let(:parent) do
|
|
2107
|
+
InterceptableSpec::CbHasManyParent.new(registry).tap do |parent|
|
|
2108
|
+
parent.children = [
|
|
2109
|
+
InterceptableSpec::CbHasManyChild.new(registry),
|
|
2110
|
+
InterceptableSpec::CbHasManyChild.new(registry)
|
|
2111
|
+
]
|
|
2112
|
+
end
|
|
2113
|
+
end
|
|
2114
|
+
|
|
2115
|
+
let(:expected) do
|
|
2116
|
+
[
|
|
2117
|
+
[InterceptableSpec::CbHasManyParent, :before_validation],
|
|
2118
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
2119
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
2120
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
2121
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
2122
|
+
[InterceptableSpec::CbHasManyParent, :after_validation],
|
|
2123
|
+
|
|
2124
|
+
[InterceptableSpec::CbHasManyParent, :before_save],
|
|
2125
|
+
[InterceptableSpec::CbHasManyParent, :around_save_open],
|
|
2126
|
+
[InterceptableSpec::CbHasManyParent, :before_create],
|
|
2127
|
+
[InterceptableSpec::CbHasManyParent, :around_create_open],
|
|
2128
|
+
|
|
2129
|
+
[InterceptableSpec::CbHasManyParent, :insert_into_database],
|
|
2130
|
+
|
|
2131
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
2132
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
2133
|
+
[InterceptableSpec::CbHasManyChild, :before_save],
|
|
2134
|
+
[InterceptableSpec::CbHasManyChild, :around_save_open],
|
|
2135
|
+
[InterceptableSpec::CbHasManyChild, :before_create],
|
|
2136
|
+
[InterceptableSpec::CbHasManyChild, :around_create_open],
|
|
2137
|
+
[InterceptableSpec::CbHasManyChild, :around_create_close],
|
|
2138
|
+
[InterceptableSpec::CbHasManyChild, :after_create],
|
|
2139
|
+
[InterceptableSpec::CbHasManyChild, :around_save_close],
|
|
2140
|
+
[InterceptableSpec::CbHasManyChild, :after_save],
|
|
2141
|
+
|
|
2142
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
2143
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
2144
|
+
[InterceptableSpec::CbHasManyChild, :before_save],
|
|
2145
|
+
[InterceptableSpec::CbHasManyChild, :around_save_open],
|
|
2146
|
+
[InterceptableSpec::CbHasManyChild, :before_create],
|
|
2147
|
+
[InterceptableSpec::CbHasManyChild, :around_create_open],
|
|
2148
|
+
[InterceptableSpec::CbHasManyChild, :around_create_close],
|
|
2149
|
+
[InterceptableSpec::CbHasManyChild, :after_create],
|
|
2150
|
+
[InterceptableSpec::CbHasManyChild, :around_save_close],
|
|
2151
|
+
[InterceptableSpec::CbHasManyChild, :after_save],
|
|
2152
|
+
|
|
2153
|
+
[InterceptableSpec::CbHasManyParent, :around_create_close],
|
|
2154
|
+
[InterceptableSpec::CbHasManyParent, :after_create],
|
|
2155
|
+
[InterceptableSpec::CbHasManyParent, :around_save_close],
|
|
2156
|
+
[InterceptableSpec::CbHasManyParent, :after_save]
|
|
2157
|
+
]
|
|
2158
|
+
end
|
|
2159
|
+
|
|
2160
|
+
it 'calls callbacks in the right order' do
|
|
2161
|
+
parent.save!
|
|
2162
|
+
expect(registry.calls).to eq expected
|
|
2163
|
+
end
|
|
2164
|
+
end
|
|
2165
|
+
|
|
2166
|
+
context "embeds_many" do
|
|
2167
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
2168
|
+
|
|
2169
|
+
let(:parent) do
|
|
2170
|
+
InterceptableSpec::CbEmbedsManyParent.new(registry).tap do |parent|
|
|
2171
|
+
parent.children = [
|
|
2172
|
+
InterceptableSpec::CbEmbedsManyChild.new(registry),
|
|
2173
|
+
InterceptableSpec::CbEmbedsManyChild.new(registry),
|
|
2174
|
+
]
|
|
2175
|
+
end
|
|
2176
|
+
end
|
|
2177
|
+
|
|
2178
|
+
context "with around callbacks" do
|
|
2179
|
+
config_override :around_callbacks_for_embeds, true
|
|
2180
|
+
|
|
2181
|
+
let(:expected) do
|
|
2182
|
+
[
|
|
2183
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2184
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2185
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2186
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2187
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_validation],
|
|
2188
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2189
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2190
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2191
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2192
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_validation],
|
|
2193
|
+
|
|
2194
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_save],
|
|
2195
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_save_open],
|
|
2196
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_create],
|
|
2197
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_create_open],
|
|
2198
|
+
|
|
2199
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_save],
|
|
2200
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_open],
|
|
2201
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_save],
|
|
2202
|
+
|
|
2203
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_open],
|
|
2204
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_create],
|
|
2205
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_open],
|
|
2206
|
+
|
|
2207
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_create],
|
|
2208
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_open],
|
|
2209
|
+
|
|
2210
|
+
[InterceptableSpec::CbEmbedsManyParent, :insert_into_database],
|
|
2211
|
+
|
|
2212
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_close],
|
|
2213
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_create],
|
|
2214
|
+
|
|
2215
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_close],
|
|
2216
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_create],
|
|
2217
|
+
|
|
2218
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_close],
|
|
2219
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_save],
|
|
2220
|
+
|
|
2221
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_close],
|
|
2222
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_save],
|
|
2223
|
+
|
|
2224
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_create_close],
|
|
2225
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_create],
|
|
2226
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_save_close],
|
|
2227
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_save]
|
|
2228
|
+
]
|
|
2229
|
+
end
|
|
2230
|
+
|
|
2231
|
+
it 'calls callbacks in the right order' do
|
|
2232
|
+
parent.save!
|
|
2233
|
+
expect(registry.calls).to eq expected
|
|
2234
|
+
end
|
|
2235
|
+
end
|
|
2236
|
+
|
|
2237
|
+
context "without around callbacks" do
|
|
2238
|
+
config_override :around_callbacks_for_embeds, false
|
|
2239
|
+
|
|
2240
|
+
let(:expected) do
|
|
2241
|
+
[
|
|
2242
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2243
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2244
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2245
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2246
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_validation],
|
|
2247
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2248
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2249
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2250
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2251
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_validation],
|
|
2252
|
+
|
|
2253
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_save],
|
|
2254
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_save_open],
|
|
2255
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_create],
|
|
2256
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_create_open],
|
|
2257
|
+
|
|
2258
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_save],
|
|
2259
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_save],
|
|
2260
|
+
|
|
2261
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_create],
|
|
2262
|
+
|
|
2263
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_create],
|
|
2264
|
+
|
|
2265
|
+
[InterceptableSpec::CbEmbedsManyParent, :insert_into_database],
|
|
2266
|
+
|
|
2267
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_create],
|
|
2268
|
+
|
|
2269
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_create],
|
|
2270
|
+
|
|
2271
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_save],
|
|
2272
|
+
|
|
2273
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_save],
|
|
2274
|
+
|
|
2275
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_create_close],
|
|
2276
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_create],
|
|
2277
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_save_close],
|
|
2278
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_save]
|
|
2279
|
+
]
|
|
2280
|
+
end
|
|
2281
|
+
|
|
2282
|
+
it 'calls callbacks in the right order' do
|
|
2283
|
+
parent.save!
|
|
2284
|
+
expect(registry.calls).to eq expected
|
|
2285
|
+
end
|
|
2286
|
+
end
|
|
2287
|
+
end
|
|
2288
|
+
end
|
|
2289
|
+
|
|
2290
|
+
context "when accessing parent document from callbacks" do
|
|
2291
|
+
shared_examples 'accesses the correct parent' do
|
|
2292
|
+
it "accesses the correct parent in after_find" do
|
|
2293
|
+
expect(from_db.after_find_player).to eq(player._id)
|
|
2294
|
+
end
|
|
2295
|
+
|
|
2296
|
+
it "accesses the correct parent in after_initialize" do
|
|
2297
|
+
expect(from_db.after_initialize_player).to eq(player._id)
|
|
2298
|
+
end
|
|
2299
|
+
|
|
2300
|
+
it "accesses the correct parent in default" do
|
|
2301
|
+
expect(from_db.after_default_player).to eq(player._id)
|
|
2302
|
+
end
|
|
2303
|
+
|
|
2304
|
+
it "accesses the correct parent in unpersisted after_initialize" do
|
|
2305
|
+
expect(unpersisted.after_initialize_player).to eq(player._id)
|
|
2306
|
+
end
|
|
2307
|
+
end
|
|
2308
|
+
|
|
2309
|
+
context "when using create methods" do
|
|
2310
|
+
|
|
2311
|
+
context "when the child is an embeds_many association" do
|
|
2312
|
+
let!(:player) do
|
|
2313
|
+
Player.create!.tap do |player|
|
|
2314
|
+
player.implants.create!
|
|
2315
|
+
end
|
|
2316
|
+
end
|
|
2317
|
+
|
|
2318
|
+
let(:unpersisted) { player.implants.first }
|
|
2319
|
+
|
|
2320
|
+
before do
|
|
2321
|
+
# The default is originally set when creating this document, and it is
|
|
2322
|
+
# subsequently persisted to the database. Therefore when we retrieve
|
|
2323
|
+
# this document from the database, this field is already set, and
|
|
2324
|
+
# the default Proc is not called. This unset is needed to allow the
|
|
2325
|
+
# default Proc to be called when the document is retrieved from the
|
|
2326
|
+
# database.
|
|
2327
|
+
Player.find(player.id).implants.first.unset(:after_default_player)
|
|
2328
|
+
end
|
|
2329
|
+
|
|
2330
|
+
let(:from_db) do
|
|
2331
|
+
Player.find(player.id).implants.first
|
|
2332
|
+
end
|
|
2333
|
+
|
|
2334
|
+
include_examples 'accesses the correct parent'
|
|
2335
|
+
end
|
|
2336
|
+
|
|
2337
|
+
context "when the child is an embeds_one association" do
|
|
2338
|
+
let!(:player) do
|
|
2339
|
+
Player.create!.tap do |player|
|
|
2340
|
+
player.create_augmentation
|
|
2341
|
+
end
|
|
2342
|
+
end
|
|
2343
|
+
|
|
2344
|
+
let(:unpersisted) { player.augmentation }
|
|
2345
|
+
|
|
2346
|
+
before do
|
|
2347
|
+
Player.find(player.id).augmentation.unset(:after_default_player)
|
|
2348
|
+
end
|
|
2349
|
+
|
|
2350
|
+
let(:from_db) do
|
|
2351
|
+
Player.find(player.id).augmentation
|
|
2352
|
+
end
|
|
2353
|
+
|
|
2354
|
+
include_examples 'accesses the correct parent'
|
|
2355
|
+
end
|
|
2356
|
+
|
|
2357
|
+
context "when the child is a has_many association" do
|
|
2358
|
+
let!(:player) do
|
|
2359
|
+
Player.create!.tap do |player|
|
|
2360
|
+
player.weapons.create!
|
|
2361
|
+
end
|
|
2362
|
+
end
|
|
2363
|
+
|
|
2364
|
+
let(:unpersisted) { player.weapons.first }
|
|
2365
|
+
|
|
2366
|
+
before do
|
|
2367
|
+
Player.find(player.id).weapons.first.unset(:after_default_player)
|
|
2368
|
+
end
|
|
2369
|
+
|
|
2370
|
+
let(:from_db) do
|
|
2371
|
+
Player.find(player.id).weapons.first
|
|
2372
|
+
end
|
|
2373
|
+
|
|
2374
|
+
include_examples 'accesses the correct parent'
|
|
2375
|
+
end
|
|
2376
|
+
|
|
2377
|
+
context "when the child is a has_one association" do
|
|
2378
|
+
let!(:player) do
|
|
2379
|
+
Player.create!.tap do |player|
|
|
2380
|
+
player.create_powerup
|
|
2381
|
+
player.save!
|
|
2382
|
+
end
|
|
2383
|
+
end
|
|
2384
|
+
|
|
2385
|
+
let(:unpersisted) { player.powerup }
|
|
2386
|
+
|
|
2387
|
+
before do
|
|
2388
|
+
Player.find(player.id).powerup.unset(:after_default_player)
|
|
2389
|
+
end
|
|
2390
|
+
|
|
2391
|
+
let(:from_db) do
|
|
2392
|
+
Player.find(player.id).powerup
|
|
2393
|
+
end
|
|
2394
|
+
|
|
2395
|
+
include_examples 'accesses the correct parent'
|
|
2396
|
+
end
|
|
2397
|
+
|
|
2398
|
+
context "when the child is a has_and_belongs_to_many association" do
|
|
2399
|
+
let!(:player) do
|
|
2400
|
+
Player.create!.tap do |player|
|
|
2401
|
+
player.shields.create!
|
|
2402
|
+
end
|
|
2403
|
+
end
|
|
2404
|
+
|
|
2405
|
+
let(:unpersisted) { player.shields.first }
|
|
2406
|
+
|
|
2407
|
+
before do
|
|
2408
|
+
Player.find(player.id).shields.unset(:after_default_player)
|
|
2409
|
+
end
|
|
2410
|
+
|
|
2411
|
+
let(:from_db) do
|
|
2412
|
+
Player.find(player.id).shields.first
|
|
2413
|
+
end
|
|
2414
|
+
|
|
2415
|
+
include_examples 'accesses the correct parent'
|
|
2416
|
+
end
|
|
2417
|
+
end
|
|
2418
|
+
|
|
2419
|
+
context "when using build methods" do
|
|
2420
|
+
|
|
2421
|
+
context "when the child is an embeds_many association" do
|
|
2422
|
+
let!(:player) do
|
|
2423
|
+
Player.create!.tap do |player|
|
|
2424
|
+
player.implants.build
|
|
2425
|
+
player.implants.first.save!
|
|
2426
|
+
end
|
|
2427
|
+
end
|
|
2428
|
+
|
|
2429
|
+
let(:unpersisted) { player.implants.first }
|
|
2430
|
+
|
|
2431
|
+
before do
|
|
2432
|
+
Player.find(player.id).implants.first.unset(:after_default_player)
|
|
2433
|
+
end
|
|
2434
|
+
|
|
2435
|
+
let(:from_db) do
|
|
2436
|
+
Player.find(player.id).implants.first
|
|
2437
|
+
end
|
|
2438
|
+
|
|
2439
|
+
include_examples 'accesses the correct parent'
|
|
2440
|
+
end
|
|
2441
|
+
|
|
2442
|
+
context "when the child is an embeds_one association" do
|
|
2443
|
+
let!(:player) do
|
|
2444
|
+
Player.create!.tap do |player|
|
|
2445
|
+
player.build_augmentation
|
|
2446
|
+
player.save!
|
|
2447
|
+
end
|
|
2448
|
+
end
|
|
2449
|
+
|
|
2450
|
+
let(:unpersisted) { player.augmentation }
|
|
2451
|
+
|
|
2452
|
+
before do
|
|
2453
|
+
Player.find(player.id).augmentation.unset(:after_default_player)
|
|
2454
|
+
end
|
|
2455
|
+
|
|
2456
|
+
let(:from_db) do
|
|
2457
|
+
Player.find(player.id).augmentation
|
|
2458
|
+
end
|
|
2459
|
+
|
|
2460
|
+
include_examples 'accesses the correct parent'
|
|
2461
|
+
end
|
|
2462
|
+
|
|
2463
|
+
context "when the child is a has_many association" do
|
|
2464
|
+
let!(:player) do
|
|
2465
|
+
Player.create!.tap do |player|
|
|
2466
|
+
player.weapons.build
|
|
2467
|
+
player.weapons.first.save!
|
|
2468
|
+
end
|
|
2469
|
+
end
|
|
2470
|
+
|
|
2471
|
+
let(:unpersisted) { player.weapons.first }
|
|
2472
|
+
|
|
2473
|
+
before do
|
|
2474
|
+
Player.find(player.id).weapons.first.unset(:after_default_player)
|
|
2475
|
+
end
|
|
2476
|
+
|
|
2477
|
+
let(:from_db) do
|
|
2478
|
+
Player.find(player.id).weapons.first
|
|
2479
|
+
end
|
|
2480
|
+
|
|
2481
|
+
include_examples 'accesses the correct parent'
|
|
2482
|
+
end
|
|
2483
|
+
|
|
2484
|
+
context "when the child is a has_one association" do
|
|
2485
|
+
let!(:player) do
|
|
2486
|
+
Player.create!.tap do |player|
|
|
2487
|
+
player.build_powerup
|
|
2488
|
+
player.powerup.save!
|
|
2489
|
+
end
|
|
2490
|
+
end
|
|
2491
|
+
|
|
2492
|
+
let(:unpersisted) { player.powerup }
|
|
2493
|
+
|
|
2494
|
+
before do
|
|
2495
|
+
Player.find(player.id).powerup.unset(:after_default_player)
|
|
2496
|
+
end
|
|
2497
|
+
|
|
2498
|
+
let(:from_db) do
|
|
2499
|
+
Player.find(player.id).powerup
|
|
2500
|
+
end
|
|
2501
|
+
|
|
2502
|
+
include_examples 'accesses the correct parent'
|
|
2503
|
+
end
|
|
2504
|
+
|
|
2505
|
+
context "when the child is a has_and_belongs_to_many association" do
|
|
2506
|
+
let!(:player) do
|
|
2507
|
+
Player.create!.tap do |player|
|
|
2508
|
+
player.shields.build
|
|
2509
|
+
player.shields.first.save!
|
|
2510
|
+
end
|
|
2511
|
+
end
|
|
2512
|
+
|
|
2513
|
+
let(:unpersisted) { player.shields.first }
|
|
2514
|
+
|
|
2515
|
+
before do
|
|
2516
|
+
Player.find(player.id).shields.unset(:after_default_player)
|
|
2517
|
+
end
|
|
2518
|
+
|
|
2519
|
+
let(:from_db) do
|
|
2520
|
+
Player.find(player.id).shields.first
|
|
2521
|
+
end
|
|
2522
|
+
|
|
2523
|
+
include_examples 'accesses the correct parent'
|
|
2524
|
+
end
|
|
2525
|
+
end
|
|
2526
|
+
end
|
|
2527
|
+
|
|
2528
|
+
context "when accessing associations in defaults" do
|
|
2529
|
+
context "when not using autobuilding" do
|
|
2530
|
+
let(:band) { InterceptableBand.create(name: "Molejo") }
|
|
2531
|
+
let(:song) { band.songs.create(name: "Cilada") }
|
|
2532
|
+
|
|
2533
|
+
it "assigns the default correctly" do
|
|
2534
|
+
expect(song.band_name).to eq("Molejo")
|
|
2535
|
+
end
|
|
2536
|
+
end
|
|
2537
|
+
|
|
2538
|
+
context "when using autobuilding" do
|
|
2539
|
+
before do
|
|
2540
|
+
InterceptablePlane.create!.tap do |plane|
|
|
2541
|
+
plane.wings.create!
|
|
2542
|
+
end
|
|
2543
|
+
end
|
|
2544
|
+
|
|
2545
|
+
let(:plane) { InterceptablePlane.first }
|
|
2546
|
+
let(:wing) { InterceptableWing.first }
|
|
2547
|
+
let(:engine) { wing.engine }
|
|
2548
|
+
|
|
2549
|
+
it "sets the defaults correctly" do
|
|
2550
|
+
expect(wing._id).to eq("hello-wing")
|
|
2551
|
+
expect(wing.p_id).to eq(plane._id.to_s)
|
|
2552
|
+
expect(wing.e_id).to eq(engine._id.to_s)
|
|
2553
|
+
expect(engine._id).to eq("hello-engine-#{wing.id}")
|
|
2554
|
+
end
|
|
2555
|
+
end
|
|
2556
|
+
end
|
|
2557
|
+
|
|
2558
|
+
# This case is rather niche. The _ids method used to use the `.only` method
|
|
2559
|
+
# to get only the _ids for an association, which was causing a
|
|
2560
|
+
# MissingAttributeError to be raised when accessing another association. This
|
|
2561
|
+
# was fixed by using `.pluck` over `.only`. Look at MONGOID-5306 for a more
|
|
2562
|
+
# detailed explanation.
|
|
2563
|
+
context "when accessing _ids in validate and access an association in after_initialize" do
|
|
2564
|
+
it "doesn't raise AttributeNotLoaded" do
|
|
2565
|
+
company = InterceptableCompany.create!
|
|
2566
|
+
shop = InterceptableShop.create!(company: company)
|
|
2567
|
+
user = InterceptableUser.new
|
|
2568
|
+
user.company = company
|
|
2569
|
+
expect do
|
|
2570
|
+
user.save!
|
|
2571
|
+
end.to_not raise_error(Mongoid::Errors::AttributeNotLoaded)
|
|
2572
|
+
end
|
|
2573
|
+
end
|
|
2574
|
+
|
|
2575
|
+
context "when around callbacks for embedded are disabled" do
|
|
2576
|
+
config_override :around_callbacks_for_embeds, false
|
|
2577
|
+
|
|
2578
|
+
context "when around callback is defined" do
|
|
2579
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
2580
|
+
|
|
2581
|
+
let(:parent) do
|
|
2582
|
+
InterceptableSpec::CbEmbedsOneParent.new(registry).tap do |parent|
|
|
2583
|
+
parent.child = InterceptableSpec::CbEmbedsOneChild.new(registry)
|
|
2584
|
+
end
|
|
2585
|
+
end
|
|
2586
|
+
|
|
2587
|
+
before do
|
|
2588
|
+
expect(Mongoid.logger).to receive(:warn).with(/Around callbacks are disabled for embedded documents/).twice.and_call_original
|
|
2589
|
+
expect(Mongoid.logger).to receive(:warn).with(/To enable around callbacks for embedded documents/).twice.and_call_original
|
|
2590
|
+
end
|
|
2591
|
+
|
|
2592
|
+
it "logs a warning" do
|
|
2593
|
+
parent.save!
|
|
2594
|
+
end
|
|
1785
2595
|
end
|
|
1786
2596
|
end
|
|
1787
2597
|
end
|