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
data/lib/mongoid/config.rb
CHANGED
@@ -32,6 +32,9 @@ module Mongoid
|
|
32
32
|
# error.
|
33
33
|
option :belongs_to_required_by_default, default: true
|
34
34
|
|
35
|
+
# Set the global discriminator key.
|
36
|
+
option :discriminator_key, default: "_type"
|
37
|
+
|
35
38
|
# Raise an exception when a field is redefined.
|
36
39
|
option :duplicate_fields_exception, default: false
|
37
40
|
|
@@ -71,7 +71,26 @@ module Mongoid
|
|
71
71
|
# @since 3.0.0
|
72
72
|
def count(options = {}, &block)
|
73
73
|
return super(&block) if block_given?
|
74
|
-
try_cache(:count) { view.
|
74
|
+
try_cache(:count) { view.count_documents(options) }
|
75
|
+
end
|
76
|
+
|
77
|
+
# Get the estimated number of documents matching the query.
|
78
|
+
#
|
79
|
+
# Unlike count, estimated_count does not take a block because it is not
|
80
|
+
# traditionally defined (with a block) on Enumarable like count is.
|
81
|
+
#
|
82
|
+
# @example Get the estimated number of matching documents.
|
83
|
+
# context.estimated_count
|
84
|
+
#
|
85
|
+
# @param [ Hash ] options The options, such as maxTimeMS to be factored
|
86
|
+
# into the count.
|
87
|
+
#
|
88
|
+
# @return [ Integer ] The number of matches.
|
89
|
+
def estimated_count(options = {})
|
90
|
+
unless self.criteria.selector.empty?
|
91
|
+
raise Mongoid::Errors::InvalidEstimatedCountCriteria.new(self.klass)
|
92
|
+
end
|
93
|
+
try_cache(:estimated_count) { view.estimated_document_count(options) }
|
75
94
|
end
|
76
95
|
|
77
96
|
# Delete all documents in the database that match the selector.
|
@@ -258,12 +277,12 @@ module Mongoid
|
|
258
277
|
return documents.first if cached? && cache_loaded?
|
259
278
|
try_cache(:first) do
|
260
279
|
if sort = view.sort || ({ _id: 1 } unless opts[:id_sort] == :none)
|
261
|
-
if raw_doc = view.sort(sort).limit(
|
280
|
+
if raw_doc = view.sort(sort).limit(1).first
|
262
281
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
263
282
|
eager_load([doc]).first
|
264
283
|
end
|
265
284
|
else
|
266
|
-
if raw_doc = view.limit(
|
285
|
+
if raw_doc = view.limit(1).first
|
267
286
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
268
287
|
eager_load([doc]).first
|
269
288
|
end
|
@@ -372,7 +391,7 @@ module Mongoid
|
|
372
391
|
def last(opts = {})
|
373
392
|
try_cache(:last) do
|
374
393
|
with_inverse_sorting(opts) do
|
375
|
-
if raw_doc = view.limit(
|
394
|
+
if raw_doc = view.limit(1).first
|
376
395
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
377
396
|
eager_load([doc]).first
|
378
397
|
end
|
data/lib/mongoid/copyable.rb
CHANGED
@@ -23,8 +23,12 @@ module Mongoid
|
|
23
23
|
# elsewhere.
|
24
24
|
attrs = clone_document.except("_id", "id")
|
25
25
|
dynamic_attrs = {}
|
26
|
+
_attribute_names = self.attribute_names
|
26
27
|
attrs.reject! do |attr_name, value|
|
27
|
-
|
28
|
+
unless _attribute_names.include?(attr_name)
|
29
|
+
dynamic_attrs[attr_name] = value
|
30
|
+
true
|
31
|
+
end
|
28
32
|
end
|
29
33
|
self.class.new(attrs).tap do |object|
|
30
34
|
dynamic_attrs.each do |attr_name, value|
|
@@ -76,8 +80,8 @@ module Mongoid
|
|
76
80
|
|
77
81
|
if association.is_a?(Association::Embedded::EmbedsMany)
|
78
82
|
attrs[association.key].each do |attr|
|
79
|
-
embedded_klass = if type = attr[
|
80
|
-
type.
|
83
|
+
embedded_klass = if type = attr[self.class.discriminator_key]
|
84
|
+
association.relation_class.get_discriminator_mapping(type) || association.relation_class
|
81
85
|
else
|
82
86
|
association.relation_class
|
83
87
|
end
|
data/lib/mongoid/criteria.rb
CHANGED
@@ -20,9 +20,17 @@ module Mongoid
|
|
20
20
|
# against the database.
|
21
21
|
class Criteria
|
22
22
|
include Enumerable
|
23
|
+
|
24
|
+
# @api private
|
25
|
+
alias :_enumerable_find :find
|
26
|
+
|
23
27
|
include Contextual
|
24
28
|
include Queryable
|
25
29
|
include Findable
|
30
|
+
|
31
|
+
# @api private
|
32
|
+
alias :_findable_find :find
|
33
|
+
|
26
34
|
include Inspectable
|
27
35
|
include Includable
|
28
36
|
include Marshalable
|
@@ -55,6 +63,48 @@ module Mongoid
|
|
55
63
|
entries == other
|
56
64
|
end
|
57
65
|
|
66
|
+
# Finds one or many documents given the provided _id values, or filters
|
67
|
+
# the documents in the current scope in the application process space
|
68
|
+
# after loading them if needed.
|
69
|
+
#
|
70
|
+
# If this method is not given a block, it delegates to +Findable#find+
|
71
|
+
# and finds one or many documents for the provided _id values.
|
72
|
+
#
|
73
|
+
# If this method is given a block, it delegates to +Enumerable#find+ and
|
74
|
+
# returns the first document of those found by the current Crieria object
|
75
|
+
# for which the block returns a truthy value.
|
76
|
+
#
|
77
|
+
# Note that the "default proc" argument of Enumerable is not specially
|
78
|
+
# treated by Mongoid - the decision between delegating to +Findable+ vs
|
79
|
+
# +Enumerable+ is made solely based on whether +find+ is passed a block.
|
80
|
+
#
|
81
|
+
# @example Finds a document by its _id, invokes Findable#find.
|
82
|
+
# critera.find("1234")
|
83
|
+
#
|
84
|
+
# @example Finds the first matching document using a block, invokes Enumerable#find.
|
85
|
+
# criteria.find { |item| item.name == "Depeche Mode" }
|
86
|
+
#
|
87
|
+
# @example Finds the first matching document using a block using the default Proc, invokes Enumerable#find.
|
88
|
+
# criteria.find(-> { "Default Band" }) { |item| item.name == "Milwaukee Mode" }
|
89
|
+
#
|
90
|
+
# @example Tries to find a document whose _id is the stringification of the provided Proc, typically failing.
|
91
|
+
# enumerator = criteria.find(-> { "Default Band" })
|
92
|
+
#
|
93
|
+
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
94
|
+
#
|
95
|
+
# @raise Errors::DocumentNotFound If the parameters were _id values and
|
96
|
+
# not all documents are found and the +raise_not_found_error+
|
97
|
+
# Mongoid configuration option is truthy.
|
98
|
+
#
|
99
|
+
# @see https://ruby-doc.org/core/Enumerable.html#method-i-find
|
100
|
+
def find(*args, &block)
|
101
|
+
if block_given?
|
102
|
+
_enumerable_find(*args, &block)
|
103
|
+
else
|
104
|
+
_findable_find(*args)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
58
108
|
# Needed to properly get a criteria back as json
|
59
109
|
#
|
60
110
|
# @example Get the criteria as json.
|
@@ -169,7 +219,7 @@ module Mongoid
|
|
169
219
|
# @since 2.0.0
|
170
220
|
def field_list
|
171
221
|
if options[:fields]
|
172
|
-
options[:fields].keys.reject{ |key| key ==
|
222
|
+
options[:fields].keys.reject{ |key| key == klass.discriminator_key }
|
173
223
|
else
|
174
224
|
[]
|
175
225
|
end
|
@@ -292,7 +342,7 @@ module Mongoid
|
|
292
342
|
args.unshift(:_id)
|
293
343
|
end
|
294
344
|
if klass.hereditary?
|
295
|
-
super(*args.push(
|
345
|
+
super(*args.push(klass.discriminator_key.to_sym))
|
296
346
|
else
|
297
347
|
super(*args)
|
298
348
|
end
|
@@ -379,7 +429,7 @@ module Mongoid
|
|
379
429
|
#
|
380
430
|
# @return [ Criteria ] The cloned criteria.
|
381
431
|
def type(types)
|
382
|
-
any_in(
|
432
|
+
any_in(self.discriminator_key.to_sym => Array(types))
|
383
433
|
end
|
384
434
|
|
385
435
|
# This is the general entry point for most MongoDB queries. This either
|
@@ -555,8 +605,8 @@ module Mongoid
|
|
555
605
|
# @since 3.0.3
|
556
606
|
def type_selectable?
|
557
607
|
klass.hereditary? &&
|
558
|
-
!selector.keys.include?(
|
559
|
-
!selector.keys.include?(
|
608
|
+
!selector.keys.include?(self.discriminator_key) &&
|
609
|
+
!selector.keys.include?(self.discriminator_key.to_sym)
|
560
610
|
end
|
561
611
|
|
562
612
|
# Get the selector for type selection.
|
@@ -572,9 +622,9 @@ module Mongoid
|
|
572
622
|
def type_selection
|
573
623
|
klasses = klass._types
|
574
624
|
if klasses.size > 1
|
575
|
-
{
|
625
|
+
{ klass.discriminator_key.to_sym => { "$in" => klass._types }}
|
576
626
|
else
|
577
|
-
{
|
627
|
+
{ klass.discriminator_key.to_sym => klass._types[0] }
|
578
628
|
end
|
579
629
|
end
|
580
630
|
|
@@ -33,7 +33,7 @@ module Mongoid
|
|
33
33
|
#
|
34
34
|
# A yet more more complex example is the following condition:
|
35
35
|
#
|
36
|
-
# Foo.
|
36
|
+
# Foo.geo_spatial(:boundary.intersects_point => [1, 10])
|
37
37
|
#
|
38
38
|
# Processing this condition will cause a Key instance to be created as
|
39
39
|
# follows:
|
@@ -237,9 +237,9 @@ module Mongoid
|
|
237
237
|
# Similarly, this method should never need to expand a literal value
|
238
238
|
# and an operator at the same time.
|
239
239
|
#
|
240
|
-
# @param [ Hash ] Criteria including Key instances.
|
240
|
+
# @param [ Hash ] expr Criteria including Key instances.
|
241
241
|
#
|
242
|
-
# @return [ Hash ]
|
242
|
+
# @return [ Hash ] The expanded criteria.
|
243
243
|
private def _mongoid_expand_keys(expr)
|
244
244
|
unless expr.is_a?(Hash)
|
245
245
|
raise ArgumentError, 'Argument must be a Hash'
|
@@ -219,32 +219,44 @@ module Mongoid
|
|
219
219
|
# Source: https://docs.mongodb.com/manual/reference/operator/query/box/
|
220
220
|
#
|
221
221
|
# @example Add a geo intersect criterion for a line.
|
222
|
-
# query.
|
222
|
+
# query.geo_spatial(:location.intersects_line => [[ 1, 10 ], [ 2, 10 ]])
|
223
223
|
#
|
224
224
|
# @example Add a geo intersect criterion for a point.
|
225
|
-
# query.
|
225
|
+
# query.geo_spatial(:location.intersects_point => [[ 1, 10 ]])
|
226
226
|
#
|
227
227
|
# @example Add a geo intersect criterion for a polygon.
|
228
|
-
# query.
|
228
|
+
# query.geo_spatial(:location.intersects_polygon => [[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]])
|
229
229
|
#
|
230
230
|
# @example Add a geo within criterion for a polygon.
|
231
|
-
# query.
|
231
|
+
# query.geo_spatial(:location.within_polygon => [[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]])
|
232
232
|
#
|
233
233
|
# @example Add a geo within criterion for a box.
|
234
|
-
# query.
|
234
|
+
# query.geo_spatial(:location.within_box => [[ 1, 10 ], [ 2, 10 ])
|
235
235
|
#
|
236
236
|
# @param [ Hash ] criterion The criterion.
|
237
237
|
#
|
238
238
|
# @return [ Selectable ] The cloned selectable.
|
239
|
+
def geo_spatial(criterion)
|
240
|
+
if criterion.nil?
|
241
|
+
raise Errors::CriteriaArgumentRequired, :geo_spatial
|
242
|
+
end
|
243
|
+
|
244
|
+
__merge__(criterion)
|
245
|
+
end
|
246
|
+
|
247
|
+
# Alias for +geo_spatial+.
|
239
248
|
#
|
240
|
-
# @
|
249
|
+
# @deprecated
|
241
250
|
def geo_spacial(criterion)
|
251
|
+
# Duplicate method body so that we can raise this exception with
|
252
|
+
# geo_spacial as the indicated operator rather than geo_spatial.
|
242
253
|
if criterion.nil?
|
243
254
|
raise Errors::CriteriaArgumentRequired, :geo_spacial
|
244
255
|
end
|
245
256
|
|
246
257
|
__merge__(criterion)
|
247
258
|
end
|
259
|
+
|
248
260
|
key :intersects_line, :override, "$geoIntersects", "$geometry" do |value|
|
249
261
|
{ "type" => LINE_STRING, "coordinates" => value }
|
250
262
|
end
|
@@ -872,6 +884,9 @@ module Mongoid
|
|
872
884
|
end
|
873
885
|
|
874
886
|
clone.tap do |query|
|
887
|
+
unless Hash === criterion
|
888
|
+
raise Errors::InvalidQuery, "Expression must be a Hash: #{Errors::InvalidQuery.truncate_expr(criterion)}"
|
889
|
+
end
|
875
890
|
criterion.each do |field, value|
|
876
891
|
field_s = field.to_s
|
877
892
|
if field_s[0] == ?$
|
@@ -84,16 +84,16 @@ module Mongoid
|
|
84
84
|
# Evolves a multi-list selection, like an $and or $or criterion, and
|
85
85
|
# performs the necessary serialization.
|
86
86
|
#
|
87
|
-
# @api private
|
88
|
-
#
|
89
87
|
# @example Evolve the multi-selection.
|
90
88
|
# selector.evolve_multi([{ field: "value" }])
|
91
89
|
#
|
92
|
-
# @param [ Array<Hash> ]
|
90
|
+
# @param [ Array<Hash> ] specs The multi-selection.
|
93
91
|
#
|
94
92
|
# @return [ Array<Hash> ] The serialized values.
|
95
93
|
#
|
96
94
|
# @since 1.0.0
|
95
|
+
#
|
96
|
+
# @api private
|
97
97
|
def evolve_multi(specs)
|
98
98
|
unless specs.is_a?(Array)
|
99
99
|
raise ArgumentError, "specs is not an array: #{specs.inspect}"
|
@@ -123,10 +123,6 @@ module Mongoid
|
|
123
123
|
# {'foo' => {'$lt' => 5}}. This step should be done after all
|
124
124
|
# value-based processing is complete.
|
125
125
|
if key.is_a?(Key)
|
126
|
-
if serializer && evolved_value != value
|
127
|
-
raise NotImplementedError, "This method is not prepared to handle key being a Key and serializer being not nil"
|
128
|
-
end
|
129
|
-
|
130
126
|
evolved_value = key.transform_value(evolved_value)
|
131
127
|
end
|
132
128
|
|
@@ -74,7 +74,7 @@ module Mongoid
|
|
74
74
|
#
|
75
75
|
# This method takes the operator and the operator value expression
|
76
76
|
# separately for callers' convenience. It can be considered to
|
77
|
-
# handle storing the hash
|
77
|
+
# handle storing the hash +{operator => op_expr}+.
|
78
78
|
#
|
79
79
|
# If the selector consists of a single condition which is the specified
|
80
80
|
# operator (on the top level), the new condition given in op_expr is
|
@@ -115,7 +115,7 @@ module Mongoid
|
|
115
115
|
end
|
116
116
|
|
117
117
|
unless op_expr.is_a?(Array)
|
118
|
-
raise
|
118
|
+
raise Errors::InvalidQuery, "#{operator} argument must be an array: #{Errors::InvalidQuery.truncate_expr(op_expr)}"
|
119
119
|
end
|
120
120
|
|
121
121
|
if selector.length == 1 && selector.keys.first == operator
|
@@ -141,7 +141,7 @@ module Mongoid
|
|
141
141
|
#
|
142
142
|
# This method takes the operator and the operator value expression
|
143
143
|
# separately for callers' convenience. It can be considered to
|
144
|
-
# handle storing the hash
|
144
|
+
# handle storing the hash +{operator => op_expr}+.
|
145
145
|
#
|
146
146
|
# The operator value can be of any type.
|
147
147
|
#
|
data/lib/mongoid/document.rb
CHANGED
@@ -229,12 +229,13 @@ module Mongoid
|
|
229
229
|
became = klass.new(clone_document)
|
230
230
|
became._id = _id
|
231
231
|
became.instance_variable_set(:@changed_attributes, changed_attributes)
|
232
|
-
|
233
|
-
|
232
|
+
new_errors = ActiveModel::Errors.new(became)
|
233
|
+
new_errors.copy!(errors)
|
234
|
+
became.instance_variable_set(:@errors, new_errors)
|
234
235
|
became.instance_variable_set(:@new_record, new_record?)
|
235
236
|
became.instance_variable_set(:@destroyed, destroyed?)
|
236
|
-
became.changed_attributes[
|
237
|
-
became.
|
237
|
+
became.changed_attributes[klass.discriminator_key] = self.class.discriminator_value
|
238
|
+
became[klass.discriminator_key] = klass.discriminator_value
|
238
239
|
|
239
240
|
# mark embedded docs as persisted
|
240
241
|
embedded_relations.each_pair do |name, meta|
|
@@ -353,7 +354,19 @@ module Mongoid
|
|
353
354
|
#
|
354
355
|
# @since 1.0.0
|
355
356
|
def _types
|
356
|
-
@_type ||= (descendants + [ self ]).uniq.map(&:
|
357
|
+
@_type ||= (descendants + [ self ]).uniq.map(&:discriminator_value)
|
358
|
+
end
|
359
|
+
|
360
|
+
# Clear the @_type cache. This is generally called when changing the discriminator
|
361
|
+
# key/value on a class.
|
362
|
+
#
|
363
|
+
# @example Get the types.
|
364
|
+
# document._mongoid_clear_types
|
365
|
+
#
|
366
|
+
# @api private
|
367
|
+
def _mongoid_clear_types
|
368
|
+
@_type = nil
|
369
|
+
superclass._mongoid_clear_types if hereditary?
|
357
370
|
end
|
358
371
|
|
359
372
|
# Set the i18n scope to overwrite ActiveModel.
|
data/lib/mongoid/errors.rb
CHANGED
@@ -20,6 +20,13 @@ require "mongoid/errors/invalid_index"
|
|
20
20
|
require "mongoid/errors/invalid_options"
|
21
21
|
require "mongoid/errors/invalid_path"
|
22
22
|
require "mongoid/errors/invalid_persistence_option"
|
23
|
+
require "mongoid/errors/invalid_query"
|
24
|
+
# Must be after invalid_query.
|
25
|
+
require "mongoid/errors/invalid_discriminator_key_target"
|
26
|
+
require "mongoid/errors/invalid_elem_match_operator"
|
27
|
+
require "mongoid/errors/invalid_estimated_count_criteria"
|
28
|
+
require "mongoid/errors/invalid_expression_operator"
|
29
|
+
require "mongoid/errors/invalid_field_operator"
|
23
30
|
require "mongoid/errors/invalid_relation"
|
24
31
|
require "mongoid/errors/invalid_relation_option"
|
25
32
|
require "mongoid/errors/invalid_scope"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
module Mongoid
|
5
|
+
module Errors
|
6
|
+
|
7
|
+
# Creates the exception raised when trying to set or get the
|
8
|
+
# discriminator key on a child class.
|
9
|
+
#
|
10
|
+
# @param [ String ] class_name The class name.
|
11
|
+
# @param [ String ] operator The class' superclass.
|
12
|
+
#
|
13
|
+
# @api private
|
14
|
+
class InvalidDiscriminatorKeyTarget < MongoidError
|
15
|
+
def initialize(class_name, superclass)
|
16
|
+
super(
|
17
|
+
compose_message(
|
18
|
+
"invalid_discriminator_key_target",
|
19
|
+
{ class_name: class_name, superclass: superclass }
|
20
|
+
)
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
module Mongoid
|
5
|
+
module Errors
|
6
|
+
|
7
|
+
# Raised when invalid field-level operator is passed to the $elemMatch
|
8
|
+
# embedded matcher.
|
9
|
+
class InvalidElemMatchOperator < InvalidQuery
|
10
|
+
|
11
|
+
# @api private
|
12
|
+
VALID_OPERATORS = %w(
|
13
|
+
and all eq exists gt gte in lt lte ne nin nor not or regex size
|
14
|
+
).freeze
|
15
|
+
|
16
|
+
# Creates the exception.
|
17
|
+
#
|
18
|
+
# @param [ String ] operator The operator that was used.
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
def initialize(operator)
|
22
|
+
@operator = operator
|
23
|
+
super(compose_message("invalid_elem_match_operator",
|
24
|
+
operator: operator,
|
25
|
+
valid_operators: VALID_OPERATORS.map { |op| "'$#{op}'" }.join(', '),
|
26
|
+
))
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [ String ] The operator that was used.
|
30
|
+
attr_reader :operator
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|