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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
module Mongoid
|
|
5
5
|
class Criteria
|
|
@@ -17,8 +17,6 @@ module Mongoid
|
|
|
17
17
|
# mergeable.intersect.in(field: [ 1, 2, 3 ])
|
|
18
18
|
#
|
|
19
19
|
# @return [ Mergeable ] The intersect flagged mergeable.
|
|
20
|
-
#
|
|
21
|
-
# @since 1.0.0
|
|
22
20
|
def intersect
|
|
23
21
|
use(:__intersect__)
|
|
24
22
|
end
|
|
@@ -29,8 +27,6 @@ module Mongoid
|
|
|
29
27
|
# mergeable.override.in(field: [ 1, 2, 3 ])
|
|
30
28
|
#
|
|
31
29
|
# @return [ Mergeable ] The override flagged mergeable.
|
|
32
|
-
#
|
|
33
|
-
# @since 1.0.0
|
|
34
30
|
def override
|
|
35
31
|
use(:__override__)
|
|
36
32
|
end
|
|
@@ -41,8 +37,6 @@ module Mongoid
|
|
|
41
37
|
# mergeable.union.in(field: [ 1, 2, 3 ])
|
|
42
38
|
#
|
|
43
39
|
# @return [ Mergeable ] The union flagged mergeable.
|
|
44
|
-
#
|
|
45
|
-
# @since 1.0.0
|
|
46
40
|
def union
|
|
47
41
|
use(:__union__)
|
|
48
42
|
end
|
|
@@ -53,14 +47,33 @@ module Mongoid
|
|
|
53
47
|
# mergeable.reset_strategies!
|
|
54
48
|
#
|
|
55
49
|
# @return [ Criteria ] self.
|
|
56
|
-
#
|
|
57
|
-
# @since 1.0.0
|
|
58
50
|
def reset_strategies!
|
|
59
51
|
self.strategy = nil
|
|
60
52
|
self.negating = nil
|
|
61
53
|
self
|
|
62
54
|
end
|
|
63
55
|
|
|
56
|
+
# Merge criteria with operators using the and operator.
|
|
57
|
+
#
|
|
58
|
+
# @param [ Hash ] criterion The criterion to add to the criteria.
|
|
59
|
+
# @param [ String ] operator The MongoDB operator.
|
|
60
|
+
#
|
|
61
|
+
# @return [ Criteria ] The resulting criteria.
|
|
62
|
+
def and_with_operator(criterion, operator)
|
|
63
|
+
crit = self
|
|
64
|
+
if criterion
|
|
65
|
+
criterion.each_pair do |field, value|
|
|
66
|
+
val = prepare(field, operator, value)
|
|
67
|
+
# The prepare method already takes the negation into account. We
|
|
68
|
+
# set negating to false here so that ``and`` doesn't also apply
|
|
69
|
+
# negation and we have a double negative.
|
|
70
|
+
crit.negating = false
|
|
71
|
+
crit = crit.and(field => val)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
crit
|
|
75
|
+
end
|
|
76
|
+
|
|
64
77
|
private
|
|
65
78
|
|
|
66
79
|
# Adds the criterion to the existing selection.
|
|
@@ -74,8 +87,6 @@ module Mongoid
|
|
|
74
87
|
# @param [ String ] operator The MongoDB operator.
|
|
75
88
|
#
|
|
76
89
|
# @return [ Mergeable ] The new mergeable.
|
|
77
|
-
#
|
|
78
|
-
# @since 1.0.0
|
|
79
90
|
def __add__(criterion, operator)
|
|
80
91
|
with_strategy(:__add__, criterion, operator)
|
|
81
92
|
end
|
|
@@ -92,8 +103,6 @@ module Mongoid
|
|
|
92
103
|
# @param [ String ] inner The inner MongoDB operator.
|
|
93
104
|
#
|
|
94
105
|
# @return [ Mergeable ] The new mergeable.
|
|
95
|
-
#
|
|
96
|
-
# @since 1.0.0
|
|
97
106
|
def __expanded__(criterion, outer, inner)
|
|
98
107
|
selection(criterion) do |selector, field, value|
|
|
99
108
|
selector.store(field, { outer => { inner => value }})
|
|
@@ -111,8 +120,6 @@ module Mongoid
|
|
|
111
120
|
# @param [ Hash ] criterion The criteria.
|
|
112
121
|
#
|
|
113
122
|
# @return [ Mergeable ] The cloned object.
|
|
114
|
-
#
|
|
115
|
-
# @since 2.0.0
|
|
116
123
|
def __merge__(criterion)
|
|
117
124
|
selection(criterion) do |selector, field, value|
|
|
118
125
|
selector.merge!(field.__expr_part__(value))
|
|
@@ -130,8 +137,6 @@ module Mongoid
|
|
|
130
137
|
# @param [ String ] operator The MongoDB operator.
|
|
131
138
|
#
|
|
132
139
|
# @return [ Mergeable ] The new mergeable.
|
|
133
|
-
#
|
|
134
|
-
# @since 1.0.0
|
|
135
140
|
def __intersect__(criterion, operator)
|
|
136
141
|
with_strategy(:__intersect__, criterion, operator)
|
|
137
142
|
end
|
|
@@ -152,8 +157,6 @@ module Mongoid
|
|
|
152
157
|
# @param [ String ] operator The MongoDB operator.
|
|
153
158
|
#
|
|
154
159
|
# @return [ Mergeable ] The new mergeable.
|
|
155
|
-
#
|
|
156
|
-
# @since 1.0.0
|
|
157
160
|
def __multi__(criteria, operator)
|
|
158
161
|
clone.tap do |query|
|
|
159
162
|
sel = query.selector
|
|
@@ -171,7 +174,7 @@ module Mongoid
|
|
|
171
174
|
|
|
172
175
|
# Combines criteria into a MongoDB selector.
|
|
173
176
|
#
|
|
174
|
-
# Criteria is an array of
|
|
177
|
+
# Criteria is an array of criterion objects which will be flattened.
|
|
175
178
|
#
|
|
176
179
|
# Each criterion can be:
|
|
177
180
|
# - A hash
|
|
@@ -227,7 +230,16 @@ module Mongoid
|
|
|
227
230
|
end
|
|
228
231
|
|
|
229
232
|
# Takes a criteria hash and expands Key objects into hashes containing
|
|
230
|
-
# MQL corresponding to said key objects.
|
|
233
|
+
# MQL corresponding to said key objects. Also converts the input to
|
|
234
|
+
# BSON::Document to permit indifferent access.
|
|
235
|
+
#
|
|
236
|
+
# The argument must be a hash containing key-value pairs of the
|
|
237
|
+
# following forms:
|
|
238
|
+
# - {field_name: value}
|
|
239
|
+
# - {'field_name' => value}
|
|
240
|
+
# - {key_instance: value}
|
|
241
|
+
# - {:$operator => operator_value_expression}
|
|
242
|
+
# - {'$operator' => operator_value_expression}
|
|
231
243
|
#
|
|
232
244
|
# Ruby does not permit multiple symbol operators. For example,
|
|
233
245
|
# {:foo.gt => 1, :foo.gt => 2} is collapsed to {:foo.gt => 2} by the
|
|
@@ -237,19 +249,23 @@ module Mongoid
|
|
|
237
249
|
# Similarly, this method should never need to expand a literal value
|
|
238
250
|
# and an operator at the same time.
|
|
239
251
|
#
|
|
252
|
+
# This method effectively converts symbol keys to string keys in
|
|
253
|
+
# the input +expr+, such that the downstream code can assume that
|
|
254
|
+
# conditions always contain string keys.
|
|
255
|
+
#
|
|
240
256
|
# @param [ Hash ] expr Criteria including Key instances.
|
|
241
257
|
#
|
|
242
|
-
# @return [
|
|
258
|
+
# @return [ BSON::Document ] The expanded criteria.
|
|
243
259
|
private def _mongoid_expand_keys(expr)
|
|
244
260
|
unless expr.is_a?(Hash)
|
|
245
261
|
raise ArgumentError, 'Argument must be a Hash'
|
|
246
262
|
end
|
|
247
263
|
|
|
248
|
-
result =
|
|
264
|
+
result = BSON::Document.new
|
|
249
265
|
expr.each do |field, value|
|
|
250
|
-
field.__expr_part__(value.__expand_complex__).each do |k, v|
|
|
251
|
-
if result[k]
|
|
252
|
-
if
|
|
266
|
+
field.__expr_part__(value.__expand_complex__, negating?).each do |k, v|
|
|
267
|
+
if existing = result[k]
|
|
268
|
+
if existing.is_a?(Hash)
|
|
253
269
|
# Existing value is an operator.
|
|
254
270
|
# If new value is also an operator, ensure there are no
|
|
255
271
|
# conflicts and add
|
|
@@ -257,8 +273,8 @@ module Mongoid
|
|
|
257
273
|
# The new value is also an operator.
|
|
258
274
|
# If there are no conflicts, combine the hashes, otherwise
|
|
259
275
|
# add new conditions to top level with $and.
|
|
260
|
-
if (v.keys &
|
|
261
|
-
|
|
276
|
+
if (v.keys & existing.keys).empty?
|
|
277
|
+
existing.update(v)
|
|
262
278
|
else
|
|
263
279
|
raise NotImplementedError, 'Ruby does not allow same symbol operator with different values'
|
|
264
280
|
result['$and'] ||= []
|
|
@@ -266,26 +282,39 @@ module Mongoid
|
|
|
266
282
|
end
|
|
267
283
|
else
|
|
268
284
|
# The new value is a simple value.
|
|
269
|
-
#
|
|
270
|
-
#
|
|
271
|
-
#
|
|
272
|
-
#
|
|
273
|
-
|
|
285
|
+
# Transform the implicit equality to either $eq or $regexp
|
|
286
|
+
# depending on the type of the argument. See
|
|
287
|
+
# https://www.mongodb.com/docs/manual/reference/operator/query/eq/#std-label-eq-usage-examples
|
|
288
|
+
# for the description of relevant server behavior.
|
|
289
|
+
op = case v
|
|
290
|
+
when Regexp, BSON::Regexp::Raw
|
|
291
|
+
'$regex'
|
|
292
|
+
else
|
|
293
|
+
'$eq'
|
|
294
|
+
end
|
|
295
|
+
# If there isn't an $eq/$regex operator already in the
|
|
296
|
+
# query, transform the new value into an operator
|
|
297
|
+
# expression and add it to the existing hash. Otherwise
|
|
298
|
+
# add the new condition with $and to the top level.
|
|
299
|
+
if existing.key?(op)
|
|
274
300
|
raise NotImplementedError, 'Ruby does not allow same symbol operator with different values'
|
|
275
301
|
result['$and'] ||= []
|
|
276
302
|
result['$and'] << {k => v}
|
|
277
303
|
else
|
|
278
|
-
|
|
304
|
+
existing.update(op => v)
|
|
279
305
|
end
|
|
280
306
|
end
|
|
281
307
|
else
|
|
282
308
|
# Existing value is a simple value.
|
|
283
|
-
#
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
309
|
+
# See the notes above about transformations to $eq/$regex.
|
|
310
|
+
op = case existing
|
|
311
|
+
when Regexp, BSON::Regexp::Raw
|
|
312
|
+
'$regex'
|
|
313
|
+
else
|
|
314
|
+
'$eq'
|
|
315
|
+
end
|
|
316
|
+
if v.is_a?(Hash) && !v.key?(op)
|
|
317
|
+
result[k] = {op => existing}.update(v)
|
|
289
318
|
else
|
|
290
319
|
raise NotImplementedError, 'Ruby does not allow same symbol operator with different values'
|
|
291
320
|
result['$and'] ||= []
|
|
@@ -311,8 +340,6 @@ module Mongoid
|
|
|
311
340
|
# @param [ String ] operator The MongoDB operator.
|
|
312
341
|
#
|
|
313
342
|
# @return [ Mergeable ] The new mergeable.
|
|
314
|
-
#
|
|
315
|
-
# @since 1.0.0
|
|
316
343
|
def __override__(criterion, operator)
|
|
317
344
|
if criterion.is_a?(Selectable)
|
|
318
345
|
criterion = criterion.selector
|
|
@@ -339,8 +366,6 @@ module Mongoid
|
|
|
339
366
|
# @param [ String ] operator The MongoDB operator.
|
|
340
367
|
#
|
|
341
368
|
# @return [ Mergeable ] The new mergeable.
|
|
342
|
-
#
|
|
343
|
-
# @since 1.0.0
|
|
344
369
|
def __union__(criterion, operator)
|
|
345
370
|
with_strategy(:__union__, criterion, operator)
|
|
346
371
|
end
|
|
@@ -355,8 +380,6 @@ module Mongoid
|
|
|
355
380
|
# @param [ Symbol ] strategy The strategy to use.
|
|
356
381
|
#
|
|
357
382
|
# @return [ Mergeable ] The existing mergeable.
|
|
358
|
-
#
|
|
359
|
-
# @since 1.0.0
|
|
360
383
|
def use(strategy)
|
|
361
384
|
tap do |mergeable|
|
|
362
385
|
mergeable.strategy = strategy
|
|
@@ -375,8 +398,6 @@ module Mongoid
|
|
|
375
398
|
# @param [ String ] operator The MongoDB operator.
|
|
376
399
|
#
|
|
377
400
|
# @return [ Mergeable ] The cloned query.
|
|
378
|
-
#
|
|
379
|
-
# @since 1.0.0
|
|
380
401
|
def with_strategy(strategy, criterion, operator)
|
|
381
402
|
selection(criterion) do |selector, field, value|
|
|
382
403
|
selector.store(
|
|
@@ -397,8 +418,6 @@ module Mongoid
|
|
|
397
418
|
# @param [ Object ] value The value.
|
|
398
419
|
#
|
|
399
420
|
# @return [ Object ] The serialized value.
|
|
400
|
-
#
|
|
401
|
-
# @since 1.0.0
|
|
402
421
|
def prepare(field, operator, value)
|
|
403
422
|
unless operator =~ /exists|type|size/
|
|
404
423
|
value = value.__expand_complex__
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
module Mongoid
|
|
5
5
|
class Criteria
|
|
@@ -18,11 +18,9 @@ module Mongoid
|
|
|
18
18
|
# @example Add ascending sorting.
|
|
19
19
|
# optional.ascending(:first_name, :last_name)
|
|
20
20
|
#
|
|
21
|
-
# @param [
|
|
21
|
+
# @param [ Symbol... ] *fields The field(s) to sort.
|
|
22
22
|
#
|
|
23
23
|
# @return [ Optional ] The cloned optional.
|
|
24
|
-
#
|
|
25
|
-
# @since 1.0.0
|
|
26
24
|
def ascending(*fields)
|
|
27
25
|
sort_with_list(*fields, 1)
|
|
28
26
|
end
|
|
@@ -39,8 +37,6 @@ module Mongoid
|
|
|
39
37
|
# @param [ Integer ] value The batch size.
|
|
40
38
|
#
|
|
41
39
|
# @return [ Optional ] The cloned optional.
|
|
42
|
-
#
|
|
43
|
-
# @since 1.0.0
|
|
44
40
|
def batch_size(value = nil)
|
|
45
41
|
option(value) { |options| options.store(:batch_size, value) }
|
|
46
42
|
end
|
|
@@ -50,11 +46,9 @@ module Mongoid
|
|
|
50
46
|
# @example Add descending sorting.
|
|
51
47
|
# optional.descending(:first_name, :last_name)
|
|
52
48
|
#
|
|
53
|
-
# @param [
|
|
49
|
+
# @param [ Symbol... ] *fields The field(s) to sort.
|
|
54
50
|
#
|
|
55
51
|
# @return [ Optional ] The cloned optional.
|
|
56
|
-
#
|
|
57
|
-
# @since 1.0.0
|
|
58
52
|
def descending(*fields)
|
|
59
53
|
sort_with_list(*fields, -1)
|
|
60
54
|
end
|
|
@@ -70,8 +64,6 @@ module Mongoid
|
|
|
70
64
|
# @param [ Hash ] value The index hint.
|
|
71
65
|
#
|
|
72
66
|
# @return [ Optional ] The cloned optional.
|
|
73
|
-
#
|
|
74
|
-
# @since 1.0.0
|
|
75
67
|
def hint(value = nil)
|
|
76
68
|
option(value) { |options| options.store(:hint, value) }
|
|
77
69
|
end
|
|
@@ -84,8 +76,6 @@ module Mongoid
|
|
|
84
76
|
# @param [ Integer ] value The number of documents to return.
|
|
85
77
|
#
|
|
86
78
|
# @return [ Optional ] The cloned optional.
|
|
87
|
-
#
|
|
88
|
-
# @since 1.0.0
|
|
89
79
|
def limit(value = nil)
|
|
90
80
|
option(value) do |options, query|
|
|
91
81
|
val = value.to_i
|
|
@@ -103,8 +93,6 @@ module Mongoid
|
|
|
103
93
|
# @param [ Integer ] value The max number of documents to scan.
|
|
104
94
|
#
|
|
105
95
|
# @return [ Optional ] The cloned optional.
|
|
106
|
-
#
|
|
107
|
-
# @since 1.0.0
|
|
108
96
|
def max_scan(value = nil)
|
|
109
97
|
option(value) { |options| options.store(:max_scan, value) }
|
|
110
98
|
end
|
|
@@ -117,8 +105,6 @@ module Mongoid
|
|
|
117
105
|
# @param [ Integer ] value The max time in milliseconds for processing operations on a cursor.
|
|
118
106
|
#
|
|
119
107
|
# @return [ Optional ] The cloned optional.
|
|
120
|
-
#
|
|
121
|
-
# @since 6.0.0
|
|
122
108
|
def max_time_ms(value = nil)
|
|
123
109
|
option(value) { |options| options.store(:max_time_ms, value) }
|
|
124
110
|
end
|
|
@@ -129,8 +115,6 @@ module Mongoid
|
|
|
129
115
|
# optional.no_timeout
|
|
130
116
|
#
|
|
131
117
|
# @return [ Optional ] The cloned optional.
|
|
132
|
-
#
|
|
133
|
-
# @since 1.0.0
|
|
134
118
|
def no_timeout
|
|
135
119
|
clone.tap { |query| query.options.store(:timeout, false) }
|
|
136
120
|
end
|
|
@@ -140,11 +124,9 @@ module Mongoid
|
|
|
140
124
|
# @example Limit the results to the provided fields.
|
|
141
125
|
# optional.only(:name, :dob)
|
|
142
126
|
#
|
|
143
|
-
# @param [
|
|
127
|
+
# @param [ Symbol... ] *args The field(s) to return.
|
|
144
128
|
#
|
|
145
129
|
# @return [ Optional ] The cloned optional.
|
|
146
|
-
#
|
|
147
|
-
# @since 1.0.0
|
|
148
130
|
def only(*args)
|
|
149
131
|
args = args.flatten
|
|
150
132
|
option(*args) do |options|
|
|
@@ -182,11 +164,9 @@ module Mongoid
|
|
|
182
164
|
# @example Add sorting options via a string.
|
|
183
165
|
# optional.order_by("name ASC, dob DESC")
|
|
184
166
|
#
|
|
185
|
-
# @param [ Array
|
|
167
|
+
# @param [ [ Array | Hash | String ]... ] *spec The sorting specification.
|
|
186
168
|
#
|
|
187
169
|
# @return [ Optional ] The cloned optional.
|
|
188
|
-
#
|
|
189
|
-
# @since 1.0.0
|
|
190
170
|
def order_by(*spec)
|
|
191
171
|
option(spec) do |options, query|
|
|
192
172
|
spec.compact.each do |criterion|
|
|
@@ -205,11 +185,9 @@ module Mongoid
|
|
|
205
185
|
# @example Replace the ordering.
|
|
206
186
|
# optional.reorder(name: :asc)
|
|
207
187
|
#
|
|
208
|
-
# @param [ Array
|
|
188
|
+
# @param [ [ Array | Hash | String ]... ] *spec The sorting specification.
|
|
209
189
|
#
|
|
210
190
|
# @return [ Optional ] The cloned optional.
|
|
211
|
-
#
|
|
212
|
-
# @since 2.1.0
|
|
213
191
|
def reorder(*spec)
|
|
214
192
|
clone.tap do |query|
|
|
215
193
|
query.options.delete(:sort)
|
|
@@ -224,8 +202,6 @@ module Mongoid
|
|
|
224
202
|
# @param [ Integer ] value The number to skip.
|
|
225
203
|
#
|
|
226
204
|
# @return [ Optional ] The cloned optional.
|
|
227
|
-
#
|
|
228
|
-
# @since 1.0.0
|
|
229
205
|
def skip(value = nil)
|
|
230
206
|
option(value) do |options, query|
|
|
231
207
|
val = value.to_i
|
|
@@ -243,8 +219,6 @@ module Mongoid
|
|
|
243
219
|
# @param [ Hash ] criterion The slice options.
|
|
244
220
|
#
|
|
245
221
|
# @return [ Optional ] The cloned optional.
|
|
246
|
-
#
|
|
247
|
-
# @since 1.0.0
|
|
248
222
|
def slice(criterion = nil)
|
|
249
223
|
option(criterion) do |options|
|
|
250
224
|
options.__union__(
|
|
@@ -261,8 +235,6 @@ module Mongoid
|
|
|
261
235
|
# optional.snapshot
|
|
262
236
|
#
|
|
263
237
|
# @return [ Optional ] The cloned optional.
|
|
264
|
-
#
|
|
265
|
-
# @since 1.0.0
|
|
266
238
|
def snapshot
|
|
267
239
|
clone.tap do |query|
|
|
268
240
|
query.options.store(:snapshot, true)
|
|
@@ -274,11 +246,9 @@ module Mongoid
|
|
|
274
246
|
# @example Limit the results to the fields not provided.
|
|
275
247
|
# optional.without(:name, :dob)
|
|
276
248
|
#
|
|
277
|
-
# @param [
|
|
249
|
+
# @param [ Symbol... ] *args The field(s) to ignore.
|
|
278
250
|
#
|
|
279
251
|
# @return [ Optional ] The cloned optional.
|
|
280
|
-
#
|
|
281
|
-
# @since 1.0.0
|
|
282
252
|
def without(*args)
|
|
283
253
|
args = args.flatten
|
|
284
254
|
option(*args) do |options|
|
|
@@ -301,8 +271,6 @@ module Mongoid
|
|
|
301
271
|
# @param [ String ] comment The comment to be associated with the query.
|
|
302
272
|
#
|
|
303
273
|
# @return [ Optional ] The cloned optional.
|
|
304
|
-
#
|
|
305
|
-
# @since 2.2.0
|
|
306
274
|
def comment(comment = nil)
|
|
307
275
|
clone.tap do |query|
|
|
308
276
|
query.options.store(:comment, comment)
|
|
@@ -320,8 +288,6 @@ module Mongoid
|
|
|
320
288
|
# @param [ Symbol ] type The type of cursor to create.
|
|
321
289
|
#
|
|
322
290
|
# @return [ Optional ] The cloned optional.
|
|
323
|
-
#
|
|
324
|
-
# @since 2.2.0
|
|
325
291
|
def cursor_type(type)
|
|
326
292
|
clone.tap { |query| query.options.store(:cursor_type, type) }
|
|
327
293
|
end
|
|
@@ -334,8 +300,6 @@ module Mongoid
|
|
|
334
300
|
# @param [ Hash ] collation_doc The document describing the collation to use.
|
|
335
301
|
#
|
|
336
302
|
# @return [ Optional ] The cloned optional.
|
|
337
|
-
#
|
|
338
|
-
# @since 6.1.0
|
|
339
303
|
def collation(collation_doc)
|
|
340
304
|
clone.tap { |query| query.options.store(:collation, collation_doc) }
|
|
341
305
|
end
|
|
@@ -354,18 +318,10 @@ module Mongoid
|
|
|
354
318
|
# @param [ Integer ] direction The sort direction.
|
|
355
319
|
#
|
|
356
320
|
# @return [ Optional ] The cloned optional.
|
|
357
|
-
#
|
|
358
|
-
# @since 1.0.0
|
|
359
321
|
def add_sort_option(options, field, direction)
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
options.store(:sort, sorting)
|
|
364
|
-
else
|
|
365
|
-
sorting = (options[:sort] || {}).dup
|
|
366
|
-
sorting[field] = direction
|
|
367
|
-
options.store(:sort, sorting)
|
|
368
|
-
end
|
|
322
|
+
sorting = (options[:sort] || {}).dup
|
|
323
|
+
sorting[field] = direction
|
|
324
|
+
options.store(:sort, sorting)
|
|
369
325
|
end
|
|
370
326
|
|
|
371
327
|
# Take the provided criterion and store it as an option in the query
|
|
@@ -376,11 +332,9 @@ module Mongoid
|
|
|
376
332
|
# @example Store the option.
|
|
377
333
|
# optional.option({ skip: 10 })
|
|
378
334
|
#
|
|
379
|
-
# @param [
|
|
335
|
+
# @param [ Object... ] *args The options.
|
|
380
336
|
#
|
|
381
337
|
# @return [ Queryable ] The cloned queryable.
|
|
382
|
-
#
|
|
383
|
-
# @since 1.0.0
|
|
384
338
|
def option(*args)
|
|
385
339
|
clone.tap do |query|
|
|
386
340
|
unless args.compact.empty?
|
|
@@ -396,12 +350,10 @@ module Mongoid
|
|
|
396
350
|
# @example Add multiple sort options.
|
|
397
351
|
# optional.sort_with_list(:name, :dob, 1)
|
|
398
352
|
#
|
|
399
|
-
# @param [
|
|
353
|
+
# @param [ [ Symbol | String ]... ] *fields The field name(s).
|
|
400
354
|
# @param [ Integer ] direction The sort direction.
|
|
401
355
|
#
|
|
402
356
|
# @return [ Optional ] The cloned optional.
|
|
403
|
-
#
|
|
404
|
-
# @since 1.0.0
|
|
405
357
|
def sort_with_list(*fields, direction)
|
|
406
358
|
option(fields) do |options, query|
|
|
407
359
|
fields.flatten.compact.each do |field|
|
|
@@ -419,8 +371,6 @@ module Mongoid
|
|
|
419
371
|
# Optional.forwardables
|
|
420
372
|
#
|
|
421
373
|
# @return [ Array<Symbol> ] The names of the forwardable methods.
|
|
422
|
-
#
|
|
423
|
-
# @since 1.0.0
|
|
424
374
|
def forwardables
|
|
425
375
|
public_instance_methods(false) - [ :options, :options= ]
|
|
426
376
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
module Mongoid
|
|
5
5
|
class Criteria
|
|
@@ -15,8 +15,6 @@ module Mongoid
|
|
|
15
15
|
# options.fields
|
|
16
16
|
#
|
|
17
17
|
# @return [ Hash ] The fields options.
|
|
18
|
-
#
|
|
19
|
-
# @since 1.0.0
|
|
20
18
|
def fields
|
|
21
19
|
self[:fields]
|
|
22
20
|
end
|
|
@@ -27,8 +25,6 @@ module Mongoid
|
|
|
27
25
|
# options.limit
|
|
28
26
|
#
|
|
29
27
|
# @return [ Integer ] The limit option.
|
|
30
|
-
#
|
|
31
|
-
# @since 1.0.0
|
|
32
28
|
def limit
|
|
33
29
|
self[:limit]
|
|
34
30
|
end
|
|
@@ -39,8 +35,6 @@ module Mongoid
|
|
|
39
35
|
# options.skip
|
|
40
36
|
#
|
|
41
37
|
# @return [ Integer ] The skip option.
|
|
42
|
-
#
|
|
43
|
-
# @since 1.0.0
|
|
44
38
|
def skip
|
|
45
39
|
self[:skip]
|
|
46
40
|
end
|
|
@@ -51,8 +45,6 @@ module Mongoid
|
|
|
51
45
|
# options.sort
|
|
52
46
|
#
|
|
53
47
|
# @return [ Hash ] The sort options.
|
|
54
|
-
#
|
|
55
|
-
# @since 1.0.0
|
|
56
48
|
def sort
|
|
57
49
|
self[:sort]
|
|
58
50
|
end
|
|
@@ -63,12 +55,10 @@ module Mongoid
|
|
|
63
55
|
# @example Store a value in the options.
|
|
64
56
|
# options.store(:key, "testing")
|
|
65
57
|
#
|
|
66
|
-
# @param [ String
|
|
58
|
+
# @param [ String | Symbol ] key The name of the attribute.
|
|
67
59
|
# @param [ Object ] value The value to add.
|
|
68
60
|
#
|
|
69
61
|
# @return [ Object ] The stored object.
|
|
70
|
-
#
|
|
71
|
-
# @since 1.0.0
|
|
72
62
|
def store(key, value, localize = true)
|
|
73
63
|
super(key, evolve(value, localize))
|
|
74
64
|
end
|
|
@@ -80,8 +70,6 @@ module Mongoid
|
|
|
80
70
|
# options.to_pipeline
|
|
81
71
|
#
|
|
82
72
|
# @return [ Array<Hash> ] The options in pipeline form.
|
|
83
|
-
#
|
|
84
|
-
# @since 2.0.0
|
|
85
73
|
def to_pipeline
|
|
86
74
|
pipeline = []
|
|
87
75
|
pipeline.push({ "$skip" => skip }) if skip
|
|
@@ -96,10 +84,8 @@ module Mongoid
|
|
|
96
84
|
# options.__deep_copy__
|
|
97
85
|
#
|
|
98
86
|
# @return [ Options ] The copied options.
|
|
99
|
-
#
|
|
100
|
-
# @since 6.1.1
|
|
101
87
|
def __deep_copy__
|
|
102
|
-
self.class.new(aliases, serializers) do |copy|
|
|
88
|
+
self.class.new(aliases, serializers, associations, aliased_associations) do |copy|
|
|
103
89
|
each_pair do |key, value|
|
|
104
90
|
copy.merge!(key => value.__deep_copy__)
|
|
105
91
|
end
|
|
@@ -118,8 +104,6 @@ module Mongoid
|
|
|
118
104
|
# @param [ Object ] value The value to serialize.
|
|
119
105
|
#
|
|
120
106
|
# @return [ Object ] The serialized object.
|
|
121
|
-
#
|
|
122
|
-
# @since 1.0.0
|
|
123
107
|
def evolve(value, localize = true)
|
|
124
108
|
case value
|
|
125
109
|
when Hash
|
|
@@ -139,8 +123,6 @@ module Mongoid
|
|
|
139
123
|
# @param [ Hash ] value The hash to serialize.
|
|
140
124
|
#
|
|
141
125
|
# @return [ Object ] The serialized hash.
|
|
142
|
-
#
|
|
143
|
-
# @since 1.0.0
|
|
144
126
|
def evolve_hash(value, localize = true)
|
|
145
127
|
value.inject({}) do |hash, (field, _value)|
|
|
146
128
|
name, serializer = storage_pair(field)
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
module Mongoid
|
|
5
5
|
class Criteria
|
|
6
6
|
module Queryable
|
|
7
7
|
|
|
8
8
|
# Represents an aggregation pipeline.
|
|
9
|
-
#
|
|
10
|
-
# @since 2.0.0
|
|
11
9
|
class Pipeline < Array
|
|
12
10
|
|
|
13
11
|
# @attribute [r] aliases The field aliases.
|
|
@@ -20,8 +18,6 @@ module Mongoid
|
|
|
20
18
|
# pipeline.__deep_copy__
|
|
21
19
|
#
|
|
22
20
|
# @return [ Pipeline ] The cloned pipeline.
|
|
23
|
-
#
|
|
24
|
-
# @since 2.0.0
|
|
25
21
|
def __deep_copy__
|
|
26
22
|
self.class.new(aliases) do |copy|
|
|
27
23
|
each do |entry|
|
|
@@ -38,8 +34,6 @@ module Mongoid
|
|
|
38
34
|
# @param [ Hash ] entry The group entry.
|
|
39
35
|
#
|
|
40
36
|
# @return [ Pipeline ] The pipeline.
|
|
41
|
-
#
|
|
42
|
-
# @since 2.0.0
|
|
43
37
|
def group(entry)
|
|
44
38
|
push("$group" => evolve(entry.__expand_complex__))
|
|
45
39
|
end
|
|
@@ -51,8 +45,6 @@ module Mongoid
|
|
|
51
45
|
#
|
|
52
46
|
# @param [ Hash ] aliases A hash of mappings from aliases to the actual
|
|
53
47
|
# field names in the database.
|
|
54
|
-
#
|
|
55
|
-
# @since 2.0.0
|
|
56
48
|
def initialize(aliases = {})
|
|
57
49
|
@aliases = aliases
|
|
58
50
|
yield(self) if block_given?
|
|
@@ -76,12 +68,10 @@ module Mongoid
|
|
|
76
68
|
# pipeline.unwind(:field)
|
|
77
69
|
# pipeline.unwind(document)
|
|
78
70
|
#
|
|
79
|
-
# @param [ String
|
|
71
|
+
# @param [ String | Symbol | Hash ] field_or_doc A field name or a
|
|
80
72
|
# document.
|
|
81
73
|
#
|
|
82
74
|
# @return [ Pipeline ] The pipeline.
|
|
83
|
-
#
|
|
84
|
-
# @since 2.0.0
|
|
85
75
|
def unwind(field_or_doc)
|
|
86
76
|
unless field_or_doc.respond_to? :keys
|
|
87
77
|
normalized = field_or_doc.to_s
|
|
@@ -104,8 +94,6 @@ module Mongoid
|
|
|
104
94
|
# @param [ Hash ] entry The entry to evolve.
|
|
105
95
|
#
|
|
106
96
|
# @return [ Hash ] The evolved entry.
|
|
107
|
-
#
|
|
108
|
-
# @since 2.0.0
|
|
109
97
|
def evolve(entry)
|
|
110
98
|
aggregate = Selector.new(aliases)
|
|
111
99
|
entry.each_pair do |field, value|
|