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,4 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
class Criteria
|
|
4
6
|
module Queryable
|
|
@@ -101,16 +103,24 @@ module Mongoid
|
|
|
101
103
|
|
|
102
104
|
# Instantiate the new key.
|
|
103
105
|
#
|
|
104
|
-
# @example Instantiate
|
|
105
|
-
# Key.new("age", "$gt")
|
|
106
|
+
# @example Instantiate a key.
|
|
107
|
+
# Key.new("age", :__override__, "$gt")
|
|
108
|
+
#
|
|
109
|
+
# @example Instantiate a key for sorting.
|
|
110
|
+
# Key.new(:field, :__override__, 1)
|
|
106
111
|
#
|
|
107
112
|
# @param [ String, Symbol ] name The field name.
|
|
108
113
|
# @param [ Symbol ] strategy The name of the merge strategy.
|
|
109
|
-
# @param [ String ] operator The
|
|
114
|
+
# @param [ String | Integer ] operator The MongoDB operator,
|
|
115
|
+
# or sort direction (1 or -1).
|
|
110
116
|
# @param [ String ] expanded The Mongo expanded operator.
|
|
111
117
|
#
|
|
112
118
|
# @since 1.0.0
|
|
113
119
|
def initialize(name, strategy, operator, expanded = nil, &block)
|
|
120
|
+
unless operator.is_a?(String) || operator.is_a?(Integer)
|
|
121
|
+
raise ArgumentError, "Operator must be a string or an integer: #{operator.inspect}"
|
|
122
|
+
end
|
|
123
|
+
|
|
114
124
|
@name, @strategy, @operator, @expanded, @block =
|
|
115
125
|
name, strategy, operator, expanded, block
|
|
116
126
|
end
|
|
@@ -127,9 +137,27 @@ module Mongoid
|
|
|
127
137
|
#
|
|
128
138
|
# @since 1.0.0
|
|
129
139
|
def __expr_part__(object, negating = false)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
140
|
+
{ name.to_s => transform_value(object, negating) }
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def transform_value(value, negating = false)
|
|
144
|
+
if block
|
|
145
|
+
expr = block[value]
|
|
146
|
+
else
|
|
147
|
+
expr = value
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
if expanded
|
|
151
|
+
expr = {expanded => expr}
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
expr = {operator => expr}
|
|
155
|
+
|
|
156
|
+
if negating && operator != '$not'
|
|
157
|
+
expr = {'$not' => expr}
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
expr
|
|
133
161
|
end
|
|
134
162
|
|
|
135
163
|
# Get the key as raw Mongo sorting options.
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
class Criteria
|
|
4
6
|
module Queryable
|
|
5
7
|
|
|
6
|
-
# Adds macro
|
|
8
|
+
# Adds macro behavior for adding symbol methods.
|
|
7
9
|
module Macroable
|
|
8
10
|
|
|
9
11
|
# Adds a method on Symbol for convenience in where queries for the
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
class Criteria
|
|
4
6
|
module Queryable
|
|
5
7
|
|
|
6
|
-
# Contains
|
|
8
|
+
# Contains behavior for merging existing selection with new selection.
|
|
7
9
|
module Mergeable
|
|
8
10
|
|
|
9
11
|
# @attribute [rw] strategy The name of the current strategy.
|
|
@@ -50,12 +52,13 @@ module Mongoid
|
|
|
50
52
|
# @example Reset the strategies.
|
|
51
53
|
# mergeable.reset_strategies!
|
|
52
54
|
#
|
|
53
|
-
# @return [
|
|
55
|
+
# @return [ Criteria ] self.
|
|
54
56
|
#
|
|
55
57
|
# @since 1.0.0
|
|
56
58
|
def reset_strategies!
|
|
57
59
|
self.strategy = nil
|
|
58
60
|
self.negating = nil
|
|
61
|
+
self
|
|
59
62
|
end
|
|
60
63
|
|
|
61
64
|
private
|
|
@@ -133,34 +136,103 @@ module Mongoid
|
|
|
133
136
|
with_strategy(:__intersect__, criterion, operator)
|
|
134
137
|
end
|
|
135
138
|
|
|
136
|
-
# Adds
|
|
139
|
+
# Adds $and/$or/$nor criteria to a copy of this selection.
|
|
140
|
+
#
|
|
141
|
+
# Each of the criteria can be a Hash of key/value pairs or MongoDB
|
|
142
|
+
# operators (keys beginning with $), or a Selectable object
|
|
143
|
+
# (which typically will be a Criteria instance).
|
|
137
144
|
#
|
|
138
145
|
# @api private
|
|
139
146
|
#
|
|
140
147
|
# @example Add the criterion.
|
|
141
148
|
# mergeable.__multi__([ 1, 2 ], "$in")
|
|
142
149
|
#
|
|
143
|
-
# @param [ Hash ]
|
|
150
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
151
|
+
# matches or Criteria objects.
|
|
144
152
|
# @param [ String ] operator The MongoDB operator.
|
|
145
153
|
#
|
|
146
154
|
# @return [ Mergeable ] The new mergeable.
|
|
147
155
|
#
|
|
148
156
|
# @since 1.0.0
|
|
149
|
-
def __multi__(
|
|
157
|
+
def __multi__(criteria, operator)
|
|
150
158
|
clone.tap do |query|
|
|
151
159
|
sel = query.selector
|
|
152
|
-
|
|
160
|
+
criteria.flatten.each do |expr|
|
|
153
161
|
next unless expr
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
162
|
+
result_criteria = sel[operator] || []
|
|
163
|
+
if expr.is_a?(Selectable)
|
|
164
|
+
expr = expr.selector
|
|
165
|
+
end
|
|
166
|
+
normalized = _mongoid_normalize_expr(expr)
|
|
167
|
+
sel.store(operator, result_criteria.push(normalized))
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Combines criteria into a MongoDB selector.
|
|
173
|
+
#
|
|
174
|
+
# Criteria is an array of criterions which will be flattened.
|
|
175
|
+
#
|
|
176
|
+
# Each criterion can be:
|
|
177
|
+
# - A hash
|
|
178
|
+
# - A Criteria instance
|
|
179
|
+
# - nil, in which case it is ignored
|
|
180
|
+
#
|
|
181
|
+
# @api private
|
|
182
|
+
private def _mongoid_add_top_level_operation(operator, criteria)
|
|
183
|
+
# Flatten the criteria. The idea is that predicates in MongoDB
|
|
184
|
+
# are always hashes and are never arrays. This method additionally
|
|
185
|
+
# allows Criteria instances as predicates.
|
|
186
|
+
# The flattening is existing Mongoid behavior but we could possibly
|
|
187
|
+
# get rid of it as applications can splat their predicates, or
|
|
188
|
+
# flatten if needed.
|
|
189
|
+
clone.tap do |query|
|
|
190
|
+
sel = query.selector
|
|
191
|
+
_mongoid_flatten_arrays(criteria).each do |criterion|
|
|
192
|
+
if criterion.is_a?(Selectable)
|
|
193
|
+
expr = _mongoid_normalize_expr(criterion.selector)
|
|
194
|
+
else
|
|
195
|
+
expr = criterion
|
|
196
|
+
end
|
|
197
|
+
if sel.empty?
|
|
198
|
+
sel.store(operator, [expr])
|
|
199
|
+
elsif sel.keys == [operator]
|
|
200
|
+
sel.store(operator, sel[operator] + [expr])
|
|
201
|
+
else
|
|
202
|
+
operands = [sel.dup] + [expr]
|
|
203
|
+
sel.clear
|
|
204
|
+
sel.store(operator, operands)
|
|
158
205
|
end
|
|
159
|
-
sel.store(operator, criteria.push(normalized))
|
|
160
206
|
end
|
|
161
207
|
end
|
|
162
208
|
end
|
|
163
209
|
|
|
210
|
+
# Calling .flatten on an array which includes a Criteria instance
|
|
211
|
+
# evaluates the criteria, which we do not want. Hence this method
|
|
212
|
+
# explicitly only expands Array objects and Array subclasses.
|
|
213
|
+
private def _mongoid_flatten_arrays(array)
|
|
214
|
+
out = []
|
|
215
|
+
pending = array
|
|
216
|
+
until pending.empty?
|
|
217
|
+
item = pending.shift
|
|
218
|
+
if item.nil?
|
|
219
|
+
# skip
|
|
220
|
+
elsif item.is_a?(Array)
|
|
221
|
+
pending += item
|
|
222
|
+
else
|
|
223
|
+
out << item
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
out
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# @api private
|
|
230
|
+
private def _mongoid_normalize_expr(expr)
|
|
231
|
+
expr.inject({}) do |hash, (field, value)|
|
|
232
|
+
hash.merge!(field.__expr_part__(value.__expand_complex__))
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
164
236
|
# Adds the criterion to the existing selection.
|
|
165
237
|
#
|
|
166
238
|
# @api private
|
|
@@ -175,6 +247,9 @@ module Mongoid
|
|
|
175
247
|
#
|
|
176
248
|
# @since 1.0.0
|
|
177
249
|
def __override__(criterion, operator)
|
|
250
|
+
if criterion.is_a?(Selectable)
|
|
251
|
+
criterion = criterion.selector
|
|
252
|
+
end
|
|
178
253
|
selection(criterion) do |selector, field, value|
|
|
179
254
|
expression = prepare(field, operator, value)
|
|
180
255
|
existing = selector[field]
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
class Criteria
|
|
4
6
|
module Queryable
|
|
5
7
|
|
|
6
|
-
# The optional module includes all
|
|
8
|
+
# The optional module includes all behavior that has to do with extra
|
|
7
9
|
# options surrounding queries, like skip, limit, sorting, etc.
|
|
8
10
|
module Optional
|
|
9
11
|
extend Macroable
|
|
@@ -169,10 +171,10 @@ module Mongoid
|
|
|
169
171
|
# optional.order_by([[ name, 1 ], [ dob, -1 ]])
|
|
170
172
|
#
|
|
171
173
|
# @example Add sorting options via an array with symbol directions.
|
|
172
|
-
# optional.order_by([[ name, :asc ], [ dob, :desc ]])
|
|
174
|
+
# optional.order_by([[ :name, :asc ], [ :dob, :desc ]])
|
|
173
175
|
#
|
|
174
176
|
# @example Add sorting options via an array with string directions.
|
|
175
|
-
# optional.order_by([[ name, "asc" ], [ dob, "desc" ]])
|
|
177
|
+
# optional.order_by([[ "name", "asc" ], [ "dob", "desc" ]])
|
|
176
178
|
#
|
|
177
179
|
# @example Add sorting options with keys.
|
|
178
180
|
# optional.order_by(:name.asc, :dob.desc)
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
class Criteria
|
|
4
6
|
module Queryable
|
|
@@ -41,8 +43,32 @@ module Mongoid
|
|
|
41
43
|
# @return [ Selectable ] The cloned selectable.
|
|
42
44
|
#
|
|
43
45
|
# @since 1.0.0
|
|
44
|
-
def all(
|
|
45
|
-
|
|
46
|
+
def all(*criteria)
|
|
47
|
+
if criteria.empty?
|
|
48
|
+
return clone.tap do |query|
|
|
49
|
+
query.reset_strategies!
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
criteria.inject(clone) do |query, condition|
|
|
54
|
+
if condition.nil?
|
|
55
|
+
raise Errors::CriteriaArgumentRequired, :all
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
condition = expand_condition_to_array_values(condition)
|
|
59
|
+
|
|
60
|
+
if strategy
|
|
61
|
+
send(strategy, condition, "$all")
|
|
62
|
+
else
|
|
63
|
+
condition.inject(query) do |_query, (field, value)|
|
|
64
|
+
v = {'$all' => value}
|
|
65
|
+
if negating?
|
|
66
|
+
v = {'$not' => v}
|
|
67
|
+
end
|
|
68
|
+
_query.add_field_expression(field.to_s, v)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end.reset_strategies!
|
|
46
72
|
end
|
|
47
73
|
alias :all_in :all
|
|
48
74
|
key :all, :union, "$all"
|
|
@@ -52,14 +78,28 @@ module Mongoid
|
|
|
52
78
|
# @example Add the criterion.
|
|
53
79
|
# selectable.and({ field: value }, { other: value })
|
|
54
80
|
#
|
|
55
|
-
# @param [ Array<Hash> ]
|
|
56
|
-
# all must match to return results.
|
|
81
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
82
|
+
# matches or Criteria objects that all must match to return results.
|
|
57
83
|
#
|
|
58
|
-
# @return [ Selectable ] The
|
|
84
|
+
# @return [ Selectable ] The new selectable.
|
|
59
85
|
#
|
|
60
86
|
# @since 1.0.0
|
|
61
|
-
def and(*
|
|
62
|
-
|
|
87
|
+
def and(*criteria)
|
|
88
|
+
_mongoid_flatten_arrays(criteria).inject(self.clone) do |c, new_s|
|
|
89
|
+
if new_s.is_a?(Selectable)
|
|
90
|
+
new_s = new_s.selector
|
|
91
|
+
end
|
|
92
|
+
normalized = _mongoid_normalize_expr(new_s)
|
|
93
|
+
normalized.each do |k, v|
|
|
94
|
+
k = k.to_s
|
|
95
|
+
if c.selector[k] || k[0] == ?$
|
|
96
|
+
c = c.send(:__multi__, [{k => v}], '$and')
|
|
97
|
+
else
|
|
98
|
+
c.selector.store(k, v)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
c
|
|
102
|
+
end
|
|
63
103
|
end
|
|
64
104
|
alias :all_of :and
|
|
65
105
|
|
|
@@ -76,7 +116,11 @@ module Mongoid
|
|
|
76
116
|
# @return [ Selectable ] The cloned selectable.
|
|
77
117
|
#
|
|
78
118
|
# @since 1.0.0
|
|
79
|
-
def between(criterion
|
|
119
|
+
def between(criterion)
|
|
120
|
+
if criterion.nil?
|
|
121
|
+
raise Errors::CriteriaArgumentRequired, :between
|
|
122
|
+
end
|
|
123
|
+
|
|
80
124
|
selection(criterion) do |selector, field, value|
|
|
81
125
|
selector.store(
|
|
82
126
|
field,
|
|
@@ -104,7 +148,11 @@ module Mongoid
|
|
|
104
148
|
# @return [ Selectable ] The cloned selectable.
|
|
105
149
|
#
|
|
106
150
|
# @since 1.0.0
|
|
107
|
-
def elem_match(criterion
|
|
151
|
+
def elem_match(criterion)
|
|
152
|
+
if criterion.nil?
|
|
153
|
+
raise Errors::CriteriaArgumentRequired, :elem_match
|
|
154
|
+
end
|
|
155
|
+
|
|
108
156
|
__override__(criterion, "$elemMatch")
|
|
109
157
|
end
|
|
110
158
|
key :elem_match, :override, "$elemMatch"
|
|
@@ -125,7 +173,11 @@ module Mongoid
|
|
|
125
173
|
# @return [ Selectable ] The cloned selectable.
|
|
126
174
|
#
|
|
127
175
|
# @since 1.0.0
|
|
128
|
-
def exists(criterion
|
|
176
|
+
def exists(criterion)
|
|
177
|
+
if criterion.nil?
|
|
178
|
+
raise Errors::CriteriaArgumentRequired, :exists
|
|
179
|
+
end
|
|
180
|
+
|
|
129
181
|
typed_override(criterion, "$exists") do |value|
|
|
130
182
|
::Boolean.evolve(value)
|
|
131
183
|
end
|
|
@@ -170,7 +222,11 @@ module Mongoid
|
|
|
170
222
|
# @return [ Selectable ] The cloned selectable.
|
|
171
223
|
#
|
|
172
224
|
# @since 2.0.0
|
|
173
|
-
def geo_spacial(criterion
|
|
225
|
+
def geo_spacial(criterion)
|
|
226
|
+
if criterion.nil?
|
|
227
|
+
raise Errors::CriteriaArgumentRequired, :geo_spacial
|
|
228
|
+
end
|
|
229
|
+
|
|
174
230
|
__merge__(criterion)
|
|
175
231
|
end
|
|
176
232
|
key :intersects_line, :override, "$geoIntersects", "$geometry" do |value|
|
|
@@ -200,7 +256,11 @@ module Mongoid
|
|
|
200
256
|
# @return [ Selectable ] The cloned selectable.
|
|
201
257
|
#
|
|
202
258
|
# @since 1.0.0
|
|
203
|
-
def gt(criterion
|
|
259
|
+
def gt(criterion)
|
|
260
|
+
if criterion.nil?
|
|
261
|
+
raise Errors::CriteriaArgumentRequired, :gt
|
|
262
|
+
end
|
|
263
|
+
|
|
204
264
|
__override__(criterion, "$gt")
|
|
205
265
|
end
|
|
206
266
|
key :gt, :override, "$gt"
|
|
@@ -218,7 +278,11 @@ module Mongoid
|
|
|
218
278
|
# @return [ Selectable ] The cloned selectable.
|
|
219
279
|
#
|
|
220
280
|
# @since 1.0.0
|
|
221
|
-
def gte(criterion
|
|
281
|
+
def gte(criterion)
|
|
282
|
+
if criterion.nil?
|
|
283
|
+
raise Errors::CriteriaArgumentRequired, :gte
|
|
284
|
+
end
|
|
285
|
+
|
|
222
286
|
__override__(criterion, "$gte")
|
|
223
287
|
end
|
|
224
288
|
key :gte, :override, "$gte"
|
|
@@ -234,13 +298,29 @@ module Mongoid
|
|
|
234
298
|
# @example Execute an $in in a where query.
|
|
235
299
|
# selectable.where(:field.in => [ 1, 2, 3 ])
|
|
236
300
|
#
|
|
237
|
-
# @param [ Hash ]
|
|
301
|
+
# @param [ Hash ] condition The field/value criterion pairs.
|
|
238
302
|
#
|
|
239
303
|
# @return [ Selectable ] The cloned selectable.
|
|
240
304
|
#
|
|
241
305
|
# @since 1.0.0
|
|
242
|
-
def in(
|
|
243
|
-
|
|
306
|
+
def in(condition)
|
|
307
|
+
if condition.nil?
|
|
308
|
+
raise Errors::CriteriaArgumentRequired, :in
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
condition = expand_condition_to_array_values(condition)
|
|
312
|
+
|
|
313
|
+
if strategy
|
|
314
|
+
send(strategy, condition, "$in")
|
|
315
|
+
else
|
|
316
|
+
condition.inject(clone) do |query, (field, value)|
|
|
317
|
+
v = {'$in' => value}
|
|
318
|
+
if negating?
|
|
319
|
+
v = {'$not' => v}
|
|
320
|
+
end
|
|
321
|
+
query.add_field_expression(field.to_s, v)
|
|
322
|
+
end.reset_strategies!
|
|
323
|
+
end
|
|
244
324
|
end
|
|
245
325
|
alias :any_in :in
|
|
246
326
|
key :in, :intersect, "$in"
|
|
@@ -258,7 +338,11 @@ module Mongoid
|
|
|
258
338
|
# @return [ Selectable ] The cloned selectable.
|
|
259
339
|
#
|
|
260
340
|
# @since 1.0.0
|
|
261
|
-
def lt(criterion
|
|
341
|
+
def lt(criterion)
|
|
342
|
+
if criterion.nil?
|
|
343
|
+
raise Errors::CriteriaArgumentRequired, :lt
|
|
344
|
+
end
|
|
345
|
+
|
|
262
346
|
__override__(criterion, "$lt")
|
|
263
347
|
end
|
|
264
348
|
key :lt, :override, "$lt"
|
|
@@ -276,7 +360,11 @@ module Mongoid
|
|
|
276
360
|
# @return [ Selectable ] The cloned selectable.
|
|
277
361
|
#
|
|
278
362
|
# @since 1.0.0
|
|
279
|
-
def lte(criterion
|
|
363
|
+
def lte(criterion)
|
|
364
|
+
if criterion.nil?
|
|
365
|
+
raise Errors::CriteriaArgumentRequired, :lte
|
|
366
|
+
end
|
|
367
|
+
|
|
280
368
|
__override__(criterion, "$lte")
|
|
281
369
|
end
|
|
282
370
|
key :lte, :override, "$lte"
|
|
@@ -291,7 +379,12 @@ module Mongoid
|
|
|
291
379
|
# @return [ Selectable ] The cloned selectable.
|
|
292
380
|
#
|
|
293
381
|
# @since 1.0.0
|
|
294
|
-
def max_distance(criterion
|
|
382
|
+
def max_distance(criterion)
|
|
383
|
+
if criterion.nil?
|
|
384
|
+
raise Errors::CriteriaArgumentRequired, :max_distance
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
# $maxDistance must be given together with $near
|
|
295
388
|
__add__(criterion, "$maxDistance")
|
|
296
389
|
end
|
|
297
390
|
|
|
@@ -308,7 +401,11 @@ module Mongoid
|
|
|
308
401
|
# @return [ Selectable ] The cloned selectable.
|
|
309
402
|
#
|
|
310
403
|
# @since 1.0.0
|
|
311
|
-
def mod(criterion
|
|
404
|
+
def mod(criterion)
|
|
405
|
+
if criterion.nil?
|
|
406
|
+
raise Errors::CriteriaArgumentRequired, :mod
|
|
407
|
+
end
|
|
408
|
+
|
|
312
409
|
__override__(criterion, "$mod")
|
|
313
410
|
end
|
|
314
411
|
key :mod, :override, "$mod"
|
|
@@ -326,7 +423,11 @@ module Mongoid
|
|
|
326
423
|
# @return [ Selectable ] The cloned selectable.
|
|
327
424
|
#
|
|
328
425
|
# @since 1.0.0
|
|
329
|
-
def ne(criterion
|
|
426
|
+
def ne(criterion)
|
|
427
|
+
if criterion.nil?
|
|
428
|
+
raise Errors::CriteriaArgumentRequired, :ne
|
|
429
|
+
end
|
|
430
|
+
|
|
330
431
|
__override__(criterion, "$ne")
|
|
331
432
|
end
|
|
332
433
|
alias :excludes :ne
|
|
@@ -345,7 +446,11 @@ module Mongoid
|
|
|
345
446
|
# @return [ Selectable ] The cloned selectable.
|
|
346
447
|
#
|
|
347
448
|
# @since 1.0.0
|
|
348
|
-
def near(criterion
|
|
449
|
+
def near(criterion)
|
|
450
|
+
if criterion.nil?
|
|
451
|
+
raise Errors::CriteriaArgumentRequired, :near
|
|
452
|
+
end
|
|
453
|
+
|
|
349
454
|
__override__(criterion, "$near")
|
|
350
455
|
end
|
|
351
456
|
key :near, :override, "$near"
|
|
@@ -363,7 +468,11 @@ module Mongoid
|
|
|
363
468
|
# @return [ Selectable ] The cloned selectable.
|
|
364
469
|
#
|
|
365
470
|
# @since 1.0.0
|
|
366
|
-
def near_sphere(criterion
|
|
471
|
+
def near_sphere(criterion)
|
|
472
|
+
if criterion.nil?
|
|
473
|
+
raise Errors::CriteriaArgumentRequired, :near_sphere
|
|
474
|
+
end
|
|
475
|
+
|
|
367
476
|
__override__(criterion, "$nearSphere")
|
|
368
477
|
end
|
|
369
478
|
key :near_sphere, :override, "$nearSphere"
|
|
@@ -379,13 +488,29 @@ module Mongoid
|
|
|
379
488
|
# @example Execute an $nin in a where query.
|
|
380
489
|
# selectable.where(:field.nin => [ 1, 2, 3 ])
|
|
381
490
|
#
|
|
382
|
-
# @param [ Hash ]
|
|
491
|
+
# @param [ Hash ] condition The field/value criterion pairs.
|
|
383
492
|
#
|
|
384
493
|
# @return [ Selectable ] The cloned selectable.
|
|
385
494
|
#
|
|
386
495
|
# @since 1.0.0
|
|
387
|
-
def nin(
|
|
388
|
-
|
|
496
|
+
def nin(condition)
|
|
497
|
+
if condition.nil?
|
|
498
|
+
raise Errors::CriteriaArgumentRequired, :nin
|
|
499
|
+
end
|
|
500
|
+
|
|
501
|
+
condition = expand_condition_to_array_values(condition)
|
|
502
|
+
|
|
503
|
+
if strategy
|
|
504
|
+
send(strategy, condition, "$nin")
|
|
505
|
+
else
|
|
506
|
+
condition.inject(clone) do |query, (field, value)|
|
|
507
|
+
v = {'$nin' => value}
|
|
508
|
+
if negating?
|
|
509
|
+
v = {'$not' => v}
|
|
510
|
+
end
|
|
511
|
+
query.add_field_expression(field.to_s, v)
|
|
512
|
+
end.reset_strategies!
|
|
513
|
+
end
|
|
389
514
|
end
|
|
390
515
|
alias :not_in :nin
|
|
391
516
|
key :nin, :intersect, "$nin"
|
|
@@ -395,13 +520,14 @@ module Mongoid
|
|
|
395
520
|
# @example Add the $nor selection.
|
|
396
521
|
# selectable.nor(field: 1, field: 2)
|
|
397
522
|
#
|
|
398
|
-
# @param [ Array
|
|
523
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
524
|
+
# matches or Criteria objects.
|
|
399
525
|
#
|
|
400
|
-
# @return [ Selectable ] The
|
|
526
|
+
# @return [ Selectable ] The new selectable.
|
|
401
527
|
#
|
|
402
528
|
# @since 1.0.0
|
|
403
|
-
def nor(*
|
|
404
|
-
|
|
529
|
+
def nor(*criteria)
|
|
530
|
+
_mongoid_add_top_level_operation('$nor', criteria)
|
|
405
531
|
end
|
|
406
532
|
|
|
407
533
|
# Is the current selectable negating the next selection?
|
|
@@ -416,9 +542,9 @@ module Mongoid
|
|
|
416
542
|
!!negating
|
|
417
543
|
end
|
|
418
544
|
|
|
419
|
-
# Negate the next selection.
|
|
545
|
+
# Negate the arguments, or the next selection if no arguments are given.
|
|
420
546
|
#
|
|
421
|
-
# @example Negate the selection.
|
|
547
|
+
# @example Negate the next selection.
|
|
422
548
|
# selectable.not.in(field: [ 1, 2 ])
|
|
423
549
|
#
|
|
424
550
|
# @example Add the $not criterion.
|
|
@@ -427,16 +553,35 @@ module Mongoid
|
|
|
427
553
|
# @example Execute a $not in a where query.
|
|
428
554
|
# selectable.where(:field.not => /Bob/)
|
|
429
555
|
#
|
|
430
|
-
# @param [ Hash ]
|
|
556
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
557
|
+
# matches or Criteria objects to negate.
|
|
431
558
|
#
|
|
432
|
-
# @return [ Selectable ] The
|
|
559
|
+
# @return [ Selectable ] The new selectable.
|
|
433
560
|
#
|
|
434
561
|
# @since 1.0.0
|
|
435
|
-
def not(*
|
|
436
|
-
if
|
|
562
|
+
def not(*criteria)
|
|
563
|
+
if criteria.empty?
|
|
437
564
|
dup.tap { |query| query.negating = true }
|
|
438
565
|
else
|
|
439
|
-
|
|
566
|
+
criteria.compact.inject(self.clone) do |c, new_s|
|
|
567
|
+
if new_s.is_a?(Selectable)
|
|
568
|
+
new_s = new_s.selector
|
|
569
|
+
end
|
|
570
|
+
new_s.each do |k, v|
|
|
571
|
+
k = k.to_s
|
|
572
|
+
if c.selector[k] || k[0] == ?$
|
|
573
|
+
c = c.send(:__multi__, [{'$nor' => [{k => v}]}], '$and')
|
|
574
|
+
else
|
|
575
|
+
if v.is_a?(Regexp)
|
|
576
|
+
negated_operator = '$not'
|
|
577
|
+
else
|
|
578
|
+
negated_operator = '$ne'
|
|
579
|
+
end
|
|
580
|
+
c = c.send(:__override__, {k => v}, negated_operator)
|
|
581
|
+
end
|
|
582
|
+
end
|
|
583
|
+
c
|
|
584
|
+
end
|
|
440
585
|
end
|
|
441
586
|
end
|
|
442
587
|
key :not, :override, "$not"
|
|
@@ -446,13 +591,14 @@ module Mongoid
|
|
|
446
591
|
# @example Add the $or selection.
|
|
447
592
|
# selectable.or(field: 1, field: 2)
|
|
448
593
|
#
|
|
449
|
-
# @param [ Array
|
|
594
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
595
|
+
# matches or Criteria objects.
|
|
450
596
|
#
|
|
451
|
-
# @return [ Selectable ] The
|
|
597
|
+
# @return [ Selectable ] The new selectable.
|
|
452
598
|
#
|
|
453
599
|
# @since 1.0.0
|
|
454
|
-
def or(*
|
|
455
|
-
|
|
600
|
+
def or(*criteria)
|
|
601
|
+
_mongoid_add_top_level_operation('$or', criteria)
|
|
456
602
|
end
|
|
457
603
|
alias :any_of :or
|
|
458
604
|
|
|
@@ -472,7 +618,11 @@ module Mongoid
|
|
|
472
618
|
# @return [ Selectable ] The cloned selectable.
|
|
473
619
|
#
|
|
474
620
|
# @since 1.0.0
|
|
475
|
-
def with_size(criterion
|
|
621
|
+
def with_size(criterion)
|
|
622
|
+
if criterion.nil?
|
|
623
|
+
raise Errors::CriteriaArgumentRequired, :with_size
|
|
624
|
+
end
|
|
625
|
+
|
|
476
626
|
typed_override(criterion, "$size") do |value|
|
|
477
627
|
::Integer.evolve(value)
|
|
478
628
|
end
|
|
@@ -496,7 +646,11 @@ module Mongoid
|
|
|
496
646
|
# @return [ Selectable ] The cloned selectable.
|
|
497
647
|
#
|
|
498
648
|
# @since 1.0.0
|
|
499
|
-
def with_type(criterion
|
|
649
|
+
def with_type(criterion)
|
|
650
|
+
if criterion.nil?
|
|
651
|
+
raise Errors::CriteriaArgumentRequired, :with_type
|
|
652
|
+
end
|
|
653
|
+
|
|
500
654
|
typed_override(criterion, "$type") do |value|
|
|
501
655
|
::Integer.evolve(value)
|
|
502
656
|
end
|
|
@@ -527,21 +681,23 @@ module Mongoid
|
|
|
527
681
|
#
|
|
528
682
|
# @since 2.2.0
|
|
529
683
|
def text_search(terms, opts = nil)
|
|
684
|
+
if terms.nil?
|
|
685
|
+
raise Errors::CriteriaArgumentRequired, :terms
|
|
686
|
+
end
|
|
687
|
+
|
|
530
688
|
clone.tap do |query|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
query.selector = query.selector.merge(criterion)
|
|
544
|
-
end
|
|
689
|
+
criterion = {'$text' => { '$search' => terms }}
|
|
690
|
+
criterion['$text'].merge!(opts) if opts
|
|
691
|
+
if query.selector['$text']
|
|
692
|
+
# Per https://docs.mongodb.com/manual/reference/operator/query/text/
|
|
693
|
+
# multiple $text expressions are not currently supported by
|
|
694
|
+
# MongoDB server, but build the query correctly instead of
|
|
695
|
+
# overwriting previous text search condition with the currently
|
|
696
|
+
# given one.
|
|
697
|
+
Mongoid.logger.warn('Multiple $text expressions per query are not currently supported by the server')
|
|
698
|
+
query.selector = {'$and' => [query.selector]}.merge(criterion)
|
|
699
|
+
else
|
|
700
|
+
query.selector = query.selector.merge(criterion)
|
|
545
701
|
end
|
|
546
702
|
end
|
|
547
703
|
end
|
|
@@ -561,18 +717,38 @@ module Mongoid
|
|
|
561
717
|
# @return [ Selectable ] The cloned selectable.
|
|
562
718
|
#
|
|
563
719
|
# @since 1.0.0
|
|
564
|
-
def where(
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
720
|
+
def where(*criteria)
|
|
721
|
+
criteria.inject(clone) do |query, criterion|
|
|
722
|
+
if criterion.nil?
|
|
723
|
+
raise Errors::CriteriaArgumentRequired, :where
|
|
724
|
+
end
|
|
725
|
+
|
|
726
|
+
# We need to save the criterion in an instance variable so
|
|
727
|
+
# Modifiable methods know how to create a polymorphic object.
|
|
728
|
+
# Note that this method in principle accepts multiple criteria,
|
|
729
|
+
# but only the first one will be stored in @criterion. This
|
|
730
|
+
# works out to be fine because first_or_create etc. methods
|
|
731
|
+
# only ever specify one criterion to #where.
|
|
732
|
+
@criterion = criterion
|
|
733
|
+
if criterion.is_a?(String)
|
|
734
|
+
js_query(criterion)
|
|
735
|
+
else
|
|
736
|
+
expr_query(criterion)
|
|
737
|
+
end
|
|
738
|
+
end.reset_strategies!
|
|
569
739
|
end
|
|
570
740
|
|
|
571
741
|
private
|
|
572
742
|
|
|
573
|
-
#
|
|
743
|
+
# Adds the specified expression to the query.
|
|
574
744
|
#
|
|
575
|
-
#
|
|
745
|
+
# Criterion must be a hash in one of the following forms:
|
|
746
|
+
# - {field_name: value}
|
|
747
|
+
# - {'field_name' => value}
|
|
748
|
+
# - {key_instance: value}
|
|
749
|
+
# - {'$operator' => operator_value_expression}
|
|
750
|
+
#
|
|
751
|
+
# Field name and operator may be given as either strings or symbols.
|
|
576
752
|
#
|
|
577
753
|
# @example Create the selection.
|
|
578
754
|
# selectable.expr_query(age: 50)
|
|
@@ -582,9 +758,24 @@ module Mongoid
|
|
|
582
758
|
# @return [ Selectable ] The cloned selectable.
|
|
583
759
|
#
|
|
584
760
|
# @since 1.0.0
|
|
761
|
+
# @api private
|
|
585
762
|
def expr_query(criterion)
|
|
586
|
-
|
|
587
|
-
|
|
763
|
+
if criterion.nil?
|
|
764
|
+
raise ArgumentError, 'Criterion cannot be nil here'
|
|
765
|
+
end
|
|
766
|
+
|
|
767
|
+
clone.tap do |query|
|
|
768
|
+
criterion.each do |field, value|
|
|
769
|
+
field_s = field.to_s
|
|
770
|
+
if field_s[0] == ?$
|
|
771
|
+
# Query expression-level operator, like $and or $where
|
|
772
|
+
query.add_operator_expression(field_s, value)
|
|
773
|
+
else
|
|
774
|
+
exp_field, exp_value = expand_one_condition(field, value)
|
|
775
|
+
query.add_field_expression(exp_field, exp_value)
|
|
776
|
+
end
|
|
777
|
+
end
|
|
778
|
+
query.reset_strategies!
|
|
588
779
|
end
|
|
589
780
|
end
|
|
590
781
|
|
|
@@ -623,7 +814,13 @@ module Mongoid
|
|
|
623
814
|
# @since 1.0.0
|
|
624
815
|
def js_query(criterion)
|
|
625
816
|
clone.tap do |query|
|
|
626
|
-
|
|
817
|
+
if negating?
|
|
818
|
+
query.add_operator_expression('$and',
|
|
819
|
+
[{'$nor' => [{'$where' => criterion}]}])
|
|
820
|
+
else
|
|
821
|
+
query.add_operator_expression('$where', criterion)
|
|
822
|
+
end
|
|
823
|
+
query.reset_strategies!
|
|
627
824
|
end
|
|
628
825
|
end
|
|
629
826
|
|
|
@@ -650,26 +847,6 @@ module Mongoid
|
|
|
650
847
|
end
|
|
651
848
|
end
|
|
652
849
|
|
|
653
|
-
# Convert the criterion values to $in friendly values. This means you,
|
|
654
|
-
# array.
|
|
655
|
-
#
|
|
656
|
-
# @api private
|
|
657
|
-
#
|
|
658
|
-
# @example Convert all the values to arrays.
|
|
659
|
-
# selectable.with_array_values({ key: 1...4 })
|
|
660
|
-
#
|
|
661
|
-
# @param [ Hash ] criterion The criterion.
|
|
662
|
-
#
|
|
663
|
-
# @return [ Hash ] The $in friendly criterion (array values).
|
|
664
|
-
#
|
|
665
|
-
# @since 1.0.0
|
|
666
|
-
def with_array_values(criterion)
|
|
667
|
-
return nil unless criterion
|
|
668
|
-
criterion.each_pair do |key, value|
|
|
669
|
-
criterion[key] = value.__array__
|
|
670
|
-
end
|
|
671
|
-
end
|
|
672
|
-
|
|
673
850
|
class << self
|
|
674
851
|
|
|
675
852
|
# Get the methods on the selectable that can be forwarded to from a model.
|