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,625 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Relations::Macros do
|
|
4
|
+
|
|
5
|
+
class TestClass
|
|
6
|
+
include Mongoid::Document
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
let(:klass) do
|
|
10
|
+
TestClass
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
before do
|
|
14
|
+
klass.relations.clear
|
|
15
|
+
klass._validators.clear
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe ".embedded_in" do
|
|
19
|
+
|
|
20
|
+
it "defines the macro" do
|
|
21
|
+
klass.should respond_to(:embedded_in)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context "when the document is versioned" do
|
|
25
|
+
|
|
26
|
+
it "raises an error" do
|
|
27
|
+
expect {
|
|
28
|
+
Class.new do
|
|
29
|
+
include Mongoid::Document
|
|
30
|
+
include Mongoid::Versioning
|
|
31
|
+
embedded_in :parent_class
|
|
32
|
+
end
|
|
33
|
+
}.to raise_error(Mongoid::Errors::VersioningNotOnRoot)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context "when defining the relation" do
|
|
38
|
+
|
|
39
|
+
before do
|
|
40
|
+
klass.embedded_in(:person)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "adds the metadata to the klass" do
|
|
44
|
+
klass.relations["person"].should_not be_nil
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "defines the getter" do
|
|
48
|
+
klass.allocate.should respond_to(:person)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "defines the setter" do
|
|
52
|
+
klass.allocate.should respond_to(:person=)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "creates the correct relation" do
|
|
56
|
+
klass.relations["person"].relation.should eq(
|
|
57
|
+
Mongoid::Relations::Embedded::In
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "does not add associated validations" do
|
|
62
|
+
klass._validators.should be_empty
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
context "metadata properties" do
|
|
66
|
+
|
|
67
|
+
let(:metadata) do
|
|
68
|
+
klass.relations["person"]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "automatically adds the name" do
|
|
72
|
+
metadata.name.should eq(:person)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "automatically adds the inverse class name" do
|
|
76
|
+
metadata.inverse_class_name.should eq("TestClass")
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
describe ".embeds_many" do
|
|
83
|
+
|
|
84
|
+
it "defines the macro" do
|
|
85
|
+
klass.should respond_to(:embeds_many)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
context "when defining the relation" do
|
|
89
|
+
|
|
90
|
+
before do
|
|
91
|
+
klass.embeds_many(:addresses)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "adds the metadata to the klass" do
|
|
95
|
+
klass.relations["addresses"].should_not be_nil
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "defines the getter" do
|
|
99
|
+
klass.allocate.should respond_to(:addresses)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "defines the setter" do
|
|
103
|
+
klass.allocate.should respond_to(:addresses=)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "creates the correct relation" do
|
|
107
|
+
klass.relations["addresses"].relation.should eq(
|
|
108
|
+
Mongoid::Relations::Embedded::Many
|
|
109
|
+
)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "adds an associated validation" do
|
|
113
|
+
klass._validators[:addresses].first.should be_a(
|
|
114
|
+
Mongoid::Validations::AssociatedValidator
|
|
115
|
+
)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
context "metadata properties" do
|
|
119
|
+
|
|
120
|
+
let(:metadata) do
|
|
121
|
+
klass.relations["addresses"]
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "automatically adds the name" do
|
|
125
|
+
metadata.name.should eq(:addresses)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "automatically adds the inverse class name" do
|
|
129
|
+
metadata.inverse_class_name.should eq("TestClass")
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
context 'when defining order on relation' do
|
|
135
|
+
|
|
136
|
+
before do
|
|
137
|
+
klass.embeds_many(:addresses, order: :number.asc)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
let(:metadata) do
|
|
141
|
+
klass.relations["addresses"]
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it "adds metadata to klass" do
|
|
145
|
+
metadata.order.should_not be_nil
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "returns Origin::Key" do
|
|
149
|
+
metadata.order.should be_kind_of(Origin::Key)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
context "when setting validate to false" do
|
|
154
|
+
|
|
155
|
+
before do
|
|
156
|
+
klass.embeds_many(:addresses, validate: false)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
it "does not add associated validations" do
|
|
160
|
+
klass._validators.should be_empty
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
describe ".embeds_one" do
|
|
166
|
+
|
|
167
|
+
it "defines the macro" do
|
|
168
|
+
klass.should respond_to(:embeds_one)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
context "when defining the relation" do
|
|
172
|
+
|
|
173
|
+
before do
|
|
174
|
+
klass.embeds_one(:name)
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it "adds the metadata to the klass" do
|
|
178
|
+
klass.relations["name"].should_not be_nil
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "defines the getter" do
|
|
182
|
+
klass.allocate.should respond_to(:name)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
it "defines the setter" do
|
|
186
|
+
klass.allocate.should respond_to(:name=)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it "defines the builder" do
|
|
190
|
+
klass.allocate.should respond_to(:build_name)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it "defines the creator" do
|
|
194
|
+
klass.allocate.should respond_to(:create_name)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it "creates the correct relation" do
|
|
198
|
+
klass.relations["name"].relation.should eq(
|
|
199
|
+
Mongoid::Relations::Embedded::One
|
|
200
|
+
)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
it "adds an associated validation" do
|
|
204
|
+
klass._validators[:name].first.should be_a(
|
|
205
|
+
Mongoid::Validations::AssociatedValidator
|
|
206
|
+
)
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
context "metadata properties" do
|
|
210
|
+
|
|
211
|
+
let(:metadata) do
|
|
212
|
+
klass.relations["name"]
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
it "automatically adds the name" do
|
|
216
|
+
metadata.name.should eq(:name)
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
it "automatically adds the inverse class name" do
|
|
220
|
+
metadata.inverse_class_name.should eq("TestClass")
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
context "when setting validate to false" do
|
|
226
|
+
|
|
227
|
+
before do
|
|
228
|
+
klass.embeds_one(:name, validate: false)
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
it "does not add associated validations" do
|
|
232
|
+
klass._validators.should be_empty
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
describe ".belongs_to" do
|
|
238
|
+
|
|
239
|
+
it "defines the macro" do
|
|
240
|
+
klass.should respond_to(:belongs_to)
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
context "when the relation is polymorphic" do
|
|
244
|
+
|
|
245
|
+
context "when indexed is true" do
|
|
246
|
+
|
|
247
|
+
before do
|
|
248
|
+
klass.belongs_to(:relatable, polymorphic: true, index: true)
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
let(:indexes) do
|
|
252
|
+
klass.index_options
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
it "adds the background index to the definitions" do
|
|
256
|
+
expect(indexes).to eq({ relatable_id: 1, relatable_type: 1 } => { background: true })
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
context "when defining the relation" do
|
|
262
|
+
|
|
263
|
+
before do
|
|
264
|
+
klass.belongs_to(:person)
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
it "adds the metadata to the klass" do
|
|
268
|
+
klass.relations["person"].should_not be_nil
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
it "defines the getter" do
|
|
272
|
+
klass.allocate.should respond_to(:person)
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
it "defines the setter" do
|
|
276
|
+
klass.allocate.should respond_to(:person=)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
it "defines the builder" do
|
|
280
|
+
klass.allocate.should respond_to(:build_person)
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
it "defines the creator" do
|
|
284
|
+
klass.allocate.should respond_to(:create_person)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
it "creates the correct relation" do
|
|
288
|
+
klass.relations["person"].relation.should eq(
|
|
289
|
+
Mongoid::Relations::Referenced::In
|
|
290
|
+
)
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
it "creates the field for the foreign key" do
|
|
294
|
+
klass.allocate.should respond_to(:person_id)
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
context "metadata properties" do
|
|
298
|
+
|
|
299
|
+
let(:metadata) do
|
|
300
|
+
klass.relations["person"]
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
it "automatically adds the name" do
|
|
304
|
+
metadata.name.should eq(:person)
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
it "automatically adds the inverse class name" do
|
|
308
|
+
metadata.inverse_class_name.should eq("TestClass")
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
describe ".has_many" do
|
|
315
|
+
|
|
316
|
+
it "defines the macro" do
|
|
317
|
+
klass.should respond_to(:has_many)
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
context "when defining the relation" do
|
|
321
|
+
|
|
322
|
+
before do
|
|
323
|
+
klass.has_many(:posts)
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
it "adds the metadata to the klass" do
|
|
327
|
+
klass.relations["posts"].should_not be_nil
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
it "defines the getter" do
|
|
331
|
+
klass.allocate.should respond_to(:posts)
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
it "defines the setter" do
|
|
335
|
+
klass.allocate.should respond_to(:posts=)
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
it "creates the correct relation" do
|
|
339
|
+
klass.relations["posts"].relation.should eq(
|
|
340
|
+
Mongoid::Relations::Referenced::Many
|
|
341
|
+
)
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
it "adds an associated validation" do
|
|
345
|
+
klass._validators[:posts].first.should be_a(
|
|
346
|
+
Mongoid::Validations::AssociatedValidator
|
|
347
|
+
)
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
context "metadata properties" do
|
|
351
|
+
|
|
352
|
+
let(:metadata) do
|
|
353
|
+
klass.relations["posts"]
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
it "automatically adds the name" do
|
|
357
|
+
metadata.name.should eq(:posts)
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
it "automatically adds the inverse class name" do
|
|
361
|
+
metadata.inverse_class_name.should eq("TestClass")
|
|
362
|
+
end
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
context 'when defining order on relation' do
|
|
367
|
+
|
|
368
|
+
before do
|
|
369
|
+
klass.has_many(:posts, order: :rating.asc)
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
let(:metadata) do
|
|
373
|
+
klass.relations["posts"]
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
it "adds metadata to klass" do
|
|
377
|
+
metadata.order.should_not be_nil
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
it "returns Origin::Key" do
|
|
381
|
+
metadata.order.should be_kind_of(Origin::Key)
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
context "when setting validate to false" do
|
|
386
|
+
|
|
387
|
+
before do
|
|
388
|
+
klass.has_many(:posts, validate: false)
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
it "does not add associated validations" do
|
|
392
|
+
klass._validators.should be_empty
|
|
393
|
+
end
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
describe ".has_and_belongs_to_many" do
|
|
398
|
+
|
|
399
|
+
it "defines the macro" do
|
|
400
|
+
klass.should respond_to(:has_and_belongs_to_many)
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
context "when defining the relation" do
|
|
404
|
+
|
|
405
|
+
before do
|
|
406
|
+
klass.has_and_belongs_to_many(:preferences)
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
it "adds the metadata to the klass" do
|
|
410
|
+
klass.relations["preferences"].should_not be_nil
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
it "defines the getter" do
|
|
414
|
+
klass.allocate.should respond_to(:preferences)
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
it "defines the setter" do
|
|
418
|
+
klass.allocate.should respond_to(:preferences=)
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
it "creates the correct relation" do
|
|
422
|
+
klass.relations["preferences"].relation.should eq(
|
|
423
|
+
Mongoid::Relations::Referenced::ManyToMany
|
|
424
|
+
)
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
it "creates the field for the foreign key" do
|
|
428
|
+
klass.allocate.should respond_to(:preference_ids)
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
context 'when defining order on relation' do
|
|
432
|
+
|
|
433
|
+
before do
|
|
434
|
+
klass.has_and_belongs_to_many(:preferences, order: :ranking.asc)
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
let(:metadata) do
|
|
438
|
+
klass.relations["preferences"]
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
it "adds metadata to klass" do
|
|
442
|
+
metadata.order.should_not be_nil
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
it "returns Origin::Key" do
|
|
446
|
+
metadata.order.should be_kind_of(Origin::Key)
|
|
447
|
+
end
|
|
448
|
+
end
|
|
449
|
+
|
|
450
|
+
context "metadata properties" do
|
|
451
|
+
|
|
452
|
+
let(:metadata) do
|
|
453
|
+
klass.relations["preferences"]
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
it "automatically adds the name" do
|
|
457
|
+
metadata.name.should eq(:preferences)
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
it "automatically adds the inverse class name" do
|
|
461
|
+
metadata.inverse_class_name.should eq("TestClass")
|
|
462
|
+
end
|
|
463
|
+
end
|
|
464
|
+
end
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
describe ".has_one" do
|
|
468
|
+
|
|
469
|
+
it "defines the macro" do
|
|
470
|
+
klass.should respond_to(:has_one)
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
context "when defining the relation" do
|
|
474
|
+
|
|
475
|
+
before do
|
|
476
|
+
klass.has_one(:game)
|
|
477
|
+
end
|
|
478
|
+
|
|
479
|
+
it "adds the metadata to the klass" do
|
|
480
|
+
klass.relations["game"].should_not be_nil
|
|
481
|
+
end
|
|
482
|
+
|
|
483
|
+
it "defines the getter" do
|
|
484
|
+
klass.allocate.should respond_to(:game)
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
it "defines the setter" do
|
|
488
|
+
klass.allocate.should respond_to(:game=)
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
it "defines the builder" do
|
|
492
|
+
klass.allocate.should respond_to(:build_game)
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
it "defines the creator" do
|
|
496
|
+
klass.allocate.should respond_to(:create_game)
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
it "creates the correct relation" do
|
|
500
|
+
klass.relations["game"].relation.should eq(
|
|
501
|
+
Mongoid::Relations::Referenced::One
|
|
502
|
+
)
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
it "adds an associated validation" do
|
|
506
|
+
klass._validators[:game].first.should be_a(
|
|
507
|
+
Mongoid::Validations::AssociatedValidator
|
|
508
|
+
)
|
|
509
|
+
end
|
|
510
|
+
|
|
511
|
+
context "metadata properties" do
|
|
512
|
+
|
|
513
|
+
let(:metadata) do
|
|
514
|
+
klass.relations["game"]
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
it "automatically adds the name" do
|
|
518
|
+
metadata.name.should eq(:game)
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
it "automatically adds the inverse class name" do
|
|
522
|
+
metadata.inverse_class_name.should eq("TestClass")
|
|
523
|
+
end
|
|
524
|
+
end
|
|
525
|
+
end
|
|
526
|
+
|
|
527
|
+
context "when setting validate to false" do
|
|
528
|
+
|
|
529
|
+
before do
|
|
530
|
+
klass.has_one(:game, validate: false)
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
it "does not add associated validations" do
|
|
534
|
+
klass._validators.should be_empty
|
|
535
|
+
end
|
|
536
|
+
end
|
|
537
|
+
end
|
|
538
|
+
|
|
539
|
+
describe "#relations" do
|
|
540
|
+
|
|
541
|
+
before do
|
|
542
|
+
klass.embeds_one(:name)
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
it "returns a hash of relations" do
|
|
546
|
+
klass.allocate.relations.should be_a_kind_of(Hash)
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
it "has keys that are the relation name" do
|
|
550
|
+
klass.allocate.relations.keys.first.should eq("name")
|
|
551
|
+
end
|
|
552
|
+
|
|
553
|
+
it "has values that are metadata" do
|
|
554
|
+
klass.allocate.relations.values.first.should
|
|
555
|
+
be_a_kind_of(Mongoid::Relations::Metadata)
|
|
556
|
+
end
|
|
557
|
+
end
|
|
558
|
+
|
|
559
|
+
describe ".relations" do
|
|
560
|
+
|
|
561
|
+
before do
|
|
562
|
+
klass.embeds_one(:name)
|
|
563
|
+
end
|
|
564
|
+
|
|
565
|
+
it "returns a hash of relations" do
|
|
566
|
+
klass.relations.should be_a_kind_of(Hash)
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
it "has keys that are the relation name" do
|
|
570
|
+
klass.relations.keys.first.should eq("name")
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
it "has values that are metadata" do
|
|
574
|
+
klass.relations.values.first.should
|
|
575
|
+
be_a_kind_of(Mongoid::Relations::Metadata)
|
|
576
|
+
end
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
context "when creating an association with an extension" do
|
|
580
|
+
|
|
581
|
+
class Peep
|
|
582
|
+
include Mongoid::Document
|
|
583
|
+
end
|
|
584
|
+
|
|
585
|
+
class Handle
|
|
586
|
+
include Mongoid::Document
|
|
587
|
+
|
|
588
|
+
module Extension
|
|
589
|
+
def short_name
|
|
590
|
+
"spec"
|
|
591
|
+
end
|
|
592
|
+
end
|
|
593
|
+
end
|
|
594
|
+
|
|
595
|
+
let(:peep) do
|
|
596
|
+
Peep.new(handle: Handle.new)
|
|
597
|
+
end
|
|
598
|
+
|
|
599
|
+
context "when the extension is a block" do
|
|
600
|
+
|
|
601
|
+
before do
|
|
602
|
+
Peep.embeds_one(:handle) do
|
|
603
|
+
def full_name
|
|
604
|
+
"spec"
|
|
605
|
+
end
|
|
606
|
+
end
|
|
607
|
+
end
|
|
608
|
+
|
|
609
|
+
it "extends the relation" do
|
|
610
|
+
peep.handle.full_name.should eq("spec")
|
|
611
|
+
end
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
context "when the extension is a module" do
|
|
615
|
+
|
|
616
|
+
before do
|
|
617
|
+
Peep.embeds_one(:handle, extend: Handle::Extension)
|
|
618
|
+
end
|
|
619
|
+
|
|
620
|
+
it "extends the relation" do
|
|
621
|
+
peep.handle.short_name.should eq("spec")
|
|
622
|
+
end
|
|
623
|
+
end
|
|
624
|
+
end
|
|
625
|
+
end
|