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
@@ -56,7 +56,7 @@ module Mongoid
56
56
  # @example Check if frozen
57
57
  # document.frozen?
58
58
  #
59
- # @return [ true, false ] True if frozen, else false.
59
+ # @return [ true | false ] True if frozen, else false.
60
60
  def frozen?
61
61
  attributes.frozen?
62
62
  end
@@ -100,21 +100,8 @@ module Mongoid
100
100
  # @param [ Hash ] attrs The attributes to set up the document with.
101
101
  #
102
102
  # @return [ Document ] A new document.
103
- def initialize(attrs = nil)
104
- @__parent = nil
105
- _building do
106
- @new_record = true
107
- @attributes ||= {}
108
- apply_pre_processed_defaults
109
- apply_default_scoping
110
- process_attributes(attrs) do
111
- yield(self) if block_given?
112
- end
113
- apply_post_processed_defaults
114
- # @todo: #2586: Need to have access to parent document in these
115
- # callbacks.
116
- run_callbacks(:initialize) unless _initialize_callbacks.empty?
117
- end
103
+ def initialize(attrs = nil, &block)
104
+ construct_document(attrs, &block)
118
105
  end
119
106
 
120
107
  # Return the model name of the document.
@@ -137,18 +124,6 @@ module Mongoid
137
124
  (persisted? || destroyed?) ? [ _id.to_s ] : nil
138
125
  end
139
126
 
140
- # Return an array with this +Document+ only in it.
141
- #
142
- # @example Return the document in an array.
143
- # document.to_a
144
- #
145
- # @return [ Array<Document> ] An array with the document as its only item.
146
- #
147
- # @deprecated
148
- def to_a
149
- [ self ]
150
- end
151
-
152
127
  # Return a hash of the entire document hierarchy from this document and
153
128
  # below. Used when the attributes are needed for everything and not just
154
129
  # the current document.
@@ -158,7 +133,14 @@ module Mongoid
158
133
  #
159
134
  # @return [ Hash ] A hash of all attributes in the hierarchy.
160
135
  def as_document
161
- BSON::Document.new(as_attributes)
136
+ attrs = as_attributes
137
+
138
+ # legacy attributes have a tendency to leak internal state via
139
+ # `as_document`; we have to deep_dup the attributes here to prevent
140
+ # that.
141
+ attrs = attrs.deep_dup if Mongoid.legacy_attributes
142
+
143
+ BSON::Document.new(attrs)
162
144
  end
163
145
 
164
146
  # Calls #as_json on the document with additional, Mongoid-specific options.
@@ -175,14 +157,14 @@ module Mongoid
175
157
  #
176
158
  # @param [ Hash ] options The options.
177
159
  #
178
- # @option options [ true, false ] :compact (Deprecated) Whether to include fields
160
+ # @option options [ true | false ] :compact (Deprecated) Whether to include fields
179
161
  # with nil values in the json document.
180
162
  #
181
163
  # @return [ Hash ] The document as json.
182
164
  def as_json(options = nil)
183
165
  rv = super
184
166
  if options && options[:compact]
185
- Mongoid.logger.warn('#as_json :compact option is deprecated. Please call #compact on the returned Hash object instead.')
167
+ Mongoid::Warnings.warn_as_json_compact_deprecated
186
168
  rv = rv.compact
187
169
  end
188
170
  rv
@@ -230,6 +212,47 @@ module Mongoid
230
212
 
231
213
  private
232
214
 
215
+ # Does the construction of a document.
216
+ #
217
+ # @param [ Hash ] attrs The attributes to set up the document with.
218
+ # @param [ Hash ] options The options to use.
219
+ #
220
+ # @option options [ true | false ] :execute_callbacks Flag specifies
221
+ # whether callbacks should be run.
222
+ #
223
+ # @return [ Document ] A new document.
224
+ #
225
+ # @note A Ruby 2.x bug prevents the options hash from being keyword
226
+ # arguments. Once we drop support for Ruby 2.x, we can reimplement
227
+ # the options hash as keyword arguments.
228
+ # See https://bugs.ruby-lang.org/issues/15753
229
+ #
230
+ # @api private
231
+ def construct_document(attrs = nil, options = {})
232
+ execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
233
+
234
+ @__parent = nil
235
+ _building do
236
+ @new_record = true
237
+ @attributes ||= {}
238
+ apply_pre_processed_defaults
239
+ apply_default_scoping
240
+ process_attributes(attrs) do
241
+ yield(self) if block_given?
242
+ end
243
+ @attributes_before_type_cast = @attributes.merge(attributes_before_type_cast)
244
+
245
+ if execute_callbacks
246
+ apply_post_processed_defaults
247
+ run_callbacks(:initialize) unless _initialize_callbacks.empty?
248
+ else
249
+ pending_callbacks << :apply_post_processed_defaults
250
+ pending_callbacks << :initialize
251
+ end
252
+ end
253
+ self
254
+ end
255
+
233
256
  # Returns the logger
234
257
  #
235
258
  # @return [ Logger ] The configured logger or a default Logger instance.
@@ -247,6 +270,14 @@ module Mongoid
247
270
  @model_cache_key ||= self.class.model_name.cache_key
248
271
  end
249
272
 
273
+ # Returns a hash of the attributes.
274
+ #
275
+ # Note this method modifies the attributes hash that already exists on the
276
+ # class and returns it. This means that the hash returned by this method
277
+ # refers to the same hash as calling #attributes on the instance. See
278
+ # MONGOID-4476 for an explanation on how this is used.
279
+ #
280
+ # @return [ Hash ] The attributes hash.
250
281
  def as_attributes
251
282
  return attributes if frozen?
252
283
  embedded_relations.each_pair do |name, meta|
@@ -266,6 +297,20 @@ module Mongoid
266
297
 
267
298
  module ClassMethods
268
299
 
300
+ # Indicate whether callbacks should be invoked by default or not,
301
+ # within the block. Callbacks may always be explicitly invoked by passing
302
+ # `execute_callbacks: true` where available.
303
+ #
304
+ # @params execute_callbacks [ true | false ] Whether callbacks should be
305
+ # suppressed or not.
306
+ def with_callbacks(execute_callbacks)
307
+ saved, Threaded.execute_callbacks =
308
+ Threaded.execute_callbacks?, execute_callbacks
309
+ yield
310
+ ensure
311
+ Threaded.execute_callbacks = saved
312
+ end
313
+
269
314
  # Instantiate a new object, only when loaded from the database or when
270
315
  # the attributes have already been typecast.
271
316
  #
@@ -275,11 +320,33 @@ module Mongoid
275
320
  # @param [ Hash ] attrs The hash of attributes to instantiate with.
276
321
  # @param [ Integer ] selected_fields The selected fields from the
277
322
  # criteria.
323
+ # @param [ true | false ] execute_callbacks Flag specifies whether callbacks
324
+ # should be run.
278
325
  #
279
326
  # @return [ Document ] A new document.
327
+ def instantiate(attrs = nil, selected_fields = nil, &block)
328
+ instantiate_document(attrs, selected_fields, &block)
329
+ end
330
+
331
+ # Instantiate the document.
332
+ #
333
+ # @param [ Hash ] attrs The hash of attributes to instantiate with.
334
+ # @param [ Integer ] selected_fields The selected fields from the
335
+ # criteria.
336
+ # @param [ Hash ] options The options to use.
337
+ #
338
+ # @option options [ true | false ] :execute_callbacks Flag specifies
339
+ # whether callbacks should be run.
340
+ #
341
+ # @return [ Document ] A new document.
342
+ #
343
+ # @note A Ruby 2.x bug prevents the options hash from being keyword
344
+ # arguments. Once we drop support for Ruby 2.x, we can reimplement
345
+ # the options hash as keyword arguments.
280
346
  #
281
347
  # @api private
282
- def instantiate(attrs = nil, selected_fields = nil)
348
+ def instantiate_document(attrs = nil, selected_fields = nil, options = {})
349
+ execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
283
350
  attributes = if Mongoid.legacy_attributes
284
351
  attrs
285
352
  else
@@ -289,13 +356,45 @@ module Mongoid
289
356
  doc = allocate
290
357
  doc.__selected_fields = selected_fields
291
358
  doc.instance_variable_set(:@attributes, attributes)
292
- doc.apply_defaults
293
- yield(doc) if block_given?
294
- doc.run_callbacks(:find) unless doc._find_callbacks.empty?
295
- doc.run_callbacks(:initialize) unless doc._initialize_callbacks.empty?
359
+ # TODO: remove the to_h when the legacy_attributes flag is removed.
360
+ # The to_h ensures that we don't accidentally make attributes_before_type_cast
361
+ # a BSON::Document.
362
+ doc.instance_variable_set(:@attributes_before_type_cast, attributes&.to_h.dup)
363
+
364
+ if execute_callbacks
365
+ doc.apply_defaults
366
+ yield(doc) if block_given?
367
+ doc.run_callbacks(:find) unless doc._find_callbacks.empty?
368
+ doc.run_callbacks(:initialize) unless doc._initialize_callbacks.empty?
369
+ else
370
+ yield(doc) if block_given?
371
+ doc.pending_callbacks += [:apply_defaults, :find, :initialize]
372
+ end
373
+
296
374
  doc
297
375
  end
298
376
 
377
+ # Allocates and constructs a document.
378
+ #
379
+ # @param [ Hash ] attrs The attributes to set up the document with.
380
+ # @param [ Hash ] options The options to use.
381
+ #
382
+ # @option options [ true | false ] :execute_callbacks Flag specifies
383
+ # whether callbacks should be run.
384
+ #
385
+ # @note A Ruby 2.x bug prevents the options hash from being keyword
386
+ # arguments. Once we drop support for Ruby 2.x, we can reimplement
387
+ # the options hash as keyword arguments.
388
+ # See https://bugs.ruby-lang.org/issues/15753
389
+ #
390
+ # @return [ Document ] A new document.
391
+ #
392
+ # @api private
393
+ def construct_document(attrs = nil, options = {})
394
+ execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
395
+ with_callbacks(execute_callbacks) { new(attrs) }
396
+ end
397
+
299
398
  # Returns all types to query for when using this class as the base.
300
399
  #
301
400
  # @example Get the types.
@@ -17,6 +17,7 @@ module Mongoid
17
17
  #
18
18
  # @return [ Integer ] -1, 0, 1.
19
19
  def <=>(other)
20
+ return super unless other.is_a?(Mongoid::Equality)
20
21
  attributes["_id"].to_s <=> other.attributes["_id"].to_s
21
22
  end
22
23
 
@@ -26,9 +27,9 @@ module Mongoid
26
27
  # @example Compare for equality.
27
28
  # document == other
28
29
  #
29
- # @param [ Document, Object ] other The other object to compare with.
30
+ # @param [ Document | Object ] other The other object to compare with.
30
31
  #
31
- # @return [ true, false ] True if the ids are equal, false if not.
32
+ # @return [ true | false ] True if the ids are equal, false if not.
32
33
  def ==(other)
33
34
  self.class == other.class &&
34
35
  attributes["_id"] == other.attributes["_id"]
@@ -39,9 +40,9 @@ module Mongoid
39
40
  # @example Compare the classes.
40
41
  # document === other
41
42
  #
42
- # @param [ Document, Object ] other The other object to compare with.
43
+ # @param [ Document | Object ] other The other object to compare with.
43
44
  #
44
- # @return [ true, false ] True if the classes are equal, false if not.
45
+ # @return [ true | false ] True if the classes are equal, false if not.
45
46
  def ===(other)
46
47
  if Mongoid.legacy_triple_equals
47
48
  other.class == Class ? self.class === other : self == other
@@ -55,9 +56,9 @@ module Mongoid
55
56
  # @example Perform equality checking.
56
57
  # document.eql?(other)
57
58
  #
58
- # @param [ Document, Object ] other The object to check against.
59
+ # @param [ Document | Object ] other The object to check against.
59
60
  #
60
- # @return [ true, false ] True if equal, false if not.
61
+ # @return [ true | false ] True if equal, false if not.
61
62
  def eql?(other)
62
63
  self == (other)
63
64
  end
@@ -68,9 +69,9 @@ module Mongoid
68
69
  # @example Compare the classes.
69
70
  # document === other
70
71
  #
71
- # @param [ Document, Object ] other The other object to compare with.
72
+ # @param [ Document | Object ] other The other object to compare with.
72
73
  #
73
- # @return [ true, false ] True if the classes are equal, false if not.
74
+ # @return [ true | false ] True if the classes are equal, false if not.
74
75
  def ===(other)
75
76
  if Mongoid.legacy_triple_equals
76
77
  other.class == Class ? self <= other : other.is_a?(self)
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Errors
5
+
6
+ # Raised when an attempt to create a collection failed.
7
+ class CreateCollectionFailure < MongoidError
8
+
9
+ # Instantiate the create collection error.
10
+ #
11
+ # @param [ String ] collection_name The name of the collection that
12
+ # Mongoid failed to create.
13
+ # @param [ Hash ] collection_options The options that were used when
14
+ # tried to create the collection.
15
+ # @param [ Mongo::Error::OperationFailure ] error The error raised when
16
+ # tried to create the collection.
17
+ #
18
+ # @api private
19
+ def initialize(collection_name, collection_options, error)
20
+ super(
21
+ compose_message(
22
+ "create_collection_failure",
23
+ {
24
+ collection_name: collection_name,
25
+ collection_options: collection_options,
26
+ error: "#{error.class}: #{error.message}"
27
+ }
28
+ )
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
@@ -19,8 +19,9 @@ module Mongoid
19
19
  # DocumentNotFound.new(Person, :ssn => "1234", :name => "Helen")
20
20
  #
21
21
  # @param [ Class ] klass The model class.
22
- # @param [ Hash, Array, Object ] params The attributes or ids.
23
- # @param [ Array ] unmatched The unmatched ids, if appropriate
22
+ # @param [ Hash | Array | Object ] params The attributes or ids.
23
+ # @param [ Array | Hash ] unmatched The unmatched ids, if appropriate. If
24
+ # there is a shard key this will be a hash.
24
25
  def initialize(klass, params, unmatched = nil)
25
26
  if !unmatched && !params.is_a?(Hash)
26
27
  unmatched = Array(params) if params
@@ -35,7 +36,8 @@ module Mongoid
35
36
  searched: searched(params),
36
37
  attributes: params,
37
38
  total: total(params),
38
- missing: missing(unmatched)
39
+ missing: missing(unmatched),
40
+ shard_key: shard_key(unmatched)
39
41
  }
40
42
  )
41
43
  )
@@ -48,12 +50,14 @@ module Mongoid
48
50
  # @example Get the missing string.
49
51
  # error.missing(1)
50
52
  #
51
- # @param [ Object, Array ] unmatched The ids that did not match.
53
+ # @param [ Object | Array ] unmatched The ids that did not match.
52
54
  #
53
55
  # @return [ String ] The missing string.
54
56
  def missing(unmatched)
55
57
  if unmatched.is_a?(::Array)
56
58
  unmatched.join(", ")
59
+ elsif unmatched.is_a?(::Hash)
60
+ unmatched[:_id] || unmatched["_id"]
57
61
  else
58
62
  unmatched
59
63
  end
@@ -64,7 +68,7 @@ module Mongoid
64
68
  # @example Get the searched string.
65
69
  # error.searched(1)
66
70
  #
67
- # @param [ Object, Array ] params The ids that were searched for.
71
+ # @param [ Object | Array ] params The ids that were searched for.
68
72
  #
69
73
  # @return [ String ] The searched string.
70
74
  def searched(params)
@@ -80,7 +84,7 @@ module Mongoid
80
84
  # @example Get the total.
81
85
  # error.total([ 1, 2, 3 ])
82
86
  #
83
- # @param [ Object, Array ] params What was searched for.
87
+ # @param [ Object | Array ] params What was searched for.
84
88
  #
85
89
  # @return [ Integer ] The total number.
86
90
  def total(params)
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Errors
5
+
6
+ # Raised when an attempt to drop a collection failed.
7
+ class DropCollectionFailure < MongoidError
8
+
9
+ # Instantiate the drop collection error.
10
+ #
11
+ # @param [ String ] collection_name The name of the collection that
12
+ # Mongoid failed to drop.
13
+ #
14
+ # @api private
15
+ def initialize(collection_name, collection_options, error)
16
+ super(
17
+ compose_message(
18
+ "drop_collection_failure",
19
+ {
20
+ collection_name: collection_name
21
+ }
22
+ )
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Errors
5
+
6
+ # This error is raised when attempting the change the value of an
7
+ # immutable attribute. For example, the _id attribute is immutable,
8
+ # and attempting to change it on a document that has already been
9
+ # persisted will result in this error.
10
+ class ImmutableAttribute < MongoidError
11
+
12
+ # Create the new error.
13
+ #
14
+ # @example Create the new error.
15
+ # ImmutableAttribute.new(:_id, "1234")
16
+ #
17
+ # @param [ Symbol | String ] name The name of the attribute.
18
+ # @param [ Object ] value The attempted set value.
19
+ def initialize(name, value)
20
+ super(
21
+ compose_message("immutable_attribute", { name: name, value: value })
22
+ )
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Errors
5
+
6
+ # This error is raised when a bad async query executor option is attempted
7
+ # to be set.
8
+ class InvalidQueryExecutor < MongoidError
9
+
10
+ # Create the new error.
11
+ #
12
+ # @param [ Symbol | String ] executor The attempted async query executor.
13
+ #
14
+ # @api private
15
+ def initialize(executor)
16
+ super(
17
+ compose_message(
18
+ "invalid_async_query_executor",
19
+ { executor: executor, options: [:immediate, :global_thread_pool] }
20
+ )
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
@@ -12,7 +12,7 @@ module Mongoid
12
12
  # @example Create the new error.
13
13
  # InvalidConfigOption.new(:name, [ :option ])
14
14
  #
15
- # @param [ Symbol, String ] name The attempted config option name.
15
+ # @param [ Symbol | String ] name The attempted config option name.
16
16
  def initialize(name)
17
17
  super(
18
18
  compose_message(
@@ -13,7 +13,7 @@ module Mongoid
13
13
  #
14
14
  # @param [ Mongoid::Association ] association The association for which this
15
15
  # dependency is defined.
16
- # @param [ Symbol, String ] invalid_strategy The attempted invalid strategy.
16
+ # @param [ Symbol | String ] invalid_strategy The attempted invalid strategy.
17
17
  # @param [ Array<Symbol> ] valid_strategies The valid strategies.
18
18
  def initialize(association, invalid_strategy, valid_strategies)
19
19
  super(
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Errors
5
+
6
+ # This error is raised when trying to use the setter for a field that starts
7
+ # with a dollar sign ($) or contains a dot/period (.).
8
+ class InvalidDotDollarAssignment < MongoidError
9
+
10
+ # Create the new error.
11
+ #
12
+ # @param [ Class ] klass The class of the document.
13
+ # @param [ Class ] attr The attribute attempted to be written.
14
+ #
15
+ # @api private
16
+ def initialize(klass, attr)
17
+ super(
18
+ compose_message("invalid_dot_dollar_assignment", { klass: klass, attr: attr })
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
@@ -12,14 +12,18 @@ module Mongoid
12
12
  # @example Create the error.
13
13
  # InvalidField.new(person, :crazy_method_name)
14
14
  #
15
+ # @api private
16
+ #
15
17
  # @param [ Class ] klass The document class.
18
+ # @param [ Symbol ] field The field name.
16
19
  # @param [ Symbol ] name The method name.
17
- def initialize(klass, name)
20
+ def initialize(klass, field, name)
18
21
  super(
19
22
  compose_message(
20
23
  "invalid_field",
21
24
  {
22
25
  name: name,
26
+ field: field,
23
27
  origin: origin(klass, name),
24
28
  file: location(klass, name)[0],
25
29
  line: location(klass, name)[1]
@@ -38,7 +42,7 @@ module Mongoid
38
42
  # @param [ Class ] klass The document class.
39
43
  # @param [ Symbol ] name The method name.
40
44
  #
41
- # @return [ Class, Module ] The originating class or module.
45
+ # @return [ Class | Module ] The originating class or module.
42
46
  def origin(klass, name)
43
47
  klass.instance_method(name).owner
44
48
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Errors
5
+
6
+ # This error is raised when trying to define a field using a :type option value
7
+ # that is not present in the field type mapping.
8
+ class InvalidFieldType < MongoidError
9
+
10
+ # Create the new error.
11
+ #
12
+ # @example Instantiate the error.
13
+ # InvalidFieldType.new('Person', 'first_name', 'stringgy')
14
+ #
15
+ # @param [ String ] klass The model class.
16
+ # @param [ String ] field The field on which the invalid type is used.
17
+ # @param [ Symbol | String ] type The value of the field :type option.
18
+ def initialize(klass, field, type)
19
+ super(
20
+ compose_message('invalid_field_type',
21
+ klass: klass, field: field, type_inspection: type.inspect)
22
+ )
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Errors
5
+
6
+ # This error is raised when a bad global executor concurrency option is attempted
7
+ # to be set.
8
+ class InvalidGlobalExecutorConcurrency < MongoidError
9
+
10
+ # Create the new error.
11
+ #
12
+ # @api private
13
+ def initialize
14
+ super(
15
+ compose_message(
16
+ "invalid_global_executor_concurrency"
17
+ )
18
+ )
19
+ end
20
+ end
21
+ end
22
+ end
@@ -38,7 +38,7 @@ module Mongoid
38
38
  # @param [ Class ] klass The document class.
39
39
  # @param [ Symbol ] name The method name.
40
40
  #
41
- # @return [ Class, Module ] The originating class or module.
41
+ # @return [ Class | Module ] The originating class or module.
42
42
  def origin(klass, name)
43
43
  klass.instance_method(name).owner
44
44
  end
@@ -12,7 +12,7 @@ module Mongoid
12
12
  # InvalidRelationOption.new(Person, invalid_option: 'make_me_a_sandwich')
13
13
  #
14
14
  # @param [ Class ] klass The model class.
15
- # @param [ String, Symbol ] name The association name.
15
+ # @param [ String | Symbol ] name The association name.
16
16
  # @param [ Symbol ] option The invalid option.
17
17
  # @param [ Array<Symbol> ] valid_options The valid option.
18
18
  def initialize(klass, name, option, valid_options)
@@ -12,7 +12,7 @@ module Mongoid
12
12
  # @example Create the error.
13
13
  # InvalidSessionUse.new(:invalid_session_use)
14
14
  #
15
- # @param [ :invalid_session_use, :invalid_session_nesting ] error_type The type of session misuse.
15
+ # @param [ :invalid_session_use | :invalid_session_nesting ] error_type The type of session misuse.
16
16
  def initialize(error_type)
17
17
  super(compose_message(error_type.to_s))
18
18
  end
@@ -12,7 +12,7 @@ module Mongoid
12
12
  # InvalidStorageOptions.new(Person, invalid_option: 'name')
13
13
  #
14
14
  # @param [ Class ] klass The model class.
15
- # @param [ Hash, String, Symbol ] options The provided options.
15
+ # @param [ Hash | String | Symbol ] options The provided options.
16
16
  def initialize(klass, options)
17
17
  super(
18
18
  compose_message(
@@ -4,6 +4,8 @@ module Mongoid
4
4
  module Errors
5
5
 
6
6
  # Raised when calling store_in in a sub-class of Mongoid::Document
7
+ #
8
+ # @deprecated
7
9
  class InvalidStorageParent < MongoidError
8
10
 
9
11
  # Create the new error.
@@ -53,7 +53,7 @@ module Mongoid
53
53
  # @example Create the problem.
54
54
  # error.problem("error", {})
55
55
  #
56
- # @param [ String, Symbol ] key The error key.
56
+ # @param [ String | Symbol ] key The error key.
57
57
  # @param [ Hash ] attributes The attributes to interpolate.
58
58
  #
59
59
  # @return [ String ] The problem.
@@ -66,7 +66,7 @@ module Mongoid
66
66
  # @example Create the summary.
67
67
  # error.summary("error", {})
68
68
  #
69
- # @param [ String, Symbol ] key The error key.
69
+ # @param [ String | Symbol ] key The error key.
70
70
  # @param [ Hash ] attributes The attributes to interpolate.
71
71
  #
72
72
  # @return [ String ] The summary.
@@ -79,7 +79,7 @@ module Mongoid
79
79
  # @example Create the resolution.
80
80
  # error.resolution("error", {})
81
81
  #
82
- # @param [ String, Symbol ] key The error key.
82
+ # @param [ String | Symbol ] key The error key.
83
83
  # @param [ Hash ] attributes The attributes to interpolate.
84
84
  #
85
85
  # @return [ String ] The resolution.