mongoid 7.1.5 → 7.2.1
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 +33 -7
- 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/association/referenced/has_one/proxy.rb +6 -1
- data/lib/mongoid/atomic/modifiers.rb +1 -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 +127 -0
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/elem_match.rb +35 -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 +40 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +63 -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 +2 -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/spec/README.md +19 -4
- data/spec/integration/app_spec.rb +46 -13
- data/spec/integration/associations/embedded_spec.rb +94 -0
- data/spec/integration/associations/embeds_many_spec.rb +24 -0
- data/spec/integration/associations/embeds_one_spec.rb +24 -0
- data/spec/integration/associations/has_many_spec.rb +108 -13
- data/spec/integration/associations/has_one_spec.rb +108 -13
- 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/{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 +363 -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 +16 -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 +4 -3
- 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/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/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/traversal.yml +259 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +47 -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/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/LICENSE +20 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +211 -0
- data/spec/shared/lib/mrss/constraints.rb +330 -0
- data/spec/shared/lib/mrss/docker_runner.rb +262 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +69 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/shared/share/Dockerfile.erb +229 -0
- data/spec/shared/shlib/distro.sh +73 -0
- data/spec/shared/shlib/server.sh +270 -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 +3 -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 +1 -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 +1 -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 +1 -1
- metadata +895 -755
- 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
@@ -40,9 +40,22 @@ describe Mongoid::QueryCache::Middleware do
|
|
40
40
|
expect(code).to eq(200)
|
41
41
|
end
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
context 'with driver query cache' do
|
44
|
+
min_driver_version '2.14'
|
45
|
+
|
46
|
+
it "cleans the query cache after it responds" do
|
47
|
+
middleware.call({})
|
48
|
+
expect(Mongo::QueryCache.send(:cache_table)).to be_empty
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'with mongoid query cache' do
|
53
|
+
max_driver_version '2.13'
|
54
|
+
|
55
|
+
it "cleans the query cache after it responds" do
|
56
|
+
middleware.call({})
|
57
|
+
expect(Mongoid::QueryCache.cache_table).to be_empty
|
58
|
+
end
|
46
59
|
end
|
47
60
|
end
|
48
61
|
end
|
@@ -24,6 +24,210 @@ describe Mongoid::QueryCache do
|
|
24
24
|
SessionRegistry.instance.verify_sessions_ended!
|
25
25
|
end
|
26
26
|
|
27
|
+
describe '#cache' do
|
28
|
+
context 'with driver query cache' do
|
29
|
+
min_driver_version '2.14'
|
30
|
+
|
31
|
+
context 'when query cache is not enabled' do
|
32
|
+
before do
|
33
|
+
Mongoid::QueryCache.enabled = false
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'turns on the query cache within the block' do
|
37
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
38
|
+
|
39
|
+
Mongoid::QueryCache.cache do
|
40
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
41
|
+
end
|
42
|
+
|
43
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'when query cache is enabled' do
|
48
|
+
before do
|
49
|
+
Mongoid::QueryCache.enabled = true
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'keeps the query cache enabled within the block' do
|
53
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
54
|
+
|
55
|
+
Mongoid::QueryCache.cache do
|
56
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
57
|
+
end
|
58
|
+
|
59
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'nested inside #uncached' do
|
64
|
+
it 'turns on the query cache in the block' do
|
65
|
+
Mongoid::QueryCache.uncached do
|
66
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
67
|
+
|
68
|
+
Mongoid::QueryCache.cache do
|
69
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
70
|
+
end
|
71
|
+
|
72
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'with mongoid query cache' do
|
79
|
+
max_driver_version '2.13'
|
80
|
+
|
81
|
+
context 'when query cache is not enabled' do
|
82
|
+
before do
|
83
|
+
Mongoid::QueryCache.enabled = false
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'turns on the query cache within the block' do
|
87
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
88
|
+
|
89
|
+
Mongoid::QueryCache.cache do
|
90
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
91
|
+
end
|
92
|
+
|
93
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'when query cache is enabled' do
|
98
|
+
before do
|
99
|
+
Mongoid::QueryCache.enabled = true
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'keeps the query cache enabled within the block' do
|
103
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
104
|
+
|
105
|
+
Mongoid::QueryCache.cache do
|
106
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
107
|
+
end
|
108
|
+
|
109
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'nested inside #uncached' do
|
114
|
+
it 'turns on the query cache in the block' do
|
115
|
+
Mongoid::QueryCache.uncached do
|
116
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
117
|
+
|
118
|
+
Mongoid::QueryCache.cache do
|
119
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
120
|
+
end
|
121
|
+
|
122
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe '#uncached' do
|
130
|
+
context 'with driver query cache' do
|
131
|
+
min_driver_version '2.14'
|
132
|
+
|
133
|
+
context 'when query cache is not enabled' do
|
134
|
+
before do
|
135
|
+
Mongoid::QueryCache.enabled = false
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'keeps the query cache turned off within the block' do
|
139
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
140
|
+
|
141
|
+
Mongoid::QueryCache.uncached do
|
142
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
143
|
+
end
|
144
|
+
|
145
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
context 'when query cache is enabled' do
|
150
|
+
before do
|
151
|
+
Mongoid::QueryCache.enabled = true
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'turns off the query cache within the block' do
|
155
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
156
|
+
|
157
|
+
Mongoid::QueryCache.uncached do
|
158
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
159
|
+
end
|
160
|
+
|
161
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
context 'nested inside #cache' do
|
166
|
+
it 'turns on the query cache in the block' do
|
167
|
+
Mongoid::QueryCache.cache do
|
168
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
169
|
+
|
170
|
+
Mongoid::QueryCache.uncached do
|
171
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
172
|
+
end
|
173
|
+
|
174
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
context 'with mongoid query cache' do
|
181
|
+
max_driver_version '2.13'
|
182
|
+
|
183
|
+
context 'when query cache is not enabled' do
|
184
|
+
before do
|
185
|
+
Mongoid::QueryCache.enabled = false
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'keeps the query cache turned off within the block' do
|
189
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
190
|
+
|
191
|
+
Mongoid::QueryCache.uncached do
|
192
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
193
|
+
end
|
194
|
+
|
195
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
context 'when query cache is enabled' do
|
200
|
+
before do
|
201
|
+
Mongoid::QueryCache.enabled = true
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'turns off the query cache within the block' do
|
205
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
206
|
+
|
207
|
+
Mongoid::QueryCache.uncached do
|
208
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
209
|
+
end
|
210
|
+
|
211
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
context 'nested inside #cache' do
|
216
|
+
it 'turns on the query cache in the block' do
|
217
|
+
Mongoid::QueryCache.cache do
|
218
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
219
|
+
|
220
|
+
Mongoid::QueryCache.uncached do
|
221
|
+
expect(Mongoid::QueryCache.enabled?).to be false
|
222
|
+
end
|
223
|
+
|
224
|
+
expect(Mongoid::QueryCache.enabled?).to be true
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
27
231
|
context 'when iterating over objects sharing the same base' do
|
28
232
|
|
29
233
|
let(:server) do
|
@@ -99,6 +303,111 @@ describe Mongoid::QueryCache do
|
|
99
303
|
end
|
100
304
|
end
|
101
305
|
|
306
|
+
context 'when driver query cache exists' do
|
307
|
+
min_driver_version '2.14'
|
308
|
+
|
309
|
+
before do
|
310
|
+
Band.all.to_a
|
311
|
+
Band.create!
|
312
|
+
end
|
313
|
+
|
314
|
+
it 'recognizes the driver query cache' do
|
315
|
+
expect(defined?(Mongo::QueryCache)).to_not be_nil
|
316
|
+
end
|
317
|
+
|
318
|
+
context 'when query cache enabled' do
|
319
|
+
|
320
|
+
it 'uses the driver query cache' do
|
321
|
+
expect(Mongo::QueryCache).to receive(:enabled=).and_call_original
|
322
|
+
Mongoid::QueryCache.enabled = true
|
323
|
+
|
324
|
+
expect(Mongoid::QueryCache.enabled?).to be(true)
|
325
|
+
expect(Mongo::QueryCache.enabled?).to be(true)
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
context 'when query cache disabled' do
|
330
|
+
|
331
|
+
it 'uses the driver query cache' do
|
332
|
+
expect(Mongo::QueryCache).to receive(:enabled=).and_call_original
|
333
|
+
Mongoid::QueryCache.enabled = false
|
334
|
+
|
335
|
+
expect(Mongoid::QueryCache.enabled?).to be(false)
|
336
|
+
expect(Mongo::QueryCache.enabled?).to be(false)
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
context 'when block is cached' do
|
341
|
+
|
342
|
+
before do
|
343
|
+
Mongoid::QueryCache.enabled = false
|
344
|
+
end
|
345
|
+
|
346
|
+
it 'uses the driver query cache' do
|
347
|
+
expect(Mongo::QueryCache).to receive(:cache).and_call_original
|
348
|
+
Mongoid::QueryCache.cache do
|
349
|
+
expect(Mongo::QueryCache).to receive(:enabled?).exactly(2).and_call_original
|
350
|
+
expect(Mongoid::QueryCache.enabled?).to be(true)
|
351
|
+
expect(Mongo::QueryCache.enabled?).to be(true)
|
352
|
+
end
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
356
|
+
context 'when block is uncached' do
|
357
|
+
|
358
|
+
before do
|
359
|
+
Mongoid::QueryCache.enabled = true
|
360
|
+
end
|
361
|
+
|
362
|
+
it 'uses the driver query cache' do
|
363
|
+
expect(Mongo::QueryCache).to receive(:uncached).and_call_original
|
364
|
+
Mongoid::QueryCache.uncached do
|
365
|
+
expect(Mongo::QueryCache).to receive(:enabled?).exactly(2).and_call_original
|
366
|
+
expect(Mongoid::QueryCache.enabled?).to be(false)
|
367
|
+
expect(Mongo::QueryCache.enabled?).to be(false)
|
368
|
+
end
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
context 'when clear_cache is used' do
|
373
|
+
|
374
|
+
before do
|
375
|
+
Band.all.to_a
|
376
|
+
end
|
377
|
+
|
378
|
+
it 'requires Mongoid to query again' do
|
379
|
+
expect_no_queries do
|
380
|
+
Band.all.to_a
|
381
|
+
end
|
382
|
+
|
383
|
+
Mongoid::QueryCache.clear_cache
|
384
|
+
|
385
|
+
expect_query(1) do
|
386
|
+
Band.all.to_a
|
387
|
+
end
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
context 'when query cache used and cleared' do
|
392
|
+
it 'uses the driver query cache' do
|
393
|
+
expect(Mongo::QueryCache).to receive(:set).once.and_call_original
|
394
|
+
|
395
|
+
expect_query(1) do
|
396
|
+
Band.all.to_a
|
397
|
+
Band.all.to_a
|
398
|
+
end
|
399
|
+
end
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
context 'when drivers query cache does not exist' do
|
404
|
+
max_driver_version '2.13'
|
405
|
+
|
406
|
+
it 'does not recognize the driver query cache' do
|
407
|
+
expect(defined?(Mongo::QueryCache)).to be_nil
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
102
411
|
context "when querying for a single document" do
|
103
412
|
|
104
413
|
[ :first, :one, :last ].each do |method|
|
@@ -148,24 +457,81 @@ describe Mongoid::QueryCache do
|
|
148
457
|
end
|
149
458
|
|
150
459
|
it 'returns all documents' do
|
151
|
-
|
152
|
-
|
153
|
-
|
460
|
+
# Mongoid adds a sort by _id to the Person.first call, which is why
|
461
|
+
# these commands issue two queries instead of one.
|
462
|
+
expect_query(2) do
|
463
|
+
expect(Person.all.to_a.count).to eq(3)
|
464
|
+
Person.first
|
465
|
+
expect(Person.all.to_a.count).to eq(3)
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
469
|
+
it 'caches the query when order is specified' do
|
470
|
+
expect_query(1) do
|
471
|
+
expect(Person.order(_id: 1).all.to_a.count).to eq(3)
|
472
|
+
Person.first
|
473
|
+
expect(Person.order(_id: 1).all.to_a.count).to eq(3)
|
474
|
+
end
|
154
475
|
end
|
155
476
|
|
156
477
|
context 'with conditions specified' do
|
157
478
|
it 'returns all documents' do
|
158
|
-
|
159
|
-
|
160
|
-
|
479
|
+
# Mongoid adds a sort by _id to the Person.first call, which is why
|
480
|
+
# these commands issue two queries instead of one.
|
481
|
+
expect_query(2) do
|
482
|
+
expect(Person.gt(age: 0).to_a.count).to eq(3)
|
483
|
+
Person.gt(age: 0).first
|
484
|
+
expect(Person.gt(age: 0).to_a.count).to eq(3)
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
it 'caches the query when order is specified' do
|
489
|
+
expect_query(1) do
|
490
|
+
expect(Person.order(_id: 1).gt(age: 0).to_a.count).to eq(3)
|
491
|
+
Person.gt(age: 0).first
|
492
|
+
expect(Person.order(_id: 1).gt(age: 0).to_a.count).to eq(3)
|
493
|
+
end
|
161
494
|
end
|
162
495
|
end
|
163
496
|
|
164
497
|
context 'with order specified' do
|
165
498
|
it 'returns all documents' do
|
166
|
-
|
167
|
-
|
168
|
-
|
499
|
+
expect_query(1) do
|
500
|
+
expect(Person.order_by(name: 1).to_a.count).to eq(3)
|
501
|
+
Person.order_by(name: 1).first
|
502
|
+
expect(Person.order_by(name: 1).to_a.count).to eq(3)
|
503
|
+
end
|
504
|
+
end
|
505
|
+
end
|
506
|
+
end
|
507
|
+
|
508
|
+
context 'when using a block API' do
|
509
|
+
before do
|
510
|
+
Band.destroy_all
|
511
|
+
5.times { Band.create }
|
512
|
+
end
|
513
|
+
|
514
|
+
context '#any? with no block' do
|
515
|
+
it 'doesn\'t leak sessions' do
|
516
|
+
Band.all.any?
|
517
|
+
end
|
518
|
+
end
|
519
|
+
|
520
|
+
context '#all? with no block' do
|
521
|
+
it 'doesn\'t leak sessions' do
|
522
|
+
Band.all.all?
|
523
|
+
end
|
524
|
+
end
|
525
|
+
|
526
|
+
context '#none? with no block' do
|
527
|
+
it 'doesn\'t leak sessions' do
|
528
|
+
Band.all.none?
|
529
|
+
end
|
530
|
+
end
|
531
|
+
|
532
|
+
context '#one? with no block' do
|
533
|
+
it 'doesn\'t leak sessions' do
|
534
|
+
Band.all.one?
|
169
535
|
end
|
170
536
|
end
|
171
537
|
end
|
@@ -259,7 +625,6 @@ describe Mongoid::QueryCache do
|
|
259
625
|
end
|
260
626
|
|
261
627
|
context "when the first query has a limit" do
|
262
|
-
|
263
628
|
let(:game) do
|
264
629
|
Game.create!(name: "2048")
|
265
630
|
end
|
@@ -277,11 +642,28 @@ describe Mongoid::QueryCache do
|
|
277
642
|
# which causes this test to fail.
|
278
643
|
min_server_version '3.2'
|
279
644
|
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
645
|
+
context 'with driver query cache' do
|
646
|
+
min_driver_version '2.14'
|
647
|
+
|
648
|
+
# The driver query cache re-uses results with a larger limit
|
649
|
+
it 'does not query again' do
|
650
|
+
expect_no_queries do
|
651
|
+
result = game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
|
652
|
+
expect(result.length).to eq(2)
|
653
|
+
expect(result.map { |r| r['value'] }).to eq([6, 7])
|
654
|
+
end
|
655
|
+
end
|
656
|
+
end
|
657
|
+
|
658
|
+
context 'with mongoid query cache' do
|
659
|
+
max_driver_version '2.13'
|
660
|
+
|
661
|
+
it 'queries again' do
|
662
|
+
expect_query(1) do
|
663
|
+
result = game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
|
664
|
+
expect(result.length).to eq(2)
|
665
|
+
expect(result.map { |r| r['value'] }).to eq([6, 7])
|
666
|
+
end
|
285
667
|
end
|
286
668
|
end
|
287
669
|
end
|
@@ -343,6 +725,7 @@ describe Mongoid::QueryCache do
|
|
343
725
|
Band.destroy_all
|
344
726
|
|
345
727
|
5.times { |i| Band.create!(name: "Band #{i}") }
|
728
|
+
Band.limit(2).skip(1).all.to_a
|
346
729
|
end
|
347
730
|
|
348
731
|
it "queries again" do
|
@@ -385,24 +768,24 @@ describe Mongoid::QueryCache do
|
|
385
768
|
end
|
386
769
|
end
|
387
770
|
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
771
|
+
context 'when querying colleciton larger than the batch size' do
|
772
|
+
before do
|
773
|
+
Band.destroy_all
|
774
|
+
101.times { |i| Band.create!(_id: i) }
|
775
|
+
end
|
393
776
|
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
777
|
+
it 'does not raise an exception when querying multiple times' do
|
778
|
+
expect do
|
779
|
+
results1 = Band.all.to_a
|
780
|
+
expect(results1.length).to eq(101)
|
781
|
+
expect(results1.map { |band| band["_id"] }).to eq([*0..100])
|
399
782
|
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
783
|
+
results2 = Band.all.to_a
|
784
|
+
expect(results2.length).to eq(101)
|
785
|
+
expect(results2.map { |band| band["_id"] }).to eq([*0..100])
|
786
|
+
end.not_to raise_error
|
787
|
+
end
|
788
|
+
end
|
406
789
|
|
407
790
|
context "when query caching is enabled and the batch_size is set" do
|
408
791
|
|
@@ -538,8 +921,10 @@ describe Mongoid::QueryCache do
|
|
538
921
|
end
|
539
922
|
end
|
540
923
|
|
541
|
-
it "returns the same count of objects when using #pluck" do
|
542
|
-
|
924
|
+
it "returns the same count of objects when using #pluck but doesn't cache" do
|
925
|
+
expect_query(1) do
|
926
|
+
expect(Band.pluck(:name).length).to eq(99)
|
927
|
+
end
|
543
928
|
end
|
544
929
|
end
|
545
930
|
end
|
@@ -557,20 +942,36 @@ describe Mongoid::QueryCache do
|
|
557
942
|
Mongoid::QueryCache.enabled = true
|
558
943
|
10.times { Band.create! }
|
559
944
|
|
560
|
-
Band.batch_size(4).
|
945
|
+
Band.batch_size(4).to_a
|
561
946
|
end
|
562
947
|
|
563
|
-
|
564
|
-
|
565
|
-
end
|
948
|
+
context 'with driver query cache' do
|
949
|
+
min_driver_version '2.14'
|
566
950
|
|
567
|
-
|
568
|
-
|
569
|
-
|
951
|
+
# The driver query cache caches multi-batch cursors
|
952
|
+
it 'does cache the result' do
|
953
|
+
expect_no_queries do
|
954
|
+
expect(Band.all.map(&:id).size).to eq(10)
|
955
|
+
end
|
570
956
|
end
|
957
|
+
end
|
958
|
+
|
959
|
+
context 'with mongoid query cache' do
|
960
|
+
max_driver_version '2.13'
|
571
961
|
|
572
962
|
it 'does not cache the result' do
|
573
|
-
|
963
|
+
expect_query(1) do
|
964
|
+
expect(Band.all.map(&:id).size).to eq(10)
|
965
|
+
end
|
966
|
+
end
|
967
|
+
end
|
968
|
+
end
|
969
|
+
|
970
|
+
context 'when storing in system collection' do
|
971
|
+
it 'does not cache the query' do
|
972
|
+
expect_query(2) do
|
973
|
+
SystemRole.all.to_a
|
974
|
+
SystemRole.all.to_a
|
574
975
|
end
|
575
976
|
end
|
576
977
|
end
|