mongoid 7.1.11 → 7.2.0.rc1
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/README.md +10 -3
- data/Rakefile +11 -30
- data/lib/config/locales/en.yml +37 -14
- data/lib/mongoid/association/depending.rb +1 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
- data/lib/mongoid/association/many.rb +3 -3
- data/lib/mongoid/association/proxy.rb +1 -1
- 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 +37 -2
- data/lib/mongoid/association/referenced/has_many/proxy.rb +9 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/proxy.rb +1 -6
- data/lib/mongoid/atomic/modifiers.rb +1 -1
- data/lib/mongoid/attributes/dynamic.rb +1 -1
- data/lib/mongoid/attributes.rb +1 -8
- data/lib/mongoid/clients/factory.rb +17 -0
- data/lib/mongoid/composable.rb +1 -0
- data/lib/mongoid/config/environment.rb +1 -9
- data/lib/mongoid/config.rb +3 -0
- data/lib/mongoid/contextual/atomic.rb +2 -7
- data/lib/mongoid/contextual/mongo.rb +23 -4
- data/lib/mongoid/contextual/none.rb +0 -3
- data/lib/mongoid/copyable.rb +2 -2
- 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 +23 -8
- data/lib/mongoid/criteria/queryable/selector.rb +7 -3
- data/lib/mongoid/criteria/queryable/storable.rb +7 -7
- data/lib/mongoid/criteria.rb +58 -8
- data/lib/mongoid/document.rb +19 -9
- 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/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/errors.rb +7 -2
- data/lib/mongoid/factory.rb +27 -10
- 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 +2 -4
- data/lib/mongoid/matchable.rb +1 -149
- 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 +52 -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/matcher.rb +127 -0
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistence_context.rb +1 -3
- data/lib/mongoid/query_cache.rb +64 -62
- data/lib/mongoid/reloadable.rb +2 -7
- data/lib/mongoid/serializable.rb +1 -1
- data/lib/mongoid/tasks/database.rb +1 -1
- data/lib/mongoid/traversable.rb +111 -4
- data/lib/mongoid/validatable/associated.rb +1 -1
- data/lib/mongoid/validatable/presence.rb +3 -3
- data/lib/mongoid/validatable/uniqueness.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid.rb +23 -1
- data/lib/rails/generators/mongoid/config/config_generator.rb +1 -8
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
- data/spec/integration/app_spec.rb +88 -178
- data/spec/integration/associations/embedded_spec.rb +94 -0
- data/spec/integration/associations/has_many_spec.rb +39 -46
- data/spec/integration/associations/has_one_spec.rb +39 -46
- 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/document_spec.rb +0 -21
- 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/gte.yml +132 -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/lte.yml +132 -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/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/lite_spec_helper.rb +7 -7
- data/spec/mongoid/association/depending_spec.rb +78 -26
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +0 -50
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +37 -17
- 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/belongs_to/proxy_spec.rb +0 -17
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +460 -186
- data/spec/mongoid/association/referenced/has_many_models.rb +9 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +9 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -41
- data/spec/mongoid/atomic_spec.rb +23 -0
- data/spec/mongoid/attributes/nested_spec.rb +1 -1
- data/spec/mongoid/attributes_spec.rb +0 -241
- data/spec/mongoid/clients/factory_spec.rb +35 -9
- data/spec/mongoid/clients/options_spec.rb +3 -11
- data/spec/mongoid/clients/sessions_spec.rb +1 -6
- data/spec/mongoid/config/environment_spec.rb +8 -86
- data/spec/mongoid/config_spec.rb +28 -0
- data/spec/mongoid/contextual/atomic_spec.rb +29 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +1 -1
- data/spec/mongoid/contextual/mongo_spec.rb +70 -16
- data/spec/mongoid/copyable_spec.rb +153 -1
- data/spec/mongoid/copyable_spec_models.rb +14 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -36
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +84 -82
- data/spec/mongoid/criteria_spec.rb +204 -43
- data/spec/mongoid/document_query_spec.rb +0 -51
- data/spec/mongoid/document_spec.rb +90 -36
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +8 -20
- 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/persistable/settable_spec.rb +0 -30
- data/spec/mongoid/persistable/updatable_spec.rb +0 -2
- data/spec/mongoid/persistable_spec.rb +2 -2
- 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 +3 -5
- data/spec/support/child_process_helper.rb +79 -0
- data/spec/support/constraints.rb +250 -0
- data/spec/support/helpers.rb +1 -1
- data/spec/support/lite_constraints.rb +22 -0
- 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 -4
- 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/pull_request.rb +0 -0
- data/spec/{app → support}/models/coding.rb +1 -1
- 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/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 -6
- 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/{app → support}/models/mop.rb +0 -10
- 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/{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 -12
- 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/{app → support}/models/publication/encyclopedia.rb +0 -0
- data/spec/{app → support}/models/publication/review.rb +0 -0
- data/spec/support/models/publication.rb +5 -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 -1
- 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 -1
- 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 -9
- data/spec/support/spec_organizer.rb +130 -0
- data.tar.gz.sig +0 -0
- metadata +847 -844
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/empty_config_file.rb +0 -26
- data/lib/mongoid/errors/invalid_config_file.rb +0 -26
- 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/customer.rb +0 -11
- data/spec/app/models/customer_address.rb +0 -12
- data/spec/app/models/publication.rb +0 -5
- data/spec/integration/associations/embeds_many_spec.rb +0 -24
- data/spec/integration/associations/embeds_one_spec.rb +0 -24
- data/spec/integration/callbacks_models.rb +0 -49
- data/spec/integration/callbacks_spec.rb +0 -216
- data/spec/integration/contextual/empty_spec.rb +0 -142
- data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -32
- 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/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -226
- data/spec/shared/lib/mrss/constraints.rb +0 -385
- data/spec/shared/lib/mrss/docker_runner.rb +0 -271
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -200
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -15
- data/spec/shared/share/Dockerfile.erb +0 -323
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/distro.sh +0 -73
- data/spec/shared/shlib/server.sh +0 -367
- data/spec/shared/shlib/set_env.sh +0 -131
|
@@ -116,7 +116,50 @@ describe Mongoid::Document do
|
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
it "should clear descendants' cache" do
|
|
119
|
-
expect(Person._types).to include(descendant.
|
|
119
|
+
expect(Person._types).to include(descendant.discriminator_value)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe "._mongoid_clear_types" do
|
|
125
|
+
|
|
126
|
+
context "when changing the discriminator_value" do
|
|
127
|
+
|
|
128
|
+
before do
|
|
129
|
+
Kangaroo._types
|
|
130
|
+
Kangaroo.discriminator_value = "dvalue"
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
after do
|
|
134
|
+
Kangaroo.discriminator_value = nil
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "has the correct _types" do
|
|
138
|
+
expect(Kangaroo._types).to eq(["dvalue"])
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
context "when changing the discriminator_value in child" do
|
|
143
|
+
|
|
144
|
+
before do
|
|
145
|
+
Shape._types
|
|
146
|
+
Circle.discriminator_value = "dvalue"
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
after do
|
|
150
|
+
Circle.discriminator_value = nil
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it "has the correct _types" do
|
|
154
|
+
expect(Circle._types).to eq(["dvalue"])
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "has the new Circle discriminator value" do
|
|
158
|
+
expect(Shape._types).to include("dvalue")
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "doesn't have the old Circle discriminator value" do
|
|
162
|
+
expect(Shape._types).to_not include("Cirlce")
|
|
120
163
|
end
|
|
121
164
|
end
|
|
122
165
|
end
|
|
@@ -458,7 +501,7 @@ describe Mongoid::Document do
|
|
|
458
501
|
end
|
|
459
502
|
end
|
|
460
503
|
|
|
461
|
-
context '
|
|
504
|
+
context ':compact option' do
|
|
462
505
|
# Since rails 6 differs in how it treats id fields,
|
|
463
506
|
# run this test on one version of rails. Currently rails 6 is in beta,
|
|
464
507
|
# when it is released this version should be changed to 6.
|
|
@@ -470,26 +513,6 @@ describe Mongoid::Document do
|
|
|
470
513
|
expect(church.as_json.keys.sort).to eq(%w(_id location name))
|
|
471
514
|
end
|
|
472
515
|
|
|
473
|
-
context 'deprecation' do
|
|
474
|
-
let(:church) do
|
|
475
|
-
Church.create!(name: 'St. Basil')
|
|
476
|
-
end
|
|
477
|
-
|
|
478
|
-
let(:message) do
|
|
479
|
-
'#as_json :compact option is deprecated. Please call #compact on the returned Hash object instead.'
|
|
480
|
-
end
|
|
481
|
-
|
|
482
|
-
it 'logs a deprecation warning when :compact is given' do
|
|
483
|
-
expect_any_instance_of(Logger).to receive(:warn).with(message)
|
|
484
|
-
church.as_json(compact: true)
|
|
485
|
-
end
|
|
486
|
-
|
|
487
|
-
it 'does not log a deprecation warning when :compact is not given' do
|
|
488
|
-
expect_any_instance_of(Logger).to_not receive(:warn).with(message)
|
|
489
|
-
church.as_json
|
|
490
|
-
end
|
|
491
|
-
end
|
|
492
|
-
|
|
493
516
|
context 'there is a nil valued attribute' do
|
|
494
517
|
let(:church) do
|
|
495
518
|
Church.create!(name: 'St. Basil')
|
|
@@ -901,27 +924,58 @@ describe Mongoid::Document do
|
|
|
901
924
|
end
|
|
902
925
|
|
|
903
926
|
context "when no embedded documents are present" do
|
|
927
|
+
context "when using the default discriminator key" do
|
|
928
|
+
let(:person) do
|
|
929
|
+
manager.becomes(Person)
|
|
930
|
+
end
|
|
904
931
|
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
932
|
+
it "copies attributes" do
|
|
933
|
+
expect(person.title).to eq('Sir')
|
|
934
|
+
end
|
|
908
935
|
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
936
|
+
it "keeps the same object id" do
|
|
937
|
+
expect(person.id).to eq(manager.id)
|
|
938
|
+
end
|
|
912
939
|
|
|
913
|
-
|
|
914
|
-
|
|
940
|
+
it "sets the class type" do
|
|
941
|
+
expect(person._type).to eq("Person")
|
|
942
|
+
end
|
|
943
|
+
|
|
944
|
+
it "raises an error when inappropriate class is provided" do
|
|
945
|
+
expect {
|
|
946
|
+
manager.becomes(String)
|
|
947
|
+
}.to raise_error(ArgumentError, /A class which includes Mongoid::Document is expected/)
|
|
948
|
+
end
|
|
915
949
|
end
|
|
916
950
|
|
|
917
|
-
|
|
918
|
-
|
|
951
|
+
context "when using a custom discriminator key" do
|
|
952
|
+
before do
|
|
953
|
+
Person.discriminator_key = "dkey"
|
|
954
|
+
end
|
|
955
|
+
|
|
956
|
+
after do
|
|
957
|
+
Person.discriminator_key = nil
|
|
958
|
+
end
|
|
959
|
+
|
|
960
|
+
it "sets the class type with new discriminator key" do
|
|
961
|
+
expect(person.dkey).to eq("Person")
|
|
962
|
+
end
|
|
919
963
|
end
|
|
920
964
|
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
965
|
+
context "when using a custom discriminator key and discriminator value" do
|
|
966
|
+
before do
|
|
967
|
+
Person.discriminator_key = "dkey"
|
|
968
|
+
Person.discriminator_value = "dvalue"
|
|
969
|
+
end
|
|
970
|
+
|
|
971
|
+
after do
|
|
972
|
+
Person.discriminator_key = nil
|
|
973
|
+
Person.discriminator_value = nil
|
|
974
|
+
end
|
|
975
|
+
|
|
976
|
+
it "sets the class type with new discriminator key" do
|
|
977
|
+
expect(person.dkey).to eq("dvalue")
|
|
978
|
+
end
|
|
925
979
|
end
|
|
926
980
|
end
|
|
927
981
|
|
|
@@ -19,7 +19,7 @@ describe Mongoid::Errors::DeleteRestriction do
|
|
|
19
19
|
|
|
20
20
|
it "contains the summary in the message" do
|
|
21
21
|
expect(error.message).to include(
|
|
22
|
-
"When defining 'drugs' with a :dependent => :
|
|
22
|
+
"When defining 'drugs' with a :dependent => :restrict_with_error,"
|
|
23
23
|
)
|
|
24
24
|
end
|
|
25
25
|
|
|
@@ -10,26 +10,14 @@ describe Mongoid::Errors::MongoidError do
|
|
|
10
10
|
let(:options) { {} }
|
|
11
11
|
|
|
12
12
|
before do
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
and_return(name)
|
|
22
|
-
end
|
|
23
|
-
else
|
|
24
|
-
{"message_title" => "message", "summary_title" => "summary", "resolution_title" => "resolution"}.each do |key, name|
|
|
25
|
-
expect(::I18n).to receive(:translate).with("mongoid.errors.messages.#{key}", {}).and_return(name)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
["message", "summary", "resolution"].each do |name|
|
|
29
|
-
expect(::I18n).to receive(:translate).
|
|
30
|
-
with("mongoid.errors.messages.#{key}.#{name}", {}).
|
|
31
|
-
and_return(name)
|
|
32
|
-
end
|
|
13
|
+
{"message_title" => "message", "summary_title" => "summary", "resolution_title" => "resolution"}.each do |key, name|
|
|
14
|
+
expect(::I18n).to receive(:translate).with("mongoid.errors.messages.#{key}", {}).and_return(name)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
["message", "summary", "resolution"].each do |name|
|
|
18
|
+
expect(::I18n).to receive(:translate).
|
|
19
|
+
with("mongoid.errors.messages.#{key}.#{name}", {}).
|
|
20
|
+
and_return(name)
|
|
33
21
|
end
|
|
34
22
|
|
|
35
23
|
error.compose_message(key, options)
|
|
@@ -78,28 +78,98 @@ describe Mongoid::Factory do
|
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
context "when type is not preset" do
|
|
81
|
+
context "when using the default discriminator key" do
|
|
82
|
+
let(:attributes) do
|
|
83
|
+
{ "title" => "Sir" }
|
|
84
|
+
end
|
|
81
85
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
let(:person) do
|
|
87
|
+
described_class.build(Person, attributes)
|
|
88
|
+
end
|
|
85
89
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
90
|
+
it "instantiates based on the provided class" do
|
|
91
|
+
expect(person.title).to eq("Sir")
|
|
92
|
+
end
|
|
89
93
|
|
|
90
|
-
|
|
91
|
-
|
|
94
|
+
context "when the type is a symbol" do
|
|
95
|
+
|
|
96
|
+
let(:person) do
|
|
97
|
+
described_class.build(Person, { :_type => "Doctor" })
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "instantiates the subclass" do
|
|
101
|
+
expect(person.class).to eq(Doctor)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
92
104
|
end
|
|
93
|
-
end
|
|
94
105
|
|
|
95
|
-
|
|
106
|
+
context "when using a custom discriminator key" do
|
|
107
|
+
before do
|
|
108
|
+
Person.discriminator_key = "dkey"
|
|
109
|
+
end
|
|
96
110
|
|
|
97
|
-
|
|
98
|
-
|
|
111
|
+
after do
|
|
112
|
+
Person.discriminator_key = nil
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
let(:attributes) do
|
|
116
|
+
{ "title" => "Sir" }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
let(:person) do
|
|
120
|
+
described_class.build(Person, attributes)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "instantiates based on the provided class" do
|
|
124
|
+
expect(person.title).to eq("Sir")
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
context "when the type is a symbol" do
|
|
128
|
+
|
|
129
|
+
let(:person) do
|
|
130
|
+
described_class.build(Person, { :dkey => "Doctor" })
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it "instantiates the subclass" do
|
|
134
|
+
expect(person.class).to eq(Doctor)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
99
137
|
end
|
|
100
138
|
|
|
101
|
-
|
|
102
|
-
|
|
139
|
+
context "when using a custom discriminator key and value" do
|
|
140
|
+
before do
|
|
141
|
+
Person.discriminator_key = "dkey"
|
|
142
|
+
Doctor.discriminator_value = "dvalue"
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
after do
|
|
146
|
+
Person.discriminator_key = nil
|
|
147
|
+
Doctor.discriminator_value = nil
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
let(:attributes) do
|
|
151
|
+
{ "title" => "Sir", "dkey" => "dvalue" }
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
let(:doctor) do
|
|
155
|
+
described_class.build(Person, attributes)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it "instantiates based on the provided class" do
|
|
159
|
+
expect(doctor.title).to eq("Sir")
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "generates based on the provided class" do
|
|
163
|
+
expect(doctor).to be_a(Person)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it "sets the attributes" do
|
|
167
|
+
expect(doctor.title).to eq("Sir")
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it "has the correct discriminator key/value" do
|
|
171
|
+
expect(doctor.dkey).to eq("dvalue")
|
|
172
|
+
end
|
|
103
173
|
end
|
|
104
174
|
end
|
|
105
175
|
end
|
|
@@ -109,15 +179,64 @@ describe Mongoid::Factory do
|
|
|
109
179
|
context "when the attributes are nil" do
|
|
110
180
|
|
|
111
181
|
let(:document) do
|
|
112
|
-
described_class.from_db(
|
|
182
|
+
described_class.from_db(model_cls, nil)
|
|
113
183
|
end
|
|
114
184
|
|
|
115
|
-
|
|
116
|
-
|
|
185
|
+
context 'when model class does not use inheritance' do
|
|
186
|
+
context 'when model overwrites _id field to not have a default' do
|
|
187
|
+
let(:model_cls) { Idnodef }
|
|
188
|
+
|
|
189
|
+
it "generates based on the provided class" do
|
|
190
|
+
expect(document).to be_a(model_cls)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it "sets the attributes to empty" do
|
|
194
|
+
expect(document.attributes).to be_empty
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
context 'with default _id auto-assignment behavior' do
|
|
199
|
+
let(:model_cls) { Agency }
|
|
200
|
+
|
|
201
|
+
it "generates based on the provided class" do
|
|
202
|
+
expect(document).to be_a(model_cls)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it "sets the attributes to generated _id only" do
|
|
206
|
+
document.attributes.should == {'_id' => document.id}
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
context 'when model class is an inheritance root' do
|
|
212
|
+
let(:model_cls) { Address }
|
|
213
|
+
|
|
214
|
+
before do
|
|
215
|
+
# Ensure a child is defined
|
|
216
|
+
ShipmentAddress.superclass.should be model_cls
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
it "generates based on the provided class" do
|
|
220
|
+
expect(document).to be_a(model_cls)
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it "sets the attributes to _type only" do
|
|
224
|
+
# Note that Address provides the _id override.
|
|
225
|
+
document.attributes.should == {'_type' => 'Address'}
|
|
226
|
+
end
|
|
117
227
|
end
|
|
118
228
|
|
|
119
|
-
|
|
120
|
-
|
|
229
|
+
context 'when model class is an inheritance leaf' do
|
|
230
|
+
let(:model_cls) { ShipmentAddress }
|
|
231
|
+
|
|
232
|
+
it "generates based on the provided class" do
|
|
233
|
+
expect(document).to be_a(model_cls)
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
it "sets the attributes to empty" do
|
|
237
|
+
# Note that Address provides the _id override.
|
|
238
|
+
document.attributes.should == {'_type' => 'ShipmentAddress'}
|
|
239
|
+
end
|
|
121
240
|
end
|
|
122
241
|
end
|
|
123
242
|
|
|
@@ -179,20 +298,80 @@ describe Mongoid::Factory do
|
|
|
179
298
|
|
|
180
299
|
context "when a type is not in the attributes" do
|
|
181
300
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
301
|
+
context "when using the default discriminator key" do
|
|
302
|
+
let(:attributes) do
|
|
303
|
+
{ "title" => "Sir" }
|
|
304
|
+
end
|
|
185
305
|
|
|
186
|
-
|
|
187
|
-
|
|
306
|
+
let(:document) do
|
|
307
|
+
described_class.from_db(Person, attributes)
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
it "generates based on the provided class" do
|
|
311
|
+
expect(document).to be_a(Person)
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
it "sets the attributes" do
|
|
315
|
+
expect(document.title).to eq("Sir")
|
|
316
|
+
end
|
|
188
317
|
end
|
|
189
318
|
|
|
190
|
-
|
|
191
|
-
|
|
319
|
+
context "when using a custom discriminator key" do
|
|
320
|
+
before do
|
|
321
|
+
Person.discriminator_key = "dkey"
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
after do
|
|
325
|
+
Person.discriminator_key = nil
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
let(:attributes) do
|
|
329
|
+
{ "title" => "Sir" }
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
let(:document) do
|
|
333
|
+
described_class.from_db(Person, attributes)
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
it "generates based on the provided class" do
|
|
337
|
+
expect(document).to be_a(Person)
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
it "sets the attributes" do
|
|
341
|
+
expect(document.title).to eq("Sir")
|
|
342
|
+
end
|
|
192
343
|
end
|
|
193
344
|
|
|
194
|
-
|
|
195
|
-
|
|
345
|
+
context "when using a custom discriminator key and discriminator value" do
|
|
346
|
+
before do
|
|
347
|
+
Person.discriminator_key = "dkey"
|
|
348
|
+
Person.discriminator_value = "dvalue"
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
after do
|
|
352
|
+
Person.discriminator_key = nil
|
|
353
|
+
Person.discriminator_value = nil
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
let(:attributes) do
|
|
357
|
+
{ "title" => "Sir" }
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
let(:document) do
|
|
361
|
+
described_class.from_db(Person, attributes)
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
it "generates based on the provided class" do
|
|
365
|
+
expect(document).to be_a(Person)
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
it "sets the attributes" do
|
|
369
|
+
expect(document.title).to eq("Sir")
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
it "has the correct discriminator key/value" do
|
|
373
|
+
expect(document.dkey).to eq("dvalue")
|
|
374
|
+
end
|
|
196
375
|
end
|
|
197
376
|
end
|
|
198
377
|
|
|
@@ -211,7 +390,61 @@ describe Mongoid::Factory do
|
|
|
211
390
|
person
|
|
212
391
|
}.to raise_exception(Mongoid::Errors::UnknownModel)
|
|
213
392
|
end
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
context 'when type does not correspond to a Class name with custom discriminator key' do
|
|
396
|
+
|
|
397
|
+
before do
|
|
398
|
+
Person.discriminator_key = "dkey"
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
after do
|
|
402
|
+
Person.discriminator_key = nil
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
let(:attributes) do
|
|
406
|
+
{ "title" => "Sir", "dkey" => "invalid_class_name" }
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
let(:person) do
|
|
410
|
+
described_class.from_db(Person, attributes)
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
it 'raises a exception' do
|
|
414
|
+
expect {
|
|
415
|
+
person
|
|
416
|
+
}.to raise_exception(Mongoid::Errors::UnknownModel)
|
|
417
|
+
end
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
context 'when type does not correspond to a custom discriminator_value' do
|
|
421
|
+
before do
|
|
422
|
+
Person.discriminator_value = "dvalue"
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
after do
|
|
426
|
+
Person.discriminator_value = nil
|
|
427
|
+
end
|
|
214
428
|
|
|
429
|
+
let(:attributes) do
|
|
430
|
+
{ "title" => "Sir", "_type" => "dvalue" }
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
let(:person) do
|
|
434
|
+
described_class.from_db(Person, attributes)
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
it "generates based on the provided class" do
|
|
438
|
+
expect(person).to be_a(Person)
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
it "sets the attributes" do
|
|
442
|
+
expect(person.title).to eq("Sir")
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
it "has the correct discriminator key/value" do
|
|
446
|
+
expect(person._type).to eq("dvalue")
|
|
447
|
+
end
|
|
215
448
|
end
|
|
216
449
|
|
|
217
450
|
context 'when type is correct but the instantiation raises a NoMethodError' do
|
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
|