mongoid_rails4 4.0.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 +7 -0
- data/CHANGELOG.md +3213 -0
- data/LICENSE +20 -0
- data/README.md +62 -0
- data/Rakefile +35 -0
- data/lib/config/locales/en.yml +448 -0
- data/lib/mongoid.rb +104 -0
- data/lib/mongoid/atomic.rb +384 -0
- data/lib/mongoid/atomic/modifiers.rb +317 -0
- data/lib/mongoid/atomic/paths.rb +3 -0
- data/lib/mongoid/atomic/paths/embedded.rb +28 -0
- data/lib/mongoid/atomic/paths/embedded/many.rb +44 -0
- data/lib/mongoid/atomic/paths/embedded/one.rb +43 -0
- data/lib/mongoid/atomic/paths/root.rb +39 -0
- data/lib/mongoid/attributes.rb +284 -0
- data/lib/mongoid/attributes/dynamic.rb +154 -0
- data/lib/mongoid/attributes/nested.rb +82 -0
- data/lib/mongoid/attributes/processing.rb +147 -0
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/changeable.rb +379 -0
- data/lib/mongoid/composable.rb +104 -0
- data/lib/mongoid/config.rb +263 -0
- data/lib/mongoid/config/environment.rb +44 -0
- data/lib/mongoid/config/options.rb +74 -0
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/contextual.rb +54 -0
- data/lib/mongoid/contextual/aggregable/memory.rb +109 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +147 -0
- data/lib/mongoid/contextual/atomic.rb +180 -0
- data/lib/mongoid/contextual/command.rb +61 -0
- data/lib/mongoid/contextual/eager.rb +158 -0
- data/lib/mongoid/contextual/find_and_modify.rb +69 -0
- data/lib/mongoid/contextual/geo_near.rb +238 -0
- data/lib/mongoid/contextual/map_reduce.rb +324 -0
- data/lib/mongoid/contextual/memory.rb +440 -0
- data/lib/mongoid/contextual/mongo.rb +676 -0
- data/lib/mongoid/contextual/queryable.rb +25 -0
- data/lib/mongoid/contextual/text_search.rb +180 -0
- data/lib/mongoid/copyable.rb +67 -0
- data/lib/mongoid/criteria.rb +562 -0
- data/lib/mongoid/criteria/findable.rb +179 -0
- data/lib/mongoid/criteria/inspectable.rb +25 -0
- data/lib/mongoid/criteria/marshalable.rb +50 -0
- data/lib/mongoid/criteria/modifiable.rb +189 -0
- data/lib/mongoid/criteria/scopable.rb +158 -0
- data/lib/mongoid/document.rb +361 -0
- data/lib/mongoid/equality.rb +66 -0
- data/lib/mongoid/errors.rb +40 -0
- data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
- data/lib/mongoid/errors/callback.rb +25 -0
- data/lib/mongoid/errors/delete_restriction.rb +29 -0
- data/lib/mongoid/errors/document_not_found.rb +111 -0
- data/lib/mongoid/errors/eager_load.rb +22 -0
- data/lib/mongoid/errors/invalid_collection.rb +18 -0
- data/lib/mongoid/errors/invalid_config_option.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +64 -0
- data/lib/mongoid/errors/invalid_field_option.rb +35 -0
- data/lib/mongoid/errors/invalid_find.rb +19 -0
- data/lib/mongoid/errors/invalid_includes.rb +32 -0
- data/lib/mongoid/errors/invalid_index.rb +28 -0
- data/lib/mongoid/errors/invalid_options.rb +28 -0
- data/lib/mongoid/errors/invalid_path.rb +21 -0
- data/lib/mongoid/errors/invalid_scope.rb +24 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
- data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
- data/lib/mongoid/errors/invalid_time.rb +22 -0
- data/lib/mongoid/errors/inverse_not_found.rb +29 -0
- data/lib/mongoid/errors/mixed_relations.rb +32 -0
- data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
- data/lib/mongoid/errors/mongoid_error.rb +92 -0
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
- data/lib/mongoid/errors/no_default_session.rb +23 -0
- data/lib/mongoid/errors/no_environment.rb +19 -0
- data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
- data/lib/mongoid/errors/no_metadata.rb +21 -0
- data/lib/mongoid/errors/no_parent.rb +24 -0
- data/lib/mongoid/errors/no_session_config.rb +22 -0
- data/lib/mongoid/errors/no_session_database.rb +27 -0
- data/lib/mongoid/errors/no_session_hosts.rb +27 -0
- data/lib/mongoid/errors/no_sessions_config.rb +20 -0
- data/lib/mongoid/errors/readonly_attribute.rb +25 -0
- data/lib/mongoid/errors/scope_overwrite.rb +21 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +20 -0
- data/lib/mongoid/errors/unknown_attribute.rb +25 -0
- data/lib/mongoid/errors/unsaved_document.rb +19 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
- data/lib/mongoid/errors/validations.rb +29 -0
- data/lib/mongoid/evolvable.rb +19 -0
- data/lib/mongoid/extensions.rb +35 -0
- data/lib/mongoid/extensions/array.rb +180 -0
- data/lib/mongoid/extensions/big_decimal.rb +69 -0
- data/lib/mongoid/extensions/boolean.rb +21 -0
- data/lib/mongoid/extensions/date.rb +77 -0
- data/lib/mongoid/extensions/date_time.rb +73 -0
- data/lib/mongoid/extensions/false_class.rb +38 -0
- data/lib/mongoid/extensions/float.rb +56 -0
- data/lib/mongoid/extensions/hash.rb +209 -0
- data/lib/mongoid/extensions/integer.rb +67 -0
- data/lib/mongoid/extensions/module.rb +28 -0
- data/lib/mongoid/extensions/nil_class.rb +33 -0
- data/lib/mongoid/extensions/object.rb +274 -0
- data/lib/mongoid/extensions/object_id.rb +54 -0
- data/lib/mongoid/extensions/range.rb +79 -0
- data/lib/mongoid/extensions/regexp.rb +27 -0
- data/lib/mongoid/extensions/set.rb +55 -0
- data/lib/mongoid/extensions/string.rb +199 -0
- data/lib/mongoid/extensions/symbol.rb +54 -0
- data/lib/mongoid/extensions/time.rb +88 -0
- data/lib/mongoid/extensions/time_with_zone.rb +56 -0
- data/lib/mongoid/extensions/true_class.rb +38 -0
- data/lib/mongoid/factory.rb +46 -0
- data/lib/mongoid/fields.rb +542 -0
- data/lib/mongoid/fields/foreign_key.rb +174 -0
- data/lib/mongoid/fields/localized.rb +73 -0
- data/lib/mongoid/fields/standard.rb +273 -0
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields/validators/macro.rb +92 -0
- data/lib/mongoid/findable.rb +133 -0
- data/lib/mongoid/identity_map.rb +163 -0
- data/lib/mongoid/indexable.rb +147 -0
- data/lib/mongoid/indexable/specification.rb +115 -0
- data/lib/mongoid/indexable/validators/options.rb +103 -0
- data/lib/mongoid/inspectable.rb +59 -0
- data/lib/mongoid/interceptable.rb +265 -0
- data/lib/mongoid/loggable.rb +69 -0
- data/lib/mongoid/matchable.rb +152 -0
- data/lib/mongoid/matchable/all.rb +27 -0
- data/lib/mongoid/matchable/and.rb +30 -0
- data/lib/mongoid/matchable/default.rb +72 -0
- data/lib/mongoid/matchable/exists.rb +23 -0
- data/lib/mongoid/matchable/gt.rb +21 -0
- data/lib/mongoid/matchable/gte.rb +21 -0
- data/lib/mongoid/matchable/in.rb +24 -0
- data/lib/mongoid/matchable/lt.rb +21 -0
- data/lib/mongoid/matchable/lte.rb +21 -0
- data/lib/mongoid/matchable/ne.rb +21 -0
- data/lib/mongoid/matchable/nin.rb +21 -0
- data/lib/mongoid/matchable/or.rb +33 -0
- data/lib/mongoid/matchable/size.rb +21 -0
- data/lib/mongoid/persistable.rb +207 -0
- data/lib/mongoid/persistable/creatable.rb +189 -0
- data/lib/mongoid/persistable/deletable.rb +149 -0
- data/lib/mongoid/persistable/destroyable.rb +55 -0
- data/lib/mongoid/persistable/incrementable.rb +36 -0
- data/lib/mongoid/persistable/logical.rb +38 -0
- data/lib/mongoid/persistable/poppable.rb +39 -0
- data/lib/mongoid/persistable/pullable.rb +55 -0
- data/lib/mongoid/persistable/pushable.rb +62 -0
- data/lib/mongoid/persistable/renamable.rb +35 -0
- data/lib/mongoid/persistable/savable.rb +52 -0
- data/lib/mongoid/persistable/settable.rb +33 -0
- data/lib/mongoid/persistable/unsettable.rb +36 -0
- data/lib/mongoid/persistable/updatable.rb +151 -0
- data/lib/mongoid/persistable/upsertable.rb +55 -0
- data/lib/mongoid/positional.rb +71 -0
- data/lib/mongoid/railtie.rb +156 -0
- data/lib/mongoid/railties/database.rake +97 -0
- data/lib/mongoid/railties/document.rb +12 -0
- data/lib/mongoid/relations.rb +162 -0
- data/lib/mongoid/relations/accessors.rb +299 -0
- data/lib/mongoid/relations/auto_save.rb +106 -0
- data/lib/mongoid/relations/binding.rb +218 -0
- data/lib/mongoid/relations/bindings.rb +9 -0
- data/lib/mongoid/relations/bindings/embedded/in.rb +63 -0
- data/lib/mongoid/relations/bindings/embedded/many.rb +50 -0
- data/lib/mongoid/relations/bindings/embedded/one.rb +55 -0
- data/lib/mongoid/relations/bindings/referenced/in.rb +65 -0
- data/lib/mongoid/relations/bindings/referenced/many.rb +42 -0
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +67 -0
- data/lib/mongoid/relations/bindings/referenced/one.rb +44 -0
- data/lib/mongoid/relations/builder.rb +57 -0
- data/lib/mongoid/relations/builders.rb +104 -0
- data/lib/mongoid/relations/builders/embedded/in.rb +29 -0
- data/lib/mongoid/relations/builders/embedded/many.rb +36 -0
- data/lib/mongoid/relations/builders/embedded/one.rb +30 -0
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +174 -0
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +126 -0
- data/lib/mongoid/relations/builders/referenced/in.rb +26 -0
- data/lib/mongoid/relations/builders/referenced/many.rb +27 -0
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +40 -0
- data/lib/mongoid/relations/builders/referenced/one.rb +26 -0
- data/lib/mongoid/relations/cascading.rb +56 -0
- data/lib/mongoid/relations/cascading/delete.rb +44 -0
- data/lib/mongoid/relations/cascading/destroy.rb +43 -0
- data/lib/mongoid/relations/cascading/nullify.rb +35 -0
- data/lib/mongoid/relations/cascading/restrict.rb +39 -0
- data/lib/mongoid/relations/constraint.rb +49 -0
- data/lib/mongoid/relations/conversions.rb +34 -0
- data/lib/mongoid/relations/counter_cache.rb +105 -0
- data/lib/mongoid/relations/cyclic.rb +107 -0
- data/lib/mongoid/relations/embedded/batchable.rb +355 -0
- data/lib/mongoid/relations/embedded/in.rb +231 -0
- data/lib/mongoid/relations/embedded/many.rb +639 -0
- data/lib/mongoid/relations/embedded/one.rb +223 -0
- data/lib/mongoid/relations/macros.rb +356 -0
- data/lib/mongoid/relations/many.rb +208 -0
- data/lib/mongoid/relations/marshalable.rb +32 -0
- data/lib/mongoid/relations/metadata.rb +1174 -0
- data/lib/mongoid/relations/nested_builder.rb +74 -0
- data/lib/mongoid/relations/one.rb +48 -0
- data/lib/mongoid/relations/options.rb +48 -0
- data/lib/mongoid/relations/polymorphic.rb +39 -0
- data/lib/mongoid/relations/proxy.rb +270 -0
- data/lib/mongoid/relations/referenced/in.rb +297 -0
- data/lib/mongoid/relations/referenced/many.rb +787 -0
- data/lib/mongoid/relations/referenced/many_to_many.rb +486 -0
- data/lib/mongoid/relations/referenced/one.rb +290 -0
- data/lib/mongoid/relations/reflections.rb +62 -0
- data/lib/mongoid/relations/synchronization.rb +169 -0
- data/lib/mongoid/relations/targets.rb +2 -0
- data/lib/mongoid/relations/targets/enumerable.rb +473 -0
- data/lib/mongoid/relations/touchable.rb +94 -0
- data/lib/mongoid/reloadable.rb +95 -0
- data/lib/mongoid/scopable.rb +379 -0
- data/lib/mongoid/selectable.rb +59 -0
- data/lib/mongoid/serializable.rb +170 -0
- data/lib/mongoid/sessions.rb +330 -0
- data/lib/mongoid/sessions/factory.rb +129 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/options.rb +141 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/shardable.rb +65 -0
- data/lib/mongoid/state.rb +97 -0
- data/lib/mongoid/threaded.rb +383 -0
- data/lib/mongoid/threaded/lifecycle.rb +164 -0
- data/lib/mongoid/timestamps.rb +15 -0
- data/lib/mongoid/timestamps/created.rb +30 -0
- data/lib/mongoid/timestamps/created/short.rb +19 -0
- data/lib/mongoid/timestamps/short.rb +10 -0
- data/lib/mongoid/timestamps/updated.rb +39 -0
- data/lib/mongoid/timestamps/updated/short.rb +19 -0
- data/lib/mongoid/traversable.rb +192 -0
- data/lib/mongoid/unit_of_work.rb +61 -0
- data/lib/mongoid/validatable.rb +180 -0
- data/lib/mongoid/validatable/associated.rb +48 -0
- data/lib/mongoid/validatable/format.rb +20 -0
- data/lib/mongoid/validatable/length.rb +20 -0
- data/lib/mongoid/validatable/localizable.rb +30 -0
- data/lib/mongoid/validatable/macros.rb +94 -0
- data/lib/mongoid/validatable/presence.rb +86 -0
- data/lib/mongoid/validatable/queryable.rb +30 -0
- data/lib/mongoid/validatable/uniqueness.rb +330 -0
- data/lib/mongoid/version.rb +4 -0
- data/lib/rack/mongoid.rb +2 -0
- data/lib/rack/mongoid/middleware/identity_map.rb +39 -0
- data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +76 -0
- data/lib/rails/generators/mongoid/model/model_generator.rb +25 -0
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +19 -0
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +17 -0
- data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +4 -0
- data/lib/rails/generators/mongoid_generator.rb +65 -0
- data/lib/rails/mongoid.rb +180 -0
- data/lib/support/ruby_version.rb +26 -0
- data/spec/app/models/account.rb +28 -0
- data/spec/app/models/acolyte.rb +17 -0
- data/spec/app/models/actor.rb +18 -0
- data/spec/app/models/actress.rb +2 -0
- data/spec/app/models/address.rb +77 -0
- data/spec/app/models/address_component.rb +5 -0
- data/spec/app/models/address_number.rb +6 -0
- data/spec/app/models/agency.rb +5 -0
- data/spec/app/models/agent.rb +12 -0
- data/spec/app/models/album.rb +14 -0
- data/spec/app/models/alert.rb +5 -0
- data/spec/app/models/animal.rb +25 -0
- data/spec/app/models/answer.rb +4 -0
- data/spec/app/models/appointment.rb +7 -0
- data/spec/app/models/article.rb +10 -0
- data/spec/app/models/artist.rb +66 -0
- data/spec/app/models/artwork.rb +4 -0
- data/spec/app/models/audio.rb +5 -0
- data/spec/app/models/augmentation.rb +11 -0
- data/spec/app/models/author.rb +4 -0
- data/spec/app/models/band.rb +26 -0
- data/spec/app/models/bar.rb +10 -0
- data/spec/app/models/basic.rb +6 -0
- data/spec/app/models/bed.rb +1 -0
- data/spec/app/models/big_palette.rb +2 -0
- data/spec/app/models/birthday.rb +13 -0
- data/spec/app/models/book.rb +13 -0
- data/spec/app/models/breed.rb +4 -0
- data/spec/app/models/browser.rb +6 -0
- data/spec/app/models/building.rb +5 -0
- data/spec/app/models/building_address.rb +5 -0
- data/spec/app/models/bus.rb +7 -0
- data/spec/app/models/business.rb +5 -0
- data/spec/app/models/callback_recorder.rb +25 -0
- data/spec/app/models/callback_test.rb +9 -0
- data/spec/app/models/canvas.rb +25 -0
- data/spec/app/models/car.rb +1 -0
- data/spec/app/models/cat.rb +8 -0
- data/spec/app/models/category.rb +8 -0
- data/spec/app/models/child.rb +4 -0
- data/spec/app/models/child_doc.rb +22 -0
- data/spec/app/models/church.rb +4 -0
- data/spec/app/models/circle.rb +3 -0
- data/spec/app/models/circuit.rb +4 -0
- data/spec/app/models/circus.rb +7 -0
- data/spec/app/models/code.rb +5 -0
- data/spec/app/models/comment.rb +16 -0
- data/spec/app/models/contractor.rb +5 -0
- data/spec/app/models/cookie.rb +6 -0
- data/spec/app/models/country_code.rb +8 -0
- data/spec/app/models/definition.rb +7 -0
- data/spec/app/models/description.rb +11 -0
- data/spec/app/models/dictionary.rb +10 -0
- data/spec/app/models/division.rb +10 -0
- data/spec/app/models/doctor.rb +12 -0
- data/spec/app/models/dog.rb +7 -0
- data/spec/app/models/dokument.rb +5 -0
- data/spec/app/models/dragon.rb +4 -0
- data/spec/app/models/driver.rb +7 -0
- data/spec/app/models/drug.rb +6 -0
- data/spec/app/models/dungeon.rb +4 -0
- data/spec/app/models/email.rb +6 -0
- data/spec/app/models/employer.rb +5 -0
- data/spec/app/models/entry.rb +6 -0
- data/spec/app/models/eraser.rb +1 -0
- data/spec/app/models/event.rb +22 -0
- data/spec/app/models/exhibition.rb +4 -0
- data/spec/app/models/exhibitor.rb +5 -0
- data/spec/app/models/eye.rb +9 -0
- data/spec/app/models/eye_bowl.rb +9 -0
- data/spec/app/models/face.rb +8 -0
- data/spec/app/models/favorite.rb +6 -0
- data/spec/app/models/filesystem.rb +5 -0
- data/spec/app/models/fire_hydrant.rb +6 -0
- data/spec/app/models/firefox.rb +4 -0
- data/spec/app/models/fish.rb +7 -0
- data/spec/app/models/folder.rb +7 -0
- data/spec/app/models/folder_item.rb +9 -0
- data/spec/app/models/fruits.rb +28 -0
- data/spec/app/models/game.rb +19 -0
- data/spec/app/models/ghost.rb +7 -0
- data/spec/app/models/home.rb +4 -0
- data/spec/app/models/house.rb +6 -0
- data/spec/app/models/html_writer.rb +3 -0
- data/spec/app/models/image.rb +22 -0
- data/spec/app/models/implant.rb +16 -0
- data/spec/app/models/item.rb +8 -0
- data/spec/app/models/jar.rb +7 -0
- data/spec/app/models/label.rb +40 -0
- data/spec/app/models/language.rb +5 -0
- data/spec/app/models/lat_lng.rb +15 -0
- data/spec/app/models/league.rb +11 -0
- data/spec/app/models/learner.rb +2 -0
- data/spec/app/models/line_item.rb +6 -0
- data/spec/app/models/location.rb +8 -0
- data/spec/app/models/login.rb +8 -0
- data/spec/app/models/manufacturer.rb +7 -0
- data/spec/app/models/meat.rb +4 -0
- data/spec/app/models/membership.rb +4 -0
- data/spec/app/models/mixed_drink.rb +4 -0
- data/spec/app/models/movie.rb +13 -0
- data/spec/app/models/my_hash.rb +2 -0
- data/spec/app/models/name.rb +23 -0
- data/spec/app/models/node.rb +5 -0
- data/spec/app/models/note.rb +12 -0
- data/spec/app/models/ordered_post.rb +6 -0
- data/spec/app/models/ordered_preference.rb +6 -0
- data/spec/app/models/oscar.rb +15 -0
- data/spec/app/models/override.rb +16 -0
- data/spec/app/models/ownable.rb +6 -0
- data/spec/app/models/owner.rb +6 -0
- data/spec/app/models/pack.rb +3 -0
- data/spec/app/models/page.rb +5 -0
- data/spec/app/models/page_question.rb +4 -0
- data/spec/app/models/palette.rb +7 -0
- data/spec/app/models/parent.rb +5 -0
- data/spec/app/models/parent_doc.rb +6 -0
- data/spec/app/models/passport.rb +5 -0
- data/spec/app/models/patient.rb +9 -0
- data/spec/app/models/pdf_writer.rb +3 -0
- data/spec/app/models/pencil.rb +1 -0
- data/spec/app/models/person.rb +205 -0
- data/spec/app/models/pet.rb +23 -0
- data/spec/app/models/pet_owner.rb +6 -0
- data/spec/app/models/phone.rb +11 -0
- data/spec/app/models/pizza.rb +7 -0
- data/spec/app/models/player.rb +35 -0
- data/spec/app/models/post.rb +44 -0
- data/spec/app/models/powerup.rb +11 -0
- data/spec/app/models/preference.rb +9 -0
- data/spec/app/models/princess.rb +8 -0
- data/spec/app/models/product.rb +15 -0
- data/spec/app/models/profile.rb +5 -0
- data/spec/app/models/pronunciation.rb +5 -0
- data/spec/app/models/purchase.rb +4 -0
- data/spec/app/models/question.rb +8 -0
- data/spec/app/models/quiz.rb +7 -0
- data/spec/app/models/rating.rb +8 -0
- data/spec/app/models/record.rb +46 -0
- data/spec/app/models/registry.rb +4 -0
- data/spec/app/models/role.rb +7 -0
- data/spec/app/models/root_category.rb +4 -0
- data/spec/app/models/sandwich.rb +4 -0
- data/spec/app/models/scheduler.rb +7 -0
- data/spec/app/models/seo.rb +7 -0
- data/spec/app/models/series.rb +4 -0
- data/spec/app/models/server.rb +13 -0
- data/spec/app/models/service.rb +22 -0
- data/spec/app/models/shape.rb +12 -0
- data/spec/app/models/shelf.rb +5 -0
- data/spec/app/models/shipping_container.rb +5 -0
- data/spec/app/models/shipping_pack.rb +3 -0
- data/spec/app/models/shop.rb +6 -0
- data/spec/app/models/short_agent.rb +4 -0
- data/spec/app/models/short_quiz.rb +5 -0
- data/spec/app/models/slave.rb +6 -0
- data/spec/app/models/song.rb +8 -0
- data/spec/app/models/sound.rb +5 -0
- data/spec/app/models/square.rb +4 -0
- data/spec/app/models/strategy.rb +3 -0
- data/spec/app/models/sub_item.rb +3 -0
- data/spec/app/models/subscription.rb +4 -0
- data/spec/app/models/survey.rb +5 -0
- data/spec/app/models/symptom.rb +6 -0
- data/spec/app/models/tag.rb +8 -0
- data/spec/app/models/target.rb +5 -0
- data/spec/app/models/template.rb +5 -0
- data/spec/app/models/thing.rb +9 -0
- data/spec/app/models/title.rb +3 -0
- data/spec/app/models/tool.rb +8 -0
- data/spec/app/models/topping.rb +5 -0
- data/spec/app/models/track.rb +38 -0
- data/spec/app/models/translation.rb +5 -0
- data/spec/app/models/tree.rb +9 -0
- data/spec/app/models/truck.rb +3 -0
- data/spec/app/models/user.rb +21 -0
- data/spec/app/models/user_account.rb +10 -0
- data/spec/app/models/validation_callback.rb +10 -0
- data/spec/app/models/vehicle.rb +11 -0
- data/spec/app/models/version.rb +5 -0
- data/spec/app/models/vet_visit.rb +5 -0
- data/spec/app/models/video.rb +13 -0
- data/spec/app/models/weapon.rb +11 -0
- data/spec/app/models/wiki_page.rb +14 -0
- data/spec/app/models/word.rb +15 -0
- data/spec/app/models/word_origin.rb +11 -0
- data/spec/app/models/writer.rb +11 -0
- data/spec/config/mongoid.yml +38 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +456 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +118 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +110 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +48 -0
- data/spec/mongoid/atomic/paths_spec.rb +270 -0
- data/spec/mongoid/atomic_spec.rb +365 -0
- data/spec/mongoid/attributes/nested_spec.rb +4832 -0
- data/spec/mongoid/attributes/readonly_spec.rb +169 -0
- data/spec/mongoid/attributes_spec.rb +1412 -0
- data/spec/mongoid/changeable_spec.rb +1507 -0
- data/spec/mongoid/composable_spec.rb +24 -0
- data/spec/mongoid/config/environment_spec.rb +83 -0
- data/spec/mongoid/config/options_spec.rb +56 -0
- data/spec/mongoid/config_spec.rb +318 -0
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +293 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +455 -0
- data/spec/mongoid/contextual/atomic_spec.rb +529 -0
- data/spec/mongoid/contextual/find_and_modify_spec.rb +220 -0
- data/spec/mongoid/contextual/geo_near_spec.rb +405 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +464 -0
- data/spec/mongoid/contextual/memory_spec.rb +1236 -0
- data/spec/mongoid/contextual/mongo_spec.rb +1843 -0
- data/spec/mongoid/contextual/text_search_spec.rb +207 -0
- data/spec/mongoid/copyable_spec.rb +393 -0
- data/spec/mongoid/criteria/findable_spec.rb +1189 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +27 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +28 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +1063 -0
- data/spec/mongoid/criteria/scopable_spec.rb +391 -0
- data/spec/mongoid/criteria_spec.rb +3821 -0
- data/spec/mongoid/document_spec.rb +1205 -0
- data/spec/mongoid/equality_spec.rb +241 -0
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +29 -0
- data/spec/mongoid/errors/callback_spec.rb +29 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +29 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +104 -0
- data/spec/mongoid/errors/eager_load_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +36 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +37 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +40 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_path_spec.rb +23 -0
- data/spec/mongoid/errors/invalid_scope_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +17 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +29 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +29 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +29 -0
- data/spec/mongoid/errors/mixed_session_configuration_spec.rb +29 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +48 -0
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +29 -0
- data/spec/mongoid/errors/no_environment_spec.rb +29 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +29 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +23 -0
- data/spec/mongoid/errors/no_parent_spec.rb +29 -0
- data/spec/mongoid/errors/no_session_config_spec.rb +29 -0
- data/spec/mongoid/errors/no_session_database_spec.rb +29 -0
- data/spec/mongoid/errors/no_session_hosts_spec.rb +29 -0
- data/spec/mongoid/errors/no_sessions_config_spec.rb +29 -0
- data/spec/mongoid/errors/readonly_attribute_spec.rb +29 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +29 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +29 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +29 -0
- data/spec/mongoid/errors/unsaved_document_spec.rb +37 -0
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +29 -0
- data/spec/mongoid/errors/validations_spec.rb +45 -0
- data/spec/mongoid/extensions/array_spec.rb +638 -0
- data/spec/mongoid/extensions/big_decimal_spec.rb +104 -0
- data/spec/mongoid/extensions/binary_spec.rb +60 -0
- data/spec/mongoid/extensions/boolean_spec.rb +135 -0
- data/spec/mongoid/extensions/date_spec.rb +235 -0
- data/spec/mongoid/extensions/date_time_spec.rb +155 -0
- data/spec/mongoid/extensions/false_class_spec.rb +42 -0
- data/spec/mongoid/extensions/float_spec.rb +133 -0
- data/spec/mongoid/extensions/hash_spec.rb +333 -0
- data/spec/mongoid/extensions/integer_spec.rb +136 -0
- data/spec/mongoid/extensions/module_spec.rb +42 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +11 -0
- data/spec/mongoid/extensions/object_id_spec.rb +946 -0
- data/spec/mongoid/extensions/object_spec.rb +292 -0
- data/spec/mongoid/extensions/range_spec.rb +105 -0
- data/spec/mongoid/extensions/regexp_spec.rb +47 -0
- data/spec/mongoid/extensions/set_spec.rb +33 -0
- data/spec/mongoid/extensions/string_spec.rb +357 -0
- data/spec/mongoid/extensions/symbol_spec.rb +76 -0
- data/spec/mongoid/extensions/time_spec.rb +467 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +405 -0
- data/spec/mongoid/extensions/true_class_spec.rb +42 -0
- data/spec/mongoid/extensions_spec.rb +15 -0
- data/spec/mongoid/factory_spec.rb +185 -0
- data/spec/mongoid/fields/foreign_key_spec.rb +694 -0
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +184 -0
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +201 -0
- data/spec/mongoid/fields/localized_spec.rb +386 -0
- data/spec/mongoid/fields/standard_spec.rb +166 -0
- data/spec/mongoid/fields_spec.rb +1229 -0
- data/spec/mongoid/findable_spec.rb +342 -0
- data/spec/mongoid/identity_map_spec.rb +564 -0
- data/spec/mongoid/indexable/specification_spec.rb +87 -0
- data/spec/mongoid/indexable_spec.rb +504 -0
- data/spec/mongoid/inspectable_spec.rb +49 -0
- data/spec/mongoid/interceptable_spec.rb +1564 -0
- data/spec/mongoid/loggable_spec.rb +21 -0
- data/spec/mongoid/matchable/all_spec.rb +31 -0
- data/spec/mongoid/matchable/and_spec.rb +162 -0
- data/spec/mongoid/matchable/default_spec.rb +130 -0
- data/spec/mongoid/matchable/exists_spec.rb +57 -0
- data/spec/mongoid/matchable/gt_spec.rb +75 -0
- data/spec/mongoid/matchable/gte_spec.rb +74 -0
- data/spec/mongoid/matchable/in_spec.rb +25 -0
- data/spec/mongoid/matchable/lt_spec.rb +74 -0
- data/spec/mongoid/matchable/lte_spec.rb +74 -0
- data/spec/mongoid/matchable/ne_spec.rb +25 -0
- data/spec/mongoid/matchable/nin_spec.rb +25 -0
- data/spec/mongoid/matchable/or_spec.rb +106 -0
- data/spec/mongoid/matchable/size_spec.rb +25 -0
- data/spec/mongoid/matchable_spec.rb +532 -0
- data/spec/mongoid/persistable/creatable_spec.rb +512 -0
- data/spec/mongoid/persistable/deletable_spec.rb +205 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +148 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
- data/spec/mongoid/persistable/logical_spec.rb +143 -0
- data/spec/mongoid/persistable/poppable_spec.rb +115 -0
- data/spec/mongoid/persistable/pullable_spec.rb +228 -0
- data/spec/mongoid/persistable/pushable_spec.rb +258 -0
- data/spec/mongoid/persistable/renamable_spec.rb +135 -0
- data/spec/mongoid/persistable/savable_spec.rb +432 -0
- data/spec/mongoid/persistable/settable_spec.rb +139 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
- data/spec/mongoid/persistable/updatable_spec.rb +522 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
- data/spec/mongoid/persistable_spec.rb +206 -0
- data/spec/mongoid/positional_spec.rb +227 -0
- data/spec/mongoid/railties/document_spec.rb +24 -0
- data/spec/mongoid/relations/accessors_spec.rb +736 -0
- data/spec/mongoid/relations/auto_save_spec.rb +261 -0
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +171 -0
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +54 -0
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +77 -0
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +241 -0
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +153 -0
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +178 -0
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +131 -0
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +34 -0
- data/spec/mongoid/relations/builders/embedded/many_spec.rb +132 -0
- data/spec/mongoid/relations/builders/embedded/one_spec.rb +99 -0
- data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +234 -0
- data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +250 -0
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +241 -0
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +137 -0
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +178 -0
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +124 -0
- data/spec/mongoid/relations/builders_spec.rb +226 -0
- data/spec/mongoid/relations/cascading/delete_spec.rb +101 -0
- data/spec/mongoid/relations/cascading/destroy_spec.rb +47 -0
- data/spec/mongoid/relations/cascading/nullify_spec.rb +32 -0
- data/spec/mongoid/relations/cascading/restrict_spec.rb +68 -0
- data/spec/mongoid/relations/cascading_spec.rb +355 -0
- data/spec/mongoid/relations/constraint_spec.rb +74 -0
- data/spec/mongoid/relations/conversions_spec.rb +126 -0
- data/spec/mongoid/relations/counter_cache_spec.rb +205 -0
- data/spec/mongoid/relations/cyclic_spec.rb +156 -0
- data/spec/mongoid/relations/embedded/dirty_spec.rb +65 -0
- data/spec/mongoid/relations/embedded/in_spec.rb +579 -0
- data/spec/mongoid/relations/embedded/many_spec.rb +3781 -0
- data/spec/mongoid/relations/embedded/one_spec.rb +1014 -0
- data/spec/mongoid/relations/macros_spec.rb +613 -0
- data/spec/mongoid/relations/metadata_spec.rb +1917 -0
- data/spec/mongoid/relations/options_spec.rb +35 -0
- data/spec/mongoid/relations/polymorphic_spec.rb +128 -0
- data/spec/mongoid/relations/proxy_spec.rb +48 -0
- data/spec/mongoid/relations/referenced/in_spec.rb +1435 -0
- data/spec/mongoid/relations/referenced/many_spec.rb +3546 -0
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +3556 -0
- data/spec/mongoid/relations/referenced/one_spec.rb +1289 -0
- data/spec/mongoid/relations/reflections_spec.rb +101 -0
- data/spec/mongoid/relations/synchronization_spec.rb +449 -0
- data/spec/mongoid/relations/targets/enumerable_spec.rb +1710 -0
- data/spec/mongoid/relations/touchable_spec.rb +296 -0
- data/spec/mongoid/relations_spec.rb +188 -0
- data/spec/mongoid/reloadable_spec.rb +305 -0
- data/spec/mongoid/scopable_spec.rb +926 -0
- data/spec/mongoid/selectable_spec.rb +134 -0
- data/spec/mongoid/serializable_spec.rb +862 -0
- data/spec/mongoid/sessions/factory_spec.rb +312 -0
- data/spec/mongoid/sessions/mongo_uri_spec.rb +103 -0
- data/spec/mongoid/sessions/options_spec.rb +71 -0
- data/spec/mongoid/sessions_spec.rb +1078 -0
- data/spec/mongoid/shardable_spec.rb +61 -0
- data/spec/mongoid/state_spec.rb +102 -0
- data/spec/mongoid/threaded_spec.rb +258 -0
- data/spec/mongoid/timestamps/created/short_spec.rb +51 -0
- data/spec/mongoid/timestamps/created_spec.rb +44 -0
- data/spec/mongoid/timestamps/updated/short_spec.rb +90 -0
- data/spec/mongoid/timestamps/updated_spec.rb +86 -0
- data/spec/mongoid/timestamps_spec.rb +112 -0
- data/spec/mongoid/traversable_spec.rb +244 -0
- data/spec/mongoid/unit_of_work_spec.rb +196 -0
- data/spec/mongoid/validatable/associated_spec.rb +183 -0
- data/spec/mongoid/validatable/format_spec.rb +83 -0
- data/spec/mongoid/validatable/length_spec.rb +119 -0
- data/spec/mongoid/validatable/numericality_spec.rb +30 -0
- data/spec/mongoid/validatable/presence_spec.rb +511 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +2305 -0
- data/spec/mongoid/validatable_spec.rb +309 -0
- data/spec/mongoid_spec.rb +74 -0
- data/spec/rack/mongoid/middleware/identity_map_spec.rb +72 -0
- data/spec/rails/mongoid_spec.rb +462 -0
- data/spec/spec_helper.rb +103 -0
- metadata +1159 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Relations::Options do
|
4
|
+
|
5
|
+
describe ".validate!" do
|
6
|
+
|
7
|
+
let(:relation) do
|
8
|
+
Mongoid::Relations::Embedded::Many
|
9
|
+
end
|
10
|
+
|
11
|
+
context "when the options are valid for the relation" do
|
12
|
+
|
13
|
+
let(:options) do
|
14
|
+
{ relation: relation, as: :addressable }
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns true" do
|
18
|
+
expect(described_class.validate!(options)).to be_true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when the options are invalid for the relation" do
|
23
|
+
|
24
|
+
let(:options) do
|
25
|
+
{ name: :addresses, relation: relation, polymorphic: true }
|
26
|
+
end
|
27
|
+
|
28
|
+
it "raises an error" do
|
29
|
+
expect {
|
30
|
+
described_class.validate!(options)
|
31
|
+
}.to raise_error(Mongoid::Errors::InvalidOptions)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Relations::Polymorphic do
|
4
|
+
|
5
|
+
describe "#polymorph" do
|
6
|
+
|
7
|
+
let(:klass) do
|
8
|
+
Class.new.tap { |c| c.send(:include, Mongoid::Document) }
|
9
|
+
end
|
10
|
+
|
11
|
+
context "when the relation is polymorphic" do
|
12
|
+
|
13
|
+
context "when the relation stores a foreign key" do
|
14
|
+
|
15
|
+
let(:metadata) do
|
16
|
+
Mongoid::Relations::Metadata.new(
|
17
|
+
name: :ratable,
|
18
|
+
polymorphic: true,
|
19
|
+
relation: Mongoid::Relations::Referenced::In
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
let!(:polymorphed) do
|
24
|
+
klass.polymorph(metadata)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "sets polymorphic to true" do
|
28
|
+
expect(klass).to be_polymorphic
|
29
|
+
end
|
30
|
+
|
31
|
+
it "adds the foreign key type field" do
|
32
|
+
expect(klass.fields["ratable_type"]).to_not be_nil
|
33
|
+
end
|
34
|
+
|
35
|
+
it "returns self" do
|
36
|
+
expect(polymorphed).to eq(klass)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "when the relation does not store a foreign key" do
|
41
|
+
|
42
|
+
let(:metadata) do
|
43
|
+
Mongoid::Relations::Metadata.new(
|
44
|
+
name: :ratings,
|
45
|
+
as: :ratable,
|
46
|
+
relation: Mongoid::Relations::Referenced::Many
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
before do
|
51
|
+
klass.polymorph(metadata)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "sets polymorphic to true" do
|
55
|
+
expect(klass).to be_polymorphic
|
56
|
+
end
|
57
|
+
|
58
|
+
it "does not add the foreign key type field" do
|
59
|
+
expect(klass.fields["ratable_type"]).to be_nil
|
60
|
+
end
|
61
|
+
|
62
|
+
it "does not add the foreign key inverse field field" do
|
63
|
+
expect(klass.fields["ratable_field"]).to be_nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "when the relation is not polymorphic" do
|
69
|
+
|
70
|
+
let(:metadata) do
|
71
|
+
Mongoid::Relations::Metadata.new(
|
72
|
+
name: :ratings,
|
73
|
+
relation: Mongoid::Relations::Referenced::Many
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
before do
|
78
|
+
klass.polymorph(metadata)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "sets polymorphic to false" do
|
82
|
+
expect(klass).to_not be_polymorphic
|
83
|
+
end
|
84
|
+
|
85
|
+
it "does not add the foreign key type field" do
|
86
|
+
expect(klass.fields["ratable_type"]).to be_nil
|
87
|
+
end
|
88
|
+
|
89
|
+
it "does not add the foreign key inverse field field" do
|
90
|
+
expect(klass.fields["ratable_field"]).to be_nil
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe ".polymorphic?" do
|
96
|
+
|
97
|
+
context "when the document is in a polymorphic relation" do
|
98
|
+
|
99
|
+
it "returns true" do
|
100
|
+
expect(Movie).to be_polymorphic
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "when the document is not in a polymorphic relation" do
|
105
|
+
|
106
|
+
it "returns false" do
|
107
|
+
expect(Survey).to_not be_polymorphic
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe "#polymorphic?" do
|
113
|
+
|
114
|
+
context "when the document is in a polymorphic relation" do
|
115
|
+
|
116
|
+
it "returns true" do
|
117
|
+
expect(Movie.new).to be_polymorphic
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context "when the document is not in a polymorphic relation" do
|
122
|
+
|
123
|
+
it "returns false" do
|
124
|
+
expect(Survey.new).to_not be_polymorphic
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Relations::Proxy do
|
4
|
+
|
5
|
+
describe "#extend" do
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
Person.reset_callbacks(:validate)
|
9
|
+
module Testable
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:all) do
|
14
|
+
Object.send(:remove_const, :Testable)
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:person) do
|
18
|
+
Person.create
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:name) do
|
22
|
+
person.build_name
|
23
|
+
end
|
24
|
+
|
25
|
+
before do
|
26
|
+
name.namable.extend(Testable)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "extends the proxied object" do
|
30
|
+
expect(person).to be_a(Testable)
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when extending from the relation definition" do
|
34
|
+
|
35
|
+
let!(:address) do
|
36
|
+
person.addresses.create(street: "hobrecht")
|
37
|
+
end
|
38
|
+
|
39
|
+
let(:found) do
|
40
|
+
person.addresses.find_by_street("hobrecht")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "extends the proxy" do
|
44
|
+
expect(found).to eq(address)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,1435 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Relations::Referenced::In do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
Person.reset_callbacks(:validate)
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:person) do
|
10
|
+
Person.create
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#=" do
|
14
|
+
|
15
|
+
context "when the relation is named target" do
|
16
|
+
|
17
|
+
let(:target) do
|
18
|
+
User.new
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when the relation is referenced from an embeds many" do
|
22
|
+
|
23
|
+
context "when setting via create" do
|
24
|
+
|
25
|
+
let(:service) do
|
26
|
+
person.services.create(target: target)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "sets the target relation" do
|
30
|
+
expect(service.target).to eq(target)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "when the inverse relation has no reference defined" do
|
37
|
+
|
38
|
+
let(:agent) do
|
39
|
+
Agent.new(title: "007")
|
40
|
+
end
|
41
|
+
|
42
|
+
let(:game) do
|
43
|
+
Game.new(name: "Donkey Kong")
|
44
|
+
end
|
45
|
+
|
46
|
+
before do
|
47
|
+
agent.game = game
|
48
|
+
end
|
49
|
+
|
50
|
+
it "sets the relation" do
|
51
|
+
expect(agent.game).to eq(game)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "sets the foreign_key" do
|
55
|
+
expect(agent.game_id).to eq(game.id)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "when referencing a document from an embedded document" do
|
60
|
+
|
61
|
+
let(:person) do
|
62
|
+
Person.create
|
63
|
+
end
|
64
|
+
|
65
|
+
let(:address) do
|
66
|
+
person.addresses.create(street: "Wienerstr")
|
67
|
+
end
|
68
|
+
|
69
|
+
let(:account) do
|
70
|
+
Account.create(name: "1", number: 1000000)
|
71
|
+
end
|
72
|
+
|
73
|
+
before do
|
74
|
+
address.account = account
|
75
|
+
end
|
76
|
+
|
77
|
+
it "sets the relation" do
|
78
|
+
expect(address.account).to eq(account)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "does not erase the metadata" do
|
82
|
+
expect(address.metadata).to_not be_nil
|
83
|
+
end
|
84
|
+
|
85
|
+
it "allows saving of the embedded document" do
|
86
|
+
expect(address.save).to be_true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "when the parent is a references one" do
|
91
|
+
|
92
|
+
context "when the relation is not polymorphic" do
|
93
|
+
|
94
|
+
context "when the child is a new record" do
|
95
|
+
|
96
|
+
let(:person) do
|
97
|
+
Person.new
|
98
|
+
end
|
99
|
+
|
100
|
+
let(:game) do
|
101
|
+
Game.new
|
102
|
+
end
|
103
|
+
|
104
|
+
before do
|
105
|
+
game.person = person
|
106
|
+
end
|
107
|
+
|
108
|
+
it "sets the target of the relation" do
|
109
|
+
expect(game.person.target).to eq(person)
|
110
|
+
end
|
111
|
+
|
112
|
+
it "sets the foreign key on the relation" do
|
113
|
+
expect(game.person_id).to eq(person.id)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "sets the base on the inverse relation" do
|
117
|
+
expect(person.game).to eq(game)
|
118
|
+
end
|
119
|
+
|
120
|
+
it "sets the same instance on the inverse relation" do
|
121
|
+
expect(person.game).to eql(game)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "does not save the target" do
|
125
|
+
expect(person).to_not be_persisted
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
context "when the child is not a new record" do
|
130
|
+
|
131
|
+
let(:person) do
|
132
|
+
Person.new
|
133
|
+
end
|
134
|
+
|
135
|
+
let(:game) do
|
136
|
+
Game.create
|
137
|
+
end
|
138
|
+
|
139
|
+
before do
|
140
|
+
game.person = person
|
141
|
+
end
|
142
|
+
|
143
|
+
it "sets the target of the relation" do
|
144
|
+
expect(game.person.target).to eq(person)
|
145
|
+
end
|
146
|
+
|
147
|
+
it "sets the foreign key of the relation" do
|
148
|
+
expect(game.person_id).to eq(person.id)
|
149
|
+
end
|
150
|
+
|
151
|
+
it "sets the base on the inverse relation" do
|
152
|
+
expect(person.game).to eq(game)
|
153
|
+
end
|
154
|
+
|
155
|
+
it "sets the same instance on the inverse relation" do
|
156
|
+
expect(person.game).to eql(game)
|
157
|
+
end
|
158
|
+
|
159
|
+
it "does not saves the target" do
|
160
|
+
expect(person).to_not be_persisted
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
context "when the relation is polymorphic" do
|
166
|
+
|
167
|
+
context "when the parent is a subclass" do
|
168
|
+
|
169
|
+
let(:canvas) do
|
170
|
+
Canvas::Test.create
|
171
|
+
end
|
172
|
+
|
173
|
+
let(:comment) do
|
174
|
+
Comment.create(title: "test")
|
175
|
+
end
|
176
|
+
|
177
|
+
before do
|
178
|
+
comment.commentable = canvas
|
179
|
+
comment.save
|
180
|
+
end
|
181
|
+
|
182
|
+
it "sets the correct value in the type field" do
|
183
|
+
expect(comment.commentable_type).to eq("Canvas::Test")
|
184
|
+
end
|
185
|
+
|
186
|
+
it "can retrieve the document from the database" do
|
187
|
+
expect(comment.reload.commentable).to eq(canvas)
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
context "when the child is a new record" do
|
192
|
+
|
193
|
+
let(:bar) do
|
194
|
+
Bar.new
|
195
|
+
end
|
196
|
+
|
197
|
+
let(:rating) do
|
198
|
+
Rating.new
|
199
|
+
end
|
200
|
+
|
201
|
+
before do
|
202
|
+
rating.ratable = bar
|
203
|
+
end
|
204
|
+
|
205
|
+
it "sets the target of the relation" do
|
206
|
+
expect(rating.ratable.target).to eq(bar)
|
207
|
+
end
|
208
|
+
|
209
|
+
it "sets the foreign key on the relation" do
|
210
|
+
expect(rating.ratable_id).to eq(bar.id)
|
211
|
+
end
|
212
|
+
|
213
|
+
it "sets the base on the inverse relation" do
|
214
|
+
expect(bar.rating).to eq(rating)
|
215
|
+
end
|
216
|
+
|
217
|
+
it "sets the same instance on the inverse relation" do
|
218
|
+
expect(bar.rating).to eql(rating)
|
219
|
+
end
|
220
|
+
|
221
|
+
it "does not save the target" do
|
222
|
+
expect(bar).to_not be_persisted
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
context "when the child is not a new record" do
|
227
|
+
|
228
|
+
let(:bar) do
|
229
|
+
Bar.new
|
230
|
+
end
|
231
|
+
|
232
|
+
let(:rating) do
|
233
|
+
Rating.create
|
234
|
+
end
|
235
|
+
|
236
|
+
before do
|
237
|
+
rating.ratable = bar
|
238
|
+
end
|
239
|
+
|
240
|
+
it "sets the target of the relation" do
|
241
|
+
expect(rating.ratable.target).to eq(bar)
|
242
|
+
end
|
243
|
+
|
244
|
+
it "sets the foreign key of the relation" do
|
245
|
+
expect(rating.ratable_id).to eq(bar.id)
|
246
|
+
end
|
247
|
+
|
248
|
+
it "sets the base on the inverse relation" do
|
249
|
+
expect(bar.rating).to eq(rating)
|
250
|
+
end
|
251
|
+
|
252
|
+
it "sets the same instance on the inverse relation" do
|
253
|
+
expect(bar.rating).to eql(rating)
|
254
|
+
end
|
255
|
+
|
256
|
+
it "does not saves the target" do
|
257
|
+
expect(bar).to_not be_persisted
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
context "when the parent is a references many" do
|
264
|
+
|
265
|
+
context "when the relation is not polymorphic" do
|
266
|
+
|
267
|
+
context "when the child is a new record" do
|
268
|
+
|
269
|
+
let(:person) do
|
270
|
+
Person.new
|
271
|
+
end
|
272
|
+
|
273
|
+
let(:post) do
|
274
|
+
Post.new
|
275
|
+
end
|
276
|
+
|
277
|
+
before do
|
278
|
+
post.person = person
|
279
|
+
end
|
280
|
+
|
281
|
+
it "sets the target of the relation" do
|
282
|
+
expect(post.person.target).to eq(person)
|
283
|
+
end
|
284
|
+
|
285
|
+
it "sets the foreign key on the relation" do
|
286
|
+
expect(post.person_id).to eq(person.id)
|
287
|
+
end
|
288
|
+
|
289
|
+
it "does not save the target" do
|
290
|
+
expect(person).to_not be_persisted
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
context "when the child is not a new record" do
|
295
|
+
|
296
|
+
let(:person) do
|
297
|
+
Person.new
|
298
|
+
end
|
299
|
+
|
300
|
+
let(:post) do
|
301
|
+
Post.create
|
302
|
+
end
|
303
|
+
|
304
|
+
before do
|
305
|
+
post.person = person
|
306
|
+
end
|
307
|
+
|
308
|
+
it "sets the target of the relation" do
|
309
|
+
expect(post.person.target).to eq(person)
|
310
|
+
end
|
311
|
+
|
312
|
+
it "sets the foreign key of the relation" do
|
313
|
+
expect(post.person_id).to eq(person.id)
|
314
|
+
end
|
315
|
+
|
316
|
+
it "does not saves the target" do
|
317
|
+
expect(person).to_not be_persisted
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
context "when the relation is polymorphic" do
|
323
|
+
|
324
|
+
context "when multiple relations against the same class exist" do
|
325
|
+
|
326
|
+
let(:face) do
|
327
|
+
Face.new
|
328
|
+
end
|
329
|
+
|
330
|
+
let(:eye) do
|
331
|
+
Eye.new
|
332
|
+
end
|
333
|
+
|
334
|
+
it "raises an error" do
|
335
|
+
expect {
|
336
|
+
eye.eyeable = face
|
337
|
+
}.to raise_error(Mongoid::Errors::InvalidSetPolymorphicRelation)
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
341
|
+
context "when multiple relations of the same name but different class exist" do
|
342
|
+
|
343
|
+
let(:eye) do
|
344
|
+
Eye.new
|
345
|
+
end
|
346
|
+
|
347
|
+
let(:eye_bowl) do
|
348
|
+
EyeBowl.new
|
349
|
+
end
|
350
|
+
|
351
|
+
it "should assign as expected" do
|
352
|
+
eye.suspended_in = eye_bowl
|
353
|
+
expect(eye.suspended_in.target).to eq(eye_bowl)
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
context "when one relation against the same class exists" do
|
358
|
+
|
359
|
+
context "when the child is a new record" do
|
360
|
+
|
361
|
+
let(:movie) do
|
362
|
+
Movie.new
|
363
|
+
end
|
364
|
+
|
365
|
+
let(:rating) do
|
366
|
+
Rating.new
|
367
|
+
end
|
368
|
+
|
369
|
+
before do
|
370
|
+
rating.ratable = movie
|
371
|
+
end
|
372
|
+
|
373
|
+
it "sets the target of the relation" do
|
374
|
+
expect(rating.ratable.target).to eq(movie)
|
375
|
+
end
|
376
|
+
|
377
|
+
it "sets the foreign key on the relation" do
|
378
|
+
expect(rating.ratable_id).to eq(movie.id)
|
379
|
+
end
|
380
|
+
|
381
|
+
it "does not save the target" do
|
382
|
+
expect(movie).to_not be_persisted
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
context "when the child is not a new record" do
|
387
|
+
|
388
|
+
let(:movie) do
|
389
|
+
Movie.new
|
390
|
+
end
|
391
|
+
|
392
|
+
let(:rating) do
|
393
|
+
Rating.create
|
394
|
+
end
|
395
|
+
|
396
|
+
before do
|
397
|
+
rating.ratable = movie
|
398
|
+
end
|
399
|
+
|
400
|
+
it "sets the target of the relation" do
|
401
|
+
expect(rating.ratable.target).to eq(movie)
|
402
|
+
end
|
403
|
+
|
404
|
+
it "sets the foreign key of the relation" do
|
405
|
+
expect(rating.ratable_id).to eq(movie.id)
|
406
|
+
end
|
407
|
+
|
408
|
+
it "does not saves the target" do
|
409
|
+
expect(movie).to_not be_persisted
|
410
|
+
end
|
411
|
+
end
|
412
|
+
end
|
413
|
+
end
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
describe "#= nil" do
|
418
|
+
|
419
|
+
context "when dependent is destroy" do
|
420
|
+
|
421
|
+
let(:account) do
|
422
|
+
Account.create
|
423
|
+
end
|
424
|
+
|
425
|
+
let(:drug) do
|
426
|
+
Drug.create
|
427
|
+
end
|
428
|
+
|
429
|
+
let(:person) do
|
430
|
+
Person.create
|
431
|
+
end
|
432
|
+
|
433
|
+
context "when relation is has_one" do
|
434
|
+
|
435
|
+
before do
|
436
|
+
Account.belongs_to :person, dependent: :destroy
|
437
|
+
Person.has_one :account
|
438
|
+
person.account = account
|
439
|
+
person.save
|
440
|
+
end
|
441
|
+
|
442
|
+
after :all do
|
443
|
+
Account.belongs_to :person, dependent: :nullify
|
444
|
+
Person.has_one :account, validate: false
|
445
|
+
end
|
446
|
+
|
447
|
+
context "when parent exists" do
|
448
|
+
|
449
|
+
context "when child is destroyed" do
|
450
|
+
|
451
|
+
before do
|
452
|
+
account.delete
|
453
|
+
end
|
454
|
+
|
455
|
+
it "deletes child" do
|
456
|
+
expect(account).to be_destroyed
|
457
|
+
end
|
458
|
+
|
459
|
+
it "deletes parent" do
|
460
|
+
expect(person).to be_destroyed
|
461
|
+
end
|
462
|
+
end
|
463
|
+
end
|
464
|
+
end
|
465
|
+
|
466
|
+
context "when relation is has_many" do
|
467
|
+
|
468
|
+
before do
|
469
|
+
Drug.belongs_to :person, dependent: :destroy
|
470
|
+
Person.has_many :drugs
|
471
|
+
person.drugs = [drug]
|
472
|
+
person.save
|
473
|
+
end
|
474
|
+
|
475
|
+
after :all do
|
476
|
+
Drug.belongs_to :person, dependent: :nullify
|
477
|
+
Person.has_many :drugs, validate: false
|
478
|
+
end
|
479
|
+
|
480
|
+
context "when parent exists" do
|
481
|
+
|
482
|
+
context "when child is destroyed" do
|
483
|
+
|
484
|
+
before do
|
485
|
+
drug.delete
|
486
|
+
end
|
487
|
+
|
488
|
+
it "deletes child" do
|
489
|
+
expect(drug).to be_destroyed
|
490
|
+
end
|
491
|
+
|
492
|
+
it "deletes parent" do
|
493
|
+
expect(person).to be_destroyed
|
494
|
+
end
|
495
|
+
end
|
496
|
+
end
|
497
|
+
end
|
498
|
+
end
|
499
|
+
|
500
|
+
context "when dependent is delete" do
|
501
|
+
|
502
|
+
let(:account) do
|
503
|
+
Account.create
|
504
|
+
end
|
505
|
+
|
506
|
+
let(:drug) do
|
507
|
+
Drug.create
|
508
|
+
end
|
509
|
+
|
510
|
+
let(:person) do
|
511
|
+
Person.create
|
512
|
+
end
|
513
|
+
|
514
|
+
context "when relation is has_one" do
|
515
|
+
|
516
|
+
before do
|
517
|
+
Account.belongs_to :person, dependent: :delete
|
518
|
+
Person.has_one :account
|
519
|
+
person.account = account
|
520
|
+
person.save
|
521
|
+
end
|
522
|
+
|
523
|
+
after :all do
|
524
|
+
Account.belongs_to :person, dependent: :nullify
|
525
|
+
Person.has_one :account, validate: false
|
526
|
+
end
|
527
|
+
|
528
|
+
context "when parent is persisted" do
|
529
|
+
|
530
|
+
context "when child is deleted" do
|
531
|
+
|
532
|
+
before do
|
533
|
+
account.delete
|
534
|
+
end
|
535
|
+
|
536
|
+
it "deletes child" do
|
537
|
+
expect(account).to be_destroyed
|
538
|
+
end
|
539
|
+
|
540
|
+
it "deletes parent" do
|
541
|
+
expect(person).to be_destroyed
|
542
|
+
end
|
543
|
+
end
|
544
|
+
end
|
545
|
+
end
|
546
|
+
|
547
|
+
context "when relation is has_many" do
|
548
|
+
|
549
|
+
before do
|
550
|
+
Drug.belongs_to :person, dependent: :delete
|
551
|
+
Person.has_many :drugs
|
552
|
+
person.drugs = [drug]
|
553
|
+
person.save
|
554
|
+
end
|
555
|
+
|
556
|
+
after :all do
|
557
|
+
Drug.belongs_to :person, dependent: :nullify
|
558
|
+
Person.has_many :drugs, validate: false
|
559
|
+
end
|
560
|
+
|
561
|
+
context "when parent exists" do
|
562
|
+
|
563
|
+
context "when child is destroyed" do
|
564
|
+
|
565
|
+
before do
|
566
|
+
drug.delete
|
567
|
+
end
|
568
|
+
|
569
|
+
it "deletes child" do
|
570
|
+
expect(drug).to be_destroyed
|
571
|
+
end
|
572
|
+
|
573
|
+
it "deletes parent" do
|
574
|
+
expect(person).to be_destroyed
|
575
|
+
end
|
576
|
+
end
|
577
|
+
end
|
578
|
+
end
|
579
|
+
end
|
580
|
+
|
581
|
+
context "when dependent is nullify" do
|
582
|
+
|
583
|
+
let(:account) do
|
584
|
+
Account.create
|
585
|
+
end
|
586
|
+
|
587
|
+
let(:drug) do
|
588
|
+
Drug.create
|
589
|
+
end
|
590
|
+
|
591
|
+
let(:person) do
|
592
|
+
Person.create
|
593
|
+
end
|
594
|
+
|
595
|
+
context "when relation is has_one" do
|
596
|
+
|
597
|
+
before do
|
598
|
+
Account.belongs_to :person, dependent: :nullify
|
599
|
+
Person.has_one :account
|
600
|
+
person.account = account
|
601
|
+
person.save
|
602
|
+
end
|
603
|
+
|
604
|
+
context "when parent is persisted" do
|
605
|
+
|
606
|
+
context "when child is deleted" do
|
607
|
+
|
608
|
+
before do
|
609
|
+
account.delete
|
610
|
+
end
|
611
|
+
|
612
|
+
it "deletes child" do
|
613
|
+
expect(account).to be_destroyed
|
614
|
+
end
|
615
|
+
|
616
|
+
it "doesn't delete parent" do
|
617
|
+
expect(person).to_not be_destroyed
|
618
|
+
end
|
619
|
+
|
620
|
+
it "removes the link" do
|
621
|
+
expect(person.account).to be_nil
|
622
|
+
end
|
623
|
+
end
|
624
|
+
end
|
625
|
+
end
|
626
|
+
|
627
|
+
context "when relation is has_many" do
|
628
|
+
|
629
|
+
before do
|
630
|
+
Drug.belongs_to :person, dependent: :nullify
|
631
|
+
Person.has_many :drugs
|
632
|
+
person.drugs = [drug]
|
633
|
+
person.save
|
634
|
+
end
|
635
|
+
|
636
|
+
context "when parent exists" do
|
637
|
+
|
638
|
+
context "when child is destroyed" do
|
639
|
+
|
640
|
+
before do
|
641
|
+
drug.delete
|
642
|
+
end
|
643
|
+
|
644
|
+
it "deletes child" do
|
645
|
+
expect(drug).to be_destroyed
|
646
|
+
end
|
647
|
+
|
648
|
+
it "doesn't deletes parent" do
|
649
|
+
expect(person).to_not be_destroyed
|
650
|
+
end
|
651
|
+
|
652
|
+
it "removes the link" do
|
653
|
+
expect(person.drugs).to eq([])
|
654
|
+
end
|
655
|
+
end
|
656
|
+
end
|
657
|
+
end
|
658
|
+
end
|
659
|
+
|
660
|
+
context "when the inverse relation has no reference defined" do
|
661
|
+
|
662
|
+
let(:agent) do
|
663
|
+
Agent.new(title: "007")
|
664
|
+
end
|
665
|
+
|
666
|
+
let(:game) do
|
667
|
+
Game.new(name: "Donkey Kong")
|
668
|
+
end
|
669
|
+
|
670
|
+
before do
|
671
|
+
agent.game = game
|
672
|
+
agent.game = nil
|
673
|
+
end
|
674
|
+
|
675
|
+
it "removes the relation" do
|
676
|
+
expect(agent.game).to be_nil
|
677
|
+
end
|
678
|
+
|
679
|
+
it "removes the foreign_key" do
|
680
|
+
expect(agent.game_id).to be_nil
|
681
|
+
end
|
682
|
+
end
|
683
|
+
|
684
|
+
context "when the parent is a references one" do
|
685
|
+
|
686
|
+
context "when the relation is not polymorphic" do
|
687
|
+
|
688
|
+
context "when the parent is a new record" do
|
689
|
+
|
690
|
+
let(:person) do
|
691
|
+
Person.new
|
692
|
+
end
|
693
|
+
|
694
|
+
let(:game) do
|
695
|
+
Game.new
|
696
|
+
end
|
697
|
+
|
698
|
+
before do
|
699
|
+
game.person = person
|
700
|
+
game.person = nil
|
701
|
+
end
|
702
|
+
|
703
|
+
it "sets the relation to nil" do
|
704
|
+
expect(game.person).to be_nil
|
705
|
+
end
|
706
|
+
|
707
|
+
it "removed the inverse relation" do
|
708
|
+
expect(person.game).to be_nil
|
709
|
+
end
|
710
|
+
|
711
|
+
it "removes the foreign key value" do
|
712
|
+
expect(game.person_id).to be_nil
|
713
|
+
end
|
714
|
+
end
|
715
|
+
|
716
|
+
context "when the parent is not a new record" do
|
717
|
+
|
718
|
+
let(:person) do
|
719
|
+
Person.create
|
720
|
+
end
|
721
|
+
|
722
|
+
let(:game) do
|
723
|
+
Game.create
|
724
|
+
end
|
725
|
+
|
726
|
+
before do
|
727
|
+
game.person = person
|
728
|
+
game.person = nil
|
729
|
+
end
|
730
|
+
|
731
|
+
it "sets the relation to nil" do
|
732
|
+
expect(game.person).to be_nil
|
733
|
+
end
|
734
|
+
|
735
|
+
it "removed the inverse relation" do
|
736
|
+
expect(person.game).to be_nil
|
737
|
+
end
|
738
|
+
|
739
|
+
it "removes the foreign key value" do
|
740
|
+
expect(game.person_id).to be_nil
|
741
|
+
end
|
742
|
+
|
743
|
+
it "does not delete the child" do
|
744
|
+
expect(game).to_not be_destroyed
|
745
|
+
end
|
746
|
+
end
|
747
|
+
end
|
748
|
+
|
749
|
+
context "when the relation is polymorphic" do
|
750
|
+
|
751
|
+
context "when one relation against the same class exists" do
|
752
|
+
|
753
|
+
context "when the parent is a new record" do
|
754
|
+
|
755
|
+
let(:bar) do
|
756
|
+
Bar.new
|
757
|
+
end
|
758
|
+
|
759
|
+
let(:rating) do
|
760
|
+
Rating.new
|
761
|
+
end
|
762
|
+
|
763
|
+
before do
|
764
|
+
rating.ratable = bar
|
765
|
+
rating.ratable = nil
|
766
|
+
end
|
767
|
+
|
768
|
+
it "sets the relation to nil" do
|
769
|
+
expect(rating.ratable).to be_nil
|
770
|
+
end
|
771
|
+
|
772
|
+
it "removed the inverse relation" do
|
773
|
+
expect(bar.rating).to be_nil
|
774
|
+
end
|
775
|
+
|
776
|
+
it "removes the foreign key value" do
|
777
|
+
expect(rating.ratable_id).to be_nil
|
778
|
+
end
|
779
|
+
end
|
780
|
+
|
781
|
+
context "when the parent is not a new record" do
|
782
|
+
|
783
|
+
let(:bar) do
|
784
|
+
Bar.new
|
785
|
+
end
|
786
|
+
|
787
|
+
let(:rating) do
|
788
|
+
Rating.create
|
789
|
+
end
|
790
|
+
|
791
|
+
before do
|
792
|
+
rating.ratable = bar
|
793
|
+
rating.ratable = nil
|
794
|
+
end
|
795
|
+
|
796
|
+
it "sets the relation to nil" do
|
797
|
+
expect(rating.ratable).to be_nil
|
798
|
+
end
|
799
|
+
|
800
|
+
it "removed the inverse relation" do
|
801
|
+
expect(bar.rating).to be_nil
|
802
|
+
end
|
803
|
+
|
804
|
+
it "removes the foreign key value" do
|
805
|
+
expect(rating.ratable_id).to be_nil
|
806
|
+
end
|
807
|
+
end
|
808
|
+
end
|
809
|
+
end
|
810
|
+
end
|
811
|
+
|
812
|
+
context "when the parent is a references many" do
|
813
|
+
|
814
|
+
context "when the relation is not polymorphic" do
|
815
|
+
|
816
|
+
context "when the parent is a new record" do
|
817
|
+
|
818
|
+
let(:person) do
|
819
|
+
Person.new
|
820
|
+
end
|
821
|
+
|
822
|
+
let(:post) do
|
823
|
+
Post.new
|
824
|
+
end
|
825
|
+
|
826
|
+
before do
|
827
|
+
post.person = person
|
828
|
+
post.person = nil
|
829
|
+
end
|
830
|
+
|
831
|
+
it "sets the relation to nil" do
|
832
|
+
expect(post.person).to be_nil
|
833
|
+
end
|
834
|
+
|
835
|
+
it "removed the inverse relation" do
|
836
|
+
expect(person.posts).to be_empty
|
837
|
+
end
|
838
|
+
|
839
|
+
it "removes the foreign key value" do
|
840
|
+
expect(post.person_id).to be_nil
|
841
|
+
end
|
842
|
+
end
|
843
|
+
|
844
|
+
context "when the parent is not a new record" do
|
845
|
+
|
846
|
+
let(:person) do
|
847
|
+
Person.new
|
848
|
+
end
|
849
|
+
|
850
|
+
let(:post) do
|
851
|
+
Post.create
|
852
|
+
end
|
853
|
+
|
854
|
+
before do
|
855
|
+
post.person = person
|
856
|
+
post.person = nil
|
857
|
+
end
|
858
|
+
|
859
|
+
it "sets the relation to nil" do
|
860
|
+
expect(post.person).to be_nil
|
861
|
+
end
|
862
|
+
|
863
|
+
it "removed the inverse relation" do
|
864
|
+
expect(person.posts).to be_empty
|
865
|
+
end
|
866
|
+
|
867
|
+
it "removes the foreign key value" do
|
868
|
+
expect(post.person_id).to be_nil
|
869
|
+
end
|
870
|
+
end
|
871
|
+
end
|
872
|
+
|
873
|
+
context "when the relation is polymorphic" do
|
874
|
+
|
875
|
+
context "when the parent is a new record" do
|
876
|
+
|
877
|
+
let(:movie) do
|
878
|
+
Movie.new
|
879
|
+
end
|
880
|
+
|
881
|
+
let(:rating) do
|
882
|
+
Rating.new
|
883
|
+
end
|
884
|
+
|
885
|
+
before do
|
886
|
+
rating.ratable = movie
|
887
|
+
rating.ratable = nil
|
888
|
+
end
|
889
|
+
|
890
|
+
it "sets the relation to nil" do
|
891
|
+
expect(rating.ratable).to be_nil
|
892
|
+
end
|
893
|
+
|
894
|
+
it "removed the inverse relation" do
|
895
|
+
expect(movie.ratings).to be_empty
|
896
|
+
end
|
897
|
+
|
898
|
+
it "removes the foreign key value" do
|
899
|
+
expect(rating.ratable_id).to be_nil
|
900
|
+
end
|
901
|
+
end
|
902
|
+
|
903
|
+
context "when the parent is not a new record" do
|
904
|
+
|
905
|
+
let(:movie) do
|
906
|
+
Movie.new
|
907
|
+
end
|
908
|
+
|
909
|
+
let(:rating) do
|
910
|
+
Rating.create
|
911
|
+
end
|
912
|
+
|
913
|
+
before do
|
914
|
+
rating.ratable = movie
|
915
|
+
rating.ratable = nil
|
916
|
+
end
|
917
|
+
|
918
|
+
it "sets the relation to nil" do
|
919
|
+
expect(rating.ratable).to be_nil
|
920
|
+
end
|
921
|
+
|
922
|
+
it "removed the inverse relation" do
|
923
|
+
expect(movie.ratings).to be_empty
|
924
|
+
end
|
925
|
+
|
926
|
+
it "removes the foreign key value" do
|
927
|
+
expect(rating.ratable_id).to be_nil
|
928
|
+
end
|
929
|
+
end
|
930
|
+
end
|
931
|
+
end
|
932
|
+
end
|
933
|
+
|
934
|
+
describe ".builder" do
|
935
|
+
|
936
|
+
let(:builder_klass) do
|
937
|
+
Mongoid::Relations::Builders::Referenced::In
|
938
|
+
end
|
939
|
+
|
940
|
+
let(:document) do
|
941
|
+
double
|
942
|
+
end
|
943
|
+
|
944
|
+
let(:metadata) do
|
945
|
+
double(extension?: false)
|
946
|
+
end
|
947
|
+
|
948
|
+
it "returns the embedded in builder" do
|
949
|
+
expect(
|
950
|
+
described_class.builder(nil, metadata, document)
|
951
|
+
).to be_a_kind_of(builder_klass)
|
952
|
+
end
|
953
|
+
end
|
954
|
+
|
955
|
+
describe ".eager_load" do
|
956
|
+
|
957
|
+
before do
|
958
|
+
Mongoid.identity_map_enabled = true
|
959
|
+
end
|
960
|
+
|
961
|
+
after do
|
962
|
+
Mongoid.identity_map_enabled = false
|
963
|
+
end
|
964
|
+
|
965
|
+
context "when the relation is not polymorphic" do
|
966
|
+
|
967
|
+
let!(:person) do
|
968
|
+
Person.create
|
969
|
+
end
|
970
|
+
|
971
|
+
let!(:post) do
|
972
|
+
person.posts.create(title: "testing")
|
973
|
+
end
|
974
|
+
|
975
|
+
let(:metadata) do
|
976
|
+
Post.relations["person"]
|
977
|
+
end
|
978
|
+
|
979
|
+
let(:eager) do
|
980
|
+
described_class.eager_load(metadata, Post.all)
|
981
|
+
end
|
982
|
+
|
983
|
+
let!(:map) do
|
984
|
+
Mongoid::IdentityMap.get(Person, person.id)
|
985
|
+
end
|
986
|
+
|
987
|
+
it "puts the document in the identity map" do
|
988
|
+
expect(map).to eq(person)
|
989
|
+
end
|
990
|
+
end
|
991
|
+
|
992
|
+
context "when the relation is polymorphic" do
|
993
|
+
|
994
|
+
let(:metadata) do
|
995
|
+
Rating.relations["ratable"]
|
996
|
+
end
|
997
|
+
|
998
|
+
it "raises an error" do
|
999
|
+
expect {
|
1000
|
+
described_class.eager_load(metadata, Rating.all)
|
1001
|
+
}.to raise_error(Mongoid::Errors::EagerLoad)
|
1002
|
+
end
|
1003
|
+
end
|
1004
|
+
|
1005
|
+
context "when the ids has been duplicated" do
|
1006
|
+
|
1007
|
+
let!(:person) do
|
1008
|
+
Person.create
|
1009
|
+
end
|
1010
|
+
|
1011
|
+
let!(:posts) do
|
1012
|
+
2.times {|i| person.posts.create(title: "testing#{i}") }
|
1013
|
+
person.posts
|
1014
|
+
end
|
1015
|
+
|
1016
|
+
let(:metadata) do
|
1017
|
+
Post.relations["person"]
|
1018
|
+
end
|
1019
|
+
|
1020
|
+
let(:eager) do
|
1021
|
+
described_class.eager_load(metadata, posts.map(&:person_id))
|
1022
|
+
end
|
1023
|
+
|
1024
|
+
it "duplication should be removed" do
|
1025
|
+
expect(eager.count).to eq(1)
|
1026
|
+
end
|
1027
|
+
end
|
1028
|
+
end
|
1029
|
+
|
1030
|
+
describe ".embedded?" do
|
1031
|
+
|
1032
|
+
it "returns false" do
|
1033
|
+
expect(described_class).to_not be_embedded
|
1034
|
+
end
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
describe ".foreign_key_suffix" do
|
1038
|
+
|
1039
|
+
it "returns _id" do
|
1040
|
+
expect(described_class.foreign_key_suffix).to eq("_id")
|
1041
|
+
end
|
1042
|
+
end
|
1043
|
+
|
1044
|
+
describe ".macro" do
|
1045
|
+
|
1046
|
+
it "returns belongs_to" do
|
1047
|
+
expect(described_class.macro).to eq(:belongs_to)
|
1048
|
+
end
|
1049
|
+
end
|
1050
|
+
|
1051
|
+
describe "#respond_to?" do
|
1052
|
+
|
1053
|
+
let(:person) do
|
1054
|
+
Person.new
|
1055
|
+
end
|
1056
|
+
|
1057
|
+
let(:game) do
|
1058
|
+
person.build_game(name: "Tron")
|
1059
|
+
end
|
1060
|
+
|
1061
|
+
let(:document) do
|
1062
|
+
game.person
|
1063
|
+
end
|
1064
|
+
|
1065
|
+
Mongoid::Document.public_instance_methods(true).each do |method|
|
1066
|
+
|
1067
|
+
context "when checking #{method}" do
|
1068
|
+
|
1069
|
+
it "returns true" do
|
1070
|
+
expect(document.respond_to?(method)).to be_true
|
1071
|
+
end
|
1072
|
+
end
|
1073
|
+
end
|
1074
|
+
end
|
1075
|
+
|
1076
|
+
describe ".stores_foreign_key?" do
|
1077
|
+
|
1078
|
+
it "returns true" do
|
1079
|
+
expect(described_class.stores_foreign_key?).to be_true
|
1080
|
+
end
|
1081
|
+
end
|
1082
|
+
|
1083
|
+
describe ".valid_options" do
|
1084
|
+
|
1085
|
+
it "returns the valid options" do
|
1086
|
+
expect(described_class.valid_options).to eq(
|
1087
|
+
[
|
1088
|
+
:autobuild,
|
1089
|
+
:autosave,
|
1090
|
+
:dependent,
|
1091
|
+
:foreign_key,
|
1092
|
+
:index,
|
1093
|
+
:polymorphic,
|
1094
|
+
:primary_key,
|
1095
|
+
:touch
|
1096
|
+
]
|
1097
|
+
)
|
1098
|
+
end
|
1099
|
+
end
|
1100
|
+
|
1101
|
+
describe ".validation_default" do
|
1102
|
+
|
1103
|
+
it "returns false" do
|
1104
|
+
expect(described_class.validation_default).to be_false
|
1105
|
+
end
|
1106
|
+
end
|
1107
|
+
|
1108
|
+
context "when the relation is self referencing" do
|
1109
|
+
|
1110
|
+
let(:game_one) do
|
1111
|
+
Game.new(name: "Diablo")
|
1112
|
+
end
|
1113
|
+
|
1114
|
+
let(:game_two) do
|
1115
|
+
Game.new(name: "Warcraft")
|
1116
|
+
end
|
1117
|
+
|
1118
|
+
context "when setting the parent" do
|
1119
|
+
|
1120
|
+
before do
|
1121
|
+
game_one.parent = game_two
|
1122
|
+
end
|
1123
|
+
|
1124
|
+
it "sets the parent" do
|
1125
|
+
expect(game_one.parent).to eq(game_two)
|
1126
|
+
end
|
1127
|
+
|
1128
|
+
it "does not set the parent recursively" do
|
1129
|
+
expect(game_two.parent).to be_nil
|
1130
|
+
end
|
1131
|
+
end
|
1132
|
+
end
|
1133
|
+
|
1134
|
+
context "when the relation belongs to a has many and has one" do
|
1135
|
+
|
1136
|
+
before(:all) do
|
1137
|
+
class A
|
1138
|
+
include Mongoid::Document
|
1139
|
+
has_many :bs, inverse_of: :a
|
1140
|
+
end
|
1141
|
+
|
1142
|
+
class B
|
1143
|
+
include Mongoid::Document
|
1144
|
+
belongs_to :a, inverse_of: :bs
|
1145
|
+
belongs_to :c, inverse_of: :b
|
1146
|
+
end
|
1147
|
+
|
1148
|
+
class C
|
1149
|
+
include Mongoid::Document
|
1150
|
+
has_one :b, inverse_of: :c
|
1151
|
+
end
|
1152
|
+
end
|
1153
|
+
|
1154
|
+
after(:all) do
|
1155
|
+
Object.send(:remove_const, :A)
|
1156
|
+
Object.send(:remove_const, :B)
|
1157
|
+
Object.send(:remove_const, :C)
|
1158
|
+
end
|
1159
|
+
|
1160
|
+
context "when setting the has one" do
|
1161
|
+
|
1162
|
+
let(:a) do
|
1163
|
+
A.new
|
1164
|
+
end
|
1165
|
+
|
1166
|
+
let(:b) do
|
1167
|
+
B.new
|
1168
|
+
end
|
1169
|
+
|
1170
|
+
let(:c) do
|
1171
|
+
C.new
|
1172
|
+
end
|
1173
|
+
|
1174
|
+
before do
|
1175
|
+
b.c = c
|
1176
|
+
end
|
1177
|
+
|
1178
|
+
context "when subsequently setting the has many" do
|
1179
|
+
|
1180
|
+
before do
|
1181
|
+
b.a = a
|
1182
|
+
end
|
1183
|
+
|
1184
|
+
context "when setting the has one again" do
|
1185
|
+
|
1186
|
+
before do
|
1187
|
+
b.c = c
|
1188
|
+
end
|
1189
|
+
|
1190
|
+
it "allows the reset of the has one" do
|
1191
|
+
expect(b.c).to eq(c)
|
1192
|
+
end
|
1193
|
+
end
|
1194
|
+
end
|
1195
|
+
end
|
1196
|
+
end
|
1197
|
+
|
1198
|
+
context "when replacing the relation with another" do
|
1199
|
+
|
1200
|
+
let!(:person) do
|
1201
|
+
Person.create
|
1202
|
+
end
|
1203
|
+
|
1204
|
+
let!(:post) do
|
1205
|
+
Post.create(title: "test")
|
1206
|
+
end
|
1207
|
+
|
1208
|
+
let!(:game) do
|
1209
|
+
person.create_game(name: "Tron")
|
1210
|
+
end
|
1211
|
+
|
1212
|
+
before do
|
1213
|
+
post.person = game.person
|
1214
|
+
post.save
|
1215
|
+
end
|
1216
|
+
|
1217
|
+
it "clones the relation" do
|
1218
|
+
expect(post.person).to eq(person)
|
1219
|
+
end
|
1220
|
+
|
1221
|
+
it "sets the foreign key" do
|
1222
|
+
expect(post.person_id).to eq(person.id)
|
1223
|
+
end
|
1224
|
+
|
1225
|
+
it "does not remove the previous relation" do
|
1226
|
+
expect(game.person).to eq(person)
|
1227
|
+
end
|
1228
|
+
|
1229
|
+
it "does not remove the previous foreign key" do
|
1230
|
+
expect(game.person_id).to eq(person.id)
|
1231
|
+
end
|
1232
|
+
|
1233
|
+
context "when reloading" do
|
1234
|
+
|
1235
|
+
before do
|
1236
|
+
post.reload
|
1237
|
+
game.reload
|
1238
|
+
end
|
1239
|
+
|
1240
|
+
it "persists the relation" do
|
1241
|
+
expect(post.reload.person).to eq(person)
|
1242
|
+
end
|
1243
|
+
|
1244
|
+
it "persists the foreign key" do
|
1245
|
+
expect(post.reload.person_id).to eq(game.person_id)
|
1246
|
+
end
|
1247
|
+
|
1248
|
+
it "does not remove the previous relation" do
|
1249
|
+
expect(game.person).to eq(person)
|
1250
|
+
end
|
1251
|
+
|
1252
|
+
it "does not remove the previous foreign key" do
|
1253
|
+
expect(game.person_id).to eq(person.id)
|
1254
|
+
end
|
1255
|
+
end
|
1256
|
+
end
|
1257
|
+
|
1258
|
+
context "when the document belongs to a has one and has many" do
|
1259
|
+
|
1260
|
+
let(:movie) do
|
1261
|
+
Movie.create(name: "Infernal Affairs")
|
1262
|
+
end
|
1263
|
+
|
1264
|
+
let(:account) do
|
1265
|
+
Account.create(name: "Leung")
|
1266
|
+
end
|
1267
|
+
|
1268
|
+
context "when creating the document" do
|
1269
|
+
|
1270
|
+
let(:comment) do
|
1271
|
+
Comment.create(movie: movie, account: account)
|
1272
|
+
end
|
1273
|
+
|
1274
|
+
it "sets the correct has one" do
|
1275
|
+
expect(comment.account).to eq(account)
|
1276
|
+
end
|
1277
|
+
|
1278
|
+
it "sets the correct has many" do
|
1279
|
+
expect(comment.movie).to eq(movie)
|
1280
|
+
end
|
1281
|
+
end
|
1282
|
+
end
|
1283
|
+
|
1284
|
+
context "when reloading the relation" do
|
1285
|
+
|
1286
|
+
let!(:person_one) do
|
1287
|
+
Person.create
|
1288
|
+
end
|
1289
|
+
|
1290
|
+
let!(:person_two) do
|
1291
|
+
Person.create(title: "Sir")
|
1292
|
+
end
|
1293
|
+
|
1294
|
+
let!(:game) do
|
1295
|
+
Game.create(name: "Starcraft 2")
|
1296
|
+
end
|
1297
|
+
|
1298
|
+
before do
|
1299
|
+
game.person = person_one
|
1300
|
+
game.save
|
1301
|
+
end
|
1302
|
+
|
1303
|
+
context "when the relation references the same document" do
|
1304
|
+
|
1305
|
+
before do
|
1306
|
+
Person.collection.find({ _id: person_one.id }).
|
1307
|
+
update({ "$set" => { title: "Madam" }})
|
1308
|
+
end
|
1309
|
+
|
1310
|
+
let(:reloaded) do
|
1311
|
+
game.person(true)
|
1312
|
+
end
|
1313
|
+
|
1314
|
+
it "reloads the document from the database" do
|
1315
|
+
expect(reloaded.title).to eq("Madam")
|
1316
|
+
end
|
1317
|
+
|
1318
|
+
it "sets a new document instance" do
|
1319
|
+
expect(reloaded).to_not equal(person_one)
|
1320
|
+
end
|
1321
|
+
end
|
1322
|
+
|
1323
|
+
context "when the relation references a different document" do
|
1324
|
+
|
1325
|
+
before do
|
1326
|
+
game.person_id = person_two.id
|
1327
|
+
game.save
|
1328
|
+
end
|
1329
|
+
|
1330
|
+
let(:reloaded) do
|
1331
|
+
game.person(true)
|
1332
|
+
end
|
1333
|
+
|
1334
|
+
it "reloads the new document from the database" do
|
1335
|
+
expect(reloaded.title).to eq("Sir")
|
1336
|
+
end
|
1337
|
+
|
1338
|
+
it "sets a new document instance" do
|
1339
|
+
expect(reloaded).to_not equal(person_one)
|
1340
|
+
end
|
1341
|
+
end
|
1342
|
+
end
|
1343
|
+
|
1344
|
+
context "when the parent and child are persisted" do
|
1345
|
+
|
1346
|
+
context "when the identity map is enabled" do
|
1347
|
+
|
1348
|
+
before do
|
1349
|
+
Mongoid.identity_map_enabled = true
|
1350
|
+
end
|
1351
|
+
|
1352
|
+
after do
|
1353
|
+
Mongoid.identity_map_enabled = false
|
1354
|
+
end
|
1355
|
+
|
1356
|
+
let(:series) do
|
1357
|
+
Series.create
|
1358
|
+
end
|
1359
|
+
|
1360
|
+
let!(:book_one) do
|
1361
|
+
series.books.create
|
1362
|
+
end
|
1363
|
+
|
1364
|
+
let!(:book_two) do
|
1365
|
+
series.books.create
|
1366
|
+
end
|
1367
|
+
|
1368
|
+
let(:id) do
|
1369
|
+
Book.first.id
|
1370
|
+
end
|
1371
|
+
|
1372
|
+
context "when asking for the inverse multiple times" do
|
1373
|
+
|
1374
|
+
before do
|
1375
|
+
Book.find(id).series.books.to_a
|
1376
|
+
end
|
1377
|
+
|
1378
|
+
it "does not append and save duplicate docs" do
|
1379
|
+
expect(Book.find(id).series.books.to_a.length).to eq(2)
|
1380
|
+
end
|
1381
|
+
|
1382
|
+
it "returns the same documents from the map" do
|
1383
|
+
expect(Book.find(id)).to equal(Book.find(id))
|
1384
|
+
end
|
1385
|
+
end
|
1386
|
+
end
|
1387
|
+
end
|
1388
|
+
|
1389
|
+
context "when creating with a reference to an integer id parent" do
|
1390
|
+
|
1391
|
+
let!(:jar) do
|
1392
|
+
Jar.create do |doc|
|
1393
|
+
doc._id = 1
|
1394
|
+
end
|
1395
|
+
end
|
1396
|
+
|
1397
|
+
let(:cookie) do
|
1398
|
+
Cookie.create(jar_id: "1")
|
1399
|
+
end
|
1400
|
+
|
1401
|
+
it "allows strings to be passed as the id" do
|
1402
|
+
expect(cookie.jar).to eq(jar)
|
1403
|
+
end
|
1404
|
+
|
1405
|
+
it "persists the relation" do
|
1406
|
+
expect(cookie.reload.jar).to eq(jar)
|
1407
|
+
end
|
1408
|
+
end
|
1409
|
+
|
1410
|
+
context "when setting the relation via the foreign key" do
|
1411
|
+
|
1412
|
+
context "when the relation exists" do
|
1413
|
+
|
1414
|
+
let!(:person_one) do
|
1415
|
+
Person.create
|
1416
|
+
end
|
1417
|
+
|
1418
|
+
let!(:person_two) do
|
1419
|
+
Person.create
|
1420
|
+
end
|
1421
|
+
|
1422
|
+
let!(:game) do
|
1423
|
+
Game.create(person: person_one)
|
1424
|
+
end
|
1425
|
+
|
1426
|
+
before do
|
1427
|
+
game.person_id = person_two.id
|
1428
|
+
end
|
1429
|
+
|
1430
|
+
it "sets the new document on the relation" do
|
1431
|
+
expect(game.person).to eq(person_two)
|
1432
|
+
end
|
1433
|
+
end
|
1434
|
+
end
|
1435
|
+
end
|