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,198 +1,181 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
3
|
+
require 'spec_helper'
|
|
5
4
|
|
|
6
5
|
describe Mongoid::Criteria::Queryable::Selector do
|
|
7
|
-
|
|
8
|
-
describe "merge!" do
|
|
9
|
-
|
|
6
|
+
describe 'merge!' do
|
|
10
7
|
let(:selector) do
|
|
11
8
|
described_class.new
|
|
12
9
|
end
|
|
13
10
|
|
|
14
|
-
context
|
|
15
|
-
|
|
11
|
+
context 'when selector is nested' do
|
|
16
12
|
before do
|
|
17
13
|
selector[:field] = selection
|
|
18
14
|
selector.merge!(other)
|
|
19
15
|
end
|
|
20
16
|
|
|
21
17
|
let(:selection) do
|
|
22
|
-
{
|
|
18
|
+
{ '$lt' => 50 }
|
|
23
19
|
end
|
|
24
20
|
|
|
25
|
-
context
|
|
26
|
-
|
|
21
|
+
context 'when other contains same key with a hash' do
|
|
27
22
|
let(:other) do
|
|
28
|
-
{
|
|
23
|
+
{ 'field' => { '$gt' => 20 } }
|
|
29
24
|
end
|
|
30
25
|
|
|
31
|
-
it
|
|
32
|
-
expect(selector['field']).to eq({
|
|
26
|
+
it 'deep merges' do
|
|
27
|
+
expect(selector['field']).to eq({ '$lt' => 50, '$gt' => 20 })
|
|
33
28
|
end
|
|
34
29
|
end
|
|
35
30
|
|
|
36
|
-
context
|
|
37
|
-
|
|
31
|
+
context 'when other contains same key without hash' do
|
|
38
32
|
let(:other) do
|
|
39
|
-
{
|
|
33
|
+
{ 'field' => 10 }
|
|
40
34
|
end
|
|
41
35
|
|
|
42
|
-
it
|
|
36
|
+
it 'merges' do
|
|
43
37
|
expect(selector['field']).to eq(10)
|
|
44
38
|
end
|
|
45
39
|
end
|
|
46
40
|
end
|
|
47
41
|
|
|
48
|
-
context
|
|
49
|
-
|
|
42
|
+
context 'when selector contains a $nin string' do
|
|
50
43
|
let(:initial) do
|
|
51
|
-
{
|
|
44
|
+
{ '$nin' => [ 'foo' ] }
|
|
52
45
|
end
|
|
53
46
|
|
|
54
47
|
before do
|
|
55
|
-
selector[
|
|
48
|
+
selector['field'] = initial
|
|
56
49
|
end
|
|
57
50
|
|
|
58
|
-
context
|
|
59
|
-
|
|
51
|
+
context 'when merging in a new $nin' do
|
|
60
52
|
let(:other) do
|
|
61
|
-
{
|
|
53
|
+
{ 'field' => { '$nin' => [ 'bar' ] } }
|
|
62
54
|
end
|
|
63
55
|
|
|
64
56
|
before do
|
|
65
57
|
selector.merge!(other)
|
|
66
58
|
end
|
|
67
59
|
|
|
68
|
-
it
|
|
60
|
+
it 'combines the two $nin queries into one' do
|
|
69
61
|
expect(selector).to eq({
|
|
70
|
-
|
|
71
|
-
|
|
62
|
+
'field' => { '$nin' => %w[foo bar] }
|
|
63
|
+
})
|
|
72
64
|
end
|
|
73
65
|
end
|
|
74
66
|
end
|
|
75
67
|
|
|
76
|
-
context
|
|
77
|
-
|
|
68
|
+
context 'when selector contains a $nin symbol' do
|
|
78
69
|
let(:initial) do
|
|
79
|
-
{ :$nin => [
|
|
70
|
+
{ :$nin => [ 'foo' ] }
|
|
80
71
|
end
|
|
81
72
|
|
|
82
73
|
before do
|
|
83
|
-
selector[
|
|
74
|
+
selector['field'] = initial
|
|
84
75
|
end
|
|
85
76
|
|
|
86
|
-
context
|
|
87
|
-
|
|
77
|
+
context 'when merging in a new $nin' do
|
|
88
78
|
let(:other) do
|
|
89
|
-
{
|
|
79
|
+
{ 'field' => { :$nin => [ 'bar' ] } }
|
|
90
80
|
end
|
|
91
81
|
|
|
92
82
|
before do
|
|
93
83
|
selector.merge!(other)
|
|
94
84
|
end
|
|
95
85
|
|
|
96
|
-
it
|
|
86
|
+
it 'combines the two $nin queries into one' do
|
|
97
87
|
expect(selector).to eq({
|
|
98
|
-
|
|
99
|
-
|
|
88
|
+
'field' => { :$nin => %w[foo bar] }
|
|
89
|
+
})
|
|
100
90
|
end
|
|
101
91
|
end
|
|
102
92
|
end
|
|
103
93
|
|
|
104
|
-
context
|
|
105
|
-
|
|
94
|
+
context 'when selector contains a $in string' do
|
|
106
95
|
let(:initial) do
|
|
107
|
-
{
|
|
96
|
+
{ '$in' => [ 1, 2 ] }
|
|
108
97
|
end
|
|
109
98
|
|
|
110
99
|
before do
|
|
111
|
-
selector[
|
|
100
|
+
selector['field'] = initial
|
|
112
101
|
end
|
|
113
102
|
|
|
114
|
-
context
|
|
115
|
-
|
|
103
|
+
context 'when merging in a new $in with an intersecting value' do
|
|
116
104
|
let(:other) do
|
|
117
|
-
{
|
|
105
|
+
{ 'field' => { '$in' => [ 1 ] } }
|
|
118
106
|
end
|
|
119
107
|
|
|
120
108
|
before do
|
|
121
109
|
selector.merge!(other)
|
|
122
110
|
end
|
|
123
111
|
|
|
124
|
-
it
|
|
112
|
+
it 'intersects the $in values' do
|
|
125
113
|
expect(selector).to eq({
|
|
126
|
-
|
|
114
|
+
'field' => { '$in' => [ 1 ] }
|
|
127
115
|
})
|
|
128
116
|
end
|
|
129
117
|
end
|
|
130
118
|
|
|
131
|
-
context
|
|
132
|
-
|
|
119
|
+
context 'when merging in a new $in with no intersecting values' do
|
|
133
120
|
let(:other) do
|
|
134
|
-
{
|
|
121
|
+
{ 'field' => { '$in' => [ 3 ] } }
|
|
135
122
|
end
|
|
136
123
|
|
|
137
124
|
before do
|
|
138
125
|
selector.merge!(other)
|
|
139
126
|
end
|
|
140
127
|
|
|
141
|
-
it
|
|
128
|
+
it 'intersects the $in values' do
|
|
142
129
|
expect(selector).to eq({
|
|
143
|
-
|
|
130
|
+
'field' => { '$in' => [] }
|
|
144
131
|
})
|
|
145
132
|
end
|
|
146
133
|
end
|
|
147
134
|
end
|
|
148
135
|
|
|
149
|
-
context
|
|
150
|
-
|
|
136
|
+
context 'when selector contains a $in symbol' do
|
|
151
137
|
let(:initial) do
|
|
152
|
-
{ :$in => [1, 2] }
|
|
138
|
+
{ :$in => [ 1, 2 ] }
|
|
153
139
|
end
|
|
154
140
|
|
|
155
141
|
before do
|
|
156
|
-
selector[
|
|
142
|
+
selector['field'] = initial
|
|
157
143
|
end
|
|
158
144
|
|
|
159
|
-
context
|
|
160
|
-
|
|
145
|
+
context 'when merging in a new $in with an intersecting value' do
|
|
161
146
|
let(:other) do
|
|
162
|
-
{
|
|
147
|
+
{ 'field' => { :$in => [ 1 ] } }
|
|
163
148
|
end
|
|
164
149
|
|
|
165
150
|
before do
|
|
166
151
|
selector.merge!(other)
|
|
167
152
|
end
|
|
168
153
|
|
|
169
|
-
it
|
|
154
|
+
it 'intersects the $in values' do
|
|
170
155
|
expect(selector).to eq({
|
|
171
|
-
|
|
156
|
+
'field' => { :$in => [ 1 ] }
|
|
172
157
|
})
|
|
173
158
|
end
|
|
174
159
|
end
|
|
175
160
|
|
|
176
|
-
context
|
|
177
|
-
|
|
161
|
+
context 'when merging in a new $in with no intersecting values' do
|
|
178
162
|
let(:other) do
|
|
179
|
-
{
|
|
163
|
+
{ 'field' => { :$in => [ 3 ] } }
|
|
180
164
|
end
|
|
181
165
|
|
|
182
166
|
before do
|
|
183
167
|
selector.merge!(other)
|
|
184
168
|
end
|
|
185
169
|
|
|
186
|
-
it
|
|
170
|
+
it 'intersects the $in values' do
|
|
187
171
|
expect(selector).to eq({
|
|
188
|
-
|
|
172
|
+
'field' => { :$in => [] }
|
|
189
173
|
})
|
|
190
174
|
end
|
|
191
175
|
end
|
|
192
176
|
end
|
|
193
177
|
|
|
194
|
-
context
|
|
195
|
-
|
|
178
|
+
context 'when selector is not nested' do
|
|
196
179
|
before do
|
|
197
180
|
selector[:field] = selection
|
|
198
181
|
selector.merge!(other)
|
|
@@ -203,16 +186,15 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
|
203
186
|
end
|
|
204
187
|
|
|
205
188
|
let(:other) do
|
|
206
|
-
{
|
|
189
|
+
{ 'field' => { '$gt' => 20 } }
|
|
207
190
|
end
|
|
208
191
|
|
|
209
|
-
it
|
|
210
|
-
expect(selector['field']).to eq({
|
|
192
|
+
it 'merges' do
|
|
193
|
+
expect(selector['field']).to eq({ '$gt' => 20 })
|
|
211
194
|
end
|
|
212
195
|
end
|
|
213
196
|
|
|
214
197
|
context 'when an object does not support the | operator' do
|
|
215
|
-
|
|
216
198
|
before do
|
|
217
199
|
selector['start'] = selection
|
|
218
200
|
selector.merge!(other)
|
|
@@ -223,108 +205,104 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
|
223
205
|
end
|
|
224
206
|
|
|
225
207
|
let(:other) do
|
|
226
|
-
{ 'start' => selection, 'name' => 'test'
|
|
208
|
+
{ 'start' => selection, 'name' => 'test' }
|
|
227
209
|
end
|
|
228
210
|
|
|
229
|
-
it
|
|
211
|
+
it 'merges' do
|
|
230
212
|
expect(selector['name']).to eq('test')
|
|
231
213
|
expect(selector['start']).to eq(selection)
|
|
232
214
|
end
|
|
233
215
|
end
|
|
234
216
|
|
|
235
|
-
context
|
|
236
|
-
|
|
217
|
+
context 'when the selector contains an $or' do
|
|
237
218
|
let(:initial) do
|
|
238
|
-
[{
|
|
219
|
+
[ { 'value' => 1 } ]
|
|
239
220
|
end
|
|
240
221
|
|
|
241
222
|
before do
|
|
242
|
-
selector[
|
|
223
|
+
selector['$or'] = initial
|
|
243
224
|
end
|
|
244
225
|
|
|
245
|
-
context
|
|
246
|
-
|
|
226
|
+
context 'when merging in a new $or' do
|
|
247
227
|
let(:other) do
|
|
248
|
-
[{
|
|
228
|
+
[ { 'value' => 2 } ]
|
|
249
229
|
end
|
|
250
230
|
|
|
251
231
|
before do
|
|
252
|
-
selector.merge!({
|
|
232
|
+
selector.merge!({ '$or' => other })
|
|
253
233
|
end
|
|
254
234
|
|
|
255
|
-
it
|
|
235
|
+
it 'combines the two $or queries into one' do
|
|
256
236
|
expect(selector).to eq({
|
|
257
|
-
|
|
258
|
-
|
|
237
|
+
'$or' => [ { 'value' => 1 }, { 'value' => 2 } ]
|
|
238
|
+
})
|
|
259
239
|
end
|
|
260
240
|
end
|
|
261
241
|
end
|
|
262
242
|
|
|
263
|
-
context
|
|
264
|
-
|
|
243
|
+
context 'when the selector contains an $and' do
|
|
265
244
|
let(:initial) do
|
|
266
|
-
[{
|
|
245
|
+
[ { 'value' => 1 } ]
|
|
267
246
|
end
|
|
268
247
|
|
|
269
248
|
before do
|
|
270
|
-
selector[
|
|
249
|
+
selector['$and'] = initial
|
|
271
250
|
end
|
|
272
251
|
|
|
273
|
-
context
|
|
274
|
-
|
|
252
|
+
context 'when merging in a new $and' do
|
|
275
253
|
let(:other) do
|
|
276
|
-
[{
|
|
254
|
+
[ { 'value' => 2 } ]
|
|
277
255
|
end
|
|
278
256
|
|
|
279
257
|
before do
|
|
280
|
-
selector.merge!({
|
|
258
|
+
selector.merge!({ '$and' => other })
|
|
281
259
|
end
|
|
282
260
|
|
|
283
|
-
it
|
|
261
|
+
it 'combines the two $and queries into one' do
|
|
284
262
|
expect(selector).to eq({
|
|
285
|
-
|
|
286
|
-
|
|
263
|
+
'$and' => [ { 'value' => 1 }, { 'value' => 2 } ]
|
|
264
|
+
})
|
|
287
265
|
end
|
|
288
266
|
end
|
|
289
267
|
end
|
|
290
268
|
|
|
291
|
-
context
|
|
292
|
-
|
|
269
|
+
context 'when the selector contains a $nor' do
|
|
293
270
|
let(:initial) do
|
|
294
|
-
[{
|
|
271
|
+
[ { 'value' => 1 } ]
|
|
295
272
|
end
|
|
296
273
|
|
|
297
274
|
before do
|
|
298
|
-
selector[
|
|
275
|
+
selector['$nor'] = initial
|
|
299
276
|
end
|
|
300
277
|
|
|
301
|
-
context
|
|
302
|
-
|
|
278
|
+
context 'when merging in a new $nor' do
|
|
303
279
|
let(:other) do
|
|
304
|
-
[{
|
|
280
|
+
[ { 'value' => 2 } ]
|
|
305
281
|
end
|
|
306
282
|
|
|
307
283
|
before do
|
|
308
|
-
selector.merge!({
|
|
284
|
+
selector.merge!({ '$nor' => other })
|
|
309
285
|
end
|
|
310
286
|
|
|
311
|
-
it
|
|
287
|
+
it 'combines the two $nor queries into one' do
|
|
312
288
|
expect(selector).to eq({
|
|
313
|
-
|
|
314
|
-
|
|
289
|
+
'$nor' => initial + other
|
|
290
|
+
})
|
|
315
291
|
end
|
|
316
292
|
end
|
|
317
293
|
end
|
|
318
294
|
end
|
|
319
295
|
|
|
320
|
-
describe
|
|
321
|
-
|
|
296
|
+
describe '#__deep_copy__' do
|
|
322
297
|
let(:value) do
|
|
323
298
|
[ 1, 2, 3 ]
|
|
324
299
|
end
|
|
300
|
+
let(:cloned) do
|
|
301
|
+
selector.__deep_copy__
|
|
302
|
+
end
|
|
325
303
|
|
|
326
304
|
let(:selection) do
|
|
327
|
-
{
|
|
305
|
+
{ '$in' => value }
|
|
328
306
|
end
|
|
329
307
|
|
|
330
308
|
let(:selector) do
|
|
@@ -335,46 +313,37 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
|
335
313
|
selector[:field] = selection
|
|
336
314
|
end
|
|
337
315
|
|
|
338
|
-
|
|
339
|
-
selector.__deep_copy__
|
|
340
|
-
end
|
|
341
|
-
|
|
342
|
-
it "returns an equal copy" do
|
|
316
|
+
it 'returns an equal copy' do
|
|
343
317
|
expect(cloned).to eq(selector)
|
|
344
318
|
end
|
|
345
319
|
|
|
346
|
-
it
|
|
347
|
-
expect(cloned[
|
|
320
|
+
it 'performs a deep copy' do
|
|
321
|
+
expect(cloned['field']).not_to equal(selection)
|
|
348
322
|
end
|
|
349
323
|
|
|
350
|
-
it
|
|
351
|
-
expect(cloned[
|
|
324
|
+
it 'clones n levels deep' do
|
|
325
|
+
expect(cloned['field']['$in']).not_to equal(value)
|
|
352
326
|
end
|
|
353
327
|
end
|
|
354
328
|
|
|
355
|
-
[
|
|
356
|
-
|
|
329
|
+
%i[store []=].each do |method|
|
|
357
330
|
describe "##{method}" do
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
context "when the alias has no serializer" do
|
|
362
|
-
|
|
331
|
+
context 'when aliases are provided' do
|
|
332
|
+
context 'when the alias has no serializer' do
|
|
363
333
|
let(:selector) do
|
|
364
|
-
described_class.new({
|
|
334
|
+
described_class.new({ 'id' => '_id' })
|
|
365
335
|
end
|
|
366
336
|
|
|
367
337
|
before do
|
|
368
|
-
selector.send(method,
|
|
338
|
+
selector.send(method, 'id', 1)
|
|
369
339
|
end
|
|
370
340
|
|
|
371
|
-
it
|
|
372
|
-
expect(selector[
|
|
341
|
+
it 'stores the field in the selector by database name' do
|
|
342
|
+
expect(selector['_id']).to eq(1)
|
|
373
343
|
end
|
|
374
344
|
end
|
|
375
345
|
|
|
376
|
-
context
|
|
377
|
-
|
|
346
|
+
context 'when the alias has a serializer' do
|
|
378
347
|
before(:all) do
|
|
379
348
|
class Field
|
|
380
349
|
def evolve(object)
|
|
@@ -393,64 +362,58 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
|
393
362
|
|
|
394
363
|
let(:selector) do
|
|
395
364
|
described_class.new(
|
|
396
|
-
{
|
|
365
|
+
{ 'id' => '_id' }, { '_id' => Field.new }
|
|
397
366
|
)
|
|
398
367
|
end
|
|
399
368
|
|
|
400
|
-
it
|
|
401
|
-
selector.send(method,
|
|
402
|
-
expect(selector[
|
|
369
|
+
it 'stores the serialized field in the selector by database name' do
|
|
370
|
+
selector.send(method, 'id', '1')
|
|
371
|
+
expect(selector['_id']).to eq(1)
|
|
403
372
|
end
|
|
404
373
|
|
|
405
|
-
it
|
|
406
|
-
selector.send(method,
|
|
374
|
+
it 'stores the serialized field when selector is deeply nested' do
|
|
375
|
+
selector.send(method, '$or', [ { '$and' => [ { '_id' => '5' } ] } ])
|
|
407
376
|
expect(selector['$or'][0]['$and'][0]['_id']).to eq(5)
|
|
408
377
|
end
|
|
409
378
|
end
|
|
410
379
|
end
|
|
411
380
|
|
|
412
|
-
context
|
|
413
|
-
|
|
381
|
+
context 'when no serializers are provided' do
|
|
414
382
|
let(:selector) do
|
|
415
383
|
described_class.new
|
|
416
384
|
end
|
|
417
385
|
|
|
418
|
-
context
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
it "does not serialize values" do
|
|
423
|
-
expect(selector.send(method, "key", "5")).to eq("5")
|
|
386
|
+
context 'when provided a standard object' do
|
|
387
|
+
context 'when the keys are strings' do
|
|
388
|
+
it 'does not serialize values' do
|
|
389
|
+
expect(selector.send(method, 'key', '5')).to eq('5')
|
|
424
390
|
end
|
|
425
391
|
end
|
|
426
392
|
|
|
427
|
-
context
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
expect(selector.send(method, :key, "5")).to eq("5")
|
|
393
|
+
context 'when the keys are symbols' do
|
|
394
|
+
it 'does not serialize values' do
|
|
395
|
+
expect(selector.send(method, :key, '5')).to eq('5')
|
|
431
396
|
end
|
|
432
397
|
end
|
|
433
398
|
end
|
|
434
399
|
|
|
435
|
-
context
|
|
436
|
-
|
|
400
|
+
context 'when provided a range' do
|
|
437
401
|
before do
|
|
438
|
-
selector.send(method,
|
|
402
|
+
selector.send(method, 'key', 1..3)
|
|
439
403
|
end
|
|
440
404
|
|
|
441
|
-
it
|
|
442
|
-
expect(selector[
|
|
405
|
+
it 'serializes the range' do
|
|
406
|
+
expect(selector['key']).to eq({ '$gte' => 1, '$lte' => 3 })
|
|
443
407
|
end
|
|
444
408
|
end
|
|
445
409
|
|
|
446
|
-
context
|
|
447
|
-
|
|
410
|
+
context 'when providing an array' do
|
|
448
411
|
let(:big_one) do
|
|
449
|
-
BigDecimal(
|
|
412
|
+
BigDecimal('1.2321')
|
|
450
413
|
end
|
|
451
414
|
|
|
452
415
|
let(:big_two) do
|
|
453
|
-
BigDecimal(
|
|
416
|
+
BigDecimal('4.2222')
|
|
454
417
|
end
|
|
455
418
|
|
|
456
419
|
let(:array) do
|
|
@@ -458,68 +421,64 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
|
458
421
|
end
|
|
459
422
|
|
|
460
423
|
before do
|
|
461
|
-
selector.send(method,
|
|
424
|
+
selector.send(method, 'key', array)
|
|
462
425
|
end
|
|
463
426
|
|
|
464
427
|
context 'when serializing bigdecimal to string' do
|
|
465
428
|
config_override :map_big_decimal_to_decimal128, false
|
|
466
429
|
|
|
467
|
-
it
|
|
468
|
-
expect(selector[
|
|
430
|
+
it 'serializes each element in the array' do
|
|
431
|
+
expect(selector['key']).to eq([ big_one.to_s, big_two.to_s ])
|
|
469
432
|
end
|
|
470
433
|
end
|
|
471
434
|
|
|
472
435
|
context 'when serializing bigdecimal to decimal128' do
|
|
473
436
|
config_override :map_big_decimal_to_decimal128, true
|
|
474
437
|
|
|
475
|
-
it
|
|
476
|
-
expect(selector[
|
|
438
|
+
it 'serializes each element in the array' do
|
|
439
|
+
expect(selector['key']).to eq([ BSON::Decimal128.new(big_one), BSON::Decimal128.new(big_two) ])
|
|
477
440
|
end
|
|
478
441
|
end
|
|
479
442
|
end
|
|
480
443
|
|
|
481
|
-
context
|
|
482
|
-
|
|
483
|
-
context "and raw_value is a string" do
|
|
484
|
-
|
|
444
|
+
context 'when providing a Mongoid::RawValue' do
|
|
445
|
+
context 'and raw_value is a string' do
|
|
485
446
|
before do
|
|
486
|
-
selector.send(method,
|
|
447
|
+
selector.send(method, 'key', Mongoid::RawValue('Foo'))
|
|
487
448
|
end
|
|
488
449
|
|
|
489
|
-
it
|
|
490
|
-
expect(selector[
|
|
450
|
+
it 'returns the raw_value' do
|
|
451
|
+
expect(selector['key']).to eq('Foo')
|
|
491
452
|
end
|
|
492
453
|
end
|
|
493
454
|
|
|
494
|
-
context
|
|
495
|
-
|
|
455
|
+
context 'and raw_value cannot be converted by bson-ruby' do
|
|
496
456
|
before do
|
|
497
|
-
selector.send(method,
|
|
457
|
+
selector.send(method, 'key', Mongoid::RawValue(4..5))
|
|
498
458
|
end
|
|
499
459
|
|
|
500
|
-
it
|
|
501
|
-
expect(selector[
|
|
460
|
+
it 'returns the raw_value without conversion' do
|
|
461
|
+
expect(selector['key']).to eq(4..5)
|
|
502
462
|
end
|
|
503
463
|
end
|
|
504
464
|
|
|
505
|
-
context
|
|
465
|
+
context 'and raw_value is a complex type' do
|
|
506
466
|
config_override :map_big_decimal_to_decimal128, true
|
|
507
467
|
|
|
508
468
|
before do
|
|
509
|
-
selector.send(method,
|
|
469
|
+
selector.send(method, 'key',
|
|
470
|
+
Mongoid::RawValue([ { foo: 1, 'Bar' => [ /baz/, BigDecimal('2'), 4..5 ] }, 3 ]))
|
|
510
471
|
end
|
|
511
472
|
|
|
512
|
-
it
|
|
513
|
-
expect(selector[
|
|
473
|
+
it 'returns the raw_value' do
|
|
474
|
+
expect(selector['key']).to eq([ { foo: 1, 'Bar' => [ /baz/, BigDecimal('2'), 4..5 ] }, 3 ])
|
|
514
475
|
end
|
|
515
476
|
end
|
|
516
477
|
end
|
|
517
478
|
end
|
|
518
479
|
|
|
519
|
-
context
|
|
520
|
-
|
|
521
|
-
context "when the serializer is not localized" do
|
|
522
|
-
|
|
480
|
+
context 'when serializers are provided' do
|
|
481
|
+
context 'when the serializer is not localized' do
|
|
523
482
|
before(:all) do
|
|
524
483
|
class Field
|
|
525
484
|
def evolve(object)
|
|
@@ -537,176 +496,153 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
|
537
496
|
end
|
|
538
497
|
|
|
539
498
|
let(:selector) do
|
|
540
|
-
described_class.new({}, {
|
|
499
|
+
described_class.new({}, { 'key' => Field.new })
|
|
541
500
|
end
|
|
542
501
|
|
|
543
|
-
context
|
|
544
|
-
|
|
545
|
-
context "when the key is a string" do
|
|
546
|
-
|
|
502
|
+
context 'when the criterion is simple' do
|
|
503
|
+
context 'when the key is a string' do
|
|
547
504
|
before do
|
|
548
|
-
selector.send(method,
|
|
505
|
+
selector.send(method, 'key', '5')
|
|
549
506
|
end
|
|
550
507
|
|
|
551
|
-
it
|
|
552
|
-
expect(selector[
|
|
508
|
+
it 'serializes the value' do
|
|
509
|
+
expect(selector['key']).to eq(5)
|
|
553
510
|
end
|
|
554
511
|
end
|
|
555
512
|
|
|
556
|
-
context
|
|
557
|
-
|
|
513
|
+
context 'when the key is a symbol' do
|
|
558
514
|
before do
|
|
559
|
-
selector.send(method, :key,
|
|
515
|
+
selector.send(method, :key, '5')
|
|
560
516
|
end
|
|
561
517
|
|
|
562
|
-
it
|
|
563
|
-
expect(selector[
|
|
518
|
+
it 'serializes the value' do
|
|
519
|
+
expect(selector['key']).to eq(5)
|
|
564
520
|
end
|
|
565
521
|
end
|
|
566
522
|
end
|
|
567
523
|
|
|
568
|
-
context
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
context "when the criterion is an array" do
|
|
573
|
-
|
|
574
|
-
context "when the key is a string" do
|
|
575
|
-
|
|
524
|
+
context 'when the criterion is complex' do
|
|
525
|
+
context 'when the field name is the key' do
|
|
526
|
+
context 'when the criterion is an array' do
|
|
527
|
+
context 'when the key is a string' do
|
|
576
528
|
before do
|
|
577
|
-
selector.send(method,
|
|
529
|
+
selector.send(method, 'key', %w[1 2])
|
|
578
530
|
end
|
|
579
531
|
|
|
580
|
-
it
|
|
581
|
-
expect(selector[
|
|
532
|
+
it 'serializes the value' do
|
|
533
|
+
expect(selector['key']).to eq([ 1, 2 ])
|
|
582
534
|
end
|
|
583
535
|
end
|
|
584
536
|
|
|
585
|
-
context
|
|
586
|
-
|
|
537
|
+
context 'when the key is a symbol' do
|
|
587
538
|
before do
|
|
588
|
-
selector.send(method, :key, [
|
|
539
|
+
selector.send(method, :key, %w[1 2])
|
|
589
540
|
end
|
|
590
541
|
|
|
591
|
-
it
|
|
592
|
-
expect(selector[
|
|
542
|
+
it 'serializes the value' do
|
|
543
|
+
expect(selector['key']).to eq([ 1, 2 ])
|
|
593
544
|
end
|
|
594
545
|
end
|
|
595
546
|
end
|
|
596
547
|
|
|
597
|
-
context
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
context "when the key is a string" do
|
|
602
|
-
|
|
548
|
+
context 'when the criterion is a hash' do
|
|
549
|
+
context 'when the value is non enumerable' do
|
|
550
|
+
context 'when the key is a string' do
|
|
603
551
|
before do
|
|
604
|
-
selector.send(method,
|
|
552
|
+
selector.send(method, 'key', { '$gt' => '5' })
|
|
605
553
|
end
|
|
606
554
|
|
|
607
|
-
it
|
|
608
|
-
expect(selector[
|
|
555
|
+
it 'serializes the value' do
|
|
556
|
+
expect(selector['key']).to eq({ '$gt' => 5 })
|
|
609
557
|
end
|
|
610
558
|
end
|
|
611
559
|
|
|
612
|
-
context
|
|
613
|
-
|
|
560
|
+
context 'when the key is a symbol' do
|
|
614
561
|
before do
|
|
615
|
-
selector.send(method, :key, {
|
|
562
|
+
selector.send(method, :key, { '$gt' => '5' })
|
|
616
563
|
end
|
|
617
564
|
|
|
618
|
-
it
|
|
619
|
-
expect(selector[
|
|
565
|
+
it 'serializes the value' do
|
|
566
|
+
expect(selector['key']).to eq({ '$gt' => 5 })
|
|
620
567
|
end
|
|
621
568
|
end
|
|
622
569
|
end
|
|
623
570
|
|
|
624
|
-
context
|
|
625
|
-
|
|
626
|
-
context "when the key is a string" do
|
|
627
|
-
|
|
571
|
+
context 'when the value is enumerable' do
|
|
572
|
+
context 'when the key is a string' do
|
|
628
573
|
before do
|
|
629
|
-
selector.send(method,
|
|
574
|
+
selector.send(method, 'key', { '$in' => %w[1 2] })
|
|
630
575
|
end
|
|
631
576
|
|
|
632
|
-
it
|
|
633
|
-
expect(selector[
|
|
577
|
+
it 'serializes the value' do
|
|
578
|
+
expect(selector['key']).to eq({ '$in' => [ 1, 2 ] })
|
|
634
579
|
end
|
|
635
580
|
end
|
|
636
581
|
|
|
637
|
-
context
|
|
638
|
-
|
|
582
|
+
context 'when the key is a symbol' do
|
|
639
583
|
before do
|
|
640
|
-
selector.send(method, :key, {
|
|
584
|
+
selector.send(method, :key, { '$in' => %w[1 2] })
|
|
641
585
|
end
|
|
642
586
|
|
|
643
|
-
it
|
|
644
|
-
expect(selector[
|
|
587
|
+
it 'serializes the value' do
|
|
588
|
+
expect(selector['key']).to eq({ '$in' => [ 1, 2 ] })
|
|
645
589
|
end
|
|
646
590
|
end
|
|
647
591
|
end
|
|
648
592
|
|
|
649
|
-
[
|
|
650
|
-
|
|
593
|
+
[ '$and', '$or' ].each do |operator|
|
|
651
594
|
context "when the criterion is a #{operator}" do
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
context "when the keys are strings" do
|
|
656
|
-
|
|
595
|
+
context 'when the individual criteria are simple' do
|
|
596
|
+
context 'when the keys are strings' do
|
|
657
597
|
before do
|
|
658
|
-
selector.send(method, operator, [{
|
|
598
|
+
selector.send(method, operator, [ { 'key' => '1' } ])
|
|
659
599
|
end
|
|
660
600
|
|
|
661
|
-
it
|
|
662
|
-
expect(selector[operator]).to eq([{
|
|
601
|
+
it 'serializes the values' do
|
|
602
|
+
expect(selector[operator]).to eq([ { 'key' => 1 } ])
|
|
663
603
|
end
|
|
664
604
|
end
|
|
665
605
|
|
|
666
|
-
context
|
|
667
|
-
|
|
606
|
+
context 'when the keys are symbols' do
|
|
668
607
|
before do
|
|
669
|
-
selector.send(method, operator, [{ key:
|
|
608
|
+
selector.send(method, operator, [ { key: '1' } ])
|
|
670
609
|
end
|
|
671
610
|
|
|
672
|
-
it
|
|
673
|
-
expect(selector[operator]).to eq([{
|
|
611
|
+
it 'serializes the values' do
|
|
612
|
+
expect(selector[operator]).to eq([ { 'key' => 1 } ])
|
|
674
613
|
end
|
|
675
614
|
end
|
|
676
615
|
end
|
|
677
616
|
|
|
678
|
-
context
|
|
679
|
-
|
|
680
|
-
context "when the keys are strings" do
|
|
681
|
-
|
|
617
|
+
context 'when the individual criteria are complex' do
|
|
618
|
+
context 'when the keys are strings' do
|
|
682
619
|
before do
|
|
683
620
|
selector.send(
|
|
684
621
|
method,
|
|
685
622
|
operator,
|
|
686
|
-
[{
|
|
623
|
+
[ { 'field' => '1' }, { 'key' => { '$gt' => '2' } } ]
|
|
687
624
|
)
|
|
688
625
|
end
|
|
689
626
|
|
|
690
|
-
it
|
|
627
|
+
it 'serializes the values' do
|
|
691
628
|
expect(selector[operator]).to eq(
|
|
692
|
-
[{
|
|
629
|
+
[ { 'field' => '1' }, { 'key' => { '$gt' => 2 } } ]
|
|
693
630
|
)
|
|
694
631
|
end
|
|
695
632
|
end
|
|
696
633
|
|
|
697
|
-
context
|
|
698
|
-
|
|
634
|
+
context 'when the keys are symbols' do
|
|
699
635
|
before do
|
|
700
636
|
selector.send(
|
|
701
637
|
method,
|
|
702
638
|
operator,
|
|
703
|
-
[{ field:
|
|
639
|
+
[ { field: '1' }, { key: { '$gt' => '2' } } ]
|
|
704
640
|
)
|
|
705
641
|
end
|
|
706
642
|
|
|
707
|
-
it
|
|
643
|
+
it 'serializes the values' do
|
|
708
644
|
expect(selector[operator]).to eq(
|
|
709
|
-
[{
|
|
645
|
+
[ { 'field' => '1' }, { 'key' => { '$gt' => 2 } } ]
|
|
710
646
|
)
|
|
711
647
|
end
|
|
712
648
|
end
|
|
@@ -715,60 +651,55 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
|
715
651
|
end
|
|
716
652
|
end
|
|
717
653
|
|
|
718
|
-
context
|
|
719
|
-
|
|
720
|
-
context "and raw_value is a serializable string" do
|
|
721
|
-
|
|
654
|
+
context 'when the criterion is a Mongoid::RawValue' do
|
|
655
|
+
context 'and raw_value is a serializable string' do
|
|
722
656
|
before do
|
|
723
|
-
selector.send(method,
|
|
657
|
+
selector.send(method, 'key', Mongoid::RawValue('1'))
|
|
724
658
|
end
|
|
725
659
|
|
|
726
|
-
it
|
|
727
|
-
expect(selector[
|
|
660
|
+
it 'returns the raw_value' do
|
|
661
|
+
expect(selector['key']).to eq('1')
|
|
728
662
|
end
|
|
729
663
|
end
|
|
730
664
|
|
|
731
|
-
context
|
|
732
|
-
|
|
665
|
+
context 'and raw_value is a serializable type' do
|
|
733
666
|
before do
|
|
734
|
-
selector.send(method,
|
|
667
|
+
selector.send(method, 'key', Mongoid::RawValue(BigDecimal('2')))
|
|
735
668
|
end
|
|
736
669
|
|
|
737
|
-
it
|
|
738
|
-
expect(selector[
|
|
670
|
+
it 'returns the raw_value' do
|
|
671
|
+
expect(selector['key']).to eq(BigDecimal('2'))
|
|
739
672
|
end
|
|
740
673
|
end
|
|
741
674
|
|
|
742
|
-
context
|
|
743
|
-
|
|
675
|
+
context 'and raw_value is a non-serializable string' do
|
|
744
676
|
before do
|
|
745
|
-
selector.send(method,
|
|
677
|
+
selector.send(method, 'key', Mongoid::RawValue('Foo'))
|
|
746
678
|
end
|
|
747
679
|
|
|
748
|
-
it
|
|
749
|
-
expect(selector[
|
|
680
|
+
it 'returns the raw_value' do
|
|
681
|
+
expect(selector['key']).to eq('Foo')
|
|
750
682
|
end
|
|
751
683
|
end
|
|
752
684
|
|
|
753
|
-
context
|
|
754
|
-
|
|
685
|
+
context 'and raw_value cannot be converted by bson-ruby' do
|
|
755
686
|
before do
|
|
756
|
-
selector.send(method,
|
|
687
|
+
selector.send(method, 'key', Mongoid::RawValue(4..5))
|
|
757
688
|
end
|
|
758
689
|
|
|
759
|
-
it
|
|
760
|
-
expect(selector[
|
|
690
|
+
it 'returns the raw_value without conversion' do
|
|
691
|
+
expect(selector['key']).to eq(4..5)
|
|
761
692
|
end
|
|
762
693
|
end
|
|
763
694
|
|
|
764
|
-
context
|
|
765
|
-
|
|
695
|
+
context 'and raw_value is a complex type' do
|
|
766
696
|
before do
|
|
767
|
-
selector.send(method,
|
|
697
|
+
selector.send(method, 'key',
|
|
698
|
+
Mongoid::RawValue([ { foo: '1', 'Bar' => [ /baz/, BigDecimal('2'), 4..5 ] }, 3 ]))
|
|
768
699
|
end
|
|
769
700
|
|
|
770
|
-
it
|
|
771
|
-
expect(selector[
|
|
701
|
+
it 'returns the raw_value' do
|
|
702
|
+
expect(selector['key']).to eq([ { foo: '1', 'Bar' => [ /baz/, BigDecimal('2'), 4..5 ] }, 3 ])
|
|
772
703
|
end
|
|
773
704
|
end
|
|
774
705
|
end
|
|
@@ -776,7 +707,7 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
|
776
707
|
end
|
|
777
708
|
end
|
|
778
709
|
|
|
779
|
-
context
|
|
710
|
+
context 'when the serializer is localized' do
|
|
780
711
|
with_default_i18n_configs
|
|
781
712
|
|
|
782
713
|
before(:all) do
|
|
@@ -796,188 +727,165 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
|
796
727
|
end
|
|
797
728
|
|
|
798
729
|
let(:selector) do
|
|
799
|
-
described_class.new({}, {
|
|
730
|
+
described_class.new({}, { 'key' => Field.new })
|
|
800
731
|
end
|
|
801
732
|
|
|
802
733
|
before do
|
|
803
|
-
|
|
734
|
+
I18n.locale = :de
|
|
804
735
|
end
|
|
805
736
|
|
|
806
|
-
context
|
|
807
|
-
|
|
808
|
-
context "when the key is a string" do
|
|
809
|
-
|
|
737
|
+
context 'when the criterion is simple' do
|
|
738
|
+
context 'when the key is a string' do
|
|
810
739
|
before do
|
|
811
|
-
selector.send(method,
|
|
740
|
+
selector.send(method, 'key', '5')
|
|
812
741
|
end
|
|
813
742
|
|
|
814
|
-
it
|
|
815
|
-
expect(selector[
|
|
743
|
+
it 'serializes the value' do
|
|
744
|
+
expect(selector['key.de']).to eq(5)
|
|
816
745
|
end
|
|
817
746
|
end
|
|
818
747
|
|
|
819
|
-
context
|
|
820
|
-
|
|
748
|
+
context 'when the key is a symbol' do
|
|
821
749
|
before do
|
|
822
|
-
selector.send(method, :key,
|
|
750
|
+
selector.send(method, :key, '5')
|
|
823
751
|
end
|
|
824
752
|
|
|
825
|
-
it
|
|
826
|
-
expect(selector[
|
|
753
|
+
it 'serializes the value' do
|
|
754
|
+
expect(selector['key.de']).to eq(5)
|
|
827
755
|
end
|
|
828
756
|
end
|
|
829
757
|
end
|
|
830
758
|
|
|
831
|
-
context
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
context "when the criterion is an array" do
|
|
836
|
-
|
|
837
|
-
context "when the key is a string" do
|
|
838
|
-
|
|
759
|
+
context 'when the criterion is complex' do
|
|
760
|
+
context 'when the field name is the key' do
|
|
761
|
+
context 'when the criterion is an array' do
|
|
762
|
+
context 'when the key is a string' do
|
|
839
763
|
before do
|
|
840
|
-
selector.send(method,
|
|
764
|
+
selector.send(method, 'key', %w[1 2])
|
|
841
765
|
end
|
|
842
766
|
|
|
843
|
-
it
|
|
844
|
-
expect(selector[
|
|
767
|
+
it 'serializes the value' do
|
|
768
|
+
expect(selector['key.de']).to eq([ 1, 2 ])
|
|
845
769
|
end
|
|
846
770
|
end
|
|
847
771
|
|
|
848
|
-
context
|
|
849
|
-
|
|
772
|
+
context 'when the key is a symbol' do
|
|
850
773
|
before do
|
|
851
|
-
selector.send(method, :key, [
|
|
774
|
+
selector.send(method, :key, %w[1 2])
|
|
852
775
|
end
|
|
853
776
|
|
|
854
|
-
it
|
|
855
|
-
expect(selector[
|
|
777
|
+
it 'serializes the value' do
|
|
778
|
+
expect(selector['key.de']).to eq([ 1, 2 ])
|
|
856
779
|
end
|
|
857
780
|
end
|
|
858
781
|
end
|
|
859
782
|
|
|
860
|
-
context
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
context "when the key is a string" do
|
|
865
|
-
|
|
783
|
+
context 'when the criterion is a hash' do
|
|
784
|
+
context 'when the value is non enumerable' do
|
|
785
|
+
context 'when the key is a string' do
|
|
866
786
|
let(:hash) do
|
|
867
|
-
{
|
|
787
|
+
{ '$gt' => '5' }
|
|
868
788
|
end
|
|
869
789
|
|
|
870
790
|
before do
|
|
871
|
-
selector.send(method,
|
|
791
|
+
selector.send(method, 'key', hash)
|
|
872
792
|
end
|
|
873
793
|
|
|
874
|
-
it
|
|
875
|
-
expect(selector[
|
|
794
|
+
it 'serializes the value' do
|
|
795
|
+
expect(selector['key.de']).to eq({ '$gt' => 5 })
|
|
876
796
|
end
|
|
877
797
|
|
|
878
|
-
it
|
|
879
|
-
expect(selector[
|
|
798
|
+
it 'sets the same hash instance' do
|
|
799
|
+
expect(selector['key.de']).to equal(hash)
|
|
880
800
|
end
|
|
881
801
|
end
|
|
882
802
|
|
|
883
|
-
context
|
|
884
|
-
|
|
803
|
+
context 'when the key is a symbol' do
|
|
885
804
|
before do
|
|
886
|
-
selector.send(method, :key, {
|
|
805
|
+
selector.send(method, :key, { '$gt' => '5' })
|
|
887
806
|
end
|
|
888
807
|
|
|
889
|
-
it
|
|
890
|
-
expect(selector[
|
|
808
|
+
it 'serializes the value' do
|
|
809
|
+
expect(selector['key.de']).to eq({ '$gt' => 5 })
|
|
891
810
|
end
|
|
892
811
|
end
|
|
893
812
|
end
|
|
894
813
|
|
|
895
|
-
context
|
|
896
|
-
|
|
897
|
-
context "when the key is a string" do
|
|
898
|
-
|
|
814
|
+
context 'when the value is enumerable' do
|
|
815
|
+
context 'when the key is a string' do
|
|
899
816
|
before do
|
|
900
|
-
selector.send(method,
|
|
817
|
+
selector.send(method, 'key', { '$in' => %w[1 2] })
|
|
901
818
|
end
|
|
902
819
|
|
|
903
|
-
it
|
|
904
|
-
expect(selector[
|
|
820
|
+
it 'serializes the value' do
|
|
821
|
+
expect(selector['key.de']).to eq({ '$in' => [ 1, 2 ] })
|
|
905
822
|
end
|
|
906
823
|
end
|
|
907
824
|
|
|
908
|
-
context
|
|
909
|
-
|
|
825
|
+
context 'when the key is a symbol' do
|
|
910
826
|
before do
|
|
911
|
-
selector.send(method, :key, {
|
|
827
|
+
selector.send(method, :key, { '$in' => %w[1 2] })
|
|
912
828
|
end
|
|
913
829
|
|
|
914
|
-
it
|
|
915
|
-
expect(selector[
|
|
830
|
+
it 'serializes the value' do
|
|
831
|
+
expect(selector['key.de']).to eq({ '$in' => [ 1, 2 ] })
|
|
916
832
|
end
|
|
917
833
|
end
|
|
918
834
|
end
|
|
919
835
|
|
|
920
|
-
[
|
|
921
|
-
|
|
836
|
+
[ '$and', '$or' ].each do |operator|
|
|
922
837
|
context "when the criterion is a #{operator}" do
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
context "when the keys are strings" do
|
|
927
|
-
|
|
838
|
+
context 'when the individual criteria are simple' do
|
|
839
|
+
context 'when the keys are strings' do
|
|
928
840
|
before do
|
|
929
|
-
selector.send(method, operator, [{
|
|
841
|
+
selector.send(method, operator, [ { 'key' => '1' } ])
|
|
930
842
|
end
|
|
931
843
|
|
|
932
|
-
it
|
|
933
|
-
expect(selector[operator]).to eq([{
|
|
844
|
+
it 'serializes the values' do
|
|
845
|
+
expect(selector[operator]).to eq([ { 'key.de' => 1 } ])
|
|
934
846
|
end
|
|
935
847
|
end
|
|
936
848
|
|
|
937
|
-
context
|
|
938
|
-
|
|
849
|
+
context 'when the keys are symbols' do
|
|
939
850
|
before do
|
|
940
|
-
selector.send(method, operator, [{ key:
|
|
851
|
+
selector.send(method, operator, [ { key: '1' } ])
|
|
941
852
|
end
|
|
942
853
|
|
|
943
|
-
it
|
|
944
|
-
expect(selector[operator]).to eq([{
|
|
854
|
+
it 'serializes the values' do
|
|
855
|
+
expect(selector[operator]).to eq([ { 'key.de' => 1 } ])
|
|
945
856
|
end
|
|
946
857
|
end
|
|
947
858
|
end
|
|
948
859
|
|
|
949
|
-
context
|
|
950
|
-
|
|
951
|
-
context "when the keys are strings" do
|
|
952
|
-
|
|
860
|
+
context 'when the individual criteria are complex' do
|
|
861
|
+
context 'when the keys are strings' do
|
|
953
862
|
before do
|
|
954
863
|
selector.send(
|
|
955
864
|
method,
|
|
956
865
|
operator,
|
|
957
|
-
[{
|
|
866
|
+
[ { 'field' => '1' }, { 'key' => { '$gt' => '2' } } ]
|
|
958
867
|
)
|
|
959
868
|
end
|
|
960
869
|
|
|
961
|
-
it
|
|
870
|
+
it 'serializes the values' do
|
|
962
871
|
expect(selector[operator]).to eq(
|
|
963
|
-
[{
|
|
872
|
+
[ { 'field' => '1' }, { 'key.de' => { '$gt' => 2 } } ]
|
|
964
873
|
)
|
|
965
874
|
end
|
|
966
875
|
end
|
|
967
876
|
|
|
968
|
-
context
|
|
969
|
-
|
|
877
|
+
context 'when the keys are symbols' do
|
|
970
878
|
before do
|
|
971
879
|
selector.send(
|
|
972
880
|
method,
|
|
973
881
|
operator,
|
|
974
|
-
[{ field:
|
|
882
|
+
[ { field: '1' }, { key: { '$gt' => '2' } } ]
|
|
975
883
|
)
|
|
976
884
|
end
|
|
977
885
|
|
|
978
|
-
it
|
|
886
|
+
it 'serializes the values' do
|
|
979
887
|
expect(selector[operator]).to eq(
|
|
980
|
-
[{
|
|
888
|
+
[ { 'field' => '1' }, { 'key.de' => { '$gt' => 2 } } ]
|
|
981
889
|
)
|
|
982
890
|
end
|
|
983
891
|
end
|
|
@@ -992,41 +900,37 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
|
992
900
|
end
|
|
993
901
|
end
|
|
994
902
|
|
|
995
|
-
describe
|
|
996
|
-
|
|
903
|
+
describe '#to_pipeline' do
|
|
997
904
|
let(:selector) do
|
|
998
905
|
described_class.new
|
|
999
906
|
end
|
|
1000
907
|
|
|
1001
|
-
context
|
|
1002
|
-
|
|
908
|
+
context 'when the selector is empty' do
|
|
1003
909
|
let(:pipeline) do
|
|
1004
910
|
selector.to_pipeline
|
|
1005
911
|
end
|
|
1006
912
|
|
|
1007
|
-
it
|
|
913
|
+
it 'returns an empty array' do
|
|
1008
914
|
expect(pipeline).to be_empty
|
|
1009
915
|
end
|
|
1010
916
|
end
|
|
1011
917
|
|
|
1012
|
-
context
|
|
1013
|
-
|
|
918
|
+
context 'when the selector is not empty' do
|
|
1014
919
|
before do
|
|
1015
|
-
selector[
|
|
920
|
+
selector['name'] = 'test'
|
|
1016
921
|
end
|
|
1017
922
|
|
|
1018
923
|
let(:pipeline) do
|
|
1019
924
|
selector.to_pipeline
|
|
1020
925
|
end
|
|
1021
926
|
|
|
1022
|
-
it
|
|
1023
|
-
expect(pipeline).to eq([{
|
|
927
|
+
it 'returns the selector in a $match entry' do
|
|
928
|
+
expect(pipeline).to eq([ { '$match' => { 'name' => 'test' } } ])
|
|
1024
929
|
end
|
|
1025
930
|
end
|
|
1026
931
|
end
|
|
1027
932
|
|
|
1028
933
|
describe '#multi_selection?' do
|
|
1029
|
-
|
|
1030
934
|
let(:selector) do
|
|
1031
935
|
described_class.new
|
|
1032
936
|
end
|