mongoid 7.5.4 → 8.1.7
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 +3 -3
- data/README.md +6 -6
- data/Rakefile +44 -46
- data/lib/config/locales/en.yml +92 -43
- data/lib/mongoid/association/accessors.rb +44 -11
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +5 -3
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +34 -11
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +85 -46
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +8 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +45 -7
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +15 -4
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
- data/lib/mongoid/association/referenced/has_many/proxy.rb +40 -21
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +4 -4
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic.rb +16 -7
- data/lib/mongoid/attributes/dynamic.rb +4 -4
- data/lib/mongoid/attributes/nested.rb +6 -6
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +3 -3
- data/lib/mongoid/attributes.rb +51 -42
- data/lib/mongoid/changeable.rb +147 -14
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/storage_options.rb +2 -5
- data/lib/mongoid/clients/validators/storage.rb +3 -15
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +2 -0
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/options.rb +3 -0
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config/validators.rb +1 -0
- data/lib/mongoid/config.rb +153 -18
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +285 -58
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +540 -346
- data/lib/mongoid/contextual/none.rb +193 -20
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +14 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +8 -5
- data/lib/mongoid/criteria/includable.rb +27 -22
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -9
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +4 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
- data/lib/mongoid/criteria/queryable/optional.rb +11 -17
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +47 -38
- data/lib/mongoid/criteria/queryable/selector.rb +92 -7
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +20 -40
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +127 -35
- data/lib/mongoid/equality.rb +8 -8
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +6 -3
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +38 -9
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +10 -8
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +29 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +55 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +19 -4
- data/lib/mongoid/fields/standard.rb +17 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +142 -28
- data/lib/mongoid/findable.rb +54 -24
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +186 -16
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher/eq_impl.rb +1 -1
- data/lib/mongoid/matcher/type.rb +1 -1
- data/lib/mongoid/matcher.rb +48 -14
- data/lib/mongoid/persistable/creatable.rb +19 -9
- data/lib/mongoid/persistable/deletable.rb +2 -2
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +14 -2
- data/lib/mongoid/persistable/unsettable.rb +2 -2
- data/lib/mongoid/persistable/updatable.rb +69 -12
- data/lib/mongoid/persistable/upsertable.rb +21 -2
- data/lib/mongoid/persistable.rb +6 -3
- data/lib/mongoid/persistence_context.rb +6 -4
- data/lib/mongoid/query_cache.rb +13 -261
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +15 -13
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +17 -13
- data/lib/mongoid/stateful.rb +57 -10
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +20 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +42 -12
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +3 -4
- data/lib/mongoid/traversable.rb +10 -5
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +98 -17
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +5 -7
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +17 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +19 -4
- data/lib/mongoid.rb +17 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +24 -19
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +132 -1
- data/spec/integration/callbacks_spec.rb +381 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +118 -80
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -32
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +290 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +19 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +215 -177
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +15 -1
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +526 -33
- data/spec/mongoid/changeable_spec.rb +429 -37
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +149 -15
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config_spec.rb +214 -31
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +850 -88
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +2256 -1005
- data/spec/mongoid/contextual/none_spec.rb +60 -21
- data/spec/mongoid/copyable_spec.rb +453 -11
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +1 -5
- data/spec/mongoid/criteria_spec.rb +469 -1205
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +639 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +80 -37
- data/spec/mongoid/fields_spec.rb +503 -87
- data/spec/mongoid/findable_spec.rb +450 -58
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +55 -30
- data/spec/mongoid/interceptable_spec.rb +824 -22
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +28 -8
- data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
- data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
- data/spec/mongoid/persistable/logical_spec.rb +37 -0
- data/spec/mongoid/persistable/poppable_spec.rb +36 -0
- data/spec/mongoid/persistable/pullable_spec.rb +72 -0
- data/spec/mongoid/persistable/pushable_spec.rb +72 -0
- data/spec/mongoid/persistable/renamable_spec.rb +36 -0
- data/spec/mongoid/persistable/savable_spec.rb +96 -0
- data/spec/mongoid/persistable/settable_spec.rb +37 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
- data/spec/mongoid/persistable/updatable_spec.rb +20 -28
- data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
- data/spec/mongoid/persistence_context_spec.rb +31 -57
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +56 -215
- data/spec/mongoid/reloadable_spec.rb +83 -6
- data/spec/mongoid/scopable_spec.rb +91 -1
- data/spec/mongoid/serializable_spec.rb +25 -39
- data/spec/mongoid/shardable_spec.rb +4 -4
- data/spec/mongoid/stateful_spec.rb +150 -8
- data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
- data/spec/mongoid/tasks/database_spec.rb +127 -0
- data/spec/mongoid/timestamps_spec.rb +392 -4
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +390 -2
- data/spec/mongoid/touchable_spec_models.rb +14 -8
- data/spec/mongoid/traversable_spec.rb +13 -35
- data/spec/mongoid/validatable/associated_spec.rb +27 -34
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +34 -16
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/spec_helper.rb +5 -0
- data/spec/support/constraints.rb +24 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +78 -0
- data/spec/support/models/artist.rb +0 -1
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +5 -0
- data/spec/support/models/book.rb +1 -0
- data/spec/support/models/building.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/lat_lng.rb +6 -0
- data/spec/support/models/name.rb +10 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/product.rb +1 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- metadata +101 -96
- checksums.yaml.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
- data/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -231
- data/spec/shared/lib/mrss/constraints.rb +0 -378
- data/spec/shared/lib/mrss/docker_runner.rb +0 -291
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
- data/spec/shared/lib/mrss/session_registry.rb +0 -69
- data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -15
- data/spec/shared/share/Dockerfile.erb +0 -325
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/config.sh +0 -27
- data/spec/shared/shlib/distro.sh +0 -74
- data/spec/shared/shlib/server.sh +0 -392
- data/spec/shared/shlib/set_env.sh +0 -169
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -3
data/lib/mongoid/document.rb
CHANGED
@@ -56,7 +56,7 @@ module Mongoid
|
|
56
56
|
# @example Check if frozen
|
57
57
|
# document.frozen?
|
58
58
|
#
|
59
|
-
# @return [ true
|
59
|
+
# @return [ true | false ] True if frozen, else false.
|
60
60
|
def frozen?
|
61
61
|
attributes.frozen?
|
62
62
|
end
|
@@ -100,21 +100,8 @@ module Mongoid
|
|
100
100
|
# @param [ Hash ] attrs The attributes to set up the document with.
|
101
101
|
#
|
102
102
|
# @return [ Document ] A new document.
|
103
|
-
def initialize(attrs = nil)
|
104
|
-
|
105
|
-
_building do
|
106
|
-
@new_record = true
|
107
|
-
@attributes ||= {}
|
108
|
-
apply_pre_processed_defaults
|
109
|
-
apply_default_scoping
|
110
|
-
process_attributes(attrs) do
|
111
|
-
yield(self) if block_given?
|
112
|
-
end
|
113
|
-
apply_post_processed_defaults
|
114
|
-
# @todo: #2586: Need to have access to parent document in these
|
115
|
-
# callbacks.
|
116
|
-
run_callbacks(:initialize) unless _initialize_callbacks.empty?
|
117
|
-
end
|
103
|
+
def initialize(attrs = nil, &block)
|
104
|
+
construct_document(attrs, &block)
|
118
105
|
end
|
119
106
|
|
120
107
|
# Return the model name of the document.
|
@@ -137,18 +124,6 @@ module Mongoid
|
|
137
124
|
(persisted? || destroyed?) ? [ _id.to_s ] : nil
|
138
125
|
end
|
139
126
|
|
140
|
-
# Return an array with this +Document+ only in it.
|
141
|
-
#
|
142
|
-
# @example Return the document in an array.
|
143
|
-
# document.to_a
|
144
|
-
#
|
145
|
-
# @return [ Array<Document> ] An array with the document as its only item.
|
146
|
-
#
|
147
|
-
# @deprecated
|
148
|
-
def to_a
|
149
|
-
[ self ]
|
150
|
-
end
|
151
|
-
|
152
127
|
# Return a hash of the entire document hierarchy from this document and
|
153
128
|
# below. Used when the attributes are needed for everything and not just
|
154
129
|
# the current document.
|
@@ -175,14 +150,14 @@ module Mongoid
|
|
175
150
|
#
|
176
151
|
# @param [ Hash ] options The options.
|
177
152
|
#
|
178
|
-
# @option options [ true
|
153
|
+
# @option options [ true | false ] :compact (Deprecated) Whether to include fields
|
179
154
|
# with nil values in the json document.
|
180
155
|
#
|
181
156
|
# @return [ Hash ] The document as json.
|
182
157
|
def as_json(options = nil)
|
183
158
|
rv = super
|
184
159
|
if options && options[:compact]
|
185
|
-
Mongoid.
|
160
|
+
Mongoid::Warnings.warn_as_json_compact_deprecated
|
186
161
|
rv = rv.compact
|
187
162
|
end
|
188
163
|
rv
|
@@ -230,6 +205,47 @@ module Mongoid
|
|
230
205
|
|
231
206
|
private
|
232
207
|
|
208
|
+
# Does the construction of a document.
|
209
|
+
#
|
210
|
+
# @param [ Hash ] attrs The attributes to set up the document with.
|
211
|
+
# @param [ Hash ] options The options to use.
|
212
|
+
#
|
213
|
+
# @option options [ true | false ] :execute_callbacks Flag specifies
|
214
|
+
# whether callbacks should be run.
|
215
|
+
#
|
216
|
+
# @return [ Document ] A new document.
|
217
|
+
#
|
218
|
+
# @note A Ruby 2.x bug prevents the options hash from being keyword
|
219
|
+
# arguments. Once we drop support for Ruby 2.x, we can reimplement
|
220
|
+
# the options hash as keyword arguments.
|
221
|
+
# See https://bugs.ruby-lang.org/issues/15753
|
222
|
+
#
|
223
|
+
# @api private
|
224
|
+
def construct_document(attrs = nil, options = {})
|
225
|
+
execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
|
226
|
+
|
227
|
+
@__parent = nil
|
228
|
+
_building do
|
229
|
+
@new_record = true
|
230
|
+
@attributes ||= {}
|
231
|
+
apply_pre_processed_defaults
|
232
|
+
apply_default_scoping
|
233
|
+
process_attributes(attrs) do
|
234
|
+
yield(self) if block_given?
|
235
|
+
end
|
236
|
+
@attributes_before_type_cast = @attributes.merge(attributes_before_type_cast)
|
237
|
+
|
238
|
+
if execute_callbacks
|
239
|
+
apply_post_processed_defaults
|
240
|
+
run_callbacks(:initialize) unless _initialize_callbacks.empty?
|
241
|
+
else
|
242
|
+
pending_callbacks << :apply_post_processed_defaults
|
243
|
+
pending_callbacks << :initialize
|
244
|
+
end
|
245
|
+
end
|
246
|
+
self
|
247
|
+
end
|
248
|
+
|
233
249
|
# Returns the logger
|
234
250
|
#
|
235
251
|
# @return [ Logger ] The configured logger or a default Logger instance.
|
@@ -247,6 +263,14 @@ module Mongoid
|
|
247
263
|
@model_cache_key ||= self.class.model_name.cache_key
|
248
264
|
end
|
249
265
|
|
266
|
+
# Returns a hash of the attributes.
|
267
|
+
#
|
268
|
+
# Note this method modifies the attributes hash that already exists on the
|
269
|
+
# class and returns it. This means that the hash returned by this method
|
270
|
+
# refers to the same hash as calling #attributes on the instance. See
|
271
|
+
# MONGOID-4476 for an explanation on how this is used.
|
272
|
+
#
|
273
|
+
# @return [ Hash ] The attributes hash.
|
250
274
|
def as_attributes
|
251
275
|
return attributes if frozen?
|
252
276
|
embedded_relations.each_pair do |name, meta|
|
@@ -266,6 +290,20 @@ module Mongoid
|
|
266
290
|
|
267
291
|
module ClassMethods
|
268
292
|
|
293
|
+
# Indicate whether callbacks should be invoked by default or not,
|
294
|
+
# within the block. Callbacks may always be explicitly invoked by passing
|
295
|
+
# `execute_callbacks: true` where available.
|
296
|
+
#
|
297
|
+
# @params execute_callbacks [ true | false ] Whether callbacks should be
|
298
|
+
# suppressed or not.
|
299
|
+
def with_callbacks(execute_callbacks)
|
300
|
+
saved, Threaded.execute_callbacks =
|
301
|
+
Threaded.execute_callbacks?, execute_callbacks
|
302
|
+
yield
|
303
|
+
ensure
|
304
|
+
Threaded.execute_callbacks = saved
|
305
|
+
end
|
306
|
+
|
269
307
|
# Instantiate a new object, only when loaded from the database or when
|
270
308
|
# the attributes have already been typecast.
|
271
309
|
#
|
@@ -275,11 +313,33 @@ module Mongoid
|
|
275
313
|
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
276
314
|
# @param [ Integer ] selected_fields The selected fields from the
|
277
315
|
# criteria.
|
316
|
+
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
317
|
+
# should be run.
|
318
|
+
#
|
319
|
+
# @return [ Document ] A new document.
|
320
|
+
def instantiate(attrs = nil, selected_fields = nil, &block)
|
321
|
+
instantiate_document(attrs, selected_fields, &block)
|
322
|
+
end
|
323
|
+
|
324
|
+
# Instantiate the document.
|
325
|
+
#
|
326
|
+
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
327
|
+
# @param [ Integer ] selected_fields The selected fields from the
|
328
|
+
# criteria.
|
329
|
+
# @param [ Hash ] options The options to use.
|
330
|
+
#
|
331
|
+
# @option options [ true | false ] :execute_callbacks Flag specifies
|
332
|
+
# whether callbacks should be run.
|
278
333
|
#
|
279
334
|
# @return [ Document ] A new document.
|
280
335
|
#
|
336
|
+
# @note A Ruby 2.x bug prevents the options hash from being keyword
|
337
|
+
# arguments. Once we drop support for Ruby 2.x, we can reimplement
|
338
|
+
# the options hash as keyword arguments.
|
339
|
+
#
|
281
340
|
# @api private
|
282
|
-
def
|
341
|
+
def instantiate_document(attrs = nil, selected_fields = nil, options = {})
|
342
|
+
execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
|
283
343
|
attributes = if Mongoid.legacy_attributes
|
284
344
|
attrs
|
285
345
|
else
|
@@ -289,13 +349,45 @@ module Mongoid
|
|
289
349
|
doc = allocate
|
290
350
|
doc.__selected_fields = selected_fields
|
291
351
|
doc.instance_variable_set(:@attributes, attributes)
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
doc.
|
352
|
+
# TODO: remove the to_h when the legacy_attributes flag is removed.
|
353
|
+
# The to_h ensures that we don't accidentally make attributes_before_type_cast
|
354
|
+
# a BSON::Document.
|
355
|
+
doc.instance_variable_set(:@attributes_before_type_cast, attributes&.to_h.dup)
|
356
|
+
|
357
|
+
if execute_callbacks
|
358
|
+
doc.apply_defaults
|
359
|
+
yield(doc) if block_given?
|
360
|
+
doc.run_callbacks(:find) unless doc._find_callbacks.empty?
|
361
|
+
doc.run_callbacks(:initialize) unless doc._initialize_callbacks.empty?
|
362
|
+
else
|
363
|
+
yield(doc) if block_given?
|
364
|
+
doc.pending_callbacks += [:apply_defaults, :find, :initialize]
|
365
|
+
end
|
366
|
+
|
296
367
|
doc
|
297
368
|
end
|
298
369
|
|
370
|
+
# Allocates and constructs a document.
|
371
|
+
#
|
372
|
+
# @param [ Hash ] attrs The attributes to set up the document with.
|
373
|
+
# @param [ Hash ] options The options to use.
|
374
|
+
#
|
375
|
+
# @option options [ true | false ] :execute_callbacks Flag specifies
|
376
|
+
# whether callbacks should be run.
|
377
|
+
#
|
378
|
+
# @note A Ruby 2.x bug prevents the options hash from being keyword
|
379
|
+
# arguments. Once we drop support for Ruby 2.x, we can reimplement
|
380
|
+
# the options hash as keyword arguments.
|
381
|
+
# See https://bugs.ruby-lang.org/issues/15753
|
382
|
+
#
|
383
|
+
# @return [ Document ] A new document.
|
384
|
+
#
|
385
|
+
# @api private
|
386
|
+
def construct_document(attrs = nil, options = {})
|
387
|
+
execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
|
388
|
+
with_callbacks(execute_callbacks) { new(attrs) }
|
389
|
+
end
|
390
|
+
|
299
391
|
# Returns all types to query for when using this class as the base.
|
300
392
|
#
|
301
393
|
# @example Get the types.
|
data/lib/mongoid/equality.rb
CHANGED
@@ -26,9 +26,9 @@ module Mongoid
|
|
26
26
|
# @example Compare for equality.
|
27
27
|
# document == other
|
28
28
|
#
|
29
|
-
# @param [ Document
|
29
|
+
# @param [ Document | Object ] other The other object to compare with.
|
30
30
|
#
|
31
|
-
# @return [ true
|
31
|
+
# @return [ true | false ] True if the ids are equal, false if not.
|
32
32
|
def ==(other)
|
33
33
|
self.class == other.class &&
|
34
34
|
attributes["_id"] == other.attributes["_id"]
|
@@ -39,9 +39,9 @@ module Mongoid
|
|
39
39
|
# @example Compare the classes.
|
40
40
|
# document === other
|
41
41
|
#
|
42
|
-
# @param [ Document
|
42
|
+
# @param [ Document | Object ] other The other object to compare with.
|
43
43
|
#
|
44
|
-
# @return [ true
|
44
|
+
# @return [ true | false ] True if the classes are equal, false if not.
|
45
45
|
def ===(other)
|
46
46
|
if Mongoid.legacy_triple_equals
|
47
47
|
other.class == Class ? self.class === other : self == other
|
@@ -55,9 +55,9 @@ module Mongoid
|
|
55
55
|
# @example Perform equality checking.
|
56
56
|
# document.eql?(other)
|
57
57
|
#
|
58
|
-
# @param [ Document
|
58
|
+
# @param [ Document | Object ] other The object to check against.
|
59
59
|
#
|
60
|
-
# @return [ true
|
60
|
+
# @return [ true | false ] True if equal, false if not.
|
61
61
|
def eql?(other)
|
62
62
|
self == (other)
|
63
63
|
end
|
@@ -68,9 +68,9 @@ module Mongoid
|
|
68
68
|
# @example Compare the classes.
|
69
69
|
# document === other
|
70
70
|
#
|
71
|
-
# @param [ Document
|
71
|
+
# @param [ Document | Object ] other The other object to compare with.
|
72
72
|
#
|
73
|
-
# @return [ true
|
73
|
+
# @return [ true | false ] True if the classes are equal, false if not.
|
74
74
|
def ===(other)
|
75
75
|
if Mongoid.legacy_triple_equals
|
76
76
|
other.class == Class ? self <= other : other.is_a?(self)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module Errors
|
5
|
+
|
6
|
+
# Raised when an attempt to create a collection failed.
|
7
|
+
class CreateCollectionFailure < MongoidError
|
8
|
+
|
9
|
+
# Instantiate the create collection error.
|
10
|
+
#
|
11
|
+
# @param [ String ] collection_name The name of the collection that
|
12
|
+
# Mongoid failed to create.
|
13
|
+
# @param [ Hash ] collection_options The options that were used when
|
14
|
+
# tried to create the collection.
|
15
|
+
# @param [ Mongo::Error::OperationFailure ] error The error raised when
|
16
|
+
# tried to create the collection.
|
17
|
+
#
|
18
|
+
# @api private
|
19
|
+
def initialize(collection_name, collection_options, error)
|
20
|
+
super(
|
21
|
+
compose_message(
|
22
|
+
"create_collection_failure",
|
23
|
+
{
|
24
|
+
collection_name: collection_name,
|
25
|
+
collection_options: collection_options,
|
26
|
+
error: "#{error.class}: #{error.message}"
|
27
|
+
}
|
28
|
+
)
|
29
|
+
)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -19,8 +19,9 @@ module Mongoid
|
|
19
19
|
# DocumentNotFound.new(Person, :ssn => "1234", :name => "Helen")
|
20
20
|
#
|
21
21
|
# @param [ Class ] klass The model class.
|
22
|
-
# @param [ Hash
|
23
|
-
# @param [ Array ] unmatched The unmatched ids, if appropriate
|
22
|
+
# @param [ Hash | Array | Object ] params The attributes or ids.
|
23
|
+
# @param [ Array | Hash ] unmatched The unmatched ids, if appropriate. If
|
24
|
+
# there is a shard key this will be a hash.
|
24
25
|
def initialize(klass, params, unmatched = nil)
|
25
26
|
if !unmatched && !params.is_a?(Hash)
|
26
27
|
unmatched = Array(params) if params
|
@@ -35,7 +36,8 @@ module Mongoid
|
|
35
36
|
searched: searched(params),
|
36
37
|
attributes: params,
|
37
38
|
total: total(params),
|
38
|
-
missing: missing(unmatched)
|
39
|
+
missing: missing(unmatched),
|
40
|
+
shard_key: shard_key(unmatched)
|
39
41
|
}
|
40
42
|
)
|
41
43
|
)
|
@@ -48,12 +50,14 @@ module Mongoid
|
|
48
50
|
# @example Get the missing string.
|
49
51
|
# error.missing(1)
|
50
52
|
#
|
51
|
-
# @param [ Object
|
53
|
+
# @param [ Object | Array ] unmatched The ids that did not match.
|
52
54
|
#
|
53
55
|
# @return [ String ] The missing string.
|
54
56
|
def missing(unmatched)
|
55
57
|
if unmatched.is_a?(::Array)
|
56
58
|
unmatched.join(", ")
|
59
|
+
elsif unmatched.is_a?(::Hash)
|
60
|
+
unmatched[:_id] || unmatched["_id"]
|
57
61
|
else
|
58
62
|
unmatched
|
59
63
|
end
|
@@ -64,7 +68,7 @@ module Mongoid
|
|
64
68
|
# @example Get the searched string.
|
65
69
|
# error.searched(1)
|
66
70
|
#
|
67
|
-
# @param [ Object
|
71
|
+
# @param [ Object | Array ] params The ids that were searched for.
|
68
72
|
#
|
69
73
|
# @return [ String ] The searched string.
|
70
74
|
def searched(params)
|
@@ -80,7 +84,7 @@ module Mongoid
|
|
80
84
|
# @example Get the total.
|
81
85
|
# error.total([ 1, 2, 3 ])
|
82
86
|
#
|
83
|
-
# @param [ Object
|
87
|
+
# @param [ Object | Array ] params What was searched for.
|
84
88
|
#
|
85
89
|
# @return [ Integer ] The total number.
|
86
90
|
def total(params)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module Errors
|
5
|
+
|
6
|
+
# Raised when an attempt to drop a collection failed.
|
7
|
+
class DropCollectionFailure < MongoidError
|
8
|
+
|
9
|
+
# Instantiate the drop collection error.
|
10
|
+
#
|
11
|
+
# @param [ String ] collection_name The name of the collection that
|
12
|
+
# Mongoid failed to drop.
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
def initialize(collection_name, collection_options, error)
|
16
|
+
super(
|
17
|
+
compose_message(
|
18
|
+
"drop_collection_failure",
|
19
|
+
{
|
20
|
+
collection_name: collection_name
|
21
|
+
}
|
22
|
+
)
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module Errors
|
5
|
+
|
6
|
+
# This error is raised when attempting the change the value of an
|
7
|
+
# immutable attribute. For example, the _id attribute is immutable,
|
8
|
+
# and attempting to change it on a document that has already been
|
9
|
+
# persisted will result in this error.
|
10
|
+
class ImmutableAttribute < MongoidError
|
11
|
+
|
12
|
+
# Create the new error.
|
13
|
+
#
|
14
|
+
# @example Create the new error.
|
15
|
+
# ImmutableAttribute.new(:_id, "1234")
|
16
|
+
#
|
17
|
+
# @param [ Symbol | String ] name The name of the attribute.
|
18
|
+
# @param [ Object ] value The attempted set value.
|
19
|
+
def initialize(name, value)
|
20
|
+
super(
|
21
|
+
compose_message("immutable_attribute", { name: name, value: value })
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module Errors
|
5
|
+
|
6
|
+
# This error is raised when a bad async query executor option is attempted
|
7
|
+
# to be set.
|
8
|
+
class InvalidQueryExecutor < MongoidError
|
9
|
+
|
10
|
+
# Create the new error.
|
11
|
+
#
|
12
|
+
# @param [ Symbol | String ] executor The attempted async query executor.
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
def initialize(executor)
|
16
|
+
super(
|
17
|
+
compose_message(
|
18
|
+
"invalid_async_query_executor",
|
19
|
+
{ executor: executor, options: [:immediate, :global_thread_pool] }
|
20
|
+
)
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
# @example Create the new error.
|
13
13
|
# InvalidConfigOption.new(:name, [ :option ])
|
14
14
|
#
|
15
|
-
# @param [ Symbol
|
15
|
+
# @param [ Symbol | String ] name The attempted config option name.
|
16
16
|
def initialize(name)
|
17
17
|
super(
|
18
18
|
compose_message(
|
@@ -13,7 +13,7 @@ module Mongoid
|
|
13
13
|
#
|
14
14
|
# @param [ Mongoid::Association ] association The association for which this
|
15
15
|
# dependency is defined.
|
16
|
-
# @param [ Symbol
|
16
|
+
# @param [ Symbol | String ] invalid_strategy The attempted invalid strategy.
|
17
17
|
# @param [ Array<Symbol> ] valid_strategies The valid strategies.
|
18
18
|
def initialize(association, invalid_strategy, valid_strategies)
|
19
19
|
super(
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module Errors
|
5
|
+
|
6
|
+
# This error is raised when trying to use the setter for a field that starts
|
7
|
+
# with a dollar sign ($) or contains a dot/period (.).
|
8
|
+
class InvalidDotDollarAssignment < MongoidError
|
9
|
+
|
10
|
+
# Create the new error.
|
11
|
+
#
|
12
|
+
# @param [ Class ] klass The class of the document.
|
13
|
+
# @param [ Class ] attr The attribute attempted to be written.
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
def initialize(klass, attr)
|
17
|
+
super(
|
18
|
+
compose_message("invalid_dot_dollar_assignment", { klass: klass, attr: attr })
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -12,14 +12,18 @@ module Mongoid
|
|
12
12
|
# @example Create the error.
|
13
13
|
# InvalidField.new(person, :crazy_method_name)
|
14
14
|
#
|
15
|
+
# @api private
|
16
|
+
#
|
15
17
|
# @param [ Class ] klass The document class.
|
18
|
+
# @param [ Symbol ] field The field name.
|
16
19
|
# @param [ Symbol ] name The method name.
|
17
|
-
def initialize(klass, name)
|
20
|
+
def initialize(klass, field, name)
|
18
21
|
super(
|
19
22
|
compose_message(
|
20
23
|
"invalid_field",
|
21
24
|
{
|
22
25
|
name: name,
|
26
|
+
field: field,
|
23
27
|
origin: origin(klass, name),
|
24
28
|
file: location(klass, name)[0],
|
25
29
|
line: location(klass, name)[1]
|
@@ -38,7 +42,7 @@ module Mongoid
|
|
38
42
|
# @param [ Class ] klass The document class.
|
39
43
|
# @param [ Symbol ] name The method name.
|
40
44
|
#
|
41
|
-
# @return [ Class
|
45
|
+
# @return [ Class | Module ] The originating class or module.
|
42
46
|
def origin(klass, name)
|
43
47
|
klass.instance_method(name).owner
|
44
48
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module Errors
|
5
|
+
|
6
|
+
# This error is raised when trying to define a field using a :type option value
|
7
|
+
# that is not present in the field type mapping.
|
8
|
+
class InvalidFieldType < MongoidError
|
9
|
+
|
10
|
+
# Create the new error.
|
11
|
+
#
|
12
|
+
# @example Instantiate the error.
|
13
|
+
# InvalidFieldType.new('Person', 'first_name', 'stringgy')
|
14
|
+
#
|
15
|
+
# @param [ String ] klass The model class.
|
16
|
+
# @param [ String ] field The field on which the invalid type is used.
|
17
|
+
# @param [ Symbol | String ] type The value of the field :type option.
|
18
|
+
def initialize(klass, field, type)
|
19
|
+
super(
|
20
|
+
compose_message('invalid_field_type',
|
21
|
+
klass: klass, field: field, type_inspection: type.inspect)
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module Errors
|
5
|
+
|
6
|
+
# This error is raised when a bad global executor concurrency option is attempted
|
7
|
+
# to be set.
|
8
|
+
class InvalidGlobalExecutorConcurrency < MongoidError
|
9
|
+
|
10
|
+
# Create the new error.
|
11
|
+
#
|
12
|
+
# @api private
|
13
|
+
def initialize
|
14
|
+
super(
|
15
|
+
compose_message(
|
16
|
+
"invalid_global_executor_concurrency"
|
17
|
+
)
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -38,7 +38,7 @@ module Mongoid
|
|
38
38
|
# @param [ Class ] klass The document class.
|
39
39
|
# @param [ Symbol ] name The method name.
|
40
40
|
#
|
41
|
-
# @return [ Class
|
41
|
+
# @return [ Class | Module ] The originating class or module.
|
42
42
|
def origin(klass, name)
|
43
43
|
klass.instance_method(name).owner
|
44
44
|
end
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
# InvalidRelationOption.new(Person, invalid_option: 'make_me_a_sandwich')
|
13
13
|
#
|
14
14
|
# @param [ Class ] klass The model class.
|
15
|
-
# @param [ String
|
15
|
+
# @param [ String | Symbol ] name The association name.
|
16
16
|
# @param [ Symbol ] option The invalid option.
|
17
17
|
# @param [ Array<Symbol> ] valid_options The valid option.
|
18
18
|
def initialize(klass, name, option, valid_options)
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
# @example Create the error.
|
13
13
|
# InvalidSessionUse.new(:invalid_session_use)
|
14
14
|
#
|
15
|
-
# @param [ :invalid_session_use
|
15
|
+
# @param [ :invalid_session_use | :invalid_session_nesting ] error_type The type of session misuse.
|
16
16
|
def initialize(error_type)
|
17
17
|
super(compose_message(error_type.to_s))
|
18
18
|
end
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
# InvalidStorageOptions.new(Person, invalid_option: 'name')
|
13
13
|
#
|
14
14
|
# @param [ Class ] klass The model class.
|
15
|
-
# @param [ Hash
|
15
|
+
# @param [ Hash | String | Symbol ] options The provided options.
|
16
16
|
def initialize(klass, options)
|
17
17
|
super(
|
18
18
|
compose_message(
|
@@ -53,7 +53,7 @@ module Mongoid
|
|
53
53
|
# @example Create the problem.
|
54
54
|
# error.problem("error", {})
|
55
55
|
#
|
56
|
-
# @param [ String
|
56
|
+
# @param [ String | Symbol ] key The error key.
|
57
57
|
# @param [ Hash ] attributes The attributes to interpolate.
|
58
58
|
#
|
59
59
|
# @return [ String ] The problem.
|
@@ -66,7 +66,7 @@ module Mongoid
|
|
66
66
|
# @example Create the summary.
|
67
67
|
# error.summary("error", {})
|
68
68
|
#
|
69
|
-
# @param [ String
|
69
|
+
# @param [ String | Symbol ] key The error key.
|
70
70
|
# @param [ Hash ] attributes The attributes to interpolate.
|
71
71
|
#
|
72
72
|
# @return [ String ] The summary.
|
@@ -79,7 +79,7 @@ module Mongoid
|
|
79
79
|
# @example Create the resolution.
|
80
80
|
# error.resolution("error", {})
|
81
81
|
#
|
82
|
-
# @param [ String
|
82
|
+
# @param [ String | Symbol ] key The error key.
|
83
83
|
# @param [ Hash ] attributes The attributes to interpolate.
|
84
84
|
#
|
85
85
|
# @return [ String ] The resolution.
|
@@ -13,7 +13,7 @@ module Mongoid
|
|
13
13
|
# NestedAttributesMetadataNotFound.new(klass, name)
|
14
14
|
#
|
15
15
|
# @param [ Class ] klass The class of the document.
|
16
|
-
# @param [ Symbol
|
16
|
+
# @param [ Symbol | String ] name The name of the association
|
17
17
|
def initialize(klass, name)
|
18
18
|
super(
|
19
19
|
compose_message(
|
@@ -11,7 +11,7 @@ module Mongoid
|
|
11
11
|
# @example Create the new error.
|
12
12
|
# NoClientDatabase.new(:default, {}})
|
13
13
|
#
|
14
|
-
# @param [ Symbol
|
14
|
+
# @param [ Symbol | String ] name The db config key.
|
15
15
|
# @param [ Hash ] config The hash configuration options.
|
16
16
|
def initialize(name, config)
|
17
17
|
super(
|