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,184 @@
1
+ require "spec_helper"
2
+
3
+ # describe Mongoid::Fields::Internal::ForeignKeys::Array do
4
+
5
+ # describe "#add_atomic_changes" do
6
+
7
+ # let(:field) do
8
+ # described_class.instantiate(
9
+ # :vals,
10
+ # metadata: Person.relations["preferences"],
11
+ # type: Array,
12
+ # default: [],
13
+ # identity: true
14
+ # )
15
+ # end
16
+
17
+ # let(:person) do
18
+ # Person.new
19
+ # end
20
+
21
+ # let(:preference_one) do
22
+ # Preference.new
23
+ # end
24
+
25
+ # let(:preference_two) do
26
+ # Preference.new
27
+ # end
28
+
29
+ # let(:preference_three) do
30
+ # Preference.new
31
+ # end
32
+
33
+ # let(:mods) do
34
+ # {}
35
+ # end
36
+
37
+ # before do
38
+ # person.preferences.concat(preference_one, preference_three)
39
+ # end
40
+
41
+ # context "when adding and removing" do
42
+
43
+ # before do
44
+ # field.add_atomic_changes(
45
+ # person, "preference_ids", "preference_ids", mods, [ preference_three.id ], [ preference_two.id ]
46
+ # )
47
+ # end
48
+
49
+ # it "adds the current to the modifications" do
50
+ # mods["preference_ids"].should eq(
51
+ # [ preference_one.id, preference_three.id ]
52
+ # )
53
+ # end
54
+ # end
55
+ # end
56
+
57
+ # describe "#eval_default" do
58
+
59
+ # let(:default) do
60
+ # [ Moped::BSON::ObjectId.new ]
61
+ # end
62
+
63
+ # let(:field) do
64
+ # described_class.instantiate(
65
+ # :vals,
66
+ # metadata: Person.relations["posts"],
67
+ # type: Array,
68
+ # default: default,
69
+ # identity: true
70
+ # )
71
+ # end
72
+
73
+ # it "dups the default value" do
74
+ # field.eval_default(nil).should_not equal(default)
75
+ # end
76
+
77
+ # it "returns the correct value" do
78
+ # field.eval_default(nil).should eq(default)
79
+ # end
80
+ # end
81
+
82
+ # describe "#foreign_key?" do
83
+
84
+ # let(:field) do
85
+ # described_class.instantiate(
86
+ # :vals,
87
+ # metadata: Person.relations["posts"],
88
+ # type: Array,
89
+ # default: [],
90
+ # identity: true
91
+ # )
92
+ # end
93
+
94
+ # it "returns true" do
95
+ # field.should be_foreign_key
96
+ # end
97
+ # end
98
+
99
+ # describe "#serialize" do
100
+
101
+ # context "when the array is object ids" do
102
+
103
+ # let(:metadata) do
104
+ # Mongoid::Relations::Metadata.new(
105
+ # inverse_class_name: "Game",
106
+ # name: :person,
107
+ # relation: Mongoid::Relations::Referenced::In
108
+ # )
109
+ # end
110
+
111
+ # let(:field) do
112
+ # described_class.instantiate(
113
+ # :vals,
114
+ # type: Array,
115
+ # default: [],
116
+ # identity: true,
117
+ # metadata: metadata
118
+ # )
119
+ # end
120
+
121
+ # context "when provided nil" do
122
+
123
+ # it "returns an empty array" do
124
+ # field.serialize(nil).should be_empty
125
+ # end
126
+ # end
127
+
128
+ # context "when provided an empty array" do
129
+
130
+ # let(:array) do
131
+ # []
132
+ # end
133
+
134
+ # it "returns an empty array" do
135
+ # field.serialize(array).should eq(array)
136
+ # end
137
+
138
+ # it "returns the same instance" do
139
+ # field.serialize(array).should equal(array)
140
+ # end
141
+ # end
142
+
143
+ # context "when using object ids" do
144
+
145
+ # let(:object_id) do
146
+ # Moped::BSON::ObjectId.new
147
+ # end
148
+
149
+ # it "performs conversion on the ids if strings" do
150
+ # field.serialize([object_id.to_s]).should eq([object_id])
151
+ # end
152
+ # end
153
+
154
+ # context "when not using object ids" do
155
+
156
+ # let(:object_id) do
157
+ # Moped::BSON::ObjectId.new
158
+ # end
159
+
160
+ # before do
161
+ # Person.field(
162
+ # :_id,
163
+ # type: String,
164
+ # pre_processed: true,
165
+ # default: ->{ Moped::BSON::ObjectId.new.to_s }
166
+ # )
167
+ # end
168
+
169
+ # after do
170
+ # Person.field(
171
+ # :_id,
172
+ # type: Moped::BSON::ObjectId,
173
+ # pre_processed: true,
174
+ # default: ->{ Moped::BSON::ObjectId.new }
175
+ # )
176
+ # end
177
+
178
+ # it "does not convert" do
179
+ # field.serialize([object_id.to_s]).should eq([object_id.to_s])
180
+ # end
181
+ # end
182
+ # end
183
+ # end
184
+ # end
@@ -0,0 +1,201 @@
1
+ require "spec_helper"
2
+
3
+ # describe Mongoid::Fields::Internal::ForeignKeys::Object do
4
+
5
+ # describe "#foreign_key?" do
6
+
7
+ # let(:field) do
8
+ # described_class.instantiate(
9
+ # :vals,
10
+ # metadata: Person.relations["posts"],
11
+ # type: Object,
12
+ # default: [],
13
+ # identity: true
14
+ # )
15
+ # end
16
+
17
+ # it "returns true" do
18
+ # field.should be_foreign_key
19
+ # end
20
+ # end
21
+
22
+ # describe "#serialize" do
23
+
24
+ # context "when the array is object ids" do
25
+
26
+ # let(:metadata) do
27
+ # Mongoid::Relations::Metadata.new(
28
+ # inverse_class_name: "Game",
29
+ # name: :person,
30
+ # relation: Mongoid::Relations::Referenced::In
31
+ # )
32
+ # end
33
+
34
+ # let(:field) do
35
+ # described_class.instantiate(
36
+ # :vals,
37
+ # type: Object,
38
+ # default: nil,
39
+ # identity: true,
40
+ # metadata: metadata
41
+ # )
42
+ # end
43
+
44
+ # context "when using object ids" do
45
+
46
+ # let(:object_id) do
47
+ # Moped::BSON::ObjectId.new
48
+ # end
49
+
50
+ # it "performs conversion on the ids if strings" do
51
+ # field.serialize(object_id.to_s).should eq(object_id)
52
+ # end
53
+ # end
54
+
55
+ # context "when not using object ids" do
56
+
57
+ # context "when using strings" do
58
+
59
+ # context "when provided a string" do
60
+
61
+ # let(:object_id) do
62
+ # Moped::BSON::ObjectId.new
63
+ # end
64
+
65
+ # before do
66
+ # Person.field(
67
+ # :_id,
68
+ # type: String,
69
+ # pre_processed: true,
70
+ # default: ->{ Moped::BSON::ObjectId.new.to_s }
71
+ # )
72
+ # end
73
+
74
+ # after do
75
+ # Person.field(
76
+ # :_id,
77
+ # type: Moped::BSON::ObjectId,
78
+ # pre_processed: true,
79
+ # default: ->{ Moped::BSON::ObjectId.new }
80
+ # )
81
+ # end
82
+
83
+ # it "does not convert" do
84
+ # field.serialize(object_id.to_s).should eq(object_id.to_s)
85
+ # end
86
+ # end
87
+
88
+ # context "when provided a hash" do
89
+
90
+ # let(:object_id) do
91
+ # Moped::BSON::ObjectId.new
92
+ # end
93
+
94
+ # before do
95
+ # Person.field(
96
+ # :_id,
97
+ # type: String,
98
+ # pre_processed: true,
99
+ # default: ->{ Moped::BSON::ObjectId.new.to_s }
100
+ # )
101
+ # end
102
+
103
+ # after do
104
+ # Person.field(
105
+ # :_id,
106
+ # type: Moped::BSON::ObjectId,
107
+ # pre_processed: true,
108
+ # default: ->{ Moped::BSON::ObjectId.new }
109
+ # )
110
+ # end
111
+
112
+ # let(:criterion) do
113
+ # { "$in" => [ object_id.to_s ] }
114
+ # end
115
+
116
+ # it "does not convert" do
117
+ # field.serialize(criterion).should eq(
118
+ # criterion
119
+ # )
120
+ # end
121
+ # end
122
+ # end
123
+
124
+ # context "when using integers" do
125
+
126
+ # context "when provided a string" do
127
+
128
+ # before do
129
+ # Person.field(:_id, type: Integer)
130
+ # end
131
+
132
+ # after do
133
+ # Person.field(
134
+ # :_id,
135
+ # type: Moped::BSON::ObjectId,
136
+ # pre_processed: true,
137
+ # default: ->{ Moped::BSON::ObjectId.new }
138
+ # )
139
+ # end
140
+
141
+ # it "does not convert" do
142
+ # field.serialize("1").should eq(1)
143
+ # end
144
+ # end
145
+
146
+ # context "when provided a hash with a string value" do
147
+
148
+ # before do
149
+ # Person.field(:_id, type: Integer)
150
+ # end
151
+
152
+ # after do
153
+ # Person.field(
154
+ # :_id,
155
+ # type: Moped::BSON::ObjectId,
156
+ # pre_processed: true,
157
+ # default: ->{ Moped::BSON::ObjectId.new }
158
+ # )
159
+ # end
160
+
161
+ # let(:criterion) do
162
+ # { "$eq" => "1" }
163
+ # end
164
+
165
+ # it "does not convert" do
166
+ # field.serialize(criterion).should eq(
167
+ # { "$eq" => 1 }
168
+ # )
169
+ # end
170
+ # end
171
+
172
+ # context "when provided a hash with an array of string values" do
173
+
174
+ # before do
175
+ # Person.field(:_id, type: Integer)
176
+ # end
177
+
178
+ # after do
179
+ # Person.field(
180
+ # :_id,
181
+ # type: Moped::BSON::ObjectId,
182
+ # pre_processed: true,
183
+ # default: ->{ Moped::BSON::ObjectId.new }
184
+ # )
185
+ # end
186
+
187
+ # let(:criterion) do
188
+ # { "$in" => [ "1" ] }
189
+ # end
190
+
191
+ # it "does not convert" do
192
+ # field.serialize(criterion).should eq(
193
+ # { "$in" => [ 1 ] }
194
+ # )
195
+ # end
196
+ # end
197
+ # end
198
+ # end
199
+ # end
200
+ # end
201
+ # end
@@ -0,0 +1,386 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Fields::Localized do
4
+
5
+ context "when no default is provided" do
6
+
7
+ let(:field) do
8
+ described_class.new(:description, localize: true, type: String)
9
+ end
10
+
11
+ it "defaults to nil" do
12
+ field.default_val.should be_nil
13
+ end
14
+ end
15
+
16
+ context "when a default is provided" do
17
+
18
+ context "when the type is a string" do
19
+
20
+ let(:field) do
21
+ described_class.new(
22
+ :description,
23
+ localize: true,
24
+ default: "No translation",
25
+ type: String
26
+ )
27
+ end
28
+
29
+ it "defaults to the value" do
30
+ field.default_val.should eq("No translation")
31
+ end
32
+ end
33
+
34
+ context "when the type is not a string" do
35
+
36
+ let(:field) do
37
+ described_class.new(
38
+ :description,
39
+ localize: true,
40
+ default: 1,
41
+ type: Integer
42
+ )
43
+ end
44
+
45
+ it "keeps the default in the proper type" do
46
+ field.default_val.should eq(1)
47
+ end
48
+ end
49
+ end
50
+
51
+ describe "#demongoize" do
52
+
53
+ context "when the type is a string" do
54
+
55
+ let(:field) do
56
+ described_class.new(:description, localize: true, type: String)
57
+ end
58
+
59
+ context "when the field is nil" do
60
+
61
+ let(:value) do
62
+ field.demongoize(nil)
63
+ end
64
+
65
+ it "returns nil" do
66
+ value.should be_nil
67
+ end
68
+ end
69
+
70
+ context "when no locale is defined" do
71
+
72
+ let(:value) do
73
+ field.demongoize({ "en" => "This is a test" })
74
+ end
75
+
76
+ it "returns the string from the default locale" do
77
+ value.should eq("This is a test")
78
+ end
79
+ end
80
+
81
+ context "when a locale is provided" do
82
+
83
+ before do
84
+ ::I18n.locale = :de
85
+ end
86
+
87
+ after do
88
+ ::I18n.locale = :en
89
+ end
90
+
91
+ context "when the value exists" do
92
+
93
+ let(:value) do
94
+ field.demongoize({ "de" => "This is a test" })
95
+ end
96
+
97
+ it "returns the string from the set locale" do
98
+ value.should eq("This is a test")
99
+ end
100
+ end
101
+
102
+ context "when the value does not exist" do
103
+
104
+ context "when not using fallbacks" do
105
+
106
+ let(:value) do
107
+ field.demongoize({ "en" => "testing" })
108
+ end
109
+
110
+ it "returns nil" do
111
+ value.should be_nil
112
+ end
113
+ end
114
+
115
+ context "when using fallbacks" do
116
+
117
+ before(:all) do
118
+ require "i18n/backend/fallbacks"
119
+ I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
120
+ end
121
+
122
+ context "when fallbacks are defined" do
123
+
124
+ before do
125
+ ::I18n.fallbacks[:de] = [ :de, :en, :es ]
126
+ end
127
+
128
+ context "when the first fallback translation exists" do
129
+
130
+ let(:value) do
131
+ field.demongoize({ "en" => "testing" })
132
+ end
133
+
134
+ it "returns the fallback translation" do
135
+ value.should eq("testing")
136
+ end
137
+ end
138
+
139
+ context "when another fallback translation exists" do
140
+
141
+ let(:value) do
142
+ field.demongoize({ "es" => "pruebas" })
143
+ end
144
+
145
+ it "returns the fallback translation" do
146
+ value.should eq("pruebas")
147
+ end
148
+ end
149
+
150
+ context "when the fallback translation does not exist" do
151
+
152
+ let(:value) do
153
+ field.demongoize({ "fr" => "oui" })
154
+ end
155
+
156
+ it "returns nil" do
157
+ value.should be_nil
158
+ end
159
+ end
160
+ end
161
+
162
+ context "when no fallbacks are defined" do
163
+
164
+ before do
165
+ ::I18n.fallbacks[:de] = [ :de ]
166
+ end
167
+
168
+ let(:value) do
169
+ field.demongoize({ "es" => "pruebas" })
170
+ end
171
+
172
+ it "returns nil" do
173
+ value.should be_nil
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
179
+ end
180
+
181
+ context "when the type is not a string" do
182
+
183
+ let(:field) do
184
+ described_class.new(:description, localize: true, type: Integer)
185
+ end
186
+
187
+ context "when the field is nil" do
188
+
189
+ let(:value) do
190
+ field.demongoize(nil)
191
+ end
192
+
193
+ it "returns nil" do
194
+ value.should be_nil
195
+ end
196
+ end
197
+
198
+ context "when no locale is defined" do
199
+
200
+ let(:value) do
201
+ field.demongoize({ "en" => 100 })
202
+ end
203
+
204
+ it "returns the value from the default locale" do
205
+ value.should eq(100)
206
+ end
207
+ end
208
+
209
+ context "when a locale is provided" do
210
+
211
+ before do
212
+ ::I18n.locale = :de
213
+ end
214
+
215
+ after do
216
+ ::I18n.locale = :en
217
+ end
218
+
219
+ context "when the value exists" do
220
+
221
+ let(:value) do
222
+ field.demongoize({ "de" => 100 })
223
+ end
224
+
225
+ it "returns the value from the set locale" do
226
+ value.should eq(100)
227
+ end
228
+ end
229
+
230
+ context "when the value does not exist" do
231
+
232
+ context "when not using fallbacks" do
233
+
234
+ let(:value) do
235
+ field.demongoize({ "en" => 100 })
236
+ end
237
+
238
+ it "returns nil" do
239
+ value.should be_nil
240
+ end
241
+ end
242
+
243
+ context "when using fallbacks" do
244
+
245
+ before(:all) do
246
+ require "i18n/backend/fallbacks"
247
+ I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
248
+ end
249
+
250
+ context "when fallbacks are defined" do
251
+
252
+ before do
253
+ ::I18n.fallbacks[:de] = [ :de, :en, :es ]
254
+ end
255
+
256
+ context "when the first fallback translation exists" do
257
+
258
+ let(:value) do
259
+ field.demongoize({ "en" => 1 })
260
+ end
261
+
262
+ it "returns the fallback translation" do
263
+ value.should eq(1)
264
+ end
265
+ end
266
+
267
+ context "when another fallback translation exists" do
268
+
269
+ let(:value) do
270
+ field.demongoize({ "es" => 100 })
271
+ end
272
+
273
+ it "returns the fallback translation" do
274
+ value.should eq(100)
275
+ end
276
+ end
277
+
278
+ context "when the fallback translation does not exist" do
279
+
280
+ let(:value) do
281
+ field.demongoize({ "fr" => 50 })
282
+ end
283
+
284
+ it "returns nil" do
285
+ value.should be_nil
286
+ end
287
+ end
288
+ end
289
+
290
+ context "when no fallbacks are defined" do
291
+
292
+ before do
293
+ ::I18n.fallbacks[:de] = [ :de ]
294
+ end
295
+
296
+ let(:value) do
297
+ field.demongoize({ "es" => 100 })
298
+ end
299
+
300
+ it "returns nil" do
301
+ value.should be_nil
302
+ end
303
+ end
304
+ end
305
+ end
306
+ end
307
+ end
308
+ end
309
+
310
+ describe "#mongoize" do
311
+
312
+ context "when the type is a string" do
313
+
314
+ let(:field) do
315
+ described_class.new(:description, localize: true, type: String)
316
+ end
317
+
318
+ context "when no locale is defined" do
319
+
320
+ let(:value) do
321
+ field.mongoize("This is a test")
322
+ end
323
+
324
+ it "returns the string in the default locale" do
325
+ value.should eq({ "en" => "This is a test" })
326
+ end
327
+ end
328
+
329
+ context "when a locale is provided" do
330
+
331
+ before do
332
+ ::I18n.locale = :de
333
+ end
334
+
335
+ after do
336
+ ::I18n.locale = :en
337
+ end
338
+
339
+ let(:value) do
340
+ field.mongoize("This is a test")
341
+ end
342
+
343
+ it "returns the string in the set locale" do
344
+ value.should eq({ "de" => "This is a test" })
345
+ end
346
+ end
347
+ end
348
+
349
+ context "when the type is not a string" do
350
+
351
+ let(:field) do
352
+ described_class.new(:description, localize: true, type: Integer)
353
+ end
354
+
355
+ context "when no locale is defined" do
356
+
357
+ let(:value) do
358
+ field.mongoize("100")
359
+ end
360
+
361
+ it "returns the value in the default locale" do
362
+ value.should eq({ "en" => 100 })
363
+ end
364
+ end
365
+
366
+ context "when a locale is provided" do
367
+
368
+ before do
369
+ ::I18n.locale = :de
370
+ end
371
+
372
+ after do
373
+ ::I18n.locale = :en
374
+ end
375
+
376
+ let(:value) do
377
+ field.mongoize("100")
378
+ end
379
+
380
+ it "returns the string in the set locale" do
381
+ value.should eq({ "de" => 100 })
382
+ end
383
+ end
384
+ end
385
+ end
386
+ end