mongoid 7.5.1 → 8.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +3 -3
- data/README.md +6 -6
- data/Rakefile +25 -0
- data/lib/config/locales/en.yml +92 -43
- data/lib/mongoid/association/accessors.rb +40 -11
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +5 -3
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +54 -14
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +69 -45
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +8 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +45 -7
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +15 -4
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
- data/lib/mongoid/association/referenced/has_many/proxy.rb +29 -19
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +4 -4
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +19 -0
- data/lib/mongoid/atomic.rb +7 -0
- data/lib/mongoid/attributes/dynamic.rb +4 -4
- data/lib/mongoid/attributes/nested.rb +6 -6
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +3 -3
- data/lib/mongoid/attributes.rb +51 -42
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +147 -14
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/storage_options.rb +2 -5
- data/lib/mongoid/clients/validators/storage.rb +3 -15
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +2 -0
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/options.rb +3 -0
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config/validators.rb +1 -0
- data/lib/mongoid/config.rb +145 -17
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +285 -58
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +521 -333
- data/lib/mongoid/contextual/none.rb +193 -20
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +14 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +8 -5
- data/lib/mongoid/criteria/includable.rb +27 -22
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -9
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +4 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
- data/lib/mongoid/criteria/queryable/optional.rb +11 -17
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +47 -38
- data/lib/mongoid/criteria/queryable/selector.rb +93 -8
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +20 -40
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +135 -36
- data/lib/mongoid/equality.rb +8 -8
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +6 -3
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +19 -8
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +10 -8
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +29 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +55 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +19 -4
- data/lib/mongoid/fields/standard.rb +17 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +129 -20
- data/lib/mongoid/findable.rb +54 -24
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +76 -15
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher/eq_impl.rb +1 -1
- data/lib/mongoid/matcher/type.rb +1 -1
- data/lib/mongoid/matcher.rb +33 -13
- data/lib/mongoid/persistable/creatable.rb +19 -9
- data/lib/mongoid/persistable/deletable.rb +2 -2
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +14 -2
- data/lib/mongoid/persistable/unsettable.rb +2 -2
- data/lib/mongoid/persistable/updatable.rb +69 -12
- data/lib/mongoid/persistable/upsertable.rb +21 -2
- data/lib/mongoid/persistable.rb +6 -3
- data/lib/mongoid/persistence_context.rb +63 -10
- data/lib/mongoid/query_cache.rb +13 -261
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +15 -13
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/shardable.rb +35 -11
- data/lib/mongoid/stateful.rb +57 -10
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +20 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +42 -12
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +5 -4
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +5 -7
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +9 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +19 -4
- data/lib/mongoid.rb +17 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +10 -14
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +132 -1
- data/spec/integration/callbacks_spec.rb +360 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +118 -80
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -32
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +276 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +158 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +215 -228
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +193 -177
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +15 -1
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +554 -33
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +429 -37
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +179 -15
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config_spec.rb +220 -30
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +850 -88
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +1570 -413
- data/spec/mongoid/contextual/none_spec.rb +60 -21
- data/spec/mongoid/copyable_spec.rb +453 -11
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
- data/spec/mongoid/criteria/queryable/selector_spec.rb +90 -5
- data/spec/mongoid/criteria/queryable/storable_spec.rb +72 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +1 -5
- data/spec/mongoid/criteria_spec.rb +469 -1205
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +639 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +80 -37
- data/spec/mongoid/fields_spec.rb +500 -84
- data/spec/mongoid/findable_spec.rb +450 -58
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +55 -30
- data/spec/mongoid/interceptable_spec.rb +599 -8
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +28 -8
- data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
- data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
- data/spec/mongoid/persistable/logical_spec.rb +37 -0
- data/spec/mongoid/persistable/poppable_spec.rb +36 -0
- data/spec/mongoid/persistable/pullable_spec.rb +72 -0
- data/spec/mongoid/persistable/pushable_spec.rb +72 -0
- data/spec/mongoid/persistable/renamable_spec.rb +36 -0
- data/spec/mongoid/persistable/savable_spec.rb +96 -0
- data/spec/mongoid/persistable/settable_spec.rb +37 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
- data/spec/mongoid/persistable/updatable_spec.rb +20 -28
- data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
- data/spec/mongoid/persistence_context_spec.rb +57 -58
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +56 -215
- data/spec/mongoid/reloadable_spec.rb +83 -6
- data/spec/mongoid/scopable_spec.rb +91 -1
- data/spec/mongoid/serializable_spec.rb +9 -30
- data/spec/mongoid/shardable_models.rb +14 -0
- data/spec/mongoid/shardable_spec.rb +157 -51
- data/spec/mongoid/stateful_spec.rb +150 -8
- data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
- data/spec/mongoid/tasks/database_spec.rb +127 -0
- data/spec/mongoid/timestamps_spec.rb +392 -4
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +390 -2
- data/spec/mongoid/touchable_spec_models.rb +14 -8
- data/spec/mongoid/traversable_spec.rb +13 -35
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +34 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/lite_constraints.rb +8 -0
- data/spec/shared/shlib/server.sh +5 -5
- data/spec/spec_helper.rb +5 -0
- data/spec/support/constraints.rb +24 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +78 -0
- data/spec/support/models/artist.rb +0 -1
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +4 -0
- data/spec/support/models/book.rb +1 -0
- data/spec/support/models/building.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/product.rb +1 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +0 -0
- metadata +720 -638
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -115,7 +115,7 @@ module Mongoid
|
|
115
115
|
def __sort_option__
|
116
116
|
tap do |hash|
|
117
117
|
hash.each_pair do |key, value|
|
118
|
-
hash.store(key,
|
118
|
+
hash.store(key, Mongoid::Criteria::Translator.to_direction(value))
|
119
119
|
end
|
120
120
|
end
|
121
121
|
end
|
@@ -134,22 +134,6 @@ module Mongoid
|
|
134
134
|
replacement
|
135
135
|
end
|
136
136
|
|
137
|
-
# Update all the values in the hash with the provided block.
|
138
|
-
#
|
139
|
-
# @example Update the values in place.
|
140
|
-
# { field: "1" }.update_values(&:to_i)
|
141
|
-
#
|
142
|
-
# @param [ Proc ] block The block to execute on each value.
|
143
|
-
#
|
144
|
-
# @return [ Hash ] the hash.
|
145
|
-
#
|
146
|
-
# @deprecated
|
147
|
-
def update_values(&block)
|
148
|
-
each_pair do |key, value|
|
149
|
-
store(key, block[value])
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
137
|
private
|
154
138
|
|
155
139
|
# Apply the provided strategy for the hash with the given object.
|
@@ -30,14 +30,6 @@ module Mongoid
|
|
30
30
|
::Time.at(self).utc
|
31
31
|
end
|
32
32
|
|
33
|
-
# Get the integer as a sort direction.
|
34
|
-
#
|
35
|
-
# @example Get the integer as a sort direction.
|
36
|
-
# 1.to_direction
|
37
|
-
#
|
38
|
-
# @return [ Integer ] self.
|
39
|
-
def to_direction; self; end
|
40
|
-
|
41
33
|
module ClassMethods
|
42
34
|
|
43
35
|
# Get the object as a numeric.
|
@@ -51,7 +43,7 @@ module Mongoid
|
|
51
43
|
#
|
52
44
|
# @return [ Object ] The converted number.
|
53
45
|
def __numeric__(object)
|
54
|
-
object.to_s
|
46
|
+
object.to_s.match?(/\A[-+]?[0-9]*[0-9.]0*\z/) ? object.to_i : Float(object)
|
55
47
|
end
|
56
48
|
|
57
49
|
# Evolve the object to an integer.
|
@@ -43,13 +43,21 @@ module Mongoid
|
|
43
43
|
# @example Evolve the range.
|
44
44
|
# (11231312..213123131).__evolve_range__
|
45
45
|
#
|
46
|
+
# @param [ Object ] serializer The optional serializer for the field.
|
47
|
+
#
|
46
48
|
# @return [ Hash ] The $gte/$lte range query.
|
47
|
-
|
49
|
+
#
|
50
|
+
# @api private
|
51
|
+
def __evolve_range__(serializer: nil)
|
48
52
|
__evolve_range_naive__.transform_values! do |value|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
+
if serializer
|
54
|
+
serializer.evolve(value)
|
55
|
+
else
|
56
|
+
case value
|
57
|
+
when Time, DateTime then value.__evolve_time__
|
58
|
+
when Date then value.__evolve_date__
|
59
|
+
else value
|
60
|
+
end
|
53
61
|
end
|
54
62
|
end
|
55
63
|
end
|
@@ -23,12 +23,12 @@ module Mongoid
|
|
23
23
|
# @example Evolve the object to a regex.
|
24
24
|
# Regexp.evolve("\A[123]")
|
25
25
|
#
|
26
|
-
# @param [ Regexp
|
26
|
+
# @param [ Regexp | String ] object The object to evolve.
|
27
27
|
#
|
28
28
|
# @return [ Regexp ] The evolved regex.
|
29
29
|
def evolve(object)
|
30
30
|
__evolve__(object) do |obj|
|
31
|
-
|
31
|
+
mongoize(obj)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -50,7 +50,7 @@ module Mongoid
|
|
50
50
|
# @example Evolve the object to a regex.
|
51
51
|
# BSON::Regexp::Raw.evolve("\\A[123]")
|
52
52
|
#
|
53
|
-
# @param [ BSON::Regexp::Raw
|
53
|
+
# @param [ BSON::Regexp::Raw | String ] object The object to evolve.
|
54
54
|
#
|
55
55
|
# @return [ BSON::Regexp::Raw ] The evolved raw regex.
|
56
56
|
def evolve(object)
|
@@ -49,7 +49,7 @@ module Mongoid
|
|
49
49
|
split(/,/).inject({}) do |hash, spec|
|
50
50
|
hash.tap do |_hash|
|
51
51
|
field, direction = spec.strip.split(/\s/)
|
52
|
-
_hash[field.to_sym] =
|
52
|
+
_hash[field.to_sym] = Mongoid::Criteria::Translator.to_direction(direction)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -60,23 +60,13 @@ module Mongoid
|
|
60
60
|
# "field".__expr_part__(value)
|
61
61
|
#
|
62
62
|
# @param [ Object ] value The value of the criteria.
|
63
|
-
# @param [ true
|
63
|
+
# @param [ true | false ] negating If the selection should be negated.
|
64
64
|
#
|
65
65
|
# @return [ Hash ] The selection.
|
66
66
|
def __expr_part__(value, negating = false)
|
67
67
|
::String.__expr_part__(self, value, negating)
|
68
68
|
end
|
69
69
|
|
70
|
-
# Get the string as a sort direction.
|
71
|
-
#
|
72
|
-
# @example Get the string as a sort direction.
|
73
|
-
# "1".to_direction
|
74
|
-
#
|
75
|
-
# @return [ Integer ] The direction.
|
76
|
-
def to_direction
|
77
|
-
self =~ /desc/i ? -1 : 1
|
78
|
-
end
|
79
|
-
|
80
70
|
module ClassMethods
|
81
71
|
|
82
72
|
# Get the value as a expression.
|
@@ -84,9 +74,9 @@ module Mongoid
|
|
84
74
|
# @example Get the value as an expression.
|
85
75
|
# String.__expr_part__("field", value)
|
86
76
|
#
|
87
|
-
# @param [ String
|
77
|
+
# @param [ String | Symbol ] key The field key.
|
88
78
|
# @param [ Object ] value The value of the criteria.
|
89
|
-
# @param [ true
|
79
|
+
# @param [ true | false ] negating If the selection should be negated.
|
90
80
|
#
|
91
81
|
# @return [ Hash ] The selection.
|
92
82
|
def __expr_part__(key, value, negating = false)
|
@@ -14,23 +14,13 @@ module Mongoid
|
|
14
14
|
# :field.__expr_part__(value)
|
15
15
|
#
|
16
16
|
# @param [ Object ] value The value of the criteria.
|
17
|
-
# @param [ true
|
17
|
+
# @param [ true | false ] negating If the selection should be negated.
|
18
18
|
#
|
19
19
|
# @return [ Hash ] The selection.
|
20
20
|
def __expr_part__(value, negating = false)
|
21
21
|
::String.__expr_part__(self, value, negating)
|
22
22
|
end
|
23
23
|
|
24
|
-
# Get the symbol as a sort direction.
|
25
|
-
#
|
26
|
-
# @example Get the symbol as a sort direction.
|
27
|
-
# "1".to_direction
|
28
|
-
#
|
29
|
-
# @return [ Integer ] The direction.
|
30
|
-
def to_direction
|
31
|
-
to_s.to_direction
|
32
|
-
end
|
33
|
-
|
34
24
|
module ClassMethods
|
35
25
|
|
36
26
|
# Adds a method on symbol as a convenience for the MongoDB operator.
|
@@ -59,7 +49,9 @@ module Mongoid
|
|
59
49
|
#
|
60
50
|
# @return [ Symbol ] The value as a symbol.
|
61
51
|
def evolve(object)
|
62
|
-
__evolve__(object)
|
52
|
+
__evolve__(object) do |obj|
|
53
|
+
obj.try(:to_sym)
|
54
|
+
end
|
63
55
|
end
|
64
56
|
end
|
65
57
|
end
|
@@ -82,7 +82,7 @@ module Mongoid
|
|
82
82
|
#
|
83
83
|
# @param [ Object ] other The object to compare to.
|
84
84
|
#
|
85
|
-
# @return [ true
|
85
|
+
# @return [ true | false ] If the objects are equal.
|
86
86
|
def ==(other)
|
87
87
|
return false unless other.is_a?(Key)
|
88
88
|
name == other.name && operator == other.operator && expanded == other.expanded
|
@@ -91,7 +91,7 @@ module Mongoid
|
|
91
91
|
|
92
92
|
# Calculate the hash code for a key.
|
93
93
|
#
|
94
|
-
# @return [
|
94
|
+
# @return [ Integer ] The hash code for the key.
|
95
95
|
def hash
|
96
96
|
[name, operator, expanded].hash
|
97
97
|
end
|
@@ -104,7 +104,7 @@ module Mongoid
|
|
104
104
|
# @example Instantiate a key for sorting.
|
105
105
|
# Key.new(:field, :__override__, 1)
|
106
106
|
#
|
107
|
-
# @param [ String
|
107
|
+
# @param [ String | Symbol ] name The field name.
|
108
108
|
# @param [ Symbol ] strategy The name of the merge strategy.
|
109
109
|
# @param [ String | Integer ] operator The MongoDB operator,
|
110
110
|
# or sort direction (1 or -1).
|
@@ -124,7 +124,7 @@ module Mongoid
|
|
124
124
|
# key.__expr_part__(50)
|
125
125
|
#
|
126
126
|
# @param [ Object ] object The value to be included.
|
127
|
-
# @param [ true
|
127
|
+
# @param [ true | false ] negating If the selection should be negated.
|
128
128
|
#
|
129
129
|
# @return [ Hash ] The raw MongoDB selector.
|
130
130
|
def __expr_part__(object, negating = false)
|
@@ -283,7 +283,7 @@ module Mongoid
|
|
283
283
|
# The new value is a simple value.
|
284
284
|
# Transform the implicit equality to either $eq or $regexp
|
285
285
|
# depending on the type of the argument. See
|
286
|
-
# https://
|
286
|
+
# https://www.mongodb.com/docs/manual/reference/operator/query/eq/#std-label-eq-usage-examples
|
287
287
|
# for the description of relevant server behavior.
|
288
288
|
op = case v
|
289
289
|
when Regexp, BSON::Regexp::Raw
|
@@ -17,7 +17,7 @@ module Mongoid
|
|
17
17
|
# @example Add ascending sorting.
|
18
18
|
# optional.ascending(:first_name, :last_name)
|
19
19
|
#
|
20
|
-
# @param [
|
20
|
+
# @param [ Symbol... ] *fields The field(s) to sort.
|
21
21
|
#
|
22
22
|
# @return [ Optional ] The cloned optional.
|
23
23
|
def ascending(*fields)
|
@@ -45,7 +45,7 @@ module Mongoid
|
|
45
45
|
# @example Add descending sorting.
|
46
46
|
# optional.descending(:first_name, :last_name)
|
47
47
|
#
|
48
|
-
# @param [
|
48
|
+
# @param [ Symbol... ] *fields The field(s) to sort.
|
49
49
|
#
|
50
50
|
# @return [ Optional ] The cloned optional.
|
51
51
|
def descending(*fields)
|
@@ -123,7 +123,7 @@ module Mongoid
|
|
123
123
|
# @example Limit the results to the provided fields.
|
124
124
|
# optional.only(:name, :dob)
|
125
125
|
#
|
126
|
-
# @param [
|
126
|
+
# @param [ Symbol... ] *args The field(s) to return.
|
127
127
|
#
|
128
128
|
# @return [ Optional ] The cloned optional.
|
129
129
|
def only(*args)
|
@@ -163,7 +163,7 @@ module Mongoid
|
|
163
163
|
# @example Add sorting options via a string.
|
164
164
|
# optional.order_by("name ASC, dob DESC")
|
165
165
|
#
|
166
|
-
# @param [ Array
|
166
|
+
# @param [ [ Array | Hash | String ]... ] *spec The sorting specification.
|
167
167
|
#
|
168
168
|
# @return [ Optional ] The cloned optional.
|
169
169
|
def order_by(*spec)
|
@@ -184,7 +184,7 @@ module Mongoid
|
|
184
184
|
# @example Replace the ordering.
|
185
185
|
# optional.reorder(name: :asc)
|
186
186
|
#
|
187
|
-
# @param [ Array
|
187
|
+
# @param [ [ Array | Hash | String ]... ] *spec The sorting specification.
|
188
188
|
#
|
189
189
|
# @return [ Optional ] The cloned optional.
|
190
190
|
def reorder(*spec)
|
@@ -245,7 +245,7 @@ module Mongoid
|
|
245
245
|
# @example Limit the results to the fields not provided.
|
246
246
|
# optional.without(:name, :dob)
|
247
247
|
#
|
248
|
-
# @param [
|
248
|
+
# @param [ Symbol... ] *args The field(s) to ignore.
|
249
249
|
#
|
250
250
|
# @return [ Optional ] The cloned optional.
|
251
251
|
def without(*args)
|
@@ -318,15 +318,9 @@ module Mongoid
|
|
318
318
|
#
|
319
319
|
# @return [ Optional ] The cloned optional.
|
320
320
|
def add_sort_option(options, field, direction)
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
options.store(:sort, sorting)
|
325
|
-
else
|
326
|
-
sorting = (options[:sort] || {}).dup
|
327
|
-
sorting[field] = direction
|
328
|
-
options.store(:sort, sorting)
|
329
|
-
end
|
321
|
+
sorting = (options[:sort] || {}).dup
|
322
|
+
sorting[field] = direction
|
323
|
+
options.store(:sort, sorting)
|
330
324
|
end
|
331
325
|
|
332
326
|
# Take the provided criterion and store it as an option in the query
|
@@ -337,7 +331,7 @@ module Mongoid
|
|
337
331
|
# @example Store the option.
|
338
332
|
# optional.option({ skip: 10 })
|
339
333
|
#
|
340
|
-
# @param [
|
334
|
+
# @param [ Object... ] *args The options.
|
341
335
|
#
|
342
336
|
# @return [ Queryable ] The cloned queryable.
|
343
337
|
def option(*args)
|
@@ -355,7 +349,7 @@ module Mongoid
|
|
355
349
|
# @example Add multiple sort options.
|
356
350
|
# optional.sort_with_list(:name, :dob, 1)
|
357
351
|
#
|
358
|
-
# @param [
|
352
|
+
# @param [ [ Symbol | String ]... ] *fields The field name(s).
|
359
353
|
# @param [ Integer ] direction The sort direction.
|
360
354
|
#
|
361
355
|
# @return [ Optional ] The cloned optional.
|
@@ -54,7 +54,7 @@ module Mongoid
|
|
54
54
|
# @example Store a value in the options.
|
55
55
|
# options.store(:key, "testing")
|
56
56
|
#
|
57
|
-
# @param [ String
|
57
|
+
# @param [ String | Symbol ] key The name of the attribute.
|
58
58
|
# @param [ Object ] value The value to add.
|
59
59
|
#
|
60
60
|
# @return [ Object ] The stored object.
|
@@ -84,7 +84,7 @@ module Mongoid
|
|
84
84
|
#
|
85
85
|
# @return [ Options ] The copied options.
|
86
86
|
def __deep_copy__
|
87
|
-
self.class.new(aliases, serializers) do |copy|
|
87
|
+
self.class.new(aliases, serializers, associations, aliased_associations) do |copy|
|
88
88
|
each_pair do |key, value|
|
89
89
|
copy.merge!(key => value.__deep_copy__)
|
90
90
|
end
|
@@ -67,7 +67,7 @@ module Mongoid
|
|
67
67
|
# pipeline.unwind(:field)
|
68
68
|
# pipeline.unwind(document)
|
69
69
|
#
|
70
|
-
# @param [ String
|
70
|
+
# @param [ String | Symbol | Hash ] field_or_doc A field name or a
|
71
71
|
# document.
|
72
72
|
#
|
73
73
|
# @return [ Pipeline ] The pipeline.
|
@@ -31,7 +31,7 @@ module Mongoid
|
|
31
31
|
# @example Execute an $all in a where query.
|
32
32
|
# selectable.where(:field.all => [ 1, 2 ])
|
33
33
|
#
|
34
|
-
# @param [ Hash ]
|
34
|
+
# @param [ Hash... ] *criteria The key value pair(s) for $all matching.
|
35
35
|
#
|
36
36
|
# @return [ Selectable ] The cloned selectable.
|
37
37
|
def all(*criteria)
|
@@ -69,8 +69,9 @@ module Mongoid
|
|
69
69
|
# @example Add the criterion.
|
70
70
|
# selectable.and({ field: value }, { other: value })
|
71
71
|
#
|
72
|
-
# @param [ Array<Hash | Criteria> ] criteria
|
73
|
-
# matches or Criteria objects that all must
|
72
|
+
# @param [ [ Hash | Criteria | Array<Hash | Criteria> ]... ] *criteria
|
73
|
+
# Multiple key/value pair matches or Criteria objects that all must
|
74
|
+
# match to return results.
|
74
75
|
#
|
75
76
|
# @return [ Selectable ] The new selectable.
|
76
77
|
def and(*criteria)
|
@@ -199,7 +200,7 @@ module Mongoid
|
|
199
200
|
# the upper right (north east) as the second argument.
|
200
201
|
# Important: When latitude and longitude are passed, longitude is
|
201
202
|
# expected as the first element of the coordinate pair.
|
202
|
-
# Source: https://
|
203
|
+
# Source: https://www.mongodb.com/docs/manual/reference/operator/query/box/
|
203
204
|
#
|
204
205
|
# @example Add a geo intersect criterion for a line.
|
205
206
|
# query.geo_spatial(:location.intersects_line => [[ 1, 10 ], [ 2, 10 ]])
|
@@ -227,19 +228,6 @@ module Mongoid
|
|
227
228
|
__merge__(criterion)
|
228
229
|
end
|
229
230
|
|
230
|
-
# Alias for +geo_spatial+.
|
231
|
-
#
|
232
|
-
# @deprecated
|
233
|
-
def geo_spacial(criterion)
|
234
|
-
# Duplicate method body so that we can raise this exception with
|
235
|
-
# geo_spacial as the indicated operator rather than geo_spatial.
|
236
|
-
if criterion.nil?
|
237
|
-
raise Errors::CriteriaArgumentRequired, :geo_spacial
|
238
|
-
end
|
239
|
-
|
240
|
-
__merge__(criterion)
|
241
|
-
end
|
242
|
-
|
243
231
|
key :intersects_line, :override, "$geoIntersects", "$geometry" do |value|
|
244
232
|
{ "type" => LINE_STRING, "coordinates" => value }
|
245
233
|
end
|
@@ -529,8 +517,8 @@ module Mongoid
|
|
529
517
|
# @example Add the $nor selection.
|
530
518
|
# selectable.nor(field: 1, field: 2)
|
531
519
|
#
|
532
|
-
# @param [ Array<Hash | Criteria> ] criteria
|
533
|
-
# matches or Criteria objects.
|
520
|
+
# @param [ [ Hash | Criteria | Array<Hash | Criteria> ]... ] *criteria
|
521
|
+
# Multiple key/value pair matches or Criteria objects.
|
534
522
|
#
|
535
523
|
# @return [ Selectable ] The new selectable.
|
536
524
|
def nor(*criteria)
|
@@ -542,7 +530,7 @@ module Mongoid
|
|
542
530
|
# @example Is the selectable negating?
|
543
531
|
# selectable.negating?
|
544
532
|
#
|
545
|
-
# @return [ true
|
533
|
+
# @return [ true | false ] If the selectable is negating.
|
546
534
|
def negating?
|
547
535
|
!!negating
|
548
536
|
end
|
@@ -558,7 +546,7 @@ module Mongoid
|
|
558
546
|
# @example Execute a $not in a where query.
|
559
547
|
# selectable.where(:field.not => /Bob/)
|
560
548
|
#
|
561
|
-
# @param [
|
549
|
+
# @param [ [ Hash | Criteria ]... ] *criteria The key/value pair
|
562
550
|
# matches or Criteria objects to negate.
|
563
551
|
#
|
564
552
|
# @return [ Selectable ] The new selectable.
|
@@ -593,6 +581,35 @@ module Mongoid
|
|
593
581
|
end
|
594
582
|
key :not, :override, "$not"
|
595
583
|
|
584
|
+
# Negate the arguments, constraining the query to only those documents
|
585
|
+
# that do NOT match the arguments.
|
586
|
+
#
|
587
|
+
# @example Exclude a single criterion.
|
588
|
+
# selectable.none_of(name: /Bob/)
|
589
|
+
#
|
590
|
+
# @example Exclude multiple criteria.
|
591
|
+
# selectable.none_of(name: /Bob/, country: "USA")
|
592
|
+
#
|
593
|
+
# @example Exclude multiple criteria as an array.
|
594
|
+
# selectable.none_of([{ name: /Bob/ }, { country: "USA" }])
|
595
|
+
#
|
596
|
+
# @param [ [ Hash | Criteria ]... ] *criteria The key/value pair
|
597
|
+
# matches or Criteria objects to negate.
|
598
|
+
#
|
599
|
+
# @return [ Selectable ] The new selectable.
|
600
|
+
def none_of(*criteria)
|
601
|
+
criteria = _mongoid_flatten_arrays(criteria)
|
602
|
+
return dup if criteria.empty?
|
603
|
+
|
604
|
+
exprs = criteria.map do |criterion|
|
605
|
+
_mongoid_expand_keys(
|
606
|
+
criterion.is_a?(Selectable) ?
|
607
|
+
criterion.selector : criterion)
|
608
|
+
end
|
609
|
+
|
610
|
+
self.and('$nor' => exprs)
|
611
|
+
end
|
612
|
+
|
596
613
|
# Creates a disjunction using $or from the existing criteria in the
|
597
614
|
# receiver and the provided arguments.
|
598
615
|
#
|
@@ -618,7 +635,7 @@ module Mongoid
|
|
618
635
|
# @example Same as previous example, also deprecated.
|
619
636
|
# selectable.or([{field: 1}], [{field: 2}])
|
620
637
|
#
|
621
|
-
# @param [ Hash | Criteria | Array<Hash | Criteria
|
638
|
+
# @param [ [ Hash | Criteria | Array<Hash | Criteria> ]... ] *criteria
|
622
639
|
# Multiple key/value pair matches or Criteria objects, or arrays
|
623
640
|
# thereof. Passing arrays is deprecated.
|
624
641
|
#
|
@@ -648,7 +665,7 @@ module Mongoid
|
|
648
665
|
# @example Same as previous example, also deprecated.
|
649
666
|
# selectable.any_of([{field: 1}], [{field: 2}])
|
650
667
|
#
|
651
|
-
# @param [ Hash | Criteria | Array<Hash | Criteria
|
668
|
+
# @param [ [ Hash | Criteria | Array<Hash | Criteria> ]... ] *criteria
|
652
669
|
# Multiple key/value pair matches or Criteria objects, or arrays
|
653
670
|
# thereof. Passing arrays is deprecated.
|
654
671
|
#
|
@@ -679,16 +696,7 @@ module Mongoid
|
|
679
696
|
end]
|
680
697
|
end
|
681
698
|
end
|
682
|
-
|
683
|
-
#where('$or' => exprs)
|
684
|
-
# But since that is broken do instead:
|
685
|
-
clone.tap do |query|
|
686
|
-
if query.selector['$or']
|
687
|
-
query.selector.store('$or', query.selector['$or'] + exprs)
|
688
|
-
else
|
689
|
-
query.selector.store('$or', exprs)
|
690
|
-
end
|
691
|
-
end
|
699
|
+
self.and('$or' => exprs)
|
692
700
|
end
|
693
701
|
end
|
694
702
|
|
@@ -753,12 +761,12 @@ module Mongoid
|
|
753
761
|
# @example Construct a text search selector with options.
|
754
762
|
# selectable.text_search("testing", :$language => "fr")
|
755
763
|
#
|
756
|
-
# @note Per https://
|
764
|
+
# @note Per https://www.mongodb.com/docs/manual/reference/operator/query/text/
|
757
765
|
# it is not currently possible to supply multiple text search
|
758
766
|
# conditions in a query. Mongoid will build such a query but the
|
759
767
|
# server will return an error when trying to execute it.
|
760
768
|
#
|
761
|
-
# @param [ String
|
769
|
+
# @param [ String | Symbol ] terms A string of terms that MongoDB parses
|
762
770
|
# and uses to query the text index.
|
763
771
|
# @param [ Hash ] opts Text search options. See MongoDB documentation
|
764
772
|
# for options.
|
@@ -773,7 +781,7 @@ module Mongoid
|
|
773
781
|
criterion = {'$text' => { '$search' => terms }}
|
774
782
|
criterion['$text'].merge!(opts) if opts
|
775
783
|
if query.selector['$text']
|
776
|
-
# Per https://
|
784
|
+
# Per https://www.mongodb.com/docs/manual/reference/operator/query/text/
|
777
785
|
# multiple $text expressions are not currently supported by
|
778
786
|
# MongoDB server, but build the query correctly instead of
|
779
787
|
# overwriting previous text search condition with the currently
|
@@ -796,7 +804,8 @@ module Mongoid
|
|
796
804
|
# @example Add a javascript selection.
|
797
805
|
# selectable.where("this.name == 'syd'")
|
798
806
|
#
|
799
|
-
# @param [
|
807
|
+
# @param [ [ Hash | String ]... ] *criterion The standard selection
|
808
|
+
# or javascript string.
|
800
809
|
#
|
801
810
|
# @return [ Selectable ] The cloned selectable.
|
802
811
|
def where(*criteria)
|
@@ -874,7 +883,7 @@ module Mongoid
|
|
874
883
|
# @param [ Hash ] criterion The criterion.
|
875
884
|
def typed_override(criterion, operator)
|
876
885
|
if criterion
|
877
|
-
criterion.
|
886
|
+
criterion.transform_values! do |value|
|
878
887
|
yield(value)
|
879
888
|
end
|
880
889
|
end
|