mongoid 8.1.12 → 9.0.0

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 (1024) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -0
  3. data/LICENSE +1 -1
  4. data/README.md +4 -9
  5. data/Rakefile +62 -44
  6. data/lib/config/locales/en.yml +66 -5
  7. data/lib/mongoid/association/accessors.rb +16 -20
  8. data/lib/mongoid/association/bindable.rb +27 -8
  9. data/lib/mongoid/association/builders.rb +3 -2
  10. data/lib/mongoid/association/constrainable.rb +1 -0
  11. data/lib/mongoid/association/depending.rb +16 -1
  12. data/lib/mongoid/association/eager.rb +160 -0
  13. data/lib/mongoid/association/eager_loadable.rb +15 -7
  14. data/lib/mongoid/association/embedded/batchable.rb +16 -18
  15. data/lib/mongoid/association/embedded/cyclic.rb +1 -0
  16. data/lib/mongoid/association/embedded/eager.rb +23 -0
  17. data/lib/mongoid/association/embedded/embedded_in/binding.rb +5 -4
  18. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +1 -0
  19. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +21 -7
  20. data/lib/mongoid/association/embedded/embedded_in.rb +7 -0
  21. data/lib/mongoid/association/embedded/embeds_many/binding.rb +3 -2
  22. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -0
  23. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +134 -205
  24. data/lib/mongoid/association/embedded/embeds_many.rb +1 -0
  25. data/lib/mongoid/association/embedded/embeds_one/binding.rb +3 -2
  26. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +1 -0
  27. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +113 -55
  28. data/lib/mongoid/association/embedded/embeds_one.rb +1 -0
  29. data/lib/mongoid/association/embedded.rb +2 -0
  30. data/lib/mongoid/association/macros.rb +17 -14
  31. data/lib/mongoid/association/many.rb +1 -0
  32. data/lib/mongoid/association/marshalable.rb +4 -0
  33. data/lib/mongoid/association/nested/many.rb +8 -3
  34. data/lib/mongoid/association/nested/nested_buildable.rb +32 -0
  35. data/lib/mongoid/association/nested/one.rb +6 -3
  36. data/lib/mongoid/association/nested.rb +1 -0
  37. data/lib/mongoid/association/one.rb +1 -0
  38. data/lib/mongoid/association/options.rb +9 -2
  39. data/lib/mongoid/association/proxy.rb +30 -18
  40. data/lib/mongoid/association/referenced/auto_save.rb +6 -2
  41. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  42. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -0
  43. data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -1
  44. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -14
  45. data/lib/mongoid/association/referenced/belongs_to.rb +2 -1
  46. data/lib/mongoid/association/referenced/counter_cache.rb +7 -2
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +15 -3
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +1 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +132 -94
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +8 -3
  52. data/lib/mongoid/association/referenced/has_many/binding.rb +1 -0
  53. data/lib/mongoid/association/referenced/has_many/buildable.rb +1 -0
  54. data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
  55. data/lib/mongoid/association/referenced/has_many/enumerable.rb +43 -27
  56. data/lib/mongoid/association/referenced/has_many/proxy.rb +131 -104
  57. data/lib/mongoid/association/referenced/has_many.rb +2 -1
  58. data/lib/mongoid/association/referenced/has_one/binding.rb +1 -0
  59. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -0
  60. data/lib/mongoid/association/referenced/has_one/eager.rb +3 -3
  61. data/lib/mongoid/association/referenced/has_one/proxy.rb +37 -28
  62. data/lib/mongoid/association/referenced/has_one.rb +5 -1
  63. data/lib/mongoid/association/referenced/syncable.rb +7 -6
  64. data/lib/mongoid/association/referenced.rb +1 -0
  65. data/lib/mongoid/association/reflections.rb +5 -4
  66. data/lib/mongoid/association/relatable.rb +10 -4
  67. data/lib/mongoid/association.rb +5 -0
  68. data/lib/mongoid/atomic/modifiers.rb +1 -0
  69. data/lib/mongoid/atomic/paths/embedded/many.rb +2 -1
  70. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -0
  71. data/lib/mongoid/atomic/paths/embedded.rb +1 -0
  72. data/lib/mongoid/atomic/paths/root.rb +1 -0
  73. data/lib/mongoid/atomic/paths.rb +1 -0
  74. data/lib/mongoid/atomic.rb +23 -62
  75. data/lib/mongoid/atomic_update_preparer.rb +88 -0
  76. data/lib/mongoid/attributes/dynamic.rb +1 -0
  77. data/lib/mongoid/attributes/embedded.rb +34 -0
  78. data/lib/mongoid/attributes/nested.rb +3 -2
  79. data/lib/mongoid/attributes/processing.rb +11 -10
  80. data/lib/mongoid/attributes/projector.rb +1 -0
  81. data/lib/mongoid/attributes/readonly.rb +4 -8
  82. data/lib/mongoid/attributes.rb +6 -4
  83. data/lib/mongoid/cacheable.rb +2 -1
  84. data/lib/mongoid/changeable.rb +58 -49
  85. data/lib/mongoid/clients/factory.rb +37 -5
  86. data/lib/mongoid/clients/options.rb +113 -3
  87. data/lib/mongoid/clients/sessions.rb +245 -64
  88. data/lib/mongoid/clients/storage_options.rb +37 -1
  89. data/lib/mongoid/clients/validators/storage.rb +1 -0
  90. data/lib/mongoid/clients/validators.rb +1 -0
  91. data/lib/mongoid/clients.rb +36 -4
  92. data/lib/mongoid/collection_configurable.rb +1 -0
  93. data/lib/mongoid/composable.rb +5 -0
  94. data/lib/mongoid/config/defaults.rb +16 -36
  95. data/lib/mongoid/config/encryption.rb +213 -0
  96. data/lib/mongoid/config/environment.rb +2 -5
  97. data/lib/mongoid/config/introspection.rb +152 -0
  98. data/lib/mongoid/config/options.rb +8 -3
  99. data/lib/mongoid/config/validators/async_query_executor.rb +12 -2
  100. data/lib/mongoid/config/validators/client.rb +1 -0
  101. data/lib/mongoid/config/validators/option.rb +1 -0
  102. data/lib/mongoid/config/validators.rb +1 -0
  103. data/lib/mongoid/config.rb +57 -91
  104. data/lib/mongoid/contextual/aggregable/memory.rb +1 -0
  105. data/lib/mongoid/contextual/aggregable/mongo.rb +2 -5
  106. data/lib/mongoid/contextual/aggregable/none.rb +1 -0
  107. data/lib/mongoid/contextual/aggregable.rb +1 -0
  108. data/lib/mongoid/contextual/atomic.rb +98 -11
  109. data/lib/mongoid/contextual/command.rb +3 -0
  110. data/lib/mongoid/contextual/map_reduce.rb +6 -0
  111. data/lib/mongoid/contextual/memory.rb +45 -42
  112. data/lib/mongoid/contextual/mongo/documents_loader.rb +3 -2
  113. data/lib/mongoid/contextual/mongo.rb +33 -61
  114. data/lib/mongoid/contextual/none.rb +15 -32
  115. data/lib/mongoid/contextual/queryable.rb +4 -0
  116. data/lib/mongoid/contextual.rb +4 -0
  117. data/lib/mongoid/copyable.rb +3 -2
  118. data/lib/mongoid/criteria/findable.rb +44 -4
  119. data/lib/mongoid/criteria/includable.rb +5 -4
  120. data/lib/mongoid/criteria/inspectable.rb +4 -0
  121. data/lib/mongoid/criteria/marshalable.rb +4 -0
  122. data/lib/mongoid/criteria/modifiable.rb +5 -0
  123. data/lib/mongoid/criteria/options.rb +1 -0
  124. data/lib/mongoid/criteria/permission.rb +5 -0
  125. data/lib/mongoid/criteria/queryable/aggregable.rb +1 -0
  126. data/lib/mongoid/criteria/queryable/expandable.rb +1 -0
  127. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -1
  128. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
  129. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -1
  130. data/lib/mongoid/criteria/queryable/extensions/date.rb +4 -3
  131. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +2 -1
  132. data/lib/mongoid/criteria/queryable/extensions/hash.rb +2 -1
  133. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +2 -1
  134. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -16
  135. data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -1
  136. data/lib/mongoid/criteria/queryable/extensions/range.rb +2 -1
  137. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +7 -1
  138. data/lib/mongoid/criteria/queryable/extensions/set.rb +2 -1
  139. data/lib/mongoid/criteria/queryable/extensions/string.rb +15 -3
  140. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +2 -1
  141. data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -1
  142. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -1
  143. data/lib/mongoid/criteria/queryable/extensions.rb +1 -0
  144. data/lib/mongoid/criteria/queryable/key.rb +10 -0
  145. data/lib/mongoid/criteria/queryable/macroable.rb +1 -0
  146. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -0
  147. data/lib/mongoid/criteria/queryable/optional.rb +1 -0
  148. data/lib/mongoid/criteria/queryable/options.rb +1 -0
  149. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -0
  150. data/lib/mongoid/criteria/queryable/selectable.rb +12 -27
  151. data/lib/mongoid/criteria/queryable/selector.rb +5 -2
  152. data/lib/mongoid/criteria/queryable/smash.rb +1 -0
  153. data/lib/mongoid/criteria/queryable/storable.rb +4 -3
  154. data/lib/mongoid/criteria/queryable.rb +1 -0
  155. data/lib/mongoid/criteria/scopable.rb +5 -0
  156. data/lib/mongoid/criteria/translator.rb +1 -0
  157. data/lib/mongoid/criteria.rb +37 -10
  158. data/lib/mongoid/deprecable.rb +1 -0
  159. data/lib/mongoid/deprecation.rb +8 -4
  160. data/lib/mongoid/document.rb +171 -125
  161. data/lib/mongoid/encryptable.rb +53 -0
  162. data/lib/mongoid/equality.rb +2 -22
  163. data/lib/mongoid/errors/ambiguous_relationship.rb +1 -0
  164. data/lib/mongoid/errors/attribute_not_loaded.rb +34 -0
  165. data/lib/mongoid/errors/callback.rb +1 -0
  166. data/lib/mongoid/errors/create_collection_failure.rb +1 -0
  167. data/lib/mongoid/errors/criteria_argument_required.rb +1 -0
  168. data/lib/mongoid/errors/delete_restriction.rb +1 -0
  169. data/lib/mongoid/errors/document_not_destroyed.rb +1 -0
  170. data/lib/mongoid/errors/document_not_found.rb +1 -0
  171. data/lib/mongoid/errors/drop_collection_failure.rb +1 -0
  172. data/lib/mongoid/errors/empty_config_file.rb +1 -0
  173. data/lib/mongoid/errors/immutable_attribute.rb +1 -0
  174. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -0
  175. data/lib/mongoid/errors/invalid_async_query_executor.rb +1 -0
  176. data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +33 -0
  177. data/lib/mongoid/errors/invalid_collection.rb +1 -0
  178. data/lib/mongoid/errors/invalid_config_file.rb +1 -0
  179. data/lib/mongoid/errors/invalid_config_option.rb +1 -0
  180. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -0
  181. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +1 -0
  182. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -0
  183. data/lib/mongoid/errors/invalid_elem_match_operator.rb +1 -0
  184. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +6 -4
  185. data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +27 -0
  186. data/lib/mongoid/errors/invalid_expression_operator.rb +1 -0
  187. data/lib/mongoid/errors/invalid_field.rb +1 -0
  188. data/lib/mongoid/errors/invalid_field_operator.rb +1 -0
  189. data/lib/mongoid/errors/invalid_field_option.rb +1 -0
  190. data/lib/mongoid/errors/invalid_field_type.rb +1 -0
  191. data/lib/mongoid/errors/invalid_find.rb +1 -0
  192. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -0
  193. data/lib/mongoid/errors/invalid_includes.rb +1 -0
  194. data/lib/mongoid/errors/invalid_index.rb +1 -0
  195. data/lib/mongoid/errors/invalid_options.rb +1 -0
  196. data/lib/mongoid/errors/invalid_path.rb +1 -0
  197. data/lib/mongoid/errors/invalid_persistence_option.rb +1 -0
  198. data/lib/mongoid/errors/invalid_query.rb +1 -0
  199. data/lib/mongoid/errors/invalid_relation.rb +1 -0
  200. data/lib/mongoid/errors/invalid_relation_option.rb +1 -0
  201. data/lib/mongoid/errors/invalid_scope.rb +1 -0
  202. data/lib/mongoid/errors/invalid_session_nesting.rb +17 -0
  203. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +1 -1
  204. data/lib/mongoid/errors/invalid_storage_options.rb +1 -0
  205. data/lib/mongoid/errors/invalid_time.rb +1 -0
  206. data/lib/mongoid/errors/invalid_transaction_nesting.rb +17 -0
  207. data/lib/mongoid/errors/inverse_not_found.rb +1 -0
  208. data/lib/mongoid/errors/mixed_client_configuration.rb +1 -0
  209. data/lib/mongoid/errors/mixed_relations.rb +1 -0
  210. data/lib/mongoid/errors/mongoid_error.rb +4 -3
  211. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -0
  212. data/lib/mongoid/errors/no_client_config.rb +1 -0
  213. data/lib/mongoid/errors/no_client_database.rb +1 -0
  214. data/lib/mongoid/errors/no_client_hosts.rb +1 -0
  215. data/lib/mongoid/errors/no_clients_config.rb +1 -0
  216. data/lib/mongoid/errors/no_default_client.rb +1 -0
  217. data/lib/mongoid/errors/no_environment.rb +1 -0
  218. data/lib/mongoid/errors/no_map_reduce_output.rb +1 -0
  219. data/lib/mongoid/errors/no_metadata.rb +1 -0
  220. data/lib/mongoid/errors/no_parent.rb +1 -0
  221. data/lib/mongoid/errors/readonly_attribute.rb +1 -0
  222. data/lib/mongoid/errors/readonly_document.rb +1 -0
  223. data/lib/mongoid/errors/rollback.rb +15 -0
  224. data/lib/mongoid/errors/scope_overwrite.rb +1 -0
  225. data/lib/mongoid/errors/sessions_not_supported.rb +17 -0
  226. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -0
  227. data/lib/mongoid/errors/transaction_error.rb +25 -0
  228. data/lib/mongoid/errors/transactions_not_supported.rb +17 -0
  229. data/lib/mongoid/errors/unknown_attribute.rb +1 -0
  230. data/lib/mongoid/errors/unknown_model.rb +1 -0
  231. data/lib/mongoid/errors/unsaved_document.rb +1 -0
  232. data/lib/mongoid/errors/unsupported_javascript.rb +1 -0
  233. data/lib/mongoid/errors/validations.rb +1 -0
  234. data/lib/mongoid/errors.rb +10 -1
  235. data/lib/mongoid/evolvable.rb +1 -0
  236. data/lib/mongoid/extensions/array.rb +10 -24
  237. data/lib/mongoid/extensions/big_decimal.rb +14 -6
  238. data/lib/mongoid/extensions/binary.rb +3 -0
  239. data/lib/mongoid/extensions/boolean.rb +3 -0
  240. data/lib/mongoid/extensions/date.rb +7 -2
  241. data/lib/mongoid/extensions/date_time.rb +4 -6
  242. data/lib/mongoid/extensions/decimal128.rb +3 -0
  243. data/lib/mongoid/extensions/false_class.rb +5 -2
  244. data/lib/mongoid/extensions/float.rb +4 -1
  245. data/lib/mongoid/extensions/hash.rb +21 -169
  246. data/lib/mongoid/extensions/integer.rb +6 -1
  247. data/lib/mongoid/extensions/module.rb +4 -1
  248. data/lib/mongoid/extensions/nil_class.rb +5 -2
  249. data/lib/mongoid/extensions/object.rb +23 -35
  250. data/lib/mongoid/extensions/object_id.rb +3 -0
  251. data/lib/mongoid/extensions/range.rb +9 -6
  252. data/lib/mongoid/extensions/raw_value.rb +34 -0
  253. data/lib/mongoid/extensions/regexp.rb +3 -0
  254. data/lib/mongoid/extensions/set.rb +13 -2
  255. data/lib/mongoid/extensions/string.rb +18 -10
  256. data/lib/mongoid/extensions/symbol.rb +5 -0
  257. data/lib/mongoid/extensions/time.rb +7 -19
  258. data/lib/mongoid/extensions/time_with_zone.rb +6 -2
  259. data/lib/mongoid/extensions/true_class.rb +5 -2
  260. data/lib/mongoid/extensions.rb +2 -32
  261. data/lib/mongoid/factory.rb +134 -40
  262. data/lib/mongoid/fields/encrypted.rb +48 -0
  263. data/lib/mongoid/fields/foreign_key.rb +29 -3
  264. data/lib/mongoid/fields/localized.rb +6 -0
  265. data/lib/mongoid/fields/standard.rb +5 -0
  266. data/lib/mongoid/fields/validators/macro.rb +3 -1
  267. data/lib/mongoid/fields/validators.rb +1 -0
  268. data/lib/mongoid/fields.rb +41 -46
  269. data/lib/mongoid/findable.rb +2 -2
  270. data/lib/mongoid/indexable/specification.rb +55 -19
  271. data/lib/mongoid/indexable/validators/options.rb +1 -0
  272. data/lib/mongoid/indexable.rb +1 -0
  273. data/lib/mongoid/inspectable.rb +32 -0
  274. data/lib/mongoid/interceptable.rb +18 -8
  275. data/lib/mongoid/loadable.rb +83 -0
  276. data/lib/mongoid/loggable.rb +1 -0
  277. data/lib/mongoid/matchable.rb +1 -0
  278. data/lib/mongoid/matcher/all.rb +15 -0
  279. data/lib/mongoid/matcher/and.rb +14 -0
  280. data/lib/mongoid/matcher/bits.rb +19 -0
  281. data/lib/mongoid/matcher/bits_all_clear.rb +21 -0
  282. data/lib/mongoid/matcher/bits_all_set.rb +21 -0
  283. data/lib/mongoid/matcher/bits_any_clear.rb +21 -0
  284. data/lib/mongoid/matcher/bits_any_set.rb +21 -0
  285. data/lib/mongoid/matcher/elem_match.rb +15 -0
  286. data/lib/mongoid/matcher/elem_match_expression.rb +14 -2
  287. data/lib/mongoid/matcher/eq.rb +15 -0
  288. data/lib/mongoid/matcher/eq_impl.rb +33 -16
  289. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +14 -2
  290. data/lib/mongoid/matcher/exists.rb +15 -0
  291. data/lib/mongoid/matcher/expression.rb +13 -0
  292. data/lib/mongoid/matcher/expression_operator.rb +14 -0
  293. data/lib/mongoid/matcher/field_expression.rb +15 -0
  294. data/lib/mongoid/matcher/field_operator.rb +24 -0
  295. data/lib/mongoid/matcher/gt.rb +15 -0
  296. data/lib/mongoid/matcher/gte.rb +15 -0
  297. data/lib/mongoid/matcher/in.rb +15 -0
  298. data/lib/mongoid/matcher/lt.rb +15 -0
  299. data/lib/mongoid/matcher/lte.rb +15 -0
  300. data/lib/mongoid/matcher/mod.rb +16 -0
  301. data/lib/mongoid/matcher/ne.rb +15 -0
  302. data/lib/mongoid/matcher/nin.rb +15 -0
  303. data/lib/mongoid/matcher/nor.rb +14 -0
  304. data/lib/mongoid/matcher/not.rb +16 -0
  305. data/lib/mongoid/matcher/or.rb +14 -0
  306. data/lib/mongoid/matcher/regex.rb +24 -0
  307. data/lib/mongoid/matcher/size.rb +16 -0
  308. data/lib/mongoid/matcher/type.rb +25 -0
  309. data/lib/mongoid/matcher.rb +5 -15
  310. data/lib/mongoid/persistable/creatable.rb +14 -9
  311. data/lib/mongoid/persistable/deletable.rb +7 -2
  312. data/lib/mongoid/persistable/destroyable.rb +34 -7
  313. data/lib/mongoid/persistable/incrementable.rb +2 -1
  314. data/lib/mongoid/persistable/logical.rb +1 -0
  315. data/lib/mongoid/persistable/maxable.rb +37 -0
  316. data/lib/mongoid/persistable/minable.rb +37 -0
  317. data/lib/mongoid/persistable/multipliable.rb +36 -0
  318. data/lib/mongoid/persistable/poppable.rb +1 -0
  319. data/lib/mongoid/persistable/pullable.rb +1 -0
  320. data/lib/mongoid/persistable/pushable.rb +1 -0
  321. data/lib/mongoid/persistable/renamable.rb +1 -0
  322. data/lib/mongoid/persistable/savable.rb +1 -0
  323. data/lib/mongoid/persistable/settable.rb +1 -0
  324. data/lib/mongoid/persistable/unsettable.rb +1 -0
  325. data/lib/mongoid/persistable/updatable.rb +37 -18
  326. data/lib/mongoid/persistable/upsertable.rb +20 -7
  327. data/lib/mongoid/persistable.rb +11 -1
  328. data/lib/mongoid/persistence_context.rb +46 -6
  329. data/lib/mongoid/positional.rb +1 -0
  330. data/lib/mongoid/railtie.rb +24 -1
  331. data/lib/mongoid/railties/bson_object_id_serializer.rb +39 -0
  332. data/lib/mongoid/railties/console_sandbox.rb +42 -0
  333. data/lib/mongoid/railties/controller_runtime.rb +20 -4
  334. data/lib/mongoid/railties/database.rake +12 -0
  335. data/lib/mongoid/reloadable.rb +38 -30
  336. data/lib/mongoid/scopable.rb +19 -23
  337. data/lib/mongoid/search_indexable.rb +167 -0
  338. data/lib/mongoid/selectable.rb +1 -0
  339. data/lib/mongoid/serializable.rb +8 -7
  340. data/lib/mongoid/shardable.rb +1 -0
  341. data/lib/mongoid/stateful.rb +9 -3
  342. data/lib/mongoid/stringified_symbol.rb +19 -6
  343. data/lib/mongoid/tasks/database.rake +13 -0
  344. data/lib/mongoid/tasks/database.rb +63 -0
  345. data/lib/mongoid/tasks/encryption.rake +59 -0
  346. data/lib/mongoid/tasks/encryption.rb +108 -0
  347. data/lib/mongoid/threaded/lifecycle.rb +1 -0
  348. data/lib/mongoid/threaded.rb +94 -30
  349. data/lib/mongoid/timestamps/created/short.rb +1 -0
  350. data/lib/mongoid/timestamps/created.rb +5 -11
  351. data/lib/mongoid/timestamps/short.rb +1 -0
  352. data/lib/mongoid/timestamps/timeless.rb +29 -0
  353. data/lib/mongoid/timestamps/updated/short.rb +1 -0
  354. data/lib/mongoid/timestamps/updated.rb +2 -1
  355. data/lib/mongoid/timestamps.rb +1 -0
  356. data/lib/mongoid/touchable.rb +154 -49
  357. data/lib/mongoid/traversable.rb +127 -122
  358. data/lib/mongoid/utils.rb +32 -2
  359. data/lib/mongoid/validatable/associated.rb +3 -5
  360. data/lib/mongoid/validatable/format.rb +1 -0
  361. data/lib/mongoid/validatable/length.rb +1 -0
  362. data/lib/mongoid/validatable/localizable.rb +1 -0
  363. data/lib/mongoid/validatable/macros.rb +5 -15
  364. data/lib/mongoid/validatable/presence.rb +1 -0
  365. data/lib/mongoid/validatable/queryable.rb +9 -0
  366. data/lib/mongoid/validatable/uniqueness.rb +2 -1
  367. data/lib/mongoid/validatable.rb +3 -3
  368. data/lib/mongoid/version.rb +2 -5
  369. data/lib/mongoid/warnings.rb +9 -16
  370. data/lib/mongoid.rb +38 -5
  371. data/lib/rails/generators/mongoid/config/config_generator.rb +17 -3
  372. data/lib/rails/generators/mongoid/config/templates/mongoid.rb +25 -0
  373. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +36 -62
  374. data/lib/rails/generators/mongoid/model/model_generator.rb +4 -0
  375. data/lib/rails/generators/mongoid_generator.rb +13 -0
  376. data/lib/rails/mongoid.rb +4 -29
  377. data/spec/config/mongoid.yml +0 -1
  378. data/spec/integration/active_job_spec.rb +32 -0
  379. data/spec/integration/app_spec.rb +72 -58
  380. data/spec/integration/associations/belongs_to_spec.rb +1 -0
  381. data/spec/integration/associations/embedded_dirty_spec.rb +1 -0
  382. data/spec/integration/associations/embedded_spec.rb +75 -6
  383. data/spec/integration/associations/embeds_many_spec.rb +1 -41
  384. data/spec/integration/associations/embeds_one_spec.rb +6 -25
  385. data/spec/integration/associations/foreign_key_spec.rb +1 -0
  386. data/spec/integration/associations/foreign_key_spec_models.rb +1 -0
  387. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +1 -0
  388. data/spec/integration/associations/has_many_spec.rb +1 -0
  389. data/spec/integration/associations/has_one_spec.rb +1 -0
  390. data/spec/integration/associations/nested_attributes_assignment_spec.rb +1 -0
  391. data/spec/integration/associations/reverse_population_spec.rb +1 -0
  392. data/spec/integration/associations/reverse_population_spec_models.rb +1 -0
  393. data/spec/integration/associations/scope_option_spec.rb +1 -0
  394. data/spec/integration/atomic/modifiers_spec.rb +1 -0
  395. data/spec/integration/bson_regexp_raw_spec.rb +1 -0
  396. data/spec/integration/callbacks_models.rb +3 -2
  397. data/spec/integration/callbacks_spec.rb +2 -1
  398. data/spec/integration/contextual/empty_spec.rb +1 -0
  399. data/spec/integration/criteria/alias_query_spec.rb +25 -88
  400. data/spec/integration/criteria/date_field_spec.rb +1 -0
  401. data/spec/integration/criteria/default_scope_spec.rb +1 -0
  402. data/spec/integration/criteria/logical_spec.rb +10 -28
  403. data/spec/integration/criteria/range_spec.rb +1 -2
  404. data/spec/integration/criteria/raw_value_spec.rb +525 -0
  405. data/spec/integration/criteria/time_with_zone_spec.rb +1 -0
  406. data/spec/integration/discriminator_key_spec.rb +1 -0
  407. data/spec/integration/discriminator_value_spec.rb +1 -0
  408. data/spec/integration/document_spec.rb +1 -0
  409. data/spec/integration/dots_and_dollars_spec.rb +1 -0
  410. data/spec/integration/encryption_spec.rb +100 -0
  411. data/spec/integration/i18n_fallbacks_spec.rb +7 -33
  412. data/spec/integration/matcher_examples_spec.rb +1 -0
  413. data/spec/integration/matcher_operator_data/bits_all_clear.yml +0 -15
  414. data/spec/integration/matcher_operator_data/bits_all_set.yml +0 -15
  415. data/spec/integration/matcher_operator_data/bits_any_clear.yml +0 -15
  416. data/spec/integration/matcher_operator_data/bits_any_set.yml +0 -15
  417. data/spec/integration/matcher_operator_data/size.yml +0 -3
  418. data/spec/integration/matcher_operator_data/type.yml +0 -6
  419. data/spec/integration/matcher_operator_data/type_array.yml +0 -1
  420. data/spec/integration/matcher_operator_data/type_decimal.yml +0 -4
  421. data/spec/integration/matcher_operator_spec.rb +1 -0
  422. data/spec/integration/matcher_spec.rb +21 -66
  423. data/spec/integration/persistence/range_field_spec.rb +1 -0
  424. data/spec/integration/server_query_spec.rb +1 -0
  425. data/spec/integration/shardable_spec.rb +1 -0
  426. data/spec/integration/stringified_symbol_field_spec.rb +1 -0
  427. data/spec/lite_spec_helper.rb +36 -10
  428. data/spec/mongoid/association/accessors_spec.rb +11 -28
  429. data/spec/mongoid/association/auto_save_spec.rb +1 -0
  430. data/spec/mongoid/association/builders_spec.rb +1 -0
  431. data/spec/mongoid/association/constrainable_spec.rb +1 -0
  432. data/spec/mongoid/association/counter_cache_spec.rb +1 -0
  433. data/spec/mongoid/association/depending_spec.rb +1 -0
  434. data/spec/mongoid/association/eager_spec.rb +52 -24
  435. data/spec/mongoid/association/embedded/cyclic_spec.rb +1 -0
  436. data/spec/mongoid/association/embedded/dirty_spec.rb +1 -0
  437. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +1 -0
  438. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +1 -0
  439. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +1 -0
  440. data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -7
  441. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -0
  442. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +1 -0
  443. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1 -0
  444. data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -2
  445. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +4 -7
  446. data/spec/mongoid/association/embedded/embeds_many_spec.rb +1 -0
  447. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -0
  448. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +1 -0
  449. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1 -0
  450. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -0
  451. data/spec/mongoid/association/embedded/embeds_one_models.rb +6 -1
  452. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -1
  453. data/spec/mongoid/association/embedded/embeds_one_spec.rb +1 -0
  454. data/spec/mongoid/association/macros_spec.rb +1 -0
  455. data/spec/mongoid/association/nested/many_spec.rb +1 -0
  456. data/spec/mongoid/association/nested/one_spec.rb +1 -0
  457. data/spec/mongoid/association/options_spec.rb +1 -0
  458. data/spec/mongoid/association/polymorphic_spec.rb +1 -0
  459. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +1 -0
  460. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +1 -0
  461. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +1 -0
  462. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1 -4
  463. data/spec/mongoid/association/referenced/belongs_to_models.rb +1 -0
  464. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +2 -1
  465. data/spec/mongoid/association/referenced/belongs_to_spec.rb +1 -0
  466. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -0
  467. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +2 -1
  468. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +1 -0
  469. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -0
  470. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -31
  471. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +1 -0
  472. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -1
  473. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1 -0
  474. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -0
  475. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +1 -0
  476. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +1 -0
  477. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -0
  478. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
  479. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1085 -2002
  480. data/spec/mongoid/association/referenced/has_many_models.rb +1 -0
  481. data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -1
  482. data/spec/mongoid/association/referenced/has_many_spec.rb +1 -0
  483. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -0
  484. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +1 -0
  485. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +1 -0
  486. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1 -0
  487. data/spec/mongoid/association/referenced/has_one_models.rb +1 -0
  488. data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -1
  489. data/spec/mongoid/association/referenced/has_one_spec.rb +1 -0
  490. data/spec/mongoid/association/reflections_spec.rb +1 -0
  491. data/spec/mongoid/association/syncable_spec.rb +1 -0
  492. data/spec/mongoid/association_spec.rb +1 -0
  493. data/spec/mongoid/atomic/modifiers_spec.rb +1 -0
  494. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -0
  495. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -0
  496. data/spec/mongoid/atomic/paths/root_spec.rb +1 -0
  497. data/spec/mongoid/atomic/paths_spec.rb +1 -0
  498. data/spec/mongoid/atomic_spec.rb +1 -0
  499. data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
  500. data/spec/mongoid/attributes/dynamic_spec.rb +1 -0
  501. data/spec/mongoid/attributes/embedded_spec.rb +118 -0
  502. data/spec/mongoid/attributes/nested_spec.rb +1 -0
  503. data/spec/mongoid/attributes/nested_spec_models.rb +1 -0
  504. data/spec/mongoid/attributes/projector_spec.rb +1 -0
  505. data/spec/mongoid/attributes/readonly_spec.rb +1 -19
  506. data/spec/mongoid/attributes_spec.rb +18 -35
  507. data/spec/mongoid/cacheable_spec.rb +1 -0
  508. data/spec/mongoid/changeable_spec.rb +4 -3
  509. data/spec/mongoid/clients/factory_spec.rb +77 -30
  510. data/spec/mongoid/clients/options_spec.rb +9 -5
  511. data/spec/mongoid/clients/sessions_spec.rb +27 -10
  512. data/spec/mongoid/clients/transactions_spec.rb +958 -185
  513. data/spec/mongoid/clients/transactions_spec_models.rb +159 -0
  514. data/spec/mongoid/clients_spec.rb +47 -2
  515. data/spec/mongoid/collection_configurable_spec.rb +1 -0
  516. data/spec/mongoid/composable_spec.rb +1 -0
  517. data/spec/mongoid/config/defaults_spec.rb +31 -92
  518. data/spec/mongoid/config/encryption_spec.rb +152 -0
  519. data/spec/mongoid/config/environment_spec.rb +13 -41
  520. data/spec/mongoid/config/introspection_spec.rb +114 -0
  521. data/spec/mongoid/config/options_spec.rb +1 -0
  522. data/spec/mongoid/config_spec.rb +20 -133
  523. data/spec/mongoid/contextual/aggregable/memory_spec.rb +1 -0
  524. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +1 -0
  525. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +5 -29
  526. data/spec/mongoid/contextual/aggregable/none_spec.rb +3 -14
  527. data/spec/mongoid/contextual/atomic_spec.rb +203 -12
  528. data/spec/mongoid/contextual/map_reduce_spec.rb +1 -0
  529. data/spec/mongoid/contextual/memory_spec.rb +364 -534
  530. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +10 -3
  531. data/spec/mongoid/contextual/mongo_spec.rb +101 -283
  532. data/spec/mongoid/contextual/none_spec.rb +1 -0
  533. data/spec/mongoid/copyable_spec.rb +1 -0
  534. data/spec/mongoid/copyable_spec_models.rb +1 -0
  535. data/spec/mongoid/criteria/findable_spec.rb +191 -0
  536. data/spec/mongoid/criteria/includable_spec.rb +1 -0
  537. data/spec/mongoid/criteria/includable_spec_models.rb +1 -0
  538. data/spec/mongoid/criteria/inspectable_spec.rb +1 -0
  539. data/spec/mongoid/criteria/marshalable_spec.rb +3 -2
  540. data/spec/mongoid/criteria/modifiable_spec.rb +1 -0
  541. data/spec/mongoid/criteria/options_spec.rb +1 -0
  542. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -0
  543. data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -0
  544. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +1 -0
  545. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +8 -7
  546. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -0
  547. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +21 -11
  548. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +1 -0
  549. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -0
  550. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -0
  551. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -0
  552. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -0
  553. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +1 -0
  554. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -0
  555. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +1 -0
  556. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -11
  557. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -11
  558. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -0
  559. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -66
  560. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -0
  561. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +1 -0
  562. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +1 -0
  563. data/spec/mongoid/criteria/queryable/key_spec.rb +1 -0
  564. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +1 -0
  565. data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -0
  566. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -0
  567. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -0
  568. data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -0
  569. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +4 -3
  570. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +1 -0
  571. data/spec/mongoid/criteria/queryable/selectable_spec.rb +51 -214
  572. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +1 -0
  573. data/spec/mongoid/criteria/queryable/selector_spec.rb +96 -0
  574. data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -0
  575. data/spec/mongoid/criteria/queryable/storable_spec.rb +10 -32
  576. data/spec/mongoid/criteria/scopable_spec.rb +1 -0
  577. data/spec/mongoid/criteria/translator_spec.rb +1 -0
  578. data/spec/mongoid/criteria_projection_spec.rb +6 -5
  579. data/spec/mongoid/criteria_spec.rb +221 -359
  580. data/spec/mongoid/document_fields_spec.rb +1 -0
  581. data/spec/mongoid/document_persistence_context_spec.rb +77 -0
  582. data/spec/mongoid/document_query_spec.rb +5 -4
  583. data/spec/mongoid/document_spec.rb +3 -148
  584. data/spec/mongoid/equality_spec.rb +41 -149
  585. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -0
  586. data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
  587. data/spec/mongoid/errors/callback_spec.rb +1 -0
  588. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -0
  589. data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -0
  590. data/spec/mongoid/errors/document_not_found_spec.rb +1 -0
  591. data/spec/mongoid/errors/invalid_collection_spec.rb +1 -0
  592. data/spec/mongoid/errors/invalid_config_file_spec.rb +1 -0
  593. data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -0
  594. data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -0
  595. data/spec/mongoid/errors/invalid_field_spec.rb +1 -0
  596. data/spec/mongoid/errors/invalid_field_type_spec.rb +1 -0
  597. data/spec/mongoid/errors/invalid_find_spec.rb +1 -0
  598. data/spec/mongoid/errors/invalid_includes_spec.rb +1 -0
  599. data/spec/mongoid/errors/invalid_index_spec.rb +1 -0
  600. data/spec/mongoid/errors/invalid_options_spec.rb +1 -0
  601. data/spec/mongoid/errors/invalid_path_spec.rb +1 -0
  602. data/spec/mongoid/errors/invalid_relation_spec.rb +1 -0
  603. data/spec/mongoid/errors/invalid_scope_spec.rb +1 -0
  604. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -0
  605. data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -0
  606. data/spec/mongoid/errors/invalid_time_spec.rb +1 -0
  607. data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -0
  608. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -0
  609. data/spec/mongoid/errors/mixed_relations_spec.rb +1 -0
  610. data/spec/mongoid/errors/mongoid_error_spec.rb +9 -22
  611. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -0
  612. data/spec/mongoid/errors/no_client_config_spec.rb +1 -0
  613. data/spec/mongoid/errors/no_client_database_spec.rb +1 -0
  614. data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -0
  615. data/spec/mongoid/errors/no_clients_config_spec.rb +1 -0
  616. data/spec/mongoid/errors/no_environment_spec.rb +1 -0
  617. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -0
  618. data/spec/mongoid/errors/no_metadata_spec.rb +1 -0
  619. data/spec/mongoid/errors/no_parent_spec.rb +1 -0
  620. data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -0
  621. data/spec/mongoid/errors/readonly_document_spec.rb +1 -0
  622. data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -0
  623. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -0
  624. data/spec/mongoid/errors/unknown_attribute_spec.rb +1 -0
  625. data/spec/mongoid/errors/unsaved_document_spec.rb +1 -0
  626. data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -0
  627. data/spec/mongoid/errors/validations_spec.rb +1 -0
  628. data/spec/mongoid/extensions/array_spec.rb +3 -262
  629. data/spec/mongoid/extensions/big_decimal_spec.rb +5 -4
  630. data/spec/mongoid/extensions/binary_spec.rb +1 -0
  631. data/spec/mongoid/extensions/boolean_spec.rb +1 -0
  632. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +8 -7
  633. data/spec/mongoid/extensions/date_spec.rb +3 -20
  634. data/spec/mongoid/extensions/date_time_spec.rb +3 -9
  635. data/spec/mongoid/extensions/decimal128_spec.rb +1 -0
  636. data/spec/mongoid/extensions/false_class_spec.rb +1 -7
  637. data/spec/mongoid/extensions/float_spec.rb +3 -9
  638. data/spec/mongoid/extensions/hash_spec.rb +19 -458
  639. data/spec/mongoid/extensions/integer_spec.rb +3 -8
  640. data/spec/mongoid/extensions/module_spec.rb +1 -0
  641. data/spec/mongoid/extensions/nil_class_spec.rb +1 -0
  642. data/spec/mongoid/extensions/object_id_spec.rb +1 -0
  643. data/spec/mongoid/extensions/object_spec.rb +1 -176
  644. data/spec/mongoid/extensions/range_spec.rb +1 -11
  645. data/spec/mongoid/extensions/raw_value_spec.rb +67 -0
  646. data/spec/mongoid/extensions/regexp_spec.rb +1 -0
  647. data/spec/mongoid/extensions/set_spec.rb +2 -3
  648. data/spec/mongoid/extensions/string_spec.rb +3 -113
  649. data/spec/mongoid/extensions/stringified_symbol_spec.rb +1 -0
  650. data/spec/mongoid/extensions/symbol_spec.rb +1 -31
  651. data/spec/mongoid/extensions/time_spec.rb +32 -350
  652. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -30
  653. data/spec/mongoid/extensions/true_class_spec.rb +1 -7
  654. data/spec/mongoid/factory_spec.rb +1 -0
  655. data/spec/mongoid/fields/foreign_key_spec.rb +282 -119
  656. data/spec/mongoid/fields/localized_spec.rb +1 -0
  657. data/spec/mongoid/fields/standard_spec.rb +1 -0
  658. data/spec/mongoid/fields_spec.rb +60 -66
  659. data/spec/mongoid/findable_spec.rb +2 -61
  660. data/spec/mongoid/indexable/specification_spec.rb +132 -13
  661. data/spec/mongoid/indexable_spec.rb +323 -9
  662. data/spec/mongoid/inspectable_spec.rb +81 -0
  663. data/spec/mongoid/interceptable_spec.rb +3 -82
  664. data/spec/mongoid/interceptable_spec_models.rb +112 -47
  665. data/spec/mongoid/loading_spec.rb +110 -0
  666. data/spec/mongoid/loggable_spec.rb +1 -0
  667. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -0
  668. data/spec/mongoid/mongoizable_spec.rb +1 -0
  669. data/spec/mongoid/monkey_patches_spec.rb +211 -0
  670. data/spec/mongoid/persistable/creatable_spec.rb +1 -0
  671. data/spec/mongoid/persistable/deletable_spec.rb +78 -31
  672. data/spec/mongoid/persistable/destroyable_spec.rb +230 -52
  673. data/spec/mongoid/persistable/incrementable_spec.rb +1 -0
  674. data/spec/mongoid/persistable/logical_spec.rb +1 -0
  675. data/spec/mongoid/persistable/maxable_spec.rb +147 -0
  676. data/spec/mongoid/persistable/minable_spec.rb +147 -0
  677. data/spec/mongoid/persistable/multipliable_spec.rb +227 -0
  678. data/spec/mongoid/persistable/poppable_spec.rb +1 -0
  679. data/spec/mongoid/persistable/pullable_spec.rb +1 -0
  680. data/spec/mongoid/persistable/pushable_spec.rb +1 -0
  681. data/spec/mongoid/persistable/renamable_spec.rb +1 -0
  682. data/spec/mongoid/persistable/savable_spec.rb +2 -6
  683. data/spec/mongoid/persistable/settable_spec.rb +5 -4
  684. data/spec/mongoid/persistable/unsettable_spec.rb +1 -0
  685. data/spec/mongoid/persistable/updatable_spec.rb +3 -2
  686. data/spec/mongoid/persistable/upsertable_spec.rb +34 -1
  687. data/spec/mongoid/persistable_spec.rb +1 -0
  688. data/spec/mongoid/persistence_context_spec.rb +1 -0
  689. data/spec/mongoid/positional_spec.rb +1 -0
  690. data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +24 -0
  691. data/spec/mongoid/railties/console_sandbox_spec.rb +44 -0
  692. data/spec/mongoid/relations/proxy_spec.rb +1 -0
  693. data/spec/mongoid/reloadable_spec.rb +28 -83
  694. data/spec/mongoid/scopable_spec.rb +39 -50
  695. data/spec/mongoid/search_indexable_spec.rb +147 -0
  696. data/spec/mongoid/selectable_spec.rb +1 -0
  697. data/spec/mongoid/serializable_spec.rb +10 -16
  698. data/spec/mongoid/shardable_models.rb +1 -0
  699. data/spec/mongoid/shardable_spec.rb +1 -0
  700. data/spec/mongoid/stateful_spec.rb +1 -0
  701. data/spec/mongoid/tasks/database_rake_spec.rb +127 -49
  702. data/spec/mongoid/tasks/database_spec.rb +48 -1
  703. data/spec/mongoid/tasks/encryption_spec.rb +187 -0
  704. data/spec/mongoid/threaded_spec.rb +38 -0
  705. data/spec/mongoid/timestamps/created/short_spec.rb +1 -0
  706. data/spec/mongoid/timestamps/created_spec.rb +1 -23
  707. data/spec/mongoid/timestamps/timeless_spec.rb +1 -0
  708. data/spec/mongoid/timestamps/updated/short_spec.rb +1 -0
  709. data/spec/mongoid/timestamps/updated_spec.rb +1 -0
  710. data/spec/mongoid/timestamps_spec.rb +1 -0
  711. data/spec/mongoid/timestamps_spec_models.rb +1 -0
  712. data/spec/mongoid/touchable_spec.rb +485 -69
  713. data/spec/mongoid/touchable_spec_models.rb +96 -1
  714. data/spec/mongoid/traversable_spec.rb +1 -0
  715. data/spec/mongoid/validatable/associated_spec.rb +5 -14
  716. data/spec/mongoid/validatable/format_spec.rb +1 -0
  717. data/spec/mongoid/validatable/length_spec.rb +1 -0
  718. data/spec/mongoid/validatable/numericality_spec.rb +1 -16
  719. data/spec/mongoid/validatable/presence_spec.rb +1 -0
  720. data/spec/mongoid/validatable/uniqueness_spec.rb +48 -3
  721. data/spec/mongoid/validatable_spec.rb +1 -0
  722. data/spec/mongoid/warnings_spec.rb +1 -0
  723. data/spec/mongoid_spec.rb +27 -0
  724. data/spec/rails/controller_extension/controller_runtime_spec.rb +1 -0
  725. data/spec/rails/mongoid_spec.rb +26 -117
  726. data/spec/shared/lib/mrss/docker_runner.rb +1 -1
  727. data/spec/shared/lib/mrss/server_version_registry.rb +1 -1
  728. data/spec/shared/lib/mrss/spec_organizer.rb +3 -32
  729. data/spec/shared/share/Dockerfile.erb +34 -4
  730. data/spec/shared/shlib/distro.sh +0 -10
  731. data/spec/shared/shlib/server.sh +27 -33
  732. data/spec/shared/shlib/set_env.sh +42 -6
  733. data/spec/spec_helper.rb +26 -28
  734. data/spec/support/authorization.rb +1 -0
  735. data/spec/support/client_registry.rb +1 -0
  736. data/spec/support/constraints.rb +1 -0
  737. data/spec/support/crypt/models.rb +50 -0
  738. data/spec/support/crypt.rb +80 -0
  739. data/spec/support/expectations.rb +18 -20
  740. data/spec/support/feature_sandbox.rb +72 -0
  741. data/spec/support/helpers.rb +1 -0
  742. data/spec/support/immutable_ids.rb +22 -21
  743. data/spec/support/macros.rb +4 -6
  744. data/spec/support/models/account.rb +1 -0
  745. data/spec/support/models/acolyte.rb +1 -0
  746. data/spec/support/models/actor.rb +1 -0
  747. data/spec/support/models/actress.rb +1 -0
  748. data/spec/support/models/address.rb +3 -0
  749. data/spec/support/models/address_component.rb +1 -0
  750. data/spec/support/models/address_number.rb +1 -0
  751. data/spec/support/models/agency.rb +1 -0
  752. data/spec/support/models/agent.rb +1 -0
  753. data/spec/support/models/album.rb +1 -0
  754. data/spec/support/models/alert.rb +1 -0
  755. data/spec/support/models/animal.rb +1 -0
  756. data/spec/support/models/answer.rb +1 -0
  757. data/spec/support/models/appointment.rb +1 -0
  758. data/spec/support/models/armrest.rb +1 -0
  759. data/spec/support/models/array_field.rb +1 -0
  760. data/spec/support/models/article.rb +1 -0
  761. data/spec/support/models/artist.rb +1 -0
  762. data/spec/support/models/artwork.rb +1 -0
  763. data/spec/support/models/audible_sound.rb +1 -0
  764. data/spec/support/models/audio.rb +1 -0
  765. data/spec/support/models/augmentation.rb +1 -0
  766. data/spec/support/models/author.rb +1 -0
  767. data/spec/support/models/baby.rb +1 -0
  768. data/spec/support/models/band.rb +5 -1
  769. data/spec/support/models/bar.rb +1 -0
  770. data/spec/support/models/basic.rb +1 -0
  771. data/spec/support/models/bed.rb +1 -0
  772. data/spec/support/models/big_palette.rb +1 -0
  773. data/spec/support/models/birthday.rb +1 -0
  774. data/spec/support/models/bolt.rb +1 -0
  775. data/spec/support/models/bomb.rb +1 -0
  776. data/spec/support/models/book.rb +1 -0
  777. data/spec/support/models/breed.rb +1 -0
  778. data/spec/support/models/browser.rb +1 -0
  779. data/spec/support/models/building.rb +1 -0
  780. data/spec/support/models/building_address.rb +1 -0
  781. data/spec/support/models/bus.rb +1 -0
  782. data/spec/support/models/business.rb +1 -0
  783. data/spec/support/models/callback_test.rb +1 -0
  784. data/spec/support/models/canvas.rb +1 -0
  785. data/spec/support/models/car.rb +1 -0
  786. data/spec/support/models/cat.rb +1 -0
  787. data/spec/support/models/catalog.rb +1 -0
  788. data/spec/support/models/category.rb +1 -0
  789. data/spec/support/models/child.rb +1 -0
  790. data/spec/support/models/child_doc.rb +1 -0
  791. data/spec/support/models/church.rb +1 -0
  792. data/spec/support/models/circle.rb +1 -0
  793. data/spec/support/models/circuit.rb +1 -0
  794. data/spec/support/models/circus.rb +1 -0
  795. data/spec/support/models/code.rb +1 -0
  796. data/spec/support/models/coding/pull_request.rb +1 -0
  797. data/spec/support/models/coding.rb +1 -0
  798. data/spec/support/models/comment.rb +1 -0
  799. data/spec/support/models/company.rb +1 -0
  800. data/spec/support/models/consumption_period.rb +1 -0
  801. data/spec/support/models/contextable_item.rb +1 -0
  802. data/spec/support/models/contractor.rb +1 -0
  803. data/spec/support/models/cookie.rb +1 -0
  804. data/spec/support/models/country_code.rb +1 -0
  805. data/spec/support/models/courier_job.rb +1 -0
  806. data/spec/support/models/cover.rb +1 -0
  807. data/spec/support/models/crate.rb +1 -0
  808. data/spec/support/models/customer.rb +1 -0
  809. data/spec/support/models/customer_address.rb +1 -0
  810. data/spec/support/models/deed.rb +1 -0
  811. data/spec/support/models/definition.rb +1 -0
  812. data/spec/support/models/delegating_patient.rb +1 -0
  813. data/spec/support/models/description.rb +1 -0
  814. data/spec/support/models/dictionary.rb +1 -0
  815. data/spec/support/models/division.rb +1 -0
  816. data/spec/support/models/doctor.rb +1 -0
  817. data/spec/support/models/dog.rb +1 -0
  818. data/spec/support/models/dokument.rb +1 -0
  819. data/spec/support/models/draft.rb +1 -0
  820. data/spec/support/models/dragon.rb +1 -0
  821. data/spec/support/models/driver.rb +1 -0
  822. data/spec/support/models/drug.rb +1 -0
  823. data/spec/support/models/dungeon.rb +1 -0
  824. data/spec/support/models/edit.rb +1 -0
  825. data/spec/support/models/email.rb +1 -0
  826. data/spec/support/models/employer.rb +1 -0
  827. data/spec/support/models/entry.rb +1 -0
  828. data/spec/support/models/eraser.rb +1 -0
  829. data/spec/support/models/even.rb +1 -0
  830. data/spec/support/models/event.rb +1 -0
  831. data/spec/support/models/exhibition.rb +1 -0
  832. data/spec/support/models/exhibitor.rb +1 -0
  833. data/spec/support/models/explosion.rb +1 -0
  834. data/spec/support/models/eye.rb +1 -0
  835. data/spec/support/models/eye_bowl.rb +1 -0
  836. data/spec/support/models/face.rb +1 -0
  837. data/spec/support/models/fanatic.rb +1 -0
  838. data/spec/support/models/favorite.rb +8 -1
  839. data/spec/support/models/filesystem.rb +1 -0
  840. data/spec/support/models/fire_hydrant.rb +1 -0
  841. data/spec/support/models/firefox.rb +1 -0
  842. data/spec/support/models/fish.rb +1 -0
  843. data/spec/support/models/folder.rb +1 -0
  844. data/spec/support/models/folder_item.rb +1 -0
  845. data/spec/support/models/fruits.rb +1 -0
  846. data/spec/support/models/game.rb +1 -0
  847. data/spec/support/models/ghost.rb +1 -0
  848. data/spec/support/models/guitar.rb +1 -0
  849. data/spec/support/models/hole.rb +1 -0
  850. data/spec/support/models/home.rb +1 -0
  851. data/spec/support/models/house.rb +1 -0
  852. data/spec/support/models/html_writer.rb +1 -0
  853. data/spec/support/models/id_key.rb +1 -0
  854. data/spec/support/models/idnodef.rb +1 -0
  855. data/spec/support/models/image.rb +1 -0
  856. data/spec/support/models/implant.rb +1 -0
  857. data/spec/support/models/instrument.rb +1 -0
  858. data/spec/support/models/item.rb +1 -0
  859. data/spec/support/models/jar.rb +1 -0
  860. data/spec/support/models/kaleidoscope.rb +1 -0
  861. data/spec/support/models/kangaroo.rb +1 -0
  862. data/spec/support/models/label.rb +1 -0
  863. data/spec/support/models/language.rb +1 -0
  864. data/spec/support/models/lat_lng.rb +1 -6
  865. data/spec/support/models/league.rb +1 -0
  866. data/spec/support/models/learner.rb +1 -0
  867. data/spec/support/models/line_item.rb +1 -0
  868. data/spec/support/models/location.rb +1 -0
  869. data/spec/support/models/login.rb +1 -0
  870. data/spec/support/models/manufacturer.rb +1 -0
  871. data/spec/support/models/meat.rb +1 -0
  872. data/spec/support/models/membership.rb +1 -0
  873. data/spec/support/models/message.rb +1 -0
  874. data/spec/support/models/minim.rb +1 -0
  875. data/spec/support/models/mixed_drink.rb +1 -0
  876. data/spec/support/models/mop.rb +1 -0
  877. data/spec/support/models/movie.rb +1 -0
  878. data/spec/support/models/my_hash.rb +1 -0
  879. data/spec/support/models/name.rb +1 -0
  880. data/spec/support/models/name_only.rb +1 -0
  881. data/spec/support/models/node.rb +1 -0
  882. data/spec/support/models/note.rb +1 -0
  883. data/spec/support/models/nut.rb +1 -0
  884. data/spec/support/models/odd.rb +1 -0
  885. data/spec/support/models/order.rb +1 -0
  886. data/spec/support/models/ordered_post.rb +1 -0
  887. data/spec/support/models/ordered_preference.rb +1 -0
  888. data/spec/support/models/oscar.rb +1 -0
  889. data/spec/support/models/other_owner_object.rb +1 -0
  890. data/spec/support/models/override.rb +1 -0
  891. data/spec/support/models/ownable.rb +1 -0
  892. data/spec/support/models/owner.rb +1 -0
  893. data/spec/support/models/pack.rb +1 -0
  894. data/spec/support/models/page.rb +1 -0
  895. data/spec/support/models/page_question.rb +1 -0
  896. data/spec/support/models/palette.rb +1 -0
  897. data/spec/support/models/parent.rb +1 -0
  898. data/spec/support/models/parent_doc.rb +1 -0
  899. data/spec/support/models/passport.rb +1 -0
  900. data/spec/support/models/patient.rb +1 -0
  901. data/spec/support/models/pdf_writer.rb +1 -0
  902. data/spec/support/models/pencil.rb +1 -0
  903. data/spec/support/models/person.rb +1 -0
  904. data/spec/support/models/pet.rb +1 -0
  905. data/spec/support/models/pet_owner.rb +1 -0
  906. data/spec/support/models/phone.rb +1 -0
  907. data/spec/support/models/piano.rb +1 -0
  908. data/spec/support/models/pizza.rb +1 -0
  909. data/spec/support/models/player.rb +1 -0
  910. data/spec/support/models/post.rb +1 -0
  911. data/spec/support/models/post_genre.rb +1 -0
  912. data/spec/support/models/powerup.rb +1 -0
  913. data/spec/support/models/preference.rb +1 -0
  914. data/spec/support/models/princess.rb +1 -0
  915. data/spec/support/models/product.rb +1 -0
  916. data/spec/support/models/profile.rb +1 -0
  917. data/spec/support/models/pronunciation.rb +1 -0
  918. data/spec/support/models/pub.rb +1 -0
  919. data/spec/support/models/publication/encyclopedia.rb +1 -0
  920. data/spec/support/models/publication/review.rb +1 -0
  921. data/spec/support/models/publication.rb +1 -0
  922. data/spec/support/models/purchase.rb +1 -0
  923. data/spec/support/models/purchased_item.rb +1 -0
  924. data/spec/support/models/question.rb +1 -0
  925. data/spec/support/models/quiz.rb +1 -0
  926. data/spec/support/models/rating.rb +1 -0
  927. data/spec/support/models/record.rb +1 -0
  928. data/spec/support/models/registry.rb +1 -0
  929. data/spec/support/models/role.rb +1 -0
  930. data/spec/support/models/root_category.rb +1 -0
  931. data/spec/support/models/sandbox/app/models/app_models_message.rb +4 -0
  932. data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
  933. data/spec/support/models/sandbox/sandbox_message.rb +4 -0
  934. data/spec/support/models/sandbox/sandbox_user.rb +4 -0
  935. data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
  936. data/spec/support/models/sandwich.rb +1 -0
  937. data/spec/support/models/scheduler.rb +1 -0
  938. data/spec/support/models/school.rb +1 -0
  939. data/spec/support/models/scribe.rb +1 -0
  940. data/spec/support/models/sealer.rb +1 -0
  941. data/spec/support/models/seat.rb +1 -0
  942. data/spec/support/models/seo.rb +1 -0
  943. data/spec/support/models/series.rb +1 -0
  944. data/spec/support/models/server.rb +1 -0
  945. data/spec/support/models/service.rb +1 -0
  946. data/spec/support/models/shape.rb +1 -0
  947. data/spec/support/models/shelf.rb +1 -0
  948. data/spec/support/models/shield.rb +1 -0
  949. data/spec/support/models/shipment_address.rb +1 -0
  950. data/spec/support/models/shipping_container.rb +1 -0
  951. data/spec/support/models/shipping_pack.rb +1 -0
  952. data/spec/support/models/shirt.rb +1 -0
  953. data/spec/support/models/shop.rb +1 -0
  954. data/spec/support/models/short_agent.rb +1 -0
  955. data/spec/support/models/short_quiz.rb +1 -0
  956. data/spec/support/models/simple.rb +1 -0
  957. data/spec/support/models/slave.rb +1 -0
  958. data/spec/support/models/song.rb +1 -0
  959. data/spec/support/models/sound.rb +1 -0
  960. data/spec/support/models/spacer.rb +1 -0
  961. data/spec/support/models/square.rb +1 -0
  962. data/spec/support/models/staff.rb +1 -0
  963. data/spec/support/models/store_as_dup_test1.rb +1 -0
  964. data/spec/support/models/store_as_dup_test2.rb +1 -0
  965. data/spec/support/models/store_as_dup_test3.rb +1 -0
  966. data/spec/support/models/store_as_dup_test4.rb +1 -0
  967. data/spec/support/models/strategy.rb +1 -0
  968. data/spec/support/models/student.rb +1 -0
  969. data/spec/support/models/sub_item.rb +1 -0
  970. data/spec/support/models/subscription.rb +1 -0
  971. data/spec/support/models/survey.rb +1 -0
  972. data/spec/support/models/symptom.rb +1 -0
  973. data/spec/support/models/system_role.rb +1 -0
  974. data/spec/support/models/tag.rb +1 -0
  975. data/spec/support/models/target.rb +1 -0
  976. data/spec/support/models/template.rb +1 -0
  977. data/spec/support/models/thing.rb +1 -0
  978. data/spec/support/models/threadlocker.rb +1 -0
  979. data/spec/support/models/title.rb +1 -0
  980. data/spec/support/models/tool.rb +1 -0
  981. data/spec/support/models/topping.rb +1 -0
  982. data/spec/support/models/toy.rb +1 -0
  983. data/spec/support/models/track.rb +1 -0
  984. data/spec/support/models/translation.rb +1 -0
  985. data/spec/support/models/tree.rb +1 -0
  986. data/spec/support/models/truck.rb +1 -0
  987. data/spec/support/models/updatable.rb +1 -0
  988. data/spec/support/models/user.rb +1 -0
  989. data/spec/support/models/user_account.rb +1 -0
  990. data/spec/support/models/validation_callback.rb +1 -0
  991. data/spec/support/models/vehicle.rb +1 -0
  992. data/spec/support/models/version.rb +1 -0
  993. data/spec/support/models/vertex.rb +1 -0
  994. data/spec/support/models/vet_visit.rb +1 -0
  995. data/spec/support/models/video.rb +1 -0
  996. data/spec/support/models/video_game.rb +1 -0
  997. data/spec/support/models/washer.rb +1 -0
  998. data/spec/support/models/weapon.rb +1 -0
  999. data/spec/support/models/wiki_page.rb +1 -0
  1000. data/spec/support/models/word.rb +1 -0
  1001. data/spec/support/models/word_origin.rb +1 -0
  1002. data/spec/support/models/writer.rb +1 -0
  1003. data/spec/support/rails_mock.rb +32 -0
  1004. data/spec/support/shared/time.rb +3 -21
  1005. data/spec/support/sinatra_mock.rb +7 -0
  1006. data/spec/support/spec_config.rb +30 -9
  1007. data.tar.gz.sig +0 -0
  1008. metadata +127 -48
  1009. metadata.gz.sig +1 -0
  1010. data/lib/mongoid/association/referenced/eager.rb +0 -163
  1011. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -113
  1012. data/lib/mongoid/contextual/geo_near.rb +0 -236
  1013. data/lib/mongoid/errors/invalid_session_use.rb +0 -21
  1014. data/lib/mongoid/errors/invalid_storage_parent.rb +0 -27
  1015. data/lib/mongoid/query_cache.rb +0 -68
  1016. data/lib/mongoid/validatable/numericality.rb +0 -19
  1017. data/spec/mongoid/contextual/geo_near_spec.rb +0 -471
  1018. data/spec/mongoid/extensions_spec.rb +0 -43
  1019. data/spec/mongoid/query_cache_middleware_spec.rb +0 -50
  1020. data/spec/mongoid/query_cache_spec.rb +0 -865
  1021. data/spec/shared/CANDIDATE.md +0 -28
  1022. data/spec/shared/lib/mrss/release/candidate.rb +0 -281
  1023. data/spec/shared/lib/mrss/release/product_data.rb +0 -144
  1024. data/spec/shared/lib/tasks/candidate.rake +0 -64
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Errors
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Errors
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Errors
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Errors
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  require "mongoid/errors/mongoid_error"
4
5
  require "mongoid/errors/ambiguous_relationship"
6
+ require "mongoid/errors/attribute_not_loaded"
5
7
  require "mongoid/errors/callback"
6
8
  require "mongoid/errors/create_collection_failure"
7
9
  require "mongoid/errors/criteria_argument_required"
@@ -10,6 +12,7 @@ require "mongoid/errors/document_not_found"
10
12
  require "mongoid/errors/empty_config_file"
11
13
  require "mongoid/errors/immutable_attribute"
12
14
  require "mongoid/errors/in_memory_collation_not_supported"
15
+ require "mongoid/errors/invalid_auto_encryption_configuration"
13
16
  require "mongoid/errors/invalid_async_query_executor"
14
17
  require "mongoid/errors/invalid_collection"
15
18
  require "mongoid/errors/invalid_config_file"
@@ -31,15 +34,17 @@ require "mongoid/errors/invalid_discriminator_key_target"
31
34
  require "mongoid/errors/invalid_dot_dollar_assignment"
32
35
  require "mongoid/errors/invalid_elem_match_operator"
33
36
  require "mongoid/errors/invalid_estimated_count_criteria"
37
+ require "mongoid/errors/invalid_estimated_count_scoping"
34
38
  require "mongoid/errors/invalid_expression_operator"
35
39
  require "mongoid/errors/invalid_field_operator"
36
40
  require "mongoid/errors/invalid_relation"
37
41
  require "mongoid/errors/invalid_relation_option"
38
42
  require "mongoid/errors/invalid_scope"
39
- require "mongoid/errors/invalid_session_use"
43
+ require "mongoid/errors/invalid_session_nesting"
40
44
  require "mongoid/errors/invalid_set_polymorphic_relation"
41
45
  require "mongoid/errors/invalid_storage_options"
42
46
  require "mongoid/errors/invalid_time"
47
+ require "mongoid/errors/invalid_transaction_nesting"
43
48
  require "mongoid/errors/inverse_not_found"
44
49
  require "mongoid/errors/mixed_relations"
45
50
  require "mongoid/errors/mixed_client_configuration"
@@ -55,8 +60,12 @@ require "mongoid/errors/no_client_database"
55
60
  require "mongoid/errors/no_client_hosts"
56
61
  require "mongoid/errors/readonly_attribute"
57
62
  require "mongoid/errors/readonly_document"
63
+ require "mongoid/errors/rollback"
64
+ require "mongoid/errors/sessions_not_supported"
58
65
  require "mongoid/errors/scope_overwrite"
59
66
  require "mongoid/errors/too_many_nested_attribute_records"
67
+ require "mongoid/errors/transaction_error"
68
+ require "mongoid/errors/transactions_not_supported"
60
69
  require "mongoid/errors/unknown_attribute"
61
70
  require "mongoid/errors/unknown_model"
62
71
  require "mongoid/errors/unsaved_document"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
 
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Extensions
6
+ # Adds type-casting behavior to Array class.
5
7
  module Array
6
8
 
7
9
  # Evolve the array into an array of object ids.
@@ -21,9 +23,11 @@ module Mongoid
21
23
  # [ 1, 2, 3 ].__find_args__
22
24
  #
23
25
  # @return [ Array ] The array of args.
26
+ # @deprecated
24
27
  def __find_args__
25
28
  flat_map{ |a| a.__find_args__ }.uniq{ |a| a.to_s }
26
29
  end
30
+ Mongoid.deprecate(self, :__find_args__)
27
31
 
28
32
  # Mongoize the array into an array of object ids.
29
33
  #
@@ -48,27 +52,7 @@ module Mongoid
48
52
  # configured default time zone corresponding to date/time components
49
53
  # in this array.
50
54
  def __mongoize_time__
51
- ::Time.configured.local(*self)
52
- end
53
-
54
- # Checks whether conditions given in this array are known to be
55
- # unsatisfiable, i.e., querying with this array will always return no
56
- # documents.
57
- #
58
- # This method used to assume that the array is the list of criteria
59
- # to be used with an $and operator. This assumption is no longer made;
60
- # therefore, since the interpretation of conditions in the array differs
61
- # between $and, $or and $nor operators, this method now always returns
62
- # false.
63
- #
64
- # This method is deprecated. Mongoid now uses
65
- # +_mongoid_unsatisfiable_criteria?+ internally; this method is retained
66
- # for backwards compatibility only. It always returns false.
67
- #
68
- # @return [ false ] Always false.
69
- # @deprecated
70
- def blank_criteria?
71
- false
55
+ ::Time.zone.local(*self)
72
56
  end
73
57
 
74
58
  # Is the array a set of multiple arguments in a method?
@@ -77,9 +61,11 @@ module Mongoid
77
61
  # [ 1, 2, 3 ].multi_arged?
78
62
  #
79
63
  # @return [ true | false ] If the array is multi args.
64
+ # @deprecated
80
65
  def multi_arged?
81
66
  !first.is_a?(Hash) && first.resizable? || size > 1
82
67
  end
68
+ Mongoid.deprecate(self, :multi_arged?)
83
69
 
84
70
  # Turn the object from the ruby type we deal with to a Mongo friendly
85
71
  # type.
@@ -124,10 +110,11 @@ module Mongoid
124
110
  # @example Mongoize the object.
125
111
  # Array.__mongoize_fk__(constraint, object)
126
112
  #
127
- # @param [ Association ] association The association metadata.
113
+ # @param [ Mongoid::Association::Relatable ] association The association metadata.
128
114
  # @param [ Object ] object The object to convert.
129
115
  #
130
116
  # @return [ Array ] The array of ids.
117
+ # @deprecated
131
118
  def __mongoize_fk__(association, object)
132
119
  if object.resizable?
133
120
  object.blank? ? object : association.convert_to_foreign_key(object)
@@ -135,6 +122,7 @@ module Mongoid
135
122
  object.blank? ? [] : association.convert_to_foreign_key(Array(object))
136
123
  end
137
124
  end
125
+ Mongoid.deprecate(self, :__mongoize_fk__)
138
126
 
139
127
  # Turn the object from the ruby type we deal with to a Mongo friendly
140
128
  # type.
@@ -169,5 +157,3 @@ end
169
157
 
170
158
  ::Array.__send__(:include, Mongoid::Extensions::Array)
171
159
  ::Array.extend(Mongoid::Extensions::Array::ClassMethods)
172
-
173
- ::Mongoid.deprecate(Array, :blank_criteria)
@@ -1,8 +1,18 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Extensions
6
+ # Adds type-casting behavior to BigDecimal class.
5
7
  module BigDecimal
8
+ # Behavior to be invoked when the module is included.
9
+ #
10
+ # @param [ Module ] base the class or module doing the including
11
+ #
12
+ # @api private
13
+ def self.included(base)
14
+ base.extend(ClassMethods)
15
+ end
6
16
 
7
17
  # Convert the big decimal to an $inc-able value.
8
18
  #
@@ -10,9 +20,11 @@ module Mongoid
10
20
  # bd.__to_inc__
11
21
  #
12
22
  # @return [ Float ] The big decimal as a float.
23
+ # @deprecated
13
24
  def __to_inc__
14
25
  to_f
15
26
  end
27
+ Mongoid.deprecate(self, :__to_inc__)
16
28
 
17
29
  # Turn the object from the ruby type we deal with to a Mongo friendly
18
30
  # type.
@@ -36,7 +48,6 @@ module Mongoid
36
48
  end
37
49
 
38
50
  module ClassMethods
39
-
40
51
  # Convert the object from its mongo friendly ruby type to this type.
41
52
  #
42
53
  # @param [ Object ] object The object to demongoize.
@@ -46,8 +57,6 @@ module Mongoid
46
57
  return if object.blank?
47
58
  if object.is_a?(BSON::Decimal128)
48
59
  object.to_big_decimal
49
- elsif object.numeric?
50
- BigDecimal(object.to_s)
51
60
  elsif object.numeric?
52
61
  object.to_d
53
62
  end
@@ -79,7 +88,7 @@ module Mongoid
79
88
  if object.is_a?(BSON::Decimal128) || object.numeric?
80
89
  object.to_s
81
90
  elsif !object.is_a?(String)
82
- object.try(:to_d)
91
+ object.try(:to_d)&.to_s
83
92
  end
84
93
  end
85
94
  end
@@ -88,5 +97,4 @@ module Mongoid
88
97
  end
89
98
  end
90
99
 
91
- ::BigDecimal.__send__(:include, Mongoid::Extensions::BigDecimal)
92
- ::BigDecimal.extend(Mongoid::Extensions::BigDecimal::ClassMethods)
100
+ BigDecimal.include Mongoid::Extensions::BigDecimal
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Extensions
6
+
7
+ # Adds type-casting behavior to BSON::Binary class.
5
8
  module Binary
6
9
 
7
10
  # Turn the object from the ruby type we deal with to a Mongo friendly
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
5
+
6
+ # Adds type-casting behavior to Mongoid::Boolean class.
4
7
  class Boolean
5
8
 
6
9
  class << self
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Extensions
6
+
7
+ # Adds type-casting behavior to Date class.
5
8
  module Date
6
9
 
7
10
  # Convert the date into a time.
@@ -14,7 +17,7 @@ module Mongoid
14
17
  # configured default time zone corresponding to local midnight of
15
18
  # this date.
16
19
  def __mongoize_time__
17
- ::Time.configured.local(year, month, day)
20
+ ::Time.zone.local(year, month, day)
18
21
  end
19
22
 
20
23
  # Turn the object from the ruby type we deal with to a Mongo friendly
@@ -68,8 +71,10 @@ module Mongoid
68
71
  if object.is_a?(String)
69
72
  # https://jira.mongodb.org/browse/MONGOID-4460
70
73
  time = ::Time.parse(object)
71
- else
74
+ elsif object.respond_to?(:__mongoize_time__)
72
75
  time = object.__mongoize_time__
76
+ else
77
+ nil
73
78
  end
74
79
  rescue ArgumentError
75
80
  nil
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Extensions
6
+
7
+ # Adds type-casting behavior to Time class.
5
8
  module DateTime
6
9
 
7
10
  # Mongoize the date time into a time.
@@ -11,12 +14,7 @@ module Mongoid
11
14
  #
12
15
  # @return [ Time | ActiveSupport::TimeWithZone ] The mongoized time.
13
16
  def __mongoize_time__
14
- if Mongoid.use_activesupport_time_zone?
15
- in_time_zone(::Time.zone)
16
- else
17
- time = to_time
18
- time.respond_to?(:getlocal) ? time.getlocal : time
19
- end
17
+ in_time_zone(::Time.zone)
20
18
  end
21
19
 
22
20
  # Turn the object from the ruby type we deal with to a Mongo friendly
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Extensions
6
+
7
+ # Adds type-casting behavior to BSON::Decimal128 class.
5
8
  module Decimal128
6
9
 
7
10
  # Evolve the decimal128.
@@ -1,18 +1,21 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Extensions
6
+ # Adds type-casting behavior to FalseClass.
5
7
  module FalseClass
6
-
7
8
  # Get the value of the object as a mongo friendly sort value.
8
9
  #
9
10
  # @example Get the object as sort criteria.
10
11
  # object.__sortable__
11
12
  #
12
13
  # @return [ Integer ] 0.
14
+ # @deprecated
13
15
  def __sortable__
14
16
  0
15
17
  end
18
+ Mongoid.deprecate(self, :__sortable__)
16
19
 
17
20
  # Is the passed value a boolean?
18
21
  #
@@ -32,4 +35,4 @@ module Mongoid
32
35
  end
33
36
  end
34
37
 
35
- ::FalseClass.__send__(:include, Mongoid::Extensions::FalseClass)
38
+ FalseClass.include Mongoid::Extensions::FalseClass
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Extensions
6
+
7
+ # Adds type-casting behavior to Float class.
5
8
  module Float
6
9
 
7
10
  # Converts the float into a time as the number of seconds since the epoch.
@@ -11,7 +14,7 @@ module Mongoid
11
14
  #
12
15
  # @return [ Time | ActiveSupport::TimeWithZone ] The time.
13
16
  def __mongoize_time__
14
- ::Time.configured.at(self)
17
+ ::Time.zone.at(self)
15
18
  end
16
19
 
17
20
  # Is the float a number?
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Extensions
6
+
7
+ # Adds type-casting behavior to Hash class.
5
8
  module Hash
6
9
 
7
10
  # Evolves each value in the hash to an object id if it is convertable.
@@ -29,79 +32,20 @@ module Mongoid
29
32
  end
30
33
 
31
34
  # Consolidate the key/values in the hash under an atomic $set.
35
+ # DEPRECATED. This was never intended to be a public API and
36
+ # the functionality will no longer be exposed once this method
37
+ # is eventually removed.
32
38
  #
33
39
  # @example Consolidate the hash.
34
40
  # { name: "Placebo" }.__consolidate__
35
41
  #
36
42
  # @return [ Hash ] A new consolidated hash.
37
- def __consolidate__(klass)
38
- consolidated = {}
39
- each_pair do |key, value|
40
- if key =~ /\$/
41
- value.keys.each do |key2|
42
- value2 = value[key2]
43
- real_key = klass.database_field_name(key2)
44
-
45
- value.delete(key2) if real_key != key2
46
- value[real_key] = value_for(key, klass, real_key, value2)
47
- end
48
- consolidated[key] ||= {}
49
- consolidated[key].update(value)
50
- else
51
- consolidated["$set"] ||= {}
52
- consolidated["$set"].update(key => mongoize_for("$set", klass, key, value))
53
- end
54
- end
55
- consolidated
56
- end
57
-
58
- # Checks whether conditions given in this hash are known to be
59
- # unsatisfiable, i.e., querying with this hash will always return no
60
- # documents.
61
- #
62
- # This method only handles condition shapes that Mongoid itself uses when
63
- # it builds association queries. It does not guarantee that a false
64
- # return value means the condition can produce a non-empty document set -
65
- # only that if the return value is true, the condition always produces
66
- # an empty document set.
67
- #
68
- # @example Unsatisfiable conditions
69
- # {'_id' => {'$in' => []}}._mongoid_unsatisfiable_criteria?
70
- # # => true
71
- #
72
- # @example Conditions which could be satisfiable
73
- # {'_id' => '123'}._mongoid_unsatisfiable_criteria?
74
- # # => false
75
- #
76
- # @example Conditions which are unsatisfiable that this method does not handle
77
- # {'foo' => {'$in' => []}}._mongoid_unsatisfiable_criteria?
78
- # # => false
79
- #
80
- # @return [ true | false ] Whether hash contains known unsatisfiable
81
- # conditions.
82
- # @api private
83
- def _mongoid_unsatisfiable_criteria?
84
- unsatisfiable_criteria = { "_id" => { "$in" => [] }}
85
- return true if self == unsatisfiable_criteria
86
- return false unless length == 1 && keys == %w($and)
87
- value = values.first
88
- value.is_a?(Array) && value.any? do |sub_v|
89
- sub_v.is_a?(Hash) && sub_v._mongoid_unsatisfiable_criteria?
90
- end
91
- end
92
-
93
- # Checks whether conditions given in this hash are known to be
94
- # unsatisfiable, i.e., querying with this hash will always return no
95
- # documents.
96
43
  #
97
- # This method is deprecated. Mongoid now uses
98
- # +_mongoid_unsatisfiable_criteria?+ internally; this method is retained
99
- # for backwards compatibility only.
100
- #
101
- # @return [ true | false ] Whether hash contains known unsatisfiable
102
- # conditions.
103
44
  # @deprecated
104
- alias :blank_criteria? :_mongoid_unsatisfiable_criteria?
45
+ def __consolidate__(klass)
46
+ Mongoid::AtomicUpdatePreparer.prepare(self, klass)
47
+ end
48
+ Mongoid.deprecate(self, :__consolidate__)
105
49
 
106
50
  # Deletes an id value from the hash.
107
51
  #
@@ -109,9 +53,11 @@ module Mongoid
109
53
  # {}.delete_id
110
54
  #
111
55
  # @return [ Object ] The deleted value, or nil.
56
+ # @deprecated
112
57
  def delete_id
113
58
  delete("_id") || delete(:_id) || delete("id") || delete(:id)
114
59
  end
60
+ Mongoid.deprecate(self, :delete_id)
115
61
 
116
62
  # Get the id attribute from this hash, whether it's prefixed with an
117
63
  # underscore or is a symbol.
@@ -120,31 +66,11 @@ module Mongoid
120
66
  # { :_id => 1 }.extract_id
121
67
  #
122
68
  # @return [ Object ] The value of the id.
69
+ # @deprecated
123
70
  def extract_id
124
71
  self["_id"] || self[:_id] || self["id"] || self[:id]
125
72
  end
126
-
127
- # Fetch a nested value via dot syntax.
128
- #
129
- # @example Fetch a nested value via dot syntax.
130
- # { "name" => { "en" => "test" }}.__nested__("name.en")
131
- #
132
- # @param [ String ] string the dot syntax string.
133
- #
134
- # @return [ Object ] The matching value.
135
- def __nested__(string)
136
- keys = string.split(".")
137
- value = self
138
- keys.each do |key|
139
- return nil if value.nil?
140
- value_for_key = value[key]
141
- if value_for_key.nil? && key.to_i.to_s == key
142
- value_for_key = value[key.to_i]
143
- end
144
- value = value_for_key
145
- end
146
- value
147
- end
73
+ Mongoid.deprecate(self, :extract_id)
148
74
 
149
75
  # Turn the object from the ruby type we deal with to a Mongo friendly
150
76
  # type.
@@ -167,28 +93,6 @@ module Mongoid
167
93
  true
168
94
  end
169
95
 
170
- ALLOWED_TO_CRITERIA_METHODS = %i[
171
- all all_in all_of and any_in any_of asc ascending
172
- batch_size between
173
- collation comment cursor_type
174
- desc descending
175
- elem_match eq exists extras
176
- geo_spatial group gt gte
177
- hint
178
- in includes
179
- limit lt lte
180
- max_distance max_scan max_time_ms merge mod
181
- ne near near_sphere nin no_timeout none none_of nor not not_in
182
- offset only or order order_by
183
- project
184
- raw read reorder
185
- scoped skip slice snapshot
186
- text_search type
187
- unscoped unwind
188
- where with_size with_type without
189
- ].freeze
190
- private_constant :ALLOWED_TO_CRITERIA_METHODS
191
-
192
96
  # Convert this hash to a criteria. Will iterate over each keys in the
193
97
  # hash which must correspond to method on a criteria object. The hash
194
98
  # must also include a "klass" key.
@@ -197,64 +101,14 @@ module Mongoid
197
101
  # { klass: Band, where: { name: "Depeche Mode" }.to_criteria
198
102
  #
199
103
  # @return [ Criteria ] The criteria.
104
+ # @deprecated
200
105
  def to_criteria
201
- criteria = Criteria.new(delete(:klass) || delete("klass"))
202
- each_pair do |method, args|
203
- method_sym = method.to_sym
204
- unless ALLOWED_TO_CRITERIA_METHODS.include?(method_sym)
205
- raise ArgumentError, "Method '#{method}' is not allowed in to_criteria"
206
- end
207
- criteria = criteria.public_send(method_sym, args)
208
- end
209
- criteria
106
+ Criteria.from_hash(self)
210
107
  end
108
+ Mongoid.deprecate(self, :to_criteria)
211
109
 
212
110
  private
213
111
 
214
- # Get the value for the provided operator, klass, key and value.
215
- #
216
- # This is necessary for special cases like $rename, $addToSet, $push, $pull and $pop.
217
- #
218
- # @param [ String ] operator The operator.
219
- # @param [ Class ] klass The model class.
220
- # @param [ String | Symbol ] key The field key.
221
- # @param [ Object ] value The original value.
222
- #
223
- # @return [ Object ] Value prepared for the provided operator.
224
- def value_for(operator, klass, key, value)
225
- case operator
226
- when "$rename" then value.to_s
227
- when "$addToSet", "$push", '$pull', '$pop' then value.mongoize
228
- else mongoize_for(operator, klass, key, value)
229
- end
230
- end
231
-
232
- # Mongoize for the klass, key and value.
233
- #
234
- # @api private
235
- #
236
- # @example Mongoize for the klass, field and value.
237
- # {}.mongoize_for("$push", Band, "name", "test")
238
- #
239
- # @param [ String ] operator The operator.
240
- # @param [ Class ] klass The model class.
241
- # @param [ String | Symbol ] key The field key.
242
- # @param [ Object ] value The value to mongoize.
243
- #
244
- # @return [ Object ] The mongoized value.
245
- def mongoize_for(operator, klass, key, value)
246
- field = klass.fields[key.to_s]
247
- if field
248
- val = field.mongoize(value)
249
- if Mongoid::Persistable::LIST_OPERATIONS.include?(operator) && field.resizable?
250
- val = val.first if !value.is_a?(Array)
251
- end
252
- val
253
- else
254
- value
255
- end
256
- end
257
-
258
112
  module ClassMethods
259
113
 
260
114
  # Turn the object from the ruby type we deal with to a Mongo friendly
@@ -268,11 +122,11 @@ module Mongoid
268
122
  # @return [ Hash | nil ] The object mongoized or nil.
269
123
  def mongoize(object)
270
124
  return if object.nil?
271
- if object.is_a?(Hash)
272
- # Need to use transform_values! which maintains the BSON::Document
273
- # instead of transform_values which always returns a hash. To do this,
274
- # we first need to dup the hash.
125
+ case object
126
+ when BSON::Document
275
127
  object.dup.transform_values!(&:mongoize)
128
+ when Hash
129
+ BSON::Document.new(object.transform_values(&:mongoize))
276
130
  end
277
131
  end
278
132
 
@@ -292,5 +146,3 @@ end
292
146
 
293
147
  ::Hash.__send__(:include, Mongoid::Extensions::Hash)
294
148
  ::Hash.extend(Mongoid::Extensions::Hash::ClassMethods)
295
-
296
- ::Mongoid.deprecate(Hash, :blank_criteria)
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Extensions
6
+
7
+ # Adds type-casting behavior to Integer class.
5
8
  module Integer
6
9
 
7
10
  # Converts the integer into a time as the number of seconds since the epoch.
@@ -11,7 +14,7 @@ module Mongoid
11
14
  #
12
15
  # @return [ Time | ActiveSupport::TimeWithZone ] The time.
13
16
  def __mongoize_time__
14
- ::Time.configured.at(self)
17
+ ::Time.zone.at(self)
15
18
  end
16
19
 
17
20
  # Is the integer a number?
@@ -30,9 +33,11 @@ module Mongoid
30
33
  # object.unconvertable_to_bson?
31
34
  #
32
35
  # @return [ true ] If the object is unconvertable.
36
+ # @deprecated
33
37
  def unconvertable_to_bson?
34
38
  true
35
39
  end
40
+ Mongoid.deprecate(self, :unconvertable_to_bson?)
36
41
 
37
42
  module ClassMethods
38
43
 
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Extensions
6
+
7
+ # Adds type-casting behavior to Module class.
5
8
  module Module
6
9
 
7
10
  # Redefine the method. Will undef the method if it exists or simply
@@ -13,7 +16,7 @@ module Mongoid
13
16
  # end
14
17
  #
15
18
  # @param [ String | Symbol ] name The name of the method.
16
- # @param [ Proc ] block The method body.
19
+ # @param &block The method body.
17
20
  #
18
21
  # @return [ Method ] The new method.
19
22
  def re_define_method(name, &block)