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
|
@@ -6,6 +6,9 @@ class HmmCompany
|
|
|
6
6
|
|
|
7
7
|
field :p, type: Integer
|
|
8
8
|
has_many :emails, primary_key: :p, foreign_key: :f, class_name: 'HmmEmail'
|
|
9
|
+
|
|
10
|
+
# The addresses are added with different dependency mechanisms in tests:
|
|
11
|
+
#has_many :addresses, class_name: 'HmmAddress', dependent: :destroy
|
|
9
12
|
end
|
|
10
13
|
|
|
11
14
|
class HmmEmail
|
|
@@ -15,6 +18,12 @@ class HmmEmail
|
|
|
15
18
|
belongs_to :company, primary_key: :p, foreign_key: :f, class_name: 'HmmCompany'
|
|
16
19
|
end
|
|
17
20
|
|
|
21
|
+
class HmmAddress
|
|
22
|
+
include Mongoid::Document
|
|
23
|
+
|
|
24
|
+
belongs_to :company, class_name: 'HmmCompany'
|
|
25
|
+
end
|
|
26
|
+
|
|
18
27
|
class HmmSchool
|
|
19
28
|
include Mongoid::Document
|
|
20
29
|
|
|
@@ -6,6 +6,9 @@ class HomCollege
|
|
|
6
6
|
|
|
7
7
|
has_one :accreditation, class_name: 'HomAccreditation'
|
|
8
8
|
|
|
9
|
+
# The address is added with different dependency mechanisms in tests:
|
|
10
|
+
#has_one :address, class_name: 'HomAddress', dependent: :destroy
|
|
11
|
+
|
|
9
12
|
field :state, type: String
|
|
10
13
|
end
|
|
11
14
|
|
|
@@ -24,6 +27,12 @@ class HomAccreditation::Child
|
|
|
24
27
|
belongs_to :hom_college
|
|
25
28
|
end
|
|
26
29
|
|
|
30
|
+
class HomAddress
|
|
31
|
+
include Mongoid::Document
|
|
32
|
+
|
|
33
|
+
belongs_to :college, class_name: 'HomCollege'
|
|
34
|
+
end
|
|
35
|
+
|
|
27
36
|
module HomNs
|
|
28
37
|
class PrefixedParent
|
|
29
38
|
include Mongoid::Document
|
|
@@ -9,6 +9,26 @@ describe Mongoid::Atomic::Modifiers do
|
|
|
9
9
|
described_class.new
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
+
describe "#push_conflict?" do
|
|
13
|
+
let(:result) { modifiers.send(:push_conflict?, field) }
|
|
14
|
+
|
|
15
|
+
context 'for embeds many subdocument' do
|
|
16
|
+
context 'when another field on subdocument is being set' do
|
|
17
|
+
before do
|
|
18
|
+
modifiers.set('foo.0.a' => 1)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
let(:field) { 'foo' }
|
|
22
|
+
|
|
23
|
+
it 'does not conflict' do
|
|
24
|
+
pending 'https://jira.mongodb.org/browse/MONGOID-4982'
|
|
25
|
+
|
|
26
|
+
result.should be false
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
12
32
|
describe "#add_to_set" do
|
|
13
33
|
|
|
14
34
|
context "when the unique adds are empty" do
|
|
@@ -344,6 +364,33 @@ describe Mongoid::Atomic::Modifiers do
|
|
|
344
364
|
end
|
|
345
365
|
end
|
|
346
366
|
end
|
|
367
|
+
|
|
368
|
+
context 'when there is another operation on a sibling of a key which is nested' do
|
|
369
|
+
|
|
370
|
+
let(:first_op) do
|
|
371
|
+
{ "addresses.0.name" => 'test' }
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
let(:push_op) do
|
|
375
|
+
{ "addresses.0.locations" => { "street" => "Oxford St" } }
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
before do
|
|
379
|
+
modifiers.set(first_op)
|
|
380
|
+
modifiers.push(push_op)
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
it "does not conflict and adds push to top level" do
|
|
384
|
+
pending 'https://jira.mongodb.org/browse/MONGOID-4982'
|
|
385
|
+
|
|
386
|
+
modifiers.should == {
|
|
387
|
+
'$set' => { "addresses.0.name" => 'test' },
|
|
388
|
+
'$push' => {"addresses.0.locations" => {'$each' => [
|
|
389
|
+
{ "street" => "Oxford St" },
|
|
390
|
+
]}},
|
|
391
|
+
}
|
|
392
|
+
end
|
|
393
|
+
end
|
|
347
394
|
end
|
|
348
395
|
|
|
349
396
|
describe "#set" do
|
|
@@ -268,46 +268,5 @@ describe Mongoid::Atomic::Paths do
|
|
|
268
268
|
end
|
|
269
269
|
end
|
|
270
270
|
end
|
|
271
|
-
|
|
272
|
-
context "when the same class is embedded in multiple associations" do
|
|
273
|
-
|
|
274
|
-
let(:customer) do
|
|
275
|
-
Customer.new
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
context "assignment after saving" do
|
|
279
|
-
|
|
280
|
-
it "correctly sets the association for the embedded class" do
|
|
281
|
-
pending 'MONGOID-5039'
|
|
282
|
-
|
|
283
|
-
customer.home_address = CustomerAddress.new
|
|
284
|
-
customer.work_address = CustomerAddress.new
|
|
285
|
-
|
|
286
|
-
expect(customer.home_address.atomic_path).to eq("home_address")
|
|
287
|
-
expect(customer.work_address.atomic_path).to eq("work_address")
|
|
288
|
-
|
|
289
|
-
customer.save!
|
|
290
|
-
|
|
291
|
-
customer.home_address = CustomerAddress.new
|
|
292
|
-
customer.work_address = CustomerAddress.new
|
|
293
|
-
|
|
294
|
-
expect(customer.home_address.atomic_path).to eq("home_address")
|
|
295
|
-
expect(customer.work_address.atomic_path).to eq("work_address")
|
|
296
|
-
end
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
context "inverse assignment" do
|
|
300
|
-
|
|
301
|
-
it "correctly returns the path for each embedded class" do
|
|
302
|
-
pending 'MONGOID-5039'
|
|
303
|
-
|
|
304
|
-
customer.work_address = CustomerAddress.new
|
|
305
|
-
customer.work_address.addressable = customer
|
|
306
|
-
|
|
307
|
-
expect(customer.home_address.atomic_path).to eq("home_address")
|
|
308
|
-
expect(customer.work_address.atomic_path).to eq("work_address")
|
|
309
|
-
end
|
|
310
|
-
end
|
|
311
|
-
end
|
|
312
271
|
end
|
|
313
272
|
end
|
data/spec/mongoid/atomic_spec.rb
CHANGED
|
@@ -362,6 +362,29 @@ describe Mongoid::Atomic do
|
|
|
362
362
|
)
|
|
363
363
|
end
|
|
364
364
|
end
|
|
365
|
+
|
|
366
|
+
context 'when adding nested embedded docs and updating top level embedded doc' do
|
|
367
|
+
let!(:truck) { Truck.create! }
|
|
368
|
+
let!(:crate) { truck.crates.create!(volume: 1) }
|
|
369
|
+
|
|
370
|
+
before do
|
|
371
|
+
truck.crates.first.volume = 2
|
|
372
|
+
truck.crates.first.toys.build(name: 'Bear')
|
|
373
|
+
truck.crates.build
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
it 'correctly distributes the operations' do
|
|
377
|
+
pending 'https://jira.mongodb.org/browse/MONGOID-4982'
|
|
378
|
+
|
|
379
|
+
truck.atomic_updates.should == {
|
|
380
|
+
'$set' => {'crates.0.volume' => 2},
|
|
381
|
+
'$push' => {'crates.0.toys' => {'$each' => [crate.toys.first.attributes]}},
|
|
382
|
+
conflicts: {
|
|
383
|
+
'$push' => {'crates' => {'$each' => [truck.crates.last.attributes]}},
|
|
384
|
+
},
|
|
385
|
+
}
|
|
386
|
+
end
|
|
387
|
+
end
|
|
365
388
|
end
|
|
366
389
|
end
|
|
367
390
|
end
|
|
@@ -245,97 +245,6 @@ describe Mongoid::Attributes do
|
|
|
245
245
|
end
|
|
246
246
|
end
|
|
247
247
|
|
|
248
|
-
context "when the field was not explicitly defined" do
|
|
249
|
-
|
|
250
|
-
context "when excluding with only and the field was not excluded" do
|
|
251
|
-
|
|
252
|
-
let(:from_db) do
|
|
253
|
-
Person.only(:_id).first
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
it "raises an error" do
|
|
257
|
-
expect {
|
|
258
|
-
from_db[:undefined_field]
|
|
259
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
260
|
-
end
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
context "when excluding with without and the field was excluded" do
|
|
264
|
-
|
|
265
|
-
let(:from_db) do
|
|
266
|
-
Person.without(:title).first
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
it "raises an error" do
|
|
270
|
-
expect {
|
|
271
|
-
from_db[:title]
|
|
272
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
273
|
-
end
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
context "when excluding with without and the field was not excluded" do
|
|
277
|
-
|
|
278
|
-
let(:from_db) do
|
|
279
|
-
Person.without(:title).first
|
|
280
|
-
end
|
|
281
|
-
|
|
282
|
-
it "returns nil" do
|
|
283
|
-
from_db[:undefined_field].should be nil
|
|
284
|
-
end
|
|
285
|
-
end
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
context 'when projecting with #only' do
|
|
289
|
-
let!(:person) do
|
|
290
|
-
Person.create(title: 'sir', name: { first_name: 'Jose', language: { name: 'es' } })
|
|
291
|
-
end
|
|
292
|
-
|
|
293
|
-
context 'when projecting an embedded association' do
|
|
294
|
-
let(:from_db) do
|
|
295
|
-
Person.only(:name).first
|
|
296
|
-
end
|
|
297
|
-
|
|
298
|
-
context 'when retrieving a field of the association using the dot notation' do
|
|
299
|
-
|
|
300
|
-
it 'retrieves the field' do
|
|
301
|
-
pending 'MONGOID-5032, fixed in 7.3'
|
|
302
|
-
|
|
303
|
-
expect(from_db['name.first_name']).to eq 'Jose'
|
|
304
|
-
end
|
|
305
|
-
end
|
|
306
|
-
|
|
307
|
-
context 'when retrieving a field of a nested association using the dot notation' do
|
|
308
|
-
it 'retrieves the field' do
|
|
309
|
-
pending 'MONGOID-5032, fixed in 7.3'
|
|
310
|
-
|
|
311
|
-
expect(from_db['name.language.name']).to eq 'es'
|
|
312
|
-
end
|
|
313
|
-
end
|
|
314
|
-
end
|
|
315
|
-
|
|
316
|
-
context 'when projecting a sub-association of an embedded association' do
|
|
317
|
-
let(:from_db) do
|
|
318
|
-
Person.only('name.language').first
|
|
319
|
-
end
|
|
320
|
-
|
|
321
|
-
context 'when retrieving a field under the projected sub-association' do
|
|
322
|
-
it 'retrieves the field' do
|
|
323
|
-
pending 'MONGOID-5032, fixed in 7.3'
|
|
324
|
-
|
|
325
|
-
expect(from_db['name.language.name']).to eq 'es'
|
|
326
|
-
end
|
|
327
|
-
end
|
|
328
|
-
|
|
329
|
-
context 'when retrieving a non-projected field' do
|
|
330
|
-
it 'raises MissingAttributeError' do
|
|
331
|
-
expect do
|
|
332
|
-
from_db['name.first_name']
|
|
333
|
-
end.to raise_error(ActiveModel::MissingAttributeError)
|
|
334
|
-
end
|
|
335
|
-
end
|
|
336
|
-
end
|
|
337
|
-
end
|
|
338
|
-
|
|
339
248
|
context "when the attribute does not exist" do
|
|
340
249
|
|
|
341
250
|
before do
|
|
@@ -420,67 +329,6 @@ describe Mongoid::Attributes do
|
|
|
420
329
|
expect(terms).to eq(true)
|
|
421
330
|
end
|
|
422
331
|
end
|
|
423
|
-
|
|
424
|
-
context 'when the field is not explicitly defined' do
|
|
425
|
-
let(:bar) { Bar.new }
|
|
426
|
-
|
|
427
|
-
before do
|
|
428
|
-
bar['missing_field'] = 42
|
|
429
|
-
end
|
|
430
|
-
|
|
431
|
-
it 'writes the value into attributes' do
|
|
432
|
-
bar.attributes.should == {'_id' => bar.id, 'missing_field' => 42}
|
|
433
|
-
end
|
|
434
|
-
|
|
435
|
-
it 'makes the attribute accessible via []' do
|
|
436
|
-
bar['missing_field'].should == 42
|
|
437
|
-
end
|
|
438
|
-
|
|
439
|
-
context 'when writing fields on a document with projection' do
|
|
440
|
-
|
|
441
|
-
let!(:person) do
|
|
442
|
-
Person.create(title: "sir")
|
|
443
|
-
end
|
|
444
|
-
|
|
445
|
-
context "when excluding with only and the field was not excluded" do
|
|
446
|
-
|
|
447
|
-
let(:from_db) do
|
|
448
|
-
Person.only(:_id).first
|
|
449
|
-
end
|
|
450
|
-
|
|
451
|
-
it "raises an error" do
|
|
452
|
-
expect {
|
|
453
|
-
from_db[:undefined_field] = 'x'
|
|
454
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
455
|
-
end
|
|
456
|
-
end
|
|
457
|
-
|
|
458
|
-
context "when excluding with without and the field was excluded" do
|
|
459
|
-
|
|
460
|
-
let(:from_db) do
|
|
461
|
-
Person.without(:title).first
|
|
462
|
-
end
|
|
463
|
-
|
|
464
|
-
it "raises an error" do
|
|
465
|
-
expect {
|
|
466
|
-
from_db[:title] = 'x'
|
|
467
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
468
|
-
end
|
|
469
|
-
end
|
|
470
|
-
|
|
471
|
-
context "when excluding with without and the field was not excluded" do
|
|
472
|
-
|
|
473
|
-
let(:from_db) do
|
|
474
|
-
Person.without(:title).first
|
|
475
|
-
end
|
|
476
|
-
|
|
477
|
-
it "writes the value" do
|
|
478
|
-
from_db[:undefined_field] = 'x'
|
|
479
|
-
from_db[:undefined_field].should == 'x'
|
|
480
|
-
end
|
|
481
|
-
end
|
|
482
|
-
end
|
|
483
|
-
end
|
|
484
332
|
end
|
|
485
333
|
|
|
486
334
|
describe "#_id" do
|
|
@@ -1045,50 +893,6 @@ describe Mongoid::Attributes do
|
|
|
1045
893
|
expect(person.age_before_type_cast).to eq("old")
|
|
1046
894
|
end
|
|
1047
895
|
end
|
|
1048
|
-
|
|
1049
|
-
context 'when reading fields on a document with projection' do
|
|
1050
|
-
|
|
1051
|
-
let!(:person) do
|
|
1052
|
-
Person.create(title: "sir")
|
|
1053
|
-
end
|
|
1054
|
-
|
|
1055
|
-
context "when excluding with only and the field was not excluded" do
|
|
1056
|
-
|
|
1057
|
-
let(:from_db) do
|
|
1058
|
-
Person.only(:_id).first
|
|
1059
|
-
end
|
|
1060
|
-
|
|
1061
|
-
it "raises an error" do
|
|
1062
|
-
expect {
|
|
1063
|
-
from_db.read_attribute(:undefined_field)
|
|
1064
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
1065
|
-
end
|
|
1066
|
-
end
|
|
1067
|
-
|
|
1068
|
-
context "when excluding with without and the field was excluded" do
|
|
1069
|
-
|
|
1070
|
-
let(:from_db) do
|
|
1071
|
-
Person.without(:title).first
|
|
1072
|
-
end
|
|
1073
|
-
|
|
1074
|
-
it "raises an error" do
|
|
1075
|
-
expect {
|
|
1076
|
-
from_db.read_attribute(:title)
|
|
1077
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
1078
|
-
end
|
|
1079
|
-
end
|
|
1080
|
-
|
|
1081
|
-
context "when excluding with without and the field was not excluded" do
|
|
1082
|
-
|
|
1083
|
-
let(:from_db) do
|
|
1084
|
-
Person.without(:title).first
|
|
1085
|
-
end
|
|
1086
|
-
|
|
1087
|
-
it "returns nil" do
|
|
1088
|
-
from_db.read_attribute(:undefined_field).should be nil
|
|
1089
|
-
end
|
|
1090
|
-
end
|
|
1091
|
-
end
|
|
1092
896
|
end
|
|
1093
897
|
|
|
1094
898
|
describe "#attribute_present?" do
|
|
@@ -1594,51 +1398,6 @@ describe Mongoid::Attributes do
|
|
|
1594
1398
|
expect(dictionary.description).to eq('foo')
|
|
1595
1399
|
end
|
|
1596
1400
|
end
|
|
1597
|
-
|
|
1598
|
-
context 'when writing fields on a document with projection' do
|
|
1599
|
-
|
|
1600
|
-
let!(:person) do
|
|
1601
|
-
Person.create(title: "sir")
|
|
1602
|
-
end
|
|
1603
|
-
|
|
1604
|
-
context "when excluding with only and the field was not excluded" do
|
|
1605
|
-
|
|
1606
|
-
let(:from_db) do
|
|
1607
|
-
Person.only(:_id).first
|
|
1608
|
-
end
|
|
1609
|
-
|
|
1610
|
-
it "raises an error" do
|
|
1611
|
-
expect {
|
|
1612
|
-
from_db.write_attribute(:undefined_field, 'x')
|
|
1613
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
1614
|
-
end
|
|
1615
|
-
end
|
|
1616
|
-
|
|
1617
|
-
context "when excluding with without and the field was excluded" do
|
|
1618
|
-
|
|
1619
|
-
let(:from_db) do
|
|
1620
|
-
Person.without(:title).first
|
|
1621
|
-
end
|
|
1622
|
-
|
|
1623
|
-
it "raises an error" do
|
|
1624
|
-
expect {
|
|
1625
|
-
from_db.write_attribute(:title, 'x')
|
|
1626
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
1627
|
-
end
|
|
1628
|
-
end
|
|
1629
|
-
|
|
1630
|
-
context "when excluding with without and the field was not excluded" do
|
|
1631
|
-
|
|
1632
|
-
let(:from_db) do
|
|
1633
|
-
Person.without(:title).first
|
|
1634
|
-
end
|
|
1635
|
-
|
|
1636
|
-
it "writes the value" do
|
|
1637
|
-
from_db.write_attribute(:undefined_field, 'x')
|
|
1638
|
-
from_db.read_attribute(:undefined_field).should == 'x'
|
|
1639
|
-
end
|
|
1640
|
-
end
|
|
1641
|
-
end
|
|
1642
1401
|
end
|
|
1643
1402
|
|
|
1644
1403
|
describe "#typed_value_for" do
|
|
@@ -65,15 +65,9 @@ describe Mongoid::Clients::Factory do
|
|
|
65
65
|
expect(client).to be_a(Mongo::Client)
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
fails_on_jruby
|
|
72
|
-
|
|
73
|
-
it 'does not produce driver warnings' do
|
|
74
|
-
Mongo::Logger.logger.should_not receive(:warn)
|
|
75
|
-
client
|
|
76
|
-
end
|
|
68
|
+
it 'does not produce driver warnings' do
|
|
69
|
+
Mongo::Logger.logger.should_not receive(:warn)
|
|
70
|
+
client
|
|
77
71
|
end
|
|
78
72
|
|
|
79
73
|
let(:cluster_addresses) do
|
|
@@ -85,6 +79,38 @@ describe Mongoid::Clients::Factory do
|
|
|
85
79
|
it "sets the platform to Mongoid's platform constant" do
|
|
86
80
|
expect(client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
|
|
87
81
|
end
|
|
82
|
+
|
|
83
|
+
context 'driver 2.13+' do
|
|
84
|
+
min_driver_version '2.13'
|
|
85
|
+
|
|
86
|
+
it 'sets Mongoid as a wrapping library' do
|
|
87
|
+
client.options[:wrapping_libraries].should == [BSON::Document.new(
|
|
88
|
+
Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY)]
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
context 'when configuration specifies a wrapping library' do
|
|
92
|
+
|
|
93
|
+
let(:config) do
|
|
94
|
+
{
|
|
95
|
+
default: { hosts: SpecConfig.instance.addresses, database: database_id },
|
|
96
|
+
analytics: {
|
|
97
|
+
hosts: SpecConfig.instance.addresses,
|
|
98
|
+
database: database_id,
|
|
99
|
+
options: {
|
|
100
|
+
wrapping_libraries: [{name: 'Foo'}],
|
|
101
|
+
},
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it 'adds Mongoid as another wrapping library' do
|
|
107
|
+
client.options[:wrapping_libraries].should == [
|
|
108
|
+
BSON::Document.new(Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY),
|
|
109
|
+
{'name' => 'Foo'},
|
|
110
|
+
]
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
88
114
|
end
|
|
89
115
|
|
|
90
116
|
context "when the configuration has no ports" do
|
|
@@ -83,11 +83,9 @@ describe Mongoid::Clients::Options, retry: 3 do
|
|
|
83
83
|
|
|
84
84
|
let!(:connections_and_cluster_during) do
|
|
85
85
|
connections = nil
|
|
86
|
-
cluster =
|
|
87
|
-
Minim.with(options) do |klass|
|
|
86
|
+
cluster = Minim.with(options) do |klass|
|
|
88
87
|
klass.where(name: 'emily').to_a
|
|
89
88
|
connections = Minim.mongo_client.database.command(serverStatus: 1).first['connections']['current']
|
|
90
|
-
cluster = Minim.collection.cluster
|
|
91
89
|
end
|
|
92
90
|
[ connections, cluster ]
|
|
93
91
|
end
|
|
@@ -126,10 +124,7 @@ describe Mongoid::Clients::Options, retry: 3 do
|
|
|
126
124
|
end
|
|
127
125
|
|
|
128
126
|
it 'disconnects the new cluster when the block exits' do
|
|
129
|
-
expect(
|
|
130
|
-
|
|
131
|
-
cluster_during.connected?.should be false
|
|
132
|
-
cluster_before.connected?.should be true
|
|
127
|
+
expect(connections_before).to eq(connections_after)
|
|
133
128
|
end
|
|
134
129
|
end
|
|
135
130
|
|
|
@@ -143,14 +138,11 @@ describe Mongoid::Clients::Options, retry: 3 do
|
|
|
143
138
|
|
|
144
139
|
it 'does not create a new cluster' do
|
|
145
140
|
expect(connections_during).to eq(connections_before)
|
|
146
|
-
|
|
147
|
-
cluster_during.should be cluster_before
|
|
148
141
|
end
|
|
149
142
|
|
|
150
143
|
it 'does not disconnect the original cluster' do
|
|
144
|
+
expect(connections_after).to eq(connections_before)
|
|
151
145
|
expect(cluster_before).to be(cluster_after)
|
|
152
|
-
|
|
153
|
-
cluster_before.connected?.should be true
|
|
154
146
|
end
|
|
155
147
|
end
|
|
156
148
|
|
|
@@ -20,12 +20,7 @@ describe Mongoid::Clients::Sessions do
|
|
|
20
20
|
|
|
21
21
|
let(:subscriber) do
|
|
22
22
|
client = Mongoid::Clients.with_name(:other)
|
|
23
|
-
monitoring =
|
|
24
|
-
client.send(:monitoring)
|
|
25
|
-
else
|
|
26
|
-
# driver 2.5
|
|
27
|
-
client.instance_variable_get('@monitoring')
|
|
28
|
-
end
|
|
23
|
+
monitoring = client.send(:monitoring)
|
|
29
24
|
monitoring.subscribers['Command'].find do |s|
|
|
30
25
|
s.is_a?(EventSubscriber)
|
|
31
26
|
end
|
|
@@ -5,19 +5,9 @@ require "spec_helper"
|
|
|
5
5
|
|
|
6
6
|
describe Mongoid::Config::Environment do
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
example.run
|
|
12
|
-
Object.send(:remove_const, :Rails) if defined?(Rails)
|
|
13
|
-
Rails = SavedRails
|
|
14
|
-
Object.send(:remove_const, :SavedRails)
|
|
15
|
-
else
|
|
16
|
-
example.run
|
|
17
|
-
if defined?(Rails)
|
|
18
|
-
Object.send(:remove_const, :Rails)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
8
|
+
after(:all) do
|
|
9
|
+
Rails = RailsTemp
|
|
10
|
+
Object.send(:remove_const, :RailsTemp)
|
|
21
11
|
end
|
|
22
12
|
|
|
23
13
|
describe "#env_name" do
|
|
@@ -34,6 +24,11 @@ describe Mongoid::Config::Environment do
|
|
|
34
24
|
end
|
|
35
25
|
end
|
|
36
26
|
|
|
27
|
+
after do
|
|
28
|
+
RailsTemp = Rails
|
|
29
|
+
Object.send(:remove_const, :Rails)
|
|
30
|
+
end
|
|
31
|
+
|
|
37
32
|
it "returns the rails environment" do
|
|
38
33
|
expect(described_class.env_name).to eq("production")
|
|
39
34
|
end
|
|
@@ -91,77 +86,4 @@ describe Mongoid::Config::Environment do
|
|
|
91
86
|
end
|
|
92
87
|
end
|
|
93
88
|
end
|
|
94
|
-
|
|
95
|
-
describe "#load_yaml" do
|
|
96
|
-
let(:path) { 'mongoid.yml' }
|
|
97
|
-
let(:environment) {}
|
|
98
|
-
before { allow(Rails).to receive('env').and_return('test') }
|
|
99
|
-
|
|
100
|
-
subject { described_class.load_yaml(path, environment) }
|
|
101
|
-
|
|
102
|
-
context 'when file not found' do
|
|
103
|
-
let(:path) { 'not/a/valid/path'}
|
|
104
|
-
|
|
105
|
-
it { expect { subject }.to raise_error(Errno::ENOENT) }
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
context 'when file found' do
|
|
109
|
-
before do
|
|
110
|
-
allow(File).to receive(:new).with('mongoid.yml').and_return(StringIO.new(file_contents))
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
let(:file_contents) do
|
|
114
|
-
<<~FILE
|
|
115
|
-
test:
|
|
116
|
-
clients: ['test']
|
|
117
|
-
development:
|
|
118
|
-
clients: ['dev']
|
|
119
|
-
FILE
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
context 'when file cannot be parsed as YAML' do
|
|
123
|
-
let(:file_contents) { "*\nbad:%123abc" }
|
|
124
|
-
|
|
125
|
-
it { expect { subject }.to raise_error(Psych::SyntaxError) }
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
context 'when file contains ERB errors' do
|
|
129
|
-
let(:file_contents) { '<%= foo %>' }
|
|
130
|
-
|
|
131
|
-
it { expect { subject }.to raise_error(NameError) }
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
context 'when file is empty' do
|
|
135
|
-
let(:file_contents) { '' }
|
|
136
|
-
|
|
137
|
-
it { expect { subject }.to raise_error(Mongoid::Errors::EmptyConfigFile) }
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
context 'when file does not contain a YAML Hash object' do
|
|
141
|
-
let(:file_contents) { '["this", "is", "an", "array"]' }
|
|
142
|
-
|
|
143
|
-
it { expect { subject }.to raise_error(Mongoid::Errors::InvalidConfigFile) }
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
context 'when environment not specified' do
|
|
147
|
-
it 'uses the rails environment' do
|
|
148
|
-
is_expected.to eq("clients"=>["test"])
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
context 'when environment is specified' do
|
|
153
|
-
let(:environment) { 'development' }
|
|
154
|
-
|
|
155
|
-
it 'uses the specified environment' do
|
|
156
|
-
is_expected.to eq("clients"=>["dev"])
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
context 'when environment is missing' do
|
|
161
|
-
let(:environment) { 'staging' }
|
|
162
|
-
|
|
163
|
-
it { is_expected.to be_nil }
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
89
|
end
|