mongoid 7.5.4 → 8.1.7

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 (442) 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 +29 -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 +3 -3
  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 +47 -38
  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 +127 -35
  121. data/lib/mongoid/equality.rb +8 -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 +186 -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 +1 -1
  203. data/lib/mongoid/timestamps/updated.rb +2 -2
  204. data/lib/mongoid/touchable.rb +3 -4
  205. data/lib/mongoid/traversable.rb +10 -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 +2 -1
  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/atomic/paths_spec.rb +0 -14
  269. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  270. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  271. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  272. data/spec/mongoid/attributes_spec.rb +526 -33
  273. data/spec/mongoid/changeable_spec.rb +429 -37
  274. data/spec/mongoid/clients/factory_spec.rb +23 -30
  275. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  276. data/spec/mongoid/clients_spec.rb +149 -15
  277. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  278. data/spec/mongoid/config/defaults_spec.rb +160 -0
  279. data/spec/mongoid/config_spec.rb +214 -31
  280. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  281. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  282. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  283. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  284. data/spec/mongoid/contextual/memory_spec.rb +850 -88
  285. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  286. data/spec/mongoid/contextual/mongo_spec.rb +2256 -1005
  287. data/spec/mongoid/contextual/none_spec.rb +60 -21
  288. data/spec/mongoid/copyable_spec.rb +453 -11
  289. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  290. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  291. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  292. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  293. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  294. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  295. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  296. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  297. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  298. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  299. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
  300. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
  301. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  302. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  303. data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
  304. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  305. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
  306. data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
  307. data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
  308. data/spec/mongoid/criteria/translator_spec.rb +132 -0
  309. data/spec/mongoid/criteria_projection_spec.rb +1 -5
  310. data/spec/mongoid/criteria_spec.rb +469 -1205
  311. data/spec/mongoid/document_fields_spec.rb +173 -24
  312. data/spec/mongoid/document_spec.rb +32 -41
  313. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  314. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  315. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  316. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  317. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  318. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  319. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  320. data/spec/mongoid/extensions/array_spec.rb +16 -2
  321. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
  322. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  323. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  324. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  325. data/spec/mongoid/extensions/date_spec.rb +71 -1
  326. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  327. data/spec/mongoid/extensions/float_spec.rb +53 -74
  328. data/spec/mongoid/extensions/hash_spec.rb +33 -3
  329. data/spec/mongoid/extensions/integer_spec.rb +50 -64
  330. data/spec/mongoid/extensions/range_spec.rb +255 -54
  331. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  332. data/spec/mongoid/extensions/set_spec.rb +106 -0
  333. data/spec/mongoid/extensions/string_spec.rb +53 -25
  334. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  335. data/spec/mongoid/extensions/time_spec.rb +639 -106
  336. data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
  337. data/spec/mongoid/factory_spec.rb +61 -1
  338. data/spec/mongoid/fields/localized_spec.rb +80 -37
  339. data/spec/mongoid/fields_spec.rb +503 -87
  340. data/spec/mongoid/findable_spec.rb +450 -58
  341. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  342. data/spec/mongoid/indexable_spec.rb +55 -30
  343. data/spec/mongoid/interceptable_spec.rb +824 -22
  344. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  345. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  346. data/spec/mongoid/mongoizable_spec.rb +285 -0
  347. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  348. data/spec/mongoid/persistable/deletable_spec.rb +28 -8
  349. data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
  350. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  351. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  352. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  353. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  354. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  355. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  356. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  357. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  358. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  359. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  360. data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
  361. data/spec/mongoid/persistence_context_spec.rb +31 -57
  362. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  363. data/spec/mongoid/query_cache_spec.rb +56 -215
  364. data/spec/mongoid/reloadable_spec.rb +83 -6
  365. data/spec/mongoid/scopable_spec.rb +91 -1
  366. data/spec/mongoid/serializable_spec.rb +25 -39
  367. data/spec/mongoid/shardable_spec.rb +4 -4
  368. data/spec/mongoid/stateful_spec.rb +150 -8
  369. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  370. data/spec/mongoid/tasks/database_spec.rb +127 -0
  371. data/spec/mongoid/timestamps_spec.rb +392 -4
  372. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  373. data/spec/mongoid/touchable_spec.rb +390 -2
  374. data/spec/mongoid/touchable_spec_models.rb +14 -8
  375. data/spec/mongoid/traversable_spec.rb +13 -35
  376. data/spec/mongoid/validatable/associated_spec.rb +27 -34
  377. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  378. data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
  379. data/spec/mongoid/warnings_spec.rb +35 -0
  380. data/spec/mongoid_spec.rb +34 -16
  381. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  382. data/spec/rails/mongoid_spec.rb +4 -16
  383. data/spec/spec_helper.rb +5 -0
  384. data/spec/support/constraints.rb +24 -0
  385. data/spec/support/immutable_ids.rb +118 -0
  386. data/spec/support/macros.rb +78 -0
  387. data/spec/support/models/artist.rb +0 -1
  388. data/spec/support/models/augmentation.rb +12 -0
  389. data/spec/support/models/band.rb +5 -0
  390. data/spec/support/models/book.rb +1 -0
  391. data/spec/support/models/building.rb +2 -0
  392. data/spec/support/models/catalog.rb +24 -0
  393. data/spec/support/models/circus.rb +3 -0
  394. data/spec/support/models/cover.rb +10 -0
  395. data/spec/support/models/fanatic.rb +8 -0
  396. data/spec/support/models/implant.rb +9 -0
  397. data/spec/support/models/label.rb +2 -0
  398. data/spec/support/models/lat_lng.rb +6 -0
  399. data/spec/support/models/name.rb +10 -0
  400. data/spec/support/models/passport.rb +9 -0
  401. data/spec/support/models/person.rb +2 -0
  402. data/spec/support/models/player.rb +2 -0
  403. data/spec/support/models/powerup.rb +12 -0
  404. data/spec/support/models/product.rb +1 -0
  405. data/spec/support/models/purse.rb +9 -0
  406. data/spec/support/models/registry.rb +1 -0
  407. data/spec/support/models/school.rb +14 -0
  408. data/spec/support/models/shield.rb +18 -0
  409. data/spec/support/models/student.rb +14 -0
  410. data/spec/support/models/weapon.rb +12 -0
  411. metadata +101 -96
  412. checksums.yaml.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
  418. data/spec/shared/LICENSE +0 -20
  419. data/spec/shared/bin/get-mongodb-download-url +0 -17
  420. data/spec/shared/bin/s3-copy +0 -45
  421. data/spec/shared/bin/s3-upload +0 -69
  422. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  423. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  424. data/spec/shared/lib/mrss/constraints.rb +0 -378
  425. data/spec/shared/lib/mrss/docker_runner.rb +0 -291
  426. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  427. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  428. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  429. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  430. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  431. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  432. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  433. data/spec/shared/lib/mrss/utils.rb +0 -15
  434. data/spec/shared/share/Dockerfile.erb +0 -325
  435. data/spec/shared/share/haproxy-1.conf +0 -16
  436. data/spec/shared/share/haproxy-2.conf +0 -17
  437. data/spec/shared/shlib/config.sh +0 -27
  438. data/spec/shared/shlib/distro.sh +0 -74
  439. data/spec/shared/shlib/server.sh +0 -392
  440. data/spec/shared/shlib/set_env.sh +0 -169
  441. data.tar.gz.sig +0 -0
  442. metadata.gz.sig +0 -3
@@ -42,8 +42,10 @@ describe Mongoid::Persistable::Upsertable do
42
42
  end
43
43
  end
44
44
 
45
+ let(:options) { {} }
46
+
45
47
  before do
46
- updated.upsert
48
+ updated.upsert(options)
47
49
  end
48
50
 
49
51
  it "updates the existing document" do
@@ -53,6 +55,47 @@ describe Mongoid::Persistable::Upsertable do
53
55
  it "flags the document as persisted" do
54
56
  expect(existing).to be_persisted
55
57
  end
58
+
59
+ shared_examples "replaces the existing fields" do
60
+ it 'replaces the existing fields' do
61
+ Band.count.should == 1
62
+
63
+ existing.reload
64
+ existing.views.should be nil
65
+ existing.name.should == 'Tool'
66
+ end
67
+ end
68
+
69
+ shared_examples "retains the existing fields" do
70
+ it 'retains the existing fields' do
71
+ Band.count.should == 1
72
+
73
+ existing.reload
74
+ existing.views.should eq(42)
75
+ existing.name.should == 'Tool'
76
+ end
77
+ end
78
+
79
+ context 'when existing document contains other fields' do
80
+ let!(:existing) do
81
+ Band.create!(name: "Photek", views: 42)
82
+ end
83
+
84
+ context "when not passing any options" do
85
+ let(:options) { {} }
86
+ it_behaves_like "replaces the existing fields"
87
+ end
88
+
89
+ context "when passing replace: false" do
90
+ let(:options) { { replace: false } }
91
+ it_behaves_like "retains the existing fields"
92
+ end
93
+
94
+ context "when passing replace: true" do
95
+ let(:options) { { replace: true } }
96
+ it_behaves_like "replaces the existing fields"
97
+ end
98
+ end
56
99
  end
57
100
 
58
101
  context "when no matching document exists in the db" do
@@ -104,5 +147,50 @@ describe Mongoid::Persistable::Upsertable do
104
147
  end
105
148
  end
106
149
  end
150
+
151
+ context "when the document is readonly" do
152
+
153
+ context "when legacy_readonly is true" do
154
+ config_override :legacy_readonly, true
155
+
156
+ let!(:existing) do
157
+ Band.create!(name: "Photek")
158
+ end
159
+
160
+ before do
161
+ existing.name = "Depeche Mode"
162
+ end
163
+
164
+ let!(:upsert) do
165
+ existing.upsert
166
+ end
167
+
168
+ it "updates the existing document" do
169
+ expect(existing.reload.name).to eq("Depeche Mode")
170
+ end
171
+
172
+ it "returns true" do
173
+ expect(upsert).to be true
174
+ end
175
+ end
176
+
177
+ context "when legacy_readonly is false" do
178
+ config_override :legacy_readonly, false
179
+
180
+ let!(:existing) do
181
+ Band.create!(name: "Photek").tap(&:readonly!)
182
+ end
183
+
184
+ before do
185
+ existing.name = "Depeche Mode"
186
+ end
187
+
188
+ it 'raises a ReadonlyDocument error' do
189
+ expect do
190
+ existing.upsert
191
+ end.to raise_error(Mongoid::Errors::ReadonlyDocument)
192
+ end
193
+ end
194
+ end
107
195
  end
108
196
  end
@@ -411,19 +411,12 @@ describe Mongoid::PersistenceContext do
411
411
  end
412
412
 
413
413
  context 'when there is a database override' do
414
+ persistence_context_override :database, :other
414
415
 
415
416
  before do
416
417
  object.store_in database: :musique
417
418
  end
418
419
 
419
- before do
420
- Mongoid::Threaded.database_override = :other
421
- end
422
-
423
- after do
424
- Mongoid::Threaded.database_override = nil
425
- end
426
-
427
420
  it 'uses the override' do
428
421
  expect(persistence_context.database_name).to eq(:other)
429
422
  end
@@ -458,14 +451,7 @@ describe Mongoid::PersistenceContext do
458
451
  end
459
452
 
460
453
  context 'when there is a database override' do
461
-
462
- before do
463
- Mongoid::Threaded.database_override = :other
464
- end
465
-
466
- after do
467
- Mongoid::Threaded.database_override = nil
468
- end
454
+ persistence_context_override :database, :other
469
455
 
470
456
  it 'uses the persistence context options' do
471
457
  expect(persistence_context.database_name).to eq(:musique)
@@ -517,14 +503,7 @@ describe Mongoid::PersistenceContext do
517
503
  end
518
504
 
519
505
  context 'when there is a database override' do
520
-
521
- before do
522
- Mongoid::Threaded.database_override = :other
523
- end
524
-
525
- after do
526
- Mongoid::Threaded.database_override = nil
527
- end
506
+ persistence_context_override :database, :other
528
507
 
529
508
  it 'uses the persistence context options' do
530
509
  expect(persistence_context.database_name).to eq(:musique)
@@ -535,14 +514,7 @@ describe Mongoid::PersistenceContext do
535
514
  context 'when there are no options passed to the Persistence Context' do
536
515
 
537
516
  context 'when there is a database override' do
538
-
539
- before do
540
- Mongoid::Threaded.database_override = :other
541
- end
542
-
543
- after do
544
- Mongoid::Threaded.database_override = nil
545
- end
517
+ persistence_context_override :database, :other
546
518
 
547
519
  it 'uses the database override options' do
548
520
  expect(persistence_context.database_name).to eq(Mongoid::Threaded.database_override)
@@ -585,15 +557,7 @@ describe Mongoid::PersistenceContext do
585
557
  end
586
558
 
587
559
  context 'when there is a client override' do
588
-
589
- before do
590
- Mongoid::Threaded.client_override = :other
591
- end
592
-
593
- after do
594
- persistence_context.client.close
595
- Mongoid::Threaded.client_override = nil
596
- end
560
+ persistence_context_override :client, :other
597
561
 
598
562
  it 'uses the client option' do
599
563
  expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
@@ -637,14 +601,7 @@ describe Mongoid::PersistenceContext do
637
601
  end
638
602
 
639
603
  context 'when there is a client override' do
640
-
641
- before do
642
- Mongoid::Threaded.client_override = :alternative
643
- end
644
-
645
- after do
646
- Mongoid::Threaded.client_override = nil
647
- end
604
+ persistence_context_override :client, :alternative
648
605
 
649
606
  it 'uses the client override' do
650
607
  expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
@@ -680,14 +637,7 @@ describe Mongoid::PersistenceContext do
680
637
  end
681
638
 
682
639
  context 'when there is a client override' do
683
-
684
- before do
685
- Mongoid::Threaded.client_override = :alternative
686
- end
687
-
688
- after do
689
- Mongoid::Threaded.client_override = nil
690
- end
640
+ persistence_context_override :client, :alternative
691
641
 
692
642
  it 'uses the client override' do
693
643
  expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
@@ -718,4 +668,28 @@ describe Mongoid::PersistenceContext do
718
668
  end
719
669
  end
720
670
  end
671
+
672
+ context "when using an alternate database to update a document" do
673
+ let(:user) do
674
+ User.new(name: '1')
675
+ end
676
+
677
+ before do
678
+ user.with(database: database_id_alt) do |u|
679
+ u.save!
680
+ end
681
+
682
+ expect do
683
+ user.with(database: database_id_alt) do |u|
684
+ u.update(name:'2')
685
+ end
686
+ end.to_not raise_error
687
+ end
688
+
689
+ it "persists the update" do
690
+ User.with("database" => database_id_alt) do |klass|
691
+ expect(klass.find(user._id).name).to eq("2")
692
+ end
693
+ end
694
+ end
721
695
  end
@@ -40,29 +40,11 @@ describe Mongoid::QueryCache::Middleware do
40
40
  end
41
41
 
42
42
  context 'with driver query cache' do
43
- min_driver_version '2.14'
44
43
 
45
44
  it "cleans the query cache after it responds" do
46
45
  middleware.call({})
47
46
  expect(Mongo::QueryCache.send(:cache_table)).to be_empty
48
47
  end
49
48
  end
50
-
51
- context 'with mongoid query cache' do
52
- max_driver_version '2.13'
53
-
54
- it "cleans the query cache after it responds" do
55
- middleware.call({})
56
- expect(Mongoid::QueryCache.cache_table).to be_empty
57
- end
58
- end
59
- end
60
-
61
- context 'when driver implements query cache middleware' do
62
- min_driver_version '2.15'
63
-
64
- it 'uses the driver query cache middleware' do
65
- Mongoid::QueryCache::Middleware.should be Mongo::QueryCache::Middleware
66
- end
67
49
  end
68
50
  end
@@ -24,81 +24,12 @@ describe Mongoid::QueryCache do
24
24
  Mrss::SessionRegistry.instance.verify_sessions_ended!
25
25
  end
26
26
 
27
- let(:reset_legacy_qc_warning) do
28
- begin
29
- Mongoid::QueryCache.remove_instance_variable('@legacy_query_cache_warned')
30
- rescue NameError
31
- # raised if the instance variable wasn't set
32
- end
33
- end
34
-
35
27
  describe '#cache' do
36
- context 'with driver query cache' do
37
- min_driver_version '2.14'
38
-
39
- it 'does not log a deprecation warning' do
40
- reset_legacy_qc_warning
41
-
42
- expect_any_instance_of(Logger).to_not receive(:warn).with(
43
- described_class::LEGACY_WARNING
44
- )
45
- described_class.cache { }
46
- end
47
-
48
- context 'when query cache is not enabled' do
49
- before do
50
- Mongoid::QueryCache.enabled = false
51
- end
52
-
53
- it 'turns on the query cache within the block' do
54
- expect(Mongoid::QueryCache.enabled?).to be false
55
-
56
- Mongoid::QueryCache.cache do
57
- expect(Mongoid::QueryCache.enabled?).to be true
58
- end
59
-
60
- expect(Mongoid::QueryCache.enabled?).to be false
61
- end
62
- end
63
-
64
- context 'when query cache is enabled' do
65
- before do
66
- Mongoid::QueryCache.enabled = true
67
- end
68
-
69
- it 'keeps the query cache enabled within the block' do
70
- expect(Mongoid::QueryCache.enabled?).to be true
71
-
72
- Mongoid::QueryCache.cache do
73
- expect(Mongoid::QueryCache.enabled?).to be true
74
- end
75
-
76
- expect(Mongoid::QueryCache.enabled?).to be true
77
- end
78
- end
79
-
80
- context 'nested inside #uncached' do
81
- it 'turns on the query cache in the block' do
82
- Mongoid::QueryCache.uncached do
83
- expect(Mongoid::QueryCache.enabled?).to be false
84
-
85
- Mongoid::QueryCache.cache do
86
- expect(Mongoid::QueryCache.enabled?).to be true
87
- end
88
28
 
89
- expect(Mongoid::QueryCache.enabled?).to be false
90
- end
91
- end
92
- end
93
- end
94
-
95
- context 'with mongoid query cache' do
96
- max_driver_version '2.13'
29
+ context 'with driver query cache' do
97
30
 
98
31
  context 'when query cache is not enabled' do
99
- before do
100
- Mongoid::QueryCache.enabled = false
101
- end
32
+ override_query_cache false
102
33
 
103
34
  it 'turns on the query cache within the block' do
104
35
  expect(Mongoid::QueryCache.enabled?).to be false
@@ -112,9 +43,7 @@ describe Mongoid::QueryCache do
112
43
  end
113
44
 
114
45
  context 'when query cache is enabled' do
115
- before do
116
- Mongoid::QueryCache.enabled = true
117
- end
46
+ override_query_cache true
118
47
 
119
48
  it 'keeps the query cache enabled within the block' do
120
49
  expect(Mongoid::QueryCache.enabled?).to be true
@@ -144,70 +73,11 @@ describe Mongoid::QueryCache do
144
73
  end
145
74
 
146
75
  describe '#uncached' do
147
- context 'with driver query cache' do
148
- min_driver_version '2.14'
149
-
150
- context 'when query cache is not enabled' do
151
- before do
152
- Mongoid::QueryCache.enabled = false
153
- end
154
-
155
- it 'keeps the query cache turned off within the block' do
156
- expect(Mongoid::QueryCache.enabled?).to be false
157
-
158
- Mongoid::QueryCache.uncached do
159
- expect(Mongoid::QueryCache.enabled?).to be false
160
- end
161
76
 
162
- expect(Mongoid::QueryCache.enabled?).to be false
163
- end
164
- end
165
-
166
- context 'when query cache is enabled' do
167
- before do
168
- Mongoid::QueryCache.enabled = true
169
- end
170
-
171
- it 'turns off the query cache within the block' do
172
- expect(Mongoid::QueryCache.enabled?).to be true
173
-
174
- Mongoid::QueryCache.uncached do
175
- expect(Mongoid::QueryCache.enabled?).to be false
176
- end
177
-
178
- expect(Mongoid::QueryCache.enabled?).to be true
179
- end
180
- end
181
-
182
- context 'nested inside #cache' do
183
- it 'turns on the query cache in the block' do
184
- Mongoid::QueryCache.cache do
185
- expect(Mongoid::QueryCache.enabled?).to be true
186
-
187
- Mongoid::QueryCache.uncached do
188
- expect(Mongoid::QueryCache.enabled?).to be false
189
- end
190
-
191
- expect(Mongoid::QueryCache.enabled?).to be true
192
- end
193
- end
194
- end
195
- end
196
-
197
- context 'with mongoid query cache' do
198
- max_driver_version '2.13'
199
-
200
- it 'logs a deprecation warning' do
201
- reset_legacy_qc_warning
202
-
203
- expect_any_instance_of(Logger).to receive(:warn).with(described_class::LEGACY_WARNING)
204
- described_class.cache { }
205
- end
77
+ context 'with driver query cache' do
206
78
 
207
79
  context 'when query cache is not enabled' do
208
- before do
209
- Mongoid::QueryCache.enabled = false
210
- end
80
+ override_query_cache false
211
81
 
212
82
  it 'keeps the query cache turned off within the block' do
213
83
  expect(Mongoid::QueryCache.enabled?).to be false
@@ -221,9 +91,7 @@ describe Mongoid::QueryCache do
221
91
  end
222
92
 
223
93
  context 'when query cache is enabled' do
224
- before do
225
- Mongoid::QueryCache.enabled = true
226
- end
94
+ override_query_cache true
227
95
 
228
96
  it 'turns off the query cache within the block' do
229
97
  expect(Mongoid::QueryCache.enabled?).to be true
@@ -277,10 +145,7 @@ describe Mongoid::QueryCache do
277
145
  end
278
146
 
279
147
  context 'does not query for the relation and instead sets the base' do
280
-
281
- before do
282
- Mongoid::QueryCache.enabled = false
283
- end
148
+ override_query_cache false
284
149
 
285
150
  it 'queries for each access to the base' do
286
151
  expect(server).to receive(:with_connection).exactly(0).times.and_call_original
@@ -298,10 +163,7 @@ describe Mongoid::QueryCache do
298
163
  end
299
164
 
300
165
  context 'when query cache is disabled' do
301
-
302
- before do
303
- Mongoid::QueryCache.enabled = false
304
- end
166
+ override_query_cache false
305
167
 
306
168
  it 'does not query for access to the base' do
307
169
  expect(server).to receive(:context).exactly(0).times.and_call_original
@@ -312,10 +174,7 @@ describe Mongoid::QueryCache do
312
174
  end
313
175
 
314
176
  context 'when query cache is enabled' do
315
-
316
- before do
317
- Mongoid::QueryCache.enabled = true
318
- end
177
+ override_query_cache true
319
178
 
320
179
  it 'does not query for access to the base' do
321
180
  expect(server).to receive(:context).exactly(0).times.and_call_original
@@ -328,7 +187,6 @@ describe Mongoid::QueryCache do
328
187
  end
329
188
 
330
189
  context 'when driver query cache exists' do
331
- min_driver_version '2.14'
332
190
 
333
191
  before do
334
192
  Band.all.to_a
@@ -362,10 +220,7 @@ describe Mongoid::QueryCache do
362
220
  end
363
221
 
364
222
  context 'when block is cached' do
365
-
366
- before do
367
- Mongoid::QueryCache.enabled = false
368
- end
223
+ override_query_cache false
369
224
 
370
225
  it 'uses the driver query cache' do
371
226
  expect(Mongo::QueryCache).to receive(:cache).and_call_original
@@ -378,10 +233,7 @@ describe Mongoid::QueryCache do
378
233
  end
379
234
 
380
235
  context 'when block is uncached' do
381
-
382
- before do
383
- Mongoid::QueryCache.enabled = true
384
- end
236
+ override_query_cache true
385
237
 
386
238
  it 'uses the driver query cache' do
387
239
  expect(Mongo::QueryCache).to receive(:uncached).and_call_original
@@ -424,14 +276,6 @@ describe Mongoid::QueryCache do
424
276
  end
425
277
  end
426
278
 
427
- context 'when drivers query cache does not exist' do
428
- max_driver_version '2.13'
429
-
430
- it 'does not recognize the driver query cache' do
431
- expect(defined?(Mongo::QueryCache)).to be_nil
432
- end
433
- end
434
-
435
279
  context "when querying for a single document" do
436
280
 
437
281
  [ :first, :one, :last ].each do |method|
@@ -441,10 +285,7 @@ describe Mongoid::QueryCache do
441
285
  end
442
286
 
443
287
  context "when query cache is disabled" do
444
-
445
- before do
446
- Mongoid::QueryCache.enabled = false
447
- end
288
+ override_query_cache false
448
289
 
449
290
  it "queries again" do
450
291
  expect_query(1) do
@@ -567,10 +408,7 @@ describe Mongoid::QueryCache do
567
408
  end
568
409
 
569
410
  context "when query cache is disabled" do
570
-
571
- before do
572
- Mongoid::QueryCache.enabled = false
573
- end
411
+ override_query_cache false
574
412
 
575
413
  it "queries again" do
576
414
  expect_query(1) do
@@ -662,12 +500,8 @@ describe Mongoid::QueryCache do
662
500
  end
663
501
 
664
502
  context "when the next query has a limit" do
665
- # Server versions older than 3.2 also perform a killCursors operation,
666
- # which causes this test to fail.
667
- min_server_version '3.2'
668
503
 
669
504
  context 'with driver query cache' do
670
- min_driver_version '2.14'
671
505
 
672
506
  # The driver query cache re-uses results with a larger limit
673
507
  it 'does not query again' do
@@ -678,18 +512,6 @@ describe Mongoid::QueryCache do
678
512
  end
679
513
  end
680
514
  end
681
-
682
- context 'with mongoid query cache' do
683
- max_driver_version '2.13'
684
-
685
- it 'queries again' do
686
- expect_query(1) do
687
- result = game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
688
- expect(result.length).to eq(2)
689
- expect(result.map { |r| r['value'] }).to eq([6, 7])
690
- end
691
- end
692
- end
693
515
  end
694
516
 
695
517
  context "when the new query does not have a limit" do
@@ -812,13 +634,7 @@ describe Mongoid::QueryCache do
812
634
  end
813
635
 
814
636
  context "when query caching is enabled and the batch_size is set" do
815
-
816
- around(:each) do |example|
817
- query_cache_enabled = Mongoid::QueryCache.enabled?
818
- Mongoid::QueryCache.enabled = true
819
- example.run
820
- Mongoid::QueryCache.enabled = query_cache_enabled
821
- end
637
+ override_query_cache true
822
638
 
823
639
  it "does not raise an error when requesting the second batch" do
824
640
  expect {
@@ -827,7 +643,6 @@ describe Mongoid::QueryCache do
827
643
  end
828
644
  }.not_to raise_error
829
645
  end
830
-
831
646
  end
832
647
  end
833
648
 
@@ -895,10 +710,7 @@ describe Mongoid::QueryCache do
895
710
  end
896
711
 
897
712
  context 'when query cache is disabled' do
898
-
899
- before do
900
- Mongoid::QueryCache.enabled = false
901
- end
713
+ override_query_cache false
902
714
 
903
715
  it "queries again" do
904
716
  band = Band.find(band_id)
@@ -962,15 +774,15 @@ describe Mongoid::QueryCache do
962
774
  end
963
775
 
964
776
  context 'when the initial query does not exhaust the results' do
777
+ override_query_cache true
778
+
965
779
  before do
966
- Mongoid::QueryCache.enabled = true
967
780
  10.times { Band.create! }
968
781
 
969
782
  Band.batch_size(4).to_a
970
783
  end
971
784
 
972
785
  context 'with driver query cache' do
973
- min_driver_version '2.14'
974
786
 
975
787
  # The driver query cache caches multi-batch cursors
976
788
  it 'does cache the result' do
@@ -979,16 +791,6 @@ describe Mongoid::QueryCache do
979
791
  end
980
792
  end
981
793
  end
982
-
983
- context 'with mongoid query cache' do
984
- max_driver_version '2.13'
985
-
986
- it 'does not cache the result' do
987
- expect_query(1) do
988
- expect(Band.all.map(&:id).size).to eq(10)
989
- end
990
- end
991
- end
992
794
  end
993
795
 
994
796
  context 'when storing in system collection' do
@@ -1021,4 +823,43 @@ describe Mongoid::QueryCache do
1021
823
  school.students.to_a.length.should == 5
1022
824
  end
1023
825
  end
826
+
827
+ describe 'deprecation warnings' do
828
+
829
+ context '#cache' do
830
+ it 'should raise a warning' do
831
+ expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
832
+ Mongoid::QueryCache.cache {}
833
+ end
834
+ end
835
+
836
+ context '#uncached' do
837
+ it 'should raise a warning' do
838
+ expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
839
+ Mongoid::QueryCache.uncached {}
840
+ end
841
+ end
842
+
843
+ context '#clear_cache' do
844
+ it 'should raise a warning' do
845
+ expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache_clear)
846
+ Mongoid::QueryCache.clear_cache
847
+ end
848
+ end
849
+
850
+ context '#enabled?' do
851
+ it 'should raise a warning' do
852
+ expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
853
+ Mongoid::QueryCache.enabled?
854
+ end
855
+ end
856
+
857
+ context '#enabled=' do
858
+ it 'should raise a warning' do
859
+ old_enabled = Mongoid::QueryCache.enabled?
860
+ expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
861
+ Mongoid::QueryCache.enabled = old_enabled
862
+ end
863
+ end
864
+ end
1024
865
  end