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,179 +1,154 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
3
|
+
require 'spec_helper'
|
|
5
4
|
|
|
6
5
|
describe Mongoid::Association::Accessors do
|
|
7
|
-
|
|
8
6
|
describe "\#{getter}?" do
|
|
9
|
-
|
|
10
7
|
let(:person) do
|
|
11
8
|
Person.create!
|
|
12
9
|
end
|
|
13
10
|
|
|
14
|
-
context
|
|
15
|
-
|
|
16
|
-
context "when the association exists" do
|
|
17
|
-
|
|
11
|
+
context 'when the association is a has one' do
|
|
12
|
+
context 'when the association exists' do
|
|
18
13
|
let!(:game) do
|
|
19
14
|
person.build_game
|
|
20
15
|
end
|
|
21
16
|
|
|
22
|
-
it
|
|
17
|
+
it 'returns true' do
|
|
23
18
|
expect(person).to have_game
|
|
24
19
|
end
|
|
25
20
|
end
|
|
26
21
|
|
|
27
|
-
context
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
it "returns false" do
|
|
32
|
-
expect(person).to_not have_game
|
|
22
|
+
context 'when the association does not exist' do
|
|
23
|
+
context 'when not autobuilding' do
|
|
24
|
+
it 'returns false' do
|
|
25
|
+
expect(person).not_to have_game
|
|
33
26
|
end
|
|
34
27
|
end
|
|
35
28
|
|
|
36
|
-
context
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
expect(person).to_not have_book
|
|
29
|
+
context 'when autobuilding' do
|
|
30
|
+
it 'returns false' do
|
|
31
|
+
expect(person).not_to have_book
|
|
40
32
|
end
|
|
41
33
|
end
|
|
42
34
|
end
|
|
43
35
|
end
|
|
44
36
|
|
|
45
|
-
context
|
|
46
|
-
|
|
47
|
-
context "when the association has documents" do
|
|
48
|
-
|
|
37
|
+
context 'when the association is a has many' do
|
|
38
|
+
context 'when the association has documents' do
|
|
49
39
|
let!(:post) do
|
|
50
40
|
person.posts.build
|
|
51
41
|
end
|
|
52
42
|
|
|
53
|
-
it
|
|
43
|
+
it 'returns true' do
|
|
54
44
|
expect(person).to have_posts
|
|
55
45
|
end
|
|
56
46
|
end
|
|
57
47
|
|
|
58
|
-
context
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
expect(person).to_not have_posts
|
|
48
|
+
context 'when the association does not have documents' do
|
|
49
|
+
it 'returns false' do
|
|
50
|
+
expect(person).not_to have_posts
|
|
62
51
|
end
|
|
63
52
|
end
|
|
64
53
|
end
|
|
65
54
|
|
|
66
|
-
context
|
|
67
|
-
|
|
68
|
-
context "when the association has documents" do
|
|
69
|
-
|
|
55
|
+
context 'when the association is a has and belongs to many' do
|
|
56
|
+
context 'when the association has documents' do
|
|
70
57
|
let!(:preference) do
|
|
71
58
|
person.preferences.build
|
|
72
59
|
end
|
|
73
60
|
|
|
74
|
-
it
|
|
61
|
+
it 'returns true' do
|
|
75
62
|
expect(person).to have_preferences
|
|
76
63
|
end
|
|
77
64
|
end
|
|
78
65
|
|
|
79
|
-
context
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
expect(person).to_not have_preferences
|
|
66
|
+
context 'when the association does not have documents' do
|
|
67
|
+
it 'returns false' do
|
|
68
|
+
expect(person).not_to have_preferences
|
|
83
69
|
end
|
|
84
70
|
end
|
|
85
71
|
end
|
|
86
72
|
|
|
87
|
-
context
|
|
88
|
-
|
|
89
|
-
context "when the association is named next" do
|
|
90
|
-
|
|
73
|
+
context 'when the association is a belongs to' do
|
|
74
|
+
context 'when the association is named next' do
|
|
91
75
|
let(:user) do
|
|
92
76
|
User.create!
|
|
93
77
|
end
|
|
94
78
|
|
|
95
|
-
it
|
|
96
|
-
expect(user).
|
|
79
|
+
it 'allows the existence check' do
|
|
80
|
+
expect(user).not_to have_next
|
|
97
81
|
end
|
|
98
82
|
end
|
|
99
83
|
|
|
100
|
-
context
|
|
101
|
-
|
|
84
|
+
context 'when the association exists' do
|
|
102
85
|
let!(:game) do
|
|
103
86
|
person.build_game
|
|
104
87
|
end
|
|
105
88
|
|
|
106
|
-
it
|
|
89
|
+
it 'returns true' do
|
|
107
90
|
expect(game).to have_person
|
|
108
91
|
end
|
|
109
92
|
end
|
|
110
93
|
|
|
111
|
-
context
|
|
112
|
-
|
|
113
|
-
context "when the association does not autobuild" do
|
|
114
|
-
|
|
94
|
+
context 'when the association does not exist' do
|
|
95
|
+
context 'when the association does not autobuild' do
|
|
115
96
|
let(:game) do
|
|
116
97
|
Game.new
|
|
117
98
|
end
|
|
118
99
|
|
|
119
|
-
it
|
|
120
|
-
expect(game).
|
|
100
|
+
it 'returns false' do
|
|
101
|
+
expect(game).not_to have_person
|
|
121
102
|
end
|
|
122
103
|
end
|
|
123
104
|
|
|
124
|
-
context
|
|
125
|
-
|
|
105
|
+
context 'when the association autobuilds' do
|
|
126
106
|
let(:book) do
|
|
127
107
|
Book.new
|
|
128
108
|
end
|
|
129
109
|
|
|
130
|
-
it
|
|
131
|
-
expect(book).
|
|
110
|
+
it 'returns false' do
|
|
111
|
+
expect(book).not_to have_person
|
|
132
112
|
end
|
|
133
113
|
end
|
|
134
114
|
end
|
|
135
115
|
end
|
|
136
116
|
|
|
137
|
-
context
|
|
138
|
-
|
|
139
|
-
context "when the association exists" do
|
|
140
|
-
|
|
117
|
+
context 'when the association is an embeds one' do
|
|
118
|
+
context 'when the association exists' do
|
|
141
119
|
let!(:name) do
|
|
142
120
|
person.build_name
|
|
143
121
|
end
|
|
144
122
|
|
|
145
|
-
it
|
|
123
|
+
it 'returns true' do
|
|
146
124
|
expect(person).to have_name
|
|
147
125
|
end
|
|
148
126
|
end
|
|
149
127
|
|
|
150
|
-
context
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
it "returns false" do
|
|
155
|
-
expect(person).to_not have_name
|
|
128
|
+
context 'when the association does not exist' do
|
|
129
|
+
context 'when the association does not autobuild' do
|
|
130
|
+
it 'returns false' do
|
|
131
|
+
expect(person).not_to have_name
|
|
156
132
|
end
|
|
157
133
|
end
|
|
158
134
|
|
|
159
|
-
context
|
|
160
|
-
|
|
135
|
+
context 'when the association autobuilds' do
|
|
161
136
|
let(:person) do
|
|
162
137
|
Person.new
|
|
163
138
|
end
|
|
164
139
|
|
|
165
|
-
it
|
|
166
|
-
expect(person).
|
|
140
|
+
it 'returns false' do
|
|
141
|
+
expect(person).not_to have_passport
|
|
167
142
|
end
|
|
168
143
|
end
|
|
169
144
|
end
|
|
170
145
|
|
|
171
|
-
context
|
|
146
|
+
context 'when the association is set to nil first' do
|
|
172
147
|
let!(:name) do
|
|
173
148
|
person.build_name
|
|
174
149
|
end
|
|
175
150
|
|
|
176
|
-
it
|
|
151
|
+
it 'returns true' do
|
|
177
152
|
person.name = nil
|
|
178
153
|
person.name = name
|
|
179
154
|
expect(person).to have_name
|
|
@@ -181,61 +156,53 @@ describe Mongoid::Association::Accessors do
|
|
|
181
156
|
end
|
|
182
157
|
end
|
|
183
158
|
|
|
184
|
-
context
|
|
185
|
-
|
|
186
|
-
context "when the association has documents" do
|
|
187
|
-
|
|
159
|
+
context 'when the association is an embeds many' do
|
|
160
|
+
context 'when the association has documents' do
|
|
188
161
|
let!(:address) do
|
|
189
162
|
person.addresses.build
|
|
190
163
|
end
|
|
191
164
|
|
|
192
|
-
it
|
|
165
|
+
it 'returns true' do
|
|
193
166
|
expect(person).to have_addresses
|
|
194
167
|
end
|
|
195
168
|
end
|
|
196
169
|
|
|
197
|
-
context
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
expect(person).to_not have_addresses
|
|
170
|
+
context 'when the association does not have documents' do
|
|
171
|
+
it 'returns false' do
|
|
172
|
+
expect(person).not_to have_addresses
|
|
201
173
|
end
|
|
202
174
|
end
|
|
203
175
|
end
|
|
204
176
|
|
|
205
|
-
context
|
|
206
|
-
|
|
207
|
-
context "when the association exists" do
|
|
208
|
-
|
|
177
|
+
context 'when the association is an embedded in' do
|
|
178
|
+
context 'when the association exists' do
|
|
209
179
|
let!(:name) do
|
|
210
180
|
person.build_name
|
|
211
181
|
end
|
|
212
182
|
|
|
213
|
-
it
|
|
183
|
+
it 'returns true' do
|
|
214
184
|
expect(name).to have_namable
|
|
215
185
|
end
|
|
216
186
|
end
|
|
217
187
|
|
|
218
|
-
context
|
|
219
|
-
|
|
220
|
-
context "when the association does not autobuild" do
|
|
221
|
-
|
|
188
|
+
context 'when the association does not exist' do
|
|
189
|
+
context 'when the association does not autobuild' do
|
|
222
190
|
let(:name) do
|
|
223
191
|
Name.new
|
|
224
192
|
end
|
|
225
193
|
|
|
226
|
-
it
|
|
227
|
-
expect(name).
|
|
194
|
+
it 'returns false' do
|
|
195
|
+
expect(name).not_to have_namable
|
|
228
196
|
end
|
|
229
197
|
end
|
|
230
198
|
|
|
231
|
-
context
|
|
232
|
-
|
|
199
|
+
context 'when the association autobuilds' do
|
|
233
200
|
let(:passport) do
|
|
234
201
|
Passport.new
|
|
235
202
|
end
|
|
236
203
|
|
|
237
|
-
it
|
|
238
|
-
expect(passport).
|
|
204
|
+
it 'returns false' do
|
|
205
|
+
expect(passport).not_to have_person
|
|
239
206
|
end
|
|
240
207
|
end
|
|
241
208
|
end
|
|
@@ -243,300 +210,270 @@ describe Mongoid::Association::Accessors do
|
|
|
243
210
|
end
|
|
244
211
|
|
|
245
212
|
describe "\#{getter}" do
|
|
246
|
-
|
|
247
213
|
let(:person) do
|
|
248
214
|
Person.new
|
|
249
215
|
end
|
|
250
216
|
|
|
251
|
-
context
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
context "when the association does not exist" do
|
|
256
|
-
|
|
217
|
+
context 'when autobuilding the association' do
|
|
218
|
+
context 'when the association is an embeds one' do
|
|
219
|
+
context 'when the association does not exist' do
|
|
257
220
|
let!(:passport) do
|
|
258
221
|
person.passport
|
|
259
222
|
end
|
|
260
223
|
|
|
261
|
-
it
|
|
224
|
+
it 'builds the new document' do
|
|
262
225
|
expect(passport).to be_a(Passport)
|
|
263
226
|
end
|
|
264
227
|
|
|
265
|
-
it
|
|
266
|
-
expect(person.as_document[
|
|
228
|
+
it 'stores in the altered attribute' do
|
|
229
|
+
expect(person.as_document['pass']).to eq(passport.attributes)
|
|
267
230
|
end
|
|
268
231
|
end
|
|
269
232
|
|
|
270
|
-
context
|
|
271
|
-
|
|
233
|
+
context 'when the association exists' do
|
|
272
234
|
let!(:passport) do
|
|
273
|
-
person.build_passport(number:
|
|
235
|
+
person.build_passport(number: '123123321')
|
|
274
236
|
end
|
|
275
237
|
|
|
276
|
-
it
|
|
238
|
+
it 'does not build a new document' do
|
|
277
239
|
expect(person.passport).to eq(passport)
|
|
278
240
|
end
|
|
279
|
-
|
|
280
241
|
end
|
|
281
242
|
end
|
|
282
243
|
|
|
283
|
-
context
|
|
284
|
-
|
|
244
|
+
context 'when the association is an embedded in' do
|
|
285
245
|
let(:passport) do
|
|
286
246
|
Passport.new
|
|
287
247
|
end
|
|
288
248
|
|
|
289
|
-
context
|
|
290
|
-
|
|
249
|
+
context 'when the association does not exist' do
|
|
291
250
|
let(:person) do
|
|
292
251
|
passport.person
|
|
293
252
|
end
|
|
294
253
|
|
|
295
|
-
it
|
|
254
|
+
it 'builds the new document' do
|
|
296
255
|
expect(person).to be_a(Person)
|
|
297
256
|
end
|
|
298
257
|
end
|
|
299
258
|
|
|
300
|
-
context
|
|
301
|
-
|
|
259
|
+
context 'when the association exists' do
|
|
302
260
|
let!(:person) do
|
|
303
|
-
passport.build_person(title:
|
|
261
|
+
passport.build_person(title: 'sir')
|
|
304
262
|
end
|
|
305
263
|
|
|
306
|
-
it
|
|
264
|
+
it 'does not build a new document' do
|
|
307
265
|
expect(passport.person).to eq(person)
|
|
308
266
|
end
|
|
309
267
|
end
|
|
310
268
|
end
|
|
311
269
|
|
|
312
|
-
context
|
|
313
|
-
|
|
314
|
-
context "when the association does not exist" do
|
|
315
|
-
|
|
270
|
+
context 'when the association is a has one' do
|
|
271
|
+
context 'when the association does not exist' do
|
|
316
272
|
let(:book) do
|
|
317
273
|
person.book
|
|
318
274
|
end
|
|
319
275
|
|
|
320
|
-
it
|
|
276
|
+
it 'builds the new document' do
|
|
321
277
|
expect(book).to be_a(Book)
|
|
322
278
|
end
|
|
323
279
|
end
|
|
324
280
|
|
|
325
|
-
context
|
|
326
|
-
|
|
281
|
+
context 'when the association exists' do
|
|
327
282
|
let!(:book) do
|
|
328
|
-
person.build_book(title:
|
|
283
|
+
person.build_book(title: 'art of war')
|
|
329
284
|
end
|
|
330
285
|
|
|
331
|
-
it
|
|
286
|
+
it 'does not build a new document' do
|
|
332
287
|
expect(person.book).to eq(book)
|
|
333
288
|
end
|
|
334
289
|
end
|
|
335
290
|
end
|
|
336
291
|
|
|
337
|
-
context
|
|
338
|
-
|
|
292
|
+
context 'when the association is a belongs to' do
|
|
339
293
|
let(:book) do
|
|
340
294
|
Book.new
|
|
341
295
|
end
|
|
342
296
|
|
|
343
|
-
context
|
|
344
|
-
|
|
297
|
+
context 'when the association does not exist' do
|
|
345
298
|
let(:person) do
|
|
346
299
|
book.person
|
|
347
300
|
end
|
|
348
301
|
|
|
349
|
-
it
|
|
302
|
+
it 'builds the new document' do
|
|
350
303
|
expect(person).to be_a(Person)
|
|
351
304
|
end
|
|
352
305
|
end
|
|
353
306
|
|
|
354
|
-
context
|
|
355
|
-
|
|
307
|
+
context 'when the association exists' do
|
|
356
308
|
let!(:person) do
|
|
357
|
-
book.build_person(title:
|
|
309
|
+
book.build_person(title: 'sir')
|
|
358
310
|
end
|
|
359
311
|
|
|
360
|
-
it
|
|
312
|
+
it 'does not build a new document' do
|
|
361
313
|
expect(book.person).to eq(person)
|
|
362
314
|
end
|
|
363
315
|
end
|
|
364
316
|
end
|
|
365
317
|
end
|
|
366
318
|
|
|
367
|
-
context
|
|
368
|
-
|
|
319
|
+
context 'when the association is not polymorphic' do
|
|
369
320
|
let(:person) do
|
|
370
321
|
Person.create!
|
|
371
322
|
end
|
|
372
323
|
|
|
373
|
-
context
|
|
374
|
-
|
|
324
|
+
context 'when the association is a many to many' do
|
|
375
325
|
let!(:preference) do
|
|
376
|
-
Preference.create!(name:
|
|
326
|
+
Preference.create!(name: 'Setting')
|
|
377
327
|
end
|
|
378
328
|
|
|
379
329
|
before do
|
|
380
330
|
person.preferences << Preference.last
|
|
381
331
|
end
|
|
382
332
|
|
|
383
|
-
context
|
|
384
|
-
|
|
333
|
+
context 'when reloading the association directly' do
|
|
385
334
|
let(:preferences) do
|
|
386
335
|
person.preferences(true)
|
|
387
336
|
end
|
|
388
337
|
|
|
389
|
-
it
|
|
338
|
+
it 'reloads the correct documents' do
|
|
390
339
|
expect(preferences).to eq([ preference ])
|
|
391
340
|
end
|
|
392
341
|
|
|
393
|
-
it
|
|
394
|
-
expect(preferences.first).
|
|
342
|
+
it 'reloads a new instance' do
|
|
343
|
+
expect(preferences.first).not_to equal(preference)
|
|
395
344
|
end
|
|
396
345
|
end
|
|
397
346
|
|
|
398
|
-
context
|
|
399
|
-
|
|
347
|
+
context 'when reloading via the base document' do
|
|
400
348
|
let(:preferences) do
|
|
401
349
|
person.reload.preferences
|
|
402
350
|
end
|
|
403
351
|
|
|
404
|
-
it
|
|
352
|
+
it 'reloads the correct documents' do
|
|
405
353
|
expect(preferences).to eq([ preference ])
|
|
406
354
|
end
|
|
407
355
|
|
|
408
|
-
it
|
|
409
|
-
expect(preferences.first).
|
|
356
|
+
it 'reloads a new instance' do
|
|
357
|
+
expect(preferences.first).not_to equal(preference)
|
|
410
358
|
end
|
|
411
359
|
end
|
|
412
360
|
|
|
413
|
-
context
|
|
414
|
-
|
|
361
|
+
context 'when performing a fresh find on the base' do
|
|
415
362
|
let(:preferences) do
|
|
416
363
|
Person.find(person.id).preferences
|
|
417
364
|
end
|
|
418
365
|
|
|
419
|
-
it
|
|
366
|
+
it 'reloads the correct documents' do
|
|
420
367
|
expect(preferences).to eq([ preference ])
|
|
421
368
|
end
|
|
422
369
|
end
|
|
423
370
|
end
|
|
424
371
|
|
|
425
|
-
context
|
|
426
|
-
|
|
372
|
+
context 'when the association is a many to one' do
|
|
427
373
|
let!(:post) do
|
|
428
|
-
Post.create!(title:
|
|
374
|
+
Post.create!(title: 'First!')
|
|
429
375
|
end
|
|
430
376
|
|
|
431
377
|
before do
|
|
432
378
|
person.posts << Post.last
|
|
433
379
|
end
|
|
434
380
|
|
|
435
|
-
context
|
|
436
|
-
|
|
381
|
+
context 'when reloading the association directly' do
|
|
437
382
|
let(:posts) do
|
|
438
383
|
person.posts(true)
|
|
439
384
|
end
|
|
440
385
|
|
|
441
|
-
it
|
|
386
|
+
it 'reloads the correct documents' do
|
|
442
387
|
expect(posts).to eq([ post ])
|
|
443
388
|
end
|
|
444
389
|
|
|
445
|
-
it
|
|
446
|
-
expect(posts.first).
|
|
390
|
+
it 'reloads a new instance' do
|
|
391
|
+
expect(posts.first).not_to equal(post)
|
|
447
392
|
end
|
|
448
393
|
end
|
|
449
394
|
|
|
450
|
-
context
|
|
451
|
-
|
|
395
|
+
context 'when reloading via the base document' do
|
|
452
396
|
let(:posts) do
|
|
453
397
|
person.reload.posts
|
|
454
398
|
end
|
|
455
399
|
|
|
456
|
-
it
|
|
400
|
+
it 'reloads the correct documents' do
|
|
457
401
|
expect(posts).to eq([ post ])
|
|
458
402
|
end
|
|
459
403
|
|
|
460
|
-
it
|
|
461
|
-
expect(posts.first).
|
|
404
|
+
it 'reloads a new instance' do
|
|
405
|
+
expect(posts.first).not_to equal(post)
|
|
462
406
|
end
|
|
463
407
|
end
|
|
464
408
|
|
|
465
|
-
context
|
|
466
|
-
|
|
409
|
+
context 'when performing a fresh find on the base' do
|
|
467
410
|
let(:posts) do
|
|
468
411
|
Person.find(person.id).posts
|
|
469
412
|
end
|
|
470
413
|
|
|
471
|
-
it
|
|
414
|
+
it 'reloads the correct documents' do
|
|
472
415
|
expect(posts).to eq([ post ])
|
|
473
416
|
end
|
|
474
417
|
end
|
|
475
418
|
end
|
|
476
419
|
|
|
477
|
-
context
|
|
478
|
-
|
|
420
|
+
context 'when the association is a references one' do
|
|
479
421
|
let!(:game) do
|
|
480
|
-
Game.create!(name:
|
|
422
|
+
Game.create!(name: 'Centipeded')
|
|
481
423
|
end
|
|
482
424
|
|
|
483
425
|
before do
|
|
484
426
|
person.game = Game.last
|
|
485
427
|
end
|
|
486
428
|
|
|
487
|
-
context
|
|
488
|
-
|
|
429
|
+
context 'when reloading the association directly' do
|
|
489
430
|
let(:reloaded_game) do
|
|
490
431
|
person.game(true)
|
|
491
432
|
end
|
|
492
433
|
|
|
493
|
-
it
|
|
434
|
+
it 'reloads the correct documents' do
|
|
494
435
|
expect(reloaded_game).to eq(game)
|
|
495
436
|
end
|
|
496
437
|
|
|
497
|
-
it
|
|
498
|
-
expect(reloaded_game).
|
|
438
|
+
it 'reloads a new instance' do
|
|
439
|
+
expect(reloaded_game).not_to equal(game)
|
|
499
440
|
end
|
|
500
441
|
end
|
|
501
442
|
|
|
502
|
-
context
|
|
503
|
-
|
|
443
|
+
context 'when reloading via the base document' do
|
|
504
444
|
let(:reloaded_game) do
|
|
505
445
|
person.reload.game
|
|
506
446
|
end
|
|
507
447
|
|
|
508
|
-
it
|
|
448
|
+
it 'reloads the correct documents' do
|
|
509
449
|
expect(reloaded_game).to eq(game)
|
|
510
450
|
end
|
|
511
451
|
|
|
512
|
-
it
|
|
513
|
-
expect(reloaded_game).
|
|
452
|
+
it 'reloads a new instance' do
|
|
453
|
+
expect(reloaded_game).not_to equal(game)
|
|
514
454
|
end
|
|
515
455
|
end
|
|
516
456
|
|
|
517
|
-
context
|
|
518
|
-
|
|
457
|
+
context 'when performing a fresh find on the base' do
|
|
519
458
|
let(:reloaded_game) do
|
|
520
459
|
Person.find(person.id).game
|
|
521
460
|
end
|
|
522
461
|
|
|
523
|
-
it
|
|
462
|
+
it 'reloads the correct documents' do
|
|
524
463
|
expect(reloaded_game).to eq(game)
|
|
525
464
|
end
|
|
526
465
|
end
|
|
527
466
|
end
|
|
528
467
|
end
|
|
529
468
|
|
|
530
|
-
context
|
|
531
|
-
|
|
469
|
+
context 'when the association is polymorphic' do
|
|
532
470
|
context "when there's a single references many/one" do
|
|
533
|
-
|
|
534
471
|
let!(:movie) do
|
|
535
|
-
Movie.create!(title:
|
|
472
|
+
Movie.create!(title: 'Inception')
|
|
536
473
|
end
|
|
537
474
|
|
|
538
475
|
let!(:book) do
|
|
539
|
-
Book.create!(title:
|
|
476
|
+
Book.create!(title: 'Jurassic Park')
|
|
540
477
|
end
|
|
541
478
|
|
|
542
479
|
let!(:movie_rating) do
|
|
@@ -547,35 +484,32 @@ describe Mongoid::Association::Accessors do
|
|
|
547
484
|
book.create_rating(value: 5)
|
|
548
485
|
end
|
|
549
486
|
|
|
550
|
-
context
|
|
551
|
-
|
|
487
|
+
context 'when accessing a referenced in' do
|
|
552
488
|
let!(:rating) do
|
|
553
489
|
Rating.where(value: 10).first
|
|
554
490
|
end
|
|
555
491
|
|
|
556
|
-
it
|
|
492
|
+
it 'returns the correct document' do
|
|
557
493
|
expect(rating.ratable).to eq(movie)
|
|
558
494
|
end
|
|
559
495
|
end
|
|
560
496
|
|
|
561
|
-
context
|
|
562
|
-
|
|
497
|
+
context 'when accessing a references many' do
|
|
563
498
|
let(:ratings) do
|
|
564
499
|
Movie.first.ratings
|
|
565
500
|
end
|
|
566
501
|
|
|
567
|
-
it
|
|
502
|
+
it 'returns the correct documents' do
|
|
568
503
|
expect(ratings).to eq([ movie_rating ])
|
|
569
504
|
end
|
|
570
505
|
end
|
|
571
506
|
|
|
572
|
-
context
|
|
573
|
-
|
|
507
|
+
context 'when accessing a references one' do
|
|
574
508
|
let!(:rating) do
|
|
575
509
|
Book.find(book.id).rating
|
|
576
510
|
end
|
|
577
511
|
|
|
578
|
-
it
|
|
512
|
+
it 'returns the correct document' do
|
|
579
513
|
expect(rating).to eq(book_rating)
|
|
580
514
|
end
|
|
581
515
|
end
|
|
@@ -584,31 +518,31 @@ describe Mongoid::Association::Accessors do
|
|
|
584
518
|
|
|
585
519
|
context 'when projecting' do
|
|
586
520
|
context 'embeds_one' do
|
|
587
|
-
|
|
588
521
|
let!(:person) do
|
|
589
|
-
Person.create!(passport: Passport.new(number:
|
|
522
|
+
Person.create!(passport: Passport.new(number: '123123321', country: 'USA'))
|
|
590
523
|
end
|
|
591
524
|
|
|
592
|
-
context
|
|
525
|
+
context 'when the record is queried with the embedded association projected' do
|
|
593
526
|
let(:persisted_person) { Person.only(:passport).first }
|
|
594
527
|
|
|
595
528
|
it 'creates an accessor for the projected embedded document' do
|
|
596
|
-
expect(persisted_person.passport.number).to eq(
|
|
597
|
-
expect(persisted_person.passport.country).to eq(
|
|
529
|
+
expect(persisted_person.passport.number).to eq('123123321')
|
|
530
|
+
expect(persisted_person.passport.country).to eq('USA')
|
|
598
531
|
end
|
|
599
532
|
end
|
|
600
533
|
|
|
601
534
|
context 'when the record is queried with a field on the embedded association projected' do
|
|
602
|
-
let(:persisted_person) { Person.only(
|
|
535
|
+
let(:persisted_person) { Person.only('pass.number').first }
|
|
603
536
|
|
|
604
537
|
it 'creates an accessor for the projected field on the embedded document' do
|
|
605
|
-
expect(persisted_person.passport.number).to eq(
|
|
538
|
+
expect(persisted_person.passport.number).to eq('123123321')
|
|
606
539
|
end
|
|
607
540
|
|
|
608
541
|
it 'does not create an accessor for another field on the embedded document' do
|
|
609
542
|
expect do
|
|
610
543
|
persisted_person.passport.country
|
|
611
|
-
end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
|
|
544
|
+
end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
|
|
545
|
+
/Attempted to access attribute 'country' on Passport which was not loaded/)
|
|
612
546
|
end
|
|
613
547
|
end
|
|
614
548
|
|
|
@@ -626,19 +560,20 @@ describe Mongoid::Association::Accessors do
|
|
|
626
560
|
end
|
|
627
561
|
|
|
628
562
|
context 'association then field' do
|
|
629
|
-
let(:persisted_person) { Person.only(:pass,
|
|
563
|
+
let(:persisted_person) { Person.only(:pass, 'pass.number').first }
|
|
630
564
|
|
|
631
565
|
context '4.2 server and lower' do
|
|
632
566
|
max_server_version '4.2'
|
|
633
567
|
|
|
634
568
|
it 'creates an accessor for the projected field on the embedded document' do
|
|
635
|
-
expect(persisted_person.passport.number).to eq(
|
|
569
|
+
expect(persisted_person.passport.number).to eq('123123321')
|
|
636
570
|
end
|
|
637
571
|
|
|
638
572
|
it 'does not create an accessor for another field on the embedded document' do
|
|
639
573
|
expect do
|
|
640
574
|
persisted_person.passport.country
|
|
641
|
-
end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
|
|
575
|
+
end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
|
|
576
|
+
/Attempted to access attribute 'country' on Passport which was not loaded/)
|
|
642
577
|
end
|
|
643
578
|
end
|
|
644
579
|
|
|
@@ -652,11 +587,11 @@ describe Mongoid::Association::Accessors do
|
|
|
652
587
|
max_server_version '4.2'
|
|
653
588
|
|
|
654
589
|
it 'creates an accessor for the projected field on the embedded document' do
|
|
655
|
-
expect(persisted_person.passport.number).to eq(
|
|
590
|
+
expect(persisted_person.passport.number).to eq('123123321')
|
|
656
591
|
end
|
|
657
592
|
|
|
658
593
|
it 'retrieves other fields' do
|
|
659
|
-
persisted_person.passport.country.should
|
|
594
|
+
persisted_person.passport.country.should eq 'USA'
|
|
660
595
|
end
|
|
661
596
|
end
|
|
662
597
|
|
|
@@ -666,11 +601,10 @@ describe Mongoid::Association::Accessors do
|
|
|
666
601
|
end
|
|
667
602
|
|
|
668
603
|
context 'embeds_many' do
|
|
669
|
-
|
|
670
604
|
let!(:person) do
|
|
671
605
|
Person.create!(phone_numbers: [
|
|
672
|
-
|
|
673
|
-
|
|
606
|
+
Phone.new(number: '111-111-1111', landline: true)
|
|
607
|
+
])
|
|
674
608
|
end
|
|
675
609
|
|
|
676
610
|
context 'when the record is queried with the embedded association projected' do
|
|
@@ -684,7 +618,7 @@ describe Mongoid::Association::Accessors do
|
|
|
684
618
|
|
|
685
619
|
shared_examples 'allows access to field of projected association' do
|
|
686
620
|
it 'creates an accessor for the embedded document' do
|
|
687
|
-
expect(persisted_person.phone_numbers.first).to
|
|
621
|
+
expect(persisted_person.phone_numbers.first).to be_a(Phone)
|
|
688
622
|
end
|
|
689
623
|
|
|
690
624
|
it 'creates an accessor for the projected field on the embedded document' do
|
|
@@ -693,19 +627,19 @@ describe Mongoid::Association::Accessors do
|
|
|
693
627
|
end
|
|
694
628
|
|
|
695
629
|
context 'when the record is queried with a field on the embedded association projected' do
|
|
696
|
-
let(:persisted_person) { Person.only(
|
|
630
|
+
let(:persisted_person) { Person.only('phone_numbers.number').first }
|
|
697
631
|
|
|
698
632
|
include_examples 'allows access to field of projected association'
|
|
699
633
|
|
|
700
634
|
it 'does not create an accessor for another field on the embedded document' do
|
|
701
635
|
expect do
|
|
702
636
|
persisted_person.phone_numbers.first.landline
|
|
703
|
-
end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
|
|
637
|
+
end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
|
|
638
|
+
/Attempted to access attribute 'landline' on Phone which was not loaded/)
|
|
704
639
|
end
|
|
705
640
|
end
|
|
706
641
|
|
|
707
642
|
context 'when projecting association and a field in association' do
|
|
708
|
-
|
|
709
643
|
shared_examples 'is prohibited on 4.4+ server' do
|
|
710
644
|
context '4.4 server and higher' do
|
|
711
645
|
min_server_version '4.4'
|
|
@@ -729,9 +663,9 @@ describe Mongoid::Association::Accessors do
|
|
|
729
663
|
it 'does not create an accessor for another field on the embedded document' do
|
|
730
664
|
expect do
|
|
731
665
|
persisted_person.phone_numbers.first.landline
|
|
732
|
-
end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
|
|
666
|
+
end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
|
|
667
|
+
/Attempted to access attribute 'landline' on Phone which was not loaded/)
|
|
733
668
|
end
|
|
734
|
-
|
|
735
669
|
end
|
|
736
670
|
|
|
737
671
|
include_examples 'is prohibited on 4.4+ server'
|
|
@@ -757,120 +691,108 @@ describe Mongoid::Association::Accessors do
|
|
|
757
691
|
end
|
|
758
692
|
end
|
|
759
693
|
|
|
760
|
-
context
|
|
761
|
-
|
|
762
|
-
context "when the document is a referenced in" do
|
|
763
|
-
|
|
694
|
+
context 'when setting associations to empty values' do
|
|
695
|
+
context 'when the document is a referenced in' do
|
|
764
696
|
let(:post) do
|
|
765
697
|
Post.new
|
|
766
698
|
end
|
|
767
699
|
|
|
768
|
-
context
|
|
769
|
-
|
|
700
|
+
context 'when setting the association directly' do
|
|
770
701
|
before do
|
|
771
|
-
post.person =
|
|
702
|
+
post.person = ''
|
|
772
703
|
end
|
|
773
704
|
|
|
774
|
-
it
|
|
705
|
+
it 'converts them to nil' do
|
|
775
706
|
expect(post.person).to be_nil
|
|
776
707
|
end
|
|
777
708
|
end
|
|
778
709
|
|
|
779
|
-
context
|
|
780
|
-
|
|
710
|
+
context 'when setting the foreign key' do
|
|
781
711
|
before do
|
|
782
|
-
post.person_id =
|
|
712
|
+
post.person_id = ''
|
|
783
713
|
end
|
|
784
714
|
|
|
785
|
-
it
|
|
715
|
+
it 'converts it to nil' do
|
|
786
716
|
expect(post.person_id).to be_nil
|
|
787
717
|
end
|
|
788
718
|
end
|
|
789
719
|
end
|
|
790
720
|
|
|
791
|
-
context
|
|
792
|
-
|
|
721
|
+
context 'when the document is a references one' do
|
|
793
722
|
let(:person) do
|
|
794
723
|
Person.new
|
|
795
724
|
end
|
|
796
725
|
|
|
797
|
-
context
|
|
798
|
-
|
|
726
|
+
context 'when setting the association directly' do
|
|
799
727
|
before do
|
|
800
|
-
person.game =
|
|
728
|
+
person.game = ''
|
|
801
729
|
end
|
|
802
730
|
|
|
803
|
-
it
|
|
731
|
+
it 'converts them to nil' do
|
|
804
732
|
expect(person.game).to be_nil
|
|
805
733
|
end
|
|
806
734
|
end
|
|
807
735
|
|
|
808
|
-
context
|
|
809
|
-
|
|
736
|
+
context 'when setting the foreign key' do
|
|
810
737
|
let(:game) do
|
|
811
738
|
Game.new
|
|
812
739
|
end
|
|
813
740
|
|
|
814
741
|
before do
|
|
815
|
-
game.person_id =
|
|
742
|
+
game.person_id = ''
|
|
816
743
|
end
|
|
817
744
|
|
|
818
|
-
it
|
|
745
|
+
it 'converts it to nil' do
|
|
819
746
|
expect(game.person_id).to be_nil
|
|
820
747
|
end
|
|
821
748
|
end
|
|
822
749
|
end
|
|
823
750
|
|
|
824
|
-
context
|
|
825
|
-
|
|
751
|
+
context 'when the document is a references many' do
|
|
826
752
|
let(:person) do
|
|
827
753
|
Person.new
|
|
828
754
|
end
|
|
829
755
|
|
|
830
|
-
context
|
|
831
|
-
|
|
756
|
+
context 'when setting the foreign key' do
|
|
832
757
|
let(:post) do
|
|
833
758
|
Post.new
|
|
834
759
|
end
|
|
835
760
|
|
|
836
761
|
before do
|
|
837
|
-
post.person_id =
|
|
762
|
+
post.person_id = ''
|
|
838
763
|
end
|
|
839
764
|
|
|
840
|
-
it
|
|
765
|
+
it 'converts it to nil' do
|
|
841
766
|
expect(post.person).to be_nil
|
|
842
767
|
end
|
|
843
768
|
end
|
|
844
769
|
|
|
845
|
-
context
|
|
846
|
-
|
|
770
|
+
context 'when setting the _ids accessor' do
|
|
847
771
|
let(:post) do
|
|
848
772
|
Post.create!
|
|
849
773
|
end
|
|
850
774
|
|
|
851
775
|
before do
|
|
852
|
-
person.post_ids = [
|
|
776
|
+
person.post_ids = [ '' ]
|
|
853
777
|
end
|
|
854
778
|
|
|
855
|
-
it
|
|
779
|
+
it 'ignore blank values' do
|
|
856
780
|
expect(person.post_ids).to be_empty
|
|
857
781
|
end
|
|
858
782
|
end
|
|
859
783
|
end
|
|
860
784
|
|
|
861
|
-
context
|
|
862
|
-
|
|
785
|
+
context 'when the document is a references many to many' do
|
|
863
786
|
let(:person) do
|
|
864
787
|
Person.new
|
|
865
788
|
end
|
|
866
789
|
|
|
867
|
-
context
|
|
868
|
-
|
|
790
|
+
context 'when setting the foreign key' do
|
|
869
791
|
before do
|
|
870
|
-
person.preference_ids = [
|
|
792
|
+
person.preference_ids = [ '', '' ]
|
|
871
793
|
end
|
|
872
794
|
|
|
873
|
-
it
|
|
795
|
+
it 'does not add them' do
|
|
874
796
|
expect(person.preference_ids).to be_empty
|
|
875
797
|
end
|
|
876
798
|
end
|
|
@@ -916,8 +838,7 @@ describe Mongoid::Association::Accessors do
|
|
|
916
838
|
end
|
|
917
839
|
end
|
|
918
840
|
|
|
919
|
-
context
|
|
920
|
-
|
|
841
|
+
context 'when setting association foreign keys' do
|
|
921
842
|
let(:game) do
|
|
922
843
|
Game.new
|
|
923
844
|
end
|
|
@@ -926,67 +847,61 @@ describe Mongoid::Association::Accessors do
|
|
|
926
847
|
Person.create!
|
|
927
848
|
end
|
|
928
849
|
|
|
929
|
-
context
|
|
930
|
-
|
|
850
|
+
context 'when value is an empty string' do
|
|
931
851
|
before do
|
|
932
|
-
game.person_id =
|
|
852
|
+
game.person_id = ''
|
|
933
853
|
game.save!
|
|
934
854
|
end
|
|
935
855
|
|
|
936
|
-
it
|
|
856
|
+
it 'sets the foreign key to empty' do
|
|
937
857
|
expect(game.reload.person_id).to be_blank
|
|
938
858
|
end
|
|
939
859
|
end
|
|
940
860
|
|
|
941
|
-
context
|
|
942
|
-
|
|
861
|
+
context 'when value is a populated string' do
|
|
943
862
|
before do
|
|
944
863
|
game.person_id = person.id.to_s
|
|
945
864
|
game.save!
|
|
946
865
|
end
|
|
947
866
|
|
|
948
|
-
it
|
|
867
|
+
it 'sets the foreign key as ObjectID' do
|
|
949
868
|
expect(game.reload.person_id).to eq(person.id)
|
|
950
869
|
end
|
|
951
870
|
end
|
|
952
871
|
|
|
953
|
-
context
|
|
954
|
-
|
|
872
|
+
context 'when value is a ObjectID' do
|
|
955
873
|
before do
|
|
956
874
|
game.person_id = person.id
|
|
957
875
|
game.save!
|
|
958
876
|
end
|
|
959
877
|
|
|
960
|
-
it
|
|
878
|
+
it 'keeps the foreign key as ObjectID' do
|
|
961
879
|
expect(game.reload.person_id).to eq(person.id)
|
|
962
880
|
end
|
|
963
881
|
end
|
|
964
882
|
|
|
965
|
-
context
|
|
966
|
-
|
|
883
|
+
context 'when setting ids multiple times on the association itself' do
|
|
967
884
|
before do
|
|
968
885
|
game.person = person.id
|
|
969
886
|
game.person = person.id
|
|
970
887
|
end
|
|
971
888
|
|
|
972
|
-
it
|
|
889
|
+
it 'sets the association foreign key' do
|
|
973
890
|
expect(game.person_id).to eq(person.id)
|
|
974
891
|
end
|
|
975
892
|
|
|
976
|
-
it
|
|
893
|
+
it 'sets the appropriate association' do
|
|
977
894
|
expect(game.person).to eq(person)
|
|
978
895
|
end
|
|
979
896
|
end
|
|
980
897
|
end
|
|
981
898
|
|
|
982
899
|
context 'when setting the association more than once' do
|
|
983
|
-
|
|
984
900
|
let(:person) do
|
|
985
901
|
Person.create!
|
|
986
902
|
end
|
|
987
903
|
|
|
988
904
|
context 'when the association is a references one' do
|
|
989
|
-
|
|
990
905
|
let(:game) do
|
|
991
906
|
Game.create!
|
|
992
907
|
end
|
|
@@ -1002,9 +917,8 @@ describe Mongoid::Association::Accessors do
|
|
|
1002
917
|
end
|
|
1003
918
|
|
|
1004
919
|
context 'when the association is a references many' do
|
|
1005
|
-
|
|
1006
920
|
let!(:preference) do
|
|
1007
|
-
Preference.create!(name:
|
|
921
|
+
Preference.create!(name: 'Setting')
|
|
1008
922
|
end
|
|
1009
923
|
|
|
1010
924
|
before do
|
|
@@ -1017,7 +931,6 @@ describe Mongoid::Association::Accessors do
|
|
|
1017
931
|
end
|
|
1018
932
|
|
|
1019
933
|
context 'when the association is an embeds one' do
|
|
1020
|
-
|
|
1021
934
|
let!(:name) do
|
|
1022
935
|
Name.new
|
|
1023
936
|
end
|
|
@@ -1033,7 +946,6 @@ describe Mongoid::Association::Accessors do
|
|
|
1033
946
|
end
|
|
1034
947
|
|
|
1035
948
|
context 'when the association is an embeds many' do
|
|
1036
|
-
|
|
1037
949
|
let!(:address) do
|
|
1038
950
|
Address.new
|
|
1039
951
|
end
|