mongoid 8.1.13 → 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 (1031) 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 -31
  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 +20 -9
  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 +11 -41
  34. data/lib/mongoid/association/nested/nested_buildable.rb +32 -14
  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 +132 -204
  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 -153
  104. data/lib/mongoid/contextual/aggregable/memory.rb +3 -5
  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 +52 -60
  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 -12
  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 -136
  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 -2
  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 +2 -6
  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 +19 -5
  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 +33 -8
  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 -16
  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 -33
  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 -17
  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 -66
  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 +3 -17
  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 +3 -12
  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/regex.yml +0 -21
  418. data/spec/integration/matcher_operator_data/size.yml +0 -3
  419. data/spec/integration/matcher_operator_data/type.yml +0 -6
  420. data/spec/integration/matcher_operator_data/type_array.yml +0 -1
  421. data/spec/integration/matcher_operator_data/type_decimal.yml +0 -4
  422. data/spec/integration/matcher_operator_spec.rb +1 -0
  423. data/spec/integration/matcher_spec.rb +21 -66
  424. data/spec/integration/persistence/range_field_spec.rb +1 -0
  425. data/spec/integration/server_query_spec.rb +1 -0
  426. data/spec/integration/shardable_spec.rb +1 -0
  427. data/spec/integration/stringified_symbol_field_spec.rb +1 -0
  428. data/spec/lite_spec_helper.rb +36 -10
  429. data/spec/mongoid/association/accessors_spec.rb +11 -28
  430. data/spec/mongoid/association/auto_save_spec.rb +1 -0
  431. data/spec/mongoid/association/builders_spec.rb +1 -0
  432. data/spec/mongoid/association/constrainable_spec.rb +1 -0
  433. data/spec/mongoid/association/counter_cache_spec.rb +1 -0
  434. data/spec/mongoid/association/depending_spec.rb +1 -0
  435. data/spec/mongoid/association/eager_spec.rb +52 -24
  436. data/spec/mongoid/association/embedded/cyclic_spec.rb +1 -0
  437. data/spec/mongoid/association/embedded/dirty_spec.rb +1 -0
  438. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +1 -0
  439. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +1 -0
  440. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +1 -0
  441. data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -7
  442. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -0
  443. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +1 -0
  444. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1 -0
  445. data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -2
  446. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +4 -7
  447. data/spec/mongoid/association/embedded/embeds_many_spec.rb +1 -0
  448. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -0
  449. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +1 -0
  450. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1 -0
  451. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -0
  452. data/spec/mongoid/association/embedded/embeds_one_models.rb +6 -1
  453. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -1
  454. data/spec/mongoid/association/embedded/embeds_one_spec.rb +1 -0
  455. data/spec/mongoid/association/macros_spec.rb +1 -0
  456. data/spec/mongoid/association/nested/many_spec.rb +1 -0
  457. data/spec/mongoid/association/nested/one_spec.rb +1 -0
  458. data/spec/mongoid/association/options_spec.rb +1 -0
  459. data/spec/mongoid/association/polymorphic_spec.rb +1 -0
  460. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +1 -0
  461. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +1 -0
  462. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +1 -0
  463. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1 -4
  464. data/spec/mongoid/association/referenced/belongs_to_models.rb +1 -0
  465. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +2 -1
  466. data/spec/mongoid/association/referenced/belongs_to_spec.rb +1 -0
  467. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -0
  468. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +2 -1
  469. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +1 -0
  470. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -0
  471. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -79
  472. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +1 -0
  473. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -1
  474. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1 -0
  475. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -0
  476. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +1 -0
  477. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +1 -0
  478. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -0
  479. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
  480. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1090 -2152
  481. data/spec/mongoid/association/referenced/has_many_models.rb +1 -0
  482. data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -1
  483. data/spec/mongoid/association/referenced/has_many_spec.rb +1 -0
  484. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -0
  485. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +1 -0
  486. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +1 -0
  487. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1 -0
  488. data/spec/mongoid/association/referenced/has_one_models.rb +1 -0
  489. data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -1
  490. data/spec/mongoid/association/referenced/has_one_spec.rb +1 -0
  491. data/spec/mongoid/association/reflections_spec.rb +1 -0
  492. data/spec/mongoid/association/syncable_spec.rb +1 -0
  493. data/spec/mongoid/association_spec.rb +1 -0
  494. data/spec/mongoid/atomic/modifiers_spec.rb +1 -0
  495. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -0
  496. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -0
  497. data/spec/mongoid/atomic/paths/root_spec.rb +1 -0
  498. data/spec/mongoid/atomic/paths_spec.rb +1 -0
  499. data/spec/mongoid/atomic_spec.rb +1 -0
  500. data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
  501. data/spec/mongoid/attributes/dynamic_spec.rb +1 -0
  502. data/spec/mongoid/attributes/embedded_spec.rb +118 -0
  503. data/spec/mongoid/attributes/nested_spec.rb +11 -204
  504. data/spec/mongoid/attributes/nested_spec_models.rb +1 -0
  505. data/spec/mongoid/attributes/projector_spec.rb +1 -0
  506. data/spec/mongoid/attributes/readonly_spec.rb +1 -19
  507. data/spec/mongoid/attributes_spec.rb +18 -35
  508. data/spec/mongoid/cacheable_spec.rb +1 -0
  509. data/spec/mongoid/changeable_spec.rb +4 -3
  510. data/spec/mongoid/clients/factory_spec.rb +77 -30
  511. data/spec/mongoid/clients/options_spec.rb +9 -5
  512. data/spec/mongoid/clients/sessions_spec.rb +27 -10
  513. data/spec/mongoid/clients/transactions_spec.rb +958 -185
  514. data/spec/mongoid/clients/transactions_spec_models.rb +159 -0
  515. data/spec/mongoid/clients_spec.rb +47 -2
  516. data/spec/mongoid/collection_configurable_spec.rb +1 -0
  517. data/spec/mongoid/composable_spec.rb +1 -0
  518. data/spec/mongoid/config/defaults_spec.rb +31 -92
  519. data/spec/mongoid/config/encryption_spec.rb +152 -0
  520. data/spec/mongoid/config/environment_spec.rb +13 -41
  521. data/spec/mongoid/config/introspection_spec.rb +114 -0
  522. data/spec/mongoid/config/options_spec.rb +1 -0
  523. data/spec/mongoid/config_spec.rb +20 -133
  524. data/spec/mongoid/contextual/aggregable/memory_spec.rb +1 -91
  525. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +1 -0
  526. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +5 -29
  527. data/spec/mongoid/contextual/aggregable/none_spec.rb +3 -14
  528. data/spec/mongoid/contextual/atomic_spec.rb +203 -12
  529. data/spec/mongoid/contextual/map_reduce_spec.rb +1 -0
  530. data/spec/mongoid/contextual/memory_spec.rb +340 -687
  531. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +10 -3
  532. data/spec/mongoid/contextual/mongo_spec.rb +101 -283
  533. data/spec/mongoid/contextual/none_spec.rb +1 -0
  534. data/spec/mongoid/copyable_spec.rb +1 -0
  535. data/spec/mongoid/copyable_spec_models.rb +1 -0
  536. data/spec/mongoid/criteria/findable_spec.rb +191 -0
  537. data/spec/mongoid/criteria/includable_spec.rb +1 -0
  538. data/spec/mongoid/criteria/includable_spec_models.rb +1 -0
  539. data/spec/mongoid/criteria/inspectable_spec.rb +1 -0
  540. data/spec/mongoid/criteria/marshalable_spec.rb +3 -2
  541. data/spec/mongoid/criteria/modifiable_spec.rb +1 -0
  542. data/spec/mongoid/criteria/options_spec.rb +1 -0
  543. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -0
  544. data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -0
  545. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +1 -0
  546. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +8 -7
  547. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -0
  548. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +21 -11
  549. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +1 -0
  550. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -0
  551. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -0
  552. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -0
  553. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -0
  554. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +1 -0
  555. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -0
  556. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +1 -0
  557. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -11
  558. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -11
  559. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -0
  560. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -66
  561. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -0
  562. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +1 -0
  563. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +1 -0
  564. data/spec/mongoid/criteria/queryable/key_spec.rb +1 -0
  565. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +1 -0
  566. data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -0
  567. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -0
  568. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -0
  569. data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -0
  570. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +4 -5
  571. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +1 -0
  572. data/spec/mongoid/criteria/queryable/selectable_spec.rb +51 -214
  573. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +1 -235
  574. data/spec/mongoid/criteria/queryable/selector_spec.rb +96 -0
  575. data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -0
  576. data/spec/mongoid/criteria/queryable/storable_spec.rb +10 -32
  577. data/spec/mongoid/criteria/scopable_spec.rb +1 -0
  578. data/spec/mongoid/criteria/translator_spec.rb +1 -0
  579. data/spec/mongoid/criteria_projection_spec.rb +6 -5
  580. data/spec/mongoid/criteria_spec.rb +221 -361
  581. data/spec/mongoid/document_fields_spec.rb +1 -0
  582. data/spec/mongoid/document_persistence_context_spec.rb +77 -0
  583. data/spec/mongoid/document_query_spec.rb +5 -4
  584. data/spec/mongoid/document_spec.rb +3 -148
  585. data/spec/mongoid/equality_spec.rb +41 -149
  586. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -0
  587. data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
  588. data/spec/mongoid/errors/callback_spec.rb +1 -0
  589. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -0
  590. data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -0
  591. data/spec/mongoid/errors/document_not_found_spec.rb +1 -0
  592. data/spec/mongoid/errors/invalid_collection_spec.rb +1 -0
  593. data/spec/mongoid/errors/invalid_config_file_spec.rb +1 -0
  594. data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -0
  595. data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -0
  596. data/spec/mongoid/errors/invalid_field_spec.rb +1 -0
  597. data/spec/mongoid/errors/invalid_field_type_spec.rb +1 -0
  598. data/spec/mongoid/errors/invalid_find_spec.rb +1 -0
  599. data/spec/mongoid/errors/invalid_includes_spec.rb +1 -0
  600. data/spec/mongoid/errors/invalid_index_spec.rb +1 -0
  601. data/spec/mongoid/errors/invalid_options_spec.rb +1 -0
  602. data/spec/mongoid/errors/invalid_path_spec.rb +1 -0
  603. data/spec/mongoid/errors/invalid_relation_spec.rb +1 -0
  604. data/spec/mongoid/errors/invalid_scope_spec.rb +1 -0
  605. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -0
  606. data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -0
  607. data/spec/mongoid/errors/invalid_time_spec.rb +1 -0
  608. data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -0
  609. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -0
  610. data/spec/mongoid/errors/mixed_relations_spec.rb +1 -0
  611. data/spec/mongoid/errors/mongoid_error_spec.rb +9 -22
  612. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -0
  613. data/spec/mongoid/errors/no_client_config_spec.rb +1 -0
  614. data/spec/mongoid/errors/no_client_database_spec.rb +1 -0
  615. data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -0
  616. data/spec/mongoid/errors/no_clients_config_spec.rb +1 -0
  617. data/spec/mongoid/errors/no_environment_spec.rb +1 -0
  618. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -0
  619. data/spec/mongoid/errors/no_metadata_spec.rb +1 -0
  620. data/spec/mongoid/errors/no_parent_spec.rb +1 -0
  621. data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -0
  622. data/spec/mongoid/errors/readonly_document_spec.rb +1 -0
  623. data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -0
  624. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -0
  625. data/spec/mongoid/errors/unknown_attribute_spec.rb +1 -0
  626. data/spec/mongoid/errors/unsaved_document_spec.rb +1 -0
  627. data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -0
  628. data/spec/mongoid/errors/validations_spec.rb +1 -0
  629. data/spec/mongoid/extensions/array_spec.rb +3 -262
  630. data/spec/mongoid/extensions/big_decimal_spec.rb +5 -4
  631. data/spec/mongoid/extensions/binary_spec.rb +1 -0
  632. data/spec/mongoid/extensions/boolean_spec.rb +1 -0
  633. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +8 -7
  634. data/spec/mongoid/extensions/date_spec.rb +3 -20
  635. data/spec/mongoid/extensions/date_time_spec.rb +3 -9
  636. data/spec/mongoid/extensions/decimal128_spec.rb +1 -0
  637. data/spec/mongoid/extensions/false_class_spec.rb +1 -7
  638. data/spec/mongoid/extensions/float_spec.rb +3 -9
  639. data/spec/mongoid/extensions/hash_spec.rb +19 -458
  640. data/spec/mongoid/extensions/integer_spec.rb +3 -8
  641. data/spec/mongoid/extensions/module_spec.rb +1 -0
  642. data/spec/mongoid/extensions/nil_class_spec.rb +1 -0
  643. data/spec/mongoid/extensions/object_id_spec.rb +1 -0
  644. data/spec/mongoid/extensions/object_spec.rb +1 -176
  645. data/spec/mongoid/extensions/range_spec.rb +1 -11
  646. data/spec/mongoid/extensions/raw_value_spec.rb +67 -0
  647. data/spec/mongoid/extensions/regexp_spec.rb +1 -0
  648. data/spec/mongoid/extensions/set_spec.rb +2 -3
  649. data/spec/mongoid/extensions/string_spec.rb +3 -113
  650. data/spec/mongoid/extensions/stringified_symbol_spec.rb +1 -0
  651. data/spec/mongoid/extensions/symbol_spec.rb +1 -31
  652. data/spec/mongoid/extensions/time_spec.rb +32 -350
  653. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -30
  654. data/spec/mongoid/extensions/true_class_spec.rb +1 -7
  655. data/spec/mongoid/factory_spec.rb +1 -0
  656. data/spec/mongoid/fields/foreign_key_spec.rb +282 -119
  657. data/spec/mongoid/fields/localized_spec.rb +1 -0
  658. data/spec/mongoid/fields/standard_spec.rb +1 -0
  659. data/spec/mongoid/fields_spec.rb +60 -66
  660. data/spec/mongoid/findable_spec.rb +2 -61
  661. data/spec/mongoid/indexable/specification_spec.rb +132 -13
  662. data/spec/mongoid/indexable_spec.rb +323 -9
  663. data/spec/mongoid/inspectable_spec.rb +81 -0
  664. data/spec/mongoid/interceptable_spec.rb +3 -82
  665. data/spec/mongoid/interceptable_spec_models.rb +112 -47
  666. data/spec/mongoid/loading_spec.rb +110 -0
  667. data/spec/mongoid/loggable_spec.rb +1 -0
  668. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -0
  669. data/spec/mongoid/mongoizable_spec.rb +1 -0
  670. data/spec/mongoid/monkey_patches_spec.rb +211 -0
  671. data/spec/mongoid/persistable/creatable_spec.rb +1 -0
  672. data/spec/mongoid/persistable/deletable_spec.rb +78 -31
  673. data/spec/mongoid/persistable/destroyable_spec.rb +230 -52
  674. data/spec/mongoid/persistable/incrementable_spec.rb +1 -0
  675. data/spec/mongoid/persistable/logical_spec.rb +1 -0
  676. data/spec/mongoid/persistable/maxable_spec.rb +147 -0
  677. data/spec/mongoid/persistable/minable_spec.rb +147 -0
  678. data/spec/mongoid/persistable/multipliable_spec.rb +227 -0
  679. data/spec/mongoid/persistable/poppable_spec.rb +1 -0
  680. data/spec/mongoid/persistable/pullable_spec.rb +1 -0
  681. data/spec/mongoid/persistable/pushable_spec.rb +1 -0
  682. data/spec/mongoid/persistable/renamable_spec.rb +1 -0
  683. data/spec/mongoid/persistable/savable_spec.rb +2 -6
  684. data/spec/mongoid/persistable/settable_spec.rb +5 -4
  685. data/spec/mongoid/persistable/unsettable_spec.rb +1 -0
  686. data/spec/mongoid/persistable/updatable_spec.rb +3 -2
  687. data/spec/mongoid/persistable/upsertable_spec.rb +34 -1
  688. data/spec/mongoid/persistable_spec.rb +1 -0
  689. data/spec/mongoid/persistence_context_spec.rb +1 -0
  690. data/spec/mongoid/positional_spec.rb +1 -0
  691. data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +24 -0
  692. data/spec/mongoid/railties/console_sandbox_spec.rb +44 -0
  693. data/spec/mongoid/relations/proxy_spec.rb +1 -0
  694. data/spec/mongoid/reloadable_spec.rb +28 -83
  695. data/spec/mongoid/scopable_spec.rb +39 -50
  696. data/spec/mongoid/search_indexable_spec.rb +147 -0
  697. data/spec/mongoid/selectable_spec.rb +1 -0
  698. data/spec/mongoid/serializable_spec.rb +10 -16
  699. data/spec/mongoid/shardable_models.rb +1 -0
  700. data/spec/mongoid/shardable_spec.rb +1 -0
  701. data/spec/mongoid/stateful_spec.rb +1 -0
  702. data/spec/mongoid/tasks/database_rake_spec.rb +127 -49
  703. data/spec/mongoid/tasks/database_spec.rb +48 -1
  704. data/spec/mongoid/tasks/encryption_spec.rb +187 -0
  705. data/spec/mongoid/threaded_spec.rb +38 -0
  706. data/spec/mongoid/timestamps/created/short_spec.rb +1 -0
  707. data/spec/mongoid/timestamps/created_spec.rb +1 -23
  708. data/spec/mongoid/timestamps/timeless_spec.rb +1 -0
  709. data/spec/mongoid/timestamps/updated/short_spec.rb +1 -0
  710. data/spec/mongoid/timestamps/updated_spec.rb +1 -0
  711. data/spec/mongoid/timestamps_spec.rb +1 -0
  712. data/spec/mongoid/timestamps_spec_models.rb +1 -0
  713. data/spec/mongoid/touchable_spec.rb +485 -69
  714. data/spec/mongoid/touchable_spec_models.rb +96 -1
  715. data/spec/mongoid/traversable_spec.rb +1 -0
  716. data/spec/mongoid/validatable/associated_spec.rb +5 -14
  717. data/spec/mongoid/validatable/format_spec.rb +1 -0
  718. data/spec/mongoid/validatable/length_spec.rb +1 -0
  719. data/spec/mongoid/validatable/numericality_spec.rb +1 -16
  720. data/spec/mongoid/validatable/presence_spec.rb +1 -0
  721. data/spec/mongoid/validatable/uniqueness_spec.rb +48 -3
  722. data/spec/mongoid/validatable_spec.rb +1 -0
  723. data/spec/mongoid/warnings_spec.rb +1 -0
  724. data/spec/mongoid_spec.rb +27 -0
  725. data/spec/rails/controller_extension/controller_runtime_spec.rb +1 -0
  726. data/spec/rails/mongoid_spec.rb +26 -117
  727. data/spec/shared/lib/mrss/docker_runner.rb +1 -1
  728. data/spec/shared/lib/mrss/server_version_registry.rb +1 -1
  729. data/spec/shared/lib/mrss/spec_organizer.rb +3 -32
  730. data/spec/shared/share/Dockerfile.erb +34 -4
  731. data/spec/shared/shlib/distro.sh +0 -10
  732. data/spec/shared/shlib/server.sh +27 -33
  733. data/spec/shared/shlib/set_env.sh +42 -6
  734. data/spec/spec_helper.rb +26 -28
  735. data/spec/support/authorization.rb +1 -0
  736. data/spec/support/client_registry.rb +1 -0
  737. data/spec/support/constraints.rb +1 -0
  738. data/spec/support/crypt/models.rb +50 -0
  739. data/spec/support/crypt.rb +80 -0
  740. data/spec/support/expectations.rb +18 -20
  741. data/spec/support/feature_sandbox.rb +72 -0
  742. data/spec/support/helpers.rb +1 -0
  743. data/spec/support/immutable_ids.rb +22 -21
  744. data/spec/support/macros.rb +4 -6
  745. data/spec/support/models/account.rb +1 -0
  746. data/spec/support/models/acolyte.rb +1 -0
  747. data/spec/support/models/actor.rb +1 -0
  748. data/spec/support/models/actress.rb +1 -0
  749. data/spec/support/models/address.rb +3 -0
  750. data/spec/support/models/address_component.rb +1 -0
  751. data/spec/support/models/address_number.rb +1 -0
  752. data/spec/support/models/agency.rb +1 -0
  753. data/spec/support/models/agent.rb +1 -0
  754. data/spec/support/models/album.rb +1 -0
  755. data/spec/support/models/alert.rb +1 -0
  756. data/spec/support/models/animal.rb +1 -0
  757. data/spec/support/models/answer.rb +1 -0
  758. data/spec/support/models/appointment.rb +1 -0
  759. data/spec/support/models/armrest.rb +1 -0
  760. data/spec/support/models/array_field.rb +1 -0
  761. data/spec/support/models/article.rb +1 -0
  762. data/spec/support/models/artist.rb +1 -0
  763. data/spec/support/models/artwork.rb +1 -0
  764. data/spec/support/models/audible_sound.rb +1 -0
  765. data/spec/support/models/audio.rb +1 -0
  766. data/spec/support/models/augmentation.rb +1 -0
  767. data/spec/support/models/author.rb +1 -0
  768. data/spec/support/models/baby.rb +1 -0
  769. data/spec/support/models/band.rb +5 -1
  770. data/spec/support/models/bar.rb +1 -0
  771. data/spec/support/models/basic.rb +1 -0
  772. data/spec/support/models/bed.rb +1 -0
  773. data/spec/support/models/big_palette.rb +1 -0
  774. data/spec/support/models/birthday.rb +1 -0
  775. data/spec/support/models/bolt.rb +1 -0
  776. data/spec/support/models/bomb.rb +1 -0
  777. data/spec/support/models/book.rb +1 -0
  778. data/spec/support/models/breed.rb +1 -0
  779. data/spec/support/models/browser.rb +1 -0
  780. data/spec/support/models/building.rb +1 -0
  781. data/spec/support/models/building_address.rb +1 -0
  782. data/spec/support/models/bus.rb +1 -0
  783. data/spec/support/models/business.rb +1 -0
  784. data/spec/support/models/callback_test.rb +1 -0
  785. data/spec/support/models/canvas.rb +1 -0
  786. data/spec/support/models/car.rb +1 -0
  787. data/spec/support/models/cat.rb +1 -0
  788. data/spec/support/models/catalog.rb +1 -0
  789. data/spec/support/models/category.rb +1 -0
  790. data/spec/support/models/child.rb +1 -0
  791. data/spec/support/models/child_doc.rb +1 -0
  792. data/spec/support/models/church.rb +1 -0
  793. data/spec/support/models/circle.rb +1 -0
  794. data/spec/support/models/circuit.rb +1 -0
  795. data/spec/support/models/circus.rb +1 -0
  796. data/spec/support/models/code.rb +1 -0
  797. data/spec/support/models/coding/pull_request.rb +1 -0
  798. data/spec/support/models/coding.rb +1 -0
  799. data/spec/support/models/comment.rb +1 -0
  800. data/spec/support/models/company.rb +1 -0
  801. data/spec/support/models/consumption_period.rb +1 -0
  802. data/spec/support/models/contextable_item.rb +1 -0
  803. data/spec/support/models/contractor.rb +1 -0
  804. data/spec/support/models/cookie.rb +1 -0
  805. data/spec/support/models/country_code.rb +1 -0
  806. data/spec/support/models/courier_job.rb +1 -0
  807. data/spec/support/models/cover.rb +1 -0
  808. data/spec/support/models/crate.rb +1 -0
  809. data/spec/support/models/customer.rb +1 -0
  810. data/spec/support/models/customer_address.rb +1 -0
  811. data/spec/support/models/deed.rb +1 -0
  812. data/spec/support/models/definition.rb +1 -0
  813. data/spec/support/models/delegating_patient.rb +1 -0
  814. data/spec/support/models/description.rb +1 -0
  815. data/spec/support/models/dictionary.rb +1 -0
  816. data/spec/support/models/division.rb +1 -0
  817. data/spec/support/models/doctor.rb +1 -0
  818. data/spec/support/models/dog.rb +1 -0
  819. data/spec/support/models/dokument.rb +1 -0
  820. data/spec/support/models/draft.rb +1 -0
  821. data/spec/support/models/dragon.rb +1 -0
  822. data/spec/support/models/driver.rb +1 -0
  823. data/spec/support/models/drug.rb +1 -0
  824. data/spec/support/models/dungeon.rb +1 -0
  825. data/spec/support/models/edit.rb +1 -0
  826. data/spec/support/models/email.rb +1 -0
  827. data/spec/support/models/employer.rb +1 -0
  828. data/spec/support/models/entry.rb +1 -0
  829. data/spec/support/models/eraser.rb +1 -0
  830. data/spec/support/models/even.rb +1 -0
  831. data/spec/support/models/event.rb +1 -0
  832. data/spec/support/models/exhibition.rb +1 -0
  833. data/spec/support/models/exhibitor.rb +1 -0
  834. data/spec/support/models/explosion.rb +1 -0
  835. data/spec/support/models/eye.rb +1 -0
  836. data/spec/support/models/eye_bowl.rb +1 -0
  837. data/spec/support/models/face.rb +1 -0
  838. data/spec/support/models/fanatic.rb +1 -0
  839. data/spec/support/models/favorite.rb +8 -1
  840. data/spec/support/models/filesystem.rb +1 -0
  841. data/spec/support/models/fire_hydrant.rb +1 -0
  842. data/spec/support/models/firefox.rb +1 -0
  843. data/spec/support/models/fish.rb +1 -0
  844. data/spec/support/models/folder.rb +1 -0
  845. data/spec/support/models/folder_item.rb +1 -0
  846. data/spec/support/models/fruits.rb +1 -0
  847. data/spec/support/models/game.rb +1 -0
  848. data/spec/support/models/ghost.rb +1 -0
  849. data/spec/support/models/guitar.rb +1 -0
  850. data/spec/support/models/hole.rb +1 -0
  851. data/spec/support/models/home.rb +1 -0
  852. data/spec/support/models/house.rb +1 -0
  853. data/spec/support/models/html_writer.rb +1 -0
  854. data/spec/support/models/id_key.rb +1 -0
  855. data/spec/support/models/idnodef.rb +1 -0
  856. data/spec/support/models/image.rb +1 -0
  857. data/spec/support/models/implant.rb +1 -0
  858. data/spec/support/models/instrument.rb +1 -0
  859. data/spec/support/models/item.rb +1 -0
  860. data/spec/support/models/jar.rb +1 -0
  861. data/spec/support/models/kaleidoscope.rb +1 -0
  862. data/spec/support/models/kangaroo.rb +1 -0
  863. data/spec/support/models/label.rb +1 -0
  864. data/spec/support/models/language.rb +1 -0
  865. data/spec/support/models/lat_lng.rb +1 -6
  866. data/spec/support/models/league.rb +1 -0
  867. data/spec/support/models/learner.rb +1 -0
  868. data/spec/support/models/line_item.rb +1 -0
  869. data/spec/support/models/location.rb +1 -0
  870. data/spec/support/models/login.rb +1 -0
  871. data/spec/support/models/manufacturer.rb +1 -0
  872. data/spec/support/models/meat.rb +1 -0
  873. data/spec/support/models/membership.rb +1 -0
  874. data/spec/support/models/message.rb +1 -0
  875. data/spec/support/models/minim.rb +1 -0
  876. data/spec/support/models/mixed_drink.rb +1 -0
  877. data/spec/support/models/mop.rb +1 -0
  878. data/spec/support/models/movie.rb +1 -0
  879. data/spec/support/models/my_hash.rb +1 -0
  880. data/spec/support/models/name.rb +1 -0
  881. data/spec/support/models/name_only.rb +1 -0
  882. data/spec/support/models/node.rb +1 -0
  883. data/spec/support/models/note.rb +1 -0
  884. data/spec/support/models/nut.rb +1 -0
  885. data/spec/support/models/odd.rb +1 -0
  886. data/spec/support/models/order.rb +1 -0
  887. data/spec/support/models/ordered_post.rb +1 -0
  888. data/spec/support/models/ordered_preference.rb +1 -0
  889. data/spec/support/models/oscar.rb +1 -0
  890. data/spec/support/models/other_owner_object.rb +1 -0
  891. data/spec/support/models/override.rb +1 -0
  892. data/spec/support/models/ownable.rb +1 -0
  893. data/spec/support/models/owner.rb +1 -0
  894. data/spec/support/models/pack.rb +1 -0
  895. data/spec/support/models/page.rb +1 -0
  896. data/spec/support/models/page_question.rb +1 -0
  897. data/spec/support/models/palette.rb +1 -0
  898. data/spec/support/models/parent.rb +1 -0
  899. data/spec/support/models/parent_doc.rb +1 -0
  900. data/spec/support/models/passport.rb +1 -0
  901. data/spec/support/models/patient.rb +1 -0
  902. data/spec/support/models/pdf_writer.rb +1 -0
  903. data/spec/support/models/pencil.rb +1 -0
  904. data/spec/support/models/person.rb +1 -0
  905. data/spec/support/models/pet.rb +1 -0
  906. data/spec/support/models/pet_owner.rb +1 -0
  907. data/spec/support/models/phone.rb +1 -0
  908. data/spec/support/models/piano.rb +1 -0
  909. data/spec/support/models/pizza.rb +1 -0
  910. data/spec/support/models/player.rb +1 -0
  911. data/spec/support/models/post.rb +1 -0
  912. data/spec/support/models/post_genre.rb +1 -0
  913. data/spec/support/models/powerup.rb +1 -0
  914. data/spec/support/models/preference.rb +1 -0
  915. data/spec/support/models/princess.rb +1 -0
  916. data/spec/support/models/product.rb +1 -0
  917. data/spec/support/models/profile.rb +1 -0
  918. data/spec/support/models/pronunciation.rb +1 -0
  919. data/spec/support/models/pub.rb +1 -0
  920. data/spec/support/models/publication/encyclopedia.rb +1 -0
  921. data/spec/support/models/publication/review.rb +1 -0
  922. data/spec/support/models/publication.rb +1 -0
  923. data/spec/support/models/purchase.rb +1 -0
  924. data/spec/support/models/purchased_item.rb +1 -0
  925. data/spec/support/models/question.rb +1 -0
  926. data/spec/support/models/quiz.rb +1 -0
  927. data/spec/support/models/rating.rb +1 -0
  928. data/spec/support/models/record.rb +1 -0
  929. data/spec/support/models/registry.rb +1 -0
  930. data/spec/support/models/role.rb +1 -0
  931. data/spec/support/models/root_category.rb +1 -0
  932. data/spec/support/models/sandbox/app/models/app_models_message.rb +4 -0
  933. data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
  934. data/spec/support/models/sandbox/sandbox_message.rb +4 -0
  935. data/spec/support/models/sandbox/sandbox_user.rb +4 -0
  936. data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
  937. data/spec/support/models/sandwich.rb +1 -0
  938. data/spec/support/models/scheduler.rb +1 -0
  939. data/spec/support/models/school.rb +1 -0
  940. data/spec/support/models/scribe.rb +1 -0
  941. data/spec/support/models/sealer.rb +1 -0
  942. data/spec/support/models/seat.rb +1 -0
  943. data/spec/support/models/seo.rb +1 -0
  944. data/spec/support/models/series.rb +1 -0
  945. data/spec/support/models/server.rb +1 -0
  946. data/spec/support/models/service.rb +1 -0
  947. data/spec/support/models/shape.rb +1 -0
  948. data/spec/support/models/shelf.rb +1 -0
  949. data/spec/support/models/shield.rb +1 -0
  950. data/spec/support/models/shipment_address.rb +1 -0
  951. data/spec/support/models/shipping_container.rb +1 -0
  952. data/spec/support/models/shipping_pack.rb +1 -0
  953. data/spec/support/models/shirt.rb +1 -0
  954. data/spec/support/models/shop.rb +1 -0
  955. data/spec/support/models/short_agent.rb +1 -0
  956. data/spec/support/models/short_quiz.rb +1 -0
  957. data/spec/support/models/simple.rb +1 -0
  958. data/spec/support/models/slave.rb +1 -0
  959. data/spec/support/models/song.rb +1 -0
  960. data/spec/support/models/sound.rb +1 -0
  961. data/spec/support/models/spacer.rb +1 -0
  962. data/spec/support/models/square.rb +1 -0
  963. data/spec/support/models/staff.rb +1 -0
  964. data/spec/support/models/store_as_dup_test1.rb +1 -0
  965. data/spec/support/models/store_as_dup_test2.rb +1 -0
  966. data/spec/support/models/store_as_dup_test3.rb +1 -0
  967. data/spec/support/models/store_as_dup_test4.rb +1 -0
  968. data/spec/support/models/strategy.rb +1 -0
  969. data/spec/support/models/student.rb +1 -0
  970. data/spec/support/models/sub_item.rb +1 -0
  971. data/spec/support/models/subscription.rb +1 -0
  972. data/spec/support/models/survey.rb +1 -0
  973. data/spec/support/models/symptom.rb +1 -0
  974. data/spec/support/models/system_role.rb +1 -0
  975. data/spec/support/models/tag.rb +1 -0
  976. data/spec/support/models/target.rb +1 -0
  977. data/spec/support/models/template.rb +1 -0
  978. data/spec/support/models/thing.rb +1 -0
  979. data/spec/support/models/threadlocker.rb +1 -0
  980. data/spec/support/models/title.rb +1 -0
  981. data/spec/support/models/tool.rb +1 -0
  982. data/spec/support/models/topping.rb +1 -0
  983. data/spec/support/models/toy.rb +1 -0
  984. data/spec/support/models/track.rb +1 -0
  985. data/spec/support/models/translation.rb +1 -0
  986. data/spec/support/models/tree.rb +1 -0
  987. data/spec/support/models/truck.rb +1 -0
  988. data/spec/support/models/updatable.rb +1 -0
  989. data/spec/support/models/user.rb +1 -0
  990. data/spec/support/models/user_account.rb +1 -0
  991. data/spec/support/models/validation_callback.rb +1 -0
  992. data/spec/support/models/vehicle.rb +1 -0
  993. data/spec/support/models/version.rb +1 -0
  994. data/spec/support/models/vertex.rb +1 -0
  995. data/spec/support/models/vet_visit.rb +1 -0
  996. data/spec/support/models/video.rb +1 -0
  997. data/spec/support/models/video_game.rb +1 -0
  998. data/spec/support/models/washer.rb +1 -0
  999. data/spec/support/models/weapon.rb +1 -0
  1000. data/spec/support/models/wiki_page.rb +1 -0
  1001. data/spec/support/models/word.rb +1 -0
  1002. data/spec/support/models/word_origin.rb +1 -0
  1003. data/spec/support/models/writer.rb +1 -0
  1004. data/spec/support/rails_mock.rb +32 -0
  1005. data/spec/support/shared/time.rb +3 -21
  1006. data/spec/support/sinatra_mock.rb +7 -0
  1007. data/spec/support/spec_config.rb +30 -9
  1008. data.tar.gz.sig +0 -0
  1009. metadata +127 -57
  1010. metadata.gz.sig +1 -0
  1011. data/lib/mongoid/association/referenced/eager.rb +0 -163
  1012. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -113
  1013. data/lib/mongoid/contextual/geo_near.rb +0 -236
  1014. data/lib/mongoid/errors/in_memory_regexp_timeout.rb +0 -26
  1015. data/lib/mongoid/errors/invalid_session_use.rb +0 -21
  1016. data/lib/mongoid/errors/invalid_storage_parent.rb +0 -27
  1017. data/lib/mongoid/field_readable.rb +0 -70
  1018. data/lib/mongoid/matcher/regexp_budget.rb +0 -389
  1019. data/lib/mongoid/query_cache.rb +0 -68
  1020. data/lib/mongoid/validatable/numericality.rb +0 -19
  1021. data/spec/integration/matcher_regexp_timeout_spec.rb +0 -215
  1022. data/spec/integration/query_operator_guard_spec.rb +0 -89
  1023. data/spec/mongoid/contextual/geo_near_spec.rb +0 -471
  1024. data/spec/mongoid/extensions_spec.rb +0 -43
  1025. data/spec/mongoid/matcher/regexp_budget_spec.rb +0 -570
  1026. data/spec/mongoid/query_cache_middleware_spec.rb +0 -50
  1027. data/spec/mongoid/query_cache_spec.rb +0 -865
  1028. data/spec/shared/CANDIDATE.md +0 -28
  1029. data/spec/shared/lib/mrss/release/candidate.rb +0 -281
  1030. data/spec/shared/lib/mrss/release/product_data.rb +0 -144
  1031. data/spec/shared/lib/tasks/candidate.rake +0 -64
@@ -1,9 +1,12 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  require "mongoid/config/defaults"
4
5
  require "mongoid/config/environment"
5
6
  require "mongoid/config/options"
6
7
  require "mongoid/config/validators"
8
+ require "mongoid/config/introspection"
9
+ require "mongoid/config/encryption"
7
10
 
8
11
  module Mongoid
9
12
 
@@ -13,16 +16,17 @@ module Mongoid
13
16
  extend Forwardable
14
17
  extend Options
15
18
  extend Defaults
19
+ extend Encryption
16
20
  extend self
17
21
 
18
22
  def_delegators ::Mongoid, :logger, :logger=
19
23
 
20
24
  LOCK = Mutex.new
21
25
 
22
- # Application name that is printed to the mongodb logs upon establishing
23
- # a connection in server versions >= 3.4. Note that the name cannot
24
- # exceed 128 bytes. It is also used as the database name if the
25
- # database name is not explicitly defined.
26
+ # Application name that is printed to the MongoDB logs upon establishing
27
+ # a connection. Note that the name cannot exceed 128 bytes in length.
28
+ # It is also used as the database name if the database name is not
29
+ # explicitly defined.
26
30
  option :app_name, default: nil
27
31
 
28
32
  # (Deprecated) In MongoDB 4.0 and earlier, set whether to create
@@ -70,64 +74,12 @@ module Mongoid
70
74
  # existing method.
71
75
  option :scope_overwrite_exception, default: false
72
76
 
73
- # Use ActiveSupport's time zone in time operations instead of the
74
- # Ruby default time zone.
75
- # @deprecated
76
- option :use_activesupport_time_zone, default: true
77
-
78
77
  # Return stored times as UTC.
79
78
  option :use_utc, default: false
80
79
 
81
80
  # Store BigDecimals as Decimal128s instead of strings in the db.
82
81
  option :map_big_decimal_to_decimal128, default: true
83
82
 
84
- # Update embedded documents correctly when setting it, unsetting it
85
- # and resetting it. See MONGOID-5206 and MONGOID-5240 for more details.
86
- option :broken_updates, default: false
87
-
88
- # Maintain legacy behavior of === on Mongoid documents, which returns
89
- # true in a number of cases where Ruby's === implementation would
90
- # return false.
91
- option :legacy_triple_equals, default: false
92
-
93
- # When exiting a nested `with_scope' block, set the current scope to
94
- # nil instead of the parent scope for backwards compatibility.
95
- option :broken_scoping, default: false
96
-
97
- # Maintain broken behavior of sum over empty result sets for backwards
98
- # compatibility.
99
- option :broken_aggregables, default: false
100
-
101
- # Ignore aliased fields in embedded documents when performing pluck and
102
- # distinct operations, for backwards compatibility.
103
- option :broken_alias_handling, default: false
104
-
105
- # Maintain broken `and' behavior when using the same operator on the same
106
- # field multiple times for backwards compatibility.
107
- option :broken_and, default: false
108
-
109
- # Use millisecond precision when comparing Time objects with the _matches?
110
- # function.
111
- option :compare_time_by_ms, default: true
112
-
113
- # Use bson-ruby's implementation of as_json for BSON::ObjectId instead of
114
- # the one monkey-patched into Mongoid.
115
- option :object_id_as_json_oid, default: false
116
-
117
- # Maintain legacy behavior of pluck and distinct, which does not
118
- # demongoize the values on returning them.
119
- option :legacy_pluck_distinct, default: false
120
-
121
- # Combine chained operators, which use the same field and operator,
122
- # using and's instead of overwriting them.
123
- option :overwrite_chained_operators, default: false
124
-
125
- # When this flag is true, the attributes method on a document will return
126
- # a BSON::Document when that document is retrieved from the database, and
127
- # a Hash otherwise. When this flag is false, the attributes method will
128
- # always return a Hash.
129
- option :legacy_attributes, default: false
130
-
131
83
  # Allow BSON::Decimal128 to be parsed and returned directly in
132
84
  # field values. When BSON 5 is present and the this option is set to false
133
85
  # (the default), BSON::Decimal128 values in the database will be returned
@@ -136,14 +88,14 @@ module Mongoid
136
88
  # @note this option only has effect when BSON 5+ is present. Otherwise,
137
89
  # the setting is ignored.
138
90
  option :allow_bson5_decimal128, default: false, on_change: -> (allow) do
139
- if BSON::VERSION >= '5.0.0'
140
- if allow
141
- BSON::Registry.register(BSON::Decimal128::BSON_TYPE, BSON::Decimal128)
142
- else
143
- BSON::Registry.register(BSON::Decimal128::BSON_TYPE, BigDecimal)
91
+ if BSON::VERSION >= '5.0.0'
92
+ if allow
93
+ BSON::Registry.register(BSON::Decimal128::BSON_TYPE, BSON::Decimal128)
94
+ else
95
+ BSON::Registry.register(BSON::Decimal128::BSON_TYPE, BigDecimal)
96
+ end
144
97
  end
145
98
  end
146
- end
147
99
 
148
100
  # Sets the async_query_executor for the application. By default the thread pool executor
149
101
  # is set to `:immediate. Options are:
@@ -158,23 +110,6 @@ module Mongoid
158
110
  # to `:global_thread_pool`.
159
111
  option :global_executor_concurrency, default: nil
160
112
 
161
- # When this flag is true, it will be possible to add a record to a
162
- # "has_many" or "has_and_belongs_to_many" association by passing that
163
- # record's id in the nested attributes for another parent record, even
164
- # when the record does not already belong to that association. For a
165
- # "has_many" association this moves the record to the new parent.
166
- #
167
- # When this flag is false, an id in nested attributes is only resolved
168
- # within the association itself, and anything else raises an error.
169
- #
170
- # The default is `false`. Note that allowing reparenting via nested attributes
171
- # is a potential security risk, since it could allow a malicious user to move
172
- # records that they do not own to a parent record that they do own.
173
- #
174
- # This option will be removed in Mongoid 10, and the only behavior will be
175
- # as if this option were set to false.
176
- option :allow_reparenting_via_nested_attributes, default: false
177
-
178
113
  # When this flag is false, a document will become read-only only once the
179
114
  # #readonly! method is called, and an error will be raised on attempting
180
115
  # to save or update such documents, instead of just on delete. When this
@@ -183,82 +118,58 @@ module Mongoid
183
118
  # deletable/destroyable, but they will be savable/updatable.
184
119
  # When this feature flag is turned on, the read-only state will be reset on
185
120
  # reload, but when it is turned off, it won't be.
186
- option :legacy_readonly, default: true
121
+ option :legacy_readonly, default: false
122
+
123
+ # When this flag is false (the default as of Mongoid 9.0), a document that
124
+ # is created or loaded will remember the storage options that were active
125
+ # when it was loaded, and will use those same options by default when
126
+ # saving or reloading itself.
127
+ #
128
+ # When this flag is true you'll get pre-9.0 behavior, where a document will
129
+ # not remember the storage options from when it was loaded/created, and
130
+ # subsequent updates will need to explicitly set up those options each time.
131
+ #
132
+ # For example:
133
+ #
134
+ # record = Model.with(collection: 'other_collection') { Model.first }
135
+ #
136
+ # This will try to load the first document from 'other_collection' and
137
+ # instantiate it as a Model instance. Pre-9.0, the record object would
138
+ # not remember that it came from 'other_collection', and attempts to
139
+ # update it or reload it would fail unless you first remembered to
140
+ # explicitly specify the collection every time.
141
+ #
142
+ # As of Mongoid 9.0, the record will remember that it came from
143
+ # 'other_collection', and updates and reloads will automatically default
144
+ # to that collection, for that record object.
145
+ option :legacy_persistence_context_behavior, default: false
187
146
 
188
147
  # When this flag is true, any attempt to change the _id of a persisted
189
148
  # document will raise an exception (`Errors::ImmutableAttribute`).
190
- # This will be the default in 9.0. When this flag is false (the default
191
- # in 8.x), changing the _id of a persisted document might be ignored,
192
- # or it might work, depending on the situation.
193
- option :immutable_ids, default: false
149
+ # This is the default in 9.0. Setting this flag to false restores the
150
+ # pre-9.0 behavior, where changing the _id of a persisted
151
+ # document might be ignored, or it might work, depending on the situation.
152
+ option :immutable_ids, default: true
194
153
 
195
154
  # When this flag is true, callbacks for every embedded document will be
196
155
  # called only once, even if the embedded document is embedded in multiple
197
156
  # documents in the root document's dependencies graph.
198
- # This will be the default in 9.0. Setting this flag to false restores the
157
+ # This is the default in 9.0. Setting this flag to false restores the
199
158
  # pre-9.0 behavior, where callbacks are called for every occurrence of an
200
159
  # embedded document. The pre-9.0 behavior leads to a problem that for multi
201
160
  # level nested documents callbacks are called multiple times.
202
161
  # See https://jira.mongodb.org/browse/MONGOID-5542
203
- option :prevent_multiple_calls_of_embedded_callbacks, default: false
162
+ option :prevent_multiple_calls_of_embedded_callbacks, default: true
204
163
 
205
- # When this flag is true, callbacks for embedded documents will not be
206
- # called. This is the default in 8.x, but will be changed to false in 9.0.
207
- #
208
- # Setting this flag to true (as it is in 8.x) may lead to stack
209
- # overflow errors if there are more than cicrca 1000 embedded
210
- # documents in the root document's dependencies graph.
211
- #
212
- # It is strongly recommended to set this flag to false in 8.x, if you
213
- # are not using around callbacks for embedded documents.
164
+ # When this flag is false, callbacks for embedded documents will not be
165
+ # called. This is the default in 9.0.
214
166
  #
167
+ # Setting this flag to true restores the pre-9.0 behavior, where callbacks
168
+ # for embedded documents are called. This may lead to stack overflow errors
169
+ # if there are more than cicrca 1000 embedded documents in the root
170
+ # document's dependencies graph.
215
171
  # See https://jira.mongodb.org/browse/MONGOID-5658 for more details.
216
- option :around_callbacks_for_embeds, default: true
217
-
218
- # The maximum number of seconds that evaluating a single query in memory
219
- # may spend executing regular expressions. Queries against an embedded
220
- # association are evaluated in the calling thread, so a pattern built from
221
- # user input runs locally and can otherwise consume unbounded CPU. The
222
- # limit is cumulative over the whole query, since cost grows with the
223
- # number of documents and conditions as well as with the pattern.
224
- #
225
- # Set to nil to remove the limit. On Ruby 3.2 and later the remaining
226
- # budget is compiled into the pattern, so the limit counts only the time
227
- # spent matching. Earlier Rubies have no per-Regexp timeout, so the query
228
- # is bounded with Timeout instead and the limit is wall clock over the
229
- # whole in-memory evaluation.
230
- #
231
- # See https://jira.mongodb.org/browse/MONGOID-5981 for details.
232
- option :in_memory_regexp_time_limit, default: 5.0
233
-
234
- # When false (default), query operators are restricted when building a
235
- # selector, so that user-supplied input reaching the query builder cannot
236
- # make MongoDB execute arbitrary JavaScript. Two rules are enforced:
237
- #
238
- # - An operator at the top level of an expression must appear in
239
- # +Criteria::Queryable::Selectable::ALLOWED_QUERY_OPERATORS+.
240
- # - +$where+, +$function+, and +$accumulator+ are rejected at any depth,
241
- # including inside +$expr+ and the logical operators.
242
- #
243
- # This applies to every query method that accepts an expression, including
244
- # +where+, +find_by+, +and+, +or+, +nor+, +not+, +any_of+, and +none_of+.
245
- # It also governs the string form of +where+, e.g.
246
- # +where("this.name == 'admin'")+, which the server evaluates as +$where+.
247
- # Applications relying on that form must set this option to true.
248
- #
249
- # The APIs that request JavaScript explicitly, +Criteria#for_js+ and
250
- # +js_query+, are unaffected: there the developer has asked for it.
251
- #
252
- # Set to true to restore the unrestricted pass-through behavior.
253
- #
254
- # Note that this option is deliberately not tied to +load_defaults+: an
255
- # application that has opted into older defaults still gets the guard, and
256
- # must set this option explicitly to turn it off.
257
- #
258
- # See https://jira.mongodb.org/browse/MONGOID-5939,
259
- # https://jira.mongodb.org/browse/MONGOID-5993,
260
- # https://jira.mongodb.org/browse/MONGOID-5994 for details.
261
- option :allow_unsafe_query_operators, default: false
172
+ option :around_callbacks_for_embeds, default: false
262
173
 
263
174
  # Returns the Config singleton, for use in the configure DSL.
264
175
  #
@@ -465,10 +376,14 @@ module Mongoid
465
376
  # config.running_with_passenger?
466
377
  #
467
378
  # @return [ true | false ] If the app is deployed on Passenger.
379
+ #
380
+ # @deprecated
468
381
  def running_with_passenger?
469
382
  @running_with_passenger ||= defined?(PhusionPassenger)
470
383
  end
471
384
 
385
+ Mongoid.deprecate(self, :running_with_passenger?)
386
+
472
387
  private
473
388
 
474
389
  def set_log_levels
@@ -501,18 +416,7 @@ module Mongoid
501
416
  end
502
417
 
503
418
  module DeprecatedOptions
504
- OPTIONS = %i[ use_activesupport_time_zone
505
- broken_aggregables
506
- broken_alias_handling
507
- broken_and
508
- broken_scoping
509
- broken_updates
510
- compare_time_by_ms
511
- legacy_attributes
512
- legacy_pluck_distinct
513
- legacy_triple_equals
514
- object_id_as_json_oid
515
- overwrite_chained_operators ]
419
+ OPTIONS = %i[]
516
420
 
517
421
  if RUBY_VERSION < '3.0'
518
422
  def self.prepended(klass)
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
-
3
- require 'mongoid/field_readable'
2
+ # rubocop:todo all
4
3
 
5
4
  module Mongoid
6
5
  module Contextual
7
6
  module Aggregable
8
7
  # Contains behavior for aggregating values in memory.
9
8
  module Memory
10
- include FieldReadable
11
9
 
12
10
  # Get all the aggregate values for the provided field.
13
11
  # Provided for interface consistency with Aggregable::Mongo.
@@ -32,7 +30,7 @@ module Mongoid
32
30
  #
33
31
  # @return [ Numeric ] The average.
34
32
  def avg(field)
35
- total = count { |doc| !read_field_value(doc, field).nil? }
33
+ total = count { |doc| !doc.send(field).nil? }
36
34
  return nil unless total > 0
37
35
 
38
36
  total = total.to_f if total.is_a?(Integer)
@@ -117,7 +115,7 @@ module Mongoid
117
115
  def aggregate_by(field, method)
118
116
  return nil unless any?
119
117
 
120
- map { |doc| read_field_value(doc, field) }.compact.public_send(method)
118
+ map { |doc| doc.public_send(field) }.compact.public_send(method)
121
119
  end
122
120
  end
123
121
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  require "mongoid/contextual/aggregable"
4
5
 
@@ -28,11 +29,7 @@ module Mongoid
28
29
  def aggregates(field)
29
30
  result = collection.aggregate(pipeline(field), session: _session).to_a
30
31
  if result.empty?
31
- if Mongoid.broken_aggregables
32
- { "count" => 0, "sum" => nil, "avg" => nil, "min" => nil, "max" => nil }
33
- else
34
- Aggregable::EMPTY_RESULT.dup
35
- end
32
+ Aggregable::EMPTY_RESULT.dup
36
33
  else
37
34
  result.first
38
35
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  require "mongoid/contextual/aggregable"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Contextual
@@ -1,7 +1,14 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Contextual
6
+
7
+ # Mixin module included in Mongoid::Criteria which provides a
8
+ # direct method interface to MongoDB's Update Operators ($set,
9
+ # $pull, $inc, etc.) These operators can be applied to update
10
+ # all documents in the database within the criteria scope,
11
+ # without loading each document into Mongoid's memory.
5
12
  module Atomic
6
13
 
7
14
  # Execute an atomic $addToSet on the matching documents.
@@ -52,6 +59,18 @@ module Mongoid
52
59
  view.update_many("$inc" => collect_operations(incs))
53
60
  end
54
61
 
62
+ # Perform an atomic $mul operation on the matching documents.
63
+ #
64
+ # @example Perform the atomic multiplication.
65
+ # context.mul(likes: 10)
66
+ #
67
+ # @param [ Hash ] factors The operations.
68
+ #
69
+ # @return [ nil ] Nil.
70
+ def mul(factors)
71
+ view.update_many("$mul" => collect_operations(factors))
72
+ end
73
+
55
74
  # Perform an atomic $pop operation on the matching documents.
56
75
  #
57
76
  # @example Pop the first value on the matches.
@@ -150,23 +169,72 @@ module Mongoid
150
169
  # @example Unset the field on the matches.
151
170
  # context.unset(:name)
152
171
  #
153
- # @param [ [ String | Symbol | Array<String | Symbol> | Hash ]... ] *args
154
- # The name(s) of the field(s) to unset.
155
- # If a Hash is specified, its keys will be used irrespective of what
156
- # each key's value is, even if the value is nil or false.
172
+ # @param [ [ String | Symbol | Array<String | Symbol> | Hash ]... ] *unsets
173
+ # The name(s) of the field(s) to unset. If a Hash is specified,
174
+ # its keys will be used irrespective of value, even if the value
175
+ # is nil or false.
176
+ #
177
+ # @return [ nil ] Nil.
178
+ def unset(*unsets)
179
+ view.update_many('$unset' => collect_unset_operations(unsets))
180
+ end
181
+
182
+ # Performs an atomic $min update operation on the given field or fields.
183
+ # Each field will be set to the minimum of [current_value, given value].
184
+ # This has the effect of making sure that each field is no
185
+ # larger than the given value; in other words, the given value is the
186
+ # effective *maximum* for that field.
187
+ #
188
+ # @note Because of the existence of
189
+ # Mongoid::Contextual::Aggregable::Mongo#min, this method cannot be
190
+ # named #min, and thus breaks that convention of other similar methods
191
+ # of being named for the MongoDB operation they perform.
192
+ #
193
+ # @example Set "views" to be no more than 100.
194
+ # context.set_min(views: 100)
195
+ #
196
+ # @param [ Hash ] fields The fields with the maximum value that each
197
+ # may be set to.
157
198
  #
158
199
  # @return [ nil ] Nil.
159
- def unset(*args)
160
- fields = args.map { |a| a.is_a?(Hash) ? a.keys : a }
161
- .__find_args__
162
- .map { |f| [database_field_name(f), true] }
163
- view.update_many("$unset" => Hash[fields])
200
+ def set_min(fields)
201
+ view.update_many("$min" => collect_operations(fields))
164
202
  end
203
+ alias :clamp_upper_bound :set_min
204
+
205
+ # Performs an atomic $max update operation on the given field or fields.
206
+ # Each field will be set to the maximum of [current_value, given value].
207
+ # This has the effect of making sure that each field is no
208
+ # smaller than the given value; in other words, the given value is the
209
+ # effective *minimum* for that field.
210
+ #
211
+ # @note Because of the existence of
212
+ # Mongoid::Contextual::Aggregable::Mongo#max, this method cannot be
213
+ # named #max, and thus breaks that convention of other similar methods
214
+ # of being named for the MongoDB operation they perform.
215
+ #
216
+ # @example Set "views" to be no less than 100.
217
+ # context.set_max(views: 100)
218
+ #
219
+ # @param [ Hash ] fields The fields with the minimum value that each
220
+ # may be set to.
221
+ #
222
+ # @return [ nil ] Nil.
223
+ def set_max(fields)
224
+ view.update_many("$max" => collect_operations(fields))
225
+ end
226
+ alias :clamp_lower_bound :set_max
165
227
 
166
228
  private
167
229
 
168
- def collect_operations(ops)
169
- ops.each_with_object({}) do |(field, value), operations|
230
+ # Collects and aggregates operations by field.
231
+ #
232
+ # @param [ Array | Hash ] ops The operations to collect.
233
+ # @param [ Hash ] aggregator The hash to use to aggregate the operations.
234
+ #
235
+ # @return [ Hash ] The aggregated operations, by field.
236
+ def collect_operations(ops, aggregator = {})
237
+ ops.each_with_object(aggregator) do |(field, value), operations|
170
238
  operations[database_field_name(field)] = value.mongoize
171
239
  end
172
240
  end
@@ -176,6 +244,25 @@ module Mongoid
176
244
  operations[database_field_name(field)] = { "$each" => Array.wrap(value).mongoize }
177
245
  end
178
246
  end
247
+
248
+ # Builds the selector an atomic $unset operation from arguments.
249
+ #
250
+ # @example Prepare selector from array.
251
+ # context.collect_unset_operations([:name, :age])
252
+ # #=> { "name" => true, "age" => true }
253
+ #
254
+ # @example Prepare selector from hash.
255
+ # context.collect_unset_operations({ name: 1 }, { age: 1 })
256
+ # #=> { "name" => true, "age" => true }
257
+ #
258
+ # @param [ String | Symbol | Array<String | Symbol> | Hash ] ops
259
+ # The name(s) of the field(s) to unset.
260
+ #
261
+ # @return [ Hash ] The selector for the atomic $unset operation.
262
+ def collect_unset_operations(ops)
263
+ ops.map { |op| op.is_a?(Hash) ? op.keys : op }.flatten
264
+ .map { |field| [database_field_name(field), true] }.to_h
265
+ end
179
266
  end
180
267
  end
181
268
  end
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Contextual
6
+
7
+ # Mixin module included in objects which represent database commands.
5
8
  module Command
6
9
 
7
10
  # @attribute [r] collection The collection to query against.
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Contextual
6
+
7
+ # Represents a mapReduce database command instruction.
5
8
  class MapReduce
6
9
  extend Forwardable
7
10
  include Enumerable
@@ -212,6 +215,9 @@ module Mongoid
212
215
  }
213
216
  end
214
217
 
218
+ # Returns the selector of the command spec.
219
+ #
220
+ # @return [ Hash ] The selector.
215
221
  def command
216
222
  @map_reduce.send(:map_reduce_spec)[:selector]
217
223
  end