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,321 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Finders do
4
+
5
+ describe ".distinct" do
6
+
7
+ before do
8
+ Band.create(name: "Tool")
9
+ Band.create(name: "Photek")
10
+ end
11
+
12
+ it "returns the distinct values for the field" do
13
+ Band.distinct(:name).should eq([ "Tool", "Photek" ])
14
+ end
15
+ end
16
+
17
+ describe ".each" do
18
+
19
+ let!(:band) do
20
+ Band.create
21
+ end
22
+
23
+ it "iterates through all documents" do
24
+ Band.each do |band|
25
+ band.should be_a(Band)
26
+ end
27
+ end
28
+ end
29
+
30
+ describe ".each_with_index" do
31
+
32
+ let!(:band) do
33
+ Band.create
34
+ end
35
+
36
+ it "iterates through all documents" do
37
+ Band.each_with_index do |band, index|
38
+ index.should eq(0)
39
+ end
40
+ end
41
+ end
42
+
43
+ describe ".find_and_modify" do
44
+
45
+ let!(:person) do
46
+ Person.create(title: "Senior")
47
+ end
48
+
49
+ it "returns the document" do
50
+ Person.find_and_modify(title: "Junior").should eq(person)
51
+ end
52
+ end
53
+
54
+ describe ".find_by" do
55
+
56
+ context "when the document is found" do
57
+
58
+ let!(:person) do
59
+ Person.create(title: "sir")
60
+ end
61
+
62
+ context "when no block is provided" do
63
+
64
+ it "returns the document" do
65
+ Person.find_by(title: "sir").should eq(person)
66
+ end
67
+ end
68
+
69
+ context "when a block is provided" do
70
+
71
+ let(:result) do
72
+ Person.find_by(title: "sir") do |peep|
73
+ peep.age = 50
74
+ end
75
+ end
76
+
77
+ it "yields the returned document" do
78
+ result.age.should eq(50)
79
+ end
80
+ end
81
+ end
82
+
83
+ context "when the document is not found" do
84
+
85
+ context "when raising a not found error" do
86
+
87
+ before do
88
+ Mongoid.raise_not_found_error = true
89
+ end
90
+
91
+ it "raises an error" do
92
+ expect {
93
+ Person.find_by(ssn: "333-22-1111")
94
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
95
+ end
96
+ end
97
+
98
+ context "when raising no error" do
99
+
100
+ before do
101
+ Mongoid.raise_not_found_error = false
102
+ end
103
+
104
+ after do
105
+ Mongoid.raise_not_found_error = true
106
+ end
107
+
108
+ context "when no block is provided" do
109
+
110
+ it "returns nil" do
111
+ Person.find_by(ssn: "333-22-1111").should be_nil
112
+ end
113
+ end
114
+
115
+ context "when a block is provided" do
116
+
117
+ let(:result) do
118
+ Person.find_by(ssn: "333-22-1111") do |peep|
119
+ peep.age = 50
120
+ end
121
+ end
122
+
123
+ it "returns nil" do
124
+ result.should be_nil
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ describe ".first_or_create" do
132
+
133
+ context "when the document is found" do
134
+
135
+ let!(:person) do
136
+ Person.create
137
+ end
138
+
139
+ it "returns the document" do
140
+ Person.first_or_create.should eq(person)
141
+ end
142
+ end
143
+
144
+ context "when the document is not found" do
145
+
146
+ context "when providing a document" do
147
+
148
+ let!(:person) do
149
+ Person.create
150
+ end
151
+
152
+ let(:from_db) do
153
+ Game.first_or_create(person: person)
154
+ end
155
+
156
+ it "returns the new document" do
157
+ from_db.person.should eq(person)
158
+ end
159
+ end
160
+
161
+ context "when not providing a block" do
162
+
163
+ let!(:person) do
164
+ Person.first_or_create(title: "Senorita")
165
+ end
166
+
167
+ it "creates a persisted document" do
168
+ person.should be_persisted
169
+ end
170
+
171
+ it "sets the attributes" do
172
+ person.title.should eq("Senorita")
173
+ end
174
+ end
175
+
176
+ context "when providing a block" do
177
+
178
+ let!(:person) do
179
+ Person.first_or_create(title: "Senorita") do |person|
180
+ person.pets = true
181
+ end
182
+ end
183
+
184
+ it "creates a persisted document" do
185
+ person.should be_persisted
186
+ end
187
+
188
+ it "sets the attributes" do
189
+ person.title.should eq("Senorita")
190
+ end
191
+
192
+ it "calls the block" do
193
+ person.pets.should be_true
194
+ end
195
+ end
196
+ end
197
+ end
198
+
199
+ describe ".first_or_initialize" do
200
+
201
+ context "when the document is found" do
202
+
203
+ let!(:person) do
204
+ Person.create
205
+ end
206
+
207
+ it "returns the document" do
208
+ Person.first_or_create.should eq(person)
209
+ end
210
+ end
211
+
212
+ context "when the document is not found" do
213
+
214
+ context "when providing a document" do
215
+
216
+ let!(:person) do
217
+ Person.create
218
+ end
219
+
220
+ let(:found) do
221
+ Game.first_or_initialize(person: person)
222
+ end
223
+
224
+ it "returns the new document" do
225
+ found.person.should eq(person)
226
+ end
227
+
228
+ it "does not save the document" do
229
+ found.should_not be_persisted
230
+ end
231
+ end
232
+
233
+ context "when not providing a block" do
234
+
235
+ before do
236
+ Person.delete_all
237
+ end
238
+
239
+ let!(:person) do
240
+ Person.first_or_initialize(title: "esquire")
241
+ end
242
+
243
+ it "creates a non persisted document" do
244
+ person.should_not be_persisted
245
+ end
246
+
247
+ it "sets the attributes" do
248
+ person.title.should eq("esquire")
249
+ end
250
+ end
251
+
252
+ context "when providing a block" do
253
+
254
+ let!(:person) do
255
+ Person.first_or_initialize(title: "Senorita") do |person|
256
+ person.pets = true
257
+ end
258
+ end
259
+
260
+ it "creates a new document" do
261
+ person.should_not be_persisted
262
+ end
263
+
264
+ it "sets the attributes" do
265
+ person.title.should eq("Senorita")
266
+ end
267
+
268
+ it "calls the block" do
269
+ person.pets.should be_true
270
+ end
271
+ end
272
+ end
273
+ end
274
+
275
+ describe ".pluck" do
276
+
277
+ let!(:depeche) do
278
+ Band.create(name: "Depeche Mode", likes: 3)
279
+ end
280
+
281
+ let!(:tool) do
282
+ Band.create(name: "Tool", likes: 3)
283
+ end
284
+
285
+ let!(:photek) do
286
+ Band.create(name: "Photek", likes: 1)
287
+ end
288
+
289
+ context "when field values exist" do
290
+
291
+ let(:plucked) do
292
+ Band.pluck(:name)
293
+ end
294
+
295
+ it "returns the field values" do
296
+ plucked.should eq([ "Depeche Mode", "Tool", "Photek" ])
297
+ end
298
+ end
299
+
300
+ context "when field values do not exist" do
301
+
302
+ let(:plucked) do
303
+ Band.pluck(:follows)
304
+ end
305
+
306
+ it "returns an empty array" do
307
+ plucked.should be_empty
308
+ end
309
+ end
310
+ end
311
+
312
+ Origin::Selectable.forwardables.each do |method|
313
+
314
+ describe "##{method}" do
315
+
316
+ it "forwards the #{method} to the criteria" do
317
+ Band.should respond_to(method)
318
+ end
319
+ end
320
+ end
321
+ end
@@ -0,0 +1,244 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Hierarchy do
4
+
5
+ describe "#_children" do
6
+
7
+ let(:person) do
8
+ Person.new(title: "King")
9
+ end
10
+
11
+ context "with one level of embedding" do
12
+
13
+ let(:name) do
14
+ Name.new(first_name: "Titus")
15
+ end
16
+
17
+ let(:address) do
18
+ Address.new(street: "Queen St")
19
+ end
20
+
21
+ before do
22
+ person.name = name
23
+ person.addresses << address
24
+ end
25
+
26
+ it "includes embeds_one documents" do
27
+ person._children.should include(name)
28
+ end
29
+
30
+ it "includes embeds_many documents" do
31
+ person._children.should include(address)
32
+ end
33
+ end
34
+
35
+ context "with multiple levels of embedding" do
36
+
37
+ let(:name) do
38
+ Name.new(first_name: "Titus")
39
+ end
40
+
41
+ let(:address) do
42
+ Address.new(street: "Queen St")
43
+ end
44
+
45
+ let(:location) do
46
+ Location.new(name: "Work")
47
+ end
48
+
49
+ before do
50
+ person.name = name
51
+ address.locations << location
52
+ person.addresses << address
53
+ end
54
+
55
+ it "includes embeds_one documents" do
56
+ person._children.should include(name)
57
+ end
58
+
59
+ it "includes embeds_many documents" do
60
+ person._children.should include(address)
61
+ end
62
+
63
+ it "includes embedded documents multiple levels deep" do
64
+ person._children.should include(location)
65
+ end
66
+ end
67
+ end
68
+
69
+ describe ".hereditary?" do
70
+
71
+ context "when the document is a subclass" do
72
+
73
+ it "returns true" do
74
+ Circle.should be_hereditary
75
+ end
76
+ end
77
+
78
+ context "when the document is not a subclass" do
79
+
80
+ it "returns false" do
81
+ Shape.should_not be_hereditary
82
+ end
83
+ end
84
+ end
85
+
86
+ describe "#hereditary?" do
87
+
88
+ context "when the document is a subclass" do
89
+
90
+ it "returns true" do
91
+ Circle.new.should be_hereditary
92
+ end
93
+ end
94
+
95
+ context "when the document is not a subclass" do
96
+
97
+ it "returns false" do
98
+ Shape.new.should_not be_hereditary
99
+ end
100
+ end
101
+ end
102
+
103
+ describe "#parentize" do
104
+
105
+ let(:address) do
106
+ Address.new
107
+ end
108
+
109
+ let(:person) do
110
+ Person.new
111
+ end
112
+
113
+ before do
114
+ address.parentize(person)
115
+ end
116
+
117
+ it "sets the parent document" do
118
+ address._parent.should eq(person)
119
+ end
120
+ end
121
+
122
+ describe "#remove_child" do
123
+
124
+ let(:person) do
125
+ Person.new
126
+ end
127
+
128
+ context "when child is an embeds one" do
129
+
130
+ let!(:name) do
131
+ person.build_name(first_name: "James")
132
+ end
133
+
134
+ before do
135
+ person.remove_child(name)
136
+ end
137
+
138
+ it "removes the relation instance" do
139
+ person.name.should be_nil
140
+ end
141
+ end
142
+
143
+ context "when child is an embeds many" do
144
+
145
+ let!(:address) do
146
+ person.addresses.build(street: "Upper St")
147
+ end
148
+
149
+ before do
150
+ person.remove_child(address)
151
+ end
152
+
153
+ it "removes the document from the relation target" do
154
+ person.addresses.should be_empty
155
+ end
156
+ end
157
+ end
158
+
159
+ describe "#_root" do
160
+
161
+ let(:address) do
162
+ Address.new
163
+ end
164
+
165
+ let(:person) do
166
+ Person.new
167
+ end
168
+
169
+ before do
170
+ address.parentize(person)
171
+ end
172
+
173
+ context "when the document is not the root" do
174
+
175
+ it "returns the root" do
176
+ address._root.should eq(person)
177
+ end
178
+ end
179
+
180
+ context "when the document is the root" do
181
+
182
+ it "returns self" do
183
+ person._root.should eq(person)
184
+ end
185
+ end
186
+ end
187
+
188
+ describe "#_root?" do
189
+
190
+ context "when the document can be the root" do
191
+
192
+ context "when the document is not embedded" do
193
+
194
+ let(:band) do
195
+ Band.new
196
+ end
197
+
198
+ it "returns true" do
199
+ band.should be__root
200
+ end
201
+ end
202
+
203
+ context "when the document is embedded" do
204
+
205
+ let(:root_role) do
206
+ Role.new
207
+ end
208
+
209
+ context "when the document is root in a cyclic relation" do
210
+
211
+ it "returns true" do
212
+ root_role.should be__root
213
+ end
214
+ end
215
+
216
+ context "when document is embedded in a cyclic relation" do
217
+
218
+ let(:child_role) do
219
+ root_role.child_roles.build
220
+ end
221
+
222
+ it "returns false" do
223
+ child_role.should_not be__root
224
+ end
225
+ end
226
+ end
227
+ end
228
+
229
+ context "when the document is embedded and not cyclic" do
230
+
231
+ let(:person) do
232
+ Person.new
233
+ end
234
+
235
+ let(:address) do
236
+ person.addresses.build
237
+ end
238
+
239
+ it "returns false" do
240
+ address.should_not be__root
241
+ end
242
+ end
243
+ end
244
+ end