mongoid 7.1.1 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +20 -20
- data/README.md +15 -8
- data/Rakefile +61 -5
- data/lib/config/locales/en.yml +162 -56
- data/lib/mongoid/association/accessors.rb +89 -40
- data/lib/mongoid/association/bindable.rb +50 -23
- data/lib/mongoid/association/builders.rb +5 -12
- data/lib/mongoid/association/constrainable.rb +1 -5
- data/lib/mongoid/association/depending.rb +5 -17
- data/lib/mongoid/association/eager_loadable.rb +29 -10
- data/lib/mongoid/association/embedded/batchable.rb +64 -52
- data/lib/mongoid/association/embedded/cyclic.rb +3 -12
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -5
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -16
- data/lib/mongoid/association/embedded/embedded_in.rb +4 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -7
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +110 -92
- data/lib/mongoid/association/embedded/embeds_many.rb +4 -34
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -8
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +50 -19
- data/lib/mongoid/association/embedded/embeds_one.rb +5 -31
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +27 -5
- data/lib/mongoid/association/many.rb +14 -27
- data/lib/mongoid/association/marshalable.rb +0 -5
- data/lib/mongoid/association/nested/many.rb +6 -16
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -13
- data/lib/mongoid/association/nested/one.rb +48 -23
- data/lib/mongoid/association/nested.rb +0 -3
- data/lib/mongoid/association/one.rb +2 -11
- data/lib/mongoid/association/options.rb +9 -42
- data/lib/mongoid/association/proxy.rb +22 -27
- data/lib/mongoid/association/referenced/auto_save.rb +6 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -8
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -19
- data/lib/mongoid/association/referenced/belongs_to.rb +11 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +12 -25
- data/lib/mongoid/association/referenced/eager.rb +5 -26
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +81 -51
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +17 -41
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +438 -461
- data/lib/mongoid/association/referenced/has_many/proxy.rb +58 -84
- data/lib/mongoid/association/referenced/has_many.rb +15 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +12 -5
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +7 -22
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -16
- data/lib/mongoid/association/referenced/has_one.rb +12 -35
- data/lib/mongoid/association/referenced/syncable.rb +4 -21
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +4 -5
- data/lib/mongoid/association/relatable.rb +46 -71
- data/lib/mongoid/association.rb +5 -22
- data/lib/mongoid/atomic/modifiers.rb +7 -54
- data/lib/mongoid/atomic/paths/embedded/many.rb +19 -5
- data/lib/mongoid/atomic/paths/embedded/one.rb +0 -5
- data/lib/mongoid/atomic/paths/embedded.rb +0 -3
- data/lib/mongoid/atomic/paths/root.rb +0 -5
- data/lib/mongoid/atomic/paths.rb +0 -1
- data/lib/mongoid/atomic.rb +40 -47
- data/lib/mongoid/attributes/dynamic.rb +5 -22
- data/lib/mongoid/attributes/nested.rb +6 -11
- data/lib/mongoid/attributes/processing.rb +11 -21
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -8
- data/lib/mongoid/attributes.rb +82 -88
- data/lib/mongoid/cacheable.rb +4 -9
- data/lib/mongoid/changeable.rb +148 -69
- data/lib/mongoid/clients/factory.rb +41 -17
- data/lib/mongoid/clients/options.rb +13 -14
- data/lib/mongoid/clients/sessions.rb +8 -11
- data/lib/mongoid/clients/storage_options.rb +7 -17
- data/lib/mongoid/clients/validators/storage.rb +3 -24
- data/lib/mongoid/clients/validators.rb +0 -1
- data/lib/mongoid/clients.rb +1 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +3 -7
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +28 -5
- data/lib/mongoid/config/options.rb +0 -11
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -23
- data/lib/mongoid/config/validators/option.rb +0 -3
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config.rb +183 -39
- data/lib/mongoid/contextual/aggregable/memory.rb +37 -26
- data/lib/mongoid/contextual/aggregable/mongo.rb +29 -32
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +7 -27
- data/lib/mongoid/contextual/command.rb +0 -5
- data/lib/mongoid/contextual/geo_near.rb +8 -41
- data/lib/mongoid/contextual/map_reduce.rb +2 -33
- data/lib/mongoid/contextual/memory.rb +383 -79
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +636 -283
- data/lib/mongoid/contextual/none.rb +262 -31
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +14 -7
- data/lib/mongoid/copyable.rb +39 -16
- data/lib/mongoid/criteria/findable.rb +9 -19
- data/lib/mongoid/criteria/includable.rb +27 -31
- data/lib/mongoid/criteria/inspectable.rb +0 -3
- data/lib/mongoid/criteria/marshalable.rb +10 -7
- data/lib/mongoid/criteria/modifiable.rb +2 -20
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +1 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -25
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -40
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -7
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -6
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -40
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -20
- data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +46 -16
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -18
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -31
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +16 -6
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -5
- data/lib/mongoid/criteria/queryable/key.rb +6 -19
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +123 -38
- data/lib/mongoid/criteria/queryable/optional.rb +11 -62
- data/lib/mongoid/criteria/queryable/options.rb +2 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -14
- data/lib/mongoid/criteria/queryable/selectable.rb +138 -125
- data/lib/mongoid/criteria/queryable/selector.rb +94 -30
- data/lib/mongoid/criteria/queryable/smash.rb +40 -18
- data/lib/mongoid/criteria/queryable/storable.rb +14 -10
- data/lib/mongoid/criteria/queryable.rb +11 -13
- data/lib/mongoid/criteria/scopable.rb +27 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +88 -108
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +149 -99
- data/lib/mongoid/equality.rb +32 -16
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/callback.rb +0 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
- data/lib/mongoid/errors/delete_restriction.rb +8 -12
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
- data/lib/mongoid/errors/document_not_found.rb +33 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +0 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +0 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +0 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_includes.rb +0 -3
- data/lib/mongoid/errors/invalid_index.rb +0 -3
- data/lib/mongoid/errors/invalid_options.rb +0 -3
- data/lib/mongoid/errors/invalid_path.rb +0 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +0 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -8
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -4
- data/lib/mongoid/errors/invalid_scope.rb +0 -3
- data/lib/mongoid/errors/invalid_session_use.rb +1 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +0 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +0 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +0 -3
- data/lib/mongoid/errors/mixed_relations.rb +0 -3
- data/lib/mongoid/errors/mongoid_error.rb +4 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +2 -5
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +0 -3
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +0 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +0 -3
- data/lib/mongoid/errors/no_metadata.rb +0 -3
- data/lib/mongoid/errors/no_parent.rb +0 -3
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -6
- data/lib/mongoid/errors/scope_overwrite.rb +0 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -2
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +0 -3
- data/lib/mongoid/errors/unsaved_document.rb +1 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +0 -3
- data/lib/mongoid/errors/validations.rb +0 -1
- data/lib/mongoid/errors.rb +15 -4
- data/lib/mongoid/evolvable.rb +1 -4
- data/lib/mongoid/extensions/array.rb +12 -36
- data/lib/mongoid/extensions/big_decimal.rb +33 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -6
- data/lib/mongoid/extensions/date.rb +26 -29
- data/lib/mongoid/extensions/date_time.rb +1 -10
- data/lib/mongoid/extensions/decimal128.rb +0 -5
- data/lib/mongoid/extensions/false_class.rb +3 -8
- data/lib/mongoid/extensions/float.rb +7 -11
- data/lib/mongoid/extensions/hash.rb +19 -37
- data/lib/mongoid/extensions/integer.rb +7 -13
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -5
- data/lib/mongoid/extensions/object.rb +11 -48
- data/lib/mongoid/extensions/object_id.rb +0 -7
- data/lib/mongoid/extensions/range.rb +40 -20
- data/lib/mongoid/extensions/regexp.rb +12 -8
- data/lib/mongoid/extensions/set.rb +11 -11
- data/lib/mongoid/extensions/string.rb +12 -52
- data/lib/mongoid/extensions/symbol.rb +4 -22
- data/lib/mongoid/extensions/time.rb +28 -26
- data/lib/mongoid/extensions/time_with_zone.rb +14 -11
- data/lib/mongoid/extensions/true_class.rb +3 -8
- data/lib/mongoid/extensions.rb +17 -3
- data/lib/mongoid/factory.rb +80 -16
- data/lib/mongoid/fields/foreign_key.rb +11 -25
- data/lib/mongoid/fields/localized.rb +19 -15
- data/lib/mongoid/fields/standard.rb +17 -40
- data/lib/mongoid/fields/validators/macro.rb +25 -24
- data/lib/mongoid/fields/validators.rb +0 -1
- data/lib/mongoid/fields.rb +346 -75
- data/lib/mongoid/findable.rb +107 -31
- data/lib/mongoid/indexable/specification.rb +2 -17
- data/lib/mongoid/indexable/validators/options.rb +6 -9
- data/lib/mongoid/indexable.rb +3 -20
- data/lib/mongoid/inspectable.rb +2 -11
- data/lib/mongoid/interceptable.rb +79 -41
- data/lib/mongoid/loggable.rb +0 -9
- data/lib/mongoid/matchable.rb +2 -155
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +130 -0
- data/lib/mongoid/persistable/creatable.rb +20 -29
- data/lib/mongoid/persistable/deletable.rb +4 -22
- data/lib/mongoid/persistable/destroyable.rb +9 -10
- data/lib/mongoid/persistable/incrementable.rb +0 -5
- data/lib/mongoid/persistable/logical.rb +0 -5
- data/lib/mongoid/persistable/poppable.rb +0 -5
- data/lib/mongoid/persistable/pullable.rb +0 -7
- data/lib/mongoid/persistable/pushable.rb +4 -8
- data/lib/mongoid/persistable/renamable.rb +0 -5
- data/lib/mongoid/persistable/savable.rb +13 -8
- data/lib/mongoid/persistable/settable.rb +0 -5
- data/lib/mongoid/persistable/unsettable.rb +2 -7
- data/lib/mongoid/persistable/updatable.rb +96 -29
- data/lib/mongoid/persistable/upsertable.rb +20 -8
- data/lib/mongoid/persistable.rb +6 -26
- data/lib/mongoid/persistence_context.rb +71 -43
- data/lib/mongoid/positional.rb +0 -5
- data/lib/mongoid/query_cache.rb +16 -236
- data/lib/mongoid/railtie.rb +0 -15
- data/lib/mongoid/railties/controller_runtime.rb +1 -2
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +17 -20
- data/lib/mongoid/scopable.rb +32 -56
- data/lib/mongoid/selectable.rb +5 -17
- data/lib/mongoid/serializable.rb +11 -22
- data/lib/mongoid/shardable.rb +49 -16
- data/lib/mongoid/stateful.rb +57 -19
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +59 -11
- data/lib/mongoid/threaded/lifecycle.rb +5 -26
- data/lib/mongoid/threaded.rb +42 -67
- data/lib/mongoid/timestamps/created/short.rb +0 -1
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +0 -7
- data/lib/mongoid/timestamps/updated/short.rb +0 -1
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +0 -1
- data/lib/mongoid/touchable.rb +34 -13
- data/lib/mongoid/traversable.rb +181 -59
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +1 -4
- data/lib/mongoid/validatable/format.rb +0 -1
- data/lib/mongoid/validatable/length.rb +0 -1
- data/lib/mongoid/validatable/localizable.rb +1 -4
- data/lib/mongoid/validatable/macros.rb +5 -14
- data/lib/mongoid/validatable/presence.rb +6 -13
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +26 -40
- data/lib/mongoid/validatable.rb +9 -27
- data/lib/mongoid/version.rb +1 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +42 -18
- data/lib/rails/generators/mongoid/config/config_generator.rb +8 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -6
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +0 -1
- data/lib/rails/mongoid.rb +0 -3
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +16 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +345 -0
- data/spec/integration/associations/belongs_to_spec.rb +18 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +163 -1
- data/spec/integration/associations/embeds_many_spec.rb +219 -0
- data/spec/integration/associations/embeds_one_spec.rb +41 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +0 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +192 -0
- data/spec/integration/callbacks_spec.rb +584 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +51 -0
- data/spec/integration/criteria/logical_spec.rb +43 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -19
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +130 -45
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -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 +41 -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 +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +20 -5
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +25 -9
- data/spec/mongoid/association/accessors_spec.rb +282 -78
- data/spec/mongoid/association/auto_save_spec.rb +72 -34
- data/spec/mongoid/association/builders_spec.rb +1 -2
- data/spec/mongoid/association/constrainable_spec.rb +0 -1
- data/spec/mongoid/association/counter_cache_spec.rb +33 -34
- data/spec/mongoid/association/depending_spec.rb +429 -339
- data/spec/mongoid/association/eager_spec.rb +6 -6
- data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -2
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +150 -14
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +704 -198
- data/spec/mongoid/association/embedded/embeds_many_models.rb +194 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -1
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +78 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +36 -24
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +20 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -3
- data/spec/mongoid/association/macros_spec.rb +9 -10
- data/spec/mongoid/association/nested/many_spec.rb +0 -1
- data/spec/mongoid/association/nested/one_spec.rb +16 -13
- data/spec/mongoid/association/options_spec.rb +0 -1
- data/spec/mongoid/association/polymorphic_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +109 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +112 -59
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +20 -1
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +26 -22
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +523 -372
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +56 -3
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +130 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +413 -130
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +857 -503
- data/spec/mongoid/association/referenced/has_many_models.rb +59 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +46 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -10
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +133 -28
- data/spec/mongoid/association/referenced/has_one_models.rb +63 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one_spec.rb +22 -2
- data/spec/mongoid/association/reflections_spec.rb +0 -1
- data/spec/mongoid/association/syncable_spec.rb +46 -33
- data/spec/mongoid/association_spec.rb +0 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
- data/spec/mongoid/atomic/paths_spec.rb +91 -13
- data/spec/mongoid/atomic_spec.rb +51 -7
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +147 -79
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -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 +40 -0
- data/spec/mongoid/attributes/readonly_spec.rb +22 -23
- data/spec/mongoid/attributes_spec.rb +888 -62
- data/spec/mongoid/cacheable_spec.rb +4 -5
- data/spec/mongoid/changeable_spec.rb +464 -73
- data/spec/mongoid/clients/factory_spec.rb +91 -9
- data/spec/mongoid/clients/options_spec.rb +27 -19
- data/spec/mongoid/clients/sessions_spec.rb +27 -67
- data/spec/mongoid/clients/transactions_spec.rb +69 -35
- data/spec/mongoid/clients_spec.rb +187 -24
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +0 -1
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +124 -9
- data/spec/mongoid/config/options_spec.rb +0 -1
- data/spec/mongoid/config_spec.rb +465 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +431 -154
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +120 -21
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +148 -86
- data/spec/mongoid/contextual/geo_near_spec.rb +28 -20
- data/spec/mongoid/contextual/map_reduce_spec.rb +20 -20
- data/spec/mongoid/contextual/memory_spec.rb +1826 -304
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3501 -1272
- data/spec/mongoid/contextual/none_spec.rb +78 -68
- data/spec/mongoid/copyable_spec.rb +657 -37
- data/spec/mongoid/copyable_spec_models.rb +28 -1
- data/spec/mongoid/criteria/findable_spec.rb +109 -234
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +37 -38
- data/spec/mongoid/criteria/options_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -74
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -20
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -27
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -16
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -8
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +5 -71
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +30 -8
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +39 -2
- data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +143 -13
- data/spec/mongoid/criteria/queryable/optional_spec.rb +16 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1186 -195
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +307 -705
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -4
- data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
- data/spec/mongoid/criteria/scopable_spec.rb +127 -1
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1267 -1739
- data/spec/mongoid/document_fields_spec.rb +179 -5
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +51 -1
- data/spec/mongoid/document_spec.rb +151 -88
- data/spec/mongoid/equality_spec.rb +142 -42
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
- data/spec/mongoid/errors/callback_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +2 -3
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +5 -6
- data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -9
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +2 -3
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -4
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -4
- data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -4
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
- data/spec/mongoid/errors/no_parent_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -3
- data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -2
- data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
- data/spec/mongoid/errors/validations_spec.rb +0 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -213
- data/spec/mongoid/extensions/binary_spec.rb +44 -10
- data/spec/mongoid/extensions/boolean_spec.rb +68 -83
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -4
- data/spec/mongoid/extensions/date_spec.rb +71 -2
- data/spec/mongoid/extensions/date_time_spec.rb +15 -10
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
- data/spec/mongoid/extensions/false_class_spec.rb +1 -2
- data/spec/mongoid/extensions/float_spec.rb +53 -75
- data/spec/mongoid/extensions/hash_spec.rb +30 -1
- data/spec/mongoid/extensions/integer_spec.rb +50 -65
- data/spec/mongoid/extensions/module_spec.rb +0 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/extensions/object_id_spec.rb +0 -1
- data/spec/mongoid/extensions/object_spec.rb +0 -1
- data/spec/mongoid/extensions/range_spec.rb +255 -55
- data/spec/mongoid/extensions/regexp_spec.rb +58 -34
- data/spec/mongoid/extensions/set_spec.rb +106 -1
- data/spec/mongoid/extensions/string_spec.rb +58 -31
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +18 -26
- data/spec/mongoid/extensions/time_spec.rb +639 -107
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -84
- data/spec/mongoid/extensions/true_class_spec.rb +1 -2
- data/spec/mongoid/extensions_spec.rb +14 -3
- data/spec/mongoid/factory_spec.rb +323 -30
- data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
- data/spec/mongoid/fields/localized_spec.rb +84 -42
- data/spec/mongoid/fields/standard_spec.rb +0 -1
- data/spec/mongoid/fields_spec.rb +855 -118
- data/spec/mongoid/findable_spec.rb +518 -65
- data/spec/mongoid/indexable/specification_spec.rb +2 -3
- data/spec/mongoid/indexable_spec.rb +85 -33
- data/spec/mongoid/inspectable_spec.rb +37 -3
- data/spec/mongoid/interceptable_spec.rb +702 -104
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/loggable_spec.rb +0 -1
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +36 -0
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -30
- data/spec/mongoid/persistable/deletable_spec.rb +298 -19
- data/spec/mongoid/persistable/destroyable_spec.rb +226 -19
- data/spec/mongoid/persistable/incrementable_spec.rb +45 -9
- data/spec/mongoid/persistable/logical_spec.rb +41 -5
- data/spec/mongoid/persistable/poppable_spec.rb +40 -5
- data/spec/mongoid/persistable/pullable_spec.rb +80 -9
- data/spec/mongoid/persistable/pushable_spec.rb +80 -9
- data/spec/mongoid/persistable/renamable_spec.rb +39 -4
- data/spec/mongoid/persistable/savable_spec.rb +282 -26
- data/spec/mongoid/persistable/settable_spec.rb +76 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +40 -5
- data/spec/mongoid/persistable/updatable_spec.rb +61 -50
- data/spec/mongoid/persistable/upsertable_spec.rb +91 -4
- data/spec/mongoid/persistable_spec.rb +3 -4
- data/spec/mongoid/persistence_context_spec.rb +57 -59
- data/spec/mongoid/positional_spec.rb +0 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +7 -5
- data/spec/mongoid/query_cache_spec.rb +424 -68
- data/spec/mongoid/relations/proxy_spec.rb +7 -8
- data/spec/mongoid/reloadable_spec.rb +355 -27
- data/spec/mongoid/scopable_spec.rb +191 -39
- data/spec/mongoid/selectable_spec.rb +6 -7
- data/spec/mongoid/serializable_spec.rb +35 -39
- data/spec/mongoid/shardable_models.rb +15 -1
- data/spec/mongoid/shardable_spec.rb +181 -32
- data/spec/mongoid/stateful_spec.rb +151 -10
- data/spec/mongoid/tasks/database_rake_spec.rb +87 -14
- data/spec/mongoid/tasks/database_spec.rb +128 -2
- data/spec/mongoid/threaded_spec.rb +2 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
- data/spec/mongoid/timestamps/created_spec.rb +1 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
- data/spec/mongoid/timestamps/updated_spec.rb +3 -4
- data/spec/mongoid/timestamps_spec.rb +398 -11
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +525 -36
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1143 -2
- data/spec/mongoid/validatable/associated_spec.rb +0 -1
- data/spec/mongoid/validatable/format_spec.rb +0 -1
- data/spec/mongoid/validatable/length_spec.rb +0 -1
- data/spec/mongoid/validatable/numericality_spec.rb +0 -1
- data/spec/mongoid/validatable/presence_spec.rb +26 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +125 -99
- data/spec/mongoid/validatable_spec.rb +3 -4
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +35 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -3
- data/spec/rails/mongoid_spec.rb +4 -17
- data/spec/shared/LICENSE +20 -0
- 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/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +298 -0
- 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 +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
- 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 +179 -0
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +321 -0
- 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 +74 -0
- data/spec/shared/shlib/server.sh +416 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +24 -54
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +34 -197
- data/spec/support/expectations.rb +0 -1
- data/spec/support/helpers.rb +1 -1
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +109 -1
- data/spec/{app → support}/models/account.rb +1 -2
- data/spec/{app → support}/models/acolyte.rb +0 -1
- data/spec/{app → support}/models/actor.rb +1 -2
- data/spec/{app → support}/models/actress.rb +0 -1
- data/spec/{app → support}/models/address.rb +4 -1
- data/spec/{app → support}/models/address_component.rb +0 -1
- data/spec/{app → support}/models/address_number.rb +0 -1
- data/spec/{app → support}/models/agency.rb +0 -1
- data/spec/{app → support}/models/agent.rb +0 -1
- data/spec/{app → support}/models/album.rb +0 -1
- data/spec/{app → support}/models/alert.rb +0 -1
- data/spec/{app → support}/models/animal.rb +0 -1
- data/spec/{app → support}/models/answer.rb +0 -1
- data/spec/{app → support}/models/appointment.rb +0 -1
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/array_field.rb +0 -1
- data/spec/{app → support}/models/article.rb +0 -1
- data/spec/{app → support}/models/artist.rb +2 -2
- data/spec/{app → support}/models/artwork.rb +0 -1
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +0 -1
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +0 -1
- data/spec/{app → support}/models/baby.rb +0 -1
- data/spec/{app → support}/models/band.rb +8 -1
- data/spec/{app → support}/models/bar.rb +0 -1
- data/spec/{app → support}/models/basic.rb +0 -1
- data/spec/{app → support}/models/bed.rb +0 -1
- data/spec/{app → support}/models/big_palette.rb +0 -1
- data/spec/{app → support}/models/birthday.rb +0 -1
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +0 -1
- data/spec/{app → support}/models/book.rb +1 -1
- data/spec/{app → support}/models/breed.rb +0 -1
- data/spec/{app → support}/models/browser.rb +1 -2
- data/spec/{app → support}/models/building.rb +2 -1
- data/spec/{app → support}/models/building_address.rb +0 -1
- data/spec/{app → support}/models/bus.rb +0 -1
- data/spec/{app → support}/models/business.rb +0 -1
- data/spec/{app → support}/models/callback_test.rb +0 -1
- data/spec/{app → support}/models/canvas.rb +1 -2
- data/spec/{app → support}/models/car.rb +0 -1
- data/spec/{app → support}/models/cat.rb +0 -1
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +0 -1
- data/spec/{app → support}/models/child.rb +0 -1
- data/spec/{app → support}/models/child_doc.rb +3 -4
- data/spec/{app → support}/models/church.rb +0 -1
- data/spec/{app → support}/models/circle.rb +0 -1
- data/spec/{app → support}/models/circuit.rb +0 -1
- data/spec/{app → support}/models/circus.rb +3 -1
- data/spec/{app → support}/models/code.rb +2 -1
- data/spec/{app → support}/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +0 -1
- data/spec/{app → support}/models/company.rb +0 -1
- data/spec/{app → support}/models/consumption_period.rb +0 -1
- data/spec/{app → support}/models/contextable_item.rb +0 -1
- data/spec/{app → support}/models/contractor.rb +0 -1
- data/spec/{app → support}/models/cookie.rb +0 -1
- data/spec/{app → support}/models/country_code.rb +2 -1
- data/spec/{app → support}/models/courier_job.rb +0 -1
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +0 -1
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +0 -1
- data/spec/{app → support}/models/dictionary.rb +6 -1
- data/spec/{app → support}/models/division.rb +0 -1
- data/spec/{app → support}/models/doctor.rb +0 -1
- data/spec/{app → support}/models/dog.rb +0 -1
- data/spec/{app → support}/models/dokument.rb +0 -1
- data/spec/{app → support}/models/draft.rb +0 -1
- data/spec/{app → support}/models/dragon.rb +0 -1
- data/spec/{app → support}/models/driver.rb +1 -2
- data/spec/{app → support}/models/drug.rb +0 -1
- data/spec/{app → support}/models/dungeon.rb +0 -1
- data/spec/{app → support}/models/edit.rb +0 -1
- data/spec/{app → support}/models/email.rb +0 -1
- data/spec/{app → support}/models/employer.rb +0 -1
- data/spec/{app → support}/models/entry.rb +0 -1
- data/spec/{app → support}/models/eraser.rb +0 -1
- data/spec/{app → support}/models/even.rb +0 -1
- data/spec/{app → support}/models/event.rb +0 -1
- data/spec/{app → support}/models/exhibition.rb +0 -1
- data/spec/{app → support}/models/exhibitor.rb +0 -1
- data/spec/{app → support}/models/explosion.rb +0 -1
- data/spec/{app → support}/models/eye.rb +0 -1
- data/spec/{app → support}/models/eye_bowl.rb +0 -1
- data/spec/{app → support}/models/face.rb +0 -1
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +0 -1
- data/spec/{app → support}/models/filesystem.rb +0 -1
- data/spec/{app → support}/models/fire_hydrant.rb +0 -1
- data/spec/{app → support}/models/firefox.rb +0 -1
- data/spec/{app → support}/models/fish.rb +0 -1
- data/spec/{app → support}/models/folder.rb +0 -1
- data/spec/{app → support}/models/folder_item.rb +0 -1
- data/spec/{app → support}/models/fruits.rb +0 -1
- data/spec/{app → support}/models/game.rb +0 -1
- data/spec/{app → support}/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +0 -1
- data/spec/{app → support}/models/house.rb +0 -1
- data/spec/{app → support}/models/html_writer.rb +0 -1
- data/spec/{app → support}/models/id_key.rb +0 -1
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +0 -1
- data/spec/{app → support}/models/implant.rb +9 -1
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +1 -2
- data/spec/{app → support}/models/jar.rb +0 -1
- data/spec/{app → support}/models/kaleidoscope.rb +0 -1
- data/spec/{app → support}/models/kangaroo.rb +0 -1
- data/spec/{app → support}/models/label.rb +4 -2
- data/spec/{app → support}/models/language.rb +0 -1
- data/spec/{app → support}/models/lat_lng.rb +0 -1
- data/spec/{app → support}/models/league.rb +0 -1
- data/spec/{app → support}/models/learner.rb +0 -1
- data/spec/{app → support}/models/line_item.rb +0 -1
- data/spec/{app → support}/models/location.rb +0 -1
- data/spec/{app → support}/models/login.rb +0 -1
- data/spec/{app → support}/models/manufacturer.rb +0 -1
- data/spec/{app → support}/models/meat.rb +0 -1
- data/spec/{app → support}/models/membership.rb +1 -1
- data/spec/{app → support}/models/message.rb +0 -1
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +0 -1
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +0 -1
- data/spec/{app → support}/models/my_hash.rb +0 -1
- data/spec/{app → support}/models/name.rb +0 -1
- data/spec/{app → support}/models/name_only.rb +0 -1
- data/spec/{app → support}/models/node.rb +0 -1
- data/spec/{app → support}/models/note.rb +0 -1
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +0 -1
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +1 -2
- data/spec/{app → support}/models/ordered_preference.rb +0 -1
- data/spec/{app → support}/models/oscar.rb +0 -1
- data/spec/{app → support}/models/other_owner_object.rb +0 -1
- data/spec/{app → support}/models/override.rb +0 -1
- data/spec/{app → support}/models/ownable.rb +0 -1
- data/spec/{app → support}/models/owner.rb +2 -1
- data/spec/{app → support}/models/pack.rb +0 -1
- data/spec/{app → support}/models/page.rb +0 -1
- data/spec/{app → support}/models/page_question.rb +0 -1
- data/spec/{app → support}/models/palette.rb +1 -2
- data/spec/{app → support}/models/parent.rb +0 -1
- data/spec/{app → support}/models/parent_doc.rb +0 -1
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +0 -1
- data/spec/{app → support}/models/pdf_writer.rb +0 -1
- data/spec/{app → support}/models/pencil.rb +0 -1
- data/spec/{app → support}/models/person.rb +20 -2
- data/spec/{app → support}/models/pet.rb +0 -1
- data/spec/{app → support}/models/pet_owner.rb +0 -1
- data/spec/{app → support}/models/phone.rb +3 -2
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +0 -1
- data/spec/{app → support}/models/player.rb +2 -1
- data/spec/{app → support}/models/post.rb +0 -1
- data/spec/{app → support}/models/post_genre.rb +0 -1
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +0 -1
- data/spec/{app → support}/models/princess.rb +0 -1
- data/spec/{app → support}/models/product.rb +1 -1
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -1
- data/spec/{app → support}/models/pub.rb +0 -1
- data/spec/{app → support}/models/publication/encyclopedia.rb +0 -1
- data/spec/{app → support}/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +0 -1
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +0 -1
- data/spec/{app → support}/models/quiz.rb +0 -1
- data/spec/{app → support}/models/rating.rb +0 -1
- data/spec/{app → support}/models/record.rb +0 -1
- data/spec/{app → support}/models/registry.rb +1 -1
- data/spec/{app → support}/models/role.rb +0 -1
- data/spec/{app → support}/models/root_category.rb +0 -1
- data/spec/{app → support}/models/sandwich.rb +0 -1
- data/spec/{app → support}/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +14 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -3
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +0 -1
- data/spec/{app → support}/models/series.rb +1 -1
- data/spec/{app → support}/models/server.rb +0 -1
- data/spec/{app → support}/models/service.rb +0 -1
- data/spec/{app → support}/models/shape.rb +2 -3
- data/spec/{app → support}/models/shelf.rb +0 -1
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -1
- data/spec/{app → support}/models/shipping_container.rb +0 -1
- data/spec/{app → support}/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +0 -1
- data/spec/{app → support}/models/short_agent.rb +0 -1
- data/spec/{app → support}/models/short_quiz.rb +0 -1
- data/spec/{app → support}/models/simple.rb +0 -1
- data/spec/{app → support}/models/slave.rb +0 -1
- data/spec/{app → support}/models/song.rb +0 -1
- data/spec/{app → support}/models/sound.rb +0 -1
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +0 -1
- data/spec/{app → support}/models/staff.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -1
- data/spec/{app → support}/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +0 -1
- data/spec/{app → support}/models/subscription.rb +0 -1
- data/spec/{app → support}/models/survey.rb +0 -1
- data/spec/{app → support}/models/symptom.rb +0 -1
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -1
- data/spec/{app → support}/models/target.rb +0 -1
- data/spec/{app → support}/models/template.rb +0 -1
- data/spec/{app → support}/models/thing.rb +0 -1
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +0 -1
- data/spec/{app → support}/models/tool.rb +2 -3
- data/spec/{app → support}/models/topping.rb +0 -1
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +0 -1
- data/spec/{app → support}/models/translation.rb +0 -1
- data/spec/{app → support}/models/tree.rb +0 -1
- data/spec/{app → support}/models/truck.rb +2 -1
- data/spec/{app → support}/models/updatable.rb +0 -1
- data/spec/{app → support}/models/user.rb +0 -1
- data/spec/{app → support}/models/user_account.rb +0 -1
- data/spec/{app → support}/models/validation_callback.rb +0 -1
- data/spec/{app → support}/models/vehicle.rb +7 -3
- data/spec/{app → support}/models/version.rb +0 -1
- data/spec/{app → support}/models/vertex.rb +0 -1
- data/spec/{app → support}/models/vet_visit.rb +0 -1
- data/spec/{app → support}/models/video.rb +0 -1
- data/spec/{app → support}/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +1 -1
- data/spec/{app → support}/models/word.rb +0 -1
- data/spec/{app → support}/models/word_origin.rb +0 -1
- data/spec/{app → support}/models/writer.rb +2 -3
- 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 +0 -1
- data/spec/support/spec_config.rb +28 -6
- data.tar.gz.sig +0 -0
- metadata +1216 -799
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -26
- data/lib/mongoid/errors/invalid_value.rb +0 -18
- data/lib/mongoid/matchable/all.rb +0 -30
- data/lib/mongoid/matchable/and.rb +0 -32
- data/lib/mongoid/matchable/default.rb +0 -121
- data/lib/mongoid/matchable/elem_match.rb +0 -36
- data/lib/mongoid/matchable/eq.rb +0 -23
- data/lib/mongoid/matchable/exists.rb +0 -25
- data/lib/mongoid/matchable/gt.rb +0 -25
- data/lib/mongoid/matchable/gte.rb +0 -25
- data/lib/mongoid/matchable/in.rb +0 -26
- data/lib/mongoid/matchable/lt.rb +0 -25
- data/lib/mongoid/matchable/lte.rb +0 -25
- data/lib/mongoid/matchable/ne.rb +0 -23
- data/lib/mongoid/matchable/nin.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -38
- data/lib/mongoid/matchable/or.rb +0 -35
- data/lib/mongoid/matchable/regexp.rb +0 -30
- data/lib/mongoid/matchable/size.rb +0 -23
- data/lib/support/ruby_version.rb +0 -29
- data/spec/app/models/augmentation.rb +0 -14
- data/spec/app/models/coding.rb +0 -4
- data/spec/app/models/passport.rb +0 -8
- data/spec/app/models/powerup.rb +0 -14
- data/spec/app/models/publication.rb +0 -5
- data/spec/app/models/weapon.rb +0 -14
- 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/matchable/all_spec.rb +0 -34
- data/spec/mongoid/matchable/and_spec.rb +0 -190
- data/spec/mongoid/matchable/default_spec.rb +0 -140
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
- data/spec/mongoid/matchable/eq_spec.rb +0 -49
- data/spec/mongoid/matchable/exists_spec.rb +0 -60
- data/spec/mongoid/matchable/gt_spec.rb +0 -89
- data/spec/mongoid/matchable/gte_spec.rb +0 -87
- data/spec/mongoid/matchable/in_spec.rb +0 -52
- data/spec/mongoid/matchable/lt_spec.rb +0 -88
- data/spec/mongoid/matchable/lte_spec.rb +0 -88
- data/spec/mongoid/matchable/ne_spec.rb +0 -49
- data/spec/mongoid/matchable/nin_spec.rb +0 -51
- data/spec/mongoid/matchable/nor_spec.rb +0 -210
- data/spec/mongoid/matchable/or_spec.rb +0 -134
- data/spec/mongoid/matchable/regexp_spec.rb +0 -62
- data/spec/mongoid/matchable/size_spec.rb +0 -28
- data/spec/mongoid/matchable_spec.rb +0 -856
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/lite_constraints.rb +0 -22
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
class Criteria
|
|
@@ -12,18 +11,12 @@ module Mongoid
|
|
|
12
11
|
extend Macroable
|
|
13
12
|
|
|
14
13
|
# Constant for a LineString $geometry.
|
|
15
|
-
#
|
|
16
|
-
# @since 2.0.0
|
|
17
14
|
LINE_STRING = "LineString"
|
|
18
15
|
|
|
19
16
|
# Constant for a Point $geometry.
|
|
20
|
-
#
|
|
21
|
-
# @since 2.0.0
|
|
22
17
|
POINT = "Point"
|
|
23
18
|
|
|
24
19
|
# Constant for a Polygon $geometry.
|
|
25
|
-
#
|
|
26
|
-
# @since 2.0.0
|
|
27
20
|
POLYGON = "Polygon"
|
|
28
21
|
|
|
29
22
|
# @attribute [rw] negating If the next expression is negated.
|
|
@@ -38,11 +31,9 @@ module Mongoid
|
|
|
38
31
|
# @example Execute an $all in a where query.
|
|
39
32
|
# selectable.where(:field.all => [ 1, 2 ])
|
|
40
33
|
#
|
|
41
|
-
# @param [ Hash ]
|
|
34
|
+
# @param [ Hash... ] *criteria The key value pair(s) for $all matching.
|
|
42
35
|
#
|
|
43
36
|
# @return [ Selectable ] The cloned selectable.
|
|
44
|
-
#
|
|
45
|
-
# @since 1.0.0
|
|
46
37
|
def all(*criteria)
|
|
47
38
|
if criteria.empty?
|
|
48
39
|
return clone.tap do |query|
|
|
@@ -78,22 +69,37 @@ module Mongoid
|
|
|
78
69
|
# @example Add the criterion.
|
|
79
70
|
# selectable.and({ field: value }, { other: value })
|
|
80
71
|
#
|
|
81
|
-
# @param [ Array<Hash | Criteria> ] criteria
|
|
82
|
-
# matches or Criteria objects that all must
|
|
72
|
+
# @param [ [ Hash | Criteria | Array<Hash | Criteria> ]... ] *criteria
|
|
73
|
+
# Multiple key/value pair matches or Criteria objects that all must
|
|
74
|
+
# match to return results.
|
|
83
75
|
#
|
|
84
76
|
# @return [ Selectable ] The new selectable.
|
|
85
|
-
#
|
|
86
|
-
# @since 1.0.0
|
|
87
77
|
def and(*criteria)
|
|
88
78
|
_mongoid_flatten_arrays(criteria).inject(self.clone) do |c, new_s|
|
|
89
79
|
if new_s.is_a?(Selectable)
|
|
90
80
|
new_s = new_s.selector
|
|
91
81
|
end
|
|
92
|
-
normalized =
|
|
82
|
+
normalized = _mongoid_expand_keys(new_s)
|
|
93
83
|
normalized.each do |k, v|
|
|
94
84
|
k = k.to_s
|
|
95
85
|
if c.selector[k]
|
|
96
|
-
|
|
86
|
+
# There is already a condition on k.
|
|
87
|
+
# If v is an operator, and all existing conditions are
|
|
88
|
+
# also operators, and v isn't present in existing conditions,
|
|
89
|
+
# we can add to existing conditions.
|
|
90
|
+
# Otherwise use $and.
|
|
91
|
+
if v.is_a?(Hash) &&
|
|
92
|
+
v.length == 1 &&
|
|
93
|
+
(new_k = v.keys.first).start_with?('$') &&
|
|
94
|
+
(existing_kv = c.selector[k]).is_a?(Hash) &&
|
|
95
|
+
!existing_kv.key?(new_k) &&
|
|
96
|
+
existing_kv.keys.all? { |sub_k| sub_k.start_with?('$') }
|
|
97
|
+
then
|
|
98
|
+
merged_v = c.selector[k].merge(v)
|
|
99
|
+
c.selector.store(k, merged_v)
|
|
100
|
+
else
|
|
101
|
+
c = c.send(:__multi__, [k => v], '$and')
|
|
102
|
+
end
|
|
97
103
|
else
|
|
98
104
|
c.selector.store(k, v)
|
|
99
105
|
end
|
|
@@ -114,8 +120,6 @@ module Mongoid
|
|
|
114
120
|
# @param [ Hash ] criterion Multiple key/range pairs.
|
|
115
121
|
#
|
|
116
122
|
# @return [ Selectable ] The cloned selectable.
|
|
117
|
-
#
|
|
118
|
-
# @since 1.0.0
|
|
119
123
|
def between(criterion)
|
|
120
124
|
if criterion.nil?
|
|
121
125
|
raise Errors::CriteriaArgumentRequired, :between
|
|
@@ -146,14 +150,12 @@ module Mongoid
|
|
|
146
150
|
# @param [ Hash ] criterion The field/match pairs.
|
|
147
151
|
#
|
|
148
152
|
# @return [ Selectable ] The cloned selectable.
|
|
149
|
-
#
|
|
150
|
-
# @since 1.0.0
|
|
151
153
|
def elem_match(criterion)
|
|
152
154
|
if criterion.nil?
|
|
153
155
|
raise Errors::CriteriaArgumentRequired, :elem_match
|
|
154
156
|
end
|
|
155
157
|
|
|
156
|
-
|
|
158
|
+
and_or_override(criterion, "$elemMatch")
|
|
157
159
|
end
|
|
158
160
|
key :elem_match, :override, "$elemMatch"
|
|
159
161
|
|
|
@@ -171,19 +173,17 @@ module Mongoid
|
|
|
171
173
|
# @param [ Hash ] criterion The field/boolean existence checks.
|
|
172
174
|
#
|
|
173
175
|
# @return [ Selectable ] The cloned selectable.
|
|
174
|
-
#
|
|
175
|
-
# @since 1.0.0
|
|
176
176
|
def exists(criterion)
|
|
177
177
|
if criterion.nil?
|
|
178
178
|
raise Errors::CriteriaArgumentRequired, :exists
|
|
179
179
|
end
|
|
180
180
|
|
|
181
181
|
typed_override(criterion, "$exists") do |value|
|
|
182
|
-
::Boolean.evolve(value)
|
|
182
|
+
Mongoid::Boolean.evolve(value)
|
|
183
183
|
end
|
|
184
184
|
end
|
|
185
185
|
key :exists, :override, "$exists" do |value|
|
|
186
|
-
::Boolean.evolve(value)
|
|
186
|
+
Mongoid::Boolean.evolve(value)
|
|
187
187
|
end
|
|
188
188
|
|
|
189
189
|
# Add a $geoIntersects or $geoWithin selection. Symbol operators must
|
|
@@ -200,35 +200,34 @@ module Mongoid
|
|
|
200
200
|
# the upper right (north east) as the second argument.
|
|
201
201
|
# Important: When latitude and longitude are passed, longitude is
|
|
202
202
|
# expected as the first element of the coordinate pair.
|
|
203
|
-
# Source: https://
|
|
203
|
+
# Source: https://www.mongodb.com/docs/manual/reference/operator/query/box/
|
|
204
204
|
#
|
|
205
205
|
# @example Add a geo intersect criterion for a line.
|
|
206
|
-
# query.
|
|
206
|
+
# query.geo_spatial(:location.intersects_line => [[ 1, 10 ], [ 2, 10 ]])
|
|
207
207
|
#
|
|
208
208
|
# @example Add a geo intersect criterion for a point.
|
|
209
|
-
# query.
|
|
209
|
+
# query.geo_spatial(:location.intersects_point => [[ 1, 10 ]])
|
|
210
210
|
#
|
|
211
211
|
# @example Add a geo intersect criterion for a polygon.
|
|
212
|
-
# query.
|
|
212
|
+
# query.geo_spatial(:location.intersects_polygon => [[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]])
|
|
213
213
|
#
|
|
214
214
|
# @example Add a geo within criterion for a polygon.
|
|
215
|
-
# query.
|
|
215
|
+
# query.geo_spatial(:location.within_polygon => [[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]])
|
|
216
216
|
#
|
|
217
217
|
# @example Add a geo within criterion for a box.
|
|
218
|
-
# query.
|
|
218
|
+
# query.geo_spatial(:location.within_box => [[ 1, 10 ], [ 2, 10 ])
|
|
219
219
|
#
|
|
220
220
|
# @param [ Hash ] criterion The criterion.
|
|
221
221
|
#
|
|
222
222
|
# @return [ Selectable ] The cloned selectable.
|
|
223
|
-
|
|
224
|
-
# @since 2.0.0
|
|
225
|
-
def geo_spacial(criterion)
|
|
223
|
+
def geo_spatial(criterion)
|
|
226
224
|
if criterion.nil?
|
|
227
|
-
raise Errors::CriteriaArgumentRequired, :
|
|
225
|
+
raise Errors::CriteriaArgumentRequired, :geo_spatial
|
|
228
226
|
end
|
|
229
227
|
|
|
230
228
|
__merge__(criterion)
|
|
231
229
|
end
|
|
230
|
+
|
|
232
231
|
key :intersects_line, :override, "$geoIntersects", "$geometry" do |value|
|
|
233
232
|
{ "type" => LINE_STRING, "coordinates" => value }
|
|
234
233
|
end
|
|
@@ -243,6 +242,26 @@ module Mongoid
|
|
|
243
242
|
end
|
|
244
243
|
key :within_box, :override, "$geoWithin", "$box"
|
|
245
244
|
|
|
245
|
+
# Add the $eq criterion to the selector.
|
|
246
|
+
#
|
|
247
|
+
# @example Add the $eq criterion.
|
|
248
|
+
# selectable.eq(age: 60)
|
|
249
|
+
#
|
|
250
|
+
# @example Execute an $eq in a where query.
|
|
251
|
+
# selectable.where(:field.eq => 10)
|
|
252
|
+
#
|
|
253
|
+
# @param [ Hash ] criterion The field/value pairs to check.
|
|
254
|
+
#
|
|
255
|
+
# @return [ Selectable ] The cloned selectable.
|
|
256
|
+
def eq(criterion)
|
|
257
|
+
if criterion.nil?
|
|
258
|
+
raise Errors::CriteriaArgumentRequired, :eq
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
and_or_override(criterion, "$eq")
|
|
262
|
+
end
|
|
263
|
+
key :eq, :override, "$eq"
|
|
264
|
+
|
|
246
265
|
# Add the $gt criterion to the selector.
|
|
247
266
|
#
|
|
248
267
|
# @example Add the $gt criterion.
|
|
@@ -254,14 +273,12 @@ module Mongoid
|
|
|
254
273
|
# @param [ Hash ] criterion The field/value pairs to check.
|
|
255
274
|
#
|
|
256
275
|
# @return [ Selectable ] The cloned selectable.
|
|
257
|
-
#
|
|
258
|
-
# @since 1.0.0
|
|
259
276
|
def gt(criterion)
|
|
260
277
|
if criterion.nil?
|
|
261
278
|
raise Errors::CriteriaArgumentRequired, :gt
|
|
262
279
|
end
|
|
263
280
|
|
|
264
|
-
|
|
281
|
+
and_or_override(criterion, "$gt")
|
|
265
282
|
end
|
|
266
283
|
key :gt, :override, "$gt"
|
|
267
284
|
|
|
@@ -276,14 +293,12 @@ module Mongoid
|
|
|
276
293
|
# @param [ Hash ] criterion The field/value pairs to check.
|
|
277
294
|
#
|
|
278
295
|
# @return [ Selectable ] The cloned selectable.
|
|
279
|
-
#
|
|
280
|
-
# @since 1.0.0
|
|
281
296
|
def gte(criterion)
|
|
282
297
|
if criterion.nil?
|
|
283
298
|
raise Errors::CriteriaArgumentRequired, :gte
|
|
284
299
|
end
|
|
285
300
|
|
|
286
|
-
|
|
301
|
+
and_or_override(criterion, "$gte")
|
|
287
302
|
end
|
|
288
303
|
key :gte, :override, "$gte"
|
|
289
304
|
|
|
@@ -301,8 +316,6 @@ module Mongoid
|
|
|
301
316
|
# @param [ Hash ] condition The field/value criterion pairs.
|
|
302
317
|
#
|
|
303
318
|
# @return [ Selectable ] The cloned selectable.
|
|
304
|
-
#
|
|
305
|
-
# @since 1.0.0
|
|
306
319
|
def in(condition)
|
|
307
320
|
if condition.nil?
|
|
308
321
|
raise Errors::CriteriaArgumentRequired, :in
|
|
@@ -336,14 +349,12 @@ module Mongoid
|
|
|
336
349
|
# @param [ Hash ] criterion The field/value pairs to check.
|
|
337
350
|
#
|
|
338
351
|
# @return [ Selectable ] The cloned selectable.
|
|
339
|
-
#
|
|
340
|
-
# @since 1.0.0
|
|
341
352
|
def lt(criterion)
|
|
342
353
|
if criterion.nil?
|
|
343
354
|
raise Errors::CriteriaArgumentRequired, :lt
|
|
344
355
|
end
|
|
345
356
|
|
|
346
|
-
|
|
357
|
+
and_or_override(criterion, "$lt")
|
|
347
358
|
end
|
|
348
359
|
key :lt, :override, "$lt"
|
|
349
360
|
|
|
@@ -358,14 +369,12 @@ module Mongoid
|
|
|
358
369
|
# @param [ Hash ] criterion The field/value pairs to check.
|
|
359
370
|
#
|
|
360
371
|
# @return [ Selectable ] The cloned selectable.
|
|
361
|
-
#
|
|
362
|
-
# @since 1.0.0
|
|
363
372
|
def lte(criterion)
|
|
364
373
|
if criterion.nil?
|
|
365
374
|
raise Errors::CriteriaArgumentRequired, :lte
|
|
366
375
|
end
|
|
367
376
|
|
|
368
|
-
|
|
377
|
+
and_or_override(criterion, "$lte")
|
|
369
378
|
end
|
|
370
379
|
key :lte, :override, "$lte"
|
|
371
380
|
|
|
@@ -377,8 +386,6 @@ module Mongoid
|
|
|
377
386
|
# @param [ Hash ] criterion The field/distance pairs.
|
|
378
387
|
#
|
|
379
388
|
# @return [ Selectable ] The cloned selectable.
|
|
380
|
-
#
|
|
381
|
-
# @since 1.0.0
|
|
382
389
|
def max_distance(criterion)
|
|
383
390
|
if criterion.nil?
|
|
384
391
|
raise Errors::CriteriaArgumentRequired, :max_distance
|
|
@@ -399,14 +406,12 @@ module Mongoid
|
|
|
399
406
|
# @param [ Hash ] criterion The field/mod selections.
|
|
400
407
|
#
|
|
401
408
|
# @return [ Selectable ] The cloned selectable.
|
|
402
|
-
#
|
|
403
|
-
# @since 1.0.0
|
|
404
409
|
def mod(criterion)
|
|
405
410
|
if criterion.nil?
|
|
406
411
|
raise Errors::CriteriaArgumentRequired, :mod
|
|
407
412
|
end
|
|
408
413
|
|
|
409
|
-
|
|
414
|
+
and_or_override(criterion, "$mod")
|
|
410
415
|
end
|
|
411
416
|
key :mod, :override, "$mod"
|
|
412
417
|
|
|
@@ -421,14 +426,12 @@ module Mongoid
|
|
|
421
426
|
# @param [ Hash ] criterion The field/ne selections.
|
|
422
427
|
#
|
|
423
428
|
# @return [ Selectable ] The cloned selectable.
|
|
424
|
-
#
|
|
425
|
-
# @since 1.0.0
|
|
426
429
|
def ne(criterion)
|
|
427
430
|
if criterion.nil?
|
|
428
431
|
raise Errors::CriteriaArgumentRequired, :ne
|
|
429
432
|
end
|
|
430
433
|
|
|
431
|
-
|
|
434
|
+
and_or_override(criterion, "$ne")
|
|
432
435
|
end
|
|
433
436
|
alias :excludes :ne
|
|
434
437
|
key :ne, :override, "$ne"
|
|
@@ -444,14 +447,12 @@ module Mongoid
|
|
|
444
447
|
# @param [ Hash ] criterion The field/location pair.
|
|
445
448
|
#
|
|
446
449
|
# @return [ Selectable ] The cloned selectable.
|
|
447
|
-
#
|
|
448
|
-
# @since 1.0.0
|
|
449
450
|
def near(criterion)
|
|
450
451
|
if criterion.nil?
|
|
451
452
|
raise Errors::CriteriaArgumentRequired, :near
|
|
452
453
|
end
|
|
453
454
|
|
|
454
|
-
|
|
455
|
+
and_or_override(criterion, "$near")
|
|
455
456
|
end
|
|
456
457
|
key :near, :override, "$near"
|
|
457
458
|
|
|
@@ -466,14 +467,12 @@ module Mongoid
|
|
|
466
467
|
# @param [ Hash ] criterion The field/location pair.
|
|
467
468
|
#
|
|
468
469
|
# @return [ Selectable ] The cloned selectable.
|
|
469
|
-
#
|
|
470
|
-
# @since 1.0.0
|
|
471
470
|
def near_sphere(criterion)
|
|
472
471
|
if criterion.nil?
|
|
473
472
|
raise Errors::CriteriaArgumentRequired, :near_sphere
|
|
474
473
|
end
|
|
475
474
|
|
|
476
|
-
|
|
475
|
+
and_or_override(criterion, "$nearSphere")
|
|
477
476
|
end
|
|
478
477
|
key :near_sphere, :override, "$nearSphere"
|
|
479
478
|
|
|
@@ -491,8 +490,6 @@ module Mongoid
|
|
|
491
490
|
# @param [ Hash ] condition The field/value criterion pairs.
|
|
492
491
|
#
|
|
493
492
|
# @return [ Selectable ] The cloned selectable.
|
|
494
|
-
#
|
|
495
|
-
# @since 1.0.0
|
|
496
493
|
def nin(condition)
|
|
497
494
|
if condition.nil?
|
|
498
495
|
raise Errors::CriteriaArgumentRequired, :nin
|
|
@@ -520,12 +517,10 @@ module Mongoid
|
|
|
520
517
|
# @example Add the $nor selection.
|
|
521
518
|
# selectable.nor(field: 1, field: 2)
|
|
522
519
|
#
|
|
523
|
-
# @param [ Array<Hash | Criteria> ] criteria
|
|
524
|
-
# matches or Criteria objects.
|
|
520
|
+
# @param [ [ Hash | Criteria | Array<Hash | Criteria> ]... ] *criteria
|
|
521
|
+
# Multiple key/value pair matches or Criteria objects.
|
|
525
522
|
#
|
|
526
523
|
# @return [ Selectable ] The new selectable.
|
|
527
|
-
#
|
|
528
|
-
# @since 1.0.0
|
|
529
524
|
def nor(*criteria)
|
|
530
525
|
_mongoid_add_top_level_operation('$nor', criteria)
|
|
531
526
|
end
|
|
@@ -535,9 +530,7 @@ module Mongoid
|
|
|
535
530
|
# @example Is the selectable negating?
|
|
536
531
|
# selectable.negating?
|
|
537
532
|
#
|
|
538
|
-
# @return [ true
|
|
539
|
-
#
|
|
540
|
-
# @since 1.0.0
|
|
533
|
+
# @return [ true | false ] If the selectable is negating.
|
|
541
534
|
def negating?
|
|
542
535
|
!!negating
|
|
543
536
|
end
|
|
@@ -553,12 +546,10 @@ module Mongoid
|
|
|
553
546
|
# @example Execute a $not in a where query.
|
|
554
547
|
# selectable.where(:field.not => /Bob/)
|
|
555
548
|
#
|
|
556
|
-
# @param [
|
|
549
|
+
# @param [ [ Hash | Criteria ]... ] *criteria The key/value pair
|
|
557
550
|
# matches or Criteria objects to negate.
|
|
558
551
|
#
|
|
559
552
|
# @return [ Selectable ] The new selectable.
|
|
560
|
-
#
|
|
561
|
-
# @since 1.0.0
|
|
562
553
|
def not(*criteria)
|
|
563
554
|
if criteria.empty?
|
|
564
555
|
dup.tap { |query| query.negating = true }
|
|
@@ -567,17 +558,21 @@ module Mongoid
|
|
|
567
558
|
if new_s.is_a?(Selectable)
|
|
568
559
|
new_s = new_s.selector
|
|
569
560
|
end
|
|
570
|
-
new_s.each do |k, v|
|
|
561
|
+
_mongoid_expand_keys(new_s).each do |k, v|
|
|
571
562
|
k = k.to_s
|
|
572
|
-
if c.selector[k] || k
|
|
563
|
+
if c.selector[k] || k.start_with?('$')
|
|
573
564
|
c = c.send(:__multi__, [{'$nor' => [{k => v}]}], '$and')
|
|
574
565
|
else
|
|
575
|
-
if v.is_a?(
|
|
576
|
-
|
|
566
|
+
if v.is_a?(Hash)
|
|
567
|
+
c = c.send(:__multi__, [{'$nor' => [{k => v}]}], '$and')
|
|
577
568
|
else
|
|
578
|
-
|
|
569
|
+
if v.is_a?(Regexp)
|
|
570
|
+
negated_operator = '$not'
|
|
571
|
+
else
|
|
572
|
+
negated_operator = '$ne'
|
|
573
|
+
end
|
|
574
|
+
c = c.send(:__override__, {k => v}, negated_operator)
|
|
579
575
|
end
|
|
580
|
-
c = c.send(:__override__, {k => v}, negated_operator)
|
|
581
576
|
end
|
|
582
577
|
end
|
|
583
578
|
c
|
|
@@ -586,6 +581,35 @@ module Mongoid
|
|
|
586
581
|
end
|
|
587
582
|
key :not, :override, "$not"
|
|
588
583
|
|
|
584
|
+
# Negate the arguments, constraining the query to only those documents
|
|
585
|
+
# that do NOT match the arguments.
|
|
586
|
+
#
|
|
587
|
+
# @example Exclude a single criterion.
|
|
588
|
+
# selectable.none_of(name: /Bob/)
|
|
589
|
+
#
|
|
590
|
+
# @example Exclude multiple criteria.
|
|
591
|
+
# selectable.none_of(name: /Bob/, country: "USA")
|
|
592
|
+
#
|
|
593
|
+
# @example Exclude multiple criteria as an array.
|
|
594
|
+
# selectable.none_of([{ name: /Bob/ }, { country: "USA" }])
|
|
595
|
+
#
|
|
596
|
+
# @param [ [ Hash | Criteria ]... ] *criteria The key/value pair
|
|
597
|
+
# matches or Criteria objects to negate.
|
|
598
|
+
#
|
|
599
|
+
# @return [ Selectable ] The new selectable.
|
|
600
|
+
def none_of(*criteria)
|
|
601
|
+
criteria = _mongoid_flatten_arrays(criteria)
|
|
602
|
+
return dup if criteria.empty?
|
|
603
|
+
|
|
604
|
+
exprs = criteria.map do |criterion|
|
|
605
|
+
_mongoid_expand_keys(
|
|
606
|
+
criterion.is_a?(Selectable) ?
|
|
607
|
+
criterion.selector : criterion)
|
|
608
|
+
end
|
|
609
|
+
|
|
610
|
+
self.and('$nor' => exprs)
|
|
611
|
+
end
|
|
612
|
+
|
|
589
613
|
# Creates a disjunction using $or from the existing criteria in the
|
|
590
614
|
# receiver and the provided arguments.
|
|
591
615
|
#
|
|
@@ -611,13 +635,11 @@ module Mongoid
|
|
|
611
635
|
# @example Same as previous example, also deprecated.
|
|
612
636
|
# selectable.or([{field: 1}], [{field: 2}])
|
|
613
637
|
#
|
|
614
|
-
# @param [ Hash | Criteria | Array<Hash | Criteria
|
|
638
|
+
# @param [ [ Hash | Criteria | Array<Hash | Criteria> ]... ] *criteria
|
|
615
639
|
# Multiple key/value pair matches or Criteria objects, or arrays
|
|
616
640
|
# thereof. Passing arrays is deprecated.
|
|
617
641
|
#
|
|
618
642
|
# @return [ Selectable ] The new selectable.
|
|
619
|
-
#
|
|
620
|
-
# @since 1.0.0
|
|
621
643
|
def or(*criteria)
|
|
622
644
|
_mongoid_add_top_level_operation('$or', criteria)
|
|
623
645
|
end
|
|
@@ -643,13 +665,11 @@ module Mongoid
|
|
|
643
665
|
# @example Same as previous example, also deprecated.
|
|
644
666
|
# selectable.any_of([{field: 1}], [{field: 2}])
|
|
645
667
|
#
|
|
646
|
-
# @param [ Hash | Criteria | Array<Hash | Criteria
|
|
668
|
+
# @param [ [ Hash | Criteria | Array<Hash | Criteria> ]... ] *criteria
|
|
647
669
|
# Multiple key/value pair matches or Criteria objects, or arrays
|
|
648
670
|
# thereof. Passing arrays is deprecated.
|
|
649
671
|
#
|
|
650
672
|
# @return [ Selectable ] The new selectable.
|
|
651
|
-
#
|
|
652
|
-
# @since 1.0.0
|
|
653
673
|
def any_of(*criteria)
|
|
654
674
|
criteria = _mongoid_flatten_arrays(criteria)
|
|
655
675
|
case criteria.length
|
|
@@ -665,7 +685,7 @@ module Mongoid
|
|
|
665
685
|
# and add the result to self.
|
|
666
686
|
exprs = criteria.map do |criterion|
|
|
667
687
|
if criterion.is_a?(Selectable)
|
|
668
|
-
|
|
688
|
+
_mongoid_expand_keys(criterion.selector)
|
|
669
689
|
else
|
|
670
690
|
Hash[criterion.map do |k, v|
|
|
671
691
|
if k.is_a?(Symbol)
|
|
@@ -676,16 +696,7 @@ module Mongoid
|
|
|
676
696
|
end]
|
|
677
697
|
end
|
|
678
698
|
end
|
|
679
|
-
|
|
680
|
-
#where('$or' => exprs)
|
|
681
|
-
# But since that is broken do instead:
|
|
682
|
-
clone.tap do |query|
|
|
683
|
-
if query.selector['$or']
|
|
684
|
-
query.selector.store('$or', query.selector['$or'] + exprs)
|
|
685
|
-
else
|
|
686
|
-
query.selector.store('$or', exprs)
|
|
687
|
-
end
|
|
688
|
-
end
|
|
699
|
+
self.and('$or' => exprs)
|
|
689
700
|
end
|
|
690
701
|
end
|
|
691
702
|
|
|
@@ -703,8 +714,6 @@ module Mongoid
|
|
|
703
714
|
# @param [ Hash ] criterion The field/size pairs criterion.
|
|
704
715
|
#
|
|
705
716
|
# @return [ Selectable ] The cloned selectable.
|
|
706
|
-
#
|
|
707
|
-
# @since 1.0.0
|
|
708
717
|
def with_size(criterion)
|
|
709
718
|
if criterion.nil?
|
|
710
719
|
raise Errors::CriteriaArgumentRequired, :with_size
|
|
@@ -731,8 +740,6 @@ module Mongoid
|
|
|
731
740
|
# @param [ Hash ] criterion The field/type pairs.
|
|
732
741
|
#
|
|
733
742
|
# @return [ Selectable ] The cloned selectable.
|
|
734
|
-
#
|
|
735
|
-
# @since 1.0.0
|
|
736
743
|
def with_type(criterion)
|
|
737
744
|
if criterion.nil?
|
|
738
745
|
raise Errors::CriteriaArgumentRequired, :with_type
|
|
@@ -754,19 +761,17 @@ module Mongoid
|
|
|
754
761
|
# @example Construct a text search selector with options.
|
|
755
762
|
# selectable.text_search("testing", :$language => "fr")
|
|
756
763
|
#
|
|
757
|
-
# @note Per https://
|
|
764
|
+
# @note Per https://www.mongodb.com/docs/manual/reference/operator/query/text/
|
|
758
765
|
# it is not currently possible to supply multiple text search
|
|
759
766
|
# conditions in a query. Mongoid will build such a query but the
|
|
760
767
|
# server will return an error when trying to execute it.
|
|
761
768
|
#
|
|
762
|
-
# @param [ String
|
|
769
|
+
# @param [ String | Symbol ] terms A string of terms that MongoDB parses
|
|
763
770
|
# and uses to query the text index.
|
|
764
771
|
# @param [ Hash ] opts Text search options. See MongoDB documentation
|
|
765
772
|
# for options.
|
|
766
773
|
#
|
|
767
774
|
# @return [ Selectable ] The cloned selectable.
|
|
768
|
-
#
|
|
769
|
-
# @since 2.2.0
|
|
770
775
|
def text_search(terms, opts = nil)
|
|
771
776
|
if terms.nil?
|
|
772
777
|
raise Errors::CriteriaArgumentRequired, :terms
|
|
@@ -776,7 +781,7 @@ module Mongoid
|
|
|
776
781
|
criterion = {'$text' => { '$search' => terms }}
|
|
777
782
|
criterion['$text'].merge!(opts) if opts
|
|
778
783
|
if query.selector['$text']
|
|
779
|
-
# Per https://
|
|
784
|
+
# Per https://www.mongodb.com/docs/manual/reference/operator/query/text/
|
|
780
785
|
# multiple $text expressions are not currently supported by
|
|
781
786
|
# MongoDB server, but build the query correctly instead of
|
|
782
787
|
# overwriting previous text search condition with the currently
|
|
@@ -799,11 +804,10 @@ module Mongoid
|
|
|
799
804
|
# @example Add a javascript selection.
|
|
800
805
|
# selectable.where("this.name == 'syd'")
|
|
801
806
|
#
|
|
802
|
-
# @param [
|
|
807
|
+
# @param [ [ Hash | String ]... ] *criterion The standard selection
|
|
808
|
+
# or javascript string.
|
|
803
809
|
#
|
|
804
810
|
# @return [ Selectable ] The cloned selectable.
|
|
805
|
-
#
|
|
806
|
-
# @since 1.0.0
|
|
807
811
|
def where(*criteria)
|
|
808
812
|
criteria.inject(clone) do |query, criterion|
|
|
809
813
|
if criterion.nil?
|
|
@@ -843,23 +847,24 @@ module Mongoid
|
|
|
843
847
|
# @param [ Hash ] criterion The field/value pairs.
|
|
844
848
|
#
|
|
845
849
|
# @return [ Selectable ] The cloned selectable.
|
|
846
|
-
#
|
|
847
|
-
# @since 1.0.0
|
|
848
850
|
# @api private
|
|
849
851
|
def expr_query(criterion)
|
|
850
852
|
if criterion.nil?
|
|
851
853
|
raise ArgumentError, 'Criterion cannot be nil here'
|
|
852
854
|
end
|
|
855
|
+
unless Hash === criterion
|
|
856
|
+
raise Errors::InvalidQuery, "Expression must be a Hash: #{Errors::InvalidQuery.truncate_expr(criterion)}"
|
|
857
|
+
end
|
|
853
858
|
|
|
859
|
+
normalized = _mongoid_expand_keys(criterion)
|
|
854
860
|
clone.tap do |query|
|
|
855
|
-
|
|
861
|
+
normalized.each do |field, value|
|
|
856
862
|
field_s = field.to_s
|
|
857
|
-
if field_s
|
|
863
|
+
if field_s.start_with?('$')
|
|
858
864
|
# Query expression-level operator, like $and or $where
|
|
859
865
|
query.add_operator_expression(field_s, value)
|
|
860
866
|
else
|
|
861
|
-
|
|
862
|
-
query.add_field_expression(exp_field, exp_value)
|
|
867
|
+
query.add_field_expression(field, value)
|
|
863
868
|
end
|
|
864
869
|
end
|
|
865
870
|
query.reset_strategies!
|
|
@@ -876,11 +881,9 @@ module Mongoid
|
|
|
876
881
|
# end
|
|
877
882
|
#
|
|
878
883
|
# @param [ Hash ] criterion The criterion.
|
|
879
|
-
#
|
|
880
|
-
# @since 1.0.0
|
|
881
884
|
def typed_override(criterion, operator)
|
|
882
885
|
if criterion
|
|
883
|
-
criterion.
|
|
886
|
+
criterion.transform_values! do |value|
|
|
884
887
|
yield(value)
|
|
885
888
|
end
|
|
886
889
|
end
|
|
@@ -897,8 +900,6 @@ module Mongoid
|
|
|
897
900
|
# @param [ String ] criterion The javascript as a string.
|
|
898
901
|
#
|
|
899
902
|
# @return [ Selectable ] The cloned selectable
|
|
900
|
-
#
|
|
901
|
-
# @since 1.0.0
|
|
902
903
|
def js_query(criterion)
|
|
903
904
|
clone.tap do |query|
|
|
904
905
|
if negating?
|
|
@@ -920,8 +921,6 @@ module Mongoid
|
|
|
920
921
|
# @param [ Hash ] criterion The selection to store.
|
|
921
922
|
#
|
|
922
923
|
# @return [ Selectable ] The cloned selectable.
|
|
923
|
-
#
|
|
924
|
-
# @since 1.0.0
|
|
925
924
|
# @api private
|
|
926
925
|
def selection(criterion = nil)
|
|
927
926
|
clone.tap do |query|
|
|
@@ -934,6 +933,22 @@ module Mongoid
|
|
|
934
933
|
end
|
|
935
934
|
end
|
|
936
935
|
|
|
936
|
+
# Combine operator expessions onto a Criteria using either
|
|
937
|
+
# an override or ands depending on the status of the
|
|
938
|
+
# Mongoid.overwrite_chained_operators feature flag.
|
|
939
|
+
#
|
|
940
|
+
# @param [ Hash ] The criterion to add to the criteria.
|
|
941
|
+
# @param [ String ] operator The MongoDB operator.
|
|
942
|
+
#
|
|
943
|
+
# @return [ Criteria ] The resulting criteria.
|
|
944
|
+
def and_or_override(criterion, operator)
|
|
945
|
+
if Mongoid.overwrite_chained_operators
|
|
946
|
+
__override__(criterion, operator)
|
|
947
|
+
else
|
|
948
|
+
and_with_operator(criterion, operator)
|
|
949
|
+
end
|
|
950
|
+
end
|
|
951
|
+
|
|
937
952
|
class << self
|
|
938
953
|
|
|
939
954
|
# Get the methods on the selectable that can be forwarded to from a model.
|
|
@@ -942,8 +957,6 @@ module Mongoid
|
|
|
942
957
|
# Selectable.forwardables
|
|
943
958
|
#
|
|
944
959
|
# @return [ Array<Symbol> ] The names of the forwardable methods.
|
|
945
|
-
#
|
|
946
|
-
# @since 1.0.0
|
|
947
960
|
def forwardables
|
|
948
961
|
public_instance_methods(false) -
|
|
949
962
|
[ :negating, :negating=, :negating?, :selector, :selector= ]
|