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
@@ -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.
@@ -175,14 +150,14 @@ module Mongoid
175
150
  #
176
151
  # @param [ Hash ] options The options.
177
152
  #
178
- # @option options [ true, false ] :compact (Deprecated) Whether to include fields
153
+ # @option options [ true | false ] :compact (Deprecated) Whether to include fields
179
154
  # with nil values in the json document.
180
155
  #
181
156
  # @return [ Hash ] The document as json.
182
157
  def as_json(options = nil)
183
158
  rv = super
184
159
  if options && options[:compact]
185
- Mongoid.logger.warn('#as_json :compact option is deprecated. Please call #compact on the returned Hash object instead.')
160
+ Mongoid::Warnings.warn_as_json_compact_deprecated
186
161
  rv = rv.compact
187
162
  end
188
163
  rv
@@ -230,6 +205,47 @@ module Mongoid
230
205
 
231
206
  private
232
207
 
208
+ # Does the construction of a document.
209
+ #
210
+ # @param [ Hash ] attrs The attributes to set up the document with.
211
+ # @param [ Hash ] options The options to use.
212
+ #
213
+ # @option options [ true | false ] :execute_callbacks Flag specifies
214
+ # whether callbacks should be run.
215
+ #
216
+ # @return [ Document ] A new document.
217
+ #
218
+ # @note A Ruby 2.x bug prevents the options hash from being keyword
219
+ # arguments. Once we drop support for Ruby 2.x, we can reimplement
220
+ # the options hash as keyword arguments.
221
+ # See https://bugs.ruby-lang.org/issues/15753
222
+ #
223
+ # @api private
224
+ def construct_document(attrs = nil, options = {})
225
+ execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
226
+
227
+ @__parent = nil
228
+ _building do
229
+ @new_record = true
230
+ @attributes ||= {}
231
+ apply_pre_processed_defaults
232
+ apply_default_scoping
233
+ process_attributes(attrs) do
234
+ yield(self) if block_given?
235
+ end
236
+ @attributes_before_type_cast = @attributes.merge(attributes_before_type_cast)
237
+
238
+ if execute_callbacks
239
+ apply_post_processed_defaults
240
+ run_callbacks(:initialize) unless _initialize_callbacks.empty?
241
+ else
242
+ pending_callbacks << :apply_post_processed_defaults
243
+ pending_callbacks << :initialize
244
+ end
245
+ end
246
+ self
247
+ end
248
+
233
249
  # Returns the logger
234
250
  #
235
251
  # @return [ Logger ] The configured logger or a default Logger instance.
@@ -247,6 +263,14 @@ module Mongoid
247
263
  @model_cache_key ||= self.class.model_name.cache_key
248
264
  end
249
265
 
266
+ # Returns a hash of the attributes.
267
+ #
268
+ # Note this method modifies the attributes hash that already exists on the
269
+ # class and returns it. This means that the hash returned by this method
270
+ # refers to the same hash as calling #attributes on the instance. See
271
+ # MONGOID-4476 for an explanation on how this is used.
272
+ #
273
+ # @return [ Hash ] The attributes hash.
250
274
  def as_attributes
251
275
  return attributes if frozen?
252
276
  embedded_relations.each_pair do |name, meta|
@@ -266,6 +290,20 @@ module Mongoid
266
290
 
267
291
  module ClassMethods
268
292
 
293
+ # Indicate whether callbacks should be invoked by default or not,
294
+ # within the block. Callbacks may always be explicitly invoked by passing
295
+ # `execute_callbacks: true` where available.
296
+ #
297
+ # @params execute_callbacks [ true | false ] Whether callbacks should be
298
+ # suppressed or not.
299
+ def with_callbacks(execute_callbacks)
300
+ saved, Threaded.execute_callbacks =
301
+ Threaded.execute_callbacks?, execute_callbacks
302
+ yield
303
+ ensure
304
+ Threaded.execute_callbacks = saved
305
+ end
306
+
269
307
  # Instantiate a new object, only when loaded from the database or when
270
308
  # the attributes have already been typecast.
271
309
  #
@@ -275,11 +313,33 @@ module Mongoid
275
313
  # @param [ Hash ] attrs The hash of attributes to instantiate with.
276
314
  # @param [ Integer ] selected_fields The selected fields from the
277
315
  # criteria.
316
+ # @param [ true | false ] execute_callbacks Flag specifies whether callbacks
317
+ # should be run.
318
+ #
319
+ # @return [ Document ] A new document.
320
+ def instantiate(attrs = nil, selected_fields = nil, &block)
321
+ instantiate_document(attrs, selected_fields, &block)
322
+ end
323
+
324
+ # Instantiate the document.
325
+ #
326
+ # @param [ Hash ] attrs The hash of attributes to instantiate with.
327
+ # @param [ Integer ] selected_fields The selected fields from the
328
+ # criteria.
329
+ # @param [ Hash ] options The options to use.
330
+ #
331
+ # @option options [ true | false ] :execute_callbacks Flag specifies
332
+ # whether callbacks should be run.
278
333
  #
279
334
  # @return [ Document ] A new document.
280
335
  #
336
+ # @note A Ruby 2.x bug prevents the options hash from being keyword
337
+ # arguments. Once we drop support for Ruby 2.x, we can reimplement
338
+ # the options hash as keyword arguments.
339
+ #
281
340
  # @api private
282
- def instantiate(attrs = nil, selected_fields = nil)
341
+ def instantiate_document(attrs = nil, selected_fields = nil, options = {})
342
+ execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
283
343
  attributes = if Mongoid.legacy_attributes
284
344
  attrs
285
345
  else
@@ -289,13 +349,45 @@ module Mongoid
289
349
  doc = allocate
290
350
  doc.__selected_fields = selected_fields
291
351
  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?
352
+ # TODO: remove the to_h when the legacy_attributes flag is removed.
353
+ # The to_h ensures that we don't accidentally make attributes_before_type_cast
354
+ # a BSON::Document.
355
+ doc.instance_variable_set(:@attributes_before_type_cast, attributes&.to_h.dup)
356
+
357
+ if execute_callbacks
358
+ doc.apply_defaults
359
+ yield(doc) if block_given?
360
+ doc.run_callbacks(:find) unless doc._find_callbacks.empty?
361
+ doc.run_callbacks(:initialize) unless doc._initialize_callbacks.empty?
362
+ else
363
+ yield(doc) if block_given?
364
+ doc.pending_callbacks += [:apply_defaults, :find, :initialize]
365
+ end
366
+
296
367
  doc
297
368
  end
298
369
 
370
+ # Allocates and constructs a document.
371
+ #
372
+ # @param [ Hash ] attrs The attributes to set up the document with.
373
+ # @param [ Hash ] options The options to use.
374
+ #
375
+ # @option options [ true | false ] :execute_callbacks Flag specifies
376
+ # whether callbacks should be run.
377
+ #
378
+ # @note A Ruby 2.x bug prevents the options hash from being keyword
379
+ # arguments. Once we drop support for Ruby 2.x, we can reimplement
380
+ # the options hash as keyword arguments.
381
+ # See https://bugs.ruby-lang.org/issues/15753
382
+ #
383
+ # @return [ Document ] A new document.
384
+ #
385
+ # @api private
386
+ def construct_document(attrs = nil, options = {})
387
+ execute_callbacks = options.fetch(:execute_callbacks, Threaded.execute_callbacks?)
388
+ with_callbacks(execute_callbacks) { new(attrs) }
389
+ end
390
+
299
391
  # Returns all types to query for when using this class as the base.
300
392
  #
301
393
  # @example Get the types.
@@ -26,9 +26,9 @@ module Mongoid
26
26
  # @example Compare for equality.
27
27
  # document == other
28
28
  #
29
- # @param [ Document, Object ] other The other object to compare with.
29
+ # @param [ Document | Object ] other The other object to compare with.
30
30
  #
31
- # @return [ true, false ] True if the ids are equal, false if not.
31
+ # @return [ true | false ] True if the ids are equal, false if not.
32
32
  def ==(other)
33
33
  self.class == other.class &&
34
34
  attributes["_id"] == other.attributes["_id"]
@@ -39,9 +39,9 @@ module Mongoid
39
39
  # @example Compare the classes.
40
40
  # document === other
41
41
  #
42
- # @param [ Document, Object ] other The other object to compare with.
42
+ # @param [ Document | Object ] other The other object to compare with.
43
43
  #
44
- # @return [ true, false ] True if the classes are equal, false if not.
44
+ # @return [ true | false ] True if the classes are equal, false if not.
45
45
  def ===(other)
46
46
  if Mongoid.legacy_triple_equals
47
47
  other.class == Class ? self.class === other : self == other
@@ -55,9 +55,9 @@ module Mongoid
55
55
  # @example Perform equality checking.
56
56
  # document.eql?(other)
57
57
  #
58
- # @param [ Document, Object ] other The object to check against.
58
+ # @param [ Document | Object ] other The object to check against.
59
59
  #
60
- # @return [ true, false ] True if equal, false if not.
60
+ # @return [ true | false ] True if equal, false if not.
61
61
  def eql?(other)
62
62
  self == (other)
63
63
  end
@@ -68,9 +68,9 @@ module Mongoid
68
68
  # @example Compare the classes.
69
69
  # document === other
70
70
  #
71
- # @param [ Document, Object ] other The other object to compare with.
71
+ # @param [ Document | Object ] other The other object to compare with.
72
72
  #
73
- # @return [ true, false ] True if the classes are equal, false if not.
73
+ # @return [ true | false ] True if the classes are equal, false if not.
74
74
  def ===(other)
75
75
  if Mongoid.legacy_triple_equals
76
76
  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.
@@ -13,7 +13,7 @@ module Mongoid
13
13
  # NestedAttributesMetadataNotFound.new(klass, name)
14
14
  #
15
15
  # @param [ Class ] klass The class of the document.
16
- # @param [ Symbol, String ] name The name of the association
16
+ # @param [ Symbol | String ] name The name of the association
17
17
  def initialize(klass, name)
18
18
  super(
19
19
  compose_message(
@@ -11,7 +11,7 @@ module Mongoid
11
11
  # @example Create the new error.
12
12
  # NoClientDatabase.new(:default, {}})
13
13
  #
14
- # @param [ Symbol, String ] name The db config key.
14
+ # @param [ Symbol | String ] name The db config key.
15
15
  # @param [ Hash ] config The hash configuration options.
16
16
  def initialize(name, config)
17
17
  super(