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,74 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Matchers::Gte do
|
|
4
|
+
|
|
5
|
+
describe "#matches?" do
|
|
6
|
+
|
|
7
|
+
context "when the value is larger" do
|
|
8
|
+
|
|
9
|
+
let(:matcher) do
|
|
10
|
+
described_class.new(5)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "returns true" do
|
|
14
|
+
matcher.matches?("$gte" => 3).should be_true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "when the value is smaller" do
|
|
19
|
+
|
|
20
|
+
let(:matcher) do
|
|
21
|
+
described_class.new(5)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "returns false" do
|
|
25
|
+
matcher.matches?("$gte" => 10).should be_false
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context "when the value is equal" do
|
|
30
|
+
|
|
31
|
+
let(:matcher) do
|
|
32
|
+
described_class.new(5)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "returns true" do
|
|
36
|
+
matcher.matches?("$gte" => 5).should be_true
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context "when the value is nil" do
|
|
41
|
+
|
|
42
|
+
let(:matcher) do
|
|
43
|
+
described_class.new(nil)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "returns false" do
|
|
47
|
+
matcher.matches?("$gte" => 5).should be_false
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context "when the value is an array" do
|
|
52
|
+
context "there are value valid" do
|
|
53
|
+
let(:matcher) do
|
|
54
|
+
described_class.new([6,4])
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "returns false" do
|
|
58
|
+
matcher.matches?("$gte" => 5).should be_true
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context "there are not value valid" do
|
|
63
|
+
let(:matcher) do
|
|
64
|
+
described_class.new([3,4])
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "returns false" do
|
|
68
|
+
matcher.matches?("$gte" => 5).should be_false
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Matchers::In do
|
|
4
|
+
|
|
5
|
+
let(:matcher) do
|
|
6
|
+
described_class.new("first")
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "#matches?" do
|
|
10
|
+
|
|
11
|
+
context "when the values include the attribute" do
|
|
12
|
+
|
|
13
|
+
it "returns true" do
|
|
14
|
+
matcher.matches?("$in" => [/\Afir.*\z/, "second"]).should be_true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "when the values don't include the attribute" do
|
|
19
|
+
|
|
20
|
+
it "returns false" do
|
|
21
|
+
matcher.matches?("$in" => ["third"]).should be_false
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Matchers::Lt do
|
|
4
|
+
|
|
5
|
+
describe "#matches?" do
|
|
6
|
+
|
|
7
|
+
context "when the value is larger" do
|
|
8
|
+
|
|
9
|
+
let(:matcher) do
|
|
10
|
+
described_class.new(5)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "returns false" do
|
|
14
|
+
matcher.matches?("$lt" => 3).should be_false
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "when the value is equal" do
|
|
19
|
+
|
|
20
|
+
let(:matcher) do
|
|
21
|
+
described_class.new(3)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "returns false" do
|
|
25
|
+
matcher.matches?("$lt" => 3).should be_false
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context "when the value is smaller" do
|
|
30
|
+
|
|
31
|
+
let(:matcher) do
|
|
32
|
+
described_class.new(5)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "returns true" do
|
|
36
|
+
matcher.matches?("$lt" => 10).should be_true
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context "when the value is nil" do
|
|
41
|
+
|
|
42
|
+
let(:matcher) do
|
|
43
|
+
described_class.new(nil)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "returns false" do
|
|
47
|
+
matcher.matches?("$lt" => 5).should be_false
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context "when the value is an array" do
|
|
52
|
+
context "there are value valid" do
|
|
53
|
+
let(:matcher) do
|
|
54
|
+
described_class.new([3, 4])
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "returns true" do
|
|
58
|
+
matcher.matches?("$lt" => 5).should be_true
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context "there are not value valid" do
|
|
63
|
+
let(:matcher) do
|
|
64
|
+
described_class.new([5,6])
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "returns false" do
|
|
68
|
+
matcher.matches?("$lt" => 5).should be_false
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Matchers::Lte do
|
|
4
|
+
|
|
5
|
+
describe "#matches?" do
|
|
6
|
+
|
|
7
|
+
context "when the value is larger" do
|
|
8
|
+
|
|
9
|
+
let(:matcher) do
|
|
10
|
+
described_class.new(5)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "returns false" do
|
|
14
|
+
matcher.matches?("$lte" => 3).should be_false
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "when the value is smaller" do
|
|
19
|
+
|
|
20
|
+
let(:matcher) do
|
|
21
|
+
described_class.new(5)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "returns true" do
|
|
25
|
+
matcher.matches?("$lte" => 10).should be_true
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context "when the value is equal" do
|
|
30
|
+
|
|
31
|
+
let(:matcher) do
|
|
32
|
+
described_class.new(5)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "returns true" do
|
|
36
|
+
matcher.matches?("$lte" => 5).should be_true
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context "when the value is nil" do
|
|
41
|
+
|
|
42
|
+
let(:matcher) do
|
|
43
|
+
described_class.new(nil)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "returns false" do
|
|
47
|
+
matcher.matches?("$lte" => 5).should be_false
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context "when the value is an array" do
|
|
52
|
+
context "there are value valid" do
|
|
53
|
+
let(:matcher) do
|
|
54
|
+
described_class.new([3, 4])
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "returns true" do
|
|
58
|
+
matcher.matches?("$lte" => 5).should be_true
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context "there are not value valid" do
|
|
63
|
+
let(:matcher) do
|
|
64
|
+
described_class.new([7,6])
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "returns false" do
|
|
68
|
+
matcher.matches?("$lte" => 5).should be_false
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Matchers::Ne do
|
|
4
|
+
|
|
5
|
+
let(:matcher) do
|
|
6
|
+
described_class.new("first")
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "#matches?" do
|
|
10
|
+
|
|
11
|
+
context "when the values are not equal" do
|
|
12
|
+
|
|
13
|
+
it "returns true" do
|
|
14
|
+
matcher.matches?("$ne" => "second").should be_true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "when the values are equal" do
|
|
19
|
+
|
|
20
|
+
it "returns false" do
|
|
21
|
+
matcher.matches?("$ne" => "first").should be_false
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Matchers::Nin do
|
|
4
|
+
|
|
5
|
+
let(:matcher) do
|
|
6
|
+
described_class.new("first")
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "#matches?" do
|
|
10
|
+
|
|
11
|
+
context "when the values do not contain the attribute" do
|
|
12
|
+
|
|
13
|
+
it "returns true" do
|
|
14
|
+
matcher.matches?("$nin" => ["second", "third"]).should be_true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "when the values contain the attribute" do
|
|
19
|
+
|
|
20
|
+
it "returns false" do
|
|
21
|
+
matcher.matches?("$nin" => ["first"]).should be_false
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Matchers::Or do
|
|
4
|
+
|
|
5
|
+
let(:person) do
|
|
6
|
+
Person.new
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
let(:matcher) do
|
|
10
|
+
described_class.new("value", person)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "#matches?" do
|
|
14
|
+
|
|
15
|
+
context "when provided a simple expression" do
|
|
16
|
+
|
|
17
|
+
context "when any of the values are equal" do
|
|
18
|
+
|
|
19
|
+
let(:matches) do
|
|
20
|
+
matcher.matches?(
|
|
21
|
+
[ { title: "Sir" }, { title: "King" } ]
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
before do
|
|
26
|
+
person.title = "Sir"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "returns true" do
|
|
30
|
+
matches.should be_true
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "when none of the values are equal" do
|
|
35
|
+
|
|
36
|
+
it "returns false" do
|
|
37
|
+
matcher.matches?([]).should be_false
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
context "when provided a complex expression" do
|
|
43
|
+
|
|
44
|
+
context "when any of the values are equal" do
|
|
45
|
+
|
|
46
|
+
let(:matches) do
|
|
47
|
+
matcher.matches?(
|
|
48
|
+
[
|
|
49
|
+
{ title: { "$in" => [ "Sir", "Madam" ] } },
|
|
50
|
+
{ title: "King" }
|
|
51
|
+
]
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
before do
|
|
56
|
+
person.title = "Sir"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "returns true" do
|
|
60
|
+
matches.should be_true
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context "when none of the values are equal" do
|
|
65
|
+
|
|
66
|
+
let(:matches) do
|
|
67
|
+
matcher.matches?(
|
|
68
|
+
[
|
|
69
|
+
{ title: { "$in" => [ "Prince", "Madam" ] } },
|
|
70
|
+
{ title: "King" }
|
|
71
|
+
]
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
before do
|
|
76
|
+
person.title = "Sir"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "returns false" do
|
|
80
|
+
matches.should be_false
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
context "when expression contain multiple fields" do
|
|
85
|
+
|
|
86
|
+
let(:matches) do
|
|
87
|
+
matcher.matches?(
|
|
88
|
+
[
|
|
89
|
+
{ title: "Sir", age: 23 },
|
|
90
|
+
{ title: "King", age: 100 }
|
|
91
|
+
]
|
|
92
|
+
)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
before do
|
|
96
|
+
person.title = "Sir"
|
|
97
|
+
person.age = 100
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "returns false" do
|
|
101
|
+
matches.should be_false
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Matchers::Size do
|
|
4
|
+
|
|
5
|
+
let(:matcher) do
|
|
6
|
+
described_class.new(["first", "second"])
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "#matches?" do
|
|
10
|
+
|
|
11
|
+
context "when the attribute is the same size" do
|
|
12
|
+
|
|
13
|
+
it "returns true" do
|
|
14
|
+
matcher.matches?("$size" => 2).should be_true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "when the attribute is not the same size" do
|
|
19
|
+
|
|
20
|
+
it "returns false" do
|
|
21
|
+
matcher.matches?("$size" => 5).should be_false
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Matchers do
|
|
4
|
+
|
|
5
|
+
describe "#matches?" do
|
|
6
|
+
|
|
7
|
+
context "when document is embeded" do
|
|
8
|
+
|
|
9
|
+
let(:document) do
|
|
10
|
+
Address.new(street: "Clarkenwell Road")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
before do
|
|
14
|
+
document.locations << Location.new(
|
|
15
|
+
name: 'No.1',
|
|
16
|
+
info: { 'door' => 'Red'},
|
|
17
|
+
occupants: [{'name' => 'Tim'}]
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context "when the attributes do not match" do
|
|
22
|
+
|
|
23
|
+
let(:selector) do
|
|
24
|
+
{ name: { "$in" => ["No.2"], "$ne" => nil } }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "returns false" do
|
|
28
|
+
document.locations.first.matches?(selector).should be_false
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "when just change the selector order" do
|
|
32
|
+
|
|
33
|
+
let(:selector) do
|
|
34
|
+
{ name: { "$ne" => nil, "$in" => ["No.2"] } }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "returns false " do
|
|
38
|
+
document.locations.first.matches?(selector).should be_false
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context "when matching embedded hash values" do
|
|
44
|
+
|
|
45
|
+
context "when the contents match" do
|
|
46
|
+
|
|
47
|
+
let(:selector) do
|
|
48
|
+
{ "info.door" => "Red" }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "returns true" do
|
|
52
|
+
document.locations.first.matches?(selector).should be_true
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context "when the contents do not match" do
|
|
57
|
+
|
|
58
|
+
let(:selector) do
|
|
59
|
+
{ "info.door" => "Blue" }
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "returns false" do
|
|
63
|
+
document.locations.first.matches?(selector).should be_false
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context "when the contents do not exist" do
|
|
68
|
+
|
|
69
|
+
let(:selector) do
|
|
70
|
+
{ "info.something_else" => "Red" }
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "returns false" do
|
|
74
|
+
document.locations.first.matches?(selector).should be_false
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
context "when matching values of multiple embedded hashes" do
|
|
80
|
+
|
|
81
|
+
context "when the contents match" do
|
|
82
|
+
|
|
83
|
+
let(:selector) do
|
|
84
|
+
{ "occupants.name" => "Tim" }
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "returns true" do
|
|
88
|
+
document.locations.first.matches?(selector).should be_true
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
context "when the contents do not match" do
|
|
93
|
+
|
|
94
|
+
let(:selector) do
|
|
95
|
+
{ "occupants.name" => "Lyle" }
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "returns false" do
|
|
99
|
+
document.locations.first.matches?(selector).should be_false
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
context "when the contents do not exist" do
|
|
104
|
+
|
|
105
|
+
let(:selector) do
|
|
106
|
+
{ "occupants.something_else" => "Tim" }
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "returns false" do
|
|
110
|
+
document.locations.first.matches?(selector).should be_false
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
context "when performing simple matching" do
|
|
118
|
+
|
|
119
|
+
let(:document) do
|
|
120
|
+
Address.new(street: "Clarkenwell Road")
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
context "when the attributes match" do
|
|
124
|
+
|
|
125
|
+
let(:selector) do
|
|
126
|
+
{ street: "Clarkenwell Road" }
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it "returns true" do
|
|
130
|
+
document.matches?(selector).should be_true
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
context "when the attributes dont match" do
|
|
135
|
+
|
|
136
|
+
let(:selector) do
|
|
137
|
+
{ street: "Broadway Ave" }
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it "returns false" do
|
|
141
|
+
document.matches?(selector).should be_false
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
context "when performing complex matching" do
|
|
147
|
+
|
|
148
|
+
let(:document) do
|
|
149
|
+
Address.new(
|
|
150
|
+
services: ["first", "second", "third"],
|
|
151
|
+
number: 100,
|
|
152
|
+
map: { key: "value" }
|
|
153
|
+
)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
context "with an $all selector" do
|
|
157
|
+
|
|
158
|
+
context "when the attribute includes all of the values" do
|
|
159
|
+
|
|
160
|
+
let(:selector) do
|
|
161
|
+
{ services: { "$all" => [ "first", "second" ] } }
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "returns true" do
|
|
165
|
+
document.matches?(selector).should be_true
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
context "when the attributes doesn't include all of the values" do
|
|
170
|
+
|
|
171
|
+
let(:selector) do
|
|
172
|
+
{ services: { "$all" => [ "second", "third", "fourth" ] } }
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it "returns false" do
|
|
176
|
+
document.matches?(selector).should be_false
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
context "with an $exists selector" do
|
|
182
|
+
|
|
183
|
+
context "when the attributes match" do
|
|
184
|
+
|
|
185
|
+
let(:selector) do
|
|
186
|
+
{ services: { "$exists" => true } }
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it "returns true" do
|
|
190
|
+
document.matches?(selector).should be_true
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
context "when the attributes do not match" do
|
|
195
|
+
|
|
196
|
+
let(:selector) do
|
|
197
|
+
{ services: { "$exists" => false } }
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it "returns false" do
|
|
201
|
+
document.matches?(selector).should be_false
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
context "with a $gt selector" do
|
|
207
|
+
|
|
208
|
+
context "when the attributes match" do
|
|
209
|
+
|
|
210
|
+
let(:selector) do
|
|
211
|
+
{ number: { "$gt" => 50 } }
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it "returns true" do
|
|
215
|
+
document.matches?(selector).should be_true
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
context "when the attributes do not match" do
|
|
220
|
+
|
|
221
|
+
let(:selector) do
|
|
222
|
+
{ number: { "$gt" => 200 } }
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
it "returns false" do
|
|
226
|
+
document.matches?(selector).should be_false
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
context "with a $gt selector as a symbol" do
|
|
232
|
+
|
|
233
|
+
context "when the attributes match" do
|
|
234
|
+
|
|
235
|
+
let(:selector) do
|
|
236
|
+
{ number: { :$gt => 50 } }
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
it "returns true" do
|
|
240
|
+
document.matches?(selector).should be_true
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
context "when the attributes do not match" do
|
|
245
|
+
|
|
246
|
+
let(:selector) do
|
|
247
|
+
{ number: { :$gt => 200 } }
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
it "returns false" do
|
|
251
|
+
document.matches?(selector).should be_false
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
context "with a $gte selector" do
|
|
257
|
+
|
|
258
|
+
context "when the attributes match" do
|
|
259
|
+
|
|
260
|
+
let(:selector) do
|
|
261
|
+
{ number: { "$gte" => 100 } }
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
it "returns true" do
|
|
265
|
+
document.matches?(selector).should be_true
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
context "when the attributes do not match" do
|
|
270
|
+
|
|
271
|
+
let(:selector) do
|
|
272
|
+
{ number: { "$gte" => 200 } }
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
it "returns false" do
|
|
276
|
+
document.matches?(selector).should be_false
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
context "with an $in selector on Array" do
|
|
282
|
+
|
|
283
|
+
context "when the attributes match" do
|
|
284
|
+
|
|
285
|
+
let(:selector) do
|
|
286
|
+
{ services: { "$in" => [ /\Afir.*\z/, "second" ] } }
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
it "returns true" do
|
|
290
|
+
document.matches?(selector).should be_true
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
context "when the attributes do not match" do
|
|
295
|
+
|
|
296
|
+
let(:selector) do
|
|
297
|
+
{ number: { "$in" => [ "none" ] } }
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
it "returns false" do
|
|
301
|
+
document.matches?(selector).should be_false
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
context "with an $in selector" do
|
|
307
|
+
|
|
308
|
+
context "when the attributes match" do
|
|
309
|
+
|
|
310
|
+
let(:selector) do
|
|
311
|
+
{ number: { "$in" => [ 100, 200 ] } }
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
it "returns true" do
|
|
315
|
+
document.matches?(selector).should be_true
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
context "when the attributes do not match" do
|
|
320
|
+
|
|
321
|
+
let(:selector) do
|
|
322
|
+
{ number: { "$in" => [ 200, 300 ] } }
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
it "returns false" do
|
|
326
|
+
document.matches?(selector).should be_false
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
context "with a $lt selector" do
|
|
332
|
+
|
|
333
|
+
context "when the attributes match" do
|
|
334
|
+
|
|
335
|
+
let(:selector) do
|
|
336
|
+
{ number: { "$lt" => 200 } }
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
it "returns true" do
|
|
340
|
+
document.matches?(selector).should be_true
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
context "when the attributes do not match" do
|
|
345
|
+
|
|
346
|
+
let(:selector) do
|
|
347
|
+
{ number: { "$lt" => 50 } }
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
it "returns false" do
|
|
351
|
+
document.matches?(selector).should be_false
|
|
352
|
+
end
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
context "with a $lte selector" do
|
|
357
|
+
|
|
358
|
+
context "when the attributes match" do
|
|
359
|
+
|
|
360
|
+
let(:selector) do
|
|
361
|
+
{ number: { "$lte" => 200 } }
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
it "returns true" do
|
|
365
|
+
document.matches?(selector).should be_true
|
|
366
|
+
end
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
context "when the attributes do not match" do
|
|
370
|
+
|
|
371
|
+
let(:selector) do
|
|
372
|
+
{ number: { "$lte" => 50 } }
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
it "returns false" do
|
|
376
|
+
document.matches?(selector).should be_false
|
|
377
|
+
end
|
|
378
|
+
end
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
context "with an $ne selector" do
|
|
382
|
+
|
|
383
|
+
context "when the attributes match" do
|
|
384
|
+
|
|
385
|
+
let(:selector) do
|
|
386
|
+
{ number: { "$ne" => 200 } }
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
it "returns true" do
|
|
390
|
+
document.matches?(selector).should be_true
|
|
391
|
+
end
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
context "when the attributes do not match" do
|
|
395
|
+
|
|
396
|
+
let(:selector) do
|
|
397
|
+
{ number: { "$ne" => 100 } }
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
it "returns false" do
|
|
401
|
+
document.matches?(selector).should be_false
|
|
402
|
+
end
|
|
403
|
+
end
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
context "with a $nin selector on Array" do
|
|
407
|
+
|
|
408
|
+
context "when the attributes match" do
|
|
409
|
+
|
|
410
|
+
let(:selector) do
|
|
411
|
+
{ services: { "$nin" => [ "none" ] } }
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
it "returns true" do
|
|
415
|
+
document.matches?(selector).should be_true
|
|
416
|
+
end
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
context "when the attributes do not match" do
|
|
420
|
+
|
|
421
|
+
let(:selector) do
|
|
422
|
+
{ services: { "$nin" => [ "first" ] } }
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
it "returns false" do
|
|
426
|
+
document.matches?(selector).should be_false
|
|
427
|
+
end
|
|
428
|
+
end
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
context "with a $nin selector" do
|
|
432
|
+
|
|
433
|
+
context "when the attributes match" do
|
|
434
|
+
|
|
435
|
+
let(:selector) do
|
|
436
|
+
{ number: { "$nin" => [ 1, 2, 3 ] } }
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
it "returns true" do
|
|
440
|
+
document.matches?(selector).should be_true
|
|
441
|
+
end
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
context "when the attributes do not match" do
|
|
445
|
+
|
|
446
|
+
let(:selector) do
|
|
447
|
+
{ number: { "$nin" => [ 100 ] } }
|
|
448
|
+
end
|
|
449
|
+
|
|
450
|
+
it "returns false" do
|
|
451
|
+
document.matches?(selector).should be_false
|
|
452
|
+
end
|
|
453
|
+
end
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
context "with an $or selector" do
|
|
457
|
+
|
|
458
|
+
context "when the attributes match" do
|
|
459
|
+
|
|
460
|
+
let(:selector) do
|
|
461
|
+
{ "$or" => [ { number: 10 }, { number: { "$gt" => 99 } } ] }
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
it "returns true" do
|
|
465
|
+
document.matches?(selector).should be_true
|
|
466
|
+
end
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
context "when the attributes do not match" do
|
|
470
|
+
|
|
471
|
+
let(:selector) do
|
|
472
|
+
{ "$or" => [ { number: 10 }, { number: { "$lt" => 99 } } ] }
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
it "returns false" do
|
|
476
|
+
document.matches?(selector).should be_false
|
|
477
|
+
end
|
|
478
|
+
end
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
context "with a $size selector" do
|
|
482
|
+
|
|
483
|
+
context "when the attributes match" do
|
|
484
|
+
|
|
485
|
+
let(:selector) do
|
|
486
|
+
{ services: { "$size" => 3 } }
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
it "returns true" do
|
|
490
|
+
document.matches?(selector).should be_true
|
|
491
|
+
end
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
context "when the attributes do not match" do
|
|
495
|
+
|
|
496
|
+
let(:selector) do
|
|
497
|
+
{ services: { "$size" => 5 } }
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
it "returns false" do
|
|
501
|
+
document.matches?(selector).should be_false
|
|
502
|
+
end
|
|
503
|
+
end
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
context "with a hash value" do
|
|
507
|
+
|
|
508
|
+
context "when the attributes match" do
|
|
509
|
+
|
|
510
|
+
let(:selector) do
|
|
511
|
+
{ map: { key: "value" } }
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
it "returns true" do
|
|
515
|
+
document.matches?(selector).should be_true
|
|
516
|
+
end
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
context "when the attributes do not match" do
|
|
520
|
+
|
|
521
|
+
let(:selector) do
|
|
522
|
+
{ map: { key: "value2" } }
|
|
523
|
+
end
|
|
524
|
+
|
|
525
|
+
it "returns false" do
|
|
526
|
+
document.matches?(selector).should be_false
|
|
527
|
+
end
|
|
528
|
+
end
|
|
529
|
+
end
|
|
530
|
+
end
|
|
531
|
+
end
|
|
532
|
+
end
|