mongoid 9.0.11 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -8
- data/README.md +5 -11
- data/Rakefile +35 -38
- data/lib/config/locales/en.yml +11 -0
- data/lib/mongoid/association/accessors.rb +19 -26
- data/lib/mongoid/association/bindable.rb +43 -45
- data/lib/mongoid/association/builders.rb +18 -15
- data/lib/mongoid/association/constrainable.rb +3 -5
- data/lib/mongoid/association/depending.rb +34 -38
- data/lib/mongoid/association/eager.rb +47 -13
- data/lib/mongoid/association/eager_loadable.rb +152 -24
- data/lib/mongoid/association/embedded/batchable.rb +28 -30
- data/lib/mongoid/association/embedded/cyclic.rb +8 -11
- data/lib/mongoid/association/embedded/eager.rb +1 -6
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +6 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +25 -22
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many.rb +24 -21
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +2 -6
- data/lib/mongoid/association/embedded/embeds_one.rb +20 -18
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +3 -7
- data/lib/mongoid/association/many.rb +75 -3
- data/lib/mongoid/association/marshalable.rb +0 -3
- data/lib/mongoid/association/nested/many.rb +18 -13
- data/lib/mongoid/association/nested/nested_buildable.rb +6 -9
- data/lib/mongoid/association/nested/one.rb +4 -7
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +0 -3
- data/lib/mongoid/association/options.rb +8 -7
- data/lib/mongoid/association/referenced/auto_save.rb +0 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +23 -5
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +1 -3
- data/lib/mongoid/association/referenced/belongs_to.rb +48 -43
- data/lib/mongoid/association/referenced/counter_cache.rb +5 -10
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +8 -4
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +52 -47
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_many/buildable.rb +11 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +107 -38
- data/lib/mongoid/association/referenced/has_many/proxy.rb +10 -6
- data/lib/mongoid/association/referenced/has_many.rb +30 -24
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_one.rb +26 -21
- data/lib/mongoid/association/referenced/syncable.rb +30 -34
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +0 -3
- data/lib/mongoid/association/relatable.rb +69 -66
- data/lib/mongoid/association.rb +12 -15
- data/lib/mongoid/atomic/modifiers.rb +65 -25
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +2 -4
- data/lib/mongoid/atomic/paths/embedded.rb +3 -6
- data/lib/mongoid/atomic/paths/root.rb +1 -4
- data/lib/mongoid/atomic/paths.rb +2 -3
- data/lib/mongoid/atomic.rb +0 -3
- data/lib/mongoid/attributes/dynamic.rb +6 -7
- data/lib/mongoid/attributes/nested.rb +8 -10
- data/lib/mongoid/attributes/projector.rb +7 -20
- data/lib/mongoid/attributes/readonly.rb +6 -11
- data/lib/mongoid/attributes.rb +18 -34
- data/lib/mongoid/cacheable.rb +24 -6
- data/lib/mongoid/clients/factory.rb +12 -15
- data/lib/mongoid/clients/options.rb +2 -5
- data/lib/mongoid/clients/sessions.rb +50 -60
- data/lib/mongoid/clients/storage_options.rb +1 -4
- data/lib/mongoid/clients/validators/storage.rb +2 -3
- data/lib/mongoid/clients/validators.rb +1 -2
- data/lib/mongoid/clients.rb +8 -11
- data/lib/mongoid/collection_configurable.rb +10 -14
- data/lib/mongoid/composable.rb +30 -34
- data/lib/mongoid/config/defaults.rb +7 -4
- data/lib/mongoid/config/encryption.rb +1 -3
- data/lib/mongoid/config/environment.rb +7 -16
- data/lib/mongoid/config/introspection.rb +14 -16
- data/lib/mongoid/config/options.rb +16 -10
- data/lib/mongoid/config/validators/async_query_executor.rb +3 -6
- data/lib/mongoid/config/validators/client.rb +12 -15
- data/lib/mongoid/config/validators/option.rb +3 -5
- data/lib/mongoid/config/validators.rb +3 -4
- data/lib/mongoid/config.rb +132 -42
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -4
- data/lib/mongoid/contextual/aggregable/mongo.rb +20 -22
- data/lib/mongoid/contextual/aggregable/none.rb +2 -4
- data/lib/mongoid/contextual/aggregable.rb +5 -7
- data/lib/mongoid/contextual/atomic.rb +20 -24
- data/lib/mongoid/contextual/command.rb +0 -3
- data/lib/mongoid/contextual/map_reduce.rb +12 -16
- data/lib/mongoid/contextual/memory.rb +72 -65
- data/lib/mongoid/contextual/mongo/documents_loader.rb +2 -3
- data/lib/mongoid/contextual/mongo.rb +169 -85
- data/lib/mongoid/contextual/none.rb +9 -9
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +18 -7
- data/lib/mongoid/copyable.rb +7 -9
- data/lib/mongoid/criteria/findable.rb +5 -7
- data/lib/mongoid/criteria/includable.rb +37 -8
- data/lib/mongoid/criteria/inspectable.rb +2 -5
- data/lib/mongoid/criteria/marshalable.rb +4 -8
- data/lib/mongoid/criteria/modifiable.rb +3 -11
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +34 -37
- data/lib/mongoid/criteria/queryable/aggregable.rb +9 -10
- data/lib/mongoid/criteria/queryable/expandable.rb +4 -9
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -10
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +20 -11
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -11
- data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -8
- data/lib/mongoid/criteria/queryable/extensions/range.rb +6 -9
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -12
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -6
- data/lib/mongoid/criteria/queryable/extensions/string.rb +5 -9
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +2 -12
- data/lib/mongoid/criteria/queryable/extensions.rb +18 -21
- data/lib/mongoid/criteria/queryable/key.rb +12 -18
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +31 -39
- data/lib/mongoid/criteria/queryable/optional.rb +17 -18
- data/lib/mongoid/criteria/queryable/options.rb +20 -9
- data/lib/mongoid/criteria/queryable/pipeline.rb +6 -9
- data/lib/mongoid/criteria/queryable/selectable.rb +131 -193
- data/lib/mongoid/criteria/queryable/selector.rb +20 -29
- data/lib/mongoid/criteria/queryable/smash.rb +1 -6
- data/lib/mongoid/criteria/queryable/storable.rb +20 -39
- data/lib/mongoid/criteria/queryable.rb +25 -15
- data/lib/mongoid/criteria/scopable.rb +5 -11
- data/lib/mongoid/criteria/translator.rb +5 -8
- data/lib/mongoid/criteria.rb +109 -54
- data/lib/mongoid/deprecable.rb +1 -4
- data/lib/mongoid/deprecation.rb +2 -6
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/encryptable.rb +1 -2
- data/lib/mongoid/equality.rb +4 -5
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/attribute_not_loaded.rb +1 -4
- data/lib/mongoid/errors/callback.rb +1 -4
- data/lib/mongoid/errors/create_collection_failure.rb +8 -11
- data/lib/mongoid/errors/criteria_argument_required.rb +2 -5
- data/lib/mongoid/errors/delete_restriction.rb +1 -4
- data/lib/mongoid/errors/document_not_destroyed.rb +1 -4
- data/lib/mongoid/errors/document_not_found.rb +16 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +7 -10
- data/lib/mongoid/errors/empty_config_file.rb +1 -4
- data/lib/mongoid/errors/immutable_attribute.rb +1 -4
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -4
- data/lib/mongoid/errors/invalid_async_query_executor.rb +2 -5
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +2 -5
- data/lib/mongoid/errors/invalid_collection.rb +1 -3
- data/lib/mongoid/errors/invalid_config_file.rb +1 -4
- data/lib/mongoid/errors/invalid_config_option.rb +2 -5
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +6 -10
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +2 -4
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -4
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +1 -4
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +1 -4
- data/lib/mongoid/errors/invalid_expression_operator.rb +3 -7
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_field_option.rb +2 -5
- data/lib/mongoid/errors/invalid_field_type.rb +1 -4
- data/lib/mongoid/errors/invalid_find.rb +1 -4
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -4
- data/lib/mongoid/errors/invalid_includes.rb +3 -6
- data/lib/mongoid/errors/invalid_index.rb +1 -4
- data/lib/mongoid/errors/invalid_options.rb +1 -4
- data/lib/mongoid/errors/invalid_path.rb +1 -4
- data/lib/mongoid/errors/invalid_persistence_option.rb +4 -7
- data/lib/mongoid/errors/invalid_query.rb +6 -11
- data/lib/mongoid/errors/invalid_relation.rb +10 -13
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -7
- data/lib/mongoid/errors/invalid_scope.rb +1 -4
- data/lib/mongoid/errors/invalid_session_nesting.rb +0 -3
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +2 -4
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_time.rb +1 -4
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +1 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -4
- data/lib/mongoid/errors/mixed_relations.rb +1 -3
- data/lib/mongoid/errors/mongoid_error.rb +7 -11
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +1 -4
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +1 -4
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +1 -4
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -4
- data/lib/mongoid/errors/no_metadata.rb +1 -4
- data/lib/mongoid/errors/no_parent.rb +1 -4
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -4
- data/lib/mongoid/errors/rollback.rb +0 -2
- data/lib/mongoid/errors/scope_overwrite.rb +2 -4
- data/lib/mongoid/errors/sessions_not_supported.rb +0 -3
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -3
- data/lib/mongoid/errors/transaction_error.rb +0 -3
- data/lib/mongoid/errors/transactions_not_supported.rb +0 -3
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +1 -4
- data/lib/mongoid/errors/unregistered_class.rb +1 -1
- data/lib/mongoid/errors/unsaved_document.rb +1 -3
- data/lib/mongoid/errors/unsupported_isolation_level.rb +22 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -4
- data/lib/mongoid/errors/validations.rb +3 -5
- data/lib/mongoid/errors.rb +72 -72
- data/lib/mongoid/evolvable.rb +0 -3
- data/lib/mongoid/extensions/array.rb +5 -7
- data/lib/mongoid/extensions/big_decimal.rb +6 -7
- data/lib/mongoid/extensions/binary.rb +3 -6
- data/lib/mongoid/extensions/boolean.rb +4 -7
- data/lib/mongoid/extensions/bson_document.rb +28 -0
- data/lib/mongoid/extensions/date.rb +10 -14
- data/lib/mongoid/extensions/date_time.rb +2 -6
- data/lib/mongoid/extensions/decimal128.rb +1 -5
- data/lib/mongoid/extensions/false_class.rb +3 -5
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +5 -10
- data/lib/mongoid/extensions/integer.rb +5 -10
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -1
- data/lib/mongoid/extensions/object.rb +9 -14
- data/lib/mongoid/extensions/object_id.rb +2 -6
- data/lib/mongoid/extensions/range.rb +14 -15
- data/lib/mongoid/extensions/raw_value.rb +0 -3
- data/lib/mongoid/extensions/regexp.rb +3 -6
- data/lib/mongoid/extensions/set.rb +3 -4
- data/lib/mongoid/extensions/string.rb +8 -12
- data/lib/mongoid/extensions/symbol.rb +3 -7
- data/lib/mongoid/extensions/time.rb +24 -26
- data/lib/mongoid/extensions/time_with_zone.rb +4 -7
- data/lib/mongoid/extensions/true_class.rb +3 -5
- data/lib/mongoid/extensions.rb +26 -26
- data/lib/mongoid/factory.rb +5 -9
- data/lib/mongoid/fields/encrypted.rb +0 -1
- data/lib/mongoid/fields/foreign_key.rb +9 -10
- data/lib/mongoid/fields/localized.rb +12 -12
- data/lib/mongoid/fields/standard.rb +5 -7
- data/lib/mongoid/fields/validators/macro.rb +23 -34
- data/lib/mongoid/fields/validators.rb +1 -2
- data/lib/mongoid/fields.rb +151 -58
- data/lib/mongoid/findable.rb +82 -53
- data/lib/mongoid/indexable/specification.rb +20 -6
- data/lib/mongoid/indexable/validators/options.rb +33 -40
- data/lib/mongoid/indexable.rb +26 -25
- data/lib/mongoid/inspectable.rb +4 -7
- data/lib/mongoid/interceptable.rb +41 -40
- data/lib/mongoid/loadable.rb +17 -18
- data/lib/mongoid/loggable.rb +4 -8
- data/lib/mongoid/matchable.rb +0 -2
- data/lib/mongoid/matcher/all.rb +2 -5
- data/lib/mongoid/matcher/and.rb +0 -3
- data/lib/mongoid/matcher/bits.rb +13 -8
- data/lib/mongoid/matcher/bits_all_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_all_set.rb +1 -3
- data/lib/mongoid/matcher/bits_any_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_any_set.rb +1 -3
- data/lib/mongoid/matcher/elem_match.rb +13 -15
- data/lib/mongoid/matcher/elem_match_expression.rb +0 -3
- data/lib/mongoid/matcher/eq.rb +0 -3
- data/lib/mongoid/matcher/eq_impl.rb +12 -17
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +4 -7
- data/lib/mongoid/matcher/exists.rb +1 -4
- data/lib/mongoid/matcher/expression.rb +5 -10
- data/lib/mongoid/matcher/expression_operator.rb +1 -3
- data/lib/mongoid/matcher/field_expression.rb +10 -13
- data/lib/mongoid/matcher/field_operator.rb +4 -6
- data/lib/mongoid/matcher/gt.rb +0 -3
- data/lib/mongoid/matcher/gte.rb +0 -3
- data/lib/mongoid/matcher/in.rb +9 -12
- data/lib/mongoid/matcher/lt.rb +0 -3
- data/lib/mongoid/matcher/lte.rb +0 -3
- data/lib/mongoid/matcher/mod.rb +4 -8
- data/lib/mongoid/matcher/ne.rb +0 -3
- data/lib/mongoid/matcher/nin.rb +0 -3
- data/lib/mongoid/matcher/nor.rb +1 -6
- data/lib/mongoid/matcher/not.rb +0 -3
- data/lib/mongoid/matcher/or.rb +0 -3
- data/lib/mongoid/matcher/regex.rb +11 -14
- data/lib/mongoid/matcher/size.rb +2 -5
- data/lib/mongoid/matcher/type.rb +32 -37
- data/lib/mongoid/matcher.rb +7 -15
- data/lib/mongoid/model_resolver.rb +1 -0
- data/lib/mongoid/persistable/creatable.rb +23 -7
- data/lib/mongoid/persistable/deletable.rb +6 -7
- data/lib/mongoid/persistable/destroyable.rb +2 -6
- data/lib/mongoid/persistable/incrementable.rb +1 -3
- data/lib/mongoid/persistable/logical.rb +3 -5
- data/lib/mongoid/persistable/maxable.rb +2 -4
- data/lib/mongoid/persistable/minable.rb +2 -4
- data/lib/mongoid/persistable/multipliable.rb +1 -3
- data/lib/mongoid/persistable/poppable.rb +2 -4
- data/lib/mongoid/persistable/pullable.rb +3 -5
- data/lib/mongoid/persistable/pushable.rb +5 -7
- data/lib/mongoid/persistable/renamable.rb +1 -3
- data/lib/mongoid/persistable/savable.rb +0 -3
- data/lib/mongoid/persistable/settable.rb +4 -13
- data/lib/mongoid/persistable/unsettable.rb +1 -3
- data/lib/mongoid/persistable/updatable.rb +16 -24
- data/lib/mongoid/persistable/upsertable.rb +8 -10
- data/lib/mongoid/persistable.rb +28 -27
- data/lib/mongoid/persistence_context.rb +34 -41
- data/lib/mongoid/pluckable.rb +0 -2
- data/lib/mongoid/positional.rb +5 -11
- data/lib/mongoid/railtie.rb +16 -22
- data/lib/mongoid/railties/console_sandbox.rb +6 -8
- data/lib/mongoid/railties/controller_runtime.rb +7 -11
- data/lib/mongoid/railties/database.rake +42 -44
- data/lib/mongoid/scopable.rb +23 -31
- data/lib/mongoid/search_indexable.rb +330 -0
- data/lib/mongoid/selectable.rb +1 -3
- data/lib/mongoid/serializable.rb +6 -8
- data/lib/mongoid/shardable.rb +8 -17
- data/lib/mongoid/stateful.rb +5 -10
- data/lib/mongoid/stringified_symbol.rb +5 -9
- data/lib/mongoid/tasks/database.rake +31 -32
- data/lib/mongoid/tasks/database.rb +28 -30
- data/lib/mongoid/tasks/encryption.rb +10 -15
- data/lib/mongoid/threaded/lifecycle.rb +6 -9
- data/lib/mongoid/threaded.rb +132 -32
- data/lib/mongoid/timestamps/created/short.rb +2 -3
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +8 -13
- data/lib/mongoid/timestamps/updated/short.rb +2 -3
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +4 -6
- data/lib/mongoid/touchable.rb +19 -11
- data/lib/mongoid/traversable.rb +3 -2
- data/lib/mongoid/validatable/associated.rb +1 -5
- data/lib/mongoid/validatable/format.rb +0 -2
- data/lib/mongoid/validatable/length.rb +0 -2
- data/lib/mongoid/validatable/localizable.rb +0 -3
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/numericality.rb +24 -3
- data/lib/mongoid/validatable/presence.rb +8 -10
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +12 -14
- data/lib/mongoid/validatable.rb +15 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +10 -11
- data/lib/mongoid.rb +30 -34
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -4
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +4 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +2 -2
- data/lib/rails/generators/mongoid/model/model_generator.rb +5 -8
- data/lib/rails/generators/mongoid_generator.rb +6 -10
- data/lib/rails/mongoid.rb +1 -3
- data/spec/integration/active_job_spec.rb +1 -2
- data/spec/integration/app_spec.rb +142 -178
- data/spec/integration/associations/belongs_to_spec.rb +30 -28
- data/spec/integration/associations/embedded_dirty_spec.rb +0 -1
- data/spec/integration/associations/embedded_spec.rb +41 -43
- data/spec/integration/associations/embeds_many_spec.rb +46 -29
- data/spec/integration/associations/embeds_one_spec.rb +2 -1
- data/spec/integration/associations/foreign_key_spec.rb +10 -11
- data/spec/integration/associations/foreign_key_spec_models.rb +8 -9
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +16 -13
- data/spec/integration/associations/has_many_spec.rb +17 -18
- data/spec/integration/associations/has_one_spec.rb +42 -45
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +36 -39
- data/spec/integration/associations/reverse_population_spec.rb +4 -5
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +18 -20
- data/spec/integration/atomic/modifiers_spec.rb +72 -52
- data/spec/integration/bson_regexp_raw_spec.rb +2 -3
- data/spec/integration/caching_spec.rb +68 -0
- data/spec/integration/callbacks_models.rb +11 -9
- data/spec/integration/callbacks_spec.rb +78 -80
- data/spec/integration/contextual/empty_spec.rb +19 -20
- data/spec/integration/criteria/alias_query_spec.rb +12 -19
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +23 -18
- data/spec/integration/criteria/logical_spec.rb +18 -19
- data/spec/integration/criteria/range_spec.rb +77 -86
- data/spec/integration/criteria/raw_value_spec.rb +122 -109
- data/spec/integration/criteria/time_with_zone_spec.rb +33 -24
- data/spec/integration/discriminator_key_spec.rb +85 -85
- data/spec/integration/discriminator_value_spec.rb +70 -73
- data/spec/integration/document_spec.rb +9 -10
- data/spec/integration/dots_and_dollars_spec.rb +104 -119
- data/spec/integration/encryption_spec.rb +8 -11
- data/spec/integration/i18n_fallbacks_spec.rb +7 -8
- data/spec/integration/isolation_state_spec.rb +241 -0
- data/spec/integration/matcher_examples_spec.rb +145 -168
- data/spec/integration/matcher_operator_data/in.yml +6 -6
- data/spec/integration/matcher_operator_spec.rb +16 -26
- data/spec/integration/matcher_spec.rb +31 -32
- data/spec/integration/persistence/collection_options_spec.rb +0 -2
- data/spec/integration/persistence/range_field_spec.rb +24 -2
- data/spec/integration/server_query_spec.rb +43 -37
- data/spec/integration/shardable_spec.rb +10 -11
- data/spec/integration/stringified_symbol_field_spec.rb +28 -43
- data/spec/lite_spec_helper.rb +11 -12
- data/spec/mongoid/association/accessors_spec.rb +197 -285
- data/spec/mongoid/association/auto_save_spec.rb +62 -93
- data/spec/mongoid/association/builders_spec.rb +121 -74
- data/spec/mongoid/association/constrainable_spec.rb +9 -22
- data/spec/mongoid/association/counter_cache_spec.rb +71 -104
- data/spec/mongoid/association/depending_spec.rb +166 -208
- data/spec/mongoid/association/eager_spec.rb +416 -80
- data/spec/mongoid/association/embedded/cyclic_spec.rb +36 -48
- data/spec/mongoid/association/embedded/dirty_spec.rb +15 -20
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +36 -54
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +8 -15
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +135 -175
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +25 -127
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +9 -14
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +38 -51
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1151 -1340
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -17
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +11 -11
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +25 -138
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +15 -23
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +18 -26
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +204 -273
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +5 -6
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -143
- data/spec/mongoid/association/macros_spec.rb +213 -300
- data/spec/mongoid/association/nested/many_spec.rb +51 -73
- data/spec/mongoid/association/nested/one_spec.rb +56 -80
- data/spec/mongoid/association/options_spec.rb +187 -310
- data/spec/mongoid/association/polymorphic_spec.rb +35 -53
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +55 -76
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +36 -41
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +81 -101
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +258 -345
- data/spec/mongoid/association/referenced/belongs_to_models.rb +4 -3
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +91 -294
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +42 -56
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +41 -32
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +36 -42
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +8 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +771 -975
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +9 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +5 -6
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +59 -177
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +29 -43
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +53 -53
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +104 -67
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +431 -675
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -11
- data/spec/mongoid/association/referenced/has_many_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_many_spec.rb +44 -188
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +26 -38
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +28 -29
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +29 -42
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +270 -332
- data/spec/mongoid/association/referenced/has_one_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_one_spec.rb +40 -188
- data/spec/mongoid/association/reflections_spec.rb +14 -24
- data/spec/mongoid/association/syncable_spec.rb +102 -125
- data/spec/mongoid/association_spec.rb +47 -70
- data/spec/mongoid/atomic/modifiers_spec.rb +184 -197
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +39 -52
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +35 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +9 -15
- data/spec/mongoid/atomic/paths_spec.rb +81 -117
- data/spec/mongoid/atomic_spec.rb +156 -171
- data/spec/mongoid/attributes/dynamic_spec.rb +5 -6
- data/spec/mongoid/attributes/nested_spec.rb +1219 -1692
- data/spec/mongoid/attributes/nested_spec_models.rb +8 -9
- data/spec/mongoid/attributes/projector_spec.rb +2 -6
- data/spec/mongoid/attributes/readonly_spec.rb +73 -97
- data/spec/mongoid/attributes_spec.rb +669 -826
- data/spec/mongoid/cacheable_spec.rb +74 -44
- data/spec/mongoid/changeable_spec.rb +591 -733
- data/spec/mongoid/clients/factory_spec.rb +122 -154
- data/spec/mongoid/clients/options_spec.rb +40 -59
- data/spec/mongoid/clients/sessions_spec.rb +25 -44
- data/spec/mongoid/clients/transactions_spec.rb +33 -50
- data/spec/mongoid/clients/transactions_spec_models.rb +3 -4
- data/spec/mongoid/clients_spec.rb +265 -355
- data/spec/mongoid/collection_configurable_spec.rb +9 -12
- data/spec/mongoid/composable_spec.rb +2 -9
- data/spec/mongoid/config/defaults_spec.rb +24 -31
- data/spec/mongoid/config/encryption_spec.rb +54 -57
- data/spec/mongoid/config/environment_spec.rb +30 -40
- data/spec/mongoid/config/introspection_spec.rb +42 -37
- data/spec/mongoid/config/options_spec.rb +14 -21
- data/spec/mongoid/config_spec.rb +145 -195
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +98 -135
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +4 -7
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +149 -187
- data/spec/mongoid/contextual/aggregable/none_spec.rb +14 -16
- data/spec/mongoid/contextual/atomic_spec.rb +223 -271
- data/spec/mongoid/contextual/map_reduce_spec.rb +110 -138
- data/spec/mongoid/contextual/memory_spec.rb +706 -854
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +12 -13
- data/spec/mongoid/contextual/mongo_spec.rb +1008 -1213
- data/spec/mongoid/contextual/none_spec.rb +54 -59
- data/spec/mongoid/contextual/short_circuit_spec.rb +139 -0
- data/spec/mongoid/copyable_spec.rb +254 -300
- data/spec/mongoid/copyable_spec_models.rb +0 -1
- data/spec/mongoid/criteria/findable_spec.rb +322 -387
- data/spec/mongoid/criteria/includable_spec.rb +421 -372
- data/spec/mongoid/criteria/includable_spec_models.rb +16 -7
- data/spec/mongoid/criteria/inspectable_spec.rb +11 -14
- data/spec/mongoid/criteria/marshalable_spec.rb +11 -14
- data/spec/mongoid/criteria/modifiable_spec.rb +366 -512
- data/spec/mongoid/criteria/options_spec.rb +2 -7
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +112 -141
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +8 -11
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +127 -184
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +123 -60
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +84 -117
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +44 -65
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +86 -108
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +94 -33
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +103 -138
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +95 -34
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +25 -38
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +26 -28
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +32 -54
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +136 -130
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +16 -24
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +15 -24
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +12 -19
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -63
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +28 -42
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +73 -96
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +71 -92
- data/spec/mongoid/criteria/queryable/key_spec.rb +32 -36
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +44 -49
- data/spec/mongoid/criteria/queryable/optional_spec.rb +373 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +172 -123
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +65 -87
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +41 -53
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +576 -680
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +7 -11
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +807 -998
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +154 -191
- data/spec/mongoid/criteria/queryable/selector_spec.rb +294 -390
- data/spec/mongoid/criteria/queryable/smash_spec.rb +6 -11
- data/spec/mongoid/criteria/queryable/storable_spec.rb +54 -81
- data/spec/mongoid/criteria/queryable_mql_spec.rb +92 -0
- data/spec/mongoid/criteria/scopable_spec.rb +102 -138
- data/spec/mongoid/criteria/translator_spec.rb +59 -60
- data/spec/mongoid/criteria_projection_spec.rb +81 -99
- data/spec/mongoid/criteria_spec.rb +935 -950
- data/spec/mongoid/document_fields_spec.rb +28 -30
- data/spec/mongoid/document_persistence_context_spec.rb +13 -15
- data/spec/mongoid/document_query_spec.rb +9 -12
- data/spec/mongoid/document_spec.rb +317 -409
- data/spec/mongoid/equality_spec.rb +69 -102
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -11
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +7 -10
- data/spec/mongoid/errors/callback_spec.rb +8 -11
- data/spec/mongoid/errors/delete_restriction_spec.rb +5 -8
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +7 -10
- data/spec/mongoid/errors/document_not_found_spec.rb +51 -61
- data/spec/mongoid/errors/invalid_collection_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_config_file_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_config_option_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_field_option_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_field_spec.rb +10 -11
- data/spec/mongoid/errors/invalid_field_type_spec.rb +9 -12
- data/spec/mongoid/errors/invalid_find_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_includes_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_index_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_path_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_relation_spec.rb +15 -16
- data/spec/mongoid/errors/invalid_scope_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -6
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_time_spec.rb +8 -11
- data/spec/mongoid/errors/inverse_not_found_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_relations_spec.rb +8 -11
- data/spec/mongoid/errors/mongoid_error_spec.rb +21 -24
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -9
- data/spec/mongoid/errors/no_client_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_client_database_spec.rb +9 -12
- data/spec/mongoid/errors/no_client_hosts_spec.rb +9 -12
- data/spec/mongoid/errors/no_clients_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_environment_spec.rb +8 -11
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +8 -11
- data/spec/mongoid/errors/no_metadata_spec.rb +7 -10
- data/spec/mongoid/errors/no_parent_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_attribute_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_document_spec.rb +6 -9
- data/spec/mongoid/errors/scope_overwrite_spec.rb +9 -12
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +9 -12
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -8
- data/spec/mongoid/errors/unsaved_document_spec.rb +8 -11
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +9 -12
- data/spec/mongoid/errors/validations_spec.rb +11 -14
- data/spec/mongoid/extensions/array_spec.rb +70 -92
- data/spec/mongoid/extensions/big_decimal_spec.rb +233 -313
- data/spec/mongoid/extensions/binary_spec.rb +21 -32
- data/spec/mongoid/extensions/boolean_spec.rb +52 -75
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +43 -54
- data/spec/mongoid/extensions/date_spec.rb +26 -38
- data/spec/mongoid/extensions/date_time_spec.rb +22 -32
- data/spec/mongoid/extensions/decimal128_spec.rb +12 -18
- data/spec/mongoid/extensions/false_class_spec.rb +10 -17
- data/spec/mongoid/extensions/float_spec.rb +40 -61
- data/spec/mongoid/extensions/hash_spec.rb +46 -64
- data/spec/mongoid/extensions/integer_spec.rb +40 -61
- data/spec/mongoid/extensions/module_spec.rb +13 -18
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -5
- data/spec/mongoid/extensions/object_id_spec.rb +159 -247
- data/spec/mongoid/extensions/object_spec.rb +31 -47
- data/spec/mongoid/extensions/range_spec.rb +112 -115
- data/spec/mongoid/extensions/raw_value_spec.rb +10 -12
- data/spec/mongoid/extensions/regexp_spec.rb +23 -36
- data/spec/mongoid/extensions/set_spec.rb +38 -49
- data/spec/mongoid/extensions/string_spec.rb +118 -167
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +29 -43
- data/spec/mongoid/extensions/symbol_spec.rb +12 -20
- data/spec/mongoid/extensions/time_spec.rb +160 -202
- data/spec/mongoid/extensions/time_with_zone_spec.rb +79 -105
- data/spec/mongoid/extensions/true_class_spec.rb +10 -17
- data/spec/mongoid/factory_spec.rb +125 -148
- data/spec/mongoid/fields/foreign_key_spec.rb +124 -169
- data/spec/mongoid/fields/localized_spec.rb +140 -185
- data/spec/mongoid/fields/standard_spec.rb +43 -59
- data/spec/mongoid/fields_spec.rb +751 -620
- data/spec/mongoid/findable_spec.rb +260 -228
- data/spec/mongoid/indexable/specification_spec.rb +42 -58
- data/spec/mongoid/indexable_spec.rb +260 -264
- data/spec/mongoid/inspectable_spec.rb +45 -55
- data/spec/mongoid/interceptable_spec.rb +784 -922
- data/spec/mongoid/interceptable_spec_models.rb +35 -35
- data/spec/mongoid/loading_spec.rb +47 -43
- data/spec/mongoid/loggable_spec.rb +3 -6
- data/spec/mongoid/matcher/extract_attribute_spec.rb +2 -6
- data/spec/mongoid/mongoizable_spec.rb +81 -90
- data/spec/mongoid/monkey_patches_spec.rb +4 -0
- data/spec/mongoid/persistable/creatable_spec.rb +181 -220
- data/spec/mongoid/persistable/deletable_spec.rb +139 -179
- data/spec/mongoid/persistable/destroyable_spec.rb +135 -164
- data/spec/mongoid/persistable/incrementable_spec.rb +65 -84
- data/spec/mongoid/persistable/logical_spec.rb +48 -61
- data/spec/mongoid/persistable/maxable_spec.rb +45 -44
- data/spec/mongoid/persistable/minable_spec.rb +45 -44
- data/spec/mongoid/persistable/multipliable_spec.rb +54 -69
- data/spec/mongoid/persistable/poppable_spec.rb +47 -60
- data/spec/mongoid/persistable/pullable_spec.rb +79 -103
- data/spec/mongoid/persistable/pushable_spec.rb +106 -131
- data/spec/mongoid/persistable/renamable_spec.rb +52 -65
- data/spec/mongoid/persistable/savable_spec.rb +152 -189
- data/spec/mongoid/persistable/settable_spec.rb +121 -145
- data/spec/mongoid/persistable/unsettable_spec.rb +56 -73
- data/spec/mongoid/persistable/updatable_spec.rb +185 -232
- data/spec/mongoid/persistable/upsertable_spec.rb +66 -77
- data/spec/mongoid/persistable_spec.rb +132 -139
- data/spec/mongoid/persistence_context_spec.rb +31 -89
- data/spec/mongoid/positional_spec.rb +67 -79
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +0 -3
- data/spec/mongoid/railties/console_sandbox_spec.rb +0 -1
- data/spec/mongoid/relations/proxy_spec.rb +0 -1
- data/spec/mongoid/reloadable_spec.rb +250 -145
- data/spec/mongoid/scopable_spec.rb +319 -398
- data/spec/mongoid/search_indexable_spec.rb +446 -41
- data/spec/mongoid/selectable_spec.rb +36 -51
- data/spec/mongoid/serializable_spec.rb +269 -312
- data/spec/mongoid/shardable_models.rb +5 -5
- data/spec/mongoid/shardable_spec.rb +44 -46
- data/spec/mongoid/stateful_spec.rb +55 -75
- data/spec/mongoid/tasks/database_rake_spec.rb +138 -141
- data/spec/mongoid/tasks/database_spec.rb +80 -80
- data/spec/mongoid/tasks/encryption_spec.rb +22 -20
- data/spec/mongoid/threaded_spec.rb +57 -83
- data/spec/mongoid/timestamps/created/short_spec.rb +12 -16
- data/spec/mongoid/timestamps/created_spec.rb +16 -20
- data/spec/mongoid/timestamps/timeless_spec.rb +31 -43
- data/spec/mongoid/timestamps/updated/short_spec.rb +21 -28
- data/spec/mongoid/timestamps/updated_spec.rb +18 -25
- data/spec/mongoid/timestamps_spec.rb +171 -188
- data/spec/mongoid/timestamps_spec_models.rb +12 -13
- data/spec/mongoid/touchable_spec.rb +330 -294
- data/spec/mongoid/touchable_spec_models.rb +35 -37
- data/spec/mongoid/traversable_spec.rb +435 -471
- data/spec/mongoid/validatable/associated_spec.rb +42 -60
- data/spec/mongoid/validatable/format_spec.rb +24 -34
- data/spec/mongoid/validatable/length_spec.rb +62 -86
- data/spec/mongoid/validatable/numericality_spec.rb +114 -23
- data/spec/mongoid/validatable/presence_spec.rb +149 -203
- data/spec/mongoid/validatable/uniqueness_spec.rb +632 -830
- data/spec/mongoid/validatable_spec.rb +71 -103
- data/spec/mongoid/warnings_spec.rb +5 -9
- data/spec/mongoid_spec.rb +25 -41
- data/spec/rails/controller_extension/controller_runtime_spec.rb +45 -49
- data/spec/rails/mongoid_spec.rb +15 -15
- data/spec/shared/lib/mrss/cluster_config.rb +5 -40
- data/spec/shared/lib/mrss/constraints.rb +7 -46
- data/spec/shared/lib/mrss/docker_runner.rb +10 -21
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -31
- data/spec/shared/lib/mrss/release/candidate.rb +18 -12
- data/spec/shared/lib/mrss/server_version_registry.rb +1 -5
- data/spec/shared/share/Dockerfile.erb +6 -8
- data/spec/shared/shlib/server.sh +0 -50
- data/spec/shared/shlib/set_env.sh +4 -10
- data/spec/spec_helper.rb +54 -31
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +1 -2
- data/spec/support/constraints.rb +8 -25
- data/spec/support/crypt/models.rb +7 -8
- data/spec/support/crypt.rb +6 -9
- data/spec/support/expectations.rb +21 -7
- data/spec/support/feature_sandbox.rb +1 -4
- data/spec/support/helpers.rb +0 -1
- data/spec/support/immutable_ids.rb +20 -21
- data/spec/support/macros.rb +1 -3
- data/spec/support/models/account.rb +4 -5
- data/spec/support/models/acolyte.rb +5 -5
- data/spec/support/models/actor.rb +3 -3
- data/spec/support/models/actress.rb +0 -1
- data/spec/support/models/address.rb +11 -11
- data/spec/support/models/address_component.rb +1 -1
- data/spec/support/models/address_number.rb +1 -1
- data/spec/support/models/agency.rb +1 -1
- data/spec/support/models/agent.rb +1 -1
- data/spec/support/models/album.rb +1 -2
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +4 -5
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +2 -2
- data/spec/support/models/armrest.rb +0 -1
- data/spec/support/models/array_field.rb +0 -1
- data/spec/support/models/article.rb +0 -1
- data/spec/support/models/artist.rb +16 -12
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +0 -1
- data/spec/support/models/audio.rb +2 -2
- data/spec/support/models/augmentation.rb +1 -2
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +0 -1
- data/spec/support/models/bar.rb +2 -2
- data/spec/support/models/basic.rb +0 -1
- data/spec/support/models/bed.rb +0 -1
- data/spec/support/models/big_palette.rb +0 -1
- data/spec/support/models/birthday.rb +3 -5
- data/spec/support/models/bolt.rb +0 -1
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +1 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -2
- data/spec/support/models/building.rb +0 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +2 -2
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +5 -6
- data/spec/support/models/car.rb +0 -1
- data/spec/support/models/cat.rb +0 -2
- data/spec/support/models/catalog.rb +0 -1
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +5 -6
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +0 -1
- data/spec/support/models/circuit.rb +2 -2
- data/spec/support/models/circus.rb +0 -1
- data/spec/support/models/code.rb +2 -1
- data/spec/support/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +0 -1
- data/spec/support/models/comment.rb +0 -1
- data/spec/support/models/company.rb +0 -1
- data/spec/support/models/consumption_period.rb +0 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +0 -1
- data/spec/support/models/country_code.rb +2 -3
- data/spec/support/models/courier_job.rb +2 -2
- data/spec/support/models/cover.rb +0 -1
- data/spec/support/models/crate.rb +0 -1
- data/spec/support/models/customer.rb +0 -1
- data/spec/support/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +0 -1
- data/spec/support/models/description.rb +0 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +2 -2
- data/spec/support/models/doctor.rb +0 -1
- data/spec/support/models/dog.rb +2 -2
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +0 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +2 -2
- data/spec/support/models/drug.rb +1 -1
- data/spec/support/models/dungeon.rb +1 -1
- data/spec/support/models/edit.rb +1 -1
- data/spec/support/models/email.rb +1 -1
- data/spec/support/models/employer.rb +1 -2
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +0 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +3 -4
- data/spec/support/models/exhibition.rb +1 -1
- data/spec/support/models/exhibitor.rb +1 -1
- data/spec/support/models/explosion.rb +1 -1
- data/spec/support/models/eye.rb +0 -1
- data/spec/support/models/eye_bowl.rb +2 -3
- data/spec/support/models/face.rb +2 -3
- data/spec/support/models/fanatic.rb +1 -1
- data/spec/support/models/favorite.rb +1 -1
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +0 -1
- data/spec/support/models/fish.rb +0 -1
- data/spec/support/models/folder.rb +0 -2
- data/spec/support/models/folder_item.rb +1 -3
- data/spec/support/models/fruits.rb +9 -5
- data/spec/support/models/game.rb +3 -4
- data/spec/support/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +0 -1
- data/spec/support/models/hole.rb +0 -1
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +2 -2
- data/spec/support/models/html_writer.rb +0 -1
- data/spec/support/models/id_key.rb +3 -3
- data/spec/support/models/idnodef.rb +0 -1
- data/spec/support/models/image.rb +0 -1
- data/spec/support/models/implant.rb +1 -2
- data/spec/support/models/instrument.rb +2 -3
- data/spec/support/models/item.rb +2 -2
- data/spec/support/models/jar.rb +1 -2
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +2 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +0 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +0 -1
- data/spec/support/models/line_item.rb +1 -1
- data/spec/support/models/location.rb +1 -1
- data/spec/support/models/login.rb +1 -2
- data/spec/support/models/manufacturer.rb +0 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +1 -1
- data/spec/support/models/message.rb +1 -2
- data/spec/support/models/minim.rb +0 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/modifier_models.rb +25 -0
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -2
- data/spec/support/models/name.rb +4 -5
- data/spec/support/models/name_only.rb +0 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +3 -3
- data/spec/support/models/nut.rb +0 -1
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +1 -1
- data/spec/support/models/ordered_post.rb +1 -1
- data/spec/support/models/ordered_preference.rb +1 -1
- data/spec/support/models/oscar.rb +1 -1
- data/spec/support/models/other_owner_object.rb +0 -1
- data/spec/support/models/override.rb +3 -11
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +0 -1
- data/spec/support/models/page.rb +3 -3
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +2 -2
- data/spec/support/models/parent.rb +2 -2
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +0 -1
- data/spec/support/models/patient.rb +2 -2
- data/spec/support/models/pdf_writer.rb +0 -1
- data/spec/support/models/pencil.rb +0 -1
- data/spec/support/models/person.rb +32 -28
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +1 -2
- data/spec/support/models/piano.rb +0 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +5 -5
- data/spec/support/models/post.rb +12 -12
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +1 -2
- data/spec/support/models/preference.rb +2 -2
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +3 -3
- data/spec/support/models/profile.rb +2 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +2 -2
- data/spec/support/models/publication/encyclopedia.rb +0 -1
- data/spec/support/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +0 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +1 -1
- data/spec/support/models/question.rb +2 -2
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +2 -3
- data/spec/support/models/registry.rb +1 -1
- data/spec/support/models/role.rb +1 -1
- data/spec/support/models/root_category.rb +1 -1
- data/spec/support/models/sandbox/app/models/app_models_message.rb +0 -1
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_user.rb +0 -1
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +0 -1
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +0 -1
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +0 -1
- data/spec/support/models/seat.rb +0 -1
- data/spec/support/models/seo.rb +1 -1
- data/spec/support/models/series.rb +1 -1
- data/spec/support/models/server.rb +1 -1
- data/spec/support/models/service.rb +2 -2
- data/spec/support/models/shape.rb +3 -3
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +2 -2
- data/spec/support/models/shipment_address.rb +0 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +0 -1
- data/spec/support/models/shop.rb +2 -2
- data/spec/support/models/short_agent.rb +0 -1
- data/spec/support/models/short_quiz.rb +1 -1
- data/spec/support/models/simple.rb +1 -1
- data/spec/support/models/slave.rb +1 -1
- data/spec/support/models/song.rb +1 -2
- data/spec/support/models/sound.rb +2 -2
- data/spec/support/models/spacer.rb +0 -1
- data/spec/support/models/square.rb +0 -1
- data/spec/support/models/staff.rb +0 -1
- data/spec/support/models/store_as_dup_test1.rb +2 -2
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +2 -2
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +1 -2
- data/spec/support/models/sub_item.rb +0 -1
- data/spec/support/models/subscription.rb +2 -2
- data/spec/support/models/survey.rb +2 -2
- data/spec/support/models/symptom.rb +2 -2
- data/spec/support/models/system_role.rb +2 -3
- data/spec/support/models/tag.rb +2 -2
- data/spec/support/models/target.rb +1 -1
- data/spec/support/models/template.rb +1 -1
- data/spec/support/models/thing.rb +1 -1
- data/spec/support/models/threadlocker.rb +0 -1
- data/spec/support/models/title.rb +0 -1
- data/spec/support/models/tool.rb +3 -3
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +0 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +2 -3
- data/spec/support/models/truck.rb +0 -1
- data/spec/support/models/updatable.rb +0 -1
- data/spec/support/models/user.rb +3 -4
- data/spec/support/models/user_account.rb +3 -3
- data/spec/support/models/validation_callback.rb +4 -4
- data/spec/support/models/vehicle.rb +2 -3
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +0 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +2 -2
- data/spec/support/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +0 -1
- data/spec/support/models/weapon.rb +1 -2
- data/spec/support/models/wiki_page.rb +2 -3
- data/spec/support/models/word.rb +2 -2
- data/spec/support/models/word_origin.rb +1 -2
- data/spec/support/models/writer.rb +3 -3
- data/spec/support/rails_mock.rb +7 -12
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/sinatra_mock.rb +4 -2
- data/spec/support/spec_config.rb +19 -18
- metadata +14 -2
|
@@ -1,276 +1,256 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
5
|
-
require
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
require 'support/immutable_ids'
|
|
6
5
|
|
|
7
6
|
describe Mongoid::Persistable::Updatable do
|
|
8
7
|
extend Mongoid::ImmutableIds
|
|
9
|
-
immutable_id_examples_as "persisted _ids are immutable"
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
context "when the field is aliased" do
|
|
9
|
+
immutable_id_examples_as 'persisted _ids are immutable'
|
|
14
10
|
|
|
11
|
+
describe '#update_attribute' do
|
|
12
|
+
context 'when the field is aliased' do
|
|
15
13
|
let(:person) do
|
|
16
14
|
Person.create!
|
|
17
15
|
end
|
|
18
16
|
|
|
19
|
-
context
|
|
20
|
-
|
|
17
|
+
context 'when the setter is overridden' do
|
|
21
18
|
before do
|
|
22
|
-
person.update_attribute(:overridden_setter,
|
|
19
|
+
person.update_attribute(:overridden_setter, 'value')
|
|
23
20
|
end
|
|
24
21
|
|
|
25
|
-
it
|
|
26
|
-
expect(person.overridden_setter).to eq(
|
|
22
|
+
it 'updates the field' do
|
|
23
|
+
expect(person.overridden_setter).to eq('value')
|
|
27
24
|
end
|
|
28
25
|
|
|
29
|
-
it
|
|
30
|
-
expect(person).
|
|
26
|
+
it 'clears the dirty attributes' do
|
|
27
|
+
expect(person).not_to be_changed
|
|
31
28
|
end
|
|
32
29
|
|
|
33
|
-
it
|
|
30
|
+
it 'calls the overridden setter' do
|
|
34
31
|
expect(person.instance_variable_get(:@override_called)).to be true
|
|
35
32
|
end
|
|
36
33
|
|
|
37
|
-
it
|
|
38
|
-
expect(person.reload.overridden_setter).to eq(
|
|
34
|
+
it 'persists the changes' do
|
|
35
|
+
expect(person.reload.overridden_setter).to eq('value')
|
|
39
36
|
end
|
|
40
37
|
end
|
|
41
38
|
|
|
42
|
-
context
|
|
43
|
-
|
|
39
|
+
context 'when setting via the field name' do
|
|
44
40
|
before do
|
|
45
|
-
person.update_attribute(:t,
|
|
41
|
+
person.update_attribute(:t, 'testing')
|
|
46
42
|
end
|
|
47
43
|
|
|
48
|
-
it
|
|
49
|
-
expect(person.t).to eq(
|
|
44
|
+
it 'updates the field' do
|
|
45
|
+
expect(person.t).to eq('testing')
|
|
50
46
|
end
|
|
51
47
|
|
|
52
|
-
it
|
|
53
|
-
expect(person.reload.t).to eq(
|
|
48
|
+
it 'persists the changes' do
|
|
49
|
+
expect(person.reload.t).to eq('testing')
|
|
54
50
|
end
|
|
55
51
|
end
|
|
56
52
|
|
|
57
|
-
context
|
|
58
|
-
|
|
53
|
+
context 'when setting via the field alias' do
|
|
59
54
|
before do
|
|
60
|
-
person.update_attribute(:test,
|
|
55
|
+
person.update_attribute(:test, 'testing')
|
|
61
56
|
end
|
|
62
57
|
|
|
63
|
-
it
|
|
64
|
-
expect(person.t).to eq(
|
|
58
|
+
it 'updates the field' do
|
|
59
|
+
expect(person.t).to eq('testing')
|
|
65
60
|
end
|
|
66
61
|
|
|
67
|
-
it
|
|
68
|
-
expect(person.reload.t).to eq(
|
|
62
|
+
it 'persists the changes' do
|
|
63
|
+
expect(person.reload.t).to eq('testing')
|
|
69
64
|
end
|
|
70
65
|
end
|
|
71
66
|
end
|
|
72
67
|
|
|
73
|
-
context
|
|
74
|
-
|
|
68
|
+
context 'when setting an array field' do
|
|
75
69
|
let(:person) do
|
|
76
70
|
Person.create!(aliases: [])
|
|
77
71
|
end
|
|
78
72
|
|
|
79
73
|
before do
|
|
80
|
-
person.update_attribute(:aliases, person.aliases <<
|
|
74
|
+
person.update_attribute(:aliases, person.aliases << 'Bond')
|
|
81
75
|
end
|
|
82
76
|
|
|
83
|
-
it
|
|
84
|
-
expect(person.aliases).to eq([
|
|
77
|
+
it 'sets the new value in the document' do
|
|
78
|
+
expect(person.aliases).to eq([ 'Bond' ])
|
|
85
79
|
end
|
|
86
80
|
|
|
87
|
-
it
|
|
88
|
-
expect(person.reload.aliases).to eq([
|
|
81
|
+
it 'persists the changes' do
|
|
82
|
+
expect(person.reload.aliases).to eq([ 'Bond' ])
|
|
89
83
|
end
|
|
90
84
|
end
|
|
91
85
|
|
|
92
|
-
context
|
|
93
|
-
|
|
94
|
-
context "when the field is true" do
|
|
95
|
-
|
|
86
|
+
context 'when setting a boolean field' do
|
|
87
|
+
context 'when the field is true' do
|
|
96
88
|
let(:person) do
|
|
97
89
|
Person.new(terms: true)
|
|
98
90
|
end
|
|
99
91
|
|
|
100
|
-
context
|
|
101
|
-
|
|
92
|
+
context 'when setting to false' do
|
|
102
93
|
before do
|
|
103
94
|
person.update_attribute(:terms, false)
|
|
104
95
|
end
|
|
105
96
|
|
|
106
|
-
it
|
|
97
|
+
it 'persists the document' do
|
|
107
98
|
expect(person).to be_persisted
|
|
108
99
|
end
|
|
109
100
|
|
|
110
|
-
it
|
|
101
|
+
it 'changes the attribute value' do
|
|
111
102
|
expect(person.terms).to be false
|
|
112
103
|
end
|
|
113
104
|
|
|
114
|
-
it
|
|
105
|
+
it 'persists the changes' do
|
|
115
106
|
expect(person.reload.terms).to be false
|
|
116
107
|
end
|
|
117
108
|
end
|
|
118
109
|
end
|
|
119
110
|
end
|
|
120
111
|
|
|
121
|
-
context
|
|
122
|
-
|
|
123
|
-
it "raises exception for an unknown attribute " do
|
|
112
|
+
context 'when dynamic attributes are not enabled' do
|
|
113
|
+
it 'raises exception for an unknown attribute' do
|
|
124
114
|
account = Account.create!(name: 'Foobar')
|
|
125
115
|
|
|
126
|
-
expect
|
|
127
|
-
account.update_attribute(:somethingnew,
|
|
128
|
-
|
|
116
|
+
expect do
|
|
117
|
+
account.update_attribute(:somethingnew, 'somethingnew')
|
|
118
|
+
end.to raise_error(Mongoid::Errors::UnknownAttribute)
|
|
129
119
|
end
|
|
130
120
|
|
|
131
|
-
it
|
|
121
|
+
it 'updates value of aliased field' do
|
|
132
122
|
person = Person.create!
|
|
133
|
-
person.update_attribute(:t,
|
|
134
|
-
expect(person.reload.t).to eq
|
|
135
|
-
expect(person.test).to eq
|
|
123
|
+
person.update_attribute(:t, 'test_value')
|
|
124
|
+
expect(person.reload.t).to eq 'test_value'
|
|
125
|
+
expect(person.test).to eq 'test_value'
|
|
136
126
|
end
|
|
137
127
|
end
|
|
138
128
|
|
|
139
|
-
context
|
|
140
|
-
|
|
129
|
+
context 'when provided a symbol attribute name' do
|
|
141
130
|
let(:post) do
|
|
142
131
|
Post.new
|
|
143
132
|
end
|
|
144
133
|
|
|
145
|
-
context
|
|
146
|
-
|
|
134
|
+
context 'when the document is valid' do
|
|
147
135
|
before do
|
|
148
|
-
post.update_attribute(:title,
|
|
136
|
+
post.update_attribute(:title, 'Testing')
|
|
149
137
|
end
|
|
150
138
|
|
|
151
|
-
it
|
|
152
|
-
expect(post.title).to eq(
|
|
139
|
+
it 'sets the attribute' do
|
|
140
|
+
expect(post.title).to eq('Testing')
|
|
153
141
|
end
|
|
154
142
|
|
|
155
|
-
it
|
|
143
|
+
it 'saves the document' do
|
|
156
144
|
expect(post).to be_persisted
|
|
157
145
|
end
|
|
158
146
|
end
|
|
159
147
|
|
|
160
|
-
context
|
|
161
|
-
|
|
148
|
+
context 'when updating to the same value' do
|
|
162
149
|
before do
|
|
163
|
-
post.update_attribute(:title,
|
|
150
|
+
post.update_attribute(:title, 'Testing')
|
|
164
151
|
end
|
|
165
152
|
|
|
166
|
-
it
|
|
167
|
-
expect(post.update_attribute(:title,
|
|
153
|
+
it 'returns true' do
|
|
154
|
+
expect(post.update_attribute(:title, 'Testing')).to be true
|
|
168
155
|
end
|
|
169
156
|
end
|
|
170
157
|
|
|
171
|
-
context
|
|
172
|
-
|
|
158
|
+
context 'when the document is invalid' do
|
|
173
159
|
before do
|
|
174
|
-
post.update_attribute(:title,
|
|
160
|
+
post.update_attribute(:title, '$invalid')
|
|
175
161
|
end
|
|
176
162
|
|
|
177
|
-
it
|
|
178
|
-
expect(post.title).to eq(
|
|
163
|
+
it 'sets the attribute' do
|
|
164
|
+
expect(post.title).to eq('$invalid')
|
|
179
165
|
end
|
|
180
166
|
|
|
181
|
-
it
|
|
167
|
+
it 'saves the document' do
|
|
182
168
|
expect(post).to be_persisted
|
|
183
169
|
end
|
|
184
170
|
end
|
|
185
171
|
|
|
186
|
-
context
|
|
187
|
-
|
|
172
|
+
context 'when the document has been destroyed' do
|
|
188
173
|
before do
|
|
189
174
|
post.delete
|
|
190
175
|
end
|
|
191
176
|
|
|
192
|
-
it
|
|
193
|
-
expect
|
|
194
|
-
post.update_attribute(:title,
|
|
195
|
-
|
|
177
|
+
it 'raises an error' do
|
|
178
|
+
expect do
|
|
179
|
+
post.update_attribute(:title, 'something')
|
|
180
|
+
end.to raise_error(RuntimeError)
|
|
196
181
|
end
|
|
197
182
|
end
|
|
198
183
|
end
|
|
199
184
|
|
|
200
|
-
context
|
|
201
|
-
|
|
185
|
+
context 'when provided a string attribute name' do
|
|
202
186
|
let(:post) do
|
|
203
187
|
Post.new
|
|
204
188
|
end
|
|
205
189
|
|
|
206
|
-
context
|
|
207
|
-
|
|
190
|
+
context 'when the document is valid' do
|
|
208
191
|
before do
|
|
209
|
-
post.update_attribute(
|
|
192
|
+
post.update_attribute('title', 'Testing')
|
|
210
193
|
end
|
|
211
194
|
|
|
212
|
-
it
|
|
213
|
-
expect(post.title).to eq(
|
|
195
|
+
it 'sets the attribute' do
|
|
196
|
+
expect(post.title).to eq('Testing')
|
|
214
197
|
end
|
|
215
198
|
|
|
216
|
-
it
|
|
199
|
+
it 'saves the document' do
|
|
217
200
|
expect(post).to be_persisted
|
|
218
201
|
end
|
|
219
202
|
end
|
|
220
203
|
|
|
221
|
-
context
|
|
222
|
-
|
|
204
|
+
context 'when the document is invalid' do
|
|
223
205
|
before do
|
|
224
|
-
post.update_attribute(
|
|
206
|
+
post.update_attribute('title', '$invalid')
|
|
225
207
|
end
|
|
226
208
|
|
|
227
|
-
it
|
|
228
|
-
expect(post.title).to eq(
|
|
209
|
+
it 'sets the attribute' do
|
|
210
|
+
expect(post.title).to eq('$invalid')
|
|
229
211
|
end
|
|
230
212
|
|
|
231
|
-
it
|
|
213
|
+
it 'saves the document' do
|
|
232
214
|
expect(post).to be_persisted
|
|
233
215
|
end
|
|
234
216
|
end
|
|
235
217
|
end
|
|
236
218
|
|
|
237
|
-
context
|
|
219
|
+
context 'when persisting a localized field' do
|
|
238
220
|
with_default_i18n_configs
|
|
239
221
|
|
|
240
222
|
let!(:product) do
|
|
241
|
-
Product.create!(description:
|
|
223
|
+
Product.create!(description: 'The bomb')
|
|
242
224
|
end
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
::I18n.locale = :de
|
|
246
|
-
product.update_attribute(:description, "Die Bombe")
|
|
225
|
+
let(:attributes) do
|
|
226
|
+
product.attributes['description']
|
|
247
227
|
end
|
|
248
228
|
|
|
249
|
-
|
|
250
|
-
|
|
229
|
+
before do
|
|
230
|
+
I18n.locale = :de
|
|
231
|
+
product.update_attribute(:description, 'Die Bombe')
|
|
251
232
|
end
|
|
252
233
|
|
|
253
|
-
it
|
|
254
|
-
expect(attributes[
|
|
234
|
+
it 'persists the en locale' do
|
|
235
|
+
expect(attributes['en']).to eq('The bomb')
|
|
255
236
|
end
|
|
256
237
|
|
|
257
|
-
it
|
|
258
|
-
expect(attributes[
|
|
238
|
+
it 'persists the de locale' do
|
|
239
|
+
expect(attributes['de']).to eq('Die Bombe')
|
|
259
240
|
end
|
|
260
241
|
end
|
|
261
242
|
|
|
262
|
-
context
|
|
263
|
-
|
|
243
|
+
context 'when updating a deeply embedded document' do
|
|
264
244
|
let!(:person) do
|
|
265
245
|
Person.create!
|
|
266
246
|
end
|
|
267
247
|
|
|
268
248
|
let!(:address) do
|
|
269
|
-
person.addresses.create!(street:
|
|
249
|
+
person.addresses.create!(street: 'Winterfeldtstr')
|
|
270
250
|
end
|
|
271
251
|
|
|
272
252
|
let!(:location) do
|
|
273
|
-
address.locations.create!(name:
|
|
253
|
+
address.locations.create!(name: 'work')
|
|
274
254
|
end
|
|
275
255
|
|
|
276
256
|
let(:from_db) do
|
|
@@ -278,20 +258,19 @@ describe Mongoid::Persistable::Updatable do
|
|
|
278
258
|
end
|
|
279
259
|
|
|
280
260
|
before do
|
|
281
|
-
from_db.update_attribute(:name,
|
|
261
|
+
from_db.update_attribute(:name, 'home')
|
|
282
262
|
end
|
|
283
263
|
|
|
284
|
-
it
|
|
285
|
-
expect(from_db.name).to eq(
|
|
264
|
+
it 'updates the attribute' do
|
|
265
|
+
expect(from_db.name).to eq('home')
|
|
286
266
|
end
|
|
287
267
|
|
|
288
|
-
it
|
|
289
|
-
expect(from_db.reload.name).to eq(
|
|
268
|
+
it 'persists the changes' do
|
|
269
|
+
expect(from_db.reload.name).to eq('home')
|
|
290
270
|
end
|
|
291
271
|
end
|
|
292
272
|
|
|
293
273
|
context 'when the field is read-only' do
|
|
294
|
-
|
|
295
274
|
before do
|
|
296
275
|
Person.attr_readonly :species
|
|
297
276
|
end
|
|
@@ -305,22 +284,20 @@ describe Mongoid::Persistable::Updatable do
|
|
|
305
284
|
end
|
|
306
285
|
|
|
307
286
|
it 'raises an error when trying to set the attribute' do
|
|
308
|
-
expect
|
|
287
|
+
expect do
|
|
309
288
|
person.update_attribute(:species, :reptile)
|
|
310
|
-
|
|
289
|
+
end.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
|
311
290
|
end
|
|
312
291
|
|
|
313
292
|
context 'when referring to the attribute with a string' do
|
|
314
|
-
|
|
315
293
|
it 'raises an error when trying to set the attribute' do
|
|
316
|
-
expect
|
|
294
|
+
expect do
|
|
317
295
|
person.update_attribute('species', :reptile)
|
|
318
|
-
|
|
296
|
+
end.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
|
319
297
|
end
|
|
320
298
|
end
|
|
321
299
|
|
|
322
300
|
context 'when the field is aliased' do
|
|
323
|
-
|
|
324
301
|
before do
|
|
325
302
|
Person.attr_readonly :at
|
|
326
303
|
end
|
|
@@ -330,27 +307,25 @@ describe Mongoid::Persistable::Updatable do
|
|
|
330
307
|
end
|
|
331
308
|
|
|
332
309
|
it 'raises an error when trying to set the attribute using the db name' do
|
|
333
|
-
expect
|
|
310
|
+
expect do
|
|
334
311
|
person.update_attribute(:at, Time.now)
|
|
335
|
-
|
|
312
|
+
end.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
|
336
313
|
end
|
|
337
314
|
|
|
338
315
|
it 'raises an error when trying to set the attribute using the aliased name' do
|
|
339
|
-
expect
|
|
316
|
+
expect do
|
|
340
317
|
person.update_attribute(:aliased_timestamp, Time.now)
|
|
341
|
-
|
|
318
|
+
end.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
|
342
319
|
end
|
|
343
320
|
end
|
|
344
321
|
end
|
|
345
322
|
|
|
346
323
|
context 'when the field is loaded explicitly' do
|
|
347
|
-
|
|
348
324
|
before do
|
|
349
325
|
Person.create!(title: 'Captain')
|
|
350
326
|
end
|
|
351
327
|
|
|
352
328
|
context 'when the loaded attribute is updated' do
|
|
353
|
-
|
|
354
329
|
let(:person) do
|
|
355
330
|
Person.only(:title).first.tap do |_person|
|
|
356
331
|
_person.update_attribute(:title, 'Esteemed')
|
|
@@ -367,15 +342,14 @@ describe Mongoid::Persistable::Updatable do
|
|
|
367
342
|
end
|
|
368
343
|
|
|
369
344
|
context 'when the an attribute other than the loaded one is updated' do
|
|
370
|
-
|
|
371
345
|
let(:person) do
|
|
372
346
|
Person.only(:title).first
|
|
373
347
|
end
|
|
374
348
|
|
|
375
349
|
it 'does not allow the field to be updated' do
|
|
376
|
-
expect
|
|
350
|
+
expect do
|
|
377
351
|
person.update_attribute(:age, 20)
|
|
378
|
-
|
|
352
|
+
end.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
|
379
353
|
end
|
|
380
354
|
|
|
381
355
|
it 'does not persist the change' do
|
|
@@ -383,11 +357,10 @@ describe Mongoid::Persistable::Updatable do
|
|
|
383
357
|
end
|
|
384
358
|
|
|
385
359
|
context 'when referring to the attribute with a string' do
|
|
386
|
-
|
|
387
360
|
it 'does not allow the field to be updated' do
|
|
388
|
-
expect
|
|
361
|
+
expect do
|
|
389
362
|
person.update_attribute('age', 20)
|
|
390
|
-
|
|
363
|
+
end.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
|
391
364
|
end
|
|
392
365
|
|
|
393
366
|
it 'does not persist the change' do
|
|
@@ -398,13 +371,11 @@ describe Mongoid::Persistable::Updatable do
|
|
|
398
371
|
end
|
|
399
372
|
|
|
400
373
|
context 'when fields are explicitly not loaded' do
|
|
401
|
-
|
|
402
374
|
before do
|
|
403
375
|
Person.create!(title: 'Captain')
|
|
404
376
|
end
|
|
405
377
|
|
|
406
378
|
context 'when the loaded attribute is updated' do
|
|
407
|
-
|
|
408
379
|
let(:person) do
|
|
409
380
|
Person.without(:age).first.tap do |_person|
|
|
410
381
|
_person.update_attribute(:title, 'Esteemed')
|
|
@@ -421,15 +392,15 @@ describe Mongoid::Persistable::Updatable do
|
|
|
421
392
|
end
|
|
422
393
|
|
|
423
394
|
context 'when the non-loaded attribute is updated' do
|
|
424
|
-
|
|
425
395
|
let(:person) do
|
|
426
396
|
Person.without(:title).first
|
|
427
397
|
end
|
|
428
398
|
|
|
429
399
|
it 'does not allow the field to be updated' do
|
|
430
|
-
expect
|
|
400
|
+
expect do
|
|
431
401
|
person.update_attribute(:title, 'Esteemed')
|
|
432
|
-
|
|
402
|
+
end.to raise_exception(Mongoid::Errors::AttributeNotLoaded,
|
|
403
|
+
/Attempted to access attribute 'title' on Person which was not loaded/)
|
|
433
404
|
end
|
|
434
405
|
|
|
435
406
|
it 'does not persist the change' do
|
|
@@ -437,11 +408,11 @@ describe Mongoid::Persistable::Updatable do
|
|
|
437
408
|
end
|
|
438
409
|
|
|
439
410
|
context 'when referring to the attribute with a string' do
|
|
440
|
-
|
|
441
411
|
it 'does not allow the field to be updated' do
|
|
442
|
-
expect
|
|
412
|
+
expect do
|
|
443
413
|
person.update_attribute('title', 'Esteemed')
|
|
444
|
-
|
|
414
|
+
end.to raise_exception(Mongoid::Errors::AttributeNotLoaded,
|
|
415
|
+
/Attempted to access attribute 'title' on Person which was not loaded/)
|
|
445
416
|
end
|
|
446
417
|
|
|
447
418
|
it 'does not persist the change' do
|
|
@@ -453,47 +424,44 @@ describe Mongoid::Persistable::Updatable do
|
|
|
453
424
|
|
|
454
425
|
context 'when the field is _id' do
|
|
455
426
|
def invoke_operation!
|
|
456
|
-
object.update_attribute
|
|
427
|
+
object.update_attribute '_id', new_id_value
|
|
457
428
|
end
|
|
458
429
|
|
|
459
|
-
it_behaves_like
|
|
430
|
+
it_behaves_like 'persisted _ids are immutable'
|
|
460
431
|
end
|
|
461
432
|
end
|
|
462
433
|
|
|
463
|
-
[
|
|
464
|
-
|
|
434
|
+
%i[update_attributes update].each do |method|
|
|
465
435
|
describe "##{method}" do
|
|
466
|
-
|
|
467
|
-
context "when saving with a hash field with invalid keys" do
|
|
436
|
+
context 'when saving with a hash field with invalid keys' do
|
|
468
437
|
max_server_version '4.9'
|
|
469
438
|
|
|
470
439
|
let(:person) do
|
|
471
440
|
Person.create!
|
|
472
441
|
end
|
|
473
442
|
|
|
474
|
-
it
|
|
475
|
-
expect
|
|
476
|
-
person.update_attributes!(map: {
|
|
477
|
-
|
|
443
|
+
it 'raises an error' do
|
|
444
|
+
expect do
|
|
445
|
+
person.update_attributes!(map: { '$bad.key' => 'value' })
|
|
446
|
+
end.to raise_error(Mongo::Error::OperationFailure)
|
|
478
447
|
end
|
|
479
448
|
end
|
|
480
449
|
|
|
481
|
-
context
|
|
450
|
+
context 'when the document has been destroyed' do
|
|
482
451
|
max_server_version '4.9'
|
|
483
452
|
|
|
484
453
|
let(:person) do
|
|
485
454
|
Person.create!
|
|
486
455
|
end
|
|
487
456
|
|
|
488
|
-
it
|
|
489
|
-
expect
|
|
490
|
-
person.send(method, map: {
|
|
491
|
-
|
|
457
|
+
it 'raises an error' do
|
|
458
|
+
expect do
|
|
459
|
+
person.send(method, map: { '$bad.key' => 'value' })
|
|
460
|
+
end.to raise_error(Mongo::Error::OperationFailure)
|
|
492
461
|
end
|
|
493
462
|
end
|
|
494
463
|
|
|
495
|
-
context
|
|
496
|
-
|
|
464
|
+
context 'when validation passes' do
|
|
497
465
|
let(:person) do
|
|
498
466
|
Person.create!
|
|
499
467
|
end
|
|
@@ -506,17 +474,16 @@ describe Mongoid::Persistable::Updatable do
|
|
|
506
474
|
Person.find(person.id)
|
|
507
475
|
end
|
|
508
476
|
|
|
509
|
-
it
|
|
477
|
+
it 'returns true' do
|
|
510
478
|
expect(saved).to be true
|
|
511
479
|
end
|
|
512
480
|
|
|
513
|
-
it
|
|
481
|
+
it 'saves the attributes' do
|
|
514
482
|
expect(from_db.pets).to be false
|
|
515
483
|
end
|
|
516
484
|
end
|
|
517
485
|
|
|
518
|
-
context
|
|
519
|
-
|
|
486
|
+
context 'when the document has been destroyed' do
|
|
520
487
|
let!(:person) do
|
|
521
488
|
Person.create!
|
|
522
489
|
end
|
|
@@ -525,39 +492,36 @@ describe Mongoid::Persistable::Updatable do
|
|
|
525
492
|
person.delete
|
|
526
493
|
end
|
|
527
494
|
|
|
528
|
-
it
|
|
529
|
-
expect
|
|
530
|
-
person.send(method, title:
|
|
531
|
-
|
|
495
|
+
it 'raises an error' do
|
|
496
|
+
expect do
|
|
497
|
+
person.send(method, title: 'something')
|
|
498
|
+
end.to raise_error(RuntimeError)
|
|
532
499
|
end
|
|
533
500
|
end
|
|
534
501
|
|
|
535
|
-
context
|
|
536
|
-
|
|
502
|
+
context 'when updating through a one-to-one relation' do
|
|
537
503
|
let(:person) do
|
|
538
504
|
Person.create!
|
|
539
505
|
end
|
|
506
|
+
let(:from_db) do
|
|
507
|
+
Person.find(person.id)
|
|
508
|
+
end
|
|
540
509
|
|
|
541
510
|
let(:game) do
|
|
542
511
|
Game.create!(person: person)
|
|
543
512
|
end
|
|
544
513
|
|
|
545
514
|
before do
|
|
546
|
-
person.send(method, ssn:
|
|
547
|
-
game.person.send(method, ssn:
|
|
515
|
+
person.send(method, ssn: '444-44-4444')
|
|
516
|
+
game.person.send(method, ssn: '555-66-7777')
|
|
548
517
|
end
|
|
549
518
|
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
end
|
|
553
|
-
|
|
554
|
-
it "saves the attributes" do
|
|
555
|
-
expect(person.ssn).to eq("555-66-7777")
|
|
519
|
+
it 'saves the attributes' do
|
|
520
|
+
expect(person.ssn).to eq('555-66-7777')
|
|
556
521
|
end
|
|
557
522
|
end
|
|
558
523
|
|
|
559
|
-
context
|
|
560
|
-
|
|
524
|
+
context 'on a new record' do
|
|
561
525
|
let(:person) do
|
|
562
526
|
Person.new
|
|
563
527
|
end
|
|
@@ -566,99 +530,93 @@ describe Mongoid::Persistable::Updatable do
|
|
|
566
530
|
person.send(method, pets: false, title: nil)
|
|
567
531
|
end
|
|
568
532
|
|
|
569
|
-
it
|
|
570
|
-
expect(Person.find(person.id)).
|
|
533
|
+
it 'saves the new record' do
|
|
534
|
+
expect(Person.find(person.id)).not_to be_nil
|
|
571
535
|
end
|
|
572
536
|
end
|
|
573
537
|
|
|
574
|
-
context
|
|
575
|
-
|
|
576
|
-
context "when providing an embedded child" do
|
|
577
|
-
|
|
538
|
+
context 'when passing in a relation' do
|
|
539
|
+
context 'when providing an embedded child' do
|
|
578
540
|
let!(:person) do
|
|
579
541
|
Person.create!
|
|
580
542
|
end
|
|
581
543
|
|
|
582
544
|
let!(:name) do
|
|
583
|
-
person.create_name(first_name:
|
|
545
|
+
person.create_name(first_name: 'test', last_name: 'user')
|
|
584
546
|
end
|
|
585
547
|
|
|
586
548
|
let(:new_name) do
|
|
587
|
-
Name.new(first_name:
|
|
549
|
+
Name.new(first_name: 'Rupert', last_name: 'Parkes')
|
|
588
550
|
end
|
|
589
551
|
|
|
590
552
|
before do
|
|
591
553
|
person.send(method, name: new_name)
|
|
592
554
|
end
|
|
593
555
|
|
|
594
|
-
it
|
|
556
|
+
it 'updates the embedded document' do
|
|
595
557
|
expect(person.name).to eq(new_name)
|
|
596
558
|
end
|
|
597
559
|
|
|
598
|
-
it
|
|
560
|
+
it 'persists the changes' do
|
|
599
561
|
expect(person.reload.name).to eq(new_name)
|
|
600
562
|
end
|
|
601
563
|
end
|
|
602
564
|
|
|
603
|
-
context
|
|
604
|
-
|
|
565
|
+
context 'when providing a parent to a referenced in' do
|
|
605
566
|
let!(:person) do
|
|
606
567
|
Person.create!
|
|
607
568
|
end
|
|
608
569
|
|
|
609
570
|
let!(:post) do
|
|
610
|
-
Post.create!(title:
|
|
571
|
+
Post.create!(title: 'Testing')
|
|
611
572
|
end
|
|
612
573
|
|
|
613
|
-
context
|
|
614
|
-
|
|
574
|
+
context 'when the relation has not yet been touched' do
|
|
615
575
|
before do
|
|
616
576
|
post.send(method, person: person)
|
|
617
577
|
end
|
|
618
578
|
|
|
619
|
-
it
|
|
579
|
+
it 'sets the instance of the relation' do
|
|
620
580
|
expect(person.posts).to eq([ post ])
|
|
621
581
|
end
|
|
622
582
|
|
|
623
|
-
it
|
|
583
|
+
it 'sets properly through method_missing' do
|
|
624
584
|
expect(person.posts.to_a).to eq([ post ])
|
|
625
585
|
end
|
|
626
586
|
|
|
627
|
-
it
|
|
587
|
+
it 'persists the reference' do
|
|
628
588
|
expect(person.posts(true)).to eq([ post ])
|
|
629
589
|
end
|
|
630
590
|
end
|
|
631
591
|
|
|
632
|
-
context
|
|
633
|
-
|
|
592
|
+
context 'when the relation has been touched' do
|
|
634
593
|
before do
|
|
635
594
|
person.posts
|
|
636
595
|
post.send(method, person: person)
|
|
637
596
|
end
|
|
638
597
|
|
|
639
|
-
it
|
|
598
|
+
it 'sets the instance of the relation' do
|
|
640
599
|
expect(person.posts).to eq([ post ])
|
|
641
600
|
end
|
|
642
601
|
|
|
643
|
-
it
|
|
602
|
+
it 'sets properly through method_missing' do
|
|
644
603
|
expect(person.posts.to_a).to eq([ post ])
|
|
645
604
|
end
|
|
646
605
|
|
|
647
|
-
it
|
|
606
|
+
it 'persists the reference' do
|
|
648
607
|
expect(person.posts(true)).to eq([ post ])
|
|
649
608
|
end
|
|
650
609
|
end
|
|
651
610
|
end
|
|
652
611
|
end
|
|
653
612
|
|
|
654
|
-
context
|
|
655
|
-
|
|
613
|
+
context 'when in a deeply nested hierarchy' do
|
|
656
614
|
let!(:person) do
|
|
657
|
-
Person.new(title:
|
|
615
|
+
Person.new(title: 'The Boss')
|
|
658
616
|
end
|
|
659
617
|
|
|
660
618
|
let!(:phone_number) do
|
|
661
|
-
Phone.new(number:
|
|
619
|
+
Phone.new(number: '123-456-7890')
|
|
662
620
|
end
|
|
663
621
|
|
|
664
622
|
let!(:country_code) do
|
|
@@ -671,37 +629,35 @@ describe Mongoid::Persistable::Updatable do
|
|
|
671
629
|
person.save!
|
|
672
630
|
end
|
|
673
631
|
|
|
674
|
-
it
|
|
632
|
+
it 'sets the first level document' do
|
|
675
633
|
expect(person.phone_numbers.first).to eq(phone_number)
|
|
676
634
|
end
|
|
677
635
|
|
|
678
|
-
it
|
|
636
|
+
it 'sets the second level document' do
|
|
679
637
|
expect(person.phone_numbers.first.country_code).to eq(country_code)
|
|
680
638
|
end
|
|
681
639
|
|
|
682
|
-
context
|
|
683
|
-
|
|
640
|
+
context 'when updating the first level document' do
|
|
684
641
|
let(:phone) do
|
|
685
642
|
person.phone_numbers.first
|
|
686
643
|
end
|
|
687
644
|
|
|
688
645
|
before do
|
|
689
|
-
phone.number =
|
|
690
|
-
phone.send(method, number:
|
|
646
|
+
phone.number = '098-765-4321'
|
|
647
|
+
phone.send(method, number: '098-765-4321')
|
|
691
648
|
end
|
|
692
649
|
|
|
693
|
-
it
|
|
694
|
-
expect(phone.number).to eq(
|
|
650
|
+
it 'sets the new attributes' do
|
|
651
|
+
expect(phone.number).to eq('098-765-4321')
|
|
695
652
|
end
|
|
696
653
|
|
|
697
|
-
context
|
|
698
|
-
|
|
654
|
+
context 'when reloading the root' do
|
|
699
655
|
let(:reloaded) do
|
|
700
656
|
person.reload
|
|
701
657
|
end
|
|
702
658
|
|
|
703
|
-
it
|
|
704
|
-
expect(reloaded.phone_numbers.first.number).to eq(
|
|
659
|
+
it 'saves the new attributes' do
|
|
660
|
+
expect(reloaded.phone_numbers.first.number).to eq('098-765-4321')
|
|
705
661
|
end
|
|
706
662
|
end
|
|
707
663
|
end
|
|
@@ -711,30 +667,27 @@ describe Mongoid::Persistable::Updatable do
|
|
|
711
667
|
def invoke_operation!
|
|
712
668
|
object.update_attributes _id: new_id_value
|
|
713
669
|
end
|
|
714
|
-
|
|
715
|
-
it_behaves_like
|
|
670
|
+
|
|
671
|
+
it_behaves_like 'persisted _ids are immutable'
|
|
716
672
|
end
|
|
717
673
|
end
|
|
718
674
|
end
|
|
719
675
|
|
|
720
|
-
describe
|
|
721
|
-
|
|
722
|
-
context "when a callback aborts the callback chain" do
|
|
723
|
-
|
|
676
|
+
describe '#update!' do
|
|
677
|
+
context 'when a callback aborts the callback chain' do
|
|
724
678
|
let(:oscar) do
|
|
725
679
|
Oscar.new
|
|
726
680
|
end
|
|
727
681
|
|
|
728
|
-
it
|
|
729
|
-
expect
|
|
730
|
-
oscar.update!(title:
|
|
731
|
-
|
|
682
|
+
it 'raises a callback error' do
|
|
683
|
+
expect do
|
|
684
|
+
oscar.update!(title: 'The Grouch')
|
|
685
|
+
end.to raise_error(Mongoid::Errors::Callback)
|
|
732
686
|
end
|
|
733
687
|
end
|
|
734
688
|
end
|
|
735
689
|
|
|
736
|
-
describe
|
|
737
|
-
|
|
690
|
+
describe '#update_attributes!' do
|
|
738
691
|
let(:person) do
|
|
739
692
|
Person.create!
|
|
740
693
|
end
|