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,24 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
3
|
+
require 'spec_helper'
|
|
5
4
|
|
|
6
5
|
describe Mongoid::Traversable do
|
|
7
|
-
|
|
8
|
-
describe "#_children" do
|
|
9
|
-
|
|
6
|
+
describe '#_children' do
|
|
10
7
|
let(:person) do
|
|
11
|
-
Person.new(title:
|
|
8
|
+
Person.new(title: 'King')
|
|
12
9
|
end
|
|
13
10
|
|
|
14
|
-
context
|
|
15
|
-
|
|
11
|
+
context 'with one level of embedding' do
|
|
16
12
|
let(:name) do
|
|
17
|
-
Name.new(first_name:
|
|
13
|
+
Name.new(first_name: 'Titus')
|
|
18
14
|
end
|
|
19
15
|
|
|
20
16
|
let(:address) do
|
|
21
|
-
Address.new(street:
|
|
17
|
+
Address.new(street: 'Queen St')
|
|
22
18
|
end
|
|
23
19
|
|
|
24
20
|
before do
|
|
@@ -26,27 +22,26 @@ describe Mongoid::Traversable do
|
|
|
26
22
|
person.addresses << address
|
|
27
23
|
end
|
|
28
24
|
|
|
29
|
-
it
|
|
25
|
+
it 'includes embeds_one documents' do
|
|
30
26
|
expect(person._children).to include(name)
|
|
31
27
|
end
|
|
32
28
|
|
|
33
|
-
it
|
|
29
|
+
it 'includes embeds_many documents' do
|
|
34
30
|
expect(person._children).to include(address)
|
|
35
31
|
end
|
|
36
32
|
end
|
|
37
33
|
|
|
38
|
-
context
|
|
39
|
-
|
|
34
|
+
context 'with multiple levels of embedding' do
|
|
40
35
|
let(:name) do
|
|
41
|
-
Name.new(first_name:
|
|
36
|
+
Name.new(first_name: 'Titus')
|
|
42
37
|
end
|
|
43
38
|
|
|
44
39
|
let(:address) do
|
|
45
|
-
Address.new(street:
|
|
40
|
+
Address.new(street: 'Queen St')
|
|
46
41
|
end
|
|
47
42
|
|
|
48
43
|
let(:location) do
|
|
49
|
-
Location.new(name:
|
|
44
|
+
Location.new(name: 'Work')
|
|
50
45
|
end
|
|
51
46
|
|
|
52
47
|
before do
|
|
@@ -55,34 +50,32 @@ describe Mongoid::Traversable do
|
|
|
55
50
|
person.addresses << address
|
|
56
51
|
end
|
|
57
52
|
|
|
58
|
-
it
|
|
53
|
+
it 'includes embeds_one documents' do
|
|
59
54
|
expect(person._children).to include(name)
|
|
60
55
|
end
|
|
61
56
|
|
|
62
|
-
it
|
|
57
|
+
it 'includes embeds_many documents' do
|
|
63
58
|
expect(person._children).to include(address)
|
|
64
59
|
end
|
|
65
60
|
|
|
66
|
-
it
|
|
61
|
+
it 'does not include embedded documents multiple levels deep' do
|
|
67
62
|
expect(person._children).not_to include(location)
|
|
68
63
|
end
|
|
69
64
|
end
|
|
70
65
|
end
|
|
71
66
|
|
|
72
|
-
describe
|
|
73
|
-
|
|
67
|
+
describe '#_descendants' do
|
|
74
68
|
let(:person) do
|
|
75
|
-
Person.new(title:
|
|
69
|
+
Person.new(title: 'King')
|
|
76
70
|
end
|
|
77
71
|
|
|
78
|
-
context
|
|
79
|
-
|
|
72
|
+
context 'with one level of embedding' do
|
|
80
73
|
let(:name) do
|
|
81
|
-
Name.new(first_name:
|
|
74
|
+
Name.new(first_name: 'Titus')
|
|
82
75
|
end
|
|
83
76
|
|
|
84
77
|
let(:address) do
|
|
85
|
-
Address.new(street:
|
|
78
|
+
Address.new(street: 'Queen St')
|
|
86
79
|
end
|
|
87
80
|
|
|
88
81
|
before do
|
|
@@ -90,27 +83,26 @@ describe Mongoid::Traversable do
|
|
|
90
83
|
person.addresses << address
|
|
91
84
|
end
|
|
92
85
|
|
|
93
|
-
it
|
|
86
|
+
it 'includes embeds_one documents' do
|
|
94
87
|
expect(person._descendants).to include(name)
|
|
95
88
|
end
|
|
96
89
|
|
|
97
|
-
it
|
|
90
|
+
it 'includes embeds_many documents' do
|
|
98
91
|
expect(person._descendants).to include(address)
|
|
99
92
|
end
|
|
100
93
|
end
|
|
101
94
|
|
|
102
|
-
context
|
|
103
|
-
|
|
95
|
+
context 'with multiple levels of embedding' do
|
|
104
96
|
let(:name) do
|
|
105
|
-
Name.new(first_name:
|
|
97
|
+
Name.new(first_name: 'Titus')
|
|
106
98
|
end
|
|
107
99
|
|
|
108
100
|
let(:address) do
|
|
109
|
-
Address.new(street:
|
|
101
|
+
Address.new(street: 'Queen St')
|
|
110
102
|
end
|
|
111
103
|
|
|
112
104
|
let(:location) do
|
|
113
|
-
Location.new(name:
|
|
105
|
+
Location.new(name: 'Work')
|
|
114
106
|
end
|
|
115
107
|
|
|
116
108
|
before do
|
|
@@ -119,63 +111,55 @@ describe Mongoid::Traversable do
|
|
|
119
111
|
person.addresses << address
|
|
120
112
|
end
|
|
121
113
|
|
|
122
|
-
it
|
|
114
|
+
it 'includes embeds_one documents' do
|
|
123
115
|
expect(person._descendants).to include(name)
|
|
124
116
|
end
|
|
125
117
|
|
|
126
|
-
it
|
|
118
|
+
it 'includes embeds_many documents' do
|
|
127
119
|
expect(person._descendants).to include(address)
|
|
128
120
|
end
|
|
129
121
|
|
|
130
|
-
it
|
|
122
|
+
it 'includes embedded documents multiple levels deep' do
|
|
131
123
|
expect(person._descendants).to include(location)
|
|
132
124
|
end
|
|
133
125
|
end
|
|
134
126
|
end
|
|
135
127
|
|
|
136
|
-
describe
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
it "returns true" do
|
|
128
|
+
describe '.hereditary?' do
|
|
129
|
+
context 'when the document is a subclass' do
|
|
130
|
+
it 'returns true' do
|
|
141
131
|
expect(Circle.hereditary?).to be true
|
|
142
132
|
end
|
|
143
133
|
end
|
|
144
134
|
|
|
145
|
-
context
|
|
146
|
-
|
|
147
|
-
it "returns false" do
|
|
135
|
+
context 'when the document is not a subclass' do
|
|
136
|
+
it 'returns false' do
|
|
148
137
|
expect(Shape.hereditary?).to be false
|
|
149
138
|
end
|
|
150
139
|
end
|
|
151
140
|
end
|
|
152
141
|
|
|
153
|
-
describe
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
it "returns true" do
|
|
142
|
+
describe '#hereditary?' do
|
|
143
|
+
context 'when the document is a subclass' do
|
|
144
|
+
it 'returns true' do
|
|
158
145
|
expect(Circle.new).to be_hereditary
|
|
159
146
|
end
|
|
160
147
|
end
|
|
161
148
|
|
|
162
|
-
context
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
expect(Shape.new).to_not be_hereditary
|
|
149
|
+
context 'when the document is not a subclass' do
|
|
150
|
+
it 'returns false' do
|
|
151
|
+
expect(Shape.new).not_to be_hereditary
|
|
166
152
|
end
|
|
167
153
|
end
|
|
168
154
|
end
|
|
169
155
|
|
|
170
|
-
describe
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
expect(Actress.localized_fields).to_not equal(Actor.localized_fields)
|
|
156
|
+
describe '#inherited' do
|
|
157
|
+
it 'duplicates the localized fields' do
|
|
158
|
+
expect(Actress.localized_fields).not_to equal(Actor.localized_fields)
|
|
174
159
|
end
|
|
175
160
|
end
|
|
176
161
|
|
|
177
|
-
describe
|
|
178
|
-
|
|
162
|
+
describe '#parentize' do
|
|
179
163
|
let(:address) do
|
|
180
164
|
Address.new
|
|
181
165
|
end
|
|
@@ -188,50 +172,46 @@ describe Mongoid::Traversable do
|
|
|
188
172
|
address.parentize(person)
|
|
189
173
|
end
|
|
190
174
|
|
|
191
|
-
it
|
|
175
|
+
it 'sets the parent document' do
|
|
192
176
|
expect(address._parent).to eq(person)
|
|
193
177
|
end
|
|
194
178
|
end
|
|
195
179
|
|
|
196
|
-
describe
|
|
197
|
-
|
|
180
|
+
describe '#remove_child' do
|
|
198
181
|
let(:person) do
|
|
199
182
|
Person.new
|
|
200
183
|
end
|
|
201
184
|
|
|
202
|
-
context
|
|
203
|
-
|
|
185
|
+
context 'when child is an embeds one' do
|
|
204
186
|
let!(:name) do
|
|
205
|
-
person.build_name(first_name:
|
|
187
|
+
person.build_name(first_name: 'James')
|
|
206
188
|
end
|
|
207
189
|
|
|
208
190
|
before do
|
|
209
191
|
person.remove_child(name)
|
|
210
192
|
end
|
|
211
193
|
|
|
212
|
-
it
|
|
194
|
+
it 'removes the relation instance' do
|
|
213
195
|
expect(person.name).to be_nil
|
|
214
196
|
end
|
|
215
197
|
end
|
|
216
198
|
|
|
217
|
-
context
|
|
218
|
-
|
|
199
|
+
context 'when child is an embeds many' do
|
|
219
200
|
let!(:address) do
|
|
220
|
-
person.addresses.build(street:
|
|
201
|
+
person.addresses.build(street: 'Upper St')
|
|
221
202
|
end
|
|
222
203
|
|
|
223
204
|
before do
|
|
224
205
|
person.remove_child(address)
|
|
225
206
|
end
|
|
226
207
|
|
|
227
|
-
it
|
|
208
|
+
it 'removes the document from the relation target' do
|
|
228
209
|
expect(person.addresses).to be_empty
|
|
229
210
|
end
|
|
230
211
|
end
|
|
231
212
|
end
|
|
232
213
|
|
|
233
|
-
describe
|
|
234
|
-
|
|
214
|
+
describe '#_root' do
|
|
235
215
|
let(:address) do
|
|
236
216
|
Address.new
|
|
237
217
|
end
|
|
@@ -244,64 +224,55 @@ describe Mongoid::Traversable do
|
|
|
244
224
|
address.parentize(person)
|
|
245
225
|
end
|
|
246
226
|
|
|
247
|
-
context
|
|
248
|
-
|
|
249
|
-
it "returns the root" do
|
|
227
|
+
context 'when the document is not the root' do
|
|
228
|
+
it 'returns the root' do
|
|
250
229
|
expect(address._root).to eq(person)
|
|
251
230
|
end
|
|
252
231
|
end
|
|
253
232
|
|
|
254
|
-
context
|
|
255
|
-
|
|
256
|
-
it "returns self" do
|
|
233
|
+
context 'when the document is the root' do
|
|
234
|
+
it 'returns self' do
|
|
257
235
|
expect(person._root).to eq(person)
|
|
258
236
|
end
|
|
259
237
|
end
|
|
260
238
|
end
|
|
261
239
|
|
|
262
|
-
describe
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
context "when the document is not embedded" do
|
|
267
|
-
|
|
240
|
+
describe '#_root?' do
|
|
241
|
+
context 'when the document can be the root' do
|
|
242
|
+
context 'when the document is not embedded' do
|
|
268
243
|
let(:band) do
|
|
269
244
|
Band.new
|
|
270
245
|
end
|
|
271
246
|
|
|
272
|
-
it
|
|
247
|
+
it 'returns true' do
|
|
273
248
|
expect(band).to be__root
|
|
274
249
|
end
|
|
275
250
|
end
|
|
276
251
|
|
|
277
|
-
context
|
|
278
|
-
|
|
252
|
+
context 'when the document is embedded' do
|
|
279
253
|
let(:root_role) do
|
|
280
254
|
Role.new
|
|
281
255
|
end
|
|
282
256
|
|
|
283
|
-
context
|
|
284
|
-
|
|
285
|
-
it "returns true" do
|
|
257
|
+
context 'when the document is root in a cyclic relation' do
|
|
258
|
+
it 'returns true' do
|
|
286
259
|
expect(root_role).to be__root
|
|
287
260
|
end
|
|
288
261
|
end
|
|
289
262
|
|
|
290
|
-
context
|
|
291
|
-
|
|
263
|
+
context 'when document is embedded in a cyclic relation' do
|
|
292
264
|
let(:child_role) do
|
|
293
265
|
root_role.child_roles.build
|
|
294
266
|
end
|
|
295
267
|
|
|
296
|
-
it
|
|
297
|
-
expect(child_role).
|
|
268
|
+
it 'returns false' do
|
|
269
|
+
expect(child_role).not_to be__root
|
|
298
270
|
end
|
|
299
271
|
end
|
|
300
272
|
end
|
|
301
273
|
end
|
|
302
274
|
|
|
303
|
-
context
|
|
304
|
-
|
|
275
|
+
context 'when the document is embedded and not cyclic' do
|
|
305
276
|
let(:person) do
|
|
306
277
|
Person.new
|
|
307
278
|
end
|
|
@@ -310,55 +281,54 @@ describe Mongoid::Traversable do
|
|
|
310
281
|
person.addresses.build
|
|
311
282
|
end
|
|
312
283
|
|
|
313
|
-
it
|
|
314
|
-
expect(address).
|
|
284
|
+
it 'returns false' do
|
|
285
|
+
expect(address).not_to be__root
|
|
315
286
|
end
|
|
316
287
|
end
|
|
317
288
|
end
|
|
318
289
|
|
|
319
|
-
describe
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
expect(Mongoid.discriminator_key).to eq("_type")
|
|
290
|
+
describe '#discriminator_key' do
|
|
291
|
+
context 'when the discriminator key is not set on a class' do
|
|
292
|
+
it 'sets the global discriminator key to _type' do
|
|
293
|
+
expect(Mongoid.discriminator_key).to eq('_type')
|
|
324
294
|
end
|
|
325
295
|
|
|
326
|
-
it
|
|
327
|
-
expect(Instrument.discriminator_key).to eq(
|
|
296
|
+
it 'sets the parent discriminator key to _type' do
|
|
297
|
+
expect(Instrument.discriminator_key).to eq('_type')
|
|
328
298
|
end
|
|
329
299
|
|
|
330
|
-
it
|
|
331
|
-
expect(Piano.discriminator_key).to eq(
|
|
300
|
+
it 'sets the child discriminator key to _type: Piano' do
|
|
301
|
+
expect(Piano.discriminator_key).to eq('_type')
|
|
332
302
|
end
|
|
333
303
|
|
|
334
|
-
it
|
|
335
|
-
expect(Guitar.discriminator_key).to eq(
|
|
304
|
+
it 'sets the child discriminator key to _type: Guitar' do
|
|
305
|
+
expect(Guitar.discriminator_key).to eq('_type')
|
|
336
306
|
end
|
|
337
307
|
end
|
|
338
308
|
|
|
339
|
-
context
|
|
309
|
+
context 'when the discriminator key is changed at the global level' do
|
|
340
310
|
config_override :discriminator_key, 'hello'
|
|
341
311
|
|
|
342
|
-
it
|
|
343
|
-
expect(Mongoid.discriminator_key).to eq(
|
|
312
|
+
it 'sets the correct value globally' do
|
|
313
|
+
expect(Mongoid.discriminator_key).to eq('hello')
|
|
344
314
|
end
|
|
345
315
|
|
|
346
|
-
it
|
|
347
|
-
expect(Instrument.discriminator_key).to eq(
|
|
316
|
+
it 'is changed in the parent' do
|
|
317
|
+
expect(Instrument.discriminator_key).to eq('hello')
|
|
348
318
|
end
|
|
349
319
|
|
|
350
|
-
it
|
|
351
|
-
expect(Piano.discriminator_key).to eq(
|
|
320
|
+
it 'is changed in the child: Piano' do
|
|
321
|
+
expect(Piano.discriminator_key).to eq('hello')
|
|
352
322
|
end
|
|
353
323
|
|
|
354
|
-
it
|
|
355
|
-
expect(Guitar.discriminator_key).to eq(
|
|
324
|
+
it 'is changed in the child: Guitar' do
|
|
325
|
+
expect(Guitar.discriminator_key).to eq('hello')
|
|
356
326
|
end
|
|
357
327
|
end
|
|
358
328
|
|
|
359
|
-
context
|
|
329
|
+
context 'when the discriminator key is changed in the parent' do
|
|
360
330
|
before do
|
|
361
|
-
Instrument.discriminator_key =
|
|
331
|
+
Instrument.discriminator_key = 'hello2'
|
|
362
332
|
end
|
|
363
333
|
|
|
364
334
|
after do
|
|
@@ -366,19 +336,19 @@ describe Mongoid::Traversable do
|
|
|
366
336
|
end
|
|
367
337
|
|
|
368
338
|
it "doesn't change the global setting" do
|
|
369
|
-
expect(Mongoid.discriminator_key).to eq(
|
|
339
|
+
expect(Mongoid.discriminator_key).to eq('_type')
|
|
370
340
|
end
|
|
371
341
|
|
|
372
|
-
it
|
|
373
|
-
expect(Instrument.discriminator_key).to eq(
|
|
342
|
+
it 'changes in the parent' do
|
|
343
|
+
expect(Instrument.discriminator_key).to eq('hello2')
|
|
374
344
|
end
|
|
375
345
|
|
|
376
|
-
it
|
|
377
|
-
expect(Piano.discriminator_key).to eq(
|
|
346
|
+
it 'changes in the child class: Piano' do
|
|
347
|
+
expect(Piano.discriminator_key).to eq('hello2')
|
|
378
348
|
end
|
|
379
349
|
|
|
380
|
-
it
|
|
381
|
-
expect(Guitar.discriminator_key).to eq(
|
|
350
|
+
it 'changes in the child class: Guitar' do
|
|
351
|
+
expect(Guitar.discriminator_key).to eq('hello2')
|
|
382
352
|
end
|
|
383
353
|
|
|
384
354
|
context 'when discriminator key is set to nil in parent' do
|
|
@@ -387,117 +357,114 @@ describe Mongoid::Traversable do
|
|
|
387
357
|
end
|
|
388
358
|
|
|
389
359
|
it "doesn't change the global setting" do
|
|
390
|
-
expect(Mongoid.discriminator_key).to eq(
|
|
360
|
+
expect(Mongoid.discriminator_key).to eq('_type')
|
|
391
361
|
end
|
|
392
362
|
|
|
393
363
|
it 'uses global setting' do
|
|
394
|
-
expect(Instrument.discriminator_key).to eq(
|
|
364
|
+
expect(Instrument.discriminator_key).to eq('_type')
|
|
395
365
|
end
|
|
396
366
|
|
|
397
|
-
it
|
|
398
|
-
expect(Piano.discriminator_key).to eq(
|
|
367
|
+
it 'changes in the child class: Piano' do
|
|
368
|
+
expect(Piano.discriminator_key).to eq('_type')
|
|
399
369
|
end
|
|
400
370
|
|
|
401
|
-
it
|
|
402
|
-
expect(Guitar.discriminator_key).to eq(
|
|
371
|
+
it 'changes in the child class: Guitar' do
|
|
372
|
+
expect(Guitar.discriminator_key).to eq('_type')
|
|
403
373
|
end
|
|
404
374
|
end
|
|
405
375
|
|
|
406
|
-
context
|
|
376
|
+
context 'when resetting the discriminator key after nil' do
|
|
407
377
|
before do
|
|
408
378
|
Instrument.discriminator_key = nil
|
|
409
|
-
Instrument.discriminator_key =
|
|
379
|
+
Instrument.discriminator_key = 'hello4'
|
|
410
380
|
end
|
|
411
381
|
|
|
412
382
|
it "doesn't change the global setting" do
|
|
413
|
-
expect(Mongoid.discriminator_key).to eq(
|
|
383
|
+
expect(Mongoid.discriminator_key).to eq('_type')
|
|
414
384
|
end
|
|
415
385
|
|
|
416
386
|
it 'has the correct value' do
|
|
417
|
-
expect(Instrument.discriminator_key).to eq(
|
|
387
|
+
expect(Instrument.discriminator_key).to eq('hello4')
|
|
418
388
|
end
|
|
419
389
|
|
|
420
|
-
it
|
|
421
|
-
expect(Piano.discriminator_key).to eq(
|
|
390
|
+
it 'changes in the child class: Piano' do
|
|
391
|
+
expect(Piano.discriminator_key).to eq('hello4')
|
|
422
392
|
end
|
|
423
393
|
|
|
424
|
-
it
|
|
425
|
-
expect(Guitar.discriminator_key).to eq(
|
|
394
|
+
it 'changes in the child class: Guitar' do
|
|
395
|
+
expect(Guitar.discriminator_key).to eq('hello4')
|
|
426
396
|
end
|
|
427
397
|
end
|
|
428
398
|
end
|
|
429
399
|
|
|
430
|
-
context
|
|
400
|
+
context 'when the discriminator key is changed in the child' do
|
|
431
401
|
let(:set_discriminator_key) do
|
|
432
|
-
Guitar.discriminator_key =
|
|
402
|
+
Guitar.discriminator_key = 'hello3'
|
|
433
403
|
end
|
|
434
404
|
|
|
435
|
-
before
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
rescue
|
|
439
|
-
end
|
|
405
|
+
before do
|
|
406
|
+
set_discriminator_key
|
|
407
|
+
rescue StandardError
|
|
440
408
|
end
|
|
441
409
|
|
|
442
|
-
it
|
|
410
|
+
it 'raises an error' do
|
|
443
411
|
expect do
|
|
444
412
|
set_discriminator_key
|
|
445
413
|
end.to raise_error(Mongoid::Errors::InvalidDiscriminatorKeyTarget)
|
|
446
414
|
end
|
|
447
415
|
|
|
448
416
|
it "doesn't change in that class" do
|
|
449
|
-
expect(Guitar.discriminator_key).to eq(
|
|
417
|
+
expect(Guitar.discriminator_key).to eq('_type')
|
|
450
418
|
end
|
|
451
419
|
|
|
452
420
|
it "doesn't change the global setting" do
|
|
453
|
-
expect(Mongoid.discriminator_key).to eq(
|
|
421
|
+
expect(Mongoid.discriminator_key).to eq('_type')
|
|
454
422
|
end
|
|
455
423
|
|
|
456
424
|
it "doesn't change in the sibling" do
|
|
457
|
-
expect(Piano.discriminator_key).to eq(
|
|
425
|
+
expect(Piano.discriminator_key).to eq('_type')
|
|
458
426
|
end
|
|
459
427
|
|
|
460
428
|
it "doesn't change in the parent" do
|
|
461
|
-
expect(Instrument.discriminator_key).to eq(
|
|
429
|
+
expect(Instrument.discriminator_key).to eq('_type')
|
|
462
430
|
end
|
|
463
431
|
end
|
|
464
432
|
|
|
465
|
-
context
|
|
466
|
-
|
|
433
|
+
context 'when discriminator key is called on an instance' do
|
|
467
434
|
let(:guitar) do
|
|
468
435
|
Guitar.new
|
|
469
436
|
end
|
|
470
437
|
|
|
471
|
-
it
|
|
438
|
+
it 'raises an error on setter' do
|
|
472
439
|
expect do
|
|
473
|
-
guitar.discriminator_key =
|
|
440
|
+
guitar.discriminator_key = 'hello3'
|
|
474
441
|
end.to raise_error(NoMethodError)
|
|
475
442
|
end
|
|
476
443
|
|
|
477
|
-
it
|
|
444
|
+
it 'raises an error on getter' do
|
|
478
445
|
expect do
|
|
479
446
|
guitar.discriminator_key
|
|
480
447
|
end.to raise_error(NoMethodError)
|
|
481
448
|
end
|
|
482
449
|
end
|
|
483
450
|
|
|
484
|
-
|
|
485
|
-
context
|
|
486
|
-
it
|
|
487
|
-
expect(Instrument.fields.keys).to include(
|
|
451
|
+
describe '.fields' do
|
|
452
|
+
context 'when the discriminator key is not changed' do
|
|
453
|
+
it 'creates a _type field in the parent' do
|
|
454
|
+
expect(Instrument.fields.keys).to include('_type')
|
|
488
455
|
end
|
|
489
456
|
|
|
490
|
-
it
|
|
491
|
-
expect(Guitar.fields.keys).to include(
|
|
457
|
+
it 'creates a _type field in the child: Guitar' do
|
|
458
|
+
expect(Guitar.fields.keys).to include('_type')
|
|
492
459
|
end
|
|
493
460
|
|
|
494
|
-
it
|
|
495
|
-
expect(Piano.fields.keys).to include(
|
|
461
|
+
it 'creates a _type field in the child: Piano' do
|
|
462
|
+
expect(Piano.fields.keys).to include('_type')
|
|
496
463
|
end
|
|
497
464
|
end
|
|
498
465
|
|
|
499
|
-
context
|
|
500
|
-
context
|
|
466
|
+
context 'when the discriminator key is changed at the base level' do
|
|
467
|
+
context 'after class creation' do
|
|
501
468
|
before do
|
|
502
469
|
class GlobalDiscriminatorParent
|
|
503
470
|
include Mongoid::Document
|
|
@@ -506,33 +473,32 @@ describe Mongoid::Traversable do
|
|
|
506
473
|
class GlobalDiscriminatorChild < GlobalDiscriminatorParent
|
|
507
474
|
end
|
|
508
475
|
|
|
509
|
-
Mongoid.discriminator_key =
|
|
476
|
+
Mongoid.discriminator_key = 'test'
|
|
510
477
|
end
|
|
511
478
|
|
|
512
479
|
after do
|
|
513
|
-
Mongoid.discriminator_key =
|
|
480
|
+
Mongoid.discriminator_key = '_type'
|
|
514
481
|
end
|
|
515
482
|
|
|
516
|
-
it
|
|
517
|
-
expect(GlobalDiscriminatorParent.fields.keys).to include(
|
|
483
|
+
it 'creates a field with the old global value in the parent' do
|
|
484
|
+
expect(GlobalDiscriminatorParent.fields.keys).to include('_type')
|
|
518
485
|
end
|
|
519
486
|
|
|
520
|
-
it
|
|
521
|
-
expect(GlobalDiscriminatorChild.fields.keys).to include(
|
|
487
|
+
it 'creates a field with the old global value in the child' do
|
|
488
|
+
expect(GlobalDiscriminatorChild.fields.keys).to include('_type')
|
|
522
489
|
end
|
|
523
490
|
|
|
524
|
-
it
|
|
525
|
-
expect(GlobalDiscriminatorParent.fields.keys).
|
|
491
|
+
it 'does not have the new global value in the parent' do
|
|
492
|
+
expect(GlobalDiscriminatorParent.fields.keys).not_to include('test')
|
|
526
493
|
end
|
|
527
494
|
|
|
528
|
-
it
|
|
529
|
-
expect(GlobalDiscriminatorChild.fields.keys).
|
|
495
|
+
it 'does not have the new global value in the child' do
|
|
496
|
+
expect(GlobalDiscriminatorChild.fields.keys).not_to include('test')
|
|
530
497
|
end
|
|
531
|
-
|
|
532
498
|
end
|
|
533
499
|
|
|
534
|
-
context
|
|
535
|
-
config_override :discriminator_key,
|
|
500
|
+
context 'before class creation' do
|
|
501
|
+
config_override :discriminator_key, 'test'
|
|
536
502
|
|
|
537
503
|
before do
|
|
538
504
|
class PreGlobalDiscriminatorParent
|
|
@@ -543,26 +509,26 @@ describe Mongoid::Traversable do
|
|
|
543
509
|
end
|
|
544
510
|
end
|
|
545
511
|
|
|
546
|
-
it
|
|
547
|
-
expect(PreGlobalDiscriminatorParent.fields.keys).to include(
|
|
512
|
+
it 'creates a field with new discriminator key in the parent' do
|
|
513
|
+
expect(PreGlobalDiscriminatorParent.fields.keys).to include('test')
|
|
548
514
|
end
|
|
549
515
|
|
|
550
|
-
it
|
|
551
|
-
expect(PreGlobalDiscriminatorChild.fields.keys).to include(
|
|
516
|
+
it 'creates a field with new discriminator key in the child' do
|
|
517
|
+
expect(PreGlobalDiscriminatorChild.fields.keys).to include('test')
|
|
552
518
|
end
|
|
553
519
|
|
|
554
|
-
it
|
|
555
|
-
expect(PreGlobalDiscriminatorParent.fields.keys).
|
|
520
|
+
it 'does not have the original discriminator key in the parent' do
|
|
521
|
+
expect(PreGlobalDiscriminatorParent.fields.keys).not_to include('_type')
|
|
556
522
|
end
|
|
557
523
|
|
|
558
|
-
it
|
|
559
|
-
expect(PreGlobalDiscriminatorChild.fields.keys).
|
|
524
|
+
it 'does not have the original discriminator key in the child' do
|
|
525
|
+
expect(PreGlobalDiscriminatorChild.fields.keys).not_to include('_type')
|
|
560
526
|
end
|
|
561
527
|
end
|
|
562
528
|
end
|
|
563
529
|
|
|
564
|
-
context
|
|
565
|
-
context
|
|
530
|
+
context 'when the discriminator key is changed in the parent' do
|
|
531
|
+
context 'after child class creation' do
|
|
566
532
|
before do
|
|
567
533
|
class LocalDiscriminatorParent
|
|
568
534
|
include Mongoid::Document
|
|
@@ -571,47 +537,48 @@ describe Mongoid::Traversable do
|
|
|
571
537
|
class LocalDiscriminatorChild < LocalDiscriminatorParent
|
|
572
538
|
end
|
|
573
539
|
|
|
574
|
-
LocalDiscriminatorParent.discriminator_key =
|
|
540
|
+
LocalDiscriminatorParent.discriminator_key = 'test2'
|
|
575
541
|
end
|
|
576
542
|
|
|
577
|
-
it
|
|
578
|
-
expect(LocalDiscriminatorParent.fields.keys).to include(
|
|
543
|
+
it 'creates a new field in the parent' do
|
|
544
|
+
expect(LocalDiscriminatorParent.fields.keys).to include('test2')
|
|
579
545
|
end
|
|
580
546
|
|
|
581
|
-
it
|
|
582
|
-
expect(LocalDiscriminatorParent.fields.keys).to include(
|
|
547
|
+
it 'does not remove the original field in the parent' do
|
|
548
|
+
expect(LocalDiscriminatorParent.fields.keys).to include('_type')
|
|
583
549
|
end
|
|
584
550
|
|
|
585
|
-
it
|
|
586
|
-
expect(LocalDiscriminatorChild.fields.keys).to include(
|
|
551
|
+
it 'still has _type field in the child' do
|
|
552
|
+
expect(LocalDiscriminatorChild.fields.keys).to include('_type')
|
|
587
553
|
end
|
|
588
554
|
|
|
589
|
-
it
|
|
590
|
-
expect(LocalDiscriminatorChild.fields.keys).to include(
|
|
555
|
+
it 'has the new field in the child' do
|
|
556
|
+
expect(LocalDiscriminatorChild.fields.keys).to include('test2')
|
|
591
557
|
end
|
|
592
558
|
end
|
|
593
559
|
|
|
594
|
-
context
|
|
560
|
+
context 'before child class creation' do
|
|
595
561
|
before do
|
|
596
562
|
class PreLocalDiscriminatorParent
|
|
597
563
|
include Mongoid::Document
|
|
598
|
-
|
|
564
|
+
|
|
565
|
+
self.discriminator_key = 'test2'
|
|
599
566
|
end
|
|
600
567
|
|
|
601
568
|
class PreLocalDiscriminatorChild < PreLocalDiscriminatorParent
|
|
602
569
|
end
|
|
603
570
|
end
|
|
604
571
|
|
|
605
|
-
it
|
|
606
|
-
expect(PreLocalDiscriminatorParent.fields.keys).to include(
|
|
572
|
+
it 'creates a new field in the parent' do
|
|
573
|
+
expect(PreLocalDiscriminatorParent.fields.keys).to include('test2')
|
|
607
574
|
end
|
|
608
575
|
|
|
609
|
-
it
|
|
610
|
-
expect(PreLocalDiscriminatorParent.fields.keys).
|
|
576
|
+
it 'does not create the _type field in the parent' do
|
|
577
|
+
expect(PreLocalDiscriminatorParent.fields.keys).not_to include('_type')
|
|
611
578
|
end
|
|
612
579
|
|
|
613
|
-
it
|
|
614
|
-
expect(PreLocalDiscriminatorChild.fields.keys).to include(
|
|
580
|
+
it 'creates a new field in the child' do
|
|
581
|
+
expect(PreLocalDiscriminatorChild.fields.keys).to include('test2')
|
|
615
582
|
end
|
|
616
583
|
end
|
|
617
584
|
|
|
@@ -619,24 +586,25 @@ describe Mongoid::Traversable do
|
|
|
619
586
|
before do
|
|
620
587
|
class LocalDiscriminatorNonParent
|
|
621
588
|
include Mongoid::Document
|
|
622
|
-
|
|
589
|
+
|
|
590
|
+
self.discriminator_key = 'test2'
|
|
623
591
|
end
|
|
624
592
|
end
|
|
625
593
|
|
|
626
|
-
it
|
|
627
|
-
expect(LocalDiscriminatorNonParent.fields.keys).
|
|
594
|
+
it 'does not create a _type field' do
|
|
595
|
+
expect(LocalDiscriminatorNonParent.fields.keys).not_to include('_type')
|
|
628
596
|
end
|
|
629
597
|
|
|
630
|
-
it
|
|
631
|
-
expect(LocalDiscriminatorNonParent.fields.keys).
|
|
598
|
+
it 'does not create a new field' do
|
|
599
|
+
expect(LocalDiscriminatorNonParent.fields.keys).not_to include('test2')
|
|
632
600
|
end
|
|
633
601
|
end
|
|
634
602
|
end
|
|
635
603
|
end
|
|
636
604
|
|
|
637
|
-
context
|
|
638
|
-
context
|
|
639
|
-
context
|
|
605
|
+
context 'when setting the discriminator key as a symbol' do
|
|
606
|
+
context 'when the discriminator key is changed at the base level' do
|
|
607
|
+
context 'after class creation' do
|
|
640
608
|
before do
|
|
641
609
|
class GlobalSymDiscriminatorParent
|
|
642
610
|
include Mongoid::Document
|
|
@@ -649,31 +617,31 @@ describe Mongoid::Traversable do
|
|
|
649
617
|
end
|
|
650
618
|
|
|
651
619
|
after do
|
|
652
|
-
Mongoid.discriminator_key =
|
|
620
|
+
Mongoid.discriminator_key = '_type'
|
|
653
621
|
end
|
|
654
622
|
|
|
655
|
-
it
|
|
656
|
-
expect(GlobalSymDiscriminatorParent.fields.keys).
|
|
623
|
+
it 'gets converted to a string in the parent' do
|
|
624
|
+
expect(GlobalSymDiscriminatorParent.fields.keys).not_to include('test')
|
|
657
625
|
end
|
|
658
626
|
|
|
659
|
-
it
|
|
660
|
-
expect(GlobalSymDiscriminatorChild.fields.keys).
|
|
627
|
+
it 'gets converted to a string in the child' do
|
|
628
|
+
expect(GlobalSymDiscriminatorChild.fields.keys).not_to include('test')
|
|
661
629
|
end
|
|
662
630
|
|
|
663
|
-
it
|
|
664
|
-
expect(Mongoid.discriminator_key).to eq(
|
|
631
|
+
it 'is a string globally' do
|
|
632
|
+
expect(Mongoid.discriminator_key).to eq('test')
|
|
665
633
|
end
|
|
666
634
|
|
|
667
|
-
it
|
|
668
|
-
expect(GlobalSymDiscriminatorParent.discriminator_key).to eq(
|
|
635
|
+
it 'is a string in the parent' do
|
|
636
|
+
expect(GlobalSymDiscriminatorParent.discriminator_key).to eq('test')
|
|
669
637
|
end
|
|
670
638
|
|
|
671
|
-
it
|
|
672
|
-
expect(GlobalSymDiscriminatorChild.discriminator_key).to eq(
|
|
639
|
+
it 'is a string in the child' do
|
|
640
|
+
expect(GlobalSymDiscriminatorChild.discriminator_key).to eq('test')
|
|
673
641
|
end
|
|
674
642
|
end
|
|
675
643
|
|
|
676
|
-
context
|
|
644
|
+
context 'before class creation' do
|
|
677
645
|
config_override :discriminator_key, :test
|
|
678
646
|
|
|
679
647
|
before do
|
|
@@ -685,30 +653,30 @@ describe Mongoid::Traversable do
|
|
|
685
653
|
end
|
|
686
654
|
end
|
|
687
655
|
|
|
688
|
-
it
|
|
689
|
-
expect(PreGlobalSymDiscriminatorParent.fields.keys).to include(
|
|
656
|
+
it 'creates a field with new discriminator key as a string in the parent' do
|
|
657
|
+
expect(PreGlobalSymDiscriminatorParent.fields.keys).to include('test')
|
|
690
658
|
end
|
|
691
659
|
|
|
692
|
-
it
|
|
693
|
-
expect(PreGlobalSymDiscriminatorChild.fields.keys).to include(
|
|
660
|
+
it 'creates a field with new discriminator key as a string in the child' do
|
|
661
|
+
expect(PreGlobalSymDiscriminatorChild.fields.keys).to include('test')
|
|
694
662
|
end
|
|
695
663
|
|
|
696
|
-
it
|
|
697
|
-
expect(Mongoid.discriminator_key).to eq(
|
|
664
|
+
it 'is a string globally' do
|
|
665
|
+
expect(Mongoid.discriminator_key).to eq('test')
|
|
698
666
|
end
|
|
699
667
|
|
|
700
|
-
it
|
|
701
|
-
expect(PreGlobalSymDiscriminatorParent.discriminator_key).to eq(
|
|
668
|
+
it 'is a string in the parent' do
|
|
669
|
+
expect(PreGlobalSymDiscriminatorParent.discriminator_key).to eq('test')
|
|
702
670
|
end
|
|
703
671
|
|
|
704
|
-
it
|
|
705
|
-
expect(PreGlobalSymDiscriminatorChild.discriminator_key).to eq(
|
|
672
|
+
it 'is a string in the child' do
|
|
673
|
+
expect(PreGlobalSymDiscriminatorChild.discriminator_key).to eq('test')
|
|
706
674
|
end
|
|
707
675
|
end
|
|
708
676
|
end
|
|
709
677
|
|
|
710
|
-
context
|
|
711
|
-
context
|
|
678
|
+
context 'when the discriminator key is changed in the parent' do
|
|
679
|
+
context 'after child class creation' do
|
|
712
680
|
before do
|
|
713
681
|
class LocalSymDiscriminatorParent
|
|
714
682
|
include Mongoid::Document
|
|
@@ -720,27 +688,28 @@ describe Mongoid::Traversable do
|
|
|
720
688
|
LocalSymDiscriminatorParent.discriminator_key = :test2
|
|
721
689
|
end
|
|
722
690
|
|
|
723
|
-
it
|
|
724
|
-
expect(LocalSymDiscriminatorParent.fields.keys).to include(
|
|
691
|
+
it 'creates a new field of type string in the parent' do
|
|
692
|
+
expect(LocalSymDiscriminatorParent.fields.keys).to include('test2')
|
|
725
693
|
end
|
|
726
694
|
|
|
727
|
-
it
|
|
728
|
-
expect(LocalSymDiscriminatorChild.fields.keys).to include(
|
|
695
|
+
it 'creates a new field of type string in the child' do
|
|
696
|
+
expect(LocalSymDiscriminatorChild.fields.keys).to include('test2')
|
|
729
697
|
end
|
|
730
698
|
|
|
731
|
-
it
|
|
732
|
-
expect(LocalSymDiscriminatorParent.discriminator_key).to eq(
|
|
699
|
+
it 'is a string in the parent' do
|
|
700
|
+
expect(LocalSymDiscriminatorParent.discriminator_key).to eq('test2')
|
|
733
701
|
end
|
|
734
702
|
|
|
735
|
-
it
|
|
736
|
-
expect(LocalSymDiscriminatorChild.discriminator_key).to eq(
|
|
703
|
+
it 'is a string in the child' do
|
|
704
|
+
expect(LocalSymDiscriminatorChild.discriminator_key).to eq('test2')
|
|
737
705
|
end
|
|
738
706
|
end
|
|
739
707
|
|
|
740
|
-
context
|
|
708
|
+
context 'before child class creation' do
|
|
741
709
|
before do
|
|
742
710
|
class PreLocalSymDiscriminatorParent
|
|
743
711
|
include Mongoid::Document
|
|
712
|
+
|
|
744
713
|
self.discriminator_key = :test2
|
|
745
714
|
end
|
|
746
715
|
|
|
@@ -748,27 +717,27 @@ describe Mongoid::Traversable do
|
|
|
748
717
|
end
|
|
749
718
|
end
|
|
750
719
|
|
|
751
|
-
it
|
|
752
|
-
expect(PreLocalSymDiscriminatorParent.fields.keys).to include(
|
|
720
|
+
it 'creates a new field of type string in the parent' do
|
|
721
|
+
expect(PreLocalSymDiscriminatorParent.fields.keys).to include('test2')
|
|
753
722
|
end
|
|
754
723
|
|
|
755
|
-
it
|
|
756
|
-
expect(PreLocalSymDiscriminatorChild.fields.keys).to include(
|
|
724
|
+
it 'creates a new field of type string in the child' do
|
|
725
|
+
expect(PreLocalSymDiscriminatorChild.fields.keys).to include('test2')
|
|
757
726
|
end
|
|
758
727
|
|
|
759
|
-
it
|
|
760
|
-
expect(PreLocalSymDiscriminatorParent.discriminator_key).to eq(
|
|
728
|
+
it 'is a string in the parent' do
|
|
729
|
+
expect(PreLocalSymDiscriminatorParent.discriminator_key).to eq('test2')
|
|
761
730
|
end
|
|
762
731
|
|
|
763
|
-
it
|
|
764
|
-
expect(PreLocalSymDiscriminatorChild.discriminator_key).to eq(
|
|
732
|
+
it 'is a string in the child' do
|
|
733
|
+
expect(PreLocalSymDiscriminatorChild.discriminator_key).to eq('test2')
|
|
765
734
|
end
|
|
766
735
|
end
|
|
767
736
|
end
|
|
768
737
|
end
|
|
769
738
|
|
|
770
|
-
context
|
|
771
|
-
context
|
|
739
|
+
context 'when setting the discriminator key as' do
|
|
740
|
+
context 'a number' do
|
|
772
741
|
before do
|
|
773
742
|
Instrument.discriminator_key = 3
|
|
774
743
|
end
|
|
@@ -777,24 +746,24 @@ describe Mongoid::Traversable do
|
|
|
777
746
|
Instrument.discriminator_key = nil
|
|
778
747
|
end
|
|
779
748
|
|
|
780
|
-
it
|
|
781
|
-
expect(Instrument.fields.keys).to include(
|
|
749
|
+
it 'gets converted to a string' do
|
|
750
|
+
expect(Instrument.fields.keys).to include('3')
|
|
782
751
|
end
|
|
783
752
|
|
|
784
|
-
it
|
|
785
|
-
expect(Instrument.discriminator_key).to eq(
|
|
753
|
+
it 'is a string in the parent' do
|
|
754
|
+
expect(Instrument.discriminator_key).to eq('3')
|
|
786
755
|
end
|
|
787
756
|
|
|
788
|
-
it
|
|
789
|
-
expect(Guitar.discriminator_key).to eq(
|
|
757
|
+
it 'is a string in the child: Guitar' do
|
|
758
|
+
expect(Guitar.discriminator_key).to eq('3')
|
|
790
759
|
end
|
|
791
760
|
|
|
792
|
-
it
|
|
793
|
-
expect(Piano.discriminator_key).to eq(
|
|
761
|
+
it 'is a string in the child: Piano' do
|
|
762
|
+
expect(Piano.discriminator_key).to eq('3')
|
|
794
763
|
end
|
|
795
764
|
end
|
|
796
765
|
|
|
797
|
-
context
|
|
766
|
+
context 'a boolean' do
|
|
798
767
|
before do
|
|
799
768
|
Instrument.discriminator_key = true
|
|
800
769
|
end
|
|
@@ -803,31 +772,31 @@ describe Mongoid::Traversable do
|
|
|
803
772
|
Instrument.discriminator_key = nil
|
|
804
773
|
end
|
|
805
774
|
|
|
806
|
-
it
|
|
807
|
-
expect(Instrument.fields.keys).to include(
|
|
775
|
+
it 'gets converted to a string' do
|
|
776
|
+
expect(Instrument.fields.keys).to include('true')
|
|
808
777
|
end
|
|
809
778
|
|
|
810
|
-
it
|
|
811
|
-
expect(Instrument.discriminator_key).to eq(
|
|
779
|
+
it 'is a string in the parent' do
|
|
780
|
+
expect(Instrument.discriminator_key).to eq('true')
|
|
812
781
|
end
|
|
813
782
|
|
|
814
|
-
it
|
|
815
|
-
expect(Guitar.discriminator_key).to eq(
|
|
783
|
+
it 'is a string in the child: Guitar' do
|
|
784
|
+
expect(Guitar.discriminator_key).to eq('true')
|
|
816
785
|
end
|
|
817
786
|
|
|
818
|
-
it
|
|
819
|
-
expect(Piano.discriminator_key).to eq(
|
|
787
|
+
it 'is a string in the child: Piano' do
|
|
788
|
+
expect(Piano.discriminator_key).to eq('true')
|
|
820
789
|
end
|
|
821
790
|
end
|
|
822
791
|
end
|
|
823
792
|
|
|
824
|
-
context
|
|
793
|
+
context 'when setting a field equal to discriminator key and duplicate_fields_exception is true' do
|
|
825
794
|
config_override :duplicate_fields_exception, true
|
|
826
795
|
|
|
827
796
|
before do
|
|
828
|
-
|
|
829
797
|
class DuplicateDiscriminatorKeyParent
|
|
830
798
|
include Mongoid::Document
|
|
799
|
+
|
|
831
800
|
field :dkey, type: String
|
|
832
801
|
end
|
|
833
802
|
|
|
@@ -835,37 +804,34 @@ describe Mongoid::Traversable do
|
|
|
835
804
|
end
|
|
836
805
|
end
|
|
837
806
|
|
|
838
|
-
it
|
|
807
|
+
it 'does not raise an error' do
|
|
839
808
|
expect do
|
|
840
|
-
DuplicateDiscriminatorKeyParent.discriminator_key =
|
|
841
|
-
end.
|
|
809
|
+
DuplicateDiscriminatorKeyParent.discriminator_key = 'dkey'
|
|
810
|
+
end.not_to raise_error
|
|
842
811
|
end
|
|
843
812
|
end
|
|
844
813
|
|
|
845
814
|
context "when the discriminator key conflicts with mongoid's internals" do
|
|
846
|
-
|
|
847
815
|
after do
|
|
848
816
|
Person.discriminator_key = nil
|
|
849
817
|
end
|
|
850
818
|
|
|
851
|
-
[
|
|
819
|
+
%i[_association invalid].each do |meth|
|
|
852
820
|
context "when the field is named #{meth}" do
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
expect {
|
|
821
|
+
it 'raises an error' do
|
|
822
|
+
expect do
|
|
856
823
|
Person.discriminator_key = meth
|
|
857
|
-
|
|
824
|
+
end.to raise_error(Mongoid::Errors::InvalidField)
|
|
858
825
|
end
|
|
859
826
|
end
|
|
860
827
|
end
|
|
861
828
|
end
|
|
862
829
|
|
|
863
|
-
context
|
|
830
|
+
context 'when setting a field equal to global discriminator key and duplicate_fields_exception is true' do
|
|
864
831
|
config_override :duplicate_fields_exception, true
|
|
865
|
-
config_override :discriminator_key,
|
|
832
|
+
config_override :discriminator_key, 'dkey'
|
|
866
833
|
|
|
867
834
|
before do
|
|
868
|
-
|
|
869
835
|
class GlobalDuplicateDiscriminatorKeyParent
|
|
870
836
|
include Mongoid::Document
|
|
871
837
|
end
|
|
@@ -874,10 +840,10 @@ describe Mongoid::Traversable do
|
|
|
874
840
|
end
|
|
875
841
|
end
|
|
876
842
|
|
|
877
|
-
it
|
|
843
|
+
it 'raises an error' do
|
|
878
844
|
expect do
|
|
879
845
|
GlobalDuplicateDiscriminatorKeyParent.class_eval do
|
|
880
|
-
field(
|
|
846
|
+
field('dkey')
|
|
881
847
|
end
|
|
882
848
|
end.to raise_error(Mongoid::Errors::InvalidField)
|
|
883
849
|
end
|
|
@@ -888,10 +854,9 @@ describe Mongoid::Traversable do
|
|
|
888
854
|
# after the test only.
|
|
889
855
|
config_override :discriminator_key, '_type'
|
|
890
856
|
|
|
891
|
-
[
|
|
857
|
+
%i[_association invalid].each do |meth|
|
|
892
858
|
context "when the field is named #{meth}" do
|
|
893
|
-
|
|
894
|
-
it "raises an error" do
|
|
859
|
+
it 'raises an error' do
|
|
895
860
|
expect do
|
|
896
861
|
Mongoid.discriminator_key = meth
|
|
897
862
|
end.to raise_error(Mongoid::Errors::InvalidField)
|
|
@@ -901,99 +866,95 @@ describe Mongoid::Traversable do
|
|
|
901
866
|
end
|
|
902
867
|
end
|
|
903
868
|
|
|
904
|
-
describe
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
it "has the correct discriminator_value" do
|
|
909
|
-
expect(Guitar.discriminator_value).to eq("Guitar")
|
|
869
|
+
describe '#discriminator_value' do
|
|
870
|
+
context 'when the discriminator value is not set' do
|
|
871
|
+
it 'has the correct discriminator_value' do
|
|
872
|
+
expect(Guitar.discriminator_value).to eq('Guitar')
|
|
910
873
|
end
|
|
911
874
|
|
|
912
|
-
it
|
|
913
|
-
expect(Piano.discriminator_value).to eq(
|
|
875
|
+
it 'has the correct discriminator_value' do
|
|
876
|
+
expect(Piano.discriminator_value).to eq('Piano')
|
|
914
877
|
end
|
|
915
878
|
|
|
916
|
-
it
|
|
917
|
-
expect(Instrument.discriminator_value).to eq(
|
|
879
|
+
it 'has the correct discriminator_value' do
|
|
880
|
+
expect(Instrument.discriminator_value).to eq('Instrument')
|
|
918
881
|
end
|
|
919
882
|
end
|
|
920
883
|
|
|
921
|
-
|
|
922
|
-
context "when the discriminator value is set on the child class" do
|
|
884
|
+
context 'when the discriminator value is set on the child class' do
|
|
923
885
|
before do
|
|
924
|
-
Guitar.discriminator_value =
|
|
886
|
+
Guitar.discriminator_value = 'some string instrument'
|
|
925
887
|
end
|
|
926
888
|
|
|
927
889
|
after do
|
|
928
890
|
Guitar.discriminator_value = nil
|
|
929
891
|
end
|
|
930
892
|
|
|
931
|
-
it
|
|
932
|
-
expect(Guitar.discriminator_value).to eq(
|
|
893
|
+
it 'has the correct discriminator_value' do
|
|
894
|
+
expect(Guitar.discriminator_value).to eq('some string instrument')
|
|
933
895
|
end
|
|
934
896
|
|
|
935
897
|
it "does not change the sibling's discriminator value" do
|
|
936
|
-
expect(Piano.discriminator_value).to eq(
|
|
898
|
+
expect(Piano.discriminator_value).to eq('Piano')
|
|
937
899
|
end
|
|
938
900
|
|
|
939
901
|
it "does not change the parent's discriminator value" do
|
|
940
|
-
expect(Instrument.discriminator_value).to eq(
|
|
902
|
+
expect(Instrument.discriminator_value).to eq('Instrument')
|
|
941
903
|
end
|
|
942
904
|
end
|
|
943
905
|
|
|
944
|
-
context
|
|
906
|
+
context 'when the discriminator value is set on the parent' do
|
|
945
907
|
before do
|
|
946
|
-
Instrument.discriminator_value =
|
|
908
|
+
Instrument.discriminator_value = 'musical thingy'
|
|
947
909
|
end
|
|
948
910
|
|
|
949
911
|
after do
|
|
950
912
|
Instrument.discriminator_value = nil
|
|
951
913
|
end
|
|
952
914
|
|
|
953
|
-
it
|
|
954
|
-
expect(Instrument.discriminator_value).to eq(
|
|
915
|
+
it 'is changed in the parent' do
|
|
916
|
+
expect(Instrument.discriminator_value).to eq('musical thingy')
|
|
955
917
|
end
|
|
956
918
|
|
|
957
|
-
it
|
|
958
|
-
expect(Guitar.discriminator_value).to eq(
|
|
919
|
+
it 'is not changed in the child: Guitar' do
|
|
920
|
+
expect(Guitar.discriminator_value).to eq('Guitar')
|
|
959
921
|
end
|
|
960
922
|
|
|
961
|
-
it
|
|
962
|
-
expect(Piano.discriminator_value).to eq(
|
|
923
|
+
it 'is not changed in the child: Piano' do
|
|
924
|
+
expect(Piano.discriminator_value).to eq('Piano')
|
|
963
925
|
end
|
|
964
926
|
end
|
|
965
927
|
|
|
966
|
-
context
|
|
928
|
+
context 'when setting the discriminator value to nil' do
|
|
967
929
|
before do
|
|
968
|
-
Guitar.discriminator_value =
|
|
930
|
+
Guitar.discriminator_value = 'some string instrument'
|
|
969
931
|
Guitar.discriminator_value = nil
|
|
970
932
|
end
|
|
971
933
|
|
|
972
|
-
it
|
|
973
|
-
expect(Guitar.discriminator_value).to eq(
|
|
934
|
+
it 'reverts back to default' do
|
|
935
|
+
expect(Guitar.discriminator_value).to eq('Guitar')
|
|
974
936
|
end
|
|
975
937
|
end
|
|
976
938
|
|
|
977
|
-
context
|
|
939
|
+
context 'when setting discriminator value on parent that is also a child' do
|
|
978
940
|
before do
|
|
979
|
-
Browser.discriminator_value =
|
|
941
|
+
Browser.discriminator_value = 'something'
|
|
980
942
|
end
|
|
981
943
|
|
|
982
944
|
after do
|
|
983
945
|
Browser.discriminator_value = nil
|
|
984
946
|
end
|
|
985
947
|
|
|
986
|
-
it
|
|
987
|
-
expect(Browser.discriminator_value).to eq(
|
|
948
|
+
it 'has the correct value in the parent' do
|
|
949
|
+
expect(Browser.discriminator_value).to eq('something')
|
|
988
950
|
end
|
|
989
951
|
|
|
990
952
|
it "doesn't set the grandchild's discriminator value" do
|
|
991
|
-
expect(Firefox.discriminator_value).to eq(
|
|
953
|
+
expect(Firefox.discriminator_value).to eq('Firefox')
|
|
992
954
|
end
|
|
993
955
|
end
|
|
994
956
|
|
|
995
|
-
describe
|
|
996
|
-
|
|
957
|
+
describe '.fields' do
|
|
997
958
|
let(:guitar) do
|
|
998
959
|
Guitar.new
|
|
999
960
|
end
|
|
@@ -1006,126 +967,126 @@ describe Mongoid::Traversable do
|
|
|
1006
967
|
Instrument.new
|
|
1007
968
|
end
|
|
1008
969
|
|
|
1009
|
-
context
|
|
1010
|
-
it
|
|
1011
|
-
expect(guitar._type).to eq(
|
|
970
|
+
context 'when the discriminator value is not set' do
|
|
971
|
+
it 'has the correct discriminator_value' do
|
|
972
|
+
expect(guitar._type).to eq('Guitar')
|
|
1012
973
|
end
|
|
1013
974
|
|
|
1014
|
-
it
|
|
1015
|
-
expect(piano._type).to eq(
|
|
975
|
+
it 'has the correct discriminator_value' do
|
|
976
|
+
expect(piano._type).to eq('Piano')
|
|
1016
977
|
end
|
|
1017
978
|
|
|
1018
|
-
it
|
|
1019
|
-
expect(instrument._type).to eq(
|
|
979
|
+
it 'has the correct discriminator_value' do
|
|
980
|
+
expect(instrument._type).to eq('Instrument')
|
|
1020
981
|
end
|
|
1021
982
|
end
|
|
1022
983
|
|
|
1023
|
-
context
|
|
984
|
+
context 'when the discriminator value is set on the child class' do
|
|
1024
985
|
before do
|
|
1025
|
-
Guitar.discriminator_value =
|
|
986
|
+
Guitar.discriminator_value = 'some string instrument'
|
|
1026
987
|
end
|
|
1027
988
|
|
|
1028
989
|
after do
|
|
1029
990
|
Guitar.discriminator_value = nil
|
|
1030
991
|
end
|
|
1031
992
|
|
|
1032
|
-
it
|
|
1033
|
-
expect(guitar._type).to eq(
|
|
993
|
+
it 'has the correct discriminator_value' do
|
|
994
|
+
expect(guitar._type).to eq('some string instrument')
|
|
1034
995
|
end
|
|
1035
996
|
|
|
1036
997
|
it "does not change the sibling's discriminator value" do
|
|
1037
|
-
expect(piano._type).to eq(
|
|
998
|
+
expect(piano._type).to eq('Piano')
|
|
1038
999
|
end
|
|
1039
1000
|
|
|
1040
1001
|
it "does not change the parent's discriminator value" do
|
|
1041
|
-
expect(instrument._type).to eq(
|
|
1002
|
+
expect(instrument._type).to eq('Instrument')
|
|
1042
1003
|
end
|
|
1043
1004
|
|
|
1044
|
-
it
|
|
1005
|
+
it 'retrieves the correct discriminator_mapping from the parent' do
|
|
1045
1006
|
expect(
|
|
1046
|
-
Instrument.get_discriminator_mapping(
|
|
1007
|
+
Instrument.get_discriminator_mapping('some string instrument')
|
|
1047
1008
|
).to eq(Guitar)
|
|
1048
1009
|
end
|
|
1049
1010
|
|
|
1050
|
-
it
|
|
1011
|
+
it 'retrieves the correct discriminator_mapping from the child: Guitar' do
|
|
1051
1012
|
expect(
|
|
1052
|
-
Guitar.get_discriminator_mapping(
|
|
1013
|
+
Guitar.get_discriminator_mapping('some string instrument')
|
|
1053
1014
|
).to eq(Guitar)
|
|
1054
1015
|
end
|
|
1055
1016
|
|
|
1056
|
-
it
|
|
1017
|
+
it 'is not retrieved from the sibling' do
|
|
1057
1018
|
expect(
|
|
1058
|
-
Piano.get_discriminator_mapping(
|
|
1059
|
-
).to
|
|
1019
|
+
Piano.get_discriminator_mapping('some string instrument')
|
|
1020
|
+
).to be_nil
|
|
1060
1021
|
end
|
|
1061
1022
|
end
|
|
1062
1023
|
|
|
1063
|
-
context
|
|
1024
|
+
context 'when the discriminator value is set on the parent' do
|
|
1064
1025
|
before do
|
|
1065
|
-
Instrument.discriminator_value =
|
|
1026
|
+
Instrument.discriminator_value = 'musical thingy'
|
|
1066
1027
|
end
|
|
1067
1028
|
|
|
1068
1029
|
after do
|
|
1069
1030
|
Instrument.discriminator_value = nil
|
|
1070
1031
|
end
|
|
1071
1032
|
|
|
1072
|
-
it
|
|
1073
|
-
expect(instrument._type).to eq(
|
|
1033
|
+
it 'is changed in the parent' do
|
|
1034
|
+
expect(instrument._type).to eq('musical thingy')
|
|
1074
1035
|
end
|
|
1075
1036
|
|
|
1076
|
-
it
|
|
1077
|
-
expect(guitar._type).to eq(
|
|
1037
|
+
it 'is not changed in the child: Guitar' do
|
|
1038
|
+
expect(guitar._type).to eq('Guitar')
|
|
1078
1039
|
end
|
|
1079
1040
|
|
|
1080
|
-
it
|
|
1081
|
-
expect(piano._type).to eq(
|
|
1041
|
+
it 'is not changed in the child: Piano' do
|
|
1042
|
+
expect(piano._type).to eq('Piano')
|
|
1082
1043
|
end
|
|
1083
1044
|
|
|
1084
|
-
it
|
|
1045
|
+
it 'retrieves the correct discriminator_mapping from the parent' do
|
|
1085
1046
|
expect(
|
|
1086
|
-
Instrument.get_discriminator_mapping(
|
|
1047
|
+
Instrument.get_discriminator_mapping('musical thingy')
|
|
1087
1048
|
).to eq(Instrument)
|
|
1088
1049
|
end
|
|
1089
1050
|
|
|
1090
|
-
it
|
|
1051
|
+
it 'is not retrieved from the child: Guitar' do
|
|
1091
1052
|
expect(
|
|
1092
|
-
Guitar.get_discriminator_mapping(
|
|
1093
|
-
).to
|
|
1053
|
+
Guitar.get_discriminator_mapping('musical thingy')
|
|
1054
|
+
).to be_nil
|
|
1094
1055
|
end
|
|
1095
1056
|
|
|
1096
|
-
it
|
|
1057
|
+
it 'is not retrieved from the child: Piano' do
|
|
1097
1058
|
expect(
|
|
1098
|
-
Piano.get_discriminator_mapping(
|
|
1099
|
-
).to
|
|
1059
|
+
Piano.get_discriminator_mapping('musical thingy')
|
|
1060
|
+
).to be_nil
|
|
1100
1061
|
end
|
|
1101
1062
|
end
|
|
1102
1063
|
|
|
1103
|
-
context
|
|
1064
|
+
context 'when setting the discriminator value to nil' do
|
|
1104
1065
|
before do
|
|
1105
|
-
Guitar.discriminator_value =
|
|
1066
|
+
Guitar.discriminator_value = 'some string instrument'
|
|
1106
1067
|
Guitar.discriminator_value = nil
|
|
1107
1068
|
end
|
|
1108
1069
|
|
|
1109
|
-
it
|
|
1110
|
-
expect(guitar._type).to eq(
|
|
1070
|
+
it 'reverts back to default' do
|
|
1071
|
+
expect(guitar._type).to eq('Guitar')
|
|
1111
1072
|
end
|
|
1112
1073
|
|
|
1113
|
-
it
|
|
1074
|
+
it 'retrieves the correct discriminator_mapping' do
|
|
1114
1075
|
expect(
|
|
1115
|
-
Instrument.get_discriminator_mapping(
|
|
1076
|
+
Instrument.get_discriminator_mapping('Guitar')
|
|
1116
1077
|
).to eq(Guitar)
|
|
1117
1078
|
end
|
|
1118
1079
|
|
|
1119
|
-
it
|
|
1080
|
+
it 'retrieves the old discriminator_mapping' do
|
|
1120
1081
|
expect(
|
|
1121
|
-
Instrument.get_discriminator_mapping(
|
|
1082
|
+
Instrument.get_discriminator_mapping('some string instrument')
|
|
1122
1083
|
).to eq(Guitar)
|
|
1123
1084
|
end
|
|
1124
1085
|
end
|
|
1125
1086
|
|
|
1126
|
-
context
|
|
1087
|
+
context 'when setting discriminator value on parent that is also a child' do
|
|
1127
1088
|
before do
|
|
1128
|
-
Browser.discriminator_value =
|
|
1089
|
+
Browser.discriminator_value = 'something'
|
|
1129
1090
|
end
|
|
1130
1091
|
|
|
1131
1092
|
after do
|
|
@@ -1140,37 +1101,37 @@ describe Mongoid::Traversable do
|
|
|
1140
1101
|
Firefox.new
|
|
1141
1102
|
end
|
|
1142
1103
|
|
|
1143
|
-
it
|
|
1144
|
-
expect(browser._type).to eq(
|
|
1104
|
+
it 'has the correct value in the parent' do
|
|
1105
|
+
expect(browser._type).to eq('something')
|
|
1145
1106
|
end
|
|
1146
1107
|
|
|
1147
1108
|
it "doesn't set the grandchild's discriminator value" do
|
|
1148
|
-
expect(firefox._type).to eq(
|
|
1109
|
+
expect(firefox._type).to eq('Firefox')
|
|
1149
1110
|
end
|
|
1150
1111
|
|
|
1151
|
-
it
|
|
1112
|
+
it 'retrieves the correct discriminator_mapping from the grandparent' do
|
|
1152
1113
|
expect(
|
|
1153
|
-
Canvas.get_discriminator_mapping(
|
|
1114
|
+
Canvas.get_discriminator_mapping('something')
|
|
1154
1115
|
).to eq(Browser)
|
|
1155
1116
|
end
|
|
1156
1117
|
|
|
1157
|
-
it
|
|
1118
|
+
it 'retrieves the correct discriminator_mapping from the parent' do
|
|
1158
1119
|
expect(
|
|
1159
|
-
Browser.get_discriminator_mapping(
|
|
1120
|
+
Browser.get_discriminator_mapping('something')
|
|
1160
1121
|
).to eq(Browser)
|
|
1161
1122
|
end
|
|
1162
1123
|
|
|
1163
|
-
it
|
|
1124
|
+
it 'is not retrieved from the grandchild' do
|
|
1164
1125
|
expect(
|
|
1165
|
-
Firefox.get_discriminator_mapping(
|
|
1166
|
-
).to
|
|
1126
|
+
Firefox.get_discriminator_mapping('something')
|
|
1127
|
+
).to be_nil
|
|
1167
1128
|
end
|
|
1168
1129
|
end
|
|
1169
1130
|
|
|
1170
|
-
context
|
|
1131
|
+
context 'when changing the discriminator key' do
|
|
1171
1132
|
before do
|
|
1172
|
-
Instrument.discriminator_key =
|
|
1173
|
-
Guitar.discriminator_value =
|
|
1133
|
+
Instrument.discriminator_key = 'dkey'
|
|
1134
|
+
Guitar.discriminator_value = 'string instrument'
|
|
1174
1135
|
end
|
|
1175
1136
|
|
|
1176
1137
|
after do
|
|
@@ -1182,83 +1143,86 @@ describe Mongoid::Traversable do
|
|
|
1182
1143
|
Guitar.new
|
|
1183
1144
|
end
|
|
1184
1145
|
|
|
1185
|
-
it
|
|
1186
|
-
expect(guitar.dkey).to eq(
|
|
1146
|
+
it 'has the correct discriminator_value for the new discriminator_key' do
|
|
1147
|
+
expect(guitar.dkey).to eq('string instrument')
|
|
1187
1148
|
end
|
|
1188
1149
|
|
|
1189
|
-
it
|
|
1190
|
-
expect(guitar._type).to eq(
|
|
1150
|
+
it 'has the correct discriminator_value for the old discriminator_key' do
|
|
1151
|
+
expect(guitar._type).to eq('string instrument')
|
|
1191
1152
|
end
|
|
1192
1153
|
|
|
1193
|
-
it
|
|
1154
|
+
it 'retrieves the correct discriminator_mapping from the parent' do
|
|
1194
1155
|
expect(
|
|
1195
|
-
Instrument.get_discriminator_mapping(
|
|
1156
|
+
Instrument.get_discriminator_mapping('string instrument')
|
|
1196
1157
|
).to eq(Guitar)
|
|
1197
1158
|
end
|
|
1198
1159
|
|
|
1199
|
-
it
|
|
1160
|
+
it 'retrieves the correct discriminator_mapping from the child: Guitar' do
|
|
1200
1161
|
expect(
|
|
1201
|
-
Guitar.get_discriminator_mapping(
|
|
1162
|
+
Guitar.get_discriminator_mapping('string instrument')
|
|
1202
1163
|
).to eq(Guitar)
|
|
1203
1164
|
end
|
|
1204
1165
|
|
|
1205
|
-
it
|
|
1166
|
+
it 'is not retrieved from the sibling' do
|
|
1206
1167
|
expect(
|
|
1207
|
-
Piano.get_discriminator_mapping(
|
|
1208
|
-
).to
|
|
1168
|
+
Piano.get_discriminator_mapping('string instrument')
|
|
1169
|
+
).to be_nil
|
|
1209
1170
|
end
|
|
1210
1171
|
end
|
|
1211
1172
|
|
|
1212
|
-
context
|
|
1173
|
+
context 'when the discriminator value is set twice' do
|
|
1213
1174
|
before do
|
|
1214
|
-
Instrument.discriminator_value =
|
|
1215
|
-
Instrument.discriminator_value =
|
|
1175
|
+
Instrument.discriminator_value = 'something'
|
|
1176
|
+
Instrument.discriminator_value = 'musical thingy'
|
|
1216
1177
|
end
|
|
1217
1178
|
|
|
1218
1179
|
after do
|
|
1219
1180
|
Instrument.discriminator_value = nil
|
|
1220
1181
|
end
|
|
1221
1182
|
|
|
1222
|
-
it
|
|
1223
|
-
expect(instrument._type).to eq(
|
|
1183
|
+
it 'is changed in the parent' do
|
|
1184
|
+
expect(instrument._type).to eq('musical thingy')
|
|
1224
1185
|
end
|
|
1225
1186
|
|
|
1226
|
-
it
|
|
1227
|
-
expect(guitar._type).to eq(
|
|
1187
|
+
it 'is not changed in the child: Guitar' do
|
|
1188
|
+
expect(guitar._type).to eq('Guitar')
|
|
1228
1189
|
end
|
|
1229
1190
|
|
|
1230
|
-
it
|
|
1231
|
-
expect(piano._type).to eq(
|
|
1191
|
+
it 'is not changed in the child: Piano' do
|
|
1192
|
+
expect(piano._type).to eq('Piano')
|
|
1232
1193
|
end
|
|
1233
1194
|
|
|
1234
|
-
it
|
|
1195
|
+
it 'retrieves the correct discriminator_mapping from the parent' do
|
|
1235
1196
|
expect(
|
|
1236
|
-
Instrument.get_discriminator_mapping(
|
|
1197
|
+
Instrument.get_discriminator_mapping('musical thingy')
|
|
1237
1198
|
).to eq(Instrument)
|
|
1238
1199
|
end
|
|
1239
1200
|
|
|
1240
|
-
it
|
|
1201
|
+
it 'is not retrieved from the child: Guitar' do
|
|
1241
1202
|
expect(
|
|
1242
|
-
Guitar.get_discriminator_mapping(
|
|
1243
|
-
).to
|
|
1203
|
+
Guitar.get_discriminator_mapping('musical thingy')
|
|
1204
|
+
).to be_nil
|
|
1244
1205
|
end
|
|
1245
1206
|
|
|
1246
|
-
it
|
|
1207
|
+
it 'ris not retrieved from the child: Piano' do
|
|
1247
1208
|
expect(
|
|
1248
|
-
Piano.get_discriminator_mapping(
|
|
1249
|
-
).to
|
|
1209
|
+
Piano.get_discriminator_mapping('musical thingy')
|
|
1210
|
+
).to be_nil
|
|
1250
1211
|
end
|
|
1251
1212
|
end
|
|
1252
1213
|
end
|
|
1253
1214
|
|
|
1254
|
-
context
|
|
1255
|
-
context
|
|
1215
|
+
context 'when using the Class.new syntax' do
|
|
1216
|
+
context 'when assigning to a constant' do
|
|
1256
1217
|
before :all do
|
|
1257
|
-
NewClassPerson
|
|
1258
|
-
|
|
1218
|
+
class NewClassPerson < Person
|
|
1219
|
+
end
|
|
1220
|
+
|
|
1221
|
+
class NewClassPerson2 < NewClassPerson
|
|
1222
|
+
end
|
|
1259
1223
|
end
|
|
1260
1224
|
|
|
1261
|
-
it
|
|
1225
|
+
it 'has the correct discriminator_value when doing one Class.new' do
|
|
1262
1226
|
expect(NewClassPerson.discriminator_value).to eq('NewClassPerson')
|
|
1263
1227
|
end
|
|
1264
1228
|
|
|
@@ -1269,127 +1233,127 @@ describe Mongoid::Traversable do
|
|
|
1269
1233
|
end
|
|
1270
1234
|
end
|
|
1271
1235
|
|
|
1272
|
-
describe
|
|
1273
|
-
context
|
|
1274
|
-
it
|
|
1236
|
+
describe '#discriminator_mapping' do
|
|
1237
|
+
context 'when not changing discriminator_mappings' do
|
|
1238
|
+
it 'has the class name as the value: Instrument' do
|
|
1275
1239
|
expect(
|
|
1276
|
-
Instrument.get_discriminator_mapping(
|
|
1240
|
+
Instrument.get_discriminator_mapping('Instrument')
|
|
1277
1241
|
).to eq(Instrument)
|
|
1278
1242
|
end
|
|
1279
1243
|
|
|
1280
|
-
it
|
|
1244
|
+
it 'has the class name as the value: Guitar' do
|
|
1281
1245
|
expect(
|
|
1282
|
-
Guitar.get_discriminator_mapping(
|
|
1246
|
+
Guitar.get_discriminator_mapping('Guitar')
|
|
1283
1247
|
).to eq(Guitar)
|
|
1284
1248
|
end
|
|
1285
1249
|
|
|
1286
|
-
it
|
|
1250
|
+
it 'has the class name as the value: Piano' do
|
|
1287
1251
|
expect(
|
|
1288
|
-
Piano.get_discriminator_mapping(
|
|
1252
|
+
Piano.get_discriminator_mapping('Piano')
|
|
1289
1253
|
).to eq(Piano)
|
|
1290
1254
|
end
|
|
1291
1255
|
end
|
|
1292
1256
|
|
|
1293
|
-
context
|
|
1257
|
+
context 'when adding to the parent' do
|
|
1294
1258
|
before do
|
|
1295
|
-
Instrument.add_discriminator_mapping(
|
|
1259
|
+
Instrument.add_discriminator_mapping('some_dmap')
|
|
1296
1260
|
end
|
|
1297
1261
|
|
|
1298
1262
|
after do
|
|
1299
|
-
Instrument.add_discriminator_mapping(
|
|
1263
|
+
Instrument.add_discriminator_mapping('Instrument')
|
|
1300
1264
|
end
|
|
1301
1265
|
|
|
1302
|
-
it
|
|
1266
|
+
it 'can be retrieved from the parent' do
|
|
1303
1267
|
expect(
|
|
1304
|
-
Instrument.get_discriminator_mapping(
|
|
1268
|
+
Instrument.get_discriminator_mapping('some_dmap')
|
|
1305
1269
|
).to eq(Instrument)
|
|
1306
1270
|
end
|
|
1307
1271
|
|
|
1308
|
-
it
|
|
1272
|
+
it 'can be retrieved from the child: Guitar' do
|
|
1309
1273
|
expect(
|
|
1310
|
-
Guitar.get_discriminator_mapping(
|
|
1311
|
-
).to
|
|
1274
|
+
Guitar.get_discriminator_mapping('some_dmap')
|
|
1275
|
+
).to be_nil
|
|
1312
1276
|
end
|
|
1313
1277
|
|
|
1314
|
-
it
|
|
1278
|
+
it 'can be retrieved from the child: Piano' do
|
|
1315
1279
|
expect(
|
|
1316
|
-
Piano.get_discriminator_mapping(
|
|
1317
|
-
).to
|
|
1280
|
+
Piano.get_discriminator_mapping('some_dmap')
|
|
1281
|
+
).to be_nil
|
|
1318
1282
|
end
|
|
1319
1283
|
end
|
|
1320
1284
|
|
|
1321
|
-
context
|
|
1285
|
+
context 'when adding to the child' do
|
|
1322
1286
|
before do
|
|
1323
|
-
Guitar.add_discriminator_mapping(
|
|
1287
|
+
Guitar.add_discriminator_mapping('something')
|
|
1324
1288
|
end
|
|
1325
1289
|
|
|
1326
1290
|
after do
|
|
1327
|
-
Guitar.add_discriminator_mapping(
|
|
1291
|
+
Guitar.add_discriminator_mapping('Guitar')
|
|
1328
1292
|
end
|
|
1329
1293
|
|
|
1330
|
-
it
|
|
1294
|
+
it 'can be retrieved from the parent' do
|
|
1331
1295
|
expect(
|
|
1332
|
-
Instrument.get_discriminator_mapping(
|
|
1296
|
+
Instrument.get_discriminator_mapping('something')
|
|
1333
1297
|
).to eq(Guitar)
|
|
1334
1298
|
end
|
|
1335
1299
|
|
|
1336
|
-
it
|
|
1300
|
+
it 'can be retrieved from the child: Guitar' do
|
|
1337
1301
|
expect(
|
|
1338
|
-
Guitar.get_discriminator_mapping(
|
|
1302
|
+
Guitar.get_discriminator_mapping('something')
|
|
1339
1303
|
).to eq(Guitar)
|
|
1340
1304
|
end
|
|
1341
1305
|
|
|
1342
|
-
it
|
|
1306
|
+
it 'is not retrieved from the sibling' do
|
|
1343
1307
|
expect(
|
|
1344
|
-
Piano.get_discriminator_mapping(
|
|
1345
|
-
).to
|
|
1308
|
+
Piano.get_discriminator_mapping('something')
|
|
1309
|
+
).to be_nil
|
|
1346
1310
|
end
|
|
1347
1311
|
end
|
|
1348
1312
|
|
|
1349
|
-
context
|
|
1313
|
+
context 'when adding to the same class twice' do
|
|
1350
1314
|
before do
|
|
1351
|
-
Guitar.add_discriminator_mapping(
|
|
1352
|
-
Guitar.add_discriminator_mapping(
|
|
1315
|
+
Guitar.add_discriminator_mapping('something')
|
|
1316
|
+
Guitar.add_discriminator_mapping('something else')
|
|
1353
1317
|
end
|
|
1354
1318
|
|
|
1355
1319
|
after do
|
|
1356
|
-
Guitar.add_discriminator_mapping(
|
|
1320
|
+
Guitar.add_discriminator_mapping('Guitar')
|
|
1357
1321
|
end
|
|
1358
1322
|
|
|
1359
|
-
it
|
|
1323
|
+
it 'retrieves the new value from the parent' do
|
|
1360
1324
|
expect(
|
|
1361
|
-
Instrument.get_discriminator_mapping(
|
|
1325
|
+
Instrument.get_discriminator_mapping('something else')
|
|
1362
1326
|
).to eq(Guitar)
|
|
1363
1327
|
end
|
|
1364
1328
|
|
|
1365
|
-
it
|
|
1329
|
+
it 'retrieves the new value from the child: Guitar' do
|
|
1366
1330
|
expect(
|
|
1367
|
-
Guitar.get_discriminator_mapping(
|
|
1331
|
+
Guitar.get_discriminator_mapping('something else')
|
|
1368
1332
|
).to eq(Guitar)
|
|
1369
1333
|
end
|
|
1370
1334
|
|
|
1371
|
-
it
|
|
1335
|
+
it 'is not retrieved from the sibling' do
|
|
1372
1336
|
expect(
|
|
1373
|
-
Piano.get_discriminator_mapping(
|
|
1374
|
-
).to
|
|
1337
|
+
Piano.get_discriminator_mapping('something else')
|
|
1338
|
+
).to be_nil
|
|
1375
1339
|
end
|
|
1376
1340
|
|
|
1377
|
-
it
|
|
1341
|
+
it 'retrieves the old value from the parent' do
|
|
1378
1342
|
expect(
|
|
1379
|
-
Instrument.get_discriminator_mapping(
|
|
1343
|
+
Instrument.get_discriminator_mapping('something')
|
|
1380
1344
|
).to eq(Guitar)
|
|
1381
1345
|
end
|
|
1382
1346
|
|
|
1383
|
-
it
|
|
1347
|
+
it 'retrieves the old value from the child: Guitar' do
|
|
1384
1348
|
expect(
|
|
1385
|
-
Guitar.get_discriminator_mapping(
|
|
1349
|
+
Guitar.get_discriminator_mapping('something')
|
|
1386
1350
|
).to eq(Guitar)
|
|
1387
1351
|
end
|
|
1388
1352
|
|
|
1389
|
-
it
|
|
1353
|
+
it 'does not retrieves the old value from the sibling' do
|
|
1390
1354
|
expect(
|
|
1391
|
-
Piano.get_discriminator_mapping(
|
|
1392
|
-
).to
|
|
1355
|
+
Piano.get_discriminator_mapping('something')
|
|
1356
|
+
).to be_nil
|
|
1393
1357
|
end
|
|
1394
1358
|
end
|
|
1395
1359
|
end
|