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,65 @@
1
+ require 'spec_helper'
2
+
3
+ describe "when initialize a model with an embedded model" do
4
+
5
+ let(:person) do
6
+ Person.new(pet: Pet.new)
7
+ end
8
+
9
+ it "has changes in the embedded model" do
10
+ person.pet.changes.should_not be_empty
11
+ end
12
+
13
+ it "does not have previous_changes in the embedded model" do
14
+ person.pet.previous_changes.should be_empty
15
+ end
16
+ end
17
+
18
+ describe "when creating a model with an embedded model" do
19
+
20
+ let(:person) do
21
+ Person.create(pet: Pet.new)
22
+ end
23
+
24
+ it "does not have changes in the embedded model" do
25
+ person.pet.changes.should be_empty
26
+ end
27
+
28
+ it "has previous_changes in the embedded model" do
29
+ person.pet.previous_changes.should_not be_empty
30
+ end
31
+ end
32
+
33
+ describe "when embedding a model on an already saved model" do
34
+
35
+ let(:person) do
36
+ Person.create
37
+ end
38
+
39
+ before do
40
+ person.pet = Pet.new
41
+ end
42
+
43
+ it "has not changes on the embedded model" do
44
+ person.pet.changes.should be_empty
45
+ end
46
+
47
+ it "has previous changes on the embedded model" do
48
+ person.pet.previous_changes.should_not be_empty
49
+ end
50
+
51
+ describe "and saving the model" do
52
+
53
+ before do
54
+ person.save!
55
+ end
56
+
57
+ it "does not have changes on the embedded model" do
58
+ person.pet.changes.should be_empty
59
+ end
60
+
61
+ it "does not have previous changes on the embedded model" do
62
+ person.pet.previous_changes.should be_empty
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,580 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Relations::Embedded::In do
4
+
5
+ describe "#===" do
6
+
7
+ let(:base) do
8
+ Name.new
9
+ end
10
+
11
+ let(:target) do
12
+ Person.new
13
+ end
14
+
15
+ let(:metadata) do
16
+ Name.relations["namable"]
17
+ end
18
+
19
+ let(:relation) do
20
+ described_class.new(base, target, metadata)
21
+ end
22
+
23
+ context "when the proxied document is same class" do
24
+
25
+ context "when the document is a different instance" do
26
+
27
+ it "returns false" do
28
+ (relation === Person.new).should be_false
29
+ end
30
+ end
31
+
32
+ context "when the document is the same instance" do
33
+
34
+ it "returns true" do
35
+ (relation === target).should be_true
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ describe "#=" do
42
+
43
+ context "when the inverse of an embeds one" do
44
+
45
+ context "when the child is a new record" do
46
+
47
+ let(:person) do
48
+ Person.new
49
+ end
50
+
51
+ let(:name) do
52
+ Name.new
53
+ end
54
+
55
+ before do
56
+ name.namable = person
57
+ end
58
+
59
+ it "sets the target of the relation" do
60
+ name.namable.should eq(person)
61
+ end
62
+
63
+ it "sets the base on the inverse relation" do
64
+ person.name.should eq(name)
65
+ end
66
+
67
+ it "sets the same instance on the inverse relation" do
68
+ person.name.should eql(name)
69
+ end
70
+
71
+ it "does not save the target" do
72
+ person.should_not be_persisted
73
+ end
74
+ end
75
+
76
+ context "when the parent is not a new record" do
77
+
78
+ let(:person) do
79
+ Person.create
80
+ end
81
+
82
+ let(:name) do
83
+ Name.new
84
+ end
85
+
86
+ before do
87
+ name.namable = person
88
+ end
89
+
90
+ it "sets the target of the relation" do
91
+ name.namable.should eq(person)
92
+ end
93
+
94
+ it "sets the base on the inverse relation" do
95
+ person.name.should eq(name)
96
+ end
97
+
98
+ it "sets the same instance on the inverse relation" do
99
+ person.name.should eql(name)
100
+ end
101
+
102
+ it "does not save the base" do
103
+ name.should_not be_persisted
104
+ end
105
+ end
106
+ end
107
+
108
+ context "when the inverse of an embeds many" do
109
+
110
+ context "when the child is a new record" do
111
+
112
+ let(:person) do
113
+ Person.new
114
+ end
115
+
116
+ let(:address) do
117
+ Address.new
118
+ end
119
+
120
+ before do
121
+ address.addressable = person
122
+ end
123
+
124
+ it "sets the target of the relation" do
125
+ address.addressable.should eq(person)
126
+ end
127
+
128
+ it "appends the base on the inverse relation" do
129
+ person.addresses.should eq([ address ])
130
+ end
131
+
132
+ it "sets the same instance in the inverse relation" do
133
+ person.addresses.first.should eql(address)
134
+ end
135
+
136
+ it "does not save the target" do
137
+ person.should_not be_persisted
138
+ end
139
+ end
140
+
141
+ context "when the parent is not a new record" do
142
+
143
+ let!(:person) do
144
+ Person.create!
145
+ end
146
+
147
+ let(:address) do
148
+ Address.new
149
+ end
150
+
151
+ before do
152
+ address.addressable = person
153
+ end
154
+
155
+ it "sets the target of the relation" do
156
+ address.addressable.should eq(person)
157
+ end
158
+
159
+ it "sets the same instance in the inverse relation" do
160
+ person.addresses.first.should eql(address)
161
+ end
162
+
163
+ it "appends the base on the inverse relation" do
164
+ person.addresses.should eq([ address ])
165
+ end
166
+ end
167
+ end
168
+ end
169
+
170
+ describe "#= nil" do
171
+
172
+ context "when the inverse of an embeds one" do
173
+
174
+ context "when the parent is a new record" do
175
+
176
+ let(:person) do
177
+ Person.new
178
+ end
179
+
180
+ let(:name) do
181
+ Name.new
182
+ end
183
+
184
+ before do
185
+ name.namable = person
186
+ name.namable = nil
187
+ end
188
+
189
+ it "sets the relation to nil" do
190
+ name.namable.should be_nil
191
+ end
192
+
193
+ it "removes the inverse relation" do
194
+ person.name.should be_nil
195
+ end
196
+ end
197
+
198
+ context "when the inverse is already nil" do
199
+
200
+ let(:person) do
201
+ Person.new
202
+ end
203
+
204
+ let(:name) do
205
+ Name.new
206
+ end
207
+
208
+ before do
209
+ name.namable = nil
210
+ end
211
+
212
+ it "sets the relation to nil" do
213
+ name.namable.should be_nil
214
+ end
215
+
216
+ it "removes the inverse relation" do
217
+ person.name.should be_nil
218
+ end
219
+ end
220
+
221
+ context "when the documents are not new records" do
222
+
223
+ let(:person) do
224
+ Person.create
225
+ end
226
+
227
+ let(:name) do
228
+ Name.new
229
+ end
230
+
231
+ before do
232
+ name.namable = person
233
+ name.namable = nil
234
+ end
235
+
236
+ it "sets the relation to nil" do
237
+ name.namable.should be_nil
238
+ end
239
+
240
+ it "removed the inverse relation" do
241
+ person.name.should be_nil
242
+ end
243
+
244
+ it "deletes the child document" do
245
+ name.should be_destroyed
246
+ end
247
+ end
248
+ end
249
+
250
+ context "when the inverse of an embeds many" do
251
+
252
+ context "when the parent is a new record" do
253
+
254
+ let(:person) do
255
+ Person.new
256
+ end
257
+
258
+ let(:address) do
259
+ Address.new
260
+ end
261
+
262
+ before do
263
+ address.addressable = person
264
+ address.addressable = nil
265
+ end
266
+
267
+ it "sets the relation to nil" do
268
+ address.addressable.should be_nil
269
+ end
270
+
271
+ it "removes the inverse relation" do
272
+ person.addresses.should be_empty
273
+ end
274
+ end
275
+
276
+ context "when the inverse is already nil" do
277
+
278
+ let(:address) do
279
+ Address.new
280
+ end
281
+
282
+ before do
283
+ address.addressable = nil
284
+ end
285
+
286
+ it "sets the relation to nil" do
287
+ address.addressable.should be_nil
288
+ end
289
+ end
290
+
291
+ context "when the documents are not new records" do
292
+
293
+ let(:person) do
294
+ Person.create
295
+ end
296
+
297
+ let(:address) do
298
+ Address.new
299
+ end
300
+
301
+ before do
302
+ address.addressable = person
303
+ address.addressable = nil
304
+ end
305
+
306
+ it "sets the relation to nil" do
307
+ address.addressable.should be_nil
308
+ end
309
+
310
+ it "removed the inverse relation" do
311
+ person.addresses.should be_empty
312
+ end
313
+
314
+ it "deletes the child document" do
315
+ address.should be_destroyed
316
+ end
317
+ end
318
+
319
+ context "when a child already exists on the parent" do
320
+
321
+ let(:person) do
322
+ Person.create
323
+ end
324
+
325
+ let(:address_one) do
326
+ Address.new(street: "first")
327
+ end
328
+
329
+ let(:address_two) do
330
+ Address.new(street: "second")
331
+ end
332
+
333
+ before do
334
+ person.addresses = [ address_one, address_two ]
335
+ address_one.addressable = nil
336
+ end
337
+
338
+ it "sets the relation to nil" do
339
+ address_one.addressable.should be_nil
340
+ end
341
+
342
+ it "removed the inverse relation" do
343
+ person.addresses.should eq([ address_two ])
344
+ end
345
+
346
+ it "deletes the child document" do
347
+ address_one.should be_destroyed
348
+ end
349
+
350
+ it "reindexes the children" do
351
+ address_two._index.should eq(0)
352
+ end
353
+ end
354
+ end
355
+ end
356
+
357
+ describe ".builder" do
358
+
359
+ let(:builder_klass) do
360
+ Mongoid::Relations::Builders::Embedded::In
361
+ end
362
+
363
+ let(:base) do
364
+ Name.new
365
+ end
366
+
367
+ let(:target) do
368
+ Person.new
369
+ end
370
+
371
+ let(:metadata) do
372
+ Name.relations["namable"]
373
+ end
374
+
375
+ it "returns the embedded one builder" do
376
+ described_class.builder(base, metadata, target).should be_a(builder_klass)
377
+ end
378
+ end
379
+
380
+ describe ".embedded?" do
381
+
382
+ it "returns true" do
383
+ described_class.should be_embedded
384
+ end
385
+ end
386
+
387
+ describe ".foreign_key_suffix" do
388
+
389
+ it "returns nil" do
390
+ described_class.foreign_key_suffix.should be_nil
391
+ end
392
+ end
393
+
394
+ describe ".macro" do
395
+
396
+ it "returns embeds_one" do
397
+ described_class.macro.should eq(:embedded_in)
398
+ end
399
+ end
400
+
401
+ describe ".nested_builder" do
402
+
403
+ let(:nested_builder_klass) do
404
+ Mongoid::Relations::Builders::NestedAttributes::One
405
+ end
406
+
407
+ let(:metadata) do
408
+ Name.relations["namable"]
409
+ end
410
+
411
+ let(:attributes) do
412
+ {}
413
+ end
414
+
415
+ it "returns the single nested builder" do
416
+ described_class.nested_builder(metadata, attributes, {}).should
417
+ be_a(nested_builder_klass)
418
+ end
419
+ end
420
+
421
+ describe "#respond_to?" do
422
+
423
+ let(:person) do
424
+ Person.new
425
+ end
426
+
427
+ let!(:name) do
428
+ person.build_name(first_name: "Tony")
429
+ end
430
+
431
+ let(:document) do
432
+ name.namable
433
+ end
434
+
435
+ Mongoid::Document.public_instance_methods(true).each do |method|
436
+
437
+ context "when checking #{method}" do
438
+
439
+ it "returns true" do
440
+ document.respond_to?(method).should be_true
441
+ end
442
+ end
443
+ end
444
+ end
445
+
446
+ describe ".valid_options" do
447
+
448
+ it "returns the valid options" do
449
+ described_class.valid_options.should eq(
450
+ [ :autobuild, :cyclic, :polymorphic ]
451
+ )
452
+ end
453
+ end
454
+
455
+ describe ".validation_default" do
456
+
457
+ it "returns false" do
458
+ described_class.validation_default.should be_false
459
+ end
460
+ end
461
+
462
+ context "when creating the tree through initialization" do
463
+
464
+ let!(:person) do
465
+ Person.create
466
+ end
467
+
468
+ let!(:address) do
469
+ Address.create(addressable: person)
470
+ end
471
+
472
+ let!(:first_location) do
473
+ Location.create(address: address)
474
+ end
475
+
476
+ let!(:second_location) do
477
+ Location.create(address: address)
478
+ end
479
+
480
+ it "saves the child" do
481
+ Person.last.addresses.last.should eq(address)
482
+ end
483
+
484
+ it "indexes the child" do
485
+ address._index.should eq(0)
486
+ end
487
+
488
+ it "saves the first location with the correct index" do
489
+ first_location._index.should eq(0)
490
+ end
491
+
492
+ it "saves the second location with the correct index" do
493
+ second_location._index.should eq(1)
494
+ end
495
+
496
+ it "has the locations in the association array" do
497
+ Person.last.addresses.last.locations.should eq(
498
+ [first_location, second_location]
499
+ )
500
+ end
501
+ end
502
+
503
+ context "when instantiating a new child with a persisted parent" do
504
+
505
+ let!(:person) do
506
+ Person.create
507
+ end
508
+
509
+ let!(:address) do
510
+ Address.new(addressable: person)
511
+ end
512
+
513
+ let!(:location) do
514
+ Location.new(address: address)
515
+ end
516
+
517
+ it "does not save the child" do
518
+ address.should_not be_persisted
519
+ end
520
+
521
+ it "does not save the deeply embedded children" do
522
+ address.locations.first.should_not be_persisted
523
+ end
524
+ end
525
+
526
+ context "when replacing the relation with another" do
527
+
528
+ let!(:person) do
529
+ Person.create
530
+ end
531
+
532
+ let!(:person_two) do
533
+ Person.create
534
+ end
535
+
536
+ let!(:address) do
537
+ person.addresses.create(street: "Kotbusser Damm")
538
+ end
539
+
540
+ let!(:name) do
541
+ person_two.create_name(first_name: "Syd")
542
+ end
543
+
544
+ before do
545
+ name.namable = address.addressable
546
+ name.namable.save
547
+ end
548
+
549
+ it "sets the new parent" do
550
+ name.namable.should eq(person)
551
+ end
552
+
553
+ it "removes the previous parent relation" do
554
+ person_two.name.should be_nil
555
+ end
556
+
557
+ it "sets the new child relation" do
558
+ person.name.should eq(name)
559
+ end
560
+
561
+ context "when reloading" do
562
+
563
+ before do
564
+ person.reload
565
+ end
566
+
567
+ it "sets the new parent" do
568
+ name.namable.should eq(person)
569
+ end
570
+
571
+ it "removes the previous parent relation" do
572
+ person_two.name.should be_nil
573
+ end
574
+
575
+ it "sets the new child relation" do
576
+ person.name.should eq(name)
577
+ end
578
+ end
579
+ end
580
+ end