mongoid 7.0.13 → 7.1.0.rc0
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.tar.gz.sig +0 -0
- data/CHANGELOG.md +7 -7
- data/LICENSE +1 -1
- data/README.md +24 -18
- data/Rakefile +7 -45
- data/lib/config/locales/en.yml +56 -47
- data/lib/mongoid.rb +8 -1
- data/lib/mongoid/association.rb +9 -6
- data/lib/mongoid/association/accessors.rb +95 -52
- data/lib/mongoid/association/bindable.rb +7 -5
- data/lib/mongoid/association/builders.rb +4 -3
- data/lib/mongoid/association/constrainable.rb +4 -2
- data/lib/mongoid/association/depending.rb +5 -2
- data/lib/mongoid/association/eager_loadable.rb +2 -0
- data/lib/mongoid/association/embedded.rb +3 -0
- data/lib/mongoid/association/embedded/batchable.rb +4 -2
- data/lib/mongoid/association/embedded/cyclic.rb +8 -6
- data/lib/mongoid/association/embedded/embedded_in.rb +6 -3
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +4 -1
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +8 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +15 -12
- data/lib/mongoid/association/embedded/embeds_many.rb +8 -6
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +9 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +41 -38
- data/lib/mongoid/association/embedded/embeds_one.rb +8 -6
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +5 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +10 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +17 -14
- data/lib/mongoid/association/macros.rb +38 -36
- data/lib/mongoid/association/many.rb +11 -9
- data/lib/mongoid/association/marshalable.rb +3 -1
- data/lib/mongoid/association/nested.rb +4 -1
- data/lib/mongoid/association/nested/many.rb +17 -15
- data/lib/mongoid/association/nested/nested_buildable.rb +6 -3
- data/lib/mongoid/association/nested/one.rb +11 -9
- data/lib/mongoid/association/one.rb +3 -1
- data/lib/mongoid/association/options.rb +9 -6
- data/lib/mongoid/association/proxy.rb +12 -10
- data/lib/mongoid/association/referenced.rb +3 -0
- data/lib/mongoid/association/referenced/auto_save.rb +4 -1
- data/lib/mongoid/association/referenced/belongs_to.rb +6 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +3 -1
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +6 -3
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -0
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -14
- data/lib/mongoid/association/referenced/counter_cache.rb +2 -0
- data/lib/mongoid/association/referenced/eager.rb +9 -7
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +13 -6
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -6
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +25 -18
- data/lib/mongoid/association/referenced/has_many.rb +7 -4
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -1
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -2
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +30 -3
- data/lib/mongoid/association/referenced/has_many/proxy.rb +43 -41
- data/lib/mongoid/association/referenced/has_one.rb +5 -2
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +8 -1
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -0
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +11 -9
- data/lib/mongoid/association/referenced/has_one/proxy.rb +17 -15
- data/lib/mongoid/association/referenced/syncable.rb +7 -5
- data/lib/mongoid/association/reflections.rb +7 -5
- data/lib/mongoid/association/relatable.rb +17 -14
- data/lib/mongoid/atomic.rb +5 -13
- data/lib/mongoid/atomic/modifiers.rb +24 -1
- data/lib/mongoid/atomic/paths.rb +2 -0
- data/lib/mongoid/atomic/paths/embedded.rb +2 -0
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -2
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -2
- data/lib/mongoid/atomic/paths/root.rb +4 -2
- data/lib/mongoid/attributes.rb +35 -49
- data/lib/mongoid/attributes/dynamic.rb +2 -0
- data/lib/mongoid/attributes/nested.rb +7 -5
- data/lib/mongoid/attributes/processing.rb +8 -6
- data/lib/mongoid/attributes/readonly.rb +3 -1
- data/lib/mongoid/cacheable.rb +3 -1
- data/lib/mongoid/changeable.rb +3 -1
- data/lib/mongoid/clients.rb +2 -0
- data/lib/mongoid/clients/factory.rb +1 -0
- data/lib/mongoid/clients/options.rb +2 -0
- data/lib/mongoid/clients/sessions.rb +7 -20
- data/lib/mongoid/clients/storage_options.rb +2 -0
- data/lib/mongoid/clients/validators.rb +2 -0
- data/lib/mongoid/clients/validators/storage.rb +2 -0
- data/lib/mongoid/composable.rb +4 -2
- data/lib/mongoid/config.rb +15 -2
- data/lib/mongoid/config/environment.rb +2 -0
- data/lib/mongoid/config/options.rb +17 -12
- data/lib/mongoid/config/validators.rb +2 -0
- data/lib/mongoid/config/validators/client.rb +2 -0
- data/lib/mongoid/config/validators/option.rb +2 -0
- data/lib/mongoid/contextual.rb +2 -0
- data/lib/mongoid/contextual/aggregable/memory.rb +3 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +3 -1
- data/lib/mongoid/contextual/atomic.rb +24 -6
- data/lib/mongoid/contextual/command.rb +2 -0
- data/lib/mongoid/contextual/geo_near.rb +2 -1
- data/lib/mongoid/contextual/map_reduce.rb +2 -0
- data/lib/mongoid/contextual/memory.rb +4 -2
- data/lib/mongoid/contextual/mongo.rb +4 -0
- data/lib/mongoid/contextual/none.rb +2 -0
- data/lib/mongoid/contextual/queryable.rb +2 -0
- data/lib/mongoid/copyable.rb +3 -1
- data/lib/mongoid/criteria.rb +3 -7
- data/lib/mongoid/criteria/findable.rb +11 -1
- data/lib/mongoid/criteria/includable.rb +8 -6
- data/lib/mongoid/criteria/inspectable.rb +2 -0
- data/lib/mongoid/criteria/marshalable.rb +2 -0
- data/lib/mongoid/criteria/modifiable.rb +3 -2
- data/lib/mongoid/criteria/options.rb +2 -0
- data/lib/mongoid/criteria/permission.rb +2 -0
- data/lib/mongoid/criteria/queryable.rb +7 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -0
- data/lib/mongoid/criteria/queryable/expandable.rb +93 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +2 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -2
- data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +7 -5
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -13
- data/lib/mongoid/criteria/queryable/key.rb +34 -6
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +86 -11
- data/lib/mongoid/criteria/queryable/optional.rb +5 -3
- data/lib/mongoid/criteria/queryable/options.rb +2 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +2 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +264 -87
- data/lib/mongoid/criteria/queryable/selector.rb +38 -5
- data/lib/mongoid/criteria/queryable/smash.rb +2 -0
- data/lib/mongoid/criteria/queryable/storable.rb +228 -0
- data/lib/mongoid/criteria/scopable.rb +2 -0
- data/lib/mongoid/document.rb +4 -3
- data/lib/mongoid/equality.rb +3 -2
- data/lib/mongoid/errors.rb +3 -0
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -2
- data/lib/mongoid/errors/callback.rb +2 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +19 -0
- data/lib/mongoid/errors/delete_restriction.rb +3 -2
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -0
- data/lib/mongoid/errors/document_not_found.rb +2 -0
- data/lib/mongoid/errors/eager_load.rb +4 -2
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -0
- data/lib/mongoid/errors/invalid_collection.rb +2 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -0
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -0
- data/lib/mongoid/errors/invalid_includes.rb +2 -0
- data/lib/mongoid/errors/invalid_index.rb +2 -0
- data/lib/mongoid/errors/invalid_options.rb +4 -2
- data/lib/mongoid/errors/invalid_path.rb +2 -0
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -2
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -2
- data/lib/mongoid/errors/invalid_scope.rb +2 -0
- data/lib/mongoid/errors/invalid_session_use.rb +2 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -4
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -0
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/invalid_time.rb +2 -0
- data/lib/mongoid/errors/invalid_value.rb +2 -0
- data/lib/mongoid/errors/inverse_not_found.rb +3 -1
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -0
- data/lib/mongoid/errors/mixed_relations.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +2 -0
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -1
- data/lib/mongoid/errors/no_client_config.rb +2 -0
- data/lib/mongoid/errors/no_client_database.rb +2 -0
- data/lib/mongoid/errors/no_client_hosts.rb +2 -0
- data/lib/mongoid/errors/no_clients_config.rb +2 -0
- data/lib/mongoid/errors/no_default_client.rb +2 -0
- data/lib/mongoid/errors/no_environment.rb +2 -0
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -0
- data/lib/mongoid/errors/no_metadata.rb +2 -0
- data/lib/mongoid/errors/no_parent.rb +2 -0
- data/lib/mongoid/errors/readonly_attribute.rb +2 -0
- data/lib/mongoid/errors/readonly_document.rb +2 -0
- data/lib/mongoid/errors/scope_overwrite.rb +2 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -0
- data/lib/mongoid/errors/unknown_model.rb +2 -0
- data/lib/mongoid/errors/unsaved_document.rb +2 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -0
- data/lib/mongoid/errors/validations.rb +2 -0
- data/lib/mongoid/evolvable.rb +3 -1
- data/lib/mongoid/extensions.rb +2 -0
- data/lib/mongoid/extensions/array.rb +23 -6
- data/lib/mongoid/extensions/big_decimal.rb +2 -0
- data/lib/mongoid/extensions/boolean.rb +2 -0
- data/lib/mongoid/extensions/date.rb +13 -3
- data/lib/mongoid/extensions/date_time.rb +4 -3
- data/lib/mongoid/extensions/decimal128.rb +2 -0
- data/lib/mongoid/extensions/false_class.rb +2 -0
- data/lib/mongoid/extensions/float.rb +5 -3
- data/lib/mongoid/extensions/hash.rb +49 -11
- data/lib/mongoid/extensions/integer.rb +5 -3
- data/lib/mongoid/extensions/module.rb +2 -0
- data/lib/mongoid/extensions/nil_class.rb +2 -0
- data/lib/mongoid/extensions/object.rb +16 -4
- data/lib/mongoid/extensions/object_id.rb +2 -0
- data/lib/mongoid/extensions/range.rb +2 -0
- data/lib/mongoid/extensions/regexp.rb +3 -1
- data/lib/mongoid/extensions/set.rb +2 -0
- data/lib/mongoid/extensions/string.rb +18 -9
- data/lib/mongoid/extensions/symbol.rb +2 -0
- data/lib/mongoid/extensions/time.rb +14 -0
- data/lib/mongoid/extensions/time_with_zone.rb +14 -0
- data/lib/mongoid/extensions/true_class.rb +2 -0
- data/lib/mongoid/factory.rb +28 -5
- data/lib/mongoid/fields.rb +4 -3
- data/lib/mongoid/fields/foreign_key.rb +3 -1
- data/lib/mongoid/fields/localized.rb +2 -0
- data/lib/mongoid/fields/standard.rb +4 -2
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields/validators/macro.rb +13 -2
- data/lib/mongoid/findable.rb +6 -2
- data/lib/mongoid/indexable.rb +3 -1
- data/lib/mongoid/indexable/specification.rb +3 -1
- data/lib/mongoid/indexable/validators/options.rb +2 -0
- data/lib/mongoid/inspectable.rb +3 -1
- data/lib/mongoid/interceptable.rb +5 -5
- data/lib/mongoid/loggable.rb +13 -7
- data/lib/mongoid/matchable.rb +2 -0
- data/lib/mongoid/matchable/all.rb +2 -0
- data/lib/mongoid/matchable/and.rb +2 -0
- data/lib/mongoid/matchable/default.rb +2 -0
- data/lib/mongoid/matchable/elem_match.rb +2 -0
- data/lib/mongoid/matchable/eq.rb +1 -0
- data/lib/mongoid/matchable/exists.rb +2 -0
- data/lib/mongoid/matchable/gt.rb +2 -0
- data/lib/mongoid/matchable/gte.rb +2 -0
- data/lib/mongoid/matchable/in.rb +2 -0
- data/lib/mongoid/matchable/lt.rb +2 -0
- data/lib/mongoid/matchable/lte.rb +2 -0
- data/lib/mongoid/matchable/ne.rb +2 -0
- data/lib/mongoid/matchable/nin.rb +2 -0
- data/lib/mongoid/matchable/nor.rb +2 -1
- data/lib/mongoid/matchable/or.rb +2 -0
- data/lib/mongoid/matchable/regexp.rb +5 -2
- data/lib/mongoid/matchable/size.rb +2 -0
- data/lib/mongoid/persistable.rb +133 -15
- data/lib/mongoid/persistable/creatable.rb +3 -1
- data/lib/mongoid/persistable/deletable.rb +3 -1
- data/lib/mongoid/persistable/destroyable.rb +3 -1
- data/lib/mongoid/persistable/incrementable.rb +6 -2
- data/lib/mongoid/persistable/logical.rb +4 -1
- data/lib/mongoid/persistable/poppable.rb +3 -1
- data/lib/mongoid/persistable/pullable.rb +3 -1
- data/lib/mongoid/persistable/pushable.rb +5 -12
- data/lib/mongoid/persistable/renamable.rb +10 -3
- data/lib/mongoid/persistable/savable.rb +3 -1
- data/lib/mongoid/persistable/settable.rb +3 -1
- data/lib/mongoid/persistable/unsettable.rb +8 -3
- data/lib/mongoid/persistable/updatable.rb +3 -1
- data/lib/mongoid/persistable/upsertable.rb +3 -1
- data/lib/mongoid/persistence_context.rb +27 -15
- data/lib/mongoid/positional.rb +2 -0
- data/lib/mongoid/query_cache.rb +26 -69
- data/lib/mongoid/railtie.rb +3 -1
- data/lib/mongoid/railties/controller_runtime.rb +4 -1
- data/lib/mongoid/railties/database.rake +2 -0
- data/lib/mongoid/reloadable.rb +4 -2
- data/lib/mongoid/scopable.rb +2 -1
- data/lib/mongoid/selectable.rb +3 -1
- data/lib/mongoid/serializable.rb +13 -11
- data/lib/mongoid/shardable.rb +3 -1
- data/lib/mongoid/stateful.rb +3 -1
- data/lib/mongoid/tasks/database.rake +2 -0
- data/lib/mongoid/tasks/database.rb +2 -0
- data/lib/mongoid/threaded.rb +2 -0
- data/lib/mongoid/threaded/lifecycle.rb +2 -0
- data/lib/mongoid/timestamps.rb +3 -1
- data/lib/mongoid/timestamps/created.rb +3 -1
- data/lib/mongoid/timestamps/created/short.rb +2 -0
- data/lib/mongoid/timestamps/short.rb +2 -0
- data/lib/mongoid/timestamps/timeless.rb +3 -1
- data/lib/mongoid/timestamps/updated.rb +3 -1
- data/lib/mongoid/timestamps/updated/short.rb +2 -0
- data/lib/mongoid/touchable.rb +20 -12
- data/lib/mongoid/traversable.rb +4 -2
- data/lib/mongoid/validatable.rb +7 -5
- data/lib/mongoid/validatable/associated.rb +4 -2
- data/lib/mongoid/validatable/format.rb +2 -0
- data/lib/mongoid/validatable/length.rb +2 -0
- data/lib/mongoid/validatable/localizable.rb +2 -0
- data/lib/mongoid/validatable/macros.rb +2 -0
- data/lib/mongoid/validatable/presence.rb +4 -2
- data/lib/mongoid/validatable/queryable.rb +2 -0
- data/lib/mongoid/validatable/uniqueness.rb +5 -3
- data/lib/mongoid/version.rb +2 -1
- data/lib/rails/generators/mongoid/config/config_generator.rb +3 -8
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -6
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -0
- data/lib/rails/mongoid.rb +4 -2
- data/lib/support/ruby_version.rb +3 -0
- data/spec/app/models/account.rb +3 -0
- data/spec/app/models/acolyte.rb +3 -0
- data/spec/app/models/actor.rb +3 -0
- data/spec/app/models/actress.rb +3 -0
- data/spec/app/models/address.rb +3 -0
- data/spec/app/models/address_component.rb +3 -0
- data/spec/app/models/address_number.rb +3 -0
- data/spec/app/models/agency.rb +3 -0
- data/spec/app/models/agent.rb +3 -0
- data/spec/app/models/album.rb +3 -0
- data/spec/app/models/alert.rb +3 -0
- data/spec/app/models/animal.rb +3 -0
- data/spec/app/models/answer.rb +3 -0
- data/spec/app/models/appointment.rb +3 -0
- data/spec/app/models/array_field.rb +1 -0
- data/spec/app/models/article.rb +3 -0
- data/spec/app/models/artist.rb +3 -0
- data/spec/app/models/artwork.rb +3 -0
- data/spec/app/models/audio.rb +3 -0
- data/spec/app/models/augmentation.rb +3 -0
- data/spec/app/models/author.rb +3 -0
- data/spec/app/models/baby.rb +3 -0
- data/spec/app/models/band.rb +3 -0
- data/spec/app/models/bar.rb +3 -0
- data/spec/app/models/basic.rb +3 -0
- data/spec/app/models/bed.rb +3 -0
- data/spec/app/models/big_palette.rb +3 -0
- data/spec/app/models/birthday.rb +3 -0
- data/spec/app/models/bomb.rb +3 -0
- data/spec/app/models/book.rb +3 -0
- data/spec/app/models/breed.rb +3 -0
- data/spec/app/models/browser.rb +3 -0
- data/spec/app/models/building.rb +3 -0
- data/spec/app/models/building_address.rb +3 -0
- data/spec/app/models/bus.rb +3 -0
- data/spec/app/models/business.rb +3 -0
- data/spec/app/models/callback_test.rb +3 -0
- data/spec/app/models/canvas.rb +3 -0
- data/spec/app/models/car.rb +3 -0
- data/spec/app/models/cat.rb +3 -0
- data/spec/app/models/category.rb +3 -0
- data/spec/app/models/child.rb +3 -0
- data/spec/app/models/child_doc.rb +3 -0
- data/spec/app/models/church.rb +3 -0
- data/spec/app/models/circle.rb +3 -0
- data/spec/app/models/circuit.rb +3 -0
- data/spec/app/models/circus.rb +3 -0
- data/spec/app/models/code.rb +3 -0
- data/spec/app/models/comment.rb +3 -0
- data/spec/app/models/company.rb +3 -0
- data/spec/app/models/consumption_period.rb +3 -0
- data/spec/app/models/contextable_item.rb +3 -0
- data/spec/app/models/contractor.rb +3 -0
- data/spec/app/models/cookie.rb +3 -0
- data/spec/app/models/country_code.rb +3 -0
- data/spec/app/models/courier_job.rb +3 -0
- data/spec/app/models/definition.rb +3 -0
- data/spec/app/models/description.rb +3 -0
- data/spec/app/models/dictionary.rb +3 -0
- data/spec/app/models/division.rb +3 -0
- data/spec/app/models/doctor.rb +3 -0
- data/spec/app/models/dog.rb +3 -0
- data/spec/app/models/dokument.rb +3 -0
- data/spec/app/models/draft.rb +3 -0
- data/spec/app/models/dragon.rb +3 -0
- data/spec/app/models/driver.rb +3 -0
- data/spec/app/models/drug.rb +3 -0
- data/spec/app/models/dungeon.rb +3 -0
- data/spec/app/models/edit.rb +3 -0
- data/spec/app/models/email.rb +3 -0
- data/spec/app/models/employer.rb +3 -0
- data/spec/app/models/entry.rb +3 -0
- data/spec/app/models/eraser.rb +3 -0
- data/spec/app/models/even.rb +3 -0
- data/spec/app/models/event.rb +3 -0
- data/spec/app/models/exhibition.rb +3 -0
- data/spec/app/models/exhibitor.rb +3 -0
- data/spec/app/models/explosion.rb +3 -0
- data/spec/app/models/eye.rb +3 -0
- data/spec/app/models/eye_bowl.rb +3 -0
- data/spec/app/models/face.rb +3 -0
- data/spec/app/models/favorite.rb +3 -0
- data/spec/app/models/filesystem.rb +3 -0
- data/spec/app/models/fire_hydrant.rb +3 -0
- data/spec/app/models/firefox.rb +3 -0
- data/spec/app/models/fish.rb +3 -0
- data/spec/app/models/folder.rb +3 -0
- data/spec/app/models/folder_item.rb +3 -0
- data/spec/app/models/fruits.rb +3 -0
- data/spec/app/models/game.rb +3 -0
- data/spec/app/models/ghost.rb +3 -0
- data/spec/app/models/home.rb +3 -0
- data/spec/app/models/house.rb +3 -0
- data/spec/app/models/html_writer.rb +3 -0
- data/spec/app/models/id_key.rb +3 -0
- data/spec/app/models/image.rb +3 -0
- data/spec/app/models/implant.rb +3 -0
- data/spec/app/models/item.rb +3 -0
- data/spec/app/models/jar.rb +3 -0
- data/spec/app/models/kaleidoscope.rb +3 -0
- data/spec/app/models/kangaroo.rb +4 -1
- data/spec/app/models/label.rb +3 -0
- data/spec/app/models/language.rb +3 -0
- data/spec/app/models/lat_lng.rb +3 -0
- data/spec/app/models/league.rb +3 -0
- data/spec/app/models/learner.rb +3 -0
- data/spec/app/models/line_item.rb +3 -0
- data/spec/app/models/location.rb +3 -0
- data/spec/app/models/login.rb +3 -0
- data/spec/app/models/manufacturer.rb +3 -0
- data/spec/app/models/meat.rb +3 -0
- data/spec/app/models/membership.rb +3 -0
- data/spec/app/models/message.rb +3 -0
- data/spec/app/models/minim.rb +1 -1
- data/spec/app/models/mixed_drink.rb +3 -0
- data/spec/app/models/movie.rb +3 -0
- data/spec/app/models/my_hash.rb +3 -0
- data/spec/app/models/name.rb +3 -0
- data/spec/app/models/name_only.rb +9 -0
- data/spec/app/models/node.rb +3 -0
- data/spec/app/models/note.rb +3 -0
- data/spec/app/models/odd.rb +3 -0
- data/spec/app/models/ordered_post.rb +3 -0
- data/spec/app/models/ordered_preference.rb +3 -0
- data/spec/app/models/oscar.rb +3 -0
- data/spec/app/models/other_owner_object.rb +3 -0
- data/spec/app/models/override.rb +3 -0
- data/spec/app/models/ownable.rb +3 -0
- data/spec/app/models/owner.rb +3 -0
- data/spec/app/models/pack.rb +3 -0
- data/spec/app/models/page.rb +3 -0
- data/spec/app/models/page_question.rb +3 -0
- data/spec/app/models/palette.rb +3 -0
- data/spec/app/models/parent.rb +3 -0
- data/spec/app/models/parent_doc.rb +3 -0
- data/spec/app/models/passport.rb +3 -0
- data/spec/app/models/patient.rb +3 -0
- data/spec/app/models/pdf_writer.rb +3 -0
- data/spec/app/models/pencil.rb +3 -0
- data/spec/app/models/person.rb +3 -0
- data/spec/app/models/pet.rb +3 -0
- data/spec/app/models/pet_owner.rb +3 -0
- data/spec/app/models/phone.rb +3 -0
- data/spec/app/models/pizza.rb +3 -0
- data/spec/app/models/player.rb +3 -0
- data/spec/app/models/post.rb +3 -0
- data/spec/app/models/post_genre.rb +3 -0
- data/spec/app/models/powerup.rb +3 -0
- data/spec/app/models/preference.rb +3 -0
- data/spec/app/models/princess.rb +3 -0
- data/spec/app/models/product.rb +3 -0
- data/spec/app/models/profile.rb +3 -0
- data/spec/app/models/pronunciation.rb +3 -0
- data/spec/app/models/pub.rb +3 -0
- data/spec/app/models/purchase.rb +3 -0
- data/spec/app/models/question.rb +3 -0
- data/spec/app/models/quiz.rb +3 -0
- data/spec/app/models/rating.rb +3 -0
- data/spec/app/models/record.rb +3 -0
- data/spec/app/models/registry.rb +3 -0
- data/spec/app/models/role.rb +3 -0
- data/spec/app/models/root_category.rb +3 -0
- data/spec/app/models/sandwich.rb +3 -0
- data/spec/app/models/scheduler.rb +3 -0
- data/spec/app/models/seo.rb +3 -0
- data/spec/app/models/series.rb +3 -0
- data/spec/app/models/server.rb +3 -0
- data/spec/app/models/service.rb +3 -0
- data/spec/app/models/shape.rb +3 -0
- data/spec/app/models/shelf.rb +3 -0
- data/spec/app/models/shipment_address.rb +3 -0
- data/spec/app/models/shipping_container.rb +3 -0
- data/spec/app/models/shipping_pack.rb +3 -0
- data/spec/app/models/shop.rb +3 -0
- data/spec/app/models/short_agent.rb +3 -0
- data/spec/app/models/short_quiz.rb +3 -0
- data/spec/app/models/simple.rb +3 -0
- data/spec/app/models/slave.rb +3 -0
- data/spec/app/models/song.rb +3 -0
- data/spec/app/models/sound.rb +3 -0
- data/spec/app/models/square.rb +3 -0
- data/spec/app/models/staff.rb +3 -0
- data/spec/app/models/store_as_dup_test1.rb +3 -0
- data/spec/app/models/store_as_dup_test2.rb +3 -0
- data/spec/app/models/store_as_dup_test3.rb +1 -0
- data/spec/app/models/store_as_dup_test4.rb +1 -0
- data/spec/app/models/strategy.rb +3 -0
- data/spec/app/models/sub_item.rb +3 -0
- data/spec/app/models/subscription.rb +3 -0
- data/spec/app/models/survey.rb +3 -0
- data/spec/app/models/symptom.rb +3 -0
- data/spec/app/models/tag.rb +3 -0
- data/spec/app/models/target.rb +3 -0
- data/spec/app/models/template.rb +3 -0
- data/spec/app/models/thing.rb +3 -0
- data/spec/app/models/title.rb +3 -0
- data/spec/app/models/tool.rb +3 -0
- data/spec/app/models/topping.rb +3 -0
- data/spec/app/models/track.rb +3 -0
- data/spec/app/models/translation.rb +3 -0
- data/spec/app/models/tree.rb +3 -0
- data/spec/app/models/truck.rb +3 -0
- data/spec/app/models/updatable.rb +1 -0
- data/spec/app/models/user.rb +3 -0
- data/spec/app/models/user_account.rb +3 -0
- data/spec/app/models/validation_callback.rb +3 -0
- data/spec/app/models/vehicle.rb +3 -0
- data/spec/app/models/version.rb +3 -0
- data/spec/app/models/vertex.rb +4 -1
- data/spec/app/models/vet_visit.rb +3 -0
- data/spec/app/models/video.rb +3 -0
- data/spec/app/models/video_game.rb +3 -0
- data/spec/app/models/weapon.rb +3 -0
- data/spec/app/models/wiki_page.rb +3 -0
- data/spec/app/models/word.rb +3 -0
- data/spec/app/models/word_origin.rb +3 -0
- data/spec/app/models/writer.rb +3 -0
- data/spec/config/mongoid.yml +1 -0
- data/spec/integration/associations/belongs_to_spec.rb +3 -0
- data/spec/integration/associations/embedded_spec.rb +0 -55
- data/spec/integration/associations/foreign_key_spec.rb +99 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +65 -0
- data/spec/integration/associations/reverse_population_spec.rb +35 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +37 -0
- data/spec/integration/criteria/default_scope_spec.rb +21 -0
- data/spec/integration/criteria/logical_spec.rb +81 -0
- data/spec/integration/i18n_fallbacks_spec.rb +90 -0
- data/spec/lite_spec_helper.rb +11 -18
- data/spec/mongoid/association/accessors_spec.rb +3 -0
- data/spec/mongoid/association/auto_save_spec.rb +3 -0
- data/spec/mongoid/association/builders_spec.rb +3 -0
- data/spec/mongoid/association/constrainable_spec.rb +3 -0
- data/spec/mongoid/association/counter_cache_spec.rb +3 -0
- data/spec/mongoid/association/depending_spec.rb +3 -0
- data/spec/mongoid/association/eager_spec.rb +3 -0
- data/spec/mongoid/association/embedded/cyclic_spec.rb +3 -0
- data/spec/mongoid/association/embedded/dirty_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +3 -50
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +4 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +0 -19
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +52 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +4 -11
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +29 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +6 -1
- data/spec/mongoid/association/macros_spec.rb +3 -0
- data/spec/mongoid/association/nested/many_spec.rb +3 -0
- data/spec/mongoid/association/nested/one_spec.rb +3 -0
- data/spec/mongoid/association/options_spec.rb +3 -0
- data/spec/mongoid/association/polymorphic_spec.rb +3 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +3 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +12 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +3 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +16 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +26 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -154
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +40 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +26 -2
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +18 -3
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +71 -146
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4 -2
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +18 -3
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +3 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +3 -0
- data/spec/mongoid/association/reflections_spec.rb +3 -0
- data/spec/mongoid/association/syncable_spec.rb +3 -0
- data/spec/mongoid/association_spec.rb +3 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +3 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +3 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +3 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +3 -0
- data/spec/mongoid/atomic/paths_spec.rb +3 -41
- data/spec/mongoid/atomic_spec.rb +3 -0
- data/spec/mongoid/attributes/nested_spec.rb +3 -0
- data/spec/mongoid/attributes/readonly_spec.rb +3 -0
- data/spec/mongoid/attributes_spec.rb +10 -260
- data/spec/mongoid/cacheable_spec.rb +3 -0
- data/spec/mongoid/changeable_spec.rb +3 -0
- data/spec/mongoid/clients/factory_spec.rb +38 -20
- data/spec/mongoid/clients/options_spec.rb +24 -13
- data/spec/mongoid/clients/sessions_spec.rb +7 -8
- data/spec/mongoid/clients/transactions_spec.rb +14 -23
- data/spec/mongoid/clients_spec.rb +5 -2
- data/spec/mongoid/composable_spec.rb +3 -0
- data/spec/mongoid/config/environment_spec.rb +3 -0
- data/spec/mongoid/config/options_spec.rb +23 -3
- data/spec/mongoid/config_spec.rb +39 -0
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +3 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +3 -0
- data/spec/mongoid/contextual/atomic_spec.rb +113 -37
- data/spec/mongoid/contextual/geo_near_spec.rb +5 -11
- data/spec/mongoid/contextual/map_reduce_spec.rb +8 -20
- data/spec/mongoid/contextual/memory_spec.rb +3 -0
- data/spec/mongoid/contextual/mongo_spec.rb +58 -76
- data/spec/mongoid/contextual/none_spec.rb +3 -0
- data/spec/mongoid/copyable_spec.rb +3 -0
- data/spec/mongoid/copyable_spec_models.rb +3 -0
- data/spec/mongoid/criteria/findable_spec.rb +58 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +3 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +3 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +7 -3
- data/spec/mongoid/criteria/options_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +135 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +36 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +10 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +31 -35
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +4 -28
- data/spec/mongoid/criteria/queryable/key_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +564 -156
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +950 -2165
- data/spec/mongoid/criteria/queryable/selector_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +112 -0
- data/spec/mongoid/criteria/scopable_spec.rb +3 -0
- data/spec/mongoid/criteria_spec.rb +39 -4
- data/spec/mongoid/document_fields_spec.rb +0 -29
- data/spec/mongoid/document_query_spec.rb +39 -0
- data/spec/mongoid/document_spec.rb +3 -0
- data/spec/mongoid/equality_spec.rb +3 -0
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +6 -3
- data/spec/mongoid/errors/callback_spec.rb +3 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +3 -0
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +3 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +3 -0
- data/spec/mongoid/errors/eager_load_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +5 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +5 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +3 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +4 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +3 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +3 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -0
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +3 -0
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -0
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -0
- data/spec/mongoid/errors/no_clients_config_spec.rb +3 -0
- data/spec/mongoid/errors/no_environment_spec.rb +3 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +5 -2
- data/spec/mongoid/errors/no_parent_spec.rb +4 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +3 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -0
- data/spec/mongoid/errors/unsaved_document_spec.rb +4 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -0
- data/spec/mongoid/errors/validations_spec.rb +3 -0
- data/spec/mongoid/extensions/array_spec.rb +26 -43
- data/spec/mongoid/extensions/big_decimal_spec.rb +3 -0
- data/spec/mongoid/extensions/binary_spec.rb +3 -0
- data/spec/mongoid/extensions/boolean_spec.rb +3 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +336 -0
- data/spec/mongoid/extensions/date_spec.rb +9 -160
- data/spec/mongoid/extensions/date_time_spec.rb +18 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +3 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -0
- data/spec/mongoid/extensions/float_spec.rb +18 -3
- data/spec/mongoid/extensions/hash_spec.rb +106 -0
- data/spec/mongoid/extensions/integer_spec.rb +15 -2
- data/spec/mongoid/extensions/module_spec.rb +3 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +3 -0
- data/spec/mongoid/extensions/object_id_spec.rb +3 -0
- data/spec/mongoid/extensions/object_spec.rb +14 -24
- data/spec/mongoid/extensions/range_spec.rb +3 -0
- data/spec/mongoid/extensions/regexp_spec.rb +3 -0
- data/spec/mongoid/extensions/set_spec.rb +3 -0
- data/spec/mongoid/extensions/string_spec.rb +60 -26
- data/spec/mongoid/extensions/symbol_spec.rb +3 -0
- data/spec/mongoid/extensions/time_spec.rb +30 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -0
- data/spec/mongoid/extensions_spec.rb +3 -0
- data/spec/mongoid/factory_spec.rb +29 -2
- data/spec/mongoid/fields/foreign_key_spec.rb +3 -0
- data/spec/mongoid/fields/localized_spec.rb +3 -0
- data/spec/mongoid/fields/standard_spec.rb +3 -0
- data/spec/mongoid/fields_spec.rb +18 -0
- data/spec/mongoid/findable_spec.rb +3 -0
- data/spec/mongoid/indexable/specification_spec.rb +3 -0
- data/spec/mongoid/indexable_spec.rb +7 -6
- data/spec/mongoid/inspectable_spec.rb +3 -0
- data/spec/mongoid/interceptable_spec.rb +3 -0
- data/spec/mongoid/loggable_spec.rb +3 -0
- data/spec/mongoid/matchable/all_spec.rb +3 -0
- data/spec/mongoid/matchable/and_spec.rb +3 -0
- data/spec/mongoid/matchable/default_spec.rb +4 -1
- data/spec/mongoid/matchable/elem_match_spec.rb +3 -0
- data/spec/mongoid/matchable/eq_spec.rb +1 -0
- data/spec/mongoid/matchable/exists_spec.rb +3 -0
- data/spec/mongoid/matchable/gt_spec.rb +3 -0
- data/spec/mongoid/matchable/gte_spec.rb +3 -0
- data/spec/mongoid/matchable/in_spec.rb +3 -0
- data/spec/mongoid/matchable/lt_spec.rb +3 -0
- data/spec/mongoid/matchable/lte_spec.rb +3 -0
- data/spec/mongoid/matchable/ne_spec.rb +3 -0
- data/spec/mongoid/matchable/nin_spec.rb +3 -0
- data/spec/mongoid/matchable/nor_spec.rb +1 -0
- data/spec/mongoid/matchable/or_spec.rb +3 -0
- data/spec/mongoid/matchable/regexp_spec.rb +5 -2
- data/spec/mongoid/matchable/size_spec.rb +3 -0
- data/spec/mongoid/matchable_spec.rb +5 -2
- data/spec/mongoid/persistable/creatable_spec.rb +3 -0
- data/spec/mongoid/persistable/deletable_spec.rb +3 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +3 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +17 -0
- data/spec/mongoid/persistable/logical_spec.rb +17 -0
- data/spec/mongoid/persistable/poppable_spec.rb +17 -0
- data/spec/mongoid/persistable/pullable_spec.rb +31 -0
- data/spec/mongoid/persistable/pushable_spec.rb +32 -55
- data/spec/mongoid/persistable/renamable_spec.rb +17 -0
- data/spec/mongoid/persistable/savable_spec.rb +7 -4
- data/spec/mongoid/persistable/settable_spec.rb +17 -30
- data/spec/mongoid/persistable/unsettable_spec.rb +17 -0
- data/spec/mongoid/persistable/updatable_spec.rb +3 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +3 -0
- data/spec/mongoid/persistable_spec.rb +85 -8
- data/spec/mongoid/persistence_context_spec.rb +3 -0
- data/spec/mongoid/positional_spec.rb +3 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +48 -0
- data/spec/mongoid/query_cache_spec.rb +12 -121
- data/spec/mongoid/relations/proxy_spec.rb +4 -1
- data/spec/mongoid/reloadable_spec.rb +3 -0
- data/spec/mongoid/scopable_spec.rb +4 -2
- data/spec/mongoid/selectable_spec.rb +3 -0
- data/spec/mongoid/serializable_spec.rb +3 -0
- data/spec/mongoid/shardable_spec.rb +3 -0
- data/spec/mongoid/stateful_spec.rb +3 -0
- data/spec/mongoid/tasks/database_rake_spec.rb +16 -13
- data/spec/mongoid/tasks/database_spec.rb +4 -1
- data/spec/mongoid/threaded_spec.rb +3 -0
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -0
- data/spec/mongoid/timestamps/created_spec.rb +3 -0
- data/spec/mongoid/timestamps/timeless_spec.rb +3 -0
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -0
- data/spec/mongoid/timestamps/updated_spec.rb +3 -0
- data/spec/mongoid/timestamps_spec.rb +3 -0
- data/spec/mongoid/touchable_spec.rb +49 -3
- data/spec/mongoid/traversable_spec.rb +3 -0
- data/spec/mongoid/validatable/associated_spec.rb +3 -0
- data/spec/mongoid/validatable/format_spec.rb +3 -0
- data/spec/mongoid/validatable/length_spec.rb +3 -0
- data/spec/mongoid/validatable/numericality_spec.rb +3 -0
- data/spec/mongoid/validatable/presence_spec.rb +3 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +3 -0
- data/spec/mongoid/validatable_spec.rb +3 -0
- data/spec/mongoid_spec.rb +3 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +4 -1
- data/spec/rails/mongoid_spec.rb +5 -2
- data/spec/spec_helper.rb +50 -15
- data/spec/support/authorization.rb +3 -0
- data/spec/support/cluster_config.rb +3 -3
- data/spec/support/constraints.rb +211 -17
- data/spec/support/expectations.rb +3 -0
- data/spec/support/macros.rb +1 -0
- data/spec/support/shared/time.rb +54 -0
- data/spec/support/spec_config.rb +7 -20
- metadata +508 -515
- metadata.gz.sig +2 -1
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/spec/app/models/customer.rb +0 -11
- data/spec/app/models/customer_address.rb +0 -12
- data/spec/app/models/delegating_patient.rb +0 -16
- data/spec/integration/app_spec.rb +0 -341
- data/spec/integration/callbacks_models.rb +0 -49
- data/spec/integration/callbacks_spec.rb +0 -216
- data/spec/integration/criteria/date_field_spec.rb +0 -41
- data/spec/integration/document_spec.rb +0 -22
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/document_persistence_context_spec.rb +0 -33
- data/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -221
- data/spec/shared/lib/mrss/constraints.rb +0 -354
- data/spec/shared/lib/mrss/docker_runner.rb +0 -265
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -115
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -162
- data/spec/shared/lib/mrss/utils.rb +0 -15
- data/spec/shared/share/Dockerfile.erb +0 -231
- data/spec/shared/shlib/distro.sh +0 -73
- data/spec/shared/shlib/server.sh +0 -290
- data/spec/shared/shlib/set_env.sh +0 -128
- data/spec/support/session_registry.rb +0 -50
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
1
4
|
require "spec_helper"
|
|
2
5
|
|
|
3
6
|
describe ActiveSupport::TimeWithZone do
|
|
@@ -322,37 +325,10 @@ describe ActiveSupport::TimeWithZone do
|
|
|
322
325
|
end
|
|
323
326
|
end
|
|
324
327
|
|
|
325
|
-
describe "#__evolve_date__" do
|
|
326
|
-
|
|
327
|
-
let(:evolved) do
|
|
328
|
-
time.__evolve_date__
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
context 'beginning of day' do
|
|
332
|
-
let(:time) do
|
|
333
|
-
time_zone.local(2010, 1, 1, 0, 0, 1).freeze
|
|
334
|
-
end
|
|
335
|
-
|
|
336
|
-
it "returns midnight utc" do
|
|
337
|
-
expect(evolved).to eq(Time.utc(2010, 1, 1, 0, 0, 0))
|
|
338
|
-
end
|
|
339
|
-
end
|
|
340
|
-
|
|
341
|
-
context 'end of day' do
|
|
342
|
-
let(:time) do
|
|
343
|
-
time_zone.local(2010, 1, 1, 23, 59, 59).freeze
|
|
344
|
-
end
|
|
345
|
-
|
|
346
|
-
it "returns midnight utc" do
|
|
347
|
-
expect(evolved).to eq(Time.utc(2010, 1, 1, 0, 0, 0))
|
|
348
|
-
end
|
|
349
|
-
end
|
|
350
|
-
end
|
|
351
|
-
|
|
352
328
|
describe "#__evolve_time__" do
|
|
353
329
|
|
|
354
330
|
let(:date) do
|
|
355
|
-
time_zone.local(2010, 1, 1, 12, 0, 0)
|
|
331
|
+
time_zone.local(2010, 1, 1, 12, 0, 0)
|
|
356
332
|
end
|
|
357
333
|
|
|
358
334
|
let(:evolved) do
|
|
@@ -9,6 +9,83 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
9
9
|
Mongoid::Query.new("id" => "_id")
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
+
shared_examples_for 'returns a cloned query' do
|
|
13
|
+
|
|
14
|
+
it "returns a cloned query" do
|
|
15
|
+
expect(selection).to_not equal(query)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
shared_examples_for 'a non-combining logical operation' do
|
|
20
|
+
|
|
21
|
+
context 'when there is a single predicate' do
|
|
22
|
+
let(:query) do
|
|
23
|
+
Mongoid::Query.new.send(tested_method, hello: 'world')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'adds the predicate' do
|
|
27
|
+
expect(query.selector).to eq(expected_operator => [{'hello' => 'world'}])
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context 'when the single predicate is wrapped in an array' do
|
|
32
|
+
let(:query) do
|
|
33
|
+
Mongoid::Query.new.send(tested_method, [{hello: 'world'}])
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'adds the predicate' do
|
|
37
|
+
expect(query.selector).to eq(expected_operator => [{'hello' => 'world'}])
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context 'when argument is a Criteria' do
|
|
42
|
+
let(:query) do
|
|
43
|
+
Mongoid::Query.new.where(hello: 'world')
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
let(:other) do
|
|
47
|
+
Mongoid::Query.new.where(foo: 'bar')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
let(:result) { query.send(tested_method, other) }
|
|
51
|
+
|
|
52
|
+
it 'combines' do
|
|
53
|
+
# This is used for $or / $nor, the two conditions should remain
|
|
54
|
+
# as separate hashes
|
|
55
|
+
expect(result.selector).to eq(expected_operator => [{'hello' => 'world'}, {'foo' => 'bar'}])
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
context 'when argument is a mix of Criteria and hashes' do
|
|
60
|
+
let(:query) do
|
|
61
|
+
Mongoid::Query.new.where(hello: 'world')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
let(:other1) do
|
|
65
|
+
Mongoid::Query.new.where(foo: 'bar')
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
let(:other2) do
|
|
69
|
+
{bar: 42}
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
let(:other3) do
|
|
73
|
+
Mongoid::Query.new.where(a: 2)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
let(:result) { query.send(tested_method, other1, other2, other3) }
|
|
77
|
+
|
|
78
|
+
it 'combines' do
|
|
79
|
+
expect(result.selector).to eq(expected_operator => [
|
|
80
|
+
{'hello' => 'world'},
|
|
81
|
+
{'foo' => 'bar'},
|
|
82
|
+
{'bar' => 42},
|
|
83
|
+
{'a' => 2},
|
|
84
|
+
])
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
12
89
|
describe "#and" do
|
|
13
90
|
|
|
14
91
|
context "when provided no criterion" do
|
|
@@ -25,9 +102,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
25
102
|
expect(selection).to eq(query)
|
|
26
103
|
end
|
|
27
104
|
|
|
28
|
-
|
|
29
|
-
expect(selection).to_not equal(query)
|
|
30
|
-
end
|
|
105
|
+
it_behaves_like 'returns a cloned query'
|
|
31
106
|
end
|
|
32
107
|
|
|
33
108
|
context "when provided nil" do
|
|
@@ -44,25 +119,78 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
44
119
|
expect(selection).to eq(query)
|
|
45
120
|
end
|
|
46
121
|
|
|
47
|
-
|
|
48
|
-
expect(selection).to_not equal(query)
|
|
49
|
-
end
|
|
122
|
+
it_behaves_like 'returns a cloned query'
|
|
50
123
|
end
|
|
51
124
|
|
|
52
125
|
context "when provided a single criterion" do
|
|
53
126
|
|
|
127
|
+
shared_examples_for 'adds the conditions to top level' do
|
|
128
|
+
|
|
129
|
+
it "adds the conditions to top level" do
|
|
130
|
+
expect(selection.selector).to eq({
|
|
131
|
+
"field" => [ 1, 2 ]
|
|
132
|
+
})
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it_behaves_like 'returns a cloned query'
|
|
136
|
+
end
|
|
137
|
+
|
|
54
138
|
let(:selection) do
|
|
55
139
|
query.and(field: [ 1, 2 ])
|
|
56
140
|
end
|
|
57
141
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
142
|
+
it_behaves_like 'adds the conditions to top level'
|
|
143
|
+
|
|
144
|
+
context 'when the criterion is wrapped in an array' do
|
|
145
|
+
let(:selection) do
|
|
146
|
+
query.and([{field: [ 1, 2 ] }])
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
it_behaves_like 'adds the conditions to top level'
|
|
62
150
|
end
|
|
63
151
|
|
|
64
|
-
|
|
65
|
-
|
|
152
|
+
context 'when the criterion is wrapped in a deep array with nil elements' do
|
|
153
|
+
let(:selection) do
|
|
154
|
+
query.and([[[{field: [ 1, 2 ] }]], [nil]])
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it_behaves_like 'adds the conditions to top level'
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context "when provided a single criterion that is handled via Key" do
|
|
162
|
+
|
|
163
|
+
shared_examples_for 'adds the conditions to top level' do
|
|
164
|
+
|
|
165
|
+
it "adds the conditions to top level" do
|
|
166
|
+
expect(selection.selector).to eq({
|
|
167
|
+
"field" => {'$gt' => 3 },
|
|
168
|
+
})
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
it_behaves_like 'returns a cloned query'
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
let(:selection) do
|
|
175
|
+
query.and(:field.gt => 3)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it_behaves_like 'adds the conditions to top level'
|
|
179
|
+
|
|
180
|
+
context 'when the criterion is wrapped in an array' do
|
|
181
|
+
let(:selection) do
|
|
182
|
+
query.and([{ :field.gt => 3 }])
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
it_behaves_like 'adds the conditions to top level'
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
context 'when the criterion is wrapped in a deep array with nil elements' do
|
|
189
|
+
let(:selection) do
|
|
190
|
+
query.and([[[{ :field.gt => 3 }]], [nil]])
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it_behaves_like 'adds the conditions to top level'
|
|
66
194
|
end
|
|
67
195
|
end
|
|
68
196
|
|
|
@@ -72,142 +200,254 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
72
200
|
query.and(:test.elem_match => { :field.in => [ 1, 2 ] })
|
|
73
201
|
end
|
|
74
202
|
|
|
75
|
-
it "
|
|
203
|
+
it "builds the correct selector" do
|
|
76
204
|
expect(selection.selector).to eq({
|
|
77
|
-
"
|
|
205
|
+
"test" => { "$elemMatch" => { "field" => { "$in" => [ 1, 2 ] }}}
|
|
78
206
|
})
|
|
79
207
|
end
|
|
80
208
|
|
|
81
|
-
|
|
82
|
-
expect(selection).to_not equal(query)
|
|
83
|
-
end
|
|
209
|
+
it_behaves_like 'returns a cloned query'
|
|
84
210
|
end
|
|
85
211
|
|
|
86
|
-
context "when provided multiple
|
|
212
|
+
context "when provided multiple criteria" do
|
|
87
213
|
|
|
88
|
-
context "when the
|
|
214
|
+
context "when the criteria is already included" do
|
|
89
215
|
|
|
90
216
|
let(:selection) do
|
|
91
217
|
query.and({ first: [ 1, 2 ] }).and({ first: [ 1, 2 ] })
|
|
92
218
|
end
|
|
93
219
|
|
|
94
|
-
it "
|
|
220
|
+
it "adds all conditions" do
|
|
95
221
|
expect(selection.selector).to eq({
|
|
222
|
+
'first' => [1, 2],
|
|
96
223
|
"$and" => [
|
|
97
224
|
{ "first" => [ 1, 2 ] }
|
|
98
225
|
]
|
|
99
226
|
})
|
|
100
227
|
end
|
|
101
228
|
|
|
102
|
-
|
|
103
|
-
expect(selection).to_not equal(query)
|
|
104
|
-
end
|
|
229
|
+
it_behaves_like 'returns a cloned query'
|
|
105
230
|
end
|
|
106
231
|
|
|
107
|
-
context "when the criterion
|
|
232
|
+
context "when the new criterion is for different fields" do
|
|
108
233
|
|
|
109
234
|
let(:selection) do
|
|
110
235
|
query.and({ first: [ 1, 2 ] }, { second: [ 3, 4 ] })
|
|
111
236
|
end
|
|
112
237
|
|
|
113
|
-
it "adds
|
|
238
|
+
it "adds all conditions to top level" do
|
|
114
239
|
expect(selection.selector).to eq({
|
|
115
|
-
"
|
|
116
|
-
|
|
117
|
-
{ "second" => [ 3, 4 ] }
|
|
118
|
-
]
|
|
240
|
+
"first" => [ 1, 2 ],
|
|
241
|
+
"second" => [ 3, 4 ],
|
|
119
242
|
})
|
|
120
243
|
end
|
|
121
244
|
|
|
122
|
-
|
|
123
|
-
expect(selection).to_not equal(query)
|
|
124
|
-
end
|
|
245
|
+
it_behaves_like 'returns a cloned query'
|
|
125
246
|
end
|
|
126
247
|
|
|
127
|
-
context "when the criterion
|
|
248
|
+
context "when the new criterion is for the same field" do
|
|
128
249
|
|
|
129
250
|
let(:selection) do
|
|
130
251
|
query.and({ first: [ 1, 2 ] }, { first: [ 3, 4 ] })
|
|
131
252
|
end
|
|
132
253
|
|
|
133
|
-
it "
|
|
254
|
+
it "combines via $and operator" do
|
|
134
255
|
expect(selection.selector).to eq({
|
|
256
|
+
"first" => [ 1, 2 ],
|
|
135
257
|
"$and" => [
|
|
136
|
-
{ "first" => [ 1, 2 ] },
|
|
137
258
|
{ "first" => [ 3, 4 ] }
|
|
138
259
|
]
|
|
139
260
|
})
|
|
140
261
|
end
|
|
141
262
|
|
|
142
|
-
|
|
143
|
-
expect(selection).to_not equal(query)
|
|
144
|
-
end
|
|
263
|
+
it_behaves_like 'returns a cloned query'
|
|
145
264
|
end
|
|
146
265
|
end
|
|
147
266
|
|
|
148
|
-
context "when chaining the
|
|
267
|
+
context "when chaining the criteria" do
|
|
149
268
|
|
|
150
|
-
context "when the
|
|
269
|
+
context "when the criteria are for different fields" do
|
|
151
270
|
|
|
152
271
|
let(:selection) do
|
|
153
272
|
query.and(first: [ 1, 2 ]).and(second: [ 3, 4 ])
|
|
154
273
|
end
|
|
155
274
|
|
|
156
|
-
it "adds the
|
|
275
|
+
it "adds the conditions to top level" do
|
|
157
276
|
expect(selection.selector).to eq({
|
|
158
|
-
"
|
|
159
|
-
|
|
160
|
-
{ "second" => [ 3, 4 ] }
|
|
161
|
-
]
|
|
277
|
+
"first" => [ 1, 2 ],
|
|
278
|
+
"second" => [ 3, 4 ],
|
|
162
279
|
})
|
|
163
280
|
end
|
|
164
281
|
|
|
165
|
-
|
|
166
|
-
expect(selection).to_not equal(query)
|
|
167
|
-
end
|
|
282
|
+
it_behaves_like 'returns a cloned query'
|
|
168
283
|
end
|
|
169
284
|
|
|
170
|
-
context "when the
|
|
285
|
+
context "when the criteria are on the same field" do
|
|
171
286
|
|
|
172
287
|
let(:selection) do
|
|
173
288
|
query.and(first: [ 1, 2 ]).and(first: [ 3, 4 ])
|
|
174
289
|
end
|
|
175
290
|
|
|
176
|
-
it "
|
|
291
|
+
it "combines via $and operator" do
|
|
177
292
|
expect(selection.selector).to eq({
|
|
293
|
+
"first" => [ 1, 2 ],
|
|
178
294
|
"$and" => [
|
|
179
|
-
{ "first" => [ 1, 2 ] },
|
|
180
295
|
{ "first" => [ 3, 4 ] }
|
|
181
296
|
]
|
|
182
297
|
})
|
|
183
298
|
end
|
|
184
299
|
|
|
185
|
-
|
|
186
|
-
|
|
300
|
+
it_behaves_like 'returns a cloned query'
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
context 'when argument is a Criteria' do
|
|
305
|
+
let(:query) do
|
|
306
|
+
Mongoid::Query.new.where(hello: 'world')
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
let(:result) { query.and(other) }
|
|
310
|
+
|
|
311
|
+
context 'different fields' do
|
|
312
|
+
|
|
313
|
+
let(:other) do
|
|
314
|
+
Mongoid::Query.new.where(foo: 'bar')
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
it 'combines both fields at top level' do
|
|
318
|
+
expect(result.selector).to eq('hello' => 'world', 'foo' => 'bar')
|
|
319
|
+
end
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
context 'same field' do
|
|
323
|
+
|
|
324
|
+
let(:other) do
|
|
325
|
+
Mongoid::Query.new.where(hello: /bar/)
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
it 'combines fields with $and' do
|
|
329
|
+
expect(result.selector).to eq('hello' => 'world', '$and' => [{'hello' => /bar/}])
|
|
187
330
|
end
|
|
188
331
|
end
|
|
189
332
|
end
|
|
333
|
+
|
|
334
|
+
context 'when argument is a mix of Criteria and hashes' do
|
|
335
|
+
let(:query) do
|
|
336
|
+
Mongoid::Query.new.where(hello: 'world')
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
let(:other1) do
|
|
340
|
+
Mongoid::Query.new.where(foo: 'bar')
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
let(:other2) do
|
|
344
|
+
{bar: 42}
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
let(:other3) do
|
|
348
|
+
Mongoid::Query.new.where(a: 2)
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
let(:result) { query.and(other1, other2, other3) }
|
|
352
|
+
|
|
353
|
+
it 'combines' do
|
|
354
|
+
expect(result.selector).to eq('hello' => 'world',
|
|
355
|
+
'foo' => 'bar',
|
|
356
|
+
'bar' => 42,
|
|
357
|
+
'a' => 2,
|
|
358
|
+
)
|
|
359
|
+
end
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
context 'when Key instances are used and types involved have serializers' do
|
|
363
|
+
let(:time) { Time.now }
|
|
364
|
+
|
|
365
|
+
let(:query) do
|
|
366
|
+
Band.all.and(:created_at.gt => time)
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
let(:expected) do
|
|
370
|
+
{'created_at' => {'$gt' => time.utc}}
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
it 'combines and evolves' do
|
|
374
|
+
expect(query.selector).to eq(expected)
|
|
375
|
+
end
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
describe 'query shape' do
|
|
379
|
+
shared_examples_for 'adds most recent criterion as $and' do
|
|
380
|
+
let(:selector) { scope.selector }
|
|
381
|
+
|
|
382
|
+
it 'adds most recent criterion as $and' do
|
|
383
|
+
expect(selector).to eq('foo' => 1, '$and' => [{'foo' => 2}])
|
|
384
|
+
end
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
context 'and/and' do
|
|
388
|
+
let(:scope) do
|
|
389
|
+
Band.and(foo: 1).and(foo: 2)
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
it_behaves_like 'adds most recent criterion as $and'
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
context 'and/and' do
|
|
396
|
+
let(:scope) do
|
|
397
|
+
Band.and(foo: 1).and(foo: 2)
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
it_behaves_like 'adds most recent criterion as $and'
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
context 'and/where' do
|
|
404
|
+
let(:scope) do
|
|
405
|
+
Band.and(foo: 1).where(foo: 2)
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
it_behaves_like 'adds most recent criterion as $and'
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
context 'where/and' do
|
|
412
|
+
let(:scope) do
|
|
413
|
+
Band.where(foo: 1).and(foo: 2)
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
it_behaves_like 'adds most recent criterion as $and'
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
context 'where/where' do
|
|
420
|
+
let(:scope) do
|
|
421
|
+
Band.where(foo: 1).where(foo: 2)
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
it_behaves_like 'adds most recent criterion as $and'
|
|
425
|
+
end
|
|
426
|
+
end
|
|
190
427
|
end
|
|
191
428
|
|
|
192
429
|
describe "#or" do
|
|
193
430
|
|
|
194
|
-
|
|
431
|
+
let(:tested_method) { :or }
|
|
432
|
+
let(:expected_operator) { '$or' }
|
|
433
|
+
|
|
434
|
+
it_behaves_like 'a non-combining logical operation'
|
|
435
|
+
|
|
436
|
+
context "when provided no arguments" do
|
|
195
437
|
|
|
196
438
|
let(:selection) do
|
|
197
439
|
query.or
|
|
198
440
|
end
|
|
199
441
|
|
|
200
|
-
|
|
442
|
+
it_behaves_like 'returns a cloned query'
|
|
443
|
+
|
|
444
|
+
it "does not add any criteria" do
|
|
201
445
|
expect(selection.selector).to eq({})
|
|
202
446
|
end
|
|
203
447
|
|
|
204
448
|
it "returns the query" do
|
|
205
449
|
expect(selection).to eq(query)
|
|
206
450
|
end
|
|
207
|
-
|
|
208
|
-
it "returns a cloned query" do
|
|
209
|
-
expect(selection).to_not equal(query)
|
|
210
|
-
end
|
|
211
451
|
end
|
|
212
452
|
|
|
213
453
|
context "when provided nil" do
|
|
@@ -216,17 +456,15 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
216
456
|
query.or(nil)
|
|
217
457
|
end
|
|
218
458
|
|
|
219
|
-
|
|
459
|
+
it_behaves_like 'returns a cloned query'
|
|
460
|
+
|
|
461
|
+
it "does not add any criteria" do
|
|
220
462
|
expect(selection.selector).to eq({})
|
|
221
463
|
end
|
|
222
464
|
|
|
223
465
|
it "returns the query" do
|
|
224
466
|
expect(selection).to eq(query)
|
|
225
467
|
end
|
|
226
|
-
|
|
227
|
-
it "returns a cloned query" do
|
|
228
|
-
expect(selection).to_not equal(query)
|
|
229
|
-
end
|
|
230
468
|
end
|
|
231
469
|
|
|
232
470
|
context "when provided a single criterion" do
|
|
@@ -235,25 +473,87 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
235
473
|
query.or(field: [ 1, 2 ])
|
|
236
474
|
end
|
|
237
475
|
|
|
476
|
+
it_behaves_like 'returns a cloned query'
|
|
477
|
+
|
|
238
478
|
it "adds the $or selector" do
|
|
239
479
|
expect(selection.selector).to eq({
|
|
240
480
|
"$or" => [{ "field" => [ 1, 2 ] }]
|
|
241
481
|
})
|
|
242
482
|
end
|
|
243
483
|
|
|
244
|
-
|
|
245
|
-
|
|
484
|
+
context 'when the criterion is wrapped in array' do
|
|
485
|
+
|
|
486
|
+
let(:selection) do
|
|
487
|
+
query.or([{ field: [ 1, 2 ] }])
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
it_behaves_like 'returns a cloned query'
|
|
491
|
+
|
|
492
|
+
it "adds the $or selector" do
|
|
493
|
+
expect(selection.selector).to eq({
|
|
494
|
+
"$or" => [{ "field" => [ 1, 2 ] }]
|
|
495
|
+
})
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
context 'when the array has nil as one of the elements' do
|
|
499
|
+
|
|
500
|
+
let(:selection) do
|
|
501
|
+
query.or([{ field: [ 1, 2 ] }, nil])
|
|
502
|
+
end
|
|
503
|
+
|
|
504
|
+
it_behaves_like 'returns a cloned query'
|
|
505
|
+
|
|
506
|
+
it "adds the $or selector ignoring the nil element" do
|
|
507
|
+
expect(selection.selector).to eq({
|
|
508
|
+
"$or" => [{ "field" => [ 1, 2 ] }]
|
|
509
|
+
})
|
|
510
|
+
end
|
|
511
|
+
end
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
context 'when query already has a condition on another field' do
|
|
515
|
+
|
|
516
|
+
let(:selection) do
|
|
517
|
+
query.where(foo: 'bar').or(field: [ 1, 2 ])
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
it 'moves original conditions under $or' do
|
|
521
|
+
expect(selection.selector).to eq({
|
|
522
|
+
"$or" => [{'foo' => 'bar'}, { "field" => [ 1, 2 ] }]
|
|
523
|
+
})
|
|
524
|
+
end
|
|
525
|
+
end
|
|
526
|
+
|
|
527
|
+
context 'when query already has an $or condition and another condition' do
|
|
528
|
+
|
|
529
|
+
let(:selection) do
|
|
530
|
+
query.or(field: [ 1, 2 ]).where(foo: 'bar').or(test: 1)
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
it 'unions existing conditions' do
|
|
534
|
+
expect(selection.selector).to eq(
|
|
535
|
+
'$or' => [
|
|
536
|
+
{
|
|
537
|
+
"$or" => [{ "field" => [ 1, 2 ] }],
|
|
538
|
+
'foo' => 'bar',
|
|
539
|
+
},
|
|
540
|
+
{'test' => 1},
|
|
541
|
+
]
|
|
542
|
+
)
|
|
543
|
+
end
|
|
246
544
|
end
|
|
247
545
|
end
|
|
248
546
|
|
|
249
|
-
context "when provided multiple
|
|
547
|
+
context "when provided multiple criteria" do
|
|
250
548
|
|
|
251
|
-
context "when the
|
|
549
|
+
context "when the criteria are for different fields" do
|
|
252
550
|
|
|
253
551
|
let(:selection) do
|
|
254
552
|
query.or({ first: [ 1, 2 ] }, { second: [ 3, 4 ] })
|
|
255
553
|
end
|
|
256
554
|
|
|
555
|
+
it_behaves_like 'returns a cloned query'
|
|
556
|
+
|
|
257
557
|
it "adds the $or selector" do
|
|
258
558
|
expect(selection.selector).to eq({
|
|
259
559
|
"$or" => [
|
|
@@ -262,13 +562,9 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
262
562
|
]
|
|
263
563
|
})
|
|
264
564
|
end
|
|
265
|
-
|
|
266
|
-
it "returns a cloned query" do
|
|
267
|
-
expect(selection).to_not equal(query)
|
|
268
|
-
end
|
|
269
565
|
end
|
|
270
566
|
|
|
271
|
-
context "when
|
|
567
|
+
context "when the criteria uses a Key instance" do
|
|
272
568
|
|
|
273
569
|
let(:selection) do
|
|
274
570
|
query.or({ first: [ 1, 2 ] }, { :second.gt => 3 })
|
|
@@ -283,12 +579,10 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
283
579
|
})
|
|
284
580
|
end
|
|
285
581
|
|
|
286
|
-
|
|
287
|
-
expect(selection).to_not equal(query)
|
|
288
|
-
end
|
|
582
|
+
it_behaves_like 'returns a cloned query'
|
|
289
583
|
end
|
|
290
584
|
|
|
291
|
-
context "when
|
|
585
|
+
context "when a criterion has an aliased field" do
|
|
292
586
|
|
|
293
587
|
let(:selection) do
|
|
294
588
|
query.or({ id: 1 })
|
|
@@ -300,9 +594,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
300
594
|
})
|
|
301
595
|
end
|
|
302
596
|
|
|
303
|
-
|
|
304
|
-
expect(selection).to_not equal(query)
|
|
305
|
-
end
|
|
597
|
+
it_behaves_like 'returns a cloned query'
|
|
306
598
|
end
|
|
307
599
|
|
|
308
600
|
context "when a criterion is wrapped in an array" do
|
|
@@ -311,6 +603,8 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
311
603
|
query.or([{ first: [ 1, 2 ] }, { :second.gt => 3 }])
|
|
312
604
|
end
|
|
313
605
|
|
|
606
|
+
it_behaves_like 'returns a cloned query'
|
|
607
|
+
|
|
314
608
|
it "adds the $or selector" do
|
|
315
609
|
expect(selection.selector).to eq({
|
|
316
610
|
"$or" => [
|
|
@@ -319,18 +613,16 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
319
613
|
]
|
|
320
614
|
})
|
|
321
615
|
end
|
|
322
|
-
|
|
323
|
-
it "returns a cloned query" do
|
|
324
|
-
expect(selection).to_not equal(query)
|
|
325
|
-
end
|
|
326
616
|
end
|
|
327
617
|
|
|
328
|
-
context "when the
|
|
618
|
+
context "when the criteria are on the same field" do
|
|
329
619
|
|
|
330
620
|
let(:selection) do
|
|
331
621
|
query.or({ first: [ 1, 2 ] }, { first: [ 3, 4 ] })
|
|
332
622
|
end
|
|
333
623
|
|
|
624
|
+
it_behaves_like 'returns a cloned query'
|
|
625
|
+
|
|
334
626
|
it "appends both $or expressions" do
|
|
335
627
|
expect(selection.selector).to eq({
|
|
336
628
|
"$or" => [
|
|
@@ -339,10 +631,6 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
339
631
|
]
|
|
340
632
|
})
|
|
341
633
|
end
|
|
342
|
-
|
|
343
|
-
it "returns a cloned query" do
|
|
344
|
-
expect(selection).to_not equal(query)
|
|
345
|
-
end
|
|
346
634
|
end
|
|
347
635
|
end
|
|
348
636
|
|
|
@@ -354,6 +642,8 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
354
642
|
query.or(first: [ 1, 2 ]).or(second: [ 3, 4 ])
|
|
355
643
|
end
|
|
356
644
|
|
|
645
|
+
it_behaves_like 'returns a cloned query'
|
|
646
|
+
|
|
357
647
|
it "adds the $or selectors" do
|
|
358
648
|
expect(selection.selector).to eq({
|
|
359
649
|
"$or" => [
|
|
@@ -362,10 +652,6 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
362
652
|
]
|
|
363
653
|
})
|
|
364
654
|
end
|
|
365
|
-
|
|
366
|
-
it "returns a cloned query" do
|
|
367
|
-
expect(selection).to_not equal(query)
|
|
368
|
-
end
|
|
369
655
|
end
|
|
370
656
|
|
|
371
657
|
context "when the criterion are on the same field" do
|
|
@@ -374,6 +660,8 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
374
660
|
query.or(first: [ 1, 2 ]).or(first: [ 3, 4 ])
|
|
375
661
|
end
|
|
376
662
|
|
|
663
|
+
it_behaves_like 'returns a cloned query'
|
|
664
|
+
|
|
377
665
|
it "appends both $or expressions" do
|
|
378
666
|
expect(selection.selector).to eq({
|
|
379
667
|
"$or" => [
|
|
@@ -382,16 +670,17 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
382
670
|
]
|
|
383
671
|
})
|
|
384
672
|
end
|
|
385
|
-
|
|
386
|
-
it "returns a cloned query" do
|
|
387
|
-
expect(selection).to_not equal(query)
|
|
388
|
-
end
|
|
389
673
|
end
|
|
390
674
|
end
|
|
391
675
|
end
|
|
392
676
|
|
|
393
677
|
describe "#nor" do
|
|
394
678
|
|
|
679
|
+
let(:tested_method) { :nor }
|
|
680
|
+
let(:expected_operator) { '$nor' }
|
|
681
|
+
|
|
682
|
+
it_behaves_like 'a non-combining logical operation'
|
|
683
|
+
|
|
395
684
|
context "when provided no criterion" do
|
|
396
685
|
|
|
397
686
|
let(:selection) do
|
|
@@ -406,9 +695,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
406
695
|
expect(selection).to eq(query)
|
|
407
696
|
end
|
|
408
697
|
|
|
409
|
-
|
|
410
|
-
expect(selection).to_not equal(query)
|
|
411
|
-
end
|
|
698
|
+
it_behaves_like 'returns a cloned query'
|
|
412
699
|
end
|
|
413
700
|
|
|
414
701
|
context "when provided nil" do
|
|
@@ -425,9 +712,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
425
712
|
expect(selection).to eq(query)
|
|
426
713
|
end
|
|
427
714
|
|
|
428
|
-
|
|
429
|
-
expect(selection).to_not equal(query)
|
|
430
|
-
end
|
|
715
|
+
it_behaves_like 'returns a cloned query'
|
|
431
716
|
end
|
|
432
717
|
|
|
433
718
|
context "when provided a single criterion" do
|
|
@@ -442,9 +727,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
442
727
|
})
|
|
443
728
|
end
|
|
444
729
|
|
|
445
|
-
|
|
446
|
-
expect(selection).to_not equal(query)
|
|
447
|
-
end
|
|
730
|
+
it_behaves_like 'returns a cloned query'
|
|
448
731
|
end
|
|
449
732
|
|
|
450
733
|
context "when provided multiple criterion" do
|
|
@@ -464,9 +747,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
464
747
|
})
|
|
465
748
|
end
|
|
466
749
|
|
|
467
|
-
|
|
468
|
-
expect(selection).to_not equal(query)
|
|
469
|
-
end
|
|
750
|
+
it_behaves_like 'returns a cloned query'
|
|
470
751
|
end
|
|
471
752
|
|
|
472
753
|
context "when the criterion are on the same field" do
|
|
@@ -484,9 +765,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
484
765
|
})
|
|
485
766
|
end
|
|
486
767
|
|
|
487
|
-
|
|
488
|
-
expect(selection).to_not equal(query)
|
|
489
|
-
end
|
|
768
|
+
it_behaves_like 'returns a cloned query'
|
|
490
769
|
end
|
|
491
770
|
end
|
|
492
771
|
|
|
@@ -507,9 +786,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
507
786
|
})
|
|
508
787
|
end
|
|
509
788
|
|
|
510
|
-
|
|
511
|
-
expect(selection).to_not equal(query)
|
|
512
|
-
end
|
|
789
|
+
it_behaves_like 'returns a cloned query'
|
|
513
790
|
end
|
|
514
791
|
|
|
515
792
|
context "when the criterion are on the same field" do
|
|
@@ -527,9 +804,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
527
804
|
})
|
|
528
805
|
end
|
|
529
806
|
|
|
530
|
-
|
|
531
|
-
expect(selection).to_not equal(query)
|
|
532
|
-
end
|
|
807
|
+
it_behaves_like 'returns a cloned query'
|
|
533
808
|
end
|
|
534
809
|
end
|
|
535
810
|
end
|
|
@@ -561,27 +836,45 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
561
836
|
expect(query.negating).to be nil
|
|
562
837
|
end
|
|
563
838
|
|
|
564
|
-
|
|
565
|
-
|
|
839
|
+
shared_examples_for 'negates the next condition' do
|
|
566
840
|
let(:selection) do
|
|
567
|
-
query.not.
|
|
841
|
+
query.not.send(query_method, field: [ 1, 2 ])
|
|
568
842
|
end
|
|
569
843
|
|
|
570
|
-
it "negates the
|
|
844
|
+
it "negates the next condition" do
|
|
571
845
|
expect(selection.selector).to eq(
|
|
572
|
-
{ "field" => { "$not" => {
|
|
846
|
+
{ "field" => { "$not" => { operator => [ 1, 2 ] }}}
|
|
573
847
|
)
|
|
574
848
|
end
|
|
575
849
|
|
|
576
|
-
|
|
577
|
-
expect(selection).to_not equal(query)
|
|
578
|
-
end
|
|
850
|
+
it_behaves_like 'returns a cloned query'
|
|
579
851
|
|
|
580
852
|
it "removes the negation on the clone" do
|
|
581
853
|
expect(selection).to_not be_negating
|
|
582
854
|
end
|
|
583
855
|
end
|
|
584
856
|
|
|
857
|
+
context "when the next condition is #all" do
|
|
858
|
+
let(:query_method) { :all }
|
|
859
|
+
let(:operator) { '$all' }
|
|
860
|
+
|
|
861
|
+
it_behaves_like 'negates the next condition'
|
|
862
|
+
end
|
|
863
|
+
|
|
864
|
+
context "when the next condition is #in" do
|
|
865
|
+
let(:query_method) { :in }
|
|
866
|
+
let(:operator) { '$in' }
|
|
867
|
+
|
|
868
|
+
it_behaves_like 'negates the next condition'
|
|
869
|
+
end
|
|
870
|
+
|
|
871
|
+
context "when the next condition is #nin" do
|
|
872
|
+
let(:query_method) { :nin }
|
|
873
|
+
let(:operator) { '$nin' }
|
|
874
|
+
|
|
875
|
+
it_behaves_like 'negates the next condition'
|
|
876
|
+
end
|
|
877
|
+
|
|
585
878
|
context "when the following criteria is a gt method" do
|
|
586
879
|
|
|
587
880
|
let(:selection) do
|
|
@@ -594,9 +887,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
594
887
|
)
|
|
595
888
|
end
|
|
596
889
|
|
|
597
|
-
|
|
598
|
-
expect(selection).to_not eq(query)
|
|
599
|
-
end
|
|
890
|
+
it_behaves_like 'returns a cloned query'
|
|
600
891
|
|
|
601
892
|
it "removes the negation on the clone" do
|
|
602
893
|
expect(selection).to_not be_negating
|
|
@@ -615,9 +906,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
615
906
|
)
|
|
616
907
|
end
|
|
617
908
|
|
|
618
|
-
|
|
619
|
-
expect(selection).to_not equal(query)
|
|
620
|
-
end
|
|
909
|
+
it_behaves_like 'returns a cloned query'
|
|
621
910
|
|
|
622
911
|
it "removes the negation on the clone" do
|
|
623
912
|
expect(selection).to_not be_negating
|
|
@@ -636,9 +925,26 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
636
925
|
)
|
|
637
926
|
end
|
|
638
927
|
|
|
639
|
-
|
|
640
|
-
|
|
928
|
+
it_behaves_like 'returns a cloned query'
|
|
929
|
+
|
|
930
|
+
it "removes the negation on the clone" do
|
|
931
|
+
expect(selection).to_not be_negating
|
|
641
932
|
end
|
|
933
|
+
end
|
|
934
|
+
|
|
935
|
+
context 'when the following criteria uses string were form' do
|
|
936
|
+
|
|
937
|
+
let(:selection) do
|
|
938
|
+
query.not.where('hello world')
|
|
939
|
+
end
|
|
940
|
+
|
|
941
|
+
it "negates the selection with an operator" do
|
|
942
|
+
expect(selection.selector).to eq(
|
|
943
|
+
'$and' => [{'$nor' => [{'$where' => 'hello world'}]}]
|
|
944
|
+
)
|
|
945
|
+
end
|
|
946
|
+
|
|
947
|
+
it_behaves_like 'returns a cloned query'
|
|
642
948
|
|
|
643
949
|
it "removes the negation on the clone" do
|
|
644
950
|
expect(selection).to_not be_negating
|
|
@@ -661,9 +967,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
661
967
|
expect(selection).to eq(query)
|
|
662
968
|
end
|
|
663
969
|
|
|
664
|
-
|
|
665
|
-
expect(selection).to_not equal(query)
|
|
666
|
-
end
|
|
970
|
+
it_behaves_like 'returns a cloned query'
|
|
667
971
|
end
|
|
668
972
|
|
|
669
973
|
context "when provided a single criterion" do
|
|
@@ -678,14 +982,31 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
678
982
|
})
|
|
679
983
|
end
|
|
680
984
|
|
|
681
|
-
|
|
682
|
-
|
|
985
|
+
it_behaves_like 'returns a cloned query'
|
|
986
|
+
end
|
|
987
|
+
|
|
988
|
+
context "when negating a field in the original selector" do
|
|
989
|
+
let(:query) do
|
|
990
|
+
Mongoid::Query.new("id" => "_id").where(field: 'foo')
|
|
991
|
+
end
|
|
992
|
+
|
|
993
|
+
let(:selection) do
|
|
994
|
+
query.not(field: 'bar')
|
|
995
|
+
end
|
|
996
|
+
|
|
997
|
+
it "combines the conditions" do
|
|
998
|
+
expect(selection.selector).to eq({
|
|
999
|
+
"field" => 'foo',
|
|
1000
|
+
'$and' => [{'$nor' => [{ "field" => 'bar' }]}],
|
|
1001
|
+
})
|
|
683
1002
|
end
|
|
1003
|
+
|
|
1004
|
+
it_behaves_like 'returns a cloned query'
|
|
684
1005
|
end
|
|
685
1006
|
|
|
686
|
-
context "when provided multiple
|
|
1007
|
+
context "when provided multiple criteria" do
|
|
687
1008
|
|
|
688
|
-
context "when the
|
|
1009
|
+
context "when the criteria are for different fields" do
|
|
689
1010
|
|
|
690
1011
|
let(:selection) do
|
|
691
1012
|
query.not(first: /1/, second: /2/)
|
|
@@ -698,9 +1019,23 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
698
1019
|
})
|
|
699
1020
|
end
|
|
700
1021
|
|
|
701
|
-
|
|
702
|
-
|
|
1022
|
+
it_behaves_like 'returns a cloned query'
|
|
1023
|
+
end
|
|
1024
|
+
|
|
1025
|
+
context "when the criteria are given in separate arguments" do
|
|
1026
|
+
|
|
1027
|
+
let(:selection) do
|
|
1028
|
+
query.not({first: /1/}, {second: /2/})
|
|
1029
|
+
end
|
|
1030
|
+
|
|
1031
|
+
it "adds the $not selectors" do
|
|
1032
|
+
expect(selection.selector).to eq({
|
|
1033
|
+
"first" => { "$not" => /1/ },
|
|
1034
|
+
"second" => { "$not" => /2/ }
|
|
1035
|
+
})
|
|
703
1036
|
end
|
|
1037
|
+
|
|
1038
|
+
it_behaves_like 'returns a cloned query'
|
|
704
1039
|
end
|
|
705
1040
|
end
|
|
706
1041
|
|
|
@@ -719,9 +1054,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
719
1054
|
})
|
|
720
1055
|
end
|
|
721
1056
|
|
|
722
|
-
|
|
723
|
-
expect(selection).to_not equal(query)
|
|
724
|
-
end
|
|
1057
|
+
it_behaves_like 'returns a cloned query'
|
|
725
1058
|
end
|
|
726
1059
|
|
|
727
1060
|
context "when the criterion are on the same field" do
|
|
@@ -730,15 +1063,14 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
730
1063
|
query.not(first: /1/).not(first: /2/)
|
|
731
1064
|
end
|
|
732
1065
|
|
|
733
|
-
it "
|
|
734
|
-
expect(selection.selector).to eq(
|
|
735
|
-
"first" => { "$not" => /
|
|
736
|
-
|
|
1066
|
+
it "combines conditions" do
|
|
1067
|
+
expect(selection.selector).to eq(
|
|
1068
|
+
"first" => { "$not" => /1/ },
|
|
1069
|
+
'$and' => [{'$nor' => [{'first' => /2/}]}],
|
|
1070
|
+
)
|
|
737
1071
|
end
|
|
738
1072
|
|
|
739
|
-
|
|
740
|
-
expect(selection).to_not equal(query)
|
|
741
|
-
end
|
|
1073
|
+
it_behaves_like 'returns a cloned query'
|
|
742
1074
|
end
|
|
743
1075
|
|
|
744
1076
|
context "when the criterion are a double negative" do
|
|
@@ -753,9 +1085,85 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
753
1085
|
})
|
|
754
1086
|
end
|
|
755
1087
|
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
1088
|
+
it_behaves_like 'returns a cloned query'
|
|
1089
|
+
end
|
|
1090
|
+
end
|
|
1091
|
+
|
|
1092
|
+
context 'when argument is a Criteria' do
|
|
1093
|
+
let(:query) do
|
|
1094
|
+
Mongoid::Query.new.where(hello: 'world')
|
|
1095
|
+
end
|
|
1096
|
+
|
|
1097
|
+
let(:other) do
|
|
1098
|
+
Mongoid::Query.new.where(foo: 'bar')
|
|
1099
|
+
end
|
|
1100
|
+
|
|
1101
|
+
let(:result) { query.not(other) }
|
|
1102
|
+
|
|
1103
|
+
it 'combines' do
|
|
1104
|
+
expect(result.selector).to eq('hello' => 'world', 'foo' => {'$ne' => 'bar'})
|
|
1105
|
+
end
|
|
1106
|
+
end
|
|
1107
|
+
|
|
1108
|
+
context 'when argument is a simple Criteria with multiple fields' do
|
|
1109
|
+
let(:query) do
|
|
1110
|
+
Mongoid::Query.new.where(hello: 'world')
|
|
1111
|
+
end
|
|
1112
|
+
|
|
1113
|
+
let(:other) do
|
|
1114
|
+
Mongoid::Query.new.where(a: 1, b: 2)
|
|
1115
|
+
end
|
|
1116
|
+
|
|
1117
|
+
let(:result) { query.not(other) }
|
|
1118
|
+
|
|
1119
|
+
it 'combines fields into top level criteria' do
|
|
1120
|
+
expect(result.selector).to eq('hello' => 'world',
|
|
1121
|
+
'a' => {'$ne' => 1}, 'b' => {'$ne' => 2})
|
|
1122
|
+
end
|
|
1123
|
+
end
|
|
1124
|
+
|
|
1125
|
+
context 'when argument is a complex Criteria' do
|
|
1126
|
+
let(:query) do
|
|
1127
|
+
Mongoid::Query.new.where(hello: 'world')
|
|
1128
|
+
end
|
|
1129
|
+
|
|
1130
|
+
let(:other) do
|
|
1131
|
+
Mongoid::Query.new.where('$nor' => [{a: 1, b: 2}])
|
|
1132
|
+
end
|
|
1133
|
+
|
|
1134
|
+
let(:result) { query.not(other) }
|
|
1135
|
+
|
|
1136
|
+
it 'combines with $and of $nor' do
|
|
1137
|
+
expect(result.selector).to eq('hello' => 'world', '$and' => [{'$nor' => [{
|
|
1138
|
+
'$nor' => [{'a' => 1, 'b' => 2}]}]}])
|
|
1139
|
+
end
|
|
1140
|
+
end
|
|
1141
|
+
|
|
1142
|
+
context 'when argument is a mix of Criteria and hashes' do
|
|
1143
|
+
let(:query) do
|
|
1144
|
+
Mongoid::Query.new.where(hello: 'world')
|
|
1145
|
+
end
|
|
1146
|
+
|
|
1147
|
+
let(:other1) do
|
|
1148
|
+
Mongoid::Query.new.where(foo: 'bar')
|
|
1149
|
+
end
|
|
1150
|
+
|
|
1151
|
+
let(:other2) do
|
|
1152
|
+
{bar: 42}
|
|
1153
|
+
end
|
|
1154
|
+
|
|
1155
|
+
let(:other3) do
|
|
1156
|
+
Mongoid::Query.new.where(a: 2)
|
|
1157
|
+
end
|
|
1158
|
+
|
|
1159
|
+
let(:result) { query.not(other1, other2, other3) }
|
|
1160
|
+
|
|
1161
|
+
it 'combines' do
|
|
1162
|
+
expect(result.selector).to eq('hello' => 'world',
|
|
1163
|
+
'foo' => {'$ne' => 'bar'},
|
|
1164
|
+
'bar' => {'$ne' => 42},
|
|
1165
|
+
'a' => {'$ne' => 2},
|
|
1166
|
+
)
|
|
759
1167
|
end
|
|
760
1168
|
end
|
|
761
1169
|
end
|