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,24 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "A document loaded from rails" do
|
|
4
|
+
before(:all) do
|
|
5
|
+
require 'mongoid/railties/document'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
after(:all) do
|
|
9
|
+
Mongoid::Document.class_eval do
|
|
10
|
+
undef _destroy
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "defines a _destroy method" do
|
|
15
|
+
Person.new.should respond_to(:_destroy)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "#_destroy" do
|
|
19
|
+
|
|
20
|
+
it "always returns false" do
|
|
21
|
+
Person.new._destroy.should be_false
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,844 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Relations::Accessors do
|
|
4
|
+
|
|
5
|
+
describe "\#{getter}?" do
|
|
6
|
+
|
|
7
|
+
let(:person) do
|
|
8
|
+
Person.create
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context "when the relation is a has one" do
|
|
12
|
+
|
|
13
|
+
context "when the relation exists" do
|
|
14
|
+
|
|
15
|
+
let!(:game) do
|
|
16
|
+
person.build_game
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "returns true" do
|
|
20
|
+
person.should have_game
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context "when the relation does not exist" do
|
|
25
|
+
|
|
26
|
+
context "when not autobuilding" do
|
|
27
|
+
|
|
28
|
+
it "returns false" do
|
|
29
|
+
person.should_not have_game
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context "when autobuilding" do
|
|
34
|
+
|
|
35
|
+
it "returns false" do
|
|
36
|
+
person.should_not have_book
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
context "when the relation is a has many" do
|
|
43
|
+
|
|
44
|
+
context "when the relation has documents" do
|
|
45
|
+
|
|
46
|
+
let!(:post) do
|
|
47
|
+
person.posts.build
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "returns true" do
|
|
51
|
+
person.should have_posts
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context "when the relation does not have documents" do
|
|
56
|
+
|
|
57
|
+
it "returns false" do
|
|
58
|
+
person.should_not have_posts
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
context "when the relation is a has and belongs to many" do
|
|
64
|
+
|
|
65
|
+
context "when the relation has documents" do
|
|
66
|
+
|
|
67
|
+
let!(:preference) do
|
|
68
|
+
person.preferences.build
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "returns true" do
|
|
72
|
+
person.should have_preferences
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
context "when the relation does not have documents" do
|
|
77
|
+
|
|
78
|
+
it "returns false" do
|
|
79
|
+
person.should_not have_preferences
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
context "when the relation is a belongs to" do
|
|
85
|
+
|
|
86
|
+
context "when the relation is named next" do
|
|
87
|
+
|
|
88
|
+
let(:user) do
|
|
89
|
+
User.create
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "allows the existence check" do
|
|
93
|
+
user.should_not have_next
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context "when the relation exists" do
|
|
98
|
+
|
|
99
|
+
let!(:game) do
|
|
100
|
+
person.build_game
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "returns true" do
|
|
104
|
+
game.should have_person
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
context "when the relation does not exist" do
|
|
109
|
+
|
|
110
|
+
context "when the relation does not autobuild" do
|
|
111
|
+
|
|
112
|
+
let(:game) do
|
|
113
|
+
Game.new
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "returns false" do
|
|
117
|
+
game.should_not have_person
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
context "when the relation autobuilds" do
|
|
122
|
+
|
|
123
|
+
let(:book) do
|
|
124
|
+
Book.new
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "returns false" do
|
|
128
|
+
book.should_not have_person
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
context "when the relation is an embeds one" do
|
|
135
|
+
|
|
136
|
+
context "when the relation exists" do
|
|
137
|
+
|
|
138
|
+
let!(:name) do
|
|
139
|
+
person.build_name
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "returns true" do
|
|
143
|
+
person.should have_name
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
context "when the relation does not exist" do
|
|
148
|
+
|
|
149
|
+
context "when the relation does not autobuild" do
|
|
150
|
+
|
|
151
|
+
it "returns false" do
|
|
152
|
+
person.should_not have_name
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
context "when the relation autobuilds" do
|
|
157
|
+
|
|
158
|
+
let(:person) do
|
|
159
|
+
Person.new
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "returns false" do
|
|
163
|
+
person.should_not have_passport
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
context "when the relation is an embeds many" do
|
|
170
|
+
|
|
171
|
+
context "when the relation has documents" do
|
|
172
|
+
|
|
173
|
+
let!(:address) do
|
|
174
|
+
person.addresses.build
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it "returns true" do
|
|
178
|
+
person.should have_addresses
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
context "when the relation does not have documents" do
|
|
183
|
+
|
|
184
|
+
it "returns false" do
|
|
185
|
+
person.should_not have_addresses
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
context "when the relation is an embedded in" do
|
|
191
|
+
|
|
192
|
+
context "when the relation exists" do
|
|
193
|
+
|
|
194
|
+
let!(:name) do
|
|
195
|
+
person.build_name
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
it "returns true" do
|
|
199
|
+
name.should have_namable
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
context "when the relation does not exist" do
|
|
204
|
+
|
|
205
|
+
context "when the relation does not autobuild" do
|
|
206
|
+
|
|
207
|
+
let(:name) do
|
|
208
|
+
Name.new
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
it "returns false" do
|
|
212
|
+
name.should_not have_namable
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
context "when the relation autobuilds" do
|
|
217
|
+
|
|
218
|
+
let(:passport) do
|
|
219
|
+
Passport.new
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
it "returns false" do
|
|
223
|
+
passport.should_not have_person
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
describe "\#{getter}" do
|
|
231
|
+
|
|
232
|
+
let(:person) do
|
|
233
|
+
Person.new
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
context "when autobuilding the relation" do
|
|
237
|
+
|
|
238
|
+
context "when the relation is an embeds one" do
|
|
239
|
+
|
|
240
|
+
context "when the relation does not exist" do
|
|
241
|
+
|
|
242
|
+
let!(:passport) do
|
|
243
|
+
person.passport
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
it "builds the new document" do
|
|
247
|
+
passport.should be_a(Passport)
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
it "stores in the altered attribute" do
|
|
251
|
+
person.as_document["pass"].should eq(passport.attributes)
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
context "when the relation exists" do
|
|
256
|
+
|
|
257
|
+
let!(:passport) do
|
|
258
|
+
person.build_passport(number: "123123321")
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
it "does not build a new document" do
|
|
262
|
+
person.passport.should eq(passport)
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
context "when the relation is an embedded in" do
|
|
268
|
+
|
|
269
|
+
let(:passport) do
|
|
270
|
+
Passport.new
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
context "when the relation does not exist" do
|
|
274
|
+
|
|
275
|
+
let(:person) do
|
|
276
|
+
passport.person
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
it "builds the new document" do
|
|
280
|
+
person.should be_a(Person)
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
context "when the relation exists" do
|
|
285
|
+
|
|
286
|
+
let!(:person) do
|
|
287
|
+
passport.build_person(title: "sir")
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
it "does not build a new document" do
|
|
291
|
+
passport.person.should eq(person)
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
context "when the relation is a has one" do
|
|
297
|
+
|
|
298
|
+
context "when the relation does not exist" do
|
|
299
|
+
|
|
300
|
+
let(:book) do
|
|
301
|
+
person.book
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
it "builds the new document" do
|
|
305
|
+
book.should be_a(Book)
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
context "when the relation exists" do
|
|
310
|
+
|
|
311
|
+
let!(:book) do
|
|
312
|
+
person.build_book(title: "art of war")
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
it "does not build a new document" do
|
|
316
|
+
person.book.should eq(book)
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
context "when the relation is a belongs to" do
|
|
322
|
+
|
|
323
|
+
let(:book) do
|
|
324
|
+
Book.new
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
context "when the relation does not exist" do
|
|
328
|
+
|
|
329
|
+
let(:person) do
|
|
330
|
+
book.person
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
it "builds the new document" do
|
|
334
|
+
person.should be_a(Person)
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
context "when the relation exists" do
|
|
339
|
+
|
|
340
|
+
let!(:person) do
|
|
341
|
+
book.build_person(title: "sir")
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
it "does not build a new document" do
|
|
345
|
+
book.person.should eq(person)
|
|
346
|
+
end
|
|
347
|
+
end
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
context "when the relation is not polymorphic" do
|
|
352
|
+
|
|
353
|
+
let(:person) do
|
|
354
|
+
Person.create
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
context "when the relation is a many to many" do
|
|
358
|
+
|
|
359
|
+
let!(:preference) do
|
|
360
|
+
Preference.create(name: "Setting")
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
before do
|
|
364
|
+
person.preferences << Preference.last
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
context "when reloading the relation directly" do
|
|
368
|
+
|
|
369
|
+
let(:preferences) do
|
|
370
|
+
person.preferences(true)
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
it "reloads the correct documents" do
|
|
374
|
+
preferences.should eq([ preference ])
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
it "reloads a new instance" do
|
|
378
|
+
preferences.first.should_not equal(preference)
|
|
379
|
+
end
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
context "when reloading via the base document" do
|
|
383
|
+
|
|
384
|
+
let(:preferences) do
|
|
385
|
+
person.reload.preferences
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
it "reloads the correct documents" do
|
|
389
|
+
preferences.should eq([ preference ])
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
it "reloads a new instance" do
|
|
393
|
+
preferences.first.should_not equal(preference)
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
context "when performing a fresh find on the base" do
|
|
398
|
+
|
|
399
|
+
let(:preferences) do
|
|
400
|
+
Person.find(person.id).preferences
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
it "reloads the correct documents" do
|
|
404
|
+
preferences.should eq([ preference ])
|
|
405
|
+
end
|
|
406
|
+
end
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
context "when the relation is a many to one" do
|
|
410
|
+
|
|
411
|
+
let!(:post) do
|
|
412
|
+
Post.create(title: "First!")
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
before do
|
|
416
|
+
person.posts << Post.last
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
context "when reloading the relation directly" do
|
|
420
|
+
|
|
421
|
+
let(:posts) do
|
|
422
|
+
person.posts(true)
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
it "reloads the correct documents" do
|
|
426
|
+
posts.should eq([ post ])
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
it "reloads a new instance" do
|
|
430
|
+
posts.first.should_not equal(post)
|
|
431
|
+
end
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
context "when reloading via the base document" do
|
|
435
|
+
|
|
436
|
+
let(:posts) do
|
|
437
|
+
person.reload.posts
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
it "reloads the correct documents" do
|
|
441
|
+
posts.should eq([ post ])
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
it "reloads a new instance" do
|
|
445
|
+
posts.first.should_not equal(post)
|
|
446
|
+
end
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
context "when performing a fresh find on the base" do
|
|
450
|
+
|
|
451
|
+
let(:posts) do
|
|
452
|
+
Person.find(person.id).posts
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
it "reloads the correct documents" do
|
|
456
|
+
posts.should eq([ post ])
|
|
457
|
+
end
|
|
458
|
+
end
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
context "when the relation is a references one" do
|
|
462
|
+
|
|
463
|
+
let!(:game) do
|
|
464
|
+
Game.create(name: "Centipeded")
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
before do
|
|
468
|
+
person.game = Game.last
|
|
469
|
+
end
|
|
470
|
+
|
|
471
|
+
context "when reloading the relation directly" do
|
|
472
|
+
|
|
473
|
+
let(:reloaded_game) do
|
|
474
|
+
person.game(true)
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
it "reloads the correct documents" do
|
|
478
|
+
reloaded_game.should eq(game)
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
it "reloads a new instance" do
|
|
482
|
+
reloaded_game.should_not equal(game)
|
|
483
|
+
end
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
context "when reloading via the base document" do
|
|
487
|
+
|
|
488
|
+
let(:reloaded_game) do
|
|
489
|
+
person.reload.game
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
it "reloads the correct documents" do
|
|
493
|
+
reloaded_game.should eq(game)
|
|
494
|
+
end
|
|
495
|
+
|
|
496
|
+
it "reloads a new instance" do
|
|
497
|
+
reloaded_game.should_not equal(game)
|
|
498
|
+
end
|
|
499
|
+
end
|
|
500
|
+
|
|
501
|
+
context "when performing a fresh find on the base" do
|
|
502
|
+
|
|
503
|
+
let(:reloaded_game) do
|
|
504
|
+
Person.find(person.id).game
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
it "reloads the correct documents" do
|
|
508
|
+
reloaded_game.should eq(game)
|
|
509
|
+
end
|
|
510
|
+
end
|
|
511
|
+
end
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
context "when the relation is polymorphic" do
|
|
515
|
+
|
|
516
|
+
context "when there's a single references many/one" do
|
|
517
|
+
|
|
518
|
+
let!(:movie) do
|
|
519
|
+
Movie.create(title: "Inception")
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
let!(:book) do
|
|
523
|
+
Book.create(title: "Jurassic Park")
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
let!(:movie_rating) do
|
|
527
|
+
movie.ratings.create(value: 10)
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
let!(:book_rating) do
|
|
531
|
+
book.create_rating(value: 5)
|
|
532
|
+
end
|
|
533
|
+
|
|
534
|
+
context "when accessing a referenced in" do
|
|
535
|
+
|
|
536
|
+
let!(:rating) do
|
|
537
|
+
Rating.where(value: 10).first
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
it "returns the correct document" do
|
|
541
|
+
rating.ratable.should eq(movie)
|
|
542
|
+
end
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
context "when accessing a references many" do
|
|
546
|
+
|
|
547
|
+
let(:ratings) do
|
|
548
|
+
Movie.first.ratings
|
|
549
|
+
end
|
|
550
|
+
|
|
551
|
+
it "returns the correct documents" do
|
|
552
|
+
ratings.should eq([ movie_rating ])
|
|
553
|
+
end
|
|
554
|
+
end
|
|
555
|
+
|
|
556
|
+
context "when accessing a references one" do
|
|
557
|
+
|
|
558
|
+
let!(:rating) do
|
|
559
|
+
Book.find(book.id).rating
|
|
560
|
+
end
|
|
561
|
+
|
|
562
|
+
it "returns the correct document" do
|
|
563
|
+
rating.should eq(book_rating)
|
|
564
|
+
end
|
|
565
|
+
end
|
|
566
|
+
end
|
|
567
|
+
|
|
568
|
+
context "when there are multiple references many/one" do
|
|
569
|
+
|
|
570
|
+
let(:face) do
|
|
571
|
+
Face.create
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
let(:eye_bowl) do
|
|
575
|
+
EyeBowl.create
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
let!(:face_left_eye) do
|
|
579
|
+
face.create_left_eye(pupil_dilation: 10)
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
let!(:face_right_eye) do
|
|
583
|
+
face.create_right_eye(pupil_dilation: 5)
|
|
584
|
+
end
|
|
585
|
+
|
|
586
|
+
let!(:eye_bowl_blue_eye) do
|
|
587
|
+
eye_bowl.blue_eyes.create(pupil_dilation: 2)
|
|
588
|
+
end
|
|
589
|
+
|
|
590
|
+
let!(:eye_bowl_brown_eye) do
|
|
591
|
+
eye_bowl.brown_eyes.create(pupil_dilation: 1)
|
|
592
|
+
end
|
|
593
|
+
|
|
594
|
+
context "when accessing a referenced in" do
|
|
595
|
+
|
|
596
|
+
let(:eye) do
|
|
597
|
+
Eye.where(pupil_dilation: 10).first
|
|
598
|
+
end
|
|
599
|
+
|
|
600
|
+
it "returns the correct type" do
|
|
601
|
+
eye.eyeable.should be_a(Face)
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
it "returns the correct document" do
|
|
605
|
+
eye.eyeable.should eq(face)
|
|
606
|
+
end
|
|
607
|
+
end
|
|
608
|
+
|
|
609
|
+
context "when accessing a references many" do
|
|
610
|
+
|
|
611
|
+
context "first references many" do
|
|
612
|
+
|
|
613
|
+
let(:eyes) do
|
|
614
|
+
EyeBowl.first.blue_eyes
|
|
615
|
+
end
|
|
616
|
+
|
|
617
|
+
it "returns the correct documents" do
|
|
618
|
+
eyes.should eq([ eye_bowl_blue_eye ])
|
|
619
|
+
end
|
|
620
|
+
end
|
|
621
|
+
|
|
622
|
+
context "second references many" do
|
|
623
|
+
|
|
624
|
+
let(:eyes) do
|
|
625
|
+
EyeBowl.first.brown_eyes
|
|
626
|
+
end
|
|
627
|
+
|
|
628
|
+
it "returns the correct documents" do
|
|
629
|
+
eyes.should eq([ eye_bowl_brown_eye ])
|
|
630
|
+
end
|
|
631
|
+
end
|
|
632
|
+
end
|
|
633
|
+
|
|
634
|
+
context "when accessing a references one" do
|
|
635
|
+
|
|
636
|
+
context "first references one" do
|
|
637
|
+
|
|
638
|
+
let(:eye) do
|
|
639
|
+
Face.first.left_eye
|
|
640
|
+
end
|
|
641
|
+
|
|
642
|
+
it "returns the correct document" do
|
|
643
|
+
eye.should eq(face_left_eye)
|
|
644
|
+
end
|
|
645
|
+
end
|
|
646
|
+
|
|
647
|
+
context "second references one" do
|
|
648
|
+
|
|
649
|
+
let(:eye) do
|
|
650
|
+
Face.first.right_eye
|
|
651
|
+
end
|
|
652
|
+
|
|
653
|
+
it "returns the correct document" do
|
|
654
|
+
eye.should eq(face_right_eye)
|
|
655
|
+
end
|
|
656
|
+
end
|
|
657
|
+
end
|
|
658
|
+
end
|
|
659
|
+
end
|
|
660
|
+
end
|
|
661
|
+
|
|
662
|
+
context "when setting relations to empty values" do
|
|
663
|
+
|
|
664
|
+
context "when the document is a referenced in" do
|
|
665
|
+
|
|
666
|
+
let(:post) do
|
|
667
|
+
Post.new
|
|
668
|
+
end
|
|
669
|
+
|
|
670
|
+
context "when setting the relation directly" do
|
|
671
|
+
|
|
672
|
+
before do
|
|
673
|
+
post.person = ""
|
|
674
|
+
end
|
|
675
|
+
|
|
676
|
+
it "converts them to nil" do
|
|
677
|
+
post.person.should be_nil
|
|
678
|
+
end
|
|
679
|
+
end
|
|
680
|
+
|
|
681
|
+
context "when setting the foreign key" do
|
|
682
|
+
|
|
683
|
+
before do
|
|
684
|
+
post.person_id = ""
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
it "converts it to nil" do
|
|
688
|
+
post.person_id.should be_nil
|
|
689
|
+
end
|
|
690
|
+
end
|
|
691
|
+
end
|
|
692
|
+
|
|
693
|
+
context "when the document is a references one" do
|
|
694
|
+
|
|
695
|
+
let(:person) do
|
|
696
|
+
Person.new
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
context "when setting the relation directly" do
|
|
700
|
+
|
|
701
|
+
before do
|
|
702
|
+
person.game = ""
|
|
703
|
+
end
|
|
704
|
+
|
|
705
|
+
it "converts them to nil" do
|
|
706
|
+
person.game.should be_nil
|
|
707
|
+
end
|
|
708
|
+
end
|
|
709
|
+
|
|
710
|
+
context "when setting the foreign key" do
|
|
711
|
+
|
|
712
|
+
let(:game) do
|
|
713
|
+
Game.new
|
|
714
|
+
end
|
|
715
|
+
|
|
716
|
+
before do
|
|
717
|
+
game.person_id = ""
|
|
718
|
+
end
|
|
719
|
+
|
|
720
|
+
it "converts it to nil" do
|
|
721
|
+
game.person_id.should be_nil
|
|
722
|
+
end
|
|
723
|
+
end
|
|
724
|
+
end
|
|
725
|
+
|
|
726
|
+
context "when the document is a references many" do
|
|
727
|
+
|
|
728
|
+
let(:person) do
|
|
729
|
+
Person.new
|
|
730
|
+
end
|
|
731
|
+
|
|
732
|
+
context "when setting the foreign key" do
|
|
733
|
+
|
|
734
|
+
let(:post) do
|
|
735
|
+
Post.new
|
|
736
|
+
end
|
|
737
|
+
|
|
738
|
+
before do
|
|
739
|
+
post.person_id = ""
|
|
740
|
+
end
|
|
741
|
+
|
|
742
|
+
it "converts it to nil" do
|
|
743
|
+
post.person.should be_nil
|
|
744
|
+
end
|
|
745
|
+
end
|
|
746
|
+
|
|
747
|
+
context "when setting the _ids accessor" do
|
|
748
|
+
|
|
749
|
+
let(:post) do
|
|
750
|
+
Post.create
|
|
751
|
+
end
|
|
752
|
+
|
|
753
|
+
before do
|
|
754
|
+
person.post_ids = [ "" ]
|
|
755
|
+
end
|
|
756
|
+
|
|
757
|
+
it "ignore blank values" do
|
|
758
|
+
person.post_ids.should be_empty
|
|
759
|
+
end
|
|
760
|
+
end
|
|
761
|
+
end
|
|
762
|
+
|
|
763
|
+
context "when the document is a references many to many" do
|
|
764
|
+
|
|
765
|
+
let(:person) do
|
|
766
|
+
Person.new
|
|
767
|
+
end
|
|
768
|
+
|
|
769
|
+
context "when setting the foreign key" do
|
|
770
|
+
|
|
771
|
+
before do
|
|
772
|
+
person.preference_ids = [ "", "" ]
|
|
773
|
+
end
|
|
774
|
+
|
|
775
|
+
it "does not add them" do
|
|
776
|
+
person.preference_ids.should be_empty
|
|
777
|
+
end
|
|
778
|
+
end
|
|
779
|
+
end
|
|
780
|
+
end
|
|
781
|
+
|
|
782
|
+
context "when setting association foreign keys" do
|
|
783
|
+
|
|
784
|
+
let(:game) do
|
|
785
|
+
Game.new
|
|
786
|
+
end
|
|
787
|
+
|
|
788
|
+
let(:person) do
|
|
789
|
+
Person.create
|
|
790
|
+
end
|
|
791
|
+
|
|
792
|
+
context "when value is an empty string" do
|
|
793
|
+
|
|
794
|
+
before do
|
|
795
|
+
game.person_id = ""
|
|
796
|
+
game.save
|
|
797
|
+
end
|
|
798
|
+
|
|
799
|
+
it "sets the foreign key to empty" do
|
|
800
|
+
expect(game.reload.person_id).to be_blank
|
|
801
|
+
end
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
context "when value is a populated string" do
|
|
805
|
+
|
|
806
|
+
before do
|
|
807
|
+
game.person_id = person.id.to_s
|
|
808
|
+
game.save
|
|
809
|
+
end
|
|
810
|
+
|
|
811
|
+
it "sets the foreign key as ObjectID" do
|
|
812
|
+
expect(game.reload.person_id).to eq(person.id)
|
|
813
|
+
end
|
|
814
|
+
end
|
|
815
|
+
|
|
816
|
+
context "when value is a ObjectID" do
|
|
817
|
+
|
|
818
|
+
before do
|
|
819
|
+
game.person_id = person.id
|
|
820
|
+
game.save
|
|
821
|
+
end
|
|
822
|
+
|
|
823
|
+
it "keeps the the foreign key as ObjectID" do
|
|
824
|
+
expect(game.reload.person_id).to eq(person.id)
|
|
825
|
+
end
|
|
826
|
+
end
|
|
827
|
+
|
|
828
|
+
context "when setting ids multiple times on the relation itself" do
|
|
829
|
+
|
|
830
|
+
before do
|
|
831
|
+
game.person = person.id
|
|
832
|
+
game.person = person.id
|
|
833
|
+
end
|
|
834
|
+
|
|
835
|
+
it "sets the relation foreign key" do
|
|
836
|
+
expect(game.person_id).to eq(person.id)
|
|
837
|
+
end
|
|
838
|
+
|
|
839
|
+
it "sets the appropriate relation" do
|
|
840
|
+
expect(game.person).to eq(person)
|
|
841
|
+
end
|
|
842
|
+
end
|
|
843
|
+
end
|
|
844
|
+
end
|