mongoid 7.2.1 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +20 -20
- data/LICENSE +1 -1
- data/README.md +7 -12
- data/Rakefile +58 -1
- data/lib/config/locales/en.yml +191 -60
- data/lib/mongoid/association/accessors.rb +67 -53
- data/lib/mongoid/association/bindable.rb +77 -31
- data/lib/mongoid/association/builders.rb +8 -14
- data/lib/mongoid/association/constrainable.rb +2 -5
- data/lib/mongoid/association/depending.rb +20 -12
- data/lib/mongoid/association/eager.rb +160 -0
- data/lib/mongoid/association/eager_loadable.rb +41 -11
- data/lib/mongoid/association/embedded/batchable.rb +63 -52
- data/lib/mongoid/association/embedded/cyclic.rb +4 -12
- data/lib/mongoid/association/embedded/eager.rb +23 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +29 -13
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +3 -5
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +25 -23
- data/lib/mongoid/association/embedded/embedded_in.rb +11 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -9
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +5 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +226 -203
- data/lib/mongoid/association/embedded/embeds_many.rb +3 -33
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +3 -9
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +20 -8
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +131 -42
- data/lib/mongoid/association/embedded/embeds_one.rb +4 -30
- data/lib/mongoid/association/embedded.rb +2 -1
- data/lib/mongoid/association/macros.rb +47 -16
- data/lib/mongoid/association/many.rb +12 -24
- data/lib/mongoid/association/marshalable.rb +4 -5
- data/lib/mongoid/association/nested/many.rb +14 -19
- data/lib/mongoid/association/nested/nested_buildable.rb +36 -13
- data/lib/mongoid/association/nested/one.rb +54 -26
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +3 -11
- data/lib/mongoid/association/options.rb +18 -44
- data/lib/mongoid/association/proxy.rb +49 -42
- data/lib/mongoid/association/referenced/auto_save.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -7
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +6 -6
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -2
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +23 -32
- data/lib/mongoid/association/referenced/belongs_to.rb +13 -37
- data/lib/mongoid/association/referenced/counter_cache.rb +18 -26
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +15 -8
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +1 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +191 -123
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -42
- data/lib/mongoid/association/referenced/has_many/binding.rb +1 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +1 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +471 -496
- data/lib/mongoid/association/referenced/has_many/proxy.rb +182 -179
- data/lib/mongoid/association/referenced/has_many.rb +17 -43
- data/lib/mongoid/association/referenced/has_one/binding.rb +1 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/eager.rb +3 -4
- data/lib/mongoid/association/referenced/has_one/proxy.rb +38 -41
- data/lib/mongoid/association/referenced/has_one.rb +17 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -27
- data/lib/mongoid/association/referenced.rb +1 -1
- data/lib/mongoid/association/reflections.rb +9 -9
- data/lib/mongoid/association/relatable.rb +55 -74
- data/lib/mongoid/association.rb +10 -22
- data/lib/mongoid/atomic/modifiers.rb +7 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +20 -5
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -5
- data/lib/mongoid/atomic/paths/embedded.rb +1 -3
- data/lib/mongoid/atomic/paths/root.rb +1 -5
- data/lib/mongoid/atomic/paths.rb +1 -1
- data/lib/mongoid/atomic.rb +39 -86
- data/lib/mongoid/atomic_update_preparer.rb +88 -0
- data/lib/mongoid/attributes/dynamic.rb +5 -21
- data/lib/mongoid/attributes/embedded.rb +34 -0
- data/lib/mongoid/attributes/nested.rb +9 -13
- data/lib/mongoid/attributes/processing.rb +43 -28
- data/lib/mongoid/attributes/projector.rb +120 -0
- data/lib/mongoid/attributes/readonly.rb +4 -8
- data/lib/mongoid/attributes.rb +85 -89
- data/lib/mongoid/cacheable.rb +5 -9
- data/lib/mongoid/changeable.rb +183 -97
- data/lib/mongoid/clients/factory.rb +58 -15
- data/lib/mongoid/clients/options.rb +117 -8
- data/lib/mongoid/clients/sessions.rb +246 -84
- data/lib/mongoid/clients/storage_options.rb +37 -11
- data/lib/mongoid/clients/validators/storage.rb +4 -24
- data/lib/mongoid/clients/validators.rb +1 -1
- data/lib/mongoid/clients.rb +37 -14
- data/lib/mongoid/collection_configurable.rb +59 -0
- data/lib/mongoid/composable.rb +7 -7
- data/lib/mongoid/config/defaults.rb +40 -0
- data/lib/mongoid/config/encryption.rb +213 -0
- data/lib/mongoid/config/environment.rb +25 -5
- data/lib/mongoid/config/introspection.rb +152 -0
- data/lib/mongoid/config/options.rb +11 -14
- data/lib/mongoid/config/validators/async_query_executor.rb +34 -0
- data/lib/mongoid/config/validators/client.rb +7 -23
- data/lib/mongoid/config/validators/option.rb +1 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +183 -46
- data/lib/mongoid/contextual/aggregable/memory.rb +38 -26
- data/lib/mongoid/contextual/aggregable/mongo.rb +26 -32
- data/lib/mongoid/contextual/aggregable/none.rb +66 -0
- data/lib/mongoid/contextual/aggregable.rb +18 -0
- data/lib/mongoid/contextual/atomic.rb +97 -30
- data/lib/mongoid/contextual/command.rb +3 -5
- data/lib/mongoid/contextual/map_reduce.rb +8 -33
- data/lib/mongoid/contextual/memory.rb +396 -89
- data/lib/mongoid/contextual/mongo/documents_loader.rb +178 -0
- data/lib/mongoid/contextual/mongo.rb +640 -311
- data/lib/mongoid/contextual/none.rb +244 -30
- data/lib/mongoid/contextual/queryable.rb +5 -4
- data/lib/mongoid/contextual.rb +18 -7
- data/lib/mongoid/copyable.rb +34 -14
- data/lib/mongoid/criteria/findable.rb +52 -22
- data/lib/mongoid/criteria/includable.rb +31 -34
- data/lib/mongoid/criteria/inspectable.rb +4 -3
- data/lib/mongoid/criteria/marshalable.rb +14 -7
- data/lib/mongoid/criteria/modifiable.rb +5 -19
- data/lib/mongoid/criteria/options.rb +1 -3
- data/lib/mongoid/criteria/permission.rb +6 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +3 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +1 -25
- data/lib/mongoid/criteria/queryable/extensions/array.rb +6 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -9
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -7
- data/lib/mongoid/criteria/queryable/extensions/date.rb +10 -11
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +8 -7
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +2 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +48 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -13
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +19 -34
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +6 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +8 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -5
- data/lib/mongoid/criteria/queryable/key.rb +15 -18
- data/lib/mongoid/criteria/queryable/macroable.rb +1 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +69 -50
- data/lib/mongoid/criteria/queryable/optional.rb +12 -62
- data/lib/mongoid/criteria/queryable/options.rb +3 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +2 -14
- data/lib/mongoid/criteria/queryable/selectable.rb +87 -124
- data/lib/mongoid/criteria/queryable/selector.rb +96 -25
- data/lib/mongoid/criteria/queryable/smash.rb +41 -18
- data/lib/mongoid/criteria/queryable/storable.rb +14 -9
- data/lib/mongoid/criteria/queryable.rb +12 -13
- data/lib/mongoid/criteria/scopable.rb +32 -21
- data/lib/mongoid/criteria/translator.rb +46 -0
- data/lib/mongoid/criteria.rb +60 -109
- data/lib/mongoid/deprecable.rb +38 -0
- data/lib/mongoid/deprecation.rb +29 -0
- data/lib/mongoid/document.rb +263 -173
- data/lib/mongoid/encryptable.rb +53 -0
- data/lib/mongoid/equality.rb +22 -25
- data/lib/mongoid/errors/ambiguous_relationship.rb +3 -5
- data/lib/mongoid/errors/attribute_not_loaded.rb +34 -0
- data/lib/mongoid/errors/callback.rb +1 -3
- data/lib/mongoid/errors/create_collection_failure.rb +34 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +1 -1
- data/lib/mongoid/errors/delete_restriction.rb +9 -12
- data/lib/mongoid/errors/document_not_destroyed.rb +3 -7
- data/lib/mongoid/errors/document_not_found.rb +34 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +28 -0
- data/lib/mongoid/errors/empty_config_file.rb +26 -0
- data/lib/mongoid/errors/immutable_attribute.rb +27 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +26 -0
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +33 -0
- data/lib/mongoid/errors/invalid_collection.rb +1 -1
- data/lib/mongoid/errors/invalid_config_file.rb +26 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +6 -5
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +27 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_field.rb +7 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_field_option.rb +1 -3
- data/lib/mongoid/errors/invalid_field_type.rb +27 -0
- data/lib/mongoid/errors/invalid_find.rb +1 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +23 -0
- data/lib/mongoid/errors/invalid_includes.rb +1 -3
- data/lib/mongoid/errors/invalid_index.rb +1 -3
- data/lib/mongoid/errors/invalid_options.rb +1 -3
- data/lib/mongoid/errors/invalid_path.rb +1 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +1 -5
- data/lib/mongoid/errors/invalid_query.rb +1 -1
- data/lib/mongoid/errors/invalid_relation.rb +2 -8
- data/lib/mongoid/errors/invalid_relation_option.rb +2 -4
- data/lib/mongoid/errors/invalid_scope.rb +1 -3
- data/lib/mongoid/errors/invalid_session_nesting.rb +17 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +1 -2
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -4
- data/lib/mongoid/errors/invalid_time.rb +1 -3
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +17 -0
- data/lib/mongoid/errors/inverse_not_found.rb +1 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -3
- data/lib/mongoid/errors/mixed_relations.rb +1 -3
- data/lib/mongoid/errors/mongoid_error.rb +8 -16
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +2 -4
- data/lib/mongoid/errors/no_client_config.rb +1 -3
- data/lib/mongoid/errors/no_client_database.rb +2 -4
- data/lib/mongoid/errors/no_client_hosts.rb +2 -4
- data/lib/mongoid/errors/no_clients_config.rb +1 -3
- data/lib/mongoid/errors/no_default_client.rb +1 -3
- data/lib/mongoid/errors/no_environment.rb +1 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -3
- data/lib/mongoid/errors/no_metadata.rb +1 -3
- data/lib/mongoid/errors/no_parent.rb +1 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -4
- data/lib/mongoid/errors/readonly_document.rb +2 -6
- data/lib/mongoid/errors/rollback.rb +15 -0
- data/lib/mongoid/errors/scope_overwrite.rb +1 -1
- data/lib/mongoid/errors/sessions_not_supported.rb +17 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -2
- data/lib/mongoid/errors/transaction_error.rb +25 -0
- data/lib/mongoid/errors/transactions_not_supported.rb +17 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -4
- data/lib/mongoid/errors/unknown_model.rb +1 -3
- data/lib/mongoid/errors/unsaved_document.rb +2 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -3
- data/lib/mongoid/errors/validations.rb +1 -1
- data/lib/mongoid/errors.rb +18 -5
- data/lib/mongoid/evolvable.rb +2 -4
- data/lib/mongoid/extensions/array.rb +20 -58
- data/lib/mongoid/extensions/big_decimal.rb +44 -24
- data/lib/mongoid/extensions/binary.rb +45 -0
- data/lib/mongoid/extensions/boolean.rb +11 -6
- data/lib/mongoid/extensions/date.rb +31 -29
- data/lib/mongoid/extensions/date_time.rb +5 -16
- data/lib/mongoid/extensions/decimal128.rb +3 -5
- data/lib/mongoid/extensions/false_class.rb +8 -10
- data/lib/mongoid/extensions/float.rb +11 -12
- data/lib/mongoid/extensions/hash.rb +28 -148
- data/lib/mongoid/extensions/integer.rb +13 -14
- data/lib/mongoid/extensions/module.rb +5 -5
- data/lib/mongoid/extensions/nil_class.rb +5 -7
- data/lib/mongoid/extensions/object.rb +32 -81
- data/lib/mongoid/extensions/object_id.rb +3 -7
- data/lib/mongoid/extensions/range.rb +47 -24
- data/lib/mongoid/extensions/raw_value.rb +34 -0
- data/lib/mongoid/extensions/regexp.rb +14 -7
- data/lib/mongoid/extensions/set.rb +24 -13
- data/lib/mongoid/extensions/string.rb +30 -62
- data/lib/mongoid/extensions/symbol.rb +9 -22
- data/lib/mongoid/extensions/time.rb +30 -40
- data/lib/mongoid/extensions/time_with_zone.rb +18 -11
- data/lib/mongoid/extensions/true_class.rb +8 -10
- data/lib/mongoid/extensions.rb +3 -20
- data/lib/mongoid/factory.rb +178 -37
- data/lib/mongoid/fields/encrypted.rb +48 -0
- data/lib/mongoid/fields/foreign_key.rb +39 -27
- data/lib/mongoid/fields/localized.rb +25 -15
- data/lib/mongoid/fields/standard.rb +22 -40
- data/lib/mongoid/fields/validators/macro.rb +6 -19
- data/lib/mongoid/fields/validators.rb +1 -1
- data/lib/mongoid/fields.rb +354 -76
- data/lib/mongoid/findable.rb +62 -22
- data/lib/mongoid/indexable/specification.rb +55 -34
- data/lib/mongoid/indexable/validators/options.rb +7 -9
- data/lib/mongoid/indexable.rb +2 -18
- data/lib/mongoid/inspectable.rb +34 -11
- data/lib/mongoid/interceptable.rb +197 -41
- data/lib/mongoid/loadable.rb +83 -0
- data/lib/mongoid/loggable.rb +1 -9
- data/lib/mongoid/matchable.rb +2 -6
- data/lib/mongoid/matcher/all.rb +15 -0
- data/lib/mongoid/matcher/and.rb +14 -0
- data/lib/mongoid/matcher/bits.rb +60 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +41 -0
- data/lib/mongoid/matcher/bits_all_set.rb +41 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +41 -0
- data/lib/mongoid/matcher/bits_any_set.rb +41 -0
- data/lib/mongoid/matcher/elem_match.rb +17 -1
- data/lib/mongoid/matcher/elem_match_expression.rb +14 -2
- data/lib/mongoid/matcher/eq.rb +15 -0
- data/lib/mongoid/matcher/eq_impl.rb +54 -2
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +18 -1
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +22 -14
- data/lib/mongoid/matcher/expression_operator.rb +14 -0
- data/lib/mongoid/matcher/field_expression.rb +19 -5
- data/lib/mongoid/matcher/field_operator.rb +30 -0
- data/lib/mongoid/matcher/gt.rb +15 -0
- data/lib/mongoid/matcher/gte.rb +15 -0
- data/lib/mongoid/matcher/in.rb +15 -0
- data/lib/mongoid/matcher/lt.rb +15 -0
- data/lib/mongoid/matcher/lte.rb +15 -0
- data/lib/mongoid/matcher/mod.rb +33 -0
- data/lib/mongoid/matcher/ne.rb +15 -0
- data/lib/mongoid/matcher/nin.rb +15 -0
- data/lib/mongoid/matcher/nor.rb +14 -0
- data/lib/mongoid/matcher/not.rb +16 -0
- data/lib/mongoid/matcher/or.rb +14 -0
- data/lib/mongoid/matcher/regex.rb +24 -0
- data/lib/mongoid/matcher/size.rb +16 -0
- data/lib/mongoid/matcher/type.rb +124 -0
- data/lib/mongoid/matcher.rb +59 -52
- data/lib/mongoid/persistable/creatable.rb +25 -29
- data/lib/mongoid/persistable/deletable.rb +10 -23
- data/lib/mongoid/persistable/destroyable.rb +37 -11
- data/lib/mongoid/persistable/incrementable.rb +2 -6
- data/lib/mongoid/persistable/logical.rb +1 -5
- data/lib/mongoid/persistable/maxable.rb +37 -0
- data/lib/mongoid/persistable/minable.rb +37 -0
- data/lib/mongoid/persistable/multipliable.rb +36 -0
- data/lib/mongoid/persistable/poppable.rb +1 -5
- data/lib/mongoid/persistable/pullable.rb +1 -7
- data/lib/mongoid/persistable/pushable.rb +1 -7
- data/lib/mongoid/persistable/renamable.rb +1 -5
- data/lib/mongoid/persistable/savable.rb +14 -8
- data/lib/mongoid/persistable/settable.rb +1 -5
- data/lib/mongoid/persistable/unsettable.rb +3 -7
- data/lib/mongoid/persistable/updatable.rb +114 -28
- data/lib/mongoid/persistable/upsertable.rb +33 -8
- data/lib/mongoid/persistable.rb +17 -27
- data/lib/mongoid/persistence_context.rb +111 -43
- data/lib/mongoid/positional.rb +1 -5
- data/lib/mongoid/railtie.rb +23 -15
- data/lib/mongoid/railties/bson_object_id_serializer.rb +39 -0
- data/lib/mongoid/railties/console_sandbox.rb +42 -0
- data/lib/mongoid/railties/controller_runtime.rb +21 -6
- data/lib/mongoid/railties/database.rake +19 -2
- data/lib/mongoid/reloadable.rb +45 -42
- data/lib/mongoid/scopable.rb +25 -53
- data/lib/mongoid/search_indexable.rb +167 -0
- data/lib/mongoid/selectable.rb +6 -17
- data/lib/mongoid/serializable.rb +11 -21
- data/lib/mongoid/shardable.rb +50 -16
- data/lib/mongoid/stateful.rb +66 -22
- data/lib/mongoid/stringified_symbol.rb +19 -7
- data/lib/mongoid/tasks/database.rake +25 -0
- data/lib/mongoid/tasks/database.rb +84 -8
- data/lib/mongoid/tasks/encryption.rake +59 -0
- data/lib/mongoid/tasks/encryption.rb +108 -0
- data/lib/mongoid/threaded/lifecycle.rb +6 -26
- data/lib/mongoid/threaded.rb +131 -92
- data/lib/mongoid/timestamps/created/short.rb +1 -1
- data/lib/mongoid/timestamps/created.rb +4 -4
- data/lib/mongoid/timestamps/short.rb +1 -1
- data/lib/mongoid/timestamps/timeless.rb +29 -7
- data/lib/mongoid/timestamps/updated/short.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +3 -5
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/touchable.rb +155 -29
- data/lib/mongoid/traversable.rb +180 -125
- data/lib/mongoid/utils.rb +52 -0
- data/lib/mongoid/validatable/associated.rb +97 -21
- data/lib/mongoid/validatable/format.rb +1 -1
- data/lib/mongoid/validatable/length.rb +1 -1
- data/lib/mongoid/validatable/localizable.rb +2 -4
- data/lib/mongoid/validatable/macros.rb +10 -14
- data/lib/mongoid/validatable/presence.rb +7 -13
- data/lib/mongoid/validatable/queryable.rb +9 -3
- data/lib/mongoid/validatable/uniqueness.rb +26 -39
- data/lib/mongoid/validatable.rb +20 -29
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/warnings.rb +37 -0
- data/lib/mongoid.rb +56 -22
- data/lib/rails/generators/mongoid/config/config_generator.rb +25 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +25 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +44 -64
- data/lib/rails/generators/mongoid/model/model_generator.rb +4 -1
- data/lib/rails/generators/mongoid_generator.rb +13 -1
- data/lib/rails/mongoid.rb +4 -32
- data/spec/config/mongoid.yml +16 -1
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/active_job_spec.rb +32 -0
- data/spec/integration/app_spec.rb +180 -89
- data/spec/integration/associations/belongs_to_spec.rb +19 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +58 -0
- data/spec/integration/associations/embedded_spec.rb +90 -7
- data/spec/integration/associations/embeds_many_spec.rb +197 -1
- data/spec/integration/associations/embeds_one_spec.rb +19 -1
- data/spec/integration/associations/foreign_key_spec.rb +10 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +1 -1
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +62 -0
- data/spec/integration/associations/has_many_spec.rb +1 -1
- data/spec/integration/associations/has_one_spec.rb +145 -1
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +1 -1
- data/spec/integration/associations/reverse_population_spec.rb +1 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +1 -1
- data/spec/integration/associations/scope_option_spec.rb +102 -0
- data/spec/integration/atomic/modifiers_spec.rb +1 -1
- data/spec/integration/bson_regexp_raw_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +147 -3
- data/spec/integration/callbacks_spec.rb +398 -8
- data/spec/integration/contextual/empty_spec.rb +142 -0
- data/spec/integration/criteria/alias_query_spec.rb +98 -0
- data/spec/integration/criteria/date_field_spec.rb +2 -2
- data/spec/integration/criteria/default_scope_spec.rb +52 -0
- data/spec/integration/criteria/logical_spec.rb +12 -0
- data/spec/integration/criteria/range_spec.rb +358 -0
- data/spec/integration/criteria/raw_value_spec.rb +525 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +126 -15
- data/spec/integration/discriminator_key_spec.rb +119 -81
- data/spec/integration/discriminator_value_spec.rb +1 -1
- data/spec/integration/document_spec.rb +31 -1
- data/spec/integration/dots_and_dollars_spec.rb +278 -0
- data/spec/integration/encryption_spec.rb +100 -0
- data/spec/integration/i18n_fallbacks_spec.rb +10 -52
- data/spec/integration/matcher_examples_spec.rb +21 -14
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +144 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +46 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +96 -0
- data/spec/integration/matcher_operator_data/in.yml +16 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/size.yml +0 -3
- data/spec/integration/matcher_operator_data/type.yml +64 -0
- data/spec/integration/matcher_operator_data/type_array.yml +15 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +37 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +26 -3
- data/spec/integration/matcher_spec.rb +50 -1
- data/spec/integration/persistence/range_field_spec.rb +351 -0
- data/spec/integration/server_query_spec.rb +1 -1
- data/spec/integration/shardable_spec.rb +1 -1
- data/spec/integration/stringified_symbol_field_spec.rb +17 -3
- data/spec/lite_spec_helper.rb +47 -14
- data/spec/mongoid/association/accessors_spec.rb +31 -19
- data/spec/mongoid/association/auto_save_spec.rb +73 -34
- data/spec/mongoid/association/builders_spec.rb +2 -2
- data/spec/mongoid/association/constrainable_spec.rb +1 -1
- data/spec/mongoid/association/counter_cache_spec.rb +34 -34
- data/spec/mongoid/association/depending_spec.rb +397 -358
- data/spec/mongoid/association/eager_spec.rb +56 -6
- data/spec/mongoid/association/embedded/cyclic_spec.rb +3 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +3 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +3 -2
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +55 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +110 -23
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -8
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +113 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +712 -203
- data/spec/mongoid/association/embedded/embeds_many_models.rb +189 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +14 -2
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +69 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +26 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +37 -24
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +25 -2
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -2
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +29 -1
- data/spec/mongoid/association/macros_spec.rb +10 -10
- data/spec/mongoid/association/nested/many_spec.rb +1 -1
- data/spec/mongoid/association/nested/one_spec.rb +17 -13
- data/spec/mongoid/association/options_spec.rb +1 -1
- data/spec/mongoid/association/polymorphic_spec.rb +1 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +3 -2
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +110 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +51 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +113 -59
- data/spec/mongoid/association/referenced/belongs_to_models.rb +12 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +22 -2
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +27 -22
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +32 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +386 -376
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +44 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +57 -3
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +131 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +24 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +313 -134
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1313 -2109
- data/spec/mongoid/association/referenced/has_many_models.rb +39 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_many_spec.rb +47 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +54 -10
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +18 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +134 -28
- data/spec/mongoid/association/referenced/has_one_models.rb +43 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one_spec.rb +22 -1
- data/spec/mongoid/association/reflections_spec.rb +1 -1
- data/spec/mongoid/association/syncable_spec.rb +47 -33
- data/spec/mongoid/association_spec.rb +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +1 -1
- data/spec/mongoid/atomic/paths_spec.rb +65 -27
- data/spec/mongoid/atomic_spec.rb +29 -7
- data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
- data/spec/mongoid/attributes/dynamic_spec.rb +1 -1
- data/spec/mongoid/attributes/embedded_spec.rb +118 -0
- data/spec/mongoid/attributes/nested_spec.rb +147 -78
- data/spec/mongoid/attributes/nested_spec_models.rb +49 -0
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +41 -0
- data/spec/mongoid/attributes/readonly_spec.rb +23 -23
- data/spec/mongoid/attributes_spec.rb +921 -69
- data/spec/mongoid/cacheable_spec.rb +5 -5
- data/spec/mongoid/changeable_spec.rb +468 -76
- data/spec/mongoid/clients/factory_spec.rb +152 -30
- data/spec/mongoid/clients/options_spec.rb +24 -12
- data/spec/mongoid/clients/sessions_spec.rb +49 -71
- data/spec/mongoid/clients/transactions_spec.rb +971 -176
- data/spec/mongoid/clients/transactions_spec_models.rb +159 -0
- data/spec/mongoid/clients_spec.rb +230 -22
- data/spec/mongoid/collection_configurable_spec.rb +159 -0
- data/spec/mongoid/composable_spec.rb +1 -1
- data/spec/mongoid/config/defaults_spec.rb +99 -0
- data/spec/mongoid/config/encryption_spec.rb +152 -0
- data/spec/mongoid/config/environment_spec.rb +126 -39
- data/spec/mongoid/config/introspection_spec.rb +114 -0
- data/spec/mongoid/config/options_spec.rb +1 -1
- data/spec/mongoid/config_spec.rb +375 -43
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +432 -154
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +63 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +95 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +49 -0
- data/spec/mongoid/contextual/atomic_spec.rb +329 -87
- data/spec/mongoid/contextual/map_reduce_spec.rb +5 -19
- data/spec/mongoid/contextual/memory_spec.rb +1479 -127
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +194 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3374 -1254
- data/spec/mongoid/contextual/none_spec.rb +79 -68
- data/spec/mongoid/copyable_spec.rb +465 -23
- data/spec/mongoid/copyable_spec_models.rb +1 -1
- data/spec/mongoid/criteria/findable_spec.rb +295 -229
- data/spec/mongoid/criteria/includable_spec.rb +1493 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +55 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +1 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +19 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +38 -38
- data/spec/mongoid/criteria/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -74
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +8 -20
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +135 -27
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +32 -12
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -16
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +74 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +238 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -12
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -12
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -132
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -60
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +106 -8
- data/spec/mongoid/criteria/queryable/optional_spec.rb +17 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +700 -26
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +149 -683
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +186 -6
- data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +87 -1
- data/spec/mongoid/criteria/scopable_spec.rb +128 -1
- data/spec/mongoid/criteria/translator_spec.rb +133 -0
- data/spec/mongoid/criteria_projection_spec.rb +407 -0
- data/spec/mongoid/criteria_spec.rb +1029 -1806
- data/spec/mongoid/document_fields_spec.rb +180 -5
- data/spec/mongoid/document_persistence_context_spec.rb +77 -1
- data/spec/mongoid/document_query_spec.rb +55 -4
- data/spec/mongoid/document_spec.rb +43 -172
- data/spec/mongoid/equality_spec.rb +7 -8
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -1
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
- data/spec/mongoid/errors/callback_spec.rb +1 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +2 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +77 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +1 -1
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +6 -6
- data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -2
- data/spec/mongoid/errors/invalid_field_type_spec.rb +56 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +2 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +1 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +1 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +4 -4
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_database_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -1
- data/spec/mongoid/errors/no_clients_config_spec.rb +1 -1
- data/spec/mongoid/errors/no_environment_spec.rb +4 -4
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +1 -1
- data/spec/mongoid/errors/no_parent_spec.rb +1 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +3 -3
- data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -2
- data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +1 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -1
- data/spec/mongoid/errors/validations_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +19 -265
- data/spec/mongoid/extensions/big_decimal_spec.rb +713 -213
- data/spec/mongoid/extensions/binary_spec.rb +45 -10
- data/spec/mongoid/extensions/boolean_spec.rb +69 -83
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +15 -11
- data/spec/mongoid/extensions/date_spec.rb +74 -22
- data/spec/mongoid/extensions/date_time_spec.rb +18 -19
- data/spec/mongoid/extensions/decimal128_spec.rb +1 -1
- data/spec/mongoid/extensions/false_class_spec.rb +2 -9
- data/spec/mongoid/extensions/float_spec.rb +56 -84
- data/spec/mongoid/extensions/hash_spec.rb +45 -219
- data/spec/mongoid/extensions/integer_spec.rb +53 -73
- data/spec/mongoid/extensions/module_spec.rb +1 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/extensions/object_id_spec.rb +1 -1
- data/spec/mongoid/extensions/object_spec.rb +1 -177
- data/spec/mongoid/extensions/range_spec.rb +254 -64
- data/spec/mongoid/extensions/raw_value_spec.rb +67 -0
- data/spec/mongoid/extensions/regexp_spec.rb +59 -34
- data/spec/mongoid/extensions/set_spec.rb +105 -1
- data/spec/mongoid/extensions/string_spec.rb +21 -104
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +1 -1
- data/spec/mongoid/extensions/symbol_spec.rb +15 -53
- data/spec/mongoid/extensions/time_spec.rb +345 -131
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -107
- data/spec/mongoid/extensions/true_class_spec.rb +2 -9
- data/spec/mongoid/factory_spec.rb +63 -2
- data/spec/mongoid/fields/foreign_key_spec.rb +282 -120
- data/spec/mongoid/fields/localized_spec.rb +85 -42
- data/spec/mongoid/fields/standard_spec.rb +1 -1
- data/spec/mongoid/fields_spec.rb +826 -121
- data/spec/mongoid/findable_spec.rb +442 -80
- data/spec/mongoid/indexable/specification_spec.rb +132 -14
- data/spec/mongoid/indexable_spec.rb +361 -23
- data/spec/mongoid/inspectable_spec.rb +93 -5
- data/spec/mongoid/interceptable_spec.rb +926 -116
- data/spec/mongoid/interceptable_spec_models.rb +236 -4
- data/spec/mongoid/loading_spec.rb +110 -0
- data/spec/mongoid/loggable_spec.rb +1 -1
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +68 -88
- data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -15
- data/spec/mongoid/mongoizable_spec.rb +286 -0
- data/spec/mongoid/monkey_patches_spec.rb +211 -0
- data/spec/mongoid/persistable/creatable_spec.rb +5 -5
- data/spec/mongoid/persistable/deletable_spec.rb +267 -27
- data/spec/mongoid/persistable/destroyable_spec.rb +409 -24
- data/spec/mongoid/persistable/incrementable_spec.rb +46 -9
- data/spec/mongoid/persistable/logical_spec.rb +42 -5
- data/spec/mongoid/persistable/maxable_spec.rb +147 -0
- data/spec/mongoid/persistable/minable_spec.rb +147 -0
- data/spec/mongoid/persistable/multipliable_spec.rb +227 -0
- data/spec/mongoid/persistable/poppable_spec.rb +41 -5
- data/spec/mongoid/persistable/pullable_spec.rb +81 -9
- data/spec/mongoid/persistable/pushable_spec.rb +81 -9
- data/spec/mongoid/persistable/renamable_spec.rb +40 -4
- data/spec/mongoid/persistable/savable_spec.rb +114 -20
- data/spec/mongoid/persistable/settable_spec.rb +77 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +41 -5
- data/spec/mongoid/persistable/updatable_spec.rb +64 -52
- data/spec/mongoid/persistable/upsertable_spec.rb +124 -4
- data/spec/mongoid/persistable_spec.rb +4 -4
- data/spec/mongoid/persistence_context_spec.rb +58 -59
- data/spec/mongoid/positional_spec.rb +1 -1
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +24 -0
- data/spec/mongoid/railties/console_sandbox_spec.rb +44 -0
- data/spec/mongoid/relations/proxy_spec.rb +7 -7
- data/spec/mongoid/reloadable_spec.rb +255 -30
- data/spec/mongoid/scopable_spec.rb +198 -58
- data/spec/mongoid/search_indexable_spec.rb +147 -0
- data/spec/mongoid/selectable_spec.rb +7 -7
- data/spec/mongoid/serializable_spec.rb +19 -40
- data/spec/mongoid/shardable_models.rb +15 -0
- data/spec/mongoid/shardable_spec.rb +181 -31
- data/spec/mongoid/stateful_spec.rb +152 -10
- data/spec/mongoid/tasks/database_rake_spec.rb +193 -42
- data/spec/mongoid/tasks/database_spec.rb +175 -2
- data/spec/mongoid/tasks/encryption_spec.rb +187 -0
- data/spec/mongoid/threaded_spec.rb +40 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +2 -2
- data/spec/mongoid/timestamps/created_spec.rb +2 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +3 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +4 -4
- data/spec/mongoid/timestamps/updated_spec.rb +4 -4
- data/spec/mongoid/timestamps_spec.rb +399 -11
- data/spec/mongoid/timestamps_spec_models.rb +68 -0
- data/spec/mongoid/touchable_spec.rb +971 -54
- data/spec/mongoid/touchable_spec_models.rb +154 -0
- data/spec/mongoid/traversable_spec.rb +79 -37
- data/spec/mongoid/validatable/associated_spec.rb +14 -31
- data/spec/mongoid/validatable/format_spec.rb +1 -1
- data/spec/mongoid/validatable/length_spec.rb +1 -1
- data/spec/mongoid/validatable/numericality_spec.rb +1 -1
- data/spec/mongoid/validatable/presence_spec.rb +27 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +170 -99
- data/spec/mongoid/validatable_spec.rb +4 -4
- data/spec/mongoid/warnings_spec.rb +36 -0
- data/spec/mongoid_spec.rb +61 -11
- data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -3
- data/spec/rails/mongoid_spec.rb +28 -132
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/cluster_config.rb +24 -4
- data/spec/shared/lib/mrss/constraints.rb +77 -29
- data/spec/shared/lib/mrss/docker_runner.rb +40 -4
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +64 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +78 -34
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +123 -71
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +187 -40
- data/spec/shared/shlib/set_env.sh +49 -31
- data/spec/spec_helper.rb +46 -49
- data/spec/support/authorization.rb +1 -1
- data/spec/support/client_registry.rb +10 -0
- data/spec/support/constraints.rb +25 -1
- data/spec/support/crypt/models.rb +50 -0
- data/spec/support/crypt.rb +80 -0
- data/spec/support/expectations.rb +1 -1
- data/spec/support/feature_sandbox.rb +72 -0
- data/spec/support/helpers.rb +1 -0
- data/spec/support/immutable_ids.rb +119 -0
- data/spec/support/macros.rb +107 -1
- data/spec/support/models/account.rb +2 -2
- data/spec/support/models/acolyte.rb +1 -1
- data/spec/support/models/actor.rb +1 -1
- data/spec/support/models/actress.rb +1 -1
- data/spec/support/models/address.rb +7 -1
- data/spec/support/models/address_component.rb +1 -1
- data/spec/support/models/address_number.rb +1 -1
- data/spec/support/models/agency.rb +1 -1
- data/spec/support/models/agent.rb +1 -1
- data/spec/support/models/album.rb +1 -1
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +1 -1
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +1 -1
- data/spec/support/models/armrest.rb +1 -1
- data/spec/support/models/array_field.rb +1 -1
- data/spec/support/models/article.rb +1 -1
- data/spec/support/models/artist.rb +3 -2
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +4 -0
- data/spec/support/models/audio.rb +1 -1
- data/spec/support/models/augmentation.rb +13 -1
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +13 -1
- data/spec/support/models/bar.rb +1 -1
- data/spec/support/models/basic.rb +1 -1
- data/spec/support/models/bed.rb +1 -1
- data/spec/support/models/big_palette.rb +1 -1
- data/spec/support/models/birthday.rb +1 -1
- data/spec/support/models/bolt.rb +8 -0
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +2 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -1
- data/spec/support/models/building.rb +3 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +1 -1
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +1 -1
- data/spec/support/models/car.rb +1 -1
- data/spec/support/models/cat.rb +1 -1
- data/spec/support/models/catalog.rb +25 -0
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +4 -4
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +1 -1
- data/spec/support/models/circuit.rb +1 -1
- data/spec/support/models/circus.rb +4 -1
- data/spec/support/models/code.rb +3 -1
- data/spec/support/models/coding/pull_request.rb +1 -1
- data/spec/support/models/coding.rb +1 -1
- data/spec/support/models/comment.rb +1 -1
- data/spec/support/models/company.rb +1 -1
- data/spec/support/models/consumption_period.rb +1 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +1 -1
- data/spec/support/models/country_code.rb +3 -1
- data/spec/support/models/courier_job.rb +1 -1
- data/spec/support/models/cover.rb +11 -0
- data/spec/support/models/crate.rb +1 -1
- data/spec/support/models/customer.rb +1 -1
- data/spec/support/models/customer_address.rb +1 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +1 -1
- data/spec/support/models/description.rb +1 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +1 -1
- data/spec/support/models/doctor.rb +1 -1
- data/spec/support/models/dog.rb +1 -1
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +1 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +1 -1
- data/spec/support/models/drug.rb +1 -1
- data/spec/support/models/dungeon.rb +1 -1
- data/spec/support/models/edit.rb +1 -1
- data/spec/support/models/email.rb +1 -1
- data/spec/support/models/employer.rb +1 -1
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +1 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +1 -1
- data/spec/support/models/exhibition.rb +1 -1
- data/spec/support/models/exhibitor.rb +1 -1
- data/spec/support/models/explosion.rb +1 -1
- data/spec/support/models/eye.rb +1 -1
- data/spec/support/models/eye_bowl.rb +1 -1
- data/spec/support/models/face.rb +1 -1
- data/spec/support/models/fanatic.rb +9 -0
- data/spec/support/models/favorite.rb +8 -2
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +1 -1
- data/spec/support/models/fish.rb +1 -1
- data/spec/support/models/folder.rb +1 -1
- data/spec/support/models/folder_item.rb +1 -1
- data/spec/support/models/fruits.rb +1 -1
- data/spec/support/models/game.rb +1 -1
- data/spec/support/models/ghost.rb +1 -1
- data/spec/support/models/guitar.rb +1 -1
- data/spec/support/models/hole.rb +13 -0
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +1 -1
- data/spec/support/models/html_writer.rb +1 -1
- data/spec/support/models/id_key.rb +1 -1
- data/spec/support/models/idnodef.rb +1 -1
- data/spec/support/models/image.rb +1 -1
- data/spec/support/models/implant.rb +10 -1
- data/spec/support/models/instrument.rb +1 -1
- data/spec/support/models/item.rb +1 -1
- data/spec/support/models/jar.rb +1 -1
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +5 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +1 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +1 -1
- data/spec/support/models/line_item.rb +1 -1
- data/spec/support/models/location.rb +1 -1
- data/spec/support/models/login.rb +1 -1
- data/spec/support/models/manufacturer.rb +1 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +2 -1
- data/spec/support/models/message.rb +1 -1
- data/spec/support/models/minim.rb +1 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/mop.rb +10 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -1
- data/spec/support/models/name.rb +11 -1
- data/spec/support/models/name_only.rb +1 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +1 -1
- data/spec/support/models/nut.rb +8 -0
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +3 -1
- data/spec/support/models/ordered_post.rb +2 -2
- data/spec/support/models/ordered_preference.rb +1 -1
- data/spec/support/models/oscar.rb +1 -1
- data/spec/support/models/other_owner_object.rb +1 -1
- data/spec/support/models/override.rb +1 -1
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +1 -1
- data/spec/support/models/page.rb +1 -1
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +1 -1
- data/spec/support/models/parent.rb +1 -1
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +15 -1
- data/spec/support/models/patient.rb +1 -1
- data/spec/support/models/pdf_writer.rb +1 -1
- data/spec/support/models/pencil.rb +1 -1
- data/spec/support/models/person.rb +19 -1
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +3 -2
- data/spec/support/models/piano.rb +1 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +3 -1
- data/spec/support/models/post.rb +1 -1
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +13 -1
- data/spec/support/models/preference.rb +1 -1
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +2 -1
- data/spec/support/models/profile.rb +1 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +1 -1
- data/spec/support/models/publication/encyclopedia.rb +1 -1
- data/spec/support/models/publication/review.rb +1 -1
- data/spec/support/models/publication.rb +1 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +11 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/question.rb +1 -1
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +1 -1
- data/spec/support/models/registry.rb +2 -1
- data/spec/support/models/role.rb +1 -1
- data/spec/support/models/root_category.rb +1 -1
- data/spec/support/models/sandbox/app/models/app_models_message.rb +4 -0
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_user.rb +4 -0
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +1 -1
- data/spec/support/models/school.rb +15 -0
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +8 -0
- data/spec/support/models/seat.rb +1 -1
- data/spec/support/models/seo.rb +1 -1
- data/spec/support/models/series.rb +1 -1
- data/spec/support/models/server.rb +1 -1
- data/spec/support/models/service.rb +1 -1
- data/spec/support/models/shape.rb +1 -1
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +19 -0
- data/spec/support/models/shipment_address.rb +1 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +1 -1
- data/spec/support/models/shirt.rb +12 -0
- data/spec/support/models/shop.rb +1 -1
- data/spec/support/models/short_agent.rb +1 -1
- data/spec/support/models/short_quiz.rb +1 -1
- data/spec/support/models/simple.rb +1 -1
- data/spec/support/models/slave.rb +1 -1
- data/spec/support/models/song.rb +1 -1
- data/spec/support/models/sound.rb +1 -1
- data/spec/support/models/spacer.rb +8 -0
- data/spec/support/models/square.rb +1 -1
- data/spec/support/models/staff.rb +1 -1
- data/spec/support/models/store_as_dup_test1.rb +1 -1
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +1 -1
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +1 -1
- data/spec/support/models/student.rb +15 -0
- data/spec/support/models/sub_item.rb +1 -1
- data/spec/support/models/subscription.rb +1 -1
- data/spec/support/models/survey.rb +1 -1
- data/spec/support/models/symptom.rb +1 -1
- data/spec/support/models/system_role.rb +1 -0
- data/spec/support/models/tag.rb +1 -1
- data/spec/support/models/target.rb +1 -1
- data/spec/support/models/template.rb +1 -1
- data/spec/support/models/thing.rb +1 -1
- data/spec/support/models/threadlocker.rb +8 -0
- data/spec/support/models/title.rb +1 -1
- data/spec/support/models/tool.rb +1 -1
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +1 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +1 -1
- data/spec/support/models/truck.rb +1 -1
- data/spec/support/models/updatable.rb +1 -1
- data/spec/support/models/user.rb +1 -1
- data/spec/support/models/user_account.rb +1 -1
- data/spec/support/models/validation_callback.rb +1 -1
- data/spec/support/models/vehicle.rb +1 -1
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +1 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +1 -1
- data/spec/support/models/video_game.rb +1 -1
- data/spec/support/models/washer.rb +8 -0
- data/spec/support/models/weapon.rb +13 -1
- data/spec/support/models/wiki_page.rb +1 -1
- data/spec/support/models/word.rb +1 -1
- data/spec/support/models/word_origin.rb +1 -1
- data/spec/support/models/writer.rb +1 -1
- data/spec/support/rails_mock.rb +32 -0
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +3 -22
- data/spec/support/sinatra_mock.rb +7 -0
- data/spec/support/spec_config.rb +42 -7
- data.tar.gz.sig +0 -0
- metadata +883 -562
- metadata.gz.sig +0 -0
- data/lib/mongoid/association/referenced/eager.rb +0 -184
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -128
- data/lib/mongoid/contextual/geo_near.rb +0 -269
- data/lib/mongoid/errors/eager_load.rb +0 -26
- data/lib/mongoid/errors/invalid_session_use.rb +0 -26
- data/lib/mongoid/errors/invalid_storage_parent.rb +0 -28
- data/lib/mongoid/errors/invalid_value.rb +0 -18
- data/lib/mongoid/query_cache.rb +0 -333
- data/lib/support/ruby_version.rb +0 -29
- data/spec/mongoid/contextual/geo_near_spec.rb +0 -472
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -61
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -61
- data/spec/mongoid/extensions_spec.rb +0 -32
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -61
- data/spec/mongoid/query_cache_spec.rb +0 -978
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/session_registry.rb +0 -50
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
module Mongoid
|
|
5
5
|
module Validatable
|
|
6
|
+
|
|
7
|
+
# Mixin module included in Mongoid::Document which adds various
|
|
8
|
+
# validation macro methods, such as +validates_presence_of+ and
|
|
9
|
+
# +validates_uniqueness_of+.
|
|
6
10
|
module Macros
|
|
7
11
|
extend ActiveSupport::Concern
|
|
8
12
|
|
|
@@ -19,8 +23,7 @@ module Mongoid
|
|
|
19
23
|
# validates_associated :name, :addresses
|
|
20
24
|
# end
|
|
21
25
|
#
|
|
22
|
-
# @param [
|
|
23
|
-
#
|
|
26
|
+
# @param [ Object... ] *args The arguments to pass to the validator.
|
|
24
27
|
def validates_associated(*args)
|
|
25
28
|
validates_with(AssociatedValidator, _merge_attributes(args))
|
|
26
29
|
end
|
|
@@ -37,8 +40,7 @@ module Mongoid
|
|
|
37
40
|
# validates_uniqueness_of :title
|
|
38
41
|
# end
|
|
39
42
|
#
|
|
40
|
-
# @param [
|
|
41
|
-
#
|
|
43
|
+
# @param [ Object... ] *args The arguments to pass to the validator.
|
|
42
44
|
def validates_uniqueness_of(*args)
|
|
43
45
|
validates_with(UniquenessValidator, _merge_attributes(args))
|
|
44
46
|
end
|
|
@@ -53,9 +55,7 @@ module Mongoid
|
|
|
53
55
|
# validates_format_of :title, with: /\A[a-z0-9 \-_]*\z/i
|
|
54
56
|
# end
|
|
55
57
|
#
|
|
56
|
-
# @param [
|
|
57
|
-
#
|
|
58
|
-
# @since 2.4.0
|
|
58
|
+
# @param [ Object... ] *args The names of the field(s) to validate.
|
|
59
59
|
def validates_format_of(*args)
|
|
60
60
|
validates_with(FormatValidator, _merge_attributes(args))
|
|
61
61
|
end
|
|
@@ -70,9 +70,7 @@ module Mongoid
|
|
|
70
70
|
# validates_length_of :title, minimum: 100
|
|
71
71
|
# end
|
|
72
72
|
#
|
|
73
|
-
# @param [
|
|
74
|
-
#
|
|
75
|
-
# @since 2.4.0
|
|
73
|
+
# @param [ Object... ] *args The names of the field(s) to validate.
|
|
76
74
|
def validates_length_of(*args)
|
|
77
75
|
validates_with(LengthValidator, _merge_attributes(args))
|
|
78
76
|
end
|
|
@@ -87,9 +85,7 @@ module Mongoid
|
|
|
87
85
|
# validates_presence_of :title
|
|
88
86
|
# end
|
|
89
87
|
#
|
|
90
|
-
# @param [
|
|
91
|
-
#
|
|
92
|
-
# @since 2.4.0
|
|
88
|
+
# @param [ Object... ] *args The names of the field(s) to validate.
|
|
93
89
|
def validates_presence_of(*args)
|
|
94
90
|
validates_with(PresenceValidator, _merge_attributes(args))
|
|
95
91
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
module Mongoid
|
|
5
5
|
module Validatable
|
|
@@ -25,8 +25,6 @@ module Mongoid
|
|
|
25
25
|
# @param [ Document ] document The document to validate.
|
|
26
26
|
# @param [ Symbol ] attribute The attribute name.
|
|
27
27
|
# @param [ Object ] value The current value of the field.
|
|
28
|
-
#
|
|
29
|
-
# @since 2.4.0
|
|
30
28
|
def validate_each(document, attribute, value)
|
|
31
29
|
field = document.fields[document.database_field_name(attribute)]
|
|
32
30
|
if field.try(:localized?) && !value.blank?
|
|
@@ -34,15 +32,15 @@ module Mongoid
|
|
|
34
32
|
document.errors.add(
|
|
35
33
|
attribute,
|
|
36
34
|
:blank_in_locale,
|
|
37
|
-
options.merge(location: _locale)
|
|
35
|
+
**options.merge(location: _locale)
|
|
38
36
|
) if not_present?(_value)
|
|
39
37
|
end
|
|
40
38
|
elsif document.relations.has_key?(attribute.to_s)
|
|
41
39
|
if relation_or_fk_missing?(document, attribute, value)
|
|
42
|
-
document.errors.add(attribute, :blank, options)
|
|
40
|
+
document.errors.add(attribute, :blank, **options)
|
|
43
41
|
end
|
|
44
42
|
else
|
|
45
|
-
document.errors.add(attribute, :blank, options) if not_present?(value)
|
|
43
|
+
document.errors.add(attribute, :blank, **options) if not_present?(value)
|
|
46
44
|
end
|
|
47
45
|
end
|
|
48
46
|
|
|
@@ -53,15 +51,13 @@ module Mongoid
|
|
|
53
51
|
# @api private
|
|
54
52
|
#
|
|
55
53
|
# @example Check is the association or fk is blank.
|
|
56
|
-
# validator.
|
|
54
|
+
# validator.relation_or_fk_missing(doc, :name, "")
|
|
57
55
|
#
|
|
58
56
|
# @param [ Document ] doc The document.
|
|
59
57
|
# @param [ Symbol ] attr The attribute.
|
|
60
58
|
# @param [ Object ] value The value.
|
|
61
59
|
#
|
|
62
|
-
# @return [ true
|
|
63
|
-
#
|
|
64
|
-
# @since 3.0.0
|
|
60
|
+
# @return [ true | false ] If the doc is missing.
|
|
65
61
|
def relation_or_fk_missing?(doc, attr, value)
|
|
66
62
|
return true if value.blank? && doc.send(attr).blank?
|
|
67
63
|
association = doc.relations[attr.to_s]
|
|
@@ -77,9 +73,7 @@ module Mongoid
|
|
|
77
73
|
#
|
|
78
74
|
# @param [ Object ] value The value.
|
|
79
75
|
#
|
|
80
|
-
# @return [ true
|
|
81
|
-
#
|
|
82
|
-
# @since 3.0.5
|
|
76
|
+
# @return [ true | false ] If the value is not present.
|
|
83
77
|
def not_present?(value)
|
|
84
78
|
value.blank? && value != false
|
|
85
79
|
end
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
module Mongoid
|
|
5
5
|
module Validatable
|
|
6
|
+
|
|
7
|
+
# Mixin module included in Mongoid::Validatable::Uniqueness class
|
|
8
|
+
# when ensures that the persistence context is cleared when
|
|
9
|
+
# executing uniqueness queries.
|
|
10
|
+
#
|
|
11
|
+
# @todo Move this into the Mongoid::Validatable::Uniqueness class.
|
|
12
|
+
#
|
|
13
|
+
# @api private
|
|
6
14
|
module Queryable
|
|
7
15
|
|
|
8
16
|
# Wrap the validation inside the an execution block that alert's the
|
|
@@ -16,8 +24,6 @@ module Mongoid
|
|
|
16
24
|
# @param [ Document ] document The document being validated.
|
|
17
25
|
#
|
|
18
26
|
# @return [ Object ] The result of the yield.
|
|
19
|
-
#
|
|
20
|
-
# @since 3.0.2
|
|
21
27
|
def with_query(document)
|
|
22
28
|
klass = document.class
|
|
23
29
|
begin
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
module Mongoid
|
|
5
5
|
module Validatable
|
|
@@ -17,7 +17,7 @@ module Mongoid
|
|
|
17
17
|
# end
|
|
18
18
|
#
|
|
19
19
|
# It is also possible to limit the uniqueness constraint to a set of
|
|
20
|
-
#
|
|
20
|
+
# documents matching certain conditions:
|
|
21
21
|
# class Person
|
|
22
22
|
# include Mongoid::Document
|
|
23
23
|
# field :title
|
|
@@ -38,8 +38,6 @@ module Mongoid
|
|
|
38
38
|
# @param [ Object ] value The value of the field.
|
|
39
39
|
#
|
|
40
40
|
# @return [ Errors ] The errors.
|
|
41
|
-
#
|
|
42
|
-
# @since 1.0.0
|
|
43
41
|
def validate_each(document, attribute, value)
|
|
44
42
|
with_query(document) do
|
|
45
43
|
attrib, val = to_validate(document, attribute, value)
|
|
@@ -64,11 +62,9 @@ module Mongoid
|
|
|
64
62
|
# @param [ Document ] document The document to validate.
|
|
65
63
|
# @param [ Symbol ] attribute The name of the attribute.
|
|
66
64
|
# @param [ Object ] value The value of the object.
|
|
67
|
-
#
|
|
68
|
-
# @since 2.4.10
|
|
69
65
|
def add_error(document, attribute, value)
|
|
70
66
|
document.errors.add(
|
|
71
|
-
attribute, :taken, options.except(:case_sensitive, :scope).merge(value: value)
|
|
67
|
+
attribute, :taken, **options.except(:case_sensitive, :scope).merge(value: value)
|
|
72
68
|
)
|
|
73
69
|
end
|
|
74
70
|
|
|
@@ -79,9 +75,7 @@ module Mongoid
|
|
|
79
75
|
# @example Is the validation case sensitive?
|
|
80
76
|
# validator.case_sensitive?
|
|
81
77
|
#
|
|
82
|
-
# @return [ true
|
|
83
|
-
#
|
|
84
|
-
# @since 2.3.0
|
|
78
|
+
# @return [ true | false ] If the validation is case sensitive.
|
|
85
79
|
def case_sensitive?
|
|
86
80
|
!(options[:case_sensitive] == false)
|
|
87
81
|
end
|
|
@@ -93,17 +87,29 @@ module Mongoid
|
|
|
93
87
|
# @example Create the criteria.
|
|
94
88
|
# validator.create_criteria(User, user, :name, "syd")
|
|
95
89
|
#
|
|
96
|
-
# @param [ Class
|
|
90
|
+
# @param [ Class | Proxy ] base The base to execute the criteria from.
|
|
97
91
|
# @param [ Document ] document The document to validate.
|
|
98
92
|
# @param [ Symbol ] attribute The name of the attribute.
|
|
99
93
|
# @param [ Object ] value The value of the object.
|
|
100
94
|
#
|
|
101
95
|
# @return [ Criteria ] The criteria.
|
|
102
|
-
#
|
|
103
|
-
# @since 2.4.10
|
|
104
96
|
def create_criteria(base, document, attribute, value)
|
|
105
97
|
criteria = scope(base.unscoped, document, attribute)
|
|
106
|
-
|
|
98
|
+
field = document.fields[document.database_field_name(attribute)]
|
|
99
|
+
|
|
100
|
+
# In the past, we were calling value.mongoize in all cases, which
|
|
101
|
+
# would call Object's mongoize method. This is a problem for StringifiedSymbol,
|
|
102
|
+
# because a Symbol should mongoize to a String, but calling .mongoize
|
|
103
|
+
# on a Symbol mongoizes it to a Symbol.
|
|
104
|
+
# Therefore, we call the field's mongoize in all cases except when the
|
|
105
|
+
# field is localized, because by the time we arrive at this code, the
|
|
106
|
+
# value is already in the form of { lang => translation } and calling
|
|
107
|
+
# the field's mongoize will nest that further into { lang =>
|
|
108
|
+
# "\{ lang => translation \}"} (assuming the field type is a string).
|
|
109
|
+
# Therefore, we call Object's mongoize method so it returns the hash as
|
|
110
|
+
# it is.
|
|
111
|
+
mongoized = field.try(:localized?) ? value.mongoize : field.mongoize(value)
|
|
112
|
+
criteria.selector.update(criterion(document, attribute, mongoized))
|
|
107
113
|
criteria
|
|
108
114
|
end
|
|
109
115
|
|
|
@@ -119,8 +125,6 @@ module Mongoid
|
|
|
119
125
|
# @param [ Object ] value The value of the object.
|
|
120
126
|
#
|
|
121
127
|
# @return [ Criteria ] The uniqueness criteria.
|
|
122
|
-
#
|
|
123
|
-
# @since 2.3.0
|
|
124
128
|
def criterion(document, attribute, value)
|
|
125
129
|
field = document.database_field_name(attribute)
|
|
126
130
|
|
|
@@ -146,9 +150,7 @@ module Mongoid
|
|
|
146
150
|
#
|
|
147
151
|
# @param [ Object ] value The value to filter.
|
|
148
152
|
#
|
|
149
|
-
# @return [ Object
|
|
150
|
-
#
|
|
151
|
-
# @since 2.3.0
|
|
153
|
+
# @return [ Object | Regexp ] The value, filtered or not.
|
|
152
154
|
def filter(value)
|
|
153
155
|
!case_sensitive? && value ? /\A#{Regexp.escape(value.to_s)}\z/i : value
|
|
154
156
|
end
|
|
@@ -164,8 +166,6 @@ module Mongoid
|
|
|
164
166
|
# @param [ Document ] document The document being validated.
|
|
165
167
|
#
|
|
166
168
|
# @return [ Criteria ] The scoped criteria.
|
|
167
|
-
#
|
|
168
|
-
# @since 2.3.0
|
|
169
169
|
def scope(criteria, document, _attribute)
|
|
170
170
|
Array.wrap(options[:scope]).each do |item|
|
|
171
171
|
name = document.database_field_name(item)
|
|
@@ -183,9 +183,7 @@ module Mongoid
|
|
|
183
183
|
#
|
|
184
184
|
# @param [ Document ] document The embedded document.
|
|
185
185
|
#
|
|
186
|
-
# @return [ true
|
|
187
|
-
#
|
|
188
|
-
# @since 2.3.0
|
|
186
|
+
# @return [ true | false ] If the validation should be skipped.
|
|
189
187
|
def skip_validation?(document)
|
|
190
188
|
!document._parent || document.embedded_one?
|
|
191
189
|
end
|
|
@@ -199,9 +197,7 @@ module Mongoid
|
|
|
199
197
|
#
|
|
200
198
|
# @param [ Document ] document The embedded document.
|
|
201
199
|
#
|
|
202
|
-
# @return [ true
|
|
203
|
-
#
|
|
204
|
-
# @since
|
|
200
|
+
# @return [ true | false ] If the scope reference has changed.
|
|
205
201
|
def scope_value_changed?(document)
|
|
206
202
|
Array.wrap(options[:scope]).any? do |item|
|
|
207
203
|
document.send("attribute_changed?", item.to_s)
|
|
@@ -223,8 +219,6 @@ module Mongoid
|
|
|
223
219
|
# @param [ Object ] value The value of the attribute.
|
|
224
220
|
#
|
|
225
221
|
# @return [ Array<Object, Object> ] The field and value.
|
|
226
|
-
#
|
|
227
|
-
# @since 2.4.4
|
|
228
222
|
def to_validate(document, attribute, value)
|
|
229
223
|
association = document.relations[attribute.to_s]
|
|
230
224
|
if association && association.stores_foreign_key?
|
|
@@ -244,13 +238,12 @@ module Mongoid
|
|
|
244
238
|
# @param [ Document ] document The document.
|
|
245
239
|
# @param [ Symbol ] attribute The attribute name.
|
|
246
240
|
# @param [ Object ] value The value.
|
|
247
|
-
#
|
|
248
|
-
# @since 2.4.10
|
|
249
241
|
def validate_embedded(document, attribute, value)
|
|
250
242
|
return if skip_validation?(document)
|
|
251
243
|
relation = document._parent.send(document.association_name)
|
|
252
244
|
criteria = create_criteria(relation, document, attribute, value)
|
|
253
245
|
criteria = criteria.merge(options[:conditions].call) if options[:conditions]
|
|
246
|
+
criteria = criteria.read(mode: :primary).limit(2)
|
|
254
247
|
add_error(document, attribute, value) if criteria.count > 1
|
|
255
248
|
end
|
|
256
249
|
|
|
@@ -264,8 +257,6 @@ module Mongoid
|
|
|
264
257
|
# @param [ Document ] document The document.
|
|
265
258
|
# @param [ Symbol ] attribute The attribute name.
|
|
266
259
|
# @param [ Object ] value The value.
|
|
267
|
-
#
|
|
268
|
-
# @since 2.4.10
|
|
269
260
|
def validate_root(document, attribute, value)
|
|
270
261
|
klass = document.class
|
|
271
262
|
|
|
@@ -288,9 +279,7 @@ module Mongoid
|
|
|
288
279
|
# @param [ Document ] document The document getting validated.
|
|
289
280
|
# @param [ Symbol ] attribute The attribute to validate.
|
|
290
281
|
#
|
|
291
|
-
# @return [ true
|
|
292
|
-
#
|
|
293
|
-
# @since 2.4.4
|
|
282
|
+
# @return [ true | false ] If we need to validate.
|
|
294
283
|
def validation_required?(document, attribute)
|
|
295
284
|
document.new_record? ||
|
|
296
285
|
document.send("attribute_changed?", attribute.to_s) ||
|
|
@@ -307,9 +296,7 @@ module Mongoid
|
|
|
307
296
|
# @param [ Document ] document The document getting validated.
|
|
308
297
|
# @param [ Symbol ] attribute The attribute to validate.
|
|
309
298
|
#
|
|
310
|
-
# @return [ true
|
|
311
|
-
#
|
|
312
|
-
# @since 4.0.0
|
|
299
|
+
# @return [ true | false ] If the attribute is localized.
|
|
313
300
|
def localized?(document, attribute)
|
|
314
301
|
document.fields[document.database_field_name(attribute)].try(:localized?)
|
|
315
302
|
end
|
data/lib/mongoid/validatable.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
require "mongoid/validatable/macros"
|
|
5
5
|
require "mongoid/validatable/localizable"
|
|
@@ -26,8 +26,6 @@ module Mongoid
|
|
|
26
26
|
#
|
|
27
27
|
# @example Begin validation.
|
|
28
28
|
# document.begin_validate
|
|
29
|
-
#
|
|
30
|
-
# @since 2.1.9
|
|
31
29
|
def begin_validate
|
|
32
30
|
Threaded.begin_validate(self)
|
|
33
31
|
end
|
|
@@ -36,12 +34,18 @@ module Mongoid
|
|
|
36
34
|
#
|
|
37
35
|
# @example Exit validation.
|
|
38
36
|
# document.exit_validate
|
|
39
|
-
#
|
|
40
|
-
# @since 2.1.9
|
|
41
37
|
def exit_validate
|
|
42
38
|
Threaded.exit_validate(self)
|
|
43
39
|
end
|
|
44
40
|
|
|
41
|
+
# Perform a validation within the associated block.
|
|
42
|
+
def validating
|
|
43
|
+
begin_validate
|
|
44
|
+
yield
|
|
45
|
+
ensure
|
|
46
|
+
exit_validate
|
|
47
|
+
end
|
|
48
|
+
|
|
45
49
|
# Given the provided options, are we performing validations?
|
|
46
50
|
#
|
|
47
51
|
# @example Are we performing validations?
|
|
@@ -49,9 +53,9 @@ module Mongoid
|
|
|
49
53
|
#
|
|
50
54
|
# @param [ Hash ] options The options to check.
|
|
51
55
|
#
|
|
52
|
-
# @
|
|
56
|
+
# @option options [ true | false ] :validate Whether or not to validate.
|
|
53
57
|
#
|
|
54
|
-
# @
|
|
58
|
+
# @return [ true | false ] If we are validating.
|
|
55
59
|
def performing_validations?(options = {})
|
|
56
60
|
options[:validate].nil? ? true : options[:validate]
|
|
57
61
|
end
|
|
@@ -66,15 +70,13 @@ module Mongoid
|
|
|
66
70
|
# @param [ Symbol ] attr The name of the field or association.
|
|
67
71
|
#
|
|
68
72
|
# @return [ Object ] The value of the field or the association.
|
|
69
|
-
#
|
|
70
|
-
# @since 2.0.0.rc.1
|
|
71
73
|
def read_attribute_for_validation(attr)
|
|
72
74
|
attribute = database_field_name(attr)
|
|
73
75
|
if relations.key?(attribute)
|
|
74
76
|
begin_validate
|
|
75
77
|
relation = without_autobuild { send(attr) }
|
|
76
78
|
exit_validate
|
|
77
|
-
relation.
|
|
79
|
+
relation.try(:in_memory) || relation
|
|
78
80
|
elsif fields[attribute].try(:localized?)
|
|
79
81
|
attributes[attribute]
|
|
80
82
|
else
|
|
@@ -92,9 +94,7 @@ module Mongoid
|
|
|
92
94
|
#
|
|
93
95
|
# @param [ Symbol ] context The optional validation context.
|
|
94
96
|
#
|
|
95
|
-
# @return [ true
|
|
96
|
-
#
|
|
97
|
-
# @since 2.0.0.rc.6
|
|
97
|
+
# @return [ true | false ] True if valid, false if not.
|
|
98
98
|
def valid?(context = nil)
|
|
99
99
|
super context ? context : (new_record? ? :create : :update)
|
|
100
100
|
end
|
|
@@ -104,9 +104,7 @@ module Mongoid
|
|
|
104
104
|
# @example Is the document validated?
|
|
105
105
|
# document.validated?
|
|
106
106
|
#
|
|
107
|
-
# @return [ true
|
|
108
|
-
#
|
|
109
|
-
# @since 2.0.0.rc.2
|
|
107
|
+
# @return [ true | false ] Has the document already been validated?
|
|
110
108
|
def validated?
|
|
111
109
|
Threaded.validated?(self)
|
|
112
110
|
end
|
|
@@ -116,9 +114,7 @@ module Mongoid
|
|
|
116
114
|
# @example Are we validating with a query?
|
|
117
115
|
# document.validating_with_query?
|
|
118
116
|
#
|
|
119
|
-
# @return [ true
|
|
120
|
-
#
|
|
121
|
-
# @since 3.0.2
|
|
117
|
+
# @return [ true | false ] If we are validating with a query.
|
|
122
118
|
def validating_with_query?
|
|
123
119
|
self.class.validating_with_query?
|
|
124
120
|
end
|
|
@@ -131,28 +127,25 @@ module Mongoid
|
|
|
131
127
|
# @example Set up validation.
|
|
132
128
|
# Person.validates_relation(association)
|
|
133
129
|
#
|
|
134
|
-
# @param [ Association ] association The association metadata.
|
|
135
|
-
#
|
|
136
|
-
# @since 2.0.0.rc.1
|
|
130
|
+
# @param [ Mongoid::Association::Relatable ] association The association metadata.
|
|
137
131
|
def validates_relation(association)
|
|
138
132
|
if association.validate?
|
|
139
133
|
validates_associated(association.name)
|
|
140
134
|
end
|
|
141
135
|
end
|
|
142
136
|
|
|
143
|
-
# Add validation with the supplied validators
|
|
137
|
+
# Add validation with the supplied validators for the provided fields
|
|
144
138
|
# with options.
|
|
145
139
|
#
|
|
146
140
|
# @example Validate with a specific validator.
|
|
147
141
|
# validates_with MyValidator, on: :create
|
|
148
142
|
#
|
|
149
|
-
# @param [
|
|
143
|
+
# @param [ ActiveModel::Validator..., Hash ] *args The validator classes
|
|
144
|
+
# and options hash.
|
|
150
145
|
#
|
|
151
146
|
# @note See ActiveModel::Validations::With for full options. This is
|
|
152
147
|
# overridden to add autosave functionality when presence validation is
|
|
153
148
|
# added.
|
|
154
|
-
#
|
|
155
|
-
# @since 3.0.0
|
|
156
149
|
def validates_with(*args, &block)
|
|
157
150
|
if args.first == PresenceValidator
|
|
158
151
|
args.last[:attributes].each do |name|
|
|
@@ -170,9 +163,7 @@ module Mongoid
|
|
|
170
163
|
# @example Are we validating with a query?
|
|
171
164
|
# Model.validating_with_query?
|
|
172
165
|
#
|
|
173
|
-
# @return [ true
|
|
174
|
-
#
|
|
175
|
-
# @since 3.0.2
|
|
166
|
+
# @return [ true | false ] If we are validating with a query.
|
|
176
167
|
def validating_with_query?
|
|
177
168
|
Threaded.executing?("#{name}-validate-with-query")
|
|
178
169
|
end
|
data/lib/mongoid/version.rb
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# rubocop:todo all
|
|
3
|
+
|
|
4
|
+
module Mongoid
|
|
5
|
+
|
|
6
|
+
# Encapsulates behavior around logging and caching warnings so they are only
|
|
7
|
+
# logged once.
|
|
8
|
+
#
|
|
9
|
+
# @api private
|
|
10
|
+
module Warnings
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
|
|
14
|
+
# Define a warning message method for the given id.
|
|
15
|
+
#
|
|
16
|
+
# @param [ Symbol ] id The warning identifier.
|
|
17
|
+
# @param [ String ] message The warning message.
|
|
18
|
+
#
|
|
19
|
+
# @api private
|
|
20
|
+
def warning(id, message)
|
|
21
|
+
singleton_class.class_eval do
|
|
22
|
+
define_method("warn_#{id}") do
|
|
23
|
+
unless instance_variable_get("@#{id}")
|
|
24
|
+
Mongoid.logger.warn(message)
|
|
25
|
+
instance_variable_set("@#{id}", true)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
warning :geo_haystack_deprecated, 'The geoHaystack type is deprecated.'
|
|
33
|
+
warning :symbol_type_deprecated, 'The BSON Symbol type is deprecated by MongoDB. Please use String or StringifiedSymbol field types instead of the Symbol field type.'
|
|
34
|
+
warning :legacy_readonly, 'The readonly! method will only mark the document readonly when the legacy_readonly feature flag is switched off.'
|
|
35
|
+
warning :mutable_ids, 'Ignoring updates to immutable attribute `_id`. Please set Mongoid::Config.immutable_ids to true and update your code so that `_id` is never updated.'
|
|
36
|
+
end
|
|
37
|
+
end
|
data/lib/mongoid.rb
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
3
|
-
|
|
4
|
-
require "support/ruby_version"
|
|
2
|
+
# rubocop:todo all
|
|
5
3
|
|
|
6
4
|
require "forwardable"
|
|
7
5
|
require "time"
|
|
@@ -14,35 +12,42 @@ require "active_support/inflector"
|
|
|
14
12
|
require "active_support/time_with_zone"
|
|
15
13
|
require "active_model"
|
|
16
14
|
|
|
15
|
+
require 'concurrent-ruby'
|
|
16
|
+
|
|
17
17
|
require "mongo"
|
|
18
|
-
require
|
|
18
|
+
require "mongo/active_support"
|
|
19
19
|
|
|
20
20
|
require "mongoid/version"
|
|
21
|
+
require "mongoid/deprecable"
|
|
21
22
|
require "mongoid/config"
|
|
22
23
|
require "mongoid/persistence_context"
|
|
24
|
+
require "mongoid/loadable"
|
|
23
25
|
require "mongoid/loggable"
|
|
24
26
|
require "mongoid/clients"
|
|
25
27
|
require "mongoid/document"
|
|
26
28
|
require "mongoid/tasks/database"
|
|
27
|
-
require "mongoid/
|
|
29
|
+
require "mongoid/tasks/encryption"
|
|
30
|
+
require "mongoid/warnings"
|
|
31
|
+
require "mongoid/utils"
|
|
28
32
|
|
|
29
|
-
# If we are using Rails then we will include the Mongoid railtie.
|
|
30
|
-
#
|
|
33
|
+
# If we are using Rails then we will include the Mongoid railtie.
|
|
34
|
+
# This configures initializers required to integrate Mongoid with Rails.
|
|
31
35
|
if defined?(Rails)
|
|
32
36
|
require "mongoid/railtie"
|
|
33
37
|
end
|
|
34
38
|
|
|
35
|
-
#
|
|
39
|
+
# Add English locale config to load path by default.
|
|
36
40
|
I18n.load_path << File.join(File.dirname(__FILE__), "config", "locales", "en.yml")
|
|
37
41
|
|
|
42
|
+
# Top-level module for project.
|
|
38
43
|
module Mongoid
|
|
39
44
|
extend Forwardable
|
|
40
45
|
extend Loggable
|
|
46
|
+
extend Loadable
|
|
41
47
|
extend self
|
|
48
|
+
extend Clients::Sessions::ClassMethods
|
|
42
49
|
|
|
43
50
|
# A string added to the platform details of Ruby driver client handshake documents.
|
|
44
|
-
#
|
|
45
|
-
# @since 6.1.0
|
|
46
51
|
PLATFORM_DETAILS = "mongoid-#{VERSION}".freeze
|
|
47
52
|
|
|
48
53
|
# The minimum MongoDB version supported.
|
|
@@ -60,11 +65,19 @@ module Mongoid
|
|
|
60
65
|
# }
|
|
61
66
|
# end
|
|
62
67
|
#
|
|
63
|
-
# @
|
|
68
|
+
# @example Using a block without an argument. Use `config` inside
|
|
69
|
+
# the block to perform variable assignment.
|
|
64
70
|
#
|
|
65
|
-
#
|
|
66
|
-
|
|
67
|
-
|
|
71
|
+
# Mongoid.configure do
|
|
72
|
+
# connect_to("mongoid_test")
|
|
73
|
+
#
|
|
74
|
+
# config.preload_models = true
|
|
75
|
+
#
|
|
76
|
+
# @return [ Config ] The configuration object.
|
|
77
|
+
def configure(&block)
|
|
78
|
+
return Config unless block_given?
|
|
79
|
+
|
|
80
|
+
block.arity == 0 ? Config.instance_exec(&block) : yield(Config)
|
|
68
81
|
end
|
|
69
82
|
|
|
70
83
|
# Convenience method for getting the default client.
|
|
@@ -73,8 +86,6 @@ module Mongoid
|
|
|
73
86
|
# Mongoid.default_client
|
|
74
87
|
#
|
|
75
88
|
# @return [ Mongo::Client ] The default client.
|
|
76
|
-
#
|
|
77
|
-
# @since 5.0.0
|
|
78
89
|
def default_client
|
|
79
90
|
Clients.default
|
|
80
91
|
end
|
|
@@ -85,20 +96,26 @@ module Mongoid
|
|
|
85
96
|
# Mongoid.disconnect_clients
|
|
86
97
|
#
|
|
87
98
|
# @return [ true ] True.
|
|
88
|
-
#
|
|
89
|
-
# @since 5.0.0
|
|
90
99
|
def disconnect_clients
|
|
91
100
|
Clients.disconnect
|
|
92
101
|
end
|
|
93
102
|
|
|
103
|
+
# Reconnect all active clients.
|
|
104
|
+
#
|
|
105
|
+
# @example Reconnect all active clients.
|
|
106
|
+
# Mongoid.reconnect_clients
|
|
107
|
+
#
|
|
108
|
+
# @return [ true ] True.
|
|
109
|
+
def reconnect_clients
|
|
110
|
+
Clients.reconnect
|
|
111
|
+
end
|
|
112
|
+
|
|
94
113
|
# Convenience method for getting a named client.
|
|
95
114
|
#
|
|
96
115
|
# @example Get a named client.
|
|
97
116
|
# Mongoid.client(:default)
|
|
98
117
|
#
|
|
99
118
|
# @return [ Mongo::Client ] The named client.
|
|
100
|
-
#
|
|
101
|
-
# @since 5.0.0
|
|
102
119
|
def client(name)
|
|
103
120
|
Clients.with_name(name)
|
|
104
121
|
end
|
|
@@ -108,22 +125,39 @@ module Mongoid
|
|
|
108
125
|
#
|
|
109
126
|
# @example Delegate the configuration methods.
|
|
110
127
|
# Mongoid.database = Mongo::Connection.new.db("test")
|
|
111
|
-
#
|
|
112
|
-
# @since 1.0.0
|
|
113
128
|
def_delegators Config, *(Config.public_instance_methods(false) - [ :logger=, :logger ])
|
|
114
129
|
|
|
130
|
+
# Define persistence context that is used when a transaction method is called
|
|
131
|
+
# on Mongoid module.
|
|
132
|
+
#
|
|
133
|
+
# @api private
|
|
134
|
+
def persistence_context
|
|
135
|
+
PersistenceContext.get(Mongoid) || PersistenceContext.new(Mongoid)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Define client that is used when a transaction method is called
|
|
139
|
+
# on Mongoid module. This MUST be the default client.
|
|
140
|
+
#
|
|
141
|
+
# @api private
|
|
142
|
+
def storage_options
|
|
143
|
+
{ client: :default }
|
|
144
|
+
end
|
|
115
145
|
|
|
116
146
|
# Module used to prepend the discriminator key assignment function to change
|
|
117
147
|
# the value assigned to the discriminator key to a string.
|
|
118
148
|
#
|
|
119
149
|
# @api private
|
|
120
150
|
module GlobalDiscriminatorKeyAssignment
|
|
151
|
+
|
|
121
152
|
# This class is used for obtaining the method definition location for
|
|
122
153
|
# Mongoid methods.
|
|
123
154
|
class InvalidFieldHost
|
|
124
155
|
include Mongoid::Document
|
|
125
156
|
end
|
|
126
157
|
|
|
158
|
+
# Sets the global discriminator key name.
|
|
159
|
+
#
|
|
160
|
+
# @param [ String | Symbol ] value The new discriminator key name.
|
|
127
161
|
def discriminator_key=(value)
|
|
128
162
|
Mongoid::Fields::Validators::Macro.validate_field_name(InvalidFieldHost, value)
|
|
129
163
|
value = value.to_s
|