mongoid 7.4.3 → 8.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +3 -3
- data/Rakefile +25 -0
- data/lib/config/locales/en.yml +52 -28
- data/lib/mongoid/association/accessors.rb +38 -9
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +33 -10
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +65 -41
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +23 -4
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +28 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +5 -5
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +14 -3
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -24
- data/lib/mongoid/association/referenced/has_many/proxy.rb +26 -16
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +2 -2
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic.rb +7 -0
- data/lib/mongoid/attributes/dynamic.rb +3 -3
- data/lib/mongoid/attributes/nested.rb +5 -5
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +1 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/attributes.rb +43 -40
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +43 -10
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/validators/storage.rb +3 -3
- data/lib/mongoid/config/options.rb +3 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config.rb +62 -17
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +180 -21
- data/lib/mongoid/contextual/mongo.rb +260 -217
- data/lib/mongoid/contextual/none.rb +67 -5
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +7 -4
- data/lib/mongoid/criteria/includable.rb +24 -20
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -15
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -9
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +3 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +21 -0
- data/lib/mongoid/criteria/queryable/optional.rb +5 -11
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +31 -37
- data/lib/mongoid/criteria/queryable/selector.rb +93 -8
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +16 -35
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +135 -34
- data/lib/mongoid/equality.rb +8 -8
- data/lib/mongoid/errors/document_not_found.rb +33 -12
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +2 -2
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +37 -8
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +8 -6
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +27 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +55 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +9 -4
- data/lib/mongoid/fields/standard.rb +7 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +233 -40
- data/lib/mongoid/findable.rb +34 -13
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +185 -16
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher.rb +33 -13
- data/lib/mongoid/persistable/creatable.rb +18 -9
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +2 -2
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +19 -12
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistable.rb +3 -3
- data/lib/mongoid/persistence_context.rb +63 -10
- data/lib/mongoid/query_cache.rb +8 -260
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +26 -22
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/shardable.rb +35 -11
- data/lib/mongoid/stateful.rb +35 -9
- data/lib/mongoid/tasks/database.rb +0 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +42 -12
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +5 -4
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +6 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +2 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -12
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +95 -1
- data/spec/integration/callbacks_spec.rb +246 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +115 -76
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +1 -17
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +235 -40
- data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +202 -201
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +8 -8
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +160 -119
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +14 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +551 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/options_spec.rb +1 -0
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +57 -2
- data/spec/mongoid/config_spec.rb +78 -18
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +1336 -69
- data/spec/mongoid/contextual/mongo_spec.rb +1253 -247
- data/spec/mongoid/contextual/none_spec.rb +38 -0
- data/spec/mongoid/copyable_spec.rb +451 -1
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +289 -124
- data/spec/mongoid/criteria/queryable/selector_spec.rb +89 -4
- data/spec/mongoid/criteria/queryable/storable_spec.rb +72 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +0 -1
- data/spec/mongoid/criteria_spec.rb +475 -1199
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +634 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +37 -12
- data/spec/mongoid/fields_spec.rb +364 -50
- data/spec/mongoid/findable_spec.rb +80 -15
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +39 -20
- data/spec/mongoid/interceptable_spec.rb +807 -27
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +2 -2
- data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
- data/spec/mongoid/persistence_context_spec.rb +50 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +0 -154
- data/spec/mongoid/reloadable_spec.rb +59 -2
- data/spec/mongoid/scopable_spec.rb +54 -16
- data/spec/mongoid/shardable_models.rb +14 -0
- data/spec/mongoid/shardable_spec.rb +157 -51
- data/spec/mongoid/stateful_spec.rb +28 -0
- data/spec/mongoid/timestamps_spec.rb +390 -0
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +116 -0
- data/spec/mongoid/touchable_spec_models.rb +12 -8
- data/spec/mongoid/traversable_spec.rb +4 -11
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +59 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +1 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/docker_runner.rb +7 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +10 -2
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +36 -40
- data/spec/shared/shlib/server.sh +32 -8
- data/spec/shared/shlib/set_env.sh +4 -4
- data/spec/support/constraints.rb +24 -0
- data/spec/support/macros.rb +46 -0
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +3 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/code.rb +2 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +4 -1
- metadata +682 -635
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -479,10 +479,24 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
479
479
|
query.elem_match(users: { name: "value" })
|
480
480
|
end
|
481
481
|
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
482
|
+
context "when overwrite_chained_operators is false" do
|
483
|
+
config_override :overwrite_chained_operators, false
|
484
|
+
|
485
|
+
it "adds the $elemMatch expression" do
|
486
|
+
expect(selection.selector).to eq({
|
487
|
+
"users" => { "$elemMatch" => { "name" => "value" }}
|
488
|
+
})
|
489
|
+
end
|
490
|
+
end
|
491
|
+
|
492
|
+
context "when overwrite_chained_operators is true" do
|
493
|
+
config_override :overwrite_chained_operators, true
|
494
|
+
|
495
|
+
it "adds the $elemMatch expression" do
|
496
|
+
expect(selection.selector).to eq({
|
497
|
+
"users" => { "$elemMatch" => { name: "value" }}
|
498
|
+
})
|
499
|
+
end
|
486
500
|
end
|
487
501
|
|
488
502
|
it "returns a cloned query" do
|
@@ -523,11 +537,26 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
523
537
|
)
|
524
538
|
end
|
525
539
|
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
540
|
+
context "when overwrite_chained_operators is false" do
|
541
|
+
config_override :overwrite_chained_operators, false
|
542
|
+
|
543
|
+
it "adds the $elemMatch expression" do
|
544
|
+
expect(selection.selector).to eq({
|
545
|
+
"users" => { "$elemMatch" => { "name" => "value" }},
|
546
|
+
"comments" => { "$elemMatch" => { "text" => "value" }}
|
547
|
+
})
|
548
|
+
end
|
549
|
+
end
|
550
|
+
|
551
|
+
context "when overwrite_chained_operators is true" do
|
552
|
+
config_override :overwrite_chained_operators, true
|
553
|
+
|
554
|
+
it "adds the $elemMatch expression" do
|
555
|
+
expect(selection.selector).to eq({
|
556
|
+
"users" => { "$elemMatch" => { name: "value" }},
|
557
|
+
"comments" => { "$elemMatch" => { text: "value" }}
|
558
|
+
})
|
559
|
+
end
|
531
560
|
end
|
532
561
|
|
533
562
|
it "returns a cloned query" do
|
@@ -546,11 +575,26 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
546
575
|
elem_match(comments: { text: "value" })
|
547
576
|
end
|
548
577
|
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
578
|
+
context "when overwrite_chained_operators is false" do
|
579
|
+
config_override :overwrite_chained_operators, false
|
580
|
+
|
581
|
+
it "adds the $elemMatch expression" do
|
582
|
+
expect(selection.selector).to eq({
|
583
|
+
"users" => { "$elemMatch" => { "name" => "value" }},
|
584
|
+
"comments" => { "$elemMatch" => { "text" => "value" }}
|
585
|
+
})
|
586
|
+
end
|
587
|
+
end
|
588
|
+
|
589
|
+
context "when overwrite_chained_operators is true" do
|
590
|
+
config_override :overwrite_chained_operators, true
|
591
|
+
|
592
|
+
it "adds the $elemMatch expression" do
|
593
|
+
expect(selection.selector).to eq({
|
594
|
+
"users" => { "$elemMatch" => { name: "value" }},
|
595
|
+
"comments" => { "$elemMatch" => { text: "value" }}
|
596
|
+
})
|
597
|
+
end
|
554
598
|
end
|
555
599
|
|
556
600
|
it "returns a cloned query" do
|
@@ -566,10 +610,25 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
566
610
|
elem_match(users: { state: "new" })
|
567
611
|
end
|
568
612
|
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
613
|
+
context "when overwrite_chained_operators is false" do
|
614
|
+
config_override :overwrite_chained_operators, false
|
615
|
+
|
616
|
+
it "adds an $elemMatch expression" do
|
617
|
+
expect(selection.selector).to eq({
|
618
|
+
"users" => { "$elemMatch" => { "name" => "value" } },
|
619
|
+
"$and" => [ { "users" => { "$elemMatch" => { "state" => "new" } } } ],
|
620
|
+
})
|
621
|
+
end
|
622
|
+
end
|
623
|
+
|
624
|
+
context "when overwrite_chained_operators is true" do
|
625
|
+
config_override :overwrite_chained_operators, true
|
626
|
+
|
627
|
+
it "overrides the $elemMatch expression" do
|
628
|
+
expect(selection.selector).to eq({
|
629
|
+
"users" => { "$elemMatch" => { state: "new" }}
|
630
|
+
})
|
631
|
+
end
|
573
632
|
end
|
574
633
|
|
575
634
|
it "returns a cloned query" do
|
@@ -695,127 +754,119 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
695
754
|
end
|
696
755
|
end
|
697
756
|
|
698
|
-
|
699
|
-
describe "#geo_spacial" do
|
757
|
+
describe "#geo_spatial" do
|
700
758
|
|
701
|
-
|
759
|
+
let(:query_method) { :geo_spatial }
|
702
760
|
|
703
|
-
|
704
|
-
|
761
|
+
it_behaves_like 'requires an argument'
|
762
|
+
it_behaves_like 'requires a non-nil argument'
|
705
763
|
|
706
|
-
|
764
|
+
context "when provided a criterion" do
|
707
765
|
|
708
|
-
|
766
|
+
context "when the geometry is a point intersection" do
|
709
767
|
|
710
|
-
|
711
|
-
|
712
|
-
|
768
|
+
let(:selection) do
|
769
|
+
query.geo_spatial(:location.intersects_point => [ 1, 10 ])
|
770
|
+
end
|
713
771
|
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
}
|
772
|
+
it "adds the $geoIntersects expression" do
|
773
|
+
expect(selection.selector).to eq({
|
774
|
+
"location" => {
|
775
|
+
"$geoIntersects" => {
|
776
|
+
"$geometry" => {
|
777
|
+
"type" => "Point",
|
778
|
+
"coordinates" => [ 1, 10 ]
|
722
779
|
}
|
723
780
|
}
|
724
|
-
}
|
725
|
-
|
726
|
-
|
727
|
-
it_behaves_like "returns a cloned query"
|
781
|
+
}
|
782
|
+
})
|
728
783
|
end
|
729
784
|
|
730
|
-
|
785
|
+
it_behaves_like "returns a cloned query"
|
786
|
+
end
|
731
787
|
|
732
|
-
|
733
|
-
query.public_send(query_method, :location.intersects_line => [[ 1, 10 ], [ 2, 10 ]])
|
734
|
-
end
|
788
|
+
context "when the geometry is a line intersection" do
|
735
789
|
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
790
|
+
let(:selection) do
|
791
|
+
query.geo_spatial(:location.intersects_line => [[ 1, 10 ], [ 2, 10 ]])
|
792
|
+
end
|
793
|
+
|
794
|
+
it "adds the $geoIntersects expression" do
|
795
|
+
expect(selection.selector).to eq({
|
796
|
+
"location" => {
|
797
|
+
"$geoIntersects" => {
|
798
|
+
"$geometry" => {
|
799
|
+
"type" => "LineString",
|
800
|
+
"coordinates" => [[ 1, 10 ], [ 2, 10 ]]
|
744
801
|
}
|
745
802
|
}
|
746
|
-
}
|
747
|
-
|
748
|
-
|
749
|
-
it_behaves_like "returns a cloned query"
|
803
|
+
}
|
804
|
+
})
|
750
805
|
end
|
751
806
|
|
752
|
-
|
807
|
+
it_behaves_like "returns a cloned query"
|
808
|
+
end
|
753
809
|
|
754
|
-
|
755
|
-
query.public_send(query_method,
|
756
|
-
:location.intersects_polygon => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]]
|
757
|
-
)
|
758
|
-
end
|
810
|
+
context "when the geometry is a polygon intersection" do
|
759
811
|
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
812
|
+
let(:selection) do
|
813
|
+
query.geo_spatial(:location.intersects_polygon => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]])
|
814
|
+
end
|
815
|
+
|
816
|
+
it "adds the $geoIntersects expression" do
|
817
|
+
expect(selection.selector).to eq({
|
818
|
+
"location" => {
|
819
|
+
"$geoIntersects" => {
|
820
|
+
"$geometry" => {
|
821
|
+
"type" => "Polygon",
|
822
|
+
"coordinates" => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]]
|
768
823
|
}
|
769
824
|
}
|
770
|
-
}
|
771
|
-
|
825
|
+
}
|
826
|
+
})
|
827
|
+
end
|
828
|
+
|
829
|
+
it_behaves_like "returns a cloned query"
|
830
|
+
end
|
831
|
+
|
832
|
+
context "when the geometry is within a polygon" do
|
772
833
|
|
773
|
-
|
834
|
+
let(:selection) do
|
835
|
+
query.geo_spatial(:location.within_polygon => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]])
|
774
836
|
end
|
775
837
|
|
776
|
-
|
838
|
+
it "adds the $geoIntersects expression" do
|
839
|
+
expect(selection.selector).to eq({
|
840
|
+
"location" => {
|
841
|
+
"$geoWithin" => {
|
842
|
+
"$geometry" => {
|
843
|
+
"type" => "Polygon",
|
844
|
+
"coordinates" => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]]
|
845
|
+
}
|
846
|
+
}
|
847
|
+
}
|
848
|
+
})
|
849
|
+
end
|
777
850
|
|
851
|
+
context "when used with the $box operator ($geoWithin query) " do
|
778
852
|
let(:selection) do
|
779
|
-
query.
|
780
|
-
:location.within_polygon => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]]
|
781
|
-
)
|
853
|
+
query.geo_spatial(:location.within_box => [[ 1, 10 ], [ 2, 10 ]])
|
782
854
|
end
|
783
855
|
|
784
856
|
it "adds the $geoIntersects expression" do
|
785
857
|
expect(selection.selector).to eq({
|
786
858
|
"location" => {
|
787
859
|
"$geoWithin" => {
|
788
|
-
"$
|
789
|
-
|
790
|
-
|
791
|
-
}
|
860
|
+
"$box" => [
|
861
|
+
[ 1, 10 ], [ 2, 10 ]
|
862
|
+
]
|
792
863
|
}
|
793
864
|
}
|
794
865
|
})
|
795
866
|
end
|
796
|
-
|
797
|
-
context "when used with the $box operator ($geoWithin query) " do
|
798
|
-
let(:selection) do
|
799
|
-
query.public_send(query_method,
|
800
|
-
:location.within_box => [[ 1, 10 ], [ 2, 10 ]]
|
801
|
-
)
|
802
|
-
end
|
803
|
-
|
804
|
-
it "adds the $geoIntersects expression" do
|
805
|
-
expect(selection.selector).to eq({
|
806
|
-
"location" => {
|
807
|
-
"$geoWithin" => {
|
808
|
-
"$box" => [
|
809
|
-
[ 1, 10 ], [ 2, 10 ]
|
810
|
-
]
|
811
|
-
}
|
812
|
-
}
|
813
|
-
})
|
814
|
-
end
|
815
|
-
end
|
816
|
-
|
817
|
-
it_behaves_like "returns a cloned query"
|
818
867
|
end
|
868
|
+
|
869
|
+
it_behaves_like "returns a cloned query"
|
819
870
|
end
|
820
871
|
end
|
821
872
|
end
|
@@ -887,18 +938,40 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
887
938
|
|
888
939
|
context "when the criterion are on the same field" do
|
889
940
|
|
890
|
-
|
891
|
-
|
892
|
-
end
|
941
|
+
context "when overwrite_chained_operators is true" do
|
942
|
+
config_override :overwrite_chained_operators, true
|
893
943
|
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
944
|
+
let(:selection) do
|
945
|
+
query.gt(first: 10).gt(first: 15)
|
946
|
+
end
|
947
|
+
|
948
|
+
it "overwrites the first $gt selector" do
|
949
|
+
expect(selection.selector).to eq({
|
950
|
+
"first" => { "$gt" => 15 },
|
951
|
+
})
|
952
|
+
end
|
953
|
+
|
954
|
+
it "returns a cloned query" do
|
955
|
+
expect(selection).to_not equal(query)
|
956
|
+
end
|
898
957
|
end
|
899
958
|
|
900
|
-
|
901
|
-
|
959
|
+
context "when overwrite_chained_operators is false" do
|
960
|
+
config_override :overwrite_chained_operators, false
|
961
|
+
let(:selection) do
|
962
|
+
query.gt(first: 10).gt(first: 15)
|
963
|
+
end
|
964
|
+
|
965
|
+
it "overwrites the first $gt selector" do
|
966
|
+
expect(selection.selector).to eq({
|
967
|
+
"first" => { "$gt" => 10 },
|
968
|
+
"$and" => [{ "first" => { "$gt" => 15 } }]
|
969
|
+
})
|
970
|
+
end
|
971
|
+
|
972
|
+
it "returns a cloned query" do
|
973
|
+
expect(selection).to_not equal(query)
|
974
|
+
end
|
902
975
|
end
|
903
976
|
end
|
904
977
|
end
|
@@ -975,10 +1048,25 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
975
1048
|
query.gte(first: 10).gte(first: 15)
|
976
1049
|
end
|
977
1050
|
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
|
1051
|
+
context "when overwrite_chained_operators is false" do
|
1052
|
+
config_override :overwrite_chained_operators, false
|
1053
|
+
|
1054
|
+
it "adds a second $gte selector" do
|
1055
|
+
expect(selection.selector).to eq({
|
1056
|
+
"first" => { "$gte" => 10 },
|
1057
|
+
"$and" => [ { "first" => { "$gte" => 15 } } ]
|
1058
|
+
})
|
1059
|
+
end
|
1060
|
+
end
|
1061
|
+
|
1062
|
+
context "when overwrite_chained_operators is true" do
|
1063
|
+
config_override :overwrite_chained_operators, true
|
1064
|
+
|
1065
|
+
it "overwrites the first $gte selector" do
|
1066
|
+
expect(selection.selector).to eq({
|
1067
|
+
"first" => { "$gte" => 15 }
|
1068
|
+
})
|
1069
|
+
end
|
982
1070
|
end
|
983
1071
|
|
984
1072
|
it "returns a cloned query" do
|
@@ -1152,10 +1240,25 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
1152
1240
|
query.lt(first: 10).lt(first: 15)
|
1153
1241
|
end
|
1154
1242
|
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1243
|
+
context "when overwrite_chained_operators is false" do
|
1244
|
+
config_override :overwrite_chained_operators, false
|
1245
|
+
|
1246
|
+
it "adds a second $lt selector" do
|
1247
|
+
expect(selection.selector).to eq({
|
1248
|
+
"first" => { "$lt" => 10 },
|
1249
|
+
"$and" => [ { "first" => { "$lt" => 15 } } ]
|
1250
|
+
})
|
1251
|
+
end
|
1252
|
+
end
|
1253
|
+
|
1254
|
+
context "when overwrite_chained_operators is true" do
|
1255
|
+
config_override :overwrite_chained_operators, true
|
1256
|
+
|
1257
|
+
it "overwrites the first $lt selector" do
|
1258
|
+
expect(selection.selector).to eq({
|
1259
|
+
"first" => { "$lt" => 15 }
|
1260
|
+
})
|
1261
|
+
end
|
1159
1262
|
end
|
1160
1263
|
|
1161
1264
|
it "returns a cloned query" do
|
@@ -1236,10 +1339,25 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
1236
1339
|
query.lte(first: 10).lte(first: 15)
|
1237
1340
|
end
|
1238
1341
|
|
1239
|
-
|
1240
|
-
|
1241
|
-
|
1242
|
-
|
1342
|
+
context "when overwrite_chained_operators is false" do
|
1343
|
+
config_override :overwrite_chained_operators, false
|
1344
|
+
|
1345
|
+
it "adds a second $lte selector" do
|
1346
|
+
expect(selection.selector).to eq({
|
1347
|
+
"first" => { "$lte" => 10 },
|
1348
|
+
"$and" => [ { "first" => { "$lte" => 15 } } ]
|
1349
|
+
})
|
1350
|
+
end
|
1351
|
+
end
|
1352
|
+
|
1353
|
+
context "when overwrite_chained_operators is true" do
|
1354
|
+
config_override :overwrite_chained_operators, true
|
1355
|
+
|
1356
|
+
it "overwrites the first $lte selector" do
|
1357
|
+
expect(selection.selector).to eq({
|
1358
|
+
"first" => { "$lte" => 15 }
|
1359
|
+
})
|
1360
|
+
end
|
1243
1361
|
end
|
1244
1362
|
|
1245
1363
|
it "returns a cloned query" do
|
@@ -2294,4 +2412,51 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
2294
2412
|
end
|
2295
2413
|
end
|
2296
2414
|
end
|
2415
|
+
|
2416
|
+
describe "Mongoid.overwrite_chained_operators" do
|
2417
|
+
[ :eq, :elem_match, :gt, :gte, :lt, :lte, :mod, :ne, :near, :near_sphere ].each do |meth|
|
2418
|
+
|
2419
|
+
context "when chaining the #{meth} method when using the same field" do
|
2420
|
+
let(:op) do
|
2421
|
+
{
|
2422
|
+
eq: "$eq",
|
2423
|
+
elem_match: "$elemMatch",
|
2424
|
+
gt: "$gt",
|
2425
|
+
gte: "$gte",
|
2426
|
+
lt: "$lt",
|
2427
|
+
lte: "$lte",
|
2428
|
+
mod: "$mod",
|
2429
|
+
ne: "$ne",
|
2430
|
+
near: "$near",
|
2431
|
+
near_sphere: "$nearSphere"
|
2432
|
+
}[meth]
|
2433
|
+
end
|
2434
|
+
|
2435
|
+
let(:criteria) do
|
2436
|
+
Band.send(meth, {views: 1}).send(meth, {views:2})
|
2437
|
+
end
|
2438
|
+
|
2439
|
+
context "when overwrite_chained_operators is true" do
|
2440
|
+
config_override :overwrite_chained_operators, true
|
2441
|
+
|
2442
|
+
it "overrides the previous operators" do
|
2443
|
+
expect(criteria.selector).to eq({
|
2444
|
+
"views" => { op => 2 },
|
2445
|
+
})
|
2446
|
+
end
|
2447
|
+
end
|
2448
|
+
|
2449
|
+
context "when overwrite_chained_operators is false" do
|
2450
|
+
config_override :overwrite_chained_operators, false
|
2451
|
+
|
2452
|
+
it "overrides the previous operators" do
|
2453
|
+
expect(criteria.selector).to eq({
|
2454
|
+
"views" => { op => 1 },
|
2455
|
+
"$and" => [{ "views" => { op => 2 } }]
|
2456
|
+
})
|
2457
|
+
end
|
2458
|
+
end
|
2459
|
+
end
|
2460
|
+
end
|
2461
|
+
end
|
2297
2462
|
end
|
@@ -44,7 +44,7 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
context "when selector contains a $nin" do
|
47
|
+
context "when selector contains a $nin string" do
|
48
48
|
|
49
49
|
let(:initial) do
|
50
50
|
{ "$nin" => ["foo"] }
|
@@ -72,7 +72,35 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
context "when selector contains a $
|
75
|
+
context "when selector contains a $nin symbol" do
|
76
|
+
|
77
|
+
let(:initial) do
|
78
|
+
{ :$nin => ["foo"] }
|
79
|
+
end
|
80
|
+
|
81
|
+
before do
|
82
|
+
selector["field"] = initial
|
83
|
+
end
|
84
|
+
|
85
|
+
context "when merging in a new $nin" do
|
86
|
+
|
87
|
+
let(:other) do
|
88
|
+
{ "field" => { :$nin => ["bar"] } }
|
89
|
+
end
|
90
|
+
|
91
|
+
before do
|
92
|
+
selector.merge!(other)
|
93
|
+
end
|
94
|
+
|
95
|
+
it "combines the two $nin queries into one" do
|
96
|
+
expect(selector).to eq({
|
97
|
+
"field" => { :$nin => ["foo", "bar"] }
|
98
|
+
})
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context "when selector contains a $in string" do
|
76
104
|
|
77
105
|
let(:initial) do
|
78
106
|
{ "$in" => [1, 2] }
|
@@ -117,6 +145,51 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
117
145
|
end
|
118
146
|
end
|
119
147
|
|
148
|
+
context "when selector contains a $in symbol" do
|
149
|
+
|
150
|
+
let(:initial) do
|
151
|
+
{ :$in => [1, 2] }
|
152
|
+
end
|
153
|
+
|
154
|
+
before do
|
155
|
+
selector["field"] = initial
|
156
|
+
end
|
157
|
+
|
158
|
+
context "when merging in a new $in with an intersecting value" do
|
159
|
+
|
160
|
+
let(:other) do
|
161
|
+
{ "field" => { :$in => [1] } }
|
162
|
+
end
|
163
|
+
|
164
|
+
before do
|
165
|
+
selector.merge!(other)
|
166
|
+
end
|
167
|
+
|
168
|
+
it "intersects the $in values" do
|
169
|
+
expect(selector).to eq({
|
170
|
+
"field" => { :$in => [1] }
|
171
|
+
})
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "when merging in a new $in with no intersecting values" do
|
176
|
+
|
177
|
+
let(:other) do
|
178
|
+
{ "field" => { :$in => [3] } }
|
179
|
+
end
|
180
|
+
|
181
|
+
before do
|
182
|
+
selector.merge!(other)
|
183
|
+
end
|
184
|
+
|
185
|
+
it "intersects the $in values" do
|
186
|
+
expect(selector).to eq({
|
187
|
+
"field" => { :$in => [] }
|
188
|
+
})
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
120
193
|
context "when selector is not nested" do
|
121
194
|
|
122
195
|
before do
|
@@ -387,8 +460,20 @@ describe Mongoid::Criteria::Queryable::Selector do
|
|
387
460
|
selector.send(method, "key", array)
|
388
461
|
end
|
389
462
|
|
390
|
-
|
391
|
-
|
463
|
+
context 'when serializing bigdecimal to string' do
|
464
|
+
config_override :map_big_decimal_to_decimal128, false
|
465
|
+
|
466
|
+
it "serializes each element in the array" do
|
467
|
+
expect(selector["key"]).to eq([ big_one.to_s, big_two.to_s ])
|
468
|
+
end
|
469
|
+
end
|
470
|
+
|
471
|
+
context 'when serializing bigdecimal to decimal128' do
|
472
|
+
config_override :map_big_decimal_to_decimal128, true
|
473
|
+
|
474
|
+
it "serializes each element in the array" do
|
475
|
+
expect(selector["key"]).to eq([ BSON::Decimal128.new(big_one), BSON::Decimal128.new(big_two)])
|
476
|
+
end
|
392
477
|
end
|
393
478
|
end
|
394
479
|
end
|