mongoid 8.1.9 → 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 (1035) 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 +63 -45
  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 +6 -7
  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 -144
  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 +112 -54
  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 +39 -6
  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 -1
  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 +32 -60
  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 -143
  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 +4 -6
  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 -0
  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 -2
  368. data/lib/mongoid/version.rb +2 -1
  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 -48
  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 -0
  384. data/spec/integration/associations/embeds_one_spec.rb +1 -0
  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 +1 -3
  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 -60
  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 -0
  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 -277
  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 -222
  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 +490 -62
  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 -0
  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/LICENSE +20 -0
  727. data/spec/shared/bin/get-mongodb-download-url +17 -0
  728. data/spec/shared/bin/s3-copy +45 -0
  729. data/spec/shared/bin/s3-upload +69 -0
  730. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  731. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  732. data/spec/shared/lib/mrss/constraints.rb +378 -0
  733. data/spec/shared/lib/mrss/docker_runner.rb +298 -0
  734. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  735. data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
  736. data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
  737. data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
  738. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  739. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  740. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  741. data/spec/shared/lib/mrss/utils.rb +37 -0
  742. data/spec/shared/share/Dockerfile.erb +281 -0
  743. data/spec/shared/share/haproxy-1.conf +16 -0
  744. data/spec/shared/share/haproxy-2.conf +17 -0
  745. data/spec/shared/shlib/config.sh +27 -0
  746. data/spec/shared/shlib/distro.sh +74 -0
  747. data/spec/shared/shlib/server.sh +417 -0
  748. data/spec/shared/shlib/set_env.sh +146 -0
  749. data/spec/spec_helper.rb +26 -28
  750. data/spec/support/authorization.rb +1 -0
  751. data/spec/support/client_registry.rb +1 -0
  752. data/spec/support/constraints.rb +1 -0
  753. data/spec/support/crypt/models.rb +50 -0
  754. data/spec/support/crypt.rb +80 -0
  755. data/spec/support/expectations.rb +1 -0
  756. data/spec/support/feature_sandbox.rb +72 -0
  757. data/spec/support/helpers.rb +1 -0
  758. data/spec/support/immutable_ids.rb +22 -21
  759. data/spec/support/macros.rb +4 -6
  760. data/spec/support/models/account.rb +1 -0
  761. data/spec/support/models/acolyte.rb +1 -0
  762. data/spec/support/models/actor.rb +1 -0
  763. data/spec/support/models/actress.rb +1 -0
  764. data/spec/support/models/address.rb +3 -0
  765. data/spec/support/models/address_component.rb +1 -0
  766. data/spec/support/models/address_number.rb +1 -0
  767. data/spec/support/models/agency.rb +1 -0
  768. data/spec/support/models/agent.rb +1 -0
  769. data/spec/support/models/album.rb +1 -0
  770. data/spec/support/models/alert.rb +1 -0
  771. data/spec/support/models/animal.rb +1 -0
  772. data/spec/support/models/answer.rb +1 -0
  773. data/spec/support/models/appointment.rb +1 -0
  774. data/spec/support/models/armrest.rb +1 -0
  775. data/spec/support/models/array_field.rb +1 -0
  776. data/spec/support/models/article.rb +1 -0
  777. data/spec/support/models/artist.rb +1 -0
  778. data/spec/support/models/artwork.rb +1 -0
  779. data/spec/support/models/audible_sound.rb +1 -0
  780. data/spec/support/models/audio.rb +1 -0
  781. data/spec/support/models/augmentation.rb +1 -0
  782. data/spec/support/models/author.rb +1 -0
  783. data/spec/support/models/baby.rb +1 -0
  784. data/spec/support/models/band.rb +5 -1
  785. data/spec/support/models/bar.rb +1 -0
  786. data/spec/support/models/basic.rb +1 -0
  787. data/spec/support/models/bed.rb +1 -0
  788. data/spec/support/models/big_palette.rb +1 -0
  789. data/spec/support/models/birthday.rb +1 -0
  790. data/spec/support/models/bolt.rb +1 -0
  791. data/spec/support/models/bomb.rb +1 -0
  792. data/spec/support/models/book.rb +1 -0
  793. data/spec/support/models/breed.rb +1 -0
  794. data/spec/support/models/browser.rb +1 -0
  795. data/spec/support/models/building.rb +1 -0
  796. data/spec/support/models/building_address.rb +1 -0
  797. data/spec/support/models/bus.rb +1 -0
  798. data/spec/support/models/business.rb +1 -0
  799. data/spec/support/models/callback_test.rb +1 -0
  800. data/spec/support/models/canvas.rb +1 -0
  801. data/spec/support/models/car.rb +1 -0
  802. data/spec/support/models/cat.rb +1 -0
  803. data/spec/support/models/catalog.rb +1 -0
  804. data/spec/support/models/category.rb +1 -0
  805. data/spec/support/models/child.rb +1 -0
  806. data/spec/support/models/child_doc.rb +1 -0
  807. data/spec/support/models/church.rb +1 -0
  808. data/spec/support/models/circle.rb +1 -0
  809. data/spec/support/models/circuit.rb +1 -0
  810. data/spec/support/models/circus.rb +1 -0
  811. data/spec/support/models/code.rb +1 -0
  812. data/spec/support/models/coding/pull_request.rb +1 -0
  813. data/spec/support/models/coding.rb +1 -0
  814. data/spec/support/models/comment.rb +1 -0
  815. data/spec/support/models/company.rb +1 -0
  816. data/spec/support/models/consumption_period.rb +1 -0
  817. data/spec/support/models/contextable_item.rb +1 -0
  818. data/spec/support/models/contractor.rb +1 -0
  819. data/spec/support/models/cookie.rb +1 -0
  820. data/spec/support/models/country_code.rb +1 -0
  821. data/spec/support/models/courier_job.rb +1 -0
  822. data/spec/support/models/cover.rb +1 -0
  823. data/spec/support/models/crate.rb +1 -0
  824. data/spec/support/models/customer.rb +1 -0
  825. data/spec/support/models/customer_address.rb +1 -0
  826. data/spec/support/models/deed.rb +1 -0
  827. data/spec/support/models/definition.rb +1 -0
  828. data/spec/support/models/delegating_patient.rb +1 -0
  829. data/spec/support/models/description.rb +1 -0
  830. data/spec/support/models/dictionary.rb +1 -0
  831. data/spec/support/models/division.rb +1 -0
  832. data/spec/support/models/doctor.rb +1 -0
  833. data/spec/support/models/dog.rb +1 -0
  834. data/spec/support/models/dokument.rb +1 -0
  835. data/spec/support/models/draft.rb +1 -0
  836. data/spec/support/models/dragon.rb +1 -0
  837. data/spec/support/models/driver.rb +1 -0
  838. data/spec/support/models/drug.rb +1 -0
  839. data/spec/support/models/dungeon.rb +1 -0
  840. data/spec/support/models/edit.rb +1 -0
  841. data/spec/support/models/email.rb +1 -0
  842. data/spec/support/models/employer.rb +1 -0
  843. data/spec/support/models/entry.rb +1 -0
  844. data/spec/support/models/eraser.rb +1 -0
  845. data/spec/support/models/even.rb +1 -0
  846. data/spec/support/models/event.rb +1 -0
  847. data/spec/support/models/exhibition.rb +1 -0
  848. data/spec/support/models/exhibitor.rb +1 -0
  849. data/spec/support/models/explosion.rb +1 -0
  850. data/spec/support/models/eye.rb +1 -0
  851. data/spec/support/models/eye_bowl.rb +1 -0
  852. data/spec/support/models/face.rb +1 -0
  853. data/spec/support/models/fanatic.rb +1 -0
  854. data/spec/support/models/favorite.rb +8 -1
  855. data/spec/support/models/filesystem.rb +1 -0
  856. data/spec/support/models/fire_hydrant.rb +1 -0
  857. data/spec/support/models/firefox.rb +1 -0
  858. data/spec/support/models/fish.rb +1 -0
  859. data/spec/support/models/folder.rb +1 -0
  860. data/spec/support/models/folder_item.rb +1 -0
  861. data/spec/support/models/fruits.rb +1 -0
  862. data/spec/support/models/game.rb +1 -0
  863. data/spec/support/models/ghost.rb +1 -0
  864. data/spec/support/models/guitar.rb +1 -0
  865. data/spec/support/models/hole.rb +1 -0
  866. data/spec/support/models/home.rb +1 -0
  867. data/spec/support/models/house.rb +1 -0
  868. data/spec/support/models/html_writer.rb +1 -0
  869. data/spec/support/models/id_key.rb +1 -0
  870. data/spec/support/models/idnodef.rb +1 -0
  871. data/spec/support/models/image.rb +1 -0
  872. data/spec/support/models/implant.rb +1 -0
  873. data/spec/support/models/instrument.rb +1 -0
  874. data/spec/support/models/item.rb +1 -0
  875. data/spec/support/models/jar.rb +1 -0
  876. data/spec/support/models/kaleidoscope.rb +1 -0
  877. data/spec/support/models/kangaroo.rb +1 -0
  878. data/spec/support/models/label.rb +1 -0
  879. data/spec/support/models/language.rb +1 -0
  880. data/spec/support/models/lat_lng.rb +1 -6
  881. data/spec/support/models/league.rb +1 -0
  882. data/spec/support/models/learner.rb +1 -0
  883. data/spec/support/models/line_item.rb +1 -0
  884. data/spec/support/models/location.rb +1 -0
  885. data/spec/support/models/login.rb +1 -0
  886. data/spec/support/models/manufacturer.rb +1 -0
  887. data/spec/support/models/meat.rb +1 -0
  888. data/spec/support/models/membership.rb +1 -0
  889. data/spec/support/models/message.rb +1 -0
  890. data/spec/support/models/minim.rb +1 -0
  891. data/spec/support/models/mixed_drink.rb +1 -0
  892. data/spec/support/models/mop.rb +1 -0
  893. data/spec/support/models/movie.rb +1 -0
  894. data/spec/support/models/my_hash.rb +1 -0
  895. data/spec/support/models/name.rb +1 -0
  896. data/spec/support/models/name_only.rb +1 -0
  897. data/spec/support/models/node.rb +1 -0
  898. data/spec/support/models/note.rb +1 -0
  899. data/spec/support/models/nut.rb +1 -0
  900. data/spec/support/models/odd.rb +1 -0
  901. data/spec/support/models/order.rb +1 -0
  902. data/spec/support/models/ordered_post.rb +1 -0
  903. data/spec/support/models/ordered_preference.rb +1 -0
  904. data/spec/support/models/oscar.rb +1 -0
  905. data/spec/support/models/other_owner_object.rb +1 -0
  906. data/spec/support/models/override.rb +1 -0
  907. data/spec/support/models/ownable.rb +1 -0
  908. data/spec/support/models/owner.rb +1 -0
  909. data/spec/support/models/pack.rb +1 -0
  910. data/spec/support/models/page.rb +1 -0
  911. data/spec/support/models/page_question.rb +1 -0
  912. data/spec/support/models/palette.rb +1 -0
  913. data/spec/support/models/parent.rb +1 -0
  914. data/spec/support/models/parent_doc.rb +1 -0
  915. data/spec/support/models/passport.rb +1 -0
  916. data/spec/support/models/patient.rb +1 -0
  917. data/spec/support/models/pdf_writer.rb +1 -0
  918. data/spec/support/models/pencil.rb +1 -0
  919. data/spec/support/models/person.rb +1 -0
  920. data/spec/support/models/pet.rb +1 -0
  921. data/spec/support/models/pet_owner.rb +1 -0
  922. data/spec/support/models/phone.rb +1 -0
  923. data/spec/support/models/piano.rb +1 -0
  924. data/spec/support/models/pizza.rb +1 -0
  925. data/spec/support/models/player.rb +1 -0
  926. data/spec/support/models/post.rb +1 -0
  927. data/spec/support/models/post_genre.rb +1 -0
  928. data/spec/support/models/powerup.rb +1 -0
  929. data/spec/support/models/preference.rb +1 -0
  930. data/spec/support/models/princess.rb +1 -0
  931. data/spec/support/models/product.rb +1 -0
  932. data/spec/support/models/profile.rb +1 -0
  933. data/spec/support/models/pronunciation.rb +1 -0
  934. data/spec/support/models/pub.rb +1 -0
  935. data/spec/support/models/publication/encyclopedia.rb +1 -0
  936. data/spec/support/models/publication/review.rb +1 -0
  937. data/spec/support/models/publication.rb +1 -0
  938. data/spec/support/models/purchase.rb +1 -0
  939. data/spec/support/models/purchased_item.rb +1 -0
  940. data/spec/support/models/question.rb +1 -0
  941. data/spec/support/models/quiz.rb +1 -0
  942. data/spec/support/models/rating.rb +1 -0
  943. data/spec/support/models/record.rb +1 -0
  944. data/spec/support/models/registry.rb +1 -0
  945. data/spec/support/models/role.rb +1 -0
  946. data/spec/support/models/root_category.rb +1 -0
  947. data/spec/support/models/sandbox/app/models/app_models_message.rb +4 -0
  948. data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
  949. data/spec/support/models/sandbox/sandbox_message.rb +4 -0
  950. data/spec/support/models/sandbox/sandbox_user.rb +4 -0
  951. data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
  952. data/spec/support/models/sandwich.rb +1 -0
  953. data/spec/support/models/scheduler.rb +1 -0
  954. data/spec/support/models/school.rb +1 -0
  955. data/spec/support/models/scribe.rb +1 -0
  956. data/spec/support/models/sealer.rb +1 -0
  957. data/spec/support/models/seat.rb +1 -0
  958. data/spec/support/models/seo.rb +1 -0
  959. data/spec/support/models/series.rb +1 -0
  960. data/spec/support/models/server.rb +1 -0
  961. data/spec/support/models/service.rb +1 -0
  962. data/spec/support/models/shape.rb +1 -0
  963. data/spec/support/models/shelf.rb +1 -0
  964. data/spec/support/models/shield.rb +1 -0
  965. data/spec/support/models/shipment_address.rb +1 -0
  966. data/spec/support/models/shipping_container.rb +1 -0
  967. data/spec/support/models/shipping_pack.rb +1 -0
  968. data/spec/support/models/shirt.rb +1 -0
  969. data/spec/support/models/shop.rb +1 -0
  970. data/spec/support/models/short_agent.rb +1 -0
  971. data/spec/support/models/short_quiz.rb +1 -0
  972. data/spec/support/models/simple.rb +1 -0
  973. data/spec/support/models/slave.rb +1 -0
  974. data/spec/support/models/song.rb +1 -0
  975. data/spec/support/models/sound.rb +1 -0
  976. data/spec/support/models/spacer.rb +1 -0
  977. data/spec/support/models/square.rb +1 -0
  978. data/spec/support/models/staff.rb +1 -0
  979. data/spec/support/models/store_as_dup_test1.rb +1 -0
  980. data/spec/support/models/store_as_dup_test2.rb +1 -0
  981. data/spec/support/models/store_as_dup_test3.rb +1 -0
  982. data/spec/support/models/store_as_dup_test4.rb +1 -0
  983. data/spec/support/models/strategy.rb +1 -0
  984. data/spec/support/models/student.rb +1 -0
  985. data/spec/support/models/sub_item.rb +1 -0
  986. data/spec/support/models/subscription.rb +1 -0
  987. data/spec/support/models/survey.rb +1 -0
  988. data/spec/support/models/symptom.rb +1 -0
  989. data/spec/support/models/system_role.rb +1 -0
  990. data/spec/support/models/tag.rb +1 -0
  991. data/spec/support/models/target.rb +1 -0
  992. data/spec/support/models/template.rb +1 -0
  993. data/spec/support/models/thing.rb +1 -0
  994. data/spec/support/models/threadlocker.rb +1 -0
  995. data/spec/support/models/title.rb +1 -0
  996. data/spec/support/models/tool.rb +1 -0
  997. data/spec/support/models/topping.rb +1 -0
  998. data/spec/support/models/toy.rb +1 -0
  999. data/spec/support/models/track.rb +1 -0
  1000. data/spec/support/models/translation.rb +1 -0
  1001. data/spec/support/models/tree.rb +1 -0
  1002. data/spec/support/models/truck.rb +1 -0
  1003. data/spec/support/models/updatable.rb +1 -0
  1004. data/spec/support/models/user.rb +1 -0
  1005. data/spec/support/models/user_account.rb +1 -0
  1006. data/spec/support/models/validation_callback.rb +1 -0
  1007. data/spec/support/models/vehicle.rb +1 -0
  1008. data/spec/support/models/version.rb +1 -0
  1009. data/spec/support/models/vertex.rb +1 -0
  1010. data/spec/support/models/vet_visit.rb +1 -0
  1011. data/spec/support/models/video.rb +1 -0
  1012. data/spec/support/models/video_game.rb +1 -0
  1013. data/spec/support/models/washer.rb +1 -0
  1014. data/spec/support/models/weapon.rb +1 -0
  1015. data/spec/support/models/wiki_page.rb +1 -0
  1016. data/spec/support/models/word.rb +1 -0
  1017. data/spec/support/models/word_origin.rb +1 -0
  1018. data/spec/support/models/writer.rb +1 -0
  1019. data/spec/support/rails_mock.rb +32 -0
  1020. data/spec/support/shared/time.rb +3 -21
  1021. data/spec/support/sinatra_mock.rb +7 -0
  1022. data/spec/support/spec_config.rb +30 -9
  1023. data.tar.gz.sig +0 -0
  1024. metadata +171 -37
  1025. metadata.gz.sig +1 -0
  1026. data/lib/mongoid/association/referenced/eager.rb +0 -163
  1027. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -113
  1028. data/lib/mongoid/contextual/geo_near.rb +0 -236
  1029. data/lib/mongoid/errors/invalid_session_use.rb +0 -21
  1030. data/lib/mongoid/errors/invalid_storage_parent.rb +0 -27
  1031. data/lib/mongoid/query_cache.rb +0 -68
  1032. data/spec/mongoid/contextual/geo_near_spec.rb +0 -471
  1033. data/spec/mongoid/extensions_spec.rb +0 -43
  1034. data/spec/mongoid/query_cache_middleware_spec.rb +0 -50
  1035. data/spec/mongoid/query_cache_spec.rb +0 -865
@@ -1,3 +1,4 @@
1
+ # rubocop:todo all
1
2
  require "mongoid/association/eager_loadable"
2
3
 
3
4
  module Mongoid
@@ -81,9 +82,9 @@ module Mongoid
81
82
  # @param [ Class ] klass Mongoid model class to instantiate documents.
82
83
  # All records obtained from the database will be converted to an
83
84
  # instance of this class, if possible.
84
- # @param [ Mongoid::Criteria ] criteria. Criteria that specifies which
85
+ # @param [ Mongoid::Criteria ] criteria Criteria that specifies which
85
86
  # documents should be loaded.
86
- # @param [ Concurrent::AbstractExecutorService ] executor. Executor that
87
+ # @param [ Concurrent::AbstractExecutorService ] executor Executor that
87
88
  # is capable of running `Concurrent::Promises::Future` instances.
88
89
  def initialize(view, klass, criteria, executor: self.class.executor)
89
90
  @view = view
@@ -1,15 +1,20 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
4
+ require 'mongoid/atomic_update_preparer'
3
5
  require "mongoid/contextual/mongo/documents_loader"
4
6
  require "mongoid/contextual/atomic"
5
7
  require "mongoid/contextual/aggregable/mongo"
6
8
  require "mongoid/contextual/command"
7
- require "mongoid/contextual/geo_near"
8
9
  require "mongoid/contextual/map_reduce"
9
10
  require "mongoid/association/eager_loadable"
10
11
 
11
12
  module Mongoid
12
13
  module Contextual
14
+
15
+ # Context object used for performing bulk query and persistence
16
+ # operations on documents which are persisted in the database and
17
+ # have not been loaded into application memory.
13
18
  class Mongo
14
19
  extend Forwardable
15
20
  include Enumerable
@@ -18,8 +23,6 @@ module Mongoid
18
23
  include Association::EagerLoadable
19
24
  include Queryable
20
25
 
21
- Mongoid.deprecate(self, :geo_near)
22
-
23
26
  # Options constant.
24
27
  OPTIONS = [ :hint,
25
28
  :limit,
@@ -73,6 +76,8 @@ module Mongoid
73
76
  if valid_for_count_documents?
74
77
  view.count_documents(options)
75
78
  else
79
+ # TODO: Remove this when we remove the deprecated for_js API.
80
+ # https://jira.mongodb.org/browse/MONGOID-5681
76
81
  view.count(options)
77
82
  end
78
83
  end
@@ -91,7 +96,11 @@ module Mongoid
91
96
  # @return [ Integer ] The number of matches.
92
97
  def estimated_count(options = {})
93
98
  unless self.criteria.selector.empty?
94
- raise Mongoid::Errors::InvalidEstimatedCountCriteria.new(self.klass)
99
+ if klass.default_scoping?
100
+ raise Mongoid::Errors::InvalidEstimatedCountScoping.new(self.klass)
101
+ else
102
+ raise Mongoid::Errors::InvalidEstimatedCountCriteria.new(self.klass)
103
+ end
95
104
  end
96
105
  view.estimated_document_count(options)
97
106
  end
@@ -131,19 +140,11 @@ module Mongoid
131
140
  #
132
141
  # @return [ Array<Object> ] The distinct values for the field.
133
142
  def distinct(field)
134
- name = if Mongoid.legacy_pluck_distinct
135
- klass.database_field_name(field)
136
- else
137
- klass.cleanse_localized_field_names(field)
138
- end
143
+ name = klass.cleanse_localized_field_names(field)
139
144
 
140
145
  view.distinct(name).map do |value|
141
- if Mongoid.legacy_pluck_distinct
142
- value.class.demongoize(value)
143
- else
144
- is_translation = "#{name}_translations" == field.to_s
145
- recursive_demongoize(name, value, is_translation)
146
- end
146
+ is_translation = "#{name}_translations" == field.to_s
147
+ recursive_demongoize(name, value, is_translation)
147
148
  end
148
149
  end
149
150
 
@@ -259,29 +260,6 @@ module Mongoid
259
260
  end
260
261
  end
261
262
 
262
- # Execute a $geoNear command against the database.
263
- #
264
- # @example Find documents close to 10, 10.
265
- # context.geo_near([ 10, 10 ])
266
- #
267
- # @example Find with spherical distance.
268
- # context.geo_near([ 10, 10 ]).spherical
269
- #
270
- # @example Find with a max distance.
271
- # context.geo_near([ 10, 10 ]).max_distance(0.5)
272
- #
273
- # @example Provide a distance multiplier.
274
- # context.geo_near([ 10, 10 ]).distance_multiplier(1133)
275
- #
276
- # @param [ Array<Float> ] coordinates The coordinates.
277
- #
278
- # @return [ GeoNear ] The GeoNear command.
279
- #
280
- # @deprecated
281
- def geo_near(coordinates)
282
- GeoNear.new(collection, criteria, coordinates)
283
- end
284
-
285
263
  # Create the new Mongo context. This delegates operations to the
286
264
  # underlying driver.
287
265
  #
@@ -360,22 +338,13 @@ module Mongoid
360
338
  normalized_select = fields.inject({}) do |hash, f|
361
339
  db_fn = klass.database_field_name(f)
362
340
  normalized_field_names.push(db_fn)
363
-
364
- if Mongoid.legacy_pluck_distinct
365
- hash[db_fn] = true
366
- else
367
- hash[klass.cleanse_localized_field_names(f)] = true
368
- end
341
+ hash[klass.cleanse_localized_field_names(f)] = true
369
342
  hash
370
343
  end
371
344
 
372
345
  view.projection(normalized_select).reduce([]) do |plucked, doc|
373
346
  values = normalized_field_names.map do |n|
374
- if Mongoid.legacy_pluck_distinct
375
- n.include?('.') ? doc[n.partition('.')[0]] : doc[n]
376
- else
377
- extract_value(doc, n)
378
- end
347
+ extract_value(doc, n)
379
348
  end
380
349
  plucked << (values.size == 1 ? values.first : values)
381
350
  end
@@ -419,7 +388,7 @@ module Mongoid
419
388
  #
420
389
  # @return [ Document ] The document.
421
390
  #
422
- # @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
391
+ # @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
423
392
  # documents to take.
424
393
  def take!
425
394
  # Do to_a first so that the Mongo#first method is not used and the
@@ -601,7 +570,7 @@ module Mongoid
601
570
  #
602
571
  # @return [ Document ] The first document.
603
572
  #
604
- # @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
573
+ # @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
605
574
  # documents available.
606
575
  def first!
607
576
  first || raise_document_not_found_error
@@ -643,7 +612,7 @@ module Mongoid
643
612
  #
644
613
  # @return [ Document ] The last document.
645
614
  #
646
- # @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
615
+ # @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
647
616
  # documents available.
648
617
  def last!
649
618
  last || raise_document_not_found_error
@@ -667,7 +636,7 @@ module Mongoid
667
636
  #
668
637
  # @return [ Document ] The second document.
669
638
  #
670
- # @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
639
+ # @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
671
640
  # documents available.
672
641
  def second!
673
642
  second || raise_document_not_found_error
@@ -691,7 +660,7 @@ module Mongoid
691
660
  #
692
661
  # @return [ Document ] The third document.
693
662
  #
694
- # @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
663
+ # @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
695
664
  # documents available.
696
665
  def third!
697
666
  third || raise_document_not_found_error
@@ -715,7 +684,7 @@ module Mongoid
715
684
  #
716
685
  # @return [ Document ] The fourth document.
717
686
  #
718
- # @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
687
+ # @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
719
688
  # documents available.
720
689
  def fourth!
721
690
  fourth || raise_document_not_found_error
@@ -739,7 +708,7 @@ module Mongoid
739
708
  #
740
709
  # @return [ Document ] The fifth document.
741
710
  #
742
- # @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
711
+ # @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
743
712
  # documents available.
744
713
  def fifth!
745
714
  fifth || raise_document_not_found_error
@@ -765,7 +734,7 @@ module Mongoid
765
734
  #
766
735
  # @return [ Document ] The second to last document.
767
736
  #
768
- # @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
737
+ # @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
769
738
  # documents available.
770
739
  def second_to_last!
771
740
  second_to_last || raise_document_not_found_error
@@ -791,7 +760,7 @@ module Mongoid
791
760
  #
792
761
  # @return [ Document ] The third to last document.
793
762
  #
794
- # @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
763
+ # @raise [ Mongoid::Errors::DocumentNotFound ] raises when there are no
795
764
  # documents available.
796
765
  def third_to_last!
797
766
  third_to_last || raise_document_not_found_error
@@ -823,8 +792,8 @@ module Mongoid
823
792
  # @return [ true | false ] If the update succeeded.
824
793
  def update_documents(attributes, method = :update_one, opts = {})
825
794
  return false unless attributes
826
- attributes = Hash[attributes.map { |k, v| [klass.database_field_name(k.to_s), v] }]
827
- view.send(method, attributes.__consolidate__(klass), opts)
795
+
796
+ view.send(method, AtomicUpdatePreparer.prepare(attributes, klass), opts)
828
797
  end
829
798
 
830
799
  # Apply the field limitations.
@@ -1057,6 +1026,9 @@ module Mongoid
1057
1026
  #
1058
1027
  # @return [ true | false ] whether or not the current context
1059
1028
  # excludes a `$where` operator.
1029
+ #
1030
+ # TODO: Remove this method when we remove the deprecated for_js API.
1031
+ # https://jira.mongodb.org/browse/MONGOID-5681
1060
1032
  def valid_for_count_documents?(hash = view.filter)
1061
1033
  # Note that `view.filter` is a BSON::Document, and all keys in a
1062
1034
  # BSON::Document are strings; we don't need to worry about symbol
@@ -1,38 +1,21 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  require "mongoid/contextual/aggregable/none"
4
5
 
5
6
  module Mongoid
6
7
  module Contextual
8
+
9
+ # Context object used for performing bulk query and persistence
10
+ # operations on a null set. The method interface of this class
11
+ # is consistent with Mongoid::Contextual::Mongo.
7
12
  class None
8
13
  include Enumerable
9
- alias :old_sum :sum
10
-
11
14
  include Aggregable::None
12
15
  include Queryable
13
16
 
14
17
  attr_reader :criteria, :klass
15
18
 
16
- alias :new_sum :sum
17
-
18
- # Get the sum in the null context.
19
- #
20
- # @example Get the sum of null context.
21
- # context.sum(_field)
22
- #
23
- # @param [ Symbol ] _field The field to sum.
24
- #
25
- # @return [ Integer | Symbol ] If Mongoid.broken_aggregables is
26
- # set to false, this will always be zero. Otherwise, it will return the
27
- # field name as a symbol.
28
- def sum(_field = nil)
29
- if Mongoid.broken_aggregables
30
- old_sum(_field)
31
- else
32
- new_sum(_field)
33
- end
34
- end
35
-
36
19
  # Check if the context is equal to the other object.
37
20
  #
38
21
  # @example Check equality.
@@ -155,7 +138,7 @@ module Mongoid
155
138
  # @example Get the first document in null context.
156
139
  # context.first!
157
140
  #
158
- # @raises [ Mongoid::Errors::DocumentNotFound ] always raises.
141
+ # @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
159
142
  def first!
160
143
  raise_document_not_found_error
161
144
  end
@@ -177,7 +160,7 @@ module Mongoid
177
160
  # @example Get the last document in null context.
178
161
  # context.last!
179
162
  #
180
- # @raises [ Mongoid::Errors::DocumentNotFound ] always raises.
163
+ # @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
181
164
  def last!
182
165
  raise_document_not_found_error
183
166
  end
@@ -199,7 +182,7 @@ module Mongoid
199
182
  # @example Take a document in null context.
200
183
  # context.take!
201
184
  #
202
- # @raises [ Mongoid::Errors::DocumentNotFound ] always raises.
185
+ # @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
203
186
  def take!
204
187
  raise_document_not_found_error
205
188
  end
@@ -219,7 +202,7 @@ module Mongoid
219
202
  # @example Get the second document in null context.
220
203
  # context.second!
221
204
  #
222
- # @raises [ Mongoid::Errors::DocumentNotFound ] always raises.
205
+ # @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
223
206
  def second!
224
207
  raise_document_not_found_error
225
208
  end
@@ -239,7 +222,7 @@ module Mongoid
239
222
  # @example Get the third document in null context.
240
223
  # context.third!
241
224
  #
242
- # @raises [ Mongoid::Errors::DocumentNotFound ] always raises.
225
+ # @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
243
226
  def third!
244
227
  raise_document_not_found_error
245
228
  end
@@ -259,7 +242,7 @@ module Mongoid
259
242
  # @example Get the fourth document in null context.
260
243
  # context.fourth!
261
244
  #
262
- # @raises [ Mongoid::Errors::DocumentNotFound ] always raises.
245
+ # @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
263
246
  def fourth!
264
247
  raise_document_not_found_error
265
248
  end
@@ -279,7 +262,7 @@ module Mongoid
279
262
  # @example Get the fifth document in null context.
280
263
  # context.fifth!
281
264
  #
282
- # @raises [ Mongoid::Errors::DocumentNotFound ] always raises.
265
+ # @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
283
266
  def fifth!
284
267
  raise_document_not_found_error
285
268
  end
@@ -299,7 +282,7 @@ module Mongoid
299
282
  # @example Get the second to last document in null context.
300
283
  # context.second_to_last!
301
284
  #
302
- # @raises [ Mongoid::Errors::DocumentNotFound ] always raises.
285
+ # @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
303
286
  def second_to_last!
304
287
  raise_document_not_found_error
305
288
  end
@@ -319,7 +302,7 @@ module Mongoid
319
302
  # @example Get the third to last document in null context.
320
303
  # context.third_to_last!
321
304
  #
322
- # @raises [ Mongoid::Errors::DocumentNotFound ] always raises.
305
+ # @raise [ Mongoid::Errors::DocumentNotFound ] always raises.
323
306
  def third_to_last!
324
307
  raise_document_not_found_error
325
308
  end
@@ -331,7 +314,7 @@ module Mongoid
331
314
  #
332
315
  # @return [ Integer ] Always zero.
333
316
  def length
334
- Mongoid.broken_aggregables ? 0 : entries.length
317
+ entries.length
335
318
  end
336
319
  alias :size :length
337
320
 
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Contextual
6
+
7
+ # Mixin module which adds methods to Mongoid::Criteria that
8
+ # indicate the criteria query result will be an empty set.
5
9
  module Queryable
6
10
 
7
11
  # @attribute [r] collection The collection to query against.
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  require "mongoid/contextual/queryable"
4
5
  require "mongoid/contextual/mongo"
@@ -6,6 +7,9 @@ require "mongoid/contextual/memory"
6
7
  require "mongoid/contextual/none"
7
8
 
8
9
  module Mongoid
10
+
11
+ # Parent mixin module which adds aggregation (#sum, #avg, etc.) and
12
+ # atomic (#set, #unset, #push, etc.) behavior to Mongoid::Criteria.
9
13
  module Contextual
10
14
  extend Forwardable
11
15
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
 
@@ -36,8 +37,8 @@ module Mongoid
36
37
  # hash. This is used recursively so that embedded associations are cloned
37
38
  # safely.
38
39
  #
39
- # @param klass [ Class ] The class of the document to create.
40
- # @param attrs [ Hash ] The hash of the attributes.
40
+ # @param [ Class ] klass The class of the document to create.
41
+ # @param [ Hash ] attrs The hash of the attributes.
41
42
  #
42
43
  # @return [ Document ] The new document.
43
44
  def self.clone_with_hash(klass, attrs)
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  class Criteria
6
+
7
+ # Mixin module included in Mongoid::Criteria which adds the ability
8
+ # to find document by id.
5
9
  module Findable
6
10
 
7
11
  # Execute the criteria or raise an error if no documents found.
@@ -10,7 +14,8 @@ module Mongoid
10
14
  # criteria.execute_or_raise(id)
11
15
  #
12
16
  # @param [ Object ] ids The arguments passed.
13
- # @param [ true | false ] multi Whether there arguments were a list.
17
+ # @param [ true | false ] multi Whether there arguments were a list,
18
+ # and therefore the return value should be an array.
14
19
  #
15
20
  # @raise [ Errors::DocumentNotFound ] If nothing returned.
16
21
  #
@@ -36,9 +41,9 @@ module Mongoid
36
41
  #
37
42
  # @return [ Document | Array<Document> ] The matching document(s).
38
43
  def find(*args)
39
- ids = args.__find_args__
44
+ ids = prepare_ids_for_find(args)
40
45
  raise_invalid if ids.any?(&:nil?)
41
- for_ids(ids).execute_or_raise(ids, args.multi_arged?)
46
+ for_ids(ids).execute_or_raise(ids, multi_args?(args))
42
47
  end
43
48
 
44
49
  # Adds a criterion to the +Criteria+ that specifies an id that must be matched.
@@ -104,7 +109,7 @@ module Mongoid
104
109
  from_database_selector(ids).entries
105
110
  end
106
111
 
107
- private def from_database_selector(ids)
112
+ def from_database_selector(ids)
108
113
  if ids.size > 1
109
114
  any_in(_id: ids)
110
115
  else
@@ -129,6 +134,41 @@ module Mongoid
129
134
  end
130
135
  end
131
136
 
137
+ # Convert args to the +#find+ method into a flat array of ids.
138
+ #
139
+ # @example Get the ids.
140
+ # prepare_ids_for_find([ 1, [ 2, 3 ] ])
141
+ #
142
+ # @param [ Array<Object> ] args The arguments.
143
+ #
144
+ # @return [ Array ] The array of ids.
145
+ def prepare_ids_for_find(args)
146
+ args.flat_map do |arg|
147
+ case arg
148
+ when Array, Set
149
+ prepare_ids_for_find(arg)
150
+ when Range
151
+ arg.begin&.numeric? && arg.end&.numeric? ? arg.to_a : arg
152
+ else
153
+ arg
154
+ end
155
+ end.uniq(&:to_s)
156
+ end
157
+
158
+ # Indicates whether the given arguments array is a list of values.
159
+ # Used by the +find+ method to determine whether to return an array
160
+ # or single value.
161
+ #
162
+ # @example Are these arguments a list of values?
163
+ # multi_args?([ 1, 2, 3 ]) #=> true
164
+ #
165
+ # @param [ Array ] args The arguments.
166
+ #
167
+ # @return [ true | false ] Whether the arguments are a list.
168
+ def multi_args?(args)
169
+ args.size > 1 || !args.first.is_a?(Hash) && args.first.resizable?
170
+ end
171
+
132
172
  # Convenience method of raising an invalid options error.
133
173
  #
134
174
  # @example Raise the error.
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  class Criteria
@@ -32,16 +33,16 @@ module Mongoid
32
33
 
33
34
  # Get a list of criteria that are to be executed for eager loading.
34
35
  #
35
- # @return [ Array<Association> ] The inclusions.
36
+ # @return [ Array<Mongoid::Association::Relatable> ] The inclusions.
36
37
  def inclusions
37
38
  @inclusions ||= []
38
39
  end
39
40
 
40
41
  # Set the inclusions for the criteria.
41
42
  #
42
- # @param [ Array<Association> ] value The inclusions.
43
+ # @param [ Array<Mongoid::Association::Relatable> ] value The inclusions.
43
44
  #
44
- # @return [ Array<Association> ] The new inclusions.
45
+ # @return [ Array<Mongoid::Association::Relatable> ] The new inclusions.
45
46
  def inclusions=(value)
46
47
  @inclusions = value
47
48
  end
@@ -50,7 +51,7 @@ module Mongoid
50
51
 
51
52
  # Add an inclusion definition to the list of inclusions for the criteria.
52
53
  #
53
- # @param [ Association ] association The association.
54
+ # @param [ Mongoid::Association::Relatable ] association The association metadata.
54
55
  # @param [ String ] parent The name of the association above this one in
55
56
  # the inclusion tree, if it is a nested inclusion.
56
57
  def add_inclusion(association, parent = nil)
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  class Criteria
6
+
7
+ # Mixin module included in Mongoid::Criteria which adds custom
8
+ # +#inspect+ method functionality.
5
9
  module Inspectable
6
10
 
7
11
  # Get a pretty string representation of the criteria, including the
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  class Criteria
6
+
7
+ # Mixin module for Mongoid::Criteria which adds custom
8
+ # Marshal.dump functionality.
5
9
  module Marshalable
6
10
 
7
11
  # Provides the data needed to Marshal.dump a criteria.
@@ -1,7 +1,12 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  class Criteria
6
+
7
+ # Mixin module for Mongoid::Criteria which adds the ability
8
+ # to build or create new documents with attributes initialized
9
+ # to the conditions of the criteria.
5
10
  module Modifiable
6
11
 
7
12
  # @attribute [r] create_attrs Additional attributes to add to the Document upon creation.
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  class Criteria
@@ -1,7 +1,12 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  class Criteria
6
+
7
+ # Mixin module for Mongoid::Criteria which adds strong
8
+ # parameters validation when using ActionController::Parameters
9
+ # objects as arguments to condition methods.
5
10
  module Permission
6
11
 
7
12
  [:all,
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  class Criteria
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  class Criteria
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  class Criteria
5
6
  module Queryable
6
7
  module Extensions
7
8
 
8
- # The array module adds custom behavior for Origin onto the Array class.
9
+ # Adds query type-casting behavior to Array class.
9
10
  module Array
10
11
 
11
12
  # Combine the two objects using the add strategy.
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  require "bigdecimal"
4
5
 
@@ -7,8 +8,7 @@ module Mongoid
7
8
  module Queryable
8
9
  module Extensions
9
10
 
10
- # The big decimal module adds custom behavior for Origin onto the
11
- # BigDecimal class.
11
+ # Adds query type-casting behavior to BigDecimal class.
12
12
  module BigDecimal
13
13
  module ClassMethods
14
14
 
@@ -31,9 +31,7 @@ module Mongoid
31
31
  else
32
32
  obj.to_s
33
33
  end
34
- # Always return on string for backwards compatibility with querying
35
- # string-backed BigDecimal fields.
36
- when BSON::Decimal128, String then obj
34
+ when BSON::Decimal128 then obj
37
35
  else
38
36
  if obj.numeric?
39
37
  if Mongoid.map_big_decimal_to_decimal128
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  class Criteria
5
6
  module Queryable
6
7
  module Extensions
7
8
 
8
- # This module contains extensions for boolean selection.
9
+ # Adds query type-casting behavior to Mongoid::Boolean class.
9
10
  module Boolean
10
11
  module ClassMethods
11
12