mongoid 9.0.11 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -8
- data/README.md +5 -11
- data/Rakefile +35 -38
- data/lib/config/locales/en.yml +11 -0
- data/lib/mongoid/association/accessors.rb +19 -26
- data/lib/mongoid/association/bindable.rb +43 -45
- data/lib/mongoid/association/builders.rb +18 -15
- data/lib/mongoid/association/constrainable.rb +3 -5
- data/lib/mongoid/association/depending.rb +34 -38
- data/lib/mongoid/association/eager.rb +47 -13
- data/lib/mongoid/association/eager_loadable.rb +152 -24
- data/lib/mongoid/association/embedded/batchable.rb +28 -30
- data/lib/mongoid/association/embedded/cyclic.rb +8 -11
- data/lib/mongoid/association/embedded/eager.rb +1 -6
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +6 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +25 -22
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many.rb +24 -21
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +2 -6
- data/lib/mongoid/association/embedded/embeds_one.rb +20 -18
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +3 -7
- data/lib/mongoid/association/many.rb +75 -3
- data/lib/mongoid/association/marshalable.rb +0 -3
- data/lib/mongoid/association/nested/many.rb +18 -13
- data/lib/mongoid/association/nested/nested_buildable.rb +6 -9
- data/lib/mongoid/association/nested/one.rb +4 -7
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +0 -3
- data/lib/mongoid/association/options.rb +8 -7
- data/lib/mongoid/association/referenced/auto_save.rb +0 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +23 -5
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +1 -3
- data/lib/mongoid/association/referenced/belongs_to.rb +48 -43
- data/lib/mongoid/association/referenced/counter_cache.rb +5 -10
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +8 -4
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +52 -47
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_many/buildable.rb +11 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +107 -38
- data/lib/mongoid/association/referenced/has_many/proxy.rb +10 -6
- data/lib/mongoid/association/referenced/has_many.rb +30 -24
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_one.rb +26 -21
- data/lib/mongoid/association/referenced/syncable.rb +30 -34
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +0 -3
- data/lib/mongoid/association/relatable.rb +69 -66
- data/lib/mongoid/association.rb +12 -15
- data/lib/mongoid/atomic/modifiers.rb +65 -25
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +2 -4
- data/lib/mongoid/atomic/paths/embedded.rb +3 -6
- data/lib/mongoid/atomic/paths/root.rb +1 -4
- data/lib/mongoid/atomic/paths.rb +2 -3
- data/lib/mongoid/atomic.rb +0 -3
- data/lib/mongoid/attributes/dynamic.rb +6 -7
- data/lib/mongoid/attributes/nested.rb +8 -10
- data/lib/mongoid/attributes/projector.rb +7 -20
- data/lib/mongoid/attributes/readonly.rb +6 -11
- data/lib/mongoid/attributes.rb +18 -34
- data/lib/mongoid/cacheable.rb +24 -6
- data/lib/mongoid/clients/factory.rb +12 -15
- data/lib/mongoid/clients/options.rb +2 -5
- data/lib/mongoid/clients/sessions.rb +50 -60
- data/lib/mongoid/clients/storage_options.rb +1 -4
- data/lib/mongoid/clients/validators/storage.rb +2 -3
- data/lib/mongoid/clients/validators.rb +1 -2
- data/lib/mongoid/clients.rb +8 -11
- data/lib/mongoid/collection_configurable.rb +10 -14
- data/lib/mongoid/composable.rb +30 -34
- data/lib/mongoid/config/defaults.rb +7 -4
- data/lib/mongoid/config/encryption.rb +1 -3
- data/lib/mongoid/config/environment.rb +7 -16
- data/lib/mongoid/config/introspection.rb +14 -16
- data/lib/mongoid/config/options.rb +16 -10
- data/lib/mongoid/config/validators/async_query_executor.rb +3 -6
- data/lib/mongoid/config/validators/client.rb +12 -15
- data/lib/mongoid/config/validators/option.rb +3 -5
- data/lib/mongoid/config/validators.rb +3 -4
- data/lib/mongoid/config.rb +132 -42
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -4
- data/lib/mongoid/contextual/aggregable/mongo.rb +20 -22
- data/lib/mongoid/contextual/aggregable/none.rb +2 -4
- data/lib/mongoid/contextual/aggregable.rb +5 -7
- data/lib/mongoid/contextual/atomic.rb +20 -24
- data/lib/mongoid/contextual/command.rb +0 -3
- data/lib/mongoid/contextual/map_reduce.rb +12 -16
- data/lib/mongoid/contextual/memory.rb +72 -65
- data/lib/mongoid/contextual/mongo/documents_loader.rb +2 -3
- data/lib/mongoid/contextual/mongo.rb +169 -85
- data/lib/mongoid/contextual/none.rb +9 -9
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +18 -7
- data/lib/mongoid/copyable.rb +7 -9
- data/lib/mongoid/criteria/findable.rb +5 -7
- data/lib/mongoid/criteria/includable.rb +37 -8
- data/lib/mongoid/criteria/inspectable.rb +2 -5
- data/lib/mongoid/criteria/marshalable.rb +4 -8
- data/lib/mongoid/criteria/modifiable.rb +3 -11
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +34 -37
- data/lib/mongoid/criteria/queryable/aggregable.rb +9 -10
- data/lib/mongoid/criteria/queryable/expandable.rb +4 -9
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -10
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +20 -11
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -11
- data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -8
- data/lib/mongoid/criteria/queryable/extensions/range.rb +6 -9
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -12
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -6
- data/lib/mongoid/criteria/queryable/extensions/string.rb +5 -9
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +2 -12
- data/lib/mongoid/criteria/queryable/extensions.rb +18 -21
- data/lib/mongoid/criteria/queryable/key.rb +12 -18
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +31 -39
- data/lib/mongoid/criteria/queryable/optional.rb +17 -18
- data/lib/mongoid/criteria/queryable/options.rb +20 -9
- data/lib/mongoid/criteria/queryable/pipeline.rb +6 -9
- data/lib/mongoid/criteria/queryable/selectable.rb +131 -193
- data/lib/mongoid/criteria/queryable/selector.rb +20 -29
- data/lib/mongoid/criteria/queryable/smash.rb +1 -6
- data/lib/mongoid/criteria/queryable/storable.rb +20 -39
- data/lib/mongoid/criteria/queryable.rb +25 -15
- data/lib/mongoid/criteria/scopable.rb +5 -11
- data/lib/mongoid/criteria/translator.rb +5 -8
- data/lib/mongoid/criteria.rb +109 -54
- data/lib/mongoid/deprecable.rb +1 -4
- data/lib/mongoid/deprecation.rb +2 -6
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/encryptable.rb +1 -2
- data/lib/mongoid/equality.rb +4 -5
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/attribute_not_loaded.rb +1 -4
- data/lib/mongoid/errors/callback.rb +1 -4
- data/lib/mongoid/errors/create_collection_failure.rb +8 -11
- data/lib/mongoid/errors/criteria_argument_required.rb +2 -5
- data/lib/mongoid/errors/delete_restriction.rb +1 -4
- data/lib/mongoid/errors/document_not_destroyed.rb +1 -4
- data/lib/mongoid/errors/document_not_found.rb +16 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +7 -10
- data/lib/mongoid/errors/empty_config_file.rb +1 -4
- data/lib/mongoid/errors/immutable_attribute.rb +1 -4
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -4
- data/lib/mongoid/errors/invalid_async_query_executor.rb +2 -5
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +2 -5
- data/lib/mongoid/errors/invalid_collection.rb +1 -3
- data/lib/mongoid/errors/invalid_config_file.rb +1 -4
- data/lib/mongoid/errors/invalid_config_option.rb +2 -5
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +6 -10
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +2 -4
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -4
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +1 -4
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +1 -4
- data/lib/mongoid/errors/invalid_expression_operator.rb +3 -7
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_field_option.rb +2 -5
- data/lib/mongoid/errors/invalid_field_type.rb +1 -4
- data/lib/mongoid/errors/invalid_find.rb +1 -4
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -4
- data/lib/mongoid/errors/invalid_includes.rb +3 -6
- data/lib/mongoid/errors/invalid_index.rb +1 -4
- data/lib/mongoid/errors/invalid_options.rb +1 -4
- data/lib/mongoid/errors/invalid_path.rb +1 -4
- data/lib/mongoid/errors/invalid_persistence_option.rb +4 -7
- data/lib/mongoid/errors/invalid_query.rb +6 -11
- data/lib/mongoid/errors/invalid_relation.rb +10 -13
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -7
- data/lib/mongoid/errors/invalid_scope.rb +1 -4
- data/lib/mongoid/errors/invalid_session_nesting.rb +0 -3
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +2 -4
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_time.rb +1 -4
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +1 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -4
- data/lib/mongoid/errors/mixed_relations.rb +1 -3
- data/lib/mongoid/errors/mongoid_error.rb +7 -11
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +1 -4
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +1 -4
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +1 -4
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -4
- data/lib/mongoid/errors/no_metadata.rb +1 -4
- data/lib/mongoid/errors/no_parent.rb +1 -4
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -4
- data/lib/mongoid/errors/rollback.rb +0 -2
- data/lib/mongoid/errors/scope_overwrite.rb +2 -4
- data/lib/mongoid/errors/sessions_not_supported.rb +0 -3
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -3
- data/lib/mongoid/errors/transaction_error.rb +0 -3
- data/lib/mongoid/errors/transactions_not_supported.rb +0 -3
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +1 -4
- data/lib/mongoid/errors/unregistered_class.rb +1 -1
- data/lib/mongoid/errors/unsaved_document.rb +1 -3
- data/lib/mongoid/errors/unsupported_isolation_level.rb +22 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -4
- data/lib/mongoid/errors/validations.rb +3 -5
- data/lib/mongoid/errors.rb +72 -72
- data/lib/mongoid/evolvable.rb +0 -3
- data/lib/mongoid/extensions/array.rb +5 -7
- data/lib/mongoid/extensions/big_decimal.rb +6 -7
- data/lib/mongoid/extensions/binary.rb +3 -6
- data/lib/mongoid/extensions/boolean.rb +4 -7
- data/lib/mongoid/extensions/bson_document.rb +28 -0
- data/lib/mongoid/extensions/date.rb +10 -14
- data/lib/mongoid/extensions/date_time.rb +2 -6
- data/lib/mongoid/extensions/decimal128.rb +1 -5
- data/lib/mongoid/extensions/false_class.rb +3 -5
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +5 -10
- data/lib/mongoid/extensions/integer.rb +5 -10
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -1
- data/lib/mongoid/extensions/object.rb +9 -14
- data/lib/mongoid/extensions/object_id.rb +2 -6
- data/lib/mongoid/extensions/range.rb +14 -15
- data/lib/mongoid/extensions/raw_value.rb +0 -3
- data/lib/mongoid/extensions/regexp.rb +3 -6
- data/lib/mongoid/extensions/set.rb +3 -4
- data/lib/mongoid/extensions/string.rb +8 -12
- data/lib/mongoid/extensions/symbol.rb +3 -7
- data/lib/mongoid/extensions/time.rb +24 -26
- data/lib/mongoid/extensions/time_with_zone.rb +4 -7
- data/lib/mongoid/extensions/true_class.rb +3 -5
- data/lib/mongoid/extensions.rb +26 -26
- data/lib/mongoid/factory.rb +5 -9
- data/lib/mongoid/fields/encrypted.rb +0 -1
- data/lib/mongoid/fields/foreign_key.rb +9 -10
- data/lib/mongoid/fields/localized.rb +12 -12
- data/lib/mongoid/fields/standard.rb +5 -7
- data/lib/mongoid/fields/validators/macro.rb +23 -34
- data/lib/mongoid/fields/validators.rb +1 -2
- data/lib/mongoid/fields.rb +151 -58
- data/lib/mongoid/findable.rb +82 -53
- data/lib/mongoid/indexable/specification.rb +20 -6
- data/lib/mongoid/indexable/validators/options.rb +33 -40
- data/lib/mongoid/indexable.rb +26 -25
- data/lib/mongoid/inspectable.rb +4 -7
- data/lib/mongoid/interceptable.rb +41 -40
- data/lib/mongoid/loadable.rb +17 -18
- data/lib/mongoid/loggable.rb +4 -8
- data/lib/mongoid/matchable.rb +0 -2
- data/lib/mongoid/matcher/all.rb +2 -5
- data/lib/mongoid/matcher/and.rb +0 -3
- data/lib/mongoid/matcher/bits.rb +13 -8
- data/lib/mongoid/matcher/bits_all_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_all_set.rb +1 -3
- data/lib/mongoid/matcher/bits_any_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_any_set.rb +1 -3
- data/lib/mongoid/matcher/elem_match.rb +13 -15
- data/lib/mongoid/matcher/elem_match_expression.rb +0 -3
- data/lib/mongoid/matcher/eq.rb +0 -3
- data/lib/mongoid/matcher/eq_impl.rb +12 -17
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +4 -7
- data/lib/mongoid/matcher/exists.rb +1 -4
- data/lib/mongoid/matcher/expression.rb +5 -10
- data/lib/mongoid/matcher/expression_operator.rb +1 -3
- data/lib/mongoid/matcher/field_expression.rb +10 -13
- data/lib/mongoid/matcher/field_operator.rb +4 -6
- data/lib/mongoid/matcher/gt.rb +0 -3
- data/lib/mongoid/matcher/gte.rb +0 -3
- data/lib/mongoid/matcher/in.rb +9 -12
- data/lib/mongoid/matcher/lt.rb +0 -3
- data/lib/mongoid/matcher/lte.rb +0 -3
- data/lib/mongoid/matcher/mod.rb +4 -8
- data/lib/mongoid/matcher/ne.rb +0 -3
- data/lib/mongoid/matcher/nin.rb +0 -3
- data/lib/mongoid/matcher/nor.rb +1 -6
- data/lib/mongoid/matcher/not.rb +0 -3
- data/lib/mongoid/matcher/or.rb +0 -3
- data/lib/mongoid/matcher/regex.rb +11 -14
- data/lib/mongoid/matcher/size.rb +2 -5
- data/lib/mongoid/matcher/type.rb +32 -37
- data/lib/mongoid/matcher.rb +7 -15
- data/lib/mongoid/model_resolver.rb +1 -0
- data/lib/mongoid/persistable/creatable.rb +23 -7
- data/lib/mongoid/persistable/deletable.rb +6 -7
- data/lib/mongoid/persistable/destroyable.rb +2 -6
- data/lib/mongoid/persistable/incrementable.rb +1 -3
- data/lib/mongoid/persistable/logical.rb +3 -5
- data/lib/mongoid/persistable/maxable.rb +2 -4
- data/lib/mongoid/persistable/minable.rb +2 -4
- data/lib/mongoid/persistable/multipliable.rb +1 -3
- data/lib/mongoid/persistable/poppable.rb +2 -4
- data/lib/mongoid/persistable/pullable.rb +3 -5
- data/lib/mongoid/persistable/pushable.rb +5 -7
- data/lib/mongoid/persistable/renamable.rb +1 -3
- data/lib/mongoid/persistable/savable.rb +0 -3
- data/lib/mongoid/persistable/settable.rb +4 -13
- data/lib/mongoid/persistable/unsettable.rb +1 -3
- data/lib/mongoid/persistable/updatable.rb +16 -24
- data/lib/mongoid/persistable/upsertable.rb +8 -10
- data/lib/mongoid/persistable.rb +28 -27
- data/lib/mongoid/persistence_context.rb +34 -41
- data/lib/mongoid/pluckable.rb +0 -2
- data/lib/mongoid/positional.rb +5 -11
- data/lib/mongoid/railtie.rb +16 -22
- data/lib/mongoid/railties/console_sandbox.rb +6 -8
- data/lib/mongoid/railties/controller_runtime.rb +7 -11
- data/lib/mongoid/railties/database.rake +42 -44
- data/lib/mongoid/scopable.rb +23 -31
- data/lib/mongoid/search_indexable.rb +330 -0
- data/lib/mongoid/selectable.rb +1 -3
- data/lib/mongoid/serializable.rb +6 -8
- data/lib/mongoid/shardable.rb +8 -17
- data/lib/mongoid/stateful.rb +5 -10
- data/lib/mongoid/stringified_symbol.rb +5 -9
- data/lib/mongoid/tasks/database.rake +31 -32
- data/lib/mongoid/tasks/database.rb +28 -30
- data/lib/mongoid/tasks/encryption.rb +10 -15
- data/lib/mongoid/threaded/lifecycle.rb +6 -9
- data/lib/mongoid/threaded.rb +132 -32
- data/lib/mongoid/timestamps/created/short.rb +2 -3
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +8 -13
- data/lib/mongoid/timestamps/updated/short.rb +2 -3
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +4 -6
- data/lib/mongoid/touchable.rb +19 -11
- data/lib/mongoid/traversable.rb +3 -2
- data/lib/mongoid/validatable/associated.rb +1 -5
- data/lib/mongoid/validatable/format.rb +0 -2
- data/lib/mongoid/validatable/length.rb +0 -2
- data/lib/mongoid/validatable/localizable.rb +0 -3
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/numericality.rb +24 -3
- data/lib/mongoid/validatable/presence.rb +8 -10
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +12 -14
- data/lib/mongoid/validatable.rb +15 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +10 -11
- data/lib/mongoid.rb +30 -34
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -4
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +4 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +2 -2
- data/lib/rails/generators/mongoid/model/model_generator.rb +5 -8
- data/lib/rails/generators/mongoid_generator.rb +6 -10
- data/lib/rails/mongoid.rb +1 -3
- data/spec/integration/active_job_spec.rb +1 -2
- data/spec/integration/app_spec.rb +142 -178
- data/spec/integration/associations/belongs_to_spec.rb +30 -28
- data/spec/integration/associations/embedded_dirty_spec.rb +0 -1
- data/spec/integration/associations/embedded_spec.rb +41 -43
- data/spec/integration/associations/embeds_many_spec.rb +46 -29
- data/spec/integration/associations/embeds_one_spec.rb +2 -1
- data/spec/integration/associations/foreign_key_spec.rb +10 -11
- data/spec/integration/associations/foreign_key_spec_models.rb +8 -9
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +16 -13
- data/spec/integration/associations/has_many_spec.rb +17 -18
- data/spec/integration/associations/has_one_spec.rb +42 -45
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +36 -39
- data/spec/integration/associations/reverse_population_spec.rb +4 -5
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +18 -20
- data/spec/integration/atomic/modifiers_spec.rb +72 -52
- data/spec/integration/bson_regexp_raw_spec.rb +2 -3
- data/spec/integration/caching_spec.rb +68 -0
- data/spec/integration/callbacks_models.rb +11 -9
- data/spec/integration/callbacks_spec.rb +78 -80
- data/spec/integration/contextual/empty_spec.rb +19 -20
- data/spec/integration/criteria/alias_query_spec.rb +12 -19
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +23 -18
- data/spec/integration/criteria/logical_spec.rb +18 -19
- data/spec/integration/criteria/range_spec.rb +77 -86
- data/spec/integration/criteria/raw_value_spec.rb +122 -109
- data/spec/integration/criteria/time_with_zone_spec.rb +33 -24
- data/spec/integration/discriminator_key_spec.rb +85 -85
- data/spec/integration/discriminator_value_spec.rb +70 -73
- data/spec/integration/document_spec.rb +9 -10
- data/spec/integration/dots_and_dollars_spec.rb +104 -119
- data/spec/integration/encryption_spec.rb +8 -11
- data/spec/integration/i18n_fallbacks_spec.rb +7 -8
- data/spec/integration/isolation_state_spec.rb +241 -0
- data/spec/integration/matcher_examples_spec.rb +145 -168
- data/spec/integration/matcher_operator_data/in.yml +6 -6
- data/spec/integration/matcher_operator_spec.rb +16 -26
- data/spec/integration/matcher_spec.rb +31 -32
- data/spec/integration/persistence/collection_options_spec.rb +0 -2
- data/spec/integration/persistence/range_field_spec.rb +24 -2
- data/spec/integration/server_query_spec.rb +43 -37
- data/spec/integration/shardable_spec.rb +10 -11
- data/spec/integration/stringified_symbol_field_spec.rb +28 -43
- data/spec/lite_spec_helper.rb +11 -12
- data/spec/mongoid/association/accessors_spec.rb +197 -285
- data/spec/mongoid/association/auto_save_spec.rb +62 -93
- data/spec/mongoid/association/builders_spec.rb +121 -74
- data/spec/mongoid/association/constrainable_spec.rb +9 -22
- data/spec/mongoid/association/counter_cache_spec.rb +71 -104
- data/spec/mongoid/association/depending_spec.rb +166 -208
- data/spec/mongoid/association/eager_spec.rb +416 -80
- data/spec/mongoid/association/embedded/cyclic_spec.rb +36 -48
- data/spec/mongoid/association/embedded/dirty_spec.rb +15 -20
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +36 -54
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +8 -15
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +135 -175
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +25 -127
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +9 -14
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +38 -51
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1151 -1340
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -17
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +11 -11
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +25 -138
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +15 -23
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +18 -26
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +204 -273
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +5 -6
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -143
- data/spec/mongoid/association/macros_spec.rb +213 -300
- data/spec/mongoid/association/nested/many_spec.rb +51 -73
- data/spec/mongoid/association/nested/one_spec.rb +56 -80
- data/spec/mongoid/association/options_spec.rb +187 -310
- data/spec/mongoid/association/polymorphic_spec.rb +35 -53
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +55 -76
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +36 -41
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +81 -101
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +258 -345
- data/spec/mongoid/association/referenced/belongs_to_models.rb +4 -3
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +91 -294
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +42 -56
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +41 -32
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +36 -42
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +8 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +771 -975
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +9 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +5 -6
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +59 -177
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +29 -43
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +53 -53
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +104 -67
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +431 -675
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -11
- data/spec/mongoid/association/referenced/has_many_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_many_spec.rb +44 -188
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +26 -38
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +28 -29
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +29 -42
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +270 -332
- data/spec/mongoid/association/referenced/has_one_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_one_spec.rb +40 -188
- data/spec/mongoid/association/reflections_spec.rb +14 -24
- data/spec/mongoid/association/syncable_spec.rb +102 -125
- data/spec/mongoid/association_spec.rb +47 -70
- data/spec/mongoid/atomic/modifiers_spec.rb +184 -197
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +39 -52
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +35 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +9 -15
- data/spec/mongoid/atomic/paths_spec.rb +81 -117
- data/spec/mongoid/atomic_spec.rb +156 -171
- data/spec/mongoid/attributes/dynamic_spec.rb +5 -6
- data/spec/mongoid/attributes/nested_spec.rb +1219 -1692
- data/spec/mongoid/attributes/nested_spec_models.rb +8 -9
- data/spec/mongoid/attributes/projector_spec.rb +2 -6
- data/spec/mongoid/attributes/readonly_spec.rb +73 -97
- data/spec/mongoid/attributes_spec.rb +669 -826
- data/spec/mongoid/cacheable_spec.rb +74 -44
- data/spec/mongoid/changeable_spec.rb +591 -733
- data/spec/mongoid/clients/factory_spec.rb +122 -154
- data/spec/mongoid/clients/options_spec.rb +40 -59
- data/spec/mongoid/clients/sessions_spec.rb +25 -44
- data/spec/mongoid/clients/transactions_spec.rb +33 -50
- data/spec/mongoid/clients/transactions_spec_models.rb +3 -4
- data/spec/mongoid/clients_spec.rb +265 -355
- data/spec/mongoid/collection_configurable_spec.rb +9 -12
- data/spec/mongoid/composable_spec.rb +2 -9
- data/spec/mongoid/config/defaults_spec.rb +24 -31
- data/spec/mongoid/config/encryption_spec.rb +54 -57
- data/spec/mongoid/config/environment_spec.rb +30 -40
- data/spec/mongoid/config/introspection_spec.rb +42 -37
- data/spec/mongoid/config/options_spec.rb +14 -21
- data/spec/mongoid/config_spec.rb +145 -195
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +98 -135
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +4 -7
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +149 -187
- data/spec/mongoid/contextual/aggregable/none_spec.rb +14 -16
- data/spec/mongoid/contextual/atomic_spec.rb +223 -271
- data/spec/mongoid/contextual/map_reduce_spec.rb +110 -138
- data/spec/mongoid/contextual/memory_spec.rb +706 -854
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +12 -13
- data/spec/mongoid/contextual/mongo_spec.rb +1008 -1213
- data/spec/mongoid/contextual/none_spec.rb +54 -59
- data/spec/mongoid/contextual/short_circuit_spec.rb +139 -0
- data/spec/mongoid/copyable_spec.rb +254 -300
- data/spec/mongoid/copyable_spec_models.rb +0 -1
- data/spec/mongoid/criteria/findable_spec.rb +322 -387
- data/spec/mongoid/criteria/includable_spec.rb +421 -372
- data/spec/mongoid/criteria/includable_spec_models.rb +16 -7
- data/spec/mongoid/criteria/inspectable_spec.rb +11 -14
- data/spec/mongoid/criteria/marshalable_spec.rb +11 -14
- data/spec/mongoid/criteria/modifiable_spec.rb +366 -512
- data/spec/mongoid/criteria/options_spec.rb +2 -7
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +112 -141
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +8 -11
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +127 -184
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +123 -60
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +84 -117
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +44 -65
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +86 -108
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +94 -33
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +103 -138
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +95 -34
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +25 -38
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +26 -28
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +32 -54
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +136 -130
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +16 -24
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +15 -24
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +12 -19
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -63
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +28 -42
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +73 -96
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +71 -92
- data/spec/mongoid/criteria/queryable/key_spec.rb +32 -36
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +44 -49
- data/spec/mongoid/criteria/queryable/optional_spec.rb +373 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +172 -123
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +65 -87
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +41 -53
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +576 -680
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +7 -11
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +807 -998
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +154 -191
- data/spec/mongoid/criteria/queryable/selector_spec.rb +294 -390
- data/spec/mongoid/criteria/queryable/smash_spec.rb +6 -11
- data/spec/mongoid/criteria/queryable/storable_spec.rb +54 -81
- data/spec/mongoid/criteria/queryable_mql_spec.rb +92 -0
- data/spec/mongoid/criteria/scopable_spec.rb +102 -138
- data/spec/mongoid/criteria/translator_spec.rb +59 -60
- data/spec/mongoid/criteria_projection_spec.rb +81 -99
- data/spec/mongoid/criteria_spec.rb +935 -950
- data/spec/mongoid/document_fields_spec.rb +28 -30
- data/spec/mongoid/document_persistence_context_spec.rb +13 -15
- data/spec/mongoid/document_query_spec.rb +9 -12
- data/spec/mongoid/document_spec.rb +317 -409
- data/spec/mongoid/equality_spec.rb +69 -102
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -11
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +7 -10
- data/spec/mongoid/errors/callback_spec.rb +8 -11
- data/spec/mongoid/errors/delete_restriction_spec.rb +5 -8
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +7 -10
- data/spec/mongoid/errors/document_not_found_spec.rb +51 -61
- data/spec/mongoid/errors/invalid_collection_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_config_file_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_config_option_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_field_option_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_field_spec.rb +10 -11
- data/spec/mongoid/errors/invalid_field_type_spec.rb +9 -12
- data/spec/mongoid/errors/invalid_find_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_includes_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_index_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_path_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_relation_spec.rb +15 -16
- data/spec/mongoid/errors/invalid_scope_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -6
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_time_spec.rb +8 -11
- data/spec/mongoid/errors/inverse_not_found_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_relations_spec.rb +8 -11
- data/spec/mongoid/errors/mongoid_error_spec.rb +21 -24
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -9
- data/spec/mongoid/errors/no_client_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_client_database_spec.rb +9 -12
- data/spec/mongoid/errors/no_client_hosts_spec.rb +9 -12
- data/spec/mongoid/errors/no_clients_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_environment_spec.rb +8 -11
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +8 -11
- data/spec/mongoid/errors/no_metadata_spec.rb +7 -10
- data/spec/mongoid/errors/no_parent_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_attribute_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_document_spec.rb +6 -9
- data/spec/mongoid/errors/scope_overwrite_spec.rb +9 -12
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +9 -12
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -8
- data/spec/mongoid/errors/unsaved_document_spec.rb +8 -11
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +9 -12
- data/spec/mongoid/errors/validations_spec.rb +11 -14
- data/spec/mongoid/extensions/array_spec.rb +70 -92
- data/spec/mongoid/extensions/big_decimal_spec.rb +233 -313
- data/spec/mongoid/extensions/binary_spec.rb +21 -32
- data/spec/mongoid/extensions/boolean_spec.rb +52 -75
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +43 -54
- data/spec/mongoid/extensions/date_spec.rb +26 -38
- data/spec/mongoid/extensions/date_time_spec.rb +22 -32
- data/spec/mongoid/extensions/decimal128_spec.rb +12 -18
- data/spec/mongoid/extensions/false_class_spec.rb +10 -17
- data/spec/mongoid/extensions/float_spec.rb +40 -61
- data/spec/mongoid/extensions/hash_spec.rb +46 -64
- data/spec/mongoid/extensions/integer_spec.rb +40 -61
- data/spec/mongoid/extensions/module_spec.rb +13 -18
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -5
- data/spec/mongoid/extensions/object_id_spec.rb +159 -247
- data/spec/mongoid/extensions/object_spec.rb +31 -47
- data/spec/mongoid/extensions/range_spec.rb +112 -115
- data/spec/mongoid/extensions/raw_value_spec.rb +10 -12
- data/spec/mongoid/extensions/regexp_spec.rb +23 -36
- data/spec/mongoid/extensions/set_spec.rb +38 -49
- data/spec/mongoid/extensions/string_spec.rb +118 -167
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +29 -43
- data/spec/mongoid/extensions/symbol_spec.rb +12 -20
- data/spec/mongoid/extensions/time_spec.rb +160 -202
- data/spec/mongoid/extensions/time_with_zone_spec.rb +79 -105
- data/spec/mongoid/extensions/true_class_spec.rb +10 -17
- data/spec/mongoid/factory_spec.rb +125 -148
- data/spec/mongoid/fields/foreign_key_spec.rb +124 -169
- data/spec/mongoid/fields/localized_spec.rb +140 -185
- data/spec/mongoid/fields/standard_spec.rb +43 -59
- data/spec/mongoid/fields_spec.rb +751 -620
- data/spec/mongoid/findable_spec.rb +260 -228
- data/spec/mongoid/indexable/specification_spec.rb +42 -58
- data/spec/mongoid/indexable_spec.rb +260 -264
- data/spec/mongoid/inspectable_spec.rb +45 -55
- data/spec/mongoid/interceptable_spec.rb +784 -922
- data/spec/mongoid/interceptable_spec_models.rb +35 -35
- data/spec/mongoid/loading_spec.rb +47 -43
- data/spec/mongoid/loggable_spec.rb +3 -6
- data/spec/mongoid/matcher/extract_attribute_spec.rb +2 -6
- data/spec/mongoid/mongoizable_spec.rb +81 -90
- data/spec/mongoid/monkey_patches_spec.rb +4 -0
- data/spec/mongoid/persistable/creatable_spec.rb +181 -220
- data/spec/mongoid/persistable/deletable_spec.rb +139 -179
- data/spec/mongoid/persistable/destroyable_spec.rb +135 -164
- data/spec/mongoid/persistable/incrementable_spec.rb +65 -84
- data/spec/mongoid/persistable/logical_spec.rb +48 -61
- data/spec/mongoid/persistable/maxable_spec.rb +45 -44
- data/spec/mongoid/persistable/minable_spec.rb +45 -44
- data/spec/mongoid/persistable/multipliable_spec.rb +54 -69
- data/spec/mongoid/persistable/poppable_spec.rb +47 -60
- data/spec/mongoid/persistable/pullable_spec.rb +79 -103
- data/spec/mongoid/persistable/pushable_spec.rb +106 -131
- data/spec/mongoid/persistable/renamable_spec.rb +52 -65
- data/spec/mongoid/persistable/savable_spec.rb +152 -189
- data/spec/mongoid/persistable/settable_spec.rb +121 -145
- data/spec/mongoid/persistable/unsettable_spec.rb +56 -73
- data/spec/mongoid/persistable/updatable_spec.rb +185 -232
- data/spec/mongoid/persistable/upsertable_spec.rb +66 -77
- data/spec/mongoid/persistable_spec.rb +132 -139
- data/spec/mongoid/persistence_context_spec.rb +31 -89
- data/spec/mongoid/positional_spec.rb +67 -79
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +0 -3
- data/spec/mongoid/railties/console_sandbox_spec.rb +0 -1
- data/spec/mongoid/relations/proxy_spec.rb +0 -1
- data/spec/mongoid/reloadable_spec.rb +250 -145
- data/spec/mongoid/scopable_spec.rb +319 -398
- data/spec/mongoid/search_indexable_spec.rb +446 -41
- data/spec/mongoid/selectable_spec.rb +36 -51
- data/spec/mongoid/serializable_spec.rb +269 -312
- data/spec/mongoid/shardable_models.rb +5 -5
- data/spec/mongoid/shardable_spec.rb +44 -46
- data/spec/mongoid/stateful_spec.rb +55 -75
- data/spec/mongoid/tasks/database_rake_spec.rb +138 -141
- data/spec/mongoid/tasks/database_spec.rb +80 -80
- data/spec/mongoid/tasks/encryption_spec.rb +22 -20
- data/spec/mongoid/threaded_spec.rb +57 -83
- data/spec/mongoid/timestamps/created/short_spec.rb +12 -16
- data/spec/mongoid/timestamps/created_spec.rb +16 -20
- data/spec/mongoid/timestamps/timeless_spec.rb +31 -43
- data/spec/mongoid/timestamps/updated/short_spec.rb +21 -28
- data/spec/mongoid/timestamps/updated_spec.rb +18 -25
- data/spec/mongoid/timestamps_spec.rb +171 -188
- data/spec/mongoid/timestamps_spec_models.rb +12 -13
- data/spec/mongoid/touchable_spec.rb +330 -294
- data/spec/mongoid/touchable_spec_models.rb +35 -37
- data/spec/mongoid/traversable_spec.rb +435 -471
- data/spec/mongoid/validatable/associated_spec.rb +42 -60
- data/spec/mongoid/validatable/format_spec.rb +24 -34
- data/spec/mongoid/validatable/length_spec.rb +62 -86
- data/spec/mongoid/validatable/numericality_spec.rb +114 -23
- data/spec/mongoid/validatable/presence_spec.rb +149 -203
- data/spec/mongoid/validatable/uniqueness_spec.rb +632 -830
- data/spec/mongoid/validatable_spec.rb +71 -103
- data/spec/mongoid/warnings_spec.rb +5 -9
- data/spec/mongoid_spec.rb +25 -41
- data/spec/rails/controller_extension/controller_runtime_spec.rb +45 -49
- data/spec/rails/mongoid_spec.rb +15 -15
- data/spec/shared/lib/mrss/cluster_config.rb +5 -40
- data/spec/shared/lib/mrss/constraints.rb +7 -46
- data/spec/shared/lib/mrss/docker_runner.rb +10 -21
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -31
- data/spec/shared/lib/mrss/release/candidate.rb +18 -12
- data/spec/shared/lib/mrss/server_version_registry.rb +1 -5
- data/spec/shared/share/Dockerfile.erb +6 -8
- data/spec/shared/shlib/server.sh +0 -50
- data/spec/shared/shlib/set_env.sh +4 -10
- data/spec/spec_helper.rb +54 -31
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +1 -2
- data/spec/support/constraints.rb +8 -25
- data/spec/support/crypt/models.rb +7 -8
- data/spec/support/crypt.rb +6 -9
- data/spec/support/expectations.rb +21 -7
- data/spec/support/feature_sandbox.rb +1 -4
- data/spec/support/helpers.rb +0 -1
- data/spec/support/immutable_ids.rb +20 -21
- data/spec/support/macros.rb +1 -3
- data/spec/support/models/account.rb +4 -5
- data/spec/support/models/acolyte.rb +5 -5
- data/spec/support/models/actor.rb +3 -3
- data/spec/support/models/actress.rb +0 -1
- data/spec/support/models/address.rb +11 -11
- data/spec/support/models/address_component.rb +1 -1
- data/spec/support/models/address_number.rb +1 -1
- data/spec/support/models/agency.rb +1 -1
- data/spec/support/models/agent.rb +1 -1
- data/spec/support/models/album.rb +1 -2
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +4 -5
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +2 -2
- data/spec/support/models/armrest.rb +0 -1
- data/spec/support/models/array_field.rb +0 -1
- data/spec/support/models/article.rb +0 -1
- data/spec/support/models/artist.rb +16 -12
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +0 -1
- data/spec/support/models/audio.rb +2 -2
- data/spec/support/models/augmentation.rb +1 -2
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +0 -1
- data/spec/support/models/bar.rb +2 -2
- data/spec/support/models/basic.rb +0 -1
- data/spec/support/models/bed.rb +0 -1
- data/spec/support/models/big_palette.rb +0 -1
- data/spec/support/models/birthday.rb +3 -5
- data/spec/support/models/bolt.rb +0 -1
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +1 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -2
- data/spec/support/models/building.rb +0 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +2 -2
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +5 -6
- data/spec/support/models/car.rb +0 -1
- data/spec/support/models/cat.rb +0 -2
- data/spec/support/models/catalog.rb +0 -1
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +5 -6
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +0 -1
- data/spec/support/models/circuit.rb +2 -2
- data/spec/support/models/circus.rb +0 -1
- data/spec/support/models/code.rb +2 -1
- data/spec/support/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +0 -1
- data/spec/support/models/comment.rb +0 -1
- data/spec/support/models/company.rb +0 -1
- data/spec/support/models/consumption_period.rb +0 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +0 -1
- data/spec/support/models/country_code.rb +2 -3
- data/spec/support/models/courier_job.rb +2 -2
- data/spec/support/models/cover.rb +0 -1
- data/spec/support/models/crate.rb +0 -1
- data/spec/support/models/customer.rb +0 -1
- data/spec/support/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +0 -1
- data/spec/support/models/description.rb +0 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +2 -2
- data/spec/support/models/doctor.rb +0 -1
- data/spec/support/models/dog.rb +2 -2
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +0 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +2 -2
- data/spec/support/models/drug.rb +1 -1
- data/spec/support/models/dungeon.rb +1 -1
- data/spec/support/models/edit.rb +1 -1
- data/spec/support/models/email.rb +1 -1
- data/spec/support/models/employer.rb +1 -2
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +0 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +3 -4
- data/spec/support/models/exhibition.rb +1 -1
- data/spec/support/models/exhibitor.rb +1 -1
- data/spec/support/models/explosion.rb +1 -1
- data/spec/support/models/eye.rb +0 -1
- data/spec/support/models/eye_bowl.rb +2 -3
- data/spec/support/models/face.rb +2 -3
- data/spec/support/models/fanatic.rb +1 -1
- data/spec/support/models/favorite.rb +1 -1
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +0 -1
- data/spec/support/models/fish.rb +0 -1
- data/spec/support/models/folder.rb +0 -2
- data/spec/support/models/folder_item.rb +1 -3
- data/spec/support/models/fruits.rb +9 -5
- data/spec/support/models/game.rb +3 -4
- data/spec/support/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +0 -1
- data/spec/support/models/hole.rb +0 -1
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +2 -2
- data/spec/support/models/html_writer.rb +0 -1
- data/spec/support/models/id_key.rb +3 -3
- data/spec/support/models/idnodef.rb +0 -1
- data/spec/support/models/image.rb +0 -1
- data/spec/support/models/implant.rb +1 -2
- data/spec/support/models/instrument.rb +2 -3
- data/spec/support/models/item.rb +2 -2
- data/spec/support/models/jar.rb +1 -2
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +2 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +0 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +0 -1
- data/spec/support/models/line_item.rb +1 -1
- data/spec/support/models/location.rb +1 -1
- data/spec/support/models/login.rb +1 -2
- data/spec/support/models/manufacturer.rb +0 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +1 -1
- data/spec/support/models/message.rb +1 -2
- data/spec/support/models/minim.rb +0 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/modifier_models.rb +25 -0
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -2
- data/spec/support/models/name.rb +4 -5
- data/spec/support/models/name_only.rb +0 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +3 -3
- data/spec/support/models/nut.rb +0 -1
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +1 -1
- data/spec/support/models/ordered_post.rb +1 -1
- data/spec/support/models/ordered_preference.rb +1 -1
- data/spec/support/models/oscar.rb +1 -1
- data/spec/support/models/other_owner_object.rb +0 -1
- data/spec/support/models/override.rb +3 -11
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +0 -1
- data/spec/support/models/page.rb +3 -3
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +2 -2
- data/spec/support/models/parent.rb +2 -2
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +0 -1
- data/spec/support/models/patient.rb +2 -2
- data/spec/support/models/pdf_writer.rb +0 -1
- data/spec/support/models/pencil.rb +0 -1
- data/spec/support/models/person.rb +32 -28
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +1 -2
- data/spec/support/models/piano.rb +0 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +5 -5
- data/spec/support/models/post.rb +12 -12
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +1 -2
- data/spec/support/models/preference.rb +2 -2
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +3 -3
- data/spec/support/models/profile.rb +2 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +2 -2
- data/spec/support/models/publication/encyclopedia.rb +0 -1
- data/spec/support/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +0 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +1 -1
- data/spec/support/models/question.rb +2 -2
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +2 -3
- data/spec/support/models/registry.rb +1 -1
- data/spec/support/models/role.rb +1 -1
- data/spec/support/models/root_category.rb +1 -1
- data/spec/support/models/sandbox/app/models/app_models_message.rb +0 -1
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_user.rb +0 -1
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +0 -1
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +0 -1
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +0 -1
- data/spec/support/models/seat.rb +0 -1
- data/spec/support/models/seo.rb +1 -1
- data/spec/support/models/series.rb +1 -1
- data/spec/support/models/server.rb +1 -1
- data/spec/support/models/service.rb +2 -2
- data/spec/support/models/shape.rb +3 -3
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +2 -2
- data/spec/support/models/shipment_address.rb +0 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +0 -1
- data/spec/support/models/shop.rb +2 -2
- data/spec/support/models/short_agent.rb +0 -1
- data/spec/support/models/short_quiz.rb +1 -1
- data/spec/support/models/simple.rb +1 -1
- data/spec/support/models/slave.rb +1 -1
- data/spec/support/models/song.rb +1 -2
- data/spec/support/models/sound.rb +2 -2
- data/spec/support/models/spacer.rb +0 -1
- data/spec/support/models/square.rb +0 -1
- data/spec/support/models/staff.rb +0 -1
- data/spec/support/models/store_as_dup_test1.rb +2 -2
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +2 -2
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +1 -2
- data/spec/support/models/sub_item.rb +0 -1
- data/spec/support/models/subscription.rb +2 -2
- data/spec/support/models/survey.rb +2 -2
- data/spec/support/models/symptom.rb +2 -2
- data/spec/support/models/system_role.rb +2 -3
- data/spec/support/models/tag.rb +2 -2
- data/spec/support/models/target.rb +1 -1
- data/spec/support/models/template.rb +1 -1
- data/spec/support/models/thing.rb +1 -1
- data/spec/support/models/threadlocker.rb +0 -1
- data/spec/support/models/title.rb +0 -1
- data/spec/support/models/tool.rb +3 -3
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +0 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +2 -3
- data/spec/support/models/truck.rb +0 -1
- data/spec/support/models/updatable.rb +0 -1
- data/spec/support/models/user.rb +3 -4
- data/spec/support/models/user_account.rb +3 -3
- data/spec/support/models/validation_callback.rb +4 -4
- data/spec/support/models/vehicle.rb +2 -3
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +0 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +2 -2
- data/spec/support/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +0 -1
- data/spec/support/models/weapon.rb +1 -2
- data/spec/support/models/wiki_page.rb +2 -3
- data/spec/support/models/word.rb +2 -2
- data/spec/support/models/word_origin.rb +1 -2
- data/spec/support/models/writer.rb +3 -3
- data/spec/support/rails_mock.rb +7 -12
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/sinatra_mock.rb +4 -2
- data/spec/support/spec_config.rb +19 -18
- metadata +14 -2
|
@@ -1,35 +1,30 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
3
|
+
require 'spec_helper'
|
|
5
4
|
|
|
6
5
|
describe Mongoid::Indexable do
|
|
7
|
-
|
|
8
6
|
after do
|
|
9
7
|
Person.collection.drop
|
|
10
8
|
end
|
|
11
9
|
|
|
12
|
-
describe
|
|
13
|
-
|
|
10
|
+
describe '.included' do
|
|
14
11
|
let(:klass) do
|
|
15
12
|
Class.new do
|
|
16
13
|
include Mongoid::Indexable
|
|
17
14
|
end
|
|
18
15
|
end
|
|
19
16
|
|
|
20
|
-
it
|
|
17
|
+
it 'adds an index_specifications accessor' do
|
|
21
18
|
expect(klass).to respond_to(:index_specifications)
|
|
22
19
|
end
|
|
23
20
|
|
|
24
|
-
it
|
|
21
|
+
it 'defaults index_specifications to empty array' do
|
|
25
22
|
expect(klass.index_specifications).to be_empty
|
|
26
23
|
end
|
|
27
24
|
end
|
|
28
25
|
|
|
29
|
-
describe
|
|
30
|
-
|
|
31
|
-
context "when no database specific options exist" do
|
|
32
|
-
|
|
26
|
+
describe '.remove_indexes' do
|
|
27
|
+
context 'when no database specific options exist' do
|
|
33
28
|
let(:klass) do
|
|
34
29
|
Person
|
|
35
30
|
end
|
|
@@ -43,47 +38,45 @@ describe Mongoid::Indexable do
|
|
|
43
38
|
klass.remove_indexes
|
|
44
39
|
end
|
|
45
40
|
|
|
46
|
-
it
|
|
47
|
-
expect(collection.indexes.reject{ |doc| doc[
|
|
41
|
+
it 'removes the indexes' do
|
|
42
|
+
expect(collection.indexes.reject { |doc| doc['name'] == '_id_' }).to be_empty
|
|
48
43
|
end
|
|
49
44
|
end
|
|
50
45
|
|
|
51
|
-
context
|
|
52
|
-
|
|
46
|
+
context 'when database specific options exist' do
|
|
53
47
|
let(:klass) do
|
|
54
48
|
Class.new do
|
|
55
49
|
include Mongoid::Document
|
|
56
|
-
|
|
57
|
-
|
|
50
|
+
|
|
51
|
+
store_in collection: 'test_db_remove'
|
|
52
|
+
index({ test: 1 }, { database: 'mongoid_optional' })
|
|
58
53
|
index({ name: 1 }, { background: true })
|
|
59
54
|
end
|
|
60
55
|
end
|
|
56
|
+
let(:indexes) do
|
|
57
|
+
klass.with(database: 'mongoid_optional') do |klass|
|
|
58
|
+
klass.collection.indexes
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
61
|
|
|
62
62
|
before do
|
|
63
63
|
klass.create_indexes
|
|
64
64
|
klass.remove_indexes
|
|
65
65
|
end
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
klass.collection.indexes
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "creates the indexes" do
|
|
74
|
-
expect(indexes.reject{ |doc| doc["name"] == "_id_" }).to be_empty
|
|
67
|
+
it 'creates the indexes' do
|
|
68
|
+
expect(indexes.reject { |doc| doc['name'] == '_id_' }).to be_empty
|
|
75
69
|
end
|
|
76
70
|
end
|
|
77
71
|
end
|
|
78
72
|
|
|
79
|
-
describe
|
|
80
|
-
|
|
81
|
-
context "when no database options are specified" do
|
|
82
|
-
|
|
73
|
+
describe '.create_indexes' do
|
|
74
|
+
context 'when no database options are specified' do
|
|
83
75
|
let(:klass) do
|
|
84
76
|
Class.new do
|
|
85
77
|
include Mongoid::Document
|
|
86
|
-
|
|
78
|
+
|
|
79
|
+
store_in collection: 'test_class'
|
|
87
80
|
index({ _type: 1 }, unique: false, background: true)
|
|
88
81
|
end
|
|
89
82
|
end
|
|
@@ -92,36 +85,35 @@ describe Mongoid::Indexable do
|
|
|
92
85
|
klass.create_indexes
|
|
93
86
|
end
|
|
94
87
|
|
|
95
|
-
it
|
|
88
|
+
it 'creates the indexes by using specified background option' do
|
|
96
89
|
index = klass.collection.indexes.get(_type: 1)
|
|
97
90
|
expect(index[:background]).to eq(true)
|
|
98
91
|
end
|
|
99
92
|
end
|
|
100
93
|
|
|
101
|
-
context
|
|
102
|
-
|
|
94
|
+
context 'when database options are specified' do
|
|
103
95
|
let(:klass) do
|
|
104
96
|
Class.new do
|
|
105
97
|
include Mongoid::Document
|
|
106
|
-
store_in collection: "test_db_indexes"
|
|
107
|
-
index({ _type: 1 }, { database: "mongoid_optional" })
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
98
|
|
|
111
|
-
|
|
112
|
-
|
|
99
|
+
store_in collection: 'test_db_indexes'
|
|
100
|
+
index({ _type: 1 }, { database: 'mongoid_optional' })
|
|
101
|
+
end
|
|
113
102
|
end
|
|
114
|
-
|
|
115
103
|
let(:indexes) do
|
|
116
|
-
klass.with(database:
|
|
104
|
+
klass.with(database: 'mongoid_optional') do |klass|
|
|
117
105
|
klass.collection.indexes
|
|
118
106
|
end
|
|
119
107
|
end
|
|
120
108
|
|
|
121
|
-
|
|
109
|
+
after do
|
|
110
|
+
klass.remove_indexes
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
context 'when the background_indexing option is false' do
|
|
122
114
|
config_override :background_indexing, false
|
|
123
115
|
|
|
124
|
-
it
|
|
116
|
+
it 'creates the indexes correctly' do
|
|
125
117
|
klass.create_indexes
|
|
126
118
|
|
|
127
119
|
index = indexes.get(_type: 1)
|
|
@@ -129,11 +121,10 @@ describe Mongoid::Indexable do
|
|
|
129
121
|
end
|
|
130
122
|
end
|
|
131
123
|
|
|
132
|
-
context
|
|
124
|
+
context 'when the background_indexing option is true' do
|
|
133
125
|
config_override :background_indexing, true
|
|
134
126
|
|
|
135
|
-
it
|
|
136
|
-
|
|
127
|
+
it 'creates the indexes correctly' do
|
|
137
128
|
klass.create_indexes
|
|
138
129
|
|
|
139
130
|
index = indexes.get(_type: 1)
|
|
@@ -142,16 +133,20 @@ describe Mongoid::Indexable do
|
|
|
142
133
|
end
|
|
143
134
|
end
|
|
144
135
|
|
|
145
|
-
context
|
|
136
|
+
context 'when a collation option is specified' do
|
|
146
137
|
min_server_version '3.4'
|
|
147
138
|
|
|
148
139
|
let(:klass) do
|
|
149
140
|
Class.new do
|
|
150
141
|
include Mongoid::Document
|
|
151
|
-
|
|
152
|
-
|
|
142
|
+
|
|
143
|
+
store_in collection: 'test_db_indexes'
|
|
144
|
+
index({ name: 1 }, { collation: { locale: 'en_US', strength: 2 } })
|
|
153
145
|
end
|
|
154
146
|
end
|
|
147
|
+
let(:indexes) do
|
|
148
|
+
klass.collection.indexes
|
|
149
|
+
end
|
|
155
150
|
|
|
156
151
|
before do
|
|
157
152
|
klass.create_indexes
|
|
@@ -161,72 +156,65 @@ describe Mongoid::Indexable do
|
|
|
161
156
|
klass.remove_indexes
|
|
162
157
|
end
|
|
163
158
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
it "creates the indexes" do
|
|
169
|
-
expect(indexes.get("name_1")["collation"]).to_not be_nil
|
|
170
|
-
expect(indexes.get("name_1")["collation"]["locale"]).to eq('en_US')
|
|
159
|
+
it 'creates the indexes' do
|
|
160
|
+
expect(indexes.get('name_1')['collation']).not_to be_nil
|
|
161
|
+
expect(indexes.get('name_1')['collation']['locale']).to eq('en_US')
|
|
171
162
|
end
|
|
172
163
|
end
|
|
173
164
|
end
|
|
174
165
|
|
|
175
|
-
describe
|
|
176
|
-
|
|
177
|
-
context "when indexes have not been added" do
|
|
178
|
-
|
|
166
|
+
describe '.add_indexes' do
|
|
167
|
+
context 'when indexes have not been added' do
|
|
179
168
|
let(:klass) do
|
|
180
169
|
Class.new do
|
|
181
170
|
include Mongoid::Document
|
|
171
|
+
|
|
182
172
|
def self.hereditary?
|
|
183
173
|
true
|
|
184
174
|
end
|
|
185
175
|
end
|
|
186
176
|
end
|
|
177
|
+
let(:spec) do
|
|
178
|
+
klass.index_specification(_type: 1)
|
|
179
|
+
end
|
|
187
180
|
|
|
188
181
|
before do
|
|
189
182
|
klass.add_indexes
|
|
190
183
|
end
|
|
191
184
|
|
|
192
|
-
|
|
193
|
-
klass.index_specification(_type: 1)
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
it "adds the _type index" do
|
|
185
|
+
it 'adds the _type index' do
|
|
197
186
|
expect(spec.options).to eq(unique: false, background: true)
|
|
198
187
|
end
|
|
199
188
|
end
|
|
200
189
|
|
|
201
|
-
context
|
|
202
|
-
context
|
|
190
|
+
context 'when using a custom discriminator_key' do
|
|
191
|
+
context 'when indexes have not been added' do
|
|
203
192
|
let(:klass) do
|
|
204
193
|
Class.new do
|
|
205
194
|
include Mongoid::Document
|
|
206
|
-
|
|
195
|
+
|
|
196
|
+
self.discriminator_key = 'dkey'
|
|
207
197
|
def self.hereditary?
|
|
208
198
|
true
|
|
209
199
|
end
|
|
210
200
|
end
|
|
211
201
|
end
|
|
202
|
+
let(:spec) do
|
|
203
|
+
klass.index_specification(dkey: 1)
|
|
204
|
+
end
|
|
212
205
|
|
|
213
206
|
before do
|
|
214
207
|
klass.add_indexes
|
|
215
208
|
end
|
|
216
209
|
|
|
217
|
-
|
|
218
|
-
klass.index_specification(dkey: 1)
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
it "adds the _type index" do
|
|
210
|
+
it 'adds the _type index' do
|
|
222
211
|
expect(spec.options).to eq(unique: false, background: true)
|
|
223
212
|
end
|
|
224
213
|
end
|
|
225
214
|
end
|
|
226
215
|
end
|
|
227
216
|
|
|
228
|
-
describe
|
|
229
|
-
|
|
217
|
+
describe '.index' do
|
|
230
218
|
let(:klass) do
|
|
231
219
|
Class.new do
|
|
232
220
|
include Mongoid::Document
|
|
@@ -246,8 +234,7 @@ describe Mongoid::Indexable do
|
|
|
246
234
|
klass.collection.drop
|
|
247
235
|
end
|
|
248
236
|
|
|
249
|
-
context
|
|
250
|
-
|
|
237
|
+
context 'when indexing a field that is aliased' do
|
|
251
238
|
before do
|
|
252
239
|
klass.index({ authentication_token: 1 }, unique: true)
|
|
253
240
|
end
|
|
@@ -256,13 +243,12 @@ describe Mongoid::Indexable do
|
|
|
256
243
|
klass.index_specification(a: 1).options
|
|
257
244
|
end
|
|
258
245
|
|
|
259
|
-
it
|
|
246
|
+
it 'sets the index with unique options' do
|
|
260
247
|
expect(options).to eq(unique: true)
|
|
261
248
|
end
|
|
262
249
|
end
|
|
263
250
|
|
|
264
|
-
context
|
|
265
|
-
|
|
251
|
+
context 'when indexing a field that is embedded' do
|
|
266
252
|
before do
|
|
267
253
|
klass.index({ 'addresses.house' => 1 }, unique: true)
|
|
268
254
|
end
|
|
@@ -271,13 +257,12 @@ describe Mongoid::Indexable do
|
|
|
271
257
|
klass.index_specification('adrs.h': 1).options
|
|
272
258
|
end
|
|
273
259
|
|
|
274
|
-
it
|
|
260
|
+
it 'sets the index with unique options' do
|
|
275
261
|
expect(options).to eq(unique: true)
|
|
276
262
|
end
|
|
277
263
|
end
|
|
278
264
|
|
|
279
|
-
context
|
|
280
|
-
|
|
265
|
+
context 'when providing unique options' do
|
|
281
266
|
before do
|
|
282
267
|
klass.index({ name: 1 }, unique: true)
|
|
283
268
|
end
|
|
@@ -286,13 +271,12 @@ describe Mongoid::Indexable do
|
|
|
286
271
|
klass.index_specification(name: 1).options
|
|
287
272
|
end
|
|
288
273
|
|
|
289
|
-
it
|
|
274
|
+
it 'sets the index with unique options' do
|
|
290
275
|
expect(options).to eq(unique: true)
|
|
291
276
|
end
|
|
292
277
|
end
|
|
293
278
|
|
|
294
|
-
context
|
|
295
|
-
|
|
279
|
+
context 'when providing a sparse option' do
|
|
296
280
|
before do
|
|
297
281
|
klass.index({ name: 1 }, sparse: true)
|
|
298
282
|
end
|
|
@@ -301,43 +285,40 @@ describe Mongoid::Indexable do
|
|
|
301
285
|
klass.index_specification(name: 1).options
|
|
302
286
|
end
|
|
303
287
|
|
|
304
|
-
it
|
|
288
|
+
it 'sets the index with sparse options' do
|
|
305
289
|
expect(options).to eq(sparse: true)
|
|
306
290
|
end
|
|
307
291
|
end
|
|
308
292
|
|
|
309
|
-
context
|
|
310
|
-
|
|
293
|
+
context 'when providing a name option' do
|
|
311
294
|
before do
|
|
312
|
-
klass.index({ name: 1 }, name:
|
|
295
|
+
klass.index({ name: 1 }, name: 'index_name')
|
|
313
296
|
end
|
|
314
297
|
|
|
315
298
|
let(:options) do
|
|
316
299
|
klass.index_specification(name: 1).options
|
|
317
300
|
end
|
|
318
301
|
|
|
319
|
-
it
|
|
320
|
-
expect(options).to eq(name:
|
|
302
|
+
it 'sets the index with name options' do
|
|
303
|
+
expect(options).to eq(name: 'index_name')
|
|
321
304
|
end
|
|
322
305
|
end
|
|
323
306
|
|
|
324
|
-
context
|
|
325
|
-
|
|
307
|
+
context 'when providing database options' do
|
|
326
308
|
before do
|
|
327
|
-
klass.index({ name: 1 }, database:
|
|
309
|
+
klass.index({ name: 1 }, database: 'mongoid_index_alt')
|
|
328
310
|
end
|
|
329
311
|
|
|
330
312
|
let(:options) do
|
|
331
313
|
klass.index_specification(name: 1).options
|
|
332
314
|
end
|
|
333
315
|
|
|
334
|
-
it
|
|
335
|
-
expect(options).to eq(database:
|
|
316
|
+
it 'sets the index with background options' do
|
|
317
|
+
expect(options).to eq(database: 'mongoid_index_alt')
|
|
336
318
|
end
|
|
337
319
|
end
|
|
338
320
|
|
|
339
|
-
context
|
|
340
|
-
|
|
321
|
+
context 'when providing a background option' do
|
|
341
322
|
before do
|
|
342
323
|
klass.index({ name: 1 }, background: true)
|
|
343
324
|
end
|
|
@@ -346,12 +327,12 @@ describe Mongoid::Indexable do
|
|
|
346
327
|
klass.index_specification(name: 1).options
|
|
347
328
|
end
|
|
348
329
|
|
|
349
|
-
it
|
|
330
|
+
it 'sets the index with background options' do
|
|
350
331
|
expect(options).to eq(background: true)
|
|
351
332
|
end
|
|
352
333
|
end
|
|
353
334
|
|
|
354
|
-
context
|
|
335
|
+
context 'when providing a collation option' do
|
|
355
336
|
min_server_version '3.4'
|
|
356
337
|
|
|
357
338
|
before do
|
|
@@ -362,13 +343,12 @@ describe Mongoid::Indexable do
|
|
|
362
343
|
klass.index_specification(name: 1).options
|
|
363
344
|
end
|
|
364
345
|
|
|
365
|
-
it
|
|
346
|
+
it 'sets the index with a collation option' do
|
|
366
347
|
expect(options).to eq(collation: { locale: 'en_US', strength: 2 })
|
|
367
348
|
end
|
|
368
349
|
end
|
|
369
350
|
|
|
370
|
-
context
|
|
371
|
-
|
|
351
|
+
context 'when providing a compound index' do
|
|
372
352
|
before do
|
|
373
353
|
klass.index({ name: 1, title: -1 })
|
|
374
354
|
end
|
|
@@ -377,13 +357,12 @@ describe Mongoid::Indexable do
|
|
|
377
357
|
klass.index_specification(name: 1, title: -1).options
|
|
378
358
|
end
|
|
379
359
|
|
|
380
|
-
it
|
|
360
|
+
it 'sets the compound key index' do
|
|
381
361
|
expect(options).to be_empty
|
|
382
362
|
end
|
|
383
363
|
end
|
|
384
364
|
|
|
385
|
-
context
|
|
386
|
-
|
|
365
|
+
context 'when providing multiple inverse compound indexes' do
|
|
387
366
|
before do
|
|
388
367
|
klass.index({ name: 1, title: -1 })
|
|
389
368
|
klass.index({ title: -1, name: 1 })
|
|
@@ -397,13 +376,12 @@ describe Mongoid::Indexable do
|
|
|
397
376
|
klass.index_specification(title: -1, name: 1)
|
|
398
377
|
end
|
|
399
378
|
|
|
400
|
-
it
|
|
401
|
-
expect(first_spec).
|
|
379
|
+
it 'does not overwrite the index options' do
|
|
380
|
+
expect(first_spec).not_to eq(second_spec)
|
|
402
381
|
end
|
|
403
382
|
end
|
|
404
383
|
|
|
405
|
-
context
|
|
406
|
-
|
|
384
|
+
context 'when providing multiple compound indexes with different order' do
|
|
407
385
|
before do
|
|
408
386
|
klass.index({ name: 1, title: -1 })
|
|
409
387
|
klass.index({ name: 1, title: 1 })
|
|
@@ -417,193 +395,179 @@ describe Mongoid::Indexable do
|
|
|
417
395
|
klass.index_specification(name: 1, title: 1)
|
|
418
396
|
end
|
|
419
397
|
|
|
420
|
-
it
|
|
421
|
-
expect(first_spec).
|
|
398
|
+
it 'does not overwrite the index options' do
|
|
399
|
+
expect(first_spec).not_to eq(second_spec)
|
|
422
400
|
end
|
|
423
401
|
end
|
|
424
402
|
|
|
425
|
-
context
|
|
426
|
-
|
|
403
|
+
context 'when providing a geospatial index' do
|
|
427
404
|
before do
|
|
428
|
-
klass.index({ location:
|
|
405
|
+
klass.index({ location: '2d' }, { min: -200, max: 200, bits: 32 })
|
|
429
406
|
end
|
|
430
407
|
|
|
431
408
|
let(:options) do
|
|
432
|
-
klass.index_specification(location:
|
|
409
|
+
klass.index_specification(location: '2d').options
|
|
433
410
|
end
|
|
434
411
|
|
|
435
|
-
it
|
|
412
|
+
it 'sets the geospatial index' do
|
|
436
413
|
expect(options).to eq({ min: -200, max: 200, bits: 32 })
|
|
437
414
|
end
|
|
438
415
|
end
|
|
439
416
|
|
|
440
|
-
context
|
|
441
|
-
|
|
417
|
+
context 'when providing a geo haystack index with a bucket_size' do
|
|
442
418
|
before do
|
|
443
|
-
klass.index({ location:
|
|
419
|
+
klass.index({ location: 'geoHaystack' }, { min: -200, max: 200, bucket_size: 0.5 })
|
|
444
420
|
end
|
|
445
421
|
|
|
446
422
|
let(:options) do
|
|
447
|
-
klass.index_specification(location:
|
|
423
|
+
klass.index_specification(location: 'geoHaystack').options
|
|
448
424
|
end
|
|
449
425
|
|
|
450
|
-
it
|
|
426
|
+
it 'sets the geo haystack index with the bucket_size option' do
|
|
451
427
|
expect(options).to eq({ min: -200, max: 200, bucket_size: 0.5 })
|
|
452
428
|
end
|
|
453
429
|
end
|
|
454
430
|
|
|
455
|
-
context
|
|
456
|
-
|
|
431
|
+
context 'when providing a geo haystack index with a bucket_size' do
|
|
457
432
|
let(:message) do
|
|
458
433
|
'The geoHaystack type is deprecated.'
|
|
459
434
|
end
|
|
460
435
|
|
|
461
|
-
it
|
|
436
|
+
it 'logs a deprecation warning' do
|
|
462
437
|
expect(Mongoid::Warnings).to receive(:warn_geo_haystack_deprecated)
|
|
463
|
-
klass.index({ location:
|
|
438
|
+
klass.index({ location: 'geoHaystack' }, { min: -200, max: 200, bucket_size: 0.5 })
|
|
464
439
|
end
|
|
465
440
|
end
|
|
466
441
|
|
|
467
|
-
context
|
|
468
|
-
|
|
442
|
+
context 'when providing a Spherical Geospatial index' do
|
|
469
443
|
before do
|
|
470
|
-
klass.index({ location:
|
|
444
|
+
klass.index({ location: '2dsphere' })
|
|
471
445
|
end
|
|
472
446
|
|
|
473
447
|
let(:options) do
|
|
474
|
-
klass.index_specification(location:
|
|
448
|
+
klass.index_specification(location: '2dsphere').options
|
|
475
449
|
end
|
|
476
450
|
|
|
477
|
-
it
|
|
451
|
+
it 'sets the spherical geospatial index' do
|
|
478
452
|
expect(options).to be_empty
|
|
479
453
|
end
|
|
480
454
|
end
|
|
481
455
|
|
|
482
|
-
context
|
|
483
|
-
|
|
484
|
-
context "when the index is a single field" do
|
|
485
|
-
|
|
456
|
+
context 'when providing a text index' do
|
|
457
|
+
context 'when the index is a single field' do
|
|
486
458
|
before do
|
|
487
|
-
klass.index({ description:
|
|
459
|
+
klass.index({ description: 'text' })
|
|
488
460
|
end
|
|
489
461
|
|
|
490
462
|
let(:options) do
|
|
491
|
-
klass.index_specification(description:
|
|
463
|
+
klass.index_specification(description: 'text').options
|
|
492
464
|
end
|
|
493
465
|
|
|
494
|
-
it
|
|
466
|
+
it 'allows the set of the text index' do
|
|
495
467
|
expect(options).to be_empty
|
|
496
468
|
end
|
|
497
469
|
end
|
|
498
470
|
|
|
499
|
-
context
|
|
500
|
-
|
|
471
|
+
context 'when the index is multiple fields' do
|
|
501
472
|
before do
|
|
502
|
-
klass.index({ description:
|
|
473
|
+
klass.index({ description: 'text', name: 'text' })
|
|
503
474
|
end
|
|
504
475
|
|
|
505
476
|
let(:options) do
|
|
506
|
-
klass.index_specification(description:
|
|
477
|
+
klass.index_specification(description: 'text', name: 'text').options
|
|
507
478
|
end
|
|
508
479
|
|
|
509
|
-
it
|
|
480
|
+
it 'allows the set of the text index' do
|
|
510
481
|
expect(options).to be_empty
|
|
511
482
|
end
|
|
512
483
|
end
|
|
513
484
|
|
|
514
|
-
context
|
|
515
|
-
|
|
485
|
+
context 'when the index is all string fields' do
|
|
516
486
|
before do
|
|
517
|
-
klass.index({
|
|
487
|
+
klass.index({ '$**' => 'text' })
|
|
518
488
|
end
|
|
519
489
|
|
|
520
490
|
let(:options) do
|
|
521
|
-
klass.index_specification(:
|
|
491
|
+
klass.index_specification('$**': 'text').options
|
|
522
492
|
end
|
|
523
493
|
|
|
524
|
-
it
|
|
494
|
+
it 'allows the set of the text index' do
|
|
525
495
|
expect(options).to be_empty
|
|
526
496
|
end
|
|
527
497
|
end
|
|
528
498
|
|
|
529
|
-
context
|
|
530
|
-
|
|
499
|
+
context 'when providing a default language' do
|
|
531
500
|
before do
|
|
532
|
-
klass.index({ description:
|
|
501
|
+
klass.index({ description: 'text' }, default_language: 'english')
|
|
533
502
|
end
|
|
534
503
|
|
|
535
504
|
let(:options) do
|
|
536
|
-
klass.index_specification(description:
|
|
505
|
+
klass.index_specification(description: 'text').options
|
|
537
506
|
end
|
|
538
507
|
|
|
539
|
-
it
|
|
540
|
-
expect(options).to eq(default_language:
|
|
508
|
+
it 'allows the set of the text index' do
|
|
509
|
+
expect(options).to eq(default_language: 'english')
|
|
541
510
|
end
|
|
542
511
|
end
|
|
543
512
|
|
|
544
|
-
context
|
|
545
|
-
|
|
513
|
+
context 'when providing a name' do
|
|
546
514
|
before do
|
|
547
|
-
klass.index({ description:
|
|
515
|
+
klass.index({ description: 'text' }, name: 'text_index')
|
|
548
516
|
end
|
|
549
517
|
|
|
550
518
|
let(:options) do
|
|
551
|
-
klass.index_specification(description:
|
|
519
|
+
klass.index_specification(description: 'text').options
|
|
552
520
|
end
|
|
553
521
|
|
|
554
|
-
it
|
|
555
|
-
expect(options).to eq(name:
|
|
522
|
+
it 'allows the set of the text index' do
|
|
523
|
+
expect(options).to eq(name: 'text_index')
|
|
556
524
|
end
|
|
557
525
|
end
|
|
558
526
|
end
|
|
559
527
|
|
|
560
|
-
context
|
|
561
|
-
|
|
528
|
+
context 'when providing a hashed index' do
|
|
562
529
|
before do
|
|
563
|
-
klass.index({ a:
|
|
530
|
+
klass.index({ a: 'hashed' })
|
|
564
531
|
end
|
|
565
532
|
|
|
566
533
|
let(:options) do
|
|
567
|
-
klass.index_specification(a:
|
|
534
|
+
klass.index_specification(a: 'hashed').options
|
|
568
535
|
end
|
|
569
536
|
|
|
570
|
-
it
|
|
537
|
+
it 'sets the hashed index' do
|
|
571
538
|
expect(options).to be_empty
|
|
572
539
|
end
|
|
573
540
|
end
|
|
574
541
|
|
|
575
|
-
context
|
|
576
|
-
|
|
542
|
+
context 'when providing a text index' do
|
|
577
543
|
before do
|
|
578
|
-
klass.index({ content:
|
|
544
|
+
klass.index({ content: 'text' })
|
|
579
545
|
end
|
|
580
546
|
|
|
581
547
|
let(:options) do
|
|
582
|
-
klass.index_specification(content:
|
|
548
|
+
klass.index_specification(content: 'text').options
|
|
583
549
|
end
|
|
584
550
|
|
|
585
|
-
it
|
|
551
|
+
it 'sets the text index' do
|
|
586
552
|
expect(options).to be_empty
|
|
587
553
|
end
|
|
588
554
|
end
|
|
589
555
|
|
|
590
|
-
context
|
|
591
|
-
|
|
556
|
+
context 'when providing a compound text index' do
|
|
592
557
|
before do
|
|
593
|
-
klass.index({ content:
|
|
558
|
+
klass.index({ content: 'text', title: 'text' }, { weights: { content: 1, title: 2 } })
|
|
594
559
|
end
|
|
595
560
|
|
|
596
561
|
let(:options) do
|
|
597
|
-
klass.index_specification(content:
|
|
562
|
+
klass.index_specification(content: 'text', title: 'text').options
|
|
598
563
|
end
|
|
599
564
|
|
|
600
|
-
it
|
|
565
|
+
it 'sets the compound text index' do
|
|
601
566
|
expect(options).to eq(weights: { content: 1, title: 2 })
|
|
602
567
|
end
|
|
603
568
|
end
|
|
604
569
|
|
|
605
|
-
context
|
|
606
|
-
|
|
570
|
+
context 'when providing an expire_after_seconds option' do
|
|
607
571
|
before do
|
|
608
572
|
klass.index({ name: 1 }, { expire_after_seconds: 3600 })
|
|
609
573
|
end
|
|
@@ -612,15 +576,13 @@ describe Mongoid::Indexable do
|
|
|
612
576
|
klass.index_specification(name: 1).options
|
|
613
577
|
end
|
|
614
578
|
|
|
615
|
-
it
|
|
579
|
+
it 'sets the index with expire_after option' do
|
|
616
580
|
expect(options).to eq(expire_after: 3600)
|
|
617
581
|
end
|
|
618
582
|
end
|
|
619
583
|
|
|
620
|
-
context
|
|
621
|
-
|
|
584
|
+
context 'when using partial_filter_expression option' do
|
|
622
585
|
context 'when not using an alias' do
|
|
623
|
-
|
|
624
586
|
before do
|
|
625
587
|
klass.index({ authentication_token: 1 }, partial_filter_expression: { username: { '$exists' => true } })
|
|
626
588
|
end
|
|
@@ -629,28 +591,27 @@ describe Mongoid::Indexable do
|
|
|
629
591
|
klass.index_specification(a: 1).options
|
|
630
592
|
end
|
|
631
593
|
|
|
632
|
-
it
|
|
594
|
+
it 'sets the index with correct options' do
|
|
633
595
|
expect(options).to eq(partial_filter_expression: { username: { '$exists' => true } })
|
|
634
596
|
end
|
|
635
597
|
end
|
|
636
598
|
|
|
637
599
|
context 'when using an alias via field :as option' do
|
|
638
|
-
|
|
639
600
|
before do
|
|
640
|
-
klass.index({ authentication_token: 1 },
|
|
601
|
+
klass.index({ authentication_token: 1 },
|
|
602
|
+
partial_filter_expression: { authentication_token: { '$exists' => true } })
|
|
641
603
|
end
|
|
642
604
|
|
|
643
605
|
let(:options) do
|
|
644
606
|
klass.index_specification(a: 1).options
|
|
645
607
|
end
|
|
646
608
|
|
|
647
|
-
it
|
|
609
|
+
it 'sets the index with correct options' do
|
|
648
610
|
expect(options).to eq(partial_filter_expression: { a: { '$exists' => true } })
|
|
649
611
|
end
|
|
650
612
|
end
|
|
651
613
|
|
|
652
614
|
context 'when using an alias via alias_attribute' do
|
|
653
|
-
|
|
654
615
|
before do
|
|
655
616
|
klass.index({ u: 1 }, partial_filter_expression: { u: { '$exists' => true } })
|
|
656
617
|
end
|
|
@@ -659,22 +620,22 @@ describe Mongoid::Indexable do
|
|
|
659
620
|
klass.index_specification(username: 1).options
|
|
660
621
|
end
|
|
661
622
|
|
|
662
|
-
it
|
|
623
|
+
it 'sets the index with correct options' do
|
|
663
624
|
expect(options).to eq(partial_filter_expression: { username: { '$exists' => true } })
|
|
664
625
|
end
|
|
665
626
|
end
|
|
666
627
|
|
|
667
628
|
context 'when using an embedded field' do
|
|
668
|
-
|
|
669
629
|
before do
|
|
670
|
-
klass.index({ authentication_token: 1 },
|
|
630
|
+
klass.index({ authentication_token: 1 },
|
|
631
|
+
partial_filter_expression: { 'addresses.house' => { '$exists' => true } })
|
|
671
632
|
end
|
|
672
633
|
|
|
673
634
|
let(:options) do
|
|
674
635
|
klass.index_specification(a: 1).options
|
|
675
636
|
end
|
|
676
637
|
|
|
677
|
-
it
|
|
638
|
+
it 'sets the index with correct options' do
|
|
678
639
|
expect(options).to eq(partial_filter_expression: { 'adrs.h': { '$exists' => true } })
|
|
679
640
|
end
|
|
680
641
|
end
|
|
@@ -688,25 +649,23 @@ describe Mongoid::Indexable do
|
|
|
688
649
|
]
|
|
689
650
|
}
|
|
690
651
|
end
|
|
691
|
-
|
|
692
|
-
before do
|
|
693
|
-
klass.index({ authentication_token: 1 }, partial_filter_expression: partial_filter_expression)
|
|
694
|
-
end
|
|
695
|
-
|
|
696
652
|
let(:options) do
|
|
697
653
|
klass.index_specification(a: 1).options
|
|
698
654
|
end
|
|
699
|
-
|
|
700
655
|
let(:expected) do
|
|
701
656
|
{
|
|
702
657
|
'$and': [
|
|
703
|
-
{
|
|
704
|
-
{
|
|
658
|
+
{ a: { '$gte' => 0 } },
|
|
659
|
+
{ a: { '$type' => 16 } }
|
|
705
660
|
]
|
|
706
661
|
}
|
|
707
662
|
end
|
|
708
663
|
|
|
709
|
-
|
|
664
|
+
before do
|
|
665
|
+
klass.index({ authentication_token: 1 }, partial_filter_expression: partial_filter_expression)
|
|
666
|
+
end
|
|
667
|
+
|
|
668
|
+
it 'resolves alias on $and option' do
|
|
710
669
|
expect(options[:partial_filter_expression]).to eq(expected)
|
|
711
670
|
end
|
|
712
671
|
end
|
|
@@ -718,15 +677,9 @@ describe Mongoid::Indexable do
|
|
|
718
677
|
'addresses.house' => { '$exists' => true }
|
|
719
678
|
}
|
|
720
679
|
end
|
|
721
|
-
|
|
722
|
-
before do
|
|
723
|
-
klass.index({ authentication_token: 1 }, partial_filter_expression: partial_filter_expression)
|
|
724
|
-
end
|
|
725
|
-
|
|
726
680
|
let(:options) do
|
|
727
681
|
klass.index_specification(a: 1).options
|
|
728
682
|
end
|
|
729
|
-
|
|
730
683
|
let(:expected) do
|
|
731
684
|
{
|
|
732
685
|
username: { '$eq' => 'authentication_token' },
|
|
@@ -734,7 +687,11 @@ describe Mongoid::Indexable do
|
|
|
734
687
|
}
|
|
735
688
|
end
|
|
736
689
|
|
|
737
|
-
|
|
690
|
+
before do
|
|
691
|
+
klass.index({ authentication_token: 1 }, partial_filter_expression: partial_filter_expression)
|
|
692
|
+
end
|
|
693
|
+
|
|
694
|
+
it 'preserves other operators' do
|
|
738
695
|
expect(options[:partial_filter_expression]).to eq(expected)
|
|
739
696
|
end
|
|
740
697
|
end
|
|
@@ -750,27 +707,25 @@ describe Mongoid::Indexable do
|
|
|
750
707
|
]
|
|
751
708
|
}
|
|
752
709
|
end
|
|
753
|
-
|
|
754
|
-
before do
|
|
755
|
-
klass.index({ authentication_token: 1 }, partial_filter_expression: partial_filter_expression)
|
|
756
|
-
end
|
|
757
|
-
|
|
758
710
|
let(:options) do
|
|
759
711
|
klass.index_specification(a: 1).options
|
|
760
712
|
end
|
|
761
|
-
|
|
762
713
|
let(:expected) do
|
|
763
714
|
{
|
|
764
715
|
username: { '$eq' => 'authentication_token' },
|
|
765
716
|
'adrs.h': { '$exists' => true },
|
|
766
717
|
'$and': [
|
|
767
|
-
{
|
|
768
|
-
{
|
|
718
|
+
{ a: { '$gte' => 0 } },
|
|
719
|
+
{ a: { '$type' => 16 } }
|
|
769
720
|
]
|
|
770
721
|
}
|
|
771
722
|
end
|
|
772
723
|
|
|
773
|
-
|
|
724
|
+
before do
|
|
725
|
+
klass.index({ authentication_token: 1 }, partial_filter_expression: partial_filter_expression)
|
|
726
|
+
end
|
|
727
|
+
|
|
728
|
+
it 'resolves aliases on $ operators' do
|
|
774
729
|
expect(options[:partial_filter_expression]).to eq(expected)
|
|
775
730
|
end
|
|
776
731
|
end
|
|
@@ -779,53 +734,49 @@ describe Mongoid::Indexable do
|
|
|
779
734
|
let(:partial_filter_expression) do
|
|
780
735
|
{
|
|
781
736
|
'$foo' => {
|
|
782
|
-
'$eq' => [{
|
|
737
|
+
'$eq' => [ {
|
|
783
738
|
'$bar' => {
|
|
784
739
|
'$and' => [
|
|
785
740
|
{ 'authentication_token' => { '$gte' => { 'aliased_timestamp' => 16 } } },
|
|
786
741
|
{ 'authentication_token' => { 'aliased_timestamp' => 16 } },
|
|
787
|
-
{ 'addresses.house' => { 'authentication_token' => [{ 'aliased_timestamp' => 16 }] } }
|
|
742
|
+
{ 'addresses.house' => { 'authentication_token' => [ { 'aliased_timestamp' => 16 } ] } }
|
|
788
743
|
]
|
|
789
744
|
}
|
|
790
|
-
}]
|
|
745
|
+
} ]
|
|
791
746
|
}
|
|
792
747
|
}
|
|
793
748
|
end
|
|
794
|
-
|
|
795
|
-
before do
|
|
796
|
-
klass.index({ authentication_token: 1 }, partial_filter_expression: partial_filter_expression)
|
|
797
|
-
end
|
|
798
|
-
|
|
799
749
|
let(:options) do
|
|
800
750
|
klass.index_specification(a: 1).options
|
|
801
751
|
end
|
|
802
|
-
|
|
803
752
|
let(:expected) do
|
|
804
753
|
{
|
|
805
754
|
'$foo': {
|
|
806
|
-
'$eq': [{
|
|
755
|
+
'$eq': [ {
|
|
807
756
|
'$bar': {
|
|
808
757
|
'$and': [
|
|
809
758
|
{ a: { '$gte' => { 'aliased_timestamp' => 16 } } },
|
|
810
759
|
{ a: { 'aliased_timestamp' => 16 } },
|
|
811
|
-
{ 'adrs.h': { 'authentication_token' => [{ 'aliased_timestamp' => 16 }] } }
|
|
760
|
+
{ 'adrs.h': { 'authentication_token' => [ { 'aliased_timestamp' => 16 } ] } }
|
|
812
761
|
]
|
|
813
762
|
}
|
|
814
|
-
}]
|
|
763
|
+
} ]
|
|
815
764
|
}
|
|
816
765
|
}
|
|
817
766
|
end
|
|
818
767
|
|
|
819
|
-
|
|
768
|
+
before do
|
|
769
|
+
klass.index({ authentication_token: 1 }, partial_filter_expression: partial_filter_expression)
|
|
770
|
+
end
|
|
771
|
+
|
|
772
|
+
it 'resolves aliases recursively only on $ operators' do
|
|
820
773
|
expect(options[:partial_filter_expression]).to eq(expected)
|
|
821
774
|
end
|
|
822
775
|
end
|
|
823
776
|
end
|
|
824
777
|
|
|
825
|
-
context
|
|
826
|
-
|
|
778
|
+
context 'when using weights option' do
|
|
827
779
|
context 'when not using aliases' do
|
|
828
|
-
|
|
829
780
|
before do
|
|
830
781
|
klass.index({ authentication_token: 1 }, weights: { a: 1, username: 2 })
|
|
831
782
|
end
|
|
@@ -834,13 +785,12 @@ describe Mongoid::Indexable do
|
|
|
834
785
|
klass.index_specification(a: 1).options
|
|
835
786
|
end
|
|
836
787
|
|
|
837
|
-
it
|
|
788
|
+
it 'sets the index with correct options' do
|
|
838
789
|
expect(options).to eq(weights: { a: 1, username: 2 })
|
|
839
790
|
end
|
|
840
791
|
end
|
|
841
792
|
|
|
842
793
|
context 'when using aliases via field :as option' do
|
|
843
|
-
|
|
844
794
|
before do
|
|
845
795
|
klass.index({ authentication_token: 1 }, weights: { 'addresses.house' => 1, authentication_token: 2 })
|
|
846
796
|
end
|
|
@@ -849,13 +799,12 @@ describe Mongoid::Indexable do
|
|
|
849
799
|
klass.index_specification(a: 1).options
|
|
850
800
|
end
|
|
851
801
|
|
|
852
|
-
it
|
|
802
|
+
it 'sets the index with correct options' do
|
|
853
803
|
expect(options).to eq(weights: { 'adrs.h': 1, a: 2 })
|
|
854
804
|
end
|
|
855
805
|
end
|
|
856
806
|
|
|
857
807
|
context 'when using aliases via alias_attribute' do
|
|
858
|
-
|
|
859
808
|
before do
|
|
860
809
|
klass.index({ u: 1 }, weights: { 'addresses.n' => 1, u: 2 })
|
|
861
810
|
end
|
|
@@ -864,16 +813,14 @@ describe Mongoid::Indexable do
|
|
|
864
813
|
klass.index_specification(username: 1).options
|
|
865
814
|
end
|
|
866
815
|
|
|
867
|
-
it
|
|
816
|
+
it 'sets the index with correct options' do
|
|
868
817
|
expect(options).to eq(weights: { 'adrs.name': 1, username: 2 })
|
|
869
818
|
end
|
|
870
819
|
end
|
|
871
820
|
end
|
|
872
821
|
|
|
873
|
-
context
|
|
874
|
-
|
|
822
|
+
context 'when using wildcard indexes' do
|
|
875
823
|
context 'when not using an alias' do
|
|
876
|
-
|
|
877
824
|
before do
|
|
878
825
|
klass.index({ '$**': 1 }, wildcard_projection: { _id: 1, username: 0 })
|
|
879
826
|
end
|
|
@@ -882,17 +829,16 @@ describe Mongoid::Indexable do
|
|
|
882
829
|
klass.index_specification('$**': 1)
|
|
883
830
|
end
|
|
884
831
|
|
|
885
|
-
it
|
|
832
|
+
it 'creates the index' do
|
|
886
833
|
expect(spec).to be_a(Mongoid::Indexable::Specification)
|
|
887
834
|
end
|
|
888
835
|
|
|
889
|
-
it
|
|
836
|
+
it 'sets the index with correct options' do
|
|
890
837
|
expect(spec.options).to eq(wildcard_projection: { _id: 1, username: 0 })
|
|
891
838
|
end
|
|
892
839
|
end
|
|
893
840
|
|
|
894
841
|
context 'when using an alias via field :as option' do
|
|
895
|
-
|
|
896
842
|
before do
|
|
897
843
|
klass.index({ 'addresses.$**': 1 }, wildcard_projection: { 'addresses.house' => 1 })
|
|
898
844
|
end
|
|
@@ -901,17 +847,16 @@ describe Mongoid::Indexable do
|
|
|
901
847
|
klass.index_specification('adrs.$**': 1)
|
|
902
848
|
end
|
|
903
849
|
|
|
904
|
-
it
|
|
850
|
+
it 'creates the index' do
|
|
905
851
|
expect(spec).to be_a(Mongoid::Indexable::Specification)
|
|
906
852
|
end
|
|
907
853
|
|
|
908
|
-
it
|
|
854
|
+
it 'sets the index with correct options' do
|
|
909
855
|
expect(spec.options).to eq(wildcard_projection: { 'adrs.h': 1 })
|
|
910
856
|
end
|
|
911
857
|
end
|
|
912
858
|
|
|
913
859
|
context 'when using aliases via alias_attribute' do
|
|
914
|
-
|
|
915
860
|
before do
|
|
916
861
|
klass.index({ 'addresses.$**': 1 }, wildcard_projection: { 'addresses.n' => 1 })
|
|
917
862
|
end
|
|
@@ -920,42 +865,93 @@ describe Mongoid::Indexable do
|
|
|
920
865
|
klass.index_specification('adrs.$**': 1)
|
|
921
866
|
end
|
|
922
867
|
|
|
923
|
-
it
|
|
868
|
+
it 'creates the index' do
|
|
924
869
|
expect(spec).to be_a(Mongoid::Indexable::Specification)
|
|
925
870
|
end
|
|
926
871
|
|
|
927
|
-
it
|
|
872
|
+
it 'sets the index with correct options' do
|
|
928
873
|
expect(spec.options).to eq(wildcard_projection: { 'adrs.name': 1 })
|
|
929
874
|
end
|
|
930
875
|
end
|
|
931
876
|
end
|
|
932
877
|
|
|
933
|
-
context
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
expect {
|
|
878
|
+
context 'when providing an invalid option' do
|
|
879
|
+
it 'raises an error' do
|
|
880
|
+
expect do
|
|
937
881
|
klass.index({ name: 1 }, { invalid: true })
|
|
938
|
-
|
|
882
|
+
end.to raise_error(Mongoid::Errors::InvalidIndex)
|
|
883
|
+
end
|
|
884
|
+
end
|
|
885
|
+
|
|
886
|
+
context 'when providing an invalid spec' do
|
|
887
|
+
context 'when the spec is not a hash' do
|
|
888
|
+
it 'raises an error' do
|
|
889
|
+
expect do
|
|
890
|
+
klass.index(:name)
|
|
891
|
+
end.to raise_error(Mongoid::Errors::InvalidIndex)
|
|
892
|
+
end
|
|
893
|
+
end
|
|
894
|
+
|
|
895
|
+
context 'when the spec key is invalid' do
|
|
896
|
+
it 'raises an error' do
|
|
897
|
+
expect do
|
|
898
|
+
klass.index({ name: 'something' })
|
|
899
|
+
end.to raise_error(Mongoid::Errors::InvalidIndex)
|
|
900
|
+
end
|
|
939
901
|
end
|
|
940
902
|
end
|
|
941
903
|
|
|
942
|
-
context
|
|
904
|
+
context 'when declaring a duplicate index with different options' do
|
|
905
|
+
def declare_duplicate_indexes!
|
|
906
|
+
klass.index({ name: 1 }, { partial_filter_expression: { name: 'a' } })
|
|
907
|
+
klass.index({ name: 1 }, { partial_filter_expression: { name: 'b' } })
|
|
908
|
+
klass.create_indexes
|
|
909
|
+
end
|
|
910
|
+
|
|
911
|
+
context 'when allow_duplicate_index_declarations is false' do
|
|
912
|
+
config_override :allow_duplicate_index_declarations, false
|
|
943
913
|
|
|
944
|
-
|
|
914
|
+
it 'silently ignores the duplicate definition' do
|
|
915
|
+
expect { declare_duplicate_indexes! }.not_to raise_exception
|
|
916
|
+
end
|
|
917
|
+
end
|
|
945
918
|
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
919
|
+
context 'when allow_duplicate_index_declarations is true' do
|
|
920
|
+
config_override :allow_duplicate_index_declarations, true
|
|
921
|
+
|
|
922
|
+
it 'raises a server error' do
|
|
923
|
+
expect { declare_duplicate_indexes! }.to raise_exception
|
|
950
924
|
end
|
|
951
925
|
end
|
|
926
|
+
end
|
|
927
|
+
|
|
928
|
+
context 'when declaring a duplicate index with different names' do
|
|
929
|
+
def declare_duplicate_indexes!
|
|
930
|
+
klass.index({ name: 1 }, { partial_filter_expression: { name: 'a' } })
|
|
931
|
+
klass.index({ name: 1 }, { name: 'alt_name', partial_filter_expression: { name: 'b' } })
|
|
932
|
+
klass.create_indexes
|
|
933
|
+
end
|
|
934
|
+
|
|
935
|
+
let(:index_count) { klass.collection.indexes.count }
|
|
936
|
+
|
|
937
|
+
context 'when allow_duplicate_index_declarations is false' do
|
|
938
|
+
config_override :allow_duplicate_index_declarations, false
|
|
939
|
+
|
|
940
|
+
it 'silently ignores the duplicate definition' do
|
|
941
|
+
expect { declare_duplicate_indexes! }.not_to raise_exception
|
|
942
|
+
expect(index_count).to eq 2 # _id and name
|
|
943
|
+
end
|
|
944
|
+
end
|
|
945
|
+
|
|
946
|
+
context 'when allow_duplicate_index_declarations is true' do
|
|
947
|
+
# 4.4 apparently doesn't recognize :name option for indexes?
|
|
948
|
+
min_server_version '5.0'
|
|
952
949
|
|
|
953
|
-
|
|
950
|
+
config_override :allow_duplicate_index_declarations, true
|
|
954
951
|
|
|
955
|
-
it
|
|
956
|
-
expect {
|
|
957
|
-
|
|
958
|
-
}.to raise_error(Mongoid::Errors::InvalidIndex)
|
|
952
|
+
it 'creates both indexes' do
|
|
953
|
+
expect { declare_duplicate_indexes! }.not_to raise_exception
|
|
954
|
+
expect(index_count).to eq 3 # _id, name, alt_name
|
|
959
955
|
end
|
|
960
956
|
end
|
|
961
957
|
end
|