mongoid 7.5.4 → 8.1.9

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 (446) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -3
  3. data/README.md +6 -6
  4. data/Rakefile +44 -46
  5. data/lib/config/locales/en.yml +92 -43
  6. data/lib/mongoid/association/accessors.rb +44 -11
  7. data/lib/mongoid/association/bindable.rb +50 -2
  8. data/lib/mongoid/association/builders.rb +5 -3
  9. data/lib/mongoid/association/constrainable.rb +0 -1
  10. data/lib/mongoid/association/eager_loadable.rb +32 -7
  11. data/lib/mongoid/association/embedded/batchable.rb +34 -11
  12. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  13. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  14. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
  15. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
  16. data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
  17. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  18. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
  19. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +85 -46
  20. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  21. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
  22. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
  23. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  24. data/lib/mongoid/association/macros.rb +8 -1
  25. data/lib/mongoid/association/many.rb +11 -7
  26. data/lib/mongoid/association/nested/many.rb +5 -4
  27. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  28. data/lib/mongoid/association/nested/one.rb +45 -7
  29. data/lib/mongoid/association/one.rb +2 -2
  30. data/lib/mongoid/association/options.rb +9 -9
  31. data/lib/mongoid/association/proxy.rb +15 -4
  32. data/lib/mongoid/association/referenced/auto_save.rb +4 -3
  33. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  34. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  35. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  36. data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
  37. data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
  38. data/lib/mongoid/association/referenced/eager.rb +2 -2
  39. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
  40. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
  41. data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
  42. data/lib/mongoid/association/referenced/has_many/proxy.rb +40 -21
  43. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  44. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  45. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  46. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
  47. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  48. data/lib/mongoid/association/referenced/syncable.rb +4 -4
  49. data/lib/mongoid/association/reflections.rb +4 -4
  50. data/lib/mongoid/association/relatable.rb +44 -10
  51. data/lib/mongoid/association.rb +5 -5
  52. data/lib/mongoid/atomic/modifiers.rb +2 -2
  53. data/lib/mongoid/atomic.rb +16 -7
  54. data/lib/mongoid/attributes/dynamic.rb +4 -4
  55. data/lib/mongoid/attributes/nested.rb +6 -6
  56. data/lib/mongoid/attributes/processing.rb +37 -6
  57. data/lib/mongoid/attributes/projector.rb +2 -2
  58. data/lib/mongoid/attributes/readonly.rb +11 -6
  59. data/lib/mongoid/attributes.rb +51 -42
  60. data/lib/mongoid/changeable.rb +147 -14
  61. data/lib/mongoid/clients/options.rb +5 -1
  62. data/lib/mongoid/clients/sessions.rb +2 -14
  63. data/lib/mongoid/clients/storage_options.rb +2 -5
  64. data/lib/mongoid/clients/validators/storage.rb +3 -15
  65. data/lib/mongoid/collection_configurable.rb +58 -0
  66. data/lib/mongoid/composable.rb +2 -0
  67. data/lib/mongoid/config/defaults.rb +60 -0
  68. data/lib/mongoid/config/options.rb +3 -0
  69. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  70. data/lib/mongoid/config/validators/client.rb +6 -6
  71. data/lib/mongoid/config/validators.rb +1 -0
  72. data/lib/mongoid/config.rb +153 -18
  73. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  74. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  75. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  76. data/lib/mongoid/contextual/atomic.rb +1 -1
  77. data/lib/mongoid/contextual/geo_near.rb +7 -7
  78. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  79. data/lib/mongoid/contextual/memory.rb +285 -58
  80. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  81. data/lib/mongoid/contextual/mongo.rb +540 -346
  82. data/lib/mongoid/contextual/none.rb +193 -20
  83. data/lib/mongoid/contextual/queryable.rb +1 -1
  84. data/lib/mongoid/contextual.rb +14 -2
  85. data/lib/mongoid/copyable.rb +32 -8
  86. data/lib/mongoid/criteria/findable.rb +8 -5
  87. data/lib/mongoid/criteria/includable.rb +27 -22
  88. data/lib/mongoid/criteria/marshalable.rb +10 -2
  89. data/lib/mongoid/criteria/permission.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  91. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
  92. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  93. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  94. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  95. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  96. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
  97. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -9
  98. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  99. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  100. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  101. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  102. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
  103. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
  104. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  105. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  106. data/lib/mongoid/criteria/queryable/key.rb +4 -4
  107. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
  108. data/lib/mongoid/criteria/queryable/optional.rb +11 -17
  109. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  110. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  111. data/lib/mongoid/criteria/queryable/selectable.rb +48 -39
  112. data/lib/mongoid/criteria/queryable/selector.rb +92 -7
  113. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  114. data/lib/mongoid/criteria/queryable.rb +12 -7
  115. data/lib/mongoid/criteria/scopable.rb +2 -2
  116. data/lib/mongoid/criteria/translator.rb +45 -0
  117. data/lib/mongoid/criteria.rb +20 -40
  118. data/lib/mongoid/deprecable.rb +37 -0
  119. data/lib/mongoid/deprecation.rb +25 -0
  120. data/lib/mongoid/document.rb +135 -36
  121. data/lib/mongoid/equality.rb +9 -8
  122. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  123. data/lib/mongoid/errors/document_not_found.rb +10 -6
  124. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  125. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  126. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  127. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  128. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  129. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  130. data/lib/mongoid/errors/invalid_field.rb +6 -2
  131. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  132. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  133. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  134. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  135. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  136. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  137. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  138. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  139. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  140. data/lib/mongoid/errors/no_client_database.rb +1 -1
  141. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  142. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  143. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  144. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  145. data/lib/mongoid/errors.rb +6 -3
  146. data/lib/mongoid/extensions/array.rb +9 -7
  147. data/lib/mongoid/extensions/big_decimal.rb +33 -10
  148. data/lib/mongoid/extensions/binary.rb +42 -0
  149. data/lib/mongoid/extensions/boolean.rb +8 -2
  150. data/lib/mongoid/extensions/date.rb +26 -20
  151. data/lib/mongoid/extensions/date_time.rb +1 -1
  152. data/lib/mongoid/extensions/false_class.rb +1 -1
  153. data/lib/mongoid/extensions/float.rb +7 -4
  154. data/lib/mongoid/extensions/hash.rb +38 -9
  155. data/lib/mongoid/extensions/integer.rb +7 -4
  156. data/lib/mongoid/extensions/module.rb +1 -1
  157. data/lib/mongoid/extensions/object.rb +10 -8
  158. data/lib/mongoid/extensions/range.rb +41 -10
  159. data/lib/mongoid/extensions/regexp.rb +11 -4
  160. data/lib/mongoid/extensions/set.rb +11 -4
  161. data/lib/mongoid/extensions/string.rb +11 -22
  162. data/lib/mongoid/extensions/symbol.rb +4 -15
  163. data/lib/mongoid/extensions/time.rb +29 -16
  164. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  165. data/lib/mongoid/extensions/true_class.rb +1 -1
  166. data/lib/mongoid/extensions.rb +1 -0
  167. data/lib/mongoid/factory.rb +55 -7
  168. data/lib/mongoid/fields/foreign_key.rb +11 -4
  169. data/lib/mongoid/fields/localized.rb +19 -4
  170. data/lib/mongoid/fields/standard.rb +17 -7
  171. data/lib/mongoid/fields/validators/macro.rb +3 -9
  172. data/lib/mongoid/fields.rb +142 -28
  173. data/lib/mongoid/findable.rb +54 -24
  174. data/lib/mongoid/indexable/specification.rb +2 -2
  175. data/lib/mongoid/indexable/validators/options.rb +6 -2
  176. data/lib/mongoid/interceptable.rb +187 -16
  177. data/lib/mongoid/matchable.rb +1 -1
  178. data/lib/mongoid/matcher/eq_impl.rb +1 -1
  179. data/lib/mongoid/matcher/type.rb +1 -1
  180. data/lib/mongoid/matcher.rb +48 -14
  181. data/lib/mongoid/persistable/creatable.rb +19 -9
  182. data/lib/mongoid/persistable/deletable.rb +2 -2
  183. data/lib/mongoid/persistable/destroyable.rb +1 -1
  184. data/lib/mongoid/persistable/savable.rb +14 -2
  185. data/lib/mongoid/persistable/unsettable.rb +2 -2
  186. data/lib/mongoid/persistable/updatable.rb +69 -12
  187. data/lib/mongoid/persistable/upsertable.rb +21 -2
  188. data/lib/mongoid/persistable.rb +6 -3
  189. data/lib/mongoid/persistence_context.rb +6 -4
  190. data/lib/mongoid/query_cache.rb +13 -261
  191. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  192. data/lib/mongoid/railties/database.rake +7 -2
  193. data/lib/mongoid/reloadable.rb +10 -8
  194. data/lib/mongoid/scopable.rb +15 -13
  195. data/lib/mongoid/selectable.rb +1 -2
  196. data/lib/mongoid/serializable.rb +17 -13
  197. data/lib/mongoid/stateful.rb +57 -10
  198. data/lib/mongoid/tasks/database.rake +12 -0
  199. data/lib/mongoid/tasks/database.rb +20 -2
  200. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  201. data/lib/mongoid/threaded.rb +42 -12
  202. data/lib/mongoid/timestamps/created.rb +9 -2
  203. data/lib/mongoid/timestamps/updated.rb +2 -2
  204. data/lib/mongoid/touchable.rb +3 -4
  205. data/lib/mongoid/traversable.rb +41 -5
  206. data/lib/mongoid/utils.rb +22 -0
  207. data/lib/mongoid/validatable/associated.rb +98 -17
  208. data/lib/mongoid/validatable/localizable.rb +1 -1
  209. data/lib/mongoid/validatable/macros.rb +5 -7
  210. data/lib/mongoid/validatable/presence.rb +2 -2
  211. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  212. data/lib/mongoid/validatable.rb +17 -6
  213. data/lib/mongoid/version.rb +1 -1
  214. data/lib/mongoid/warnings.rb +19 -4
  215. data/lib/mongoid.rb +17 -3
  216. data/spec/config/mongoid.yml +16 -0
  217. data/spec/integration/app_spec.rb +24 -19
  218. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  219. data/spec/integration/associations/embedded_spec.rb +15 -0
  220. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  221. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  222. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  223. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -0
  224. data/spec/integration/associations/has_one_spec.rb +97 -1
  225. data/spec/integration/associations/scope_option_spec.rb +1 -1
  226. data/spec/integration/callbacks_models.rb +132 -1
  227. data/spec/integration/callbacks_spec.rb +381 -4
  228. data/spec/integration/criteria/range_spec.rb +95 -1
  229. data/spec/integration/discriminator_key_spec.rb +118 -80
  230. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  231. data/spec/integration/i18n_fallbacks_spec.rb +3 -32
  232. data/spec/integration/matcher_examples_spec.rb +20 -13
  233. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  234. data/spec/integration/matcher_operator_spec.rb +3 -5
  235. data/spec/integration/persistence/range_field_spec.rb +350 -0
  236. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  237. data/spec/mongoid/association/depending_spec.rb +9 -9
  238. data/spec/mongoid/association/eager_spec.rb +26 -3
  239. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  240. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  241. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
  242. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  243. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +290 -65
  244. data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
  245. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -0
  246. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  247. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  248. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
  249. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  250. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  251. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  252. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  253. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +19 -0
  254. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  255. data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
  256. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
  257. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  258. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  259. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  260. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  261. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +215 -177
  262. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  263. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  264. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  265. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  266. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  267. data/spec/mongoid/association/syncable_spec.rb +15 -1
  268. data/spec/mongoid/association_spec.rb +60 -0
  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/readonly_spec.rb +19 -0
  274. data/spec/mongoid/attributes_spec.rb +526 -33
  275. data/spec/mongoid/changeable_spec.rb +429 -37
  276. data/spec/mongoid/clients/factory_spec.rb +23 -30
  277. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  278. data/spec/mongoid/clients_spec.rb +149 -15
  279. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  280. data/spec/mongoid/config/defaults_spec.rb +160 -0
  281. data/spec/mongoid/config_spec.rb +214 -31
  282. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  283. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  284. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  285. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  286. data/spec/mongoid/contextual/memory_spec.rb +850 -88
  287. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  288. data/spec/mongoid/contextual/mongo_spec.rb +2256 -1005
  289. data/spec/mongoid/contextual/none_spec.rb +60 -21
  290. data/spec/mongoid/copyable_spec.rb +453 -11
  291. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  292. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  293. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  294. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  295. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  296. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  297. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  298. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  299. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  300. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  301. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
  302. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
  303. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  304. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  305. data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
  306. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  307. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
  308. data/spec/mongoid/criteria/queryable/selectable_spec.rb +107 -86
  309. data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
  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 +59 -41
  315. data/spec/mongoid/equality_spec.rb +6 -0
  316. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  317. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  318. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  319. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  320. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  321. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  322. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  323. data/spec/mongoid/extensions/array_spec.rb +16 -2
  324. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
  325. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  326. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  327. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  328. data/spec/mongoid/extensions/date_spec.rb +71 -1
  329. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  330. data/spec/mongoid/extensions/float_spec.rb +53 -74
  331. data/spec/mongoid/extensions/hash_spec.rb +33 -3
  332. data/spec/mongoid/extensions/integer_spec.rb +50 -64
  333. data/spec/mongoid/extensions/range_spec.rb +255 -54
  334. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  335. data/spec/mongoid/extensions/set_spec.rb +106 -0
  336. data/spec/mongoid/extensions/string_spec.rb +53 -25
  337. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  338. data/spec/mongoid/extensions/time_spec.rb +639 -106
  339. data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
  340. data/spec/mongoid/factory_spec.rb +61 -1
  341. data/spec/mongoid/fields/localized_spec.rb +80 -37
  342. data/spec/mongoid/fields_spec.rb +503 -87
  343. data/spec/mongoid/findable_spec.rb +450 -58
  344. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  345. data/spec/mongoid/indexable_spec.rb +55 -30
  346. data/spec/mongoid/interceptable_spec.rb +904 -22
  347. data/spec/mongoid/interceptable_spec_models.rb +189 -22
  348. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  349. data/spec/mongoid/mongoizable_spec.rb +285 -0
  350. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  351. data/spec/mongoid/persistable/deletable_spec.rb +28 -8
  352. data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
  353. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  354. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  355. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  356. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  357. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  358. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  359. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  360. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  361. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  362. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  363. data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
  364. data/spec/mongoid/persistence_context_spec.rb +31 -57
  365. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  366. data/spec/mongoid/query_cache_spec.rb +56 -215
  367. data/spec/mongoid/reloadable_spec.rb +83 -6
  368. data/spec/mongoid/scopable_spec.rb +91 -1
  369. data/spec/mongoid/serializable_spec.rb +25 -39
  370. data/spec/mongoid/shardable_spec.rb +4 -4
  371. data/spec/mongoid/stateful_spec.rb +150 -8
  372. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  373. data/spec/mongoid/tasks/database_spec.rb +127 -0
  374. data/spec/mongoid/timestamps/created_spec.rb +23 -0
  375. data/spec/mongoid/timestamps_spec.rb +392 -4
  376. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  377. data/spec/mongoid/touchable_spec.rb +390 -2
  378. data/spec/mongoid/touchable_spec_models.rb +14 -8
  379. data/spec/mongoid/traversable_spec.rb +13 -35
  380. data/spec/mongoid/validatable/associated_spec.rb +27 -34
  381. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  382. data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
  383. data/spec/mongoid/warnings_spec.rb +35 -0
  384. data/spec/mongoid_spec.rb +34 -16
  385. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  386. data/spec/rails/mongoid_spec.rb +4 -16
  387. data/spec/spec_helper.rb +5 -0
  388. data/spec/support/constraints.rb +24 -0
  389. data/spec/support/immutable_ids.rb +118 -0
  390. data/spec/support/macros.rb +78 -0
  391. data/spec/support/models/artist.rb +0 -1
  392. data/spec/support/models/augmentation.rb +12 -0
  393. data/spec/support/models/band.rb +5 -0
  394. data/spec/support/models/book.rb +1 -0
  395. data/spec/support/models/building.rb +2 -0
  396. data/spec/support/models/catalog.rb +24 -0
  397. data/spec/support/models/circus.rb +3 -0
  398. data/spec/support/models/cover.rb +10 -0
  399. data/spec/support/models/fanatic.rb +8 -0
  400. data/spec/support/models/implant.rb +9 -0
  401. data/spec/support/models/label.rb +2 -0
  402. data/spec/support/models/lat_lng.rb +6 -0
  403. data/spec/support/models/name.rb +10 -0
  404. data/spec/support/models/passport.rb +9 -0
  405. data/spec/support/models/person.rb +2 -0
  406. data/spec/support/models/player.rb +2 -0
  407. data/spec/support/models/powerup.rb +12 -0
  408. data/spec/support/models/product.rb +1 -0
  409. data/spec/support/models/purse.rb +9 -0
  410. data/spec/support/models/registry.rb +1 -0
  411. data/spec/support/models/school.rb +14 -0
  412. data/spec/support/models/shield.rb +18 -0
  413. data/spec/support/models/student.rb +14 -0
  414. data/spec/support/models/weapon.rb +12 -0
  415. metadata +98 -96
  416. checksums.yaml.gz.sig +0 -0
  417. data/lib/mongoid/errors/eager_load.rb +0 -23
  418. data/lib/mongoid/errors/invalid_value.rb +0 -17
  419. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
  420. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
  421. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
  422. data/spec/shared/LICENSE +0 -20
  423. data/spec/shared/bin/get-mongodb-download-url +0 -17
  424. data/spec/shared/bin/s3-copy +0 -45
  425. data/spec/shared/bin/s3-upload +0 -69
  426. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  427. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  428. data/spec/shared/lib/mrss/constraints.rb +0 -378
  429. data/spec/shared/lib/mrss/docker_runner.rb +0 -291
  430. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  431. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  432. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  433. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  434. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  435. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  436. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  437. data/spec/shared/lib/mrss/utils.rb +0 -15
  438. data/spec/shared/share/Dockerfile.erb +0 -325
  439. data/spec/shared/share/haproxy-1.conf +0 -16
  440. data/spec/shared/share/haproxy-2.conf +0 -17
  441. data/spec/shared/shlib/config.sh +0 -27
  442. data/spec/shared/shlib/distro.sh +0 -74
  443. data/spec/shared/shlib/server.sh +0 -392
  444. data/spec/shared/shlib/set_env.sh +0 -169
  445. data.tar.gz.sig +0 -0
  446. metadata.gz.sig +0 -3
@@ -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