mongoid 7.5.4 → 8.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (298) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +3 -3
  4. data/Rakefile +0 -25
  5. data/lib/config/locales/en.yml +46 -30
  6. data/lib/mongoid/association/accessors.rb +32 -3
  7. data/lib/mongoid/association/bindable.rb +48 -0
  8. data/lib/mongoid/association/builders.rb +4 -2
  9. data/lib/mongoid/association/eager_loadable.rb +29 -7
  10. data/lib/mongoid/association/embedded/batchable.rb +28 -5
  11. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  12. data/lib/mongoid/association/embedded/embedded_in.rb +2 -1
  13. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  14. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
  15. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +40 -18
  16. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
  17. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +21 -2
  18. data/lib/mongoid/association/macros.rb +2 -1
  19. data/lib/mongoid/association/many.rb +5 -0
  20. data/lib/mongoid/association/nested/many.rb +2 -1
  21. data/lib/mongoid/association/proxy.rb +12 -0
  22. data/lib/mongoid/association/referenced/auto_save.rb +3 -2
  23. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  24. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  25. data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
  26. data/lib/mongoid/association/referenced/counter_cache.rb +8 -8
  27. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +64 -11
  28. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +4 -1
  29. data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -18
  30. data/lib/mongoid/association/referenced/has_many/proxy.rb +12 -9
  31. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  32. data/lib/mongoid/association/referenced/has_one/proxy.rb +8 -11
  33. data/lib/mongoid/association/referenced/syncable.rb +2 -2
  34. data/lib/mongoid/association/relatable.rb +38 -4
  35. data/lib/mongoid/attributes/processing.rb +9 -2
  36. data/lib/mongoid/attributes.rb +30 -27
  37. data/lib/mongoid/cacheable.rb +2 -2
  38. data/lib/mongoid/changeable.rb +37 -2
  39. data/lib/mongoid/clients/options.rb +4 -0
  40. data/lib/mongoid/clients/sessions.rb +2 -14
  41. data/lib/mongoid/config.rb +15 -11
  42. data/lib/mongoid/contextual/aggregable/memory.rb +23 -15
  43. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
  44. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  45. data/lib/mongoid/contextual/memory.rb +55 -28
  46. data/lib/mongoid/contextual/mongo.rb +173 -262
  47. data/lib/mongoid/contextual/none.rb +33 -15
  48. data/lib/mongoid/copyable.rb +32 -8
  49. data/lib/mongoid/criteria/includable.rb +24 -20
  50. data/lib/mongoid/criteria/marshalable.rb +10 -2
  51. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -15
  52. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  53. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
  54. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  55. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  56. data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -16
  57. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
  58. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  59. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  60. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +1 -1
  61. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
  62. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  63. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  64. data/lib/mongoid/criteria/queryable/optional.rb +3 -9
  65. data/lib/mongoid/criteria/queryable/options.rb +1 -1
  66. data/lib/mongoid/criteria/queryable/selectable.rb +2 -24
  67. data/lib/mongoid/criteria/queryable/selector.rb +90 -5
  68. data/lib/mongoid/criteria/queryable/smash.rb +39 -6
  69. data/lib/mongoid/criteria/queryable/storable.rb +1 -1
  70. data/lib/mongoid/criteria/queryable.rb +11 -6
  71. data/lib/mongoid/criteria.rb +1 -28
  72. data/lib/mongoid/deprecable.rb +36 -0
  73. data/lib/mongoid/deprecation.rb +25 -0
  74. data/lib/mongoid/document.rb +88 -33
  75. data/lib/mongoid/equality.rb +4 -4
  76. data/lib/mongoid/errors/document_not_found.rb +6 -2
  77. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  78. data/lib/mongoid/errors/invalid_field.rb +5 -1
  79. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  80. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  81. data/lib/mongoid/errors.rb +2 -2
  82. data/lib/mongoid/extensions/array.rb +8 -6
  83. data/lib/mongoid/extensions/big_decimal.rb +29 -10
  84. data/lib/mongoid/extensions/binary.rb +42 -0
  85. data/lib/mongoid/extensions/boolean.rb +8 -2
  86. data/lib/mongoid/extensions/date.rb +26 -20
  87. data/lib/mongoid/extensions/date_time.rb +1 -1
  88. data/lib/mongoid/extensions/float.rb +4 -5
  89. data/lib/mongoid/extensions/hash.rb +12 -5
  90. data/lib/mongoid/extensions/integer.rb +4 -5
  91. data/lib/mongoid/extensions/object.rb +2 -0
  92. data/lib/mongoid/extensions/range.rb +41 -10
  93. data/lib/mongoid/extensions/regexp.rb +11 -4
  94. data/lib/mongoid/extensions/set.rb +11 -4
  95. data/lib/mongoid/extensions/string.rb +2 -13
  96. data/lib/mongoid/extensions/symbol.rb +3 -14
  97. data/lib/mongoid/extensions/time.rb +27 -16
  98. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  99. data/lib/mongoid/extensions.rb +1 -0
  100. data/lib/mongoid/factory.rb +42 -7
  101. data/lib/mongoid/fields/foreign_key.rb +7 -0
  102. data/lib/mongoid/fields/validators/macro.rb +3 -9
  103. data/lib/mongoid/fields.rb +49 -7
  104. data/lib/mongoid/findable.rb +21 -16
  105. data/lib/mongoid/indexable/specification.rb +1 -1
  106. data/lib/mongoid/indexable/validators/options.rb +4 -1
  107. data/lib/mongoid/interceptable.rb +69 -9
  108. data/lib/mongoid/persistable/creatable.rb +14 -5
  109. data/lib/mongoid/persistable/updatable.rb +12 -5
  110. data/lib/mongoid/persistence_context.rb +8 -42
  111. data/lib/mongoid/query_cache.rb +6 -258
  112. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  113. data/lib/mongoid/reloadable.rb +7 -3
  114. data/lib/mongoid/scopable.rb +9 -11
  115. data/lib/mongoid/selectable.rb +1 -2
  116. data/lib/mongoid/shardable.rb +11 -35
  117. data/lib/mongoid/stateful.rb +27 -1
  118. data/lib/mongoid/timestamps/created.rb +1 -1
  119. data/lib/mongoid/timestamps/updated.rb +1 -1
  120. data/lib/mongoid/touchable.rb +2 -3
  121. data/lib/mongoid/traversable.rb +1 -0
  122. data/lib/mongoid/validatable/uniqueness.rb +2 -1
  123. data/lib/mongoid/version.rb +1 -1
  124. data/lib/mongoid/warnings.rb +3 -4
  125. data/lib/mongoid.rb +1 -0
  126. data/spec/config/mongoid.yml +16 -0
  127. data/spec/integration/app_spec.rb +8 -12
  128. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  129. data/spec/integration/associations/embedded_spec.rb +15 -0
  130. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  131. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  132. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  133. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  134. data/spec/integration/associations/has_one_spec.rb +97 -1
  135. data/spec/integration/associations/scope_option_spec.rb +1 -1
  136. data/spec/integration/callbacks_models.rb +95 -1
  137. data/spec/integration/callbacks_spec.rb +226 -4
  138. data/spec/integration/criteria/range_spec.rb +95 -1
  139. data/spec/integration/discriminator_key_spec.rb +115 -76
  140. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  141. data/spec/integration/i18n_fallbacks_spec.rb +1 -15
  142. data/spec/integration/matcher_examples_spec.rb +20 -13
  143. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  144. data/spec/integration/matcher_operator_spec.rb +3 -5
  145. data/spec/integration/persistence/range_field_spec.rb +350 -0
  146. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  147. data/spec/mongoid/association/depending_spec.rb +9 -9
  148. data/spec/mongoid/association/eager_spec.rb +2 -1
  149. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  150. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  151. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
  152. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  153. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +198 -8
  154. data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -0
  155. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
  156. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  157. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  158. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  159. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  160. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  161. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  162. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
  163. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  164. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
  165. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -5
  166. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  167. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  168. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  169. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  170. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +62 -13
  171. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  172. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  173. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  174. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  175. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  176. data/spec/mongoid/association/syncable_spec.rb +14 -0
  177. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  178. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  179. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  180. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  181. data/spec/mongoid/attributes_spec.rb +480 -27
  182. data/spec/mongoid/cacheable_spec.rb +3 -3
  183. data/spec/mongoid/changeable_spec.rb +130 -13
  184. data/spec/mongoid/clients/factory_spec.rb +23 -30
  185. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  186. data/spec/mongoid/clients_spec.rb +2 -2
  187. data/spec/mongoid/config_spec.rb +52 -14
  188. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  189. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  190. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  191. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  192. data/spec/mongoid/contextual/memory_spec.rb +521 -14
  193. data/spec/mongoid/contextual/mongo_spec.rb +566 -416
  194. data/spec/mongoid/contextual/none_spec.rb +11 -19
  195. data/spec/mongoid/copyable_spec.rb +451 -1
  196. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  197. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  198. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  199. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  200. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  201. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  202. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  203. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  204. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  205. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  206. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  207. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  208. data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
  209. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
  210. data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
  211. data/spec/mongoid/criteria/queryable/selector_spec.rb +16 -77
  212. data/spec/mongoid/criteria/queryable/storable_spec.rb +0 -72
  213. data/spec/mongoid/criteria_spec.rb +469 -1201
  214. data/spec/mongoid/document_fields_spec.rb +173 -24
  215. data/spec/mongoid/document_spec.rb +32 -41
  216. data/spec/mongoid/equality_spec.rb +12 -12
  217. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  218. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  219. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  220. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  221. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  222. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  223. data/spec/mongoid/extensions/array_spec.rb +16 -2
  224. data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
  225. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  226. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  227. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  228. data/spec/mongoid/extensions/date_spec.rb +71 -1
  229. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  230. data/spec/mongoid/extensions/float_spec.rb +48 -76
  231. data/spec/mongoid/extensions/hash_spec.rb +30 -0
  232. data/spec/mongoid/extensions/integer_spec.rb +45 -66
  233. data/spec/mongoid/extensions/range_spec.rb +255 -54
  234. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  235. data/spec/mongoid/extensions/set_spec.rb +106 -0
  236. data/spec/mongoid/extensions/string_spec.rb +53 -25
  237. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  238. data/spec/mongoid/extensions/time_spec.rb +634 -66
  239. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
  240. data/spec/mongoid/factory_spec.rb +61 -1
  241. data/spec/mongoid/fields_spec.rb +321 -50
  242. data/spec/mongoid/findable_spec.rb +64 -29
  243. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  244. data/spec/mongoid/indexable_spec.rb +16 -19
  245. data/spec/mongoid/interceptable_spec.rb +584 -5
  246. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  247. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  248. data/spec/mongoid/mongoizable_spec.rb +285 -0
  249. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  250. data/spec/mongoid/persistable/deletable_spec.rb +2 -2
  251. data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
  252. data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
  253. data/spec/mongoid/persistence_context_spec.rb +24 -0
  254. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  255. data/spec/mongoid/query_cache_spec.rb +0 -154
  256. data/spec/mongoid/reloadable_spec.rb +35 -2
  257. data/spec/mongoid/scopable_spec.rb +36 -34
  258. data/spec/mongoid/shardable_models.rb +0 -14
  259. data/spec/mongoid/shardable_spec.rb +61 -153
  260. data/spec/mongoid/stateful_spec.rb +28 -0
  261. data/spec/mongoid/timestamps_spec.rb +390 -0
  262. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  263. data/spec/mongoid/touchable_spec.rb +116 -0
  264. data/spec/mongoid/touchable_spec_models.rb +12 -8
  265. data/spec/mongoid/traversable_spec.rb +4 -11
  266. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  267. data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
  268. data/spec/mongoid/warnings_spec.rb +35 -0
  269. data/spec/mongoid_spec.rb +1 -7
  270. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  271. data/spec/rails/mongoid_spec.rb +4 -16
  272. data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
  273. data/spec/shared/lib/mrss/lite_constraints.rb +0 -8
  274. data/spec/shared/shlib/server.sh +5 -5
  275. data/spec/support/constraints.rb +24 -0
  276. data/spec/support/macros.rb +30 -0
  277. data/spec/support/models/augmentation.rb +12 -0
  278. data/spec/support/models/band.rb +3 -0
  279. data/spec/support/models/catalog.rb +24 -0
  280. data/spec/support/models/circus.rb +3 -0
  281. data/spec/support/models/fanatic.rb +8 -0
  282. data/spec/support/models/implant.rb +9 -0
  283. data/spec/support/models/label.rb +2 -0
  284. data/spec/support/models/passport.rb +9 -0
  285. data/spec/support/models/person.rb +1 -0
  286. data/spec/support/models/player.rb +2 -0
  287. data/spec/support/models/powerup.rb +12 -0
  288. data/spec/support/models/registry.rb +1 -0
  289. data/spec/support/models/school.rb +14 -0
  290. data/spec/support/models/shield.rb +18 -0
  291. data/spec/support/models/student.rb +14 -0
  292. data/spec/support/models/weapon.rb +12 -0
  293. data.tar.gz.sig +0 -0
  294. metadata +689 -657
  295. metadata.gz.sig +0 -0
  296. data/lib/mongoid/errors/eager_load.rb +0 -23
  297. data/lib/mongoid/errors/invalid_value.rb +0 -17
  298. 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