mongoid_rails4 4.0.0

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 (659) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3213 -0
  3. data/LICENSE +20 -0
  4. data/README.md +62 -0
  5. data/Rakefile +35 -0
  6. data/lib/config/locales/en.yml +448 -0
  7. data/lib/mongoid.rb +104 -0
  8. data/lib/mongoid/atomic.rb +384 -0
  9. data/lib/mongoid/atomic/modifiers.rb +317 -0
  10. data/lib/mongoid/atomic/paths.rb +3 -0
  11. data/lib/mongoid/atomic/paths/embedded.rb +28 -0
  12. data/lib/mongoid/atomic/paths/embedded/many.rb +44 -0
  13. data/lib/mongoid/atomic/paths/embedded/one.rb +43 -0
  14. data/lib/mongoid/atomic/paths/root.rb +39 -0
  15. data/lib/mongoid/attributes.rb +284 -0
  16. data/lib/mongoid/attributes/dynamic.rb +154 -0
  17. data/lib/mongoid/attributes/nested.rb +82 -0
  18. data/lib/mongoid/attributes/processing.rb +147 -0
  19. data/lib/mongoid/attributes/readonly.rb +56 -0
  20. data/lib/mongoid/changeable.rb +379 -0
  21. data/lib/mongoid/composable.rb +104 -0
  22. data/lib/mongoid/config.rb +263 -0
  23. data/lib/mongoid/config/environment.rb +44 -0
  24. data/lib/mongoid/config/options.rb +74 -0
  25. data/lib/mongoid/config/validators.rb +3 -0
  26. data/lib/mongoid/config/validators/option.rb +25 -0
  27. data/lib/mongoid/config/validators/session.rb +140 -0
  28. data/lib/mongoid/contextual.rb +54 -0
  29. data/lib/mongoid/contextual/aggregable/memory.rb +109 -0
  30. data/lib/mongoid/contextual/aggregable/mongo.rb +147 -0
  31. data/lib/mongoid/contextual/atomic.rb +180 -0
  32. data/lib/mongoid/contextual/command.rb +61 -0
  33. data/lib/mongoid/contextual/eager.rb +158 -0
  34. data/lib/mongoid/contextual/find_and_modify.rb +69 -0
  35. data/lib/mongoid/contextual/geo_near.rb +238 -0
  36. data/lib/mongoid/contextual/map_reduce.rb +324 -0
  37. data/lib/mongoid/contextual/memory.rb +440 -0
  38. data/lib/mongoid/contextual/mongo.rb +676 -0
  39. data/lib/mongoid/contextual/queryable.rb +25 -0
  40. data/lib/mongoid/contextual/text_search.rb +180 -0
  41. data/lib/mongoid/copyable.rb +67 -0
  42. data/lib/mongoid/criteria.rb +562 -0
  43. data/lib/mongoid/criteria/findable.rb +179 -0
  44. data/lib/mongoid/criteria/inspectable.rb +25 -0
  45. data/lib/mongoid/criteria/marshalable.rb +50 -0
  46. data/lib/mongoid/criteria/modifiable.rb +189 -0
  47. data/lib/mongoid/criteria/scopable.rb +158 -0
  48. data/lib/mongoid/document.rb +361 -0
  49. data/lib/mongoid/equality.rb +66 -0
  50. data/lib/mongoid/errors.rb +40 -0
  51. data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
  52. data/lib/mongoid/errors/callback.rb +25 -0
  53. data/lib/mongoid/errors/delete_restriction.rb +29 -0
  54. data/lib/mongoid/errors/document_not_found.rb +111 -0
  55. data/lib/mongoid/errors/eager_load.rb +22 -0
  56. data/lib/mongoid/errors/invalid_collection.rb +18 -0
  57. data/lib/mongoid/errors/invalid_config_option.rb +27 -0
  58. data/lib/mongoid/errors/invalid_field.rb +64 -0
  59. data/lib/mongoid/errors/invalid_field_option.rb +35 -0
  60. data/lib/mongoid/errors/invalid_find.rb +19 -0
  61. data/lib/mongoid/errors/invalid_includes.rb +32 -0
  62. data/lib/mongoid/errors/invalid_index.rb +28 -0
  63. data/lib/mongoid/errors/invalid_options.rb +28 -0
  64. data/lib/mongoid/errors/invalid_path.rb +21 -0
  65. data/lib/mongoid/errors/invalid_scope.rb +24 -0
  66. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
  67. data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
  68. data/lib/mongoid/errors/invalid_time.rb +22 -0
  69. data/lib/mongoid/errors/inverse_not_found.rb +29 -0
  70. data/lib/mongoid/errors/mixed_relations.rb +32 -0
  71. data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
  72. data/lib/mongoid/errors/mongoid_error.rb +92 -0
  73. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
  74. data/lib/mongoid/errors/no_default_session.rb +23 -0
  75. data/lib/mongoid/errors/no_environment.rb +19 -0
  76. data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
  77. data/lib/mongoid/errors/no_metadata.rb +21 -0
  78. data/lib/mongoid/errors/no_parent.rb +24 -0
  79. data/lib/mongoid/errors/no_session_config.rb +22 -0
  80. data/lib/mongoid/errors/no_session_database.rb +27 -0
  81. data/lib/mongoid/errors/no_session_hosts.rb +27 -0
  82. data/lib/mongoid/errors/no_sessions_config.rb +20 -0
  83. data/lib/mongoid/errors/readonly_attribute.rb +25 -0
  84. data/lib/mongoid/errors/scope_overwrite.rb +21 -0
  85. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +20 -0
  86. data/lib/mongoid/errors/unknown_attribute.rb +25 -0
  87. data/lib/mongoid/errors/unsaved_document.rb +19 -0
  88. data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
  89. data/lib/mongoid/errors/validations.rb +29 -0
  90. data/lib/mongoid/evolvable.rb +19 -0
  91. data/lib/mongoid/extensions.rb +35 -0
  92. data/lib/mongoid/extensions/array.rb +180 -0
  93. data/lib/mongoid/extensions/big_decimal.rb +69 -0
  94. data/lib/mongoid/extensions/boolean.rb +21 -0
  95. data/lib/mongoid/extensions/date.rb +77 -0
  96. data/lib/mongoid/extensions/date_time.rb +73 -0
  97. data/lib/mongoid/extensions/false_class.rb +38 -0
  98. data/lib/mongoid/extensions/float.rb +56 -0
  99. data/lib/mongoid/extensions/hash.rb +209 -0
  100. data/lib/mongoid/extensions/integer.rb +67 -0
  101. data/lib/mongoid/extensions/module.rb +28 -0
  102. data/lib/mongoid/extensions/nil_class.rb +33 -0
  103. data/lib/mongoid/extensions/object.rb +274 -0
  104. data/lib/mongoid/extensions/object_id.rb +54 -0
  105. data/lib/mongoid/extensions/range.rb +79 -0
  106. data/lib/mongoid/extensions/regexp.rb +27 -0
  107. data/lib/mongoid/extensions/set.rb +55 -0
  108. data/lib/mongoid/extensions/string.rb +199 -0
  109. data/lib/mongoid/extensions/symbol.rb +54 -0
  110. data/lib/mongoid/extensions/time.rb +88 -0
  111. data/lib/mongoid/extensions/time_with_zone.rb +56 -0
  112. data/lib/mongoid/extensions/true_class.rb +38 -0
  113. data/lib/mongoid/factory.rb +46 -0
  114. data/lib/mongoid/fields.rb +542 -0
  115. data/lib/mongoid/fields/foreign_key.rb +174 -0
  116. data/lib/mongoid/fields/localized.rb +73 -0
  117. data/lib/mongoid/fields/standard.rb +273 -0
  118. data/lib/mongoid/fields/validators.rb +2 -0
  119. data/lib/mongoid/fields/validators/macro.rb +92 -0
  120. data/lib/mongoid/findable.rb +133 -0
  121. data/lib/mongoid/identity_map.rb +163 -0
  122. data/lib/mongoid/indexable.rb +147 -0
  123. data/lib/mongoid/indexable/specification.rb +115 -0
  124. data/lib/mongoid/indexable/validators/options.rb +103 -0
  125. data/lib/mongoid/inspectable.rb +59 -0
  126. data/lib/mongoid/interceptable.rb +265 -0
  127. data/lib/mongoid/loggable.rb +69 -0
  128. data/lib/mongoid/matchable.rb +152 -0
  129. data/lib/mongoid/matchable/all.rb +27 -0
  130. data/lib/mongoid/matchable/and.rb +30 -0
  131. data/lib/mongoid/matchable/default.rb +72 -0
  132. data/lib/mongoid/matchable/exists.rb +23 -0
  133. data/lib/mongoid/matchable/gt.rb +21 -0
  134. data/lib/mongoid/matchable/gte.rb +21 -0
  135. data/lib/mongoid/matchable/in.rb +24 -0
  136. data/lib/mongoid/matchable/lt.rb +21 -0
  137. data/lib/mongoid/matchable/lte.rb +21 -0
  138. data/lib/mongoid/matchable/ne.rb +21 -0
  139. data/lib/mongoid/matchable/nin.rb +21 -0
  140. data/lib/mongoid/matchable/or.rb +33 -0
  141. data/lib/mongoid/matchable/size.rb +21 -0
  142. data/lib/mongoid/persistable.rb +207 -0
  143. data/lib/mongoid/persistable/creatable.rb +189 -0
  144. data/lib/mongoid/persistable/deletable.rb +149 -0
  145. data/lib/mongoid/persistable/destroyable.rb +55 -0
  146. data/lib/mongoid/persistable/incrementable.rb +36 -0
  147. data/lib/mongoid/persistable/logical.rb +38 -0
  148. data/lib/mongoid/persistable/poppable.rb +39 -0
  149. data/lib/mongoid/persistable/pullable.rb +55 -0
  150. data/lib/mongoid/persistable/pushable.rb +62 -0
  151. data/lib/mongoid/persistable/renamable.rb +35 -0
  152. data/lib/mongoid/persistable/savable.rb +52 -0
  153. data/lib/mongoid/persistable/settable.rb +33 -0
  154. data/lib/mongoid/persistable/unsettable.rb +36 -0
  155. data/lib/mongoid/persistable/updatable.rb +151 -0
  156. data/lib/mongoid/persistable/upsertable.rb +55 -0
  157. data/lib/mongoid/positional.rb +71 -0
  158. data/lib/mongoid/railtie.rb +156 -0
  159. data/lib/mongoid/railties/database.rake +97 -0
  160. data/lib/mongoid/railties/document.rb +12 -0
  161. data/lib/mongoid/relations.rb +162 -0
  162. data/lib/mongoid/relations/accessors.rb +299 -0
  163. data/lib/mongoid/relations/auto_save.rb +106 -0
  164. data/lib/mongoid/relations/binding.rb +218 -0
  165. data/lib/mongoid/relations/bindings.rb +9 -0
  166. data/lib/mongoid/relations/bindings/embedded/in.rb +63 -0
  167. data/lib/mongoid/relations/bindings/embedded/many.rb +50 -0
  168. data/lib/mongoid/relations/bindings/embedded/one.rb +55 -0
  169. data/lib/mongoid/relations/bindings/referenced/in.rb +65 -0
  170. data/lib/mongoid/relations/bindings/referenced/many.rb +42 -0
  171. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +67 -0
  172. data/lib/mongoid/relations/bindings/referenced/one.rb +44 -0
  173. data/lib/mongoid/relations/builder.rb +57 -0
  174. data/lib/mongoid/relations/builders.rb +104 -0
  175. data/lib/mongoid/relations/builders/embedded/in.rb +29 -0
  176. data/lib/mongoid/relations/builders/embedded/many.rb +36 -0
  177. data/lib/mongoid/relations/builders/embedded/one.rb +30 -0
  178. data/lib/mongoid/relations/builders/nested_attributes/many.rb +174 -0
  179. data/lib/mongoid/relations/builders/nested_attributes/one.rb +126 -0
  180. data/lib/mongoid/relations/builders/referenced/in.rb +26 -0
  181. data/lib/mongoid/relations/builders/referenced/many.rb +27 -0
  182. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +40 -0
  183. data/lib/mongoid/relations/builders/referenced/one.rb +26 -0
  184. data/lib/mongoid/relations/cascading.rb +56 -0
  185. data/lib/mongoid/relations/cascading/delete.rb +44 -0
  186. data/lib/mongoid/relations/cascading/destroy.rb +43 -0
  187. data/lib/mongoid/relations/cascading/nullify.rb +35 -0
  188. data/lib/mongoid/relations/cascading/restrict.rb +39 -0
  189. data/lib/mongoid/relations/constraint.rb +49 -0
  190. data/lib/mongoid/relations/conversions.rb +34 -0
  191. data/lib/mongoid/relations/counter_cache.rb +105 -0
  192. data/lib/mongoid/relations/cyclic.rb +107 -0
  193. data/lib/mongoid/relations/embedded/batchable.rb +355 -0
  194. data/lib/mongoid/relations/embedded/in.rb +231 -0
  195. data/lib/mongoid/relations/embedded/many.rb +639 -0
  196. data/lib/mongoid/relations/embedded/one.rb +223 -0
  197. data/lib/mongoid/relations/macros.rb +356 -0
  198. data/lib/mongoid/relations/many.rb +208 -0
  199. data/lib/mongoid/relations/marshalable.rb +32 -0
  200. data/lib/mongoid/relations/metadata.rb +1174 -0
  201. data/lib/mongoid/relations/nested_builder.rb +74 -0
  202. data/lib/mongoid/relations/one.rb +48 -0
  203. data/lib/mongoid/relations/options.rb +48 -0
  204. data/lib/mongoid/relations/polymorphic.rb +39 -0
  205. data/lib/mongoid/relations/proxy.rb +270 -0
  206. data/lib/mongoid/relations/referenced/in.rb +297 -0
  207. data/lib/mongoid/relations/referenced/many.rb +787 -0
  208. data/lib/mongoid/relations/referenced/many_to_many.rb +486 -0
  209. data/lib/mongoid/relations/referenced/one.rb +290 -0
  210. data/lib/mongoid/relations/reflections.rb +62 -0
  211. data/lib/mongoid/relations/synchronization.rb +169 -0
  212. data/lib/mongoid/relations/targets.rb +2 -0
  213. data/lib/mongoid/relations/targets/enumerable.rb +473 -0
  214. data/lib/mongoid/relations/touchable.rb +94 -0
  215. data/lib/mongoid/reloadable.rb +95 -0
  216. data/lib/mongoid/scopable.rb +379 -0
  217. data/lib/mongoid/selectable.rb +59 -0
  218. data/lib/mongoid/serializable.rb +170 -0
  219. data/lib/mongoid/sessions.rb +330 -0
  220. data/lib/mongoid/sessions/factory.rb +129 -0
  221. data/lib/mongoid/sessions/mongo_uri.rb +93 -0
  222. data/lib/mongoid/sessions/options.rb +141 -0
  223. data/lib/mongoid/sessions/validators.rb +2 -0
  224. data/lib/mongoid/sessions/validators/storage.rb +49 -0
  225. data/lib/mongoid/shardable.rb +65 -0
  226. data/lib/mongoid/state.rb +97 -0
  227. data/lib/mongoid/threaded.rb +383 -0
  228. data/lib/mongoid/threaded/lifecycle.rb +164 -0
  229. data/lib/mongoid/timestamps.rb +15 -0
  230. data/lib/mongoid/timestamps/created.rb +30 -0
  231. data/lib/mongoid/timestamps/created/short.rb +19 -0
  232. data/lib/mongoid/timestamps/short.rb +10 -0
  233. data/lib/mongoid/timestamps/updated.rb +39 -0
  234. data/lib/mongoid/timestamps/updated/short.rb +19 -0
  235. data/lib/mongoid/traversable.rb +192 -0
  236. data/lib/mongoid/unit_of_work.rb +61 -0
  237. data/lib/mongoid/validatable.rb +180 -0
  238. data/lib/mongoid/validatable/associated.rb +48 -0
  239. data/lib/mongoid/validatable/format.rb +20 -0
  240. data/lib/mongoid/validatable/length.rb +20 -0
  241. data/lib/mongoid/validatable/localizable.rb +30 -0
  242. data/lib/mongoid/validatable/macros.rb +94 -0
  243. data/lib/mongoid/validatable/presence.rb +86 -0
  244. data/lib/mongoid/validatable/queryable.rb +30 -0
  245. data/lib/mongoid/validatable/uniqueness.rb +330 -0
  246. data/lib/mongoid/version.rb +4 -0
  247. data/lib/rack/mongoid.rb +2 -0
  248. data/lib/rack/mongoid/middleware/identity_map.rb +39 -0
  249. data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
  250. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +76 -0
  251. data/lib/rails/generators/mongoid/model/model_generator.rb +25 -0
  252. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +19 -0
  253. data/lib/rails/generators/mongoid/observer/observer_generator.rb +17 -0
  254. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +4 -0
  255. data/lib/rails/generators/mongoid_generator.rb +65 -0
  256. data/lib/rails/mongoid.rb +180 -0
  257. data/lib/support/ruby_version.rb +26 -0
  258. data/spec/app/models/account.rb +28 -0
  259. data/spec/app/models/acolyte.rb +17 -0
  260. data/spec/app/models/actor.rb +18 -0
  261. data/spec/app/models/actress.rb +2 -0
  262. data/spec/app/models/address.rb +77 -0
  263. data/spec/app/models/address_component.rb +5 -0
  264. data/spec/app/models/address_number.rb +6 -0
  265. data/spec/app/models/agency.rb +5 -0
  266. data/spec/app/models/agent.rb +12 -0
  267. data/spec/app/models/album.rb +14 -0
  268. data/spec/app/models/alert.rb +5 -0
  269. data/spec/app/models/animal.rb +25 -0
  270. data/spec/app/models/answer.rb +4 -0
  271. data/spec/app/models/appointment.rb +7 -0
  272. data/spec/app/models/article.rb +10 -0
  273. data/spec/app/models/artist.rb +66 -0
  274. data/spec/app/models/artwork.rb +4 -0
  275. data/spec/app/models/audio.rb +5 -0
  276. data/spec/app/models/augmentation.rb +11 -0
  277. data/spec/app/models/author.rb +4 -0
  278. data/spec/app/models/band.rb +26 -0
  279. data/spec/app/models/bar.rb +10 -0
  280. data/spec/app/models/basic.rb +6 -0
  281. data/spec/app/models/bed.rb +1 -0
  282. data/spec/app/models/big_palette.rb +2 -0
  283. data/spec/app/models/birthday.rb +13 -0
  284. data/spec/app/models/book.rb +13 -0
  285. data/spec/app/models/breed.rb +4 -0
  286. data/spec/app/models/browser.rb +6 -0
  287. data/spec/app/models/building.rb +5 -0
  288. data/spec/app/models/building_address.rb +5 -0
  289. data/spec/app/models/bus.rb +7 -0
  290. data/spec/app/models/business.rb +5 -0
  291. data/spec/app/models/callback_recorder.rb +25 -0
  292. data/spec/app/models/callback_test.rb +9 -0
  293. data/spec/app/models/canvas.rb +25 -0
  294. data/spec/app/models/car.rb +1 -0
  295. data/spec/app/models/cat.rb +8 -0
  296. data/spec/app/models/category.rb +8 -0
  297. data/spec/app/models/child.rb +4 -0
  298. data/spec/app/models/child_doc.rb +22 -0
  299. data/spec/app/models/church.rb +4 -0
  300. data/spec/app/models/circle.rb +3 -0
  301. data/spec/app/models/circuit.rb +4 -0
  302. data/spec/app/models/circus.rb +7 -0
  303. data/spec/app/models/code.rb +5 -0
  304. data/spec/app/models/comment.rb +16 -0
  305. data/spec/app/models/contractor.rb +5 -0
  306. data/spec/app/models/cookie.rb +6 -0
  307. data/spec/app/models/country_code.rb +8 -0
  308. data/spec/app/models/definition.rb +7 -0
  309. data/spec/app/models/description.rb +11 -0
  310. data/spec/app/models/dictionary.rb +10 -0
  311. data/spec/app/models/division.rb +10 -0
  312. data/spec/app/models/doctor.rb +12 -0
  313. data/spec/app/models/dog.rb +7 -0
  314. data/spec/app/models/dokument.rb +5 -0
  315. data/spec/app/models/dragon.rb +4 -0
  316. data/spec/app/models/driver.rb +7 -0
  317. data/spec/app/models/drug.rb +6 -0
  318. data/spec/app/models/dungeon.rb +4 -0
  319. data/spec/app/models/email.rb +6 -0
  320. data/spec/app/models/employer.rb +5 -0
  321. data/spec/app/models/entry.rb +6 -0
  322. data/spec/app/models/eraser.rb +1 -0
  323. data/spec/app/models/event.rb +22 -0
  324. data/spec/app/models/exhibition.rb +4 -0
  325. data/spec/app/models/exhibitor.rb +5 -0
  326. data/spec/app/models/eye.rb +9 -0
  327. data/spec/app/models/eye_bowl.rb +9 -0
  328. data/spec/app/models/face.rb +8 -0
  329. data/spec/app/models/favorite.rb +6 -0
  330. data/spec/app/models/filesystem.rb +5 -0
  331. data/spec/app/models/fire_hydrant.rb +6 -0
  332. data/spec/app/models/firefox.rb +4 -0
  333. data/spec/app/models/fish.rb +7 -0
  334. data/spec/app/models/folder.rb +7 -0
  335. data/spec/app/models/folder_item.rb +9 -0
  336. data/spec/app/models/fruits.rb +28 -0
  337. data/spec/app/models/game.rb +19 -0
  338. data/spec/app/models/ghost.rb +7 -0
  339. data/spec/app/models/home.rb +4 -0
  340. data/spec/app/models/house.rb +6 -0
  341. data/spec/app/models/html_writer.rb +3 -0
  342. data/spec/app/models/image.rb +22 -0
  343. data/spec/app/models/implant.rb +16 -0
  344. data/spec/app/models/item.rb +8 -0
  345. data/spec/app/models/jar.rb +7 -0
  346. data/spec/app/models/label.rb +40 -0
  347. data/spec/app/models/language.rb +5 -0
  348. data/spec/app/models/lat_lng.rb +15 -0
  349. data/spec/app/models/league.rb +11 -0
  350. data/spec/app/models/learner.rb +2 -0
  351. data/spec/app/models/line_item.rb +6 -0
  352. data/spec/app/models/location.rb +8 -0
  353. data/spec/app/models/login.rb +8 -0
  354. data/spec/app/models/manufacturer.rb +7 -0
  355. data/spec/app/models/meat.rb +4 -0
  356. data/spec/app/models/membership.rb +4 -0
  357. data/spec/app/models/mixed_drink.rb +4 -0
  358. data/spec/app/models/movie.rb +13 -0
  359. data/spec/app/models/my_hash.rb +2 -0
  360. data/spec/app/models/name.rb +23 -0
  361. data/spec/app/models/node.rb +5 -0
  362. data/spec/app/models/note.rb +12 -0
  363. data/spec/app/models/ordered_post.rb +6 -0
  364. data/spec/app/models/ordered_preference.rb +6 -0
  365. data/spec/app/models/oscar.rb +15 -0
  366. data/spec/app/models/override.rb +16 -0
  367. data/spec/app/models/ownable.rb +6 -0
  368. data/spec/app/models/owner.rb +6 -0
  369. data/spec/app/models/pack.rb +3 -0
  370. data/spec/app/models/page.rb +5 -0
  371. data/spec/app/models/page_question.rb +4 -0
  372. data/spec/app/models/palette.rb +7 -0
  373. data/spec/app/models/parent.rb +5 -0
  374. data/spec/app/models/parent_doc.rb +6 -0
  375. data/spec/app/models/passport.rb +5 -0
  376. data/spec/app/models/patient.rb +9 -0
  377. data/spec/app/models/pdf_writer.rb +3 -0
  378. data/spec/app/models/pencil.rb +1 -0
  379. data/spec/app/models/person.rb +205 -0
  380. data/spec/app/models/pet.rb +23 -0
  381. data/spec/app/models/pet_owner.rb +6 -0
  382. data/spec/app/models/phone.rb +11 -0
  383. data/spec/app/models/pizza.rb +7 -0
  384. data/spec/app/models/player.rb +35 -0
  385. data/spec/app/models/post.rb +44 -0
  386. data/spec/app/models/powerup.rb +11 -0
  387. data/spec/app/models/preference.rb +9 -0
  388. data/spec/app/models/princess.rb +8 -0
  389. data/spec/app/models/product.rb +15 -0
  390. data/spec/app/models/profile.rb +5 -0
  391. data/spec/app/models/pronunciation.rb +5 -0
  392. data/spec/app/models/purchase.rb +4 -0
  393. data/spec/app/models/question.rb +8 -0
  394. data/spec/app/models/quiz.rb +7 -0
  395. data/spec/app/models/rating.rb +8 -0
  396. data/spec/app/models/record.rb +46 -0
  397. data/spec/app/models/registry.rb +4 -0
  398. data/spec/app/models/role.rb +7 -0
  399. data/spec/app/models/root_category.rb +4 -0
  400. data/spec/app/models/sandwich.rb +4 -0
  401. data/spec/app/models/scheduler.rb +7 -0
  402. data/spec/app/models/seo.rb +7 -0
  403. data/spec/app/models/series.rb +4 -0
  404. data/spec/app/models/server.rb +13 -0
  405. data/spec/app/models/service.rb +22 -0
  406. data/spec/app/models/shape.rb +12 -0
  407. data/spec/app/models/shelf.rb +5 -0
  408. data/spec/app/models/shipping_container.rb +5 -0
  409. data/spec/app/models/shipping_pack.rb +3 -0
  410. data/spec/app/models/shop.rb +6 -0
  411. data/spec/app/models/short_agent.rb +4 -0
  412. data/spec/app/models/short_quiz.rb +5 -0
  413. data/spec/app/models/slave.rb +6 -0
  414. data/spec/app/models/song.rb +8 -0
  415. data/spec/app/models/sound.rb +5 -0
  416. data/spec/app/models/square.rb +4 -0
  417. data/spec/app/models/strategy.rb +3 -0
  418. data/spec/app/models/sub_item.rb +3 -0
  419. data/spec/app/models/subscription.rb +4 -0
  420. data/spec/app/models/survey.rb +5 -0
  421. data/spec/app/models/symptom.rb +6 -0
  422. data/spec/app/models/tag.rb +8 -0
  423. data/spec/app/models/target.rb +5 -0
  424. data/spec/app/models/template.rb +5 -0
  425. data/spec/app/models/thing.rb +9 -0
  426. data/spec/app/models/title.rb +3 -0
  427. data/spec/app/models/tool.rb +8 -0
  428. data/spec/app/models/topping.rb +5 -0
  429. data/spec/app/models/track.rb +38 -0
  430. data/spec/app/models/translation.rb +5 -0
  431. data/spec/app/models/tree.rb +9 -0
  432. data/spec/app/models/truck.rb +3 -0
  433. data/spec/app/models/user.rb +21 -0
  434. data/spec/app/models/user_account.rb +10 -0
  435. data/spec/app/models/validation_callback.rb +10 -0
  436. data/spec/app/models/vehicle.rb +11 -0
  437. data/spec/app/models/version.rb +5 -0
  438. data/spec/app/models/vet_visit.rb +5 -0
  439. data/spec/app/models/video.rb +13 -0
  440. data/spec/app/models/weapon.rb +11 -0
  441. data/spec/app/models/wiki_page.rb +14 -0
  442. data/spec/app/models/word.rb +15 -0
  443. data/spec/app/models/word_origin.rb +11 -0
  444. data/spec/app/models/writer.rb +11 -0
  445. data/spec/config/mongoid.yml +38 -0
  446. data/spec/mongoid/atomic/modifiers_spec.rb +456 -0
  447. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +118 -0
  448. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +110 -0
  449. data/spec/mongoid/atomic/paths/root_spec.rb +48 -0
  450. data/spec/mongoid/atomic/paths_spec.rb +270 -0
  451. data/spec/mongoid/atomic_spec.rb +365 -0
  452. data/spec/mongoid/attributes/nested_spec.rb +4832 -0
  453. data/spec/mongoid/attributes/readonly_spec.rb +169 -0
  454. data/spec/mongoid/attributes_spec.rb +1412 -0
  455. data/spec/mongoid/changeable_spec.rb +1507 -0
  456. data/spec/mongoid/composable_spec.rb +24 -0
  457. data/spec/mongoid/config/environment_spec.rb +83 -0
  458. data/spec/mongoid/config/options_spec.rb +56 -0
  459. data/spec/mongoid/config_spec.rb +318 -0
  460. data/spec/mongoid/contextual/aggregable/memory_spec.rb +293 -0
  461. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +455 -0
  462. data/spec/mongoid/contextual/atomic_spec.rb +529 -0
  463. data/spec/mongoid/contextual/find_and_modify_spec.rb +220 -0
  464. data/spec/mongoid/contextual/geo_near_spec.rb +405 -0
  465. data/spec/mongoid/contextual/map_reduce_spec.rb +464 -0
  466. data/spec/mongoid/contextual/memory_spec.rb +1236 -0
  467. data/spec/mongoid/contextual/mongo_spec.rb +1843 -0
  468. data/spec/mongoid/contextual/text_search_spec.rb +207 -0
  469. data/spec/mongoid/copyable_spec.rb +393 -0
  470. data/spec/mongoid/criteria/findable_spec.rb +1189 -0
  471. data/spec/mongoid/criteria/inspectable_spec.rb +27 -0
  472. data/spec/mongoid/criteria/marshalable_spec.rb +28 -0
  473. data/spec/mongoid/criteria/modifiable_spec.rb +1063 -0
  474. data/spec/mongoid/criteria/scopable_spec.rb +391 -0
  475. data/spec/mongoid/criteria_spec.rb +3821 -0
  476. data/spec/mongoid/document_spec.rb +1205 -0
  477. data/spec/mongoid/equality_spec.rb +241 -0
  478. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +29 -0
  479. data/spec/mongoid/errors/callback_spec.rb +29 -0
  480. data/spec/mongoid/errors/delete_restriction_spec.rb +29 -0
  481. data/spec/mongoid/errors/document_not_found_spec.rb +104 -0
  482. data/spec/mongoid/errors/eager_load_spec.rb +29 -0
  483. data/spec/mongoid/errors/invalid_collection_spec.rb +36 -0
  484. data/spec/mongoid/errors/invalid_config_option_spec.rb +29 -0
  485. data/spec/mongoid/errors/invalid_field_option_spec.rb +29 -0
  486. data/spec/mongoid/errors/invalid_field_spec.rb +37 -0
  487. data/spec/mongoid/errors/invalid_find_spec.rb +29 -0
  488. data/spec/mongoid/errors/invalid_includes_spec.rb +40 -0
  489. data/spec/mongoid/errors/invalid_index_spec.rb +29 -0
  490. data/spec/mongoid/errors/invalid_options_spec.rb +29 -0
  491. data/spec/mongoid/errors/invalid_path_spec.rb +23 -0
  492. data/spec/mongoid/errors/invalid_scope_spec.rb +29 -0
  493. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +17 -0
  494. data/spec/mongoid/errors/invalid_storage_options_spec.rb +29 -0
  495. data/spec/mongoid/errors/invalid_time_spec.rb +29 -0
  496. data/spec/mongoid/errors/inverse_not_found_spec.rb +29 -0
  497. data/spec/mongoid/errors/mixed_relations_spec.rb +29 -0
  498. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +29 -0
  499. data/spec/mongoid/errors/mongoid_error_spec.rb +48 -0
  500. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +29 -0
  501. data/spec/mongoid/errors/no_environment_spec.rb +29 -0
  502. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +29 -0
  503. data/spec/mongoid/errors/no_metadata_spec.rb +23 -0
  504. data/spec/mongoid/errors/no_parent_spec.rb +29 -0
  505. data/spec/mongoid/errors/no_session_config_spec.rb +29 -0
  506. data/spec/mongoid/errors/no_session_database_spec.rb +29 -0
  507. data/spec/mongoid/errors/no_session_hosts_spec.rb +29 -0
  508. data/spec/mongoid/errors/no_sessions_config_spec.rb +29 -0
  509. data/spec/mongoid/errors/readonly_attribute_spec.rb +29 -0
  510. data/spec/mongoid/errors/scope_overwrite_spec.rb +29 -0
  511. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +29 -0
  512. data/spec/mongoid/errors/unknown_attribute_spec.rb +29 -0
  513. data/spec/mongoid/errors/unsaved_document_spec.rb +37 -0
  514. data/spec/mongoid/errors/unsupported_javascript_spec.rb +29 -0
  515. data/spec/mongoid/errors/validations_spec.rb +45 -0
  516. data/spec/mongoid/extensions/array_spec.rb +638 -0
  517. data/spec/mongoid/extensions/big_decimal_spec.rb +104 -0
  518. data/spec/mongoid/extensions/binary_spec.rb +60 -0
  519. data/spec/mongoid/extensions/boolean_spec.rb +135 -0
  520. data/spec/mongoid/extensions/date_spec.rb +235 -0
  521. data/spec/mongoid/extensions/date_time_spec.rb +155 -0
  522. data/spec/mongoid/extensions/false_class_spec.rb +42 -0
  523. data/spec/mongoid/extensions/float_spec.rb +133 -0
  524. data/spec/mongoid/extensions/hash_spec.rb +333 -0
  525. data/spec/mongoid/extensions/integer_spec.rb +136 -0
  526. data/spec/mongoid/extensions/module_spec.rb +42 -0
  527. data/spec/mongoid/extensions/nil_class_spec.rb +11 -0
  528. data/spec/mongoid/extensions/object_id_spec.rb +946 -0
  529. data/spec/mongoid/extensions/object_spec.rb +292 -0
  530. data/spec/mongoid/extensions/range_spec.rb +105 -0
  531. data/spec/mongoid/extensions/regexp_spec.rb +47 -0
  532. data/spec/mongoid/extensions/set_spec.rb +33 -0
  533. data/spec/mongoid/extensions/string_spec.rb +357 -0
  534. data/spec/mongoid/extensions/symbol_spec.rb +76 -0
  535. data/spec/mongoid/extensions/time_spec.rb +467 -0
  536. data/spec/mongoid/extensions/time_with_zone_spec.rb +405 -0
  537. data/spec/mongoid/extensions/true_class_spec.rb +42 -0
  538. data/spec/mongoid/extensions_spec.rb +15 -0
  539. data/spec/mongoid/factory_spec.rb +185 -0
  540. data/spec/mongoid/fields/foreign_key_spec.rb +694 -0
  541. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +184 -0
  542. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +201 -0
  543. data/spec/mongoid/fields/localized_spec.rb +386 -0
  544. data/spec/mongoid/fields/standard_spec.rb +166 -0
  545. data/spec/mongoid/fields_spec.rb +1229 -0
  546. data/spec/mongoid/findable_spec.rb +342 -0
  547. data/spec/mongoid/identity_map_spec.rb +564 -0
  548. data/spec/mongoid/indexable/specification_spec.rb +87 -0
  549. data/spec/mongoid/indexable_spec.rb +504 -0
  550. data/spec/mongoid/inspectable_spec.rb +49 -0
  551. data/spec/mongoid/interceptable_spec.rb +1564 -0
  552. data/spec/mongoid/loggable_spec.rb +21 -0
  553. data/spec/mongoid/matchable/all_spec.rb +31 -0
  554. data/spec/mongoid/matchable/and_spec.rb +162 -0
  555. data/spec/mongoid/matchable/default_spec.rb +130 -0
  556. data/spec/mongoid/matchable/exists_spec.rb +57 -0
  557. data/spec/mongoid/matchable/gt_spec.rb +75 -0
  558. data/spec/mongoid/matchable/gte_spec.rb +74 -0
  559. data/spec/mongoid/matchable/in_spec.rb +25 -0
  560. data/spec/mongoid/matchable/lt_spec.rb +74 -0
  561. data/spec/mongoid/matchable/lte_spec.rb +74 -0
  562. data/spec/mongoid/matchable/ne_spec.rb +25 -0
  563. data/spec/mongoid/matchable/nin_spec.rb +25 -0
  564. data/spec/mongoid/matchable/or_spec.rb +106 -0
  565. data/spec/mongoid/matchable/size_spec.rb +25 -0
  566. data/spec/mongoid/matchable_spec.rb +532 -0
  567. data/spec/mongoid/persistable/creatable_spec.rb +512 -0
  568. data/spec/mongoid/persistable/deletable_spec.rb +205 -0
  569. data/spec/mongoid/persistable/destroyable_spec.rb +148 -0
  570. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  571. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  572. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  573. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  574. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  575. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  576. data/spec/mongoid/persistable/savable_spec.rb +432 -0
  577. data/spec/mongoid/persistable/settable_spec.rb +139 -0
  578. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  579. data/spec/mongoid/persistable/updatable_spec.rb +522 -0
  580. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  581. data/spec/mongoid/persistable_spec.rb +206 -0
  582. data/spec/mongoid/positional_spec.rb +227 -0
  583. data/spec/mongoid/railties/document_spec.rb +24 -0
  584. data/spec/mongoid/relations/accessors_spec.rb +736 -0
  585. data/spec/mongoid/relations/auto_save_spec.rb +261 -0
  586. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +171 -0
  587. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +54 -0
  588. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +77 -0
  589. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +241 -0
  590. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +153 -0
  591. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +178 -0
  592. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +131 -0
  593. data/spec/mongoid/relations/builders/embedded/in_spec.rb +34 -0
  594. data/spec/mongoid/relations/builders/embedded/many_spec.rb +132 -0
  595. data/spec/mongoid/relations/builders/embedded/one_spec.rb +99 -0
  596. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +234 -0
  597. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +250 -0
  598. data/spec/mongoid/relations/builders/referenced/in_spec.rb +241 -0
  599. data/spec/mongoid/relations/builders/referenced/many_spec.rb +137 -0
  600. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +178 -0
  601. data/spec/mongoid/relations/builders/referenced/one_spec.rb +124 -0
  602. data/spec/mongoid/relations/builders_spec.rb +226 -0
  603. data/spec/mongoid/relations/cascading/delete_spec.rb +101 -0
  604. data/spec/mongoid/relations/cascading/destroy_spec.rb +47 -0
  605. data/spec/mongoid/relations/cascading/nullify_spec.rb +32 -0
  606. data/spec/mongoid/relations/cascading/restrict_spec.rb +68 -0
  607. data/spec/mongoid/relations/cascading_spec.rb +355 -0
  608. data/spec/mongoid/relations/constraint_spec.rb +74 -0
  609. data/spec/mongoid/relations/conversions_spec.rb +126 -0
  610. data/spec/mongoid/relations/counter_cache_spec.rb +205 -0
  611. data/spec/mongoid/relations/cyclic_spec.rb +156 -0
  612. data/spec/mongoid/relations/embedded/dirty_spec.rb +65 -0
  613. data/spec/mongoid/relations/embedded/in_spec.rb +579 -0
  614. data/spec/mongoid/relations/embedded/many_spec.rb +3781 -0
  615. data/spec/mongoid/relations/embedded/one_spec.rb +1014 -0
  616. data/spec/mongoid/relations/macros_spec.rb +613 -0
  617. data/spec/mongoid/relations/metadata_spec.rb +1917 -0
  618. data/spec/mongoid/relations/options_spec.rb +35 -0
  619. data/spec/mongoid/relations/polymorphic_spec.rb +128 -0
  620. data/spec/mongoid/relations/proxy_spec.rb +48 -0
  621. data/spec/mongoid/relations/referenced/in_spec.rb +1435 -0
  622. data/spec/mongoid/relations/referenced/many_spec.rb +3546 -0
  623. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +3556 -0
  624. data/spec/mongoid/relations/referenced/one_spec.rb +1289 -0
  625. data/spec/mongoid/relations/reflections_spec.rb +101 -0
  626. data/spec/mongoid/relations/synchronization_spec.rb +449 -0
  627. data/spec/mongoid/relations/targets/enumerable_spec.rb +1710 -0
  628. data/spec/mongoid/relations/touchable_spec.rb +296 -0
  629. data/spec/mongoid/relations_spec.rb +188 -0
  630. data/spec/mongoid/reloadable_spec.rb +305 -0
  631. data/spec/mongoid/scopable_spec.rb +926 -0
  632. data/spec/mongoid/selectable_spec.rb +134 -0
  633. data/spec/mongoid/serializable_spec.rb +862 -0
  634. data/spec/mongoid/sessions/factory_spec.rb +312 -0
  635. data/spec/mongoid/sessions/mongo_uri_spec.rb +103 -0
  636. data/spec/mongoid/sessions/options_spec.rb +71 -0
  637. data/spec/mongoid/sessions_spec.rb +1078 -0
  638. data/spec/mongoid/shardable_spec.rb +61 -0
  639. data/spec/mongoid/state_spec.rb +102 -0
  640. data/spec/mongoid/threaded_spec.rb +258 -0
  641. data/spec/mongoid/timestamps/created/short_spec.rb +51 -0
  642. data/spec/mongoid/timestamps/created_spec.rb +44 -0
  643. data/spec/mongoid/timestamps/updated/short_spec.rb +90 -0
  644. data/spec/mongoid/timestamps/updated_spec.rb +86 -0
  645. data/spec/mongoid/timestamps_spec.rb +112 -0
  646. data/spec/mongoid/traversable_spec.rb +244 -0
  647. data/spec/mongoid/unit_of_work_spec.rb +196 -0
  648. data/spec/mongoid/validatable/associated_spec.rb +183 -0
  649. data/spec/mongoid/validatable/format_spec.rb +83 -0
  650. data/spec/mongoid/validatable/length_spec.rb +119 -0
  651. data/spec/mongoid/validatable/numericality_spec.rb +30 -0
  652. data/spec/mongoid/validatable/presence_spec.rb +511 -0
  653. data/spec/mongoid/validatable/uniqueness_spec.rb +2305 -0
  654. data/spec/mongoid/validatable_spec.rb +309 -0
  655. data/spec/mongoid_spec.rb +74 -0
  656. data/spec/rack/mongoid/middleware/identity_map_spec.rb +72 -0
  657. data/spec/rails/mongoid_spec.rb +462 -0
  658. data/spec/spec_helper.rb +103 -0
  659. metadata +1159 -0
@@ -0,0 +1,1078 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Sessions do
4
+
5
+ describe "#collection" do
6
+
7
+ context "when overriding the default with store_in" do
8
+
9
+ shared_examples_for "an overridden collection at the class level" do
10
+
11
+ let(:band) do
12
+ Band.new
13
+ end
14
+
15
+ it "returns the collection for the model" do
16
+ expect(band.collection).to be_a(Moped::Collection)
17
+ end
18
+
19
+ it "sets the correct collection name" do
20
+ expect(band.collection.name.to_s).to eq("artists")
21
+ end
22
+
23
+ context "when accessing from the class level" do
24
+
25
+ it "returns the collection for the model" do
26
+ expect(Band.collection).to be_a(Moped::Collection)
27
+ end
28
+
29
+ it "sets the correct collection name" do
30
+ expect(Band.collection.name.to_s).to eq("artists")
31
+ end
32
+ end
33
+
34
+ context "when safety options exist" do
35
+
36
+ context "when the options are from the current thread" do
37
+
38
+ before do
39
+ Band.with(safe: { w: 3 })
40
+ end
41
+
42
+ it "clears the options from the current thread" do
43
+ Band.collection
44
+ expect(Band.persistence_options).to be_nil
45
+ end
46
+
47
+ it "returns the collection" do
48
+ expect(Band.collection).to be_a(Moped::Collection)
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ after do
55
+ Band.storage_options = nil
56
+ end
57
+
58
+ context "when called multiple times with different options" do
59
+ before do
60
+ Band.store_in collection: "artists"
61
+ Band.store_in session: "another"
62
+ end
63
+
64
+ it "should merge the options together" do
65
+ expect(Band.storage_options).to eq({
66
+ collection: "artists",
67
+ session: "another"
68
+ })
69
+ end
70
+ end
71
+
72
+ context "when overriding with a proc" do
73
+
74
+ before do
75
+ Band.store_in(collection: ->{ "artists" })
76
+ end
77
+
78
+ it_behaves_like "an overridden collection at the class level"
79
+ end
80
+
81
+ context "when overriding with a string" do
82
+
83
+ before do
84
+ Band.store_in(collection: "artists")
85
+ end
86
+
87
+ it_behaves_like "an overridden collection at the class level"
88
+ end
89
+
90
+ context "when overriding with a symbol" do
91
+
92
+ before do
93
+ Band.store_in(collection: :artists)
94
+ end
95
+
96
+ it_behaves_like "an overridden collection at the class level"
97
+ end
98
+ end
99
+
100
+ context "when not overriding the default" do
101
+
102
+ let(:band) do
103
+ Band.new
104
+ end
105
+
106
+ it "returns the collection for the model" do
107
+ expect(band.collection).to be_a(Moped::Collection)
108
+ end
109
+
110
+ it "sets the correct collection name" do
111
+ expect(band.collection.name.to_s).to eq("bands")
112
+ end
113
+
114
+ context "when accessing from the class level" do
115
+
116
+ it "returns the collection for the model" do
117
+ expect(Band.collection).to be_a(Moped::Collection)
118
+ end
119
+
120
+ it "sets the correct collection name" do
121
+ expect(Band.collection.name.to_s).to eq("bands")
122
+ end
123
+ end
124
+ end
125
+ end
126
+
127
+ describe "#collection_name" do
128
+
129
+ context "when overriding the default with store_in" do
130
+
131
+ shared_examples_for "an overridden collection name at the class level" do
132
+
133
+ let(:band) do
134
+ Band.new
135
+ end
136
+
137
+ context "when accessing from the instance" do
138
+
139
+ it "returns the overridden value" do
140
+ expect(band.collection_name).to eq(:artists)
141
+ end
142
+ end
143
+
144
+ context "when accessing from the class level" do
145
+
146
+ it "returns the overridden value" do
147
+ expect(Band.collection_name).to eq(:artists)
148
+ end
149
+ end
150
+ end
151
+
152
+ after do
153
+ Band.storage_options = nil
154
+ end
155
+
156
+ context "when overriding with a proc" do
157
+
158
+ before do
159
+ Band.store_in(collection: ->{ "artists" })
160
+ end
161
+
162
+ it_behaves_like "an overridden collection name at the class level"
163
+ end
164
+
165
+ context "when overriding with a string" do
166
+
167
+ before do
168
+ Band.store_in(collection: "artists")
169
+ end
170
+
171
+ it_behaves_like "an overridden collection name at the class level"
172
+ end
173
+
174
+ context "when overriding with a symbol" do
175
+
176
+ before do
177
+ Band.store_in(collection: :artists)
178
+ end
179
+
180
+ it_behaves_like "an overridden collection name at the class level"
181
+ end
182
+ end
183
+
184
+ context "when not overriding the default" do
185
+
186
+ let(:band) do
187
+ Band.new
188
+ end
189
+
190
+ it "returns the pluralized model name" do
191
+ expect(band.collection_name).to eq(:bands)
192
+ end
193
+
194
+ context "when accessing from the class level" do
195
+
196
+ it "returns the pluralized model name" do
197
+ expect(Band.collection_name).to eq(:bands)
198
+ end
199
+ end
200
+ end
201
+
202
+ context "when the model is a subclass" do
203
+
204
+ let(:firefox) do
205
+ Firefox.new
206
+ end
207
+
208
+ it "returns the root class pluralized model name" do
209
+ expect(firefox.collection_name).to eq(:canvases)
210
+ end
211
+
212
+ context "when accessing from the class level" do
213
+
214
+ it "returns the root class pluralized model name" do
215
+ expect(Firefox.collection_name).to eq(:canvases)
216
+ end
217
+ end
218
+ end
219
+ end
220
+
221
+ describe "#mongo_session" do
222
+
223
+ let(:file) do
224
+ File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
225
+ end
226
+
227
+ before do
228
+ described_class.clear
229
+ Mongoid.load!(file, :test)
230
+ Mongoid.sessions[:default][:database] = database_id
231
+ end
232
+
233
+ after do
234
+ Band.storage_options = nil
235
+ end
236
+
237
+ context "when getting the default" do
238
+
239
+ let(:file) do
240
+ File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
241
+ end
242
+
243
+ before do
244
+ Band.storage_options = nil
245
+ described_class.clear
246
+ Mongoid.load!(file, :test)
247
+ Mongoid.sessions[:default][:database] = database_id
248
+ end
249
+
250
+ after do
251
+ Band.storage_options = nil
252
+ end
253
+
254
+ let!(:band) do
255
+ Band.new
256
+ end
257
+
258
+ let!(:mongo_session) do
259
+ band.mongo_session
260
+ end
261
+
262
+ it "returns the default session" do
263
+ expect(mongo_session.options[:database]).to eq(database_id)
264
+ end
265
+ end
266
+
267
+ context "when overriding to a monghq single server", config: :mongohq do
268
+
269
+ shared_examples_for "an overridden session to a mongohq single server" do
270
+
271
+ let(:band) do
272
+ Band.new
273
+ end
274
+
275
+ let(:single_session) do
276
+ band.mongo_session
277
+ end
278
+
279
+ it "returns the default session" do
280
+ expect(single_session.options[:database]).to eq(ENV["MONGOHQ_SINGLE_NAME"])
281
+ end
282
+ end
283
+
284
+ context "when overriding with a proc" do
285
+
286
+ before do
287
+ Band.store_in(session: ->{ :mongohq_single })
288
+ end
289
+
290
+ it_behaves_like "an overridden session to a mongohq single server"
291
+ end
292
+
293
+ context "when overriding with a string" do
294
+
295
+ before do
296
+ Band.store_in(session: "mongohq_single")
297
+ end
298
+
299
+ it_behaves_like "an overridden session to a mongohq single server"
300
+ end
301
+
302
+ context "when overriding with a symbol" do
303
+
304
+ before do
305
+ Band.store_in(session: :mongohq_single)
306
+ end
307
+
308
+ it_behaves_like "an overridden session to a mongohq single server"
309
+ end
310
+ end
311
+
312
+ context "when overriding to a mongohq replica set", config: :mongohq do
313
+
314
+ let(:band) do
315
+ Band.new
316
+ end
317
+
318
+ let(:replica_session) do
319
+ band.mongo_session
320
+ end
321
+
322
+ shared_examples_for "an overridden session to a mongohq replica set" do
323
+
324
+ it "returns the default session" do
325
+ expect(replica_session.options[:database]).to eq(ENV["MONGOHQ_REPL_NAME"])
326
+ end
327
+ end
328
+
329
+ context "when overriding with a proc" do
330
+
331
+ before do
332
+ Band.store_in(session: ->{ :mongohq_repl })
333
+ end
334
+
335
+ it_behaves_like "an overridden session to a mongohq replica set"
336
+ end
337
+
338
+ context "when overriding with a string" do
339
+
340
+ before do
341
+ Band.store_in(session: "mongohq_repl")
342
+ end
343
+
344
+ it_behaves_like "an overridden session to a mongohq replica set"
345
+ end
346
+
347
+ context "when overriding with a symbol" do
348
+
349
+ before do
350
+ Band.store_in(session: :mongohq_repl)
351
+ end
352
+
353
+ it_behaves_like "an overridden session to a mongohq replica set"
354
+ end
355
+ end
356
+
357
+ context "when overriding to a mongohq replica set with uri config", config: :mongohq do
358
+
359
+ before(:all) do
360
+ Band.store_in(session: :mongohq_repl_uri)
361
+ end
362
+
363
+ let(:band) do
364
+ Band.new
365
+ end
366
+
367
+ let(:repl_session) do
368
+ band.mongo_session
369
+ end
370
+
371
+ it "returns the default session" do
372
+ expect(repl_session.options[:database]).to eq(ENV["MONGOHQ_REPL_NAME"])
373
+ end
374
+ end
375
+
376
+ context "when no session exists with the key" do
377
+
378
+ before(:all) do
379
+ Band.store_in(session: :nonexistant)
380
+ end
381
+
382
+ let(:band) do
383
+ Band.new
384
+ end
385
+
386
+ it "raises an error" do
387
+ expect {
388
+ band.mongo_session
389
+ }.to raise_error(Mongoid::Errors::NoSessionConfig)
390
+ end
391
+ end
392
+ end
393
+
394
+ describe ".mongo_session" do
395
+
396
+ let(:file) do
397
+ File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
398
+ end
399
+
400
+ before do
401
+ described_class.clear
402
+ Mongoid.load!(file, :test)
403
+ Mongoid.sessions[:default][:database] = database_id
404
+ end
405
+
406
+ after do
407
+ Band.storage_options = nil
408
+ end
409
+
410
+ context "when getting the default" do
411
+
412
+ let(:file) do
413
+ File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
414
+ end
415
+
416
+ before do
417
+ Band.storage_options = nil
418
+ described_class.clear
419
+ Mongoid.load!(file, :test)
420
+ Mongoid.sessions[:default][:database] = database_id
421
+ end
422
+
423
+ let!(:mongo_session) do
424
+ Band.mongo_session
425
+ end
426
+
427
+ it "returns the default session" do
428
+ expect(mongo_session.options[:database]).to eq(database_id)
429
+ end
430
+ end
431
+
432
+ context "when overriding to a monghq single server", config: :mongohq do
433
+
434
+ before(:all) do
435
+ Band.store_in(session: :mongohq_single)
436
+ end
437
+
438
+ let(:session) do
439
+ Band.mongo_session
440
+ end
441
+
442
+ it "returns the default session" do
443
+ expect(session.options[:database]).to eq(ENV["MONGOHQ_SINGLE_NAME"])
444
+ end
445
+ end
446
+
447
+ context "when overriding to a mongohq replica set", config: :mongohq do
448
+
449
+ before(:all) do
450
+ Band.store_in(session: :mongohq_repl)
451
+ end
452
+
453
+ let(:repl_session) do
454
+ Band.mongo_session
455
+ end
456
+
457
+ it "returns the default session" do
458
+ expect(repl_session.options[:database]).to eq(ENV["MONGOHQ_REPL_NAME"])
459
+ end
460
+ end
461
+
462
+ context "when no session exists with the key" do
463
+
464
+ before(:all) do
465
+ Band.store_in(session: :nonexistant)
466
+ end
467
+
468
+ it "raises an error" do
469
+ expect {
470
+ Band.mongo_session
471
+ }.to raise_error(Mongoid::Errors::NoSessionConfig)
472
+ end
473
+ end
474
+ end
475
+
476
+ describe ".persistence_options" do
477
+
478
+ context "when options exist on the current thread" do
479
+
480
+ let(:klass) do
481
+ Band.with(safe: { w: 2 })
482
+ end
483
+
484
+ it "returns the options" do
485
+ expect(klass.persistence_options).to eq(safe: { w: 2 })
486
+ end
487
+ end
488
+
489
+ context "when there are no options on the current thread" do
490
+
491
+ it "returns nil" do
492
+ expect(Band.persistence_options).to be_nil
493
+ end
494
+ end
495
+ end
496
+
497
+ describe ".store_in" do
498
+
499
+ context "when provided a non hash" do
500
+
501
+ it "raises an error" do
502
+ expect {
503
+ Band.store_in :artists
504
+ }.to raise_error(Mongoid::Errors::InvalidStorageOptions)
505
+ end
506
+ end
507
+
508
+ context "when provided a hash" do
509
+
510
+ context "when the hash is not valid" do
511
+
512
+ it "raises an error" do
513
+ expect {
514
+ Band.store_in coll: "artists"
515
+ }.to raise_error(Mongoid::Errors::InvalidStorageOptions)
516
+ end
517
+ end
518
+ end
519
+ end
520
+
521
+ describe ".with" do
522
+
523
+ context "when sending operations to a different database" do
524
+
525
+ after do
526
+ Band.with(database: database_id_alt).delete_all
527
+ end
528
+
529
+ describe ".create" do
530
+
531
+ let!(:band) do
532
+ Band.with(database: database_id_alt).create
533
+ end
534
+
535
+ it "does not persist to the default database" do
536
+ expect {
537
+ Band.find(band.id)
538
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
539
+ end
540
+
541
+ let(:from_db) do
542
+ Band.with(database: database_id_alt).find(band.id)
543
+ end
544
+
545
+ it "persists to the specified database" do
546
+ expect(from_db).to eq(band)
547
+ end
548
+
549
+ it "persists the correct number of documents" do
550
+ expect(Band.with(database: database_id_alt).count).to eq(1)
551
+ end
552
+ end
553
+
554
+ describe ".map_reduce", config: :mongohq do
555
+
556
+ let(:map) do
557
+ %Q{
558
+ function() {
559
+ emit(this.name, { likes: this.likes });
560
+ }}
561
+ end
562
+
563
+ let(:reduce) do
564
+ %Q{
565
+ function(key, values) {
566
+ var result = { likes: 0 };
567
+ values.forEach(function(value) {
568
+ result.likes += value.likes;
569
+ });
570
+ return result;
571
+ }}
572
+ end
573
+
574
+ before do
575
+ Band.with(database: database_id_alt).delete_all
576
+ end
577
+
578
+ let!(:depeche_mode) do
579
+ Band.with(database: database_id_alt).
580
+ create(name: "Depeche Mode", likes: 200)
581
+ end
582
+
583
+ let!(:tool) do
584
+ Band.with(database: database_id_alt).
585
+ create(name: "Tool", likes: 100)
586
+ end
587
+
588
+ context "when outputting in memory" do
589
+
590
+ let(:results) do
591
+ Band.with(database: database_id_alt).
592
+ map_reduce(map, reduce).out(inline: 1)
593
+ end
594
+
595
+ it "executes the map/reduce on the correct database" do
596
+ expect(results.first["value"]).to eq({ "likes" => 200 })
597
+ end
598
+ end
599
+
600
+ context "when outputting to a collection" do
601
+
602
+ let(:results) do
603
+ Band.with(database: database_id_alt).
604
+ map_reduce(map, reduce).out(replace: "bands_output")
605
+ end
606
+
607
+ it "executes the map/reduce on the correct database" do
608
+ expect(results.first["value"]).to eq({ "likes" => 200 })
609
+ end
610
+ end
611
+ end
612
+ end
613
+
614
+ context "when sending operations to a different collection" do
615
+
616
+ describe ".create" do
617
+
618
+ let!(:band) do
619
+ Band.with(collection: "artists").create
620
+ end
621
+
622
+ it "does not persist to the default database" do
623
+ expect {
624
+ Band.find(band.id)
625
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
626
+ end
627
+
628
+ let(:from_db) do
629
+ Band.with(collection: "artists").find(band.id)
630
+ end
631
+
632
+ it "persists to the specified database" do
633
+ expect(from_db).to eq(band)
634
+ end
635
+
636
+ it "persists the correct number of documents" do
637
+ expect(Band.with(collection: "artists").count).to eq(1)
638
+ end
639
+ end
640
+
641
+ describe ".map_reduce", config: :mongohq do
642
+
643
+ let(:map) do
644
+ %Q{
645
+ function() {
646
+ emit(this.name, { likes: this.likes });
647
+ }}
648
+ end
649
+
650
+ let(:reduce) do
651
+ %Q{
652
+ function(key, values) {
653
+ var result = { likes: 0 };
654
+ values.forEach(function(value) {
655
+ result.likes += value.likes;
656
+ });
657
+ return result;
658
+ }}
659
+ end
660
+
661
+ before do
662
+ Band.with(collection: "artists").delete_all
663
+ end
664
+
665
+ let!(:depeche_mode) do
666
+ Band.with(collection: "artists").
667
+ create(name: "Depeche Mode", likes: 200)
668
+ end
669
+
670
+ let!(:tool) do
671
+ Band.with(collection: "artists").
672
+ create(name: "Tool", likes: 100)
673
+ end
674
+
675
+ let(:results) do
676
+ Band.with(collection: "artists").
677
+ map_reduce(map, reduce).out(inline: 1)
678
+ end
679
+
680
+ it "executes the map/reduce on the correct collection" do
681
+ expect(results.first["value"]).to eq({ "likes" => 200 })
682
+ end
683
+ end
684
+ end
685
+
686
+ context "when sending operations to a different session" do
687
+
688
+ describe ".create" do
689
+
690
+ let(:file) do
691
+ File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
692
+ end
693
+
694
+ before do
695
+ described_class.clear
696
+ Mongoid.load!(file, :test)
697
+ end
698
+
699
+ context "when sending to a mongohq single server", config: :mongohq do
700
+
701
+ let!(:band) do
702
+ Band.with(
703
+ session: "mongohq_single",
704
+ database: database_id
705
+ ).create
706
+ end
707
+
708
+ let(:from_db) do
709
+ Band.with(
710
+ session: "mongohq_single",
711
+ database: database_id
712
+ ).find(band.id)
713
+ end
714
+
715
+ it "persists to the specified database" do
716
+ expect(from_db).to eq(band)
717
+ end
718
+ end
719
+
720
+ context "when sending to a mongohq replica set", config: :mongohq do
721
+
722
+ let!(:band) do
723
+ Band.with(
724
+ session: "mongohq_repl",
725
+ database: "mongoid_replica"
726
+ ).create
727
+ end
728
+
729
+ let(:from_db) do
730
+ Band.with(
731
+ session: "mongohq_repl",
732
+ database: "mongoid_replica"
733
+ ).find(band.id)
734
+ end
735
+
736
+ it "persists to the specified database" do
737
+ expect(from_db).to eq(band)
738
+ end
739
+ end
740
+
741
+ context "when sending to a mongohq replica set with uri config", config: :mongohq do
742
+
743
+ let!(:band) do
744
+ Band.with(
745
+ session: "mongohq_repl_uri",
746
+ database: "mongoid_replica"
747
+ ).create
748
+ end
749
+
750
+ let(:from_db) do
751
+ Band.with(
752
+ session: "mongohq_repl_uri",
753
+ database: "mongoid_replica"
754
+ ).find(band.id)
755
+ end
756
+
757
+ it "persists to the specified database" do
758
+ expect(from_db).to eq(band)
759
+ end
760
+ end
761
+ end
762
+
763
+ describe ".map_reduce", config: :mongohq do
764
+
765
+ let(:file) do
766
+ File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
767
+ end
768
+
769
+ before do
770
+ described_class.clear
771
+ Mongoid.load!(file, :test)
772
+ end
773
+
774
+ let(:map) do
775
+ %Q{
776
+ function() {
777
+ emit(this.name, { likes: this.likes });
778
+ }}
779
+ end
780
+
781
+ let(:reduce) do
782
+ %Q{
783
+ function(key, values) {
784
+ var result = { likes: 0 };
785
+ values.forEach(function(value) {
786
+ result.likes += value.likes;
787
+ });
788
+ return result;
789
+ }}
790
+ end
791
+
792
+ before do
793
+ Band.with(
794
+ session: "mongohq_repl",
795
+ database: "mongoid_replica"
796
+ ).delete_all
797
+ end
798
+
799
+ let!(:depeche_mode) do
800
+ Band.with(
801
+ session: "mongohq_repl",
802
+ database: "mongoid_replica"
803
+ ).create(name: "Depeche Mode", likes: 200)
804
+ end
805
+
806
+ let!(:tool) do
807
+ Band.with(
808
+ session: "mongohq_repl",
809
+ database: "mongoid_replica"
810
+ ).create(name: "Tool", likes: 100)
811
+ end
812
+
813
+ let(:results) do
814
+ Band.with(
815
+ session: "mongohq_repl",
816
+ database: "mongoid_replica"
817
+ ).map_reduce(map, reduce).out(inline: 1)
818
+ end
819
+
820
+ it "executes the map/reduce on the correct session" do
821
+ expect(results.first["value"]).to eq({ "likes" => 200 })
822
+ end
823
+ end
824
+ end
825
+
826
+ context "when sending operations with safe mode" do
827
+
828
+ describe ".create" do
829
+
830
+ before do
831
+ Person.with(safe: true).create(ssn: "432-97-1111")
832
+ end
833
+
834
+ context "when no error occurs" do
835
+
836
+ it "inserts the document" do
837
+ expect(Person.count).to eq(1)
838
+ end
839
+ end
840
+
841
+ context "when a mongodb error occurs" do
842
+
843
+ before do
844
+ Person.create_indexes
845
+ end
846
+
847
+ it "bubbles up to the caller" do
848
+ expect {
849
+ Person.with(safe: true).create(ssn: "432-97-1111")
850
+ }.to raise_error(Moped::Errors::OperationFailure)
851
+ end
852
+ end
853
+
854
+ context "when using safe: false" do
855
+
856
+ it "ignores mongodb error" do
857
+ expect(Person.with(safe: false).create(ssn: "432-97-1111")).to be_true
858
+ end
859
+ end
860
+ end
861
+
862
+ describe ".create!" do
863
+
864
+ before do
865
+ Person.with(safe: true).create!(ssn: "432-97-1112")
866
+ end
867
+
868
+ context "when no error occurs" do
869
+
870
+ it "inserts the document" do
871
+ expect(Person.count).to eq(1)
872
+ end
873
+ end
874
+
875
+ context "when a mongodb error occurs" do
876
+
877
+ before do
878
+ Person.create_indexes
879
+ end
880
+
881
+ it "bubbles up to the caller" do
882
+ expect {
883
+ Person.with(safe: true).create!(ssn: "432-97-1112")
884
+ }.to raise_error(Moped::Errors::OperationFailure)
885
+ end
886
+ end
887
+
888
+ context "when a validation error occurs" do
889
+
890
+ it "raises the validation error" do
891
+ expect {
892
+ Account.with(safe: true).create!(name: "this name is way too long")
893
+ }.to raise_error(Mongoid::Errors::Validations)
894
+ end
895
+ end
896
+ end
897
+
898
+ describe ".save" do
899
+
900
+ before do
901
+ Person.with(safe: true).create(ssn: "432-97-1113")
902
+ end
903
+
904
+ context "when a mongodb error occurs" do
905
+
906
+ let(:person) do
907
+ Person.new(ssn: "432-97-1113")
908
+ end
909
+
910
+ before do
911
+ Person.create_indexes
912
+ end
913
+
914
+ it "bubbles up to the caller" do
915
+ expect {
916
+ person.with(safe: true).save
917
+ }.to raise_error(Moped::Errors::OperationFailure)
918
+ end
919
+ end
920
+ end
921
+
922
+ describe ".save!" do
923
+
924
+ before do
925
+ Person.with(safe: true).create!(ssn: "432-97-1114")
926
+ end
927
+
928
+ context "when a mongodb error occurs" do
929
+
930
+ let(:person) do
931
+ Person.new(ssn: "432-97-1114")
932
+ end
933
+
934
+ before do
935
+ Person.create_indexes
936
+ end
937
+
938
+ it "bubbles up to the caller" do
939
+ expect {
940
+ person.with(safe: true).save!
941
+ }.to raise_error(Moped::Errors::OperationFailure)
942
+ end
943
+ end
944
+
945
+ context "when a validation error occurs" do
946
+
947
+ let(:account) do
948
+ Account.new(name: "this name is way too long")
949
+ end
950
+
951
+ it "raises the validation error" do
952
+ expect {
953
+ account.with(safe: true).save!
954
+ }.to raise_error(Mongoid::Errors::Validations)
955
+ end
956
+ end
957
+ end
958
+ end
959
+ end
960
+
961
+ context "when the default database uses a uri" do
962
+
963
+ let(:file) do
964
+ File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
965
+ end
966
+
967
+ let(:config) do
968
+ { default: { uri: "mongodb://localhost:#{PORT}/#{database_id}" }}
969
+ end
970
+
971
+ before do
972
+ Mongoid::Threaded.sessions.clear
973
+ Mongoid.sessions = config
974
+ end
975
+
976
+ context "when creating a document" do
977
+
978
+ let!(:band) do
979
+ Band.create(name: "Placebo")
980
+ end
981
+
982
+ it "persists the document to the correct database" do
983
+ expect(Band.find(band.id)).to eq(band)
984
+ end
985
+ end
986
+ end
987
+
988
+ context "when overriding the default database "do
989
+
990
+ let(:file) do
991
+ File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
992
+ end
993
+
994
+ before do
995
+ Mongoid::Config.load!(file, :test)
996
+ end
997
+
998
+ context "when the override is global" do
999
+
1000
+ before do
1001
+ Mongoid.override_database(:mongoid_optional)
1002
+ end
1003
+
1004
+ after do
1005
+ Band.delete_all
1006
+ Mongoid.override_database(nil)
1007
+ end
1008
+
1009
+ let!(:band) do
1010
+ Band.create(name: "Tool")
1011
+ end
1012
+
1013
+ it "persists to the overridden database" do
1014
+ Band.mongo_session.with(database: :mongoid_optional) do |sess|
1015
+ expect(sess[:bands].find(name: "Tool")).to_not be_nil
1016
+ end
1017
+ end
1018
+ end
1019
+ end
1020
+
1021
+ context "when overriding the default session", config: :mongohq do
1022
+
1023
+ context "when the override is configured with a uri" do
1024
+
1025
+ let(:database_name) do
1026
+ "mongoid_other"
1027
+ end
1028
+
1029
+ let(:config) do
1030
+ { default: { uri: "mongodb://localhost:#{PORT}/#{database_id}" },
1031
+ session1: { uri: "mongodb://localhost:#{PORT}/#{database_name}" }}
1032
+ end
1033
+
1034
+ before do
1035
+ Mongoid::Threaded.sessions.clear
1036
+ Mongoid.sessions = config
1037
+ Mongoid.override_session(:session1)
1038
+ end
1039
+
1040
+ after do
1041
+ Mongoid.override_session(nil)
1042
+ end
1043
+
1044
+ it "has some database name on session" do
1045
+ expect(Band.mongo_session.options[:database]).to eq(database_name)
1046
+ end
1047
+ end
1048
+
1049
+ context "when the override is global" do
1050
+
1051
+ let(:file) do
1052
+ File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
1053
+ end
1054
+
1055
+ before do
1056
+ Mongoid::Config.load!(file, :test)
1057
+ Mongoid.override_session(:mongohq_single)
1058
+ end
1059
+
1060
+ after do
1061
+ Band.with(database: database_id).delete_all
1062
+ Mongoid.override_session(nil)
1063
+ end
1064
+
1065
+ let!(:band) do
1066
+ Band.with(database: database_id).create(name: "Tool")
1067
+ end
1068
+
1069
+ let(:persisted) do
1070
+ Band.with(session: :mongohq_single, database: database_id).where(name: "Tool").first
1071
+ end
1072
+
1073
+ it "persists to the overridden session" do
1074
+ expect(persisted).to eq(band)
1075
+ end
1076
+ end
1077
+ end
1078
+ end