mongoid 3.1.4 → 3.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/lib/mongoid/contextual.rb +3 -0
  4. data/lib/mongoid/criteria.rb +10 -2
  5. data/lib/mongoid/document.rb +1 -1
  6. data/lib/mongoid/paranoia.rb +4 -0
  7. data/lib/mongoid/persistence/upsertion.rb +1 -0
  8. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +16 -2
  9. data/lib/mongoid/relations/macros.rb +1 -1
  10. data/lib/mongoid/relations/one.rb +12 -0
  11. data/lib/mongoid/relations/referenced/in.rb +18 -1
  12. data/lib/mongoid/relations/referenced/many_to_many.rb +2 -2
  13. data/lib/mongoid/validations.rb +1 -1
  14. data/lib/mongoid/validations/localizable.rb +1 -1
  15. data/lib/mongoid/validations/presence.rb +1 -1
  16. data/lib/mongoid/validations/uniqueness.rb +1 -1
  17. data/lib/mongoid/version.rb +1 -1
  18. data/lib/support/ruby_version.rb +1 -1
  19. data/spec/app/models/account.rb +32 -0
  20. data/spec/app/models/acolyte.rb +16 -0
  21. data/spec/app/models/actor.rb +19 -0
  22. data/spec/app/models/actor_observer.rb +15 -0
  23. data/spec/app/models/actress.rb +2 -0
  24. data/spec/app/models/address.rb +72 -0
  25. data/spec/app/models/address_component.rb +5 -0
  26. data/spec/app/models/address_number.rb +6 -0
  27. data/spec/app/models/agency.rb +5 -0
  28. data/spec/app/models/agent.rb +12 -0
  29. data/spec/app/models/album.rb +14 -0
  30. data/spec/app/models/alert.rb +5 -0
  31. data/spec/app/models/animal.rb +25 -0
  32. data/spec/app/models/answer.rb +4 -0
  33. data/spec/app/models/appointment.rb +7 -0
  34. data/spec/app/models/article.rb +13 -0
  35. data/spec/app/models/artist.rb +66 -0
  36. data/spec/app/models/artwork.rb +4 -0
  37. data/spec/app/models/augmentation.rb +11 -0
  38. data/spec/app/models/author.rb +6 -0
  39. data/spec/app/models/band.rb +25 -0
  40. data/spec/app/models/bar.rb +9 -0
  41. data/spec/app/models/basic.rb +6 -0
  42. data/spec/app/models/bed.rb +1 -0
  43. data/spec/app/models/big_palette.rb +2 -0
  44. data/spec/app/models/birthday.rb +13 -0
  45. data/spec/app/models/book.rb +12 -0
  46. data/spec/app/models/breed.rb +4 -0
  47. data/spec/app/models/browser.rb +6 -0
  48. data/spec/app/models/building.rb +7 -0
  49. data/spec/app/models/building_address.rb +7 -0
  50. data/spec/app/models/bus.rb +7 -0
  51. data/spec/app/models/business.rb +5 -0
  52. data/spec/app/models/callback_recorder.rb +25 -0
  53. data/spec/app/models/callback_test.rb +9 -0
  54. data/spec/app/models/canvas.rb +25 -0
  55. data/spec/app/models/car.rb +1 -0
  56. data/spec/app/models/cat.rb +8 -0
  57. data/spec/app/models/category.rb +8 -0
  58. data/spec/app/models/child.rb +4 -0
  59. data/spec/app/models/child_doc.rb +22 -0
  60. data/spec/app/models/church.rb +4 -0
  61. data/spec/app/models/circle.rb +3 -0
  62. data/spec/app/models/circuit.rb +4 -0
  63. data/spec/app/models/circus.rb +7 -0
  64. data/spec/app/models/code.rb +5 -0
  65. data/spec/app/models/comment.rb +16 -0
  66. data/spec/app/models/contractor.rb +7 -0
  67. data/spec/app/models/cookie.rb +6 -0
  68. data/spec/app/models/country_code.rb +8 -0
  69. data/spec/app/models/definition.rb +8 -0
  70. data/spec/app/models/description.rb +11 -0
  71. data/spec/app/models/dictionary.rb +10 -0
  72. data/spec/app/models/division.rb +10 -0
  73. data/spec/app/models/doctor.rb +12 -0
  74. data/spec/app/models/dog.rb +7 -0
  75. data/spec/app/models/dokument.rb +5 -0
  76. data/spec/app/models/driver.rb +7 -0
  77. data/spec/app/models/drug.rb +8 -0
  78. data/spec/app/models/email.rb +6 -0
  79. data/spec/app/models/employer.rb +5 -0
  80. data/spec/app/models/entry.rb +6 -0
  81. data/spec/app/models/eraser.rb +1 -0
  82. data/spec/app/models/event.rb +22 -0
  83. data/spec/app/models/exhibition.rb +4 -0
  84. data/spec/app/models/exhibitor.rb +5 -0
  85. data/spec/app/models/eye.rb +9 -0
  86. data/spec/app/models/eye_bowl.rb +9 -0
  87. data/spec/app/models/face.rb +8 -0
  88. data/spec/app/models/favorite.rb +6 -0
  89. data/spec/app/models/filesystem.rb +4 -0
  90. data/spec/app/models/fire_hydrant.rb +6 -0
  91. data/spec/app/models/firefox.rb +4 -0
  92. data/spec/app/models/fish.rb +8 -0
  93. data/spec/app/models/folder.rb +7 -0
  94. data/spec/app/models/folder_item.rb +9 -0
  95. data/spec/app/models/fruits.rb +28 -0
  96. data/spec/app/models/game.rb +21 -0
  97. data/spec/app/models/ghost.rb +7 -0
  98. data/spec/app/models/home.rb +4 -0
  99. data/spec/app/models/house.rb +8 -0
  100. data/spec/app/models/html_writer.rb +3 -0
  101. data/spec/app/models/image.rb +22 -0
  102. data/spec/app/models/implant.rb +16 -0
  103. data/spec/app/models/item.rb +12 -0
  104. data/spec/app/models/jar.rb +7 -0
  105. data/spec/app/models/label.rb +40 -0
  106. data/spec/app/models/language.rb +5 -0
  107. data/spec/app/models/lat_lng.rb +15 -0
  108. data/spec/app/models/league.rb +11 -0
  109. data/spec/app/models/learner.rb +2 -0
  110. data/spec/app/models/line_item.rb +6 -0
  111. data/spec/app/models/location.rb +8 -0
  112. data/spec/app/models/login.rb +8 -0
  113. data/spec/app/models/manufacturer.rb +7 -0
  114. data/spec/app/models/meat.rb +4 -0
  115. data/spec/app/models/membership.rb +4 -0
  116. data/spec/app/models/mixed_drink.rb +4 -0
  117. data/spec/app/models/movie.rb +12 -0
  118. data/spec/app/models/my_hash.rb +2 -0
  119. data/spec/app/models/name.rb +23 -0
  120. data/spec/app/models/node.rb +5 -0
  121. data/spec/app/models/note.rb +12 -0
  122. data/spec/app/models/ordered_post.rb +6 -0
  123. data/spec/app/models/ordered_preference.rb +6 -0
  124. data/spec/app/models/oscar.rb +15 -0
  125. data/spec/app/models/override.rb +16 -0
  126. data/spec/app/models/ownable.rb +6 -0
  127. data/spec/app/models/owner.rb +6 -0
  128. data/spec/app/models/pack.rb +3 -0
  129. data/spec/app/models/page.rb +5 -0
  130. data/spec/app/models/page_question.rb +4 -0
  131. data/spec/app/models/palette.rb +7 -0
  132. data/spec/app/models/paranoid_phone.rb +25 -0
  133. data/spec/app/models/paranoid_post.rb +36 -0
  134. data/spec/app/models/parent.rb +5 -0
  135. data/spec/app/models/parent_doc.rb +6 -0
  136. data/spec/app/models/passport.rb +5 -0
  137. data/spec/app/models/patient.rb +9 -0
  138. data/spec/app/models/pdf_writer.rb +3 -0
  139. data/spec/app/models/pencil.rb +1 -0
  140. data/spec/app/models/person.rb +201 -0
  141. data/spec/app/models/pet.rb +23 -0
  142. data/spec/app/models/pet_owner.rb +6 -0
  143. data/spec/app/models/phone.rb +11 -0
  144. data/spec/app/models/phone_observer.rb +6 -0
  145. data/spec/app/models/pizza.rb +7 -0
  146. data/spec/app/models/player.rb +35 -0
  147. data/spec/app/models/post.rb +43 -0
  148. data/spec/app/models/powerup.rb +11 -0
  149. data/spec/app/models/preference.rb +9 -0
  150. data/spec/app/models/princess.rb +8 -0
  151. data/spec/app/models/product.rb +17 -0
  152. data/spec/app/models/profile.rb +5 -0
  153. data/spec/app/models/pronunciation.rb +5 -0
  154. data/spec/app/models/purchase.rb +4 -0
  155. data/spec/app/models/question.rb +8 -0
  156. data/spec/app/models/quiz.rb +10 -0
  157. data/spec/app/models/rating.rb +8 -0
  158. data/spec/app/models/record.rb +46 -0
  159. data/spec/app/models/registry.rb +4 -0
  160. data/spec/app/models/role.rb +7 -0
  161. data/spec/app/models/root_category.rb +4 -0
  162. data/spec/app/models/sandwich.rb +4 -0
  163. data/spec/app/models/scheduler.rb +7 -0
  164. data/spec/app/models/seo.rb +7 -0
  165. data/spec/app/models/series.rb +4 -0
  166. data/spec/app/models/server.rb +13 -0
  167. data/spec/app/models/service.rb +22 -0
  168. data/spec/app/models/shape.rb +12 -0
  169. data/spec/app/models/shelf.rb +5 -0
  170. data/spec/app/models/shipping_container.rb +5 -0
  171. data/spec/app/models/shipping_pack.rb +3 -0
  172. data/spec/app/models/shop.rb +6 -0
  173. data/spec/app/models/short_agent.rb +4 -0
  174. data/spec/app/models/short_quiz.rb +5 -0
  175. data/spec/app/models/slave.rb +6 -0
  176. data/spec/app/models/song.rb +8 -0
  177. data/spec/app/models/square.rb +4 -0
  178. data/spec/app/models/strategy.rb +3 -0
  179. data/spec/app/models/sub_item.rb +3 -0
  180. data/spec/app/models/subscription.rb +4 -0
  181. data/spec/app/models/survey.rb +5 -0
  182. data/spec/app/models/symptom.rb +6 -0
  183. data/spec/app/models/tag.rb +8 -0
  184. data/spec/app/models/target.rb +5 -0
  185. data/spec/app/models/template.rb +5 -0
  186. data/spec/app/models/thing.rb +9 -0
  187. data/spec/app/models/title.rb +4 -0
  188. data/spec/app/models/tool.rb +8 -0
  189. data/spec/app/models/topping.rb +5 -0
  190. data/spec/app/models/track.rb +38 -0
  191. data/spec/app/models/translation.rb +5 -0
  192. data/spec/app/models/tree.rb +9 -0
  193. data/spec/app/models/truck.rb +3 -0
  194. data/spec/app/models/user.rb +21 -0
  195. data/spec/app/models/user_account.rb +10 -0
  196. data/spec/app/models/validation_callback.rb +10 -0
  197. data/spec/app/models/vehicle.rb +11 -0
  198. data/spec/app/models/version.rb +5 -0
  199. data/spec/app/models/vet_visit.rb +5 -0
  200. data/spec/app/models/video.rb +17 -0
  201. data/spec/app/models/video_game.rb +1 -0
  202. data/spec/app/models/weapon.rb +11 -0
  203. data/spec/app/models/wiki_page.rb +17 -0
  204. data/spec/app/models/word.rb +12 -0
  205. data/spec/app/models/word_origin.rb +11 -0
  206. data/spec/app/models/writer.rb +11 -0
  207. data/spec/config/mongoid.yml +40 -0
  208. data/spec/mongoid/atomic/modifiers_spec.rb +456 -0
  209. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +159 -0
  210. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +152 -0
  211. data/spec/mongoid/atomic/paths/root_spec.rb +106 -0
  212. data/spec/mongoid/atomic/paths_spec.rb +270 -0
  213. data/spec/mongoid/atomic/positionable_spec.rb +227 -0
  214. data/spec/mongoid/atomic_spec.rb +365 -0
  215. data/spec/mongoid/attributes/processing_spec.rb +149 -0
  216. data/spec/mongoid/attributes/readonly_spec.rb +169 -0
  217. data/spec/mongoid/attributes_spec.rb +1705 -0
  218. data/spec/mongoid/callbacks_spec.rb +1564 -0
  219. data/spec/mongoid/components_spec.rb +24 -0
  220. data/spec/mongoid/config/environment_spec.rb +83 -0
  221. data/spec/mongoid/config/options_spec.rb +56 -0
  222. data/spec/mongoid/config_spec.rb +334 -0
  223. data/spec/mongoid/contextual/aggregable/memory_spec.rb +293 -0
  224. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +455 -0
  225. data/spec/mongoid/contextual/atomic_spec.rb +525 -0
  226. data/spec/mongoid/contextual/find_and_modify_spec.rb +220 -0
  227. data/spec/mongoid/contextual/geo_near_spec.rb +405 -0
  228. data/spec/mongoid/contextual/map_reduce_spec.rb +464 -0
  229. data/spec/mongoid/contextual/memory_spec.rb +1236 -0
  230. data/spec/mongoid/contextual/mongo_spec.rb +1757 -0
  231. data/spec/mongoid/copyable_spec.rb +393 -0
  232. data/spec/mongoid/criteria_spec.rb +5140 -0
  233. data/spec/mongoid/criterion/destructive_spec.rb +101 -0
  234. data/spec/mongoid/criterion/inspection_spec.rb +27 -0
  235. data/spec/mongoid/criterion/marshalable_spec.rb +28 -0
  236. data/spec/mongoid/criterion/modifiable_spec.rb +409 -0
  237. data/spec/mongoid/criterion/modification_spec.rb +402 -0
  238. data/spec/mongoid/criterion/scoping_spec.rb +391 -0
  239. data/spec/mongoid/dirty_spec.rb +1508 -0
  240. data/spec/mongoid/document_spec.rb +1146 -0
  241. data/spec/mongoid/equality_spec.rb +241 -0
  242. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +29 -0
  243. data/spec/mongoid/errors/callback_spec.rb +29 -0
  244. data/spec/mongoid/errors/delete_restriction_spec.rb +29 -0
  245. data/spec/mongoid/errors/document_not_found_spec.rb +104 -0
  246. data/spec/mongoid/errors/eager_load_spec.rb +29 -0
  247. data/spec/mongoid/errors/invalid_collection_spec.rb +36 -0
  248. data/spec/mongoid/errors/invalid_config_option_spec.rb +29 -0
  249. data/spec/mongoid/errors/invalid_field_option_spec.rb +29 -0
  250. data/spec/mongoid/errors/invalid_field_spec.rb +37 -0
  251. data/spec/mongoid/errors/invalid_find_spec.rb +29 -0
  252. data/spec/mongoid/errors/invalid_includes_spec.rb +40 -0
  253. data/spec/mongoid/errors/invalid_index_spec.rb +29 -0
  254. data/spec/mongoid/errors/invalid_options_spec.rb +29 -0
  255. data/spec/mongoid/errors/invalid_path_spec.rb +23 -0
  256. data/spec/mongoid/errors/invalid_scope_spec.rb +29 -0
  257. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +17 -0
  258. data/spec/mongoid/errors/invalid_storage_options_spec.rb +29 -0
  259. data/spec/mongoid/errors/invalid_time_spec.rb +29 -0
  260. data/spec/mongoid/errors/inverse_not_found_spec.rb +29 -0
  261. data/spec/mongoid/errors/mixed_relations_spec.rb +29 -0
  262. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +29 -0
  263. data/spec/mongoid/errors/mongoid_error_spec.rb +48 -0
  264. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +29 -0
  265. data/spec/mongoid/errors/no_environment_spec.rb +29 -0
  266. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +29 -0
  267. data/spec/mongoid/errors/no_metadata_spec.rb +23 -0
  268. data/spec/mongoid/errors/no_parent_spec.rb +29 -0
  269. data/spec/mongoid/errors/no_session_config_spec.rb +29 -0
  270. data/spec/mongoid/errors/no_session_database_spec.rb +29 -0
  271. data/spec/mongoid/errors/no_session_hosts_spec.rb +29 -0
  272. data/spec/mongoid/errors/no_sessions_config_spec.rb +29 -0
  273. data/spec/mongoid/errors/readonly_attribute_spec.rb +29 -0
  274. data/spec/mongoid/errors/scope_overwrite_spec.rb +29 -0
  275. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +29 -0
  276. data/spec/mongoid/errors/unknown_attribute_spec.rb +29 -0
  277. data/spec/mongoid/errors/unsaved_document_spec.rb +37 -0
  278. data/spec/mongoid/errors/unsupported_javascript_spec.rb +29 -0
  279. data/spec/mongoid/errors/validations_spec.rb +45 -0
  280. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +29 -0
  281. data/spec/mongoid/extensions/array_spec.rb +638 -0
  282. data/spec/mongoid/extensions/big_decimal_spec.rb +104 -0
  283. data/spec/mongoid/extensions/binary_spec.rb +60 -0
  284. data/spec/mongoid/extensions/boolean_spec.rb +135 -0
  285. data/spec/mongoid/extensions/date_spec.rb +235 -0
  286. data/spec/mongoid/extensions/date_time_spec.rb +155 -0
  287. data/spec/mongoid/extensions/false_class_spec.rb +42 -0
  288. data/spec/mongoid/extensions/float_spec.rb +133 -0
  289. data/spec/mongoid/extensions/hash_spec.rb +333 -0
  290. data/spec/mongoid/extensions/integer_spec.rb +136 -0
  291. data/spec/mongoid/extensions/module_spec.rb +42 -0
  292. data/spec/mongoid/extensions/nil_class_spec.rb +11 -0
  293. data/spec/mongoid/extensions/object_id_spec.rb +946 -0
  294. data/spec/mongoid/extensions/object_spec.rb +292 -0
  295. data/spec/mongoid/extensions/range_spec.rb +105 -0
  296. data/spec/mongoid/extensions/regexp_spec.rb +47 -0
  297. data/spec/mongoid/extensions/set_spec.rb +33 -0
  298. data/spec/mongoid/extensions/string_spec.rb +368 -0
  299. data/spec/mongoid/extensions/symbol_spec.rb +76 -0
  300. data/spec/mongoid/extensions/time_spec.rb +467 -0
  301. data/spec/mongoid/extensions/time_with_zone_spec.rb +405 -0
  302. data/spec/mongoid/extensions/true_class_spec.rb +42 -0
  303. data/spec/mongoid/factory_spec.rb +185 -0
  304. data/spec/mongoid/fields/foreign_key_spec.rb +694 -0
  305. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +184 -0
  306. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +201 -0
  307. data/spec/mongoid/fields/localized_spec.rb +386 -0
  308. data/spec/mongoid/fields/standard_spec.rb +166 -0
  309. data/spec/mongoid/fields_spec.rb +1253 -0
  310. data/spec/mongoid/finders_spec.rb +321 -0
  311. data/spec/mongoid/hierarchy_spec.rb +244 -0
  312. data/spec/mongoid/identity_map_spec.rb +564 -0
  313. data/spec/mongoid/indexes_spec.rb +404 -0
  314. data/spec/mongoid/inspection_spec.rb +57 -0
  315. data/spec/mongoid/json_spec.rb +33 -0
  316. data/spec/mongoid/loggable_spec.rb +21 -0
  317. data/spec/mongoid/matchers/all_spec.rb +31 -0
  318. data/spec/mongoid/matchers/and_spec.rb +162 -0
  319. data/spec/mongoid/matchers/default_spec.rb +130 -0
  320. data/spec/mongoid/matchers/exists_spec.rb +57 -0
  321. data/spec/mongoid/matchers/gt_spec.rb +74 -0
  322. data/spec/mongoid/matchers/gte_spec.rb +74 -0
  323. data/spec/mongoid/matchers/in_spec.rb +25 -0
  324. data/spec/mongoid/matchers/lt_spec.rb +74 -0
  325. data/spec/mongoid/matchers/lte_spec.rb +74 -0
  326. data/spec/mongoid/matchers/ne_spec.rb +25 -0
  327. data/spec/mongoid/matchers/nin_spec.rb +25 -0
  328. data/spec/mongoid/matchers/or_spec.rb +106 -0
  329. data/spec/mongoid/matchers/size_spec.rb +25 -0
  330. data/spec/mongoid/matchers_spec.rb +532 -0
  331. data/spec/mongoid/multi_parameter_attributes_spec.rb +128 -0
  332. data/spec/mongoid/nested_attributes_spec.rb +4945 -0
  333. data/spec/mongoid/observer_spec.rb +290 -0
  334. data/spec/mongoid/paranoia_spec.rb +759 -0
  335. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +262 -0
  336. data/spec/mongoid/persistence/atomic/bit_spec.rb +88 -0
  337. data/spec/mongoid/persistence/atomic/inc_spec.rb +133 -0
  338. data/spec/mongoid/persistence/atomic/pop_spec.rb +111 -0
  339. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +77 -0
  340. data/spec/mongoid/persistence/atomic/pull_spec.rb +80 -0
  341. data/spec/mongoid/persistence/atomic/push_all_spec.rb +77 -0
  342. data/spec/mongoid/persistence/atomic/push_spec.rb +77 -0
  343. data/spec/mongoid/persistence/atomic/rename_spec.rb +42 -0
  344. data/spec/mongoid/persistence/atomic/sets_spec.rb +154 -0
  345. data/spec/mongoid/persistence/atomic/unset_spec.rb +65 -0
  346. data/spec/mongoid/persistence/atomic_spec.rb +216 -0
  347. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +191 -0
  348. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +8 -0
  349. data/spec/mongoid/persistence/operations/insert_spec.rb +149 -0
  350. data/spec/mongoid/persistence/operations/remove_spec.rb +113 -0
  351. data/spec/mongoid/persistence/operations/update_spec.rb +141 -0
  352. data/spec/mongoid/persistence/operations/upsert_spec.rb +59 -0
  353. data/spec/mongoid/persistence/operations_spec.rb +313 -0
  354. data/spec/mongoid/persistence_spec.rb +2279 -0
  355. data/spec/mongoid/railties/document_spec.rb +24 -0
  356. data/spec/mongoid/relations/accessors_spec.rb +844 -0
  357. data/spec/mongoid/relations/auto_save_spec.rb +261 -0
  358. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +171 -0
  359. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +54 -0
  360. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +77 -0
  361. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +241 -0
  362. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +153 -0
  363. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +178 -0
  364. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +131 -0
  365. data/spec/mongoid/relations/builders/embedded/in_spec.rb +34 -0
  366. data/spec/mongoid/relations/builders/embedded/many_spec.rb +132 -0
  367. data/spec/mongoid/relations/builders/embedded/one_spec.rb +99 -0
  368. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +234 -0
  369. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +250 -0
  370. data/spec/mongoid/relations/builders/referenced/in_spec.rb +241 -0
  371. data/spec/mongoid/relations/builders/referenced/many_spec.rb +137 -0
  372. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +178 -0
  373. data/spec/mongoid/relations/builders/referenced/one_spec.rb +124 -0
  374. data/spec/mongoid/relations/builders_spec.rb +226 -0
  375. data/spec/mongoid/relations/cascading/delete_spec.rb +101 -0
  376. data/spec/mongoid/relations/cascading/destroy_spec.rb +47 -0
  377. data/spec/mongoid/relations/cascading/nullify_spec.rb +32 -0
  378. data/spec/mongoid/relations/cascading/restrict_spec.rb +68 -0
  379. data/spec/mongoid/relations/cascading_spec.rb +355 -0
  380. data/spec/mongoid/relations/constraint_spec.rb +74 -0
  381. data/spec/mongoid/relations/conversions_spec.rb +126 -0
  382. data/spec/mongoid/relations/counter_cache_spec.rb +205 -0
  383. data/spec/mongoid/relations/cyclic_spec.rb +156 -0
  384. data/spec/mongoid/relations/embedded/dirty_spec.rb +65 -0
  385. data/spec/mongoid/relations/embedded/in_spec.rb +580 -0
  386. data/spec/mongoid/relations/embedded/many_spec.rb +3841 -0
  387. data/spec/mongoid/relations/embedded/one_spec.rb +1055 -0
  388. data/spec/mongoid/relations/macros_spec.rb +625 -0
  389. data/spec/mongoid/relations/metadata_spec.rb +2030 -0
  390. data/spec/mongoid/relations/options_spec.rb +35 -0
  391. data/spec/mongoid/relations/polymorphic_spec.rb +132 -0
  392. data/spec/mongoid/relations/proxy_spec.rb +48 -0
  393. data/spec/mongoid/relations/referenced/in_spec.rb +1501 -0
  394. data/spec/mongoid/relations/referenced/many_spec.rb +3632 -0
  395. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +3561 -0
  396. data/spec/mongoid/relations/referenced/one_spec.rb +1331 -0
  397. data/spec/mongoid/relations/reflections_spec.rb +101 -0
  398. data/spec/mongoid/relations/synchronization_spec.rb +453 -0
  399. data/spec/mongoid/relations/targets/enumerable_spec.rb +1710 -0
  400. data/spec/mongoid/relations_spec.rb +188 -0
  401. data/spec/mongoid/reloading_spec.rb +305 -0
  402. data/spec/mongoid/scoping_spec.rb +978 -0
  403. data/spec/mongoid/serialization_spec.rb +833 -0
  404. data/spec/mongoid/sessions/factory_spec.rb +312 -0
  405. data/spec/mongoid/sessions/mongo_uri_spec.rb +103 -0
  406. data/spec/mongoid/sessions_spec.rb +1111 -0
  407. data/spec/mongoid/sharding_spec.rb +61 -0
  408. data/spec/mongoid/state_spec.rb +102 -0
  409. data/spec/mongoid/threaded_spec.rb +296 -0
  410. data/spec/mongoid/timestamps/created/short_spec.rb +51 -0
  411. data/spec/mongoid/timestamps/created_spec.rb +44 -0
  412. data/spec/mongoid/timestamps/timeless_spec.rb +130 -0
  413. data/spec/mongoid/timestamps/updated/short_spec.rb +90 -0
  414. data/spec/mongoid/timestamps/updated_spec.rb +86 -0
  415. data/spec/mongoid/timestamps_spec.rb +112 -0
  416. data/spec/mongoid/unit_of_work_spec.rb +196 -0
  417. data/spec/mongoid/validations/associated_spec.rb +183 -0
  418. data/spec/mongoid/validations/format_spec.rb +83 -0
  419. data/spec/mongoid/validations/length_spec.rb +223 -0
  420. data/spec/mongoid/validations/numericality_spec.rb +30 -0
  421. data/spec/mongoid/validations/presence_spec.rb +592 -0
  422. data/spec/mongoid/validations/uniqueness_spec.rb +2399 -0
  423. data/spec/mongoid/validations_spec.rb +309 -0
  424. data/spec/mongoid/versioning_spec.rb +540 -0
  425. data/spec/mongoid_spec.rb +74 -0
  426. data/spec/rack/mongoid/middleware/identity_map_spec.rb +72 -0
  427. data/spec/rails/mongoid_spec.rb +462 -0
  428. data/spec/spec_helper.rb +93 -0
  429. metadata +826 -6
@@ -0,0 +1,74 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Relations::Constraint do
4
+
5
+ describe "#convert" do
6
+
7
+ context "when the id's class stores object ids" do
8
+
9
+ before(:all) do
10
+ Person.field(
11
+ :_id,
12
+ type: Moped::BSON::ObjectId,
13
+ pre_processed: true,
14
+ default: ->{ Moped::BSON::ObjectId.new }
15
+ )
16
+ end
17
+
18
+ let(:metadata) do
19
+ Mongoid::Relations::Metadata.new(
20
+ class_name: "Person",
21
+ name: :person,
22
+ inverse_class_name: "Post",
23
+ relation: Mongoid::Relations::Referenced::In
24
+ )
25
+ end
26
+
27
+ let(:constraint) do
28
+ described_class.new(metadata)
29
+ end
30
+
31
+ context "when provided an object id" do
32
+
33
+ let(:object) do
34
+ Moped::BSON::ObjectId.new
35
+ end
36
+
37
+ it "returns the object id" do
38
+ constraint.convert(object).should eq(object)
39
+ end
40
+ end
41
+
42
+ context "when provided a string" do
43
+
44
+ let(:object) do
45
+ Moped::BSON::ObjectId.new
46
+ end
47
+
48
+ it "returns an object id from the string" do
49
+ constraint.convert(object.to_s).should eq(object)
50
+ end
51
+ end
52
+ end
53
+
54
+ context "when the id's class does not store object ids" do
55
+
56
+ let(:metadata) do
57
+ Mongoid::Relations::Metadata.new(
58
+ class_name: "Account",
59
+ name: :account,
60
+ inverse_class_name: "Alert",
61
+ relation: Mongoid::Relations::Referenced::In
62
+ )
63
+ end
64
+
65
+ let(:constraint) do
66
+ described_class.new(metadata)
67
+ end
68
+
69
+ it "returns the object" do
70
+ constraint.convert("testing").should eq("testing")
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,126 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Relations::Conversions do
4
+
5
+ describe ".flag" do
6
+
7
+ context "when the inverse uses object ids" do
8
+
9
+ let(:metadata) do
10
+ Person.relations["game"]
11
+ end
12
+
13
+ let(:object) do
14
+ Moped::BSON::ObjectId.new
15
+ end
16
+
17
+ let(:flagged) do
18
+ described_class.flag(object, metadata)
19
+ end
20
+
21
+ it "returns the object" do
22
+ flagged.should eq(object)
23
+ end
24
+ end
25
+
26
+ context "when the inverse uses string ids" do
27
+
28
+ before do
29
+ Person.field(
30
+ :_id,
31
+ type: String,
32
+ pre_processed: true,
33
+ default: ->{ Moped::BSON::ObjectId.new.to_s }
34
+ )
35
+ end
36
+
37
+ after do
38
+ Person.field(
39
+ :_id,
40
+ type: Moped::BSON::ObjectId,
41
+ pre_processed: true,
42
+ default: ->{ Moped::BSON::ObjectId.new }
43
+ )
44
+ end
45
+
46
+ let(:metadata) do
47
+ Person.relations["game"]
48
+ end
49
+
50
+ context "when provided an object id" do
51
+
52
+ let(:object) do
53
+ Moped::BSON::ObjectId.new
54
+ end
55
+
56
+ let(:flagged) do
57
+ described_class.flag(object, metadata)
58
+ end
59
+
60
+ it "returns the object id" do
61
+ flagged.should eq(object)
62
+ end
63
+ end
64
+
65
+ context "when provided a string" do
66
+
67
+ let(:object) do
68
+ Moped::BSON::ObjectId.new.to_s
69
+ end
70
+
71
+ let(:flagged) do
72
+ described_class.flag(object, metadata)
73
+ end
74
+
75
+ it "returns the string" do
76
+ flagged.should eq(object)
77
+ end
78
+
79
+ it "marks the string as unconvertable" do
80
+ flagged.should be_unconvertable_to_bson
81
+ end
82
+ end
83
+ end
84
+
85
+ context "when the inverse uses integer ids" do
86
+
87
+ let(:metadata) do
88
+ Jar.relations["cookies"]
89
+ end
90
+
91
+ context "when provided an object id" do
92
+
93
+ let(:object) do
94
+ Moped::BSON::ObjectId.new
95
+ end
96
+
97
+ let(:flagged) do
98
+ described_class.flag(object, metadata)
99
+ end
100
+
101
+ it "returns the object id" do
102
+ flagged.should eq(object)
103
+ end
104
+ end
105
+
106
+ context "when provided an integer" do
107
+
108
+ let(:object) do
109
+ 15
110
+ end
111
+
112
+ let(:flagged) do
113
+ described_class.flag(object, metadata)
114
+ end
115
+
116
+ it "returns the integer" do
117
+ flagged.should eq(15)
118
+ end
119
+
120
+ it "marks the integer as unconvertable" do
121
+ flagged.should be_unconvertable_to_bson
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,205 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Relations::CounterCache do
4
+
5
+ describe "#reset_counters" do
6
+
7
+ context "when counter is reset" do
8
+
9
+ let(:person) do
10
+ Person.create do |person|
11
+ person[:drugs_count] = 3
12
+ end
13
+ end
14
+
15
+ before do
16
+ Person.reset_counters person.id, :drugs
17
+ end
18
+
19
+ it "returns zero" do
20
+ expect(person.reload.drugs_count).to eq(0)
21
+ end
22
+ end
23
+
24
+ context "when counter is reset with wrong id" do
25
+
26
+ it "expect to raise an error" do
27
+ expect {
28
+ Person.reset_counters "1", :drugs
29
+ }.to raise_error
30
+ end
31
+ end
32
+
33
+ context "when reset with invalid name" do
34
+
35
+ let(:person) do
36
+ Person.create
37
+ end
38
+
39
+ it "expect to raise an error" do
40
+ expect {
41
+ Person.reset_counters person.id, :not_exist
42
+ }.to raise_error
43
+ end
44
+ end
45
+
46
+ context "when counter gets messy" do
47
+
48
+ let(:person) do
49
+ Person.create
50
+ end
51
+
52
+ let!(:post) do
53
+ person.posts.create(title: "my first post")
54
+ end
55
+
56
+ before do
57
+ Person.update_counters(person.id, :posts_count => 10)
58
+ Person.reset_counters(person.id, :posts)
59
+ end
60
+
61
+ it "resets to the right value" do
62
+ expect(person.reload.posts_count).to eq(1)
63
+ end
64
+ end
65
+
66
+ context "when the counter is on a subclass" do
67
+
68
+ let(:subscription) do
69
+ Subscription.create
70
+ end
71
+
72
+ let!(:pack) do
73
+ subscription.packs.create
74
+ end
75
+
76
+ before do
77
+ Subscription.reset_counters(subscription.id, :packs)
78
+ end
79
+
80
+ it "resets the appropriate counter" do
81
+ expect(subscription.reload[:packs_count]).to eq(1)
82
+ end
83
+ end
84
+ end
85
+
86
+ describe "#update_counters" do
87
+
88
+ context "when was 3 " do
89
+
90
+ let(:person) do
91
+ Person.create do |person|
92
+ person[:drugs_count] = 3
93
+ end
94
+ end
95
+
96
+ context "and update counter with 5" do
97
+
98
+ before do
99
+ Person.update_counters person.id, :drugs_count => 5
100
+ end
101
+
102
+ it "return 8" do
103
+ expect(person.reload.drugs_count).to eq(8)
104
+ end
105
+ end
106
+
107
+ context "and update counter with -5" do
108
+
109
+ before do
110
+ Person.update_counters person.id, :drugs_count => -5
111
+ end
112
+
113
+ it "return -2" do
114
+ expect(person.reload.drugs_count).to eq(-2)
115
+ end
116
+ end
117
+ end
118
+ context "when update with 2 and use a string argument" do
119
+
120
+ let(:person) { Person.create }
121
+
122
+ before do
123
+ Person.update_counters person.id, "drugs_count" => 2
124
+ end
125
+
126
+ it "returns 2" do
127
+ expect(person.reload.drugs_count).to eq(2)
128
+ end
129
+ end
130
+
131
+ context "when update more multiple counters" do
132
+
133
+ let(:person) { Person.create }
134
+
135
+ before do
136
+ Person.update_counters(person.id, :drugs_count => 2, :second_counter => 5)
137
+ end
138
+
139
+ it "updates drugs_counter" do
140
+ expect(person.reload.drugs_count).to eq(2)
141
+ end
142
+
143
+ it "updates second_counter" do
144
+ expect(person.reload.second_counter).to eq(5)
145
+ end
146
+ end
147
+ end
148
+
149
+ describe "#increment_counter" do
150
+
151
+ let(:person) { Person.create }
152
+
153
+ context "when increment 3 times" do
154
+
155
+ before do
156
+ 3.times { Person.increment_counter(:drugs_count, person.id) }
157
+ end
158
+
159
+ it "returns 3" do
160
+ expect(person.reload.drugs_count).to eq(3)
161
+ end
162
+ end
163
+
164
+ context "when increment 3 times using string as argument" do
165
+
166
+ before do
167
+ 3.times { Person.increment_counter("drugs_count", person.id) }
168
+ end
169
+
170
+ it "returns 3" do
171
+ expect(person.reload.drugs_count).to eq(3)
172
+ end
173
+ end
174
+ end
175
+
176
+ describe "#decrement_counter" do
177
+
178
+ let(:person) do
179
+ Person.create do |p|
180
+ p[:drugs_count] = 3
181
+ end
182
+ end
183
+
184
+ context "when decrement 3 times" do
185
+
186
+ before do
187
+ 3.times { Person.decrement_counter(:drugs_count, person.id) }
188
+ end
189
+
190
+ it "returns 0" do
191
+ expect(person.reload.drugs_count).to eq(0)
192
+ end
193
+ end
194
+ context "when increment 3 times using string as argument" do
195
+
196
+ before do
197
+ 3.times { Person.decrement_counter("drugs_count", person.id) }
198
+ end
199
+
200
+ it "returns 0" do
201
+ expect(person.reload.drugs_count).to eq(0)
202
+ end
203
+ end
204
+ end
205
+ end
@@ -0,0 +1,156 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Relations::Cyclic do
4
+
5
+ describe ".recursively_embeds_many" do
6
+
7
+ context "when the name is inflected easily" do
8
+
9
+ let(:document) do
10
+ Role.new
11
+ end
12
+
13
+ it "creates the parent relation" do
14
+ document.should respond_to(:parent_role)
15
+ end
16
+
17
+ it "creates the child relation" do
18
+ document.should respond_to(:child_roles)
19
+ end
20
+
21
+ it "sets cyclic to true" do
22
+ document.cyclic.should be_true
23
+ end
24
+ end
25
+
26
+ context "when the name is not inflected easily" do
27
+
28
+ let(:document) do
29
+ Entry.new
30
+ end
31
+
32
+ it "creates the parent relation" do
33
+ document.should respond_to(:parent_entry)
34
+ end
35
+
36
+ it "creates the child relation" do
37
+ document.should respond_to(:child_entries)
38
+ end
39
+
40
+ it "sets cyclic to true" do
41
+ document.cyclic.should be_true
42
+ end
43
+ end
44
+
45
+ context "when the document is namespaced" do
46
+
47
+ module Trees
48
+ class Node
49
+ include Mongoid::Document
50
+ recursively_embeds_many
51
+
52
+ field :name, type: String
53
+
54
+ def is_root?
55
+ parent_node.nil?
56
+ end
57
+ end
58
+ end
59
+
60
+ let(:document) do
61
+ Trees::Node.new
62
+ end
63
+
64
+ it "creates the parent relation" do
65
+ document.should respond_to(:parent_node)
66
+ end
67
+
68
+ it "creates the child relation" do
69
+ document.should respond_to(:child_nodes)
70
+ end
71
+
72
+ it "sets cyclic to true" do
73
+ document.cyclic.should be_true
74
+ end
75
+ end
76
+
77
+ context "when the classes are namespaced" do
78
+
79
+ let(:document) do
80
+ Fruits::Apple.new
81
+ end
82
+
83
+ it "creates the parent relation" do
84
+ document.should respond_to(:parent_apple)
85
+ end
86
+
87
+ it "creates the child relation" do
88
+ document.should respond_to(:child_apples)
89
+ end
90
+
91
+ it "sets cyclic to true" do
92
+ document.cyclic.should be_true
93
+ end
94
+ end
95
+
96
+ context "when cascading callbacks are enabled" do
97
+
98
+ let(:document) do
99
+ Fruits::Pineapple.new
100
+ end
101
+
102
+ it "creates relation with cascading callbacks enabled" do
103
+ document.class.relations['child_pineapples'].should be_cascading_callbacks
104
+ end
105
+ end
106
+ end
107
+
108
+ describe ".recursively_embeds_one" do
109
+
110
+ let(:document) do
111
+ Shelf.new
112
+ end
113
+
114
+ it "creates the parent relation" do
115
+ document.should respond_to(:parent_shelf)
116
+ end
117
+
118
+ it "creates the child relation" do
119
+ document.should respond_to(:child_shelf)
120
+ end
121
+
122
+ it "sets cyclic to true" do
123
+ document.cyclic.should be_true
124
+ end
125
+
126
+ context "when cascading callbacks are enabled" do
127
+
128
+ let(:document) do
129
+ Fruits::Mango.new
130
+ end
131
+
132
+ it "creates relation with cascading callbacks enabled" do
133
+ document.class.relations['child_mango'].should be_cascading_callbacks
134
+ end
135
+ end
136
+ end
137
+
138
+ context "when building a namespaced hierarchy" do
139
+
140
+ let(:root) do
141
+ Trees::Node.new(name: "root")
142
+ end
143
+
144
+ let!(:child_one) do
145
+ root.child_nodes.build(name: "first_child")
146
+ end
147
+
148
+ let!(:child_two) do
149
+ root.child_nodes.build(name: "second_child")
150
+ end
151
+
152
+ it "sets the parent node" do
153
+ child_one.parent_node.should eq(root)
154
+ end
155
+ end
156
+ end