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,525 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Contextual::Atomic do
4
+
5
+ describe "#add_to_set" do
6
+
7
+ let!(:depeche_mode) do
8
+ Band.create(members: [ "Dave" ])
9
+ end
10
+
11
+ let!(:new_order) do
12
+ Band.create(members: [ "Peter" ])
13
+ end
14
+
15
+ let!(:smiths) do
16
+ Band.create
17
+ end
18
+
19
+ context "when the criteria has no sorting" do
20
+
21
+ let(:criteria) do
22
+ Band.all
23
+ end
24
+
25
+ let(:context) do
26
+ Mongoid::Contextual::Mongo.new(criteria)
27
+ end
28
+
29
+ before do
30
+ context.add_to_set(:members, "Dave")
31
+ end
32
+
33
+ it "does not add duplicates" do
34
+ depeche_mode.reload.members.should eq([ "Dave" ])
35
+ end
36
+
37
+ it "adds unique values" do
38
+ new_order.reload.members.should eq([ "Peter", "Dave" ])
39
+ end
40
+
41
+ it "adds to non initialized fields" do
42
+ smiths.reload.members.should eq([ "Dave" ])
43
+ end
44
+ end
45
+
46
+ context "when the criteria has sorting" do
47
+
48
+ let(:criteria) do
49
+ Band.asc(:name)
50
+ end
51
+
52
+ let(:context) do
53
+ Mongoid::Contextual::Mongo.new(criteria)
54
+ end
55
+
56
+ before do
57
+ context.add_to_set(:members, "Dave")
58
+ end
59
+
60
+ it "does not add duplicates" do
61
+ depeche_mode.reload.members.should eq([ "Dave" ])
62
+ end
63
+
64
+ it "adds unique values" do
65
+ new_order.reload.members.should eq([ "Peter", "Dave" ])
66
+ end
67
+
68
+ it "adds to non initialized fields" do
69
+ smiths.reload.members.should eq([ "Dave" ])
70
+ end
71
+ end
72
+ end
73
+
74
+ describe "#bit" do
75
+
76
+ let!(:depeche_mode) do
77
+ Band.create(likes: 60)
78
+ end
79
+
80
+ let!(:smiths) do
81
+ Band.create
82
+ end
83
+
84
+ let(:criteria) do
85
+ Band.all
86
+ end
87
+
88
+ let(:context) do
89
+ Mongoid::Contextual::Mongo.new(criteria)
90
+ end
91
+
92
+ context "when performing a bitwise and" do
93
+
94
+ before do
95
+ context.bit(:likes, { and: 13 })
96
+ end
97
+
98
+ it "performs the bitwise operation on initialized fields" do
99
+ depeche_mode.reload.likes.should eq(12)
100
+ end
101
+
102
+ it "does not error on non initialized fields" do
103
+ smiths.reload.likes.should be_nil
104
+ end
105
+ end
106
+
107
+ context "when performing a bitwise or" do
108
+
109
+ before do
110
+ context.bit(:likes, { or: 13 })
111
+ end
112
+
113
+ it "performs the bitwise operation on initialized fields" do
114
+ depeche_mode.reload.likes.should eq(61)
115
+ end
116
+
117
+ it "does not error on non initialized fields" do
118
+ smiths.reload.likes.should be_nil
119
+ end
120
+ end
121
+
122
+ context "when chaining bitwise operations" do
123
+
124
+ before do
125
+ context.bit(:likes, { and: 13, or: 10 })
126
+ end
127
+
128
+ it "performs the bitwise operation on initialized fields" do
129
+ depeche_mode.reload.likes.should eq(14)
130
+ end
131
+
132
+ it "does not error on non initialized fields" do
133
+ smiths.reload.likes.should be_nil
134
+ end
135
+ end
136
+ end
137
+
138
+ describe "#inc" do
139
+
140
+ let!(:depeche_mode) do
141
+ Band.create(likes: 60)
142
+ end
143
+
144
+ let!(:smiths) do
145
+ Band.create
146
+ end
147
+
148
+ let!(:beatles) do
149
+ Band.create(years: 2)
150
+ end
151
+
152
+ let(:criteria) do
153
+ Band.all
154
+ end
155
+
156
+ let(:context) do
157
+ Mongoid::Contextual::Mongo.new(criteria)
158
+ end
159
+
160
+ before do
161
+ context.inc(:likes, 10)
162
+ end
163
+
164
+ context "when the field exists" do
165
+
166
+ it "incs the value" do
167
+ depeche_mode.reload.likes.should eq(70)
168
+ end
169
+ end
170
+
171
+ context "when the field does not exist" do
172
+
173
+ it "does not error on the inc" do
174
+ smiths.likes.should be_nil
175
+ end
176
+ end
177
+
178
+ context "when using the alias" do
179
+
180
+ before do
181
+ context.inc(:years, 1)
182
+ end
183
+
184
+ it "incs the value and read from alias" do
185
+ beatles.reload.years.should eq(3)
186
+ end
187
+
188
+ it "incs the value and read from field" do
189
+ beatles.reload.y.should eq(3)
190
+ end
191
+ end
192
+ end
193
+
194
+ describe "#pop" do
195
+
196
+ let!(:depeche_mode) do
197
+ Band.create(members: [ "Dave", "Martin" ])
198
+ end
199
+
200
+ let!(:smiths) do
201
+ Band.create
202
+ end
203
+
204
+ let(:criteria) do
205
+ Band.all
206
+ end
207
+
208
+ let(:context) do
209
+ Mongoid::Contextual::Mongo.new(criteria)
210
+ end
211
+
212
+ context "when popping from the front" do
213
+
214
+ before do
215
+ context.pop(:members, -1)
216
+ end
217
+
218
+ it "pops the first element off the array" do
219
+ depeche_mode.reload.members.should eq([ "Martin" ])
220
+ end
221
+
222
+ it "does not error on uninitialized fields" do
223
+ smiths.reload.members.should be_nil
224
+ end
225
+ end
226
+
227
+ context "when popping from the rear" do
228
+
229
+ before do
230
+ context.pop(:members, 1)
231
+ end
232
+
233
+ it "pops the last element off the array" do
234
+ depeche_mode.reload.members.should eq([ "Dave" ])
235
+ end
236
+
237
+ it "does not error on uninitialized fields" do
238
+ smiths.reload.members.should be_nil
239
+ end
240
+ end
241
+ end
242
+
243
+ describe "#pull" do
244
+
245
+ let!(:depeche_mode) do
246
+ Band.create(members: [ "Dave", "Alan" ])
247
+ end
248
+
249
+ let!(:smiths) do
250
+ Band.create
251
+ end
252
+
253
+ let(:criteria) do
254
+ Band.all
255
+ end
256
+
257
+ let(:context) do
258
+ Mongoid::Contextual::Mongo.new(criteria)
259
+ end
260
+
261
+ before do
262
+ context.pull(:members, "Alan")
263
+ end
264
+
265
+ it "pulls when the value is found" do
266
+ depeche_mode.reload.members.should eq([ "Dave" ])
267
+ end
268
+
269
+ it "does not error on non existant fields" do
270
+ smiths.reload.members.should be_nil
271
+ end
272
+ end
273
+
274
+ describe "#pull_all" do
275
+
276
+ let!(:depeche_mode) do
277
+ Band.create(members: [ "Dave", "Alan", "Fletch" ])
278
+ end
279
+
280
+ let!(:smiths) do
281
+ Band.create
282
+ end
283
+
284
+ let(:criteria) do
285
+ Band.all
286
+ end
287
+
288
+ let(:context) do
289
+ Mongoid::Contextual::Mongo.new(criteria)
290
+ end
291
+
292
+ before do
293
+ context.pull_all(:members, [ "Alan", "Dave" ])
294
+ end
295
+
296
+ it "pulls when the values are found" do
297
+ depeche_mode.reload.members.should eq([ "Fletch" ])
298
+ end
299
+
300
+ it "does not error on non existant fields" do
301
+ smiths.reload.members.should be_nil
302
+ end
303
+ end
304
+
305
+ describe "#push" do
306
+
307
+ let!(:depeche_mode) do
308
+ Band.create(members: [ "Dave" ])
309
+ end
310
+
311
+ let!(:smiths) do
312
+ Band.create
313
+ end
314
+
315
+ let(:criteria) do
316
+ Band.all
317
+ end
318
+
319
+ let(:context) do
320
+ Mongoid::Contextual::Mongo.new(criteria)
321
+ end
322
+
323
+ before do
324
+ context.push(:members, "Alan")
325
+ end
326
+
327
+ it "pushes the value to existing arrays" do
328
+ depeche_mode.reload.members.should eq([ "Dave", "Alan" ])
329
+ end
330
+
331
+ it "pushes to non existant fields" do
332
+ smiths.reload.members.should eq([ "Alan" ])
333
+ end
334
+ end
335
+
336
+ describe "#push_all" do
337
+
338
+ let!(:depeche_mode) do
339
+ Band.create(members: [ "Dave" ])
340
+ end
341
+
342
+ let!(:smiths) do
343
+ Band.create
344
+ end
345
+
346
+ let(:criteria) do
347
+ Band.all
348
+ end
349
+
350
+ let(:context) do
351
+ Mongoid::Contextual::Mongo.new(criteria)
352
+ end
353
+
354
+ before do
355
+ context.push_all(:members, [ "Alan", "Fletch" ])
356
+ end
357
+
358
+ it "pushes the values to existing arrays" do
359
+ depeche_mode.reload.members.should eq([ "Dave", "Alan", "Fletch" ])
360
+ end
361
+
362
+ it "pushes to non existant fields" do
363
+ smiths.reload.members.should eq([ "Alan", "Fletch" ])
364
+ end
365
+ end
366
+
367
+ describe "#rename" do
368
+
369
+ let!(:depeche_mode) do
370
+ Band.create(members: [ "Dave" ])
371
+ end
372
+
373
+ let!(:smiths) do
374
+ Band.create
375
+ end
376
+
377
+ let(:criteria) do
378
+ Band.all
379
+ end
380
+
381
+ let(:context) do
382
+ Mongoid::Contextual::Mongo.new(criteria)
383
+ end
384
+
385
+ before do
386
+ context.rename(:members, :artists)
387
+ end
388
+
389
+ it "renames existing fields" do
390
+ depeche_mode.reload.artists.should eq([ "Dave" ])
391
+ end
392
+
393
+ it "does not rename non existant fields" do
394
+ smiths.reload.should_not respond_to(:artists)
395
+ end
396
+ end
397
+
398
+ describe "#set" do
399
+
400
+ let!(:depeche_mode) do
401
+ Band.create(name: "Depeche Mode")
402
+ end
403
+
404
+ let!(:smiths) do
405
+ Band.create
406
+ end
407
+
408
+ let(:criteria) do
409
+ Band.all
410
+ end
411
+
412
+ let(:context) do
413
+ Mongoid::Contextual::Mongo.new(criteria)
414
+ end
415
+
416
+ before do
417
+ context.set(:name, "Recoil")
418
+ end
419
+
420
+ it "sets existing fields" do
421
+ depeche_mode.reload.name.should eq("Recoil")
422
+ end
423
+
424
+ it "sets non existant fields" do
425
+ smiths.reload.name.should eq("Recoil")
426
+ end
427
+ end
428
+
429
+ describe "#unset" do
430
+
431
+ context "when unsetting a single field" do
432
+
433
+ let!(:depeche_mode) do
434
+ Band.create(name: "Depeche Mode", years: 10)
435
+ end
436
+
437
+ let!(:new_order) do
438
+ Band.create(name: "New Order", years: 10)
439
+ end
440
+
441
+ let(:criteria) do
442
+ Band.all
443
+ end
444
+
445
+ let(:context) do
446
+ Mongoid::Contextual::Mongo.new(criteria)
447
+ end
448
+
449
+ context "when the field is not aliased" do
450
+
451
+ before do
452
+ context.unset(:name)
453
+ end
454
+
455
+ it "unsets the first existing field" do
456
+ depeche_mode.reload.name.should be_nil
457
+ end
458
+
459
+ it "unsets the last existing field" do
460
+ new_order.reload.name.should be_nil
461
+ end
462
+ end
463
+
464
+ context "when the field is aliased" do
465
+
466
+ before do
467
+ context.unset(:years)
468
+ end
469
+
470
+ it "unsets the first existing field" do
471
+ depeche_mode.reload.years.should be_nil
472
+ end
473
+
474
+ it "unsets the last existing field" do
475
+ new_order.reload.years.should be_nil
476
+ end
477
+ end
478
+ end
479
+
480
+ context "when unsetting multiple fields" do
481
+
482
+ let!(:new_order) do
483
+ Band.create(name: "New Order", genres: [ "electro", "dub" ], years: 10)
484
+ end
485
+
486
+ let(:criteria) do
487
+ Band.all
488
+ end
489
+
490
+ let(:context) do
491
+ Mongoid::Contextual::Mongo.new(criteria)
492
+ end
493
+
494
+ context "when the field is not aliased" do
495
+
496
+ before do
497
+ context.unset(:name, :genres)
498
+ end
499
+
500
+ it "unsets name field" do
501
+ new_order.reload.name.should be_nil
502
+ end
503
+
504
+ it "unsets genres field" do
505
+ new_order.reload.genres.should be_nil
506
+ end
507
+ end
508
+
509
+ context "when the field is aliased" do
510
+
511
+ before do
512
+ context.unset(:name, :years)
513
+ end
514
+
515
+ it "unsets the unaliased field" do
516
+ new_order.reload.name.should be_nil
517
+ end
518
+
519
+ it "unsets the aliased field" do
520
+ new_order.reload.years.should be_nil
521
+ end
522
+ end
523
+ end
524
+ end
525
+ end