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,101 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Relations::Reflections 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
+ end
16
+
17
+ describe ".reflect_on_association" do
18
+
19
+ before do
20
+ klass.embeds_many(:addresses)
21
+ end
22
+
23
+ context "when the name exists" do
24
+
25
+ let(:relation) do
26
+ klass.reflect_on_association(:addresses)
27
+ end
28
+
29
+ it "returns the association metadata" do
30
+ relation.macro.should eq(:embeds_many)
31
+ end
32
+ end
33
+
34
+ context "when the name does not exist" do
35
+
36
+ let(:relation) do
37
+ klass.reflect_on_association(:nonexistant)
38
+ end
39
+
40
+ it "returns nil" do
41
+ relation.should be_nil
42
+ end
43
+ end
44
+ end
45
+
46
+ describe ".reflect_on_all_associations" do
47
+
48
+ context "when relations exist for the macros" do
49
+
50
+ before do
51
+ klass.embeds_one(:name)
52
+ klass.embeds_many(:addresses)
53
+ klass.has_one(:user)
54
+ end
55
+
56
+ context "when passing multiple arguments" do
57
+
58
+ let(:relations) do
59
+ klass.reflect_on_all_associations(:embeds_one, :has_one)
60
+ end
61
+
62
+ it "returns an array of the relations" do
63
+ relations.size.should eq(2)
64
+ end
65
+ end
66
+
67
+ context "when passing a single argument" do
68
+
69
+ let(:relations) do
70
+ klass.reflect_on_all_associations(:embeds_one)
71
+ end
72
+
73
+ it "returns an array of the relations" do
74
+ relations.size.should eq(1)
75
+ end
76
+ end
77
+ end
78
+
79
+ context "when no relations exist for the macros" do
80
+
81
+ let(:relations) do
82
+ klass.reflect_on_all_associations(:embeds_one)
83
+ end
84
+
85
+ it "returns an empty array" do
86
+ relations.should be_empty
87
+ end
88
+ end
89
+
90
+ context "when no argument supplied" do
91
+
92
+ let(:relations) do
93
+ klass.reflect_on_all_associations
94
+ end
95
+
96
+ it "returns an empty array" do
97
+ relations.should be_empty
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,453 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Relations::Synchronization do
4
+
5
+ before(:all) do
6
+ Mongoid.raise_not_found_error = true
7
+ Person.synced(Person.relations["preferences"])
8
+ end
9
+
10
+ after(:all) do
11
+ Person.reset_callbacks(:save)
12
+ Person.reset_callbacks(:destroy)
13
+ end
14
+
15
+ describe ".update_inverse_keys" do
16
+
17
+ let(:agent) do
18
+ Agent.create!
19
+ end
20
+
21
+ let(:user) do
22
+ User.create!
23
+ end
24
+
25
+ let(:person) do
26
+ Person.create!
27
+ end
28
+
29
+ context "when an unpersisted account is created" do
30
+
31
+ let(:account) do
32
+ Account.new do |a|
33
+ a.name = "testing"
34
+ a.creator = user
35
+ a.person = person
36
+ end
37
+ end
38
+
39
+ it "has persisted :agent" do
40
+ agent.persisted?.should be_true
41
+ end
42
+
43
+ it "has persisted :user" do
44
+ user.persisted?.should be_true
45
+ end
46
+
47
+ it "has persisted :person" do
48
+ person.persisted?.should be_true
49
+ end
50
+
51
+ it "does not have persisted :account" do
52
+ account.persisted?.should be_false
53
+ end
54
+
55
+ it "has instantiated a .valid? :account" do
56
+ account.valid?
57
+ account.valid?.should be_true
58
+ end
59
+
60
+ context "and is Persisted" do
61
+
62
+ it "is able to :save" do
63
+ account.save.should be_true
64
+ end
65
+ end
66
+
67
+ context "check for existing Agent, then Persisted" do
68
+
69
+ before do
70
+ account.agents.where(_id: agent.id).exists?
71
+ end
72
+
73
+ it "is able to :save" do
74
+ account.save.should be_true
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ context "when the inverse of is nil" do
81
+
82
+ let(:preference) do
83
+ Preference.new(name: "test")
84
+ end
85
+
86
+ let(:article) do
87
+ Article.new
88
+ end
89
+
90
+ before do
91
+ article.preferences << preference
92
+ end
93
+
94
+ it "does not attempt synchronization" do
95
+ expect { article.save }.to_not raise_error(TypeError)
96
+ end
97
+
98
+ it "sets the one side of the relation" do
99
+ article.preferences.should eq([ preference ])
100
+ end
101
+ end
102
+
103
+ context "when first setting by the relation itself" do
104
+
105
+ let!(:person) do
106
+ Person.create
107
+ end
108
+
109
+ let!(:one) do
110
+ Preference.create(name: "one")
111
+ end
112
+
113
+ before do
114
+ person.preferences << one
115
+ end
116
+
117
+ it "sets the inverse foreign key" do
118
+ one.person_ids.should eq([ person.id ])
119
+ end
120
+
121
+ it "resets the synced flag" do
122
+ person.synced["preference_ids"].should be_false
123
+ end
124
+
125
+ context "when subsequently setting with keys" do
126
+
127
+ let!(:two) do
128
+ Preference.create(name: "two")
129
+ end
130
+
131
+ before do
132
+ person.preference_ids << two.id
133
+ person.save
134
+ end
135
+
136
+ it "sets the inverse foreign key" do
137
+ two.reload.person_ids.should eq([ person.id ])
138
+ end
139
+ end
140
+ end
141
+
142
+ context "when setting new ids" do
143
+
144
+ let!(:person) do
145
+ Person.create
146
+ end
147
+
148
+ let!(:one) do
149
+ Preference.create(name: "one")
150
+ end
151
+
152
+ let!(:two) do
153
+ Preference.create(name: "two")
154
+ end
155
+
156
+ before do
157
+ person.preference_ids = [ one.id, two.id ]
158
+ end
159
+
160
+ it "sets the foreign_key" do
161
+ person.preference_ids.should eq([ one.id, two.id ])
162
+ end
163
+
164
+ it "does not set the first inverse key" do
165
+ one.reload.person_ids.should be_empty
166
+ end
167
+
168
+ it "does not set the second inverse key" do
169
+ two.reload.person_ids.should be_empty
170
+ end
171
+
172
+ context "when saving the base" do
173
+
174
+ context "when validation passes" do
175
+
176
+ before do
177
+ person.save
178
+ end
179
+
180
+ it "persists the foreign_key" do
181
+ person.reload.preference_ids.should eq([ one.id, two.id ])
182
+ end
183
+
184
+ it "sets the first inverse key" do
185
+ one.reload.person_ids.should eq([ person.id ])
186
+ end
187
+
188
+ it "sets the second inverse key" do
189
+ two.reload.person_ids.should eq([ person.id ])
190
+ end
191
+ end
192
+ end
193
+ end
194
+
195
+ context "when replacing ids" do
196
+
197
+ let!(:one) do
198
+ Preference.create(name: "one")
199
+ end
200
+
201
+ let!(:two) do
202
+ Preference.create(name: "two")
203
+ end
204
+
205
+ let!(:person) do
206
+ Person.create(preference_ids: [ one.id, two.id ])
207
+ end
208
+
209
+ let!(:three) do
210
+ Preference.create(name: "three")
211
+ end
212
+
213
+ before do
214
+ person.preference_ids = [ three.id ]
215
+ end
216
+
217
+ it "sets the foreign_key" do
218
+ person.preference_ids.should eq([ three.id ])
219
+ end
220
+
221
+ it "does not remove the first inverse key" do
222
+ one.reload.person_ids.should eq([ person.id ])
223
+ end
224
+
225
+ it "does not remove the second inverse key" do
226
+ two.reload.person_ids.should eq([ person.id ])
227
+ end
228
+
229
+ it "does not set the third inverse key" do
230
+ three.reload.person_ids.should be_empty
231
+ end
232
+
233
+ context "when saving the base" do
234
+
235
+ context "when validation passes" do
236
+
237
+ before do
238
+ person.save
239
+ end
240
+
241
+ it "persists the foreign_key" do
242
+ person.reload.preference_ids.should eq([ three.id ])
243
+ end
244
+
245
+ it "removes the first inverse key" do
246
+ one.reload.person_ids.should be_empty
247
+ end
248
+
249
+ it "removes the second inverse key" do
250
+ two.reload.person_ids.should be_empty
251
+ end
252
+
253
+ it "sets the third inverse key" do
254
+ three.reload.person_ids.should eq([ person.id ])
255
+ end
256
+ end
257
+ end
258
+ end
259
+
260
+ context "when setting ids to empty" do
261
+
262
+ let!(:one) do
263
+ Preference.create(name: "one")
264
+ end
265
+
266
+ let!(:two) do
267
+ Preference.create(name: "two")
268
+ end
269
+
270
+ let!(:person) do
271
+ Person.create(preference_ids: [ one.id, two.id ])
272
+ end
273
+
274
+ before do
275
+ person.preference_ids = []
276
+ end
277
+
278
+ it "sets the foreign_key" do
279
+ person.preference_ids.should be_empty
280
+ end
281
+
282
+ it "does not remove the first inverse key" do
283
+ one.reload.person_ids.should eq([ person.id ])
284
+ end
285
+
286
+ it "does not remove the second inverse key" do
287
+ two.reload.person_ids.should eq([ person.id ])
288
+ end
289
+
290
+ context "when saving the base" do
291
+
292
+ context "when validation passes" do
293
+
294
+ before do
295
+ person.save
296
+ end
297
+
298
+ it "persists the foreign_key" do
299
+ person.reload.preference_ids.should be_empty
300
+ end
301
+
302
+ it "removes the first inverse key" do
303
+ one.reload.person_ids.should be_empty
304
+ end
305
+
306
+ it "removes the second inverse key" do
307
+ two.reload.person_ids.should be_empty
308
+ end
309
+ end
310
+ end
311
+ end
312
+
313
+ context "when setting ids to nil" do
314
+
315
+ let!(:one) do
316
+ Preference.create(name: "one")
317
+ end
318
+
319
+ let!(:two) do
320
+ Preference.create(name: "two")
321
+ end
322
+
323
+ let!(:person) do
324
+ Person.create(preference_ids: [ one.id, two.id ])
325
+ end
326
+
327
+ before do
328
+ person.preference_ids = nil
329
+ end
330
+
331
+ it "sets the foreign_key" do
332
+ person.preference_ids.should be_empty
333
+ end
334
+
335
+ it "does not remove the first inverse key" do
336
+ one.reload.person_ids.should eq([ person.id ])
337
+ end
338
+
339
+ it "does not remove the second inverse key" do
340
+ two.reload.person_ids.should eq([ person.id ])
341
+ end
342
+
343
+ context "when saving the base" do
344
+
345
+ context "when validation passes" do
346
+
347
+ before do
348
+ person.save
349
+ end
350
+
351
+ it "persists the foreign_key" do
352
+ person.reload.preference_ids.should be_empty
353
+ end
354
+
355
+ it "removes the first inverse key" do
356
+ one.reload.person_ids.should be_empty
357
+ end
358
+
359
+ it "removes the second inverse key" do
360
+ two.reload.person_ids.should be_empty
361
+ end
362
+ end
363
+ end
364
+ end
365
+
366
+ context "when destroying" do
367
+
368
+ let!(:one) do
369
+ Preference.create(name: "one")
370
+ end
371
+
372
+ let!(:two) do
373
+ Preference.create(name: "two")
374
+ end
375
+
376
+ let!(:person) do
377
+ Person.create(preferences: [ one, two ])
378
+ end
379
+
380
+ context "when destroying the parent" do
381
+
382
+ before do
383
+ person.destroy
384
+ end
385
+
386
+ it "removes the first inverse key" do
387
+ one.reload.person_ids.should be_empty
388
+ end
389
+
390
+ it "removes the second inverse key" do
391
+ two.reload.person_ids.should be_empty
392
+ end
393
+ end
394
+
395
+ context "when destroying the child" do
396
+
397
+ before do
398
+ one.destroy
399
+ end
400
+
401
+ it "removes the inverse key" do
402
+ person.reload.preference_ids.should eq([ two.id ])
403
+ end
404
+ end
405
+ end
406
+
407
+ context "when appending an existing document to a new one" do
408
+
409
+ let!(:peristed) do
410
+ Tag.create
411
+ end
412
+
413
+ let(:article) do
414
+ Article.new
415
+ end
416
+
417
+ before do
418
+ article.tags << Tag.first
419
+ article.save
420
+ end
421
+
422
+ let(:tag) do
423
+ Tag.first
424
+ end
425
+
426
+ it "persists the foreign key on the inverse" do
427
+ tag.article_ids.should eq([ article.id ])
428
+ end
429
+
430
+ it "persists the inverse relation" do
431
+ tag.articles.should eq([ article ])
432
+ end
433
+ end
434
+
435
+ context "when the document has an ordering default scope" do
436
+
437
+ let!(:dog) do
438
+ Dog.create(name: "Fido")
439
+ end
440
+
441
+ let!(:breed) do
442
+ Breed.new(dog_ids: [ dog.id ])
443
+ end
444
+
445
+ before do
446
+ breed.save
447
+ end
448
+
449
+ it "adds the id to the inverse relation" do
450
+ dog.reload.breed_ids.should eq([ breed.id ])
451
+ end
452
+ end
453
+ end