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,51 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Timestamps::Created::Short do
4
+
5
+ describe ".included" do
6
+
7
+ let(:quiz) do
8
+ ShortQuiz.new
9
+ end
10
+
11
+ let(:fields) do
12
+ ShortQuiz.fields
13
+ end
14
+
15
+ before do
16
+ quiz.run_callbacks(:create)
17
+ quiz.run_callbacks(:save)
18
+ end
19
+
20
+ it "adds c_at to the document" do
21
+ fields["c_at"].should_not be_nil
22
+ end
23
+
24
+ it "does not add u_at to the document" do
25
+ fields["u_at"].should be_nil
26
+ end
27
+
28
+ it "does not add the created_at to the document" do
29
+ fields["created_at"].should be_nil
30
+ end
31
+
32
+ it "forces the c_at timestamps to UTC" do
33
+ quiz.created_at.should be_within(10).of(Time.now.utc)
34
+ end
35
+ end
36
+
37
+ context "when the document is created" do
38
+
39
+ let(:quiz) do
40
+ ShortQuiz.create
41
+ end
42
+
43
+ it "runs the created callbacks" do
44
+ quiz.created_at.should be_within(10).of(Time.now.utc)
45
+ end
46
+
47
+ it "allows access via the raw field" do
48
+ quiz.c_at.should eq(quiz.created_at)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,44 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Timestamps::Created do
4
+
5
+ describe ".included" do
6
+
7
+ let(:quiz) do
8
+ Quiz.new
9
+ end
10
+
11
+ let(:fields) do
12
+ Quiz.fields
13
+ end
14
+
15
+ before do
16
+ quiz.run_callbacks(:create)
17
+ quiz.run_callbacks(:save)
18
+ end
19
+
20
+ it "adds created_at to the document" do
21
+ fields["created_at"].should_not be_nil
22
+ end
23
+
24
+ it "does not add updated_at to the document" do
25
+ fields["updated_at"].should be_nil
26
+ end
27
+
28
+ it "forces the created_at timestamps to UTC" do
29
+ quiz.created_at.should be_within(10).of(Time.now.utc)
30
+ end
31
+ end
32
+
33
+ context "when the document is created" do
34
+
35
+ let(:quiz) do
36
+ Quiz.create
37
+ end
38
+
39
+ it "runs the created callbacks" do
40
+ quiz.created_at.should_not be_nil
41
+ quiz.created_at.should be_within(10).of(Time.now.utc)
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,130 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Timestamps::Timeless do
4
+
5
+ describe "#timeless" do
6
+
7
+ before(:all) do
8
+ class Chicken
9
+ include Mongoid::Document
10
+ include Mongoid::Timestamps
11
+
12
+ before_save :lay_timeless_egg
13
+
14
+ def lay_timeless_egg
15
+ Egg.timeless.create!
16
+ end
17
+ end
18
+
19
+ class Egg
20
+ include Mongoid::Document
21
+ include Mongoid::Timestamps
22
+ end
23
+ end
24
+
25
+ after(:all) do
26
+ Object.send(:remove_const, :Chicken)
27
+ Object.send(:remove_const, :Egg)
28
+ end
29
+
30
+ context "when others persist in the scope of the chain" do
31
+
32
+ context "when the root executes normally" do
33
+
34
+ let!(:chicken) do
35
+ Chicken.create!
36
+ end
37
+
38
+ it "creates the parent with a timestamp" do
39
+ expect(chicken.created_at).to_not be_nil
40
+ end
41
+
42
+ it "creates the child with no timestamp" do
43
+ expect(Egg.last.created_at).to be_nil
44
+ end
45
+ end
46
+
47
+ context "when the root executes timeless" do
48
+
49
+ let!(:chicken) do
50
+ Chicken.timeless.create!
51
+ end
52
+
53
+ it "creates the parent with a timestamp" do
54
+ expect(chicken.created_at).to be_nil
55
+ end
56
+
57
+ it "creates the child with no timestamp" do
58
+ expect(Egg.last.created_at).to be_nil
59
+ end
60
+ end
61
+ end
62
+
63
+ context "when used as a proxy method" do
64
+
65
+ context "when used on the document instance" do
66
+
67
+ let(:document) do
68
+ Dokument.new
69
+ end
70
+
71
+ before do
72
+ document.timeless.save
73
+ end
74
+
75
+ it "does not set the created timestamp" do
76
+ document.created_at.should be_nil
77
+ end
78
+
79
+ it "does not set the updated timestamp" do
80
+ document.updated_at.should be_nil
81
+ end
82
+
83
+ it "clears out the timeless option after save" do
84
+ expect(document).to be_timestamping
85
+ end
86
+
87
+ context "when subsequently persisting" do
88
+
89
+ before do
90
+ document.update_attribute(:title, "Sir")
91
+ end
92
+
93
+ it "sets the updated timestamp" do
94
+ document.updated_at.should_not be_nil
95
+ end
96
+ end
97
+ end
98
+
99
+ context "when used on the class" do
100
+
101
+ let!(:document) do
102
+ Dokument.timeless.create
103
+ end
104
+
105
+ it "does not set the created timestamp" do
106
+ document.created_at.should be_nil
107
+ end
108
+
109
+ it "does not set the updated timestamp" do
110
+ document.updated_at.should be_nil
111
+ end
112
+
113
+ it "clears out the timeless option after save" do
114
+ expect(document).to be_timestamping
115
+ end
116
+
117
+ context "when subsequently persisting" do
118
+
119
+ before do
120
+ document.update_attribute(:title, "Sir")
121
+ end
122
+
123
+ it "sets the updated timestamp" do
124
+ document.updated_at.should_not be_nil
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,90 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Timestamps::Updated::Short do
4
+
5
+ describe ".included" do
6
+
7
+ let(:agent) do
8
+ ShortAgent.new
9
+ end
10
+
11
+ let(:fields) do
12
+ ShortAgent.fields
13
+ end
14
+
15
+ before do
16
+ agent.run_callbacks(:create)
17
+ agent.run_callbacks(:save)
18
+ end
19
+
20
+ it "does not add c_at to the document" do
21
+ fields["c_at"].should be_nil
22
+ end
23
+
24
+ it "adds u_at to the document" do
25
+ fields["u_at"].should_not be_nil
26
+ end
27
+
28
+ it "does not add the long updated_at" do
29
+ fields["updated_at"].should be_nil
30
+ end
31
+
32
+ it "forces the updated_at timestamps to UTC" do
33
+ agent.updated_at.should be_within(10).of(Time.now.utc)
34
+ end
35
+
36
+ it "aliases the raw field" do
37
+ agent.u_at.should eq(agent.updated_at)
38
+ end
39
+ end
40
+
41
+ context "when the document is new" do
42
+
43
+ context "when providing the timestamp" do
44
+
45
+ let(:time) do
46
+ Time.new(2012, 1, 1)
47
+ end
48
+
49
+ let(:doc) do
50
+ ShortAgent.create(updated_at: time)
51
+ end
52
+
53
+ it "does not override it with the default" do
54
+ doc.updated_at.should eq(time)
55
+ end
56
+
57
+ it "does not persist an auto value" do
58
+ doc.reload.updated_at.should eq(time)
59
+ end
60
+ end
61
+ end
62
+
63
+ context "when the document has not changed" do
64
+
65
+ let(:agent) do
66
+ ShortAgent.instantiate("_id" => Moped::BSON::ObjectId.new, "account_ids" => [])
67
+ end
68
+
69
+ before do
70
+ agent.new_record = false
71
+ end
72
+
73
+ it "does not run the update callbacks" do
74
+ agent.should_receive(:updated_at=).never
75
+ agent.save
76
+ end
77
+ end
78
+
79
+ context "when the document is created" do
80
+
81
+ let(:agent) do
82
+ ShortAgent.create
83
+ end
84
+
85
+ it "runs the update callbacks" do
86
+ agent.updated_at.should_not be_nil
87
+ agent.updated_at.should be_within(10).of(Time.now.utc)
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,86 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Timestamps::Updated do
4
+
5
+ describe ".included" do
6
+
7
+ let(:agent) do
8
+ Agent.new
9
+ end
10
+
11
+ let(:fields) do
12
+ Agent.fields
13
+ end
14
+
15
+ before do
16
+ agent.run_callbacks(:create)
17
+ agent.run_callbacks(:save)
18
+ end
19
+
20
+ it "does not add created_at to the document" do
21
+ fields["created_at"].should be_nil
22
+ end
23
+
24
+ it "adds updated_at to the document" do
25
+ fields["updated_at"].should_not be_nil
26
+ end
27
+
28
+ it "forces the updated_at timestamps to UTC" do
29
+ agent.updated_at.should be_within(10).of(Time.now.utc)
30
+ end
31
+
32
+ it "includes a record_timestamps class_accessor to ease AR compatibility" do
33
+ Agent.should.respond_to? :record_timestamps
34
+ end
35
+ end
36
+
37
+ context "when the document is new" do
38
+
39
+ context "when providing the timestamp" do
40
+
41
+ let(:time) do
42
+ Time.new(2012, 1, 1)
43
+ end
44
+
45
+ let(:doc) do
46
+ Dokument.create(updated_at: time)
47
+ end
48
+
49
+ it "does not override it with the default" do
50
+ doc.updated_at.should eq(time)
51
+ end
52
+
53
+ it "does not persist an auto value" do
54
+ doc.reload.updated_at.should eq(time)
55
+ end
56
+ end
57
+ end
58
+
59
+ context "when the document has not changed" do
60
+
61
+ let(:agent) do
62
+ Agent.instantiate("_id" => Moped::BSON::ObjectId.new, "account_ids" => [])
63
+ end
64
+
65
+ before do
66
+ agent.new_record = false
67
+ end
68
+
69
+ it "does not run the update callbacks" do
70
+ agent.should_receive(:updated_at=).never
71
+ agent.save
72
+ end
73
+ end
74
+
75
+ context "when the document is created" do
76
+
77
+ let(:agent) do
78
+ Agent.create
79
+ end
80
+
81
+ it "runs the update callbacks" do
82
+ agent.updated_at.should_not be_nil
83
+ agent.updated_at.should be_within(10).of(Time.now.utc)
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,112 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Timestamps do
4
+
5
+ describe ".included" do
6
+
7
+ let(:document) do
8
+ Dokument.new
9
+ end
10
+
11
+ let(:fields) do
12
+ Dokument.fields
13
+ end
14
+
15
+ before do
16
+ document.run_callbacks(:create)
17
+ document.run_callbacks(:save)
18
+ end
19
+
20
+ it "adds created_at to the document" do
21
+ fields["created_at"].should_not be_nil
22
+ end
23
+
24
+ it "adds updated_at to the document" do
25
+ fields["updated_at"].should_not be_nil
26
+ end
27
+
28
+ it "forces the created_at timestamps to UTC" do
29
+ document.created_at.should be_within(10).of(Time.now.utc)
30
+ end
31
+
32
+ it "forces the updated_at timestamps to UTC" do
33
+ document.updated_at.should be_within(10).of(Time.now.utc)
34
+ end
35
+
36
+ it "ensures created_at equals updated_at on new records" do
37
+ document.updated_at.should eq(document.created_at)
38
+ end
39
+
40
+ it "includes a record_timestamps class_accessor to ease AR compatibility" do
41
+ Dokument.should.respond_to? :record_timestamps
42
+ end
43
+ end
44
+
45
+ context "when the document has not changed" do
46
+
47
+ let(:document) do
48
+ Dokument.instantiate(Dokument.new.attributes)
49
+ end
50
+
51
+ before do
52
+ document.new_record = false
53
+ end
54
+
55
+ it "does not run the update callbacks" do
56
+ document.should_receive(:updated_at=).never
57
+ document.save
58
+ end
59
+ end
60
+
61
+ context "when the document has changed with updated_at specified" do
62
+
63
+ let(:document) do
64
+ Dokument.new(created_at: Time.now.utc)
65
+ end
66
+
67
+ before do
68
+ document.new_record = false
69
+ document.updated_at = DateTime.parse("2001-06-12")
70
+ end
71
+
72
+ it "does not set updated at" do
73
+ document.should_receive(:updated_at=).never
74
+ document.save
75
+ end
76
+ end
77
+
78
+ context "when the document is created" do
79
+
80
+ let!(:document) do
81
+ Dokument.create
82
+ end
83
+
84
+ it "runs the update callbacks" do
85
+ document.updated_at.should eq(document.created_at)
86
+ end
87
+ end
88
+
89
+ context "when only embedded documents have changed" do
90
+
91
+ let!(:document) do
92
+ Dokument.create(updated_at: 2.days.ago)
93
+ end
94
+
95
+ let!(:address) do
96
+ document.addresses.create(street: "Karl Marx Strasse")
97
+ end
98
+
99
+ let!(:updated_at) do
100
+ document.updated_at
101
+ end
102
+
103
+ before do
104
+ address.number = 1
105
+ document.save
106
+ end
107
+
108
+ it "updates the root document updated at" do
109
+ document.updated_at.should be_within(1).of(Time.now)
110
+ end
111
+ end
112
+ end