mongoid 3.1.4 → 3.1.5
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
- data/CHANGELOG.md +34 -0
- data/lib/mongoid/contextual.rb +3 -0
- data/lib/mongoid/criteria.rb +10 -2
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/paranoia.rb +4 -0
- data/lib/mongoid/persistence/upsertion.rb +1 -0
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +16 -2
- data/lib/mongoid/relations/macros.rb +1 -1
- data/lib/mongoid/relations/one.rb +12 -0
- data/lib/mongoid/relations/referenced/in.rb +18 -1
- data/lib/mongoid/relations/referenced/many_to_many.rb +2 -2
- data/lib/mongoid/validations.rb +1 -1
- data/lib/mongoid/validations/localizable.rb +1 -1
- data/lib/mongoid/validations/presence.rb +1 -1
- data/lib/mongoid/validations/uniqueness.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/support/ruby_version.rb +1 -1
- data/spec/app/models/account.rb +32 -0
- data/spec/app/models/acolyte.rb +16 -0
- data/spec/app/models/actor.rb +19 -0
- data/spec/app/models/actor_observer.rb +15 -0
- data/spec/app/models/actress.rb +2 -0
- data/spec/app/models/address.rb +72 -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 +13 -0
- data/spec/app/models/artist.rb +66 -0
- data/spec/app/models/artwork.rb +4 -0
- data/spec/app/models/augmentation.rb +11 -0
- data/spec/app/models/author.rb +6 -0
- data/spec/app/models/band.rb +25 -0
- data/spec/app/models/bar.rb +9 -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 +12 -0
- data/spec/app/models/breed.rb +4 -0
- data/spec/app/models/browser.rb +6 -0
- data/spec/app/models/building.rb +7 -0
- data/spec/app/models/building_address.rb +7 -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 +7 -0
- data/spec/app/models/cookie.rb +6 -0
- data/spec/app/models/country_code.rb +8 -0
- data/spec/app/models/definition.rb +8 -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/driver.rb +7 -0
- data/spec/app/models/drug.rb +8 -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 +4 -0
- data/spec/app/models/fire_hydrant.rb +6 -0
- data/spec/app/models/firefox.rb +4 -0
- data/spec/app/models/fish.rb +8 -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 +21 -0
- data/spec/app/models/ghost.rb +7 -0
- data/spec/app/models/home.rb +4 -0
- data/spec/app/models/house.rb +8 -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 +12 -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 +12 -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/paranoid_phone.rb +25 -0
- data/spec/app/models/paranoid_post.rb +36 -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 +201 -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/phone_observer.rb +6 -0
- data/spec/app/models/pizza.rb +7 -0
- data/spec/app/models/player.rb +35 -0
- data/spec/app/models/post.rb +43 -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 +17 -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 +10 -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/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 +4 -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 +17 -0
- data/spec/app/models/video_game.rb +1 -0
- data/spec/app/models/weapon.rb +11 -0
- data/spec/app/models/wiki_page.rb +17 -0
- data/spec/app/models/word.rb +12 -0
- data/spec/app/models/word_origin.rb +11 -0
- data/spec/app/models/writer.rb +11 -0
- data/spec/config/mongoid.yml +40 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +456 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +159 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +152 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +106 -0
- data/spec/mongoid/atomic/paths_spec.rb +270 -0
- data/spec/mongoid/atomic/positionable_spec.rb +227 -0
- data/spec/mongoid/atomic_spec.rb +365 -0
- data/spec/mongoid/attributes/processing_spec.rb +149 -0
- data/spec/mongoid/attributes/readonly_spec.rb +169 -0
- data/spec/mongoid/attributes_spec.rb +1705 -0
- data/spec/mongoid/callbacks_spec.rb +1564 -0
- data/spec/mongoid/components_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 +334 -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 +525 -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 +1757 -0
- data/spec/mongoid/copyable_spec.rb +393 -0
- data/spec/mongoid/criteria_spec.rb +5140 -0
- data/spec/mongoid/criterion/destructive_spec.rb +101 -0
- data/spec/mongoid/criterion/inspection_spec.rb +27 -0
- data/spec/mongoid/criterion/marshalable_spec.rb +28 -0
- data/spec/mongoid/criterion/modifiable_spec.rb +409 -0
- data/spec/mongoid/criterion/modification_spec.rb +402 -0
- data/spec/mongoid/criterion/scoping_spec.rb +391 -0
- data/spec/mongoid/dirty_spec.rb +1508 -0
- data/spec/mongoid/document_spec.rb +1146 -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/errors/versioning_not_on_root_spec.rb +29 -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 +368 -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/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 +1253 -0
- data/spec/mongoid/finders_spec.rb +321 -0
- data/spec/mongoid/hierarchy_spec.rb +244 -0
- data/spec/mongoid/identity_map_spec.rb +564 -0
- data/spec/mongoid/indexes_spec.rb +404 -0
- data/spec/mongoid/inspection_spec.rb +57 -0
- data/spec/mongoid/json_spec.rb +33 -0
- data/spec/mongoid/loggable_spec.rb +21 -0
- data/spec/mongoid/matchers/all_spec.rb +31 -0
- data/spec/mongoid/matchers/and_spec.rb +162 -0
- data/spec/mongoid/matchers/default_spec.rb +130 -0
- data/spec/mongoid/matchers/exists_spec.rb +57 -0
- data/spec/mongoid/matchers/gt_spec.rb +74 -0
- data/spec/mongoid/matchers/gte_spec.rb +74 -0
- data/spec/mongoid/matchers/in_spec.rb +25 -0
- data/spec/mongoid/matchers/lt_spec.rb +74 -0
- data/spec/mongoid/matchers/lte_spec.rb +74 -0
- data/spec/mongoid/matchers/ne_spec.rb +25 -0
- data/spec/mongoid/matchers/nin_spec.rb +25 -0
- data/spec/mongoid/matchers/or_spec.rb +106 -0
- data/spec/mongoid/matchers/size_spec.rb +25 -0
- data/spec/mongoid/matchers_spec.rb +532 -0
- data/spec/mongoid/multi_parameter_attributes_spec.rb +128 -0
- data/spec/mongoid/nested_attributes_spec.rb +4945 -0
- data/spec/mongoid/observer_spec.rb +290 -0
- data/spec/mongoid/paranoia_spec.rb +759 -0
- data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +262 -0
- data/spec/mongoid/persistence/atomic/bit_spec.rb +88 -0
- data/spec/mongoid/persistence/atomic/inc_spec.rb +133 -0
- data/spec/mongoid/persistence/atomic/pop_spec.rb +111 -0
- data/spec/mongoid/persistence/atomic/pull_all_spec.rb +77 -0
- data/spec/mongoid/persistence/atomic/pull_spec.rb +80 -0
- data/spec/mongoid/persistence/atomic/push_all_spec.rb +77 -0
- data/spec/mongoid/persistence/atomic/push_spec.rb +77 -0
- data/spec/mongoid/persistence/atomic/rename_spec.rb +42 -0
- data/spec/mongoid/persistence/atomic/sets_spec.rb +154 -0
- data/spec/mongoid/persistence/atomic/unset_spec.rb +65 -0
- data/spec/mongoid/persistence/atomic_spec.rb +216 -0
- data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +191 -0
- data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +8 -0
- data/spec/mongoid/persistence/operations/insert_spec.rb +149 -0
- data/spec/mongoid/persistence/operations/remove_spec.rb +113 -0
- data/spec/mongoid/persistence/operations/update_spec.rb +141 -0
- data/spec/mongoid/persistence/operations/upsert_spec.rb +59 -0
- data/spec/mongoid/persistence/operations_spec.rb +313 -0
- data/spec/mongoid/persistence_spec.rb +2279 -0
- data/spec/mongoid/railties/document_spec.rb +24 -0
- data/spec/mongoid/relations/accessors_spec.rb +844 -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 +580 -0
- data/spec/mongoid/relations/embedded/many_spec.rb +3841 -0
- data/spec/mongoid/relations/embedded/one_spec.rb +1055 -0
- data/spec/mongoid/relations/macros_spec.rb +625 -0
- data/spec/mongoid/relations/metadata_spec.rb +2030 -0
- data/spec/mongoid/relations/options_spec.rb +35 -0
- data/spec/mongoid/relations/polymorphic_spec.rb +132 -0
- data/spec/mongoid/relations/proxy_spec.rb +48 -0
- data/spec/mongoid/relations/referenced/in_spec.rb +1501 -0
- data/spec/mongoid/relations/referenced/many_spec.rb +3632 -0
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +3561 -0
- data/spec/mongoid/relations/referenced/one_spec.rb +1331 -0
- data/spec/mongoid/relations/reflections_spec.rb +101 -0
- data/spec/mongoid/relations/synchronization_spec.rb +453 -0
- data/spec/mongoid/relations/targets/enumerable_spec.rb +1710 -0
- data/spec/mongoid/relations_spec.rb +188 -0
- data/spec/mongoid/reloading_spec.rb +305 -0
- data/spec/mongoid/scoping_spec.rb +978 -0
- data/spec/mongoid/serialization_spec.rb +833 -0
- data/spec/mongoid/sessions/factory_spec.rb +312 -0
- data/spec/mongoid/sessions/mongo_uri_spec.rb +103 -0
- data/spec/mongoid/sessions_spec.rb +1111 -0
- data/spec/mongoid/sharding_spec.rb +61 -0
- data/spec/mongoid/state_spec.rb +102 -0
- data/spec/mongoid/threaded_spec.rb +296 -0
- data/spec/mongoid/timestamps/created/short_spec.rb +51 -0
- data/spec/mongoid/timestamps/created_spec.rb +44 -0
- data/spec/mongoid/timestamps/timeless_spec.rb +130 -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/unit_of_work_spec.rb +196 -0
- data/spec/mongoid/validations/associated_spec.rb +183 -0
- data/spec/mongoid/validations/format_spec.rb +83 -0
- data/spec/mongoid/validations/length_spec.rb +223 -0
- data/spec/mongoid/validations/numericality_spec.rb +30 -0
- data/spec/mongoid/validations/presence_spec.rb +592 -0
- data/spec/mongoid/validations/uniqueness_spec.rb +2399 -0
- data/spec/mongoid/validations_spec.rb +309 -0
- data/spec/mongoid/versioning_spec.rb +540 -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 +93 -0
- metadata +826 -6
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "when initialize a model with an embedded model" do
|
|
4
|
+
|
|
5
|
+
let(:person) do
|
|
6
|
+
Person.new(pet: Pet.new)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "has changes in the embedded model" do
|
|
10
|
+
person.pet.changes.should_not be_empty
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "does not have previous_changes in the embedded model" do
|
|
14
|
+
person.pet.previous_changes.should be_empty
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "when creating a model with an embedded model" do
|
|
19
|
+
|
|
20
|
+
let(:person) do
|
|
21
|
+
Person.create(pet: Pet.new)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "does not have changes in the embedded model" do
|
|
25
|
+
person.pet.changes.should be_empty
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "has previous_changes in the embedded model" do
|
|
29
|
+
person.pet.previous_changes.should_not be_empty
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "when embedding a model on an already saved model" do
|
|
34
|
+
|
|
35
|
+
let(:person) do
|
|
36
|
+
Person.create
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
before do
|
|
40
|
+
person.pet = Pet.new
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "has not changes on the embedded model" do
|
|
44
|
+
person.pet.changes.should be_empty
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "has previous changes on the embedded model" do
|
|
48
|
+
person.pet.previous_changes.should_not be_empty
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe "and saving the model" do
|
|
52
|
+
|
|
53
|
+
before do
|
|
54
|
+
person.save!
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "does not have changes on the embedded model" do
|
|
58
|
+
person.pet.changes.should be_empty
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "does not have previous changes on the embedded model" do
|
|
62
|
+
person.pet.previous_changes.should be_empty
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,580 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Relations::Embedded::In do
|
|
4
|
+
|
|
5
|
+
describe "#===" do
|
|
6
|
+
|
|
7
|
+
let(:base) do
|
|
8
|
+
Name.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
let(:target) do
|
|
12
|
+
Person.new
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
let(:metadata) do
|
|
16
|
+
Name.relations["namable"]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
let(:relation) do
|
|
20
|
+
described_class.new(base, target, metadata)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "when the proxied document is same class" do
|
|
24
|
+
|
|
25
|
+
context "when the document is a different instance" do
|
|
26
|
+
|
|
27
|
+
it "returns false" do
|
|
28
|
+
(relation === Person.new).should be_false
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "when the document is the same instance" do
|
|
33
|
+
|
|
34
|
+
it "returns true" do
|
|
35
|
+
(relation === target).should be_true
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "#=" do
|
|
42
|
+
|
|
43
|
+
context "when the inverse of an embeds one" do
|
|
44
|
+
|
|
45
|
+
context "when the child is a new record" do
|
|
46
|
+
|
|
47
|
+
let(:person) do
|
|
48
|
+
Person.new
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
let(:name) do
|
|
52
|
+
Name.new
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
before do
|
|
56
|
+
name.namable = person
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "sets the target of the relation" do
|
|
60
|
+
name.namable.should eq(person)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "sets the base on the inverse relation" do
|
|
64
|
+
person.name.should eq(name)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "sets the same instance on the inverse relation" do
|
|
68
|
+
person.name.should eql(name)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "does not save the target" do
|
|
72
|
+
person.should_not be_persisted
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
context "when the parent is not a new record" do
|
|
77
|
+
|
|
78
|
+
let(:person) do
|
|
79
|
+
Person.create
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
let(:name) do
|
|
83
|
+
Name.new
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
before do
|
|
87
|
+
name.namable = person
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "sets the target of the relation" do
|
|
91
|
+
name.namable.should eq(person)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "sets the base on the inverse relation" do
|
|
95
|
+
person.name.should eq(name)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "sets the same instance on the inverse relation" do
|
|
99
|
+
person.name.should eql(name)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "does not save the base" do
|
|
103
|
+
name.should_not be_persisted
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
context "when the inverse of an embeds many" do
|
|
109
|
+
|
|
110
|
+
context "when the child is a new record" do
|
|
111
|
+
|
|
112
|
+
let(:person) do
|
|
113
|
+
Person.new
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
let(:address) do
|
|
117
|
+
Address.new
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
before do
|
|
121
|
+
address.addressable = person
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "sets the target of the relation" do
|
|
125
|
+
address.addressable.should eq(person)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "appends the base on the inverse relation" do
|
|
129
|
+
person.addresses.should eq([ address ])
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "sets the same instance in the inverse relation" do
|
|
133
|
+
person.addresses.first.should eql(address)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "does not save the target" do
|
|
137
|
+
person.should_not be_persisted
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
context "when the parent is not a new record" do
|
|
142
|
+
|
|
143
|
+
let!(:person) do
|
|
144
|
+
Person.create!
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
let(:address) do
|
|
148
|
+
Address.new
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
before do
|
|
152
|
+
address.addressable = person
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "sets the target of the relation" do
|
|
156
|
+
address.addressable.should eq(person)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
it "sets the same instance in the inverse relation" do
|
|
160
|
+
person.addresses.first.should eql(address)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it "appends the base on the inverse relation" do
|
|
164
|
+
person.addresses.should eq([ address ])
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
describe "#= nil" do
|
|
171
|
+
|
|
172
|
+
context "when the inverse of an embeds one" do
|
|
173
|
+
|
|
174
|
+
context "when the parent is a new record" do
|
|
175
|
+
|
|
176
|
+
let(:person) do
|
|
177
|
+
Person.new
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
let(:name) do
|
|
181
|
+
Name.new
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
before do
|
|
185
|
+
name.namable = person
|
|
186
|
+
name.namable = nil
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it "sets the relation to nil" do
|
|
190
|
+
name.namable.should be_nil
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it "removes the inverse relation" do
|
|
194
|
+
person.name.should be_nil
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
context "when the inverse is already nil" do
|
|
199
|
+
|
|
200
|
+
let(:person) do
|
|
201
|
+
Person.new
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
let(:name) do
|
|
205
|
+
Name.new
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
before do
|
|
209
|
+
name.namable = nil
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
it "sets the relation to nil" do
|
|
213
|
+
name.namable.should be_nil
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
it "removes the inverse relation" do
|
|
217
|
+
person.name.should be_nil
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
context "when the documents are not new records" do
|
|
222
|
+
|
|
223
|
+
let(:person) do
|
|
224
|
+
Person.create
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
let(:name) do
|
|
228
|
+
Name.new
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
before do
|
|
232
|
+
name.namable = person
|
|
233
|
+
name.namable = nil
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
it "sets the relation to nil" do
|
|
237
|
+
name.namable.should be_nil
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
it "removed the inverse relation" do
|
|
241
|
+
person.name.should be_nil
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
it "deletes the child document" do
|
|
245
|
+
name.should be_destroyed
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
context "when the inverse of an embeds many" do
|
|
251
|
+
|
|
252
|
+
context "when the parent is a new record" do
|
|
253
|
+
|
|
254
|
+
let(:person) do
|
|
255
|
+
Person.new
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
let(:address) do
|
|
259
|
+
Address.new
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
before do
|
|
263
|
+
address.addressable = person
|
|
264
|
+
address.addressable = nil
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
it "sets the relation to nil" do
|
|
268
|
+
address.addressable.should be_nil
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
it "removes the inverse relation" do
|
|
272
|
+
person.addresses.should be_empty
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
context "when the inverse is already nil" do
|
|
277
|
+
|
|
278
|
+
let(:address) do
|
|
279
|
+
Address.new
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
before do
|
|
283
|
+
address.addressable = nil
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
it "sets the relation to nil" do
|
|
287
|
+
address.addressable.should be_nil
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
context "when the documents are not new records" do
|
|
292
|
+
|
|
293
|
+
let(:person) do
|
|
294
|
+
Person.create
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
let(:address) do
|
|
298
|
+
Address.new
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
before do
|
|
302
|
+
address.addressable = person
|
|
303
|
+
address.addressable = nil
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
it "sets the relation to nil" do
|
|
307
|
+
address.addressable.should be_nil
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
it "removed the inverse relation" do
|
|
311
|
+
person.addresses.should be_empty
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
it "deletes the child document" do
|
|
315
|
+
address.should be_destroyed
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
context "when a child already exists on the parent" do
|
|
320
|
+
|
|
321
|
+
let(:person) do
|
|
322
|
+
Person.create
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
let(:address_one) do
|
|
326
|
+
Address.new(street: "first")
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
let(:address_two) do
|
|
330
|
+
Address.new(street: "second")
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
before do
|
|
334
|
+
person.addresses = [ address_one, address_two ]
|
|
335
|
+
address_one.addressable = nil
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
it "sets the relation to nil" do
|
|
339
|
+
address_one.addressable.should be_nil
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
it "removed the inverse relation" do
|
|
343
|
+
person.addresses.should eq([ address_two ])
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
it "deletes the child document" do
|
|
347
|
+
address_one.should be_destroyed
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
it "reindexes the children" do
|
|
351
|
+
address_two._index.should eq(0)
|
|
352
|
+
end
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
describe ".builder" do
|
|
358
|
+
|
|
359
|
+
let(:builder_klass) do
|
|
360
|
+
Mongoid::Relations::Builders::Embedded::In
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
let(:base) do
|
|
364
|
+
Name.new
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
let(:target) do
|
|
368
|
+
Person.new
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
let(:metadata) do
|
|
372
|
+
Name.relations["namable"]
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
it "returns the embedded one builder" do
|
|
376
|
+
described_class.builder(base, metadata, target).should be_a(builder_klass)
|
|
377
|
+
end
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
describe ".embedded?" do
|
|
381
|
+
|
|
382
|
+
it "returns true" do
|
|
383
|
+
described_class.should be_embedded
|
|
384
|
+
end
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
describe ".foreign_key_suffix" do
|
|
388
|
+
|
|
389
|
+
it "returns nil" do
|
|
390
|
+
described_class.foreign_key_suffix.should be_nil
|
|
391
|
+
end
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
describe ".macro" do
|
|
395
|
+
|
|
396
|
+
it "returns embeds_one" do
|
|
397
|
+
described_class.macro.should eq(:embedded_in)
|
|
398
|
+
end
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
describe ".nested_builder" do
|
|
402
|
+
|
|
403
|
+
let(:nested_builder_klass) do
|
|
404
|
+
Mongoid::Relations::Builders::NestedAttributes::One
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
let(:metadata) do
|
|
408
|
+
Name.relations["namable"]
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
let(:attributes) do
|
|
412
|
+
{}
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
it "returns the single nested builder" do
|
|
416
|
+
described_class.nested_builder(metadata, attributes, {}).should
|
|
417
|
+
be_a(nested_builder_klass)
|
|
418
|
+
end
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
describe "#respond_to?" do
|
|
422
|
+
|
|
423
|
+
let(:person) do
|
|
424
|
+
Person.new
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
let!(:name) do
|
|
428
|
+
person.build_name(first_name: "Tony")
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
let(:document) do
|
|
432
|
+
name.namable
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
Mongoid::Document.public_instance_methods(true).each do |method|
|
|
436
|
+
|
|
437
|
+
context "when checking #{method}" do
|
|
438
|
+
|
|
439
|
+
it "returns true" do
|
|
440
|
+
document.respond_to?(method).should be_true
|
|
441
|
+
end
|
|
442
|
+
end
|
|
443
|
+
end
|
|
444
|
+
end
|
|
445
|
+
|
|
446
|
+
describe ".valid_options" do
|
|
447
|
+
|
|
448
|
+
it "returns the valid options" do
|
|
449
|
+
described_class.valid_options.should eq(
|
|
450
|
+
[ :autobuild, :cyclic, :polymorphic ]
|
|
451
|
+
)
|
|
452
|
+
end
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
describe ".validation_default" do
|
|
456
|
+
|
|
457
|
+
it "returns false" do
|
|
458
|
+
described_class.validation_default.should be_false
|
|
459
|
+
end
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
context "when creating the tree through initialization" do
|
|
463
|
+
|
|
464
|
+
let!(:person) do
|
|
465
|
+
Person.create
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
let!(:address) do
|
|
469
|
+
Address.create(addressable: person)
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
let!(:first_location) do
|
|
473
|
+
Location.create(address: address)
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
let!(:second_location) do
|
|
477
|
+
Location.create(address: address)
|
|
478
|
+
end
|
|
479
|
+
|
|
480
|
+
it "saves the child" do
|
|
481
|
+
Person.last.addresses.last.should eq(address)
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
it "indexes the child" do
|
|
485
|
+
address._index.should eq(0)
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
it "saves the first location with the correct index" do
|
|
489
|
+
first_location._index.should eq(0)
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
it "saves the second location with the correct index" do
|
|
493
|
+
second_location._index.should eq(1)
|
|
494
|
+
end
|
|
495
|
+
|
|
496
|
+
it "has the locations in the association array" do
|
|
497
|
+
Person.last.addresses.last.locations.should eq(
|
|
498
|
+
[first_location, second_location]
|
|
499
|
+
)
|
|
500
|
+
end
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
context "when instantiating a new child with a persisted parent" do
|
|
504
|
+
|
|
505
|
+
let!(:person) do
|
|
506
|
+
Person.create
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
let!(:address) do
|
|
510
|
+
Address.new(addressable: person)
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
let!(:location) do
|
|
514
|
+
Location.new(address: address)
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
it "does not save the child" do
|
|
518
|
+
address.should_not be_persisted
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
it "does not save the deeply embedded children" do
|
|
522
|
+
address.locations.first.should_not be_persisted
|
|
523
|
+
end
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
context "when replacing the relation with another" do
|
|
527
|
+
|
|
528
|
+
let!(:person) do
|
|
529
|
+
Person.create
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
let!(:person_two) do
|
|
533
|
+
Person.create
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
let!(:address) do
|
|
537
|
+
person.addresses.create(street: "Kotbusser Damm")
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
let!(:name) do
|
|
541
|
+
person_two.create_name(first_name: "Syd")
|
|
542
|
+
end
|
|
543
|
+
|
|
544
|
+
before do
|
|
545
|
+
name.namable = address.addressable
|
|
546
|
+
name.namable.save
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
it "sets the new parent" do
|
|
550
|
+
name.namable.should eq(person)
|
|
551
|
+
end
|
|
552
|
+
|
|
553
|
+
it "removes the previous parent relation" do
|
|
554
|
+
person_two.name.should be_nil
|
|
555
|
+
end
|
|
556
|
+
|
|
557
|
+
it "sets the new child relation" do
|
|
558
|
+
person.name.should eq(name)
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
context "when reloading" do
|
|
562
|
+
|
|
563
|
+
before do
|
|
564
|
+
person.reload
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
it "sets the new parent" do
|
|
568
|
+
name.namable.should eq(person)
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
it "removes the previous parent relation" do
|
|
572
|
+
person_two.name.should be_nil
|
|
573
|
+
end
|
|
574
|
+
|
|
575
|
+
it "sets the new child relation" do
|
|
576
|
+
person.name.should eq(name)
|
|
577
|
+
end
|
|
578
|
+
end
|
|
579
|
+
end
|
|
580
|
+
end
|