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,625 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Relations::Macros do
4
+
5
+ class TestClass
6
+ include Mongoid::Document
7
+ end
8
+
9
+ let(:klass) do
10
+ TestClass
11
+ end
12
+
13
+ before do
14
+ klass.relations.clear
15
+ klass._validators.clear
16
+ end
17
+
18
+ describe ".embedded_in" do
19
+
20
+ it "defines the macro" do
21
+ klass.should respond_to(:embedded_in)
22
+ end
23
+
24
+ context "when the document is versioned" do
25
+
26
+ it "raises an error" do
27
+ expect {
28
+ Class.new do
29
+ include Mongoid::Document
30
+ include Mongoid::Versioning
31
+ embedded_in :parent_class
32
+ end
33
+ }.to raise_error(Mongoid::Errors::VersioningNotOnRoot)
34
+ end
35
+ end
36
+
37
+ context "when defining the relation" do
38
+
39
+ before do
40
+ klass.embedded_in(:person)
41
+ end
42
+
43
+ it "adds the metadata to the klass" do
44
+ klass.relations["person"].should_not be_nil
45
+ end
46
+
47
+ it "defines the getter" do
48
+ klass.allocate.should respond_to(:person)
49
+ end
50
+
51
+ it "defines the setter" do
52
+ klass.allocate.should respond_to(:person=)
53
+ end
54
+
55
+ it "creates the correct relation" do
56
+ klass.relations["person"].relation.should eq(
57
+ Mongoid::Relations::Embedded::In
58
+ )
59
+ end
60
+
61
+ it "does not add associated validations" do
62
+ klass._validators.should be_empty
63
+ end
64
+
65
+ context "metadata properties" do
66
+
67
+ let(:metadata) do
68
+ klass.relations["person"]
69
+ end
70
+
71
+ it "automatically adds the name" do
72
+ metadata.name.should eq(:person)
73
+ end
74
+
75
+ it "automatically adds the inverse class name" do
76
+ metadata.inverse_class_name.should eq("TestClass")
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ describe ".embeds_many" do
83
+
84
+ it "defines the macro" do
85
+ klass.should respond_to(:embeds_many)
86
+ end
87
+
88
+ context "when defining the relation" do
89
+
90
+ before do
91
+ klass.embeds_many(:addresses)
92
+ end
93
+
94
+ it "adds the metadata to the klass" do
95
+ klass.relations["addresses"].should_not be_nil
96
+ end
97
+
98
+ it "defines the getter" do
99
+ klass.allocate.should respond_to(:addresses)
100
+ end
101
+
102
+ it "defines the setter" do
103
+ klass.allocate.should respond_to(:addresses=)
104
+ end
105
+
106
+ it "creates the correct relation" do
107
+ klass.relations["addresses"].relation.should eq(
108
+ Mongoid::Relations::Embedded::Many
109
+ )
110
+ end
111
+
112
+ it "adds an associated validation" do
113
+ klass._validators[:addresses].first.should be_a(
114
+ Mongoid::Validations::AssociatedValidator
115
+ )
116
+ end
117
+
118
+ context "metadata properties" do
119
+
120
+ let(:metadata) do
121
+ klass.relations["addresses"]
122
+ end
123
+
124
+ it "automatically adds the name" do
125
+ metadata.name.should eq(:addresses)
126
+ end
127
+
128
+ it "automatically adds the inverse class name" do
129
+ metadata.inverse_class_name.should eq("TestClass")
130
+ end
131
+ end
132
+ end
133
+
134
+ context 'when defining order on relation' do
135
+
136
+ before do
137
+ klass.embeds_many(:addresses, order: :number.asc)
138
+ end
139
+
140
+ let(:metadata) do
141
+ klass.relations["addresses"]
142
+ end
143
+
144
+ it "adds metadata to klass" do
145
+ metadata.order.should_not be_nil
146
+ end
147
+
148
+ it "returns Origin::Key" do
149
+ metadata.order.should be_kind_of(Origin::Key)
150
+ end
151
+ end
152
+
153
+ context "when setting validate to false" do
154
+
155
+ before do
156
+ klass.embeds_many(:addresses, validate: false)
157
+ end
158
+
159
+ it "does not add associated validations" do
160
+ klass._validators.should be_empty
161
+ end
162
+ end
163
+ end
164
+
165
+ describe ".embeds_one" do
166
+
167
+ it "defines the macro" do
168
+ klass.should respond_to(:embeds_one)
169
+ end
170
+
171
+ context "when defining the relation" do
172
+
173
+ before do
174
+ klass.embeds_one(:name)
175
+ end
176
+
177
+ it "adds the metadata to the klass" do
178
+ klass.relations["name"].should_not be_nil
179
+ end
180
+
181
+ it "defines the getter" do
182
+ klass.allocate.should respond_to(:name)
183
+ end
184
+
185
+ it "defines the setter" do
186
+ klass.allocate.should respond_to(:name=)
187
+ end
188
+
189
+ it "defines the builder" do
190
+ klass.allocate.should respond_to(:build_name)
191
+ end
192
+
193
+ it "defines the creator" do
194
+ klass.allocate.should respond_to(:create_name)
195
+ end
196
+
197
+ it "creates the correct relation" do
198
+ klass.relations["name"].relation.should eq(
199
+ Mongoid::Relations::Embedded::One
200
+ )
201
+ end
202
+
203
+ it "adds an associated validation" do
204
+ klass._validators[:name].first.should be_a(
205
+ Mongoid::Validations::AssociatedValidator
206
+ )
207
+ end
208
+
209
+ context "metadata properties" do
210
+
211
+ let(:metadata) do
212
+ klass.relations["name"]
213
+ end
214
+
215
+ it "automatically adds the name" do
216
+ metadata.name.should eq(:name)
217
+ end
218
+
219
+ it "automatically adds the inverse class name" do
220
+ metadata.inverse_class_name.should eq("TestClass")
221
+ end
222
+ end
223
+ end
224
+
225
+ context "when setting validate to false" do
226
+
227
+ before do
228
+ klass.embeds_one(:name, validate: false)
229
+ end
230
+
231
+ it "does not add associated validations" do
232
+ klass._validators.should be_empty
233
+ end
234
+ end
235
+ end
236
+
237
+ describe ".belongs_to" do
238
+
239
+ it "defines the macro" do
240
+ klass.should respond_to(:belongs_to)
241
+ end
242
+
243
+ context "when the relation is polymorphic" do
244
+
245
+ context "when indexed is true" do
246
+
247
+ before do
248
+ klass.belongs_to(:relatable, polymorphic: true, index: true)
249
+ end
250
+
251
+ let(:indexes) do
252
+ klass.index_options
253
+ end
254
+
255
+ it "adds the background index to the definitions" do
256
+ expect(indexes).to eq({ relatable_id: 1, relatable_type: 1 } => { background: true })
257
+ end
258
+ end
259
+ end
260
+
261
+ context "when defining the relation" do
262
+
263
+ before do
264
+ klass.belongs_to(:person)
265
+ end
266
+
267
+ it "adds the metadata to the klass" do
268
+ klass.relations["person"].should_not be_nil
269
+ end
270
+
271
+ it "defines the getter" do
272
+ klass.allocate.should respond_to(:person)
273
+ end
274
+
275
+ it "defines the setter" do
276
+ klass.allocate.should respond_to(:person=)
277
+ end
278
+
279
+ it "defines the builder" do
280
+ klass.allocate.should respond_to(:build_person)
281
+ end
282
+
283
+ it "defines the creator" do
284
+ klass.allocate.should respond_to(:create_person)
285
+ end
286
+
287
+ it "creates the correct relation" do
288
+ klass.relations["person"].relation.should eq(
289
+ Mongoid::Relations::Referenced::In
290
+ )
291
+ end
292
+
293
+ it "creates the field for the foreign key" do
294
+ klass.allocate.should respond_to(:person_id)
295
+ end
296
+
297
+ context "metadata properties" do
298
+
299
+ let(:metadata) do
300
+ klass.relations["person"]
301
+ end
302
+
303
+ it "automatically adds the name" do
304
+ metadata.name.should eq(:person)
305
+ end
306
+
307
+ it "automatically adds the inverse class name" do
308
+ metadata.inverse_class_name.should eq("TestClass")
309
+ end
310
+ end
311
+ end
312
+ end
313
+
314
+ describe ".has_many" do
315
+
316
+ it "defines the macro" do
317
+ klass.should respond_to(:has_many)
318
+ end
319
+
320
+ context "when defining the relation" do
321
+
322
+ before do
323
+ klass.has_many(:posts)
324
+ end
325
+
326
+ it "adds the metadata to the klass" do
327
+ klass.relations["posts"].should_not be_nil
328
+ end
329
+
330
+ it "defines the getter" do
331
+ klass.allocate.should respond_to(:posts)
332
+ end
333
+
334
+ it "defines the setter" do
335
+ klass.allocate.should respond_to(:posts=)
336
+ end
337
+
338
+ it "creates the correct relation" do
339
+ klass.relations["posts"].relation.should eq(
340
+ Mongoid::Relations::Referenced::Many
341
+ )
342
+ end
343
+
344
+ it "adds an associated validation" do
345
+ klass._validators[:posts].first.should be_a(
346
+ Mongoid::Validations::AssociatedValidator
347
+ )
348
+ end
349
+
350
+ context "metadata properties" do
351
+
352
+ let(:metadata) do
353
+ klass.relations["posts"]
354
+ end
355
+
356
+ it "automatically adds the name" do
357
+ metadata.name.should eq(:posts)
358
+ end
359
+
360
+ it "automatically adds the inverse class name" do
361
+ metadata.inverse_class_name.should eq("TestClass")
362
+ end
363
+ end
364
+ end
365
+
366
+ context 'when defining order on relation' do
367
+
368
+ before do
369
+ klass.has_many(:posts, order: :rating.asc)
370
+ end
371
+
372
+ let(:metadata) do
373
+ klass.relations["posts"]
374
+ end
375
+
376
+ it "adds metadata to klass" do
377
+ metadata.order.should_not be_nil
378
+ end
379
+
380
+ it "returns Origin::Key" do
381
+ metadata.order.should be_kind_of(Origin::Key)
382
+ end
383
+ end
384
+
385
+ context "when setting validate to false" do
386
+
387
+ before do
388
+ klass.has_many(:posts, validate: false)
389
+ end
390
+
391
+ it "does not add associated validations" do
392
+ klass._validators.should be_empty
393
+ end
394
+ end
395
+ end
396
+
397
+ describe ".has_and_belongs_to_many" do
398
+
399
+ it "defines the macro" do
400
+ klass.should respond_to(:has_and_belongs_to_many)
401
+ end
402
+
403
+ context "when defining the relation" do
404
+
405
+ before do
406
+ klass.has_and_belongs_to_many(:preferences)
407
+ end
408
+
409
+ it "adds the metadata to the klass" do
410
+ klass.relations["preferences"].should_not be_nil
411
+ end
412
+
413
+ it "defines the getter" do
414
+ klass.allocate.should respond_to(:preferences)
415
+ end
416
+
417
+ it "defines the setter" do
418
+ klass.allocate.should respond_to(:preferences=)
419
+ end
420
+
421
+ it "creates the correct relation" do
422
+ klass.relations["preferences"].relation.should eq(
423
+ Mongoid::Relations::Referenced::ManyToMany
424
+ )
425
+ end
426
+
427
+ it "creates the field for the foreign key" do
428
+ klass.allocate.should respond_to(:preference_ids)
429
+ end
430
+
431
+ context 'when defining order on relation' do
432
+
433
+ before do
434
+ klass.has_and_belongs_to_many(:preferences, order: :ranking.asc)
435
+ end
436
+
437
+ let(:metadata) do
438
+ klass.relations["preferences"]
439
+ end
440
+
441
+ it "adds metadata to klass" do
442
+ metadata.order.should_not be_nil
443
+ end
444
+
445
+ it "returns Origin::Key" do
446
+ metadata.order.should be_kind_of(Origin::Key)
447
+ end
448
+ end
449
+
450
+ context "metadata properties" do
451
+
452
+ let(:metadata) do
453
+ klass.relations["preferences"]
454
+ end
455
+
456
+ it "automatically adds the name" do
457
+ metadata.name.should eq(:preferences)
458
+ end
459
+
460
+ it "automatically adds the inverse class name" do
461
+ metadata.inverse_class_name.should eq("TestClass")
462
+ end
463
+ end
464
+ end
465
+ end
466
+
467
+ describe ".has_one" do
468
+
469
+ it "defines the macro" do
470
+ klass.should respond_to(:has_one)
471
+ end
472
+
473
+ context "when defining the relation" do
474
+
475
+ before do
476
+ klass.has_one(:game)
477
+ end
478
+
479
+ it "adds the metadata to the klass" do
480
+ klass.relations["game"].should_not be_nil
481
+ end
482
+
483
+ it "defines the getter" do
484
+ klass.allocate.should respond_to(:game)
485
+ end
486
+
487
+ it "defines the setter" do
488
+ klass.allocate.should respond_to(:game=)
489
+ end
490
+
491
+ it "defines the builder" do
492
+ klass.allocate.should respond_to(:build_game)
493
+ end
494
+
495
+ it "defines the creator" do
496
+ klass.allocate.should respond_to(:create_game)
497
+ end
498
+
499
+ it "creates the correct relation" do
500
+ klass.relations["game"].relation.should eq(
501
+ Mongoid::Relations::Referenced::One
502
+ )
503
+ end
504
+
505
+ it "adds an associated validation" do
506
+ klass._validators[:game].first.should be_a(
507
+ Mongoid::Validations::AssociatedValidator
508
+ )
509
+ end
510
+
511
+ context "metadata properties" do
512
+
513
+ let(:metadata) do
514
+ klass.relations["game"]
515
+ end
516
+
517
+ it "automatically adds the name" do
518
+ metadata.name.should eq(:game)
519
+ end
520
+
521
+ it "automatically adds the inverse class name" do
522
+ metadata.inverse_class_name.should eq("TestClass")
523
+ end
524
+ end
525
+ end
526
+
527
+ context "when setting validate to false" do
528
+
529
+ before do
530
+ klass.has_one(:game, validate: false)
531
+ end
532
+
533
+ it "does not add associated validations" do
534
+ klass._validators.should be_empty
535
+ end
536
+ end
537
+ end
538
+
539
+ describe "#relations" do
540
+
541
+ before do
542
+ klass.embeds_one(:name)
543
+ end
544
+
545
+ it "returns a hash of relations" do
546
+ klass.allocate.relations.should be_a_kind_of(Hash)
547
+ end
548
+
549
+ it "has keys that are the relation name" do
550
+ klass.allocate.relations.keys.first.should eq("name")
551
+ end
552
+
553
+ it "has values that are metadata" do
554
+ klass.allocate.relations.values.first.should
555
+ be_a_kind_of(Mongoid::Relations::Metadata)
556
+ end
557
+ end
558
+
559
+ describe ".relations" do
560
+
561
+ before do
562
+ klass.embeds_one(:name)
563
+ end
564
+
565
+ it "returns a hash of relations" do
566
+ klass.relations.should be_a_kind_of(Hash)
567
+ end
568
+
569
+ it "has keys that are the relation name" do
570
+ klass.relations.keys.first.should eq("name")
571
+ end
572
+
573
+ it "has values that are metadata" do
574
+ klass.relations.values.first.should
575
+ be_a_kind_of(Mongoid::Relations::Metadata)
576
+ end
577
+ end
578
+
579
+ context "when creating an association with an extension" do
580
+
581
+ class Peep
582
+ include Mongoid::Document
583
+ end
584
+
585
+ class Handle
586
+ include Mongoid::Document
587
+
588
+ module Extension
589
+ def short_name
590
+ "spec"
591
+ end
592
+ end
593
+ end
594
+
595
+ let(:peep) do
596
+ Peep.new(handle: Handle.new)
597
+ end
598
+
599
+ context "when the extension is a block" do
600
+
601
+ before do
602
+ Peep.embeds_one(:handle) do
603
+ def full_name
604
+ "spec"
605
+ end
606
+ end
607
+ end
608
+
609
+ it "extends the relation" do
610
+ peep.handle.full_name.should eq("spec")
611
+ end
612
+ end
613
+
614
+ context "when the extension is a module" do
615
+
616
+ before do
617
+ Peep.embeds_one(:handle, extend: Handle::Extension)
618
+ end
619
+
620
+ it "extends the relation" do
621
+ peep.handle.short_name.should eq("spec")
622
+ end
623
+ end
624
+ end
625
+ end