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,5 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
require "spec_helper"
|
|
5
5
|
|
|
@@ -9,6 +9,28 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
9
9
|
|
|
10
10
|
context "when the document is a root document" do
|
|
11
11
|
|
|
12
|
+
context "when setting the read preference to non-primary" do
|
|
13
|
+
|
|
14
|
+
before do
|
|
15
|
+
Dictionary.validates_uniqueness_of :name
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
after do
|
|
19
|
+
Dictionary.reset_callbacks(:validate)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "reads from the primary" do
|
|
23
|
+
expect_any_instance_of(Mongoid::Criteria).to receive(:read).once.and_wrap_original do |m, *args, **kwargs|
|
|
24
|
+
crit = m.call(*args, **kwargs)
|
|
25
|
+
expect(crit.view.options["read"]).to eq({ "mode" => :primary })
|
|
26
|
+
crit
|
|
27
|
+
end
|
|
28
|
+
Dictionary.with(read: { mode: :secondary }) do |klass|
|
|
29
|
+
klass.create!(name: "Websters")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
12
34
|
context "when adding custom persistence options" do
|
|
13
35
|
|
|
14
36
|
before do
|
|
@@ -23,7 +45,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
23
45
|
|
|
24
46
|
before do
|
|
25
47
|
Dictionary.with(collection: "dicts") do |klass|
|
|
26
|
-
klass.create(name: "websters")
|
|
48
|
+
klass.create!(name: "websters")
|
|
27
49
|
end
|
|
28
50
|
end
|
|
29
51
|
|
|
@@ -81,7 +103,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
81
103
|
context "when the attribute id is unique" do
|
|
82
104
|
|
|
83
105
|
let(:dictionary) do
|
|
84
|
-
Dictionary.create
|
|
106
|
+
Dictionary.create!
|
|
85
107
|
end
|
|
86
108
|
|
|
87
109
|
let(:word) do
|
|
@@ -121,7 +143,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
121
143
|
it "adds the uniqueness error to the aliased field name" do
|
|
122
144
|
dictionary.valid?
|
|
123
145
|
expect(dictionary.errors).to have_key(:language)
|
|
124
|
-
expect(dictionary.errors[:language]).to eq([ "
|
|
146
|
+
expect(dictionary.errors[:language]).to eq([ "has already been taken" ])
|
|
125
147
|
end
|
|
126
148
|
end
|
|
127
149
|
|
|
@@ -138,7 +160,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
138
160
|
it "adds the uniqueness error to the underlying field name" do
|
|
139
161
|
dictionary.valid?
|
|
140
162
|
expect(dictionary.errors).to have_key(:l)
|
|
141
|
-
expect(dictionary.errors[:l]).to eq([ "
|
|
163
|
+
expect(dictionary.errors[:l]).to eq([ "has already been taken" ])
|
|
142
164
|
end
|
|
143
165
|
end
|
|
144
166
|
end
|
|
@@ -173,7 +195,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
173
195
|
context "when a document with no value exists in the database" do
|
|
174
196
|
|
|
175
197
|
before do
|
|
176
|
-
Dictionary.create
|
|
198
|
+
Dictionary.create!
|
|
177
199
|
end
|
|
178
200
|
|
|
179
201
|
let(:dictionary) do
|
|
@@ -191,7 +213,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
191
213
|
context "when single localization" do
|
|
192
214
|
|
|
193
215
|
before do
|
|
194
|
-
Dictionary.create(description: "english")
|
|
216
|
+
Dictionary.create!(description: "english")
|
|
195
217
|
end
|
|
196
218
|
|
|
197
219
|
let(:dictionary) do
|
|
@@ -227,7 +249,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
227
249
|
context "when single localization" do
|
|
228
250
|
|
|
229
251
|
before do
|
|
230
|
-
Dictionary.create(description: "english")
|
|
252
|
+
Dictionary.create!(description: "english")
|
|
231
253
|
end
|
|
232
254
|
|
|
233
255
|
let(:dictionary) do
|
|
@@ -240,7 +262,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
240
262
|
|
|
241
263
|
it "adds the uniqueness error" do
|
|
242
264
|
dictionary.valid?
|
|
243
|
-
expect(dictionary.errors[:description]).to eq([ "
|
|
265
|
+
expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
|
|
244
266
|
end
|
|
245
267
|
end
|
|
246
268
|
|
|
@@ -261,7 +283,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
261
283
|
|
|
262
284
|
it "adds the uniqueness error" do
|
|
263
285
|
dictionary.valid?
|
|
264
|
-
expect(dictionary.errors[:description]).to eq([ "
|
|
286
|
+
expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
|
|
265
287
|
end
|
|
266
288
|
end
|
|
267
289
|
end
|
|
@@ -283,7 +305,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
283
305
|
context "when there are no special characters" do
|
|
284
306
|
|
|
285
307
|
before do
|
|
286
|
-
Dictionary.create(description: "english")
|
|
308
|
+
Dictionary.create!(description: "english")
|
|
287
309
|
end
|
|
288
310
|
|
|
289
311
|
let(:dictionary) do
|
|
@@ -298,7 +320,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
298
320
|
context "when special characters exist" do
|
|
299
321
|
|
|
300
322
|
before do
|
|
301
|
-
Dictionary.create(description: "english")
|
|
323
|
+
Dictionary.create!(description: "english")
|
|
302
324
|
end
|
|
303
325
|
|
|
304
326
|
let(:dictionary) do
|
|
@@ -318,7 +340,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
318
340
|
context "when signle localization" do
|
|
319
341
|
|
|
320
342
|
before do
|
|
321
|
-
Dictionary.create(description: "english")
|
|
343
|
+
Dictionary.create!(description: "english")
|
|
322
344
|
end
|
|
323
345
|
|
|
324
346
|
let(:dictionary) do
|
|
@@ -331,7 +353,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
331
353
|
|
|
332
354
|
it "adds the uniqueness error" do
|
|
333
355
|
dictionary.valid?
|
|
334
|
-
expect(dictionary.errors[:description]).to eq([ "
|
|
356
|
+
expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
|
|
335
357
|
end
|
|
336
358
|
end
|
|
337
359
|
|
|
@@ -352,7 +374,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
352
374
|
|
|
353
375
|
it "adds the uniqueness error" do
|
|
354
376
|
dictionary.valid?
|
|
355
|
-
expect(dictionary.errors[:description]).to eq([ "
|
|
377
|
+
expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
|
|
356
378
|
end
|
|
357
379
|
end
|
|
358
380
|
end
|
|
@@ -360,7 +382,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
360
382
|
context "when the document is the match in the database" do
|
|
361
383
|
|
|
362
384
|
let!(:dictionary) do
|
|
363
|
-
Dictionary.create(description: "english")
|
|
385
|
+
Dictionary.create!(description: "english")
|
|
364
386
|
end
|
|
365
387
|
|
|
366
388
|
it "returns true" do
|
|
@@ -400,7 +422,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
400
422
|
|
|
401
423
|
it "adds the uniqueness error" do
|
|
402
424
|
dictionary.valid?
|
|
403
|
-
expect(dictionary.errors[:description]).to eq([ "
|
|
425
|
+
expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
|
|
404
426
|
end
|
|
405
427
|
end
|
|
406
428
|
end
|
|
@@ -420,7 +442,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
420
442
|
context "when the attribute is unique" do
|
|
421
443
|
|
|
422
444
|
let!(:oxford) do
|
|
423
|
-
Dictionary.create(name: "Oxford")
|
|
445
|
+
Dictionary.create!(name: "Oxford")
|
|
424
446
|
end
|
|
425
447
|
|
|
426
448
|
let(:dictionary) do
|
|
@@ -448,7 +470,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
448
470
|
context "when the document is not the match" do
|
|
449
471
|
|
|
450
472
|
before do
|
|
451
|
-
Dictionary.create(name: "Oxford")
|
|
473
|
+
Dictionary.create!(name: "Oxford")
|
|
452
474
|
end
|
|
453
475
|
|
|
454
476
|
let!(:dictionary) do
|
|
@@ -461,7 +483,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
461
483
|
|
|
462
484
|
it "adds the uniqueness error" do
|
|
463
485
|
dictionary.valid?
|
|
464
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
486
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
465
487
|
end
|
|
466
488
|
end
|
|
467
489
|
|
|
@@ -470,7 +492,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
470
492
|
context "when the field has changed" do
|
|
471
493
|
|
|
472
494
|
let!(:dictionary) do
|
|
473
|
-
Dictionary.create(name: "Oxford")
|
|
495
|
+
Dictionary.create!(name: "Oxford")
|
|
474
496
|
end
|
|
475
497
|
|
|
476
498
|
it "returns true" do
|
|
@@ -522,7 +544,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
522
544
|
context "when the attribute is not unique" do
|
|
523
545
|
|
|
524
546
|
before do
|
|
525
|
-
Dictionary.create(name: "Oxford")
|
|
547
|
+
Dictionary.create!(name: "Oxford")
|
|
526
548
|
end
|
|
527
549
|
|
|
528
550
|
let(:dictionary) do
|
|
@@ -549,7 +571,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
549
571
|
context "when the attribute is unique" do
|
|
550
572
|
|
|
551
573
|
before do
|
|
552
|
-
Dictionary.create(name: "Oxford", language: "English")
|
|
574
|
+
Dictionary.create!(name: "Oxford", language: "English")
|
|
553
575
|
end
|
|
554
576
|
|
|
555
577
|
let(:dictionary) do
|
|
@@ -564,7 +586,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
564
586
|
context "when the attribute is unique in the scope" do
|
|
565
587
|
|
|
566
588
|
before do
|
|
567
|
-
Dictionary.create(name: "Oxford", language: "English")
|
|
589
|
+
Dictionary.create!(name: "Oxford", language: "English")
|
|
568
590
|
end
|
|
569
591
|
|
|
570
592
|
let(:dictionary) do
|
|
@@ -579,7 +601,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
579
601
|
context "when the attribute is not unique with no scope" do
|
|
580
602
|
|
|
581
603
|
before do
|
|
582
|
-
Dictionary.create(name: "Oxford", language: "English")
|
|
604
|
+
Dictionary.create!(name: "Oxford", language: "English")
|
|
583
605
|
end
|
|
584
606
|
|
|
585
607
|
let(:dictionary) do
|
|
@@ -594,7 +616,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
594
616
|
context "when the attribute is not unique in another scope" do
|
|
595
617
|
|
|
596
618
|
before do
|
|
597
|
-
Dictionary.create(name: "Oxford", language: "English")
|
|
619
|
+
Dictionary.create!(name: "Oxford", language: "English")
|
|
598
620
|
end
|
|
599
621
|
|
|
600
622
|
let(:dictionary) do
|
|
@@ -611,7 +633,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
611
633
|
context "when the document is not the match" do
|
|
612
634
|
|
|
613
635
|
before do
|
|
614
|
-
Dictionary.create(name: "Oxford", language: "English")
|
|
636
|
+
Dictionary.create!(name: "Oxford", language: "English")
|
|
615
637
|
end
|
|
616
638
|
|
|
617
639
|
let(:dictionary) do
|
|
@@ -624,14 +646,14 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
624
646
|
|
|
625
647
|
it "adds the uniqueness errors" do
|
|
626
648
|
dictionary.valid?
|
|
627
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
649
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
628
650
|
end
|
|
629
651
|
end
|
|
630
652
|
|
|
631
653
|
context "when the document is the match in the database" do
|
|
632
654
|
|
|
633
655
|
let!(:dictionary) do
|
|
634
|
-
Dictionary.create(name: "Oxford", language: "English")
|
|
656
|
+
Dictionary.create!(name: "Oxford", language: "English")
|
|
635
657
|
end
|
|
636
658
|
|
|
637
659
|
it "returns true" do
|
|
@@ -654,7 +676,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
654
676
|
context "when the attribute is unique" do
|
|
655
677
|
|
|
656
678
|
before do
|
|
657
|
-
Dictionary.create(name: "Oxford", publisher: "Amazon")
|
|
679
|
+
Dictionary.create!(name: "Oxford", publisher: "Amazon")
|
|
658
680
|
end
|
|
659
681
|
|
|
660
682
|
let(:dictionary) do
|
|
@@ -669,7 +691,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
669
691
|
context "when the attribute is unique in the scope" do
|
|
670
692
|
|
|
671
693
|
before do
|
|
672
|
-
Dictionary.create(name: "Oxford", publisher: "Amazon")
|
|
694
|
+
Dictionary.create!(name: "Oxford", publisher: "Amazon")
|
|
673
695
|
end
|
|
674
696
|
|
|
675
697
|
let(:dictionary) do
|
|
@@ -702,14 +724,14 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
702
724
|
|
|
703
725
|
it "should set an error for associated object not being unique" do
|
|
704
726
|
item.update_attributes(folder_id: personal_folder.id)
|
|
705
|
-
expect(item.errors.messages[:name].first).to eq("
|
|
727
|
+
expect(item.errors.messages[:name].first).to eq("has already been taken")
|
|
706
728
|
end
|
|
707
729
|
end
|
|
708
730
|
|
|
709
731
|
context "when the attribute is not unique with no scope" do
|
|
710
732
|
|
|
711
733
|
before do
|
|
712
|
-
Dictionary.create(name: "Oxford", publisher: "Amazon")
|
|
734
|
+
Dictionary.create!(name: "Oxford", publisher: "Amazon")
|
|
713
735
|
end
|
|
714
736
|
|
|
715
737
|
let(:dictionary) do
|
|
@@ -724,7 +746,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
724
746
|
context "when the attribute is not unique in another scope" do
|
|
725
747
|
|
|
726
748
|
before do
|
|
727
|
-
Dictionary.create(name: "Oxford", publisher: "Amazon")
|
|
749
|
+
Dictionary.create!(name: "Oxford", publisher: "Amazon")
|
|
728
750
|
end
|
|
729
751
|
|
|
730
752
|
let(:dictionary) do
|
|
@@ -741,7 +763,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
741
763
|
context "when the document is not the match" do
|
|
742
764
|
|
|
743
765
|
before do
|
|
744
|
-
Dictionary.create(name: "Oxford", publisher: "Amazon")
|
|
766
|
+
Dictionary.create!(name: "Oxford", publisher: "Amazon")
|
|
745
767
|
end
|
|
746
768
|
|
|
747
769
|
let(:dictionary) do
|
|
@@ -754,14 +776,14 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
754
776
|
|
|
755
777
|
it "adds the uniqueness errors" do
|
|
756
778
|
dictionary.valid?
|
|
757
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
779
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
758
780
|
end
|
|
759
781
|
end
|
|
760
782
|
|
|
761
783
|
context "when the document is the match in the database" do
|
|
762
784
|
|
|
763
785
|
let!(:dictionary) do
|
|
764
|
-
Dictionary.create(name: "Oxford", publisher: "Amazon")
|
|
786
|
+
Dictionary.create!(name: "Oxford", publisher: "Amazon")
|
|
765
787
|
end
|
|
766
788
|
|
|
767
789
|
it "returns true" do
|
|
@@ -772,7 +794,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
772
794
|
context "when one of the scopes is a time" do
|
|
773
795
|
|
|
774
796
|
before do
|
|
775
|
-
Dictionary.create(
|
|
797
|
+
Dictionary.create!(
|
|
776
798
|
name: "Oxford",
|
|
777
799
|
publisher: "Amazon",
|
|
778
800
|
published: 10.days.ago.to_time
|
|
@@ -793,7 +815,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
793
815
|
|
|
794
816
|
it "adds the uniqueness errors" do
|
|
795
817
|
dictionary.valid?
|
|
796
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
818
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
797
819
|
end
|
|
798
820
|
end
|
|
799
821
|
end
|
|
@@ -816,7 +838,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
816
838
|
|
|
817
839
|
expect do
|
|
818
840
|
Dictionary.create!(name: "French-English", year: 1960)
|
|
819
|
-
end.to raise_error(Mongoid::Errors::Validations, /Name
|
|
841
|
+
end.to raise_error(Mongoid::Errors::Validations, /Name has already been taken/)
|
|
820
842
|
|
|
821
843
|
expect(Dictionary.all.size).to eq(1)
|
|
822
844
|
end
|
|
@@ -856,7 +878,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
856
878
|
context "when the attribute is unique" do
|
|
857
879
|
|
|
858
880
|
before do
|
|
859
|
-
Dictionary.create(name: "Oxford", publisher: "Amazon")
|
|
881
|
+
Dictionary.create!(name: "Oxford", publisher: "Amazon")
|
|
860
882
|
end
|
|
861
883
|
|
|
862
884
|
let(:dictionary) do
|
|
@@ -871,7 +893,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
871
893
|
context "when the attribute is unique in the scope" do
|
|
872
894
|
|
|
873
895
|
before do
|
|
874
|
-
Dictionary.create(
|
|
896
|
+
Dictionary.create!(
|
|
875
897
|
name: "Oxford",
|
|
876
898
|
publisher: "Amazon",
|
|
877
899
|
year: 2011
|
|
@@ -894,7 +916,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
894
916
|
context "when the attribute is not unique with no scope" do
|
|
895
917
|
|
|
896
918
|
before do
|
|
897
|
-
Dictionary.create(name: "Oxford", publisher: "Amazon")
|
|
919
|
+
Dictionary.create!(name: "Oxford", publisher: "Amazon")
|
|
898
920
|
end
|
|
899
921
|
|
|
900
922
|
let(:dictionary) do
|
|
@@ -909,7 +931,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
909
931
|
context "when the attribute is not unique in another scope" do
|
|
910
932
|
|
|
911
933
|
before do
|
|
912
|
-
Dictionary.create(
|
|
934
|
+
Dictionary.create!(
|
|
913
935
|
name: "Oxford",
|
|
914
936
|
publisher: "Amazon",
|
|
915
937
|
year: 1995
|
|
@@ -934,7 +956,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
934
956
|
context "when the document is not the match" do
|
|
935
957
|
|
|
936
958
|
before do
|
|
937
|
-
Dictionary.create(
|
|
959
|
+
Dictionary.create!(
|
|
938
960
|
name: "Oxford",
|
|
939
961
|
publisher: "Amazon",
|
|
940
962
|
year: 1960
|
|
@@ -955,14 +977,14 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
955
977
|
|
|
956
978
|
it "adds the uniqueness errors" do
|
|
957
979
|
dictionary.valid?
|
|
958
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
980
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
959
981
|
end
|
|
960
982
|
end
|
|
961
983
|
|
|
962
984
|
context "when the document is the match in the database" do
|
|
963
985
|
|
|
964
986
|
let!(:dictionary) do
|
|
965
|
-
Dictionary.create(
|
|
987
|
+
Dictionary.create!(
|
|
966
988
|
name: "Oxford",
|
|
967
989
|
publisher: "Amazon",
|
|
968
990
|
year: 1960
|
|
@@ -989,7 +1011,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
989
1011
|
context "when the attribute is unique" do
|
|
990
1012
|
|
|
991
1013
|
before do
|
|
992
|
-
Dictionary.create(name: "Oxford")
|
|
1014
|
+
Dictionary.create!(name: "Oxford")
|
|
993
1015
|
end
|
|
994
1016
|
|
|
995
1017
|
let(:dictionary) do
|
|
@@ -1006,7 +1028,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1006
1028
|
context "when the document is not the match" do
|
|
1007
1029
|
|
|
1008
1030
|
before do
|
|
1009
|
-
Dictionary.create(name: "Oxford")
|
|
1031
|
+
Dictionary.create!(name: "Oxford")
|
|
1010
1032
|
end
|
|
1011
1033
|
|
|
1012
1034
|
let(:dictionary) do
|
|
@@ -1019,14 +1041,14 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1019
1041
|
|
|
1020
1042
|
it "adds the uniqueness error" do
|
|
1021
1043
|
dictionary.valid?
|
|
1022
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
1044
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
1023
1045
|
end
|
|
1024
1046
|
end
|
|
1025
1047
|
|
|
1026
1048
|
context "when the document is the match in the database" do
|
|
1027
1049
|
|
|
1028
1050
|
let!(:dictionary) do
|
|
1029
|
-
Dictionary.create(name: "Oxford")
|
|
1051
|
+
Dictionary.create!(name: "Oxford")
|
|
1030
1052
|
end
|
|
1031
1053
|
|
|
1032
1054
|
it "returns true" do
|
|
@@ -1051,7 +1073,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1051
1073
|
context "when there are no special characters" do
|
|
1052
1074
|
|
|
1053
1075
|
before do
|
|
1054
|
-
Dictionary.create(name: "Oxford")
|
|
1076
|
+
Dictionary.create!(name: "Oxford")
|
|
1055
1077
|
end
|
|
1056
1078
|
|
|
1057
1079
|
let(:dictionary) do
|
|
@@ -1066,7 +1088,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1066
1088
|
context "when special characters exist" do
|
|
1067
1089
|
|
|
1068
1090
|
before do
|
|
1069
|
-
Dictionary.create(name: "Oxford")
|
|
1091
|
+
Dictionary.create!(name: "Oxford")
|
|
1070
1092
|
end
|
|
1071
1093
|
|
|
1072
1094
|
let(:dictionary) do
|
|
@@ -1084,7 +1106,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1084
1106
|
context "when the document is not the match" do
|
|
1085
1107
|
|
|
1086
1108
|
before do
|
|
1087
|
-
Dictionary.create(name: "Oxford")
|
|
1109
|
+
Dictionary.create!(name: "Oxford")
|
|
1088
1110
|
end
|
|
1089
1111
|
|
|
1090
1112
|
let(:dictionary) do
|
|
@@ -1097,14 +1119,14 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1097
1119
|
|
|
1098
1120
|
it "adds the uniqueness error" do
|
|
1099
1121
|
dictionary.valid?
|
|
1100
|
-
expect(dictionary.errors[:name]).to eq([ "
|
|
1122
|
+
expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
|
|
1101
1123
|
end
|
|
1102
1124
|
end
|
|
1103
1125
|
|
|
1104
1126
|
context "when the document is the match in the database" do
|
|
1105
1127
|
|
|
1106
1128
|
let!(:dictionary) do
|
|
1107
|
-
Dictionary.create(name: "Oxford")
|
|
1129
|
+
Dictionary.create!(name: "Oxford")
|
|
1108
1130
|
end
|
|
1109
1131
|
|
|
1110
1132
|
it "returns true" do
|
|
@@ -1134,7 +1156,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1134
1156
|
context "when the attribute is nil" do
|
|
1135
1157
|
|
|
1136
1158
|
before do
|
|
1137
|
-
Dictionary.create
|
|
1159
|
+
Dictionary.create!
|
|
1138
1160
|
end
|
|
1139
1161
|
|
|
1140
1162
|
let(:dictionary) do
|
|
@@ -1160,7 +1182,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1160
1182
|
context "when the attribute is blank" do
|
|
1161
1183
|
|
|
1162
1184
|
before do
|
|
1163
|
-
Dictionary.create(name: "")
|
|
1185
|
+
Dictionary.create!(name: "")
|
|
1164
1186
|
end
|
|
1165
1187
|
|
|
1166
1188
|
let(:dictionary) do
|
|
@@ -1189,7 +1211,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1189
1211
|
context "when the attribute is unique" do
|
|
1190
1212
|
|
|
1191
1213
|
before do
|
|
1192
|
-
Login.create(username: "Oxford")
|
|
1214
|
+
Login.create!(username: "Oxford")
|
|
1193
1215
|
end
|
|
1194
1216
|
|
|
1195
1217
|
let(:login) do
|
|
@@ -1206,7 +1228,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1206
1228
|
context "when the document is not the match" do
|
|
1207
1229
|
|
|
1208
1230
|
before do
|
|
1209
|
-
Login.create(username: "Oxford")
|
|
1231
|
+
Login.create!(username: "Oxford")
|
|
1210
1232
|
end
|
|
1211
1233
|
|
|
1212
1234
|
let(:login) do
|
|
@@ -1219,14 +1241,14 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1219
1241
|
|
|
1220
1242
|
it "adds the uniqueness error" do
|
|
1221
1243
|
login.valid?
|
|
1222
|
-
expect(login.errors[:username]).to eq([ "
|
|
1244
|
+
expect(login.errors[:username]).to eq([ "has already been taken" ])
|
|
1223
1245
|
end
|
|
1224
1246
|
end
|
|
1225
1247
|
|
|
1226
1248
|
context "when the document is the match in the database" do
|
|
1227
1249
|
|
|
1228
1250
|
let!(:login) do
|
|
1229
|
-
Login.create(username: "Oxford")
|
|
1251
|
+
Login.create!(username: "Oxford")
|
|
1230
1252
|
end
|
|
1231
1253
|
|
|
1232
1254
|
it "returns true" do
|
|
@@ -1249,7 +1271,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1249
1271
|
context "when the attribute is unique" do
|
|
1250
1272
|
|
|
1251
1273
|
before do
|
|
1252
|
-
Login.create(username: "Oxford", application_id: 1)
|
|
1274
|
+
Login.create!(username: "Oxford", application_id: 1)
|
|
1253
1275
|
end
|
|
1254
1276
|
|
|
1255
1277
|
let(:login) do
|
|
@@ -1264,7 +1286,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1264
1286
|
context "when the attribute is unique in the scope" do
|
|
1265
1287
|
|
|
1266
1288
|
before do
|
|
1267
|
-
Login.create(username: "Oxford", application_id: 1)
|
|
1289
|
+
Login.create!(username: "Oxford", application_id: 1)
|
|
1268
1290
|
end
|
|
1269
1291
|
|
|
1270
1292
|
let(:login) do
|
|
@@ -1279,7 +1301,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1279
1301
|
context "when the attribute is not unique with no scope" do
|
|
1280
1302
|
|
|
1281
1303
|
before do
|
|
1282
|
-
Login.create(username: "Oxford", application_id: 1)
|
|
1304
|
+
Login.create!(username: "Oxford", application_id: 1)
|
|
1283
1305
|
end
|
|
1284
1306
|
|
|
1285
1307
|
let(:login) do
|
|
@@ -1294,7 +1316,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1294
1316
|
context "when the attribute is not unique in another scope" do
|
|
1295
1317
|
|
|
1296
1318
|
before do
|
|
1297
|
-
Login.create(username: "Oxford", application_id: 1)
|
|
1319
|
+
Login.create!(username: "Oxford", application_id: 1)
|
|
1298
1320
|
end
|
|
1299
1321
|
|
|
1300
1322
|
let(:login) do
|
|
@@ -1311,7 +1333,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1311
1333
|
context "when the document is not the match" do
|
|
1312
1334
|
|
|
1313
1335
|
before do
|
|
1314
|
-
Login.create(username: "Oxford", application_id: 1)
|
|
1336
|
+
Login.create!(username: "Oxford", application_id: 1)
|
|
1315
1337
|
end
|
|
1316
1338
|
|
|
1317
1339
|
let(:login) do
|
|
@@ -1324,14 +1346,14 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1324
1346
|
|
|
1325
1347
|
it "adds the uniqueness errors" do
|
|
1326
1348
|
login.valid?
|
|
1327
|
-
expect(login.errors[:username]).to eq([ "
|
|
1349
|
+
expect(login.errors[:username]).to eq([ "has already been taken" ])
|
|
1328
1350
|
end
|
|
1329
1351
|
end
|
|
1330
1352
|
|
|
1331
1353
|
context "when the document is the match in the database" do
|
|
1332
1354
|
|
|
1333
1355
|
let!(:login) do
|
|
1334
|
-
Login.create(username: "Oxford", application_id: 1)
|
|
1356
|
+
Login.create!(username: "Oxford", application_id: 1)
|
|
1335
1357
|
end
|
|
1336
1358
|
|
|
1337
1359
|
it "returns true" do
|
|
@@ -1354,7 +1376,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1354
1376
|
context "when the attribute is unique" do
|
|
1355
1377
|
|
|
1356
1378
|
before do
|
|
1357
|
-
Login.create(username: "Oxford")
|
|
1379
|
+
Login.create!(username: "Oxford")
|
|
1358
1380
|
end
|
|
1359
1381
|
|
|
1360
1382
|
let(:login) do
|
|
@@ -1371,7 +1393,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1371
1393
|
context "when the document is not the match" do
|
|
1372
1394
|
|
|
1373
1395
|
before do
|
|
1374
|
-
Login.create(username: "Oxford")
|
|
1396
|
+
Login.create!(username: "Oxford")
|
|
1375
1397
|
end
|
|
1376
1398
|
|
|
1377
1399
|
let(:login) do
|
|
@@ -1384,14 +1406,14 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1384
1406
|
|
|
1385
1407
|
it "adds the uniqueness error" do
|
|
1386
1408
|
login.valid?
|
|
1387
|
-
expect(login.errors[:username]).to eq([ "
|
|
1409
|
+
expect(login.errors[:username]).to eq([ "has already been taken" ])
|
|
1388
1410
|
end
|
|
1389
1411
|
end
|
|
1390
1412
|
|
|
1391
1413
|
context "when the document is the match in the database" do
|
|
1392
1414
|
|
|
1393
1415
|
let!(:login) do
|
|
1394
|
-
Login.create(username: "Oxford")
|
|
1416
|
+
Login.create!(username: "Oxford")
|
|
1395
1417
|
end
|
|
1396
1418
|
|
|
1397
1419
|
it "returns true" do
|
|
@@ -1416,7 +1438,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1416
1438
|
context "when there are no special characters" do
|
|
1417
1439
|
|
|
1418
1440
|
before do
|
|
1419
|
-
Login.create(username: "Oxford")
|
|
1441
|
+
Login.create!(username: "Oxford")
|
|
1420
1442
|
end
|
|
1421
1443
|
|
|
1422
1444
|
let(:login) do
|
|
@@ -1431,7 +1453,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1431
1453
|
context "when special characters exist" do
|
|
1432
1454
|
|
|
1433
1455
|
before do
|
|
1434
|
-
Login.create(username: "Oxford")
|
|
1456
|
+
Login.create!(username: "Oxford")
|
|
1435
1457
|
end
|
|
1436
1458
|
|
|
1437
1459
|
let(:login) do
|
|
@@ -1449,7 +1471,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1449
1471
|
context "when the document is not the match" do
|
|
1450
1472
|
|
|
1451
1473
|
before do
|
|
1452
|
-
Login.create(username: "Oxford")
|
|
1474
|
+
Login.create!(username: "Oxford")
|
|
1453
1475
|
end
|
|
1454
1476
|
|
|
1455
1477
|
let(:login) do
|
|
@@ -1462,14 +1484,14 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1462
1484
|
|
|
1463
1485
|
it "adds the uniqueness error" do
|
|
1464
1486
|
login.valid?
|
|
1465
|
-
expect(login.errors[:username]).to eq([ "
|
|
1487
|
+
expect(login.errors[:username]).to eq([ "has already been taken" ])
|
|
1466
1488
|
end
|
|
1467
1489
|
end
|
|
1468
1490
|
|
|
1469
1491
|
context "when the document is the match in the database" do
|
|
1470
1492
|
|
|
1471
1493
|
let!(:login) do
|
|
1472
|
-
Login.create(username: "Oxford")
|
|
1494
|
+
Login.create!(username: "Oxford")
|
|
1473
1495
|
end
|
|
1474
1496
|
|
|
1475
1497
|
it "returns true" do
|
|
@@ -1492,7 +1514,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1492
1514
|
context "when the attribute is nil" do
|
|
1493
1515
|
|
|
1494
1516
|
before do
|
|
1495
|
-
Login.create
|
|
1517
|
+
Login.create!
|
|
1496
1518
|
end
|
|
1497
1519
|
|
|
1498
1520
|
let(:login) do
|
|
@@ -1518,7 +1540,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1518
1540
|
context "when the attribute is blank" do
|
|
1519
1541
|
|
|
1520
1542
|
before do
|
|
1521
|
-
Login.create(username: "")
|
|
1543
|
+
Login.create!(username: "")
|
|
1522
1544
|
end
|
|
1523
1545
|
|
|
1524
1546
|
let(:login) do
|
|
@@ -1545,7 +1567,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1545
1567
|
context "when the attribute is unique" do
|
|
1546
1568
|
|
|
1547
1569
|
before do
|
|
1548
|
-
Bar.create(lat_lng: LatLng.new(52.30, 13.25))
|
|
1570
|
+
Bar.create!(lat_lng: LatLng.new(52.30, 13.25))
|
|
1549
1571
|
end
|
|
1550
1572
|
|
|
1551
1573
|
let(:unique_bar) do
|
|
@@ -1561,7 +1583,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1561
1583
|
context "when the attribute is not unique" do
|
|
1562
1584
|
|
|
1563
1585
|
before do
|
|
1564
|
-
Bar.create(lat_lng: LatLng.new(52.30, 13.25))
|
|
1586
|
+
Bar.create!(lat_lng: LatLng.new(52.30, 13.25))
|
|
1565
1587
|
end
|
|
1566
1588
|
|
|
1567
1589
|
let(:non_unique_bar) do
|
|
@@ -1588,7 +1610,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1588
1610
|
context "when the attribute is unique" do
|
|
1589
1611
|
|
|
1590
1612
|
before do
|
|
1591
|
-
Band.create(name: 'Foo', active: false)
|
|
1613
|
+
Band.create!(name: 'Foo', active: false)
|
|
1592
1614
|
end
|
|
1593
1615
|
|
|
1594
1616
|
let(:unique_band) do
|
|
@@ -1604,7 +1626,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1604
1626
|
context "when the attribute is not unique" do
|
|
1605
1627
|
|
|
1606
1628
|
before do
|
|
1607
|
-
Band.create(name: 'Foo')
|
|
1629
|
+
Band.create!(name: 'Foo')
|
|
1608
1630
|
end
|
|
1609
1631
|
|
|
1610
1632
|
let(:non_unique_band) do
|
|
@@ -1622,17 +1644,41 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1622
1644
|
context "when the document is embedded" do
|
|
1623
1645
|
|
|
1624
1646
|
let(:word) do
|
|
1625
|
-
Word.create(name: "Schadenfreude")
|
|
1647
|
+
Word.create!(name: "Schadenfreude")
|
|
1626
1648
|
end
|
|
1627
1649
|
|
|
1628
1650
|
context "when in an embeds_many" do
|
|
1629
1651
|
|
|
1630
1652
|
let!(:def_one) do
|
|
1631
|
-
word.definitions.create(description: "1")
|
|
1653
|
+
word.definitions.create!(description: "1")
|
|
1632
1654
|
end
|
|
1633
1655
|
|
|
1634
1656
|
let!(:def_two) do
|
|
1635
|
-
word.definitions.create(description: "2")
|
|
1657
|
+
word.definitions.create!(description: "2")
|
|
1658
|
+
end
|
|
1659
|
+
|
|
1660
|
+
context "when setting the read preference to non-primary" do
|
|
1661
|
+
|
|
1662
|
+
before do
|
|
1663
|
+
Definition.validates_uniqueness_of :description
|
|
1664
|
+
end
|
|
1665
|
+
|
|
1666
|
+
after do
|
|
1667
|
+
Definition.reset_callbacks(:validate)
|
|
1668
|
+
end
|
|
1669
|
+
|
|
1670
|
+
let(:word) { Word.create! }
|
|
1671
|
+
|
|
1672
|
+
it "reads from the primary" do
|
|
1673
|
+
expect_any_instance_of(Mongoid::Criteria).to receive(:read).once.and_wrap_original do |m, *args, **kwargs|
|
|
1674
|
+
crit = m.call(*args, **kwargs)
|
|
1675
|
+
expect(crit.options[:read]).to eq({ mode: :primary })
|
|
1676
|
+
crit
|
|
1677
|
+
end
|
|
1678
|
+
Definition.with(read: { mode: :secondary }) do |klass|
|
|
1679
|
+
word.definitions.create!
|
|
1680
|
+
end
|
|
1681
|
+
end
|
|
1636
1682
|
end
|
|
1637
1683
|
|
|
1638
1684
|
context "when a document is being destroyed" do
|
|
@@ -1711,7 +1757,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1711
1757
|
|
|
1712
1758
|
it "adds the uniqueness error" do
|
|
1713
1759
|
definition.valid?
|
|
1714
|
-
expect(definition.errors[:description]).to eq([ "
|
|
1760
|
+
expect(definition.errors[:description]).to eq([ "has already been taken" ])
|
|
1715
1761
|
end
|
|
1716
1762
|
end
|
|
1717
1763
|
|
|
@@ -1839,7 +1885,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1839
1885
|
|
|
1840
1886
|
it "adds the uniqueness errors" do
|
|
1841
1887
|
definition.valid?
|
|
1842
|
-
expect(definition.errors[:description]).to eq([ "
|
|
1888
|
+
expect(definition.errors[:description]).to eq([ "has already been taken" ])
|
|
1843
1889
|
end
|
|
1844
1890
|
end
|
|
1845
1891
|
|
|
@@ -1977,7 +2023,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
1977
2023
|
|
|
1978
2024
|
it "adds the uniqueness errors" do
|
|
1979
2025
|
definition.valid?
|
|
1980
|
-
expect(definition.errors[:description]).to eq([ "
|
|
2026
|
+
expect(definition.errors[:description]).to eq([ "has already been taken" ])
|
|
1981
2027
|
end
|
|
1982
2028
|
end
|
|
1983
2029
|
|
|
@@ -2041,7 +2087,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2041
2087
|
|
|
2042
2088
|
it "adds the uniqueness error" do
|
|
2043
2089
|
definition.valid?
|
|
2044
|
-
expect(definition.errors[:description]).to eq([ "
|
|
2090
|
+
expect(definition.errors[:description]).to eq([ "has already been taken" ])
|
|
2045
2091
|
end
|
|
2046
2092
|
end
|
|
2047
2093
|
|
|
@@ -2119,7 +2165,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2119
2165
|
|
|
2120
2166
|
it "adds the uniqueness error" do
|
|
2121
2167
|
definition.valid?
|
|
2122
|
-
expect(definition.errors[:description]).to eq([ "
|
|
2168
|
+
expect(definition.errors[:description]).to eq([ "has already been taken" ])
|
|
2123
2169
|
end
|
|
2124
2170
|
end
|
|
2125
2171
|
|
|
@@ -2215,7 +2261,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2215
2261
|
it "adds the uniqueness error to the aliased field name" do
|
|
2216
2262
|
definition.valid?
|
|
2217
2263
|
expect(definition.errors).to have_key(:part)
|
|
2218
|
-
expect(definition.errors[:part]).to eq([ "
|
|
2264
|
+
expect(definition.errors[:part]).to eq([ "has already been taken" ])
|
|
2219
2265
|
end
|
|
2220
2266
|
end
|
|
2221
2267
|
|
|
@@ -2232,7 +2278,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2232
2278
|
it "adds the uniqueness error to the underlying field name" do
|
|
2233
2279
|
definition.valid?
|
|
2234
2280
|
expect(definition.errors).to have_key(:p)
|
|
2235
|
-
expect(definition.errors[:p]).to eq([ "
|
|
2281
|
+
expect(definition.errors[:p]).to eq([ "has already been taken" ])
|
|
2236
2282
|
end
|
|
2237
2283
|
end
|
|
2238
2284
|
|
|
@@ -2251,7 +2297,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2251
2297
|
it "adds the uniqueness error to the aliased field name" do
|
|
2252
2298
|
definition.valid?
|
|
2253
2299
|
expect(definition.errors).to have_key(:synonyms)
|
|
2254
|
-
expect(definition.errors[:synonyms]).to eq([ "
|
|
2300
|
+
expect(definition.errors[:synonyms]).to eq([ "has already been taken" ])
|
|
2255
2301
|
end
|
|
2256
2302
|
end
|
|
2257
2303
|
|
|
@@ -2268,7 +2314,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2268
2314
|
it "adds the uniqueness error to the aliased field name" do
|
|
2269
2315
|
definition.valid?
|
|
2270
2316
|
expect(definition.errors).to have_key(:syn)
|
|
2271
|
-
expect(definition.errors[:syn]).to eq([ "
|
|
2317
|
+
expect(definition.errors[:syn]).to eq([ "has already been taken" ])
|
|
2272
2318
|
end
|
|
2273
2319
|
end
|
|
2274
2320
|
end
|
|
@@ -2320,7 +2366,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2320
2366
|
|
|
2321
2367
|
it "adds the uniqueness error" do
|
|
2322
2368
|
word_origin.valid?
|
|
2323
|
-
expect(word_origin.errors[:origin_id]).to eq([ "
|
|
2369
|
+
expect(word_origin.errors[:origin_id]).to eq([ "has already been taken" ])
|
|
2324
2370
|
end
|
|
2325
2371
|
end
|
|
2326
2372
|
|
|
@@ -2445,7 +2491,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2445
2491
|
it "should be invalid" do
|
|
2446
2492
|
subclass_document_with_duplicated_name.tap do |d|
|
|
2447
2493
|
expect(d).to be_invalid
|
|
2448
|
-
expect(d.errors[:name]).to eq([ "
|
|
2494
|
+
expect(d.errors[:name]).to eq([ "has already been taken" ])
|
|
2449
2495
|
end
|
|
2450
2496
|
end
|
|
2451
2497
|
end
|
|
@@ -2459,7 +2505,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2459
2505
|
end
|
|
2460
2506
|
|
|
2461
2507
|
let!(:person) do
|
|
2462
|
-
Person.create(ssn: "132-11-1111", username: "aaasdaffff")
|
|
2508
|
+
Person.create!(ssn: "132-11-1111", username: "aaasdaffff")
|
|
2463
2509
|
end
|
|
2464
2510
|
|
|
2465
2511
|
after do
|
|
@@ -2473,4 +2519,29 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
|
2473
2519
|
}.to raise_error(Mongo::Error::OperationFailure)
|
|
2474
2520
|
end
|
|
2475
2521
|
end
|
|
2522
|
+
|
|
2523
|
+
describe "i18n" do
|
|
2524
|
+
|
|
2525
|
+
context 'when using a different locale' do
|
|
2526
|
+
with_default_i18n_configs
|
|
2527
|
+
|
|
2528
|
+
before do
|
|
2529
|
+
I18n.locale = :fr
|
|
2530
|
+
# Translation key location is as per rails-i18n gem.
|
|
2531
|
+
# See: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml
|
|
2532
|
+
I18n.backend.store_translations(:fr, { errors: { messages: { taken: 'est déjà utilisé(e)' } } })
|
|
2533
|
+
end
|
|
2534
|
+
|
|
2535
|
+
after do
|
|
2536
|
+
I18n.backend.translations.delete(:fr)
|
|
2537
|
+
end
|
|
2538
|
+
|
|
2539
|
+
it "correctly translates the error message" do
|
|
2540
|
+
Circus.create!(slogan: 'The Greatest Show on Mars')
|
|
2541
|
+
dict = Circus.new(slogan: 'The Greatest Show on Mars')
|
|
2542
|
+
dict.valid?
|
|
2543
|
+
expect(dict.errors.messages[:slogan]).to eq(["est déjà utilisé(e)"])
|
|
2544
|
+
end
|
|
2545
|
+
end
|
|
2546
|
+
end
|
|
2476
2547
|
end
|