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,12 @@
1
+ class Item
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ field :is_rss, type: Boolean, default: false
5
+ field :user_login, type: String
6
+
7
+ attr_protected :title, as: [:default, :parser]
8
+ attr_protected :is_rss, as: :parser
9
+ attr_protected :user_login
10
+ end
11
+
12
+ require "app/models/sub_item"
@@ -0,0 +1,7 @@
1
+ class Jar
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps::Updated
4
+
5
+ field :_id, type: Integer
6
+ has_many :cookies, class_name: "Cookie"
7
+ end
@@ -0,0 +1,40 @@
1
+ class Label
2
+ include Mongoid::Document
3
+ include Mongoid::Timestamps::Updated::Short
4
+
5
+ field :name, type: String
6
+ field :after_create_called, type: Boolean, default: false
7
+ field :after_save_called, type: Boolean, default: false
8
+ field :after_update_called, type: Boolean, default: false
9
+ field :after_validation_called, type: Boolean, default: false
10
+
11
+ embedded_in :artist
12
+ embedded_in :band
13
+
14
+ after_create :after_create_stub
15
+ after_save :after_save_stub
16
+ after_update :after_update_stub
17
+ after_validation :after_validation_stub
18
+ before_validation :cleanup
19
+
20
+ def after_create_stub
21
+ self.after_create_called = true
22
+ end
23
+
24
+ def after_save_stub
25
+ self.after_save_called = true
26
+ end
27
+
28
+ def after_update_stub
29
+ self.after_update_called = true
30
+ end
31
+
32
+ def after_validation_stub
33
+ self.after_validation_called = true
34
+ end
35
+
36
+ private
37
+ def cleanup
38
+ self.name = self.name.downcase.capitalize
39
+ end
40
+ end
@@ -0,0 +1,5 @@
1
+ class Language
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ embedded_in :translatable, polymorphic: true
5
+ end
@@ -0,0 +1,15 @@
1
+ class LatLng
2
+ attr_accessor :lat, :lng
3
+
4
+ def self.demongoize(object)
5
+ LatLng.new(object[1], object[0])
6
+ end
7
+
8
+ def initialize(lat, lng)
9
+ @lat, @lng = lat, lng
10
+ end
11
+
12
+ def mongoize
13
+ [ lng, lat ]
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ class League
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ embeds_many :divisions
5
+ accepts_nested_attributes_for :divisions, allow_destroy: true
6
+ before_destroy :destroy_children
7
+
8
+ def destroy_children
9
+ divisions.destroy_all
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ class Learner < Driver
2
+ end
@@ -0,0 +1,6 @@
1
+ class LineItem
2
+ include Mongoid::Document
3
+ embedded_in :purchase
4
+ belongs_to :product, polymorphic: true
5
+ validates :product, presence: true
6
+ end
@@ -0,0 +1,8 @@
1
+ class Location
2
+ include Mongoid::Document
3
+ field :name
4
+ field :info, type: Hash
5
+ field :occupants, type: Array
6
+ field :number, type: Integer
7
+ embedded_in :address
8
+ end
@@ -0,0 +1,8 @@
1
+ class Login
2
+ include Mongoid::Document
3
+
4
+ field :_id, type: String, default: ->{ username }
5
+
6
+ field :username, type: String
7
+ field :application_id, type: Integer
8
+ end
@@ -0,0 +1,7 @@
1
+ class Manufacturer
2
+ include Mongoid::Document
3
+
4
+ field :products, type: Array, default: []
5
+
6
+ validates_presence_of :products
7
+ end
@@ -0,0 +1,4 @@
1
+ class Meat
2
+ include Mongoid::Document
3
+ has_and_belongs_to_many :sandwiches
4
+ end
@@ -0,0 +1,4 @@
1
+ class Membership
2
+ include Mongoid::Document
3
+ embedded_in :account
4
+ end
@@ -0,0 +1,4 @@
1
+ class MixedDrink
2
+ include Mongoid::Document
3
+ field :name
4
+ end
@@ -0,0 +1,12 @@
1
+ class Movie
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ field :poster, type: Image
5
+ field :poster_thumb, type: Thumbnail
6
+ has_many :ratings, as: :ratable, dependent: :nullify
7
+ has_many :comments
8
+
9
+ def global_set
10
+ Set.new
11
+ end
12
+ end
@@ -0,0 +1,2 @@
1
+ class MyHash < ::Hash
2
+ end
@@ -0,0 +1,23 @@
1
+ class Name
2
+ include Mongoid::Document
3
+
4
+ field :_id, type: String, default: ->{
5
+ "#{first_name}-#{last_name}"
6
+ }
7
+
8
+ field :first_name, type: String
9
+ field :last_name, type: String
10
+ field :parent_title, type: String
11
+
12
+ embeds_many :translations, validate: false
13
+ embeds_one :language, as: :translatable, validate: false
14
+ embedded_in :namable, polymorphic: true
15
+
16
+ accepts_nested_attributes_for :language
17
+
18
+ attr_protected :_id, :id
19
+
20
+ def set_parent=(set = false)
21
+ self.parent_title = namable.title if set
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ class Node
2
+ include Mongoid::Document
3
+ has_many :servers
4
+ accepts_nested_attributes_for :servers
5
+ end
@@ -0,0 +1,12 @@
1
+ class Note
2
+ include Mongoid::Document
3
+ field :text, type: String
4
+ field :saved, type: Boolean, default: false
5
+ embedded_in :noteable, polymorphic: true
6
+
7
+ after_save :update_saved
8
+
9
+ def update_saved
10
+ self.saved = true
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ class OrderedPost
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ field :rating, type: Integer
5
+ belongs_to :person
6
+ end
@@ -0,0 +1,6 @@
1
+ class OrderedPreference
2
+ include Mongoid::Document
3
+ field :name, type: String
4
+ field :value, type: String
5
+ has_and_belongs_to_many :people, validate: false
6
+ end
@@ -0,0 +1,15 @@
1
+ class Oscar
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ field :destroy_after_save, type: Boolean, default: false
5
+ before_save :complain
6
+
7
+ def complain
8
+ if destroy_after_save?
9
+ destroy
10
+ true
11
+ else
12
+ false
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ class Override
2
+ include Mongoid::Document
3
+
4
+ def self.public_method
5
+ end
6
+
7
+ protected
8
+
9
+ def self.protected_method
10
+ end
11
+
12
+ private
13
+
14
+ def self.private_method
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ module Ownable
2
+ extend ActiveSupport::Concern
3
+ included do
4
+ belongs_to :user
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ class Owner
2
+ include Mongoid::Document
3
+ field :name
4
+ has_many :events
5
+ embeds_many :birthdays
6
+ end
@@ -0,0 +1,3 @@
1
+ class Pack
2
+ include Mongoid::Document
3
+ end
@@ -0,0 +1,5 @@
1
+ class Page
2
+ include Mongoid::Document
3
+ embedded_in :quiz
4
+ embeds_many :page_questions
5
+ end
@@ -0,0 +1,4 @@
1
+ class PageQuestion
2
+ include Mongoid::Document
3
+ embedded_in :page
4
+ end
@@ -0,0 +1,7 @@
1
+ class Palette
2
+ include Mongoid::Document
3
+ embedded_in :canvas
4
+ embeds_many :tools
5
+ end
6
+
7
+ require "app/models/big_palette"
@@ -0,0 +1,25 @@
1
+ class ParanoidPhone
2
+ include Mongoid::Document
3
+ include Mongoid::Paranoia
4
+
5
+ attr_accessor :after_destroy_called, :before_destroy_called
6
+
7
+ field :number, type: String
8
+
9
+ embedded_in :person
10
+
11
+ before_destroy :before_destroy_stub, :halt_me
12
+ after_destroy :after_destroy_stub
13
+
14
+ def before_destroy_stub
15
+ self.before_destroy_called = true
16
+ end
17
+
18
+ def after_destroy_stub
19
+ self.after_destroy_called = true
20
+ end
21
+
22
+ def halt_me
23
+ person.age == 42 ? false : true
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ class ParanoidPost
2
+ include Mongoid::Document
3
+ include Mongoid::Versioning
4
+ include Mongoid::Paranoia
5
+
6
+ max_versions 2
7
+
8
+ field :title, type: String
9
+
10
+ attr_accessor :after_destroy_called, :before_destroy_called
11
+
12
+ belongs_to :person
13
+
14
+ has_and_belongs_to_many :tags
15
+ has_many :authors, dependent: :delete
16
+ has_many :titles, dependent: :restrict
17
+
18
+ scope :recent, where(created_at: { "$lt" => Time.now, "$gt" => 30.days.ago })
19
+
20
+ before_destroy :before_destroy_stub
21
+ after_destroy :after_destroy_stub
22
+
23
+ def before_destroy_stub
24
+ self.before_destroy_called = true
25
+ end
26
+
27
+ def after_destroy_stub
28
+ self.after_destroy_called = true
29
+ end
30
+
31
+ class << self
32
+ def old
33
+ where(created_at: { "$lt" => 30.days.ago })
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,5 @@
1
+ class Parent
2
+ include Mongoid::Document
3
+ embeds_many :sub_items
4
+ embeds_one :first_child, class_name: "Child", as: :childable
5
+ end
@@ -0,0 +1,6 @@
1
+ class ParentDoc
2
+ include Mongoid::Document
3
+ field :statistic
4
+ field :children_order, type: Array, default: [] # hold all the children's id
5
+ embeds_many :child_docs
6
+ end
@@ -0,0 +1,5 @@
1
+ class Passport
2
+ include Mongoid::Document
3
+ field :number, type: String
4
+ embedded_in :person, autobuild: true
5
+ end
@@ -0,0 +1,9 @@
1
+ class Patient
2
+ include Mongoid::Document
3
+ field :title, type: String
4
+ store_in collection: "inpatient"
5
+ embeds_many :addresses, as: :addressable
6
+ embeds_one :email
7
+ embeds_one :name, as: :namable
8
+ validates_presence_of :title, on: :create
9
+ end
@@ -0,0 +1,3 @@
1
+ class PdfWriter < Writer
2
+ def write; end
3
+ end
@@ -0,0 +1 @@
1
+ class Pencil < Tool; end
@@ -0,0 +1,201 @@
1
+ class Person
2
+ include Mongoid::Document
3
+ attr_accessor :mode
4
+
5
+ class_attribute :somebody_elses_important_class_options
6
+ self.somebody_elses_important_class_options = { keep_me_around: true }
7
+
8
+ field :username, default: -> { "arthurnn#{rand(0..10)}" }
9
+ field :title
10
+ field :terms, type: Boolean
11
+ field :pets, type: Boolean, default: false
12
+ field :age, type: Integer, default: "100"
13
+ field :dob, type: Date
14
+ field :employer_id
15
+ field :lunch_time, type: Time
16
+ field :aliases, type: Array
17
+ field :map, type: Hash
18
+ field :map_with_default, type: Hash, default: {}
19
+ field :score, type: Integer
20
+ field :blood_alcohol_content, type: Float, default: ->{ 0.0 }
21
+ field :last_drink_taken_at, type: Date, default: ->{ 1.day.ago.in_time_zone("Alaska") }
22
+ field :ssn
23
+ field :owner_id, type: Integer
24
+ field :security_code
25
+ field :reading, type: Object
26
+ field :bson_id, type: Moped::BSON::ObjectId
27
+ field :pattern, type: Regexp
28
+ field :override_me, type: Integer
29
+ field :at, as: :aliased_timestamp, type: Time
30
+ field :t, as: :test, type: String
31
+ field :i, as: :inte, type: Integer
32
+ field :a, as: :array, type: Array
33
+ field :desc, localize: true
34
+
35
+ index age: 1
36
+ index addresses: 1
37
+ index dob: 1
38
+ index name: 1
39
+ index title: 1
40
+
41
+ index({ ssn: 1 }, { unique: true })
42
+
43
+ attr_reader :rescored
44
+
45
+ attr_protected :security_code, :owner_id, :appointments
46
+
47
+ embeds_many :favorites, order: :title.desc, inverse_of: :perp, validate: false
48
+ embeds_many :videos, order: [[ :title, :asc ]], validate: false
49
+ embeds_many :phone_numbers, class_name: "Phone", validate: false
50
+ embeds_many :phones, store_as: :mobile_phones, validate: false
51
+ embeds_many :addresses, as: :addressable, validate: false do
52
+ def extension
53
+ "Testing"
54
+ end
55
+ def find_by_street(street)
56
+ where(street: street).first
57
+ end
58
+ end
59
+
60
+ embeds_many :address_components, validate: false
61
+ embeds_many :paranoid_phones, validate: false
62
+ embeds_many :services, cascade_callbacks: true, validate: false
63
+ embeds_many :symptoms, validate: false
64
+ embeds_many :appointments, validate: false
65
+
66
+ embeds_one :passport, autobuild: true, store_as: :pass, validate: false
67
+ embeds_one :pet, class_name: "Animal", validate: false
68
+ embeds_one :name, as: :namable, validate: false do
69
+ def extension
70
+ "Testing"
71
+ end
72
+ def dawkins?
73
+ first_name == "Richard" && last_name == "Dawkins"
74
+ end
75
+ end
76
+ embeds_one :quiz, validate: false
77
+
78
+ has_one :game, dependent: :destroy, validate: false do
79
+ def extension
80
+ "Testing"
81
+ end
82
+ end
83
+
84
+ has_many \
85
+ :posts,
86
+ dependent: :delete,
87
+ validate: false do
88
+ def extension
89
+ "Testing"
90
+ end
91
+ end
92
+ has_many :ordered_posts, order: :rating.desc, validate: false
93
+ has_many :paranoid_posts, validate: false
94
+ has_and_belongs_to_many \
95
+ :preferences,
96
+ index: true,
97
+ dependent: :nullify,
98
+ validate: false
99
+ has_and_belongs_to_many :user_accounts, validate: false
100
+ has_and_belongs_to_many :houses, validate: false
101
+ has_and_belongs_to_many :ordered_preferences, order: :value.desc, validate: false
102
+
103
+ has_many :drugs, validate: false
104
+ has_one :account, validate: false
105
+ has_one :cat, dependent: :nullify, validate: false, primary_key: :username
106
+ has_one :book, autobuild: true, validate: false
107
+ has_one :home, dependent: :delete, validate: false
108
+
109
+ has_and_belongs_to_many \
110
+ :administrated_events,
111
+ class_name: 'Event',
112
+ inverse_of: :administrators,
113
+ dependent: :nullify,
114
+ validate: false
115
+
116
+ accepts_nested_attributes_for :addresses
117
+ accepts_nested_attributes_for :paranoid_phones
118
+ accepts_nested_attributes_for :name, update_only: true
119
+ accepts_nested_attributes_for :pet, allow_destroy: true
120
+ accepts_nested_attributes_for :game, allow_destroy: true
121
+ accepts_nested_attributes_for :favorites, allow_destroy: true, limit: 5
122
+ accepts_nested_attributes_for :posts
123
+ accepts_nested_attributes_for :preferences
124
+ accepts_nested_attributes_for :quiz
125
+ accepts_nested_attributes_for :services, allow_destroy: true
126
+
127
+ scope :minor, where(:age.lt => 18)
128
+ scope :without_ssn, without(:ssn)
129
+ scope :search, ->(query){ any_of({ title: query }) }
130
+
131
+ def score_with_rescoring=(score)
132
+ @rescored = score.to_i + 20
133
+ self.score_without_rescoring = score
134
+ end
135
+
136
+ alias_method_chain :score=, :rescoring
137
+
138
+ def update_addresses
139
+ addresses.each do |address|
140
+ address.street = "Updated Address"
141
+ end
142
+ end
143
+
144
+ def employer=(emp)
145
+ self.employer_id = emp.id
146
+ end
147
+
148
+ def set_addresses=(addresses)
149
+ self.addresses = addresses
150
+ end
151
+
152
+ def override_me
153
+ read_attribute(:override_me).to_s
154
+ end
155
+
156
+ class << self
157
+ def accepted
158
+ scoped.where(terms: true)
159
+ end
160
+ def knight
161
+ scoped.where(title: "Sir")
162
+ end
163
+ def old
164
+ scoped.where(age: { "$gt" => 50 })
165
+ end
166
+ end
167
+
168
+ def reject_if_city_is_empty(attrs)
169
+ attrs[:city].blank?
170
+ end
171
+
172
+ def reject_if_name_is_blank(attrs)
173
+ attrs[:first_name].blank?
174
+ end
175
+
176
+ def foo
177
+ 'i_am_foo'
178
+ end
179
+
180
+ def preference_names=(names)
181
+ names.split(",").each do |name|
182
+ preference = Preference.where(name: name).first
183
+ if preference
184
+ self.preferences << preference
185
+ else
186
+ preferences.build(name: name)
187
+ end
188
+ end
189
+ end
190
+
191
+ def set_on_map_with_default=(value)
192
+ self.map_with_default["key"] = value
193
+ end
194
+
195
+ reset_callbacks(:validate)
196
+ reset_callbacks(:create)
197
+ reset_callbacks(:save)
198
+ reset_callbacks(:destroy)
199
+ end
200
+
201
+ require "app/models/doctor"