mongoid 7.1.6 → 7.2.2
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/README.md +9 -2
- data/Rakefile +31 -0
- data/lib/config/locales/en.yml +37 -1
- data/lib/mongoid.rb +23 -0
- data/lib/mongoid/association/depending.rb +1 -6
- data/lib/mongoid/association/many.rb +3 -3
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +36 -1
- data/lib/mongoid/association/referenced/has_many/proxy.rb +8 -1
- data/lib/mongoid/association/referenced/has_one/buildable.rb +9 -1
- data/lib/mongoid/atomic/modifiers.rb +1 -1
- data/lib/mongoid/attributes.rb +8 -1
- data/lib/mongoid/attributes/dynamic.rb +1 -1
- data/lib/mongoid/clients/factory.rb +17 -0
- data/lib/mongoid/composable.rb +1 -0
- data/lib/mongoid/config.rb +3 -0
- data/lib/mongoid/contextual/mongo.rb +23 -4
- data/lib/mongoid/copyable.rb +7 -3
- data/lib/mongoid/criteria.rb +57 -7
- data/lib/mongoid/criteria/queryable/key.rb +1 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +2 -2
- data/lib/mongoid/criteria/queryable/selectable.rb +21 -6
- data/lib/mongoid/criteria/queryable/selector.rb +3 -7
- data/lib/mongoid/criteria/queryable/storable.rb +3 -3
- data/lib/mongoid/document.rb +18 -5
- data/lib/mongoid/errors.rb +7 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
- data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_query.rb +41 -0
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +27 -10
- data/lib/mongoid/fields.rb +3 -0
- data/lib/mongoid/fields/validators/macro.rb +22 -9
- data/lib/mongoid/findable.rb +50 -14
- data/lib/mongoid/indexable.rb +2 -2
- data/lib/mongoid/interceptable.rb +3 -1
- data/lib/mongoid/matchable.rb +1 -149
- data/lib/mongoid/matcher.rb +103 -0
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +32 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +31 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +48 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/query_cache.rb +64 -62
- data/lib/mongoid/reloadable.rb +7 -2
- data/lib/mongoid/serializable.rb +1 -1
- data/lib/mongoid/stringified_symbol.rb +53 -0
- data/lib/mongoid/traversable.rb +111 -4
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/config_generator.rb +8 -1
- data/spec/README.md +19 -4
- data/spec/integration/app_spec.rb +175 -88
- data/spec/integration/associations/embedded_spec.rb +94 -0
- data/spec/integration/associations/has_many_spec.rb +67 -14
- data/spec/integration/associations/has_one_spec.rb +67 -14
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
- data/spec/integration/atomic/modifiers_spec.rb +117 -0
- data/spec/integration/callbacks_models.rb +49 -0
- data/spec/integration/callbacks_spec.rb +216 -0
- data/spec/integration/discriminator_key_spec.rb +354 -0
- data/spec/integration/discriminator_value_spec.rb +207 -0
- data/spec/integration/document_spec.rb +21 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +194 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_spec.rb +100 -0
- data/spec/integration/matcher_spec.rb +189 -0
- data/spec/integration/server_query_spec.rb +142 -0
- data/spec/integration/stringified_symbol_field_spec.rb +190 -0
- data/spec/lite_spec_helper.rb +6 -6
- data/spec/mongoid/association/depending_spec.rb +78 -26
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +50 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +33 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +460 -186
- data/spec/mongoid/association/referenced/has_many_models.rb +21 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +21 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
- data/spec/mongoid/atomic/paths_spec.rb +41 -0
- data/spec/mongoid/atomic_spec.rb +23 -0
- data/spec/mongoid/attributes/nested_spec.rb +1 -1
- data/spec/mongoid/attributes_spec.rb +241 -0
- data/spec/mongoid/clients/factory_spec.rb +37 -0
- data/spec/mongoid/clients/sessions_spec.rb +1 -6
- data/spec/mongoid/config_spec.rb +28 -0
- data/spec/mongoid/contextual/atomic_spec.rb +17 -4
- data/spec/mongoid/contextual/mongo_spec.rb +70 -16
- data/spec/mongoid/copyable_spec.rb +197 -18
- data/spec/mongoid/copyable_spec_models.rb +28 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +36 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +84 -82
- data/spec/mongoid/criteria_spec.rb +204 -39
- data/spec/mongoid/document_spec.rb +89 -15
- data/spec/mongoid/equality_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +85 -0
- data/spec/mongoid/factory_spec.rb +261 -28
- data/spec/mongoid/fields_spec.rb +48 -2
- data/spec/mongoid/findable_spec.rb +32 -0
- data/spec/mongoid/indexable_spec.rb +28 -2
- data/spec/mongoid/inspectable_spec.rb +29 -2
- data/spec/mongoid/interceptable_spec.rb +2 -2
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +37 -0
- data/spec/mongoid/persistable/creatable_spec.rb +108 -25
- data/spec/mongoid/persistable/deletable_spec.rb +86 -0
- data/spec/mongoid/persistable/savable_spec.rb +174 -16
- data/spec/mongoid/persistable/settable_spec.rb +30 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
- data/spec/mongoid/query_cache_spec.rb +442 -41
- data/spec/mongoid/reloadable_spec.rb +72 -0
- data/spec/mongoid/serializable_spec.rb +21 -3
- data/spec/mongoid/traversable_spec.rb +1100 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/lib/mrss/cluster_config.rb +11 -1
- data/spec/shared/lib/mrss/constraints.rb +34 -0
- data/spec/shared/lib/mrss/docker_runner.rb +265 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +16 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +115 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +3 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +231 -0
- data/spec/shared/shlib/distro.sh +73 -0
- data/spec/shared/shlib/server.sh +290 -0
- data/spec/shared/shlib/set_env.sh +128 -0
- data/spec/spec_helper.rb +4 -2
- data/spec/support/constraints.rb +20 -222
- data/spec/support/helpers.rb +1 -1
- data/spec/{app → support}/models/account.rb +0 -0
- data/spec/{app → support}/models/acolyte.rb +0 -0
- data/spec/{app → support}/models/actor.rb +1 -1
- data/spec/{app → support}/models/actress.rb +0 -0
- data/spec/{app → support}/models/address.rb +0 -0
- data/spec/{app → support}/models/address_component.rb +0 -0
- data/spec/{app → support}/models/address_number.rb +0 -0
- data/spec/{app → support}/models/agency.rb +0 -0
- data/spec/{app → support}/models/agent.rb +0 -0
- data/spec/{app → support}/models/album.rb +0 -0
- data/spec/{app → support}/models/alert.rb +0 -0
- data/spec/{app → support}/models/animal.rb +0 -0
- data/spec/{app → support}/models/answer.rb +0 -0
- data/spec/{app → support}/models/appointment.rb +0 -0
- data/spec/support/models/armrest.rb +10 -0
- data/spec/{app → support}/models/array_field.rb +0 -0
- data/spec/{app → support}/models/article.rb +0 -0
- data/spec/{app → support}/models/artist.rb +0 -0
- data/spec/{app → support}/models/artwork.rb +0 -0
- data/spec/{app → support}/models/audio.rb +0 -0
- data/spec/{app → support}/models/augmentation.rb +0 -0
- data/spec/{app → support}/models/author.rb +0 -0
- data/spec/{app → support}/models/baby.rb +0 -0
- data/spec/{app → support}/models/band.rb +0 -0
- data/spec/{app → support}/models/bar.rb +0 -0
- data/spec/{app → support}/models/basic.rb +0 -0
- data/spec/{app → support}/models/bed.rb +0 -0
- data/spec/{app → support}/models/big_palette.rb +0 -0
- data/spec/{app → support}/models/birthday.rb +0 -0
- data/spec/{app → support}/models/bomb.rb +0 -0
- data/spec/{app → support}/models/book.rb +0 -0
- data/spec/{app → support}/models/breed.rb +0 -0
- data/spec/{app → support}/models/browser.rb +1 -1
- data/spec/{app → support}/models/building.rb +0 -0
- data/spec/{app → support}/models/building_address.rb +0 -0
- data/spec/{app → support}/models/bus.rb +0 -0
- data/spec/{app → support}/models/business.rb +0 -0
- data/spec/{app → support}/models/callback_test.rb +0 -0
- data/spec/{app → support}/models/canvas.rb +1 -1
- data/spec/{app → support}/models/car.rb +0 -0
- data/spec/{app → support}/models/cat.rb +0 -0
- data/spec/{app → support}/models/category.rb +0 -0
- data/spec/{app → support}/models/child.rb +0 -0
- data/spec/{app → support}/models/child_doc.rb +0 -0
- data/spec/{app → support}/models/church.rb +0 -0
- data/spec/{app → support}/models/circle.rb +0 -0
- data/spec/{app → support}/models/circuit.rb +0 -0
- data/spec/{app → support}/models/circus.rb +0 -0
- data/spec/{app → support}/models/code.rb +0 -0
- data/spec/{app → support}/models/coding.rb +1 -1
- data/spec/{app → support}/models/coding/pull_request.rb +0 -0
- data/spec/{app → support}/models/comment.rb +0 -0
- data/spec/{app → support}/models/company.rb +0 -0
- data/spec/{app → support}/models/consumption_period.rb +0 -0
- data/spec/{app → support}/models/contextable_item.rb +0 -0
- data/spec/{app → support}/models/contractor.rb +0 -0
- data/spec/{app → support}/models/cookie.rb +0 -0
- data/spec/{app → support}/models/country_code.rb +0 -0
- data/spec/{app → support}/models/courier_job.rb +0 -0
- data/spec/support/models/crate.rb +13 -0
- data/spec/support/models/customer.rb +11 -0
- data/spec/support/models/customer_address.rb +12 -0
- data/spec/support/models/deed.rb +8 -0
- data/spec/{app → support}/models/definition.rb +0 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -0
- data/spec/{app → support}/models/description.rb +0 -0
- data/spec/{app → support}/models/dictionary.rb +6 -0
- data/spec/{app → support}/models/division.rb +0 -0
- data/spec/{app → support}/models/doctor.rb +0 -0
- data/spec/{app → support}/models/dog.rb +0 -0
- data/spec/{app → support}/models/dokument.rb +0 -0
- data/spec/{app → support}/models/draft.rb +0 -0
- data/spec/{app → support}/models/dragon.rb +0 -0
- data/spec/{app → support}/models/driver.rb +1 -1
- data/spec/{app → support}/models/drug.rb +0 -0
- data/spec/{app → support}/models/dungeon.rb +0 -0
- data/spec/{app → support}/models/edit.rb +0 -0
- data/spec/{app → support}/models/email.rb +0 -0
- data/spec/{app → support}/models/employer.rb +0 -0
- data/spec/{app → support}/models/entry.rb +0 -0
- data/spec/{app → support}/models/eraser.rb +0 -0
- data/spec/{app → support}/models/even.rb +0 -0
- data/spec/{app → support}/models/event.rb +0 -0
- data/spec/{app → support}/models/exhibition.rb +0 -0
- data/spec/{app → support}/models/exhibitor.rb +0 -0
- data/spec/{app → support}/models/explosion.rb +0 -0
- data/spec/{app → support}/models/eye.rb +0 -0
- data/spec/{app → support}/models/eye_bowl.rb +0 -0
- data/spec/{app → support}/models/face.rb +0 -0
- data/spec/{app → support}/models/favorite.rb +0 -0
- data/spec/{app → support}/models/filesystem.rb +0 -0
- data/spec/{app → support}/models/fire_hydrant.rb +0 -0
- data/spec/{app → support}/models/firefox.rb +0 -0
- data/spec/{app → support}/models/fish.rb +0 -0
- data/spec/{app → support}/models/folder.rb +0 -0
- data/spec/{app → support}/models/folder_item.rb +0 -0
- data/spec/{app → support}/models/fruits.rb +0 -0
- data/spec/{app → support}/models/game.rb +0 -0
- data/spec/{app → support}/models/ghost.rb +0 -0
- data/spec/support/models/guitar.rb +5 -0
- data/spec/{app → support}/models/home.rb +0 -0
- data/spec/{app → support}/models/house.rb +0 -0
- data/spec/{app → support}/models/html_writer.rb +0 -0
- data/spec/{app → support}/models/id_key.rb +0 -0
- data/spec/support/models/idnodef.rb +8 -0
- data/spec/{app → support}/models/image.rb +0 -0
- data/spec/{app → support}/models/implant.rb +0 -0
- data/spec/support/models/instrument.rb +9 -0
- data/spec/{app → support}/models/item.rb +1 -1
- data/spec/{app → support}/models/jar.rb +0 -0
- data/spec/{app → support}/models/kaleidoscope.rb +0 -0
- data/spec/{app → support}/models/kangaroo.rb +0 -0
- data/spec/{app → support}/models/label.rb +0 -0
- data/spec/{app → support}/models/language.rb +0 -0
- data/spec/{app → support}/models/lat_lng.rb +0 -0
- data/spec/{app → support}/models/league.rb +0 -0
- data/spec/{app → support}/models/learner.rb +0 -0
- data/spec/{app → support}/models/line_item.rb +0 -0
- data/spec/{app → support}/models/location.rb +0 -0
- data/spec/{app → support}/models/login.rb +0 -0
- data/spec/{app → support}/models/manufacturer.rb +0 -0
- data/spec/{app → support}/models/meat.rb +0 -0
- data/spec/{app → support}/models/membership.rb +0 -0
- data/spec/{app → support}/models/message.rb +0 -0
- data/spec/{app → support}/models/minim.rb +0 -0
- data/spec/{app → support}/models/mixed_drink.rb +0 -0
- data/spec/support/models/mop.rb +16 -0
- data/spec/{app → support}/models/movie.rb +0 -0
- data/spec/{app → support}/models/my_hash.rb +0 -0
- data/spec/{app → support}/models/name.rb +0 -0
- data/spec/{app → support}/models/name_only.rb +0 -0
- data/spec/{app → support}/models/node.rb +0 -0
- data/spec/{app → support}/models/note.rb +0 -0
- data/spec/{app → support}/models/odd.rb +0 -0
- data/spec/support/models/order.rb +11 -0
- data/spec/{app → support}/models/ordered_post.rb +0 -0
- data/spec/{app → support}/models/ordered_preference.rb +0 -0
- data/spec/{app → support}/models/oscar.rb +0 -0
- data/spec/{app → support}/models/other_owner_object.rb +0 -0
- data/spec/{app → support}/models/override.rb +0 -0
- data/spec/{app → support}/models/ownable.rb +0 -0
- data/spec/{app → support}/models/owner.rb +2 -0
- data/spec/{app → support}/models/pack.rb +0 -0
- data/spec/{app → support}/models/page.rb +0 -0
- data/spec/{app → support}/models/page_question.rb +0 -0
- data/spec/{app → support}/models/palette.rb +1 -1
- data/spec/{app → support}/models/parent.rb +0 -0
- data/spec/{app → support}/models/parent_doc.rb +0 -0
- data/spec/{app → support}/models/passport.rb +0 -0
- data/spec/{app → support}/models/patient.rb +0 -0
- data/spec/{app → support}/models/pdf_writer.rb +0 -0
- data/spec/{app → support}/models/pencil.rb +0 -0
- data/spec/{app → support}/models/person.rb +1 -1
- data/spec/{app → support}/models/pet.rb +0 -0
- data/spec/{app → support}/models/pet_owner.rb +0 -0
- data/spec/{app → support}/models/phone.rb +0 -0
- data/spec/support/models/piano.rb +5 -0
- data/spec/{app → support}/models/pizza.rb +0 -0
- data/spec/{app → support}/models/player.rb +0 -0
- data/spec/{app → support}/models/post.rb +0 -0
- data/spec/{app → support}/models/post_genre.rb +0 -0
- data/spec/{app → support}/models/powerup.rb +0 -0
- data/spec/{app → support}/models/preference.rb +0 -0
- data/spec/{app → support}/models/princess.rb +0 -0
- data/spec/{app → support}/models/product.rb +0 -0
- data/spec/support/models/profile.rb +18 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -0
- data/spec/{app → support}/models/pub.rb +0 -0
- data/spec/support/models/publication.rb +5 -0
- data/spec/{app → support}/models/publication/encyclopedia.rb +0 -0
- data/spec/{app → support}/models/publication/review.rb +0 -0
- data/spec/{app → support}/models/purchase.rb +0 -0
- data/spec/{app → support}/models/question.rb +0 -0
- data/spec/{app → support}/models/quiz.rb +0 -0
- data/spec/{app → support}/models/rating.rb +0 -0
- data/spec/{app → support}/models/record.rb +0 -0
- data/spec/{app → support}/models/registry.rb +0 -0
- data/spec/{app → support}/models/role.rb +0 -0
- data/spec/{app → support}/models/root_category.rb +0 -0
- data/spec/{app → support}/models/sandwich.rb +0 -0
- data/spec/{app → support}/models/scheduler.rb +0 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
- data/spec/support/models/seat.rb +25 -0
- data/spec/{app → support}/models/seo.rb +0 -0
- data/spec/{app → support}/models/series.rb +0 -0
- data/spec/{app → support}/models/server.rb +0 -0
- data/spec/{app → support}/models/service.rb +0 -0
- data/spec/{app → support}/models/shape.rb +2 -2
- data/spec/{app → support}/models/shelf.rb +0 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -0
- data/spec/{app → support}/models/shipping_container.rb +0 -0
- data/spec/{app → support}/models/shipping_pack.rb +0 -0
- data/spec/{app → support}/models/shop.rb +0 -0
- data/spec/{app → support}/models/short_agent.rb +0 -0
- data/spec/{app → support}/models/short_quiz.rb +0 -0
- data/spec/{app → support}/models/simple.rb +0 -0
- data/spec/{app → support}/models/slave.rb +0 -0
- data/spec/{app → support}/models/song.rb +0 -0
- data/spec/{app → support}/models/sound.rb +0 -0
- data/spec/{app → support}/models/square.rb +0 -0
- data/spec/{app → support}/models/staff.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- data/spec/{app → support}/models/strategy.rb +0 -0
- data/spec/{app → support}/models/sub_item.rb +0 -0
- data/spec/{app → support}/models/subscription.rb +0 -0
- data/spec/{app → support}/models/survey.rb +0 -0
- data/spec/{app → support}/models/symptom.rb +0 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -0
- data/spec/{app → support}/models/target.rb +0 -0
- data/spec/{app → support}/models/template.rb +0 -0
- data/spec/{app → support}/models/thing.rb +0 -0
- data/spec/{app → support}/models/title.rb +0 -0
- data/spec/{app → support}/models/tool.rb +2 -2
- data/spec/{app → support}/models/topping.rb +0 -0
- data/spec/support/models/toy.rb +10 -0
- data/spec/{app → support}/models/track.rb +0 -0
- data/spec/{app → support}/models/translation.rb +0 -0
- data/spec/{app → support}/models/tree.rb +0 -0
- data/spec/{app → support}/models/truck.rb +2 -0
- data/spec/{app → support}/models/updatable.rb +0 -0
- data/spec/{app → support}/models/user.rb +0 -0
- data/spec/{app → support}/models/user_account.rb +0 -0
- data/spec/{app → support}/models/validation_callback.rb +0 -0
- data/spec/{app → support}/models/vehicle.rb +7 -2
- data/spec/{app → support}/models/version.rb +0 -0
- data/spec/{app → support}/models/vertex.rb +0 -0
- data/spec/{app → support}/models/vet_visit.rb +0 -0
- data/spec/{app → support}/models/video.rb +0 -0
- data/spec/{app → support}/models/video_game.rb +0 -0
- data/spec/{app → support}/models/weapon.rb +0 -0
- data/spec/{app → support}/models/wiki_page.rb +0 -0
- data/spec/{app → support}/models/word.rb +0 -0
- data/spec/{app → support}/models/word_origin.rb +0 -0
- data/spec/{app → support}/models/writer.rb +2 -2
- data/spec/support/spec_config.rb +9 -1
- metadata +648 -519
- metadata.gz.sig +0 -0
- data/lib/mongoid/matchable/all.rb +0 -30
- data/lib/mongoid/matchable/and.rb +0 -32
- data/lib/mongoid/matchable/default.rb +0 -121
- data/lib/mongoid/matchable/elem_match.rb +0 -36
- data/lib/mongoid/matchable/eq.rb +0 -23
- data/lib/mongoid/matchable/exists.rb +0 -25
- data/lib/mongoid/matchable/gt.rb +0 -25
- data/lib/mongoid/matchable/gte.rb +0 -25
- data/lib/mongoid/matchable/in.rb +0 -26
- data/lib/mongoid/matchable/lt.rb +0 -25
- data/lib/mongoid/matchable/lte.rb +0 -25
- data/lib/mongoid/matchable/ne.rb +0 -23
- data/lib/mongoid/matchable/nin.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -38
- data/lib/mongoid/matchable/or.rb +0 -35
- data/lib/mongoid/matchable/regexp.rb +0 -30
- data/lib/mongoid/matchable/size.rb +0 -23
- data/spec/app/models/publication.rb +0 -5
- data/spec/mongoid/matchable/all_spec.rb +0 -34
- data/spec/mongoid/matchable/and_spec.rb +0 -190
- data/spec/mongoid/matchable/default_spec.rb +0 -140
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
- data/spec/mongoid/matchable/eq_spec.rb +0 -49
- data/spec/mongoid/matchable/exists_spec.rb +0 -60
- data/spec/mongoid/matchable/gt_spec.rb +0 -89
- data/spec/mongoid/matchable/gte_spec.rb +0 -87
- data/spec/mongoid/matchable/in_spec.rb +0 -52
- data/spec/mongoid/matchable/lt_spec.rb +0 -88
- data/spec/mongoid/matchable/lte_spec.rb +0 -88
- data/spec/mongoid/matchable/ne_spec.rb +0 -49
- data/spec/mongoid/matchable/nin_spec.rb +0 -51
- data/spec/mongoid/matchable/nor_spec.rb +0 -210
- data/spec/mongoid/matchable/or_spec.rb +0 -134
- data/spec/mongoid/matchable/regexp_spec.rb +0 -62
- data/spec/mongoid/matchable/size_spec.rb +0 -28
- data/spec/mongoid/matchable_spec.rb +0 -856
- data/spec/support/child_process_helper.rb +0 -76
- data/spec/support/lite_constraints.rb +0 -22
|
@@ -6,6 +6,7 @@ module CopyableSpec
|
|
|
6
6
|
include Mongoid::Document
|
|
7
7
|
|
|
8
8
|
embeds_many :locations
|
|
9
|
+
embeds_many :influencers
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
class Location
|
|
@@ -17,4 +18,31 @@ module CopyableSpec
|
|
|
17
18
|
class Building
|
|
18
19
|
include Mongoid::Document
|
|
19
20
|
end
|
|
21
|
+
|
|
22
|
+
class Influencer
|
|
23
|
+
include Mongoid::Document
|
|
24
|
+
|
|
25
|
+
embeds_many :blurbs
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class Youtuber < Influencer
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class Blurb
|
|
32
|
+
include Mongoid::Document
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Do not include Attributes::Dynamic
|
|
36
|
+
class Reg
|
|
37
|
+
include Mongoid::Document
|
|
38
|
+
|
|
39
|
+
field :name, type: String
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
class Dyn
|
|
43
|
+
include Mongoid::Document
|
|
44
|
+
include Mongoid::Attributes::Dynamic
|
|
45
|
+
|
|
46
|
+
field :name, type: String
|
|
47
|
+
end
|
|
20
48
|
end
|
|
@@ -1447,6 +1447,42 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
1447
1447
|
end
|
|
1448
1448
|
end
|
|
1449
1449
|
end
|
|
1450
|
+
|
|
1451
|
+
context 'when using multiple criteria and symbol operators' do
|
|
1452
|
+
context 'when using fields that meaningfully evolve values' do
|
|
1453
|
+
|
|
1454
|
+
let(:query) do
|
|
1455
|
+
Dictionary.any_of({a: 1}, :published.gt => Date.new(2020, 2, 3))
|
|
1456
|
+
end
|
|
1457
|
+
|
|
1458
|
+
it 'generates the expected query' do
|
|
1459
|
+
query.selector.should == {'$or' => [
|
|
1460
|
+
{'a' => 1},
|
|
1461
|
+
# Date instance is converted to a Time instance in local time,
|
|
1462
|
+
# because we are querying on a Time field and dates are interpreted
|
|
1463
|
+
# in local time when assigning to Time fields
|
|
1464
|
+
{'published' => {'$gt' => Time.local(2020, 2, 3)}},
|
|
1465
|
+
]}
|
|
1466
|
+
end
|
|
1467
|
+
end
|
|
1468
|
+
|
|
1469
|
+
context 'when using fields that do not meaningfully evolve values' do
|
|
1470
|
+
|
|
1471
|
+
let(:query) do
|
|
1472
|
+
Dictionary.any_of({a: 1}, :submitted_on.gt => Date.new(2020, 2, 3))
|
|
1473
|
+
end
|
|
1474
|
+
|
|
1475
|
+
it 'generates the expected query' do
|
|
1476
|
+
query.selector.should == {'$or' => [
|
|
1477
|
+
{'a' => 1},
|
|
1478
|
+
# Date instance is converted to a Time instance in UTC,
|
|
1479
|
+
# because we are querying on a Date field and dates are interpreted
|
|
1480
|
+
# in UTC when persisted as dates by Mongoid
|
|
1481
|
+
{'submitted_on' => {'$gt' => Time.utc(2020, 2, 3)}},
|
|
1482
|
+
]}
|
|
1483
|
+
end
|
|
1484
|
+
end
|
|
1485
|
+
end
|
|
1450
1486
|
end
|
|
1451
1487
|
|
|
1452
1488
|
describe "#not" do
|
|
@@ -732,108 +732,89 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
732
732
|
end
|
|
733
733
|
end
|
|
734
734
|
|
|
735
|
-
|
|
735
|
+
%i(geo_spatial geo_spacial).each do |meth|
|
|
736
|
+
describe "#geo_spacial" do
|
|
736
737
|
|
|
737
|
-
|
|
738
|
+
let(:query_method) { meth }
|
|
738
739
|
|
|
739
|
-
|
|
740
|
-
|
|
740
|
+
it_behaves_like 'requires an argument'
|
|
741
|
+
it_behaves_like 'requires a non-nil argument'
|
|
741
742
|
|
|
742
|
-
|
|
743
|
+
context "when provided a criterion" do
|
|
743
744
|
|
|
744
|
-
|
|
745
|
+
context "when the geometry is a point intersection" do
|
|
745
746
|
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
747
|
+
let(:selection) do
|
|
748
|
+
query.public_send(query_method, :location.intersects_point => [ 1, 10 ])
|
|
749
|
+
end
|
|
749
750
|
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
751
|
+
it "adds the $geoIntersects expression" do
|
|
752
|
+
expect(selection.selector).to eq({
|
|
753
|
+
"location" => {
|
|
754
|
+
"$geoIntersects" => {
|
|
755
|
+
"$geometry" => {
|
|
756
|
+
"type" => "Point",
|
|
757
|
+
"coordinates" => [ 1, 10 ]
|
|
758
|
+
}
|
|
757
759
|
}
|
|
758
760
|
}
|
|
759
|
-
}
|
|
760
|
-
|
|
761
|
-
end
|
|
761
|
+
})
|
|
762
|
+
end
|
|
762
763
|
|
|
763
|
-
|
|
764
|
-
|
|
764
|
+
it_behaves_like "returns a cloned query"
|
|
765
|
+
end
|
|
765
766
|
|
|
766
|
-
|
|
767
|
+
context "when the geometry is a line intersection" do
|
|
767
768
|
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
769
|
+
let(:selection) do
|
|
770
|
+
query.public_send(query_method, :location.intersects_line => [[ 1, 10 ], [ 2, 10 ]])
|
|
771
|
+
end
|
|
771
772
|
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
773
|
+
it "adds the $geoIntersects expression" do
|
|
774
|
+
expect(selection.selector).to eq({
|
|
775
|
+
"location" => {
|
|
776
|
+
"$geoIntersects" => {
|
|
777
|
+
"$geometry" => {
|
|
778
|
+
"type" => "LineString",
|
|
779
|
+
"coordinates" => [[ 1, 10 ], [ 2, 10 ]]
|
|
780
|
+
}
|
|
779
781
|
}
|
|
780
782
|
}
|
|
781
|
-
}
|
|
782
|
-
|
|
783
|
-
end
|
|
783
|
+
})
|
|
784
|
+
end
|
|
784
785
|
|
|
785
|
-
|
|
786
|
-
|
|
786
|
+
it_behaves_like "returns a cloned query"
|
|
787
|
+
end
|
|
787
788
|
|
|
788
|
-
|
|
789
|
+
context "when the geometry is a polygon intersection" do
|
|
789
790
|
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
791
|
+
let(:selection) do
|
|
792
|
+
query.public_send(query_method,
|
|
793
|
+
:location.intersects_polygon => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]]
|
|
794
|
+
)
|
|
795
|
+
end
|
|
795
796
|
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
797
|
+
it "adds the $geoIntersects expression" do
|
|
798
|
+
expect(selection.selector).to eq({
|
|
799
|
+
"location" => {
|
|
800
|
+
"$geoIntersects" => {
|
|
801
|
+
"$geometry" => {
|
|
802
|
+
"type" => "Polygon",
|
|
803
|
+
"coordinates" => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]]
|
|
804
|
+
}
|
|
803
805
|
}
|
|
804
806
|
}
|
|
805
|
-
}
|
|
806
|
-
|
|
807
|
-
end
|
|
808
|
-
|
|
809
|
-
it_behaves_like "returns a cloned query"
|
|
810
|
-
end
|
|
811
|
-
|
|
812
|
-
context "when the geometry is within a polygon" do
|
|
807
|
+
})
|
|
808
|
+
end
|
|
813
809
|
|
|
814
|
-
|
|
815
|
-
query.geo_spacial(
|
|
816
|
-
:location.within_polygon => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]]
|
|
817
|
-
)
|
|
810
|
+
it_behaves_like "returns a cloned query"
|
|
818
811
|
end
|
|
819
812
|
|
|
820
|
-
|
|
821
|
-
expect(selection.selector).to eq({
|
|
822
|
-
"location" => {
|
|
823
|
-
"$geoWithin" => {
|
|
824
|
-
"$geometry" => {
|
|
825
|
-
"type" => "Polygon",
|
|
826
|
-
"coordinates" => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]]
|
|
827
|
-
}
|
|
828
|
-
}
|
|
829
|
-
}
|
|
830
|
-
})
|
|
831
|
-
end
|
|
813
|
+
context "when the geometry is within a polygon" do
|
|
832
814
|
|
|
833
|
-
context "when used with the $box operator ($geoWithin query) " do
|
|
834
815
|
let(:selection) do
|
|
835
|
-
query.
|
|
836
|
-
:location.
|
|
816
|
+
query.public_send(query_method,
|
|
817
|
+
:location.within_polygon => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]]
|
|
837
818
|
)
|
|
838
819
|
end
|
|
839
820
|
|
|
@@ -841,16 +822,37 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
841
822
|
expect(selection.selector).to eq({
|
|
842
823
|
"location" => {
|
|
843
824
|
"$geoWithin" => {
|
|
844
|
-
"$
|
|
845
|
-
|
|
846
|
-
|
|
825
|
+
"$geometry" => {
|
|
826
|
+
"type" => "Polygon",
|
|
827
|
+
"coordinates" => [[[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]]]
|
|
828
|
+
}
|
|
847
829
|
}
|
|
848
830
|
}
|
|
849
831
|
})
|
|
850
832
|
end
|
|
851
|
-
end
|
|
852
833
|
|
|
853
|
-
|
|
834
|
+
context "when used with the $box operator ($geoWithin query) " do
|
|
835
|
+
let(:selection) do
|
|
836
|
+
query.public_send(query_method,
|
|
837
|
+
:location.within_box => [[ 1, 10 ], [ 2, 10 ]]
|
|
838
|
+
)
|
|
839
|
+
end
|
|
840
|
+
|
|
841
|
+
it "adds the $geoIntersects expression" do
|
|
842
|
+
expect(selection.selector).to eq({
|
|
843
|
+
"location" => {
|
|
844
|
+
"$geoWithin" => {
|
|
845
|
+
"$box" => [
|
|
846
|
+
[ 1, 10 ], [ 2, 10 ]
|
|
847
|
+
]
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
})
|
|
851
|
+
end
|
|
852
|
+
end
|
|
853
|
+
|
|
854
|
+
it_behaves_like "returns a cloned query"
|
|
855
|
+
end
|
|
854
856
|
end
|
|
855
857
|
end
|
|
856
858
|
end
|
|
@@ -786,12 +786,72 @@ describe Mongoid::Criteria do
|
|
|
786
786
|
|
|
787
787
|
describe "#field_list" do
|
|
788
788
|
|
|
789
|
+
context "when using the default discriminator key" do
|
|
790
|
+
let(:criteria) do
|
|
791
|
+
Doctor.only(:_id)
|
|
792
|
+
end
|
|
793
|
+
|
|
794
|
+
it "returns the fields with required _id minus type" do
|
|
795
|
+
expect(criteria.field_list).to eq([ "_id" ])
|
|
796
|
+
end
|
|
797
|
+
end
|
|
798
|
+
|
|
799
|
+
context "when using a custom discriminator key" do
|
|
800
|
+
before do
|
|
801
|
+
Person.discriminator_key = "dkey"
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
after do
|
|
805
|
+
Person.discriminator_key = nil
|
|
806
|
+
end
|
|
807
|
+
|
|
808
|
+
let(:criteria) do
|
|
809
|
+
Doctor.only(:_id, :_type)
|
|
810
|
+
end
|
|
811
|
+
|
|
812
|
+
it "returns the fields with type without dkey" do
|
|
813
|
+
expect(criteria.field_list).to eq([ "_id", "_type" ])
|
|
814
|
+
end
|
|
815
|
+
end
|
|
816
|
+
end
|
|
817
|
+
|
|
818
|
+
describe "#find" do
|
|
819
|
+
let!(:depeche) do
|
|
820
|
+
Band.create!(name: "Depeche Mode")
|
|
821
|
+
end
|
|
822
|
+
|
|
789
823
|
let(:criteria) do
|
|
790
|
-
Band.
|
|
824
|
+
Band.where(name: "Depeche Mode")
|
|
791
825
|
end
|
|
792
826
|
|
|
793
|
-
|
|
794
|
-
|
|
827
|
+
context "when given a block" do
|
|
828
|
+
it "behaves as Enumerable" do
|
|
829
|
+
result = criteria.find { |c| c.name == "Depeche Mode" }
|
|
830
|
+
expect(result).to eq(depeche)
|
|
831
|
+
end
|
|
832
|
+
end
|
|
833
|
+
|
|
834
|
+
context "when given a Proc and a block" do
|
|
835
|
+
it "behaves as Enumerable" do
|
|
836
|
+
result = criteria.find(-> {"default"}) { |c| c.name == "Not Depeche Mode" }
|
|
837
|
+
expect(result).to eq("default")
|
|
838
|
+
end
|
|
839
|
+
end
|
|
840
|
+
|
|
841
|
+
context "when given a Proc" do
|
|
842
|
+
it "behaves as Enumerable" do
|
|
843
|
+
lambda do
|
|
844
|
+
criteria.find(-> {"default"})
|
|
845
|
+
# Proc is not serializable to a BSON type
|
|
846
|
+
end.should raise_error(BSON::Error::UnserializableClass)
|
|
847
|
+
end
|
|
848
|
+
end
|
|
849
|
+
|
|
850
|
+
context "when given an id" do
|
|
851
|
+
it "behaves as Findable" do
|
|
852
|
+
result = criteria.find(depeche.id)
|
|
853
|
+
expect(result).to eq(depeche)
|
|
854
|
+
end
|
|
795
855
|
end
|
|
796
856
|
end
|
|
797
857
|
|
|
@@ -2804,13 +2864,36 @@ describe Mongoid::Criteria do
|
|
|
2804
2864
|
end
|
|
2805
2865
|
|
|
2806
2866
|
context "when using inheritance" do
|
|
2867
|
+
context "when using the default discriminator key" do
|
|
2868
|
+
let(:criteria) do
|
|
2869
|
+
Doctor.only(:_id)
|
|
2870
|
+
end
|
|
2807
2871
|
|
|
2808
|
-
|
|
2809
|
-
|
|
2872
|
+
it "adds _type to the fields" do
|
|
2873
|
+
expect(criteria.options[:fields]).to include("_type")
|
|
2874
|
+
end
|
|
2810
2875
|
end
|
|
2811
2876
|
|
|
2812
|
-
|
|
2813
|
-
|
|
2877
|
+
context "when setting a custom discriminator key" do
|
|
2878
|
+
before do
|
|
2879
|
+
Person.discriminator_key = "dkey"
|
|
2880
|
+
end
|
|
2881
|
+
|
|
2882
|
+
after do
|
|
2883
|
+
Person.discriminator_key = nil
|
|
2884
|
+
end
|
|
2885
|
+
|
|
2886
|
+
let(:criteria) do
|
|
2887
|
+
Doctor.only(:_id)
|
|
2888
|
+
end
|
|
2889
|
+
|
|
2890
|
+
it "adds custom discriminator key to the fields" do
|
|
2891
|
+
expect(criteria.options[:fields]).to include("dkey")
|
|
2892
|
+
end
|
|
2893
|
+
|
|
2894
|
+
it "does not add _type to the fields" do
|
|
2895
|
+
expect(criteria.options[:fields]).to_not include("_type")
|
|
2896
|
+
end
|
|
2814
2897
|
end
|
|
2815
2898
|
end
|
|
2816
2899
|
|
|
@@ -3386,34 +3469,75 @@ describe Mongoid::Criteria do
|
|
|
3386
3469
|
end
|
|
3387
3470
|
|
|
3388
3471
|
describe "#type" do
|
|
3472
|
+
context "when using the default discriminator_key" do
|
|
3473
|
+
context "when the type is a string" do
|
|
3389
3474
|
|
|
3390
|
-
|
|
3475
|
+
let!(:browser) do
|
|
3476
|
+
Browser.create
|
|
3477
|
+
end
|
|
3391
3478
|
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
3479
|
+
let(:criteria) do
|
|
3480
|
+
Canvas.all.type("Browser")
|
|
3481
|
+
end
|
|
3395
3482
|
|
|
3396
|
-
|
|
3397
|
-
|
|
3483
|
+
it "returns documents with the provided type" do
|
|
3484
|
+
expect(criteria).to eq([ browser ])
|
|
3485
|
+
end
|
|
3398
3486
|
end
|
|
3399
3487
|
|
|
3400
|
-
|
|
3401
|
-
|
|
3488
|
+
context "when the type is an Array of type" do
|
|
3489
|
+
|
|
3490
|
+
let!(:browser) do
|
|
3491
|
+
Firefox.create
|
|
3492
|
+
end
|
|
3493
|
+
|
|
3494
|
+
let(:criteria) do
|
|
3495
|
+
Canvas.all.type([ "Browser", "Firefox" ])
|
|
3496
|
+
end
|
|
3497
|
+
|
|
3498
|
+
it "returns documents with the provided types" do
|
|
3499
|
+
expect(criteria).to eq([ browser ])
|
|
3500
|
+
end
|
|
3402
3501
|
end
|
|
3403
3502
|
end
|
|
3404
3503
|
|
|
3405
|
-
context "when
|
|
3504
|
+
context "when using a custom discriminator_key" do
|
|
3505
|
+
before do
|
|
3506
|
+
Canvas.discriminator_key = "dkey"
|
|
3507
|
+
end
|
|
3406
3508
|
|
|
3407
|
-
|
|
3408
|
-
|
|
3509
|
+
after do
|
|
3510
|
+
Canvas.discriminator_key = nil
|
|
3409
3511
|
end
|
|
3410
3512
|
|
|
3411
|
-
|
|
3412
|
-
|
|
3513
|
+
context "when the type is a string" do
|
|
3514
|
+
|
|
3515
|
+
let!(:browser) do
|
|
3516
|
+
Browser.create
|
|
3517
|
+
end
|
|
3518
|
+
|
|
3519
|
+
let(:criteria) do
|
|
3520
|
+
Canvas.all.type("Browser")
|
|
3521
|
+
end
|
|
3522
|
+
|
|
3523
|
+
it "returns documents with the provided type" do
|
|
3524
|
+
expect(criteria).to eq([ browser ])
|
|
3525
|
+
end
|
|
3413
3526
|
end
|
|
3414
3527
|
|
|
3415
|
-
|
|
3416
|
-
|
|
3528
|
+
context "when the type is an Array of type" do
|
|
3529
|
+
|
|
3530
|
+
let!(:browser) do
|
|
3531
|
+
Firefox.create
|
|
3532
|
+
end
|
|
3533
|
+
|
|
3534
|
+
let(:criteria) do
|
|
3535
|
+
Canvas.all.type([ "Browser", "Firefox" ])
|
|
3536
|
+
end
|
|
3537
|
+
|
|
3538
|
+
it "returns documents with the provided types" do
|
|
3539
|
+
expect(criteria).to eq([ browser ])
|
|
3540
|
+
end
|
|
3417
3541
|
end
|
|
3418
3542
|
end
|
|
3419
3543
|
end
|
|
@@ -3735,7 +3859,7 @@ describe Mongoid::Criteria do
|
|
|
3735
3859
|
end
|
|
3736
3860
|
end
|
|
3737
3861
|
|
|
3738
|
-
describe "#
|
|
3862
|
+
describe "#geo_spatial" do
|
|
3739
3863
|
|
|
3740
3864
|
context "when checking within a polygon" do
|
|
3741
3865
|
|
|
@@ -3748,7 +3872,7 @@ describe Mongoid::Criteria do
|
|
|
3748
3872
|
end
|
|
3749
3873
|
|
|
3750
3874
|
let(:criteria) do
|
|
3751
|
-
Bar.
|
|
3875
|
+
Bar.geo_spatial(
|
|
3752
3876
|
:location.within_polygon => [[[ 50, 10 ], [ 50, 20 ], [ 60, 20 ], [ 60, 10 ], [ 50, 10 ]]]
|
|
3753
3877
|
)
|
|
3754
3878
|
end
|
|
@@ -3832,34 +3956,75 @@ describe Mongoid::Criteria do
|
|
|
3832
3956
|
end
|
|
3833
3957
|
|
|
3834
3958
|
describe "#type_selection" do
|
|
3959
|
+
context "when using the default discriminator_key" do
|
|
3960
|
+
context "when only one subclass exists" do
|
|
3835
3961
|
|
|
3836
|
-
|
|
3962
|
+
let(:criteria) do
|
|
3963
|
+
described_class.new(Firefox)
|
|
3964
|
+
end
|
|
3837
3965
|
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
|
|
3966
|
+
let(:selection) do
|
|
3967
|
+
criteria.send(:type_selection)
|
|
3968
|
+
end
|
|
3841
3969
|
|
|
3842
|
-
|
|
3843
|
-
|
|
3970
|
+
it "does not use an $in query" do
|
|
3971
|
+
expect(selection).to eq({ _type: "Firefox" })
|
|
3972
|
+
end
|
|
3844
3973
|
end
|
|
3845
3974
|
|
|
3846
|
-
|
|
3847
|
-
|
|
3975
|
+
context "when more than one subclass exists" do
|
|
3976
|
+
|
|
3977
|
+
let(:criteria) do
|
|
3978
|
+
described_class.new(Browser)
|
|
3979
|
+
end
|
|
3980
|
+
|
|
3981
|
+
let(:selection) do
|
|
3982
|
+
criteria.send(:type_selection)
|
|
3983
|
+
end
|
|
3984
|
+
|
|
3985
|
+
it "does not use an $in query" do
|
|
3986
|
+
expect(selection).to eq({ _type: { "$in" => [ "Firefox", "Browser" ]}})
|
|
3987
|
+
end
|
|
3848
3988
|
end
|
|
3849
3989
|
end
|
|
3850
3990
|
|
|
3851
|
-
context "when
|
|
3991
|
+
context "when using a custom discriminator_key" do
|
|
3992
|
+
before do
|
|
3993
|
+
Canvas.discriminator_key = "dkey"
|
|
3994
|
+
end
|
|
3852
3995
|
|
|
3853
|
-
|
|
3854
|
-
|
|
3996
|
+
after do
|
|
3997
|
+
Canvas.discriminator_key = nil
|
|
3855
3998
|
end
|
|
3856
3999
|
|
|
3857
|
-
|
|
3858
|
-
|
|
4000
|
+
context "when only one subclass exists" do
|
|
4001
|
+
|
|
4002
|
+
let(:criteria) do
|
|
4003
|
+
described_class.new(Firefox)
|
|
4004
|
+
end
|
|
4005
|
+
|
|
4006
|
+
let(:selection) do
|
|
4007
|
+
criteria.send(:type_selection)
|
|
4008
|
+
end
|
|
4009
|
+
|
|
4010
|
+
it "does not use an $in query" do
|
|
4011
|
+
expect(selection).to eq({ dkey: "Firefox" })
|
|
4012
|
+
end
|
|
3859
4013
|
end
|
|
3860
4014
|
|
|
3861
|
-
|
|
3862
|
-
|
|
4015
|
+
context "when more than one subclass exists" do
|
|
4016
|
+
|
|
4017
|
+
let(:criteria) do
|
|
4018
|
+
described_class.new(Browser)
|
|
4019
|
+
end
|
|
4020
|
+
|
|
4021
|
+
let(:selection) do
|
|
4022
|
+
criteria.send(:type_selection)
|
|
4023
|
+
end
|
|
4024
|
+
|
|
4025
|
+
it "does not use an $in query" do
|
|
4026
|
+
expect(selection).to eq({ dkey: { "$in" => [ "Firefox", "Browser" ]}})
|
|
4027
|
+
end
|
|
3863
4028
|
end
|
|
3864
4029
|
end
|
|
3865
4030
|
end
|