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,155 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::DateTime do
4
+
5
+ describe "__mongoize_time__" do
6
+
7
+ context "when the date time has more than seconds precision" do
8
+
9
+ let(:date_time) do
10
+ DateTime.parse("2012-06-17 18:42:15.123Z")
11
+ end
12
+
13
+ let(:mongoized) do
14
+ date_time.__mongoize_time__
15
+ end
16
+
17
+ it "does not drop the precision" do
18
+ mongoized.to_f.to_s.should match(/\.123/)
19
+ end
20
+ end
21
+
22
+ context "when using active support's time zone" do
23
+
24
+ before do
25
+ Mongoid.use_activesupport_time_zone = true
26
+ Time.zone = "Tokyo"
27
+ end
28
+
29
+ after do
30
+ Time.zone = nil
31
+ end
32
+
33
+ let(:date_time) do
34
+ DateTime.new(2010, 1, 1)
35
+ end
36
+
37
+ let(:expected) do
38
+ Time.zone.local(2010, 1, 1, 9, 0, 0, 0)
39
+ end
40
+
41
+ let(:mongoized) do
42
+ date_time.__mongoize_time__
43
+ end
44
+
45
+ it "returns the date as a local time" do
46
+ mongoized.should eq(expected)
47
+ end
48
+ end
49
+
50
+ context "when not using active support's time zone" do
51
+
52
+ before do
53
+ Mongoid.use_activesupport_time_zone = false
54
+ end
55
+
56
+ after do
57
+ Mongoid.use_activesupport_time_zone = true
58
+ Time.zone = nil
59
+ end
60
+
61
+ let(:date_time) do
62
+ DateTime.new(2010, 1, 1)
63
+ end
64
+
65
+ let(:expected) do
66
+ Time.utc(2010, 1, 1, 0, 0, 0, 0).getlocal
67
+ end
68
+
69
+ let(:mongoized) do
70
+ date_time.__mongoize_time__
71
+ end
72
+
73
+ it "returns the date as a utc time" do
74
+ mongoized.should eq(expected)
75
+ end
76
+ end
77
+ end
78
+
79
+ describe ".demongoize" do
80
+
81
+ let!(:time) do
82
+ Time.now.utc
83
+ end
84
+
85
+ let(:date_time) do
86
+ DateTime.demongoize(time)
87
+ end
88
+
89
+ it "converts to a datetime" do
90
+ date_time.should be_kind_of(DateTime)
91
+ end
92
+
93
+ it "does not change the time" do
94
+ DateTime.demongoize(time).should eq(time)
95
+ end
96
+
97
+ context "when using utc" do
98
+
99
+ before do
100
+ Mongoid.use_utc = true
101
+ end
102
+
103
+ after do
104
+ Mongoid.use_utc = false
105
+ end
106
+
107
+ context "when setting a utc time" do
108
+
109
+ let(:user) do
110
+ User.new
111
+ end
112
+
113
+ let(:date) do
114
+ DateTime.parse("2012-01-23 08:26:14 PM")
115
+ end
116
+
117
+ before do
118
+ user.last_login = date
119
+ end
120
+
121
+ it "does not return the time with time zone applied" do
122
+ user.last_login.should eq(date)
123
+ end
124
+ end
125
+ end
126
+ end
127
+
128
+ describe ".mongoize" do
129
+
130
+ context "when the string is an invalid time" do
131
+
132
+ let(:epoch) do
133
+ Time.utc(1970, 1, 1, 0, 0, 0, 0)
134
+ end
135
+
136
+ it "returns epoch" do
137
+ DateTime.mongoize("time").should eq(epoch)
138
+ end
139
+ end
140
+ end
141
+
142
+ describe "#mongoize" do
143
+
144
+ let!(:date_time) do
145
+ Time.now.utc.to_datetime
146
+ end
147
+
148
+ context "when the string is an invalid time" do
149
+
150
+ it "returns the date time as a time" do
151
+ date_time.mongoize.should be_a(Time)
152
+ end
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,42 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::FalseClass do
4
+
5
+ describe "#__sortable__" do
6
+
7
+ it "returns 0" do
8
+ false.__sortable__.should eq(0)
9
+ end
10
+ end
11
+
12
+ describe "#is_a?" do
13
+
14
+ context "when provided a Boolean" do
15
+
16
+ it "returns true" do
17
+ false.is_a?(Boolean).should be_true
18
+ end
19
+ end
20
+
21
+ context "when provided a FalseClass" do
22
+
23
+ it "returns true" do
24
+ false.is_a?(FalseClass).should be_true
25
+ end
26
+ end
27
+
28
+ context "when provided a TrueClass" do
29
+
30
+ it "returns false" do
31
+ false.is_a?(TrueClass).should be_false
32
+ end
33
+ end
34
+
35
+ context "when provided an invalid class" do
36
+
37
+ it "returns false" do
38
+ false.is_a?(String).should be_false
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,133 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Float do
4
+
5
+ let(:number) do
6
+ 118.345
7
+ end
8
+
9
+ describe "#__mongoize_time__" do
10
+
11
+ let(:float) do
12
+ 1335532685.117847
13
+ end
14
+
15
+ let(:mongoized) do
16
+ float.__mongoize_time__
17
+ end
18
+
19
+ it "returns the float as a time" do
20
+ mongoized.should eq(Time.at(float))
21
+ end
22
+ end
23
+
24
+ describe ".demongoize" do
25
+
26
+ context "when the the value is a float" do
27
+
28
+ it "returns a float" do
29
+ Float.demongoize(number).should eq(number)
30
+ end
31
+ end
32
+
33
+ context "when the value is nil" do
34
+
35
+ it "returns nil" do
36
+ Float.demongoize(nil).should be_nil
37
+ end
38
+ end
39
+ end
40
+
41
+ describe ".mongoize" do
42
+
43
+ context "when the value is a number" do
44
+
45
+ context "when the value is an float" do
46
+
47
+ context "when the value is small" do
48
+
49
+ it "it returns the float" do
50
+ Float.mongoize(3).should eq(3)
51
+ end
52
+
53
+ it "returns the number as type float" do
54
+ Float.mongoize(3).should be_a(Float)
55
+ end
56
+ end
57
+
58
+ context "when the value is large" do
59
+
60
+ it "returns the float" do
61
+ Float.mongoize(1024**2).to_s.should eq("1048576.0")
62
+ end
63
+ end
64
+ end
65
+
66
+ context "when the value is a decimal" do
67
+
68
+ it "casts to float" do
69
+ Float.mongoize(2.5).should eq(2.5)
70
+ end
71
+ end
72
+
73
+ context "when the value is floating point zero" do
74
+
75
+ it "returns the float zero" do
76
+ Float.mongoize(0.00000).should eq(0)
77
+ end
78
+ end
79
+
80
+ context "when the value is a floating point float" do
81
+
82
+ it "returns the float number" do
83
+ Float.mongoize(4.00000).should eq(4)
84
+ end
85
+ end
86
+
87
+ context "when the value has leading zeros" do
88
+
89
+ it "returns the stripped float" do
90
+ Float.mongoize("000011").should eq(11)
91
+ end
92
+ end
93
+ end
94
+
95
+ context "when the string is not a number" do
96
+
97
+ context "when the string is non numerical" do
98
+
99
+ it "returns 0" do
100
+ Float.mongoize("foo").should eq(0.0)
101
+ end
102
+ end
103
+
104
+ context "when the string is numerical" do
105
+
106
+ it "returns the float value for the string" do
107
+ Float.mongoize("3").should eq(3)
108
+ end
109
+ end
110
+
111
+ context "when the string is empty" do
112
+
113
+ it "returns nil" do
114
+ Float.mongoize("").should be_nil
115
+ end
116
+ end
117
+
118
+ context "when the string is nil" do
119
+
120
+ it "returns nil" do
121
+ Float.mongoize(nil).should be_nil
122
+ end
123
+ end
124
+ end
125
+ end
126
+
127
+ describe "#mongoize" do
128
+
129
+ it "returns self" do
130
+ number.mongoize.should eq(number)
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,333 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Hash do
4
+
5
+ describe "#__evolve_object_id__" do
6
+
7
+ context "when values have object id strings" do
8
+
9
+ let(:object_id) do
10
+ Moped::BSON::ObjectId.new
11
+ end
12
+
13
+ let(:hash) do
14
+ { field: object_id.to_s }
15
+ end
16
+
17
+ let(:evolved) do
18
+ hash.__evolve_object_id__
19
+ end
20
+
21
+ it "converts each value in the hash" do
22
+ evolved[:field].should eq(object_id)
23
+ end
24
+ end
25
+
26
+ context "when values have object ids" do
27
+
28
+ let(:object_id) do
29
+ Moped::BSON::ObjectId.new
30
+ end
31
+
32
+ let(:hash) do
33
+ { field: object_id }
34
+ end
35
+
36
+ let(:evolved) do
37
+ hash.__evolve_object_id__
38
+ end
39
+
40
+ it "converts each value in the hash" do
41
+ evolved[:field].should eq(object_id)
42
+ end
43
+ end
44
+
45
+ context "when values have empty strings" do
46
+
47
+ let(:object_id) do
48
+ Moped::BSON::ObjectId.new
49
+ end
50
+
51
+ let(:hash) do
52
+ { field: "" }
53
+ end
54
+
55
+ let(:evolved) do
56
+ hash.__evolve_object_id__
57
+ end
58
+
59
+ it "retains the empty string values" do
60
+ evolved[:field].should be_empty
61
+ end
62
+ end
63
+
64
+ context "when values have nils" do
65
+
66
+ let(:object_id) do
67
+ Moped::BSON::ObjectId.new
68
+ end
69
+
70
+ let(:hash) do
71
+ { field: nil }
72
+ end
73
+
74
+ let(:evolved) do
75
+ hash.__evolve_object_id__
76
+ end
77
+
78
+ it "retains the nil values" do
79
+ evolved[:field].should be_nil
80
+ end
81
+ end
82
+ end
83
+
84
+ describe "#__mongoize_object_id__" do
85
+
86
+ context "when values have object id strings" do
87
+
88
+ let(:object_id) do
89
+ Moped::BSON::ObjectId.new
90
+ end
91
+
92
+ let(:hash) do
93
+ { field: object_id.to_s }
94
+ end
95
+
96
+ let(:mongoized) do
97
+ hash.__mongoize_object_id__
98
+ end
99
+
100
+ it "converts each value in the hash" do
101
+ mongoized[:field].should eq(object_id)
102
+ end
103
+ end
104
+
105
+ context "when values have object ids" do
106
+
107
+ let(:object_id) do
108
+ Moped::BSON::ObjectId.new
109
+ end
110
+
111
+ let(:hash) do
112
+ { field: object_id }
113
+ end
114
+
115
+ let(:mongoized) do
116
+ hash.__mongoize_object_id__
117
+ end
118
+
119
+ it "converts each value in the hash" do
120
+ mongoized[:field].should eq(object_id)
121
+ end
122
+ end
123
+
124
+ context "when values have empty strings" do
125
+
126
+ let(:object_id) do
127
+ Moped::BSON::ObjectId.new
128
+ end
129
+
130
+ let(:hash) do
131
+ { field: "" }
132
+ end
133
+
134
+ let(:mongoized) do
135
+ hash.__mongoize_object_id__
136
+ end
137
+
138
+ it "converts the empty strings to nil" do
139
+ mongoized[:field].should be_nil
140
+ end
141
+ end
142
+
143
+ context "when values have nils" do
144
+
145
+ let(:object_id) do
146
+ Moped::BSON::ObjectId.new
147
+ end
148
+
149
+ let(:hash) do
150
+ { field: nil }
151
+ end
152
+
153
+ let(:mongoized) do
154
+ hash.__mongoize_object_id__
155
+ end
156
+
157
+ it "retains the nil values" do
158
+ mongoized[:field].should be_nil
159
+ end
160
+ end
161
+ end
162
+
163
+ describe "#__consolidate__" do
164
+
165
+ context "when the hash already contains the key" do
166
+
167
+ context "when the $set is first" do
168
+
169
+ let(:hash) do
170
+ { "$set" => { name: "Tool" }, likes: 10, "$inc" => { plays: 1 }}
171
+ end
172
+
173
+ let(:consolidated) do
174
+ hash.__consolidate__(Band)
175
+ end
176
+
177
+ it "moves the non hash values under the provided key" do
178
+ consolidated.should eq({
179
+ "$set" => { name: "Tool", likes: 10 }, "$inc" => { plays: 1 }
180
+ })
181
+ end
182
+ end
183
+
184
+ context "when the $set is not first" do
185
+
186
+ let(:hash) do
187
+ { likes: 10, "$inc" => { plays: 1 }, "$set" => { name: "Tool" }}
188
+ end
189
+
190
+ let(:consolidated) do
191
+ hash.__consolidate__(Band)
192
+ end
193
+
194
+ it "moves the non hash values under the provided key" do
195
+ consolidated.should eq({
196
+ "$set" => { likes: 10, name: "Tool" }, "$inc" => { plays: 1 }
197
+ })
198
+ end
199
+ end
200
+ end
201
+
202
+ context "when the hash does not contain the key" do
203
+
204
+ let(:hash) do
205
+ { likes: 10, "$inc" => { plays: 1 }, name: "Tool"}
206
+ end
207
+
208
+ let(:consolidated) do
209
+ hash.__consolidate__(Band)
210
+ end
211
+
212
+ it "moves the non hash values under the provided key" do
213
+ consolidated.should eq({
214
+ "$set" => { likes: 10, name: "Tool" }, "$inc" => { plays: 1 }
215
+ })
216
+ end
217
+ end
218
+ end
219
+
220
+ context "when the hash key is a string" do
221
+
222
+ let(:hash) do
223
+ { "100" => { "name" => "hundred" } }
224
+ end
225
+
226
+ let(:nested) do
227
+ hash.__nested__("100.name")
228
+ end
229
+
230
+ it "should retrieve a nested value under the provided key" do
231
+ nested.should eq "hundred"
232
+ end
233
+ end
234
+
235
+ context "when the hash key is an integer" do
236
+
237
+ let(:hash) do
238
+ { 100 => { "name" => "hundred" } }
239
+ end
240
+
241
+ let(:nested) do
242
+ hash.__nested__("100.name")
243
+ end
244
+
245
+ it "should retrieve a nested value under the provided key" do
246
+ nested.should eq("hundred")
247
+ end
248
+ end
249
+
250
+ describe ".demongoize" do
251
+
252
+ let(:hash) do
253
+ { field: 1 }
254
+ end
255
+
256
+ it "returns the hash" do
257
+ Hash.demongoize(hash).should eq(hash)
258
+ end
259
+ end
260
+
261
+ describe ".mongoize" do
262
+
263
+ context "when object isn't nil" do
264
+
265
+ let(:date) do
266
+ Date.new(2012, 1, 1)
267
+ end
268
+
269
+ let(:hash) do
270
+ { date: date }
271
+ end
272
+
273
+ let(:mongoized) do
274
+ Hash.mongoize(hash)
275
+ end
276
+
277
+ it "mongoizes each element in the hash" do
278
+ mongoized[:date].should be_a(Time)
279
+ end
280
+
281
+ it "converts the elements properly" do
282
+ mongoized[:date].should eq(date)
283
+ end
284
+ end
285
+
286
+ context "when object is nil" do
287
+ let(:mongoized) do
288
+ Hash.mongoize(nil)
289
+ end
290
+
291
+ it "returns nil" do
292
+ mongoized.should be_nil
293
+ end
294
+ end
295
+ end
296
+
297
+ describe "#mongoize" do
298
+
299
+ let(:date) do
300
+ Date.new(2012, 1, 1)
301
+ end
302
+
303
+ let(:hash) do
304
+ { date: date }
305
+ end
306
+
307
+ let(:mongoized) do
308
+ hash.mongoize
309
+ end
310
+
311
+ it "mongoizes each element in the hash" do
312
+ mongoized[:date].should be_a(Time)
313
+ end
314
+
315
+ it "converts the elements properly" do
316
+ mongoized[:date].should eq(date)
317
+ end
318
+ end
319
+
320
+ describe "#resizable?" do
321
+
322
+ it "returns true" do
323
+ {}.should be_resizable
324
+ end
325
+ end
326
+
327
+ describe ".resizable?" do
328
+
329
+ it "returns true" do
330
+ Hash.should be_resizable
331
+ end
332
+ end
333
+ end