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,37 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Errors::UnsavedDocument do
|
|
4
|
+
|
|
5
|
+
describe "#message" do
|
|
6
|
+
|
|
7
|
+
let(:base) do
|
|
8
|
+
Person.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
let(:document) do
|
|
12
|
+
Post.new
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
let(:error) do
|
|
16
|
+
described_class.new(base, document)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "contains the problem in the message" do
|
|
20
|
+
error.message.should include(
|
|
21
|
+
"Attempted to save Post before the parent Person."
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "contains the summary in the message" do
|
|
26
|
+
error.message.should include(
|
|
27
|
+
"You cannot call create or create! through the relation"
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "contains the resolution in the message" do
|
|
32
|
+
error.message.should include(
|
|
33
|
+
"Make sure to only use create or create!"
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Errors::UnsupportedJavascript do
|
|
4
|
+
|
|
5
|
+
describe "#message" do
|
|
6
|
+
|
|
7
|
+
let(:error) do
|
|
8
|
+
described_class.new(Address, "this.street == null")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "contains the problem in the message" do
|
|
12
|
+
error.message.should include(
|
|
13
|
+
"Executing Javascript $where selector on an embedded criteria is not supported"
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "contains the summary in the message" do
|
|
18
|
+
error.message.should include(
|
|
19
|
+
"Mongoid only supports providing a hash of arguments to #where"
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "contains the resolution in the message" do
|
|
24
|
+
error.message.should include(
|
|
25
|
+
"Please provide a standard hash to #where when the criteria"
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Errors::Validations do
|
|
4
|
+
|
|
5
|
+
describe "#message" do
|
|
6
|
+
|
|
7
|
+
let(:errors) do
|
|
8
|
+
stub(full_messages: [ "Error 1", "Error 2" ], empty?: false)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
let(:document) do
|
|
12
|
+
stub(errors: errors, class: Person)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
let(:error) do
|
|
16
|
+
described_class.new(document)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "contains the problem in the message" do
|
|
20
|
+
error.message.should include(
|
|
21
|
+
"Validation of Person failed"
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "contains the summary in the message" do
|
|
26
|
+
error.message.should include(
|
|
27
|
+
"The following errors were found: Error 1, Error 2"
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "contains the resolution in the message" do
|
|
32
|
+
error.message.should include(
|
|
33
|
+
"Try persisting the document with valid data"
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "sets the document in the error" do
|
|
38
|
+
error.document.should eq(document)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "aliases record to document" do
|
|
42
|
+
error.record.should eq(document)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Errors::VersioningNotOnRoot do
|
|
4
|
+
|
|
5
|
+
describe "#message" do
|
|
6
|
+
|
|
7
|
+
let(:error) do
|
|
8
|
+
described_class.new(Address)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "contains the problem in the message" do
|
|
12
|
+
error.message.should include(
|
|
13
|
+
"Versioning not allowed on embedded document: Address."
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "contains the summary in the message" do
|
|
18
|
+
error.message.should include(
|
|
19
|
+
"Mongoid::Versioning behaviour is only allowed on documents"
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "contains the resolution in the message" do
|
|
24
|
+
error.message.should include(
|
|
25
|
+
"Remove the versioning from the embedded Address"
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,638 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Extensions::Array do
|
|
4
|
+
|
|
5
|
+
describe "#__evolve_object_id__" do
|
|
6
|
+
|
|
7
|
+
context "when provided an array of strings" do
|
|
8
|
+
|
|
9
|
+
let(:object_id) do
|
|
10
|
+
Moped::BSON::ObjectId.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
let(:other) do
|
|
14
|
+
"blah"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
let(:array) do
|
|
18
|
+
[ object_id.to_s, other ]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
let(:evolved) do
|
|
22
|
+
array.__evolve_object_id__
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "converts the convertible ones to object ids" do
|
|
26
|
+
evolved.should eq([ object_id, other ])
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "returns the same instance" do
|
|
30
|
+
evolved.should equal(array)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "when provided an array of object ids" do
|
|
35
|
+
|
|
36
|
+
let(:object_id) do
|
|
37
|
+
Moped::BSON::ObjectId.new
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
let(:array) do
|
|
41
|
+
[ object_id ]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
let(:evolved) do
|
|
45
|
+
array.__evolve_object_id__
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "returns the array" do
|
|
49
|
+
evolved.should eq(array)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "returns the same instance" do
|
|
53
|
+
evolved.should equal(array)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context "when some values are nil" do
|
|
58
|
+
|
|
59
|
+
let(:object_id) do
|
|
60
|
+
Moped::BSON::ObjectId.new
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
let(:array) do
|
|
64
|
+
[ object_id, nil ]
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
let(:evolved) do
|
|
68
|
+
array.__evolve_object_id__
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "returns the array with the nils" do
|
|
72
|
+
evolved.should eq([ object_id, nil ])
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "returns the same instance" do
|
|
76
|
+
evolved.should equal(array)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context "when some values are empty strings" do
|
|
81
|
+
|
|
82
|
+
let(:object_id) do
|
|
83
|
+
Moped::BSON::ObjectId.new
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
let(:array) do
|
|
87
|
+
[ object_id, "" ]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
let(:evolved) do
|
|
91
|
+
array.__evolve_object_id__
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "returns the array with the empty strings" do
|
|
95
|
+
evolved.should eq([ object_id, "" ])
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "returns the same instance" do
|
|
99
|
+
evolved.should equal(array)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
describe "#__mongoize_object_id__" do
|
|
105
|
+
|
|
106
|
+
context "when provided an array of strings" do
|
|
107
|
+
|
|
108
|
+
let(:object_id) do
|
|
109
|
+
Moped::BSON::ObjectId.new
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
let(:other) do
|
|
113
|
+
"blah"
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
let(:array) do
|
|
117
|
+
[ object_id.to_s, other ]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
let(:mongoized) do
|
|
121
|
+
array.__mongoize_object_id__
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "converts the convertible ones to object ids" do
|
|
125
|
+
mongoized.should eq([ object_id, other ])
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "returns the same instance" do
|
|
129
|
+
mongoized.should equal(array)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
context "when provided an array of object ids" do
|
|
134
|
+
|
|
135
|
+
let(:object_id) do
|
|
136
|
+
Moped::BSON::ObjectId.new
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
let(:array) do
|
|
140
|
+
[ object_id ]
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
let(:mongoized) do
|
|
144
|
+
array.__mongoize_object_id__
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "returns the array" do
|
|
148
|
+
mongoized.should eq(array)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "returns the same instance" do
|
|
152
|
+
mongoized.should equal(array)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
context "when some values are nil" do
|
|
157
|
+
|
|
158
|
+
let(:object_id) do
|
|
159
|
+
Moped::BSON::ObjectId.new
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
let(:array) do
|
|
163
|
+
[ object_id, nil ]
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
let(:mongoized) do
|
|
167
|
+
array.__mongoize_object_id__
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it "returns the array without the nils" do
|
|
171
|
+
mongoized.should eq([ object_id ])
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "returns the same instance" do
|
|
175
|
+
mongoized.should equal(array)
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
context "when some values are empty strings" do
|
|
180
|
+
|
|
181
|
+
let(:object_id) do
|
|
182
|
+
Moped::BSON::ObjectId.new
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
let(:array) do
|
|
186
|
+
[ object_id, "" ]
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
let(:mongoized) do
|
|
190
|
+
array.__mongoize_object_id__
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it "returns the array without the empty strings" do
|
|
194
|
+
mongoized.should eq([ object_id ])
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it "returns the same instance" do
|
|
198
|
+
mongoized.should equal(array)
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
describe ".__mongoize_fk__" do
|
|
204
|
+
|
|
205
|
+
context "when the related model uses object ids" do
|
|
206
|
+
|
|
207
|
+
let(:metadata) do
|
|
208
|
+
Person.relations["preferences"]
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
let(:constraint) do
|
|
212
|
+
metadata.constraint
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
context "when provided an object id" do
|
|
216
|
+
|
|
217
|
+
let(:object_id) do
|
|
218
|
+
Moped::BSON::ObjectId.new
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
let(:fk) do
|
|
222
|
+
Array.__mongoize_fk__(constraint, object_id)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
it "returns the object id as an array" do
|
|
226
|
+
fk.should eq([ object_id ])
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
context "when provided a object ids" do
|
|
231
|
+
|
|
232
|
+
let(:object_id) do
|
|
233
|
+
Moped::BSON::ObjectId.new
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
let(:fk) do
|
|
237
|
+
Array.__mongoize_fk__(constraint, [ object_id ])
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
it "returns the object ids" do
|
|
241
|
+
fk.should eq([ object_id ])
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
context "when provided a string" do
|
|
246
|
+
|
|
247
|
+
context "when the string is a legal object id" do
|
|
248
|
+
|
|
249
|
+
let(:object_id) do
|
|
250
|
+
Moped::BSON::ObjectId.new
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
let(:fk) do
|
|
254
|
+
Array.__mongoize_fk__(constraint, object_id.to_s)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
it "returns the object id in an array" do
|
|
258
|
+
fk.should eq([ object_id ])
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
context "when the string is not a legal object id" do
|
|
263
|
+
|
|
264
|
+
let(:string) do
|
|
265
|
+
"blah"
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
let(:fk) do
|
|
269
|
+
Array.__mongoize_fk__(constraint, string)
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
it "returns the string in an array" do
|
|
273
|
+
fk.should eq([ string ])
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
context "when the string is blank" do
|
|
278
|
+
|
|
279
|
+
let(:fk) do
|
|
280
|
+
Array.__mongoize_fk__(constraint, "")
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
it "returns an empty array" do
|
|
284
|
+
fk.should be_empty
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
context "when provided nil" do
|
|
290
|
+
|
|
291
|
+
let(:fk) do
|
|
292
|
+
Array.__mongoize_fk__(constraint, nil)
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
it "returns an empty array" do
|
|
296
|
+
fk.should be_empty
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
context "when provided an array of strings" do
|
|
301
|
+
|
|
302
|
+
context "when the strings are legal object ids" do
|
|
303
|
+
|
|
304
|
+
let(:object_id) do
|
|
305
|
+
Moped::BSON::ObjectId.new
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
let(:fk) do
|
|
309
|
+
Array.__mongoize_fk__(constraint, [ object_id.to_s ])
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
it "returns the object id in an array" do
|
|
313
|
+
fk.should eq([ object_id ])
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
context "when the strings are not legal object ids" do
|
|
318
|
+
|
|
319
|
+
let(:string) do
|
|
320
|
+
"blah"
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
let(:fk) do
|
|
324
|
+
Array.__mongoize_fk__(constraint, [ string ])
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
it "returns the string in an array" do
|
|
328
|
+
fk.should eq([ string ])
|
|
329
|
+
end
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
context "when the strings are blank" do
|
|
333
|
+
|
|
334
|
+
let(:fk) do
|
|
335
|
+
Array.__mongoize_fk__(constraint, [ "", "" ])
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
it "returns an empty array" do
|
|
339
|
+
fk.should be_empty
|
|
340
|
+
end
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
context "when provided nils" do
|
|
345
|
+
|
|
346
|
+
let(:fk) do
|
|
347
|
+
Array.__mongoize_fk__(constraint, [ nil, nil, nil ])
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
it "returns an empty array" do
|
|
351
|
+
fk.should be_empty
|
|
352
|
+
end
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
describe "#__mongoize_time__" do
|
|
358
|
+
|
|
359
|
+
context "when using active support's time zone" do
|
|
360
|
+
|
|
361
|
+
before do
|
|
362
|
+
Mongoid.use_activesupport_time_zone = true
|
|
363
|
+
::Time.zone = "Tokyo"
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
after do
|
|
367
|
+
::Time.zone = "Berlin"
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
let(:array) do
|
|
371
|
+
[ 2010, 11, 19, 00, 24, 49 ]
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
let(:time) do
|
|
375
|
+
array.__mongoize_time__
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
it "converts to a time" do
|
|
379
|
+
time.should eq(::Time.zone.local(*array))
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
it "converts to the as time zone" do
|
|
383
|
+
time.zone.should eq("JST")
|
|
384
|
+
end
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
context "when not using active support's time zone" do
|
|
388
|
+
|
|
389
|
+
before do
|
|
390
|
+
Mongoid.use_activesupport_time_zone = false
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
after do
|
|
394
|
+
Mongoid.use_activesupport_time_zone = true
|
|
395
|
+
Time.zone = nil
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
let(:array) do
|
|
399
|
+
[ 2010, 11, 19, 00, 24, 49 ]
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
let(:time) do
|
|
403
|
+
array.__mongoize_time__
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
it "converts to a time" do
|
|
407
|
+
time.should eq(Time.local(*array))
|
|
408
|
+
end
|
|
409
|
+
end
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
describe "#blank_criteria?" do
|
|
413
|
+
|
|
414
|
+
context "when the array has an empty _id criteria" do
|
|
415
|
+
|
|
416
|
+
context "when only the id criteria is in the array" do
|
|
417
|
+
|
|
418
|
+
let(:array) do
|
|
419
|
+
[{ "_id" => { "$in" => [] }}]
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
it "returns true" do
|
|
423
|
+
array.should be_blank_criteria
|
|
424
|
+
end
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
context "when the id criteria is in the array with others" do
|
|
428
|
+
|
|
429
|
+
let(:array) do
|
|
430
|
+
[{ "_id" => "test" }, { "_id" => { "$in" => [] }}]
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
it "returns true" do
|
|
434
|
+
array.should be_blank_criteria
|
|
435
|
+
end
|
|
436
|
+
end
|
|
437
|
+
end
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
describe "#delete_one" do
|
|
441
|
+
|
|
442
|
+
context "when the object doesn't exist" do
|
|
443
|
+
|
|
444
|
+
let(:array) do
|
|
445
|
+
[]
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
let!(:deleted) do
|
|
449
|
+
array.delete_one("1")
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
it "returns nil" do
|
|
453
|
+
deleted.should be_nil
|
|
454
|
+
end
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
context "when the object exists once" do
|
|
458
|
+
|
|
459
|
+
let(:array) do
|
|
460
|
+
[ "1", "2" ]
|
|
461
|
+
end
|
|
462
|
+
|
|
463
|
+
let!(:deleted) do
|
|
464
|
+
array.delete_one("1")
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
it "deletes the object" do
|
|
468
|
+
array.should eq([ "2" ])
|
|
469
|
+
end
|
|
470
|
+
|
|
471
|
+
it "returns the object" do
|
|
472
|
+
deleted.should eq("1")
|
|
473
|
+
end
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
context "when the object exists more than once" do
|
|
477
|
+
|
|
478
|
+
let(:array) do
|
|
479
|
+
[ "1", "2", "1" ]
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
let!(:deleted) do
|
|
483
|
+
array.delete_one("1")
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
it "deletes the first object" do
|
|
487
|
+
array.should eq([ "2", "1" ])
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
it "returns the object" do
|
|
491
|
+
deleted.should eq("1")
|
|
492
|
+
end
|
|
493
|
+
end
|
|
494
|
+
end
|
|
495
|
+
|
|
496
|
+
describe ".demongoize" do
|
|
497
|
+
|
|
498
|
+
let(:array) do
|
|
499
|
+
[ 1, 2, 3 ]
|
|
500
|
+
end
|
|
501
|
+
|
|
502
|
+
it "returns the array" do
|
|
503
|
+
Array.demongoize(array).should eq(array)
|
|
504
|
+
end
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
describe ".mongoize" do
|
|
508
|
+
|
|
509
|
+
let(:date) do
|
|
510
|
+
Date.new(2012, 1, 1)
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
let(:array) do
|
|
514
|
+
[ date ]
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
let(:mongoized) do
|
|
518
|
+
Array.mongoize(array)
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
it "mongoizes each element in the array" do
|
|
522
|
+
mongoized.first.should be_a(Time)
|
|
523
|
+
end
|
|
524
|
+
|
|
525
|
+
it "converts the elements properly" do
|
|
526
|
+
mongoized.first.should eq(date)
|
|
527
|
+
end
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
describe "#mongoize" do
|
|
531
|
+
|
|
532
|
+
let(:date) do
|
|
533
|
+
Date.new(2012, 1, 1)
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
let(:array) do
|
|
537
|
+
[ date ]
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
let(:mongoized) do
|
|
541
|
+
array.mongoize
|
|
542
|
+
end
|
|
543
|
+
|
|
544
|
+
it "mongoizes each element in the array" do
|
|
545
|
+
mongoized.first.should be_a(Time)
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
it "converts the elements properly" do
|
|
549
|
+
mongoized.first.should eq(date)
|
|
550
|
+
end
|
|
551
|
+
end
|
|
552
|
+
|
|
553
|
+
describe "#multi_arged?" do
|
|
554
|
+
|
|
555
|
+
context "when there are multiple elements" do
|
|
556
|
+
|
|
557
|
+
let(:array) do
|
|
558
|
+
[ 1, 2, 3 ]
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
it "returns true" do
|
|
562
|
+
array.should be_multi_arged
|
|
563
|
+
end
|
|
564
|
+
end
|
|
565
|
+
|
|
566
|
+
context "when there is one element" do
|
|
567
|
+
|
|
568
|
+
context "when the element is a non enumerable" do
|
|
569
|
+
|
|
570
|
+
let(:array) do
|
|
571
|
+
[ 1 ]
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
it "returns false" do
|
|
575
|
+
array.should_not be_multi_arged
|
|
576
|
+
end
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
context "when the element is resizable Hash instance" do
|
|
580
|
+
|
|
581
|
+
let(:array) do
|
|
582
|
+
[{'key' => 'value'}]
|
|
583
|
+
end
|
|
584
|
+
|
|
585
|
+
it "returns false" do
|
|
586
|
+
array.should_not be_multi_arged
|
|
587
|
+
end
|
|
588
|
+
end
|
|
589
|
+
|
|
590
|
+
context "when the element is array of resizable Hash instances" do
|
|
591
|
+
|
|
592
|
+
let(:array) do
|
|
593
|
+
[[{'key1' => 'value2'},{'key1' => 'value2'}]]
|
|
594
|
+
end
|
|
595
|
+
|
|
596
|
+
it "returns true" do
|
|
597
|
+
array.should be_multi_arged
|
|
598
|
+
end
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
context "when the element is an array" do
|
|
602
|
+
|
|
603
|
+
let(:array) do
|
|
604
|
+
[[ 1 ]]
|
|
605
|
+
end
|
|
606
|
+
|
|
607
|
+
it "returns true" do
|
|
608
|
+
array.should be_multi_arged
|
|
609
|
+
end
|
|
610
|
+
end
|
|
611
|
+
|
|
612
|
+
context "when the element is a range" do
|
|
613
|
+
|
|
614
|
+
let(:array) do
|
|
615
|
+
[ 1..2 ]
|
|
616
|
+
end
|
|
617
|
+
|
|
618
|
+
it "returns true" do
|
|
619
|
+
array.should be_multi_arged
|
|
620
|
+
end
|
|
621
|
+
end
|
|
622
|
+
end
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
describe ".resizable?" do
|
|
626
|
+
|
|
627
|
+
it "returns true" do
|
|
628
|
+
Array.should be_resizable
|
|
629
|
+
end
|
|
630
|
+
end
|
|
631
|
+
|
|
632
|
+
describe "#resiable?" do
|
|
633
|
+
|
|
634
|
+
it "returns true" do
|
|
635
|
+
[].should be_resizable
|
|
636
|
+
end
|
|
637
|
+
end
|
|
638
|
+
end
|