mongoid 7.0.13 → 8.0.8
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 +30 -30
- data/README.md +32 -19
- data/Rakefile +43 -0
- data/lib/config/locales/en.yml +178 -95
- data/lib/mongoid/association/accessors.rb +175 -83
- data/lib/mongoid/association/bindable.rb +57 -28
- data/lib/mongoid/association/builders.rb +8 -14
- data/lib/mongoid/association/constrainable.rb +5 -7
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +31 -10
- data/lib/mongoid/association/embedded/batchable.rb +67 -53
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +27 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- data/lib/mongoid/association/embedded/embedded_in.rb +9 -28
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +143 -122
- data/lib/mongoid/association/embedded/embeds_many.rb +8 -36
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +26 -9
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +63 -29
- data/lib/mongoid/association/embedded/embeds_one.rb +9 -33
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +71 -41
- data/lib/mongoid/association/many.rb +25 -35
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +22 -30
- data/lib/mongoid/association/nested/nested_buildable.rb +9 -15
- data/lib/mongoid/association/nested/one.rb +19 -30
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +5 -12
- data/lib/mongoid/association/options.rb +16 -46
- data/lib/mongoid/association/proxy.rb +37 -38
- data/lib/mongoid/association/referenced/auto_save.rb +9 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +5 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -31
- data/lib/mongoid/association/referenced/belongs_to.rb +16 -38
- data/lib/mongoid/association/referenced/counter_cache.rb +14 -25
- data/lib/mongoid/association/referenced/eager.rb +41 -40
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +105 -68
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +29 -46
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +440 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +101 -124
- data/lib/mongoid/association/referenced/has_many.rb +21 -45
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +16 -29
- data/lib/mongoid/association/referenced/has_one/proxy.rb +25 -30
- data/lib/mongoid/association/referenced/has_one.rb +16 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -26
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +62 -84
- data/lib/mongoid/association.rb +13 -27
- data/lib/mongoid/atomic/modifiers.rb +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +23 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +2 -3
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +45 -51
- data/lib/mongoid/attributes/dynamic.rb +6 -21
- data/lib/mongoid/attributes/nested.rb +11 -14
- data/lib/mongoid/attributes/processing.rb +46 -30
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +5 -8
- data/lib/mongoid/attributes.rb +80 -98
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +49 -70
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +15 -14
- data/lib/mongoid/clients/sessions.rb +4 -20
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +5 -12
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +5 -9
- data/lib/mongoid/config/environment.rb +30 -5
- data/lib/mongoid/config/options.rb +23 -23
- data/lib/mongoid/config/validators/client.rb +8 -23
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +164 -48
- data/lib/mongoid/contextual/aggregable/memory.rb +40 -27
- data/lib/mongoid/contextual/aggregable/mongo.rb +32 -33
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +13 -44
- data/lib/mongoid/contextual/map_reduce.rb +7 -35
- data/lib/mongoid/contextual/memory.rb +187 -81
- data/lib/mongoid/contextual/mongo.rb +360 -239
- data/lib/mongoid/contextual/none.rb +109 -31
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +9 -11
- data/lib/mongoid/copyable.rb +42 -17
- data/lib/mongoid/criteria/findable.rb +19 -19
- data/lib/mongoid/criteria/includable.rb +30 -33
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +12 -7
- data/lib/mongoid/criteria/modifiable.rb +2 -19
- data/lib/mongoid/criteria/options.rb +2 -3
- data/lib/mongoid/criteria/permission.rb +3 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +4 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +28 -8
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +11 -12
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +6 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +49 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -16
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +7 -32
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +7 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +39 -24
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +200 -40
- data/lib/mongoid/criteria/queryable/optional.rb +10 -59
- data/lib/mongoid/criteria/queryable/options.rb +4 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +417 -171
- data/lib/mongoid/criteria/queryable/selector.rb +127 -30
- data/lib/mongoid/criteria/queryable/smash.rb +42 -18
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +18 -15
- data/lib/mongoid/criteria/scopable.rb +29 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +95 -107
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +148 -97
- data/lib/mongoid/equality.rb +35 -18
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +35 -21
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +3 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +3 -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 +8 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +5 -10
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +3 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +6 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +3 -4
- data/lib/mongoid/errors/no_client_hosts.rb +3 -4
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +3 -4
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -1
- data/lib/mongoid/errors/unknown_attribute.rb +3 -4
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +14 -3
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +37 -44
- data/lib/mongoid/extensions/big_decimal.rb +35 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +10 -6
- data/lib/mongoid/extensions/date.rb +32 -25
- data/lib/mongoid/extensions/date_time.rb +5 -13
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +5 -8
- data/lib/mongoid/extensions/float.rb +12 -14
- data/lib/mongoid/extensions/hash.rb +87 -45
- data/lib/mongoid/extensions/integer.rb +12 -16
- data/lib/mongoid/extensions/module.rb +3 -4
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +25 -50
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +42 -20
- data/lib/mongoid/extensions/regexp.rb +13 -7
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +30 -61
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +37 -23
- data/lib/mongoid/extensions/time_with_zone.rb +26 -9
- data/lib/mongoid/extensions/true_class.rb +5 -8
- data/lib/mongoid/extensions.rb +19 -3
- data/lib/mongoid/factory.rb +104 -17
- data/lib/mongoid/fields/foreign_key.rb +14 -26
- data/lib/mongoid/fields/localized.rb +11 -15
- data/lib/mongoid/fields/standard.rb +13 -43
- data/lib/mongoid/fields/validators/macro.rb +32 -20
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +328 -85
- data/lib/mongoid/findable.rb +90 -33
- data/lib/mongoid/indexable/specification.rb +5 -18
- data/lib/mongoid/indexable/validators/options.rb +8 -9
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +191 -41
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +3 -154
- 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 +22 -30
- data/lib/mongoid/persistable/deletable.rb +6 -22
- data/lib/mongoid/persistable/destroyable.rb +12 -11
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +3 -8
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +5 -10
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +9 -9
- data/lib/mongoid/persistable/updatable.rb +50 -31
- data/lib/mongoid/persistable/upsertable.rb +5 -10
- data/lib/mongoid/persistable.rb +135 -40
- data/lib/mongoid/persistence_context.rb +85 -45
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +13 -280
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +4 -2
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +19 -22
- data/lib/mongoid/scopable.rb +34 -57
- data/lib/mongoid/selectable.rb +8 -18
- data/lib/mongoid/serializable.rb +33 -34
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +38 -19
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -7
- data/lib/mongoid/threaded/lifecycle.rb +7 -26
- data/lib/mongoid/threaded.rb +44 -67
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +4 -3
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +5 -6
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +54 -25
- data/lib/mongoid/traversable.rb +185 -61
- data/lib/mongoid/validatable/associated.rb +99 -22
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +3 -4
- data/lib/mongoid/validatable/macros.rb +2 -9
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +29 -41
- data/lib/mongoid/validatable.rb +22 -33
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +34 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +53 -32
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +17 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +31 -27
- data/spec/integration/associations/belongs_to_spec.rb +20 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +162 -55
- 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 +107 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -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 +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- 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 +107 -1
- data/spec/integration/callbacks_spec.rb +262 -8
- 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 +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -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 +392 -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 +73 -0
- 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 +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +18 -6
- data/spec/mongoid/association/accessors_spec.rb +284 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +35 -33
- data/spec/mongoid/association/depending_spec.rb +431 -338
- data/spec/mongoid/association/eager_spec.rb +8 -5
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +4 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +84 -22
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +114 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +687 -173
- data/spec/mongoid/association/embedded/embeds_many_models.rb +174 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +71 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +27 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +22 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +31 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +4 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +111 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +242 -12
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +114 -58
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +26 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +46 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +25 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +418 -361
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +68 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +81 -4
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +132 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +314 -133
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +848 -451
- data/spec/mongoid/association/referenced/has_many_models.rb +61 -1
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +48 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +55 -9
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +135 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +65 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +47 -31
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +66 -26
- data/spec/mongoid/atomic_spec.rb +53 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +149 -78
- 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 +24 -22
- data/spec/mongoid/attributes_spec.rb +683 -65
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +185 -43
- data/spec/mongoid/clients/factory_spec.rb +128 -28
- data/spec/mongoid/clients/options_spec.rb +45 -26
- data/spec/mongoid/clients/sessions_spec.rb +25 -66
- data/spec/mongoid/clients/transactions_spec.rb +54 -29
- data/spec/mongoid/clients_spec.rb +65 -8
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/environment_spec.rb +126 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +377 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- 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 +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +205 -67
- data/spec/mongoid/contextual/geo_near_spec.rb +20 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +6 -18
- data/spec/mongoid/contextual/memory_spec.rb +1360 -91
- data/spec/mongoid/contextual/mongo_spec.rb +1871 -544
- data/spec/mongoid/contextual/none_spec.rb +39 -73
- data/spec/mongoid/copyable_spec.rb +657 -26
- data/spec/mongoid/copyable_spec_models.rb +30 -0
- data/spec/mongoid/criteria/findable_spec.rb +161 -228
- 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 +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +20 -1
- data/spec/mongoid/criteria/modifiable_spec.rb +43 -40
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +9 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +136 -26
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +46 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -15
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +34 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +18 -485
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1643 -286
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1191 -2752
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +91 -4
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +298 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +409 -0
- data/spec/mongoid/criteria_spec.rb +1322 -1723
- data/spec/mongoid/document_fields_spec.rb +179 -5
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +153 -87
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +78 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +7 -5
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +24 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +5 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -1
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +41 -45
- data/spec/mongoid/extensions/big_decimal_spec.rb +714 -212
- data/spec/mongoid/extensions/binary_spec.rb +46 -9
- data/spec/mongoid/extensions/boolean_spec.rb +70 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +58 -140
- data/spec/mongoid/extensions/date_time_spec.rb +32 -69
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +66 -73
- data/spec/mongoid/extensions/hash_spec.rb +138 -3
- data/spec/mongoid/extensions/integer_spec.rb +61 -63
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +257 -54
- data/spec/mongoid/extensions/regexp_spec.rb +60 -33
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +111 -50
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +20 -25
- data/spec/mongoid/extensions/time_spec.rb +663 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +50 -31
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +347 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +43 -16
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +776 -80
- data/spec/mongoid/findable_spec.rb +133 -34
- data/spec/mongoid/indexable/specification_spec.rb +4 -2
- data/spec/mongoid/indexable_spec.rb +65 -18
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +955 -103
- data/spec/mongoid/interceptable_spec_models.rb +307 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- 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 +114 -29
- data/spec/mongoid/persistable/deletable_spec.rb +274 -12
- data/spec/mongoid/persistable/destroyable_spec.rb +202 -12
- data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +36 -6
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +188 -25
- data/spec/mongoid/persistable/settable_spec.rb +24 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +18 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +52 -1
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +50 -0
- data/spec/mongoid/query_cache_spec.rb +339 -87
- data/spec/mongoid/relations/proxy_spec.rb +8 -6
- data/spec/mongoid/reloadable_spec.rb +357 -22
- data/spec/mongoid/scopable_spec.rb +121 -37
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +239 -34
- data/spec/mongoid/stateful_spec.rb +31 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +2 -0
- data/spec/mongoid/tasks/database_spec.rb +2 -0
- data/spec/mongoid/threaded_spec.rb +4 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +398 -6
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +296 -33
- data/spec/mongoid/touchable_spec_models.rb +57 -0
- data/spec/mongoid/traversable_spec.rb +1160 -1
- data/spec/mongoid/validatable/associated_spec.rb +15 -30
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +128 -98
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +3 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +5 -3
- data/spec/rails/mongoid_spec.rb +8 -18
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/cluster_config.rb +14 -4
- data/spec/shared/lib/mrss/constraints.rb +51 -27
- data/spec/shared/lib/mrss/docker_runner.rb +37 -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 +48 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -18
- 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 +18 -1
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +156 -66
- 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 +171 -45
- data/spec/shared/shlib/set_env.sh +47 -6
- data/spec/spec_helper.rb +38 -36
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +39 -8
- data/spec/support/expectations.rb +5 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +77 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -0
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +9 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +2 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +2 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/support/models/circus.rb +12 -0
- data/spec/{app → support}/models/code.rb +4 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/{app → support}/models/customer.rb +0 -1
- data/spec/{app → support}/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +2 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +11 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +6 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +3 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +12 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +23 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +4 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +2 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +3 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- 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 +53 -0
- data/spec/support/spec_config.rb +12 -3
- data.tar.gz.sig +0 -0
- metadata +1162 -764
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/errors/eager_load.rb +0 -22
- data/lib/mongoid/errors/invalid_value.rb +0 -16
- data/lib/mongoid/matchable/all.rb +0 -28
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -119
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/eq.rb +0 -22
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/other_owner_object.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -137
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/eq_spec.rb +0 -48
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/session_registry.rb +0 -50
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
class Criteria
|
|
4
5
|
module Queryable
|
|
@@ -10,18 +11,12 @@ module Mongoid
|
|
|
10
11
|
extend Macroable
|
|
11
12
|
|
|
12
13
|
# Constant for a LineString $geometry.
|
|
13
|
-
#
|
|
14
|
-
# @since 2.0.0
|
|
15
14
|
LINE_STRING = "LineString"
|
|
16
15
|
|
|
17
16
|
# Constant for a Point $geometry.
|
|
18
|
-
#
|
|
19
|
-
# @since 2.0.0
|
|
20
17
|
POINT = "Point"
|
|
21
18
|
|
|
22
19
|
# Constant for a Polygon $geometry.
|
|
23
|
-
#
|
|
24
|
-
# @since 2.0.0
|
|
25
20
|
POLYGON = "Polygon"
|
|
26
21
|
|
|
27
22
|
# @attribute [rw] negating If the next expression is negated.
|
|
@@ -39,10 +34,32 @@ module Mongoid
|
|
|
39
34
|
# @param [ Hash ] criterion The key value pairs for $all matching.
|
|
40
35
|
#
|
|
41
36
|
# @return [ Selectable ] The cloned selectable.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
def all(*criteria)
|
|
38
|
+
if criteria.empty?
|
|
39
|
+
return clone.tap do |query|
|
|
40
|
+
query.reset_strategies!
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
criteria.inject(clone) do |query, condition|
|
|
45
|
+
if condition.nil?
|
|
46
|
+
raise Errors::CriteriaArgumentRequired, :all
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
condition = expand_condition_to_array_values(condition)
|
|
50
|
+
|
|
51
|
+
if strategy
|
|
52
|
+
send(strategy, condition, "$all")
|
|
53
|
+
else
|
|
54
|
+
condition.inject(query) do |_query, (field, value)|
|
|
55
|
+
v = {'$all' => value}
|
|
56
|
+
if negating?
|
|
57
|
+
v = {'$not' => v}
|
|
58
|
+
end
|
|
59
|
+
_query.add_field_expression(field.to_s, v)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end.reset_strategies!
|
|
46
63
|
end
|
|
47
64
|
alias :all_in :all
|
|
48
65
|
key :all, :union, "$all"
|
|
@@ -52,14 +69,42 @@ module Mongoid
|
|
|
52
69
|
# @example Add the criterion.
|
|
53
70
|
# selectable.and({ field: value }, { other: value })
|
|
54
71
|
#
|
|
55
|
-
# @param [ Array<Hash> ]
|
|
56
|
-
# all must match to return results.
|
|
72
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
73
|
+
# matches or Criteria objects that all must match to return results.
|
|
57
74
|
#
|
|
58
|
-
# @return [ Selectable ] The
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
75
|
+
# @return [ Selectable ] The new selectable.
|
|
76
|
+
def and(*criteria)
|
|
77
|
+
_mongoid_flatten_arrays(criteria).inject(self.clone) do |c, new_s|
|
|
78
|
+
if new_s.is_a?(Selectable)
|
|
79
|
+
new_s = new_s.selector
|
|
80
|
+
end
|
|
81
|
+
normalized = _mongoid_expand_keys(new_s)
|
|
82
|
+
normalized.each do |k, v|
|
|
83
|
+
k = k.to_s
|
|
84
|
+
if c.selector[k]
|
|
85
|
+
# There is already a condition on k.
|
|
86
|
+
# If v is an operator, and all existing conditions are
|
|
87
|
+
# also operators, and v isn't present in existing conditions,
|
|
88
|
+
# we can add to existing conditions.
|
|
89
|
+
# Otherwise use $and.
|
|
90
|
+
if v.is_a?(Hash) &&
|
|
91
|
+
v.length == 1 &&
|
|
92
|
+
(new_k = v.keys.first).start_with?('$') &&
|
|
93
|
+
(existing_kv = c.selector[k]).is_a?(Hash) &&
|
|
94
|
+
!existing_kv.key?(new_k) &&
|
|
95
|
+
existing_kv.keys.all? { |sub_k| sub_k.start_with?('$') }
|
|
96
|
+
then
|
|
97
|
+
merged_v = c.selector[k].merge(v)
|
|
98
|
+
c.selector.store(k, merged_v)
|
|
99
|
+
else
|
|
100
|
+
c = c.send(:__multi__, [k => v], '$and')
|
|
101
|
+
end
|
|
102
|
+
else
|
|
103
|
+
c.selector.store(k, v)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
c
|
|
107
|
+
end
|
|
63
108
|
end
|
|
64
109
|
alias :all_of :and
|
|
65
110
|
|
|
@@ -74,9 +119,11 @@ module Mongoid
|
|
|
74
119
|
# @param [ Hash ] criterion Multiple key/range pairs.
|
|
75
120
|
#
|
|
76
121
|
# @return [ Selectable ] The cloned selectable.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
122
|
+
def between(criterion)
|
|
123
|
+
if criterion.nil?
|
|
124
|
+
raise Errors::CriteriaArgumentRequired, :between
|
|
125
|
+
end
|
|
126
|
+
|
|
80
127
|
selection(criterion) do |selector, field, value|
|
|
81
128
|
selector.store(
|
|
82
129
|
field,
|
|
@@ -102,10 +149,12 @@ module Mongoid
|
|
|
102
149
|
# @param [ Hash ] criterion The field/match pairs.
|
|
103
150
|
#
|
|
104
151
|
# @return [ Selectable ] The cloned selectable.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
152
|
+
def elem_match(criterion)
|
|
153
|
+
if criterion.nil?
|
|
154
|
+
raise Errors::CriteriaArgumentRequired, :elem_match
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
and_or_override(criterion, "$elemMatch")
|
|
109
158
|
end
|
|
110
159
|
key :elem_match, :override, "$elemMatch"
|
|
111
160
|
|
|
@@ -123,15 +172,17 @@ module Mongoid
|
|
|
123
172
|
# @param [ Hash ] criterion The field/boolean existence checks.
|
|
124
173
|
#
|
|
125
174
|
# @return [ Selectable ] The cloned selectable.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
175
|
+
def exists(criterion)
|
|
176
|
+
if criterion.nil?
|
|
177
|
+
raise Errors::CriteriaArgumentRequired, :exists
|
|
178
|
+
end
|
|
179
|
+
|
|
129
180
|
typed_override(criterion, "$exists") do |value|
|
|
130
|
-
::Boolean.evolve(value)
|
|
181
|
+
Mongoid::Boolean.evolve(value)
|
|
131
182
|
end
|
|
132
183
|
end
|
|
133
184
|
key :exists, :override, "$exists" do |value|
|
|
134
|
-
::Boolean.evolve(value)
|
|
185
|
+
Mongoid::Boolean.evolve(value)
|
|
135
186
|
end
|
|
136
187
|
|
|
137
188
|
# Add a $geoIntersects or $geoWithin selection. Symbol operators must
|
|
@@ -151,28 +202,31 @@ module Mongoid
|
|
|
151
202
|
# Source: https://docs.mongodb.com/manual/reference/operator/query/box/
|
|
152
203
|
#
|
|
153
204
|
# @example Add a geo intersect criterion for a line.
|
|
154
|
-
# query.
|
|
205
|
+
# query.geo_spatial(:location.intersects_line => [[ 1, 10 ], [ 2, 10 ]])
|
|
155
206
|
#
|
|
156
207
|
# @example Add a geo intersect criterion for a point.
|
|
157
|
-
# query.
|
|
208
|
+
# query.geo_spatial(:location.intersects_point => [[ 1, 10 ]])
|
|
158
209
|
#
|
|
159
210
|
# @example Add a geo intersect criterion for a polygon.
|
|
160
|
-
# query.
|
|
211
|
+
# query.geo_spatial(:location.intersects_polygon => [[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]])
|
|
161
212
|
#
|
|
162
213
|
# @example Add a geo within criterion for a polygon.
|
|
163
|
-
# query.
|
|
214
|
+
# query.geo_spatial(:location.within_polygon => [[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]])
|
|
164
215
|
#
|
|
165
216
|
# @example Add a geo within criterion for a box.
|
|
166
|
-
# query.
|
|
217
|
+
# query.geo_spatial(:location.within_box => [[ 1, 10 ], [ 2, 10 ])
|
|
167
218
|
#
|
|
168
219
|
# @param [ Hash ] criterion The criterion.
|
|
169
220
|
#
|
|
170
221
|
# @return [ Selectable ] The cloned selectable.
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
222
|
+
def geo_spatial(criterion)
|
|
223
|
+
if criterion.nil?
|
|
224
|
+
raise Errors::CriteriaArgumentRequired, :geo_spatial
|
|
225
|
+
end
|
|
226
|
+
|
|
174
227
|
__merge__(criterion)
|
|
175
228
|
end
|
|
229
|
+
|
|
176
230
|
key :intersects_line, :override, "$geoIntersects", "$geometry" do |value|
|
|
177
231
|
{ "type" => LINE_STRING, "coordinates" => value }
|
|
178
232
|
end
|
|
@@ -187,6 +241,26 @@ module Mongoid
|
|
|
187
241
|
end
|
|
188
242
|
key :within_box, :override, "$geoWithin", "$box"
|
|
189
243
|
|
|
244
|
+
# Add the $eq criterion to the selector.
|
|
245
|
+
#
|
|
246
|
+
# @example Add the $eq criterion.
|
|
247
|
+
# selectable.eq(age: 60)
|
|
248
|
+
#
|
|
249
|
+
# @example Execute an $eq in a where query.
|
|
250
|
+
# selectable.where(:field.eq => 10)
|
|
251
|
+
#
|
|
252
|
+
# @param [ Hash ] criterion The field/value pairs to check.
|
|
253
|
+
#
|
|
254
|
+
# @return [ Selectable ] The cloned selectable.
|
|
255
|
+
def eq(criterion)
|
|
256
|
+
if criterion.nil?
|
|
257
|
+
raise Errors::CriteriaArgumentRequired, :eq
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
and_or_override(criterion, "$eq")
|
|
261
|
+
end
|
|
262
|
+
key :eq, :override, "$eq"
|
|
263
|
+
|
|
190
264
|
# Add the $gt criterion to the selector.
|
|
191
265
|
#
|
|
192
266
|
# @example Add the $gt criterion.
|
|
@@ -198,10 +272,12 @@ module Mongoid
|
|
|
198
272
|
# @param [ Hash ] criterion The field/value pairs to check.
|
|
199
273
|
#
|
|
200
274
|
# @return [ Selectable ] The cloned selectable.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
275
|
+
def gt(criterion)
|
|
276
|
+
if criterion.nil?
|
|
277
|
+
raise Errors::CriteriaArgumentRequired, :gt
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
and_or_override(criterion, "$gt")
|
|
205
281
|
end
|
|
206
282
|
key :gt, :override, "$gt"
|
|
207
283
|
|
|
@@ -216,10 +292,12 @@ module Mongoid
|
|
|
216
292
|
# @param [ Hash ] criterion The field/value pairs to check.
|
|
217
293
|
#
|
|
218
294
|
# @return [ Selectable ] The cloned selectable.
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
295
|
+
def gte(criterion)
|
|
296
|
+
if criterion.nil?
|
|
297
|
+
raise Errors::CriteriaArgumentRequired, :gte
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
and_or_override(criterion, "$gte")
|
|
223
301
|
end
|
|
224
302
|
key :gte, :override, "$gte"
|
|
225
303
|
|
|
@@ -234,13 +312,27 @@ module Mongoid
|
|
|
234
312
|
# @example Execute an $in in a where query.
|
|
235
313
|
# selectable.where(:field.in => [ 1, 2, 3 ])
|
|
236
314
|
#
|
|
237
|
-
# @param [ Hash ]
|
|
315
|
+
# @param [ Hash ] condition The field/value criterion pairs.
|
|
238
316
|
#
|
|
239
317
|
# @return [ Selectable ] The cloned selectable.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
318
|
+
def in(condition)
|
|
319
|
+
if condition.nil?
|
|
320
|
+
raise Errors::CriteriaArgumentRequired, :in
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
condition = expand_condition_to_array_values(condition)
|
|
324
|
+
|
|
325
|
+
if strategy
|
|
326
|
+
send(strategy, condition, "$in")
|
|
327
|
+
else
|
|
328
|
+
condition.inject(clone) do |query, (field, value)|
|
|
329
|
+
v = {'$in' => value}
|
|
330
|
+
if negating?
|
|
331
|
+
v = {'$not' => v}
|
|
332
|
+
end
|
|
333
|
+
query.add_field_expression(field.to_s, v)
|
|
334
|
+
end.reset_strategies!
|
|
335
|
+
end
|
|
244
336
|
end
|
|
245
337
|
alias :any_in :in
|
|
246
338
|
key :in, :intersect, "$in"
|
|
@@ -256,10 +348,12 @@ module Mongoid
|
|
|
256
348
|
# @param [ Hash ] criterion The field/value pairs to check.
|
|
257
349
|
#
|
|
258
350
|
# @return [ Selectable ] The cloned selectable.
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
351
|
+
def lt(criterion)
|
|
352
|
+
if criterion.nil?
|
|
353
|
+
raise Errors::CriteriaArgumentRequired, :lt
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
and_or_override(criterion, "$lt")
|
|
263
357
|
end
|
|
264
358
|
key :lt, :override, "$lt"
|
|
265
359
|
|
|
@@ -274,10 +368,12 @@ module Mongoid
|
|
|
274
368
|
# @param [ Hash ] criterion The field/value pairs to check.
|
|
275
369
|
#
|
|
276
370
|
# @return [ Selectable ] The cloned selectable.
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
371
|
+
def lte(criterion)
|
|
372
|
+
if criterion.nil?
|
|
373
|
+
raise Errors::CriteriaArgumentRequired, :lte
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
and_or_override(criterion, "$lte")
|
|
281
377
|
end
|
|
282
378
|
key :lte, :override, "$lte"
|
|
283
379
|
|
|
@@ -289,9 +385,12 @@ module Mongoid
|
|
|
289
385
|
# @param [ Hash ] criterion The field/distance pairs.
|
|
290
386
|
#
|
|
291
387
|
# @return [ Selectable ] The cloned selectable.
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
388
|
+
def max_distance(criterion)
|
|
389
|
+
if criterion.nil?
|
|
390
|
+
raise Errors::CriteriaArgumentRequired, :max_distance
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
# $maxDistance must be given together with $near
|
|
295
394
|
__add__(criterion, "$maxDistance")
|
|
296
395
|
end
|
|
297
396
|
|
|
@@ -306,10 +405,12 @@ module Mongoid
|
|
|
306
405
|
# @param [ Hash ] criterion The field/mod selections.
|
|
307
406
|
#
|
|
308
407
|
# @return [ Selectable ] The cloned selectable.
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
408
|
+
def mod(criterion)
|
|
409
|
+
if criterion.nil?
|
|
410
|
+
raise Errors::CriteriaArgumentRequired, :mod
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
and_or_override(criterion, "$mod")
|
|
313
414
|
end
|
|
314
415
|
key :mod, :override, "$mod"
|
|
315
416
|
|
|
@@ -324,10 +425,12 @@ module Mongoid
|
|
|
324
425
|
# @param [ Hash ] criterion The field/ne selections.
|
|
325
426
|
#
|
|
326
427
|
# @return [ Selectable ] The cloned selectable.
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
428
|
+
def ne(criterion)
|
|
429
|
+
if criterion.nil?
|
|
430
|
+
raise Errors::CriteriaArgumentRequired, :ne
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
and_or_override(criterion, "$ne")
|
|
331
434
|
end
|
|
332
435
|
alias :excludes :ne
|
|
333
436
|
key :ne, :override, "$ne"
|
|
@@ -343,10 +446,12 @@ module Mongoid
|
|
|
343
446
|
# @param [ Hash ] criterion The field/location pair.
|
|
344
447
|
#
|
|
345
448
|
# @return [ Selectable ] The cloned selectable.
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
449
|
+
def near(criterion)
|
|
450
|
+
if criterion.nil?
|
|
451
|
+
raise Errors::CriteriaArgumentRequired, :near
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
and_or_override(criterion, "$near")
|
|
350
455
|
end
|
|
351
456
|
key :near, :override, "$near"
|
|
352
457
|
|
|
@@ -361,10 +466,12 @@ module Mongoid
|
|
|
361
466
|
# @param [ Hash ] criterion The field/location pair.
|
|
362
467
|
#
|
|
363
468
|
# @return [ Selectable ] The cloned selectable.
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
469
|
+
def near_sphere(criterion)
|
|
470
|
+
if criterion.nil?
|
|
471
|
+
raise Errors::CriteriaArgumentRequired, :near_sphere
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
and_or_override(criterion, "$nearSphere")
|
|
368
475
|
end
|
|
369
476
|
key :near_sphere, :override, "$nearSphere"
|
|
370
477
|
|
|
@@ -379,13 +486,27 @@ module Mongoid
|
|
|
379
486
|
# @example Execute an $nin in a where query.
|
|
380
487
|
# selectable.where(:field.nin => [ 1, 2, 3 ])
|
|
381
488
|
#
|
|
382
|
-
# @param [ Hash ]
|
|
489
|
+
# @param [ Hash ] condition The field/value criterion pairs.
|
|
383
490
|
#
|
|
384
491
|
# @return [ Selectable ] The cloned selectable.
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
492
|
+
def nin(condition)
|
|
493
|
+
if condition.nil?
|
|
494
|
+
raise Errors::CriteriaArgumentRequired, :nin
|
|
495
|
+
end
|
|
496
|
+
|
|
497
|
+
condition = expand_condition_to_array_values(condition)
|
|
498
|
+
|
|
499
|
+
if strategy
|
|
500
|
+
send(strategy, condition, "$nin")
|
|
501
|
+
else
|
|
502
|
+
condition.inject(clone) do |query, (field, value)|
|
|
503
|
+
v = {'$nin' => value}
|
|
504
|
+
if negating?
|
|
505
|
+
v = {'$not' => v}
|
|
506
|
+
end
|
|
507
|
+
query.add_field_expression(field.to_s, v)
|
|
508
|
+
end.reset_strategies!
|
|
509
|
+
end
|
|
389
510
|
end
|
|
390
511
|
alias :not_in :nin
|
|
391
512
|
key :nin, :intersect, "$nin"
|
|
@@ -395,13 +516,12 @@ module Mongoid
|
|
|
395
516
|
# @example Add the $nor selection.
|
|
396
517
|
# selectable.nor(field: 1, field: 2)
|
|
397
518
|
#
|
|
398
|
-
# @param [ Array
|
|
519
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
520
|
+
# matches or Criteria objects.
|
|
399
521
|
#
|
|
400
|
-
# @return [ Selectable ] The
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
def nor(*criterion)
|
|
404
|
-
__multi__(criterion, "$nor")
|
|
522
|
+
# @return [ Selectable ] The new selectable.
|
|
523
|
+
def nor(*criteria)
|
|
524
|
+
_mongoid_add_top_level_operation('$nor', criteria)
|
|
405
525
|
end
|
|
406
526
|
|
|
407
527
|
# Is the current selectable negating the next selection?
|
|
@@ -409,16 +529,14 @@ module Mongoid
|
|
|
409
529
|
# @example Is the selectable negating?
|
|
410
530
|
# selectable.negating?
|
|
411
531
|
#
|
|
412
|
-
# @return [ true
|
|
413
|
-
#
|
|
414
|
-
# @since 1.0.0
|
|
532
|
+
# @return [ true | false ] If the selectable is negating.
|
|
415
533
|
def negating?
|
|
416
534
|
!!negating
|
|
417
535
|
end
|
|
418
536
|
|
|
419
|
-
# Negate the next selection.
|
|
537
|
+
# Negate the arguments, or the next selection if no arguments are given.
|
|
420
538
|
#
|
|
421
|
-
# @example Negate the selection.
|
|
539
|
+
# @example Negate the next selection.
|
|
422
540
|
# selectable.not.in(field: [ 1, 2 ])
|
|
423
541
|
#
|
|
424
542
|
# @example Add the $not criterion.
|
|
@@ -427,34 +545,130 @@ module Mongoid
|
|
|
427
545
|
# @example Execute a $not in a where query.
|
|
428
546
|
# selectable.where(:field.not => /Bob/)
|
|
429
547
|
#
|
|
430
|
-
# @param [ Hash ]
|
|
548
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
549
|
+
# matches or Criteria objects to negate.
|
|
431
550
|
#
|
|
432
|
-
# @return [ Selectable ] The
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
def not(*criterion)
|
|
436
|
-
if criterion.empty?
|
|
551
|
+
# @return [ Selectable ] The new selectable.
|
|
552
|
+
def not(*criteria)
|
|
553
|
+
if criteria.empty?
|
|
437
554
|
dup.tap { |query| query.negating = true }
|
|
438
555
|
else
|
|
439
|
-
|
|
556
|
+
criteria.compact.inject(self.clone) do |c, new_s|
|
|
557
|
+
if new_s.is_a?(Selectable)
|
|
558
|
+
new_s = new_s.selector
|
|
559
|
+
end
|
|
560
|
+
_mongoid_expand_keys(new_s).each do |k, v|
|
|
561
|
+
k = k.to_s
|
|
562
|
+
if c.selector[k] || k.start_with?('$')
|
|
563
|
+
c = c.send(:__multi__, [{'$nor' => [{k => v}]}], '$and')
|
|
564
|
+
else
|
|
565
|
+
if v.is_a?(Hash)
|
|
566
|
+
c = c.send(:__multi__, [{'$nor' => [{k => v}]}], '$and')
|
|
567
|
+
else
|
|
568
|
+
if v.is_a?(Regexp)
|
|
569
|
+
negated_operator = '$not'
|
|
570
|
+
else
|
|
571
|
+
negated_operator = '$ne'
|
|
572
|
+
end
|
|
573
|
+
c = c.send(:__override__, {k => v}, negated_operator)
|
|
574
|
+
end
|
|
575
|
+
end
|
|
576
|
+
end
|
|
577
|
+
c
|
|
578
|
+
end
|
|
440
579
|
end
|
|
441
580
|
end
|
|
442
581
|
key :not, :override, "$not"
|
|
443
582
|
|
|
444
|
-
#
|
|
583
|
+
# Creates a disjunction using $or from the existing criteria in the
|
|
584
|
+
# receiver and the provided arguments.
|
|
585
|
+
#
|
|
586
|
+
# This behavior (receiver becoming one of the disjunction operands)
|
|
587
|
+
# matches ActiveRecord's +or+ behavior.
|
|
445
588
|
#
|
|
446
|
-
#
|
|
589
|
+
# Use +any_of+ to add a disjunction of the arguments as an additional
|
|
590
|
+
# constraint to the criteria already existing in the receiver.
|
|
591
|
+
#
|
|
592
|
+
# Each argument can be a Hash, a Criteria object, an array of
|
|
593
|
+
# Hash or Criteria objects, or a nested array. Nested arrays will be
|
|
594
|
+
# flattened and can be of any depth. Passing arrays is deprecated.
|
|
595
|
+
#
|
|
596
|
+
# @example Add the $or selection where both fields must have the specified values.
|
|
447
597
|
# selectable.or(field: 1, field: 2)
|
|
448
598
|
#
|
|
449
|
-
# @
|
|
599
|
+
# @example Add the $or selection where either value match is sufficient.
|
|
600
|
+
# selectable.or({field: 1}, {field: 2})
|
|
450
601
|
#
|
|
451
|
-
# @
|
|
602
|
+
# @example Same as previous example but using the deprecated array wrap.
|
|
603
|
+
# selectable.or([{field: 1}, {field: 2}])
|
|
604
|
+
#
|
|
605
|
+
# @example Same as previous example, also deprecated.
|
|
606
|
+
# selectable.or([{field: 1}], [{field: 2}])
|
|
452
607
|
#
|
|
453
|
-
# @
|
|
454
|
-
|
|
455
|
-
|
|
608
|
+
# @param [ Hash | Criteria | Array<Hash | Criteria>, ... ] criteria
|
|
609
|
+
# Multiple key/value pair matches or Criteria objects, or arrays
|
|
610
|
+
# thereof. Passing arrays is deprecated.
|
|
611
|
+
#
|
|
612
|
+
# @return [ Selectable ] The new selectable.
|
|
613
|
+
def or(*criteria)
|
|
614
|
+
_mongoid_add_top_level_operation('$or', criteria)
|
|
615
|
+
end
|
|
616
|
+
|
|
617
|
+
# Adds a disjunction of the arguments as an additional constraint
|
|
618
|
+
# to the criteria already existing in the receiver.
|
|
619
|
+
#
|
|
620
|
+
# Use +or+ to make the receiver one of the disjunction operands.
|
|
621
|
+
#
|
|
622
|
+
# Each argument can be a Hash, a Criteria object, an array of
|
|
623
|
+
# Hash or Criteria objects, or a nested array. Nested arrays will be
|
|
624
|
+
# flattened and can be of any depth. Passing arrays is deprecated.
|
|
625
|
+
#
|
|
626
|
+
# @example Add the $or selection where both fields must have the specified values.
|
|
627
|
+
# selectable.any_of(field: 1, field: 2)
|
|
628
|
+
#
|
|
629
|
+
# @example Add the $or selection where either value match is sufficient.
|
|
630
|
+
# selectable.any_of({field: 1}, {field: 2})
|
|
631
|
+
#
|
|
632
|
+
# @example Same as previous example but using the deprecated array wrap.
|
|
633
|
+
# selectable.any_of([{field: 1}, {field: 2}])
|
|
634
|
+
#
|
|
635
|
+
# @example Same as previous example, also deprecated.
|
|
636
|
+
# selectable.any_of([{field: 1}], [{field: 2}])
|
|
637
|
+
#
|
|
638
|
+
# @param [ Hash | Criteria | Array<Hash | Criteria>, ... ] criteria
|
|
639
|
+
# Multiple key/value pair matches or Criteria objects, or arrays
|
|
640
|
+
# thereof. Passing arrays is deprecated.
|
|
641
|
+
#
|
|
642
|
+
# @return [ Selectable ] The new selectable.
|
|
643
|
+
def any_of(*criteria)
|
|
644
|
+
criteria = _mongoid_flatten_arrays(criteria)
|
|
645
|
+
case criteria.length
|
|
646
|
+
when 0
|
|
647
|
+
clone
|
|
648
|
+
when 1
|
|
649
|
+
# When we have a single criteria, any_of behaves like and.
|
|
650
|
+
# Note: criteria can be a Query object, which #where method does
|
|
651
|
+
# not support.
|
|
652
|
+
self.and(*criteria)
|
|
653
|
+
else
|
|
654
|
+
# When we have multiple criteria, combine them all with $or
|
|
655
|
+
# and add the result to self.
|
|
656
|
+
exprs = criteria.map do |criterion|
|
|
657
|
+
if criterion.is_a?(Selectable)
|
|
658
|
+
_mongoid_expand_keys(criterion.selector)
|
|
659
|
+
else
|
|
660
|
+
Hash[criterion.map do |k, v|
|
|
661
|
+
if k.is_a?(Symbol)
|
|
662
|
+
[k.to_s, v]
|
|
663
|
+
else
|
|
664
|
+
[k, v]
|
|
665
|
+
end
|
|
666
|
+
end]
|
|
667
|
+
end
|
|
668
|
+
end
|
|
669
|
+
self.and('$or' => exprs)
|
|
670
|
+
end
|
|
456
671
|
end
|
|
457
|
-
alias :any_of :or
|
|
458
672
|
|
|
459
673
|
# Add a $size selection for array fields.
|
|
460
674
|
#
|
|
@@ -470,9 +684,11 @@ module Mongoid
|
|
|
470
684
|
# @param [ Hash ] criterion The field/size pairs criterion.
|
|
471
685
|
#
|
|
472
686
|
# @return [ Selectable ] The cloned selectable.
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
687
|
+
def with_size(criterion)
|
|
688
|
+
if criterion.nil?
|
|
689
|
+
raise Errors::CriteriaArgumentRequired, :with_size
|
|
690
|
+
end
|
|
691
|
+
|
|
476
692
|
typed_override(criterion, "$size") do |value|
|
|
477
693
|
::Integer.evolve(value)
|
|
478
694
|
end
|
|
@@ -494,9 +710,11 @@ module Mongoid
|
|
|
494
710
|
# @param [ Hash ] criterion The field/type pairs.
|
|
495
711
|
#
|
|
496
712
|
# @return [ Selectable ] The cloned selectable.
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
713
|
+
def with_type(criterion)
|
|
714
|
+
if criterion.nil?
|
|
715
|
+
raise Errors::CriteriaArgumentRequired, :with_type
|
|
716
|
+
end
|
|
717
|
+
|
|
500
718
|
typed_override(criterion, "$type") do |value|
|
|
501
719
|
::Integer.evolve(value)
|
|
502
720
|
end
|
|
@@ -518,30 +736,30 @@ module Mongoid
|
|
|
518
736
|
# conditions in a query. Mongoid will build such a query but the
|
|
519
737
|
# server will return an error when trying to execute it.
|
|
520
738
|
#
|
|
521
|
-
# @param [ String
|
|
739
|
+
# @param [ String | Symbol ] terms A string of terms that MongoDB parses
|
|
522
740
|
# and uses to query the text index.
|
|
523
741
|
# @param [ Hash ] opts Text search options. See MongoDB documentation
|
|
524
742
|
# for options.
|
|
525
743
|
#
|
|
526
744
|
# @return [ Selectable ] The cloned selectable.
|
|
527
|
-
#
|
|
528
|
-
# @since 2.2.0
|
|
529
745
|
def text_search(terms, opts = nil)
|
|
746
|
+
if terms.nil?
|
|
747
|
+
raise Errors::CriteriaArgumentRequired, :terms
|
|
748
|
+
end
|
|
749
|
+
|
|
530
750
|
clone.tap do |query|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
query.selector = query.selector.merge(criterion)
|
|
544
|
-
end
|
|
751
|
+
criterion = {'$text' => { '$search' => terms }}
|
|
752
|
+
criterion['$text'].merge!(opts) if opts
|
|
753
|
+
if query.selector['$text']
|
|
754
|
+
# Per https://docs.mongodb.com/manual/reference/operator/query/text/
|
|
755
|
+
# multiple $text expressions are not currently supported by
|
|
756
|
+
# MongoDB server, but build the query correctly instead of
|
|
757
|
+
# overwriting previous text search condition with the currently
|
|
758
|
+
# given one.
|
|
759
|
+
Mongoid.logger.warn('Multiple $text expressions per query are not currently supported by the server')
|
|
760
|
+
query.selector = {'$and' => [query.selector]}.merge(criterion)
|
|
761
|
+
else
|
|
762
|
+
query.selector = query.selector.merge(criterion)
|
|
545
763
|
end
|
|
546
764
|
end
|
|
547
765
|
end
|
|
@@ -556,23 +774,41 @@ module Mongoid
|
|
|
556
774
|
# @example Add a javascript selection.
|
|
557
775
|
# selectable.where("this.name == 'syd'")
|
|
558
776
|
#
|
|
559
|
-
# @param [ String
|
|
777
|
+
# @param [ String | Hash ] criterion The javascript or standard selection.
|
|
560
778
|
#
|
|
561
779
|
# @return [ Selectable ] The cloned selectable.
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
780
|
+
def where(*criteria)
|
|
781
|
+
criteria.inject(clone) do |query, criterion|
|
|
782
|
+
if criterion.nil?
|
|
783
|
+
raise Errors::CriteriaArgumentRequired, :where
|
|
784
|
+
end
|
|
785
|
+
|
|
786
|
+
# We need to save the criterion in an instance variable so
|
|
787
|
+
# Modifiable methods know how to create a polymorphic object.
|
|
788
|
+
# Note that this method in principle accepts multiple criteria,
|
|
789
|
+
# but only the first one will be stored in @criterion. This
|
|
790
|
+
# works out to be fine because first_or_create etc. methods
|
|
791
|
+
# only ever specify one criterion to #where.
|
|
792
|
+
@criterion = criterion
|
|
793
|
+
if criterion.is_a?(String)
|
|
794
|
+
js_query(criterion)
|
|
795
|
+
else
|
|
796
|
+
expr_query(criterion)
|
|
797
|
+
end
|
|
798
|
+
end.reset_strategies!
|
|
569
799
|
end
|
|
570
800
|
|
|
571
801
|
private
|
|
572
802
|
|
|
573
|
-
#
|
|
803
|
+
# Adds the specified expression to the query.
|
|
574
804
|
#
|
|
575
|
-
#
|
|
805
|
+
# Criterion must be a hash in one of the following forms:
|
|
806
|
+
# - {field_name: value}
|
|
807
|
+
# - {'field_name' => value}
|
|
808
|
+
# - {key_instance: value}
|
|
809
|
+
# - {'$operator' => operator_value_expression}
|
|
810
|
+
#
|
|
811
|
+
# Field name and operator may be given as either strings or symbols.
|
|
576
812
|
#
|
|
577
813
|
# @example Create the selection.
|
|
578
814
|
# selectable.expr_query(age: 50)
|
|
@@ -580,11 +816,27 @@ module Mongoid
|
|
|
580
816
|
# @param [ Hash ] criterion The field/value pairs.
|
|
581
817
|
#
|
|
582
818
|
# @return [ Selectable ] The cloned selectable.
|
|
583
|
-
#
|
|
584
|
-
# @since 1.0.0
|
|
819
|
+
# @api private
|
|
585
820
|
def expr_query(criterion)
|
|
586
|
-
|
|
587
|
-
|
|
821
|
+
if criterion.nil?
|
|
822
|
+
raise ArgumentError, 'Criterion cannot be nil here'
|
|
823
|
+
end
|
|
824
|
+
unless Hash === criterion
|
|
825
|
+
raise Errors::InvalidQuery, "Expression must be a Hash: #{Errors::InvalidQuery.truncate_expr(criterion)}"
|
|
826
|
+
end
|
|
827
|
+
|
|
828
|
+
normalized = _mongoid_expand_keys(criterion)
|
|
829
|
+
clone.tap do |query|
|
|
830
|
+
normalized.each do |field, value|
|
|
831
|
+
field_s = field.to_s
|
|
832
|
+
if field_s.start_with?('$')
|
|
833
|
+
# Query expression-level operator, like $and or $where
|
|
834
|
+
query.add_operator_expression(field_s, value)
|
|
835
|
+
else
|
|
836
|
+
query.add_field_expression(field, value)
|
|
837
|
+
end
|
|
838
|
+
end
|
|
839
|
+
query.reset_strategies!
|
|
588
840
|
end
|
|
589
841
|
end
|
|
590
842
|
|
|
@@ -598,11 +850,9 @@ module Mongoid
|
|
|
598
850
|
# end
|
|
599
851
|
#
|
|
600
852
|
# @param [ Hash ] criterion The criterion.
|
|
601
|
-
#
|
|
602
|
-
# @since 1.0.0
|
|
603
853
|
def typed_override(criterion, operator)
|
|
604
854
|
if criterion
|
|
605
|
-
criterion.
|
|
855
|
+
criterion.transform_values! do |value|
|
|
606
856
|
yield(value)
|
|
607
857
|
end
|
|
608
858
|
end
|
|
@@ -619,11 +869,15 @@ module Mongoid
|
|
|
619
869
|
# @param [ String ] criterion The javascript as a string.
|
|
620
870
|
#
|
|
621
871
|
# @return [ Selectable ] The cloned selectable
|
|
622
|
-
#
|
|
623
|
-
# @since 1.0.0
|
|
624
872
|
def js_query(criterion)
|
|
625
873
|
clone.tap do |query|
|
|
626
|
-
|
|
874
|
+
if negating?
|
|
875
|
+
query.add_operator_expression('$and',
|
|
876
|
+
[{'$nor' => [{'$where' => criterion}]}])
|
|
877
|
+
else
|
|
878
|
+
query.add_operator_expression('$where', criterion)
|
|
879
|
+
end
|
|
880
|
+
query.reset_strategies!
|
|
627
881
|
end
|
|
628
882
|
end
|
|
629
883
|
|
|
@@ -636,8 +890,6 @@ module Mongoid
|
|
|
636
890
|
# @param [ Hash ] criterion The selection to store.
|
|
637
891
|
#
|
|
638
892
|
# @return [ Selectable ] The cloned selectable.
|
|
639
|
-
#
|
|
640
|
-
# @since 1.0.0
|
|
641
893
|
# @api private
|
|
642
894
|
def selection(criterion = nil)
|
|
643
895
|
clone.tap do |query|
|
|
@@ -650,23 +902,19 @@ module Mongoid
|
|
|
650
902
|
end
|
|
651
903
|
end
|
|
652
904
|
|
|
653
|
-
#
|
|
654
|
-
#
|
|
905
|
+
# Combine operator expessions onto a Criteria using either
|
|
906
|
+
# an override or ands depending on the status of the
|
|
907
|
+
# Mongoid.overwrite_chained_operators feature flag.
|
|
655
908
|
#
|
|
656
|
-
# @
|
|
909
|
+
# @param [ Hash ] The criterion to add to the criteria.
|
|
910
|
+
# @param [ String ] operator The MongoDB operator.
|
|
657
911
|
#
|
|
658
|
-
# @
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
#
|
|
665
|
-
# @since 1.0.0
|
|
666
|
-
def with_array_values(criterion)
|
|
667
|
-
return nil unless criterion
|
|
668
|
-
criterion.each_pair do |key, value|
|
|
669
|
-
criterion[key] = value.__array__
|
|
912
|
+
# @return [ Criteria ] The resulting criteria.
|
|
913
|
+
def and_or_override(criterion, operator)
|
|
914
|
+
if Mongoid.overwrite_chained_operators
|
|
915
|
+
__override__(criterion, operator)
|
|
916
|
+
else
|
|
917
|
+
and_with_operator(criterion, operator)
|
|
670
918
|
end
|
|
671
919
|
end
|
|
672
920
|
|
|
@@ -678,8 +926,6 @@ module Mongoid
|
|
|
678
926
|
# Selectable.forwardables
|
|
679
927
|
#
|
|
680
928
|
# @return [ Array<Symbol> ] The names of the forwardable methods.
|
|
681
|
-
#
|
|
682
|
-
# @since 1.0.0
|
|
683
929
|
def forwardables
|
|
684
930
|
public_instance_methods(false) -
|
|
685
931
|
[ :negating, :negating=, :negating?, :selector, :selector= ]
|