mongoid 7.1.2 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +9 -2
- data/Rakefile +45 -5
- data/lib/config/locales/en.yml +38 -2
- data/lib/mongoid.rb +23 -0
- data/lib/mongoid/association/accessors.rb +37 -2
- data/lib/mongoid/association/depending.rb +1 -6
- data/lib/mongoid/association/many.rb +3 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.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 +36 -1
- data/lib/mongoid/association/referenced/has_many/proxy.rb +8 -1
- data/lib/mongoid/association/referenced/has_one/buildable.rb +9 -1
- data/lib/mongoid/association/referenced/has_one/proxy.rb +6 -1
- data/lib/mongoid/atomic/modifiers.rb +1 -1
- data/lib/mongoid/attributes/dynamic.rb +1 -1
- data/lib/mongoid/clients/factory.rb +19 -2
- data/lib/mongoid/clients/options.rb +8 -8
- data/lib/mongoid/clients/sessions.rb +20 -4
- data/lib/mongoid/clients/storage_options.rb +5 -5
- data/lib/mongoid/composable.rb +1 -0
- data/lib/mongoid/config.rb +3 -0
- data/lib/mongoid/contextual/mongo.rb +23 -4
- data/lib/mongoid/copyable.rb +7 -3
- data/lib/mongoid/criteria.rb +57 -7
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +12 -0
- data/lib/mongoid/criteria/queryable/key.rb +1 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +2 -2
- data/lib/mongoid/criteria/queryable/selectable.rb +21 -6
- data/lib/mongoid/criteria/queryable/selector.rb +3 -3
- data/lib/mongoid/criteria/queryable/storable.rb +3 -3
- data/lib/mongoid/document.rb +15 -3
- data/lib/mongoid/errors.rb +7 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
- data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_query.rb +41 -0
- data/lib/mongoid/errors/no_client_config.rb +2 -2
- data/lib/mongoid/errors/no_default_client.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +27 -10
- data/lib/mongoid/fields.rb +3 -0
- data/lib/mongoid/fields/validators/macro.rb +26 -10
- data/lib/mongoid/findable.rb +50 -14
- data/lib/mongoid/indexable.rb +2 -2
- data/lib/mongoid/matchable.rb +1 -149
- data/lib/mongoid/matcher.rb +127 -0
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/elem_match.rb +35 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +32 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +40 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +63 -0
- data/lib/mongoid/matcher/field_operator.rb +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/persistable/deletable.rb +1 -1
- data/lib/mongoid/query_cache.rb +81 -37
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/serializable.rb +1 -1
- data/lib/mongoid/stringified_symbol.rb +53 -0
- data/lib/mongoid/tasks/database.rb +38 -3
- data/lib/mongoid/traversable.rb +111 -4
- data/lib/mongoid/version.rb +1 -1
- data/spec/README.md +19 -4
- data/spec/integration/app_spec.rb +85 -23
- data/spec/integration/associations/embedded_spec.rb +94 -0
- data/spec/integration/associations/embeds_many_spec.rb +24 -0
- data/spec/integration/associations/embeds_one_spec.rb +24 -0
- data/spec/integration/associations/has_many_spec.rb +129 -0
- data/spec/integration/associations/has_one_spec.rb +129 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
- data/spec/integration/atomic/modifiers_spec.rb +117 -0
- data/spec/integration/bson_regexp_raw_spec.rb +20 -0
- data/spec/integration/criteria/date_field_spec.rb +41 -0
- data/spec/integration/discriminator_key_spec.rb +354 -0
- data/spec/integration/discriminator_value_spec.rb +207 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +363 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/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/integration/shardable_spec.rb +20 -4
- data/spec/integration/stringified_symbol_field_spec.rb +190 -0
- data/spec/lite_spec_helper.rb +4 -2
- data/spec/mongoid/association/accessors_spec.rb +238 -63
- data/spec/mongoid/association/depending_spec.rb +78 -26
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +33 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +138 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +105 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +460 -186
- data/spec/mongoid/association/referenced/has_many_models.rb +21 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +21 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
- data/spec/mongoid/atomic_spec.rb +23 -0
- data/spec/mongoid/attributes/nested_spec.rb +1 -1
- data/spec/mongoid/clients/factory_spec.rb +45 -8
- data/spec/mongoid/clients/options_spec.rb +9 -9
- data/spec/mongoid/clients/sessions_spec.rb +1 -6
- data/spec/mongoid/config_spec.rb +28 -0
- data/spec/mongoid/contextual/geo_near_spec.rb +11 -2
- data/spec/mongoid/contextual/mongo_spec.rb +70 -16
- data/spec/mongoid/copyable_spec.rb +197 -18
- data/spec/mongoid/copyable_spec_models.rb +28 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +19 -7
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +28 -1
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +84 -82
- data/spec/mongoid/criteria_spec.rb +204 -39
- data/spec/mongoid/document_spec.rb +89 -15
- data/spec/mongoid/equality_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +2 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -3
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +85 -0
- data/spec/mongoid/factory_spec.rb +261 -28
- data/spec/mongoid/fields_spec.rb +72 -3
- data/spec/mongoid/findable_spec.rb +32 -0
- data/spec/mongoid/indexable_spec.rb +28 -2
- data/spec/mongoid/inspectable_spec.rb +29 -2
- data/spec/mongoid/interceptable_spec.rb +2 -2
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +259 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +47 -0
- data/spec/mongoid/persistable/creatable_spec.rb +108 -25
- data/spec/mongoid/persistable/deletable_spec.rb +86 -0
- data/spec/mongoid/persistable/savable_spec.rb +174 -16
- data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
- data/spec/mongoid/query_cache_spec.rb +496 -28
- data/spec/mongoid/reloadable_spec.rb +72 -0
- data/spec/mongoid/serializable_spec.rb +21 -3
- data/spec/mongoid/traversable_spec.rb +1100 -0
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/constraints.rb +303 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/spec_helper.rb +4 -2
- data/spec/support/constraints.rb +20 -222
- data/spec/support/helpers.rb +1 -1
- data/spec/{app → support}/models/account.rb +0 -0
- data/spec/{app → support}/models/acolyte.rb +0 -0
- data/spec/{app → support}/models/actor.rb +1 -1
- data/spec/{app → support}/models/actress.rb +0 -0
- data/spec/{app → support}/models/address.rb +0 -0
- data/spec/{app → support}/models/address_component.rb +0 -0
- data/spec/{app → support}/models/address_number.rb +0 -0
- data/spec/{app → support}/models/agency.rb +0 -0
- data/spec/{app → support}/models/agent.rb +0 -0
- data/spec/{app → support}/models/album.rb +0 -0
- data/spec/{app → support}/models/alert.rb +0 -0
- data/spec/{app → support}/models/animal.rb +0 -0
- data/spec/{app → support}/models/answer.rb +0 -0
- data/spec/{app → support}/models/appointment.rb +0 -0
- data/spec/support/models/armrest.rb +10 -0
- data/spec/{app → support}/models/array_field.rb +0 -0
- data/spec/{app → support}/models/article.rb +0 -0
- data/spec/{app → support}/models/artist.rb +0 -0
- data/spec/{app → support}/models/artwork.rb +0 -0
- data/spec/{app → support}/models/audio.rb +0 -0
- data/spec/{app → support}/models/augmentation.rb +0 -0
- data/spec/{app → support}/models/author.rb +0 -0
- data/spec/{app → support}/models/baby.rb +0 -0
- data/spec/{app → support}/models/band.rb +0 -0
- data/spec/{app → support}/models/bar.rb +0 -0
- data/spec/{app → support}/models/basic.rb +0 -0
- data/spec/{app → support}/models/bed.rb +0 -0
- data/spec/{app → support}/models/big_palette.rb +0 -0
- data/spec/{app → support}/models/birthday.rb +0 -0
- data/spec/{app → support}/models/bomb.rb +0 -0
- data/spec/{app → support}/models/book.rb +0 -0
- data/spec/{app → support}/models/breed.rb +0 -0
- data/spec/{app → support}/models/browser.rb +1 -1
- data/spec/{app → support}/models/building.rb +0 -0
- data/spec/{app → support}/models/building_address.rb +0 -0
- data/spec/{app → support}/models/bus.rb +0 -0
- data/spec/{app → support}/models/business.rb +0 -0
- data/spec/{app → support}/models/callback_test.rb +0 -0
- data/spec/{app → support}/models/canvas.rb +1 -1
- data/spec/{app → support}/models/car.rb +0 -0
- data/spec/{app → support}/models/cat.rb +0 -0
- data/spec/{app → support}/models/category.rb +0 -0
- data/spec/{app → support}/models/child.rb +0 -0
- data/spec/{app → support}/models/child_doc.rb +0 -0
- data/spec/{app → support}/models/church.rb +0 -0
- data/spec/{app → support}/models/circle.rb +0 -0
- data/spec/{app → support}/models/circuit.rb +0 -0
- data/spec/{app → support}/models/circus.rb +0 -0
- data/spec/{app → support}/models/code.rb +0 -0
- data/spec/{app → support}/models/coding.rb +1 -1
- data/spec/{app → support}/models/coding/pull_request.rb +0 -0
- data/spec/{app → support}/models/comment.rb +0 -0
- data/spec/{app → support}/models/company.rb +0 -0
- data/spec/{app → support}/models/consumption_period.rb +0 -0
- data/spec/{app → support}/models/contextable_item.rb +0 -0
- data/spec/{app → support}/models/contractor.rb +0 -0
- data/spec/{app → support}/models/cookie.rb +0 -0
- data/spec/{app → support}/models/country_code.rb +0 -0
- data/spec/{app → support}/models/courier_job.rb +0 -0
- data/spec/support/models/crate.rb +13 -0
- data/spec/support/models/deed.rb +8 -0
- data/spec/{app → support}/models/definition.rb +0 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -0
- data/spec/{app → support}/models/description.rb +0 -0
- data/spec/{app → support}/models/dictionary.rb +0 -0
- data/spec/{app → support}/models/division.rb +0 -0
- data/spec/{app → support}/models/doctor.rb +0 -0
- data/spec/{app → support}/models/dog.rb +0 -0
- data/spec/{app → support}/models/dokument.rb +0 -0
- data/spec/{app → support}/models/draft.rb +0 -0
- data/spec/{app → support}/models/dragon.rb +0 -0
- data/spec/{app → support}/models/driver.rb +1 -1
- data/spec/{app → support}/models/drug.rb +0 -0
- data/spec/{app → support}/models/dungeon.rb +0 -0
- data/spec/{app → support}/models/edit.rb +0 -0
- data/spec/{app → support}/models/email.rb +0 -0
- data/spec/{app → support}/models/employer.rb +0 -0
- data/spec/{app → support}/models/entry.rb +0 -0
- data/spec/{app → support}/models/eraser.rb +0 -0
- data/spec/{app → support}/models/even.rb +0 -0
- data/spec/{app → support}/models/event.rb +0 -0
- data/spec/{app → support}/models/exhibition.rb +0 -0
- data/spec/{app → support}/models/exhibitor.rb +0 -0
- data/spec/{app → support}/models/explosion.rb +0 -0
- data/spec/{app → support}/models/eye.rb +0 -0
- data/spec/{app → support}/models/eye_bowl.rb +0 -0
- data/spec/{app → support}/models/face.rb +0 -0
- data/spec/{app → support}/models/favorite.rb +0 -0
- data/spec/{app → support}/models/filesystem.rb +0 -0
- data/spec/{app → support}/models/fire_hydrant.rb +0 -0
- data/spec/{app → support}/models/firefox.rb +0 -0
- data/spec/{app → support}/models/fish.rb +0 -0
- data/spec/{app → support}/models/folder.rb +0 -0
- data/spec/{app → support}/models/folder_item.rb +0 -0
- data/spec/{app → support}/models/fruits.rb +0 -0
- data/spec/{app → support}/models/game.rb +0 -0
- data/spec/{app → support}/models/ghost.rb +0 -0
- data/spec/support/models/guitar.rb +5 -0
- data/spec/{app → support}/models/home.rb +0 -0
- data/spec/{app → support}/models/house.rb +0 -0
- data/spec/{app → support}/models/html_writer.rb +0 -0
- data/spec/{app → support}/models/id_key.rb +0 -0
- data/spec/support/models/idnodef.rb +8 -0
- data/spec/{app → support}/models/image.rb +0 -0
- data/spec/{app → support}/models/implant.rb +0 -0
- data/spec/support/models/instrument.rb +9 -0
- data/spec/{app → support}/models/item.rb +1 -1
- data/spec/{app → support}/models/jar.rb +0 -0
- data/spec/{app → support}/models/kaleidoscope.rb +0 -0
- data/spec/{app → support}/models/kangaroo.rb +0 -0
- data/spec/{app → support}/models/label.rb +0 -0
- data/spec/{app → support}/models/language.rb +0 -0
- data/spec/{app → support}/models/lat_lng.rb +0 -0
- data/spec/{app → support}/models/league.rb +0 -0
- data/spec/{app → support}/models/learner.rb +0 -0
- data/spec/{app → support}/models/line_item.rb +0 -0
- data/spec/{app → support}/models/location.rb +0 -0
- data/spec/{app → support}/models/login.rb +0 -0
- data/spec/{app → support}/models/manufacturer.rb +0 -0
- data/spec/{app → support}/models/meat.rb +0 -0
- data/spec/{app → support}/models/membership.rb +0 -0
- data/spec/{app → support}/models/message.rb +0 -0
- data/spec/{app → support}/models/minim.rb +0 -0
- data/spec/{app → support}/models/mixed_drink.rb +0 -0
- data/spec/support/models/mop.rb +16 -0
- data/spec/{app → support}/models/movie.rb +0 -0
- data/spec/{app → support}/models/my_hash.rb +0 -0
- data/spec/{app → support}/models/name.rb +0 -0
- data/spec/{app → support}/models/name_only.rb +0 -0
- data/spec/{app → support}/models/node.rb +0 -0
- data/spec/{app → support}/models/note.rb +0 -0
- data/spec/{app → support}/models/odd.rb +0 -0
- data/spec/support/models/order.rb +11 -0
- data/spec/{app → support}/models/ordered_post.rb +0 -0
- data/spec/{app → support}/models/ordered_preference.rb +0 -0
- data/spec/{app → support}/models/oscar.rb +0 -0
- data/spec/{app → support}/models/other_owner_object.rb +0 -0
- data/spec/{app → support}/models/override.rb +0 -0
- data/spec/{app → support}/models/ownable.rb +0 -0
- data/spec/{app → support}/models/owner.rb +2 -0
- data/spec/{app → support}/models/pack.rb +0 -0
- data/spec/{app → support}/models/page.rb +0 -0
- data/spec/{app → support}/models/page_question.rb +0 -0
- data/spec/{app → support}/models/palette.rb +1 -1
- data/spec/{app → support}/models/parent.rb +0 -0
- data/spec/{app → support}/models/parent_doc.rb +0 -0
- data/spec/{app → support}/models/passport.rb +1 -0
- data/spec/{app → support}/models/patient.rb +0 -0
- data/spec/{app → support}/models/pdf_writer.rb +0 -0
- data/spec/{app → support}/models/pencil.rb +0 -0
- data/spec/{app → support}/models/person.rb +3 -1
- data/spec/{app → support}/models/pet.rb +0 -0
- data/spec/{app → support}/models/pet_owner.rb +0 -0
- data/spec/{app → support}/models/phone.rb +1 -0
- data/spec/support/models/piano.rb +5 -0
- data/spec/{app → support}/models/pizza.rb +0 -0
- data/spec/{app → support}/models/player.rb +0 -0
- data/spec/{app → support}/models/post.rb +0 -0
- data/spec/{app → support}/models/post_genre.rb +0 -0
- data/spec/{app → support}/models/powerup.rb +0 -0
- data/spec/{app → support}/models/preference.rb +0 -0
- data/spec/{app → support}/models/princess.rb +0 -0
- data/spec/{app → support}/models/product.rb +0 -0
- data/spec/support/models/profile.rb +18 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -0
- data/spec/{app → support}/models/pub.rb +0 -0
- data/spec/support/models/publication.rb +5 -0
- data/spec/{app → support}/models/publication/encyclopedia.rb +0 -0
- data/spec/{app → support}/models/publication/review.rb +0 -0
- data/spec/{app → support}/models/purchase.rb +0 -0
- data/spec/{app → support}/models/question.rb +0 -0
- data/spec/{app → support}/models/quiz.rb +0 -0
- data/spec/{app → support}/models/rating.rb +0 -0
- data/spec/{app → support}/models/record.rb +0 -0
- data/spec/{app → support}/models/registry.rb +0 -0
- data/spec/{app → support}/models/role.rb +0 -0
- data/spec/{app → support}/models/root_category.rb +0 -0
- data/spec/{app → support}/models/sandwich.rb +0 -0
- data/spec/{app → support}/models/scheduler.rb +0 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
- data/spec/support/models/seat.rb +25 -0
- data/spec/{app → support}/models/seo.rb +0 -0
- data/spec/{app → support}/models/series.rb +1 -0
- data/spec/{app → support}/models/server.rb +0 -0
- data/spec/{app → support}/models/service.rb +0 -0
- data/spec/{app → support}/models/shape.rb +2 -2
- data/spec/{app → support}/models/shelf.rb +0 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -0
- data/spec/{app → support}/models/shipping_container.rb +0 -0
- data/spec/{app → support}/models/shipping_pack.rb +0 -0
- data/spec/{app → support}/models/shop.rb +0 -0
- data/spec/{app → support}/models/short_agent.rb +0 -0
- data/spec/{app → support}/models/short_quiz.rb +0 -0
- data/spec/{app → support}/models/simple.rb +0 -0
- data/spec/{app → support}/models/slave.rb +0 -0
- data/spec/{app → support}/models/song.rb +0 -0
- data/spec/{app → support}/models/sound.rb +0 -0
- data/spec/{app → support}/models/square.rb +0 -0
- data/spec/{app → support}/models/staff.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- data/spec/{app → support}/models/strategy.rb +0 -0
- data/spec/{app → support}/models/sub_item.rb +0 -0
- data/spec/{app → support}/models/subscription.rb +0 -0
- data/spec/{app → support}/models/survey.rb +0 -0
- data/spec/{app → support}/models/symptom.rb +0 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -0
- data/spec/{app → support}/models/target.rb +0 -0
- data/spec/{app → support}/models/template.rb +0 -0
- data/spec/{app → support}/models/thing.rb +0 -0
- data/spec/{app → support}/models/title.rb +0 -0
- data/spec/{app → support}/models/tool.rb +2 -2
- data/spec/{app → support}/models/topping.rb +0 -0
- data/spec/support/models/toy.rb +10 -0
- data/spec/{app → support}/models/track.rb +0 -0
- data/spec/{app → support}/models/translation.rb +0 -0
- data/spec/{app → support}/models/tree.rb +0 -0
- data/spec/{app → support}/models/truck.rb +2 -0
- data/spec/{app → support}/models/updatable.rb +0 -0
- data/spec/{app → support}/models/user.rb +0 -0
- data/spec/{app → support}/models/user_account.rb +0 -0
- data/spec/{app → support}/models/validation_callback.rb +0 -0
- data/spec/{app → support}/models/vehicle.rb +7 -2
- data/spec/{app → support}/models/version.rb +0 -0
- data/spec/{app → support}/models/vertex.rb +0 -0
- data/spec/{app → support}/models/vet_visit.rb +0 -0
- data/spec/{app → support}/models/video.rb +0 -0
- data/spec/{app → support}/models/video_game.rb +0 -0
- data/spec/{app → support}/models/weapon.rb +0 -0
- data/spec/{app → support}/models/wiki_page.rb +1 -0
- data/spec/{app → support}/models/word.rb +0 -0
- data/spec/{app → support}/models/word_origin.rb +0 -0
- data/spec/{app → support}/models/writer.rb +2 -2
- data/spec/support/session_registry.rb +50 -0
- data/spec/support/spec_config.rb +1 -1
- metadata +857 -739
- metadata.gz.sig +0 -0
- data/lib/mongoid/matchable/all.rb +0 -30
- data/lib/mongoid/matchable/and.rb +0 -32
- data/lib/mongoid/matchable/default.rb +0 -121
- data/lib/mongoid/matchable/elem_match.rb +0 -36
- data/lib/mongoid/matchable/eq.rb +0 -23
- data/lib/mongoid/matchable/exists.rb +0 -25
- data/lib/mongoid/matchable/gt.rb +0 -25
- data/lib/mongoid/matchable/gte.rb +0 -25
- data/lib/mongoid/matchable/in.rb +0 -26
- data/lib/mongoid/matchable/lt.rb +0 -25
- data/lib/mongoid/matchable/lte.rb +0 -25
- data/lib/mongoid/matchable/ne.rb +0 -23
- data/lib/mongoid/matchable/nin.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -38
- data/lib/mongoid/matchable/or.rb +0 -35
- data/lib/mongoid/matchable/regexp.rb +0 -30
- data/lib/mongoid/matchable/size.rb +0 -23
- data/spec/app/models/publication.rb +0 -5
- data/spec/mongoid/matchable/all_spec.rb +0 -34
- data/spec/mongoid/matchable/and_spec.rb +0 -190
- data/spec/mongoid/matchable/default_spec.rb +0 -140
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
- data/spec/mongoid/matchable/eq_spec.rb +0 -49
- data/spec/mongoid/matchable/exists_spec.rb +0 -60
- data/spec/mongoid/matchable/gt_spec.rb +0 -89
- data/spec/mongoid/matchable/gte_spec.rb +0 -87
- data/spec/mongoid/matchable/in_spec.rb +0 -52
- data/spec/mongoid/matchable/lt_spec.rb +0 -88
- data/spec/mongoid/matchable/lte_spec.rb +0 -88
- data/spec/mongoid/matchable/ne_spec.rb +0 -49
- data/spec/mongoid/matchable/nin_spec.rb +0 -51
- data/spec/mongoid/matchable/nor_spec.rb +0 -210
- data/spec/mongoid/matchable/or_spec.rb +0 -134
- data/spec/mongoid/matchable/regexp_spec.rb +0 -62
- data/spec/mongoid/matchable/size_spec.rb +0 -28
- data/spec/mongoid/matchable_spec.rb +0 -856
- data/spec/support/child_process_helper.rb +0 -76
- data/spec/support/lite_constraints.rb +0 -22
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
4
|
+
# A class which sends values to the database as Strings but returns them to the user as Symbols.
|
|
5
|
+
module Mongoid
|
|
6
|
+
class StringifiedSymbol
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
|
|
10
|
+
# Convert the object from its mongo friendly ruby type to this type.
|
|
11
|
+
#
|
|
12
|
+
# @example Demongoize the object.
|
|
13
|
+
# Symbol.demongoize(object)
|
|
14
|
+
#
|
|
15
|
+
# @param [ Object ] object The object to demongoize.
|
|
16
|
+
#
|
|
17
|
+
# @return [ Symbol ] The object.
|
|
18
|
+
#
|
|
19
|
+
# @api private
|
|
20
|
+
def demongoize(object)
|
|
21
|
+
if object.nil?
|
|
22
|
+
object
|
|
23
|
+
else
|
|
24
|
+
object.to_s.to_sym
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
29
|
+
# type.
|
|
30
|
+
#
|
|
31
|
+
# @example Mongoize the object.
|
|
32
|
+
# Symbol.mongoize("123.11")
|
|
33
|
+
#
|
|
34
|
+
# @param [ Object ] object The object to mongoize.
|
|
35
|
+
#
|
|
36
|
+
# @return [ Symbol ] The object mongoized.
|
|
37
|
+
#
|
|
38
|
+
# @api private
|
|
39
|
+
def mongoize(object)
|
|
40
|
+
if object.nil?
|
|
41
|
+
object
|
|
42
|
+
else
|
|
43
|
+
object.to_s
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# @api private
|
|
48
|
+
def evolve(object)
|
|
49
|
+
mongoize(object)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -132,8 +132,32 @@ module Mongoid
|
|
|
132
132
|
next
|
|
133
133
|
end
|
|
134
134
|
|
|
135
|
-
# Database must exist in order to run collStats
|
|
136
|
-
|
|
135
|
+
# Database of the collection must exist in order to run collStats.
|
|
136
|
+
# Depending on server version, the collection itself must also
|
|
137
|
+
# exist.
|
|
138
|
+
# MongoDB does not have a command to create the database; the best
|
|
139
|
+
# approximation of it is to create the collection we want.
|
|
140
|
+
# On older servers, creating a collection that already exists is
|
|
141
|
+
# an error.
|
|
142
|
+
# Additionally, 3.6 and potentially older servers do not provide
|
|
143
|
+
# the error code when they are asked to collStats a non-existent
|
|
144
|
+
# collection (https://jira.mongodb.org/browse/SERVER-50070).
|
|
145
|
+
begin
|
|
146
|
+
stats = model.collection.database.command(collStats: model.collection.name).first
|
|
147
|
+
rescue Mongo::Error::OperationFailure => exc
|
|
148
|
+
# Code 26 is database does not exist.
|
|
149
|
+
# Code 8 is collection does not exist, as of 4.0.
|
|
150
|
+
# On 3.6 and earlier match the text of exception message.
|
|
151
|
+
if exc.code == 26 || exc.code == 8 ||
|
|
152
|
+
exc.code.nil? && exc.message =~ /not found/
|
|
153
|
+
then
|
|
154
|
+
model.collection.create
|
|
155
|
+
|
|
156
|
+
stats = model.collection.database.command(collStats: model.collection.name).first
|
|
157
|
+
else
|
|
158
|
+
raise
|
|
159
|
+
end
|
|
160
|
+
end
|
|
137
161
|
|
|
138
162
|
stats = model.collection.database.command(collStats: model.collection.name).first
|
|
139
163
|
if stats[:sharded]
|
|
@@ -142,7 +166,18 @@ module Mongoid
|
|
|
142
166
|
end
|
|
143
167
|
|
|
144
168
|
admin_db = model.collection.client.use(:admin).database
|
|
145
|
-
|
|
169
|
+
|
|
170
|
+
begin
|
|
171
|
+
admin_db.command(enableSharding: model.collection.database.name)
|
|
172
|
+
rescue Mongo::Error::OperationFailure => exc
|
|
173
|
+
# Server 2.6 fails if sharding is already enabled
|
|
174
|
+
if exc.code == 23 || exc.code.nil? && exc.message =~ /already enabled/
|
|
175
|
+
# Nothing
|
|
176
|
+
else
|
|
177
|
+
raise
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
146
181
|
begin
|
|
147
182
|
admin_db.command(shardCollection: model.collection.namespace, **model.shard_config)
|
|
148
183
|
rescue Mongo::Error::OperationFailure => e
|
data/lib/mongoid/traversable.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
# encoding: utf-8
|
|
3
3
|
|
|
4
|
+
require "mongoid/fields/validators/macro"
|
|
5
|
+
|
|
4
6
|
module Mongoid
|
|
5
7
|
|
|
6
8
|
# Provides behavior around traversing the document graph.
|
|
@@ -17,6 +19,105 @@ module Mongoid
|
|
|
17
19
|
@__parent = p
|
|
18
20
|
end
|
|
19
21
|
|
|
22
|
+
# Module used for prepending to the various discriminator_*= methods
|
|
23
|
+
#
|
|
24
|
+
# @api private
|
|
25
|
+
module DiscriminatorAssignment
|
|
26
|
+
def discriminator_key=(value)
|
|
27
|
+
if hereditary?
|
|
28
|
+
raise Errors::InvalidDiscriminatorKeyTarget.new(self, self.superclass)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
_mongoid_clear_types
|
|
32
|
+
|
|
33
|
+
if value
|
|
34
|
+
Mongoid::Fields::Validators::Macro.validate_field_name(self, value)
|
|
35
|
+
value = value.to_s
|
|
36
|
+
super
|
|
37
|
+
else
|
|
38
|
+
# When discriminator key is set to nil, replace the class's definition
|
|
39
|
+
# of the discriminator key reader (provided by class_attribute earlier)
|
|
40
|
+
# and re-delegate to Mongoid.
|
|
41
|
+
class << self
|
|
42
|
+
delegate :discriminator_key, to: ::Mongoid
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# This condition checks if the new discriminator key would overwrite
|
|
47
|
+
# an existing field.
|
|
48
|
+
# This condition also checks if the class has any descendants, because
|
|
49
|
+
# if it doesn't then it doesn't need a discriminator key.
|
|
50
|
+
if !fields.has_key?(self.discriminator_key) && !descendants.empty?
|
|
51
|
+
default_proc = lambda { self.class.discriminator_value }
|
|
52
|
+
field(self.discriminator_key, default: default_proc, type: String)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def discriminator_value=(value)
|
|
57
|
+
value ||= self.name
|
|
58
|
+
_mongoid_clear_types
|
|
59
|
+
add_discriminator_mapping(value)
|
|
60
|
+
@discriminator_value = value
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Module used for prepending the discriminator_value method.
|
|
65
|
+
#
|
|
66
|
+
# A separate module was needed because the subclasses of this class
|
|
67
|
+
# need to be manually prepended with the discriminator_value and can't
|
|
68
|
+
# rely on being a class_attribute because the .discriminator_value
|
|
69
|
+
# method is overriden by every subclass in the inherited method.
|
|
70
|
+
#
|
|
71
|
+
# @api private
|
|
72
|
+
module DiscriminatorRetrieval
|
|
73
|
+
|
|
74
|
+
# Get the name on the reading side if the discriminator_value is nil
|
|
75
|
+
def discriminator_value
|
|
76
|
+
@discriminator_value || self.name
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
included do
|
|
81
|
+
class_attribute :discriminator_key, instance_accessor: false
|
|
82
|
+
|
|
83
|
+
class << self
|
|
84
|
+
delegate :discriminator_key, to: ::Mongoid
|
|
85
|
+
prepend DiscriminatorAssignment
|
|
86
|
+
include DiscriminatorRetrieval
|
|
87
|
+
|
|
88
|
+
# @api private
|
|
89
|
+
#
|
|
90
|
+
# @return [ Hash<String, Class> ] The current mapping of discriminator_values to classes
|
|
91
|
+
attr_accessor :discriminator_mapping
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Add a discriminator mapping to the parent class. This mapping is used when
|
|
95
|
+
# receiving a document to identify its class.
|
|
96
|
+
#
|
|
97
|
+
# @param [ String ] value The discriminator_value that was just set
|
|
98
|
+
# @param [ Class ] The class the discriminator_value was set on
|
|
99
|
+
#
|
|
100
|
+
# @api private
|
|
101
|
+
def self.add_discriminator_mapping(value, klass=self)
|
|
102
|
+
self.discriminator_mapping ||= {}
|
|
103
|
+
self.discriminator_mapping[value] = klass
|
|
104
|
+
superclass.add_discriminator_mapping(value, klass) if hereditary?
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Get the discriminator mapping from the parent class. This method returns nil if there
|
|
108
|
+
# is no mapping for the given value.
|
|
109
|
+
#
|
|
110
|
+
# @param [ String ] value The discriminator_value to retrieve
|
|
111
|
+
#
|
|
112
|
+
# @return [ Class | nil ] klass The class corresponding to the given discriminator_value. If
|
|
113
|
+
# the value is not in the mapping, this method returns nil.
|
|
114
|
+
#
|
|
115
|
+
# @api private
|
|
116
|
+
def self.get_discriminator_mapping(value)
|
|
117
|
+
self.discriminator_mapping[value] if self.discriminator_mapping
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
20
121
|
# Get all child +Documents+ to this +Document+, going n levels deep if
|
|
21
122
|
# necessary. This is used when calling update persistence operations from
|
|
22
123
|
# the root document, where changes in the entire tree need to be
|
|
@@ -201,14 +302,20 @@ module Mongoid
|
|
|
201
302
|
subclass.pre_processed_defaults = pre_processed_defaults.dup
|
|
202
303
|
subclass.post_processed_defaults = post_processed_defaults.dup
|
|
203
304
|
subclass._declared_scopes = Hash.new { |hash,key| self._declared_scopes[key] }
|
|
305
|
+
subclass.discriminator_value = subclass.name
|
|
306
|
+
|
|
307
|
+
# We need to do this here because the discriminator_value method is
|
|
308
|
+
# overriden in the subclass above.
|
|
309
|
+
class << subclass
|
|
310
|
+
include DiscriminatorRetrieval
|
|
311
|
+
end
|
|
204
312
|
|
|
205
313
|
# We only need the _type field if inheritance is in play, but need to
|
|
206
314
|
# add to the root class as well for backwards compatibility.
|
|
207
|
-
unless fields.has_key?(
|
|
208
|
-
|
|
315
|
+
unless fields.has_key?(self.discriminator_key)
|
|
316
|
+
default_proc = lambda { self.class.discriminator_value }
|
|
317
|
+
field(self.discriminator_key, default: default_proc, type: String)
|
|
209
318
|
end
|
|
210
|
-
subclass_default = subclass.name || ->{ self.class.name }
|
|
211
|
-
subclass.field(:_type, default: subclass_default, type: String, overwrite: true)
|
|
212
319
|
end
|
|
213
320
|
end
|
|
214
321
|
end
|
data/lib/mongoid/version.rb
CHANGED
data/spec/README.md
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
# Running Mongoid Tests
|
|
2
2
|
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
## Quick Start
|
|
4
|
+
|
|
5
|
+
The test suite requires shared tooling that is stored in a separate repository
|
|
6
|
+
and is referenced as a submodule. After checking out the desired driver
|
|
7
|
+
branch, check out the matching submodules:
|
|
8
|
+
|
|
9
|
+
git submodule init
|
|
10
|
+
git submodule update
|
|
11
|
+
|
|
12
|
+
Spin up a MongoDB deployment against which to run the Mongoid specs.
|
|
13
|
+
Mongoid specs support a variety of MongoDB topologies, but the simplest is
|
|
14
|
+
a single MongoDB instance:
|
|
6
15
|
|
|
7
16
|
# Launch mongod in one terminal
|
|
8
17
|
mkdir /tmp/mdb
|
|
@@ -14,5 +23,11 @@ Run the test suite in a separate terminal:
|
|
|
14
23
|
|
|
15
24
|
|
|
16
25
|
## Caveats
|
|
26
|
+
|
|
17
27
|
### "Too many open files" error
|
|
18
|
-
|
|
28
|
+
|
|
29
|
+
On MacOS, you may encounter a "Too many open files" error on the MongoDB server
|
|
30
|
+
when running the tests. If this happens, stop the server, run the command
|
|
31
|
+
`ulimit -n 10000` in the same terminal session as the server, and restart
|
|
32
|
+
the server. This will increase the number of files that can be opened.
|
|
33
|
+
Then, re-run the tests.
|
|
@@ -13,7 +13,7 @@ describe 'Mongoid application tests' do
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
require 'fileutils'
|
|
16
|
-
require '
|
|
16
|
+
require 'mrss/child_process_helper'
|
|
17
17
|
require 'open-uri'
|
|
18
18
|
|
|
19
19
|
FileUtils.mkdir_p(TMP_BASE)
|
|
@@ -91,19 +91,19 @@ describe 'Mongoid application tests' do
|
|
|
91
91
|
['~> 5.1.0', '~> 5.2.0', '~> 6.0.0'].each do |rails_version|
|
|
92
92
|
context "with rails #{rails_version}" do
|
|
93
93
|
it 'creates' do
|
|
94
|
-
ChildProcessHelper.check_call(%w(gem uni rails -a))
|
|
95
|
-
ChildProcessHelper.check_call(%w(gem install rails --no-document -v) + [rails_version])
|
|
94
|
+
Mrss::ChildProcessHelper.check_call(%w(gem uni rails -a))
|
|
95
|
+
Mrss::ChildProcessHelper.check_call(%w(gem install rails --no-document -v) + [rails_version])
|
|
96
96
|
|
|
97
97
|
Dir.chdir(TMP_BASE) do
|
|
98
98
|
FileUtils.rm_rf('mongoid-test')
|
|
99
|
-
ChildProcessHelper.check_call(%w(rails new mongoid-test --skip-spring), env: clean_env)
|
|
99
|
+
Mrss::ChildProcessHelper.check_call(%w(rails new mongoid-test --skip-spring --skip-active-record), env: clean_env)
|
|
100
100
|
|
|
101
101
|
Dir.chdir('mongoid-test') do
|
|
102
102
|
adjust_app_gemfile
|
|
103
|
-
ChildProcessHelper.check_call(%w(bundle install), env: clean_env)
|
|
103
|
+
Mrss::ChildProcessHelper.check_call(%w(bundle install), env: clean_env)
|
|
104
104
|
|
|
105
|
-
ChildProcessHelper.check_call(%w(rails g model post), env: clean_env)
|
|
106
|
-
ChildProcessHelper.check_call(%w(rails g model comment post:belongs_to), env: clean_env)
|
|
105
|
+
Mrss::ChildProcessHelper.check_call(%w(rails g model post), env: clean_env)
|
|
106
|
+
Mrss::ChildProcessHelper.check_call(%w(rails g model comment post:belongs_to), env: clean_env)
|
|
107
107
|
|
|
108
108
|
# https://jira.mongodb.org/browse/MONGOID-4885
|
|
109
109
|
comment_text = File.read('app/models/comment.rb')
|
|
@@ -116,35 +116,85 @@ describe 'Mongoid application tests' do
|
|
|
116
116
|
end
|
|
117
117
|
end
|
|
118
118
|
|
|
119
|
+
context 'local test applications' do
|
|
120
|
+
let(:client) { Mongoid.default_client }
|
|
121
|
+
|
|
122
|
+
describe 'create_indexes rake task' do
|
|
123
|
+
|
|
124
|
+
APP_PATH = File.join(File.dirname(__FILE__), '../../test-apps/rails-api')
|
|
125
|
+
|
|
126
|
+
%w(development production).each do |rails_env|
|
|
127
|
+
context "in #{rails_env}" do
|
|
128
|
+
|
|
129
|
+
%w(classic zeitwerk).each do |autoloader|
|
|
130
|
+
context "with #{autoloader} autoloader" do
|
|
131
|
+
|
|
132
|
+
let(:env) do
|
|
133
|
+
clean_env.merge(RAILS_ENV: rails_env, AUTOLOADER: autoloader)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
before do
|
|
137
|
+
Dir.chdir(APP_PATH) do
|
|
138
|
+
remove_bundler_req
|
|
139
|
+
Mrss::ChildProcessHelper.check_call(%w(bundle install), env: env)
|
|
140
|
+
write_mongoid_yml
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
client['posts'].drop
|
|
144
|
+
client['posts'].create
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it 'creates an index' do
|
|
148
|
+
index = client['posts'].indexes.detect do |index|
|
|
149
|
+
index['key'] == {'subject' => 1}
|
|
150
|
+
end
|
|
151
|
+
index.should be nil
|
|
152
|
+
|
|
153
|
+
Mrss::ChildProcessHelper.check_call(%w(rake db:mongoid:create_indexes),
|
|
154
|
+
cwd: APP_PATH, env: env)
|
|
155
|
+
|
|
156
|
+
index = client['posts'].indexes.detect do |index|
|
|
157
|
+
index['key'] == {'subject' => 1}
|
|
158
|
+
end
|
|
159
|
+
index.should be_a(Hash)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
119
168
|
def clone_application(repo_url, subdir: nil, rails_version: nil)
|
|
120
169
|
Dir.chdir(TMP_BASE) do
|
|
121
170
|
FileUtils.rm_rf(File.basename(repo_url))
|
|
122
|
-
ChildProcessHelper.check_call(%w(git clone) + [repo_url])
|
|
171
|
+
Mrss::ChildProcessHelper.check_call(%w(git clone) + [repo_url])
|
|
123
172
|
Dir.chdir(File.join(*[File.basename(repo_url), subdir].compact)) do
|
|
124
173
|
adjust_app_gemfile(rails_version: rails_version)
|
|
125
|
-
ChildProcessHelper.check_call(%w(bundle install), env: clean_env)
|
|
174
|
+
Mrss::ChildProcessHelper.check_call(%w(bundle install), env: clean_env)
|
|
126
175
|
puts `git diff`
|
|
127
176
|
|
|
128
|
-
|
|
129
|
-
File.open('config/mongoid.yml', 'w') do |f|
|
|
130
|
-
f << YAML.dump(config)
|
|
131
|
-
end
|
|
177
|
+
write_mongoid_yml
|
|
132
178
|
|
|
133
179
|
yield
|
|
134
180
|
end
|
|
135
181
|
end
|
|
136
182
|
end
|
|
137
183
|
|
|
138
|
-
def
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
184
|
+
def write_mongoid_yml
|
|
185
|
+
env_config = {'clients' => {'default' => {
|
|
186
|
+
# TODO massive hack, will fail if uri specifies a database name or
|
|
187
|
+
# any uri options
|
|
188
|
+
'uri' => "#{SpecConfig.instance.uri_str}/mongoid_test",
|
|
189
|
+
}}}
|
|
190
|
+
config = {'development' => env_config, 'production' => env_config}
|
|
191
|
+
File.open('config/mongoid.yml', 'w') do |f|
|
|
192
|
+
f << YAML.dump(config)
|
|
147
193
|
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def adjust_app_gemfile(rails_version: nil)
|
|
197
|
+
remove_bundler_req
|
|
148
198
|
|
|
149
199
|
gemfile_lines = IO.readlines('Gemfile')
|
|
150
200
|
gemfile_lines.delete_if do |line|
|
|
@@ -162,13 +212,25 @@ describe 'Mongoid application tests' do
|
|
|
162
212
|
end
|
|
163
213
|
end
|
|
164
214
|
|
|
215
|
+
def remove_bundler_req
|
|
216
|
+
lock_lines = IO.readlines('Gemfile.lock')
|
|
217
|
+
# Get rid of the bundled with line so that whatever bundler is installed
|
|
218
|
+
# on the system is usable with the application.
|
|
219
|
+
if i = lock_lines.index("BUNDLED WITH\n")
|
|
220
|
+
lock_lines.slice!(i, 2)
|
|
221
|
+
File.open('Gemfile.lock', 'w') do |f|
|
|
222
|
+
f << lock_lines.join
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
165
227
|
def remove_spring
|
|
166
228
|
# Spring produces this error in Evergreen:
|
|
167
229
|
# /data/mci/280eb2ecf4fd69208e2106cd3af526f1/src/rubies/ruby-2.7.0/lib/ruby/gems/2.7.0/gems/spring-2.1.0/lib/spring/client/run.rb:26:
|
|
168
230
|
# in `initialize': too long unix socket path (126bytes given but 108bytes max) (ArgumentError)
|
|
169
231
|
# Is it trying to create unix sockets in current directory?
|
|
170
232
|
# https://stackoverflow.com/questions/30302021/rails-runner-without-spring
|
|
171
|
-
ChildProcessHelper.check_call(%w(bin/spring binstub --remove --all), env: clean_env)
|
|
233
|
+
Mrss::ChildProcessHelper.check_call(%w(bin/spring binstub --remove --all), env: clean_env)
|
|
172
234
|
end
|
|
173
235
|
|
|
174
236
|
def clean_env
|