mongoid 7.1.8 → 7.2.3
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 +1 -3
- data.tar.gz.sig +0 -0
- data/README.md +9 -2
- data/lib/config/locales/en.yml +37 -1
- data/lib/mongoid.rb +23 -0
- data/lib/mongoid/association/depending.rb +1 -6
- data/lib/mongoid/association/many.rb +3 -3
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +36 -1
- data/lib/mongoid/association/referenced/has_many/proxy.rb +8 -1
- data/lib/mongoid/association/referenced/has_one/buildable.rb +9 -1
- data/lib/mongoid/atomic/modifiers.rb +1 -1
- data/lib/mongoid/attributes/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 -3
- data/lib/mongoid/criteria/queryable/storable.rb +3 -3
- data/lib/mongoid/document.rb +15 -3
- 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/matchable.rb +1 -149
- data/lib/mongoid/matcher.rb +103 -0
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +32 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +31 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +48 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/query_cache.rb +64 -62
- data/lib/mongoid/reloadable.rb +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/associations/embedded_spec.rb +94 -0
- data/spec/integration/associations/has_many_spec.rb +67 -14
- data/spec/integration/associations/has_one_spec.rb +67 -14
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
- data/spec/integration/atomic/modifiers_spec.rb +117 -0
- data/spec/integration/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 +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +194 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_spec.rb +100 -0
- data/spec/integration/matcher_spec.rb +189 -0
- data/spec/integration/server_query_spec.rb +142 -0
- data/spec/integration/stringified_symbol_field_spec.rb +190 -0
- data/spec/mongoid/association/depending_spec.rb +78 -26
- 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_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_spec.rb +84 -82
- data/spec/mongoid/criteria_spec.rb +204 -39
- data/spec/mongoid/document_fields_spec.rb +26 -0
- data/spec/mongoid/document_spec.rb +89 -15
- data/spec/mongoid/equality_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +85 -0
- data/spec/mongoid/factory_spec.rb +261 -28
- data/spec/mongoid/fields_spec.rb +48 -2
- data/spec/mongoid/findable_spec.rb +32 -0
- data/spec/mongoid/indexable_spec.rb +28 -2
- data/spec/mongoid/inspectable_spec.rb +29 -2
- data/spec/mongoid/interceptable_spec.rb +2 -2
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +37 -0
- data/spec/mongoid/persistable/creatable_spec.rb +108 -25
- data/spec/mongoid/persistable/deletable_spec.rb +86 -0
- data/spec/mongoid/persistable/savable_spec.rb +174 -16
- data/spec/mongoid/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/spec_helper.rb +2 -2
- data/spec/support/constraints.rb +24 -0
- 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/{app → support}/models/customer.rb +0 -0
- data/spec/{app → support}/models/customer_address.rb +0 -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 +0 -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 +26 -0
- data/spec/{app → support}/models/movie.rb +0 -0
- data/spec/{app → support}/models/my_hash.rb +0 -0
- data/spec/{app → support}/models/name.rb +0 -0
- data/spec/{app → support}/models/name_only.rb +0 -0
- data/spec/{app → support}/models/node.rb +0 -0
- data/spec/{app → support}/models/note.rb +0 -0
- data/spec/{app → support}/models/odd.rb +0 -0
- data/spec/support/models/order.rb +11 -0
- data/spec/{app → support}/models/ordered_post.rb +0 -0
- data/spec/{app → support}/models/ordered_preference.rb +0 -0
- data/spec/{app → support}/models/oscar.rb +0 -0
- data/spec/{app → support}/models/other_owner_object.rb +0 -0
- data/spec/{app → support}/models/override.rb +0 -0
- data/spec/{app → support}/models/ownable.rb +0 -0
- data/spec/{app → support}/models/owner.rb +2 -0
- data/spec/{app → support}/models/pack.rb +0 -0
- data/spec/{app → support}/models/page.rb +0 -0
- data/spec/{app → support}/models/page_question.rb +0 -0
- data/spec/{app → support}/models/palette.rb +1 -1
- data/spec/{app → support}/models/parent.rb +0 -0
- data/spec/{app → support}/models/parent_doc.rb +0 -0
- data/spec/{app → support}/models/passport.rb +0 -0
- data/spec/{app → support}/models/patient.rb +0 -0
- data/spec/{app → support}/models/pdf_writer.rb +0 -0
- data/spec/{app → support}/models/pencil.rb +0 -0
- data/spec/{app → support}/models/person.rb +1 -1
- data/spec/{app → support}/models/pet.rb +0 -0
- data/spec/{app → support}/models/pet_owner.rb +0 -0
- data/spec/{app → support}/models/phone.rb +0 -0
- data/spec/support/models/piano.rb +5 -0
- data/spec/{app → support}/models/pizza.rb +0 -0
- data/spec/{app → support}/models/player.rb +0 -0
- data/spec/{app → support}/models/post.rb +0 -0
- data/spec/{app → support}/models/post_genre.rb +0 -0
- data/spec/{app → support}/models/powerup.rb +0 -0
- data/spec/{app → support}/models/preference.rb +0 -0
- data/spec/{app → support}/models/princess.rb +0 -0
- data/spec/{app → support}/models/product.rb +0 -0
- data/spec/support/models/profile.rb +18 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -0
- data/spec/{app → support}/models/pub.rb +0 -0
- data/spec/support/models/publication.rb +5 -0
- data/spec/{app → support}/models/publication/encyclopedia.rb +0 -0
- data/spec/{app → support}/models/publication/review.rb +0 -0
- data/spec/{app → support}/models/purchase.rb +0 -0
- data/spec/{app → support}/models/question.rb +0 -0
- data/spec/{app → support}/models/quiz.rb +0 -0
- data/spec/{app → support}/models/rating.rb +0 -0
- data/spec/{app → support}/models/record.rb +0 -0
- data/spec/{app → support}/models/registry.rb +0 -0
- data/spec/{app → support}/models/role.rb +0 -0
- data/spec/{app → support}/models/root_category.rb +0 -0
- data/spec/{app → support}/models/sandwich.rb +0 -0
- data/spec/{app → support}/models/scheduler.rb +0 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
- data/spec/support/models/seat.rb +25 -0
- data/spec/{app → support}/models/seo.rb +0 -0
- data/spec/{app → support}/models/series.rb +0 -0
- data/spec/{app → support}/models/server.rb +0 -0
- data/spec/{app → support}/models/service.rb +0 -0
- data/spec/{app → support}/models/shape.rb +2 -2
- data/spec/{app → support}/models/shelf.rb +0 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -0
- data/spec/{app → support}/models/shipping_container.rb +0 -0
- data/spec/{app → support}/models/shipping_pack.rb +0 -0
- data/spec/{app → support}/models/shop.rb +0 -0
- data/spec/{app → support}/models/short_agent.rb +0 -0
- data/spec/{app → support}/models/short_quiz.rb +0 -0
- data/spec/{app → support}/models/simple.rb +0 -0
- data/spec/{app → support}/models/slave.rb +0 -0
- data/spec/{app → support}/models/song.rb +0 -0
- data/spec/{app → support}/models/sound.rb +0 -0
- data/spec/{app → support}/models/square.rb +0 -0
- data/spec/{app → support}/models/staff.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- data/spec/{app → support}/models/strategy.rb +0 -0
- data/spec/{app → support}/models/sub_item.rb +0 -0
- data/spec/{app → support}/models/subscription.rb +0 -0
- data/spec/{app → support}/models/survey.rb +0 -0
- data/spec/{app → support}/models/symptom.rb +0 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -0
- data/spec/{app → support}/models/target.rb +0 -0
- data/spec/{app → support}/models/template.rb +0 -0
- data/spec/{app → support}/models/thing.rb +0 -0
- data/spec/{app → support}/models/title.rb +0 -0
- data/spec/{app → support}/models/tool.rb +2 -2
- data/spec/{app → support}/models/topping.rb +0 -0
- data/spec/support/models/toy.rb +10 -0
- data/spec/{app → support}/models/track.rb +0 -0
- data/spec/{app → support}/models/translation.rb +0 -0
- data/spec/{app → support}/models/tree.rb +0 -0
- data/spec/{app → support}/models/truck.rb +2 -0
- data/spec/{app → support}/models/updatable.rb +0 -0
- data/spec/{app → support}/models/user.rb +0 -0
- data/spec/{app → support}/models/user_account.rb +0 -0
- data/spec/{app → support}/models/validation_callback.rb +0 -0
- data/spec/{app → support}/models/vehicle.rb +7 -2
- data/spec/{app → support}/models/version.rb +0 -0
- data/spec/{app → support}/models/vertex.rb +0 -0
- data/spec/{app → support}/models/vet_visit.rb +0 -0
- data/spec/{app → support}/models/video.rb +0 -0
- data/spec/{app → support}/models/video_game.rb +0 -0
- data/spec/{app → support}/models/weapon.rb +0 -0
- data/spec/{app → support}/models/wiki_page.rb +0 -0
- data/spec/{app → support}/models/word.rb +0 -0
- data/spec/{app → support}/models/word_origin.rb +0 -0
- data/spec/{app → support}/models/writer.rb +2 -2
- data/spec/support/spec_config.rb +1 -1
- metadata +617 -508
- metadata.gz.sig +3 -4
- 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/mongoid/fields_spec.rb
CHANGED
@@ -833,7 +833,8 @@ describe Mongoid::Fields do
|
|
833
833
|
end
|
834
834
|
|
835
835
|
it "does not return subclass defaults" do
|
836
|
-
expect(shape.pre_processed_defaults).to eq([ "_id", "x", "y"
|
836
|
+
expect(shape.pre_processed_defaults).to eq([ "_id", "x", "y" ])
|
837
|
+
expect(shape.post_processed_defaults).to eq([ "_type" ])
|
837
838
|
end
|
838
839
|
end
|
839
840
|
|
@@ -844,7 +845,8 @@ describe Mongoid::Fields do
|
|
844
845
|
end
|
845
846
|
|
846
847
|
it "has the parent and child defaults" do
|
847
|
-
expect(circle.pre_processed_defaults).to eq([ "_id", "x", "y", "
|
848
|
+
expect(circle.pre_processed_defaults).to eq([ "_id", "x", "y", "radius" ])
|
849
|
+
expect(circle.post_processed_defaults).to eq([ "_type" ])
|
848
850
|
end
|
849
851
|
end
|
850
852
|
end
|
@@ -1116,6 +1118,10 @@ describe Mongoid::Fields do
|
|
1116
1118
|
it "does not return subclass fields" do
|
1117
1119
|
expect(shape.fields.keys).to_not include("radius")
|
1118
1120
|
end
|
1121
|
+
|
1122
|
+
it 'includes _type field' do
|
1123
|
+
expect(shape.fields.keys).to include("_type")
|
1124
|
+
end
|
1119
1125
|
end
|
1120
1126
|
|
1121
1127
|
context "on subclasses" do
|
@@ -1135,6 +1141,28 @@ describe Mongoid::Fields do
|
|
1135
1141
|
it "includes the child fields" do
|
1136
1142
|
expect(circle.fields.keys).to include("radius")
|
1137
1143
|
end
|
1144
|
+
|
1145
|
+
it 'includes _type field' do
|
1146
|
+
expect(circle.fields.keys).to include("_type")
|
1147
|
+
end
|
1148
|
+
end
|
1149
|
+
|
1150
|
+
context "on new subclasses" do
|
1151
|
+
it "all subclasses get the discriminator key" do
|
1152
|
+
class DiscriminatorParent
|
1153
|
+
include Mongoid::Document
|
1154
|
+
end
|
1155
|
+
|
1156
|
+
class DiscriminatorChild1 < DiscriminatorParent
|
1157
|
+
end
|
1158
|
+
|
1159
|
+
class DiscriminatorChild2 < DiscriminatorParent
|
1160
|
+
end
|
1161
|
+
|
1162
|
+
expect(DiscriminatorParent.fields.keys).to include("_type")
|
1163
|
+
expect(DiscriminatorChild1.fields.keys).to include("_type")
|
1164
|
+
expect(DiscriminatorChild2.fields.keys).to include("_type")
|
1165
|
+
end
|
1138
1166
|
end
|
1139
1167
|
end
|
1140
1168
|
|
@@ -1352,4 +1380,22 @@ describe Mongoid::Fields do
|
|
1352
1380
|
end
|
1353
1381
|
end
|
1354
1382
|
end
|
1383
|
+
|
1384
|
+
describe '_type field' do
|
1385
|
+
context 'on parent class' do
|
1386
|
+
let(:shape) { Shape.new }
|
1387
|
+
|
1388
|
+
it 'is correctly set' do
|
1389
|
+
shape.attributes['_type'].should == 'Shape'
|
1390
|
+
end
|
1391
|
+
end
|
1392
|
+
|
1393
|
+
context 'on child class' do
|
1394
|
+
let(:circle) { Circle.new }
|
1395
|
+
|
1396
|
+
it 'is correctly set' do
|
1397
|
+
circle.attributes['_type'].should == 'Circle'
|
1398
|
+
end
|
1399
|
+
end
|
1400
|
+
end
|
1355
1401
|
end
|
@@ -479,6 +479,38 @@ describe Mongoid::Findable do
|
|
479
479
|
end
|
480
480
|
end
|
481
481
|
|
482
|
+
describe '.count' do
|
483
|
+
context 'when the collection is not empty' do
|
484
|
+
before do
|
485
|
+
Band.create!(name: "Tool")
|
486
|
+
Band.create!(name: "Photek")
|
487
|
+
end
|
488
|
+
|
489
|
+
it 'returns the currect count' do
|
490
|
+
expect(Band.count).to eq(2)
|
491
|
+
end
|
492
|
+
end
|
493
|
+
end
|
494
|
+
|
495
|
+
describe '.estimated_count' do
|
496
|
+
context 'when the collection is not empty' do
|
497
|
+
before do
|
498
|
+
Band.create(name: "Tool")
|
499
|
+
Band.create(name: "Photek")
|
500
|
+
end
|
501
|
+
|
502
|
+
it 'returns the correct count' do
|
503
|
+
expect(Band.estimated_count).to eq(2)
|
504
|
+
end
|
505
|
+
end
|
506
|
+
|
507
|
+
context 'when the collection is empty' do
|
508
|
+
it 'returns the correct count' do
|
509
|
+
expect(Band.estimated_count).to eq(0)
|
510
|
+
end
|
511
|
+
end
|
512
|
+
end
|
513
|
+
|
482
514
|
Mongoid::Criteria::Queryable::Selectable.forwardables.each do |method|
|
483
515
|
|
484
516
|
describe "##{method}" do
|
@@ -191,6 +191,32 @@ describe Mongoid::Indexable do
|
|
191
191
|
expect(spec.options).to eq(unique: false, background: true)
|
192
192
|
end
|
193
193
|
end
|
194
|
+
|
195
|
+
context "when using a custom discriminator_key" do
|
196
|
+
context "when indexes have not been added" do
|
197
|
+
let(:klass) do
|
198
|
+
Class.new do
|
199
|
+
include Mongoid::Document
|
200
|
+
self.discriminator_key = "dkey"
|
201
|
+
def self.hereditary?
|
202
|
+
true
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
before do
|
208
|
+
klass.add_indexes
|
209
|
+
end
|
210
|
+
|
211
|
+
let(:spec) do
|
212
|
+
klass.index_specification(dkey: 1)
|
213
|
+
end
|
214
|
+
|
215
|
+
it "adds the _type index" do
|
216
|
+
expect(spec.options).to eq(unique: false, background: true)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
194
220
|
end
|
195
221
|
|
196
222
|
describe ".index" do
|
@@ -383,7 +409,7 @@ describe Mongoid::Indexable do
|
|
383
409
|
end
|
384
410
|
end
|
385
411
|
|
386
|
-
context "when providing a
|
412
|
+
context "when providing a geospatial index" do
|
387
413
|
|
388
414
|
before do
|
389
415
|
klass.index({ location: "2d" }, { min: -200, max: 200, bits: 32 })
|
@@ -393,7 +419,7 @@ describe Mongoid::Indexable do
|
|
393
419
|
klass.index_specification(location: "2d").options
|
394
420
|
end
|
395
421
|
|
396
|
-
it "sets the
|
422
|
+
it "sets the geospatial index" do
|
397
423
|
expect(options).to eq({ min: -200, max: 200, bits: 32 })
|
398
424
|
end
|
399
425
|
end
|
@@ -26,12 +26,39 @@ describe Mongoid::Inspectable do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it "displays defined fields" do
|
29
|
-
expect(inspected).to include(
|
29
|
+
expect(inspected).to include(%q,title: "CEO",)
|
30
30
|
end
|
31
31
|
|
32
32
|
it "displays field aliases" do
|
33
33
|
expect(inspected).to include("t(test):")
|
34
34
|
end
|
35
|
+
|
36
|
+
it "displays the default discriminator key" do
|
37
|
+
expect(inspected).to include(%q,_type: "Person",)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when using a custom discriminator key" do
|
42
|
+
|
43
|
+
before do
|
44
|
+
Person.discriminator_key = "dkey"
|
45
|
+
end
|
46
|
+
|
47
|
+
after do
|
48
|
+
Person.discriminator_key = nil
|
49
|
+
end
|
50
|
+
|
51
|
+
let(:person) do
|
52
|
+
Person.new(title: "CEO")
|
53
|
+
end
|
54
|
+
|
55
|
+
let(:inspected) do
|
56
|
+
person.inspect
|
57
|
+
end
|
58
|
+
|
59
|
+
it "displays the new discriminator key" do
|
60
|
+
expect(inspected).to include(%q,dkey: "Person",)
|
61
|
+
end
|
35
62
|
end
|
36
63
|
|
37
64
|
context "when allowing dynamic fields" do
|
@@ -45,7 +72,7 @@ describe Mongoid::Inspectable do
|
|
45
72
|
end
|
46
73
|
|
47
74
|
it "includes dynamic attributes" do
|
48
|
-
expect(inspected).to include(
|
75
|
+
expect(inspected).to include(%q,some_attribute: "foo",)
|
49
76
|
end
|
50
77
|
end
|
51
78
|
end
|
@@ -1707,8 +1707,8 @@ describe Mongoid::Interceptable do
|
|
1707
1707
|
context "when loading a model multiple times" do
|
1708
1708
|
|
1709
1709
|
before do
|
1710
|
-
load "
|
1711
|
-
load "
|
1710
|
+
load File.join(MODELS, "callback_test.rb")
|
1711
|
+
load File.join(MODELS, "callback_test.rb")
|
1712
1712
|
end
|
1713
1713
|
|
1714
1714
|
let(:callback) do
|
@@ -0,0 +1,104 @@
|
|
1
|
+
- name: string key - matches
|
2
|
+
document:
|
3
|
+
# Document field names in MongoDB are always strings.
|
4
|
+
'42': foo
|
5
|
+
# The paths are also always strings.
|
6
|
+
key: '42'
|
7
|
+
|
8
|
+
result:
|
9
|
+
- foo
|
10
|
+
|
11
|
+
- name: string key - does not match
|
12
|
+
document:
|
13
|
+
# Document field names in MongoDB are always strings.
|
14
|
+
'42': foo
|
15
|
+
# The paths are also always strings.
|
16
|
+
key: '4'
|
17
|
+
|
18
|
+
result: []
|
19
|
+
|
20
|
+
- name: array value - matches
|
21
|
+
document:
|
22
|
+
'42':
|
23
|
+
- foo
|
24
|
+
key: '42'
|
25
|
+
|
26
|
+
result:
|
27
|
+
- ['foo']
|
28
|
+
|
29
|
+
- name: subfield of numeric key - matches
|
30
|
+
document:
|
31
|
+
'42':
|
32
|
+
foo: bar
|
33
|
+
key: 42.foo
|
34
|
+
|
35
|
+
result:
|
36
|
+
- bar
|
37
|
+
|
38
|
+
- name: numeric key under array
|
39
|
+
document:
|
40
|
+
a:
|
41
|
+
-
|
42
|
+
'42': bar
|
43
|
+
|
44
|
+
key: a.42
|
45
|
+
|
46
|
+
result:
|
47
|
+
- bar
|
48
|
+
|
49
|
+
- name: multiple values under numeric key under array
|
50
|
+
document: &numeric-key-under-array
|
51
|
+
a:
|
52
|
+
-
|
53
|
+
'42': bar
|
54
|
+
-
|
55
|
+
'42': foo
|
56
|
+
|
57
|
+
key: a.42
|
58
|
+
|
59
|
+
result:
|
60
|
+
- bar
|
61
|
+
- foo
|
62
|
+
|
63
|
+
- name: array indexing with values under numeric key under array
|
64
|
+
document: *numeric-key-under-array
|
65
|
+
|
66
|
+
key: a.1
|
67
|
+
|
68
|
+
result:
|
69
|
+
-
|
70
|
+
'42': foo
|
71
|
+
|
72
|
+
- name: multiple values under array under numeric key
|
73
|
+
document:
|
74
|
+
a:
|
75
|
+
'42':
|
76
|
+
-
|
77
|
+
foo: bar
|
78
|
+
-
|
79
|
+
foo: baq
|
80
|
+
|
81
|
+
key: a.42.foo
|
82
|
+
|
83
|
+
result:
|
84
|
+
- bar
|
85
|
+
- baq
|
86
|
+
|
87
|
+
- name: path component interpretable as both array index and hash key
|
88
|
+
document:
|
89
|
+
a:
|
90
|
+
-
|
91
|
+
'1': bar
|
92
|
+
-
|
93
|
+
'1': foo
|
94
|
+
|
95
|
+
key: a.1
|
96
|
+
|
97
|
+
result:
|
98
|
+
# The order of these results isn't guaranteed:
|
99
|
+
# 1 interpreted as the array index:
|
100
|
+
-
|
101
|
+
'1': foo
|
102
|
+
# 1 interpreted as hash key:
|
103
|
+
- bar
|
104
|
+
- foo
|
@@ -0,0 +1,239 @@
|
|
1
|
+
- name: scalar retrieval
|
2
|
+
document:
|
3
|
+
name: foo
|
4
|
+
key: name
|
5
|
+
|
6
|
+
result:
|
7
|
+
- foo
|
8
|
+
|
9
|
+
- name: scalar leaf
|
10
|
+
document: &foo-bar-foo-bar-2
|
11
|
+
foo:
|
12
|
+
bar:
|
13
|
+
foo:
|
14
|
+
bar:
|
15
|
+
2
|
16
|
+
key: foo.bar.foo.bar
|
17
|
+
|
18
|
+
result:
|
19
|
+
- 2
|
20
|
+
|
21
|
+
- name: scalar non-leaf
|
22
|
+
document: *foo-bar-foo-bar-2
|
23
|
+
key: foo.bar
|
24
|
+
|
25
|
+
result:
|
26
|
+
-
|
27
|
+
foo:
|
28
|
+
bar:
|
29
|
+
2
|
30
|
+
|
31
|
+
- name: null leaf
|
32
|
+
document:
|
33
|
+
name:
|
34
|
+
key: name
|
35
|
+
|
36
|
+
result:
|
37
|
+
- ~
|
38
|
+
|
39
|
+
- name: array leaf
|
40
|
+
document: &foo-bar-foo-bar-array-2
|
41
|
+
foo:
|
42
|
+
bar:
|
43
|
+
foo:
|
44
|
+
bar:
|
45
|
+
- 2
|
46
|
+
key: foo.bar.foo.bar
|
47
|
+
|
48
|
+
result:
|
49
|
+
- [2]
|
50
|
+
|
51
|
+
- name: scalar non-leaf
|
52
|
+
document: *foo-bar-foo-bar-array-2
|
53
|
+
key: foo.bar
|
54
|
+
|
55
|
+
result:
|
56
|
+
-
|
57
|
+
foo:
|
58
|
+
bar:
|
59
|
+
- 2
|
60
|
+
|
61
|
+
- name: array non-leaf
|
62
|
+
document: &foo-bar-array-foo-bar-2
|
63
|
+
foo:
|
64
|
+
-
|
65
|
+
bar:
|
66
|
+
foo:
|
67
|
+
bar:
|
68
|
+
2
|
69
|
+
key: foo.bar.foo.bar
|
70
|
+
|
71
|
+
result:
|
72
|
+
- 2
|
73
|
+
|
74
|
+
- name: array non-leaf with non-leaf query
|
75
|
+
document: *foo-bar-array-foo-bar-2
|
76
|
+
key: foo.bar
|
77
|
+
|
78
|
+
result:
|
79
|
+
-
|
80
|
+
foo:
|
81
|
+
bar:
|
82
|
+
2
|
83
|
+
|
84
|
+
- name: array non-leaf with query for missing non-leaf key
|
85
|
+
document: *foo-bar-array-foo-bar-2
|
86
|
+
key: foo.missing
|
87
|
+
|
88
|
+
result: []
|
89
|
+
|
90
|
+
- name: path past end of document
|
91
|
+
document: &foo-hello-world
|
92
|
+
foo:
|
93
|
+
hello: world
|
94
|
+
key: foo.bar.foo.bar
|
95
|
+
|
96
|
+
result: []
|
97
|
+
|
98
|
+
- name: query for missing leaf key
|
99
|
+
document: *foo-hello-world
|
100
|
+
key: foo.bar
|
101
|
+
|
102
|
+
result: []
|
103
|
+
|
104
|
+
- name: numeric path component when traversing hash
|
105
|
+
document:
|
106
|
+
foo:
|
107
|
+
"10":
|
108
|
+
42
|
109
|
+
key: "foo.10"
|
110
|
+
|
111
|
+
result:
|
112
|
+
- 42
|
113
|
+
|
114
|
+
- name: array index - hash leaf
|
115
|
+
document: &foo-one-two
|
116
|
+
foo:
|
117
|
+
- one: 1
|
118
|
+
- two: 2
|
119
|
+
bar: [3, 4]
|
120
|
+
key: foo.1.two
|
121
|
+
|
122
|
+
result:
|
123
|
+
- 2
|
124
|
+
|
125
|
+
- name: array index - hash non-leaf
|
126
|
+
document: *foo-one-two
|
127
|
+
key: foo.1
|
128
|
+
|
129
|
+
result:
|
130
|
+
-
|
131
|
+
two: 2
|
132
|
+
|
133
|
+
- name: array index - scalar leaf
|
134
|
+
document: *foo-one-two
|
135
|
+
key: bar.1
|
136
|
+
|
137
|
+
result:
|
138
|
+
- 4
|
139
|
+
|
140
|
+
- name: array index - scalar leaf - missing
|
141
|
+
document: *foo-one-two
|
142
|
+
key: bar.2
|
143
|
+
|
144
|
+
result: []
|
145
|
+
|
146
|
+
- name: array index - scalar leaf - missing with further hash subscription
|
147
|
+
document: *foo-one-two
|
148
|
+
key: bar.2.any
|
149
|
+
|
150
|
+
result: []
|
151
|
+
|
152
|
+
- name: non-sequential nested arrays - hash leaf - one value
|
153
|
+
document: &books-authors
|
154
|
+
books:
|
155
|
+
-
|
156
|
+
authors:
|
157
|
+
- name: Steve
|
158
|
+
-
|
159
|
+
authors:
|
160
|
+
- name: Boris
|
161
|
+
- name: Pasha
|
162
|
+
key: books.0.authors.name
|
163
|
+
|
164
|
+
result:
|
165
|
+
- Steve
|
166
|
+
|
167
|
+
- name: non-sequential nested arrays - hash non-leaf - one value
|
168
|
+
document: *books-authors
|
169
|
+
key: books.0
|
170
|
+
|
171
|
+
result:
|
172
|
+
-
|
173
|
+
authors:
|
174
|
+
- name: Steve
|
175
|
+
|
176
|
+
- name: non-sequential nested arrays - hash non-leaf - multiple values
|
177
|
+
document: *books-authors
|
178
|
+
key: books.1
|
179
|
+
|
180
|
+
result:
|
181
|
+
-
|
182
|
+
authors:
|
183
|
+
- name: Boris
|
184
|
+
- name: Pasha
|
185
|
+
|
186
|
+
- name: sequential nested arrays - numerically indexed leaf
|
187
|
+
document: &groups
|
188
|
+
groups:
|
189
|
+
- [1]
|
190
|
+
key: groups.0.0
|
191
|
+
|
192
|
+
result:
|
193
|
+
- 1
|
194
|
+
|
195
|
+
- name: sequential nested arrays - numerically indexed leaf - missing
|
196
|
+
document: *groups
|
197
|
+
key: groups.0.1
|
198
|
+
|
199
|
+
result: []
|
200
|
+
|
201
|
+
- name: sequential nested arrays - missing hash path through non-leaf
|
202
|
+
document: *groups
|
203
|
+
key: groups.missing
|
204
|
+
|
205
|
+
result: []
|
206
|
+
|
207
|
+
- name: sequential nested arrays - missing hash path through leaf
|
208
|
+
document: *groups
|
209
|
+
key: groups.0.missing
|
210
|
+
|
211
|
+
result: []
|
212
|
+
|
213
|
+
- name: sequential nested arrays - missing hash path past leaf
|
214
|
+
document: *groups
|
215
|
+
key: groups.0.0.missing
|
216
|
+
|
217
|
+
result: []
|
218
|
+
|
219
|
+
- name: mix of arrays and hashes in an array
|
220
|
+
document:
|
221
|
+
foo:
|
222
|
+
-
|
223
|
+
-
|
224
|
+
bar: 1
|
225
|
+
- bar: 2
|
226
|
+
key: foo.bar
|
227
|
+
|
228
|
+
result:
|
229
|
+
- 2
|
230
|
+
|
231
|
+
- name: numeric index through a primitive value not supporting subscription operator
|
232
|
+
document:
|
233
|
+
occupants:
|
234
|
+
-
|
235
|
+
age: 20
|
236
|
+
key:
|
237
|
+
occupants.0.age.0
|
238
|
+
|
239
|
+
result: []
|