mongoid 7.1.5 → 7.2.1
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 +33 -7
- data/lib/config/locales/en.yml +37 -1
- data/lib/mongoid.rb +23 -0
- data/lib/mongoid/association/depending.rb +1 -6
- data/lib/mongoid/association/many.rb +3 -3
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +36 -1
- data/lib/mongoid/association/referenced/has_many/proxy.rb +8 -1
- data/lib/mongoid/association/referenced/has_one/buildable.rb +9 -1
- data/lib/mongoid/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 +17 -0
- data/lib/mongoid/composable.rb +1 -0
- data/lib/mongoid/config.rb +3 -0
- data/lib/mongoid/contextual/mongo.rb +23 -4
- data/lib/mongoid/copyable.rb +7 -3
- data/lib/mongoid/criteria.rb +57 -7
- data/lib/mongoid/criteria/queryable/key.rb +1 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +2 -2
- data/lib/mongoid/criteria/queryable/selectable.rb +21 -6
- data/lib/mongoid/criteria/queryable/selector.rb +3 -7
- data/lib/mongoid/criteria/queryable/storable.rb +3 -3
- data/lib/mongoid/document.rb +18 -5
- data/lib/mongoid/errors.rb +7 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
- data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_query.rb +41 -0
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +27 -10
- data/lib/mongoid/fields.rb +3 -0
- data/lib/mongoid/fields/validators/macro.rb +22 -9
- data/lib/mongoid/findable.rb +50 -14
- data/lib/mongoid/indexable.rb +2 -2
- data/lib/mongoid/interceptable.rb +3 -1
- 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 +48 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/query_cache.rb +64 -62
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/serializable.rb +1 -1
- data/lib/mongoid/stringified_symbol.rb +53 -0
- data/lib/mongoid/traversable.rb +111 -4
- data/lib/mongoid/version.rb +1 -1
- data/spec/README.md +19 -4
- data/spec/integration/app_spec.rb +46 -13
- 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 +108 -13
- data/spec/integration/associations/has_one_spec.rb +108 -13
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
- data/spec/integration/atomic/modifiers_spec.rb +117 -0
- data/spec/integration/callbacks_models.rb +49 -0
- data/spec/integration/callbacks_spec.rb +216 -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/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +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/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_spec.rb +100 -0
- data/spec/integration/matcher_spec.rb +189 -0
- data/spec/integration/server_query_spec.rb +142 -0
- data/spec/integration/stringified_symbol_field_spec.rb +190 -0
- data/spec/lite_spec_helper.rb +4 -3
- data/spec/mongoid/association/depending_spec.rb +78 -26
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +50 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +33 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +460 -186
- data/spec/mongoid/association/referenced/has_many_models.rb +21 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +21 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
- data/spec/mongoid/atomic/paths_spec.rb +41 -0
- data/spec/mongoid/atomic_spec.rb +23 -0
- data/spec/mongoid/attributes/nested_spec.rb +1 -1
- data/spec/mongoid/clients/factory_spec.rb +37 -0
- data/spec/mongoid/clients/sessions_spec.rb +1 -6
- data/spec/mongoid/config_spec.rb +28 -0
- data/spec/mongoid/contextual/mongo_spec.rb +70 -16
- data/spec/mongoid/copyable_spec.rb +197 -18
- data/spec/mongoid/copyable_spec_models.rb +28 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +36 -0
- 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/extensions/stringified_symbol_spec.rb +85 -0
- data/spec/mongoid/factory_spec.rb +261 -28
- data/spec/mongoid/fields_spec.rb +48 -2
- data/spec/mongoid/findable_spec.rb +32 -0
- data/spec/mongoid/indexable_spec.rb +28 -2
- data/spec/mongoid/inspectable_spec.rb +29 -2
- data/spec/mongoid/interceptable_spec.rb +2 -2
- data/spec/mongoid/matcher/extract_attribute_data/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 +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/shared/LICENSE +20 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +211 -0
- data/spec/shared/lib/mrss/constraints.rb +330 -0
- data/spec/shared/lib/mrss/docker_runner.rb +262 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +69 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/shared/share/Dockerfile.erb +229 -0
- data/spec/shared/shlib/distro.sh +73 -0
- data/spec/shared/shlib/server.sh +270 -0
- data/spec/shared/shlib/set_env.sh +128 -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/customer.rb +11 -0
- data/spec/support/models/customer_address.rb +12 -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 +6 -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 +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 +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 +0 -0
- data/spec/support/models/piano.rb +5 -0
- data/spec/{app → support}/models/pizza.rb +0 -0
- data/spec/{app → support}/models/player.rb +0 -0
- data/spec/{app → support}/models/post.rb +0 -0
- data/spec/{app → support}/models/post_genre.rb +0 -0
- data/spec/{app → support}/models/powerup.rb +0 -0
- data/spec/{app → support}/models/preference.rb +0 -0
- data/spec/{app → support}/models/princess.rb +0 -0
- data/spec/{app → support}/models/product.rb +0 -0
- data/spec/support/models/profile.rb +18 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -0
- data/spec/{app → support}/models/pub.rb +0 -0
- data/spec/support/models/publication.rb +5 -0
- data/spec/{app → support}/models/publication/encyclopedia.rb +0 -0
- data/spec/{app → support}/models/publication/review.rb +0 -0
- data/spec/{app → support}/models/purchase.rb +0 -0
- data/spec/{app → support}/models/question.rb +0 -0
- data/spec/{app → support}/models/quiz.rb +0 -0
- data/spec/{app → support}/models/rating.rb +0 -0
- data/spec/{app → support}/models/record.rb +0 -0
- data/spec/{app → support}/models/registry.rb +0 -0
- data/spec/{app → support}/models/role.rb +0 -0
- data/spec/{app → support}/models/root_category.rb +0 -0
- data/spec/{app → support}/models/sandwich.rb +0 -0
- data/spec/{app → support}/models/scheduler.rb +0 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
- data/spec/support/models/seat.rb +25 -0
- data/spec/{app → support}/models/seo.rb +0 -0
- data/spec/{app → support}/models/series.rb +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/spec_config.rb +1 -1
- metadata +895 -755
- 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
data/lib/mongoid/reloadable.rb
CHANGED
@@ -60,7 +60,7 @@ module Mongoid
|
|
60
60
|
#
|
61
61
|
# @since 2.3.2
|
62
62
|
def reload_root_document
|
63
|
-
{}.merge(collection.find(
|
63
|
+
{}.merge(collection.find(atomic_selector, session: _session).read(mode: :primary).first || {})
|
64
64
|
end
|
65
65
|
|
66
66
|
# Reload the embedded document.
|
@@ -73,7 +73,7 @@ module Mongoid
|
|
73
73
|
# @since 2.3.2
|
74
74
|
def reload_embedded_document
|
75
75
|
extract_embedded_attributes({}.merge(
|
76
|
-
collection(_root).find(
|
76
|
+
collection(_root).find(_root.atomic_selector).read(mode: :primary).first
|
77
77
|
))
|
78
78
|
end
|
79
79
|
|
data/lib/mongoid/serializable.rb
CHANGED
@@ -80,7 +80,7 @@ module Mongoid
|
|
80
80
|
|
81
81
|
only = Array.wrap(options[:only]).map(&:to_s)
|
82
82
|
except = Array.wrap(options[:except]).map(&:to_s)
|
83
|
-
except |= [
|
83
|
+
except |= [self.class.discriminator_key] unless Mongoid.include_type_for_serialization
|
84
84
|
|
85
85
|
if !only.empty?
|
86
86
|
names &= only
|
@@ -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
|
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 --skip-active-record), 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')
|
@@ -136,7 +136,7 @@ describe 'Mongoid application tests' do
|
|
136
136
|
before do
|
137
137
|
Dir.chdir(APP_PATH) do
|
138
138
|
remove_bundler_req
|
139
|
-
ChildProcessHelper.check_call(%w(bundle install), env: env)
|
139
|
+
Mrss::ChildProcessHelper.check_call(%w(bundle install), env: env)
|
140
140
|
write_mongoid_yml
|
141
141
|
end
|
142
142
|
|
@@ -150,7 +150,7 @@ describe 'Mongoid application tests' do
|
|
150
150
|
end
|
151
151
|
index.should be nil
|
152
152
|
|
153
|
-
ChildProcessHelper.check_call(%w(rake db:mongoid:create_indexes),
|
153
|
+
Mrss::ChildProcessHelper.check_call(%w(bundle exec rake db:mongoid:create_indexes),
|
154
154
|
cwd: APP_PATH, env: env)
|
155
155
|
|
156
156
|
index = client['posts'].indexes.detect do |index|
|
@@ -168,10 +168,10 @@ describe 'Mongoid application tests' do
|
|
168
168
|
def clone_application(repo_url, subdir: nil, rails_version: nil)
|
169
169
|
Dir.chdir(TMP_BASE) do
|
170
170
|
FileUtils.rm_rf(File.basename(repo_url))
|
171
|
-
ChildProcessHelper.check_call(%w(git clone) + [repo_url])
|
171
|
+
Mrss::ChildProcessHelper.check_call(%w(git clone) + [repo_url])
|
172
172
|
Dir.chdir(File.join(*[File.basename(repo_url), subdir].compact)) do
|
173
173
|
adjust_app_gemfile(rails_version: rails_version)
|
174
|
-
ChildProcessHelper.check_call(%w(bundle install), env: clean_env)
|
174
|
+
Mrss::ChildProcessHelper.check_call(%w(bundle install), env: clean_env)
|
175
175
|
puts `git diff`
|
176
176
|
|
177
177
|
write_mongoid_yml
|
@@ -181,11 +181,44 @@ describe 'Mongoid application tests' do
|
|
181
181
|
end
|
182
182
|
end
|
183
183
|
|
184
|
+
def parse_mongodb_uri(uri)
|
185
|
+
pre, query = uri.split('?', 2)
|
186
|
+
if pre =~ %r,\A(mongodb(?:.*?))://([^/]+)(?:/(.*))?\z,
|
187
|
+
protocol = $1
|
188
|
+
hosts = $2
|
189
|
+
database = $3
|
190
|
+
if database == ''
|
191
|
+
database = nil
|
192
|
+
end
|
193
|
+
else
|
194
|
+
raise ArgumentError, "Invalid MongoDB URI: #{uri}"
|
195
|
+
end
|
196
|
+
if query == ''
|
197
|
+
query = nil
|
198
|
+
end
|
199
|
+
{
|
200
|
+
protocol: protocol,
|
201
|
+
hosts: hosts,
|
202
|
+
database: database,
|
203
|
+
query: query,
|
204
|
+
}
|
205
|
+
end
|
206
|
+
|
207
|
+
def build_mongodb_uri(parts)
|
208
|
+
"#{parts.fetch(:protocol)}://#{parts.fetch(:hosts)}/#{parts[:database]}?#{parts[:query]}"
|
209
|
+
end
|
210
|
+
|
184
211
|
def write_mongoid_yml
|
212
|
+
# HACK: the driver does not provide a MongoDB URI parser and assembler,
|
213
|
+
# and the Ruby standard library URI module doesn't handle multiple hosts.
|
214
|
+
parts = parse_mongodb_uri(SpecConfig.instance.uri_str)
|
215
|
+
parts[:database] = 'mongoid_test'
|
216
|
+
uri = build_mongodb_uri(parts)
|
217
|
+
p uri
|
185
218
|
env_config = {'clients' => {'default' => {
|
186
219
|
# TODO massive hack, will fail if uri specifies a database name or
|
187
220
|
# any uri options
|
188
|
-
'uri' =>
|
221
|
+
'uri' => uri,
|
189
222
|
}}}
|
190
223
|
config = {'development' => env_config, 'production' => env_config}
|
191
224
|
File.open('config/mongoid.yml', 'w') do |f|
|
@@ -230,7 +263,7 @@ describe 'Mongoid application tests' do
|
|
230
263
|
# in `initialize': too long unix socket path (126bytes given but 108bytes max) (ArgumentError)
|
231
264
|
# Is it trying to create unix sockets in current directory?
|
232
265
|
# https://stackoverflow.com/questions/30302021/rails-runner-without-spring
|
233
|
-
ChildProcessHelper.check_call(%w(bin/spring binstub --remove --all), env: clean_env)
|
266
|
+
Mrss::ChildProcessHelper.check_call(%w(bin/spring binstub --remove --all), env: clean_env)
|
234
267
|
end
|
235
268
|
|
236
269
|
def clean_env
|
@@ -172,4 +172,98 @@ describe 'embedded associations' do
|
|
172
172
|
end
|
173
173
|
end
|
174
174
|
end
|
175
|
+
|
176
|
+
describe 'updated_at on parent' do
|
177
|
+
context 'when child is added' do
|
178
|
+
context 'embeds_one' do
|
179
|
+
let(:parent) { EomParent.create! }
|
180
|
+
|
181
|
+
it 'updates' do
|
182
|
+
pending 'https://jira.mongodb.org/browse/MONGOID-3252'
|
183
|
+
|
184
|
+
first_updated_at = parent.updated_at
|
185
|
+
|
186
|
+
parent.child = EomChild.new
|
187
|
+
parent.save!
|
188
|
+
|
189
|
+
parent.updated_at.should > first_updated_at
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
context 'embeds_many' do
|
194
|
+
let(:parent) { EmmCongress.create! }
|
195
|
+
|
196
|
+
it 'updates' do
|
197
|
+
pending 'https://jira.mongodb.org/browse/MONGOID-3252'
|
198
|
+
|
199
|
+
first_updated_at = parent.updated_at
|
200
|
+
|
201
|
+
parent.legislators << EmmLegislator.new
|
202
|
+
parent.save!
|
203
|
+
|
204
|
+
parent.updated_at.should > first_updated_at
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
context 'when child is updated' do
|
210
|
+
context 'embeds_one' do
|
211
|
+
let(:parent) { EomParent.create!(child: EomChild.new) }
|
212
|
+
|
213
|
+
it 'updates' do
|
214
|
+
first_updated_at = parent.updated_at
|
215
|
+
|
216
|
+
parent.child.a = 42
|
217
|
+
parent.save!
|
218
|
+
|
219
|
+
parent.updated_at.should > first_updated_at
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
context 'embeds_many' do
|
224
|
+
let(:parent) { EmmCongress.create!(legislators: [EmmLegislator.new]) }
|
225
|
+
|
226
|
+
it 'updates' do
|
227
|
+
first_updated_at = parent.updated_at
|
228
|
+
|
229
|
+
parent.legislators.first.a = 42
|
230
|
+
parent.save!
|
231
|
+
|
232
|
+
parent.updated_at.should > first_updated_at
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
context 'when child is removed' do
|
238
|
+
context 'embeds_one' do
|
239
|
+
let(:parent) { EomParent.create!(child: EomChild.new) }
|
240
|
+
|
241
|
+
it 'updates' do
|
242
|
+
pending 'https://jira.mongodb.org/browse/MONGOID-3252'
|
243
|
+
|
244
|
+
first_updated_at = parent.updated_at
|
245
|
+
|
246
|
+
parent.child = nil
|
247
|
+
parent.save!
|
248
|
+
|
249
|
+
parent.updated_at.should > first_updated_at
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
context 'embeds_many' do
|
254
|
+
let(:parent) { EmmCongress.create!(legislators: [EmmLegislator.new]) }
|
255
|
+
|
256
|
+
it 'updates' do
|
257
|
+
pending 'https://jira.mongodb.org/browse/MONGOID-3252'
|
258
|
+
|
259
|
+
first_updated_at = parent.updated_at
|
260
|
+
|
261
|
+
parent.legislators.clear
|
262
|
+
parent.save!
|
263
|
+
|
264
|
+
parent.updated_at.should > first_updated_at
|
265
|
+
end
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
175
269
|
end
|