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
@@ -0,0 +1,48 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module FieldOperator
|
6
|
+
MAP = {
|
7
|
+
'$all' => All,
|
8
|
+
'$elemMatch' => ElemMatch,
|
9
|
+
'$eq' => Eq,
|
10
|
+
'$exists' => Exists,
|
11
|
+
'$gt' => Gt,
|
12
|
+
'$gte' => Gte,
|
13
|
+
'$in' => In,
|
14
|
+
'$lt' => Lt,
|
15
|
+
'$lte' => Lte,
|
16
|
+
'$nin' => Nin,
|
17
|
+
'$ne' => Ne,
|
18
|
+
'$not' => Not,
|
19
|
+
'$regex' => Regex,
|
20
|
+
'$size' => Size,
|
21
|
+
}.freeze
|
22
|
+
|
23
|
+
module_function def get(op)
|
24
|
+
MAP.fetch(op)
|
25
|
+
rescue KeyError
|
26
|
+
raise Errors::InvalidFieldOperator.new(op)
|
27
|
+
end
|
28
|
+
|
29
|
+
module_function def apply_array_field_operator(exists, value, condition)
|
30
|
+
if Array === value
|
31
|
+
value.any? { |v| yield v }
|
32
|
+
else
|
33
|
+
yield value
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
module_function def apply_comparison_operator(operator, left, right)
|
38
|
+
left.send(operator, right)
|
39
|
+
rescue ArgumentError, NoMethodError, TypeError
|
40
|
+
# We silence bogus comparison attempts, e.g. number to string
|
41
|
+
# comparisons.
|
42
|
+
# Several different exceptions may be produced depending on the types
|
43
|
+
# involved.
|
44
|
+
false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module Gt
|
6
|
+
module_function def matches?(exists, value, condition)
|
7
|
+
case condition
|
8
|
+
when Range
|
9
|
+
raise Errors::InvalidQuery, "$gt argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
10
|
+
end
|
11
|
+
FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
|
12
|
+
FieldOperator.apply_comparison_operator(:>, v, condition)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module Gte
|
6
|
+
module_function def matches?(exists, value, condition)
|
7
|
+
case condition
|
8
|
+
when Range
|
9
|
+
raise Errors::InvalidQuery, "$gte argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
10
|
+
end
|
11
|
+
FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
|
12
|
+
FieldOperator.apply_comparison_operator(:>=, v, condition)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module In
|
6
|
+
module_function def matches?(exists, value, condition)
|
7
|
+
unless Array === condition
|
8
|
+
raise Errors::InvalidQuery, "$in argument must be an array: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
9
|
+
end
|
10
|
+
if Array === value
|
11
|
+
if value.any? { |v|
|
12
|
+
condition.any? do |c|
|
13
|
+
EqImplWithRegexp.matches?('$in', v, c)
|
14
|
+
end
|
15
|
+
} then
|
16
|
+
return true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
condition.any? do |c|
|
20
|
+
EqImplWithRegexp.matches?('$in', value, c)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module Lt
|
6
|
+
module_function def matches?(exists, value, condition)
|
7
|
+
case condition
|
8
|
+
when Range
|
9
|
+
raise Errors::InvalidQuery, "$lt argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
10
|
+
end
|
11
|
+
FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
|
12
|
+
FieldOperator.apply_comparison_operator(:<, v, condition)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module Lte
|
6
|
+
module_function def matches?(exists, value, condition)
|
7
|
+
case condition
|
8
|
+
when Range
|
9
|
+
raise Errors::InvalidQuery, "$lte argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
10
|
+
end
|
11
|
+
FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
|
12
|
+
FieldOperator.apply_comparison_operator(:<=, v, condition)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module Ne
|
6
|
+
module_function def matches?(exists, value, condition)
|
7
|
+
case condition
|
8
|
+
when ::Regexp, BSON::Regexp::Raw
|
9
|
+
raise Errors::InvalidQuery, "'$ne' operator does not allow Regexp arguments: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
10
|
+
end
|
11
|
+
|
12
|
+
!EqImpl.matches?(exists, value, condition, '$ne')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module Nor
|
6
|
+
module_function def matches?(document, expr)
|
7
|
+
unless expr.is_a?(Array)
|
8
|
+
raise Errors::InvalidQuery, "$nor argument must be an array: #{Errors::InvalidQuery.truncate_expr(expr)}"
|
9
|
+
end
|
10
|
+
|
11
|
+
if expr.empty?
|
12
|
+
raise Errors::InvalidQuery, "$nor argument must be a non-empty array: #{Errors::InvalidQuery.truncate_expr(expr)}"
|
13
|
+
end
|
14
|
+
|
15
|
+
expr.each do |sub_expr|
|
16
|
+
if Expression.matches?(document, sub_expr)
|
17
|
+
return false
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
expr.any?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module Not
|
6
|
+
module_function def matches?(exists, value, condition)
|
7
|
+
case condition
|
8
|
+
when ::Regexp, BSON::Regexp::Raw
|
9
|
+
!Regex.matches?(exists, value, condition)
|
10
|
+
when Hash
|
11
|
+
if condition.empty?
|
12
|
+
raise Errors::InvalidQuery, "$not argument cannot be an empty hash: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
13
|
+
end
|
14
|
+
|
15
|
+
condition.all? do |(k, cond_v)|
|
16
|
+
k = k.to_s
|
17
|
+
unless k.start_with?('$')
|
18
|
+
raise Errors::InvalidQuery, "$not arguments must be operators: #{Errors::InvalidQuery.truncate_expr(k)}"
|
19
|
+
end
|
20
|
+
|
21
|
+
!FieldOperator.get(k).matches?(exists, value, cond_v)
|
22
|
+
end
|
23
|
+
else
|
24
|
+
raise Errors::InvalidQuery, "$not argument must be a Hash or a regular expression: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module Or
|
6
|
+
module_function def matches?(document, expr)
|
7
|
+
unless expr.is_a?(Array)
|
8
|
+
raise Errors::InvalidQuery, "$or argument must be an array: #{Errors::InvalidQuery.truncate_expr(expr)}"
|
9
|
+
end
|
10
|
+
|
11
|
+
if expr.empty?
|
12
|
+
raise Errors::InvalidQuery, "$or argument must be a non-empty array: #{Errors::InvalidQuery.truncate_expr(expr)}"
|
13
|
+
end
|
14
|
+
|
15
|
+
expr.any? do |sub_expr|
|
16
|
+
Expression.matches?(document, sub_expr)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module Regex
|
6
|
+
module_function def matches?(exists, value, condition)
|
7
|
+
condition = case condition
|
8
|
+
when Regexp
|
9
|
+
condition
|
10
|
+
when BSON::Regexp::Raw
|
11
|
+
condition.compile
|
12
|
+
else
|
13
|
+
# Note that strings must have been converted to a regular expression
|
14
|
+
# instance already (with $options taken into account, if provided).
|
15
|
+
raise Errors::InvalidQuery, "$regex requires a regular expression argument: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
16
|
+
end
|
17
|
+
|
18
|
+
case value
|
19
|
+
when Array
|
20
|
+
value.any? do |v|
|
21
|
+
v =~ condition
|
22
|
+
end
|
23
|
+
when String
|
24
|
+
value =~ condition
|
25
|
+
else
|
26
|
+
false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module_function def matches_array_or_scalar?(value, condition)
|
31
|
+
if Array === value
|
32
|
+
value.any? do |v|
|
33
|
+
matches?(true, v, condition)
|
34
|
+
end
|
35
|
+
else
|
36
|
+
matches?(true, value, condition)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Matcher
|
3
|
+
|
4
|
+
# @api private
|
5
|
+
module Size
|
6
|
+
module_function def matches?(exists, value, condition)
|
7
|
+
case condition
|
8
|
+
when Float
|
9
|
+
raise Errors::InvalidQuery, "$size argument must be a non-negative integer: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
10
|
+
when Numeric
|
11
|
+
if condition < 0
|
12
|
+
raise Errors::InvalidQuery, "$size argument must be a non-negative integer: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
13
|
+
end
|
14
|
+
else
|
15
|
+
raise Errors::InvalidQuery, "$size argument must be a non-negative integer: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
16
|
+
end
|
17
|
+
|
18
|
+
if Array === value
|
19
|
+
value.length == condition
|
20
|
+
else
|
21
|
+
false
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -141,7 +141,7 @@ module Mongoid
|
|
141
141
|
#
|
142
142
|
# @since 1.0.0
|
143
143
|
def delete_all(conditions = {})
|
144
|
-
selector = hereditary? ? conditions.merge(
|
144
|
+
selector = hereditary? ? conditions.merge(discriminator_key.to_sym => discriminator_value) : conditions
|
145
145
|
where(selector).delete
|
146
146
|
end
|
147
147
|
end
|
data/lib/mongoid/query_cache.rb
CHANGED
@@ -17,8 +17,13 @@ module Mongoid
|
|
17
17
|
# @return [ Hash ] The hash of cached queries.
|
18
18
|
#
|
19
19
|
# @since 4.0.0
|
20
|
+
# @api private
|
20
21
|
def cache_table
|
21
|
-
|
22
|
+
if defined?(Mongo::QueryCache)
|
23
|
+
raise NotImplementedError, "Mongoid does not expose driver's query cache table"
|
24
|
+
else
|
25
|
+
Thread.current["[mongoid]:query_cache"] ||= {}
|
26
|
+
end
|
22
27
|
end
|
23
28
|
|
24
29
|
# Clear the query cache.
|
@@ -30,7 +35,11 @@ module Mongoid
|
|
30
35
|
#
|
31
36
|
# @since 4.0.0
|
32
37
|
def clear_cache
|
33
|
-
|
38
|
+
if defined?(Mongo::QueryCache)
|
39
|
+
Mongo::QueryCache.clear
|
40
|
+
else
|
41
|
+
Thread.current["[mongoid]:query_cache"] = nil
|
42
|
+
end
|
34
43
|
end
|
35
44
|
|
36
45
|
# Set whether the cache is enabled.
|
@@ -42,7 +51,11 @@ module Mongoid
|
|
42
51
|
#
|
43
52
|
# @since 4.0.0
|
44
53
|
def enabled=(value)
|
45
|
-
|
54
|
+
if defined?(Mongo::QueryCache)
|
55
|
+
Mongo::QueryCache.enabled = value
|
56
|
+
else
|
57
|
+
Thread.current["[mongoid]:query_cache:enabled"] = value
|
58
|
+
end
|
46
59
|
end
|
47
60
|
|
48
61
|
# Is the query cache enabled on the current thread?
|
@@ -54,7 +67,11 @@ module Mongoid
|
|
54
67
|
#
|
55
68
|
# @since 4.0.0
|
56
69
|
def enabled?
|
57
|
-
|
70
|
+
if defined?(Mongo::QueryCache)
|
71
|
+
Mongo::QueryCache.enabled?
|
72
|
+
else
|
73
|
+
!!Thread.current["[mongoid]:query_cache:enabled"]
|
74
|
+
end
|
58
75
|
end
|
59
76
|
|
60
77
|
# Execute the block while using the query cache.
|
@@ -65,12 +82,18 @@ module Mongoid
|
|
65
82
|
# @return [ Object ] The result of the block.
|
66
83
|
#
|
67
84
|
# @since 4.0.0
|
68
|
-
def cache
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
85
|
+
def cache(&block)
|
86
|
+
if defined?(Mongo::QueryCache)
|
87
|
+
Mongo::QueryCache.cache(&block)
|
88
|
+
else
|
89
|
+
enabled = QueryCache.enabled?
|
90
|
+
QueryCache.enabled = true
|
91
|
+
begin
|
92
|
+
yield
|
93
|
+
ensure
|
94
|
+
QueryCache.enabled = enabled
|
95
|
+
end
|
96
|
+
end
|
74
97
|
end
|
75
98
|
|
76
99
|
# Execute the block with the query cache disabled.
|
@@ -79,12 +102,18 @@ module Mongoid
|
|
79
102
|
# QueryCache.uncached { collection.find }
|
80
103
|
#
|
81
104
|
# @return [ Object ] The result of the block.
|
82
|
-
def uncached
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
105
|
+
def uncached(&block)
|
106
|
+
if defined?(Mongo::QueryCache)
|
107
|
+
Mongo::QueryCache.uncached(&block)
|
108
|
+
else
|
109
|
+
enabled = QueryCache.enabled?
|
110
|
+
QueryCache.enabled = false
|
111
|
+
begin
|
112
|
+
yield
|
113
|
+
ensure
|
114
|
+
QueryCache.enabled = enabled
|
115
|
+
end
|
116
|
+
end
|
88
117
|
end
|
89
118
|
end
|
90
119
|
|
@@ -127,6 +156,7 @@ module Mongoid
|
|
127
156
|
# the database if the same query has already been executed.
|
128
157
|
#
|
129
158
|
# @since 5.0.0
|
159
|
+
# @deprecated This class is only used with driver versions 2.13 and lower.
|
130
160
|
class CachedCursor < Mongo::Cursor
|
131
161
|
|
132
162
|
# We iterate over the cached documents if they exist already in the
|
@@ -164,12 +194,10 @@ module Mongoid
|
|
164
194
|
|
165
195
|
def process(result)
|
166
196
|
documents = super
|
167
|
-
|
168
197
|
if @cursor_id.zero? && !@after_first_batch
|
169
198
|
@cached_documents ||= []
|
170
199
|
@cached_documents.concat(documents)
|
171
200
|
end
|
172
|
-
|
173
201
|
@after_first_batch = true
|
174
202
|
documents
|
175
203
|
end
|
@@ -179,6 +207,7 @@ module Mongoid
|
|
179
207
|
# operations.
|
180
208
|
#
|
181
209
|
# @since 4.0.0
|
210
|
+
# @deprecated This module is only used with driver versions 2.13 and lower.
|
182
211
|
module Base
|
183
212
|
|
184
213
|
def alias_query_cache_clear(*method_names)
|
@@ -198,6 +227,7 @@ module Mongoid
|
|
198
227
|
# cached cursor or a regular cursor on iteration.
|
199
228
|
#
|
200
229
|
# @since 5.0.0
|
230
|
+
# @deprecated This module is only used with driver versions 2.13 and lower.
|
201
231
|
module View
|
202
232
|
extend ActiveSupport::Concern
|
203
233
|
|
@@ -228,24 +258,19 @@ module Mongoid
|
|
228
258
|
else
|
229
259
|
@cursor = nil
|
230
260
|
unless @cursor = cached_cursor
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
read_with_retry do
|
240
|
-
server = server_selector.select_server(cluster)
|
241
|
-
result = send_initial_query(server)
|
242
|
-
@cursor = get_cursor(result, server)
|
261
|
+
session = client.send(:get_session, @options)
|
262
|
+
read_with_retry(session, server_selector) do |server|
|
263
|
+
result = send_initial_query(server, session)
|
264
|
+
if result.cursor_id == 0 || result.cursor_id.nil?
|
265
|
+
@cursor = CachedCursor.new(view, result, server, session: session)
|
266
|
+
QueryCache.cache_table[cache_key] = @cursor
|
267
|
+
else
|
268
|
+
@cursor = Mongo::Cursor.new(view, result, server, session: session)
|
243
269
|
end
|
244
270
|
end
|
245
271
|
end
|
246
|
-
|
247
272
|
if block_given?
|
248
|
-
if limit
|
273
|
+
if limit
|
249
274
|
@cursor.to_a[0...limit].each do |doc|
|
250
275
|
yield doc
|
251
276
|
end
|
@@ -270,44 +295,19 @@ module Mongoid
|
|
270
295
|
cursor || QueryCache.cache_table[cache_key]
|
271
296
|
end
|
272
297
|
|
273
|
-
def get_cursor(result, server, session = nil)
|
274
|
-
if result.cursor_id == 0 || result.cursor_id.nil?
|
275
|
-
cursor = if session
|
276
|
-
CachedCursor.new(view, result, server, session: session)
|
277
|
-
else
|
278
|
-
CachedCursor.new(view, result, server)
|
279
|
-
end
|
280
|
-
|
281
|
-
QueryCache.cache_table[cache_key] = cursor
|
282
|
-
else
|
283
|
-
cursor = if session
|
284
|
-
Mongo::Cursor.new(view, result, server, session: session)
|
285
|
-
else
|
286
|
-
Mongo::Cursor.new(view, result, server)
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
cursor
|
291
|
-
end
|
292
|
-
|
293
298
|
def cache_key
|
294
299
|
[ collection.namespace, selector, limit, skip, sort, projection, collation ]
|
295
300
|
end
|
296
301
|
|
297
302
|
def system_collection?
|
298
|
-
collection.
|
299
|
-
end
|
300
|
-
|
301
|
-
def driver_supports_cursor_sessions?
|
302
|
-
# Driver versions 2.9 and newer support passing in a session to the
|
303
|
-
# cursor object.
|
304
|
-
(Mongo::VERSION.split('.').map(&:to_i) <=> [2, 9, 0]) > 0
|
303
|
+
collection.name.start_with?('system.')
|
305
304
|
end
|
306
305
|
end
|
307
306
|
|
308
307
|
# Adds behavior to the query cache for collections.
|
309
308
|
#
|
310
309
|
# @since 5.0.0
|
310
|
+
# @deprecated This module is only used with driver versions 2.13 and lower.
|
311
311
|
module Collection
|
312
312
|
extend ActiveSupport::Concern
|
313
313
|
|
@@ -326,6 +326,8 @@ module Mongoid
|
|
326
326
|
end
|
327
327
|
end
|
328
328
|
|
329
|
-
Mongo::
|
330
|
-
Mongo::Collection
|
331
|
-
|
329
|
+
unless defined?(Mongo::QueryCache)
|
330
|
+
Mongo::Collection.__send__(:include, Mongoid::QueryCache::Collection)
|
331
|
+
Mongo::Collection::View.__send__(:include, Mongoid::QueryCache::View)
|
332
|
+
Mongoid::Document.__send__(:include, Mongoid::QueryCache::Document)
|
333
|
+
end
|