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,368 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Extensions::String do
|
|
4
|
+
|
|
5
|
+
describe "#__evolve_object_id__" do
|
|
6
|
+
|
|
7
|
+
context "when the string is blank" do
|
|
8
|
+
|
|
9
|
+
it "returns the empty string" do
|
|
10
|
+
"".__evolve_object_id__.should be_empty
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "when the string is a legal object id" do
|
|
15
|
+
|
|
16
|
+
let(:object_id) do
|
|
17
|
+
Moped::BSON::ObjectId.new
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "returns the object id" do
|
|
21
|
+
object_id.to_s.__evolve_object_id__.should eq(object_id)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context "when the string is not a legal object id" do
|
|
26
|
+
|
|
27
|
+
let(:string) do
|
|
28
|
+
"testing"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "returns the string" do
|
|
32
|
+
string.__evolve_object_id__.should eq(string)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "#__mongoize_object_id__" do
|
|
38
|
+
|
|
39
|
+
context "when the string is blank" do
|
|
40
|
+
|
|
41
|
+
it "returns nil" do
|
|
42
|
+
"".__mongoize_object_id__.should be_nil
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
context "when the string is a legal object id" do
|
|
47
|
+
|
|
48
|
+
let(:object_id) do
|
|
49
|
+
Moped::BSON::ObjectId.new
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "returns the object id" do
|
|
53
|
+
object_id.to_s.__mongoize_object_id__.should eq(object_id)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context "when the string is not a legal object id" do
|
|
58
|
+
|
|
59
|
+
let(:string) do
|
|
60
|
+
"testing"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "returns the string" do
|
|
64
|
+
string.__mongoize_object_id__.should eq(string)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
describe "#__mongoize_time__" do
|
|
70
|
+
|
|
71
|
+
context "when using active support's time zone" do
|
|
72
|
+
|
|
73
|
+
before do
|
|
74
|
+
Mongoid.use_activesupport_time_zone = true
|
|
75
|
+
::Time.zone = "Tokyo"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
after do
|
|
79
|
+
::Time.zone = "Berlin"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
context "when the string is a valid time" do
|
|
83
|
+
|
|
84
|
+
let(:string) do
|
|
85
|
+
"2010-11-19 00:24:49 +0900"
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
let(:time) do
|
|
89
|
+
string.__mongoize_time__
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "converts to a time" do
|
|
93
|
+
time.should eq(Time.configured.parse(string))
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "converts to the as time zone" do
|
|
97
|
+
time.zone.should eq("JST")
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
context "when the string is an invalid time" do
|
|
102
|
+
|
|
103
|
+
let(:string) do
|
|
104
|
+
"shitty string"
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "raises an error" do
|
|
108
|
+
expect {
|
|
109
|
+
string.__mongoize_time__
|
|
110
|
+
}.to raise_error(ArgumentError)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
context "when not using active support's time zone" do
|
|
116
|
+
|
|
117
|
+
before do
|
|
118
|
+
Mongoid.use_activesupport_time_zone = false
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
after do
|
|
122
|
+
Mongoid.use_activesupport_time_zone = true
|
|
123
|
+
Time.zone = nil
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
context "when the string is a valid time" do
|
|
127
|
+
|
|
128
|
+
let(:string) do
|
|
129
|
+
"2010-11-19 00:24:49 +0900"
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
let(:time) do
|
|
133
|
+
string.__mongoize_time__
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "converts to a time" do
|
|
137
|
+
time.should eq(Time.parse(string))
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
context "when the string is an invalid time" do
|
|
142
|
+
|
|
143
|
+
let(:string) do
|
|
144
|
+
"shitty string"
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "raises an error" do
|
|
148
|
+
expect {
|
|
149
|
+
string.__mongoize_time__
|
|
150
|
+
}.to raise_error(ArgumentError)
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
describe "#collectionize" do
|
|
157
|
+
|
|
158
|
+
context "when class is namepaced" do
|
|
159
|
+
|
|
160
|
+
module Medical
|
|
161
|
+
class Patient
|
|
162
|
+
include Mongoid::Document
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it "returns an underscored tableized name" do
|
|
167
|
+
Medical::Patient.name.collectionize.should eq("medical_patients")
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
context "when class is not namespaced" do
|
|
172
|
+
|
|
173
|
+
it "returns an underscored tableized name" do
|
|
174
|
+
MixedDrink.name.collectionize.should eq("mixed_drinks")
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
describe ".demongoize" do
|
|
180
|
+
|
|
181
|
+
context "when the object is not a string" do
|
|
182
|
+
|
|
183
|
+
it "returns the string" do
|
|
184
|
+
String.demongoize(:test).should eq("test")
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
context "when the object is nil" do
|
|
189
|
+
|
|
190
|
+
it "returns nil" do
|
|
191
|
+
String.demongoize(nil).should be_nil
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
describe "#mongoid_id?" do
|
|
197
|
+
|
|
198
|
+
context "when the string is id" do
|
|
199
|
+
|
|
200
|
+
it "returns true" do
|
|
201
|
+
"id".should be_mongoid_id
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
context "when the string is _id" do
|
|
206
|
+
|
|
207
|
+
it "returns true" do
|
|
208
|
+
"_id".should be_mongoid_id
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
context "when the string contains id" do
|
|
213
|
+
|
|
214
|
+
it "returns false" do
|
|
215
|
+
"identity".should_not be_mongoid_id
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
context "when the string contains _id" do
|
|
220
|
+
|
|
221
|
+
it "returns false" do
|
|
222
|
+
"something_id".should_not be_mongoid_id
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
describe ".mongoize" do
|
|
228
|
+
|
|
229
|
+
context "when the object is not a string" do
|
|
230
|
+
|
|
231
|
+
it "returns the string" do
|
|
232
|
+
String.mongoize(:test).should eq("test")
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
context "when the object is nil" do
|
|
237
|
+
|
|
238
|
+
it "returns nil" do
|
|
239
|
+
String.mongoize(nil).should be_nil
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
describe "#mongoize" do
|
|
245
|
+
|
|
246
|
+
it "returns self" do
|
|
247
|
+
"test".mongoize.should eq("test")
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
describe "#reader" do
|
|
252
|
+
|
|
253
|
+
context "when string is a reader" do
|
|
254
|
+
|
|
255
|
+
it "returns self" do
|
|
256
|
+
"attribute".reader.should eq("attribute")
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
context "when string is a writer" do
|
|
261
|
+
|
|
262
|
+
it "returns the reader" do
|
|
263
|
+
"attribute=".reader.should eq("attribute")
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
context "when the string is before_type_cast" do
|
|
268
|
+
|
|
269
|
+
it "returns the reader" do
|
|
270
|
+
"attribute_before_type_cast".reader.should eq("attribute")
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
describe "#numeric?" do
|
|
276
|
+
|
|
277
|
+
context "when the string is an integer" do
|
|
278
|
+
|
|
279
|
+
it "returns true" do
|
|
280
|
+
"1234".should be_numeric
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
context "when string is a float" do
|
|
285
|
+
|
|
286
|
+
it "returns true" do
|
|
287
|
+
"1234.123".should be_numeric
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
context "when the string is has exponents" do
|
|
292
|
+
|
|
293
|
+
it "returns true" do
|
|
294
|
+
"1234.123123E4".should be_numeric
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
context "when the string is non numeric" do
|
|
299
|
+
|
|
300
|
+
it "returns false" do
|
|
301
|
+
"blah".should_not be_numeric
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
describe "#singularize" do
|
|
307
|
+
|
|
308
|
+
context "when string is address" do
|
|
309
|
+
|
|
310
|
+
it "returns address" do
|
|
311
|
+
"address".singularize.should eq("address")
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
context "when string is address_profiles" do
|
|
316
|
+
|
|
317
|
+
it "returns address_profile" do
|
|
318
|
+
"address_profiles".singularize.should eq("address_profile")
|
|
319
|
+
end
|
|
320
|
+
end
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
describe "#to_a" do
|
|
324
|
+
|
|
325
|
+
let(:value) do
|
|
326
|
+
"Disintegration is the best album ever!"
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
it "returns an array with the string in it" do
|
|
330
|
+
value.to_a.should eq([ value ])
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
describe "#writer?" do
|
|
335
|
+
|
|
336
|
+
context "when string is a reader" do
|
|
337
|
+
|
|
338
|
+
it "returns false" do
|
|
339
|
+
"attribute".writer?.should be_false
|
|
340
|
+
end
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
context "when string is a writer" do
|
|
344
|
+
|
|
345
|
+
it "returns true" do
|
|
346
|
+
"attribute=".writer?.should be_true
|
|
347
|
+
end
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
describe "#before_type_cast?" do
|
|
352
|
+
|
|
353
|
+
context "when string is a reader" do
|
|
354
|
+
|
|
355
|
+
it "returns false" do
|
|
356
|
+
"attribute".before_type_cast?.should be_false
|
|
357
|
+
end
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
context "when string is before_type_cast" do
|
|
361
|
+
|
|
362
|
+
it "returns true" do
|
|
363
|
+
"attribute_before_type_cast".before_type_cast?.should be_true
|
|
364
|
+
end
|
|
365
|
+
end
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Extensions::Symbol do
|
|
4
|
+
|
|
5
|
+
describe ".demongoize" do
|
|
6
|
+
|
|
7
|
+
context "when the object is not a symbol" do
|
|
8
|
+
|
|
9
|
+
it "returns the symbol" do
|
|
10
|
+
Symbol.demongoize("test").should eq(:test)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "when the object is nil" do
|
|
15
|
+
|
|
16
|
+
it "returns nil" do
|
|
17
|
+
Symbol.demongoize(nil).should be_nil
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe "#mongoid_id?" do
|
|
23
|
+
|
|
24
|
+
context "when the string is id" do
|
|
25
|
+
|
|
26
|
+
it "returns true" do
|
|
27
|
+
:id.should be_mongoid_id
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "when the string is _id" do
|
|
32
|
+
|
|
33
|
+
it "returns true" do
|
|
34
|
+
:_id.should be_mongoid_id
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context "when the string contains id" do
|
|
39
|
+
|
|
40
|
+
it "returns false" do
|
|
41
|
+
:identity.should_not be_mongoid_id
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context "when the string contains _id" do
|
|
46
|
+
|
|
47
|
+
it "returns false" do
|
|
48
|
+
:something_id.should_not be_mongoid_id
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe ".mongoize" do
|
|
54
|
+
|
|
55
|
+
context "when the object is not a symbol" do
|
|
56
|
+
|
|
57
|
+
it "returns the symbol" do
|
|
58
|
+
Symbol.mongoize("test").should eq(:test)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context "when the object is nil" do
|
|
63
|
+
|
|
64
|
+
it "returns nil" do
|
|
65
|
+
Symbol.mongoize(nil).should be_nil
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
describe "#mongoize" do
|
|
71
|
+
|
|
72
|
+
it "returns self" do
|
|
73
|
+
:test.mongoize.should eq(:test)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Extensions::Time do
|
|
4
|
+
|
|
5
|
+
describe ".demongoize" do
|
|
6
|
+
|
|
7
|
+
after(:all) do
|
|
8
|
+
Mongoid.use_utc = false
|
|
9
|
+
Mongoid.use_activesupport_time_zone = true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
let!(:time) do
|
|
13
|
+
Time.local(2010, 11, 19)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
context "when the time zone is not defined" do
|
|
17
|
+
|
|
18
|
+
before do
|
|
19
|
+
Mongoid.use_utc = false
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context "when the local time is not observing daylight saving" do
|
|
23
|
+
|
|
24
|
+
let(:time) do
|
|
25
|
+
Time.utc(2010, 11, 19)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "returns the local time" do
|
|
29
|
+
Time.demongoize(time).utc_offset.should eq(
|
|
30
|
+
Time.local(2010, 11, 19).utc_offset
|
|
31
|
+
)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context "when the local time is observing daylight saving" do
|
|
36
|
+
|
|
37
|
+
let(:time) do
|
|
38
|
+
Time.utc(2010, 9, 19)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "returns the local time" do
|
|
42
|
+
Time.demongoize(time).should eq(time.getlocal)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
context "when we have a time close to midnight" do
|
|
47
|
+
|
|
48
|
+
let(:time) do
|
|
49
|
+
Time.local(2010, 11, 19, 0, 30).utc
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "changes it back to the equivalent local time" do
|
|
53
|
+
Time.demongoize(time).should eq(time)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context "when using the ActiveSupport time zone" do
|
|
58
|
+
|
|
59
|
+
before do
|
|
60
|
+
Mongoid.use_activesupport_time_zone = true
|
|
61
|
+
Time.zone = "Stockholm"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
after do
|
|
65
|
+
Time.zone = nil
|
|
66
|
+
Mongoid.use_activesupport_time_zone = false
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "returns an ActiveSupport::TimeWithZone" do
|
|
70
|
+
Time.demongoize(time).class.should eq(ActiveSupport::TimeWithZone)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
context "when the local time is not observing daylight saving" do
|
|
74
|
+
|
|
75
|
+
let(:new_time) do
|
|
76
|
+
Time.utc(2010, 11, 19, 12)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "returns the local time" do
|
|
80
|
+
Time.demongoize(new_time).should eq(
|
|
81
|
+
Time.zone.local(2010, 11, 19, 13)
|
|
82
|
+
)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
context "when the local time is observing daylight saving" do
|
|
87
|
+
|
|
88
|
+
let(:new_time) do
|
|
89
|
+
Time.utc(2010, 9, 19, 12)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "returns the local time" do
|
|
93
|
+
Time.demongoize(new_time).should eq(
|
|
94
|
+
Time.zone.local(2010, 9, 19, 14)
|
|
95
|
+
)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
context "when we have a time close to midnight" do
|
|
100
|
+
|
|
101
|
+
let(:new_time) do
|
|
102
|
+
Time.utc(2010, 11, 19, 0, 30)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "change it back to the equivalent local time" do
|
|
106
|
+
Time.demongoize(new_time).should eq(
|
|
107
|
+
Time.zone.local(2010, 11, 19, 1, 30)
|
|
108
|
+
)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
context "when the time zone is defined as UTC" do
|
|
115
|
+
|
|
116
|
+
before do
|
|
117
|
+
Mongoid.use_utc = true
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
after do
|
|
121
|
+
Mongoid.use_utc = false
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "returns utc" do
|
|
125
|
+
Time.demongoize(time.dup.utc).utc_offset.should eq(0)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
context "when using the ActiveSupport time zone" do
|
|
129
|
+
|
|
130
|
+
let(:time) do
|
|
131
|
+
Time.utc(2010, 11, 19, 0, 30)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
before do
|
|
135
|
+
Mongoid.use_activesupport_time_zone = true
|
|
136
|
+
Time.zone = "Stockholm"
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
after do
|
|
140
|
+
Time.zone = nil
|
|
141
|
+
Mongoid.use_activesupport_time_zone = false
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it "returns utc" do
|
|
145
|
+
Time.demongoize(time).should eq(
|
|
146
|
+
ActiveSupport::TimeZone['UTC'].local(2010, 11, 19, 0, 30)
|
|
147
|
+
)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "returns an ActiveSupport::TimeWithZone" do
|
|
151
|
+
Time.demongoize(time).class.should eq(
|
|
152
|
+
ActiveSupport::TimeWithZone
|
|
153
|
+
)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
context "when time is nil" do
|
|
159
|
+
|
|
160
|
+
it "returns nil" do
|
|
161
|
+
Time.demongoize(nil).should be_nil
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
describe ".mongoize" do
|
|
167
|
+
|
|
168
|
+
let!(:time) do
|
|
169
|
+
Time.local(2010, 11, 19)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
context "when given nil" do
|
|
173
|
+
|
|
174
|
+
it "returns nil" do
|
|
175
|
+
Time.mongoize(nil).should be_nil
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
context "when string is empty" do
|
|
180
|
+
|
|
181
|
+
it "returns nil" do
|
|
182
|
+
Time.mongoize("").should be_nil
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
context "when given a string" do
|
|
187
|
+
|
|
188
|
+
context "when the string is a valid time" do
|
|
189
|
+
|
|
190
|
+
it "converts to a utc time" do
|
|
191
|
+
Time.mongoize(time.to_s).utc_offset.should eq(0)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
it "serializes with time parsing" do
|
|
195
|
+
Time.mongoize(time.to_s).should eq(Time.parse(time.to_s).utc)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
it "returns a local date from the string" do
|
|
199
|
+
Time.mongoize(time.to_s).should eq(
|
|
200
|
+
Time.local(time.year, time.month, time.day, time.hour, time.min, time.sec)
|
|
201
|
+
)
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
context "when the string is an invalid time" do
|
|
206
|
+
|
|
207
|
+
let(:epoch) do
|
|
208
|
+
Time.utc(1970, 1, 1, 0, 0, 0, 0)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
it "converts the time to epoch" do
|
|
212
|
+
Time.mongoize("time").should eq(epoch)
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
context "when using the ActiveSupport time zone" do
|
|
217
|
+
|
|
218
|
+
before do
|
|
219
|
+
Mongoid.use_activesupport_time_zone = true
|
|
220
|
+
# if this is actually your time zone, the following tests are useless
|
|
221
|
+
Time.zone = "Stockholm"
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
after do
|
|
225
|
+
Time.zone = nil
|
|
226
|
+
Mongoid.use_activesupport_time_zone = false
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
context "when the local time is not observing daylight saving" do
|
|
230
|
+
|
|
231
|
+
it "returns the local time" do
|
|
232
|
+
Time.mongoize('2010-11-19 5:00:00').should eq(
|
|
233
|
+
Time.utc(2010, 11, 19, 4)
|
|
234
|
+
)
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
context "when the local time is observing daylight saving" do
|
|
239
|
+
|
|
240
|
+
it "returns the local time" do
|
|
241
|
+
Time.mongoize('2010-9-19 5:00:00').should eq(
|
|
242
|
+
Time.utc(2010, 9, 19, 3)
|
|
243
|
+
)
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
context "when given a DateTime" do
|
|
250
|
+
|
|
251
|
+
let!(:time) do
|
|
252
|
+
DateTime.now
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
let!(:eom_time) do
|
|
256
|
+
DateTime.parse("2012-11-30T23:59:59.999999999-05:00")
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
let!(:eom_time_mongoized) do
|
|
260
|
+
eom_time.mongoize
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
it "doesn't strip milli- or microseconds" do
|
|
264
|
+
Time.mongoize(time).to_f.round(3).should eq(time.to_f.round(3))
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
it "doesn't round up the hour at end of month" do
|
|
268
|
+
eom_time_mongoized.hour.should eq(eom_time.utc.hour)
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
it "doesn't round up the minute" do
|
|
272
|
+
eom_time_mongoized.min.should eq(eom_time.utc.min)
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
it "doesn't round up the seconds" do
|
|
276
|
+
eom_time_mongoized.sec.should eq(eom_time.utc.sec)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
it "does not alter seconds" do
|
|
280
|
+
(eom_time_mongoized.usec).should eq(999999)
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
it "does not alter seconds with fractions" do
|
|
284
|
+
DateTime.mongoize(11.11).to_f.should eq(11.11)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
context "when using the ActiveSupport time zone" do
|
|
288
|
+
|
|
289
|
+
let(:datetime) do
|
|
290
|
+
DateTime.new(2010, 11, 19)
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
before do
|
|
294
|
+
Mongoid.use_activesupport_time_zone = true
|
|
295
|
+
# if this is actually your time zone, the following tests are useless
|
|
296
|
+
Time.zone = "Stockholm"
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
after do
|
|
300
|
+
Time.zone = nil
|
|
301
|
+
Mongoid.use_activesupport_time_zone = false
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
it "assumes the given time is local" do
|
|
305
|
+
Time.mongoize(datetime).should eq(
|
|
306
|
+
Time.utc(2010, 11, 19)
|
|
307
|
+
)
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
it "doesn't round up the hour" do
|
|
311
|
+
eom_time_mongoized.hour.should eq(eom_time.utc.hour)
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
it "doesn't round up the minutes" do
|
|
315
|
+
eom_time_mongoized.min.should eq(eom_time.utc.min)
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
it "doesn't round up the seconds" do
|
|
319
|
+
eom_time_mongoized.sec.should eq(eom_time.utc.sec)
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
it "does not alter the seconds" do
|
|
323
|
+
(eom_time_mongoized.usec).should eq(999999)
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
context "when given a Time" do
|
|
329
|
+
|
|
330
|
+
it "converts to a utc time" do
|
|
331
|
+
Time.mongoize(time).utc_offset.should eq(0)
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
it "returns utc times unchanged" do
|
|
335
|
+
Time.mongoize(time.utc).should eq(time.utc)
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
it "returns the time as utc" do
|
|
339
|
+
Time.mongoize(time).should eq(time.utc)
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
it "doesn't strip milli- or microseconds" do
|
|
343
|
+
Time.mongoize(time).to_f.should eq(time.to_f)
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
it "does not alter seconds with fractions" do
|
|
347
|
+
Time.mongoize(102.63).to_f.should eq(102.63)
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
context "when given an ActiveSupport::TimeWithZone" do
|
|
352
|
+
|
|
353
|
+
before do
|
|
354
|
+
1.hour.ago
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
it "converts it to utc" do
|
|
358
|
+
Time.mongoize(time.in_time_zone("Alaska")).should eq(
|
|
359
|
+
Time.at(time.to_i).utc
|
|
360
|
+
)
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
context "when given a Date" do
|
|
365
|
+
|
|
366
|
+
let(:date) do
|
|
367
|
+
Date.today
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
it "converts to a utc time" do
|
|
371
|
+
Time.mongoize(date).should eq(Time.local(date.year, date.month, date.day))
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
it "has a zero utc offset" do
|
|
375
|
+
Time.mongoize(date).utc_offset.should eq(0)
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
context "when using the ActiveSupport time zone" do
|
|
379
|
+
|
|
380
|
+
let(:date) do
|
|
381
|
+
Date.new(2010, 11, 19)
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
before do
|
|
385
|
+
Mongoid.use_activesupport_time_zone = true
|
|
386
|
+
# if this is actually your time zone, the following tests are useless
|
|
387
|
+
Time.zone = "Stockholm"
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
after do
|
|
391
|
+
Time.zone = nil
|
|
392
|
+
Mongoid.use_activesupport_time_zone = false
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
it "assumes the given time is local" do
|
|
396
|
+
Time.mongoize(date).should eq(Time.utc(2010, 11, 18, 23))
|
|
397
|
+
end
|
|
398
|
+
end
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
context "when given an array" do
|
|
402
|
+
|
|
403
|
+
let(:array) do
|
|
404
|
+
[ 2010, 11, 19, 00, 24, 49 ]
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
it "returns a time" do
|
|
408
|
+
Time.mongoize(array).should eq(Time.local(*array))
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
context "when using the ActiveSupport time zone" do
|
|
412
|
+
|
|
413
|
+
before do
|
|
414
|
+
Mongoid.use_activesupport_time_zone = true
|
|
415
|
+
# if this is actually your time zone, the following tests are useless
|
|
416
|
+
Time.zone = "Stockholm"
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
after do
|
|
420
|
+
Time.zone = nil
|
|
421
|
+
Mongoid.use_activesupport_time_zone = false
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
it "assumes the given time is local" do
|
|
425
|
+
Time.mongoize(array).should eq(
|
|
426
|
+
Time.utc(2010, 11, 18, 23, 24, 49)
|
|
427
|
+
)
|
|
428
|
+
end
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
describe "#mongoize" do
|
|
434
|
+
|
|
435
|
+
let!(:time) do
|
|
436
|
+
Time.local(2010, 11, 19)
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
let!(:eom_time) do
|
|
440
|
+
Time.local(2012, 11, 30, 23, 59, 59, 999999.999)
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
let!(:eom_time_mongoized) do
|
|
444
|
+
eom_time.mongoize
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
it "converts to a utc time" do
|
|
448
|
+
time.mongoize.utc_offset.should eq(0)
|
|
449
|
+
end
|
|
450
|
+
|
|
451
|
+
it "returns the time as utc" do
|
|
452
|
+
time.mongoize.should eq(time.utc)
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
it "doesn't strip milli- or microseconds" do
|
|
456
|
+
time.mongoize.to_f.should eq(time.to_f)
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
it "doesn't round up at end of month" do
|
|
460
|
+
eom_time_mongoized.hour.should eq(eom_time.utc.hour)
|
|
461
|
+
eom_time_mongoized.min.should eq(eom_time.utc.min)
|
|
462
|
+
eom_time_mongoized.sec.should eq(eom_time.utc.sec)
|
|
463
|
+
eom_time_mongoized.usec.should eq(eom_time.utc.usec)
|
|
464
|
+
eom_time_mongoized.subsec.to_f.round(3).should eq(eom_time.utc.subsec.to_f.round(3))
|
|
465
|
+
end
|
|
466
|
+
end
|
|
467
|
+
end
|