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,1189 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Criteria::Findable do
4
+
5
+ describe "#find" do
6
+
7
+ context "when the identity map is enabled" do
8
+
9
+ before(:all) do
10
+ Mongoid.identity_map_enabled = true
11
+ end
12
+
13
+ after(:all) do
14
+ Mongoid.identity_map_enabled = false
15
+ end
16
+
17
+ let!(:depeche) do
18
+ Band.create(name: "Depeche Mode")
19
+ end
20
+
21
+ let!(:placebo) do
22
+ Band.create(name: "Placebo")
23
+ end
24
+
25
+ context "when a parent and a child are in the identity map" do
26
+
27
+ let!(:canvas) do
28
+ Canvas.create
29
+ end
30
+
31
+ let!(:browser) do
32
+ Browser.create
33
+ end
34
+
35
+ context "when fetching a child class by a parent id" do
36
+
37
+ it "raises a not found error" do
38
+ expect {
39
+ Browser.find(canvas.id)
40
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
41
+ end
42
+ end
43
+ end
44
+
45
+ context "when providing a single id" do
46
+
47
+ let(:from_map) do
48
+ Band.find(depeche.id)
49
+ end
50
+
51
+ it "returns the document from the map" do
52
+ expect(from_map).to equal(depeche)
53
+ end
54
+ end
55
+
56
+ context "when providing a single id as a String" do
57
+
58
+ let(:from_map) do
59
+ Band.find(depeche.id.to_s)
60
+ end
61
+
62
+ it "returns the document from the map" do
63
+ expect(from_map).to equal(depeche)
64
+ end
65
+ end
66
+
67
+ context "when providing multiple ids" do
68
+
69
+ let(:from_map) do
70
+ Band.find(depeche.id, placebo.id)
71
+ end
72
+
73
+ it "returns the first match from the map" do
74
+ expect(from_map.first).to equal(depeche)
75
+ end
76
+
77
+ it "returns the second match from the map" do
78
+ expect(from_map.last).to equal(placebo)
79
+ end
80
+ end
81
+ end
82
+
83
+ context "when using object ids" do
84
+
85
+ let!(:band) do
86
+ Band.create
87
+ end
88
+
89
+ context "when a parent and a child are in the identity map" do
90
+
91
+ let!(:canvas) do
92
+ Canvas.create
93
+ end
94
+
95
+ let!(:browser) do
96
+ Browser.create
97
+ end
98
+
99
+ context "when fetching a child class by a parent id" do
100
+
101
+ it "raises a not found error" do
102
+ expect {
103
+ Browser.find(canvas.id)
104
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
105
+ end
106
+ end
107
+ end
108
+
109
+ context "when providing a single id" do
110
+
111
+ context "when the id matches" do
112
+
113
+ let(:found) do
114
+ Band.find(band.id)
115
+ end
116
+
117
+ it "returns the matching document" do
118
+ expect(found).to eq(band)
119
+ end
120
+ end
121
+
122
+ context "when the id does not match" do
123
+
124
+ context "when raising a not found error" do
125
+
126
+ before do
127
+ Mongoid.raise_not_found_error = true
128
+ end
129
+
130
+ let(:found) do
131
+ Band.find(Moped::BSON::ObjectId.new)
132
+ end
133
+
134
+ it "raises an error" do
135
+ expect {
136
+ found
137
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
138
+ end
139
+ end
140
+
141
+ context "when raising no error" do
142
+
143
+ before do
144
+ Mongoid.raise_not_found_error = false
145
+ end
146
+
147
+ after do
148
+ Mongoid.raise_not_found_error = true
149
+ end
150
+
151
+ let(:found) do
152
+ Band.find(Moped::BSON::ObjectId.new)
153
+ end
154
+
155
+ it "returns nil" do
156
+ expect(found).to be_nil
157
+ end
158
+ end
159
+ end
160
+ end
161
+
162
+ context "when providing a splat of ids" do
163
+
164
+ let!(:band_two) do
165
+ Band.create(name: "Tool")
166
+ end
167
+
168
+ context "when all ids match" do
169
+
170
+ let(:found) do
171
+ Band.find(band.id, band_two.id)
172
+ end
173
+
174
+ it "contains the first match" do
175
+ expect(found).to include(band)
176
+ end
177
+
178
+ it "contains the second match" do
179
+ expect(found).to include(band_two)
180
+ end
181
+
182
+ context "when ids are duplicates" do
183
+ let(:found) do
184
+ Band.find(band.id, band.id)
185
+ end
186
+
187
+ it "contains only the first match" do
188
+ expect(found).to eq([band])
189
+ end
190
+ end
191
+ end
192
+
193
+ context "when any id does not match" do
194
+
195
+ context "when raising a not found error" do
196
+
197
+ before do
198
+ Mongoid.raise_not_found_error = true
199
+ end
200
+
201
+ let(:found) do
202
+ Band.find(band.id, Moped::BSON::ObjectId.new)
203
+ end
204
+
205
+ it "raises an error" do
206
+ expect {
207
+ found
208
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
209
+ end
210
+ end
211
+
212
+ context "when raising no error" do
213
+
214
+ before do
215
+ Mongoid.raise_not_found_error = false
216
+ end
217
+
218
+ after do
219
+ Mongoid.raise_not_found_error = true
220
+ end
221
+
222
+ let(:found) do
223
+ Band.find(band.id, Moped::BSON::ObjectId.new)
224
+ end
225
+
226
+ it "returns only the matching documents" do
227
+ expect(found).to eq([ band ])
228
+ end
229
+ end
230
+ end
231
+ end
232
+
233
+ context "when providing an array of ids" do
234
+
235
+ let!(:band_two) do
236
+ Band.create(name: "Tool")
237
+ end
238
+
239
+ context "when all ids match" do
240
+
241
+ let(:found) do
242
+ Band.find([ band.id, band_two.id ])
243
+ end
244
+
245
+ it "contains the first match" do
246
+ expect(found).to include(band)
247
+ end
248
+
249
+ it "contains the second match" do
250
+ expect(found).to include(band_two)
251
+ end
252
+
253
+ context "when ids are duplicates" do
254
+ let(:found) do
255
+ Band.find([ band.id, band.id ])
256
+ end
257
+
258
+ it "contains only the first match" do
259
+ expect(found).to eq([band])
260
+ end
261
+ end
262
+ end
263
+
264
+ context "when any id does not match" do
265
+
266
+ context "when raising a not found error" do
267
+
268
+ before do
269
+ Mongoid.raise_not_found_error = true
270
+ end
271
+
272
+ let(:found) do
273
+ Band.find([ band.id, Moped::BSON::ObjectId.new ])
274
+ end
275
+
276
+ it "raises an error" do
277
+ expect {
278
+ found
279
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
280
+ end
281
+ end
282
+
283
+ context "when raising no error" do
284
+
285
+ before do
286
+ Mongoid.raise_not_found_error = false
287
+ end
288
+
289
+ after do
290
+ Mongoid.raise_not_found_error = true
291
+ end
292
+
293
+ let(:found) do
294
+ Band.find([ band.id, Moped::BSON::ObjectId.new ])
295
+ end
296
+
297
+ it "returns only the matching documents" do
298
+ expect(found).to eq([ band ])
299
+ end
300
+ end
301
+ end
302
+ end
303
+ end
304
+
305
+ context "when using string ids" do
306
+
307
+ before(:all) do
308
+ Band.field :_id, type: String
309
+ end
310
+
311
+ after(:all) do
312
+ Band.field :_id, type: Moped::BSON::ObjectId, default: ->{ Moped::BSON::ObjectId.new }
313
+ end
314
+
315
+ let!(:band) do
316
+ Band.create do |band|
317
+ band.id = "tool"
318
+ end
319
+ end
320
+
321
+ context "when providing a single id" do
322
+
323
+ context "when the id matches" do
324
+
325
+ let(:found) do
326
+ Band.find(band.id)
327
+ end
328
+
329
+ it "returns the matching document" do
330
+ expect(found).to eq(band)
331
+ end
332
+ end
333
+
334
+ context "when the id does not match" do
335
+
336
+ context "when raising a not found error" do
337
+
338
+ before do
339
+ Mongoid.raise_not_found_error = true
340
+ end
341
+
342
+ let(:found) do
343
+ Band.find("depeche-mode")
344
+ end
345
+
346
+ it "raises an error" do
347
+ expect {
348
+ found
349
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
350
+ end
351
+ end
352
+
353
+ context "when raising no error" do
354
+
355
+ before do
356
+ Mongoid.raise_not_found_error = false
357
+ end
358
+
359
+ after do
360
+ Mongoid.raise_not_found_error = true
361
+ end
362
+
363
+ let(:found) do
364
+ Band.find("depeche-mode")
365
+ end
366
+
367
+ it "returns nil" do
368
+ expect(found).to be_nil
369
+ end
370
+ end
371
+ end
372
+ end
373
+
374
+ context "when providing a splat of ids" do
375
+
376
+ let!(:band_two) do
377
+ Band.create do |band|
378
+ band.id = "depeche-mode"
379
+ end
380
+ end
381
+
382
+ context "when all ids match" do
383
+
384
+ let(:found) do
385
+ Band.find(band.id, band_two.id)
386
+ end
387
+
388
+ it "contains the first match" do
389
+ expect(found).to include(band)
390
+ end
391
+
392
+ it "contains the second match" do
393
+ expect(found).to include(band_two)
394
+ end
395
+ end
396
+
397
+ context "when any id does not match" do
398
+
399
+ context "when raising a not found error" do
400
+
401
+ before do
402
+ Mongoid.raise_not_found_error = true
403
+ end
404
+
405
+ let(:found) do
406
+ Band.find(band.id, "new-order")
407
+ end
408
+
409
+ it "raises an error" do
410
+ expect {
411
+ found
412
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
413
+ end
414
+ end
415
+
416
+ context "when raising no error" do
417
+
418
+ before do
419
+ Mongoid.raise_not_found_error = false
420
+ end
421
+
422
+ after do
423
+ Mongoid.raise_not_found_error = true
424
+ end
425
+
426
+ let(:found) do
427
+ Band.find(band.id, "new-order")
428
+ end
429
+
430
+ it "returns only the matching documents" do
431
+ expect(found).to eq([ band ])
432
+ end
433
+ end
434
+ end
435
+ end
436
+
437
+ context "when providing an array of ids" do
438
+
439
+ let!(:band_two) do
440
+ Band.create do |band|
441
+ band.id = "depeche-mode"
442
+ end
443
+ end
444
+
445
+ context "when all ids match" do
446
+
447
+ let(:found) do
448
+ Band.find([ band.id, band_two.id ])
449
+ end
450
+
451
+ it "contains the first match" do
452
+ expect(found).to include(band)
453
+ end
454
+
455
+ it "contains the second match" do
456
+ expect(found).to include(band_two)
457
+ end
458
+ end
459
+
460
+ context "when any id does not match" do
461
+
462
+ context "when raising a not found error" do
463
+
464
+ before do
465
+ Mongoid.raise_not_found_error = true
466
+ end
467
+
468
+ let(:found) do
469
+ Band.find([ band.id, "new-order" ])
470
+ end
471
+
472
+ it "raises an error" do
473
+ expect {
474
+ found
475
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
476
+ end
477
+ end
478
+
479
+ context "when raising no error" do
480
+
481
+ before do
482
+ Mongoid.raise_not_found_error = false
483
+ end
484
+
485
+ after do
486
+ Mongoid.raise_not_found_error = true
487
+ end
488
+
489
+ let(:found) do
490
+ Band.find([ band.id, "new-order" ])
491
+ end
492
+
493
+ it "returns only the matching documents" do
494
+ expect(found).to eq([ band ])
495
+ end
496
+ end
497
+ end
498
+ end
499
+ end
500
+
501
+ context "when using hash ids" do
502
+
503
+ before(:all) do
504
+ Band.field :_id, type: Hash
505
+ end
506
+
507
+ after(:all) do
508
+ Band.field :_id, type: Moped::BSON::ObjectId, default: ->{ Moped::BSON::ObjectId.new }
509
+ end
510
+
511
+ let!(:band) do
512
+ Band.create do |band|
513
+ band.id = {"new-order" => true, "Depeche Mode" => false}
514
+ end
515
+ end
516
+
517
+ context "when providing a single id" do
518
+
519
+ context "when the id matches" do
520
+
521
+ let(:found) do
522
+ Band.find(band.id)
523
+ end
524
+
525
+ it "returns the matching document" do
526
+ expect(found).to eq(band)
527
+ end
528
+ end
529
+
530
+ context "when the id does not match" do
531
+
532
+ context "when raising a not found error" do
533
+
534
+ before do
535
+ Mongoid.raise_not_found_error = true
536
+ end
537
+
538
+ let(:found) do
539
+ Band.find({"new-order" => false, "Faith no More" => true})
540
+ end
541
+
542
+ it "raises an error" do
543
+ expect {
544
+ found
545
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
546
+ end
547
+ end
548
+
549
+ context "when raising no error" do
550
+
551
+ before do
552
+ Mongoid.raise_not_found_error = false
553
+ end
554
+
555
+ after do
556
+ Mongoid.raise_not_found_error = true
557
+ end
558
+
559
+ let(:found) do
560
+ Band.find({"new-order" => false, "Faith no More" => true})
561
+ end
562
+
563
+ it "returns nil" do
564
+ expect(found).to be_nil
565
+ end
566
+ end
567
+ end
568
+ end
569
+
570
+ context "when providing a splat of ids" do
571
+
572
+ let!(:band_two) do
573
+ Band.create do |band|
574
+ band.id = {"Radiohead" => false, "Nirvana"=> true}
575
+ end
576
+ end
577
+
578
+ context "when all ids match" do
579
+
580
+ let(:found) do
581
+ Band.find(band.id, band_two.id)
582
+ end
583
+
584
+ it "contains the first match" do
585
+ expect(found).to include(band)
586
+ end
587
+
588
+ it "contains the second match" do
589
+ expect(found).to include(band_two)
590
+ end
591
+ end
592
+
593
+ context "when any id does not match" do
594
+
595
+ context "when raising a not found error" do
596
+
597
+ before do
598
+ Mongoid.raise_not_found_error = true
599
+ end
600
+
601
+ let(:found) do
602
+ Band.find(band.id, {"Radiohead" => true, "Nirvana"=> false})
603
+ end
604
+
605
+ it "raises an error" do
606
+ expect {
607
+ found
608
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
609
+ end
610
+ end
611
+
612
+ context "when raising no error" do
613
+
614
+ before do
615
+ Mongoid.raise_not_found_error = false
616
+ end
617
+
618
+ after do
619
+ Mongoid.raise_not_found_error = true
620
+ end
621
+
622
+ let(:found) do
623
+ Band.find(band.id, {"Radiohead" => true, "Nirvana"=> false})
624
+ end
625
+
626
+ it "returns only the matching documents" do
627
+ expect(found).to eq([ band ])
628
+ end
629
+ end
630
+ end
631
+ end
632
+
633
+ context "when providing an array of ids" do
634
+
635
+ let!(:band_two) do
636
+ Band.create do |band|
637
+ band.id = {"Radiohead" => false, "Nirvana"=> true}
638
+ end
639
+ end
640
+
641
+ context "when all ids match" do
642
+
643
+ let(:found) do
644
+ Band.find([ band.id, band_two.id ])
645
+ end
646
+
647
+ it "contains the first match" do
648
+ expect(found).to include(band)
649
+ end
650
+
651
+ it "contains the second match" do
652
+ expect(found).to include(band_two)
653
+ end
654
+ end
655
+
656
+ context "when any id does not match" do
657
+
658
+ context "when raising a not found error" do
659
+
660
+ before do
661
+ Mongoid.raise_not_found_error = true
662
+ end
663
+
664
+ let(:found) do
665
+ Band.find([ band.id, {"Radiohead" => true, "Nirvana"=> false} ])
666
+ end
667
+
668
+ it "raises an error" do
669
+ expect {
670
+ found
671
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
672
+ end
673
+ end
674
+
675
+ context "when raising no error" do
676
+
677
+ before do
678
+ Mongoid.raise_not_found_error = false
679
+ end
680
+
681
+ after do
682
+ Mongoid.raise_not_found_error = true
683
+ end
684
+
685
+ let(:found) do
686
+ Band.find([ band.id, {"Radiohead" => true, "Nirvana"=> false} ])
687
+ end
688
+
689
+ it "returns only the matching documents" do
690
+ expect(found).to eq([ band ])
691
+ end
692
+ end
693
+ end
694
+ end
695
+ end
696
+
697
+ context "when using integer ids" do
698
+
699
+ before(:all) do
700
+ Band.field :_id, type: Integer
701
+ end
702
+
703
+ after(:all) do
704
+ Band.field :_id, type: Moped::BSON::ObjectId, default: ->{ Moped::BSON::ObjectId.new }
705
+ end
706
+
707
+ let!(:band) do
708
+ Band.create do |band|
709
+ band.id = 1
710
+ end
711
+ end
712
+
713
+ context "when providing a single id" do
714
+
715
+ context "when the id matches" do
716
+
717
+ let(:found) do
718
+ Band.find(band.id)
719
+ end
720
+
721
+ it "returns the matching document" do
722
+ expect(found).to eq(band)
723
+ end
724
+ end
725
+
726
+ context "when the id does not match" do
727
+
728
+ context "when raising a not found error" do
729
+
730
+ before do
731
+ Mongoid.raise_not_found_error = true
732
+ end
733
+
734
+ let(:found) do
735
+ Band.find(3)
736
+ end
737
+
738
+ it "raises an error" do
739
+ expect {
740
+ found
741
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
742
+ end
743
+ end
744
+
745
+ context "when raising no error" do
746
+
747
+ before do
748
+ Mongoid.raise_not_found_error = false
749
+ end
750
+
751
+ after do
752
+ Mongoid.raise_not_found_error = true
753
+ end
754
+
755
+ let(:found) do
756
+ Band.find(3)
757
+ end
758
+
759
+ it "returns nil" do
760
+ expect(found).to be_nil
761
+ end
762
+ end
763
+ end
764
+ end
765
+
766
+ context "when providing a splat of ids" do
767
+
768
+ let!(:band_two) do
769
+ Band.create do |band|
770
+ band.id = 2
771
+ end
772
+ end
773
+
774
+ context "when all ids match" do
775
+
776
+ let(:found) do
777
+ Band.find(band.id, band_two.id)
778
+ end
779
+
780
+ it "contains the first match" do
781
+ expect(found).to include(band)
782
+ end
783
+
784
+ it "contains the second match" do
785
+ expect(found).to include(band_two)
786
+ end
787
+ end
788
+
789
+ context "when any id does not match" do
790
+
791
+ context "when raising a not found error" do
792
+
793
+ before do
794
+ Mongoid.raise_not_found_error = true
795
+ end
796
+
797
+ let(:found) do
798
+ Band.find(band.id, 3)
799
+ end
800
+
801
+ it "raises an error" do
802
+ expect {
803
+ found
804
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
805
+ end
806
+ end
807
+
808
+ context "when raising no error" do
809
+
810
+ before do
811
+ Mongoid.raise_not_found_error = false
812
+ end
813
+
814
+ after do
815
+ Mongoid.raise_not_found_error = true
816
+ end
817
+
818
+ let(:found) do
819
+ Band.find(band.id, 3)
820
+ end
821
+
822
+ it "returns only the matching documents" do
823
+ expect(found).to eq([ band ])
824
+ end
825
+ end
826
+ end
827
+ end
828
+
829
+ context "when providing an array of ids" do
830
+
831
+ let!(:band_two) do
832
+ Band.create do |band|
833
+ band.id = 2
834
+ end
835
+ end
836
+
837
+ context "when all ids match" do
838
+
839
+ let(:found) do
840
+ Band.find([ band.id, band_two.id ])
841
+ end
842
+
843
+ it "contains the first match" do
844
+ expect(found).to include(band)
845
+ end
846
+
847
+ it "contains the second match" do
848
+ expect(found).to include(band_two)
849
+ end
850
+ end
851
+
852
+ context "when any id does not match" do
853
+
854
+ context "when raising a not found error" do
855
+
856
+ before do
857
+ Mongoid.raise_not_found_error = true
858
+ end
859
+
860
+ let(:found) do
861
+ Band.find([ band.id, 3 ])
862
+ end
863
+
864
+ it "raises an error" do
865
+ expect {
866
+ found
867
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
868
+ end
869
+ end
870
+
871
+ context "when raising no error" do
872
+
873
+ before do
874
+ Mongoid.raise_not_found_error = false
875
+ end
876
+
877
+ after do
878
+ Mongoid.raise_not_found_error = true
879
+ end
880
+
881
+ let(:found) do
882
+ Band.find([ band.id, 3 ])
883
+ end
884
+
885
+ it "returns only the matching documents" do
886
+ expect(found).to eq([ band ])
887
+ end
888
+ end
889
+ end
890
+ end
891
+
892
+ context "when providing a range" do
893
+
894
+ let!(:band_two) do
895
+ Band.create do |band|
896
+ band.id = 2
897
+ end
898
+ end
899
+
900
+ context "when all ids match" do
901
+
902
+ let(:found) do
903
+ Band.find(1..2)
904
+ end
905
+
906
+ it "contains the first match" do
907
+ expect(found).to include(band)
908
+ end
909
+
910
+ it "contains the second match" do
911
+ expect(found).to include(band_two)
912
+ end
913
+ end
914
+
915
+ context "when any id does not match" do
916
+
917
+ context "when raising a not found error" do
918
+
919
+ before do
920
+ Mongoid.raise_not_found_error = true
921
+ end
922
+
923
+ let(:found) do
924
+ Band.find(1..3)
925
+ end
926
+
927
+ it "raises an error" do
928
+ expect {
929
+ found
930
+ }.to raise_error(Mongoid::Errors::DocumentNotFound)
931
+ end
932
+ end
933
+
934
+ context "when raising no error" do
935
+
936
+ before do
937
+ Mongoid.raise_not_found_error = false
938
+ end
939
+
940
+ after do
941
+ Mongoid.raise_not_found_error = true
942
+ end
943
+
944
+ let(:found) do
945
+ Band.find(1..3)
946
+ end
947
+
948
+ it "contains the first match" do
949
+ expect(found).to include(band)
950
+ end
951
+
952
+ it "contains the second match" do
953
+ expect(found).to include(band_two)
954
+ end
955
+
956
+ it "returns only the matches" do
957
+ expect(found.count).to eq(2)
958
+ end
959
+ end
960
+ end
961
+ end
962
+ end
963
+
964
+ context "when using string and object ids" do
965
+
966
+ let!(:band) do
967
+ Band.create
968
+ end
969
+
970
+ context "when providing multiple ids" do
971
+
972
+ context "when ids are duplicates" do
973
+
974
+ let(:found) do
975
+ Band.find([ band.id.to_s, band.id ])
976
+ end
977
+
978
+ it "contains only the first match" do
979
+ expect(found).to eq([band])
980
+ end
981
+ end
982
+ end
983
+ end
984
+ end
985
+
986
+ describe "#for_ids" do
987
+
988
+ context "when only 1 id exists" do
989
+
990
+ let(:id) do
991
+ Moped::BSON::ObjectId.new
992
+ end
993
+
994
+ let(:criteria) do
995
+ Band.queryable.for_ids([ id ])
996
+ end
997
+
998
+ it "does not turn the selector into an $in" do
999
+ expect(criteria.selector).to eq({ "_id" => id })
1000
+ end
1001
+ end
1002
+ end
1003
+
1004
+ describe "#from_map_or_db" do
1005
+
1006
+ before(:all) do
1007
+ Mongoid.identity_map_enabled = true
1008
+ end
1009
+
1010
+ after(:all) do
1011
+ Mongoid.identity_map_enabled = false
1012
+ end
1013
+
1014
+ context "when the document is in the identity map" do
1015
+
1016
+ let!(:band) do
1017
+ Band.create(name: "Depeche Mode")
1018
+ end
1019
+
1020
+ let(:criteria) do
1021
+ Band.where(_id: band.id)
1022
+ end
1023
+
1024
+ let(:from_map) do
1025
+ criteria.from_map_or_db
1026
+ end
1027
+
1028
+ it "returns the document from the map" do
1029
+ expect(from_map).to equal(band)
1030
+ end
1031
+ end
1032
+
1033
+ context "when the document is not in the identity map" do
1034
+
1035
+ let!(:band) do
1036
+ Band.create(name: "Depeche Mode")
1037
+ end
1038
+
1039
+ let(:criteria) do
1040
+ Band.where(_id: band.id)
1041
+ end
1042
+
1043
+ before do
1044
+ Mongoid::IdentityMap.clear
1045
+ end
1046
+
1047
+ let(:from_db) do
1048
+ criteria.from_map_or_db
1049
+ end
1050
+
1051
+ it "returns the document from the database" do
1052
+ expect(from_db).to_not equal(band)
1053
+ end
1054
+
1055
+ it "returns the correct document" do
1056
+ expect(from_db).to eq(band)
1057
+ end
1058
+ end
1059
+
1060
+ context "when the selector is cleared in the identity map" do
1061
+
1062
+ let!(:band) do
1063
+ Band.create(name: "Depeche Mode")
1064
+ end
1065
+
1066
+ let(:criteria) do
1067
+ Band.where(name: "Depeche Mode")
1068
+ end
1069
+
1070
+ before do
1071
+ Mongoid::IdentityMap.clear
1072
+ Mongoid::IdentityMap.clear_many(Band, { "name" => "Depeche Mode" })
1073
+ end
1074
+
1075
+ let(:from_db) do
1076
+ criteria.from_map_or_db
1077
+ end
1078
+
1079
+ it "returns nil" do
1080
+ expect(from_db).to be_nil
1081
+ end
1082
+ end
1083
+ end
1084
+
1085
+ describe "#multiple_from_map_or_db" do
1086
+
1087
+ before(:all) do
1088
+ Mongoid.identity_map_enabled = true
1089
+ end
1090
+
1091
+ after(:all) do
1092
+ Mongoid.identity_map_enabled = false
1093
+ end
1094
+
1095
+ context "when the document is in the identity map" do
1096
+
1097
+ let!(:band) do
1098
+ Band.create(name: "Depeche Mode")
1099
+ end
1100
+
1101
+ let!(:band_two) do
1102
+ Band.create(name: "Tool")
1103
+ end
1104
+
1105
+ context "when providing a single id" do
1106
+
1107
+ let(:criteria) do
1108
+ Band.where(_id: band.id)
1109
+ end
1110
+
1111
+ let(:from_map) do
1112
+ criteria.multiple_from_map_or_db([ band.id ])
1113
+ end
1114
+
1115
+ it "returns the document from the map" do
1116
+ expect(from_map).to include(band)
1117
+ end
1118
+ end
1119
+
1120
+ context "when providing multiple ids" do
1121
+
1122
+ let(:criteria) do
1123
+ Band.where(:_id.in => [ band.id, band_two.id ])
1124
+ end
1125
+
1126
+ let(:from_map) do
1127
+ criteria.multiple_from_map_or_db([ band.id, band_two.id ])
1128
+ end
1129
+
1130
+ it "returns the documents from the map" do
1131
+ expect(from_map).to include(band, band_two)
1132
+ end
1133
+ end
1134
+ end
1135
+
1136
+ context "when the document is not in the identity map" do
1137
+
1138
+ let!(:band) do
1139
+ Band.create(name: "Depeche Mode")
1140
+ end
1141
+
1142
+ let!(:band_two) do
1143
+ Band.create(name: "Tool")
1144
+ end
1145
+
1146
+ before do
1147
+ Mongoid::IdentityMap.clear
1148
+ end
1149
+
1150
+ context "when providing a single id" do
1151
+
1152
+ let(:criteria) do
1153
+ Band.where(_id: band.id)
1154
+ end
1155
+
1156
+ let(:from_db) do
1157
+ criteria.multiple_from_map_or_db([ band.id ])
1158
+ end
1159
+
1160
+ it "returns the document from the database" do
1161
+ expect(from_db.first).to_not equal(band)
1162
+ end
1163
+
1164
+ it "returns the correct document" do
1165
+ expect(from_db.first).to eq(band)
1166
+ end
1167
+ end
1168
+
1169
+ context "when providing multiple ids" do
1170
+
1171
+ let(:criteria) do
1172
+ Band.where(:_id.in => [ band.id, band_two.id ])
1173
+ end
1174
+
1175
+ let(:from_db) do
1176
+ criteria.multiple_from_map_or_db([ band.id, band_two.id ])
1177
+ end
1178
+
1179
+ it "returns the document from the database" do
1180
+ expect(from_db.first).to_not equal(band)
1181
+ end
1182
+
1183
+ it "returns the correct document" do
1184
+ expect(from_db.first).to eq(band)
1185
+ end
1186
+ end
1187
+ end
1188
+ end
1189
+ end