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,11 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
5
|
-
require_relative
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
require_relative 'has_and_belongs_to_many_models'
|
|
6
5
|
|
|
7
6
|
describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
8
|
-
|
|
9
7
|
before do
|
|
10
8
|
class HasManyLeftObject; include Mongoid::Document; end
|
|
11
9
|
class HasManyRightObject; include Mongoid::Document; end
|
|
@@ -29,14 +27,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
29
27
|
end
|
|
30
28
|
|
|
31
29
|
let(:options) do
|
|
32
|
-
{
|
|
30
|
+
{}
|
|
33
31
|
end
|
|
34
32
|
|
|
35
33
|
describe '#relation_complements' do
|
|
36
|
-
|
|
37
34
|
let(:expected_complements) do
|
|
38
35
|
[
|
|
39
|
-
|
|
36
|
+
Mongoid::Association::Referenced::HasAndBelongsToMany
|
|
40
37
|
]
|
|
41
38
|
end
|
|
42
39
|
|
|
@@ -46,7 +43,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
46
43
|
end
|
|
47
44
|
|
|
48
45
|
describe '#setup!' do
|
|
49
|
-
|
|
50
46
|
it 'sets up a getter for the relation' do
|
|
51
47
|
expect(Mongoid::Association::Accessors).to receive(:define_getter!).with(association)
|
|
52
48
|
association.setup!
|
|
@@ -63,12 +59,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
63
59
|
end
|
|
64
60
|
|
|
65
61
|
context 'autosave' do
|
|
66
|
-
|
|
67
62
|
context 'when the :autosave option is true' do
|
|
68
|
-
|
|
69
63
|
let(:options) do
|
|
70
64
|
{
|
|
71
|
-
|
|
65
|
+
autosave: true
|
|
72
66
|
}
|
|
73
67
|
end
|
|
74
68
|
|
|
@@ -85,10 +79,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
85
79
|
end
|
|
86
80
|
|
|
87
81
|
context 'when the :autosave option is false' do
|
|
88
|
-
|
|
89
82
|
let(:options) do
|
|
90
83
|
{
|
|
91
|
-
|
|
84
|
+
autosave: false
|
|
92
85
|
}
|
|
93
86
|
end
|
|
94
87
|
|
|
@@ -99,7 +92,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
99
92
|
end
|
|
100
93
|
|
|
101
94
|
context 'when the :autosave option is not provided' do
|
|
102
|
-
|
|
103
95
|
let(:association) do
|
|
104
96
|
# Note that it is necessary to create the association directly, otherwise the
|
|
105
97
|
# setup! method will be called by the :has_many macro
|
|
@@ -114,10 +106,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
114
106
|
end
|
|
115
107
|
|
|
116
108
|
context 'when the :validate option is true' do
|
|
117
|
-
|
|
118
109
|
let(:options) do
|
|
119
110
|
{
|
|
120
|
-
|
|
111
|
+
validate: true
|
|
121
112
|
}
|
|
122
113
|
end
|
|
123
114
|
|
|
@@ -134,10 +125,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
134
125
|
end
|
|
135
126
|
|
|
136
127
|
context 'when the :validate option is false' do
|
|
137
|
-
|
|
138
128
|
let(:options) do
|
|
139
129
|
{
|
|
140
|
-
|
|
130
|
+
validate: false
|
|
141
131
|
}
|
|
142
132
|
end
|
|
143
133
|
|
|
@@ -148,7 +138,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
148
138
|
end
|
|
149
139
|
|
|
150
140
|
context 'when the :validate option is not provided' do
|
|
151
|
-
|
|
152
141
|
let(:association) do
|
|
153
142
|
# Note that it is necessary to create the association directly, otherwise the
|
|
154
143
|
# setup! method will be called by the :has_many macro
|
|
@@ -162,7 +151,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
162
151
|
end
|
|
163
152
|
|
|
164
153
|
context 'foreign key field' do
|
|
165
|
-
|
|
166
154
|
before do
|
|
167
155
|
association
|
|
168
156
|
end
|
|
@@ -173,13 +161,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
173
161
|
end
|
|
174
162
|
|
|
175
163
|
context 'index' do
|
|
176
|
-
|
|
177
164
|
before do
|
|
178
165
|
association
|
|
179
166
|
end
|
|
180
167
|
|
|
181
168
|
context 'when index is true' do
|
|
182
|
-
|
|
183
169
|
let(:options) do
|
|
184
170
|
{
|
|
185
171
|
index: true
|
|
@@ -187,13 +173,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
187
173
|
end
|
|
188
174
|
|
|
189
175
|
it 'sets up the index with the key' do
|
|
190
|
-
expect(has_many_left_class.index_specifications.first.fields).to
|
|
176
|
+
expect(has_many_left_class.index_specifications.first.fields).to contain_exactly(association.key.to_sym)
|
|
191
177
|
end
|
|
192
178
|
end
|
|
193
179
|
|
|
194
180
|
context 'when index is false' do
|
|
195
|
-
|
|
196
|
-
|
|
197
181
|
it 'does not set up an index' do
|
|
198
182
|
expect(has_many_left_class.index_specifications).to eq([])
|
|
199
183
|
end
|
|
@@ -201,14 +185,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
201
185
|
end
|
|
202
186
|
|
|
203
187
|
context 'dependent' do
|
|
204
|
-
|
|
205
188
|
context 'when the dependent option is provided' do
|
|
206
|
-
|
|
207
189
|
context 'when the dependent option is :delete_all' do
|
|
208
|
-
|
|
209
190
|
let(:options) do
|
|
210
191
|
{
|
|
211
|
-
|
|
192
|
+
dependent: :delete_all
|
|
212
193
|
}
|
|
213
194
|
end
|
|
214
195
|
|
|
@@ -225,10 +206,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
225
206
|
end
|
|
226
207
|
|
|
227
208
|
context 'when the dependent option is :destroy' do
|
|
228
|
-
|
|
229
209
|
let(:options) do
|
|
230
210
|
{
|
|
231
|
-
|
|
211
|
+
dependent: :destroy
|
|
232
212
|
}
|
|
233
213
|
end
|
|
234
214
|
|
|
@@ -245,10 +225,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
245
225
|
end
|
|
246
226
|
|
|
247
227
|
context 'when the dependent option is :nullify' do
|
|
248
|
-
|
|
249
228
|
let(:options) do
|
|
250
229
|
{
|
|
251
|
-
|
|
230
|
+
dependent: :nullify
|
|
252
231
|
}
|
|
253
232
|
end
|
|
254
233
|
|
|
@@ -265,10 +244,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
265
244
|
end
|
|
266
245
|
|
|
267
246
|
context 'when the dependent option is :restrict_with_exception' do
|
|
268
|
-
|
|
269
247
|
let(:options) do
|
|
270
248
|
{
|
|
271
|
-
|
|
249
|
+
dependent: :restrict_with_exception
|
|
272
250
|
}
|
|
273
251
|
end
|
|
274
252
|
|
|
@@ -285,10 +263,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
285
263
|
end
|
|
286
264
|
|
|
287
265
|
context 'when the dependent option is :restrict_with_error' do
|
|
288
|
-
|
|
289
266
|
let(:options) do
|
|
290
267
|
{
|
|
291
|
-
|
|
268
|
+
dependent: :restrict_with_error
|
|
292
269
|
}
|
|
293
270
|
end
|
|
294
271
|
|
|
@@ -306,7 +283,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
306
283
|
end
|
|
307
284
|
|
|
308
285
|
context 'when the dependent option is not provided' do
|
|
309
|
-
|
|
310
286
|
it 'does not set up the dependency' do
|
|
311
287
|
expect(Mongoid::Association::Depending).not_to receive(:define_dependency!)
|
|
312
288
|
association.setup!
|
|
@@ -316,30 +292,25 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
316
292
|
end
|
|
317
293
|
|
|
318
294
|
describe '#type' do
|
|
319
|
-
|
|
320
295
|
it 'returns nil' do
|
|
321
296
|
expect(association.type).to be_nil
|
|
322
297
|
end
|
|
323
298
|
end
|
|
324
299
|
|
|
325
300
|
describe '#inverse_type' do
|
|
326
|
-
|
|
327
301
|
it 'returns nil' do
|
|
328
302
|
expect(association.inverse_type).to be_nil
|
|
329
303
|
end
|
|
330
304
|
end
|
|
331
305
|
|
|
332
306
|
describe '#inverse_type_setter' do
|
|
333
|
-
|
|
334
307
|
it 'returns nil' do
|
|
335
308
|
expect(association.inverse_type_setter).to be_nil
|
|
336
309
|
end
|
|
337
310
|
end
|
|
338
311
|
|
|
339
312
|
describe '#foreign_key' do
|
|
340
|
-
|
|
341
313
|
context 'when options has foreign_key specified' do
|
|
342
|
-
|
|
343
314
|
let(:options) do
|
|
344
315
|
{ foreign_key: :other_object_id }
|
|
345
316
|
end
|
|
@@ -350,7 +321,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
350
321
|
end
|
|
351
322
|
|
|
352
323
|
context 'when options does not have foreign_key specified' do
|
|
353
|
-
|
|
354
324
|
it 'returns the default foreign key, the name of the inverse followed by "_ids"' do
|
|
355
325
|
expect(association.foreign_key).to eq("#{name.to_s.singularize}_ids")
|
|
356
326
|
end
|
|
@@ -358,19 +328,16 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
358
328
|
end
|
|
359
329
|
|
|
360
330
|
describe '#embedded?' do
|
|
361
|
-
|
|
362
331
|
it 'returns false' do
|
|
363
332
|
expect(association.embedded?).to be(false)
|
|
364
333
|
end
|
|
365
334
|
end
|
|
366
335
|
|
|
367
336
|
describe '#primary_key' do
|
|
368
|
-
|
|
369
337
|
context 'when the :primary_key option is specified' do
|
|
370
|
-
|
|
371
338
|
let(:options) do
|
|
372
339
|
{
|
|
373
|
-
|
|
340
|
+
primary_key: 'guid'
|
|
374
341
|
}
|
|
375
342
|
end
|
|
376
343
|
|
|
@@ -380,7 +347,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
380
347
|
end
|
|
381
348
|
|
|
382
349
|
context 'when the :primary_key option is not specified' do
|
|
383
|
-
|
|
384
350
|
it 'returns the primary_key default' do
|
|
385
351
|
expect(association.primary_key).to eq(Mongoid::Association::Relatable::PRIMARY_KEY_DEFAULT)
|
|
386
352
|
end
|
|
@@ -388,14 +354,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
388
354
|
end
|
|
389
355
|
|
|
390
356
|
describe '#indexed?' do
|
|
391
|
-
|
|
392
357
|
context 'when :index is specified in the options' do
|
|
393
|
-
|
|
394
358
|
context 'when :index is true' do
|
|
395
|
-
|
|
396
359
|
let(:options) do
|
|
397
360
|
{
|
|
398
|
-
|
|
361
|
+
index: true
|
|
399
362
|
}
|
|
400
363
|
end
|
|
401
364
|
|
|
@@ -405,10 +368,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
405
368
|
end
|
|
406
369
|
|
|
407
370
|
context 'when :index is false' do
|
|
408
|
-
|
|
409
371
|
let(:options) do
|
|
410
372
|
{
|
|
411
|
-
|
|
373
|
+
index: false
|
|
412
374
|
}
|
|
413
375
|
end
|
|
414
376
|
|
|
@@ -419,7 +381,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
419
381
|
end
|
|
420
382
|
|
|
421
383
|
context 'when :index is not specified in the options' do
|
|
422
|
-
|
|
423
384
|
it 'returns nil' do
|
|
424
385
|
expect(association.indexed?).to be(false)
|
|
425
386
|
end
|
|
@@ -427,58 +388,49 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
427
388
|
end
|
|
428
389
|
|
|
429
390
|
describe '#relation' do
|
|
430
|
-
|
|
431
391
|
it 'returns Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy' do
|
|
432
392
|
expect(association.relation).to be(Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy)
|
|
433
393
|
end
|
|
434
394
|
end
|
|
435
395
|
|
|
436
396
|
describe '#validation_default' do
|
|
437
|
-
|
|
438
397
|
it 'returns true' do
|
|
439
398
|
expect(association.validation_default).to be(true)
|
|
440
399
|
end
|
|
441
400
|
end
|
|
442
401
|
|
|
443
402
|
describe '#name' do
|
|
444
|
-
|
|
445
403
|
it 'returns the name of the relation' do
|
|
446
404
|
expect(association.name).to be(name)
|
|
447
405
|
end
|
|
448
406
|
end
|
|
449
407
|
|
|
450
408
|
describe '#options' do
|
|
451
|
-
|
|
452
409
|
it 'returns the options' do
|
|
453
410
|
expect(association.options).to be(options)
|
|
454
411
|
end
|
|
455
412
|
end
|
|
456
413
|
|
|
457
414
|
describe '#merge!' do
|
|
458
|
-
|
|
459
415
|
end
|
|
460
416
|
|
|
461
417
|
describe '#store_as' do
|
|
462
|
-
|
|
463
418
|
it 'returns nil' do
|
|
464
419
|
expect(association.store_as).to be_nil
|
|
465
420
|
end
|
|
466
421
|
end
|
|
467
422
|
|
|
468
423
|
describe '#touchable?' do
|
|
469
|
-
|
|
470
424
|
it 'return false' do
|
|
471
425
|
expect(association.send(:touchable?)).to be(false)
|
|
472
426
|
end
|
|
473
427
|
end
|
|
474
428
|
|
|
475
429
|
describe '#order' do
|
|
476
|
-
|
|
477
430
|
context 'when order is specified in the options' do
|
|
478
|
-
|
|
479
431
|
let(:options) do
|
|
480
432
|
{
|
|
481
|
-
|
|
433
|
+
order: :rating.desc
|
|
482
434
|
}
|
|
483
435
|
end
|
|
484
436
|
|
|
@@ -488,7 +440,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
488
440
|
end
|
|
489
441
|
|
|
490
442
|
context 'when order is not specified in the options' do
|
|
491
|
-
|
|
492
443
|
it 'returns nil' do
|
|
493
444
|
expect(association.order).to be_nil
|
|
494
445
|
end
|
|
@@ -496,9 +447,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
496
447
|
end
|
|
497
448
|
|
|
498
449
|
describe '#scope' do
|
|
499
|
-
|
|
500
450
|
context 'when scope is specified in the options' do
|
|
501
|
-
|
|
502
451
|
let(:options) do
|
|
503
452
|
{ scope: -> { unscoped.where(foo: :bar) } }
|
|
504
453
|
end
|
|
@@ -509,7 +458,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
509
458
|
end
|
|
510
459
|
|
|
511
460
|
context 'when scope is not specified in the options' do
|
|
512
|
-
|
|
513
461
|
it 'returns nil' do
|
|
514
462
|
expect(association.scope).to be_nil
|
|
515
463
|
end
|
|
@@ -517,117 +465,98 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
517
465
|
end
|
|
518
466
|
|
|
519
467
|
describe '#as' do
|
|
520
|
-
|
|
521
468
|
it 'returns nil' do
|
|
522
469
|
expect(association.as).to be_nil
|
|
523
470
|
end
|
|
524
471
|
end
|
|
525
472
|
|
|
526
473
|
describe '#polymorphic?' do
|
|
527
|
-
|
|
528
474
|
it 'returns false' do
|
|
529
475
|
expect(association.polymorphic?).to be(false)
|
|
530
476
|
end
|
|
531
477
|
end
|
|
532
478
|
|
|
533
479
|
describe '#type_setter' do
|
|
534
|
-
|
|
535
480
|
it 'returns nil' do
|
|
536
481
|
expect(association.type).to be_nil
|
|
537
482
|
end
|
|
538
483
|
end
|
|
539
484
|
|
|
540
485
|
describe '#dependent' do
|
|
541
|
-
|
|
542
486
|
it 'returns nil' do
|
|
543
487
|
expect(association.dependent).to be_nil
|
|
544
488
|
end
|
|
545
489
|
end
|
|
546
490
|
|
|
547
491
|
describe '#bindable?' do
|
|
548
|
-
|
|
549
492
|
it 'returns false' do
|
|
550
493
|
expect(association.bindable?(Person.new)).to be(false)
|
|
551
494
|
end
|
|
552
495
|
end
|
|
553
496
|
|
|
554
497
|
describe '#inverses' do
|
|
555
|
-
|
|
556
498
|
before do
|
|
557
499
|
HasManyRightObject.has_and_belongs_to_many :has_many_left_objects
|
|
558
500
|
end
|
|
559
501
|
|
|
560
502
|
context 'when inverse_of is specified' do
|
|
561
|
-
|
|
562
503
|
before do
|
|
563
504
|
options.merge!(inverse_of: :inverse_name)
|
|
564
505
|
end
|
|
565
506
|
|
|
566
507
|
it 'returns the :inverse_of value' do
|
|
567
|
-
expect(association.inverses).to eq([:inverse_name])
|
|
508
|
+
expect(association.inverses).to eq([ :inverse_name ])
|
|
568
509
|
end
|
|
569
510
|
end
|
|
570
511
|
|
|
571
512
|
context 'when inverse_of is not specified' do
|
|
572
|
-
|
|
573
513
|
it 'uses the inverse class to find the inverse name' do
|
|
574
|
-
expect(association.inverses).to eq([:has_many_left_objects])
|
|
514
|
+
expect(association.inverses).to eq([ :has_many_left_objects ])
|
|
575
515
|
end
|
|
576
516
|
end
|
|
577
517
|
|
|
578
518
|
context 'when :cyclic is specified' do
|
|
579
|
-
|
|
580
519
|
it 'returns the cyclic inverse name' do
|
|
581
|
-
|
|
582
520
|
end
|
|
583
521
|
end
|
|
584
522
|
end
|
|
585
523
|
|
|
586
524
|
describe '##inverse' do
|
|
525
|
+
before do
|
|
526
|
+
HasManyRightObject.has_and_belongs_to_many :has_many_left_objects
|
|
527
|
+
end
|
|
587
528
|
|
|
529
|
+
context 'when inverse_of is specified' do
|
|
588
530
|
before do
|
|
589
|
-
|
|
531
|
+
options.merge!(inverse_of: :inverse_name)
|
|
590
532
|
end
|
|
591
533
|
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
before do
|
|
595
|
-
options.merge!(inverse_of: :inverse_name)
|
|
596
|
-
end
|
|
597
|
-
|
|
598
|
-
it 'returns the :inverse_of value' do
|
|
599
|
-
expect(association.inverse).to eq(:inverse_name)
|
|
600
|
-
end
|
|
534
|
+
it 'returns the :inverse_of value' do
|
|
535
|
+
expect(association.inverse).to eq(:inverse_name)
|
|
601
536
|
end
|
|
537
|
+
end
|
|
602
538
|
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
expect(association.inverse).to eq(:has_many_left_objects)
|
|
607
|
-
end
|
|
539
|
+
context 'when inverse_of is not specified' do
|
|
540
|
+
it 'uses the inverse class to find the inverse name' do
|
|
541
|
+
expect(association.inverse).to eq(:has_many_left_objects)
|
|
608
542
|
end
|
|
543
|
+
end
|
|
609
544
|
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
it 'returns the cyclic inverse name' do
|
|
613
|
-
|
|
614
|
-
end
|
|
545
|
+
context 'when :cyclic is specified' do
|
|
546
|
+
it 'returns the cyclic inverse name' do
|
|
615
547
|
end
|
|
616
548
|
end
|
|
549
|
+
end
|
|
617
550
|
|
|
618
551
|
describe '#inverse_association' do
|
|
619
|
-
|
|
620
552
|
end
|
|
621
553
|
|
|
622
554
|
describe '#autosave' do
|
|
623
|
-
|
|
624
555
|
context 'when the autosave option is specified' do
|
|
625
|
-
|
|
626
556
|
context 'when the autosave option is true' do
|
|
627
|
-
|
|
628
557
|
let(:options) do
|
|
629
558
|
{
|
|
630
|
-
|
|
559
|
+
autosave: true
|
|
631
560
|
}
|
|
632
561
|
end
|
|
633
562
|
|
|
@@ -637,10 +566,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
637
566
|
end
|
|
638
567
|
|
|
639
568
|
context 'when the autosave option is false' do
|
|
640
|
-
|
|
641
569
|
let(:options) do
|
|
642
570
|
{
|
|
643
|
-
|
|
571
|
+
autosave: false
|
|
644
572
|
}
|
|
645
573
|
end
|
|
646
574
|
|
|
@@ -651,7 +579,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
651
579
|
end
|
|
652
580
|
|
|
653
581
|
context 'when the autosave option is not specified' do
|
|
654
|
-
|
|
655
582
|
it 'returns false' do
|
|
656
583
|
expect(association.autosave).to be(false)
|
|
657
584
|
end
|
|
@@ -659,9 +586,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
659
586
|
end
|
|
660
587
|
|
|
661
588
|
describe '#relation_class_name' do
|
|
662
|
-
|
|
663
589
|
context 'when the :class_name option is specified' do
|
|
664
|
-
|
|
665
590
|
let(:options) do
|
|
666
591
|
{ class_name: 'OtherHasManyRightObject' }
|
|
667
592
|
end
|
|
@@ -672,7 +597,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
672
597
|
end
|
|
673
598
|
|
|
674
599
|
context 'when the class_name option is not specified' do
|
|
675
|
-
|
|
676
600
|
it 'uses the name of the relation to deduce the class name' do
|
|
677
601
|
expect(association.relation_class_name).to eq('HasManyRightObject')
|
|
678
602
|
end
|
|
@@ -680,9 +604,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
680
604
|
end
|
|
681
605
|
|
|
682
606
|
describe '#relation_class' do
|
|
683
|
-
|
|
684
607
|
context 'when the :class_name option is specified' do
|
|
685
|
-
|
|
686
608
|
let!(:_class) do
|
|
687
609
|
class OtherHasManyRightObject; end
|
|
688
610
|
OtherHasManyRightObject
|
|
@@ -698,7 +620,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
698
620
|
end
|
|
699
621
|
|
|
700
622
|
context 'when the class_name option is not specified' do
|
|
701
|
-
|
|
702
623
|
it 'uses the name of the relation to deduce the class name' do
|
|
703
624
|
expect(association.relation_class).to eq(HasManyRightObject)
|
|
704
625
|
end
|
|
@@ -706,23 +627,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
706
627
|
end
|
|
707
628
|
|
|
708
629
|
describe '#inverse_class_name' do
|
|
709
|
-
|
|
710
630
|
it 'returns the name of the owner class' do
|
|
711
631
|
expect(association.inverse_class_name).to eq(HasManyLeftObject.name)
|
|
712
632
|
end
|
|
713
633
|
end
|
|
714
634
|
|
|
715
635
|
describe '#inverse_class' do
|
|
716
|
-
|
|
717
636
|
it 'returns the owner class' do
|
|
718
637
|
expect(association.inverse_class).to be(HasManyLeftObject)
|
|
719
638
|
end
|
|
720
639
|
end
|
|
721
640
|
|
|
722
641
|
describe '#inverse_of' do
|
|
723
|
-
|
|
724
642
|
context 'when :inverse_of is specified in the options' do
|
|
725
|
-
|
|
726
643
|
let(:options) do
|
|
727
644
|
{ inverse_of: :a_has_many_left_object }
|
|
728
645
|
end
|
|
@@ -733,7 +650,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
733
650
|
end
|
|
734
651
|
|
|
735
652
|
context 'when :inverse_of is not specified in the options' do
|
|
736
|
-
|
|
737
653
|
it 'returns nil' do
|
|
738
654
|
expect(association.inverse_of).to be_nil
|
|
739
655
|
end
|
|
@@ -748,18 +664,14 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
748
664
|
# end
|
|
749
665
|
|
|
750
666
|
describe '#setter' do
|
|
751
|
-
|
|
752
667
|
it 'returns a string of the name followed by =' do
|
|
753
668
|
expect(association.setter).to eq("#{name}=")
|
|
754
669
|
end
|
|
755
670
|
end
|
|
756
671
|
|
|
757
672
|
describe '#validate?' do
|
|
758
|
-
|
|
759
673
|
context 'when :validate is specified in the options' do
|
|
760
|
-
|
|
761
674
|
context 'when validate is true' do
|
|
762
|
-
|
|
763
675
|
let(:options) do
|
|
764
676
|
{ validate: true }
|
|
765
677
|
end
|
|
@@ -770,7 +682,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
770
682
|
end
|
|
771
683
|
|
|
772
684
|
context 'when validate is false' do
|
|
773
|
-
|
|
774
685
|
let(:options) do
|
|
775
686
|
{ validate: false }
|
|
776
687
|
end
|
|
@@ -782,7 +693,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
782
693
|
end
|
|
783
694
|
|
|
784
695
|
context 'when :validate is not specified in the options' do
|
|
785
|
-
|
|
786
696
|
it 'returns the validation_default' do
|
|
787
697
|
expect(association.send(:validate?)).to eq(association.validation_default)
|
|
788
698
|
end
|
|
@@ -790,14 +700,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
790
700
|
end
|
|
791
701
|
|
|
792
702
|
describe '#forced_nil_inverse?' do
|
|
793
|
-
|
|
794
703
|
context 'when inverse_of is specified in the options' do
|
|
795
|
-
|
|
796
704
|
context 'when :inverse_of is nil' do
|
|
797
|
-
|
|
798
705
|
let(:options) do
|
|
799
706
|
{
|
|
800
|
-
|
|
707
|
+
inverse_of: nil
|
|
801
708
|
}
|
|
802
709
|
end
|
|
803
710
|
|
|
@@ -807,10 +714,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
807
714
|
end
|
|
808
715
|
|
|
809
716
|
context 'when :inverse_of is a symbol' do
|
|
810
|
-
|
|
811
717
|
let(:options) do
|
|
812
718
|
{
|
|
813
|
-
|
|
719
|
+
inverse_of: :inverse_name
|
|
814
720
|
}
|
|
815
721
|
end
|
|
816
722
|
|
|
@@ -820,10 +726,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
820
726
|
end
|
|
821
727
|
|
|
822
728
|
context 'when :inverse_of is false' do
|
|
823
|
-
|
|
824
729
|
let(:options) do
|
|
825
730
|
{
|
|
826
|
-
|
|
731
|
+
inverse_of: false
|
|
827
732
|
}
|
|
828
733
|
end
|
|
829
734
|
|
|
@@ -834,7 +739,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
834
739
|
end
|
|
835
740
|
|
|
836
741
|
context 'when :inverse_of is not specified in the options' do
|
|
837
|
-
|
|
838
742
|
it 'returns false' do
|
|
839
743
|
expect(association.forced_nil_inverse?).to be(false)
|
|
840
744
|
end
|
|
@@ -842,16 +746,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
842
746
|
end
|
|
843
747
|
|
|
844
748
|
describe '#stores_foreign_key?' do
|
|
845
|
-
|
|
846
749
|
it 'returns false' do
|
|
847
750
|
expect(association.stores_foreign_key?).to be(true)
|
|
848
751
|
end
|
|
849
752
|
end
|
|
850
753
|
|
|
851
754
|
describe '#inverse_setter' do
|
|
852
|
-
|
|
853
755
|
context 'when an inverse can be determined' do
|
|
854
|
-
|
|
855
756
|
before do
|
|
856
757
|
HasManyRightObject.has_and_belongs_to_many :has_many_left_objects
|
|
857
758
|
end
|
|
@@ -862,7 +763,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
862
763
|
end
|
|
863
764
|
|
|
864
765
|
context 'when an inverse cannot be determined' do
|
|
865
|
-
|
|
866
766
|
it 'returns nil' do
|
|
867
767
|
expect(association.inverse_setter).to be_nil
|
|
868
768
|
end
|
|
@@ -870,11 +770,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
870
770
|
end
|
|
871
771
|
|
|
872
772
|
describe '#extension' do
|
|
873
|
-
|
|
874
773
|
context 'when a block is passed' do
|
|
875
|
-
|
|
876
774
|
let(:association) do
|
|
877
|
-
has_many_left_class.has_and_belongs_to_many name, options do
|
|
775
|
+
has_many_left_class.has_and_belongs_to_many name, options do
|
|
776
|
+
end
|
|
878
777
|
end
|
|
879
778
|
|
|
880
779
|
it 'defines an extension module' do
|
|
@@ -883,12 +782,12 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
883
782
|
|
|
884
783
|
it 'returns the extension' do
|
|
885
784
|
expect(association.extension).to eq(
|
|
886
|
-
"#{has_many_left_class.name}::#{has_many_left_class.name}#{name.to_s.camelize}RelationExtension".constantize
|
|
785
|
+
"#{has_many_left_class.name}::#{has_many_left_class.name}#{name.to_s.camelize}RelationExtension".constantize
|
|
786
|
+
)
|
|
887
787
|
end
|
|
888
788
|
end
|
|
889
789
|
|
|
890
790
|
context 'when an :extension is not specified in the options' do
|
|
891
|
-
|
|
892
791
|
it 'returns false' do
|
|
893
792
|
expect(association.extension).to be_nil
|
|
894
793
|
end
|
|
@@ -896,28 +795,23 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
896
795
|
end
|
|
897
796
|
|
|
898
797
|
describe '#foreign_key_setter' do
|
|
899
|
-
|
|
900
798
|
it 'returns the foreign key followed by "="' do
|
|
901
799
|
expect(association.foreign_key_setter).to eq("#{association.foreign_key}=")
|
|
902
800
|
end
|
|
903
801
|
end
|
|
904
802
|
|
|
905
803
|
describe '#criteria' do
|
|
906
|
-
|
|
907
804
|
it 'returns a criteria object' do
|
|
908
805
|
expect(association.criteria(BSON::ObjectId.new, HasManyLeftObject)).to be_a(Mongoid::Criteria)
|
|
909
806
|
end
|
|
910
807
|
end
|
|
911
808
|
|
|
912
809
|
describe '#destructive?' do
|
|
913
|
-
|
|
914
810
|
context 'when the dependent option is provided' do
|
|
915
|
-
|
|
916
811
|
context 'when the dependent option is :delete_all' do
|
|
917
|
-
|
|
918
812
|
let(:options) do
|
|
919
813
|
{
|
|
920
|
-
|
|
814
|
+
dependent: :delete_all
|
|
921
815
|
}
|
|
922
816
|
end
|
|
923
817
|
|
|
@@ -927,10 +821,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
927
821
|
end
|
|
928
822
|
|
|
929
823
|
context 'when the dependent option is :destroy' do
|
|
930
|
-
|
|
931
824
|
let(:options) do
|
|
932
825
|
{
|
|
933
|
-
|
|
826
|
+
dependent: :destroy
|
|
934
827
|
}
|
|
935
828
|
end
|
|
936
829
|
|
|
@@ -940,10 +833,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
940
833
|
end
|
|
941
834
|
|
|
942
835
|
context 'when the dependent option is :nullify' do
|
|
943
|
-
|
|
944
836
|
let(:options) do
|
|
945
837
|
{
|
|
946
|
-
|
|
838
|
+
dependent: :nullify
|
|
947
839
|
}
|
|
948
840
|
end
|
|
949
841
|
|
|
@@ -953,10 +845,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
953
845
|
end
|
|
954
846
|
|
|
955
847
|
context 'when the dependent option is :restrict_with_exception' do
|
|
956
|
-
|
|
957
848
|
let(:options) do
|
|
958
849
|
{
|
|
959
|
-
|
|
850
|
+
dependent: :restrict_with_exception
|
|
960
851
|
}
|
|
961
852
|
end
|
|
962
853
|
|
|
@@ -966,10 +857,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
966
857
|
end
|
|
967
858
|
|
|
968
859
|
context 'when the dependent option is :restrict_with_error' do
|
|
969
|
-
|
|
970
860
|
let(:options) do
|
|
971
861
|
{
|
|
972
|
-
|
|
862
|
+
dependent: :restrict_with_error
|
|
973
863
|
}
|
|
974
864
|
end
|
|
975
865
|
|
|
@@ -980,7 +870,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
980
870
|
end
|
|
981
871
|
|
|
982
872
|
context 'when the dependent option is not provided' do
|
|
983
|
-
|
|
984
873
|
it 'returns false' do
|
|
985
874
|
expect(association.destructive?).to be(false)
|
|
986
875
|
end
|
|
@@ -988,35 +877,30 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
988
877
|
end
|
|
989
878
|
|
|
990
879
|
describe '#nested_builder' do
|
|
991
|
-
|
|
992
880
|
it 'returns an instance of Association::Nested::Many' do
|
|
993
881
|
expect(association.nested_builder({}, {})).to be_a(Mongoid::Association::Nested::Many)
|
|
994
882
|
end
|
|
995
883
|
end
|
|
996
884
|
|
|
997
885
|
describe '#cascading_callbacks?' do
|
|
998
|
-
|
|
999
886
|
it 'returns false' do
|
|
1000
887
|
expect(association.cascading_callbacks?).to be(false)
|
|
1001
888
|
end
|
|
1002
889
|
end
|
|
1003
890
|
|
|
1004
891
|
describe '#path' do
|
|
1005
|
-
|
|
1006
892
|
it 'returns an instance of Mongoid::Atomic::Paths::Root' do
|
|
1007
893
|
expect(association.path(double)).to be_a(Mongoid::Atomic::Paths::Root)
|
|
1008
894
|
end
|
|
1009
895
|
end
|
|
1010
896
|
|
|
1011
897
|
describe '#foreign_key_check' do
|
|
1012
|
-
|
|
1013
898
|
it 'returns the foreign_key followed by "_previously_changed?"' do
|
|
1014
899
|
expect(association.foreign_key_check).to eq('has_many_right_object_ids_previously_changed?')
|
|
1015
900
|
end
|
|
1016
901
|
end
|
|
1017
902
|
|
|
1018
903
|
describe '#create_relation' do
|
|
1019
|
-
|
|
1020
904
|
let(:left_object) do
|
|
1021
905
|
HasManyLeftObject.new
|
|
1022
906
|
end
|
|
@@ -1037,7 +921,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
1037
921
|
end
|
|
1038
922
|
|
|
1039
923
|
describe '#inverse_foreign_key' do
|
|
1040
|
-
|
|
1041
924
|
it 'returns generated key' do
|
|
1042
925
|
expect(association.inverse_foreign_key).to eq('has_many_left_object_ids')
|
|
1043
926
|
end
|
|
@@ -1063,23 +946,25 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
1063
946
|
end
|
|
1064
947
|
end
|
|
1065
948
|
|
|
1066
|
-
context
|
|
949
|
+
context 'when using a model that uses the class_name option' do
|
|
1067
950
|
let(:inverse_foreign_key) { HabtmmSchool.relations[:students].inverse_foreign_key }
|
|
1068
|
-
|
|
1069
|
-
|
|
951
|
+
|
|
952
|
+
it 'gets the correct inverse foreign key' do
|
|
953
|
+
expect(inverse_foreign_key).to eq('school_ids')
|
|
1070
954
|
end
|
|
1071
955
|
end
|
|
1072
956
|
end
|
|
1073
957
|
|
|
1074
958
|
describe '#inverse_foreign_key_setter' do
|
|
1075
|
-
|
|
1076
959
|
it 'returns generated method name' do
|
|
1077
960
|
expect(association.inverse_foreign_key_setter).to eq('has_many_left_object_ids=')
|
|
1078
961
|
end
|
|
1079
962
|
end
|
|
1080
963
|
|
|
1081
|
-
context
|
|
964
|
+
context 'when adding an object to the association' do
|
|
1082
965
|
let!(:start_time) { Timecop.freeze(Time.at(Time.now.to_i)) }
|
|
966
|
+
let!(:school) { HabtmmSchool.create! }
|
|
967
|
+
let!(:student) { HabtmmStudent.create! }
|
|
1083
968
|
|
|
1084
969
|
let(:update_time) do
|
|
1085
970
|
Timecop.freeze(Time.at(Time.now.to_i) + 2)
|
|
@@ -1089,16 +974,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
|
|
|
1089
974
|
Timecop.return
|
|
1090
975
|
end
|
|
1091
976
|
|
|
1092
|
-
let!(:school) { HabtmmSchool.create! }
|
|
1093
|
-
let!(:student) { HabtmmStudent.create! }
|
|
1094
|
-
|
|
1095
977
|
before do
|
|
1096
978
|
update_time
|
|
1097
|
-
school.update(students: [student])
|
|
979
|
+
school.update(students: [ student ])
|
|
1098
980
|
end
|
|
1099
981
|
|
|
1100
|
-
it
|
|
1101
|
-
pending
|
|
982
|
+
it 'updates the updated at' do
|
|
983
|
+
pending 'MONGOID-4953'
|
|
1102
984
|
expect(school.updated_at).to eq(update_time)
|
|
1103
985
|
end
|
|
1104
986
|
end
|