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,74 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid do
4
+
5
+ describe ".configure" do
6
+
7
+ context "when no block supplied" do
8
+
9
+ it "returns the config singleton" do
10
+ Mongoid.configure.should eq(Mongoid::Config)
11
+ end
12
+ end
13
+
14
+ context "when a block is supplied" do
15
+
16
+ before do
17
+ Mongoid.configure do |config|
18
+ config.allow_dynamic_fields = false
19
+ end
20
+ end
21
+
22
+ after do
23
+ Mongoid.configure do |config|
24
+ config.allow_dynamic_fields = true
25
+ end
26
+ end
27
+
28
+ it "sets the values on the config instance" do
29
+ Mongoid.allow_dynamic_fields.should be_false
30
+ end
31
+ end
32
+ end
33
+
34
+ describe ".default_session" do
35
+
36
+ it "returns the default session" do
37
+ Mongoid.default_session.should eq(Mongoid::Sessions.default)
38
+ end
39
+ end
40
+
41
+ describe ".disconnect_sessions" do
42
+
43
+ let(:sessions) do
44
+ Mongoid::Threaded.sessions.values
45
+ end
46
+
47
+ before do
48
+ Band.all.entries
49
+ Mongoid.disconnect_sessions
50
+ end
51
+
52
+ it "disconnects from all active sessions" do
53
+ sessions.each do |session|
54
+ session.cluster.nodes.each do |node|
55
+ node.send(:connected?).should be_false
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ describe ".session" do
62
+
63
+ it "returns the named session" do
64
+ Mongoid.session(:default).should eq(Mongoid::Sessions.default)
65
+ end
66
+ end
67
+
68
+ describe ".models" do
69
+
70
+ it "returns the list of known models" do
71
+ Mongoid.models.should include(Band)
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,72 @@
1
+ require "spec_helper"
2
+
3
+ describe "Rack::Mongoid::Middleware::IdentityMap" do
4
+
5
+ before(:all) do
6
+ require "rack/mongoid"
7
+ end
8
+
9
+ let(:app) do
10
+ stub
11
+ end
12
+
13
+ let(:env) do
14
+ stub
15
+ end
16
+
17
+ let(:klass) do
18
+ Rack::Mongoid::Middleware::IdentityMap
19
+ end
20
+
21
+ describe "#call" do
22
+
23
+ let(:middleware) do
24
+ klass.new(app)
25
+ end
26
+
27
+ let(:document) do
28
+ Person.new
29
+ end
30
+
31
+ before do
32
+ Mongoid::IdentityMap.set(document)
33
+ end
34
+
35
+ describe "when no exception is raised" do
36
+
37
+ before do
38
+ app.should_receive(:call).with(env).and_return([])
39
+ end
40
+
41
+ let!(:result) do
42
+ middleware.call(env)
43
+ end
44
+
45
+ it "returns the call with the body proxy" do
46
+ result.should eq([])
47
+ end
48
+
49
+ it "clears out the identity map" do
50
+ Mongoid::Threaded.identity_map.should be_empty
51
+ end
52
+ end
53
+
54
+ describe "when an exception is raised" do
55
+
56
+ before do
57
+ app.should_receive(:call).with(env).and_raise(RuntimeError)
58
+ end
59
+
60
+ let!(:result) do
61
+ begin
62
+ middleware.call(env)
63
+ rescue
64
+ end
65
+ end
66
+
67
+ it "clears out the identity map" do
68
+ Mongoid::Threaded.identity_map.should be_empty
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,462 @@
1
+ require "spec_helper"
2
+
3
+ describe "Rails::Mongoid" do
4
+
5
+ before(:all) do
6
+ require "rails/mongoid"
7
+ end
8
+
9
+ describe ".create_indexes" do
10
+
11
+ let(:pattern) do
12
+ "spec/app/models/**/*.rb"
13
+ end
14
+
15
+ let(:logger) do
16
+ stub
17
+ end
18
+
19
+ let(:klass) do
20
+ User
21
+ end
22
+
23
+ let(:model_paths) do
24
+ [ "spec/app/models/user.rb" ]
25
+ end
26
+
27
+ let(:indexes) do
28
+ Rails::Mongoid.create_indexes(pattern)
29
+ end
30
+
31
+ before do
32
+ Dir.should_receive(:glob).once.with(pattern).and_return(model_paths)
33
+ end
34
+
35
+ context "with ordinary Rails models" do
36
+
37
+ it "creates the indexes for the models" do
38
+ klass.should_receive(:create_indexes).once
39
+ indexes
40
+ end
41
+ end
42
+
43
+ context "with a model without indexes" do
44
+
45
+ let(:model_paths) do
46
+ [ "spec/app/models/account.rb" ]
47
+ end
48
+
49
+ let(:klass) do
50
+ Account
51
+ end
52
+
53
+ it "does nothing" do
54
+ klass.should_receive(:create_indexes).never
55
+ indexes
56
+ end
57
+ end
58
+
59
+ context "when an exception is raised" do
60
+
61
+ it "is not swallowed" do
62
+ Rails::Mongoid.should_receive(:determine_model).and_return(klass)
63
+ klass.should_receive(:create_indexes).and_raise(ArgumentError)
64
+ expect { indexes }.to raise_error(ArgumentError)
65
+ end
66
+ end
67
+
68
+ context "when index is defined on embedded model" do
69
+
70
+ let(:klass) do
71
+ Address
72
+ end
73
+
74
+ let(:model_paths) do
75
+ [ "spec/app/models/address.rb" ]
76
+ end
77
+
78
+ before do
79
+ klass.index_options = { city: {} }
80
+ end
81
+
82
+ it "does nothing, but logging" do
83
+ klass.should_receive(:create_indexes).never
84
+ indexes
85
+ end
86
+ end
87
+ end
88
+
89
+ describe ".remove_indexes" do
90
+
91
+ let(:pattern) do
92
+ "spec/app/models/**/*.rb"
93
+ end
94
+
95
+ let(:logger) do
96
+ stub
97
+ end
98
+
99
+ let(:klass) do
100
+ User
101
+ end
102
+
103
+ let(:model_paths) do
104
+ [ "spec/app/models/user.rb" ]
105
+ end
106
+
107
+ before do
108
+ Dir.should_receive(:glob).with(pattern).exactly(2).times.and_return(model_paths)
109
+ end
110
+
111
+ let(:indexes) do
112
+ klass.collection.indexes
113
+ end
114
+
115
+ before :each do
116
+ Rails::Mongoid.create_indexes(pattern)
117
+ Rails::Mongoid.remove_indexes(pattern)
118
+ end
119
+
120
+ it "removes indexes from klass" do
121
+ indexes.reject{ |doc| doc["name"] == "_id_" }.should be_empty
122
+ end
123
+
124
+ it "leaves _id index untouched" do
125
+ indexes.select{ |doc| doc["name"] == "_id_" }.should_not be_empty
126
+ end
127
+ end
128
+
129
+ describe ".models" do
130
+
131
+ let(:pattern) do
132
+ "spec/app/models/**/*.rb"
133
+ end
134
+
135
+ let(:logger) do
136
+ stub
137
+ end
138
+
139
+ let(:klass) do
140
+ User
141
+ end
142
+
143
+ let(:model_paths) do
144
+ [ "spec/app/models/user.rb" ]
145
+ end
146
+
147
+ let(:models) do
148
+ Rails::Mongoid.models(pattern)
149
+ end
150
+
151
+ before do
152
+ Dir.should_receive(:glob).with(pattern).once.and_return(model_paths)
153
+ end
154
+
155
+ it "returns models which files matching the pattern" do
156
+ models.should eq([klass])
157
+ end
158
+ end
159
+
160
+ describe ".determine_model" do
161
+
162
+ let(:logger) do
163
+ stub
164
+ end
165
+
166
+ let(:klass) do
167
+ User
168
+ end
169
+
170
+ let(:file) do
171
+ "app/models/user.rb"
172
+ end
173
+
174
+ let(:model) do
175
+ Rails::Mongoid.send(:determine_model, file, logger)
176
+ end
177
+
178
+ class EasyURI
179
+ end
180
+
181
+ module Twitter
182
+ class Follow
183
+ include Mongoid::Document
184
+ end
185
+
186
+ module List
187
+ class Tweet
188
+ include Mongoid::Document
189
+ end
190
+ end
191
+ end
192
+
193
+ context "when file is nil" do
194
+
195
+ let(:file) do
196
+ nil
197
+ end
198
+
199
+ it "returns nil" do
200
+ model.should be_nil
201
+ end
202
+ end
203
+
204
+ context "when logger is nil" do
205
+
206
+ let(:logger) do
207
+ nil
208
+ end
209
+
210
+ it "returns nil" do
211
+ model.should be_nil
212
+ end
213
+ end
214
+
215
+ context "when path is invalid" do
216
+
217
+ let(:file) do
218
+ "fu/bar.rb"
219
+ end
220
+
221
+ it "returns nil" do
222
+ model.should be_nil
223
+ end
224
+ end
225
+
226
+ context "when file cannot be constantize" do
227
+
228
+ let(:file) do
229
+ "app/models/easy_uri.rb"
230
+ end
231
+
232
+ before do
233
+ logger.should_receive(:info)
234
+ end
235
+
236
+ it "returns nil" do
237
+ model.should be_nil
238
+ end
239
+ end
240
+
241
+ context "when file is not in a subdir" do
242
+
243
+ context "when file is from normal model" do
244
+
245
+ it "returns klass" do
246
+ model.should eq(klass)
247
+ end
248
+ end
249
+
250
+ context "when file is in a module" do
251
+
252
+ let(:klass) do
253
+ Twitter::Follow
254
+ end
255
+
256
+ let(:file) do
257
+ "app/models/follow.rb"
258
+ end
259
+
260
+ it "logs the class without an error" do
261
+ logger.should_receive(:info)
262
+ expect { model.should eq(klass) }.not_to raise_error(NameError)
263
+ end
264
+ end
265
+ end
266
+
267
+ context "when file is in a subdir" do
268
+
269
+ context "with file from normal model" do
270
+
271
+ let(:file) do
272
+ "app/models/fu/user.rb"
273
+ end
274
+
275
+ it "returns klass" do
276
+ logger.should_receive(:info)
277
+ model.should eq(klass)
278
+ end
279
+ end
280
+
281
+ context "when file is in a module" do
282
+
283
+ let(:klass) do
284
+ Twitter::Follow
285
+ end
286
+
287
+ let(:file) do
288
+ "app/models/twitter/follow.rb"
289
+ end
290
+
291
+ it "returns klass in module" do
292
+ model.should eq(klass)
293
+ end
294
+ end
295
+
296
+ context "when file is in two modules" do
297
+
298
+ let(:klass) do
299
+ Twitter::List::Tweet
300
+ end
301
+
302
+ let(:file) do
303
+ "app/models/twitter/list/tweet.rb"
304
+ end
305
+
306
+ it "returns klass in module" do
307
+ model.should eq(klass)
308
+ end
309
+ end
310
+ end
311
+
312
+ context "with models present in Rails engines" do
313
+
314
+ let(:file) do
315
+ "/gem_path/engines/some_engine_gem/app/models/user.rb"
316
+ end
317
+
318
+ let(:klass) do
319
+ User
320
+ end
321
+
322
+ it "requires the models by base name from the engine's app/models dir" do
323
+ model.should eq(klass)
324
+ end
325
+ end
326
+ end
327
+
328
+ describe ".preload_models" do
329
+
330
+ let(:app) do
331
+ stub(config: config)
332
+ end
333
+
334
+ let(:config) do
335
+ stub(paths: paths)
336
+ end
337
+
338
+ let(:paths) do
339
+ { "app/models" => [ "/rails/root/app/models" ] }
340
+ end
341
+
342
+ context "when preload models config is false" do
343
+
344
+ let(:files) do
345
+ [
346
+ "/rails/root/app/models/user.rb",
347
+ "/rails/root/app/models/address.rb"
348
+ ]
349
+ end
350
+
351
+ before(:all) do
352
+ Mongoid.preload_models = false
353
+ end
354
+
355
+ it "does not load any models" do
356
+ Dir.stub(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
357
+ Rails::Mongoid.should_receive(:load_model).never
358
+ Rails::Mongoid.preload_models(app)
359
+ end
360
+ end
361
+
362
+ context "when preload models config is true" do
363
+
364
+ before(:all) do
365
+ Mongoid.preload_models = true
366
+ end
367
+
368
+ context "when all models are in the models directory" do
369
+
370
+ let(:files) do
371
+ [
372
+ "/rails/root/app/models/user.rb",
373
+ "/rails/root/app/models/address.rb"
374
+ ]
375
+ end
376
+
377
+ before do
378
+ Dir.should_receive(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
379
+ end
380
+
381
+ it "requires the models by basename" do
382
+ Rails::Mongoid.should_receive(:load_model).with("address")
383
+ Rails::Mongoid.should_receive(:load_model).with("user")
384
+ Rails::Mongoid.preload_models(app)
385
+ end
386
+ end
387
+
388
+ context "when models exist in subdirectories" do
389
+
390
+ let(:files) do
391
+ [ "/rails/root/app/models/mongoid/behaviour.rb" ]
392
+ end
393
+
394
+ before do
395
+ Dir.should_receive(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
396
+ end
397
+
398
+ it "requires the models by subdirectory and basename" do
399
+ Rails::Mongoid.should_receive(:load_model).with("mongoid/behaviour")
400
+ Rails::Mongoid.preload_models(app)
401
+ end
402
+ end
403
+ end
404
+ end
405
+
406
+ describe ".load_models" do
407
+
408
+ let(:app) do
409
+ stub(config: config)
410
+ end
411
+
412
+ let(:config) do
413
+ stub(paths: paths)
414
+ end
415
+
416
+ let(:paths) do
417
+ { "app/models" => [ "/rails/root/app/models" ] }
418
+ end
419
+
420
+ context "even when preload models config is false" do
421
+
422
+ let(:files) do
423
+ [
424
+ "/rails/root/app/models/user.rb",
425
+ "/rails/root/app/models/address.rb"
426
+ ]
427
+ end
428
+
429
+ before(:all) do
430
+ Mongoid.preload_models = false
431
+ end
432
+
433
+ it "loads all models" do
434
+ Dir.stub(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
435
+ Rails::Mongoid.should_receive(:load_model).with("address")
436
+ Rails::Mongoid.should_receive(:load_model).with("user")
437
+ Rails::Mongoid.load_models(app)
438
+ end
439
+ end
440
+
441
+ context "when list of models to load was configured" do
442
+
443
+ let(:files) do
444
+ [
445
+ "/rails/root/app/models/user.rb",
446
+ "/rails/root/app/models/address.rb"
447
+ ]
448
+ end
449
+
450
+ before(:all) do
451
+ Mongoid.preload_models = ["user"]
452
+ end
453
+
454
+ it "loads selected models only" do
455
+ Dir.stub(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
456
+ Rails::Mongoid.should_receive(:load_model).with("user")
457
+ Rails::Mongoid.should_receive(:load_model).with("address").never
458
+ Rails::Mongoid.load_models(app)
459
+ end
460
+ end
461
+ end
462
+ end