mongoid 7.2.1 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +20 -20
- data/LICENSE +1 -1
- data/README.md +7 -12
- data/Rakefile +58 -1
- data/lib/config/locales/en.yml +191 -60
- data/lib/mongoid/association/accessors.rb +67 -53
- data/lib/mongoid/association/bindable.rb +77 -31
- data/lib/mongoid/association/builders.rb +8 -14
- data/lib/mongoid/association/constrainable.rb +2 -5
- data/lib/mongoid/association/depending.rb +20 -12
- data/lib/mongoid/association/eager.rb +160 -0
- data/lib/mongoid/association/eager_loadable.rb +41 -11
- data/lib/mongoid/association/embedded/batchable.rb +63 -52
- data/lib/mongoid/association/embedded/cyclic.rb +4 -12
- data/lib/mongoid/association/embedded/eager.rb +23 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +29 -13
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +3 -5
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +25 -23
- data/lib/mongoid/association/embedded/embedded_in.rb +11 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -9
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +5 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +226 -203
- data/lib/mongoid/association/embedded/embeds_many.rb +3 -33
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +3 -9
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +20 -8
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +131 -42
- data/lib/mongoid/association/embedded/embeds_one.rb +4 -30
- data/lib/mongoid/association/embedded.rb +2 -1
- data/lib/mongoid/association/macros.rb +47 -16
- data/lib/mongoid/association/many.rb +12 -24
- data/lib/mongoid/association/marshalable.rb +4 -5
- data/lib/mongoid/association/nested/many.rb +14 -19
- data/lib/mongoid/association/nested/nested_buildable.rb +36 -13
- data/lib/mongoid/association/nested/one.rb +54 -26
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +3 -11
- data/lib/mongoid/association/options.rb +18 -44
- data/lib/mongoid/association/proxy.rb +49 -42
- data/lib/mongoid/association/referenced/auto_save.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -7
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +6 -6
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -2
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +23 -32
- data/lib/mongoid/association/referenced/belongs_to.rb +13 -37
- data/lib/mongoid/association/referenced/counter_cache.rb +18 -26
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +15 -8
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +1 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +191 -123
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -42
- data/lib/mongoid/association/referenced/has_many/binding.rb +1 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +1 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +471 -496
- data/lib/mongoid/association/referenced/has_many/proxy.rb +182 -179
- data/lib/mongoid/association/referenced/has_many.rb +17 -43
- data/lib/mongoid/association/referenced/has_one/binding.rb +1 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/eager.rb +3 -4
- data/lib/mongoid/association/referenced/has_one/proxy.rb +38 -41
- data/lib/mongoid/association/referenced/has_one.rb +17 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -27
- data/lib/mongoid/association/referenced.rb +1 -1
- data/lib/mongoid/association/reflections.rb +9 -9
- data/lib/mongoid/association/relatable.rb +55 -74
- data/lib/mongoid/association.rb +10 -22
- data/lib/mongoid/atomic/modifiers.rb +7 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +20 -5
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -5
- data/lib/mongoid/atomic/paths/embedded.rb +1 -3
- data/lib/mongoid/atomic/paths/root.rb +1 -5
- data/lib/mongoid/atomic/paths.rb +1 -1
- data/lib/mongoid/atomic.rb +39 -86
- data/lib/mongoid/atomic_update_preparer.rb +88 -0
- data/lib/mongoid/attributes/dynamic.rb +5 -21
- data/lib/mongoid/attributes/embedded.rb +34 -0
- data/lib/mongoid/attributes/nested.rb +9 -13
- data/lib/mongoid/attributes/processing.rb +43 -28
- data/lib/mongoid/attributes/projector.rb +120 -0
- data/lib/mongoid/attributes/readonly.rb +4 -8
- data/lib/mongoid/attributes.rb +85 -89
- data/lib/mongoid/cacheable.rb +5 -9
- data/lib/mongoid/changeable.rb +183 -97
- data/lib/mongoid/clients/factory.rb +58 -15
- data/lib/mongoid/clients/options.rb +117 -8
- data/lib/mongoid/clients/sessions.rb +246 -84
- data/lib/mongoid/clients/storage_options.rb +37 -11
- data/lib/mongoid/clients/validators/storage.rb +4 -24
- data/lib/mongoid/clients/validators.rb +1 -1
- data/lib/mongoid/clients.rb +37 -14
- data/lib/mongoid/collection_configurable.rb +59 -0
- data/lib/mongoid/composable.rb +7 -7
- data/lib/mongoid/config/defaults.rb +40 -0
- data/lib/mongoid/config/encryption.rb +213 -0
- data/lib/mongoid/config/environment.rb +25 -5
- data/lib/mongoid/config/introspection.rb +152 -0
- data/lib/mongoid/config/options.rb +11 -14
- data/lib/mongoid/config/validators/async_query_executor.rb +34 -0
- data/lib/mongoid/config/validators/client.rb +7 -23
- data/lib/mongoid/config/validators/option.rb +1 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +183 -46
- data/lib/mongoid/contextual/aggregable/memory.rb +38 -26
- data/lib/mongoid/contextual/aggregable/mongo.rb +26 -32
- data/lib/mongoid/contextual/aggregable/none.rb +66 -0
- data/lib/mongoid/contextual/aggregable.rb +18 -0
- data/lib/mongoid/contextual/atomic.rb +97 -30
- data/lib/mongoid/contextual/command.rb +3 -5
- data/lib/mongoid/contextual/map_reduce.rb +8 -33
- data/lib/mongoid/contextual/memory.rb +396 -89
- data/lib/mongoid/contextual/mongo/documents_loader.rb +178 -0
- data/lib/mongoid/contextual/mongo.rb +640 -311
- data/lib/mongoid/contextual/none.rb +244 -30
- data/lib/mongoid/contextual/queryable.rb +5 -4
- data/lib/mongoid/contextual.rb +18 -7
- data/lib/mongoid/copyable.rb +34 -14
- data/lib/mongoid/criteria/findable.rb +52 -22
- data/lib/mongoid/criteria/includable.rb +31 -34
- data/lib/mongoid/criteria/inspectable.rb +4 -3
- data/lib/mongoid/criteria/marshalable.rb +14 -7
- data/lib/mongoid/criteria/modifiable.rb +5 -19
- data/lib/mongoid/criteria/options.rb +1 -3
- data/lib/mongoid/criteria/permission.rb +6 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +3 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +1 -25
- data/lib/mongoid/criteria/queryable/extensions/array.rb +6 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -9
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -7
- data/lib/mongoid/criteria/queryable/extensions/date.rb +10 -11
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +8 -7
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +2 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +48 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -13
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +19 -34
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +6 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +8 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -5
- data/lib/mongoid/criteria/queryable/key.rb +15 -18
- data/lib/mongoid/criteria/queryable/macroable.rb +1 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +69 -50
- data/lib/mongoid/criteria/queryable/optional.rb +12 -62
- data/lib/mongoid/criteria/queryable/options.rb +3 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +2 -14
- data/lib/mongoid/criteria/queryable/selectable.rb +87 -124
- data/lib/mongoid/criteria/queryable/selector.rb +96 -25
- data/lib/mongoid/criteria/queryable/smash.rb +41 -18
- data/lib/mongoid/criteria/queryable/storable.rb +14 -9
- data/lib/mongoid/criteria/queryable.rb +12 -13
- data/lib/mongoid/criteria/scopable.rb +32 -21
- data/lib/mongoid/criteria/translator.rb +46 -0
- data/lib/mongoid/criteria.rb +60 -109
- data/lib/mongoid/deprecable.rb +38 -0
- data/lib/mongoid/deprecation.rb +29 -0
- data/lib/mongoid/document.rb +263 -173
- data/lib/mongoid/encryptable.rb +53 -0
- data/lib/mongoid/equality.rb +22 -25
- data/lib/mongoid/errors/ambiguous_relationship.rb +3 -5
- data/lib/mongoid/errors/attribute_not_loaded.rb +34 -0
- data/lib/mongoid/errors/callback.rb +1 -3
- data/lib/mongoid/errors/create_collection_failure.rb +34 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +1 -1
- data/lib/mongoid/errors/delete_restriction.rb +9 -12
- data/lib/mongoid/errors/document_not_destroyed.rb +3 -7
- data/lib/mongoid/errors/document_not_found.rb +34 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +28 -0
- data/lib/mongoid/errors/empty_config_file.rb +26 -0
- data/lib/mongoid/errors/immutable_attribute.rb +27 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +26 -0
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +33 -0
- data/lib/mongoid/errors/invalid_collection.rb +1 -1
- data/lib/mongoid/errors/invalid_config_file.rb +26 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +6 -5
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +27 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_field.rb +7 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_field_option.rb +1 -3
- data/lib/mongoid/errors/invalid_field_type.rb +27 -0
- data/lib/mongoid/errors/invalid_find.rb +1 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +23 -0
- data/lib/mongoid/errors/invalid_includes.rb +1 -3
- data/lib/mongoid/errors/invalid_index.rb +1 -3
- data/lib/mongoid/errors/invalid_options.rb +1 -3
- data/lib/mongoid/errors/invalid_path.rb +1 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +1 -5
- data/lib/mongoid/errors/invalid_query.rb +1 -1
- data/lib/mongoid/errors/invalid_relation.rb +2 -8
- data/lib/mongoid/errors/invalid_relation_option.rb +2 -4
- data/lib/mongoid/errors/invalid_scope.rb +1 -3
- data/lib/mongoid/errors/invalid_session_nesting.rb +17 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +1 -2
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -4
- data/lib/mongoid/errors/invalid_time.rb +1 -3
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +17 -0
- data/lib/mongoid/errors/inverse_not_found.rb +1 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -3
- data/lib/mongoid/errors/mixed_relations.rb +1 -3
- data/lib/mongoid/errors/mongoid_error.rb +8 -16
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +2 -4
- data/lib/mongoid/errors/no_client_config.rb +1 -3
- data/lib/mongoid/errors/no_client_database.rb +2 -4
- data/lib/mongoid/errors/no_client_hosts.rb +2 -4
- data/lib/mongoid/errors/no_clients_config.rb +1 -3
- data/lib/mongoid/errors/no_default_client.rb +1 -3
- data/lib/mongoid/errors/no_environment.rb +1 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -3
- data/lib/mongoid/errors/no_metadata.rb +1 -3
- data/lib/mongoid/errors/no_parent.rb +1 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -4
- data/lib/mongoid/errors/readonly_document.rb +2 -6
- data/lib/mongoid/errors/rollback.rb +15 -0
- data/lib/mongoid/errors/scope_overwrite.rb +1 -1
- data/lib/mongoid/errors/sessions_not_supported.rb +17 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -2
- data/lib/mongoid/errors/transaction_error.rb +25 -0
- data/lib/mongoid/errors/transactions_not_supported.rb +17 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -4
- data/lib/mongoid/errors/unknown_model.rb +1 -3
- data/lib/mongoid/errors/unsaved_document.rb +2 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -3
- data/lib/mongoid/errors/validations.rb +1 -1
- data/lib/mongoid/errors.rb +18 -5
- data/lib/mongoid/evolvable.rb +2 -4
- data/lib/mongoid/extensions/array.rb +20 -58
- data/lib/mongoid/extensions/big_decimal.rb +44 -24
- data/lib/mongoid/extensions/binary.rb +45 -0
- data/lib/mongoid/extensions/boolean.rb +11 -6
- data/lib/mongoid/extensions/date.rb +31 -29
- data/lib/mongoid/extensions/date_time.rb +5 -16
- data/lib/mongoid/extensions/decimal128.rb +3 -5
- data/lib/mongoid/extensions/false_class.rb +8 -10
- data/lib/mongoid/extensions/float.rb +11 -12
- data/lib/mongoid/extensions/hash.rb +28 -148
- data/lib/mongoid/extensions/integer.rb +13 -14
- data/lib/mongoid/extensions/module.rb +5 -5
- data/lib/mongoid/extensions/nil_class.rb +5 -7
- data/lib/mongoid/extensions/object.rb +32 -81
- data/lib/mongoid/extensions/object_id.rb +3 -7
- data/lib/mongoid/extensions/range.rb +47 -24
- data/lib/mongoid/extensions/raw_value.rb +34 -0
- data/lib/mongoid/extensions/regexp.rb +14 -7
- data/lib/mongoid/extensions/set.rb +24 -13
- data/lib/mongoid/extensions/string.rb +30 -62
- data/lib/mongoid/extensions/symbol.rb +9 -22
- data/lib/mongoid/extensions/time.rb +30 -40
- data/lib/mongoid/extensions/time_with_zone.rb +18 -11
- data/lib/mongoid/extensions/true_class.rb +8 -10
- data/lib/mongoid/extensions.rb +3 -20
- data/lib/mongoid/factory.rb +178 -37
- data/lib/mongoid/fields/encrypted.rb +48 -0
- data/lib/mongoid/fields/foreign_key.rb +39 -27
- data/lib/mongoid/fields/localized.rb +25 -15
- data/lib/mongoid/fields/standard.rb +22 -40
- data/lib/mongoid/fields/validators/macro.rb +6 -19
- data/lib/mongoid/fields/validators.rb +1 -1
- data/lib/mongoid/fields.rb +354 -76
- data/lib/mongoid/findable.rb +62 -22
- data/lib/mongoid/indexable/specification.rb +55 -34
- data/lib/mongoid/indexable/validators/options.rb +7 -9
- data/lib/mongoid/indexable.rb +2 -18
- data/lib/mongoid/inspectable.rb +34 -11
- data/lib/mongoid/interceptable.rb +197 -41
- data/lib/mongoid/loadable.rb +83 -0
- data/lib/mongoid/loggable.rb +1 -9
- data/lib/mongoid/matchable.rb +2 -6
- data/lib/mongoid/matcher/all.rb +15 -0
- data/lib/mongoid/matcher/and.rb +14 -0
- data/lib/mongoid/matcher/bits.rb +60 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +41 -0
- data/lib/mongoid/matcher/bits_all_set.rb +41 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +41 -0
- data/lib/mongoid/matcher/bits_any_set.rb +41 -0
- data/lib/mongoid/matcher/elem_match.rb +17 -1
- data/lib/mongoid/matcher/elem_match_expression.rb +14 -2
- data/lib/mongoid/matcher/eq.rb +15 -0
- data/lib/mongoid/matcher/eq_impl.rb +54 -2
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +18 -1
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +22 -14
- data/lib/mongoid/matcher/expression_operator.rb +14 -0
- data/lib/mongoid/matcher/field_expression.rb +19 -5
- data/lib/mongoid/matcher/field_operator.rb +30 -0
- data/lib/mongoid/matcher/gt.rb +15 -0
- data/lib/mongoid/matcher/gte.rb +15 -0
- data/lib/mongoid/matcher/in.rb +15 -0
- data/lib/mongoid/matcher/lt.rb +15 -0
- data/lib/mongoid/matcher/lte.rb +15 -0
- data/lib/mongoid/matcher/mod.rb +33 -0
- data/lib/mongoid/matcher/ne.rb +15 -0
- data/lib/mongoid/matcher/nin.rb +15 -0
- data/lib/mongoid/matcher/nor.rb +14 -0
- data/lib/mongoid/matcher/not.rb +16 -0
- data/lib/mongoid/matcher/or.rb +14 -0
- data/lib/mongoid/matcher/regex.rb +24 -0
- data/lib/mongoid/matcher/size.rb +16 -0
- data/lib/mongoid/matcher/type.rb +124 -0
- data/lib/mongoid/matcher.rb +59 -52
- data/lib/mongoid/persistable/creatable.rb +25 -29
- data/lib/mongoid/persistable/deletable.rb +10 -23
- data/lib/mongoid/persistable/destroyable.rb +37 -11
- data/lib/mongoid/persistable/incrementable.rb +2 -6
- data/lib/mongoid/persistable/logical.rb +1 -5
- data/lib/mongoid/persistable/maxable.rb +37 -0
- data/lib/mongoid/persistable/minable.rb +37 -0
- data/lib/mongoid/persistable/multipliable.rb +36 -0
- data/lib/mongoid/persistable/poppable.rb +1 -5
- data/lib/mongoid/persistable/pullable.rb +1 -7
- data/lib/mongoid/persistable/pushable.rb +1 -7
- data/lib/mongoid/persistable/renamable.rb +1 -5
- data/lib/mongoid/persistable/savable.rb +14 -8
- data/lib/mongoid/persistable/settable.rb +1 -5
- data/lib/mongoid/persistable/unsettable.rb +3 -7
- data/lib/mongoid/persistable/updatable.rb +114 -28
- data/lib/mongoid/persistable/upsertable.rb +33 -8
- data/lib/mongoid/persistable.rb +17 -27
- data/lib/mongoid/persistence_context.rb +111 -43
- data/lib/mongoid/positional.rb +1 -5
- data/lib/mongoid/railtie.rb +23 -15
- data/lib/mongoid/railties/bson_object_id_serializer.rb +39 -0
- data/lib/mongoid/railties/console_sandbox.rb +42 -0
- data/lib/mongoid/railties/controller_runtime.rb +21 -6
- data/lib/mongoid/railties/database.rake +19 -2
- data/lib/mongoid/reloadable.rb +45 -42
- data/lib/mongoid/scopable.rb +25 -53
- data/lib/mongoid/search_indexable.rb +167 -0
- data/lib/mongoid/selectable.rb +6 -17
- data/lib/mongoid/serializable.rb +11 -21
- data/lib/mongoid/shardable.rb +50 -16
- data/lib/mongoid/stateful.rb +66 -22
- data/lib/mongoid/stringified_symbol.rb +19 -7
- data/lib/mongoid/tasks/database.rake +25 -0
- data/lib/mongoid/tasks/database.rb +84 -8
- data/lib/mongoid/tasks/encryption.rake +59 -0
- data/lib/mongoid/tasks/encryption.rb +108 -0
- data/lib/mongoid/threaded/lifecycle.rb +6 -26
- data/lib/mongoid/threaded.rb +131 -92
- data/lib/mongoid/timestamps/created/short.rb +1 -1
- data/lib/mongoid/timestamps/created.rb +4 -4
- data/lib/mongoid/timestamps/short.rb +1 -1
- data/lib/mongoid/timestamps/timeless.rb +29 -7
- data/lib/mongoid/timestamps/updated/short.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +3 -5
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/touchable.rb +155 -29
- data/lib/mongoid/traversable.rb +180 -125
- data/lib/mongoid/utils.rb +52 -0
- data/lib/mongoid/validatable/associated.rb +97 -21
- data/lib/mongoid/validatable/format.rb +1 -1
- data/lib/mongoid/validatable/length.rb +1 -1
- data/lib/mongoid/validatable/localizable.rb +2 -4
- data/lib/mongoid/validatable/macros.rb +10 -14
- data/lib/mongoid/validatable/presence.rb +7 -13
- data/lib/mongoid/validatable/queryable.rb +9 -3
- data/lib/mongoid/validatable/uniqueness.rb +26 -39
- data/lib/mongoid/validatable.rb +20 -29
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/warnings.rb +37 -0
- data/lib/mongoid.rb +56 -22
- data/lib/rails/generators/mongoid/config/config_generator.rb +25 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +25 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +44 -64
- data/lib/rails/generators/mongoid/model/model_generator.rb +4 -1
- data/lib/rails/generators/mongoid_generator.rb +13 -1
- data/lib/rails/mongoid.rb +4 -32
- data/spec/config/mongoid.yml +16 -1
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/active_job_spec.rb +32 -0
- data/spec/integration/app_spec.rb +180 -89
- data/spec/integration/associations/belongs_to_spec.rb +19 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +58 -0
- data/spec/integration/associations/embedded_spec.rb +90 -7
- data/spec/integration/associations/embeds_many_spec.rb +197 -1
- data/spec/integration/associations/embeds_one_spec.rb +19 -1
- data/spec/integration/associations/foreign_key_spec.rb +10 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +1 -1
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +62 -0
- data/spec/integration/associations/has_many_spec.rb +1 -1
- data/spec/integration/associations/has_one_spec.rb +145 -1
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +1 -1
- data/spec/integration/associations/reverse_population_spec.rb +1 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +1 -1
- data/spec/integration/associations/scope_option_spec.rb +102 -0
- data/spec/integration/atomic/modifiers_spec.rb +1 -1
- data/spec/integration/bson_regexp_raw_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +147 -3
- data/spec/integration/callbacks_spec.rb +398 -8
- data/spec/integration/contextual/empty_spec.rb +142 -0
- data/spec/integration/criteria/alias_query_spec.rb +98 -0
- data/spec/integration/criteria/date_field_spec.rb +2 -2
- data/spec/integration/criteria/default_scope_spec.rb +52 -0
- data/spec/integration/criteria/logical_spec.rb +12 -0
- data/spec/integration/criteria/range_spec.rb +358 -0
- data/spec/integration/criteria/raw_value_spec.rb +525 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +126 -15
- data/spec/integration/discriminator_key_spec.rb +119 -81
- data/spec/integration/discriminator_value_spec.rb +1 -1
- data/spec/integration/document_spec.rb +31 -1
- data/spec/integration/dots_and_dollars_spec.rb +278 -0
- data/spec/integration/encryption_spec.rb +100 -0
- data/spec/integration/i18n_fallbacks_spec.rb +10 -52
- data/spec/integration/matcher_examples_spec.rb +21 -14
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +144 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +46 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +96 -0
- data/spec/integration/matcher_operator_data/in.yml +16 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/size.yml +0 -3
- data/spec/integration/matcher_operator_data/type.yml +64 -0
- data/spec/integration/matcher_operator_data/type_array.yml +15 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +37 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +26 -3
- data/spec/integration/matcher_spec.rb +50 -1
- data/spec/integration/persistence/range_field_spec.rb +351 -0
- data/spec/integration/server_query_spec.rb +1 -1
- data/spec/integration/shardable_spec.rb +1 -1
- data/spec/integration/stringified_symbol_field_spec.rb +17 -3
- data/spec/lite_spec_helper.rb +47 -14
- data/spec/mongoid/association/accessors_spec.rb +31 -19
- data/spec/mongoid/association/auto_save_spec.rb +73 -34
- data/spec/mongoid/association/builders_spec.rb +2 -2
- data/spec/mongoid/association/constrainable_spec.rb +1 -1
- data/spec/mongoid/association/counter_cache_spec.rb +34 -34
- data/spec/mongoid/association/depending_spec.rb +397 -358
- data/spec/mongoid/association/eager_spec.rb +56 -6
- data/spec/mongoid/association/embedded/cyclic_spec.rb +3 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +3 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +3 -2
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +55 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +110 -23
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -8
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +113 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +712 -203
- data/spec/mongoid/association/embedded/embeds_many_models.rb +189 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +14 -2
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +69 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +26 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +37 -24
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +25 -2
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -2
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +29 -1
- data/spec/mongoid/association/macros_spec.rb +10 -10
- data/spec/mongoid/association/nested/many_spec.rb +1 -1
- data/spec/mongoid/association/nested/one_spec.rb +17 -13
- data/spec/mongoid/association/options_spec.rb +1 -1
- data/spec/mongoid/association/polymorphic_spec.rb +1 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +3 -2
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +110 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +51 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +113 -59
- data/spec/mongoid/association/referenced/belongs_to_models.rb +12 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +22 -2
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +27 -22
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +32 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +386 -376
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +44 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +57 -3
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +131 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +24 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +313 -134
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1313 -2109
- data/spec/mongoid/association/referenced/has_many_models.rb +39 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_many_spec.rb +47 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +54 -10
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +18 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +134 -28
- data/spec/mongoid/association/referenced/has_one_models.rb +43 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one_spec.rb +22 -1
- data/spec/mongoid/association/reflections_spec.rb +1 -1
- data/spec/mongoid/association/syncable_spec.rb +47 -33
- data/spec/mongoid/association_spec.rb +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +1 -1
- data/spec/mongoid/atomic/paths_spec.rb +65 -27
- data/spec/mongoid/atomic_spec.rb +29 -7
- data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
- data/spec/mongoid/attributes/dynamic_spec.rb +1 -1
- data/spec/mongoid/attributes/embedded_spec.rb +118 -0
- data/spec/mongoid/attributes/nested_spec.rb +147 -78
- data/spec/mongoid/attributes/nested_spec_models.rb +49 -0
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +41 -0
- data/spec/mongoid/attributes/readonly_spec.rb +23 -23
- data/spec/mongoid/attributes_spec.rb +921 -69
- data/spec/mongoid/cacheable_spec.rb +5 -5
- data/spec/mongoid/changeable_spec.rb +468 -76
- data/spec/mongoid/clients/factory_spec.rb +152 -30
- data/spec/mongoid/clients/options_spec.rb +24 -12
- data/spec/mongoid/clients/sessions_spec.rb +49 -71
- data/spec/mongoid/clients/transactions_spec.rb +971 -176
- data/spec/mongoid/clients/transactions_spec_models.rb +159 -0
- data/spec/mongoid/clients_spec.rb +230 -22
- data/spec/mongoid/collection_configurable_spec.rb +159 -0
- data/spec/mongoid/composable_spec.rb +1 -1
- data/spec/mongoid/config/defaults_spec.rb +99 -0
- data/spec/mongoid/config/encryption_spec.rb +152 -0
- data/spec/mongoid/config/environment_spec.rb +126 -39
- data/spec/mongoid/config/introspection_spec.rb +114 -0
- data/spec/mongoid/config/options_spec.rb +1 -1
- data/spec/mongoid/config_spec.rb +375 -43
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +432 -154
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +63 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +95 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +49 -0
- data/spec/mongoid/contextual/atomic_spec.rb +329 -87
- data/spec/mongoid/contextual/map_reduce_spec.rb +5 -19
- data/spec/mongoid/contextual/memory_spec.rb +1479 -127
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +194 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3374 -1254
- data/spec/mongoid/contextual/none_spec.rb +79 -68
- data/spec/mongoid/copyable_spec.rb +465 -23
- data/spec/mongoid/copyable_spec_models.rb +1 -1
- data/spec/mongoid/criteria/findable_spec.rb +295 -229
- data/spec/mongoid/criteria/includable_spec.rb +1493 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +55 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +1 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +19 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +38 -38
- data/spec/mongoid/criteria/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -74
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +8 -20
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +135 -27
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +32 -12
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -16
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +74 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +238 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -12
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -12
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -132
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -60
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +106 -8
- data/spec/mongoid/criteria/queryable/optional_spec.rb +17 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +700 -26
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +149 -683
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +186 -6
- data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +87 -1
- data/spec/mongoid/criteria/scopable_spec.rb +128 -1
- data/spec/mongoid/criteria/translator_spec.rb +133 -0
- data/spec/mongoid/criteria_projection_spec.rb +407 -0
- data/spec/mongoid/criteria_spec.rb +1029 -1806
- data/spec/mongoid/document_fields_spec.rb +180 -5
- data/spec/mongoid/document_persistence_context_spec.rb +77 -1
- data/spec/mongoid/document_query_spec.rb +55 -4
- data/spec/mongoid/document_spec.rb +43 -172
- data/spec/mongoid/equality_spec.rb +7 -8
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -1
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
- data/spec/mongoid/errors/callback_spec.rb +1 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +2 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +77 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +1 -1
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +6 -6
- data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -2
- data/spec/mongoid/errors/invalid_field_type_spec.rb +56 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +2 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +1 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +1 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +4 -4
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_database_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -1
- data/spec/mongoid/errors/no_clients_config_spec.rb +1 -1
- data/spec/mongoid/errors/no_environment_spec.rb +4 -4
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +1 -1
- data/spec/mongoid/errors/no_parent_spec.rb +1 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +3 -3
- data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -2
- data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +1 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -1
- data/spec/mongoid/errors/validations_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +19 -265
- data/spec/mongoid/extensions/big_decimal_spec.rb +713 -213
- data/spec/mongoid/extensions/binary_spec.rb +45 -10
- data/spec/mongoid/extensions/boolean_spec.rb +69 -83
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +15 -11
- data/spec/mongoid/extensions/date_spec.rb +74 -22
- data/spec/mongoid/extensions/date_time_spec.rb +18 -19
- data/spec/mongoid/extensions/decimal128_spec.rb +1 -1
- data/spec/mongoid/extensions/false_class_spec.rb +2 -9
- data/spec/mongoid/extensions/float_spec.rb +56 -84
- data/spec/mongoid/extensions/hash_spec.rb +45 -219
- data/spec/mongoid/extensions/integer_spec.rb +53 -73
- data/spec/mongoid/extensions/module_spec.rb +1 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/extensions/object_id_spec.rb +1 -1
- data/spec/mongoid/extensions/object_spec.rb +1 -177
- data/spec/mongoid/extensions/range_spec.rb +254 -64
- data/spec/mongoid/extensions/raw_value_spec.rb +67 -0
- data/spec/mongoid/extensions/regexp_spec.rb +59 -34
- data/spec/mongoid/extensions/set_spec.rb +105 -1
- data/spec/mongoid/extensions/string_spec.rb +21 -104
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +1 -1
- data/spec/mongoid/extensions/symbol_spec.rb +15 -53
- data/spec/mongoid/extensions/time_spec.rb +345 -131
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -107
- data/spec/mongoid/extensions/true_class_spec.rb +2 -9
- data/spec/mongoid/factory_spec.rb +63 -2
- data/spec/mongoid/fields/foreign_key_spec.rb +282 -120
- data/spec/mongoid/fields/localized_spec.rb +85 -42
- data/spec/mongoid/fields/standard_spec.rb +1 -1
- data/spec/mongoid/fields_spec.rb +826 -121
- data/spec/mongoid/findable_spec.rb +442 -80
- data/spec/mongoid/indexable/specification_spec.rb +132 -14
- data/spec/mongoid/indexable_spec.rb +361 -23
- data/spec/mongoid/inspectable_spec.rb +93 -5
- data/spec/mongoid/interceptable_spec.rb +926 -116
- data/spec/mongoid/interceptable_spec_models.rb +236 -4
- data/spec/mongoid/loading_spec.rb +110 -0
- data/spec/mongoid/loggable_spec.rb +1 -1
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +68 -88
- data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -15
- data/spec/mongoid/mongoizable_spec.rb +286 -0
- data/spec/mongoid/monkey_patches_spec.rb +211 -0
- data/spec/mongoid/persistable/creatable_spec.rb +5 -5
- data/spec/mongoid/persistable/deletable_spec.rb +267 -27
- data/spec/mongoid/persistable/destroyable_spec.rb +409 -24
- data/spec/mongoid/persistable/incrementable_spec.rb +46 -9
- data/spec/mongoid/persistable/logical_spec.rb +42 -5
- data/spec/mongoid/persistable/maxable_spec.rb +147 -0
- data/spec/mongoid/persistable/minable_spec.rb +147 -0
- data/spec/mongoid/persistable/multipliable_spec.rb +227 -0
- data/spec/mongoid/persistable/poppable_spec.rb +41 -5
- data/spec/mongoid/persistable/pullable_spec.rb +81 -9
- data/spec/mongoid/persistable/pushable_spec.rb +81 -9
- data/spec/mongoid/persistable/renamable_spec.rb +40 -4
- data/spec/mongoid/persistable/savable_spec.rb +114 -20
- data/spec/mongoid/persistable/settable_spec.rb +77 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +41 -5
- data/spec/mongoid/persistable/updatable_spec.rb +64 -52
- data/spec/mongoid/persistable/upsertable_spec.rb +124 -4
- data/spec/mongoid/persistable_spec.rb +4 -4
- data/spec/mongoid/persistence_context_spec.rb +58 -59
- data/spec/mongoid/positional_spec.rb +1 -1
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +24 -0
- data/spec/mongoid/railties/console_sandbox_spec.rb +44 -0
- data/spec/mongoid/relations/proxy_spec.rb +7 -7
- data/spec/mongoid/reloadable_spec.rb +255 -30
- data/spec/mongoid/scopable_spec.rb +198 -58
- data/spec/mongoid/search_indexable_spec.rb +147 -0
- data/spec/mongoid/selectable_spec.rb +7 -7
- data/spec/mongoid/serializable_spec.rb +19 -40
- data/spec/mongoid/shardable_models.rb +15 -0
- data/spec/mongoid/shardable_spec.rb +181 -31
- data/spec/mongoid/stateful_spec.rb +152 -10
- data/spec/mongoid/tasks/database_rake_spec.rb +193 -42
- data/spec/mongoid/tasks/database_spec.rb +175 -2
- data/spec/mongoid/tasks/encryption_spec.rb +187 -0
- data/spec/mongoid/threaded_spec.rb +40 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +2 -2
- data/spec/mongoid/timestamps/created_spec.rb +2 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +3 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +4 -4
- data/spec/mongoid/timestamps/updated_spec.rb +4 -4
- data/spec/mongoid/timestamps_spec.rb +399 -11
- data/spec/mongoid/timestamps_spec_models.rb +68 -0
- data/spec/mongoid/touchable_spec.rb +971 -54
- data/spec/mongoid/touchable_spec_models.rb +154 -0
- data/spec/mongoid/traversable_spec.rb +79 -37
- data/spec/mongoid/validatable/associated_spec.rb +14 -31
- data/spec/mongoid/validatable/format_spec.rb +1 -1
- data/spec/mongoid/validatable/length_spec.rb +1 -1
- data/spec/mongoid/validatable/numericality_spec.rb +1 -1
- data/spec/mongoid/validatable/presence_spec.rb +27 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +170 -99
- data/spec/mongoid/validatable_spec.rb +4 -4
- data/spec/mongoid/warnings_spec.rb +36 -0
- data/spec/mongoid_spec.rb +61 -11
- data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -3
- data/spec/rails/mongoid_spec.rb +28 -132
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/cluster_config.rb +24 -4
- data/spec/shared/lib/mrss/constraints.rb +77 -29
- data/spec/shared/lib/mrss/docker_runner.rb +40 -4
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +64 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +78 -34
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +123 -71
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +187 -40
- data/spec/shared/shlib/set_env.sh +49 -31
- data/spec/spec_helper.rb +46 -49
- data/spec/support/authorization.rb +1 -1
- data/spec/support/client_registry.rb +10 -0
- data/spec/support/constraints.rb +25 -1
- data/spec/support/crypt/models.rb +50 -0
- data/spec/support/crypt.rb +80 -0
- data/spec/support/expectations.rb +1 -1
- data/spec/support/feature_sandbox.rb +72 -0
- data/spec/support/helpers.rb +1 -0
- data/spec/support/immutable_ids.rb +119 -0
- data/spec/support/macros.rb +107 -1
- data/spec/support/models/account.rb +2 -2
- data/spec/support/models/acolyte.rb +1 -1
- data/spec/support/models/actor.rb +1 -1
- data/spec/support/models/actress.rb +1 -1
- data/spec/support/models/address.rb +7 -1
- data/spec/support/models/address_component.rb +1 -1
- data/spec/support/models/address_number.rb +1 -1
- data/spec/support/models/agency.rb +1 -1
- data/spec/support/models/agent.rb +1 -1
- data/spec/support/models/album.rb +1 -1
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +1 -1
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +1 -1
- data/spec/support/models/armrest.rb +1 -1
- data/spec/support/models/array_field.rb +1 -1
- data/spec/support/models/article.rb +1 -1
- data/spec/support/models/artist.rb +3 -2
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +4 -0
- data/spec/support/models/audio.rb +1 -1
- data/spec/support/models/augmentation.rb +13 -1
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +13 -1
- data/spec/support/models/bar.rb +1 -1
- data/spec/support/models/basic.rb +1 -1
- data/spec/support/models/bed.rb +1 -1
- data/spec/support/models/big_palette.rb +1 -1
- data/spec/support/models/birthday.rb +1 -1
- data/spec/support/models/bolt.rb +8 -0
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +2 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -1
- data/spec/support/models/building.rb +3 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +1 -1
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +1 -1
- data/spec/support/models/car.rb +1 -1
- data/spec/support/models/cat.rb +1 -1
- data/spec/support/models/catalog.rb +25 -0
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +4 -4
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +1 -1
- data/spec/support/models/circuit.rb +1 -1
- data/spec/support/models/circus.rb +4 -1
- data/spec/support/models/code.rb +3 -1
- data/spec/support/models/coding/pull_request.rb +1 -1
- data/spec/support/models/coding.rb +1 -1
- data/spec/support/models/comment.rb +1 -1
- data/spec/support/models/company.rb +1 -1
- data/spec/support/models/consumption_period.rb +1 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +1 -1
- data/spec/support/models/country_code.rb +3 -1
- data/spec/support/models/courier_job.rb +1 -1
- data/spec/support/models/cover.rb +11 -0
- data/spec/support/models/crate.rb +1 -1
- data/spec/support/models/customer.rb +1 -1
- data/spec/support/models/customer_address.rb +1 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +1 -1
- data/spec/support/models/description.rb +1 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +1 -1
- data/spec/support/models/doctor.rb +1 -1
- data/spec/support/models/dog.rb +1 -1
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +1 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +1 -1
- data/spec/support/models/drug.rb +1 -1
- data/spec/support/models/dungeon.rb +1 -1
- data/spec/support/models/edit.rb +1 -1
- data/spec/support/models/email.rb +1 -1
- data/spec/support/models/employer.rb +1 -1
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +1 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +1 -1
- data/spec/support/models/exhibition.rb +1 -1
- data/spec/support/models/exhibitor.rb +1 -1
- data/spec/support/models/explosion.rb +1 -1
- data/spec/support/models/eye.rb +1 -1
- data/spec/support/models/eye_bowl.rb +1 -1
- data/spec/support/models/face.rb +1 -1
- data/spec/support/models/fanatic.rb +9 -0
- data/spec/support/models/favorite.rb +8 -2
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +1 -1
- data/spec/support/models/fish.rb +1 -1
- data/spec/support/models/folder.rb +1 -1
- data/spec/support/models/folder_item.rb +1 -1
- data/spec/support/models/fruits.rb +1 -1
- data/spec/support/models/game.rb +1 -1
- data/spec/support/models/ghost.rb +1 -1
- data/spec/support/models/guitar.rb +1 -1
- data/spec/support/models/hole.rb +13 -0
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +1 -1
- data/spec/support/models/html_writer.rb +1 -1
- data/spec/support/models/id_key.rb +1 -1
- data/spec/support/models/idnodef.rb +1 -1
- data/spec/support/models/image.rb +1 -1
- data/spec/support/models/implant.rb +10 -1
- data/spec/support/models/instrument.rb +1 -1
- data/spec/support/models/item.rb +1 -1
- data/spec/support/models/jar.rb +1 -1
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +5 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +1 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +1 -1
- data/spec/support/models/line_item.rb +1 -1
- data/spec/support/models/location.rb +1 -1
- data/spec/support/models/login.rb +1 -1
- data/spec/support/models/manufacturer.rb +1 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +2 -1
- data/spec/support/models/message.rb +1 -1
- data/spec/support/models/minim.rb +1 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/mop.rb +10 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -1
- data/spec/support/models/name.rb +11 -1
- data/spec/support/models/name_only.rb +1 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +1 -1
- data/spec/support/models/nut.rb +8 -0
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +3 -1
- data/spec/support/models/ordered_post.rb +2 -2
- data/spec/support/models/ordered_preference.rb +1 -1
- data/spec/support/models/oscar.rb +1 -1
- data/spec/support/models/other_owner_object.rb +1 -1
- data/spec/support/models/override.rb +1 -1
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +1 -1
- data/spec/support/models/page.rb +1 -1
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +1 -1
- data/spec/support/models/parent.rb +1 -1
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +15 -1
- data/spec/support/models/patient.rb +1 -1
- data/spec/support/models/pdf_writer.rb +1 -1
- data/spec/support/models/pencil.rb +1 -1
- data/spec/support/models/person.rb +19 -1
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +3 -2
- data/spec/support/models/piano.rb +1 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +3 -1
- data/spec/support/models/post.rb +1 -1
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +13 -1
- data/spec/support/models/preference.rb +1 -1
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +2 -1
- data/spec/support/models/profile.rb +1 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +1 -1
- data/spec/support/models/publication/encyclopedia.rb +1 -1
- data/spec/support/models/publication/review.rb +1 -1
- data/spec/support/models/publication.rb +1 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +11 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/question.rb +1 -1
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +1 -1
- data/spec/support/models/registry.rb +2 -1
- data/spec/support/models/role.rb +1 -1
- data/spec/support/models/root_category.rb +1 -1
- data/spec/support/models/sandbox/app/models/app_models_message.rb +4 -0
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_user.rb +4 -0
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +1 -1
- data/spec/support/models/school.rb +15 -0
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +8 -0
- data/spec/support/models/seat.rb +1 -1
- data/spec/support/models/seo.rb +1 -1
- data/spec/support/models/series.rb +1 -1
- data/spec/support/models/server.rb +1 -1
- data/spec/support/models/service.rb +1 -1
- data/spec/support/models/shape.rb +1 -1
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +19 -0
- data/spec/support/models/shipment_address.rb +1 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +1 -1
- data/spec/support/models/shirt.rb +12 -0
- data/spec/support/models/shop.rb +1 -1
- data/spec/support/models/short_agent.rb +1 -1
- data/spec/support/models/short_quiz.rb +1 -1
- data/spec/support/models/simple.rb +1 -1
- data/spec/support/models/slave.rb +1 -1
- data/spec/support/models/song.rb +1 -1
- data/spec/support/models/sound.rb +1 -1
- data/spec/support/models/spacer.rb +8 -0
- data/spec/support/models/square.rb +1 -1
- data/spec/support/models/staff.rb +1 -1
- data/spec/support/models/store_as_dup_test1.rb +1 -1
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +1 -1
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +1 -1
- data/spec/support/models/student.rb +15 -0
- data/spec/support/models/sub_item.rb +1 -1
- data/spec/support/models/subscription.rb +1 -1
- data/spec/support/models/survey.rb +1 -1
- data/spec/support/models/symptom.rb +1 -1
- data/spec/support/models/system_role.rb +1 -0
- data/spec/support/models/tag.rb +1 -1
- data/spec/support/models/target.rb +1 -1
- data/spec/support/models/template.rb +1 -1
- data/spec/support/models/thing.rb +1 -1
- data/spec/support/models/threadlocker.rb +8 -0
- data/spec/support/models/title.rb +1 -1
- data/spec/support/models/tool.rb +1 -1
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +1 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +1 -1
- data/spec/support/models/truck.rb +1 -1
- data/spec/support/models/updatable.rb +1 -1
- data/spec/support/models/user.rb +1 -1
- data/spec/support/models/user_account.rb +1 -1
- data/spec/support/models/validation_callback.rb +1 -1
- data/spec/support/models/vehicle.rb +1 -1
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +1 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +1 -1
- data/spec/support/models/video_game.rb +1 -1
- data/spec/support/models/washer.rb +8 -0
- data/spec/support/models/weapon.rb +13 -1
- data/spec/support/models/wiki_page.rb +1 -1
- data/spec/support/models/word.rb +1 -1
- data/spec/support/models/word_origin.rb +1 -1
- data/spec/support/models/writer.rb +1 -1
- data/spec/support/rails_mock.rb +32 -0
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +3 -22
- data/spec/support/sinatra_mock.rb +7 -0
- data/spec/support/spec_config.rb +42 -7
- data.tar.gz.sig +0 -0
- metadata +883 -562
- metadata.gz.sig +0 -0
- data/lib/mongoid/association/referenced/eager.rb +0 -184
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -128
- data/lib/mongoid/contextual/geo_near.rb +0 -269
- data/lib/mongoid/errors/eager_load.rb +0 -26
- data/lib/mongoid/errors/invalid_session_use.rb +0 -26
- data/lib/mongoid/errors/invalid_storage_parent.rb +0 -28
- data/lib/mongoid/errors/invalid_value.rb +0 -18
- data/lib/mongoid/query_cache.rb +0 -333
- data/lib/support/ruby_version.rb +0 -29
- data/spec/mongoid/contextual/geo_near_spec.rb +0 -472
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -61
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -61
- data/spec/mongoid/extensions_spec.rb +0 -32
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -61
- data/spec/mongoid/query_cache_spec.rb +0 -978
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/session_registry.rb +0 -50
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Matcher
|
|
4
|
+
|
|
5
|
+
# In-memory matcher for $bitsAnyClear expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/bitsAnyClear/
|
|
8
|
+
#
|
|
9
|
+
# @api private
|
|
10
|
+
module BitsAnyClear
|
|
11
|
+
include Bits
|
|
12
|
+
extend self
|
|
13
|
+
|
|
14
|
+
# Returns whether a position list condition matches a value.
|
|
15
|
+
#
|
|
16
|
+
# @param [ Object ] value The value to check.
|
|
17
|
+
# @param [ Array<Numeric> ] condition The position list condition.
|
|
18
|
+
#
|
|
19
|
+
# @return [ true | false ] Whether the value matches.
|
|
20
|
+
#
|
|
21
|
+
# @api private
|
|
22
|
+
def array_matches?(value, condition)
|
|
23
|
+
condition.any? do |c|
|
|
24
|
+
value & (1<<c) == 0
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Returns whether a bitmask condition matches a value.
|
|
29
|
+
#
|
|
30
|
+
# @param [ Object ] value The value to check.
|
|
31
|
+
# @param [ Numeric ] condition The bitmask condition.
|
|
32
|
+
#
|
|
33
|
+
# @return [ true | false ] Whether the value matches.
|
|
34
|
+
#
|
|
35
|
+
# @api private
|
|
36
|
+
def int_matches?(value, condition)
|
|
37
|
+
value & condition < condition
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Matcher
|
|
4
|
+
|
|
5
|
+
# In-memory matcher for $bitsAnySet expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/bitsAnySet/
|
|
8
|
+
#
|
|
9
|
+
# @api private
|
|
10
|
+
module BitsAnySet
|
|
11
|
+
include Bits
|
|
12
|
+
extend self
|
|
13
|
+
|
|
14
|
+
# Returns whether a position list condition matches a value.
|
|
15
|
+
#
|
|
16
|
+
# @param [ Object ] value The value to check.
|
|
17
|
+
# @param [ Array<Numeric> ] condition The position list condition.
|
|
18
|
+
#
|
|
19
|
+
# @return [ true | false ] Whether the value matches.
|
|
20
|
+
#
|
|
21
|
+
# @api private
|
|
22
|
+
def array_matches?(value, condition)
|
|
23
|
+
condition.any? do |c|
|
|
24
|
+
value & (1<<c) > 0
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Returns whether a bitmask condition matches a value.
|
|
29
|
+
#
|
|
30
|
+
# @param [ Object ] value The value to check.
|
|
31
|
+
# @param [ Numeric ] condition The bitmask condition.
|
|
32
|
+
#
|
|
33
|
+
# @return [ true | false ] Whether the value matches.
|
|
34
|
+
#
|
|
35
|
+
# @api private
|
|
36
|
+
def int_matches?(value, condition)
|
|
37
|
+
value & condition > 0
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# In-memory matcher for $elemMatch expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/elemMatch/
|
|
8
|
+
#
|
|
4
9
|
# @api private
|
|
5
10
|
module ElemMatch
|
|
11
|
+
|
|
12
|
+
# Returns whether a value satisfies an $elemMatch expression.
|
|
13
|
+
#
|
|
14
|
+
# @param [ true | false ] exists Not used.
|
|
15
|
+
# @param [ Object | Array<Object> ] value The value to check.
|
|
16
|
+
# @param [ Hash ] expr The $elemMatch condition predicate.
|
|
17
|
+
#
|
|
18
|
+
# @return [ true | false ] Whether the value matches.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
6
21
|
module_function def matches?(exists, value, condition)
|
|
7
22
|
unless Hash === condition
|
|
8
23
|
raise Errors::InvalidQuery, "$elemMatch requires a Hash operand: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
@@ -15,7 +30,8 @@ module Mongoid
|
|
|
15
30
|
# Validate the condition is valid, even though we will never attempt
|
|
16
31
|
# matching it.
|
|
17
32
|
condition.each do |k, v|
|
|
18
|
-
|
|
33
|
+
k = k.to_s
|
|
34
|
+
if k.start_with?('$')
|
|
19
35
|
begin
|
|
20
36
|
ExpressionOperator.get(k)
|
|
21
37
|
rescue Mongoid::Errors::InvalidExpressionOperator
|
|
@@ -1,11 +1,23 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
4
|
-
#
|
|
5
|
-
#
|
|
5
|
+
# In-memory matcher used to evaluate whether an $elemMatch predicate
|
|
6
|
+
# matches and individual document. The $elemMatch predicate can be a
|
|
7
|
+
# logical expressions including $and, $or, $nor, and $not. $not can
|
|
8
|
+
# also have a regular expression predicate.
|
|
6
9
|
#
|
|
7
10
|
# @api private
|
|
8
11
|
module ElemMatchExpression
|
|
12
|
+
|
|
13
|
+
# Returns whether a document satisfies an $elemMatch expression.
|
|
14
|
+
#
|
|
15
|
+
# @param [ Mongoid::Document ] document The document.
|
|
16
|
+
# @param [ Hash ] expr The $elemMatch condition predicate.
|
|
17
|
+
#
|
|
18
|
+
# @return [ true | false ] Whether the document matches.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
9
21
|
module_function def matches?(document, expr)
|
|
10
22
|
Expression.matches?(document, expr)
|
|
11
23
|
rescue Mongoid::Errors::InvalidExpressionOperator
|
data/lib/mongoid/matcher/eq.rb
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# In-memory matcher for $eq expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/eq/
|
|
8
|
+
#
|
|
4
9
|
# @api private
|
|
5
10
|
module Eq
|
|
11
|
+
|
|
12
|
+
# Returns whether a value satisfies an $eq expression.
|
|
13
|
+
#
|
|
14
|
+
# @param [ true | false ] exists Whether the value exists.
|
|
15
|
+
# @param [ Object ] value The value to check.
|
|
16
|
+
# @param [ Hash ] expr The $eq condition predicate.
|
|
17
|
+
#
|
|
18
|
+
# @return [ true | false ] Whether the value matches.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
6
21
|
module_function def matches?(exists, value, condition)
|
|
7
22
|
EqImpl.matches?(exists, value, condition, '$eq')
|
|
8
23
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
@@ -9,6 +10,17 @@ module Mongoid
|
|
|
9
10
|
#
|
|
10
11
|
# @api private
|
|
11
12
|
module EqImpl
|
|
13
|
+
|
|
14
|
+
# Returns whether a value satisfies an $eq (or similar) expression.
|
|
15
|
+
#
|
|
16
|
+
# @param [ true | false ] exists Not used.
|
|
17
|
+
# @param [ Object ] value The value to check.
|
|
18
|
+
# @param [ Object | Range ] condition The equality condition predicate.
|
|
19
|
+
# @param [ String ] original_operator Operator to use in exception messages.
|
|
20
|
+
#
|
|
21
|
+
# @return [ true | false ] Whether the value matches.
|
|
22
|
+
#
|
|
23
|
+
# @api private
|
|
12
24
|
module_function def matches?(exists, value, condition, original_operator)
|
|
13
25
|
case condition
|
|
14
26
|
when Range
|
|
@@ -23,10 +35,50 @@ module Mongoid
|
|
|
23
35
|
end
|
|
24
36
|
=end
|
|
25
37
|
else
|
|
26
|
-
|
|
27
|
-
value.
|
|
38
|
+
# When doing a comparison with Time objects, compare using millisecond precision
|
|
39
|
+
if value.kind_of?(Time) && condition.kind_of?(Time)
|
|
40
|
+
time_eq?(value, condition)
|
|
41
|
+
elsif value.is_a?(Array) && condition.kind_of?(Time)
|
|
42
|
+
value.map do |v|
|
|
43
|
+
if v.kind_of?(Time)
|
|
44
|
+
time_rounded_to_millis(v)
|
|
45
|
+
else
|
|
46
|
+
v
|
|
47
|
+
end
|
|
48
|
+
end.include?(time_rounded_to_millis(condition))
|
|
49
|
+
else
|
|
50
|
+
value == condition ||
|
|
51
|
+
value.is_a?(Array) && value.include?(condition)
|
|
52
|
+
end
|
|
28
53
|
end
|
|
29
54
|
end
|
|
55
|
+
|
|
56
|
+
# Per https://www.mongodb.com/docs/ruby-driver/current/tutorials/bson-v4/#time-instances,
|
|
57
|
+
# > Times in BSON (and MongoDB) can only have millisecond precision. When Ruby Time instances
|
|
58
|
+
# are serialized to BSON or Extended JSON, the times are floored to the nearest millisecond.
|
|
59
|
+
#
|
|
60
|
+
# > Because of this flooring, applications are strongly recommended to perform all time
|
|
61
|
+
# calculations using integer math, as inexactness of floating point calculations may produce
|
|
62
|
+
# unexpected results.
|
|
63
|
+
#
|
|
64
|
+
# As such, perform a similar operation to what the bson-ruby gem does.
|
|
65
|
+
#
|
|
66
|
+
# @param [ Time ] time_a The first time value.
|
|
67
|
+
# @param [ Time ] time_b The second time value.
|
|
68
|
+
#
|
|
69
|
+
# @return [ true | false ] Whether the two times are equal to the millisecond.
|
|
70
|
+
module_function def time_eq?(time_a, time_b)
|
|
71
|
+
time_rounded_to_millis(time_a) == time_rounded_to_millis(time_b)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Rounds a time value to nearest millisecond.
|
|
75
|
+
#
|
|
76
|
+
# @param [ Time ] time The time value.
|
|
77
|
+
#
|
|
78
|
+
# @return [ true | false ] The time rounded to the millisecond.
|
|
79
|
+
module_function def time_rounded_to_millis(time)
|
|
80
|
+
return time._bson_to_i * 1000 + time.usec.divmod(1000).first
|
|
81
|
+
end
|
|
30
82
|
end
|
|
31
83
|
end
|
|
32
84
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
@@ -6,6 +7,18 @@ module Mongoid
|
|
|
6
7
|
#
|
|
7
8
|
# @api private
|
|
8
9
|
module EqImplWithRegexp
|
|
10
|
+
|
|
11
|
+
# Returns whether a value satisfies an $eq (or similar) expression,
|
|
12
|
+
# performing a regular expression match if the condition is a regular
|
|
13
|
+
# expression.
|
|
14
|
+
#
|
|
15
|
+
# @param [ String ] original_operator Not used.
|
|
16
|
+
# @param [ Object ] value The value to check.
|
|
17
|
+
# @param [ Object ] condition The equality condition predicate.
|
|
18
|
+
#
|
|
19
|
+
# @return [ true | false ] Whether the value matches.
|
|
20
|
+
#
|
|
21
|
+
# @api private
|
|
9
22
|
module_function def matches?(original_operator, value, condition)
|
|
10
23
|
case condition
|
|
11
24
|
when Regexp
|
|
@@ -13,7 +26,11 @@ module Mongoid
|
|
|
13
26
|
when ::BSON::Regexp::Raw
|
|
14
27
|
value =~ condition.compile
|
|
15
28
|
else
|
|
16
|
-
value
|
|
29
|
+
if value.kind_of?(Time) && condition.kind_of?(Time)
|
|
30
|
+
EqImpl.time_eq?(value, condition)
|
|
31
|
+
else
|
|
32
|
+
value == condition
|
|
33
|
+
end
|
|
17
34
|
end
|
|
18
35
|
end
|
|
19
36
|
end
|
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# In-memory matcher for $exists expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/exists/
|
|
8
|
+
#
|
|
4
9
|
# @api private
|
|
5
10
|
module Exists
|
|
11
|
+
|
|
12
|
+
# Returns whether an $exists expression is satisfied.
|
|
13
|
+
#
|
|
14
|
+
# @param [ true | false ] exists Whether the value exists.
|
|
15
|
+
# @param [ Object ] value Not used.
|
|
16
|
+
# @param [ true | false ] condition The $exists condition predicate.
|
|
17
|
+
#
|
|
18
|
+
# @return [ true | false ] Whether the existence condition is met.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
6
21
|
module_function def matches?(exists, value, condition)
|
|
7
22
|
case condition
|
|
8
23
|
when Range
|
|
@@ -1,8 +1,21 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# Base singleton module used for evaluating whether a given
|
|
6
|
+
# document in-memory matches an MSQL query expression.
|
|
7
|
+
#
|
|
4
8
|
# @api private
|
|
5
9
|
module Expression
|
|
10
|
+
|
|
11
|
+
# Returns whether a document satisfies a query expression.
|
|
12
|
+
#
|
|
13
|
+
# @param [ Mongoid::Document ] document The document.
|
|
14
|
+
# @param [ Hash ] expr The expression.
|
|
15
|
+
#
|
|
16
|
+
# @return [ true | false ] Whether the document matches.
|
|
17
|
+
#
|
|
18
|
+
# @api private
|
|
6
19
|
module_function def matches?(document, expr)
|
|
7
20
|
if expr.nil?
|
|
8
21
|
raise Errors::InvalidQuery, "Nil condition in expression context"
|
|
@@ -12,25 +25,20 @@ module Mongoid
|
|
|
12
25
|
end
|
|
13
26
|
expr.all? do |k, expr_v|
|
|
14
27
|
k = k.to_s
|
|
28
|
+
if k == "$comment"
|
|
29
|
+
# Nothing
|
|
30
|
+
return true
|
|
31
|
+
end
|
|
15
32
|
if k.start_with?('$')
|
|
16
33
|
ExpressionOperator.get(k).matches?(document, expr_v)
|
|
17
34
|
else
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# Do not treat a hash as an array here (both are iterable).
|
|
23
|
-
if expanded && Array === value
|
|
24
|
-
if value == []
|
|
25
|
-
# Empty array is technically equivalent to exists: false.
|
|
26
|
-
FieldExpression.matches?(false, nil, expr_v)
|
|
27
|
-
else
|
|
28
|
-
value.any? do |v|
|
|
29
|
-
FieldExpression.matches?(true, v, expr_v)
|
|
30
|
-
end
|
|
35
|
+
values = Matcher.extract_attribute(document, k)
|
|
36
|
+
if values.length > 0
|
|
37
|
+
values.any? do |v|
|
|
38
|
+
FieldExpression.matches?(true, v, expr_v)
|
|
31
39
|
end
|
|
32
40
|
else
|
|
33
|
-
FieldExpression.matches?(
|
|
41
|
+
FieldExpression.matches?(false, nil, expr_v)
|
|
34
42
|
end
|
|
35
43
|
end
|
|
36
44
|
end
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# Singleton module provides lookup of logical query operator
|
|
6
|
+
# matchers.
|
|
7
|
+
#
|
|
4
8
|
# @api private
|
|
5
9
|
module ExpressionOperator
|
|
6
10
|
MAP = {
|
|
@@ -9,6 +13,16 @@ module Mongoid
|
|
|
9
13
|
'$or' => Or,
|
|
10
14
|
}.freeze
|
|
11
15
|
|
|
16
|
+
# Returns the matcher module for a given operator.
|
|
17
|
+
#
|
|
18
|
+
# @param [ String ] op The operator name.
|
|
19
|
+
#
|
|
20
|
+
# @return [ Module ] The matcher module.
|
|
21
|
+
#
|
|
22
|
+
# @raises [ Mongoid::Errors::InvalidExpressionOperator ]
|
|
23
|
+
# Raised if the given operator is unknown.
|
|
24
|
+
#
|
|
25
|
+
# @api private
|
|
12
26
|
module_function def get(op)
|
|
13
27
|
MAP.fetch(op)
|
|
14
28
|
rescue KeyError
|
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# Singleton module used for evaluating whether a given
|
|
6
|
+
# value in-memory matches an MSQL query expression related
|
|
7
|
+
# to a specific field.
|
|
8
|
+
#
|
|
4
9
|
# @api private
|
|
5
10
|
module FieldExpression
|
|
11
|
+
|
|
12
|
+
# Returns whether a value satisfies a condition.
|
|
13
|
+
#
|
|
14
|
+
# @param [ true | false ] exists Whether the value exists.
|
|
15
|
+
# @param [ Object ] value The value to check.
|
|
16
|
+
# @param [ Hash | Object ] condition The condition predicate.
|
|
17
|
+
#
|
|
18
|
+
# @return [ true | false ] Whether the value matches.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
6
21
|
module_function def matches?(exists, value, condition)
|
|
7
22
|
if condition.is_a?(Hash)
|
|
8
23
|
condition.all? do |k, cond_v|
|
|
@@ -36,14 +51,13 @@ module Mongoid
|
|
|
36
51
|
FieldOperator.get(k).matches?(exists, value, cond_v)
|
|
37
52
|
end
|
|
38
53
|
elsif Hash === value
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
sub_value.any? do |sub_v|
|
|
54
|
+
sub_values = Matcher.extract_attribute(value, k)
|
|
55
|
+
if sub_values.length > 0
|
|
56
|
+
sub_values.any? do |sub_v|
|
|
43
57
|
Eq.matches?(true, sub_v, cond_v)
|
|
44
58
|
end
|
|
45
59
|
else
|
|
46
|
-
Eq.matches?(
|
|
60
|
+
Eq.matches?(false, nil, cond_v)
|
|
47
61
|
end
|
|
48
62
|
else
|
|
49
63
|
false
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# Singleton module provides lookup of query operator matchers
|
|
6
|
+
# related to field values.
|
|
7
|
+
#
|
|
4
8
|
# @api private
|
|
5
9
|
module FieldOperator
|
|
6
10
|
MAP = {
|
|
7
11
|
'$all' => All,
|
|
12
|
+
'$bitsAllClear' => BitsAllClear,
|
|
13
|
+
'$bitsAllSet' => BitsAllSet,
|
|
14
|
+
'$bitsAnyClear' => BitsAnyClear,
|
|
15
|
+
'$bitsAnySet' => BitsAnySet,
|
|
8
16
|
'$elemMatch' => ElemMatch,
|
|
9
17
|
'$eq' => Eq,
|
|
10
18
|
'$exists' => Exists,
|
|
@@ -13,19 +21,36 @@ module Mongoid
|
|
|
13
21
|
'$in' => In,
|
|
14
22
|
'$lt' => Lt,
|
|
15
23
|
'$lte' => Lte,
|
|
24
|
+
'$mod' => Mod,
|
|
16
25
|
'$nin' => Nin,
|
|
17
26
|
'$ne' => Ne,
|
|
18
27
|
'$not' => Not,
|
|
19
28
|
'$regex' => Regex,
|
|
20
29
|
'$size' => Size,
|
|
30
|
+
'$type' => Type,
|
|
21
31
|
}.freeze
|
|
22
32
|
|
|
33
|
+
# Returns the matcher module for a given operator.
|
|
34
|
+
#
|
|
35
|
+
# @param [ String ] op The operator name.
|
|
36
|
+
#
|
|
37
|
+
# @return [ Module ] The matcher module.
|
|
38
|
+
#
|
|
39
|
+
# @raises [ Mongoid::Errors::InvalidFieldOperator ]
|
|
40
|
+
# Raised if the given operator is unknown.
|
|
41
|
+
#
|
|
42
|
+
# @api private
|
|
23
43
|
module_function def get(op)
|
|
24
44
|
MAP.fetch(op)
|
|
25
45
|
rescue KeyError
|
|
26
46
|
raise Errors::InvalidFieldOperator.new(op)
|
|
27
47
|
end
|
|
28
48
|
|
|
49
|
+
# Used for evaluating $lt, $lte, $gt, $gte comparison operators.
|
|
50
|
+
#
|
|
51
|
+
# @todo Refactor this as it is only relevant to $lt, $lte, $gt, $gte.
|
|
52
|
+
#
|
|
53
|
+
# @api private
|
|
29
54
|
module_function def apply_array_field_operator(exists, value, condition)
|
|
30
55
|
if Array === value
|
|
31
56
|
value.any? { |v| yield v }
|
|
@@ -34,6 +59,11 @@ module Mongoid
|
|
|
34
59
|
end
|
|
35
60
|
end
|
|
36
61
|
|
|
62
|
+
# Used for evaluating $lt, $lte, $gt, $gte comparison operators.
|
|
63
|
+
#
|
|
64
|
+
# @todo Refactor this as it is only relevant to $lt, $lte, $gt, $gte.
|
|
65
|
+
#
|
|
66
|
+
# @api private
|
|
37
67
|
module_function def apply_comparison_operator(operator, left, right)
|
|
38
68
|
left.send(operator, right)
|
|
39
69
|
rescue ArgumentError, NoMethodError, TypeError
|
data/lib/mongoid/matcher/gt.rb
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# In-memory matcher for $gt expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/gt/
|
|
8
|
+
#
|
|
4
9
|
# @api private
|
|
5
10
|
module Gt
|
|
11
|
+
|
|
12
|
+
# Returns whether a value satisfies a $gt expression.
|
|
13
|
+
#
|
|
14
|
+
# @param [ true | false ] exists Whether the value exists.
|
|
15
|
+
# @param [ Object ] value The value to check.
|
|
16
|
+
# @param [ Object ] condition The $gt condition predicate.
|
|
17
|
+
#
|
|
18
|
+
# @return [ true | false ] Whether the value matches.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
6
21
|
module_function def matches?(exists, value, condition)
|
|
7
22
|
case condition
|
|
8
23
|
when Range
|
data/lib/mongoid/matcher/gte.rb
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# In-memory matcher for $gte expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/gte/
|
|
8
|
+
#
|
|
4
9
|
# @api private
|
|
5
10
|
module Gte
|
|
11
|
+
|
|
12
|
+
# Returns whether a value satisfies a $gte expression.
|
|
13
|
+
#
|
|
14
|
+
# @param [ true | false ] exists Whether the value exists.
|
|
15
|
+
# @param [ Object ] value The value to check.
|
|
16
|
+
# @param [ Object ] condition The $gte condition predicate.
|
|
17
|
+
#
|
|
18
|
+
# @return [ true | false ] Whether the value matches.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
6
21
|
module_function def matches?(exists, value, condition)
|
|
7
22
|
case condition
|
|
8
23
|
when Range
|
data/lib/mongoid/matcher/in.rb
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# In-memory matcher for $in expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/in/
|
|
8
|
+
#
|
|
4
9
|
# @api private
|
|
5
10
|
module In
|
|
11
|
+
|
|
12
|
+
# Returns whether a value satisfies an $in expression.
|
|
13
|
+
#
|
|
14
|
+
# @param [ true | false ] exists Not used.
|
|
15
|
+
# @param [ Object ] value The value to check.
|
|
16
|
+
# @param [ Array<Object> ] condition The $in condition predicate.
|
|
17
|
+
#
|
|
18
|
+
# @return [ true | false ] Whether the value matches.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
6
21
|
module_function def matches?(exists, value, condition)
|
|
7
22
|
unless Array === condition
|
|
8
23
|
raise Errors::InvalidQuery, "$in argument must be an array: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
data/lib/mongoid/matcher/lt.rb
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# In-memory matcher for $lt expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/lt/
|
|
8
|
+
#
|
|
4
9
|
# @api private
|
|
5
10
|
module Lt
|
|
11
|
+
|
|
12
|
+
# Returns whether a value satisfies a $lt expression.
|
|
13
|
+
#
|
|
14
|
+
# @param [ true | false ] exists Whether the value exists.
|
|
15
|
+
# @param [ Object ] value The value to check.
|
|
16
|
+
# @param [ Object ] condition The $lt condition predicate.
|
|
17
|
+
#
|
|
18
|
+
# @return [ true | false ] Whether the value matches.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
6
21
|
module_function def matches?(exists, value, condition)
|
|
7
22
|
case condition
|
|
8
23
|
when Range
|
data/lib/mongoid/matcher/lte.rb
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# In-memory matcher for $lte expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/lte/
|
|
8
|
+
#
|
|
4
9
|
# @api private
|
|
5
10
|
module Lte
|
|
11
|
+
|
|
12
|
+
# Returns whether a value satisfies a $lte expression.
|
|
13
|
+
#
|
|
14
|
+
# @param [ true | false ] exists Whether the value exists.
|
|
15
|
+
# @param [ Object ] value The value to check.
|
|
16
|
+
# @param [ Object ] condition The $lte condition predicate.
|
|
17
|
+
#
|
|
18
|
+
# @return [ true | false ] Whether the value matches.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
6
21
|
module_function def matches?(exists, value, condition)
|
|
7
22
|
case condition
|
|
8
23
|
when Range
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Matcher
|
|
4
|
+
|
|
5
|
+
# In-memory matcher for $mod expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/mod/
|
|
8
|
+
#
|
|
9
|
+
# @api private
|
|
10
|
+
module Mod
|
|
11
|
+
|
|
12
|
+
# Returns whether a value satisfies a $mod expression.
|
|
13
|
+
#
|
|
14
|
+
# @param [ true | false ] exists Not used.
|
|
15
|
+
# @param [ Numeric ] value The value to check.
|
|
16
|
+
# @param [ Array<Numeric> ] condition The $mod condition predicate,
|
|
17
|
+
# which is a 2-tuple containing the divisor and remainder.
|
|
18
|
+
#
|
|
19
|
+
# @return [ true | false ] Whether the value matches.
|
|
20
|
+
#
|
|
21
|
+
# @api private
|
|
22
|
+
module_function def matches?(exists, value, condition)
|
|
23
|
+
unless Array === condition
|
|
24
|
+
raise Errors::InvalidQuery, "Unknown $mod argument #{condition}"
|
|
25
|
+
end
|
|
26
|
+
if condition.length != 2
|
|
27
|
+
raise Errors::InvalidQuery, "Malformed $mod argument #{condition}, should have 2 elements"
|
|
28
|
+
end
|
|
29
|
+
condition[1] == value%condition[0]
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
data/lib/mongoid/matcher/ne.rb
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
# rubocop:todo all
|
|
1
2
|
module Mongoid
|
|
2
3
|
module Matcher
|
|
3
4
|
|
|
5
|
+
# In-memory matcher for $ne expression.
|
|
6
|
+
#
|
|
7
|
+
# @see https://www.mongodb.com/docs/manual/reference/operator/query/ne/
|
|
8
|
+
#
|
|
4
9
|
# @api private
|
|
5
10
|
module Ne
|
|
11
|
+
|
|
12
|
+
# Returns whether a value satisfies an $ne expression.
|
|
13
|
+
#
|
|
14
|
+
# @param [ true | false ] exists Whether the value exists.
|
|
15
|
+
# @param [ Object ] value The value to check.
|
|
16
|
+
# @param [ Object ] condition The $ne condition predicate.
|
|
17
|
+
#
|
|
18
|
+
# @return [ true | false ] Whether the value matches.
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
6
21
|
module_function def matches?(exists, value, condition)
|
|
7
22
|
case condition
|
|
8
23
|
when ::Regexp, BSON::Regexp::Raw
|