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,92 +1,85 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
3
|
+
require 'spec_helper'
|
|
5
4
|
|
|
6
|
-
require_relative '
|
|
5
|
+
require_relative 'copyable_spec_models'
|
|
7
6
|
|
|
8
7
|
describe Mongoid::Copyable do
|
|
9
|
-
|
|
10
|
-
[ :clone, :dup ].each do |method|
|
|
11
|
-
|
|
8
|
+
%i[clone dup].each do |method|
|
|
12
9
|
describe "##{method}" do
|
|
13
|
-
|
|
14
10
|
let(:person) do
|
|
15
11
|
Person.new(
|
|
16
|
-
title:
|
|
12
|
+
title: 'Sir',
|
|
17
13
|
version: 4,
|
|
18
14
|
created_at: Time.now,
|
|
19
15
|
updated_at: Time.now,
|
|
20
|
-
desc:
|
|
16
|
+
desc: 'description'
|
|
21
17
|
) do |p|
|
|
22
18
|
p.owner_id = 5
|
|
23
19
|
end
|
|
24
20
|
end
|
|
25
21
|
|
|
26
22
|
let!(:address) do
|
|
27
|
-
person.addresses.build(street:
|
|
23
|
+
person.addresses.build(street: 'Bond', name: 'Bond')
|
|
28
24
|
end
|
|
29
25
|
|
|
30
26
|
let!(:name) do
|
|
31
|
-
person.build_name(first_name:
|
|
27
|
+
person.build_name(first_name: 'Judy')
|
|
32
28
|
end
|
|
33
29
|
|
|
34
30
|
let!(:posts) do
|
|
35
|
-
person.posts.build(title:
|
|
31
|
+
person.posts.build(title: 'testing')
|
|
36
32
|
end
|
|
37
33
|
|
|
38
34
|
let!(:game) do
|
|
39
|
-
person.build_game(name:
|
|
35
|
+
person.build_game(name: 'Tron')
|
|
40
36
|
end
|
|
41
37
|
|
|
42
38
|
let!(:name_translations) do
|
|
43
39
|
person.name.translations.build(language: 'en')
|
|
44
40
|
end
|
|
45
41
|
|
|
46
|
-
context
|
|
47
|
-
|
|
42
|
+
context 'when the document has an id field in the database' do
|
|
48
43
|
let!(:band) do
|
|
49
|
-
Band.create!(name:
|
|
44
|
+
Band.create!(name: 'Tool')
|
|
50
45
|
end
|
|
51
|
-
|
|
52
|
-
before do
|
|
53
|
-
Band.collection.find(_id: band.id).update_one("$set" => { "id" => 1234 })
|
|
54
|
-
end
|
|
55
|
-
|
|
56
46
|
let!(:cloned) do
|
|
57
47
|
band.reload.send(method)
|
|
58
48
|
end
|
|
59
49
|
|
|
60
|
-
|
|
61
|
-
|
|
50
|
+
before do
|
|
51
|
+
Band.collection.find(_id: band.id).update_one('$set' => { 'id' => 1234 })
|
|
62
52
|
end
|
|
63
|
-
end
|
|
64
53
|
|
|
65
|
-
|
|
54
|
+
it 'does not set the id field as the _id' do
|
|
55
|
+
expect(cloned.id).not_to eq(1234)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
66
58
|
|
|
59
|
+
context 'when a document has fields from a legacy schema' do
|
|
67
60
|
shared_examples 'behaves as expected' do
|
|
68
61
|
let!(:instance) do
|
|
69
|
-
cls.create!(name:
|
|
62
|
+
cls.create!(name: 'test')
|
|
70
63
|
end
|
|
71
64
|
|
|
72
65
|
before do
|
|
73
|
-
legacy_fields = {
|
|
74
|
-
cls.collection.find(_id: instance.id).update_one(
|
|
66
|
+
legacy_fields = { 'this_is_not_a_field' => 1, 'this_legacy_field_is_nil' => nil }
|
|
67
|
+
cls.collection.find(_id: instance.id).update_one('$set' => legacy_fields)
|
|
75
68
|
end
|
|
76
69
|
|
|
77
70
|
let(:cloned) do
|
|
78
71
|
instance.reload.send(method)
|
|
79
72
|
end
|
|
80
73
|
|
|
81
|
-
it
|
|
74
|
+
it 'sets the legacy attribute' do
|
|
82
75
|
expect(cloned.attributes['this_is_not_a_field']).to eq(1)
|
|
83
76
|
end
|
|
84
77
|
|
|
85
|
-
it
|
|
78
|
+
it 'contains legacy attributes that are nil' do
|
|
86
79
|
expect(cloned.attributes.key?('this_legacy_field_is_nil')).to eq(true)
|
|
87
80
|
end
|
|
88
81
|
|
|
89
|
-
it
|
|
82
|
+
it 'copies the known attributes' do
|
|
90
83
|
expect(cloned.name).to eq('test')
|
|
91
84
|
end
|
|
92
85
|
|
|
@@ -115,18 +108,14 @@ describe Mongoid::Copyable do
|
|
|
115
108
|
|
|
116
109
|
include_examples 'behaves as expected'
|
|
117
110
|
end
|
|
118
|
-
|
|
119
111
|
end
|
|
120
112
|
|
|
121
|
-
context
|
|
122
|
-
|
|
123
|
-
context "and dynamic attributes are not set" do
|
|
124
|
-
|
|
113
|
+
context 'when using store_as' do
|
|
114
|
+
context 'and dynamic attributes are not set' do
|
|
125
115
|
context 'embeds_one' do
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
t
|
|
129
|
-
t.build_store_as_dup_test2(:name => "there")
|
|
116
|
+
it 'clones' do
|
|
117
|
+
t = StoreAsDupTest1.new(name: 'hi')
|
|
118
|
+
t.build_store_as_dup_test2(name: 'there')
|
|
130
119
|
t.save!
|
|
131
120
|
copy = t.send(method)
|
|
132
121
|
expect(copy.object_id).not_to eq(t.object_id)
|
|
@@ -135,10 +124,8 @@ describe Mongoid::Copyable do
|
|
|
135
124
|
end
|
|
136
125
|
|
|
137
126
|
context 'embeds_many' do
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
it "clones" do
|
|
141
|
-
t = StoreAsDupTest3.new(:name => "hi")
|
|
127
|
+
it 'clones' do
|
|
128
|
+
t = StoreAsDupTest3.new(name: 'hi')
|
|
142
129
|
t.store_as_dup_test4s << StoreAsDupTest4.new
|
|
143
130
|
t.save!
|
|
144
131
|
copy = t.send(method)
|
|
@@ -164,13 +151,13 @@ describe Mongoid::Copyable do
|
|
|
164
151
|
end
|
|
165
152
|
end
|
|
166
153
|
|
|
167
|
-
context
|
|
154
|
+
context 'when cloning a document with multiple languages field' do
|
|
168
155
|
with_default_i18n_configs
|
|
169
156
|
|
|
170
157
|
before do
|
|
171
158
|
I18n.locale = 'pt_BR'
|
|
172
|
-
person.desc =
|
|
173
|
-
person.addresses.first.name =
|
|
159
|
+
person.desc = 'descrição'
|
|
160
|
+
person.addresses.first.name = 'descrição'
|
|
174
161
|
person.save!
|
|
175
162
|
end
|
|
176
163
|
|
|
@@ -182,64 +169,56 @@ describe Mongoid::Copyable do
|
|
|
182
169
|
from_db.send(method)
|
|
183
170
|
end
|
|
184
171
|
|
|
185
|
-
it
|
|
172
|
+
it 'sets the pt_BR version' do
|
|
186
173
|
I18n.locale = 'pt_BR'
|
|
187
|
-
expect(copy.desc).to eq(
|
|
174
|
+
expect(copy.desc).to eq('descrição')
|
|
188
175
|
end
|
|
189
176
|
|
|
190
|
-
it
|
|
177
|
+
it 'sets the english version' do
|
|
191
178
|
I18n.locale = :en
|
|
192
|
-
expect(copy.desc).to eq(
|
|
179
|
+
expect(copy.desc).to eq('description')
|
|
193
180
|
end
|
|
194
181
|
|
|
195
|
-
it
|
|
182
|
+
it 'sets to nil an nonexistent lang' do
|
|
196
183
|
I18n.locale = :fr
|
|
197
184
|
expect(copy.desc).to be_nil
|
|
198
185
|
end
|
|
199
186
|
|
|
200
187
|
it 'sets embedded translations' do
|
|
201
188
|
I18n.locale = 'pt_BR'
|
|
202
|
-
expect(copy.addresses.first.name).to eq(
|
|
189
|
+
expect(copy.addresses.first.name).to eq('descrição')
|
|
203
190
|
end
|
|
204
191
|
|
|
205
192
|
it 'sets embedded english version' do
|
|
206
193
|
I18n.locale = :en
|
|
207
|
-
expect(copy.addresses.first.name).to eq(
|
|
194
|
+
expect(copy.addresses.first.name).to eq('Bond')
|
|
208
195
|
end
|
|
209
196
|
end
|
|
210
197
|
|
|
211
|
-
context
|
|
198
|
+
context 'when cloning a document with polymorphic embedded documents with multiple language field' do
|
|
212
199
|
with_default_i18n_configs
|
|
213
200
|
|
|
214
|
-
let
|
|
215
|
-
|
|
216
|
-
|
|
201
|
+
let(:shipment_address) { person.addresses.build({ shipping_name: 'Title' }, ShipmentAddress) }
|
|
202
|
+
let(:from_db) { Person.find(person.id) }
|
|
203
|
+
let(:copy) { from_db.send(method) }
|
|
217
204
|
|
|
218
205
|
before do
|
|
206
|
+
shipment_address
|
|
207
|
+
|
|
219
208
|
I18n.locale = 'pt_BR'
|
|
220
|
-
person.addresses.type(ShipmentAddress).each { |address| address.shipping_name =
|
|
209
|
+
person.addresses.type(ShipmentAddress).each { |address| address.shipping_name = 'Título' }
|
|
221
210
|
person.save!
|
|
222
211
|
end
|
|
223
212
|
|
|
224
|
-
let!(:from_db) do
|
|
225
|
-
Person.find(person.id)
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
let(:copy) do
|
|
229
|
-
from_db.send(method)
|
|
230
|
-
end
|
|
231
|
-
|
|
232
213
|
it 'sets embedded translations' do
|
|
233
214
|
I18n.locale = 'pt_BR'
|
|
234
215
|
copy.addresses.type(ShipmentAddress).each do |address|
|
|
235
|
-
expect(address.shipping_name).to eq(
|
|
216
|
+
expect(address.shipping_name).to eq('Título')
|
|
236
217
|
end
|
|
237
218
|
end
|
|
238
|
-
|
|
239
219
|
end
|
|
240
220
|
|
|
241
|
-
context
|
|
242
|
-
|
|
221
|
+
context 'when cloning a loaded document' do
|
|
243
222
|
before do
|
|
244
223
|
person.save!
|
|
245
224
|
end
|
|
@@ -252,23 +231,21 @@ describe Mongoid::Copyable do
|
|
|
252
231
|
from_db.send(method)
|
|
253
232
|
end
|
|
254
233
|
|
|
255
|
-
it
|
|
256
|
-
expect(copy.changes[
|
|
234
|
+
it 'marks the fields as dirty' do
|
|
235
|
+
expect(copy.changes['age']).to eq([ nil, 100 ])
|
|
257
236
|
end
|
|
258
237
|
|
|
259
|
-
it
|
|
238
|
+
it 'flags the document as changed' do
|
|
260
239
|
expect(copy).to be_changed
|
|
261
240
|
end
|
|
262
241
|
|
|
263
|
-
it
|
|
242
|
+
it 'copies protected fields' do
|
|
264
243
|
expect(copy.owner_id).to eq(5)
|
|
265
244
|
end
|
|
266
245
|
end
|
|
267
246
|
|
|
268
|
-
context
|
|
269
|
-
|
|
270
|
-
context "when there are changes" do
|
|
271
|
-
|
|
247
|
+
context 'when the document is new' do
|
|
248
|
+
context 'when there are changes' do
|
|
272
249
|
let(:copy) do
|
|
273
250
|
person.send(method)
|
|
274
251
|
end
|
|
@@ -277,80 +254,79 @@ describe Mongoid::Copyable do
|
|
|
277
254
|
person[:versions] = [ { number: 1 } ]
|
|
278
255
|
end
|
|
279
256
|
|
|
280
|
-
it
|
|
281
|
-
expect(copy).
|
|
257
|
+
it 'returns a new document' do
|
|
258
|
+
expect(copy).not_to be_persisted
|
|
282
259
|
end
|
|
283
260
|
|
|
284
|
-
it
|
|
285
|
-
expect(copy.id).
|
|
261
|
+
it 'has an id' do
|
|
262
|
+
expect(copy.id).not_to be_nil
|
|
286
263
|
end
|
|
287
264
|
|
|
288
|
-
it
|
|
265
|
+
it 'flags the document as changed' do
|
|
289
266
|
expect(copy).to be_changed
|
|
290
267
|
end
|
|
291
268
|
|
|
292
|
-
it
|
|
293
|
-
expect(copy.changes[
|
|
269
|
+
it 'marks fields as dirty' do
|
|
270
|
+
expect(copy.changes['age']).to eq([ nil, 100 ])
|
|
294
271
|
end
|
|
295
272
|
|
|
296
|
-
it
|
|
297
|
-
expect(copy.id).
|
|
273
|
+
it 'has a different id from the original' do
|
|
274
|
+
expect(copy.id).not_to eq(person.id)
|
|
298
275
|
end
|
|
299
276
|
|
|
300
|
-
it
|
|
301
|
-
expect(copy).
|
|
277
|
+
it 'returns a new instance' do
|
|
278
|
+
expect(copy).not_to eql(person)
|
|
302
279
|
end
|
|
303
280
|
|
|
304
|
-
it
|
|
281
|
+
it 'copys embeds many documents' do
|
|
305
282
|
expect(copy.addresses).to eq(person.addresses)
|
|
306
283
|
end
|
|
307
284
|
|
|
308
|
-
it
|
|
285
|
+
it 'copys deep embeds many documents' do
|
|
309
286
|
expect(copy.name.translations).to eq(person.name.translations)
|
|
310
287
|
end
|
|
311
288
|
|
|
312
|
-
it
|
|
289
|
+
it 'sets the embedded many documents as new' do
|
|
313
290
|
expect(copy.addresses.first).to be_new_record
|
|
314
291
|
end
|
|
315
292
|
|
|
316
|
-
it
|
|
293
|
+
it 'sets the deep embedded many documents as new' do
|
|
317
294
|
expect(copy.name.translations.first).to be_new_record
|
|
318
295
|
end
|
|
319
296
|
|
|
320
|
-
it
|
|
321
|
-
expect(copy.addresses).
|
|
297
|
+
it 'creates new embeds many instances' do
|
|
298
|
+
expect(copy.addresses).not_to equal(person.addresses)
|
|
322
299
|
end
|
|
323
300
|
|
|
324
|
-
it
|
|
325
|
-
expect(copy.name.translations).
|
|
301
|
+
it 'creates new deep embeds many instances' do
|
|
302
|
+
expect(copy.name.translations).not_to equal(person.name.translations)
|
|
326
303
|
end
|
|
327
304
|
|
|
328
|
-
it
|
|
305
|
+
it 'copys embeds one documents' do
|
|
329
306
|
expect(copy.name).to eq(person.name)
|
|
330
307
|
end
|
|
331
308
|
|
|
332
|
-
it
|
|
309
|
+
it 'flags the embeds one documents as new' do
|
|
333
310
|
expect(copy.name).to be_new_record
|
|
334
311
|
end
|
|
335
312
|
|
|
336
|
-
it
|
|
337
|
-
expect(copy.name).
|
|
313
|
+
it 'creates a new embeds one instance' do
|
|
314
|
+
expect(copy.name).not_to equal(person.name)
|
|
338
315
|
end
|
|
339
316
|
|
|
340
|
-
it
|
|
317
|
+
it 'does not copy referenced many documents' do
|
|
341
318
|
expect(copy.posts).to be_empty
|
|
342
319
|
end
|
|
343
320
|
|
|
344
|
-
it
|
|
321
|
+
it 'does not copy references one documents' do
|
|
345
322
|
expect(copy.game).to be_nil
|
|
346
323
|
end
|
|
347
324
|
|
|
348
|
-
it
|
|
349
|
-
expect(copy.desc).to eq(
|
|
325
|
+
it 'copies localized fields' do
|
|
326
|
+
expect(copy.desc).to eq('description')
|
|
350
327
|
end
|
|
351
328
|
|
|
352
|
-
context
|
|
353
|
-
|
|
329
|
+
context 'when saving the copy' do
|
|
354
330
|
let(:reloaded) do
|
|
355
331
|
copy.reload
|
|
356
332
|
end
|
|
@@ -359,23 +335,24 @@ describe Mongoid::Copyable do
|
|
|
359
335
|
copy.save!(validate: false)
|
|
360
336
|
end
|
|
361
337
|
|
|
362
|
-
it
|
|
363
|
-
expect(reloaded.title).to eq(
|
|
338
|
+
it 'persists the attributes' do
|
|
339
|
+
expect(reloaded.title).to eq('Sir')
|
|
364
340
|
end
|
|
365
341
|
|
|
366
|
-
it
|
|
342
|
+
it 'persists the embeds many relation' do
|
|
367
343
|
expect(reloaded.addresses).to eq(person.addresses)
|
|
368
344
|
end
|
|
369
345
|
|
|
370
|
-
it
|
|
346
|
+
it 'persists the embeds one relation' do
|
|
371
347
|
expect(reloaded.name).to eq(person.name)
|
|
372
348
|
end
|
|
373
349
|
end
|
|
374
350
|
end
|
|
375
351
|
|
|
376
|
-
context
|
|
352
|
+
context 'when using a custom discriminator_key' do
|
|
377
353
|
before do
|
|
378
|
-
Person.discriminator_key =
|
|
354
|
+
Person.discriminator_key = 'dkey'
|
|
355
|
+
person[:versions] = [ { number: 1 } ]
|
|
379
356
|
end
|
|
380
357
|
|
|
381
358
|
after do
|
|
@@ -386,48 +363,43 @@ describe Mongoid::Copyable do
|
|
|
386
363
|
person.send(method)
|
|
387
364
|
end
|
|
388
365
|
|
|
389
|
-
|
|
390
|
-
person[:versions] = [ { number: 1 } ]
|
|
391
|
-
end
|
|
392
|
-
|
|
393
|
-
it "copys embeds many documents" do
|
|
366
|
+
it 'copys embeds many documents' do
|
|
394
367
|
expect(copy.addresses).to eq(person.addresses)
|
|
395
368
|
end
|
|
396
369
|
|
|
397
|
-
it
|
|
370
|
+
it 'copys deep embeds many documents' do
|
|
398
371
|
expect(copy.name.translations).to eq(person.name.translations)
|
|
399
372
|
end
|
|
400
373
|
|
|
401
|
-
it
|
|
374
|
+
it 'sets the embedded many documents as new' do
|
|
402
375
|
expect(copy.addresses.first).to be_new_record
|
|
403
376
|
end
|
|
404
377
|
|
|
405
|
-
it
|
|
378
|
+
it 'sets the deep embedded many documents as new' do
|
|
406
379
|
expect(copy.name.translations.first).to be_new_record
|
|
407
380
|
end
|
|
408
381
|
|
|
409
|
-
it
|
|
410
|
-
expect(copy.addresses).
|
|
382
|
+
it 'creates new embeds many instances' do
|
|
383
|
+
expect(copy.addresses).not_to equal(person.addresses)
|
|
411
384
|
end
|
|
412
385
|
|
|
413
|
-
it
|
|
414
|
-
expect(copy.name.translations).
|
|
386
|
+
it 'creates new deep embeds many instances' do
|
|
387
|
+
expect(copy.name.translations).not_to equal(person.name.translations)
|
|
415
388
|
end
|
|
416
389
|
|
|
417
|
-
it
|
|
390
|
+
it 'copys embeds one documents' do
|
|
418
391
|
expect(copy.name).to eq(person.name)
|
|
419
392
|
end
|
|
420
393
|
|
|
421
|
-
it
|
|
394
|
+
it 'flags the embeds one documents as new' do
|
|
422
395
|
expect(copy.name).to be_new_record
|
|
423
396
|
end
|
|
424
397
|
|
|
425
|
-
it
|
|
426
|
-
expect(copy.name).
|
|
398
|
+
it 'creates a new embeds one instance' do
|
|
399
|
+
expect(copy.name).not_to equal(person.name)
|
|
427
400
|
end
|
|
428
401
|
|
|
429
|
-
context
|
|
430
|
-
|
|
402
|
+
context 'when saving the copy' do
|
|
431
403
|
let(:reloaded) do
|
|
432
404
|
copy.reload
|
|
433
405
|
end
|
|
@@ -436,29 +408,27 @@ describe Mongoid::Copyable do
|
|
|
436
408
|
copy.save!(validate: false)
|
|
437
409
|
end
|
|
438
410
|
|
|
439
|
-
it
|
|
440
|
-
expect(reloaded.title).to eq(
|
|
411
|
+
it 'persists the attributes' do
|
|
412
|
+
expect(reloaded.title).to eq('Sir')
|
|
441
413
|
end
|
|
442
414
|
|
|
443
|
-
it
|
|
415
|
+
it 'persists the embeds many relation' do
|
|
444
416
|
expect(reloaded.addresses).to eq(person.addresses)
|
|
445
417
|
end
|
|
446
418
|
|
|
447
|
-
it
|
|
419
|
+
it 'persists the embeds one relation' do
|
|
448
420
|
expect(reloaded.name).to eq(person.name)
|
|
449
421
|
end
|
|
450
422
|
end
|
|
451
423
|
end
|
|
452
424
|
end
|
|
453
425
|
|
|
454
|
-
context
|
|
455
|
-
|
|
426
|
+
context 'when the document is not new' do
|
|
456
427
|
before do
|
|
457
428
|
person.new_record = false
|
|
458
429
|
end
|
|
459
430
|
|
|
460
|
-
context
|
|
461
|
-
|
|
431
|
+
context 'when there are changes' do
|
|
462
432
|
let(:copy) do
|
|
463
433
|
person.send(method)
|
|
464
434
|
end
|
|
@@ -467,56 +437,55 @@ describe Mongoid::Copyable do
|
|
|
467
437
|
person[:versions] = [ { number: 1 } ]
|
|
468
438
|
end
|
|
469
439
|
|
|
470
|
-
it
|
|
440
|
+
it 'flags the document as changed' do
|
|
471
441
|
expect(copy).to be_changed
|
|
472
442
|
end
|
|
473
443
|
|
|
474
|
-
it
|
|
475
|
-
expect(copy.changes[
|
|
444
|
+
it 'marks fields as dirty' do
|
|
445
|
+
expect(copy.changes['age']).to eq([ nil, 100 ])
|
|
476
446
|
end
|
|
477
447
|
|
|
478
|
-
it
|
|
479
|
-
expect(copy).
|
|
448
|
+
it 'returns a new document' do
|
|
449
|
+
expect(copy).not_to be_persisted
|
|
480
450
|
end
|
|
481
451
|
|
|
482
|
-
it
|
|
483
|
-
expect(copy.id).
|
|
452
|
+
it 'has an id' do
|
|
453
|
+
expect(copy.id).not_to be_nil
|
|
484
454
|
end
|
|
485
455
|
|
|
486
|
-
it
|
|
487
|
-
expect(copy.id).
|
|
456
|
+
it 'has a different id from the original' do
|
|
457
|
+
expect(copy.id).not_to eq(person.id)
|
|
488
458
|
end
|
|
489
459
|
|
|
490
|
-
it
|
|
491
|
-
expect(copy).
|
|
460
|
+
it 'returns a new instance' do
|
|
461
|
+
expect(copy).not_to eql(person)
|
|
492
462
|
end
|
|
493
463
|
|
|
494
|
-
it
|
|
464
|
+
it 'copys embeds many documents' do
|
|
495
465
|
expect(copy.addresses).to eq(person.addresses)
|
|
496
466
|
end
|
|
497
467
|
|
|
498
|
-
it
|
|
499
|
-
expect(copy.addresses).
|
|
468
|
+
it 'creates new embeds many instances' do
|
|
469
|
+
expect(copy.addresses).not_to equal(person.addresses)
|
|
500
470
|
end
|
|
501
471
|
|
|
502
|
-
it
|
|
472
|
+
it 'copys embeds one documents' do
|
|
503
473
|
expect(copy.name).to eq(person.name)
|
|
504
474
|
end
|
|
505
475
|
|
|
506
|
-
it
|
|
507
|
-
expect(copy.name).
|
|
476
|
+
it 'creates a new embeds one instance' do
|
|
477
|
+
expect(copy.name).not_to equal(person.name)
|
|
508
478
|
end
|
|
509
479
|
|
|
510
|
-
it
|
|
480
|
+
it 'does not copy referenced many documents' do
|
|
511
481
|
expect(copy.posts).to be_empty
|
|
512
482
|
end
|
|
513
483
|
|
|
514
|
-
it
|
|
484
|
+
it 'does not copy references one documents' do
|
|
515
485
|
expect(copy.game).to be_nil
|
|
516
486
|
end
|
|
517
487
|
|
|
518
|
-
context
|
|
519
|
-
|
|
488
|
+
context 'when saving the copy' do
|
|
520
489
|
let(:reloaded) do
|
|
521
490
|
copy.reload
|
|
522
491
|
end
|
|
@@ -525,73 +494,71 @@ describe Mongoid::Copyable do
|
|
|
525
494
|
copy.save!(validate: false)
|
|
526
495
|
end
|
|
527
496
|
|
|
528
|
-
it
|
|
529
|
-
expect(reloaded.title).to eq(
|
|
497
|
+
it 'persists the attributes' do
|
|
498
|
+
expect(reloaded.title).to eq('Sir')
|
|
530
499
|
end
|
|
531
500
|
|
|
532
|
-
it
|
|
501
|
+
it 'persists the embeds many relation' do
|
|
533
502
|
expect(reloaded.addresses).to eq(person.addresses)
|
|
534
503
|
end
|
|
535
504
|
|
|
536
|
-
it
|
|
505
|
+
it 'persists the embeds one relation' do
|
|
537
506
|
expect(reloaded.name).to eq(person.name)
|
|
538
507
|
end
|
|
539
508
|
end
|
|
540
509
|
end
|
|
541
510
|
end
|
|
542
511
|
|
|
543
|
-
context
|
|
544
|
-
|
|
512
|
+
context 'when the document is frozen' do
|
|
545
513
|
let!(:copy) do
|
|
546
514
|
person.freeze.send(method)
|
|
547
515
|
end
|
|
548
516
|
|
|
549
|
-
it
|
|
550
|
-
expect(copy).
|
|
517
|
+
it 'returns a new document' do
|
|
518
|
+
expect(copy).not_to be_persisted
|
|
551
519
|
end
|
|
552
520
|
|
|
553
|
-
it
|
|
554
|
-
expect(copy.id).
|
|
521
|
+
it 'has an id' do
|
|
522
|
+
expect(copy.id).not_to be_nil
|
|
555
523
|
end
|
|
556
524
|
|
|
557
|
-
it
|
|
558
|
-
expect(copy.id).
|
|
525
|
+
it 'has a different id from the original' do
|
|
526
|
+
expect(copy.id).not_to eq(person.id)
|
|
559
527
|
end
|
|
560
528
|
|
|
561
|
-
it
|
|
562
|
-
expect(copy).
|
|
529
|
+
it 'returns a new instance' do
|
|
530
|
+
expect(copy).not_to eql(person)
|
|
563
531
|
end
|
|
564
532
|
|
|
565
|
-
it
|
|
533
|
+
it 'copys embeds many documents' do
|
|
566
534
|
expect(copy.addresses).to eq(person.addresses)
|
|
567
535
|
end
|
|
568
536
|
|
|
569
|
-
it
|
|
570
|
-
expect(copy.addresses).
|
|
537
|
+
it 'creates new embeds many instances' do
|
|
538
|
+
expect(copy.addresses).not_to equal(person.addresses)
|
|
571
539
|
end
|
|
572
540
|
|
|
573
|
-
it
|
|
541
|
+
it 'copys embeds one documents' do
|
|
574
542
|
expect(copy.name).to eq(person.name)
|
|
575
543
|
end
|
|
576
544
|
|
|
577
|
-
it
|
|
578
|
-
expect(copy.name).
|
|
545
|
+
it 'creates a new embeds one instance' do
|
|
546
|
+
expect(copy.name).not_to equal(person.name)
|
|
579
547
|
end
|
|
580
548
|
|
|
581
|
-
it
|
|
549
|
+
it 'does not copy referenced many documents' do
|
|
582
550
|
expect(copy.posts).to be_empty
|
|
583
551
|
end
|
|
584
552
|
|
|
585
|
-
it
|
|
553
|
+
it 'does not copy references one documents' do
|
|
586
554
|
expect(copy.game).to be_nil
|
|
587
555
|
end
|
|
588
556
|
|
|
589
|
-
it
|
|
557
|
+
it 'keeps the original attributes frozen' do
|
|
590
558
|
expect(person.attributes).to be_frozen
|
|
591
559
|
end
|
|
592
560
|
|
|
593
|
-
context
|
|
594
|
-
|
|
561
|
+
context 'when saving the copy' do
|
|
595
562
|
let(:reloaded) do
|
|
596
563
|
copy.reload
|
|
597
564
|
end
|
|
@@ -600,54 +567,43 @@ describe Mongoid::Copyable do
|
|
|
600
567
|
copy.save!(validate: false)
|
|
601
568
|
end
|
|
602
569
|
|
|
603
|
-
it
|
|
604
|
-
expect(reloaded.title).to eq(
|
|
570
|
+
it 'persists the attributes' do
|
|
571
|
+
expect(reloaded.title).to eq('Sir')
|
|
605
572
|
end
|
|
606
573
|
|
|
607
|
-
it
|
|
574
|
+
it 'persists the embeds many relation' do
|
|
608
575
|
expect(reloaded.addresses).to eq(person.addresses)
|
|
609
576
|
end
|
|
610
577
|
|
|
611
|
-
it
|
|
578
|
+
it 'persists the embeds one relation' do
|
|
612
579
|
expect(reloaded.name).to eq(person.name)
|
|
613
580
|
end
|
|
614
581
|
end
|
|
615
582
|
end
|
|
616
583
|
|
|
617
|
-
context
|
|
618
|
-
|
|
584
|
+
context 'when cloning a document with an embedded child class and a custom discriminator value' do
|
|
619
585
|
before do
|
|
620
|
-
|
|
586
|
+
shipment_address
|
|
587
|
+
ShipmentAddress.discriminator_value = 'dvalue'
|
|
588
|
+
person.save!
|
|
621
589
|
end
|
|
622
590
|
|
|
623
591
|
after do
|
|
624
592
|
ShipmentAddress.discriminator_value = nil
|
|
625
593
|
end
|
|
626
594
|
|
|
627
|
-
let
|
|
628
|
-
|
|
629
|
-
|
|
595
|
+
let(:shipment_address) { person.addresses.build({}, ShipmentAddress) }
|
|
596
|
+
let(:from_db) { Person.find(person.id) }
|
|
597
|
+
let(:copy) { from_db.send(method) }
|
|
630
598
|
|
|
631
|
-
|
|
632
|
-
person.save!
|
|
633
|
-
end
|
|
634
|
-
|
|
635
|
-
let!(:from_db) do
|
|
636
|
-
Person.find(person.id)
|
|
637
|
-
end
|
|
638
|
-
|
|
639
|
-
let(:copy) do
|
|
640
|
-
from_db.send(method)
|
|
641
|
-
end
|
|
642
|
-
|
|
643
|
-
it "copys embeds many documents" do
|
|
599
|
+
it 'copys embeds many documents' do
|
|
644
600
|
expect(copy.addresses).to eq(person.addresses)
|
|
645
601
|
end
|
|
646
602
|
end
|
|
647
603
|
|
|
648
604
|
context 'when cloning a document with embedded child that uses inheritance' do
|
|
649
605
|
let(:original) do
|
|
650
|
-
CopyableSpec::A.new(influencers: [child_cls.new])
|
|
606
|
+
CopyableSpec::A.new(influencers: [ child_cls.new ])
|
|
651
607
|
end
|
|
652
608
|
|
|
653
609
|
let(:copy) do
|
|
@@ -662,7 +618,7 @@ describe Mongoid::Copyable do
|
|
|
662
618
|
before do
|
|
663
619
|
# When embedded class is the root in hierarchy, their
|
|
664
620
|
# discriminator value is not explicitly stored.
|
|
665
|
-
child_cls.discriminator_mapping[child_cls.name].should
|
|
621
|
+
child_cls.discriminator_mapping[child_cls.name].should be_nil
|
|
666
622
|
end
|
|
667
623
|
|
|
668
624
|
it 'works' do
|
|
@@ -679,7 +635,7 @@ describe Mongoid::Copyable do
|
|
|
679
635
|
before do
|
|
680
636
|
# When embedded class is a leaf in hierarchy, their
|
|
681
637
|
# discriminator value is explicitly stored.
|
|
682
|
-
child_cls.discriminator_mapping[child_cls.name].should_not
|
|
638
|
+
child_cls.discriminator_mapping[child_cls.name].should_not be_nil
|
|
683
639
|
end
|
|
684
640
|
|
|
685
641
|
it 'works' do
|
|
@@ -690,10 +646,8 @@ describe Mongoid::Copyable do
|
|
|
690
646
|
end
|
|
691
647
|
end
|
|
692
648
|
|
|
693
|
-
context
|
|
694
|
-
|
|
695
|
-
context "when using embeds_one associations" do
|
|
696
|
-
|
|
649
|
+
context 'when fields are removed before cloning' do
|
|
650
|
+
context 'when using embeds_one associations' do
|
|
697
651
|
before do
|
|
698
652
|
class CloneParent
|
|
699
653
|
include Mongoid::Document
|
|
@@ -722,7 +676,6 @@ describe Mongoid::Copyable do
|
|
|
722
676
|
field :e, type: :string
|
|
723
677
|
field :f, type: :string
|
|
724
678
|
end
|
|
725
|
-
|
|
726
679
|
end
|
|
727
680
|
|
|
728
681
|
after do
|
|
@@ -731,15 +684,15 @@ describe Mongoid::Copyable do
|
|
|
731
684
|
Object.send(:remove_const, :CloneGrandchild)
|
|
732
685
|
end
|
|
733
686
|
|
|
734
|
-
context
|
|
735
|
-
|
|
687
|
+
context 'when removing from the parent' do
|
|
736
688
|
before do
|
|
737
|
-
CloneParent.create(a:
|
|
689
|
+
CloneParent.create(a: '1', b: '2')
|
|
738
690
|
|
|
739
691
|
Object.send(:remove_const, :CloneParent)
|
|
740
692
|
|
|
741
693
|
class CloneParent
|
|
742
694
|
include Mongoid::Document
|
|
695
|
+
|
|
743
696
|
field :a, type: :string
|
|
744
697
|
end
|
|
745
698
|
end
|
|
@@ -753,22 +706,21 @@ describe Mongoid::Copyable do
|
|
|
753
706
|
end.to raise_error(NoMethodError)
|
|
754
707
|
end
|
|
755
708
|
|
|
756
|
-
it
|
|
757
|
-
expect(parent.attributes).to include({
|
|
709
|
+
it 'contains the missing field in the attributes' do
|
|
710
|
+
expect(parent.attributes).to include({ 'b' => '2' })
|
|
758
711
|
end
|
|
759
712
|
|
|
760
|
-
it
|
|
713
|
+
it 'clones correctly' do
|
|
761
714
|
expect(clone).to be_a(CloneParent)
|
|
762
|
-
expect(clone.a).to eq(
|
|
763
|
-
expect(clone.attributes).to include({
|
|
715
|
+
expect(clone.a).to eq('1')
|
|
716
|
+
expect(clone.attributes).to include({ 'b' => '2' })
|
|
764
717
|
end
|
|
765
718
|
end
|
|
766
719
|
|
|
767
|
-
context
|
|
768
|
-
|
|
720
|
+
context 'when removing from the child' do
|
|
769
721
|
before do
|
|
770
|
-
parent = CloneParent.new(a:
|
|
771
|
-
parent.clone_child = CloneChild.new(c:
|
|
722
|
+
parent = CloneParent.new(a: '1', b: '2')
|
|
723
|
+
parent.clone_child = CloneChild.new(c: '3', d: '4')
|
|
772
724
|
parent.save
|
|
773
725
|
|
|
774
726
|
Object.send(:remove_const, :CloneParent)
|
|
@@ -776,6 +728,7 @@ describe Mongoid::Copyable do
|
|
|
776
728
|
|
|
777
729
|
class CloneParent
|
|
778
730
|
include Mongoid::Document
|
|
731
|
+
|
|
779
732
|
embeds_one :clone_child
|
|
780
733
|
field :a, type: :string
|
|
781
734
|
field :b, type: :string
|
|
@@ -783,6 +736,7 @@ describe Mongoid::Copyable do
|
|
|
783
736
|
|
|
784
737
|
class CloneChild
|
|
785
738
|
include Mongoid::Document
|
|
739
|
+
|
|
786
740
|
embedded_in :clone_parent
|
|
787
741
|
field :c, type: :string
|
|
788
742
|
end
|
|
@@ -797,29 +751,28 @@ describe Mongoid::Copyable do
|
|
|
797
751
|
end.to raise_error(NoMethodError)
|
|
798
752
|
end
|
|
799
753
|
|
|
800
|
-
it
|
|
801
|
-
expect(parent.clone_child.attributes).to include({
|
|
754
|
+
it 'contains the missing field in the attributes' do
|
|
755
|
+
expect(parent.clone_child.attributes).to include({ 'd' => '4' })
|
|
802
756
|
end
|
|
803
757
|
|
|
804
|
-
it
|
|
758
|
+
it 'clones the parent correctly' do
|
|
805
759
|
expect(clone).to be_a(CloneParent)
|
|
806
|
-
expect(clone.a).to eq(
|
|
807
|
-
expect(clone.b).to eq(
|
|
760
|
+
expect(clone.a).to eq('1')
|
|
761
|
+
expect(clone.b).to eq('2')
|
|
808
762
|
end
|
|
809
763
|
|
|
810
|
-
it
|
|
764
|
+
it 'clones the child correctly' do
|
|
811
765
|
expect(clone.clone_child).to be_a(CloneChild)
|
|
812
|
-
expect(clone.clone_child.c).to eq(
|
|
813
|
-
expect(clone.clone_child.attributes).to include({
|
|
766
|
+
expect(clone.clone_child.c).to eq('3')
|
|
767
|
+
expect(clone.clone_child.attributes).to include({ 'd' => '4' })
|
|
814
768
|
end
|
|
815
769
|
end
|
|
816
770
|
|
|
817
|
-
context
|
|
818
|
-
|
|
771
|
+
context 'when removing from the grandchild' do
|
|
819
772
|
before do
|
|
820
|
-
parent = CloneParent.new(a:
|
|
821
|
-
parent.clone_child = CloneChild.new(c:
|
|
822
|
-
parent.clone_child.clone_grandchild = CloneGrandchild.new(e:
|
|
773
|
+
parent = CloneParent.new(a: '1', b: '2')
|
|
774
|
+
parent.clone_child = CloneChild.new(c: '3', d: '4')
|
|
775
|
+
parent.clone_child.clone_grandchild = CloneGrandchild.new(e: '5', f: '6')
|
|
823
776
|
parent.save
|
|
824
777
|
|
|
825
778
|
Object.send(:remove_const, :CloneParent)
|
|
@@ -828,6 +781,7 @@ describe Mongoid::Copyable do
|
|
|
828
781
|
|
|
829
782
|
class CloneParent
|
|
830
783
|
include Mongoid::Document
|
|
784
|
+
|
|
831
785
|
embeds_one :clone_child
|
|
832
786
|
field :a, type: :string
|
|
833
787
|
field :b, type: :string
|
|
@@ -835,6 +789,7 @@ describe Mongoid::Copyable do
|
|
|
835
789
|
|
|
836
790
|
class CloneChild
|
|
837
791
|
include Mongoid::Document
|
|
792
|
+
|
|
838
793
|
embedded_in :clone_parent
|
|
839
794
|
embeds_one :clone_grandchild
|
|
840
795
|
field :c, type: :string
|
|
@@ -843,6 +798,7 @@ describe Mongoid::Copyable do
|
|
|
843
798
|
|
|
844
799
|
class CloneGrandchild
|
|
845
800
|
include Mongoid::Document
|
|
801
|
+
|
|
846
802
|
embedded_in :clone_child
|
|
847
803
|
field :e, type: :string
|
|
848
804
|
end
|
|
@@ -857,32 +813,31 @@ describe Mongoid::Copyable do
|
|
|
857
813
|
end.to raise_error(NoMethodError)
|
|
858
814
|
end
|
|
859
815
|
|
|
860
|
-
it
|
|
861
|
-
expect(parent.clone_child.clone_grandchild.attributes).to include({
|
|
816
|
+
it 'contains the missing field in the attributes' do
|
|
817
|
+
expect(parent.clone_child.clone_grandchild.attributes).to include({ 'f' => '6' })
|
|
862
818
|
end
|
|
863
819
|
|
|
864
|
-
it
|
|
820
|
+
it 'clones the parent correctly' do
|
|
865
821
|
expect(clone).to be_a(CloneParent)
|
|
866
|
-
expect(clone.a).to eq(
|
|
867
|
-
expect(clone.b).to eq(
|
|
822
|
+
expect(clone.a).to eq('1')
|
|
823
|
+
expect(clone.b).to eq('2')
|
|
868
824
|
end
|
|
869
825
|
|
|
870
|
-
it
|
|
826
|
+
it 'clones the child correctly' do
|
|
871
827
|
expect(clone.clone_child).to be_a(CloneChild)
|
|
872
|
-
expect(clone.clone_child.c).to eq(
|
|
873
|
-
expect(clone.clone_child.d).to eq(
|
|
828
|
+
expect(clone.clone_child.c).to eq('3')
|
|
829
|
+
expect(clone.clone_child.d).to eq('4')
|
|
874
830
|
end
|
|
875
831
|
|
|
876
|
-
it
|
|
832
|
+
it 'clones the child correctly' do
|
|
877
833
|
expect(clone.clone_child.clone_grandchild).to be_a(CloneGrandchild)
|
|
878
|
-
expect(clone.clone_child.clone_grandchild.e).to eq(
|
|
879
|
-
expect(clone.clone_child.clone_grandchild.attributes).to include({
|
|
834
|
+
expect(clone.clone_child.clone_grandchild.e).to eq('5')
|
|
835
|
+
expect(clone.clone_child.clone_grandchild.attributes).to include({ 'f' => '6' })
|
|
880
836
|
end
|
|
881
837
|
end
|
|
882
838
|
end
|
|
883
839
|
|
|
884
|
-
context
|
|
885
|
-
|
|
840
|
+
context 'when using embeds_many associations' do
|
|
886
841
|
before do
|
|
887
842
|
class CloneParent
|
|
888
843
|
include Mongoid::Document
|
|
@@ -911,7 +866,6 @@ describe Mongoid::Copyable do
|
|
|
911
866
|
field :e, type: :string
|
|
912
867
|
field :f, type: :string
|
|
913
868
|
end
|
|
914
|
-
|
|
915
869
|
end
|
|
916
870
|
|
|
917
871
|
after do
|
|
@@ -920,15 +874,15 @@ describe Mongoid::Copyable do
|
|
|
920
874
|
Object.send(:remove_const, :CloneGrandchild)
|
|
921
875
|
end
|
|
922
876
|
|
|
923
|
-
context
|
|
924
|
-
|
|
877
|
+
context 'when removing from the parent' do
|
|
925
878
|
before do
|
|
926
|
-
CloneParent.create(a:
|
|
879
|
+
CloneParent.create(a: '1', b: '2')
|
|
927
880
|
|
|
928
881
|
Object.send(:remove_const, :CloneParent)
|
|
929
882
|
|
|
930
883
|
class CloneParent
|
|
931
884
|
include Mongoid::Document
|
|
885
|
+
|
|
932
886
|
field :a, type: :string
|
|
933
887
|
end
|
|
934
888
|
end
|
|
@@ -942,22 +896,21 @@ describe Mongoid::Copyable do
|
|
|
942
896
|
end.to raise_error(NoMethodError)
|
|
943
897
|
end
|
|
944
898
|
|
|
945
|
-
it
|
|
946
|
-
expect(parent.attributes).to include({
|
|
899
|
+
it 'contains the missing field in the attributes' do
|
|
900
|
+
expect(parent.attributes).to include({ 'b' => '2' })
|
|
947
901
|
end
|
|
948
902
|
|
|
949
|
-
it
|
|
903
|
+
it 'clones correctly' do
|
|
950
904
|
expect(clone).to be_a(CloneParent)
|
|
951
|
-
expect(clone.a).to eq(
|
|
952
|
-
expect(clone.attributes).to include({
|
|
905
|
+
expect(clone.a).to eq('1')
|
|
906
|
+
expect(clone.attributes).to include({ 'b' => '2' })
|
|
953
907
|
end
|
|
954
908
|
end
|
|
955
909
|
|
|
956
|
-
context
|
|
957
|
-
|
|
910
|
+
context 'when removing from the child' do
|
|
958
911
|
before do
|
|
959
|
-
parent = CloneParent.new(a:
|
|
960
|
-
parent.clone_children = [ CloneChild.new(c:
|
|
912
|
+
parent = CloneParent.new(a: '1', b: '2')
|
|
913
|
+
parent.clone_children = [ CloneChild.new(c: '3', d: '4'), CloneChild.new(c: '3', d: '4') ]
|
|
961
914
|
parent.save
|
|
962
915
|
|
|
963
916
|
Object.send(:remove_const, :CloneParent)
|
|
@@ -965,6 +918,7 @@ describe Mongoid::Copyable do
|
|
|
965
918
|
|
|
966
919
|
class CloneParent
|
|
967
920
|
include Mongoid::Document
|
|
921
|
+
|
|
968
922
|
embeds_many :clone_children
|
|
969
923
|
field :a, type: :string
|
|
970
924
|
field :b, type: :string
|
|
@@ -972,6 +926,7 @@ describe Mongoid::Copyable do
|
|
|
972
926
|
|
|
973
927
|
class CloneChild
|
|
974
928
|
include Mongoid::Document
|
|
929
|
+
|
|
975
930
|
embedded_in :clone_parent
|
|
976
931
|
field :c, type: :string
|
|
977
932
|
end
|
|
@@ -988,34 +943,33 @@ describe Mongoid::Copyable do
|
|
|
988
943
|
end
|
|
989
944
|
end
|
|
990
945
|
|
|
991
|
-
it
|
|
992
|
-
expect(parent.clone_children[0].attributes).to include({
|
|
993
|
-
expect(parent.clone_children[1].attributes).to include({
|
|
946
|
+
it 'contains the missing field in the attributes' do
|
|
947
|
+
expect(parent.clone_children[0].attributes).to include({ 'd' => '4' })
|
|
948
|
+
expect(parent.clone_children[1].attributes).to include({ 'd' => '4' })
|
|
994
949
|
end
|
|
995
950
|
|
|
996
|
-
it
|
|
951
|
+
it 'clones the parent correctly' do
|
|
997
952
|
expect(clone).to be_a(CloneParent)
|
|
998
|
-
expect(clone.a).to eq(
|
|
999
|
-
expect(clone.b).to eq(
|
|
953
|
+
expect(clone.a).to eq('1')
|
|
954
|
+
expect(clone.b).to eq('2')
|
|
1000
955
|
end
|
|
1001
956
|
|
|
1002
|
-
it
|
|
957
|
+
it 'clones the child correctly' do
|
|
1003
958
|
expect(clone.clone_children.length).to eq(2)
|
|
1004
959
|
clone.clone_children.each do |clone_child|
|
|
1005
960
|
expect(clone_child).to be_a(CloneChild)
|
|
1006
|
-
expect(clone_child.c).to eq(
|
|
1007
|
-
expect(clone_child.attributes).to include({
|
|
961
|
+
expect(clone_child.c).to eq('3')
|
|
962
|
+
expect(clone_child.attributes).to include({ 'd' => '4' })
|
|
1008
963
|
end
|
|
1009
964
|
end
|
|
1010
965
|
end
|
|
1011
966
|
|
|
1012
|
-
context
|
|
1013
|
-
|
|
967
|
+
context 'when removing from the grandchild' do
|
|
1014
968
|
before do
|
|
1015
|
-
parent = CloneParent.new(a:
|
|
1016
|
-
parent.clone_children = [ CloneChild.new(c:
|
|
969
|
+
parent = CloneParent.new(a: '1', b: '2')
|
|
970
|
+
parent.clone_children = [ CloneChild.new(c: '3', d: '4'), CloneChild.new(c: '3', d: '4') ]
|
|
1017
971
|
parent.clone_children.each do |cc|
|
|
1018
|
-
cc.clone_grandchildren = [ CloneGrandchild.new(e:
|
|
972
|
+
cc.clone_grandchildren = [ CloneGrandchild.new(e: '5', f: '6'), CloneGrandchild.new(e: '5', f: '6') ]
|
|
1019
973
|
end
|
|
1020
974
|
parent.save
|
|
1021
975
|
|
|
@@ -1025,6 +979,7 @@ describe Mongoid::Copyable do
|
|
|
1025
979
|
|
|
1026
980
|
class CloneParent
|
|
1027
981
|
include Mongoid::Document
|
|
982
|
+
|
|
1028
983
|
embeds_many :clone_children
|
|
1029
984
|
field :a, type: :string
|
|
1030
985
|
field :b, type: :string
|
|
@@ -1032,6 +987,7 @@ describe Mongoid::Copyable do
|
|
|
1032
987
|
|
|
1033
988
|
class CloneChild
|
|
1034
989
|
include Mongoid::Document
|
|
990
|
+
|
|
1035
991
|
embedded_in :clone_parent
|
|
1036
992
|
embeds_many :clone_grandchildren
|
|
1037
993
|
field :c, type: :string
|
|
@@ -1040,6 +996,7 @@ describe Mongoid::Copyable do
|
|
|
1040
996
|
|
|
1041
997
|
class CloneGrandchild
|
|
1042
998
|
include Mongoid::Document
|
|
999
|
+
|
|
1043
1000
|
embedded_in :clone_child
|
|
1044
1001
|
field :e, type: :string
|
|
1045
1002
|
end
|
|
@@ -1058,44 +1015,43 @@ describe Mongoid::Copyable do
|
|
|
1058
1015
|
end
|
|
1059
1016
|
end
|
|
1060
1017
|
|
|
1061
|
-
it
|
|
1018
|
+
it 'contains the missing field in the attributes' do
|
|
1062
1019
|
parent.clone_children.each do |cc|
|
|
1063
1020
|
cc.clone_grandchildren.each do |cg|
|
|
1064
|
-
expect(cg.attributes).to include({
|
|
1021
|
+
expect(cg.attributes).to include({ 'f' => '6' })
|
|
1065
1022
|
end
|
|
1066
1023
|
end
|
|
1067
1024
|
end
|
|
1068
1025
|
|
|
1069
|
-
it
|
|
1026
|
+
it 'clones the parent correctly' do
|
|
1070
1027
|
expect(clone).to be_a(CloneParent)
|
|
1071
|
-
expect(clone.a).to eq(
|
|
1072
|
-
expect(clone.b).to eq(
|
|
1028
|
+
expect(clone.a).to eq('1')
|
|
1029
|
+
expect(clone.b).to eq('2')
|
|
1073
1030
|
end
|
|
1074
1031
|
|
|
1075
|
-
it
|
|
1032
|
+
it 'clones the child correctly' do
|
|
1076
1033
|
expect(clone.clone_children.length).to eq(2)
|
|
1077
1034
|
clone.clone_children.each do |clone_child|
|
|
1078
1035
|
expect(clone_child).to be_a(CloneChild)
|
|
1079
|
-
expect(clone_child.c).to eq(
|
|
1080
|
-
expect(clone_child.attributes).to include({
|
|
1036
|
+
expect(clone_child.c).to eq('3')
|
|
1037
|
+
expect(clone_child.attributes).to include({ 'd' => '4' })
|
|
1081
1038
|
end
|
|
1082
1039
|
end
|
|
1083
1040
|
|
|
1084
|
-
it
|
|
1041
|
+
it 'clones the grandchild correctly' do
|
|
1085
1042
|
parent.clone_children.each do |cc|
|
|
1086
1043
|
expect(cc.clone_grandchildren.length).to eq(2)
|
|
1087
1044
|
cc.clone_grandchildren.each do |cg|
|
|
1088
1045
|
expect(cg).to be_a(CloneGrandchild)
|
|
1089
|
-
expect(cg.e).to eq(
|
|
1090
|
-
expect(cg.attributes).to include({
|
|
1046
|
+
expect(cg.e).to eq('5')
|
|
1047
|
+
expect(cg.attributes).to include({ 'f' => '6' })
|
|
1091
1048
|
end
|
|
1092
1049
|
end
|
|
1093
1050
|
end
|
|
1094
1051
|
end
|
|
1095
1052
|
end
|
|
1096
1053
|
|
|
1097
|
-
context
|
|
1098
|
-
|
|
1054
|
+
context 'when using embedded_in associations' do
|
|
1099
1055
|
before do
|
|
1100
1056
|
class CloneParent
|
|
1101
1057
|
include Mongoid::Document
|
|
@@ -1121,12 +1077,10 @@ describe Mongoid::Copyable do
|
|
|
1121
1077
|
Object.send(:remove_const, :CloneChild)
|
|
1122
1078
|
end
|
|
1123
1079
|
|
|
1124
|
-
|
|
1125
|
-
context "when accessing the parent" do
|
|
1126
|
-
|
|
1080
|
+
context 'when accessing the parent' do
|
|
1127
1081
|
before do
|
|
1128
|
-
parent = CloneParent.new(a:
|
|
1129
|
-
parent.clone_child = CloneChild.new(c:
|
|
1082
|
+
parent = CloneParent.new(a: '1', b: '2')
|
|
1083
|
+
parent.clone_child = CloneChild.new(c: '3', d: '4')
|
|
1130
1084
|
parent.save
|
|
1131
1085
|
end
|
|
1132
1086
|
|