mongoid 7.5.3 → 8.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (417) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +3 -3
  4. data/README.md +6 -6
  5. data/Rakefile +25 -0
  6. data/lib/config/locales/en.yml +92 -43
  7. data/lib/mongoid/association/accessors.rb +40 -11
  8. data/lib/mongoid/association/bindable.rb +50 -2
  9. data/lib/mongoid/association/builders.rb +5 -3
  10. data/lib/mongoid/association/constrainable.rb +0 -1
  11. data/lib/mongoid/association/eager_loadable.rb +29 -7
  12. data/lib/mongoid/association/embedded/batchable.rb +34 -11
  13. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  14. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  15. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
  16. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
  17. data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
  18. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  19. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
  20. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +69 -45
  21. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  22. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
  23. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
  24. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  25. data/lib/mongoid/association/macros.rb +8 -1
  26. data/lib/mongoid/association/many.rb +11 -7
  27. data/lib/mongoid/association/nested/many.rb +5 -4
  28. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  29. data/lib/mongoid/association/nested/one.rb +45 -7
  30. data/lib/mongoid/association/one.rb +2 -2
  31. data/lib/mongoid/association/options.rb +9 -9
  32. data/lib/mongoid/association/proxy.rb +15 -4
  33. data/lib/mongoid/association/referenced/auto_save.rb +4 -3
  34. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  35. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  36. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  37. data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
  38. data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
  39. data/lib/mongoid/association/referenced/eager.rb +2 -2
  40. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
  41. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
  42. data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
  43. data/lib/mongoid/association/referenced/has_many/proxy.rb +29 -19
  44. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  45. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  46. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  47. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
  48. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  49. data/lib/mongoid/association/referenced/syncable.rb +4 -4
  50. data/lib/mongoid/association/reflections.rb +4 -4
  51. data/lib/mongoid/association/relatable.rb +44 -10
  52. data/lib/mongoid/association.rb +5 -5
  53. data/lib/mongoid/atomic/modifiers.rb +2 -2
  54. data/lib/mongoid/atomic.rb +7 -0
  55. data/lib/mongoid/attributes/dynamic.rb +4 -4
  56. data/lib/mongoid/attributes/nested.rb +6 -6
  57. data/lib/mongoid/attributes/processing.rb +37 -6
  58. data/lib/mongoid/attributes/projector.rb +2 -2
  59. data/lib/mongoid/attributes/readonly.rb +3 -3
  60. data/lib/mongoid/attributes.rb +51 -42
  61. data/lib/mongoid/changeable.rb +147 -14
  62. data/lib/mongoid/clients/options.rb +5 -1
  63. data/lib/mongoid/clients/sessions.rb +2 -14
  64. data/lib/mongoid/clients/storage_options.rb +2 -5
  65. data/lib/mongoid/clients/validators/storage.rb +3 -15
  66. data/lib/mongoid/collection_configurable.rb +58 -0
  67. data/lib/mongoid/composable.rb +2 -0
  68. data/lib/mongoid/config/defaults.rb +60 -0
  69. data/lib/mongoid/config/options.rb +3 -0
  70. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  71. data/lib/mongoid/config/validators/client.rb +6 -6
  72. data/lib/mongoid/config/validators.rb +1 -0
  73. data/lib/mongoid/config.rb +140 -18
  74. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  75. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  76. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  77. data/lib/mongoid/contextual/atomic.rb +1 -1
  78. data/lib/mongoid/contextual/geo_near.rb +7 -7
  79. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  80. data/lib/mongoid/contextual/memory.rb +285 -58
  81. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  82. data/lib/mongoid/contextual/mongo.rb +517 -346
  83. data/lib/mongoid/contextual/none.rb +193 -20
  84. data/lib/mongoid/contextual/queryable.rb +1 -1
  85. data/lib/mongoid/contextual.rb +14 -2
  86. data/lib/mongoid/copyable.rb +32 -8
  87. data/lib/mongoid/criteria/findable.rb +8 -5
  88. data/lib/mongoid/criteria/includable.rb +27 -22
  89. data/lib/mongoid/criteria/marshalable.rb +10 -2
  90. data/lib/mongoid/criteria/permission.rb +1 -1
  91. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  92. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
  93. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  94. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  95. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  96. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  97. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
  98. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -9
  99. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  100. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  101. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  102. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  103. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
  104. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
  105. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  106. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  107. data/lib/mongoid/criteria/queryable/key.rb +4 -4
  108. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
  109. data/lib/mongoid/criteria/queryable/optional.rb +11 -17
  110. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  111. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  112. data/lib/mongoid/criteria/queryable/selectable.rb +47 -38
  113. data/lib/mongoid/criteria/queryable/selector.rb +93 -8
  114. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  115. data/lib/mongoid/criteria/queryable/storable.rb +1 -1
  116. data/lib/mongoid/criteria/queryable.rb +12 -7
  117. data/lib/mongoid/criteria/scopable.rb +2 -2
  118. data/lib/mongoid/criteria/translator.rb +45 -0
  119. data/lib/mongoid/criteria.rb +20 -40
  120. data/lib/mongoid/deprecable.rb +36 -0
  121. data/lib/mongoid/deprecation.rb +25 -0
  122. data/lib/mongoid/document.rb +127 -35
  123. data/lib/mongoid/equality.rb +8 -8
  124. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  125. data/lib/mongoid/errors/document_not_found.rb +10 -6
  126. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  127. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  128. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  129. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  130. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  131. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  132. data/lib/mongoid/errors/invalid_field.rb +6 -2
  133. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  134. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  135. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  136. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  137. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  138. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  139. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  140. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  141. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  142. data/lib/mongoid/errors/no_client_database.rb +1 -1
  143. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  144. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  145. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  146. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  147. data/lib/mongoid/errors.rb +6 -3
  148. data/lib/mongoid/extensions/array.rb +9 -7
  149. data/lib/mongoid/extensions/big_decimal.rb +33 -10
  150. data/lib/mongoid/extensions/binary.rb +42 -0
  151. data/lib/mongoid/extensions/boolean.rb +8 -2
  152. data/lib/mongoid/extensions/date.rb +26 -20
  153. data/lib/mongoid/extensions/date_time.rb +1 -1
  154. data/lib/mongoid/extensions/false_class.rb +1 -1
  155. data/lib/mongoid/extensions/float.rb +7 -4
  156. data/lib/mongoid/extensions/hash.rb +19 -8
  157. data/lib/mongoid/extensions/integer.rb +7 -4
  158. data/lib/mongoid/extensions/module.rb +1 -1
  159. data/lib/mongoid/extensions/object.rb +10 -8
  160. data/lib/mongoid/extensions/range.rb +41 -10
  161. data/lib/mongoid/extensions/regexp.rb +11 -4
  162. data/lib/mongoid/extensions/set.rb +11 -4
  163. data/lib/mongoid/extensions/string.rb +11 -22
  164. data/lib/mongoid/extensions/symbol.rb +4 -15
  165. data/lib/mongoid/extensions/time.rb +29 -16
  166. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  167. data/lib/mongoid/extensions/true_class.rb +1 -1
  168. data/lib/mongoid/extensions.rb +1 -0
  169. data/lib/mongoid/factory.rb +55 -7
  170. data/lib/mongoid/fields/foreign_key.rb +11 -4
  171. data/lib/mongoid/fields/localized.rb +19 -4
  172. data/lib/mongoid/fields/standard.rb +17 -7
  173. data/lib/mongoid/fields/validators/macro.rb +3 -9
  174. data/lib/mongoid/fields.rb +129 -20
  175. data/lib/mongoid/findable.rb +54 -24
  176. data/lib/mongoid/indexable/specification.rb +2 -2
  177. data/lib/mongoid/indexable/validators/options.rb +6 -2
  178. data/lib/mongoid/interceptable.rb +76 -15
  179. data/lib/mongoid/matchable.rb +1 -1
  180. data/lib/mongoid/matcher/eq_impl.rb +1 -1
  181. data/lib/mongoid/matcher/type.rb +1 -1
  182. data/lib/mongoid/matcher.rb +33 -13
  183. data/lib/mongoid/persistable/creatable.rb +19 -9
  184. data/lib/mongoid/persistable/deletable.rb +2 -2
  185. data/lib/mongoid/persistable/destroyable.rb +1 -1
  186. data/lib/mongoid/persistable/savable.rb +14 -2
  187. data/lib/mongoid/persistable/unsettable.rb +2 -2
  188. data/lib/mongoid/persistable/updatable.rb +69 -12
  189. data/lib/mongoid/persistable/upsertable.rb +21 -2
  190. data/lib/mongoid/persistable.rb +6 -3
  191. data/lib/mongoid/persistence_context.rb +6 -4
  192. data/lib/mongoid/query_cache.rb +13 -261
  193. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  194. data/lib/mongoid/railties/database.rake +7 -2
  195. data/lib/mongoid/reloadable.rb +10 -8
  196. data/lib/mongoid/scopable.rb +15 -13
  197. data/lib/mongoid/selectable.rb +1 -2
  198. data/lib/mongoid/serializable.rb +10 -6
  199. data/lib/mongoid/stateful.rb +57 -10
  200. data/lib/mongoid/tasks/database.rake +12 -0
  201. data/lib/mongoid/tasks/database.rb +20 -2
  202. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  203. data/lib/mongoid/threaded.rb +42 -12
  204. data/lib/mongoid/timestamps/created.rb +1 -1
  205. data/lib/mongoid/timestamps/updated.rb +2 -2
  206. data/lib/mongoid/touchable.rb +2 -3
  207. data/lib/mongoid/traversable.rb +5 -4
  208. data/lib/mongoid/utils.rb +22 -0
  209. data/lib/mongoid/validatable/localizable.rb +1 -1
  210. data/lib/mongoid/validatable/macros.rb +5 -7
  211. data/lib/mongoid/validatable/presence.rb +2 -2
  212. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  213. data/lib/mongoid/validatable.rb +9 -6
  214. data/lib/mongoid/version.rb +1 -1
  215. data/lib/mongoid/warnings.rb +19 -4
  216. data/lib/mongoid.rb +17 -3
  217. data/spec/config/mongoid.yml +16 -0
  218. data/spec/integration/app_spec.rb +10 -14
  219. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  220. data/spec/integration/associations/embedded_spec.rb +15 -0
  221. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  222. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  223. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  224. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  225. data/spec/integration/associations/has_one_spec.rb +97 -1
  226. data/spec/integration/associations/scope_option_spec.rb +1 -1
  227. data/spec/integration/callbacks_models.rb +132 -1
  228. data/spec/integration/callbacks_spec.rb +360 -4
  229. data/spec/integration/criteria/range_spec.rb +95 -1
  230. data/spec/integration/discriminator_key_spec.rb +118 -80
  231. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  232. data/spec/integration/i18n_fallbacks_spec.rb +3 -32
  233. data/spec/integration/matcher_examples_spec.rb +20 -13
  234. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  235. data/spec/integration/matcher_operator_spec.rb +3 -5
  236. data/spec/integration/persistence/range_field_spec.rb +350 -0
  237. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  238. data/spec/mongoid/association/depending_spec.rb +9 -9
  239. data/spec/mongoid/association/eager_spec.rb +2 -1
  240. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  241. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  242. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
  243. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  244. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +255 -65
  245. data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
  246. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
  247. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  248. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  249. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
  250. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  251. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  252. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  253. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  254. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
  255. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  256. data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
  257. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
  258. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  259. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  260. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  261. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  262. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -177
  263. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  264. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  265. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  266. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  267. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  268. data/spec/mongoid/association/syncable_spec.rb +15 -1
  269. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  270. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  271. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  272. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  273. data/spec/mongoid/attributes_spec.rb +510 -33
  274. data/spec/mongoid/changeable_spec.rb +429 -37
  275. data/spec/mongoid/clients/factory_spec.rb +23 -30
  276. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  277. data/spec/mongoid/clients_spec.rb +149 -15
  278. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  279. data/spec/mongoid/config/defaults_spec.rb +160 -0
  280. data/spec/mongoid/config_spec.rb +214 -31
  281. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  282. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  283. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  284. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  285. data/spec/mongoid/contextual/memory_spec.rb +850 -88
  286. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  287. data/spec/mongoid/contextual/mongo_spec.rb +1572 -435
  288. data/spec/mongoid/contextual/none_spec.rb +60 -21
  289. data/spec/mongoid/copyable_spec.rb +453 -11
  290. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  291. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  292. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  293. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  294. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  295. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  296. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  297. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  298. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  299. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  300. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
  301. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
  302. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  303. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  304. data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
  305. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  306. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
  307. data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
  308. data/spec/mongoid/criteria/queryable/selector_spec.rb +90 -5
  309. data/spec/mongoid/criteria/queryable/storable_spec.rb +72 -0
  310. data/spec/mongoid/criteria/translator_spec.rb +132 -0
  311. data/spec/mongoid/criteria_projection_spec.rb +1 -5
  312. data/spec/mongoid/criteria_spec.rb +469 -1205
  313. data/spec/mongoid/document_fields_spec.rb +173 -24
  314. data/spec/mongoid/document_spec.rb +32 -41
  315. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  316. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  317. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  318. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  319. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  320. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  321. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  322. data/spec/mongoid/extensions/array_spec.rb +16 -2
  323. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
  324. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  325. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  326. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  327. data/spec/mongoid/extensions/date_spec.rb +71 -1
  328. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  329. data/spec/mongoid/extensions/float_spec.rb +53 -74
  330. data/spec/mongoid/extensions/hash_spec.rb +33 -3
  331. data/spec/mongoid/extensions/integer_spec.rb +50 -64
  332. data/spec/mongoid/extensions/range_spec.rb +255 -54
  333. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  334. data/spec/mongoid/extensions/set_spec.rb +106 -0
  335. data/spec/mongoid/extensions/string_spec.rb +53 -25
  336. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  337. data/spec/mongoid/extensions/time_spec.rb +639 -106
  338. data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
  339. data/spec/mongoid/factory_spec.rb +61 -1
  340. data/spec/mongoid/fields/localized_spec.rb +80 -37
  341. data/spec/mongoid/fields_spec.rb +500 -84
  342. data/spec/mongoid/findable_spec.rb +450 -58
  343. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  344. data/spec/mongoid/indexable_spec.rb +55 -30
  345. data/spec/mongoid/interceptable_spec.rb +599 -8
  346. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  347. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  348. data/spec/mongoid/mongoizable_spec.rb +285 -0
  349. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  350. data/spec/mongoid/persistable/deletable_spec.rb +28 -8
  351. data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
  352. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  353. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  354. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  355. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  356. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  357. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  358. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  359. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  360. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  361. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  362. data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
  363. data/spec/mongoid/persistence_context_spec.rb +31 -57
  364. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  365. data/spec/mongoid/query_cache_spec.rb +56 -215
  366. data/spec/mongoid/reloadable_spec.rb +83 -6
  367. data/spec/mongoid/scopable_spec.rb +91 -1
  368. data/spec/mongoid/serializable_spec.rb +9 -30
  369. data/spec/mongoid/shardable_spec.rb +4 -4
  370. data/spec/mongoid/stateful_spec.rb +150 -8
  371. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  372. data/spec/mongoid/tasks/database_spec.rb +127 -0
  373. data/spec/mongoid/timestamps_spec.rb +392 -4
  374. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  375. data/spec/mongoid/touchable_spec.rb +390 -2
  376. data/spec/mongoid/touchable_spec_models.rb +14 -8
  377. data/spec/mongoid/traversable_spec.rb +13 -35
  378. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  379. data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
  380. data/spec/mongoid/warnings_spec.rb +35 -0
  381. data/spec/mongoid_spec.rb +34 -16
  382. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  383. data/spec/rails/mongoid_spec.rb +4 -16
  384. data/spec/spec_helper.rb +5 -0
  385. data/spec/support/constraints.rb +24 -0
  386. data/spec/support/immutable_ids.rb +118 -0
  387. data/spec/support/macros.rb +78 -0
  388. data/spec/support/models/artist.rb +0 -1
  389. data/spec/support/models/augmentation.rb +12 -0
  390. data/spec/support/models/band.rb +4 -0
  391. data/spec/support/models/book.rb +1 -0
  392. data/spec/support/models/building.rb +2 -0
  393. data/spec/support/models/catalog.rb +24 -0
  394. data/spec/support/models/circus.rb +3 -0
  395. data/spec/support/models/cover.rb +10 -0
  396. data/spec/support/models/fanatic.rb +8 -0
  397. data/spec/support/models/implant.rb +9 -0
  398. data/spec/support/models/label.rb +2 -0
  399. data/spec/support/models/passport.rb +9 -0
  400. data/spec/support/models/person.rb +2 -0
  401. data/spec/support/models/player.rb +2 -0
  402. data/spec/support/models/powerup.rb +12 -0
  403. data/spec/support/models/product.rb +1 -0
  404. data/spec/support/models/purse.rb +9 -0
  405. data/spec/support/models/registry.rb +1 -0
  406. data/spec/support/models/school.rb +14 -0
  407. data/spec/support/models/shield.rb +18 -0
  408. data/spec/support/models/student.rb +14 -0
  409. data/spec/support/models/weapon.rb +12 -0
  410. data.tar.gz.sig +0 -0
  411. metadata +718 -641
  412. metadata.gz.sig +0 -0
  413. data/lib/mongoid/errors/eager_load.rb +0 -23
  414. data/lib/mongoid/errors/invalid_value.rb +0 -17
  415. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
  416. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
  417. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -50,7 +50,7 @@ describe Mongoid::Criteria::Findable do
50
50
  it 'respects conditions' do
51
51
  expect do
52
52
  found
53
- end.to raise_error(Mongoid::Errors::DocumentNotFound)
53
+ end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
54
54
  end
55
55
  end
56
56
 
@@ -70,7 +70,7 @@ describe Mongoid::Criteria::Findable do
70
70
  it 'respects both conditions' do
71
71
  expect do
72
72
  found
73
- end.to raise_error(Mongoid::Errors::DocumentNotFound)
73
+ end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
74
74
  end
75
75
  end
76
76
  end
@@ -108,10 +108,7 @@ describe Mongoid::Criteria::Findable do
108
108
  context "when the id does not match" do
109
109
 
110
110
  context "when raising a not found error" do
111
-
112
- before do
113
- Mongoid.raise_not_found_error = true
114
- end
111
+ config_override :raise_not_found_error, true
115
112
 
116
113
  let(:found) do
117
114
  Band.find(BSON::ObjectId.new)
@@ -120,19 +117,12 @@ describe Mongoid::Criteria::Findable do
120
117
  it "raises an error" do
121
118
  expect {
122
119
  found
123
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
120
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
124
121
  end
125
122
  end
126
123
 
127
124
  context "when raising no error" do
128
-
129
- before do
130
- Mongoid.raise_not_found_error = false
131
- end
132
-
133
- after do
134
- Mongoid.raise_not_found_error = true
135
- end
125
+ config_override :raise_not_found_error, false
136
126
 
137
127
  let(:found) do
138
128
  Band.find(BSON::ObjectId.new)
@@ -180,10 +170,7 @@ describe Mongoid::Criteria::Findable do
180
170
  context "when any id does not match" do
181
171
 
182
172
  context "when raising a not found error" do
183
-
184
- before do
185
- Mongoid.raise_not_found_error = true
186
- end
173
+ config_override :raise_not_found_error, true
187
174
 
188
175
  let(:found) do
189
176
  Band.find(band.id, BSON::ObjectId.new)
@@ -192,19 +179,12 @@ describe Mongoid::Criteria::Findable do
192
179
  it "raises an error" do
193
180
  expect {
194
181
  found
195
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
182
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
196
183
  end
197
184
  end
198
185
 
199
186
  context "when raising no error" do
200
-
201
- before do
202
- Mongoid.raise_not_found_error = false
203
- end
204
-
205
- after do
206
- Mongoid.raise_not_found_error = true
207
- end
187
+ config_override :raise_not_found_error, false
208
188
 
209
189
  let(:found) do
210
190
  Band.find(band.id, BSON::ObjectId.new)
@@ -252,10 +232,7 @@ describe Mongoid::Criteria::Findable do
252
232
  context "when any id does not match" do
253
233
 
254
234
  context "when raising a not found error" do
255
-
256
- before do
257
- Mongoid.raise_not_found_error = true
258
- end
235
+ config_override :raise_not_found_error, true
259
236
 
260
237
  let(:found) do
261
238
  Band.find([ band.id, BSON::ObjectId.new ])
@@ -264,19 +241,12 @@ describe Mongoid::Criteria::Findable do
264
241
  it "raises an error" do
265
242
  expect {
266
243
  found
267
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
244
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
268
245
  end
269
246
  end
270
247
 
271
248
  context "when raising no error" do
272
-
273
- before do
274
- Mongoid.raise_not_found_error = false
275
- end
276
-
277
- after do
278
- Mongoid.raise_not_found_error = true
279
- end
249
+ config_override :raise_not_found_error, false
280
250
 
281
251
  let(:found) do
282
252
  Band.find([ band.id, BSON::ObjectId.new ])
@@ -305,10 +275,7 @@ describe Mongoid::Criteria::Findable do
305
275
  context "when the id does not match" do
306
276
 
307
277
  context "when raising a not found error" do
308
-
309
- before do
310
- Mongoid.raise_not_found_error = true
311
- end
278
+ config_override :raise_not_found_error, true
312
279
 
313
280
  let(:found) do
314
281
  Band.find(BSON::ObjectId.new.as_json)
@@ -317,19 +284,12 @@ describe Mongoid::Criteria::Findable do
317
284
  it "raises an error" do
318
285
  expect {
319
286
  found
320
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
287
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
321
288
  end
322
289
  end
323
290
 
324
291
  context "when raising no error" do
325
-
326
- before do
327
- Mongoid.raise_not_found_error = false
328
- end
329
-
330
- after do
331
- Mongoid.raise_not_found_error = true
332
- end
292
+ config_override :raise_not_found_error, false
333
293
 
334
294
  let(:found) do
335
295
  Band.find(BSON::ObjectId.new.as_json)
@@ -377,10 +337,7 @@ describe Mongoid::Criteria::Findable do
377
337
  context "when any id does not match" do
378
338
 
379
339
  context "when raising a not found error" do
380
-
381
- before do
382
- Mongoid.raise_not_found_error = true
383
- end
340
+ config_override :raise_not_found_error, true
384
341
 
385
342
  let(:found) do
386
343
  Band.find(band.id.as_json, BSON::ObjectId.new.as_json)
@@ -389,19 +346,12 @@ describe Mongoid::Criteria::Findable do
389
346
  it "raises an error" do
390
347
  expect {
391
348
  found
392
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
349
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
393
350
  end
394
351
  end
395
352
 
396
353
  context "when raising no error" do
397
-
398
- before do
399
- Mongoid.raise_not_found_error = false
400
- end
401
-
402
- after do
403
- Mongoid.raise_not_found_error = true
404
- end
354
+ config_override :raise_not_found_error, false
405
355
 
406
356
  let(:found) do
407
357
  Band.find(band.id.as_json, BSON::ObjectId.new.as_json)
@@ -449,10 +399,7 @@ describe Mongoid::Criteria::Findable do
449
399
  context "when any id does not match" do
450
400
 
451
401
  context "when raising a not found error" do
452
-
453
- before do
454
- Mongoid.raise_not_found_error = true
455
- end
402
+ config_override :raise_not_found_error, true
456
403
 
457
404
  let(:found) do
458
405
  Band.find([ band.id.as_json, BSON::ObjectId.new.as_json ])
@@ -461,19 +408,12 @@ describe Mongoid::Criteria::Findable do
461
408
  it "raises an error" do
462
409
  expect {
463
410
  found
464
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
411
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
465
412
  end
466
413
  end
467
414
 
468
415
  context "when raising no error" do
469
-
470
- before do
471
- Mongoid.raise_not_found_error = false
472
- end
473
-
474
- after do
475
- Mongoid.raise_not_found_error = true
476
- end
416
+ config_override :raise_not_found_error, false
477
417
 
478
418
  let(:found) do
479
419
  Band.find([ band.id.as_json, BSON::ObjectId.new.as_json ])
@@ -519,10 +459,7 @@ describe Mongoid::Criteria::Findable do
519
459
  context "when the id does not match" do
520
460
 
521
461
  context "when raising a not found error" do
522
-
523
- before do
524
- Mongoid.raise_not_found_error = true
525
- end
462
+ config_override :raise_not_found_error, true
526
463
 
527
464
  let(:found) do
528
465
  Band.find("depeche-mode")
@@ -531,19 +468,12 @@ describe Mongoid::Criteria::Findable do
531
468
  it "raises an error" do
532
469
  expect {
533
470
  found
534
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
471
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
535
472
  end
536
473
  end
537
474
 
538
475
  context "when raising no error" do
539
-
540
- before do
541
- Mongoid.raise_not_found_error = false
542
- end
543
-
544
- after do
545
- Mongoid.raise_not_found_error = true
546
- end
476
+ config_override :raise_not_found_error, false
547
477
 
548
478
  let(:found) do
549
479
  Band.find("depeche-mode")
@@ -582,10 +512,7 @@ describe Mongoid::Criteria::Findable do
582
512
  context "when any id does not match" do
583
513
 
584
514
  context "when raising a not found error" do
585
-
586
- before do
587
- Mongoid.raise_not_found_error = true
588
- end
515
+ config_override :raise_not_found_error, true
589
516
 
590
517
  let(:found) do
591
518
  Band.find(band.id, "new-order")
@@ -594,19 +521,12 @@ describe Mongoid::Criteria::Findable do
594
521
  it "raises an error" do
595
522
  expect {
596
523
  found
597
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
524
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
598
525
  end
599
526
  end
600
527
 
601
528
  context "when raising no error" do
602
-
603
- before do
604
- Mongoid.raise_not_found_error = false
605
- end
606
-
607
- after do
608
- Mongoid.raise_not_found_error = true
609
- end
529
+ config_override :raise_not_found_error, false
610
530
 
611
531
  let(:found) do
612
532
  Band.find(band.id, "new-order")
@@ -645,10 +565,7 @@ describe Mongoid::Criteria::Findable do
645
565
  context "when any id does not match" do
646
566
 
647
567
  context "when raising a not found error" do
648
-
649
- before do
650
- Mongoid.raise_not_found_error = true
651
- end
568
+ config_override :raise_not_found_error, true
652
569
 
653
570
  let(:found) do
654
571
  Band.find([ band.id, "new-order" ])
@@ -657,19 +574,12 @@ describe Mongoid::Criteria::Findable do
657
574
  it "raises an error" do
658
575
  expect {
659
576
  found
660
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
577
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
661
578
  end
662
579
  end
663
580
 
664
581
  context "when raising no error" do
665
-
666
- before do
667
- Mongoid.raise_not_found_error = false
668
- end
669
-
670
- after do
671
- Mongoid.raise_not_found_error = true
672
- end
582
+ config_override :raise_not_found_error, false
673
583
 
674
584
  let(:found) do
675
585
  Band.find([ band.id, "new-order" ])
@@ -715,10 +625,7 @@ describe Mongoid::Criteria::Findable do
715
625
  context "when the id does not match" do
716
626
 
717
627
  context "when raising a not found error" do
718
-
719
- before do
720
- Mongoid.raise_not_found_error = true
721
- end
628
+ config_override :raise_not_found_error, true
722
629
 
723
630
  let(:found) do
724
631
  Band.find({"new-order" => false, "Faith no More" => true})
@@ -727,19 +634,12 @@ describe Mongoid::Criteria::Findable do
727
634
  it "raises an error" do
728
635
  expect {
729
636
  found
730
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
637
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
731
638
  end
732
639
  end
733
640
 
734
641
  context "when raising no error" do
735
-
736
- before do
737
- Mongoid.raise_not_found_error = false
738
- end
739
-
740
- after do
741
- Mongoid.raise_not_found_error = true
742
- end
642
+ config_override :raise_not_found_error, false
743
643
 
744
644
  let(:found) do
745
645
  Band.find({"new-order" => false, "Faith no More" => true})
@@ -778,10 +678,7 @@ describe Mongoid::Criteria::Findable do
778
678
  context "when any id does not match" do
779
679
 
780
680
  context "when raising a not found error" do
781
-
782
- before do
783
- Mongoid.raise_not_found_error = true
784
- end
681
+ config_override :raise_not_found_error, true
785
682
 
786
683
  let(:found) do
787
684
  Band.find(band.id, {"Radiohead" => true, "Nirvana"=> false})
@@ -790,19 +687,12 @@ describe Mongoid::Criteria::Findable do
790
687
  it "raises an error" do
791
688
  expect {
792
689
  found
793
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
690
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
794
691
  end
795
692
  end
796
693
 
797
694
  context "when raising no error" do
798
-
799
- before do
800
- Mongoid.raise_not_found_error = false
801
- end
802
-
803
- after do
804
- Mongoid.raise_not_found_error = true
805
- end
695
+ config_override :raise_not_found_error, false
806
696
 
807
697
  let(:found) do
808
698
  Band.find(band.id, {"Radiohead" => true, "Nirvana"=> false})
@@ -841,10 +731,7 @@ describe Mongoid::Criteria::Findable do
841
731
  context "when any id does not match" do
842
732
 
843
733
  context "when raising a not found error" do
844
-
845
- before do
846
- Mongoid.raise_not_found_error = true
847
- end
734
+ config_override :raise_not_found_error, true
848
735
 
849
736
  let(:found) do
850
737
  Band.find([ band.id, {"Radiohead" => true, "Nirvana"=> false} ])
@@ -853,19 +740,12 @@ describe Mongoid::Criteria::Findable do
853
740
  it "raises an error" do
854
741
  expect {
855
742
  found
856
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
743
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
857
744
  end
858
745
  end
859
746
 
860
747
  context "when raising no error" do
861
-
862
- before do
863
- Mongoid.raise_not_found_error = false
864
- end
865
-
866
- after do
867
- Mongoid.raise_not_found_error = true
868
- end
748
+ config_override :raise_not_found_error, false
869
749
 
870
750
  let(:found) do
871
751
  Band.find([ band.id, {"Radiohead" => true, "Nirvana"=> false} ])
@@ -911,10 +791,7 @@ describe Mongoid::Criteria::Findable do
911
791
  context "when the id does not match" do
912
792
 
913
793
  context "when raising a not found error" do
914
-
915
- before do
916
- Mongoid.raise_not_found_error = true
917
- end
794
+ config_override :raise_not_found_error, true
918
795
 
919
796
  let(:found) do
920
797
  Band.find(3)
@@ -923,19 +800,12 @@ describe Mongoid::Criteria::Findable do
923
800
  it "raises an error" do
924
801
  expect {
925
802
  found
926
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
803
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
927
804
  end
928
805
  end
929
806
 
930
807
  context "when raising no error" do
931
-
932
- before do
933
- Mongoid.raise_not_found_error = false
934
- end
935
-
936
- after do
937
- Mongoid.raise_not_found_error = true
938
- end
808
+ config_override :raise_not_found_error, false
939
809
 
940
810
  let(:found) do
941
811
  Band.find(3)
@@ -974,10 +844,7 @@ describe Mongoid::Criteria::Findable do
974
844
  context "when any id does not match" do
975
845
 
976
846
  context "when raising a not found error" do
977
-
978
- before do
979
- Mongoid.raise_not_found_error = true
980
- end
847
+ config_override :raise_not_found_error, true
981
848
 
982
849
  let(:found) do
983
850
  Band.find(band.id, 3)
@@ -986,19 +853,12 @@ describe Mongoid::Criteria::Findable do
986
853
  it "raises an error" do
987
854
  expect {
988
855
  found
989
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
856
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
990
857
  end
991
858
  end
992
859
 
993
860
  context "when raising no error" do
994
-
995
- before do
996
- Mongoid.raise_not_found_error = false
997
- end
998
-
999
- after do
1000
- Mongoid.raise_not_found_error = true
1001
- end
861
+ config_override :raise_not_found_error, false
1002
862
 
1003
863
  let(:found) do
1004
864
  Band.find(band.id, 3)
@@ -1037,10 +897,7 @@ describe Mongoid::Criteria::Findable do
1037
897
  context "when any id does not match" do
1038
898
 
1039
899
  context "when raising a not found error" do
1040
-
1041
- before do
1042
- Mongoid.raise_not_found_error = true
1043
- end
900
+ config_override :raise_not_found_error, true
1044
901
 
1045
902
  let(:found) do
1046
903
  Band.find([ band.id, 3 ])
@@ -1049,19 +906,12 @@ describe Mongoid::Criteria::Findable do
1049
906
  it "raises an error" do
1050
907
  expect {
1051
908
  found
1052
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
909
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
1053
910
  end
1054
911
  end
1055
912
 
1056
913
  context "when raising no error" do
1057
-
1058
- before do
1059
- Mongoid.raise_not_found_error = false
1060
- end
1061
-
1062
- after do
1063
- Mongoid.raise_not_found_error = true
1064
- end
914
+ config_override :raise_not_found_error, false
1065
915
 
1066
916
  let(:found) do
1067
917
  Band.find([ band.id, 3 ])
@@ -1100,10 +950,7 @@ describe Mongoid::Criteria::Findable do
1100
950
  context "when any id does not match" do
1101
951
 
1102
952
  context "when raising a not found error" do
1103
-
1104
- before do
1105
- Mongoid.raise_not_found_error = true
1106
- end
953
+ config_override :raise_not_found_error, true
1107
954
 
1108
955
  let(:found) do
1109
956
  Band.find(1..3)
@@ -1112,19 +959,12 @@ describe Mongoid::Criteria::Findable do
1112
959
  it "raises an error" do
1113
960
  expect {
1114
961
  found
1115
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
962
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
1116
963
  end
1117
964
  end
1118
965
 
1119
966
  context "when raising no error" do
1120
-
1121
- before do
1122
- Mongoid.raise_not_found_error = false
1123
- end
1124
-
1125
- after do
1126
- Mongoid.raise_not_found_error = true
1127
- end
967
+ config_override :raise_not_found_error, false
1128
968
 
1129
969
  let(:found) do
1130
970
  Band.find(1..3)
@@ -1166,6 +1006,42 @@ describe Mongoid::Criteria::Findable do
1166
1006
  end
1167
1007
  end
1168
1008
  end
1009
+
1010
+ context "when passing in a block" do
1011
+
1012
+ let!(:band1) { Band.create!(name: '1') }
1013
+ let!(:band2) { Band.create!(name: '2') }
1014
+ let!(:band3) { Band.create!(name: '2') }
1015
+
1016
+ it "yields the documents to the block" do
1017
+ doc = Band.find { |b| b.name == '2' }
1018
+ expect(doc).to eq(band2)
1019
+ end
1020
+ end
1021
+
1022
+ context "when passing in ids and a block" do
1023
+
1024
+ let!(:band1) { Band.create!(name: '1') }
1025
+ let!(:band2) { Band.create!(name: '2') }
1026
+ let!(:band3) { Band.create!(name: '2') }
1027
+
1028
+ it "acts like findable find" do
1029
+ docs = Band.find(band1.id, band2.id) { |b| b.name == '2' }
1030
+ expect(docs).to eq([ band1, band2 ])
1031
+ end
1032
+ end
1033
+
1034
+ context "when passing in a Proc and a block" do
1035
+
1036
+ let!(:band1) { Band.create!(name: '1') }
1037
+ let!(:band2) { Band.create!(name: '2') }
1038
+ let!(:band3) { Band.create!(name: '2') }
1039
+
1040
+ it "acts like findable find" do
1041
+ docs = Band.find(-> { 'default' }) { |b| b.name == '3' }
1042
+ expect(docs).to eq('default')
1043
+ end
1044
+ end
1169
1045
  end
1170
1046
 
1171
1047
  describe "#for_ids" do