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,10 +1,8 @@
|
|
|
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::Macros do
|
|
7
|
-
|
|
8
6
|
class TestClass
|
|
9
7
|
include Mongoid::Document
|
|
10
8
|
end
|
|
@@ -24,10 +22,10 @@ describe Mongoid::Association::Macros do
|
|
|
24
22
|
end
|
|
25
23
|
|
|
26
24
|
describe 'Model loading' do
|
|
27
|
-
|
|
28
25
|
let(:model_associations) do
|
|
29
26
|
class TestModel
|
|
30
27
|
include Mongoid::Document
|
|
28
|
+
|
|
31
29
|
field :associations
|
|
32
30
|
end
|
|
33
31
|
end
|
|
@@ -37,286 +35,267 @@ describe Mongoid::Association::Macros do
|
|
|
37
35
|
end
|
|
38
36
|
|
|
39
37
|
it 'prohibits the use of :associations as an attribute' do
|
|
40
|
-
expect
|
|
38
|
+
expect do
|
|
41
39
|
model_associations
|
|
42
|
-
|
|
40
|
+
end.to raise_exception(Mongoid::Errors::InvalidField)
|
|
43
41
|
end
|
|
44
42
|
end
|
|
45
43
|
|
|
46
|
-
describe
|
|
47
|
-
|
|
48
|
-
it "defines the macro" do
|
|
44
|
+
describe '.embedded_in' do
|
|
45
|
+
it 'defines the macro' do
|
|
49
46
|
expect(klass).to respond_to(:embedded_in)
|
|
50
47
|
end
|
|
51
48
|
|
|
52
49
|
context 'when the relation name is invalid' do
|
|
53
|
-
|
|
54
50
|
let(:relation) do
|
|
55
51
|
klass.embedded_in(:fields)
|
|
56
52
|
end
|
|
57
53
|
|
|
58
54
|
it 'raises an InvalidRelation exception' do
|
|
59
|
-
expect
|
|
55
|
+
expect do
|
|
60
56
|
relation
|
|
61
|
-
|
|
57
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelation)
|
|
62
58
|
end
|
|
63
59
|
end
|
|
64
60
|
|
|
65
|
-
context
|
|
66
|
-
|
|
61
|
+
context 'when defining the relation' do
|
|
67
62
|
before do
|
|
68
63
|
klass.embedded_in(:person)
|
|
69
64
|
end
|
|
70
65
|
|
|
71
|
-
it
|
|
72
|
-
expect(klass.relations[
|
|
66
|
+
it 'adds the association to the klass' do
|
|
67
|
+
expect(klass.relations['person']).not_to be_nil
|
|
73
68
|
end
|
|
74
69
|
|
|
75
|
-
it
|
|
70
|
+
it 'defines the getter' do
|
|
76
71
|
expect(klass.allocate).to respond_to(:person)
|
|
77
72
|
end
|
|
78
73
|
|
|
79
|
-
it
|
|
74
|
+
it 'defines the setter' do
|
|
80
75
|
expect(klass.allocate).to respond_to(:person=)
|
|
81
76
|
end
|
|
82
77
|
|
|
83
|
-
it
|
|
84
|
-
expect(klass.relations[
|
|
78
|
+
it 'creates the correct relation' do
|
|
79
|
+
expect(klass.relations['person']).to be_a(
|
|
85
80
|
Mongoid::Association::Embedded::EmbeddedIn
|
|
86
81
|
)
|
|
87
82
|
end
|
|
88
83
|
|
|
89
|
-
it
|
|
84
|
+
it 'does not add associated validations' do
|
|
90
85
|
expect(klass._validators).to be_empty
|
|
91
86
|
end
|
|
92
87
|
|
|
93
88
|
context 'when an invalid option is provided' do
|
|
94
|
-
|
|
95
89
|
it 'raises an InvalidRelationOption exception' do
|
|
96
|
-
expect
|
|
90
|
+
expect do
|
|
97
91
|
klass.embedded_in(:person, sandwich: true)
|
|
98
|
-
|
|
92
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
|
|
99
93
|
end
|
|
100
94
|
end
|
|
101
95
|
|
|
102
|
-
context
|
|
103
|
-
|
|
96
|
+
context 'association properties' do
|
|
104
97
|
let(:association) do
|
|
105
|
-
klass.relations[
|
|
98
|
+
klass.relations['person']
|
|
106
99
|
end
|
|
107
100
|
|
|
108
|
-
it
|
|
101
|
+
it 'automatically adds the name' do
|
|
109
102
|
expect(association.name).to eq(:person)
|
|
110
103
|
end
|
|
111
104
|
|
|
112
|
-
it
|
|
113
|
-
expect(association.inverse_class_name).to eq(
|
|
105
|
+
it 'automatically adds the inverse class name' do
|
|
106
|
+
expect(association.inverse_class_name).to eq('TestClass')
|
|
114
107
|
end
|
|
115
108
|
end
|
|
116
109
|
end
|
|
117
110
|
end
|
|
118
111
|
|
|
119
|
-
describe
|
|
120
|
-
|
|
121
|
-
it "defines the macro" do
|
|
112
|
+
describe '.embeds_many' do
|
|
113
|
+
it 'defines the macro' do
|
|
122
114
|
expect(klass).to respond_to(:embeds_many)
|
|
123
115
|
end
|
|
124
116
|
|
|
125
|
-
context
|
|
117
|
+
context 'when defining the relation' do
|
|
118
|
+
before do
|
|
119
|
+
klass.embeds_many(:addresses)
|
|
120
|
+
end
|
|
126
121
|
|
|
127
122
|
context 'when the relation name is invalid' do
|
|
128
|
-
|
|
129
123
|
let(:relation) do
|
|
130
124
|
klass.embeds_many(:fields)
|
|
131
125
|
end
|
|
132
126
|
|
|
133
127
|
it 'raises an InvalidRelation exception' do
|
|
134
|
-
expect
|
|
128
|
+
expect do
|
|
135
129
|
relation
|
|
136
|
-
|
|
130
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelation)
|
|
137
131
|
end
|
|
138
132
|
end
|
|
139
133
|
|
|
140
|
-
|
|
141
|
-
klass.
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it "adds the association to the klass" do
|
|
145
|
-
expect(klass.relations["addresses"]).to_not be_nil
|
|
134
|
+
it 'adds the association to the klass' do
|
|
135
|
+
expect(klass.relations['addresses']).not_to be_nil
|
|
146
136
|
end
|
|
147
137
|
|
|
148
|
-
it
|
|
138
|
+
it 'defines the getter' do
|
|
149
139
|
expect(klass.allocate).to respond_to(:addresses)
|
|
150
140
|
end
|
|
151
141
|
|
|
152
|
-
it
|
|
142
|
+
it 'defines the setter' do
|
|
153
143
|
expect(klass.allocate).to respond_to(:addresses=)
|
|
154
144
|
end
|
|
155
145
|
|
|
156
|
-
it
|
|
157
|
-
expect(klass.relations[
|
|
146
|
+
it 'creates the correct relation' do
|
|
147
|
+
expect(klass.relations['addresses']).to be_a(
|
|
158
148
|
Mongoid::Association::Embedded::EmbedsMany
|
|
159
149
|
)
|
|
160
150
|
end
|
|
161
151
|
|
|
162
|
-
it
|
|
152
|
+
it 'adds an associated validation' do
|
|
163
153
|
expect(klass._validators[:addresses].first).to be_a(
|
|
164
154
|
Mongoid::Validatable::AssociatedValidator
|
|
165
155
|
)
|
|
166
156
|
end
|
|
167
157
|
|
|
168
158
|
context 'when an invalid option is provided' do
|
|
169
|
-
|
|
170
159
|
it 'raises an InvalidRelationOption exception' do
|
|
171
|
-
expect
|
|
160
|
+
expect do
|
|
172
161
|
klass.embeds_many(:addresses, sandwich: true)
|
|
173
|
-
|
|
162
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
|
|
174
163
|
end
|
|
175
164
|
end
|
|
176
165
|
|
|
177
|
-
context
|
|
178
|
-
|
|
166
|
+
context 'association properties' do
|
|
179
167
|
let(:association) do
|
|
180
|
-
klass.relations[
|
|
168
|
+
klass.relations['addresses']
|
|
181
169
|
end
|
|
182
170
|
|
|
183
|
-
it
|
|
171
|
+
it 'automatically adds the name' do
|
|
184
172
|
expect(association.name).to eq(:addresses)
|
|
185
173
|
end
|
|
186
174
|
|
|
187
|
-
it
|
|
188
|
-
expect(association.inverse_class_name).to eq(
|
|
175
|
+
it 'automatically adds the inverse class name' do
|
|
176
|
+
expect(association.inverse_class_name).to eq('TestClass')
|
|
189
177
|
end
|
|
190
178
|
end
|
|
191
179
|
end
|
|
192
180
|
|
|
193
181
|
context 'when defining order on relation' do
|
|
194
|
-
|
|
195
182
|
before do
|
|
196
183
|
klass.embeds_many(:addresses, order: :number.asc)
|
|
197
184
|
end
|
|
198
185
|
|
|
199
186
|
let(:association) do
|
|
200
|
-
klass.relations[
|
|
187
|
+
klass.relations['addresses']
|
|
201
188
|
end
|
|
202
189
|
|
|
203
|
-
it
|
|
204
|
-
expect(association.order).
|
|
190
|
+
it 'adds association to klass' do
|
|
191
|
+
expect(association.order).not_to be_nil
|
|
205
192
|
end
|
|
206
193
|
|
|
207
|
-
it
|
|
208
|
-
expect(association.order).to
|
|
194
|
+
it 'returns Mongoid::Criteria::Queryable::Key' do
|
|
195
|
+
expect(association.order).to be_a(Mongoid::Criteria::Queryable::Key)
|
|
209
196
|
end
|
|
210
197
|
end
|
|
211
198
|
|
|
212
|
-
context
|
|
213
|
-
|
|
199
|
+
context 'when setting validate to false' do
|
|
214
200
|
before do
|
|
215
201
|
klass.embeds_many(:addresses, validate: false)
|
|
216
202
|
end
|
|
217
203
|
|
|
218
|
-
it
|
|
204
|
+
it 'does not add associated validations' do
|
|
219
205
|
expect(klass._validators).to be_empty
|
|
220
206
|
end
|
|
221
207
|
end
|
|
222
208
|
end
|
|
223
209
|
|
|
224
|
-
describe
|
|
225
|
-
|
|
226
|
-
it "defines the macro" do
|
|
210
|
+
describe '.embeds_one' do
|
|
211
|
+
it 'defines the macro' do
|
|
227
212
|
expect(klass).to respond_to(:embeds_one)
|
|
228
213
|
end
|
|
229
214
|
|
|
230
|
-
context
|
|
215
|
+
context 'when defining the relation' do
|
|
216
|
+
before do
|
|
217
|
+
klass.embeds_one(:name)
|
|
218
|
+
end
|
|
231
219
|
|
|
232
220
|
context 'when the relation name is invalid' do
|
|
233
|
-
|
|
234
221
|
let(:relation) do
|
|
235
222
|
klass.embeds_one(:fields)
|
|
236
223
|
end
|
|
237
224
|
|
|
238
225
|
it 'raises an InvalidRelation exception' do
|
|
239
|
-
expect
|
|
226
|
+
expect do
|
|
240
227
|
relation
|
|
241
|
-
|
|
228
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelation)
|
|
242
229
|
end
|
|
243
230
|
end
|
|
244
231
|
|
|
245
|
-
|
|
246
|
-
klass.
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
it "adds the association to the klass" do
|
|
250
|
-
expect(klass.relations["name"]).to_not be_nil
|
|
232
|
+
it 'adds the association to the klass' do
|
|
233
|
+
expect(klass.relations['name']).not_to be_nil
|
|
251
234
|
end
|
|
252
235
|
|
|
253
|
-
it
|
|
236
|
+
it 'defines the getter' do
|
|
254
237
|
expect(klass.allocate).to respond_to(:name)
|
|
255
238
|
end
|
|
256
239
|
|
|
257
|
-
it
|
|
240
|
+
it 'defines the setter' do
|
|
258
241
|
expect(klass.allocate).to respond_to(:name=)
|
|
259
242
|
end
|
|
260
243
|
|
|
261
|
-
it
|
|
244
|
+
it 'defines the builder' do
|
|
262
245
|
expect(klass.allocate).to respond_to(:build_name)
|
|
263
246
|
end
|
|
264
247
|
|
|
265
|
-
it
|
|
248
|
+
it 'defines the creator' do
|
|
266
249
|
expect(klass.allocate).to respond_to(:create_name)
|
|
267
250
|
end
|
|
268
251
|
|
|
269
|
-
it
|
|
270
|
-
expect(klass.relations[
|
|
252
|
+
it 'creates the correct relation' do
|
|
253
|
+
expect(klass.relations['name']).to be_a(
|
|
271
254
|
Mongoid::Association::Embedded::EmbedsOne
|
|
272
255
|
)
|
|
273
256
|
end
|
|
274
257
|
|
|
275
|
-
it
|
|
258
|
+
it 'adds an associated validation' do
|
|
276
259
|
expect(klass._validators[:name].first).to be_a(
|
|
277
260
|
Mongoid::Validatable::AssociatedValidator
|
|
278
261
|
)
|
|
279
262
|
end
|
|
280
263
|
|
|
281
264
|
context 'when an invalid option is provided' do
|
|
282
|
-
|
|
283
265
|
it 'raises an InvalidRelationOption exception' do
|
|
284
|
-
expect
|
|
266
|
+
expect do
|
|
285
267
|
klass.embeds_one(:name, sandwich: true)
|
|
286
|
-
|
|
268
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
|
|
287
269
|
end
|
|
288
270
|
end
|
|
289
271
|
|
|
290
|
-
context
|
|
291
|
-
|
|
272
|
+
context 'association properties' do
|
|
292
273
|
let(:association) do
|
|
293
|
-
klass.relations[
|
|
274
|
+
klass.relations['name']
|
|
294
275
|
end
|
|
295
276
|
|
|
296
|
-
it
|
|
277
|
+
it 'automatically adds the name' do
|
|
297
278
|
expect(association.name).to eq(:name)
|
|
298
279
|
end
|
|
299
280
|
|
|
300
|
-
it
|
|
301
|
-
expect(association.inverse_class_name).to eq(
|
|
281
|
+
it 'automatically adds the inverse class name' do
|
|
282
|
+
expect(association.inverse_class_name).to eq('TestClass')
|
|
302
283
|
end
|
|
303
284
|
end
|
|
304
285
|
end
|
|
305
286
|
|
|
306
|
-
context
|
|
307
|
-
|
|
287
|
+
context 'when setting validate to false' do
|
|
308
288
|
before do
|
|
309
289
|
klass.embeds_one(:name, validate: false)
|
|
310
290
|
end
|
|
311
291
|
|
|
312
|
-
it
|
|
292
|
+
it 'does not add associated validations' do
|
|
313
293
|
expect(klass._validators).to be_empty
|
|
314
294
|
end
|
|
315
295
|
end
|
|
316
296
|
end
|
|
317
297
|
|
|
318
|
-
describe
|
|
319
|
-
|
|
298
|
+
describe '.belongs_to' do
|
|
320
299
|
let(:_class) do
|
|
321
300
|
class RelationsTestClass
|
|
322
301
|
include Mongoid::Document
|
|
@@ -352,33 +331,27 @@ describe Mongoid::Association::Macros do
|
|
|
352
331
|
end
|
|
353
332
|
end
|
|
354
333
|
|
|
355
|
-
it
|
|
334
|
+
it 'defines the macro' do
|
|
356
335
|
expect(_class).to respond_to(:belongs_to)
|
|
357
336
|
end
|
|
358
337
|
|
|
359
338
|
context 'when the relation has options' do
|
|
360
|
-
|
|
361
339
|
context 'when an invalid option is provided' do
|
|
362
|
-
|
|
363
340
|
it 'raises an InvalidRelationOption exception' do
|
|
364
|
-
expect
|
|
341
|
+
expect do
|
|
365
342
|
klass.belongs_to(:person, sandwich: true)
|
|
366
|
-
|
|
343
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
|
|
367
344
|
end
|
|
368
345
|
end
|
|
369
346
|
|
|
370
347
|
context 'when the relation has the option :required' do
|
|
371
|
-
|
|
372
348
|
context 'when the relation does not have the :optional option' do
|
|
373
|
-
|
|
374
349
|
context 'when :required is true' do
|
|
375
|
-
|
|
376
350
|
let(:relation_options) do
|
|
377
351
|
{ required: true }
|
|
378
352
|
end
|
|
379
353
|
|
|
380
354
|
context 'when the default config is to require the association' do
|
|
381
|
-
|
|
382
355
|
let(:default_require) { true }
|
|
383
356
|
|
|
384
357
|
it 'requires the association' do
|
|
@@ -387,7 +360,6 @@ describe Mongoid::Association::Macros do
|
|
|
387
360
|
end
|
|
388
361
|
|
|
389
362
|
context 'when the default config is to not require the association' do
|
|
390
|
-
|
|
391
363
|
let(:default_require) { false }
|
|
392
364
|
|
|
393
365
|
it 'requires the association' do
|
|
@@ -397,13 +369,11 @@ describe Mongoid::Association::Macros do
|
|
|
397
369
|
end
|
|
398
370
|
|
|
399
371
|
context 'when :required is false' do
|
|
400
|
-
|
|
401
372
|
let(:relation_options) do
|
|
402
373
|
{ required: false }
|
|
403
374
|
end
|
|
404
375
|
|
|
405
376
|
context 'when the default config is to require the association' do
|
|
406
|
-
|
|
407
377
|
let(:default_require) { true }
|
|
408
378
|
|
|
409
379
|
it 'does not require the association' do
|
|
@@ -412,7 +382,6 @@ describe Mongoid::Association::Macros do
|
|
|
412
382
|
end
|
|
413
383
|
|
|
414
384
|
context 'when the default config is to not require the association' do
|
|
415
|
-
|
|
416
385
|
let(:default_require) { false }
|
|
417
386
|
|
|
418
387
|
it 'does not require the association' do
|
|
@@ -423,11 +392,8 @@ describe Mongoid::Association::Macros do
|
|
|
423
392
|
end
|
|
424
393
|
|
|
425
394
|
context 'when the relation has the option :optional' do
|
|
426
|
-
|
|
427
395
|
context 'when :required is true' do
|
|
428
|
-
|
|
429
396
|
context 'when :optional is true' do
|
|
430
|
-
|
|
431
397
|
let(:relation_options) do
|
|
432
398
|
{
|
|
433
399
|
required: true,
|
|
@@ -436,7 +402,6 @@ describe Mongoid::Association::Macros do
|
|
|
436
402
|
end
|
|
437
403
|
|
|
438
404
|
context 'when the default config is to require the association' do
|
|
439
|
-
|
|
440
405
|
let(:default_require) { true }
|
|
441
406
|
|
|
442
407
|
it 'requires the association' do
|
|
@@ -445,7 +410,6 @@ describe Mongoid::Association::Macros do
|
|
|
445
410
|
end
|
|
446
411
|
|
|
447
412
|
context 'when the default config is to not require the association' do
|
|
448
|
-
|
|
449
413
|
let(:default_require) { false }
|
|
450
414
|
|
|
451
415
|
it 'requires the association' do
|
|
@@ -455,7 +419,6 @@ describe Mongoid::Association::Macros do
|
|
|
455
419
|
end
|
|
456
420
|
|
|
457
421
|
context 'when :optional is false' do
|
|
458
|
-
|
|
459
422
|
let(:relation_options) do
|
|
460
423
|
{
|
|
461
424
|
required: true,
|
|
@@ -464,7 +427,6 @@ describe Mongoid::Association::Macros do
|
|
|
464
427
|
end
|
|
465
428
|
|
|
466
429
|
context 'when the default config is to require the association' do
|
|
467
|
-
|
|
468
430
|
let(:default_require) { true }
|
|
469
431
|
|
|
470
432
|
it 'requires the association' do
|
|
@@ -473,7 +435,6 @@ describe Mongoid::Association::Macros do
|
|
|
473
435
|
end
|
|
474
436
|
|
|
475
437
|
context 'when the default config is to not require the association' do
|
|
476
|
-
|
|
477
438
|
let(:default_require) { false }
|
|
478
439
|
|
|
479
440
|
it 'requires the association' do
|
|
@@ -484,9 +445,7 @@ describe Mongoid::Association::Macros do
|
|
|
484
445
|
end
|
|
485
446
|
|
|
486
447
|
context 'when :required is false' do
|
|
487
|
-
|
|
488
448
|
context 'when :optional is true' do
|
|
489
|
-
|
|
490
449
|
let(:relation_options) do
|
|
491
450
|
{
|
|
492
451
|
required: false,
|
|
@@ -495,7 +454,6 @@ describe Mongoid::Association::Macros do
|
|
|
495
454
|
end
|
|
496
455
|
|
|
497
456
|
context 'when the default config is to require the association' do
|
|
498
|
-
|
|
499
457
|
let(:default_require) { true }
|
|
500
458
|
|
|
501
459
|
it 'does not require the association' do
|
|
@@ -504,7 +462,6 @@ describe Mongoid::Association::Macros do
|
|
|
504
462
|
end
|
|
505
463
|
|
|
506
464
|
context 'when the default config is to not require the association' do
|
|
507
|
-
|
|
508
465
|
let(:default_require) { true }
|
|
509
466
|
|
|
510
467
|
it 'does not require the association' do
|
|
@@ -514,7 +471,6 @@ describe Mongoid::Association::Macros do
|
|
|
514
471
|
end
|
|
515
472
|
|
|
516
473
|
context 'when :optional is false' do
|
|
517
|
-
|
|
518
474
|
let(:relation_options) do
|
|
519
475
|
{
|
|
520
476
|
required: false,
|
|
@@ -523,7 +479,6 @@ describe Mongoid::Association::Macros do
|
|
|
523
479
|
end
|
|
524
480
|
|
|
525
481
|
context 'when the default config is to require the association' do
|
|
526
|
-
|
|
527
482
|
let(:default_require) { true }
|
|
528
483
|
|
|
529
484
|
it 'does not require the association' do
|
|
@@ -532,7 +487,6 @@ describe Mongoid::Association::Macros do
|
|
|
532
487
|
end
|
|
533
488
|
|
|
534
489
|
context 'when the default config is to not require the association' do
|
|
535
|
-
|
|
536
490
|
let(:default_require) { false }
|
|
537
491
|
|
|
538
492
|
it 'does not require the association' do
|
|
@@ -545,17 +499,13 @@ describe Mongoid::Association::Macros do
|
|
|
545
499
|
end
|
|
546
500
|
|
|
547
501
|
context 'when the relation does not have the option :required' do
|
|
548
|
-
|
|
549
502
|
context 'when the relation has the option :optional' do
|
|
550
|
-
|
|
551
503
|
context 'when :optional is true' do
|
|
552
|
-
|
|
553
504
|
let(:relation_options) do
|
|
554
505
|
{ optional: true }
|
|
555
506
|
end
|
|
556
507
|
|
|
557
508
|
context 'when the default config is to require the association' do
|
|
558
|
-
|
|
559
509
|
let(:default_require) { true }
|
|
560
510
|
|
|
561
511
|
it 'does not require the association' do
|
|
@@ -564,7 +514,6 @@ describe Mongoid::Association::Macros do
|
|
|
564
514
|
end
|
|
565
515
|
|
|
566
516
|
context 'when the default config is to not require the association' do
|
|
567
|
-
|
|
568
517
|
let(:default_require) { false }
|
|
569
518
|
|
|
570
519
|
it 'does not require the association' do
|
|
@@ -574,13 +523,11 @@ describe Mongoid::Association::Macros do
|
|
|
574
523
|
end
|
|
575
524
|
|
|
576
525
|
context 'when :optional is false' do
|
|
577
|
-
|
|
578
526
|
let(:relation_options) do
|
|
579
527
|
{ optional: false }
|
|
580
528
|
end
|
|
581
529
|
|
|
582
530
|
context 'when the default config is to require the association' do
|
|
583
|
-
|
|
584
531
|
let(:default_require) { true }
|
|
585
532
|
|
|
586
533
|
it 'requires the association' do
|
|
@@ -589,7 +536,6 @@ describe Mongoid::Association::Macros do
|
|
|
589
536
|
end
|
|
590
537
|
|
|
591
538
|
context 'when the default config is to not require the association' do
|
|
592
|
-
|
|
593
539
|
let(:default_require) { false }
|
|
594
540
|
|
|
595
541
|
it 'requires the association' do
|
|
@@ -602,9 +548,7 @@ describe Mongoid::Association::Macros do
|
|
|
602
548
|
end
|
|
603
549
|
|
|
604
550
|
context 'when the relation does not have options' do
|
|
605
|
-
|
|
606
551
|
context 'when the default config is to require the association' do
|
|
607
|
-
|
|
608
552
|
let(:default_require) { true }
|
|
609
553
|
|
|
610
554
|
it 'requires the association' do
|
|
@@ -613,7 +557,6 @@ describe Mongoid::Association::Macros do
|
|
|
613
557
|
end
|
|
614
558
|
|
|
615
559
|
context 'when the default config is to not require the association' do
|
|
616
|
-
|
|
617
560
|
let(:default_require) { false }
|
|
618
561
|
|
|
619
562
|
it 'does not require the association' do
|
|
@@ -622,10 +565,8 @@ describe Mongoid::Association::Macros do
|
|
|
622
565
|
end
|
|
623
566
|
end
|
|
624
567
|
|
|
625
|
-
context
|
|
626
|
-
|
|
627
|
-
context "when indexed is true" do
|
|
628
|
-
|
|
568
|
+
context 'when the relation is polymorphic' do
|
|
569
|
+
context 'when indexed is true' do
|
|
629
570
|
before do
|
|
630
571
|
klass.belongs_to(:relatable, polymorphic: true, index: true)
|
|
631
572
|
end
|
|
@@ -634,425 +575,400 @@ describe Mongoid::Association::Macros do
|
|
|
634
575
|
klass.index_specifications.first
|
|
635
576
|
end
|
|
636
577
|
|
|
637
|
-
it
|
|
578
|
+
it 'adds the background index to the definitions' do
|
|
638
579
|
expect(index.key).to eq(relatable_id: 1, relatable_type: 1)
|
|
639
580
|
end
|
|
640
581
|
end
|
|
641
582
|
end
|
|
642
583
|
|
|
643
|
-
context
|
|
584
|
+
context 'when defining the relation' do
|
|
585
|
+
before do
|
|
586
|
+
klass.belongs_to(:person)
|
|
587
|
+
end
|
|
644
588
|
|
|
645
589
|
context 'when the relation name is invalid' do
|
|
646
|
-
|
|
647
590
|
let(:relation) do
|
|
648
591
|
klass.belongs_to(:fields)
|
|
649
592
|
end
|
|
650
593
|
|
|
651
594
|
it 'raises an InvalidRelation exception' do
|
|
652
|
-
expect
|
|
595
|
+
expect do
|
|
653
596
|
relation
|
|
654
|
-
|
|
597
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelation)
|
|
655
598
|
end
|
|
656
599
|
end
|
|
657
600
|
|
|
658
|
-
|
|
659
|
-
klass.
|
|
601
|
+
it 'adds the association to the klass' do
|
|
602
|
+
expect(klass.relations['person']).not_to be_nil
|
|
660
603
|
end
|
|
661
604
|
|
|
662
|
-
it
|
|
663
|
-
expect(klass.relations["person"]).to_not be_nil
|
|
664
|
-
end
|
|
665
|
-
|
|
666
|
-
it "defines the getter" do
|
|
605
|
+
it 'defines the getter' do
|
|
667
606
|
expect(klass.allocate).to respond_to(:person)
|
|
668
607
|
end
|
|
669
608
|
|
|
670
|
-
it
|
|
609
|
+
it 'defines the setter' do
|
|
671
610
|
expect(klass.allocate).to respond_to(:person=)
|
|
672
611
|
end
|
|
673
612
|
|
|
674
|
-
it
|
|
613
|
+
it 'defines the builder' do
|
|
675
614
|
expect(klass.allocate).to respond_to(:build_person)
|
|
676
615
|
end
|
|
677
616
|
|
|
678
|
-
it
|
|
617
|
+
it 'defines the creator' do
|
|
679
618
|
expect(klass.allocate).to respond_to(:create_person)
|
|
680
619
|
end
|
|
681
620
|
|
|
682
|
-
it
|
|
683
|
-
expect(klass.relations[
|
|
621
|
+
it 'creates the correct relation' do
|
|
622
|
+
expect(klass.relations['person']).to be_a(
|
|
684
623
|
Mongoid::Association::Referenced::BelongsTo
|
|
685
624
|
)
|
|
686
625
|
end
|
|
687
626
|
|
|
688
|
-
it
|
|
627
|
+
it 'creates the field for the foreign key' do
|
|
689
628
|
expect(klass.allocate).to respond_to(:person_id)
|
|
690
629
|
end
|
|
691
630
|
|
|
692
|
-
context
|
|
693
|
-
|
|
631
|
+
context 'association properties' do
|
|
694
632
|
let(:association) do
|
|
695
|
-
klass.relations[
|
|
633
|
+
klass.relations['person']
|
|
696
634
|
end
|
|
697
635
|
|
|
698
|
-
it
|
|
636
|
+
it 'automatically adds the name' do
|
|
699
637
|
expect(association.name).to eq(:person)
|
|
700
638
|
end
|
|
701
639
|
|
|
702
|
-
it
|
|
703
|
-
expect(association.inverse_class_name).to eq(
|
|
640
|
+
it 'automatically adds the inverse class name' do
|
|
641
|
+
expect(association.inverse_class_name).to eq('TestClass')
|
|
704
642
|
end
|
|
705
643
|
end
|
|
706
644
|
end
|
|
707
645
|
end
|
|
708
646
|
|
|
709
|
-
describe
|
|
710
|
-
|
|
711
|
-
it "defines the macro" do
|
|
647
|
+
describe '.has_many' do
|
|
648
|
+
it 'defines the macro' do
|
|
712
649
|
expect(klass).to respond_to(:has_many)
|
|
713
650
|
end
|
|
714
651
|
|
|
715
|
-
context
|
|
652
|
+
context 'when defining the relation' do
|
|
653
|
+
before do
|
|
654
|
+
klass.has_many(:posts)
|
|
655
|
+
end
|
|
716
656
|
|
|
717
657
|
context 'when the relation name is invalid' do
|
|
718
|
-
|
|
719
658
|
let(:relation) do
|
|
720
659
|
klass.has_many(:fields)
|
|
721
660
|
end
|
|
722
661
|
|
|
723
662
|
it 'raises an InvalidRelation exception' do
|
|
724
|
-
expect
|
|
663
|
+
expect do
|
|
725
664
|
relation
|
|
726
|
-
|
|
665
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelation)
|
|
727
666
|
end
|
|
728
667
|
end
|
|
729
668
|
|
|
730
|
-
|
|
731
|
-
klass.
|
|
732
|
-
end
|
|
733
|
-
|
|
734
|
-
it "adds the association to the klass" do
|
|
735
|
-
expect(klass.relations["posts"]).to_not be_nil
|
|
669
|
+
it 'adds the association to the klass' do
|
|
670
|
+
expect(klass.relations['posts']).not_to be_nil
|
|
736
671
|
end
|
|
737
672
|
|
|
738
|
-
it
|
|
673
|
+
it 'defines the getter' do
|
|
739
674
|
expect(klass.allocate).to respond_to(:posts)
|
|
740
675
|
end
|
|
741
676
|
|
|
742
|
-
it
|
|
677
|
+
it 'defines the setter' do
|
|
743
678
|
expect(klass.allocate).to respond_to(:posts=)
|
|
744
679
|
end
|
|
745
680
|
|
|
746
|
-
it
|
|
747
|
-
expect(klass.relations[
|
|
681
|
+
it 'creates the correct relation' do
|
|
682
|
+
expect(klass.relations['posts']).to be_a(
|
|
748
683
|
Mongoid::Association::Referenced::HasMany
|
|
749
684
|
)
|
|
750
685
|
end
|
|
751
686
|
|
|
752
|
-
it
|
|
687
|
+
it 'adds an associated validation' do
|
|
753
688
|
expect(klass._validators[:posts].first).to be_a(
|
|
754
689
|
Mongoid::Validatable::AssociatedValidator
|
|
755
690
|
)
|
|
756
691
|
end
|
|
757
692
|
|
|
758
|
-
context
|
|
759
|
-
|
|
693
|
+
context 'association properties' do
|
|
760
694
|
let(:association) do
|
|
761
|
-
klass.relations[
|
|
695
|
+
klass.relations['posts']
|
|
762
696
|
end
|
|
763
697
|
|
|
764
|
-
it
|
|
698
|
+
it 'automatically adds the name' do
|
|
765
699
|
expect(association.name).to eq(:posts)
|
|
766
700
|
end
|
|
767
701
|
|
|
768
|
-
it
|
|
769
|
-
expect(association.inverse_class_name).to eq(
|
|
702
|
+
it 'automatically adds the inverse class name' do
|
|
703
|
+
expect(association.inverse_class_name).to eq('TestClass')
|
|
770
704
|
end
|
|
771
705
|
end
|
|
772
706
|
|
|
773
707
|
context 'when an invalid option is provided' do
|
|
774
|
-
|
|
775
708
|
it 'raises an InvalidRelationOption exception' do
|
|
776
|
-
expect
|
|
709
|
+
expect do
|
|
777
710
|
klass.has_many(:names, sandwich: true)
|
|
778
|
-
|
|
711
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
|
|
779
712
|
end
|
|
780
713
|
end
|
|
781
714
|
end
|
|
782
715
|
|
|
783
716
|
context 'when defining order on relation' do
|
|
784
|
-
|
|
785
717
|
before do
|
|
786
718
|
klass.has_many(:posts, order: :rating.asc)
|
|
787
719
|
end
|
|
788
720
|
|
|
789
721
|
let(:association) do
|
|
790
|
-
klass.relations[
|
|
722
|
+
klass.relations['posts']
|
|
791
723
|
end
|
|
792
724
|
|
|
793
|
-
it
|
|
794
|
-
expect(association.order).
|
|
725
|
+
it 'adds association to klass' do
|
|
726
|
+
expect(association.order).not_to be_nil
|
|
795
727
|
end
|
|
796
728
|
|
|
797
|
-
it
|
|
798
|
-
expect(association.order).to
|
|
729
|
+
it 'returns Mongoid::Criteria::Queryable::Key' do
|
|
730
|
+
expect(association.order).to be_a(Mongoid::Criteria::Queryable::Key)
|
|
799
731
|
end
|
|
800
732
|
end
|
|
801
733
|
|
|
802
|
-
context
|
|
803
|
-
|
|
734
|
+
context 'when setting validate to false' do
|
|
804
735
|
before do
|
|
805
736
|
klass.has_many(:posts, validate: false)
|
|
806
737
|
end
|
|
807
738
|
|
|
808
|
-
it
|
|
739
|
+
it 'does not add associated validations' do
|
|
809
740
|
expect(klass._validators).to be_empty
|
|
810
741
|
end
|
|
811
742
|
end
|
|
812
743
|
end
|
|
813
744
|
|
|
814
|
-
describe
|
|
815
|
-
|
|
816
|
-
it "defines the macro" do
|
|
745
|
+
describe '.has_and_belongs_to_many' do
|
|
746
|
+
it 'defines the macro' do
|
|
817
747
|
expect(klass).to respond_to(:has_and_belongs_to_many)
|
|
818
748
|
end
|
|
819
749
|
|
|
820
|
-
context
|
|
750
|
+
context 'when defining the relation' do
|
|
751
|
+
before do
|
|
752
|
+
klass.has_and_belongs_to_many(:preferences)
|
|
753
|
+
end
|
|
821
754
|
|
|
822
755
|
context 'when the relation name is invalid' do
|
|
823
|
-
|
|
824
756
|
let(:relation) do
|
|
825
757
|
klass.has_and_belongs_to_many(:fields)
|
|
826
758
|
end
|
|
827
759
|
|
|
828
760
|
it 'raises an InvalidRelation exception' do
|
|
829
|
-
expect
|
|
761
|
+
expect do
|
|
830
762
|
relation
|
|
831
|
-
|
|
763
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelation)
|
|
832
764
|
end
|
|
833
765
|
end
|
|
834
766
|
|
|
835
767
|
context 'when an invalid option is provided' do
|
|
836
|
-
|
|
837
768
|
it 'raises an InvalidRelationOption exception' do
|
|
838
|
-
expect
|
|
769
|
+
expect do
|
|
839
770
|
klass.has_and_belongs_to_many(:fields, sandwich: true)
|
|
840
|
-
|
|
771
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
|
|
841
772
|
end
|
|
842
773
|
end
|
|
843
774
|
|
|
844
|
-
|
|
845
|
-
klass.
|
|
846
|
-
end
|
|
847
|
-
|
|
848
|
-
it "adds the association to the klass" do
|
|
849
|
-
expect(klass.relations["preferences"]).to_not be_nil
|
|
775
|
+
it 'adds the association to the klass' do
|
|
776
|
+
expect(klass.relations['preferences']).not_to be_nil
|
|
850
777
|
end
|
|
851
778
|
|
|
852
|
-
it
|
|
779
|
+
it 'defines the getter' do
|
|
853
780
|
expect(klass.allocate).to respond_to(:preferences)
|
|
854
781
|
end
|
|
855
782
|
|
|
856
|
-
it
|
|
783
|
+
it 'defines the setter' do
|
|
857
784
|
expect(klass.allocate).to respond_to(:preferences=)
|
|
858
785
|
end
|
|
859
786
|
|
|
860
|
-
it
|
|
861
|
-
expect(klass.relations[
|
|
787
|
+
it 'creates the correct relation' do
|
|
788
|
+
expect(klass.relations['preferences']).to be_a(
|
|
862
789
|
Mongoid::Association::Referenced::HasAndBelongsToMany
|
|
863
790
|
)
|
|
864
791
|
end
|
|
865
792
|
|
|
866
|
-
it
|
|
793
|
+
it 'creates the field for the foreign key' do
|
|
867
794
|
expect(klass.allocate).to respond_to(:preference_ids)
|
|
868
795
|
end
|
|
869
796
|
|
|
870
797
|
context 'when defining order on relation' do
|
|
871
|
-
|
|
872
798
|
before do
|
|
873
799
|
klass.has_and_belongs_to_many(:preferences, order: :ranking.asc)
|
|
874
800
|
end
|
|
875
801
|
|
|
876
802
|
let(:association) do
|
|
877
|
-
klass.relations[
|
|
803
|
+
klass.relations['preferences']
|
|
878
804
|
end
|
|
879
805
|
|
|
880
|
-
it
|
|
881
|
-
expect(association.order).
|
|
806
|
+
it 'adds association to klass' do
|
|
807
|
+
expect(association.order).not_to be_nil
|
|
882
808
|
end
|
|
883
809
|
|
|
884
|
-
it
|
|
885
|
-
expect(association.order).to
|
|
810
|
+
it 'returns Mongoid::Criteria::Queryable::Key' do
|
|
811
|
+
expect(association.order).to be_a(Mongoid::Criteria::Queryable::Key)
|
|
886
812
|
end
|
|
887
813
|
end
|
|
888
814
|
|
|
889
|
-
context
|
|
890
|
-
|
|
815
|
+
context 'association properties' do
|
|
891
816
|
let(:association) do
|
|
892
|
-
klass.relations[
|
|
817
|
+
klass.relations['preferences']
|
|
893
818
|
end
|
|
894
819
|
|
|
895
|
-
it
|
|
820
|
+
it 'automatically adds the name' do
|
|
896
821
|
expect(association.name).to eq(:preferences)
|
|
897
822
|
end
|
|
898
823
|
|
|
899
|
-
it
|
|
900
|
-
expect(association.inverse_class_name).to eq(
|
|
824
|
+
it 'automatically adds the inverse class name' do
|
|
825
|
+
expect(association.inverse_class_name).to eq('TestClass')
|
|
901
826
|
end
|
|
902
827
|
end
|
|
903
828
|
end
|
|
904
829
|
end
|
|
905
830
|
|
|
906
|
-
describe
|
|
907
|
-
|
|
908
|
-
it "defines the macro" do
|
|
831
|
+
describe '.has_one' do
|
|
832
|
+
it 'defines the macro' do
|
|
909
833
|
expect(klass).to respond_to(:has_one)
|
|
910
834
|
end
|
|
911
835
|
|
|
912
|
-
context
|
|
836
|
+
context 'when defining the relation' do
|
|
837
|
+
before do
|
|
838
|
+
klass.has_one(:game)
|
|
839
|
+
end
|
|
913
840
|
|
|
914
841
|
context 'when the relation name is invalid' do
|
|
915
|
-
|
|
916
842
|
let(:relation) do
|
|
917
843
|
klass.has_one(:fields)
|
|
918
844
|
end
|
|
919
845
|
|
|
920
846
|
it 'raises an InvalidRelation exception' do
|
|
921
|
-
expect
|
|
847
|
+
expect do
|
|
922
848
|
relation
|
|
923
|
-
|
|
849
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelation)
|
|
924
850
|
end
|
|
925
851
|
end
|
|
926
852
|
|
|
927
853
|
context 'when an invalid option is provided' do
|
|
928
|
-
|
|
929
854
|
it 'raises an InvalidRelationOption exception' do
|
|
930
|
-
expect
|
|
855
|
+
expect do
|
|
931
856
|
klass.has_one(:game, sandwich: true)
|
|
932
|
-
|
|
857
|
+
end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
|
|
933
858
|
end
|
|
934
859
|
end
|
|
935
860
|
|
|
936
|
-
|
|
937
|
-
klass.
|
|
938
|
-
end
|
|
939
|
-
|
|
940
|
-
it "adds the association to the klass" do
|
|
941
|
-
expect(klass.relations["game"]).to_not be_nil
|
|
861
|
+
it 'adds the association to the klass' do
|
|
862
|
+
expect(klass.relations['game']).not_to be_nil
|
|
942
863
|
end
|
|
943
864
|
|
|
944
|
-
it
|
|
865
|
+
it 'defines the getter' do
|
|
945
866
|
expect(klass.allocate).to respond_to(:game)
|
|
946
867
|
end
|
|
947
868
|
|
|
948
|
-
it
|
|
869
|
+
it 'defines the setter' do
|
|
949
870
|
expect(klass.allocate).to respond_to(:game=)
|
|
950
871
|
end
|
|
951
872
|
|
|
952
|
-
it
|
|
873
|
+
it 'defines the builder' do
|
|
953
874
|
expect(klass.allocate).to respond_to(:build_game)
|
|
954
875
|
end
|
|
955
876
|
|
|
956
|
-
it
|
|
877
|
+
it 'defines the creator' do
|
|
957
878
|
expect(klass.allocate).to respond_to(:create_game)
|
|
958
879
|
end
|
|
959
880
|
|
|
960
|
-
it
|
|
961
|
-
expect(klass.relations[
|
|
881
|
+
it 'creates the correct relation' do
|
|
882
|
+
expect(klass.relations['game']).to be_a(
|
|
962
883
|
Mongoid::Association::Referenced::HasOne
|
|
963
884
|
)
|
|
964
885
|
end
|
|
965
886
|
|
|
966
|
-
it
|
|
887
|
+
it 'adds an associated validation' do
|
|
967
888
|
expect(klass._validators[:game].first).to be_a(
|
|
968
889
|
Mongoid::Validatable::AssociatedValidator
|
|
969
890
|
)
|
|
970
891
|
end
|
|
971
892
|
|
|
972
|
-
context
|
|
973
|
-
|
|
893
|
+
context 'association properties' do
|
|
974
894
|
let(:association) do
|
|
975
|
-
klass.relations[
|
|
895
|
+
klass.relations['game']
|
|
976
896
|
end
|
|
977
897
|
|
|
978
|
-
it
|
|
898
|
+
it 'automatically adds the name' do
|
|
979
899
|
expect(association.name).to eq(:game)
|
|
980
900
|
end
|
|
981
901
|
|
|
982
|
-
it
|
|
983
|
-
expect(association.inverse_class_name).to eq(
|
|
902
|
+
it 'automatically adds the inverse class name' do
|
|
903
|
+
expect(association.inverse_class_name).to eq('TestClass')
|
|
984
904
|
end
|
|
985
905
|
end
|
|
986
906
|
end
|
|
987
907
|
|
|
988
|
-
context
|
|
989
|
-
|
|
908
|
+
context 'when setting validate to false' do
|
|
990
909
|
before do
|
|
991
910
|
klass.has_one(:game, validate: false)
|
|
992
911
|
end
|
|
993
912
|
|
|
994
|
-
it
|
|
913
|
+
it 'does not add associated validations' do
|
|
995
914
|
expect(klass._validators).to be_empty
|
|
996
915
|
end
|
|
997
916
|
end
|
|
998
917
|
end
|
|
999
918
|
|
|
1000
|
-
describe
|
|
1001
|
-
|
|
919
|
+
describe '#relations' do
|
|
1002
920
|
before do
|
|
1003
921
|
klass.embeds_one(:name)
|
|
1004
922
|
end
|
|
1005
923
|
|
|
1006
|
-
it
|
|
1007
|
-
expect(klass.allocate.relations).to
|
|
924
|
+
it 'returns a bson document of relations' do
|
|
925
|
+
expect(klass.allocate.relations).to be_a(BSON::Document)
|
|
1008
926
|
end
|
|
1009
927
|
|
|
1010
|
-
it
|
|
928
|
+
it 'has keys that are the relation name' do
|
|
1011
929
|
expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
|
|
1012
930
|
end
|
|
1013
931
|
|
|
1014
|
-
it
|
|
932
|
+
it 'has keys that can be accessed by a String' do
|
|
1015
933
|
expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
|
|
1016
934
|
end
|
|
1017
935
|
|
|
1018
|
-
it
|
|
936
|
+
it 'has keys that can be accessed by a Symbol' do
|
|
1019
937
|
expect(klass.allocate.relations[:name]).to be_a(Mongoid::Association::Embedded::EmbedsOne)
|
|
1020
938
|
end
|
|
1021
939
|
|
|
1022
|
-
it
|
|
940
|
+
it 'has values that are association' do
|
|
1023
941
|
expect(
|
|
1024
942
|
klass.allocate.relations.values.first
|
|
1025
|
-
).to
|
|
943
|
+
).to be_a(Mongoid::Association::Embedded::EmbedsOne)
|
|
1026
944
|
end
|
|
1027
945
|
end
|
|
1028
946
|
|
|
1029
|
-
describe
|
|
1030
|
-
|
|
947
|
+
describe '.relations' do
|
|
1031
948
|
before do
|
|
1032
949
|
klass.embeds_one(:name)
|
|
1033
950
|
end
|
|
1034
951
|
|
|
1035
|
-
it
|
|
952
|
+
it 'has keys that are the relation name' do
|
|
1036
953
|
expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
|
|
1037
954
|
end
|
|
1038
955
|
|
|
1039
|
-
it
|
|
956
|
+
it 'has keys that can be accessed by a String' do
|
|
1040
957
|
expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
|
|
1041
958
|
end
|
|
1042
959
|
|
|
1043
|
-
it
|
|
960
|
+
it 'has keys that can be accessed by a Symbol' do
|
|
1044
961
|
expect(klass.allocate.relations[:name]).to be_a(Mongoid::Association::Embedded::EmbedsOne)
|
|
1045
962
|
end
|
|
1046
963
|
|
|
1047
|
-
it
|
|
964
|
+
it 'has values that are association' do
|
|
1048
965
|
expect(
|
|
1049
966
|
klass.relations.values.first
|
|
1050
967
|
).to be_a(Mongoid::Association::Embedded::EmbedsOne)
|
|
1051
968
|
end
|
|
1052
969
|
end
|
|
1053
970
|
|
|
1054
|
-
context
|
|
1055
|
-
|
|
971
|
+
context 'when creating an association with an extension' do
|
|
1056
972
|
class Peep
|
|
1057
973
|
include Mongoid::Document
|
|
1058
974
|
end
|
|
@@ -1062,13 +978,13 @@ describe Mongoid::Association::Macros do
|
|
|
1062
978
|
|
|
1063
979
|
module Extension
|
|
1064
980
|
def short_name
|
|
1065
|
-
|
|
981
|
+
'spec'
|
|
1066
982
|
end
|
|
1067
983
|
end
|
|
1068
984
|
|
|
1069
985
|
module AnotherExtension
|
|
1070
986
|
def very_short_name
|
|
1071
|
-
|
|
987
|
+
'spec'
|
|
1072
988
|
end
|
|
1073
989
|
end
|
|
1074
990
|
end
|
|
@@ -1077,40 +993,37 @@ describe Mongoid::Association::Macros do
|
|
|
1077
993
|
Peep.new(handle: Handle.new)
|
|
1078
994
|
end
|
|
1079
995
|
|
|
1080
|
-
context
|
|
1081
|
-
|
|
996
|
+
context 'when the extension is a block' do
|
|
1082
997
|
before do
|
|
1083
998
|
Peep.embeds_one(:handle) do
|
|
1084
999
|
def full_name
|
|
1085
|
-
|
|
1000
|
+
'spec'
|
|
1086
1001
|
end
|
|
1087
1002
|
end
|
|
1088
1003
|
end
|
|
1089
1004
|
|
|
1090
|
-
it
|
|
1091
|
-
expect(peep.handle.full_name).to eq(
|
|
1005
|
+
it 'extends the relation' do
|
|
1006
|
+
expect(peep.handle.full_name).to eq('spec')
|
|
1092
1007
|
end
|
|
1093
1008
|
end
|
|
1094
1009
|
|
|
1095
|
-
context
|
|
1096
|
-
|
|
1010
|
+
context 'when the extension is a module' do
|
|
1097
1011
|
before do
|
|
1098
1012
|
Peep.embeds_one(:handle, extend: Handle::Extension)
|
|
1099
1013
|
end
|
|
1100
1014
|
|
|
1101
|
-
it
|
|
1102
|
-
expect(peep.handle.short_name).to eq(
|
|
1015
|
+
it 'extends the relation' do
|
|
1016
|
+
expect(peep.handle.short_name).to eq('spec')
|
|
1103
1017
|
end
|
|
1104
1018
|
end
|
|
1105
1019
|
|
|
1106
|
-
context
|
|
1107
|
-
|
|
1020
|
+
context 'when the extension is two modules' do
|
|
1108
1021
|
before do
|
|
1109
1022
|
Peep.embeds_one(:handle, extend: [ Handle::Extension, Handle::AnotherExtension ])
|
|
1110
1023
|
end
|
|
1111
1024
|
|
|
1112
|
-
it
|
|
1113
|
-
expect(peep.handle.very_short_name).to eq(
|
|
1025
|
+
it 'extends the relation' do
|
|
1026
|
+
expect(peep.handle.very_short_name).to eq('spec')
|
|
1114
1027
|
end
|
|
1115
1028
|
end
|
|
1116
1029
|
end
|