mongoid 7.5.4 → 8.1.9
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 +32 -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 +11 -6
- 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 +48 -39
- 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 +135 -36
- data/lib/mongoid/equality.rb +9 -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 +187 -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 +9 -2
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +3 -4
- data/lib/mongoid/traversable.rb +41 -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 +26 -3
- 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/association_spec.rb +60 -0
- 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/readonly_spec.rb +19 -0
- 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 +107 -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 +59 -41
- data/spec/mongoid/equality_spec.rb +6 -0
- 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 +904 -22
- data/spec/mongoid/interceptable_spec_models.rb +189 -22
- 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/created_spec.rb +23 -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 +98 -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.
|
@@ -158,7 +133,14 @@ module Mongoid
|
|
158
133
|
#
|
159
134
|
# @return [ Hash ] A hash of all attributes in the hierarchy.
|
160
135
|
def as_document
|
161
|
-
|
136
|
+
attrs = as_attributes
|
137
|
+
|
138
|
+
# legacy attributes have a tendency to leak internal state via
|
139
|
+
# `as_document`; we have to deep_dup the attributes here to prevent
|
140
|
+
# that.
|
141
|
+
attrs = attrs.deep_dup if Mongoid.legacy_attributes
|
142
|
+
|
143
|
+
BSON::Document.new(attrs)
|
162
144
|
end
|
163
145
|
|
164
146
|
# Calls #as_json on the document with additional, Mongoid-specific options.
|
@@ -175,14 +157,14 @@ module Mongoid
|
|
175
157
|
#
|
176
158
|
# @param [ Hash ] options The options.
|
177
159
|
#
|
178
|
-
# @option options [ true
|
160
|
+
# @option options [ true | false ] :compact (Deprecated) Whether to include fields
|
179
161
|
# with nil values in the json document.
|
180
162
|
#
|
181
163
|
# @return [ Hash ] The document as json.
|
182
164
|
def as_json(options = nil)
|
183
165
|
rv = super
|
184
166
|
if options && options[:compact]
|
185
|
-
Mongoid.
|
167
|
+
Mongoid::Warnings.warn_as_json_compact_deprecated
|
186
168
|
rv = rv.compact
|
187
169
|
end
|
188
170
|
rv
|
@@ -230,6 +212,47 @@ module Mongoid
|
|
230
212
|
|
231
213
|
private
|
232
214
|
|
215
|
+
# Does the construction of a document.
|
216
|
+
#
|
217
|
+
# @param [ Hash ] attrs The attributes to set up the document with.
|
218
|
+
# @param [ Hash ] options The options to use.
|
219
|
+
#
|
220
|
+
# @option options [ true | false ] :execute_callbacks Flag specifies
|
221
|
+
# whether callbacks should be run.
|
222
|
+
#
|
223
|
+
# @return [ Document ] A new document.
|
224
|
+
#
|
225
|
+
# @note A Ruby 2.x bug prevents the options hash from being keyword
|
226
|
+
# arguments. Once we drop support for Ruby 2.x, we can reimplement
|
227
|
+
# the options hash as keyword arguments.
|
228
|
+
# See https://bugs.ruby-lang.org/issues/15753
|
229
|
+
#
|
230
|
+
# @api private
|
231
|
+
def construct_document(attrs = nil, options = {})
|
232
|
+
execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
|
233
|
+
|
234
|
+
@__parent = nil
|
235
|
+
_building do
|
236
|
+
@new_record = true
|
237
|
+
@attributes ||= {}
|
238
|
+
apply_pre_processed_defaults
|
239
|
+
apply_default_scoping
|
240
|
+
process_attributes(attrs) do
|
241
|
+
yield(self) if block_given?
|
242
|
+
end
|
243
|
+
@attributes_before_type_cast = @attributes.merge(attributes_before_type_cast)
|
244
|
+
|
245
|
+
if execute_callbacks
|
246
|
+
apply_post_processed_defaults
|
247
|
+
run_callbacks(:initialize) unless _initialize_callbacks.empty?
|
248
|
+
else
|
249
|
+
pending_callbacks << :apply_post_processed_defaults
|
250
|
+
pending_callbacks << :initialize
|
251
|
+
end
|
252
|
+
end
|
253
|
+
self
|
254
|
+
end
|
255
|
+
|
233
256
|
# Returns the logger
|
234
257
|
#
|
235
258
|
# @return [ Logger ] The configured logger or a default Logger instance.
|
@@ -247,6 +270,14 @@ module Mongoid
|
|
247
270
|
@model_cache_key ||= self.class.model_name.cache_key
|
248
271
|
end
|
249
272
|
|
273
|
+
# Returns a hash of the attributes.
|
274
|
+
#
|
275
|
+
# Note this method modifies the attributes hash that already exists on the
|
276
|
+
# class and returns it. This means that the hash returned by this method
|
277
|
+
# refers to the same hash as calling #attributes on the instance. See
|
278
|
+
# MONGOID-4476 for an explanation on how this is used.
|
279
|
+
#
|
280
|
+
# @return [ Hash ] The attributes hash.
|
250
281
|
def as_attributes
|
251
282
|
return attributes if frozen?
|
252
283
|
embedded_relations.each_pair do |name, meta|
|
@@ -266,6 +297,20 @@ module Mongoid
|
|
266
297
|
|
267
298
|
module ClassMethods
|
268
299
|
|
300
|
+
# Indicate whether callbacks should be invoked by default or not,
|
301
|
+
# within the block. Callbacks may always be explicitly invoked by passing
|
302
|
+
# `execute_callbacks: true` where available.
|
303
|
+
#
|
304
|
+
# @params execute_callbacks [ true | false ] Whether callbacks should be
|
305
|
+
# suppressed or not.
|
306
|
+
def with_callbacks(execute_callbacks)
|
307
|
+
saved, Threaded.execute_callbacks =
|
308
|
+
Threaded.execute_callbacks?, execute_callbacks
|
309
|
+
yield
|
310
|
+
ensure
|
311
|
+
Threaded.execute_callbacks = saved
|
312
|
+
end
|
313
|
+
|
269
314
|
# Instantiate a new object, only when loaded from the database or when
|
270
315
|
# the attributes have already been typecast.
|
271
316
|
#
|
@@ -275,11 +320,33 @@ module Mongoid
|
|
275
320
|
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
276
321
|
# @param [ Integer ] selected_fields The selected fields from the
|
277
322
|
# criteria.
|
323
|
+
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
324
|
+
# should be run.
|
278
325
|
#
|
279
326
|
# @return [ Document ] A new document.
|
327
|
+
def instantiate(attrs = nil, selected_fields = nil, &block)
|
328
|
+
instantiate_document(attrs, selected_fields, &block)
|
329
|
+
end
|
330
|
+
|
331
|
+
# Instantiate the document.
|
332
|
+
#
|
333
|
+
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
334
|
+
# @param [ Integer ] selected_fields The selected fields from the
|
335
|
+
# criteria.
|
336
|
+
# @param [ Hash ] options The options to use.
|
337
|
+
#
|
338
|
+
# @option options [ true | false ] :execute_callbacks Flag specifies
|
339
|
+
# whether callbacks should be run.
|
340
|
+
#
|
341
|
+
# @return [ Document ] A new document.
|
342
|
+
#
|
343
|
+
# @note A Ruby 2.x bug prevents the options hash from being keyword
|
344
|
+
# arguments. Once we drop support for Ruby 2.x, we can reimplement
|
345
|
+
# the options hash as keyword arguments.
|
280
346
|
#
|
281
347
|
# @api private
|
282
|
-
def
|
348
|
+
def instantiate_document(attrs = nil, selected_fields = nil, options = {})
|
349
|
+
execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
|
283
350
|
attributes = if Mongoid.legacy_attributes
|
284
351
|
attrs
|
285
352
|
else
|
@@ -289,13 +356,45 @@ module Mongoid
|
|
289
356
|
doc = allocate
|
290
357
|
doc.__selected_fields = selected_fields
|
291
358
|
doc.instance_variable_set(:@attributes, attributes)
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
doc.
|
359
|
+
# TODO: remove the to_h when the legacy_attributes flag is removed.
|
360
|
+
# The to_h ensures that we don't accidentally make attributes_before_type_cast
|
361
|
+
# a BSON::Document.
|
362
|
+
doc.instance_variable_set(:@attributes_before_type_cast, attributes&.to_h.dup)
|
363
|
+
|
364
|
+
if execute_callbacks
|
365
|
+
doc.apply_defaults
|
366
|
+
yield(doc) if block_given?
|
367
|
+
doc.run_callbacks(:find) unless doc._find_callbacks.empty?
|
368
|
+
doc.run_callbacks(:initialize) unless doc._initialize_callbacks.empty?
|
369
|
+
else
|
370
|
+
yield(doc) if block_given?
|
371
|
+
doc.pending_callbacks += [:apply_defaults, :find, :initialize]
|
372
|
+
end
|
373
|
+
|
296
374
|
doc
|
297
375
|
end
|
298
376
|
|
377
|
+
# Allocates and constructs a document.
|
378
|
+
#
|
379
|
+
# @param [ Hash ] attrs The attributes to set up the document with.
|
380
|
+
# @param [ Hash ] options The options to use.
|
381
|
+
#
|
382
|
+
# @option options [ true | false ] :execute_callbacks Flag specifies
|
383
|
+
# whether callbacks should be run.
|
384
|
+
#
|
385
|
+
# @note A Ruby 2.x bug prevents the options hash from being keyword
|
386
|
+
# arguments. Once we drop support for Ruby 2.x, we can reimplement
|
387
|
+
# the options hash as keyword arguments.
|
388
|
+
# See https://bugs.ruby-lang.org/issues/15753
|
389
|
+
#
|
390
|
+
# @return [ Document ] A new document.
|
391
|
+
#
|
392
|
+
# @api private
|
393
|
+
def construct_document(attrs = nil, options = {})
|
394
|
+
execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
|
395
|
+
with_callbacks(execute_callbacks) { new(attrs) }
|
396
|
+
end
|
397
|
+
|
299
398
|
# Returns all types to query for when using this class as the base.
|
300
399
|
#
|
301
400
|
# @example Get the types.
|
data/lib/mongoid/equality.rb
CHANGED
@@ -17,6 +17,7 @@ module Mongoid
|
|
17
17
|
#
|
18
18
|
# @return [ Integer ] -1, 0, 1.
|
19
19
|
def <=>(other)
|
20
|
+
return super unless other.is_a?(Mongoid::Equality)
|
20
21
|
attributes["_id"].to_s <=> other.attributes["_id"].to_s
|
21
22
|
end
|
22
23
|
|
@@ -26,9 +27,9 @@ module Mongoid
|
|
26
27
|
# @example Compare for equality.
|
27
28
|
# document == other
|
28
29
|
#
|
29
|
-
# @param [ Document
|
30
|
+
# @param [ Document | Object ] other The other object to compare with.
|
30
31
|
#
|
31
|
-
# @return [ true
|
32
|
+
# @return [ true | false ] True if the ids are equal, false if not.
|
32
33
|
def ==(other)
|
33
34
|
self.class == other.class &&
|
34
35
|
attributes["_id"] == other.attributes["_id"]
|
@@ -39,9 +40,9 @@ module Mongoid
|
|
39
40
|
# @example Compare the classes.
|
40
41
|
# document === other
|
41
42
|
#
|
42
|
-
# @param [ Document
|
43
|
+
# @param [ Document | Object ] other The other object to compare with.
|
43
44
|
#
|
44
|
-
# @return [ true
|
45
|
+
# @return [ true | false ] True if the classes are equal, false if not.
|
45
46
|
def ===(other)
|
46
47
|
if Mongoid.legacy_triple_equals
|
47
48
|
other.class == Class ? self.class === other : self == other
|
@@ -55,9 +56,9 @@ module Mongoid
|
|
55
56
|
# @example Perform equality checking.
|
56
57
|
# document.eql?(other)
|
57
58
|
#
|
58
|
-
# @param [ Document
|
59
|
+
# @param [ Document | Object ] other The object to check against.
|
59
60
|
#
|
60
|
-
# @return [ true
|
61
|
+
# @return [ true | false ] True if equal, false if not.
|
61
62
|
def eql?(other)
|
62
63
|
self == (other)
|
63
64
|
end
|
@@ -68,9 +69,9 @@ module Mongoid
|
|
68
69
|
# @example Compare the classes.
|
69
70
|
# document === other
|
70
71
|
#
|
71
|
-
# @param [ Document
|
72
|
+
# @param [ Document | Object ] other The other object to compare with.
|
72
73
|
#
|
73
|
-
# @return [ true
|
74
|
+
# @return [ true | false ] True if the classes are equal, false if not.
|
74
75
|
def ===(other)
|
75
76
|
if Mongoid.legacy_triple_equals
|
76
77
|
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.
|