mongoid 7.5.4 → 8.1.7
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 +3 -3
- data/README.md +6 -6
- data/Rakefile +44 -46
- data/lib/config/locales/en.yml +92 -43
- data/lib/mongoid/association/accessors.rb +44 -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 +34 -11
- 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 +85 -46
- 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 +40 -21
- 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.rb +16 -7
- 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/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 +153 -18
- 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 +540 -346
- 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 +15 -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 +92 -7
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- 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 +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +127 -35
- 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 +38 -9
- 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 +142 -28
- 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 +186 -16
- 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 +48 -14
- 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 +6 -4
- 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 +17 -13
- 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 +3 -4
- data/lib/mongoid/traversable.rb +10 -5
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +98 -17
- 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 +17 -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 +24 -19
- 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 +61 -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 +381 -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 +290 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -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 +19 -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 +186 -229
- 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 +215 -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 +526 -33
- 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 +149 -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 +214 -31
- 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 +2256 -1005
- 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 +15 -3
- 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 +503 -87
- 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 +824 -22
- 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 +31 -57
- 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 +25 -39
- data/spec/mongoid/shardable_spec.rb +4 -4
- 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/associated_spec.rb +27 -34
- 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 -16
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- 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 +5 -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/lat_lng.rb +6 -0
- data/spec/support/models/name.rb +10 -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
- metadata +101 -96
- checksums.yaml.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
- data/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -231
- data/spec/shared/lib/mrss/constraints.rb +0 -378
- data/spec/shared/lib/mrss/docker_runner.rb +0 -291
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
- data/spec/shared/lib/mrss/session_registry.rb +0 -69
- data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -15
- data/spec/shared/share/Dockerfile.erb +0 -325
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/config.sh +0 -27
- data/spec/shared/shlib/distro.sh +0 -74
- data/spec/shared/shlib/server.sh +0 -392
- data/spec/shared/shlib/set_env.sh +0 -169
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -3
@@ -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,21 @@ module Mongoid
|
|
51
43
|
#
|
52
44
|
# @return [ Object ] The converted number.
|
53
45
|
def __numeric__(object)
|
54
|
-
|
46
|
+
str = object.to_s
|
47
|
+
raise ArgumentError if str.empty?
|
48
|
+
|
49
|
+
# These requirements seem a bit odd, but they're explicitly specified in the tests,
|
50
|
+
# so we're obligated to keep them, for now. (This code was rewritten from a one-line
|
51
|
+
# regex, due to security concerns with a polynomial regex being used on uncontrolled
|
52
|
+
# data).
|
53
|
+
|
54
|
+
str = str.chop if str.end_with?('.')
|
55
|
+
return 0 if str.empty?
|
56
|
+
|
57
|
+
result = Integer(str) rescue Float(object)
|
58
|
+
|
59
|
+
integer = result.to_i
|
60
|
+
integer == result ? integer : result
|
55
61
|
end
|
56
62
|
|
57
63
|
# 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
|