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
data/spec/mongoid/config_spec.rb
CHANGED
|
@@ -197,6 +197,34 @@ describe Mongoid::Config do
|
|
|
197
197
|
end
|
|
198
198
|
end
|
|
199
199
|
|
|
200
|
+
context 'when discriminator_key override' do
|
|
201
|
+
context 'is not set in the config' do
|
|
202
|
+
it 'has the value _type by default' do
|
|
203
|
+
Mongoid::Config.reset
|
|
204
|
+
configuration = CONFIG.merge(options: {})
|
|
205
|
+
|
|
206
|
+
Mongoid.configure { |config| config.load_configuration(configuration) }
|
|
207
|
+
|
|
208
|
+
expect(Mongoid::Config.discriminator_key).to be("_type")
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
context 'is set in the config' do
|
|
213
|
+
it 'sets the value' do
|
|
214
|
+
Mongoid::Config.reset
|
|
215
|
+
configuration = CONFIG.merge(options: {discriminator_key: "test"})
|
|
216
|
+
|
|
217
|
+
Mongoid.configure { |config| config.load_configuration(configuration) }
|
|
218
|
+
|
|
219
|
+
expect(Mongoid::Config.discriminator_key).to be("test")
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
it 'is set globally' do
|
|
223
|
+
expect(Mongoid.discriminator_key).to be("test")
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
200
228
|
describe "#load!" do
|
|
201
229
|
|
|
202
230
|
before(:all) do
|
|
@@ -753,25 +753,12 @@ describe Mongoid::Contextual::Atomic do
|
|
|
753
753
|
context.set(name: "Recoil")
|
|
754
754
|
end
|
|
755
755
|
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
expect(depeche_mode.reload.name).to eq("Recoil")
|
|
759
|
-
end
|
|
760
|
-
|
|
761
|
-
it "sets non existent fields" do
|
|
762
|
-
expect(smiths.reload.name).to eq("Recoil")
|
|
763
|
-
end
|
|
756
|
+
it "sets existing fields" do
|
|
757
|
+
expect(depeche_mode.reload.name).to eq("Recoil")
|
|
764
758
|
end
|
|
765
759
|
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
context 'when fields being set have been projected out' do
|
|
769
|
-
|
|
770
|
-
let(:criteria) do
|
|
771
|
-
Band.only(:genres)
|
|
772
|
-
end
|
|
773
|
-
|
|
774
|
-
include_examples 'writes as expected'
|
|
760
|
+
it "sets non existent fields" do
|
|
761
|
+
expect(smiths.reload.name).to eq("Recoil")
|
|
775
762
|
end
|
|
776
763
|
end
|
|
777
764
|
|
|
@@ -801,28 +788,27 @@ describe Mongoid::Contextual::Atomic do
|
|
|
801
788
|
context.unset(:name)
|
|
802
789
|
end
|
|
803
790
|
|
|
804
|
-
it "unsets the
|
|
805
|
-
depeche_mode.reload
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
expect(new_order.name).to be_nil
|
|
810
|
-
expect(new_order.years).to_not be_nil
|
|
791
|
+
it "unsets the first existing field" do
|
|
792
|
+
expect(depeche_mode.reload.name).to be_nil
|
|
793
|
+
end
|
|
794
|
+
|
|
795
|
+
it "unsets the last existing field" do
|
|
796
|
+
expect(new_order.reload.name).to be_nil
|
|
811
797
|
end
|
|
812
798
|
end
|
|
813
799
|
|
|
814
800
|
context "when the field is aliased" do
|
|
801
|
+
|
|
815
802
|
before do
|
|
816
803
|
context.unset(:years)
|
|
817
804
|
end
|
|
818
805
|
|
|
819
|
-
it "unsets the
|
|
820
|
-
depeche_mode.reload
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
expect(new_order.
|
|
825
|
-
expect(new_order.years).to be_nil
|
|
806
|
+
it "unsets the first existing field" do
|
|
807
|
+
expect(depeche_mode.reload.years).to be_nil
|
|
808
|
+
end
|
|
809
|
+
|
|
810
|
+
it "unsets the last existing field" do
|
|
811
|
+
expect(new_order.reload.years).to be_nil
|
|
826
812
|
end
|
|
827
813
|
end
|
|
828
814
|
end
|
|
@@ -830,8 +816,7 @@ describe Mongoid::Contextual::Atomic do
|
|
|
830
816
|
context "when unsetting multiple fields" do
|
|
831
817
|
|
|
832
818
|
let!(:new_order) do
|
|
833
|
-
Band.create(name: "New Order", genres:
|
|
834
|
-
likes: 200, rating: 4.3, origin: 'Space')
|
|
819
|
+
Band.create(name: "New Order", genres: [ "electro", "dub" ], years: 10)
|
|
835
820
|
end
|
|
836
821
|
|
|
837
822
|
let(:criteria) do
|
|
@@ -848,62 +833,27 @@ describe Mongoid::Contextual::Atomic do
|
|
|
848
833
|
context.unset(:name, :genres)
|
|
849
834
|
end
|
|
850
835
|
|
|
851
|
-
it "unsets
|
|
852
|
-
new_order.reload
|
|
853
|
-
expect(new_order.name).to be_nil
|
|
854
|
-
expect(new_order.genres).to be_nil
|
|
855
|
-
expect(new_order.years).to_not be_nil
|
|
856
|
-
expect(new_order.likes).to_not be_nil
|
|
857
|
-
expect(new_order.rating).to_not be_nil
|
|
836
|
+
it "unsets name field" do
|
|
837
|
+
expect(new_order.reload.name).to be_nil
|
|
858
838
|
end
|
|
859
|
-
end
|
|
860
839
|
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
before do
|
|
864
|
-
context.unset(:name, :years)
|
|
865
|
-
end
|
|
866
|
-
|
|
867
|
-
it "unsets the specified fields" do
|
|
868
|
-
new_order.reload
|
|
869
|
-
expect(new_order.name).to be_nil
|
|
870
|
-
expect(new_order.genres).to_not be_nil
|
|
871
|
-
expect(new_order.years).to be_nil
|
|
872
|
-
expect(new_order.likes).to_not be_nil
|
|
873
|
-
expect(new_order.rating).to_not be_nil
|
|
840
|
+
it "unsets genres field" do
|
|
841
|
+
expect(new_order.reload.genres).to be_nil
|
|
874
842
|
end
|
|
875
843
|
end
|
|
876
844
|
|
|
877
|
-
context "when
|
|
845
|
+
context "when the field is aliased" do
|
|
878
846
|
|
|
879
847
|
before do
|
|
880
|
-
context.unset(
|
|
881
|
-
end
|
|
882
|
-
|
|
883
|
-
it "unsets the specified fields" do
|
|
884
|
-
new_order.reload
|
|
885
|
-
expect(new_order.name).to_not be_nil
|
|
886
|
-
expect(new_order.genres).to_not be_nil
|
|
887
|
-
expect(new_order.years).to be_nil
|
|
888
|
-
expect(new_order.likes).to be_nil
|
|
889
|
-
expect(new_order.rating).to be_nil
|
|
890
|
-
expect(new_order.origin).to be_nil
|
|
848
|
+
context.unset(:name, :years)
|
|
891
849
|
end
|
|
892
|
-
end
|
|
893
|
-
|
|
894
|
-
context "when mixing argument types" do
|
|
895
850
|
|
|
896
|
-
|
|
897
|
-
|
|
851
|
+
it "unsets the unaliased field" do
|
|
852
|
+
expect(new_order.reload.name).to be_nil
|
|
898
853
|
end
|
|
899
854
|
|
|
900
|
-
it "unsets the
|
|
901
|
-
new_order.reload
|
|
902
|
-
expect(new_order.name).to be_nil
|
|
903
|
-
expect(new_order.genres).to_not be_nil
|
|
904
|
-
expect(new_order.years).to be_nil
|
|
905
|
-
expect(new_order.likes).to be_nil
|
|
906
|
-
expect(new_order.rating).to be_nil
|
|
855
|
+
it "unsets the aliased field" do
|
|
856
|
+
expect(new_order.reload.years).to be_nil
|
|
907
857
|
end
|
|
908
858
|
end
|
|
909
859
|
end
|
|
@@ -932,9 +882,7 @@ describe Mongoid::Contextual::Atomic do
|
|
|
932
882
|
end
|
|
933
883
|
|
|
934
884
|
it "unsets the unaliased field" do
|
|
935
|
-
depeche_mode.reload
|
|
936
|
-
expect(depeche_mode.name).to be_nil
|
|
937
|
-
expect(depeche_mode.years).to_not be_nil
|
|
885
|
+
expect(depeche_mode.reload.name).to be_nil
|
|
938
886
|
end
|
|
939
887
|
end
|
|
940
888
|
end
|
|
@@ -109,11 +109,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
109
109
|
described_class.new(criteria.cache)
|
|
110
110
|
end
|
|
111
111
|
|
|
112
|
-
before do
|
|
113
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
|
114
|
-
end
|
|
115
|
-
|
|
116
112
|
it "returns the count cached value after first call" do
|
|
113
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
|
117
114
|
2.times { expect(context.count).to eq(1) }
|
|
118
115
|
end
|
|
119
116
|
end
|
|
@@ -195,6 +192,71 @@ describe Mongoid::Contextual::Mongo do
|
|
|
195
192
|
end
|
|
196
193
|
end
|
|
197
194
|
|
|
195
|
+
describe "#estimated_count" do
|
|
196
|
+
|
|
197
|
+
let!(:depeche) do
|
|
198
|
+
Band.create(name: "Depeche Mode")
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
let!(:new_order) do
|
|
202
|
+
Band.create(name: "New Order")
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
let(:criteria) do
|
|
206
|
+
Band.where
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
context "when not providing options" do
|
|
210
|
+
it 'returns the correct count' do
|
|
211
|
+
expect(criteria.estimated_count).to eq(2)
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
context "when providing options" do
|
|
216
|
+
it 'returns the correct count' do
|
|
217
|
+
expect(criteria.estimated_count(maxTimeMS: 1000)).to eq(2)
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
context "when context is cached" do
|
|
222
|
+
|
|
223
|
+
let(:context) do
|
|
224
|
+
described_class.new(criteria.cache)
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
it "returns the count cached value after first call" do
|
|
228
|
+
expect(context.view).to receive(:estimated_document_count).once.and_return(1)
|
|
229
|
+
2.times do
|
|
230
|
+
context.estimated_count
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
context "when the criteria contains a selector", :focus do
|
|
236
|
+
let(:criteria) do
|
|
237
|
+
Band.where(name: "New Order")
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
context "when not providing options" do
|
|
241
|
+
it 'raises an error' do
|
|
242
|
+
expect do
|
|
243
|
+
criteria.estimated_count
|
|
244
|
+
end.to raise_error(Mongoid::Errors::InvalidEstimatedCountCriteria)
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
context "when providing options" do
|
|
249
|
+
it 'raises an error' do
|
|
250
|
+
expect do
|
|
251
|
+
criteria.estimated_count(maxTimeMS: 1000)
|
|
252
|
+
end.to raise_error(Mongoid::Errors::InvalidEstimatedCountCriteria)
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
|
|
198
260
|
[ :delete, :delete_all ].each do |method|
|
|
199
261
|
|
|
200
262
|
describe "##{method}" do
|
|
@@ -1399,12 +1461,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1399
1461
|
end
|
|
1400
1462
|
|
|
1401
1463
|
context "when calling more than once" do
|
|
1402
|
-
|
|
1403
|
-
before do
|
|
1404
|
-
expect(context.view).to receive(:count).once.and_return(2)
|
|
1405
|
-
end
|
|
1406
|
-
|
|
1407
1464
|
it "returns the cached value for subsequent calls" do
|
|
1465
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
|
1408
1466
|
2.times { expect(context.send(method)).to eq(2) }
|
|
1409
1467
|
end
|
|
1410
1468
|
end
|
|
@@ -1413,10 +1471,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1413
1471
|
|
|
1414
1472
|
before do
|
|
1415
1473
|
context.entries
|
|
1416
|
-
expect(context.view).to receive(:count).once.and_return(2)
|
|
1417
1474
|
end
|
|
1418
1475
|
|
|
1419
1476
|
it "returns the cached value for all calls" do
|
|
1477
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
|
1420
1478
|
expect(context.send(method)).to eq(2)
|
|
1421
1479
|
end
|
|
1422
1480
|
|
|
@@ -1448,12 +1506,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1448
1506
|
end
|
|
1449
1507
|
|
|
1450
1508
|
context "when calling more than once" do
|
|
1451
|
-
|
|
1452
|
-
before do
|
|
1453
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
|
1454
|
-
end
|
|
1455
|
-
|
|
1456
1509
|
it "returns the cached value for subsequent calls" do
|
|
1510
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
|
1457
1511
|
2.times { expect(context.send(method)).to eq(1) }
|
|
1458
1512
|
end
|
|
1459
1513
|
end
|
|
@@ -1462,10 +1516,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1462
1516
|
|
|
1463
1517
|
before do
|
|
1464
1518
|
context.entries
|
|
1465
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
|
1466
1519
|
end
|
|
1467
1520
|
|
|
1468
1521
|
it "returns the cached value for all calls" do
|
|
1522
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
|
1469
1523
|
expect(context.send(method)).to eq(1)
|
|
1470
1524
|
end
|
|
1471
1525
|
|
|
@@ -195,7 +195,7 @@ describe Mongoid::Copyable do
|
|
|
195
195
|
I18n.enforce_available_locales = false
|
|
196
196
|
I18n.locale = 'pt_BR'
|
|
197
197
|
person.addresses.type(ShipmentAddress).each { |address| address.shipping_name = "Título" }
|
|
198
|
-
person.save
|
|
198
|
+
person.save!
|
|
199
199
|
end
|
|
200
200
|
|
|
201
201
|
after do
|
|
@@ -353,6 +353,83 @@ describe Mongoid::Copyable do
|
|
|
353
353
|
end
|
|
354
354
|
end
|
|
355
355
|
end
|
|
356
|
+
|
|
357
|
+
context "when using a custom discriminator_key" do
|
|
358
|
+
before do
|
|
359
|
+
Person.discriminator_key = "dkey"
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
after do
|
|
363
|
+
Person.discriminator_key = nil
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
let(:copy) do
|
|
367
|
+
person.send(method)
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
before do
|
|
371
|
+
person[:versions] = [ { number: 1 } ]
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
it "copys embeds many documents" do
|
|
375
|
+
expect(copy.addresses).to eq(person.addresses)
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
it "copys deep embeds many documents" do
|
|
379
|
+
expect(copy.name.translations).to eq(person.name.translations)
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
it "sets the embedded many documents as new" do
|
|
383
|
+
expect(copy.addresses.first).to be_new_record
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
it "sets the deep embedded many documents as new" do
|
|
387
|
+
expect(copy.name.translations.first).to be_new_record
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
it "creates new embeds many instances" do
|
|
391
|
+
expect(copy.addresses).to_not equal(person.addresses)
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
it "creates new deep embeds many instances" do
|
|
395
|
+
expect(copy.name.translations).to_not equal(person.name.translations)
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
it "copys embeds one documents" do
|
|
399
|
+
expect(copy.name).to eq(person.name)
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
it "flags the embeds one documents as new" do
|
|
403
|
+
expect(copy.name).to be_new_record
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
it "creates a new embeds one instance" do
|
|
407
|
+
expect(copy.name).to_not equal(person.name)
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
context "when saving the copy" do
|
|
411
|
+
|
|
412
|
+
let(:reloaded) do
|
|
413
|
+
copy.reload
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
before do
|
|
417
|
+
copy.save(validate: false)
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
it "persists the attributes" do
|
|
421
|
+
expect(reloaded.title).to eq("Sir")
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
it "persists the embeds many relation" do
|
|
425
|
+
expect(reloaded.addresses).to eq(person.addresses)
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
it "persists the embeds one relation" do
|
|
429
|
+
expect(reloaded.name).to eq(person.name)
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
end
|
|
356
433
|
end
|
|
357
434
|
|
|
358
435
|
context "when the document is not new" do
|
|
@@ -517,6 +594,81 @@ describe Mongoid::Copyable do
|
|
|
517
594
|
end
|
|
518
595
|
end
|
|
519
596
|
end
|
|
597
|
+
|
|
598
|
+
context "when cloning a document with an embedded child class and a custom discriminator value" do
|
|
599
|
+
|
|
600
|
+
before do
|
|
601
|
+
ShipmentAddress.discriminator_value = "dvalue"
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
after do
|
|
605
|
+
ShipmentAddress.discriminator_value = nil
|
|
606
|
+
end
|
|
607
|
+
|
|
608
|
+
let!(:shipment_address) do
|
|
609
|
+
person.addresses.build({}, ShipmentAddress)
|
|
610
|
+
end
|
|
611
|
+
|
|
612
|
+
before do
|
|
613
|
+
person.save
|
|
614
|
+
end
|
|
615
|
+
|
|
616
|
+
let!(:from_db) do
|
|
617
|
+
Person.find(person.id)
|
|
618
|
+
end
|
|
619
|
+
|
|
620
|
+
let(:copy) do
|
|
621
|
+
from_db.send(method)
|
|
622
|
+
end
|
|
623
|
+
|
|
624
|
+
it "copys embeds many documents" do
|
|
625
|
+
expect(copy.addresses).to eq(person.addresses)
|
|
626
|
+
end
|
|
627
|
+
end
|
|
628
|
+
|
|
629
|
+
context 'when cloning a document with embedded child that uses inheritance' do
|
|
630
|
+
let(:original) do
|
|
631
|
+
CopyableSpec::A.new(influencers: [child_cls.new])
|
|
632
|
+
end
|
|
633
|
+
|
|
634
|
+
let(:copy) do
|
|
635
|
+
original.send(method)
|
|
636
|
+
end
|
|
637
|
+
|
|
638
|
+
context 'embedded child is root of hierarchy' do
|
|
639
|
+
let(:child_cls) do
|
|
640
|
+
CopyableSpec::Influencer
|
|
641
|
+
end
|
|
642
|
+
|
|
643
|
+
before do
|
|
644
|
+
# When embedded class is the root in hierarchy, their
|
|
645
|
+
# discriminator value is not explicitly stored.
|
|
646
|
+
child_cls.discriminator_mapping[child_cls.name].should be nil
|
|
647
|
+
end
|
|
648
|
+
|
|
649
|
+
it 'works' do
|
|
650
|
+
copy.class.should be original.class
|
|
651
|
+
copy.object_id.should_not == original.object_id
|
|
652
|
+
end
|
|
653
|
+
end
|
|
654
|
+
|
|
655
|
+
context 'embedded child is leaf of hierarchy' do
|
|
656
|
+
let(:child_cls) do
|
|
657
|
+
CopyableSpec::Youtuber
|
|
658
|
+
end
|
|
659
|
+
|
|
660
|
+
before do
|
|
661
|
+
# When embedded class is a leaf in hierarchy, their
|
|
662
|
+
# discriminator value is explicitly stored.
|
|
663
|
+
child_cls.discriminator_mapping[child_cls.name].should_not be nil
|
|
664
|
+
end
|
|
665
|
+
|
|
666
|
+
it 'works' do
|
|
667
|
+
copy.class.should be original.class
|
|
668
|
+
copy.object_id.should_not == original.object_id
|
|
669
|
+
end
|
|
670
|
+
end
|
|
671
|
+
end
|
|
520
672
|
end
|
|
521
673
|
end
|
|
522
674
|
end
|
|
@@ -6,6 +6,7 @@ module CopyableSpec
|
|
|
6
6
|
include Mongoid::Document
|
|
7
7
|
|
|
8
8
|
embeds_many :locations
|
|
9
|
+
embeds_many :influencers
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
class Location
|
|
@@ -17,4 +18,17 @@ module CopyableSpec
|
|
|
17
18
|
class Building
|
|
18
19
|
include Mongoid::Document
|
|
19
20
|
end
|
|
21
|
+
|
|
22
|
+
class Influencer
|
|
23
|
+
include Mongoid::Document
|
|
24
|
+
|
|
25
|
+
embeds_many :blurbs
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class Youtuber < Influencer
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class Blurb
|
|
32
|
+
include Mongoid::Document
|
|
33
|
+
end
|
|
20
34
|
end
|
|
@@ -1447,42 +1447,6 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
|
1447
1447
|
end
|
|
1448
1448
|
end
|
|
1449
1449
|
end
|
|
1450
|
-
|
|
1451
|
-
context 'when using multiple criteria and symbol operators' do
|
|
1452
|
-
context 'when using fields that meaningfully evolve values' do
|
|
1453
|
-
|
|
1454
|
-
let(:query) do
|
|
1455
|
-
Dictionary.any_of({a: 1}, :published.gt => Date.new(2020, 2, 3))
|
|
1456
|
-
end
|
|
1457
|
-
|
|
1458
|
-
it 'generates the expected query' do
|
|
1459
|
-
query.selector.should == {'$or' => [
|
|
1460
|
-
{'a' => 1},
|
|
1461
|
-
# Date instance is converted to a Time instance in local time,
|
|
1462
|
-
# because we are querying on a Time field and dates are interpreted
|
|
1463
|
-
# in local time when assigning to Time fields
|
|
1464
|
-
{'published' => {'$gt' => Time.local(2020, 2, 3)}},
|
|
1465
|
-
]}
|
|
1466
|
-
end
|
|
1467
|
-
end
|
|
1468
|
-
|
|
1469
|
-
context 'when using fields that do not meaningfully evolve values' do
|
|
1470
|
-
|
|
1471
|
-
let(:query) do
|
|
1472
|
-
Dictionary.any_of({a: 1}, :submitted_on.gt => Date.new(2020, 2, 3))
|
|
1473
|
-
end
|
|
1474
|
-
|
|
1475
|
-
it 'generates the expected query' do
|
|
1476
|
-
query.selector.should == {'$or' => [
|
|
1477
|
-
{'a' => 1},
|
|
1478
|
-
# Date instance is converted to a Time instance in UTC,
|
|
1479
|
-
# because we are querying on a Date field and dates are interpreted
|
|
1480
|
-
# in UTC when persisted as dates by Mongoid
|
|
1481
|
-
{'submitted_on' => {'$gt' => Time.utc(2020, 2, 3)}},
|
|
1482
|
-
]}
|
|
1483
|
-
end
|
|
1484
|
-
end
|
|
1485
|
-
end
|
|
1486
1450
|
end
|
|
1487
1451
|
|
|
1488
1452
|
describe "#not" do
|