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.
Files changed (429) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/lib/mongoid/contextual.rb +3 -0
  4. data/lib/mongoid/criteria.rb +10 -2
  5. data/lib/mongoid/document.rb +1 -1
  6. data/lib/mongoid/paranoia.rb +4 -0
  7. data/lib/mongoid/persistence/upsertion.rb +1 -0
  8. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +16 -2
  9. data/lib/mongoid/relations/macros.rb +1 -1
  10. data/lib/mongoid/relations/one.rb +12 -0
  11. data/lib/mongoid/relations/referenced/in.rb +18 -1
  12. data/lib/mongoid/relations/referenced/many_to_many.rb +2 -2
  13. data/lib/mongoid/validations.rb +1 -1
  14. data/lib/mongoid/validations/localizable.rb +1 -1
  15. data/lib/mongoid/validations/presence.rb +1 -1
  16. data/lib/mongoid/validations/uniqueness.rb +1 -1
  17. data/lib/mongoid/version.rb +1 -1
  18. data/lib/support/ruby_version.rb +1 -1
  19. data/spec/app/models/account.rb +32 -0
  20. data/spec/app/models/acolyte.rb +16 -0
  21. data/spec/app/models/actor.rb +19 -0
  22. data/spec/app/models/actor_observer.rb +15 -0
  23. data/spec/app/models/actress.rb +2 -0
  24. data/spec/app/models/address.rb +72 -0
  25. data/spec/app/models/address_component.rb +5 -0
  26. data/spec/app/models/address_number.rb +6 -0
  27. data/spec/app/models/agency.rb +5 -0
  28. data/spec/app/models/agent.rb +12 -0
  29. data/spec/app/models/album.rb +14 -0
  30. data/spec/app/models/alert.rb +5 -0
  31. data/spec/app/models/animal.rb +25 -0
  32. data/spec/app/models/answer.rb +4 -0
  33. data/spec/app/models/appointment.rb +7 -0
  34. data/spec/app/models/article.rb +13 -0
  35. data/spec/app/models/artist.rb +66 -0
  36. data/spec/app/models/artwork.rb +4 -0
  37. data/spec/app/models/augmentation.rb +11 -0
  38. data/spec/app/models/author.rb +6 -0
  39. data/spec/app/models/band.rb +25 -0
  40. data/spec/app/models/bar.rb +9 -0
  41. data/spec/app/models/basic.rb +6 -0
  42. data/spec/app/models/bed.rb +1 -0
  43. data/spec/app/models/big_palette.rb +2 -0
  44. data/spec/app/models/birthday.rb +13 -0
  45. data/spec/app/models/book.rb +12 -0
  46. data/spec/app/models/breed.rb +4 -0
  47. data/spec/app/models/browser.rb +6 -0
  48. data/spec/app/models/building.rb +7 -0
  49. data/spec/app/models/building_address.rb +7 -0
  50. data/spec/app/models/bus.rb +7 -0
  51. data/spec/app/models/business.rb +5 -0
  52. data/spec/app/models/callback_recorder.rb +25 -0
  53. data/spec/app/models/callback_test.rb +9 -0
  54. data/spec/app/models/canvas.rb +25 -0
  55. data/spec/app/models/car.rb +1 -0
  56. data/spec/app/models/cat.rb +8 -0
  57. data/spec/app/models/category.rb +8 -0
  58. data/spec/app/models/child.rb +4 -0
  59. data/spec/app/models/child_doc.rb +22 -0
  60. data/spec/app/models/church.rb +4 -0
  61. data/spec/app/models/circle.rb +3 -0
  62. data/spec/app/models/circuit.rb +4 -0
  63. data/spec/app/models/circus.rb +7 -0
  64. data/spec/app/models/code.rb +5 -0
  65. data/spec/app/models/comment.rb +16 -0
  66. data/spec/app/models/contractor.rb +7 -0
  67. data/spec/app/models/cookie.rb +6 -0
  68. data/spec/app/models/country_code.rb +8 -0
  69. data/spec/app/models/definition.rb +8 -0
  70. data/spec/app/models/description.rb +11 -0
  71. data/spec/app/models/dictionary.rb +10 -0
  72. data/spec/app/models/division.rb +10 -0
  73. data/spec/app/models/doctor.rb +12 -0
  74. data/spec/app/models/dog.rb +7 -0
  75. data/spec/app/models/dokument.rb +5 -0
  76. data/spec/app/models/driver.rb +7 -0
  77. data/spec/app/models/drug.rb +8 -0
  78. data/spec/app/models/email.rb +6 -0
  79. data/spec/app/models/employer.rb +5 -0
  80. data/spec/app/models/entry.rb +6 -0
  81. data/spec/app/models/eraser.rb +1 -0
  82. data/spec/app/models/event.rb +22 -0
  83. data/spec/app/models/exhibition.rb +4 -0
  84. data/spec/app/models/exhibitor.rb +5 -0
  85. data/spec/app/models/eye.rb +9 -0
  86. data/spec/app/models/eye_bowl.rb +9 -0
  87. data/spec/app/models/face.rb +8 -0
  88. data/spec/app/models/favorite.rb +6 -0
  89. data/spec/app/models/filesystem.rb +4 -0
  90. data/spec/app/models/fire_hydrant.rb +6 -0
  91. data/spec/app/models/firefox.rb +4 -0
  92. data/spec/app/models/fish.rb +8 -0
  93. data/spec/app/models/folder.rb +7 -0
  94. data/spec/app/models/folder_item.rb +9 -0
  95. data/spec/app/models/fruits.rb +28 -0
  96. data/spec/app/models/game.rb +21 -0
  97. data/spec/app/models/ghost.rb +7 -0
  98. data/spec/app/models/home.rb +4 -0
  99. data/spec/app/models/house.rb +8 -0
  100. data/spec/app/models/html_writer.rb +3 -0
  101. data/spec/app/models/image.rb +22 -0
  102. data/spec/app/models/implant.rb +16 -0
  103. data/spec/app/models/item.rb +12 -0
  104. data/spec/app/models/jar.rb +7 -0
  105. data/spec/app/models/label.rb +40 -0
  106. data/spec/app/models/language.rb +5 -0
  107. data/spec/app/models/lat_lng.rb +15 -0
  108. data/spec/app/models/league.rb +11 -0
  109. data/spec/app/models/learner.rb +2 -0
  110. data/spec/app/models/line_item.rb +6 -0
  111. data/spec/app/models/location.rb +8 -0
  112. data/spec/app/models/login.rb +8 -0
  113. data/spec/app/models/manufacturer.rb +7 -0
  114. data/spec/app/models/meat.rb +4 -0
  115. data/spec/app/models/membership.rb +4 -0
  116. data/spec/app/models/mixed_drink.rb +4 -0
  117. data/spec/app/models/movie.rb +12 -0
  118. data/spec/app/models/my_hash.rb +2 -0
  119. data/spec/app/models/name.rb +23 -0
  120. data/spec/app/models/node.rb +5 -0
  121. data/spec/app/models/note.rb +12 -0
  122. data/spec/app/models/ordered_post.rb +6 -0
  123. data/spec/app/models/ordered_preference.rb +6 -0
  124. data/spec/app/models/oscar.rb +15 -0
  125. data/spec/app/models/override.rb +16 -0
  126. data/spec/app/models/ownable.rb +6 -0
  127. data/spec/app/models/owner.rb +6 -0
  128. data/spec/app/models/pack.rb +3 -0
  129. data/spec/app/models/page.rb +5 -0
  130. data/spec/app/models/page_question.rb +4 -0
  131. data/spec/app/models/palette.rb +7 -0
  132. data/spec/app/models/paranoid_phone.rb +25 -0
  133. data/spec/app/models/paranoid_post.rb +36 -0
  134. data/spec/app/models/parent.rb +5 -0
  135. data/spec/app/models/parent_doc.rb +6 -0
  136. data/spec/app/models/passport.rb +5 -0
  137. data/spec/app/models/patient.rb +9 -0
  138. data/spec/app/models/pdf_writer.rb +3 -0
  139. data/spec/app/models/pencil.rb +1 -0
  140. data/spec/app/models/person.rb +201 -0
  141. data/spec/app/models/pet.rb +23 -0
  142. data/spec/app/models/pet_owner.rb +6 -0
  143. data/spec/app/models/phone.rb +11 -0
  144. data/spec/app/models/phone_observer.rb +6 -0
  145. data/spec/app/models/pizza.rb +7 -0
  146. data/spec/app/models/player.rb +35 -0
  147. data/spec/app/models/post.rb +43 -0
  148. data/spec/app/models/powerup.rb +11 -0
  149. data/spec/app/models/preference.rb +9 -0
  150. data/spec/app/models/princess.rb +8 -0
  151. data/spec/app/models/product.rb +17 -0
  152. data/spec/app/models/profile.rb +5 -0
  153. data/spec/app/models/pronunciation.rb +5 -0
  154. data/spec/app/models/purchase.rb +4 -0
  155. data/spec/app/models/question.rb +8 -0
  156. data/spec/app/models/quiz.rb +10 -0
  157. data/spec/app/models/rating.rb +8 -0
  158. data/spec/app/models/record.rb +46 -0
  159. data/spec/app/models/registry.rb +4 -0
  160. data/spec/app/models/role.rb +7 -0
  161. data/spec/app/models/root_category.rb +4 -0
  162. data/spec/app/models/sandwich.rb +4 -0
  163. data/spec/app/models/scheduler.rb +7 -0
  164. data/spec/app/models/seo.rb +7 -0
  165. data/spec/app/models/series.rb +4 -0
  166. data/spec/app/models/server.rb +13 -0
  167. data/spec/app/models/service.rb +22 -0
  168. data/spec/app/models/shape.rb +12 -0
  169. data/spec/app/models/shelf.rb +5 -0
  170. data/spec/app/models/shipping_container.rb +5 -0
  171. data/spec/app/models/shipping_pack.rb +3 -0
  172. data/spec/app/models/shop.rb +6 -0
  173. data/spec/app/models/short_agent.rb +4 -0
  174. data/spec/app/models/short_quiz.rb +5 -0
  175. data/spec/app/models/slave.rb +6 -0
  176. data/spec/app/models/song.rb +8 -0
  177. data/spec/app/models/square.rb +4 -0
  178. data/spec/app/models/strategy.rb +3 -0
  179. data/spec/app/models/sub_item.rb +3 -0
  180. data/spec/app/models/subscription.rb +4 -0
  181. data/spec/app/models/survey.rb +5 -0
  182. data/spec/app/models/symptom.rb +6 -0
  183. data/spec/app/models/tag.rb +8 -0
  184. data/spec/app/models/target.rb +5 -0
  185. data/spec/app/models/template.rb +5 -0
  186. data/spec/app/models/thing.rb +9 -0
  187. data/spec/app/models/title.rb +4 -0
  188. data/spec/app/models/tool.rb +8 -0
  189. data/spec/app/models/topping.rb +5 -0
  190. data/spec/app/models/track.rb +38 -0
  191. data/spec/app/models/translation.rb +5 -0
  192. data/spec/app/models/tree.rb +9 -0
  193. data/spec/app/models/truck.rb +3 -0
  194. data/spec/app/models/user.rb +21 -0
  195. data/spec/app/models/user_account.rb +10 -0
  196. data/spec/app/models/validation_callback.rb +10 -0
  197. data/spec/app/models/vehicle.rb +11 -0
  198. data/spec/app/models/version.rb +5 -0
  199. data/spec/app/models/vet_visit.rb +5 -0
  200. data/spec/app/models/video.rb +17 -0
  201. data/spec/app/models/video_game.rb +1 -0
  202. data/spec/app/models/weapon.rb +11 -0
  203. data/spec/app/models/wiki_page.rb +17 -0
  204. data/spec/app/models/word.rb +12 -0
  205. data/spec/app/models/word_origin.rb +11 -0
  206. data/spec/app/models/writer.rb +11 -0
  207. data/spec/config/mongoid.yml +40 -0
  208. data/spec/mongoid/atomic/modifiers_spec.rb +456 -0
  209. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +159 -0
  210. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +152 -0
  211. data/spec/mongoid/atomic/paths/root_spec.rb +106 -0
  212. data/spec/mongoid/atomic/paths_spec.rb +270 -0
  213. data/spec/mongoid/atomic/positionable_spec.rb +227 -0
  214. data/spec/mongoid/atomic_spec.rb +365 -0
  215. data/spec/mongoid/attributes/processing_spec.rb +149 -0
  216. data/spec/mongoid/attributes/readonly_spec.rb +169 -0
  217. data/spec/mongoid/attributes_spec.rb +1705 -0
  218. data/spec/mongoid/callbacks_spec.rb +1564 -0
  219. data/spec/mongoid/components_spec.rb +24 -0
  220. data/spec/mongoid/config/environment_spec.rb +83 -0
  221. data/spec/mongoid/config/options_spec.rb +56 -0
  222. data/spec/mongoid/config_spec.rb +334 -0
  223. data/spec/mongoid/contextual/aggregable/memory_spec.rb +293 -0
  224. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +455 -0
  225. data/spec/mongoid/contextual/atomic_spec.rb +525 -0
  226. data/spec/mongoid/contextual/find_and_modify_spec.rb +220 -0
  227. data/spec/mongoid/contextual/geo_near_spec.rb +405 -0
  228. data/spec/mongoid/contextual/map_reduce_spec.rb +464 -0
  229. data/spec/mongoid/contextual/memory_spec.rb +1236 -0
  230. data/spec/mongoid/contextual/mongo_spec.rb +1757 -0
  231. data/spec/mongoid/copyable_spec.rb +393 -0
  232. data/spec/mongoid/criteria_spec.rb +5140 -0
  233. data/spec/mongoid/criterion/destructive_spec.rb +101 -0
  234. data/spec/mongoid/criterion/inspection_spec.rb +27 -0
  235. data/spec/mongoid/criterion/marshalable_spec.rb +28 -0
  236. data/spec/mongoid/criterion/modifiable_spec.rb +409 -0
  237. data/spec/mongoid/criterion/modification_spec.rb +402 -0
  238. data/spec/mongoid/criterion/scoping_spec.rb +391 -0
  239. data/spec/mongoid/dirty_spec.rb +1508 -0
  240. data/spec/mongoid/document_spec.rb +1146 -0
  241. data/spec/mongoid/equality_spec.rb +241 -0
  242. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +29 -0
  243. data/spec/mongoid/errors/callback_spec.rb +29 -0
  244. data/spec/mongoid/errors/delete_restriction_spec.rb +29 -0
  245. data/spec/mongoid/errors/document_not_found_spec.rb +104 -0
  246. data/spec/mongoid/errors/eager_load_spec.rb +29 -0
  247. data/spec/mongoid/errors/invalid_collection_spec.rb +36 -0
  248. data/spec/mongoid/errors/invalid_config_option_spec.rb +29 -0
  249. data/spec/mongoid/errors/invalid_field_option_spec.rb +29 -0
  250. data/spec/mongoid/errors/invalid_field_spec.rb +37 -0
  251. data/spec/mongoid/errors/invalid_find_spec.rb +29 -0
  252. data/spec/mongoid/errors/invalid_includes_spec.rb +40 -0
  253. data/spec/mongoid/errors/invalid_index_spec.rb +29 -0
  254. data/spec/mongoid/errors/invalid_options_spec.rb +29 -0
  255. data/spec/mongoid/errors/invalid_path_spec.rb +23 -0
  256. data/spec/mongoid/errors/invalid_scope_spec.rb +29 -0
  257. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +17 -0
  258. data/spec/mongoid/errors/invalid_storage_options_spec.rb +29 -0
  259. data/spec/mongoid/errors/invalid_time_spec.rb +29 -0
  260. data/spec/mongoid/errors/inverse_not_found_spec.rb +29 -0
  261. data/spec/mongoid/errors/mixed_relations_spec.rb +29 -0
  262. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +29 -0
  263. data/spec/mongoid/errors/mongoid_error_spec.rb +48 -0
  264. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +29 -0
  265. data/spec/mongoid/errors/no_environment_spec.rb +29 -0
  266. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +29 -0
  267. data/spec/mongoid/errors/no_metadata_spec.rb +23 -0
  268. data/spec/mongoid/errors/no_parent_spec.rb +29 -0
  269. data/spec/mongoid/errors/no_session_config_spec.rb +29 -0
  270. data/spec/mongoid/errors/no_session_database_spec.rb +29 -0
  271. data/spec/mongoid/errors/no_session_hosts_spec.rb +29 -0
  272. data/spec/mongoid/errors/no_sessions_config_spec.rb +29 -0
  273. data/spec/mongoid/errors/readonly_attribute_spec.rb +29 -0
  274. data/spec/mongoid/errors/scope_overwrite_spec.rb +29 -0
  275. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +29 -0
  276. data/spec/mongoid/errors/unknown_attribute_spec.rb +29 -0
  277. data/spec/mongoid/errors/unsaved_document_spec.rb +37 -0
  278. data/spec/mongoid/errors/unsupported_javascript_spec.rb +29 -0
  279. data/spec/mongoid/errors/validations_spec.rb +45 -0
  280. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +29 -0
  281. data/spec/mongoid/extensions/array_spec.rb +638 -0
  282. data/spec/mongoid/extensions/big_decimal_spec.rb +104 -0
  283. data/spec/mongoid/extensions/binary_spec.rb +60 -0
  284. data/spec/mongoid/extensions/boolean_spec.rb +135 -0
  285. data/spec/mongoid/extensions/date_spec.rb +235 -0
  286. data/spec/mongoid/extensions/date_time_spec.rb +155 -0
  287. data/spec/mongoid/extensions/false_class_spec.rb +42 -0
  288. data/spec/mongoid/extensions/float_spec.rb +133 -0
  289. data/spec/mongoid/extensions/hash_spec.rb +333 -0
  290. data/spec/mongoid/extensions/integer_spec.rb +136 -0
  291. data/spec/mongoid/extensions/module_spec.rb +42 -0
  292. data/spec/mongoid/extensions/nil_class_spec.rb +11 -0
  293. data/spec/mongoid/extensions/object_id_spec.rb +946 -0
  294. data/spec/mongoid/extensions/object_spec.rb +292 -0
  295. data/spec/mongoid/extensions/range_spec.rb +105 -0
  296. data/spec/mongoid/extensions/regexp_spec.rb +47 -0
  297. data/spec/mongoid/extensions/set_spec.rb +33 -0
  298. data/spec/mongoid/extensions/string_spec.rb +368 -0
  299. data/spec/mongoid/extensions/symbol_spec.rb +76 -0
  300. data/spec/mongoid/extensions/time_spec.rb +467 -0
  301. data/spec/mongoid/extensions/time_with_zone_spec.rb +405 -0
  302. data/spec/mongoid/extensions/true_class_spec.rb +42 -0
  303. data/spec/mongoid/factory_spec.rb +185 -0
  304. data/spec/mongoid/fields/foreign_key_spec.rb +694 -0
  305. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +184 -0
  306. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +201 -0
  307. data/spec/mongoid/fields/localized_spec.rb +386 -0
  308. data/spec/mongoid/fields/standard_spec.rb +166 -0
  309. data/spec/mongoid/fields_spec.rb +1253 -0
  310. data/spec/mongoid/finders_spec.rb +321 -0
  311. data/spec/mongoid/hierarchy_spec.rb +244 -0
  312. data/spec/mongoid/identity_map_spec.rb +564 -0
  313. data/spec/mongoid/indexes_spec.rb +404 -0
  314. data/spec/mongoid/inspection_spec.rb +57 -0
  315. data/spec/mongoid/json_spec.rb +33 -0
  316. data/spec/mongoid/loggable_spec.rb +21 -0
  317. data/spec/mongoid/matchers/all_spec.rb +31 -0
  318. data/spec/mongoid/matchers/and_spec.rb +162 -0
  319. data/spec/mongoid/matchers/default_spec.rb +130 -0
  320. data/spec/mongoid/matchers/exists_spec.rb +57 -0
  321. data/spec/mongoid/matchers/gt_spec.rb +74 -0
  322. data/spec/mongoid/matchers/gte_spec.rb +74 -0
  323. data/spec/mongoid/matchers/in_spec.rb +25 -0
  324. data/spec/mongoid/matchers/lt_spec.rb +74 -0
  325. data/spec/mongoid/matchers/lte_spec.rb +74 -0
  326. data/spec/mongoid/matchers/ne_spec.rb +25 -0
  327. data/spec/mongoid/matchers/nin_spec.rb +25 -0
  328. data/spec/mongoid/matchers/or_spec.rb +106 -0
  329. data/spec/mongoid/matchers/size_spec.rb +25 -0
  330. data/spec/mongoid/matchers_spec.rb +532 -0
  331. data/spec/mongoid/multi_parameter_attributes_spec.rb +128 -0
  332. data/spec/mongoid/nested_attributes_spec.rb +4945 -0
  333. data/spec/mongoid/observer_spec.rb +290 -0
  334. data/spec/mongoid/paranoia_spec.rb +759 -0
  335. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +262 -0
  336. data/spec/mongoid/persistence/atomic/bit_spec.rb +88 -0
  337. data/spec/mongoid/persistence/atomic/inc_spec.rb +133 -0
  338. data/spec/mongoid/persistence/atomic/pop_spec.rb +111 -0
  339. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +77 -0
  340. data/spec/mongoid/persistence/atomic/pull_spec.rb +80 -0
  341. data/spec/mongoid/persistence/atomic/push_all_spec.rb +77 -0
  342. data/spec/mongoid/persistence/atomic/push_spec.rb +77 -0
  343. data/spec/mongoid/persistence/atomic/rename_spec.rb +42 -0
  344. data/spec/mongoid/persistence/atomic/sets_spec.rb +154 -0
  345. data/spec/mongoid/persistence/atomic/unset_spec.rb +65 -0
  346. data/spec/mongoid/persistence/atomic_spec.rb +216 -0
  347. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +191 -0
  348. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +8 -0
  349. data/spec/mongoid/persistence/operations/insert_spec.rb +149 -0
  350. data/spec/mongoid/persistence/operations/remove_spec.rb +113 -0
  351. data/spec/mongoid/persistence/operations/update_spec.rb +141 -0
  352. data/spec/mongoid/persistence/operations/upsert_spec.rb +59 -0
  353. data/spec/mongoid/persistence/operations_spec.rb +313 -0
  354. data/spec/mongoid/persistence_spec.rb +2279 -0
  355. data/spec/mongoid/railties/document_spec.rb +24 -0
  356. data/spec/mongoid/relations/accessors_spec.rb +844 -0
  357. data/spec/mongoid/relations/auto_save_spec.rb +261 -0
  358. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +171 -0
  359. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +54 -0
  360. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +77 -0
  361. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +241 -0
  362. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +153 -0
  363. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +178 -0
  364. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +131 -0
  365. data/spec/mongoid/relations/builders/embedded/in_spec.rb +34 -0
  366. data/spec/mongoid/relations/builders/embedded/many_spec.rb +132 -0
  367. data/spec/mongoid/relations/builders/embedded/one_spec.rb +99 -0
  368. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +234 -0
  369. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +250 -0
  370. data/spec/mongoid/relations/builders/referenced/in_spec.rb +241 -0
  371. data/spec/mongoid/relations/builders/referenced/many_spec.rb +137 -0
  372. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +178 -0
  373. data/spec/mongoid/relations/builders/referenced/one_spec.rb +124 -0
  374. data/spec/mongoid/relations/builders_spec.rb +226 -0
  375. data/spec/mongoid/relations/cascading/delete_spec.rb +101 -0
  376. data/spec/mongoid/relations/cascading/destroy_spec.rb +47 -0
  377. data/spec/mongoid/relations/cascading/nullify_spec.rb +32 -0
  378. data/spec/mongoid/relations/cascading/restrict_spec.rb +68 -0
  379. data/spec/mongoid/relations/cascading_spec.rb +355 -0
  380. data/spec/mongoid/relations/constraint_spec.rb +74 -0
  381. data/spec/mongoid/relations/conversions_spec.rb +126 -0
  382. data/spec/mongoid/relations/counter_cache_spec.rb +205 -0
  383. data/spec/mongoid/relations/cyclic_spec.rb +156 -0
  384. data/spec/mongoid/relations/embedded/dirty_spec.rb +65 -0
  385. data/spec/mongoid/relations/embedded/in_spec.rb +580 -0
  386. data/spec/mongoid/relations/embedded/many_spec.rb +3841 -0
  387. data/spec/mongoid/relations/embedded/one_spec.rb +1055 -0
  388. data/spec/mongoid/relations/macros_spec.rb +625 -0
  389. data/spec/mongoid/relations/metadata_spec.rb +2030 -0
  390. data/spec/mongoid/relations/options_spec.rb +35 -0
  391. data/spec/mongoid/relations/polymorphic_spec.rb +132 -0
  392. data/spec/mongoid/relations/proxy_spec.rb +48 -0
  393. data/spec/mongoid/relations/referenced/in_spec.rb +1501 -0
  394. data/spec/mongoid/relations/referenced/many_spec.rb +3632 -0
  395. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +3561 -0
  396. data/spec/mongoid/relations/referenced/one_spec.rb +1331 -0
  397. data/spec/mongoid/relations/reflections_spec.rb +101 -0
  398. data/spec/mongoid/relations/synchronization_spec.rb +453 -0
  399. data/spec/mongoid/relations/targets/enumerable_spec.rb +1710 -0
  400. data/spec/mongoid/relations_spec.rb +188 -0
  401. data/spec/mongoid/reloading_spec.rb +305 -0
  402. data/spec/mongoid/scoping_spec.rb +978 -0
  403. data/spec/mongoid/serialization_spec.rb +833 -0
  404. data/spec/mongoid/sessions/factory_spec.rb +312 -0
  405. data/spec/mongoid/sessions/mongo_uri_spec.rb +103 -0
  406. data/spec/mongoid/sessions_spec.rb +1111 -0
  407. data/spec/mongoid/sharding_spec.rb +61 -0
  408. data/spec/mongoid/state_spec.rb +102 -0
  409. data/spec/mongoid/threaded_spec.rb +296 -0
  410. data/spec/mongoid/timestamps/created/short_spec.rb +51 -0
  411. data/spec/mongoid/timestamps/created_spec.rb +44 -0
  412. data/spec/mongoid/timestamps/timeless_spec.rb +130 -0
  413. data/spec/mongoid/timestamps/updated/short_spec.rb +90 -0
  414. data/spec/mongoid/timestamps/updated_spec.rb +86 -0
  415. data/spec/mongoid/timestamps_spec.rb +112 -0
  416. data/spec/mongoid/unit_of_work_spec.rb +196 -0
  417. data/spec/mongoid/validations/associated_spec.rb +183 -0
  418. data/spec/mongoid/validations/format_spec.rb +83 -0
  419. data/spec/mongoid/validations/length_spec.rb +223 -0
  420. data/spec/mongoid/validations/numericality_spec.rb +30 -0
  421. data/spec/mongoid/validations/presence_spec.rb +592 -0
  422. data/spec/mongoid/validations/uniqueness_spec.rb +2399 -0
  423. data/spec/mongoid/validations_spec.rb +309 -0
  424. data/spec/mongoid/versioning_spec.rb +540 -0
  425. data/spec/mongoid_spec.rb +74 -0
  426. data/spec/rack/mongoid/middleware/identity_map_spec.rb +72 -0
  427. data/spec/rails/mongoid_spec.rb +462 -0
  428. data/spec/spec_helper.rb +93 -0
  429. metadata +826 -6
@@ -0,0 +1,220 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Contextual::FindAndModify do
4
+
5
+ describe "#result" do
6
+
7
+ let!(:depeche) do
8
+ Band.create(name: "Depeche Mode")
9
+ end
10
+
11
+ let!(:tool) do
12
+ Band.create(name: "Tool")
13
+ end
14
+
15
+ let!(:collection) do
16
+ Band.collection
17
+ end
18
+
19
+ context "when the selector matches" do
20
+
21
+ context "when not providing options" do
22
+
23
+ let(:criteria) do
24
+ Band.where(name: "Depeche Mode")
25
+ end
26
+
27
+ let(:context) do
28
+ described_class.new(collection, criteria, { "$inc" => { likes: 1 }})
29
+ end
30
+
31
+ let!(:result) do
32
+ context.result
33
+ end
34
+
35
+ it "returns the first matching document" do
36
+ result["name"].should eq("Depeche Mode")
37
+ end
38
+
39
+ it "updates the document in the database" do
40
+ depeche.reload.likes.should eq(1)
41
+ end
42
+ end
43
+
44
+ context "when providing values that needs to be cast" do
45
+
46
+ let(:date_time) do
47
+ DateTime.new(1978, 1, 1)
48
+ end
49
+
50
+ let(:criteria) do
51
+ Band.where(name: "Depeche Mode")
52
+ end
53
+
54
+ let(:context) do
55
+ described_class.new(collection, criteria, { "$set" => { created: date_time }})
56
+ end
57
+
58
+ let!(:result) do
59
+ context.result
60
+ end
61
+
62
+ it "returns the first matching document" do
63
+ result["name"].should eq("Depeche Mode")
64
+ end
65
+
66
+ it "updates the document in the database" do
67
+ depeche.reload.created.should eq(date_time)
68
+ end
69
+ end
70
+
71
+ context "when sorting" do
72
+
73
+ let(:criteria) do
74
+ Band.desc(:name)
75
+ end
76
+
77
+ let(:context) do
78
+ described_class.new(collection, criteria, { "$inc" => { likes: 1 }})
79
+ end
80
+
81
+ let!(:result) do
82
+ context.result
83
+ end
84
+
85
+ it "returns the first matching document" do
86
+ result["name"].should eq("Tool")
87
+ end
88
+
89
+ it "updates the document in the database" do
90
+ tool.reload.likes.should eq(1)
91
+ end
92
+ end
93
+
94
+ context "when limiting fields" do
95
+
96
+ let(:criteria) do
97
+ Band.only(:_id)
98
+ end
99
+
100
+ let(:context) do
101
+ described_class.new(collection, criteria, { "$inc" => { likes: 1 }})
102
+ end
103
+
104
+ let!(:result) do
105
+ context.result
106
+ end
107
+
108
+ it "returns the first matching document" do
109
+ result["_id"].should eq(depeche.id)
110
+ end
111
+
112
+ it "limits the returned fields" do
113
+ result["name"].should be_nil
114
+ end
115
+
116
+ it "updates the document in the database" do
117
+ depeche.reload.likes.should eq(1)
118
+ end
119
+ end
120
+
121
+ context "when returning new" do
122
+
123
+ let(:criteria) do
124
+ Band.where(name: "Depeche Mode")
125
+ end
126
+
127
+ let(:context) do
128
+ described_class.new(collection, criteria, { "$inc" => { likes: 1 }}, new: true)
129
+ end
130
+
131
+ let!(:result) do
132
+ context.result
133
+ end
134
+
135
+ it "returns the first matching document" do
136
+ result["name"].should eq("Depeche Mode")
137
+ end
138
+
139
+ it "returns the updated document" do
140
+ result["likes"].should eq(1)
141
+ end
142
+ end
143
+
144
+ context "when removing" do
145
+
146
+ let(:criteria) do
147
+ Band.where(name: "Depeche Mode")
148
+ end
149
+
150
+ let(:context) do
151
+ described_class.new(collection, criteria, {}, remove: true)
152
+ end
153
+
154
+ let!(:result) do
155
+ context.result
156
+ end
157
+
158
+ it "returns the first matching document" do
159
+ result["name"].should eq("Depeche Mode")
160
+ end
161
+
162
+ it "deletes the document from the database" do
163
+ expect {
164
+ depeche.reload
165
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
166
+ end
167
+ end
168
+
169
+ context "when upserting" do
170
+
171
+ let(:criteria) do
172
+ Band.where(name: "The Mars Volta")
173
+ end
174
+
175
+ let(:context) do
176
+ described_class.new(collection, criteria, { "$inc" => { likes: 1 }}, upsert: true)
177
+ end
178
+
179
+ let(:result) do
180
+ context.result
181
+ end
182
+
183
+ it "creates the document if it does not exist" do
184
+ expect {
185
+ result
186
+ }.to change{Band.where(name: "The Mars Volta").count}.from(0).to(1)
187
+ end
188
+
189
+ it "updates the document in the database if it does exist" do
190
+ the_mars_volta = Band.create(name: "The Mars Volta")
191
+
192
+ expect {
193
+ result
194
+ }.to_not change{Band.where(name: "The Mars Volta").count}
195
+
196
+ the_mars_volta.reload.likes.should eq(1)
197
+ end
198
+ end
199
+ end
200
+
201
+ context "when the selector does not match" do
202
+
203
+ let(:criteria) do
204
+ Band.where(name: "Placebo")
205
+ end
206
+
207
+ let(:context) do
208
+ described_class.new(collection, criteria, { "$inc" => { likes: 1 }})
209
+ end
210
+
211
+ let(:result) do
212
+ context.result
213
+ end
214
+
215
+ it "returns nil" do
216
+ result.should be_nil
217
+ end
218
+ end
219
+ end
220
+ end
@@ -0,0 +1,405 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Contextual::GeoNear do
4
+
5
+ describe "#average_distance" do
6
+
7
+ let!(:collection) do
8
+ Bar.collection
9
+ end
10
+
11
+ before do
12
+ Bar.create_indexes
13
+ end
14
+
15
+ let!(:bar_one) do
16
+ Bar.create(location: [ 52.30, 13.25 ])
17
+ end
18
+
19
+ let!(:bar_two) do
20
+ Bar.create(location: [ 52.30, 13.35 ])
21
+ end
22
+
23
+ context "when results are returned" do
24
+
25
+ let(:criteria) do
26
+ Bar.all
27
+ end
28
+
29
+ let(:geo_near) do
30
+ described_class.new(collection, criteria, [ 52, 13 ])
31
+ end
32
+
33
+ it "returns the average distance" do
34
+ geo_near.average_distance.should_not be_nil
35
+ end
36
+ end
37
+
38
+ context "when no results are returned" do
39
+
40
+ let(:criteria) do
41
+ Bar.where(name: "Green Door")
42
+ end
43
+
44
+ let(:geo_near) do
45
+ described_class.new(collection, criteria, [ 52, 13 ])
46
+ end
47
+
48
+ it "returns 0.0" do
49
+ geo_near.average_distance.should be_nil
50
+ end
51
+ end
52
+ end
53
+
54
+ describe "#each" do
55
+
56
+ let!(:collection) do
57
+ Bar.collection
58
+ end
59
+
60
+ before do
61
+ Bar.create_indexes
62
+ end
63
+
64
+ let!(:bar_one) do
65
+ Bar.create(location: [ 52.30, 13.25 ])
66
+ end
67
+
68
+ let!(:bar_two) do
69
+ Bar.create(location: [ 52.30, 13.35 ])
70
+ end
71
+
72
+ context "when no options are provided" do
73
+
74
+ let(:criteria) do
75
+ Bar.all
76
+ end
77
+
78
+ let(:geo_near) do
79
+ described_class.new(collection, criteria, [ 52, 13 ])
80
+ end
81
+
82
+ let(:results) do
83
+ geo_near.entries
84
+ end
85
+
86
+ it "returns all the documents" do
87
+ results.should eq([ bar_one, bar_two ])
88
+ end
89
+ end
90
+
91
+ context "when the criteria has a limit" do
92
+
93
+ let(:criteria) do
94
+ Bar.limit(1)
95
+ end
96
+
97
+ let(:geo_near) do
98
+ described_class.new(collection, criteria, [ 52, 13 ])
99
+ end
100
+
101
+ let(:results) do
102
+ geo_near.entries
103
+ end
104
+
105
+ it "returns the limited documents" do
106
+ results.should eq([ bar_one ])
107
+ end
108
+ end
109
+
110
+ context "when providing a max distance" do
111
+
112
+ let(:criteria) do
113
+ Bar.all
114
+ end
115
+
116
+ let(:geo_near) do
117
+ described_class.new(collection, criteria, [ 52, 13 ])
118
+ end
119
+
120
+ let(:results) do
121
+ geo_near.max_distance(0.40).entries
122
+ end
123
+
124
+ it "returns the limited documents" do
125
+ results.should eq([ bar_one ])
126
+ end
127
+ end
128
+
129
+ context "when spcifying spherical" do
130
+
131
+ let(:criteria) do
132
+ Bar.all
133
+ end
134
+
135
+ let(:geo_near) do
136
+ described_class.new(collection, criteria, [ 52, 13 ])
137
+ end
138
+
139
+ let(:results) do
140
+ geo_near.spherical.entries
141
+ end
142
+
143
+ it "returns the documents" do
144
+ results.should eq([ bar_one, bar_two ])
145
+ end
146
+ end
147
+
148
+ context "when providing a distance multiplier" do
149
+
150
+ let(:criteria) do
151
+ Bar.all
152
+ end
153
+
154
+ let(:geo_near) do
155
+ described_class.new(collection, criteria, [ 52, 13 ])
156
+ end
157
+
158
+ let(:results) do
159
+ geo_near.distance_multiplier(6378.1).entries
160
+ end
161
+
162
+ it "returns the documents" do
163
+ results.should eq([ bar_one, bar_two ])
164
+ end
165
+
166
+ it "multiplies the distance factor" do
167
+ results.first.geo_near_distance.to_i.should eq(2490)
168
+ end
169
+ end
170
+
171
+ context "when unique is false" do
172
+
173
+ let(:criteria) do
174
+ Bar.all
175
+ end
176
+
177
+ let(:geo_near) do
178
+ described_class.new(collection, criteria, [ 52, 13 ])
179
+ end
180
+
181
+ let(:results) do
182
+ geo_near.unique(false).entries
183
+ end
184
+
185
+ it "returns the documents" do
186
+ results.should eq([ bar_one, bar_two ])
187
+ end
188
+ end
189
+ end
190
+
191
+ describe "#empty?" do
192
+
193
+ let!(:collection) do
194
+ Bar.collection
195
+ end
196
+
197
+ before do
198
+ Bar.create_indexes
199
+ end
200
+
201
+ let!(:bar_one) do
202
+ Bar.create(location: [ 52.30, 13.25 ])
203
+ end
204
+
205
+ let!(:bar_two) do
206
+ Bar.create(location: [ 52.30, 13.35 ])
207
+ end
208
+
209
+ let(:geo_near) do
210
+ described_class.new(collection, criteria, [ 52, 13 ])
211
+ end
212
+
213
+ context "when the $geoNear has results" do
214
+
215
+ let(:criteria) do
216
+ Bar.all
217
+ end
218
+
219
+ it "returns false" do
220
+ geo_near.should_not be_empty
221
+ end
222
+ end
223
+
224
+ context "when the map/reduce has no results" do
225
+
226
+ let(:criteria) do
227
+ Bar.where(name: "Halo")
228
+ end
229
+
230
+ it "returns true" do
231
+ geo_near.should be_empty
232
+ end
233
+ end
234
+ end
235
+
236
+ describe "#execute" do
237
+
238
+ let!(:collection) do
239
+ Bar.collection
240
+ end
241
+
242
+ before do
243
+ Bar.create_indexes
244
+ end
245
+
246
+ let!(:bar_one) do
247
+ Bar.create(location: [ 52.30, 13.25 ])
248
+ end
249
+
250
+ let!(:bar_two) do
251
+ Bar.create(location: [ 52.30, 13.35 ])
252
+ end
253
+
254
+ let(:criteria) do
255
+ Bar.all
256
+ end
257
+
258
+ let(:geo_near) do
259
+ described_class.new(collection, criteria, [ 52, 13 ])
260
+ end
261
+
262
+ let(:execution_results) do
263
+ geo_near.execute
264
+ end
265
+
266
+ it "returns a hash" do
267
+ execution_results.should be_a_kind_of(Hash)
268
+ end
269
+ end
270
+
271
+ describe "#max_distance" do
272
+
273
+ let!(:collection) do
274
+ Bar.collection
275
+ end
276
+
277
+ before do
278
+ Bar.create_indexes
279
+ end
280
+
281
+ let!(:bar_one) do
282
+ Bar.create(location: [ 52.30, 13.25 ])
283
+ end
284
+
285
+ let!(:bar_two) do
286
+ Bar.create(location: [ 52.30, 13.35 ])
287
+ end
288
+
289
+ context "when results are returned" do
290
+
291
+ let(:criteria) do
292
+ Bar.all
293
+ end
294
+
295
+ let(:geo_near) do
296
+ described_class.new(collection, criteria, [ 52, 13 ])
297
+ end
298
+
299
+ it "returns the max distance" do
300
+ geo_near.max_distance.should_not be_nil
301
+ end
302
+ end
303
+
304
+ context "when no results are returned" do
305
+
306
+ let(:criteria) do
307
+ Bar.where(name: "Green Door")
308
+ end
309
+
310
+ let(:geo_near) do
311
+ described_class.new(collection, criteria, [ 52, 13 ])
312
+ end
313
+
314
+ it "returns 0.0" do
315
+ geo_near.max_distance.should eq(0.0)
316
+ end
317
+ end
318
+ end
319
+
320
+ describe "#inspect" do
321
+
322
+ let!(:collection) do
323
+ Bar.collection
324
+ end
325
+
326
+ before do
327
+ Bar.create_indexes
328
+ end
329
+
330
+ let!(:bar_one) do
331
+ Bar.create(location: [ 52.30, 13.25 ])
332
+ end
333
+
334
+ let!(:bar_two) do
335
+ Bar.create(location: [ 52.30, 13.35 ])
336
+ end
337
+
338
+ let(:criteria) do
339
+ Bar.all
340
+ end
341
+
342
+ let(:geo_near) do
343
+ described_class.new(collection, criteria, [ 52, 13 ])
344
+ end
345
+
346
+ it "contains the selector" do
347
+ geo_near.inspect.should include("selector")
348
+ end
349
+
350
+ it "contains the class" do
351
+ geo_near.inspect.should include("class")
352
+ end
353
+
354
+ it "contains the near" do
355
+ geo_near.inspect.should include("near")
356
+ end
357
+
358
+ it "contains the multiplier" do
359
+ geo_near.inspect.should include("multiplier")
360
+ end
361
+
362
+ it "contains the max" do
363
+ geo_near.inspect.should include("max")
364
+ end
365
+
366
+ it "contains the unique" do
367
+ geo_near.inspect.should include("unique")
368
+ end
369
+
370
+ it "contains the spherical" do
371
+ geo_near.inspect.should include("spherical")
372
+ end
373
+ end
374
+
375
+ describe "#time" do
376
+
377
+ let!(:collection) do
378
+ Bar.collection
379
+ end
380
+
381
+ before do
382
+ Bar.create_indexes
383
+ end
384
+
385
+ let!(:bar_one) do
386
+ Bar.create(location: [ 52.30, 13.25 ])
387
+ end
388
+
389
+ let!(:bar_two) do
390
+ Bar.create(location: [ 52.30, 13.35 ])
391
+ end
392
+
393
+ let(:criteria) do
394
+ Bar.all
395
+ end
396
+
397
+ let(:geo_near) do
398
+ described_class.new(collection, criteria, [ 52, 13 ])
399
+ end
400
+
401
+ it "returns the execution time" do
402
+ geo_near.time.should_not be_nil
403
+ end
404
+ end
405
+ end