mongoid 8.1.11 → 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 (1022) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -0
  3. data/LICENSE +1 -1
  4. data/README.md +4 -9
  5. data/Rakefile +62 -44
  6. data/lib/config/locales/en.yml +66 -5
  7. data/lib/mongoid/association/accessors.rb +16 -20
  8. data/lib/mongoid/association/bindable.rb +27 -8
  9. data/lib/mongoid/association/builders.rb +3 -2
  10. data/lib/mongoid/association/constrainable.rb +1 -0
  11. data/lib/mongoid/association/depending.rb +16 -1
  12. data/lib/mongoid/association/eager.rb +160 -0
  13. data/lib/mongoid/association/eager_loadable.rb +15 -7
  14. data/lib/mongoid/association/embedded/batchable.rb +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 +113 -55
  28. data/lib/mongoid/association/embedded/embeds_one.rb +1 -0
  29. data/lib/mongoid/association/embedded.rb +2 -0
  30. data/lib/mongoid/association/macros.rb +17 -14
  31. data/lib/mongoid/association/many.rb +1 -0
  32. data/lib/mongoid/association/marshalable.rb +4 -0
  33. data/lib/mongoid/association/nested/many.rb +8 -3
  34. data/lib/mongoid/association/nested/nested_buildable.rb +32 -0
  35. data/lib/mongoid/association/nested/one.rb +6 -3
  36. data/lib/mongoid/association/nested.rb +1 -0
  37. data/lib/mongoid/association/one.rb +1 -0
  38. data/lib/mongoid/association/options.rb +9 -2
  39. data/lib/mongoid/association/proxy.rb +30 -18
  40. data/lib/mongoid/association/referenced/auto_save.rb +6 -2
  41. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  42. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -0
  43. data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -1
  44. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -14
  45. data/lib/mongoid/association/referenced/belongs_to.rb +2 -1
  46. data/lib/mongoid/association/referenced/counter_cache.rb +7 -2
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +15 -3
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +1 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +132 -94
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +8 -3
  52. data/lib/mongoid/association/referenced/has_many/binding.rb +1 -0
  53. data/lib/mongoid/association/referenced/has_many/buildable.rb +1 -0
  54. data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
  55. data/lib/mongoid/association/referenced/has_many/enumerable.rb +43 -27
  56. data/lib/mongoid/association/referenced/has_many/proxy.rb +131 -104
  57. data/lib/mongoid/association/referenced/has_many.rb +2 -1
  58. data/lib/mongoid/association/referenced/has_one/binding.rb +1 -0
  59. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -0
  60. data/lib/mongoid/association/referenced/has_one/eager.rb +3 -3
  61. data/lib/mongoid/association/referenced/has_one/proxy.rb +37 -28
  62. data/lib/mongoid/association/referenced/has_one.rb +5 -1
  63. data/lib/mongoid/association/referenced/syncable.rb +7 -6
  64. data/lib/mongoid/association/referenced.rb +1 -0
  65. data/lib/mongoid/association/reflections.rb +5 -4
  66. data/lib/mongoid/association/relatable.rb +10 -4
  67. data/lib/mongoid/association.rb +5 -0
  68. data/lib/mongoid/atomic/modifiers.rb +1 -0
  69. data/lib/mongoid/atomic/paths/embedded/many.rb +2 -1
  70. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -0
  71. data/lib/mongoid/atomic/paths/embedded.rb +1 -0
  72. data/lib/mongoid/atomic/paths/root.rb +1 -0
  73. data/lib/mongoid/atomic/paths.rb +1 -0
  74. data/lib/mongoid/atomic.rb +23 -62
  75. data/lib/mongoid/atomic_update_preparer.rb +88 -0
  76. data/lib/mongoid/attributes/dynamic.rb +1 -0
  77. data/lib/mongoid/attributes/embedded.rb +34 -0
  78. data/lib/mongoid/attributes/nested.rb +3 -2
  79. data/lib/mongoid/attributes/processing.rb +11 -10
  80. data/lib/mongoid/attributes/projector.rb +1 -0
  81. data/lib/mongoid/attributes/readonly.rb +4 -8
  82. data/lib/mongoid/attributes.rb +6 -4
  83. data/lib/mongoid/cacheable.rb +2 -1
  84. data/lib/mongoid/changeable.rb +58 -49
  85. data/lib/mongoid/clients/factory.rb +37 -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 +33 -61
  114. data/lib/mongoid/contextual/none.rb +15 -32
  115. data/lib/mongoid/contextual/queryable.rb +4 -0
  116. data/lib/mongoid/contextual.rb +4 -0
  117. data/lib/mongoid/copyable.rb +3 -2
  118. data/lib/mongoid/criteria/findable.rb +44 -4
  119. data/lib/mongoid/criteria/includable.rb +5 -4
  120. data/lib/mongoid/criteria/inspectable.rb +4 -0
  121. data/lib/mongoid/criteria/marshalable.rb +4 -0
  122. data/lib/mongoid/criteria/modifiable.rb +5 -0
  123. data/lib/mongoid/criteria/options.rb +1 -0
  124. data/lib/mongoid/criteria/permission.rb +5 -0
  125. data/lib/mongoid/criteria/queryable/aggregable.rb +1 -0
  126. data/lib/mongoid/criteria/queryable/expandable.rb +1 -0
  127. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -1
  128. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
  129. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -1
  130. data/lib/mongoid/criteria/queryable/extensions/date.rb +4 -3
  131. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +2 -1
  132. data/lib/mongoid/criteria/queryable/extensions/hash.rb +2 -1
  133. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +2 -1
  134. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -16
  135. data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -1
  136. data/lib/mongoid/criteria/queryable/extensions/range.rb +2 -1
  137. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +7 -1
  138. data/lib/mongoid/criteria/queryable/extensions/set.rb +2 -1
  139. data/lib/mongoid/criteria/queryable/extensions/string.rb +15 -3
  140. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +2 -1
  141. data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -1
  142. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -1
  143. data/lib/mongoid/criteria/queryable/extensions.rb +1 -0
  144. data/lib/mongoid/criteria/queryable/key.rb +10 -0
  145. data/lib/mongoid/criteria/queryable/macroable.rb +1 -0
  146. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -0
  147. data/lib/mongoid/criteria/queryable/optional.rb +1 -0
  148. data/lib/mongoid/criteria/queryable/options.rb +1 -0
  149. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -0
  150. data/lib/mongoid/criteria/queryable/selectable.rb +12 -27
  151. data/lib/mongoid/criteria/queryable/selector.rb +5 -2
  152. data/lib/mongoid/criteria/queryable/smash.rb +1 -0
  153. data/lib/mongoid/criteria/queryable/storable.rb +4 -3
  154. data/lib/mongoid/criteria/queryable.rb +1 -0
  155. data/lib/mongoid/criteria/scopable.rb +5 -0
  156. data/lib/mongoid/criteria/translator.rb +1 -0
  157. data/lib/mongoid/criteria.rb +37 -10
  158. data/lib/mongoid/deprecable.rb +1 -0
  159. data/lib/mongoid/deprecation.rb +8 -4
  160. data/lib/mongoid/document.rb +171 -125
  161. data/lib/mongoid/encryptable.rb +53 -0
  162. data/lib/mongoid/equality.rb +2 -22
  163. data/lib/mongoid/errors/ambiguous_relationship.rb +1 -0
  164. data/lib/mongoid/errors/attribute_not_loaded.rb +34 -0
  165. data/lib/mongoid/errors/callback.rb +1 -0
  166. data/lib/mongoid/errors/create_collection_failure.rb +1 -0
  167. data/lib/mongoid/errors/criteria_argument_required.rb +1 -0
  168. data/lib/mongoid/errors/delete_restriction.rb +1 -0
  169. data/lib/mongoid/errors/document_not_destroyed.rb +1 -0
  170. data/lib/mongoid/errors/document_not_found.rb +1 -0
  171. data/lib/mongoid/errors/drop_collection_failure.rb +1 -0
  172. data/lib/mongoid/errors/empty_config_file.rb +1 -0
  173. data/lib/mongoid/errors/immutable_attribute.rb +1 -0
  174. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -0
  175. data/lib/mongoid/errors/invalid_async_query_executor.rb +1 -0
  176. data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +33 -0
  177. data/lib/mongoid/errors/invalid_collection.rb +1 -0
  178. data/lib/mongoid/errors/invalid_config_file.rb +1 -0
  179. data/lib/mongoid/errors/invalid_config_option.rb +1 -0
  180. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -0
  181. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +1 -0
  182. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -0
  183. data/lib/mongoid/errors/invalid_elem_match_operator.rb +1 -0
  184. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +6 -4
  185. data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +27 -0
  186. data/lib/mongoid/errors/invalid_expression_operator.rb +1 -0
  187. data/lib/mongoid/errors/invalid_field.rb +1 -0
  188. data/lib/mongoid/errors/invalid_field_operator.rb +1 -0
  189. data/lib/mongoid/errors/invalid_field_option.rb +1 -0
  190. data/lib/mongoid/errors/invalid_field_type.rb +1 -0
  191. data/lib/mongoid/errors/invalid_find.rb +1 -0
  192. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -0
  193. data/lib/mongoid/errors/invalid_includes.rb +1 -0
  194. data/lib/mongoid/errors/invalid_index.rb +1 -0
  195. data/lib/mongoid/errors/invalid_options.rb +1 -0
  196. data/lib/mongoid/errors/invalid_path.rb +1 -0
  197. data/lib/mongoid/errors/invalid_persistence_option.rb +1 -0
  198. data/lib/mongoid/errors/invalid_query.rb +1 -0
  199. data/lib/mongoid/errors/invalid_relation.rb +1 -0
  200. data/lib/mongoid/errors/invalid_relation_option.rb +1 -0
  201. data/lib/mongoid/errors/invalid_scope.rb +1 -0
  202. data/lib/mongoid/errors/invalid_session_nesting.rb +17 -0
  203. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +1 -1
  204. data/lib/mongoid/errors/invalid_storage_options.rb +1 -0
  205. data/lib/mongoid/errors/invalid_time.rb +1 -0
  206. data/lib/mongoid/errors/invalid_transaction_nesting.rb +17 -0
  207. data/lib/mongoid/errors/inverse_not_found.rb +1 -0
  208. data/lib/mongoid/errors/mixed_client_configuration.rb +1 -0
  209. data/lib/mongoid/errors/mixed_relations.rb +1 -0
  210. data/lib/mongoid/errors/mongoid_error.rb +4 -3
  211. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -0
  212. data/lib/mongoid/errors/no_client_config.rb +1 -0
  213. data/lib/mongoid/errors/no_client_database.rb +1 -0
  214. data/lib/mongoid/errors/no_client_hosts.rb +1 -0
  215. data/lib/mongoid/errors/no_clients_config.rb +1 -0
  216. data/lib/mongoid/errors/no_default_client.rb +1 -0
  217. data/lib/mongoid/errors/no_environment.rb +1 -0
  218. data/lib/mongoid/errors/no_map_reduce_output.rb +1 -0
  219. data/lib/mongoid/errors/no_metadata.rb +1 -0
  220. data/lib/mongoid/errors/no_parent.rb +1 -0
  221. data/lib/mongoid/errors/readonly_attribute.rb +1 -0
  222. data/lib/mongoid/errors/readonly_document.rb +1 -0
  223. data/lib/mongoid/errors/rollback.rb +15 -0
  224. data/lib/mongoid/errors/scope_overwrite.rb +1 -0
  225. data/lib/mongoid/errors/sessions_not_supported.rb +17 -0
  226. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -0
  227. data/lib/mongoid/errors/transaction_error.rb +25 -0
  228. data/lib/mongoid/errors/transactions_not_supported.rb +17 -0
  229. data/lib/mongoid/errors/unknown_attribute.rb +1 -0
  230. data/lib/mongoid/errors/unknown_model.rb +1 -0
  231. data/lib/mongoid/errors/unsaved_document.rb +1 -0
  232. data/lib/mongoid/errors/unsupported_javascript.rb +1 -0
  233. data/lib/mongoid/errors/validations.rb +1 -0
  234. data/lib/mongoid/errors.rb +10 -1
  235. data/lib/mongoid/evolvable.rb +1 -0
  236. data/lib/mongoid/extensions/array.rb +10 -24
  237. data/lib/mongoid/extensions/big_decimal.rb +14 -6
  238. data/lib/mongoid/extensions/binary.rb +3 -0
  239. data/lib/mongoid/extensions/boolean.rb +3 -0
  240. data/lib/mongoid/extensions/date.rb +7 -2
  241. data/lib/mongoid/extensions/date_time.rb +4 -6
  242. data/lib/mongoid/extensions/decimal128.rb +3 -0
  243. data/lib/mongoid/extensions/false_class.rb +5 -2
  244. data/lib/mongoid/extensions/float.rb +4 -1
  245. data/lib/mongoid/extensions/hash.rb +21 -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 +3 -5
  360. data/lib/mongoid/validatable/format.rb +1 -0
  361. data/lib/mongoid/validatable/length.rb +1 -0
  362. data/lib/mongoid/validatable/localizable.rb +1 -0
  363. data/lib/mongoid/validatable/macros.rb +5 -15
  364. data/lib/mongoid/validatable/presence.rb +1 -0
  365. data/lib/mongoid/validatable/queryable.rb +9 -0
  366. data/lib/mongoid/validatable/uniqueness.rb +2 -1
  367. data/lib/mongoid/validatable.rb +3 -3
  368. data/lib/mongoid/version.rb +2 -5
  369. data/lib/mongoid/warnings.rb +9 -16
  370. data/lib/mongoid.rb +38 -5
  371. data/lib/rails/generators/mongoid/config/config_generator.rb +17 -3
  372. data/lib/rails/generators/mongoid/config/templates/mongoid.rb +25 -0
  373. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +36 -62
  374. data/lib/rails/generators/mongoid/model/model_generator.rb +4 -0
  375. data/lib/rails/generators/mongoid_generator.rb +13 -0
  376. data/lib/rails/mongoid.rb +4 -29
  377. data/spec/config/mongoid.yml +0 -1
  378. data/spec/integration/active_job_spec.rb +32 -0
  379. data/spec/integration/app_spec.rb +72 -58
  380. data/spec/integration/associations/belongs_to_spec.rb +1 -0
  381. data/spec/integration/associations/embedded_dirty_spec.rb +1 -0
  382. data/spec/integration/associations/embedded_spec.rb +75 -6
  383. data/spec/integration/associations/embeds_many_spec.rb +1 -0
  384. data/spec/integration/associations/embeds_one_spec.rb +6 -25
  385. data/spec/integration/associations/foreign_key_spec.rb +1 -0
  386. data/spec/integration/associations/foreign_key_spec_models.rb +1 -0
  387. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +1 -0
  388. data/spec/integration/associations/has_many_spec.rb +1 -0
  389. data/spec/integration/associations/has_one_spec.rb +1 -0
  390. data/spec/integration/associations/nested_attributes_assignment_spec.rb +1 -0
  391. data/spec/integration/associations/reverse_population_spec.rb +1 -0
  392. data/spec/integration/associations/reverse_population_spec_models.rb +1 -0
  393. data/spec/integration/associations/scope_option_spec.rb +1 -0
  394. data/spec/integration/atomic/modifiers_spec.rb +1 -0
  395. data/spec/integration/bson_regexp_raw_spec.rb +1 -0
  396. data/spec/integration/callbacks_models.rb +3 -2
  397. data/spec/integration/callbacks_spec.rb +2 -1
  398. data/spec/integration/contextual/empty_spec.rb +1 -0
  399. data/spec/integration/criteria/alias_query_spec.rb +25 -88
  400. data/spec/integration/criteria/date_field_spec.rb +1 -0
  401. data/spec/integration/criteria/default_scope_spec.rb +1 -0
  402. data/spec/integration/criteria/logical_spec.rb +10 -28
  403. data/spec/integration/criteria/range_spec.rb +1 -2
  404. data/spec/integration/criteria/raw_value_spec.rb +525 -0
  405. data/spec/integration/criteria/time_with_zone_spec.rb +1 -0
  406. data/spec/integration/discriminator_key_spec.rb +1 -0
  407. data/spec/integration/discriminator_value_spec.rb +1 -0
  408. data/spec/integration/document_spec.rb +1 -0
  409. data/spec/integration/dots_and_dollars_spec.rb +1 -0
  410. data/spec/integration/encryption_spec.rb +100 -0
  411. data/spec/integration/i18n_fallbacks_spec.rb +7 -33
  412. data/spec/integration/matcher_examples_spec.rb +1 -0
  413. data/spec/integration/matcher_operator_data/bits_all_clear.yml +0 -15
  414. data/spec/integration/matcher_operator_data/bits_all_set.yml +0 -15
  415. data/spec/integration/matcher_operator_data/bits_any_clear.yml +0 -15
  416. data/spec/integration/matcher_operator_data/bits_any_set.yml +0 -15
  417. data/spec/integration/matcher_operator_data/size.yml +0 -3
  418. data/spec/integration/matcher_operator_data/type.yml +0 -6
  419. data/spec/integration/matcher_operator_data/type_array.yml +0 -1
  420. data/spec/integration/matcher_operator_data/type_decimal.yml +0 -4
  421. data/spec/integration/matcher_operator_spec.rb +1 -0
  422. data/spec/integration/matcher_spec.rb +21 -66
  423. data/spec/integration/persistence/range_field_spec.rb +1 -0
  424. data/spec/integration/server_query_spec.rb +1 -0
  425. data/spec/integration/shardable_spec.rb +1 -0
  426. data/spec/integration/stringified_symbol_field_spec.rb +1 -0
  427. data/spec/lite_spec_helper.rb +36 -10
  428. data/spec/mongoid/association/accessors_spec.rb +11 -28
  429. data/spec/mongoid/association/auto_save_spec.rb +1 -0
  430. data/spec/mongoid/association/builders_spec.rb +1 -0
  431. data/spec/mongoid/association/constrainable_spec.rb +1 -0
  432. data/spec/mongoid/association/counter_cache_spec.rb +1 -0
  433. data/spec/mongoid/association/depending_spec.rb +1 -0
  434. data/spec/mongoid/association/eager_spec.rb +52 -24
  435. data/spec/mongoid/association/embedded/cyclic_spec.rb +1 -0
  436. data/spec/mongoid/association/embedded/dirty_spec.rb +1 -0
  437. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +1 -0
  438. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +1 -0
  439. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +1 -0
  440. data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -7
  441. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -0
  442. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +1 -0
  443. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1 -0
  444. data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -2
  445. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +4 -7
  446. data/spec/mongoid/association/embedded/embeds_many_spec.rb +1 -0
  447. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -0
  448. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +1 -0
  449. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1 -0
  450. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -0
  451. data/spec/mongoid/association/embedded/embeds_one_models.rb +6 -1
  452. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -1
  453. data/spec/mongoid/association/embedded/embeds_one_spec.rb +1 -0
  454. data/spec/mongoid/association/macros_spec.rb +1 -0
  455. data/spec/mongoid/association/nested/many_spec.rb +1 -0
  456. data/spec/mongoid/association/nested/one_spec.rb +1 -0
  457. data/spec/mongoid/association/options_spec.rb +1 -0
  458. data/spec/mongoid/association/polymorphic_spec.rb +1 -0
  459. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +1 -0
  460. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +1 -0
  461. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +1 -0
  462. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1 -4
  463. data/spec/mongoid/association/referenced/belongs_to_models.rb +1 -0
  464. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +2 -1
  465. data/spec/mongoid/association/referenced/belongs_to_spec.rb +1 -0
  466. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -0
  467. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +2 -1
  468. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +1 -0
  469. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -0
  470. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -31
  471. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +1 -0
  472. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -1
  473. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1 -0
  474. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -0
  475. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +1 -0
  476. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +1 -0
  477. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -0
  478. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
  479. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1085 -2002
  480. data/spec/mongoid/association/referenced/has_many_models.rb +1 -0
  481. data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -1
  482. data/spec/mongoid/association/referenced/has_many_spec.rb +1 -0
  483. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -0
  484. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +1 -0
  485. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +1 -0
  486. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1 -0
  487. data/spec/mongoid/association/referenced/has_one_models.rb +1 -0
  488. data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -1
  489. data/spec/mongoid/association/referenced/has_one_spec.rb +1 -0
  490. data/spec/mongoid/association/reflections_spec.rb +1 -0
  491. data/spec/mongoid/association/syncable_spec.rb +1 -0
  492. data/spec/mongoid/association_spec.rb +1 -0
  493. data/spec/mongoid/atomic/modifiers_spec.rb +1 -0
  494. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -0
  495. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -0
  496. data/spec/mongoid/atomic/paths/root_spec.rb +1 -0
  497. data/spec/mongoid/atomic/paths_spec.rb +1 -0
  498. data/spec/mongoid/atomic_spec.rb +1 -0
  499. data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
  500. data/spec/mongoid/attributes/dynamic_spec.rb +1 -0
  501. data/spec/mongoid/attributes/embedded_spec.rb +118 -0
  502. data/spec/mongoid/attributes/nested_spec.rb +1 -0
  503. data/spec/mongoid/attributes/nested_spec_models.rb +1 -0
  504. data/spec/mongoid/attributes/projector_spec.rb +1 -0
  505. data/spec/mongoid/attributes/readonly_spec.rb +1 -19
  506. data/spec/mongoid/attributes_spec.rb +18 -35
  507. data/spec/mongoid/cacheable_spec.rb +1 -0
  508. data/spec/mongoid/changeable_spec.rb +4 -3
  509. data/spec/mongoid/clients/factory_spec.rb +77 -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 -283
  532. data/spec/mongoid/contextual/none_spec.rb +1 -0
  533. data/spec/mongoid/copyable_spec.rb +1 -0
  534. data/spec/mongoid/copyable_spec_models.rb +1 -0
  535. data/spec/mongoid/criteria/findable_spec.rb +191 -0
  536. data/spec/mongoid/criteria/includable_spec.rb +1 -0
  537. data/spec/mongoid/criteria/includable_spec_models.rb +1 -0
  538. data/spec/mongoid/criteria/inspectable_spec.rb +1 -0
  539. data/spec/mongoid/criteria/marshalable_spec.rb +3 -2
  540. data/spec/mongoid/criteria/modifiable_spec.rb +1 -0
  541. data/spec/mongoid/criteria/options_spec.rb +1 -0
  542. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -0
  543. data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -0
  544. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +1 -0
  545. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +8 -7
  546. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -0
  547. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +21 -11
  548. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +1 -0
  549. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -0
  550. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -0
  551. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -0
  552. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -0
  553. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +1 -0
  554. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -0
  555. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +1 -0
  556. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -11
  557. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -11
  558. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -0
  559. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -66
  560. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -0
  561. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +1 -0
  562. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +1 -0
  563. data/spec/mongoid/criteria/queryable/key_spec.rb +1 -0
  564. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +1 -0
  565. data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -0
  566. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -0
  567. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -0
  568. data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -0
  569. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +4 -3
  570. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +1 -0
  571. data/spec/mongoid/criteria/queryable/selectable_spec.rb +51 -214
  572. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +1 -0
  573. data/spec/mongoid/criteria/queryable/selector_spec.rb +96 -0
  574. data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -0
  575. data/spec/mongoid/criteria/queryable/storable_spec.rb +10 -32
  576. data/spec/mongoid/criteria/scopable_spec.rb +1 -0
  577. data/spec/mongoid/criteria/translator_spec.rb +1 -0
  578. data/spec/mongoid/criteria_projection_spec.rb +6 -5
  579. data/spec/mongoid/criteria_spec.rb +221 -359
  580. data/spec/mongoid/document_fields_spec.rb +1 -0
  581. data/spec/mongoid/document_persistence_context_spec.rb +77 -0
  582. data/spec/mongoid/document_query_spec.rb +5 -4
  583. data/spec/mongoid/document_spec.rb +3 -148
  584. data/spec/mongoid/equality_spec.rb +41 -149
  585. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -0
  586. data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
  587. data/spec/mongoid/errors/callback_spec.rb +1 -0
  588. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -0
  589. data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -0
  590. data/spec/mongoid/errors/document_not_found_spec.rb +1 -0
  591. data/spec/mongoid/errors/invalid_collection_spec.rb +1 -0
  592. data/spec/mongoid/errors/invalid_config_file_spec.rb +1 -0
  593. data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -0
  594. data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -0
  595. data/spec/mongoid/errors/invalid_field_spec.rb +1 -0
  596. data/spec/mongoid/errors/invalid_field_type_spec.rb +1 -0
  597. data/spec/mongoid/errors/invalid_find_spec.rb +1 -0
  598. data/spec/mongoid/errors/invalid_includes_spec.rb +1 -0
  599. data/spec/mongoid/errors/invalid_index_spec.rb +1 -0
  600. data/spec/mongoid/errors/invalid_options_spec.rb +1 -0
  601. data/spec/mongoid/errors/invalid_path_spec.rb +1 -0
  602. data/spec/mongoid/errors/invalid_relation_spec.rb +1 -0
  603. data/spec/mongoid/errors/invalid_scope_spec.rb +1 -0
  604. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -0
  605. data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -0
  606. data/spec/mongoid/errors/invalid_time_spec.rb +1 -0
  607. data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -0
  608. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -0
  609. data/spec/mongoid/errors/mixed_relations_spec.rb +1 -0
  610. data/spec/mongoid/errors/mongoid_error_spec.rb +9 -22
  611. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -0
  612. data/spec/mongoid/errors/no_client_config_spec.rb +1 -0
  613. data/spec/mongoid/errors/no_client_database_spec.rb +1 -0
  614. data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -0
  615. data/spec/mongoid/errors/no_clients_config_spec.rb +1 -0
  616. data/spec/mongoid/errors/no_environment_spec.rb +1 -0
  617. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -0
  618. data/spec/mongoid/errors/no_metadata_spec.rb +1 -0
  619. data/spec/mongoid/errors/no_parent_spec.rb +1 -0
  620. data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -0
  621. data/spec/mongoid/errors/readonly_document_spec.rb +1 -0
  622. data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -0
  623. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -0
  624. data/spec/mongoid/errors/unknown_attribute_spec.rb +1 -0
  625. data/spec/mongoid/errors/unsaved_document_spec.rb +1 -0
  626. data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -0
  627. data/spec/mongoid/errors/validations_spec.rb +1 -0
  628. data/spec/mongoid/extensions/array_spec.rb +3 -262
  629. data/spec/mongoid/extensions/big_decimal_spec.rb +5 -4
  630. data/spec/mongoid/extensions/binary_spec.rb +1 -0
  631. data/spec/mongoid/extensions/boolean_spec.rb +1 -0
  632. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +8 -7
  633. data/spec/mongoid/extensions/date_spec.rb +3 -20
  634. data/spec/mongoid/extensions/date_time_spec.rb +3 -9
  635. data/spec/mongoid/extensions/decimal128_spec.rb +1 -0
  636. data/spec/mongoid/extensions/false_class_spec.rb +1 -7
  637. data/spec/mongoid/extensions/float_spec.rb +3 -9
  638. data/spec/mongoid/extensions/hash_spec.rb +19 -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 -16
  719. data/spec/mongoid/validatable/presence_spec.rb +1 -0
  720. data/spec/mongoid/validatable/uniqueness_spec.rb +48 -3
  721. data/spec/mongoid/validatable_spec.rb +1 -0
  722. data/spec/mongoid/warnings_spec.rb +1 -0
  723. data/spec/mongoid_spec.rb +27 -0
  724. data/spec/rails/controller_extension/controller_runtime_spec.rb +1 -0
  725. data/spec/rails/mongoid_spec.rb +26 -117
  726. data/spec/shared/lib/mrss/docker_runner.rb +1 -1
  727. data/spec/shared/lib/mrss/server_version_registry.rb +1 -1
  728. data/spec/shared/share/Dockerfile.erb +34 -4
  729. data/spec/shared/shlib/distro.sh +0 -10
  730. data/spec/shared/shlib/server.sh +26 -32
  731. data/spec/shared/shlib/set_env.sh +42 -6
  732. data/spec/spec_helper.rb +26 -28
  733. data/spec/support/authorization.rb +1 -0
  734. data/spec/support/client_registry.rb +1 -0
  735. data/spec/support/constraints.rb +1 -0
  736. data/spec/support/crypt/models.rb +50 -0
  737. data/spec/support/crypt.rb +80 -0
  738. data/spec/support/expectations.rb +18 -20
  739. data/spec/support/feature_sandbox.rb +72 -0
  740. data/spec/support/helpers.rb +1 -0
  741. data/spec/support/immutable_ids.rb +22 -21
  742. data/spec/support/macros.rb +4 -6
  743. data/spec/support/models/account.rb +1 -0
  744. data/spec/support/models/acolyte.rb +1 -0
  745. data/spec/support/models/actor.rb +1 -0
  746. data/spec/support/models/actress.rb +1 -0
  747. data/spec/support/models/address.rb +3 -0
  748. data/spec/support/models/address_component.rb +1 -0
  749. data/spec/support/models/address_number.rb +1 -0
  750. data/spec/support/models/agency.rb +1 -0
  751. data/spec/support/models/agent.rb +1 -0
  752. data/spec/support/models/album.rb +1 -0
  753. data/spec/support/models/alert.rb +1 -0
  754. data/spec/support/models/animal.rb +1 -0
  755. data/spec/support/models/answer.rb +1 -0
  756. data/spec/support/models/appointment.rb +1 -0
  757. data/spec/support/models/armrest.rb +1 -0
  758. data/spec/support/models/array_field.rb +1 -0
  759. data/spec/support/models/article.rb +1 -0
  760. data/spec/support/models/artist.rb +1 -0
  761. data/spec/support/models/artwork.rb +1 -0
  762. data/spec/support/models/audible_sound.rb +1 -0
  763. data/spec/support/models/audio.rb +1 -0
  764. data/spec/support/models/augmentation.rb +1 -0
  765. data/spec/support/models/author.rb +1 -0
  766. data/spec/support/models/baby.rb +1 -0
  767. data/spec/support/models/band.rb +5 -1
  768. data/spec/support/models/bar.rb +1 -0
  769. data/spec/support/models/basic.rb +1 -0
  770. data/spec/support/models/bed.rb +1 -0
  771. data/spec/support/models/big_palette.rb +1 -0
  772. data/spec/support/models/birthday.rb +1 -0
  773. data/spec/support/models/bolt.rb +1 -0
  774. data/spec/support/models/bomb.rb +1 -0
  775. data/spec/support/models/book.rb +1 -0
  776. data/spec/support/models/breed.rb +1 -0
  777. data/spec/support/models/browser.rb +1 -0
  778. data/spec/support/models/building.rb +1 -0
  779. data/spec/support/models/building_address.rb +1 -0
  780. data/spec/support/models/bus.rb +1 -0
  781. data/spec/support/models/business.rb +1 -0
  782. data/spec/support/models/callback_test.rb +1 -0
  783. data/spec/support/models/canvas.rb +1 -0
  784. data/spec/support/models/car.rb +1 -0
  785. data/spec/support/models/cat.rb +1 -0
  786. data/spec/support/models/catalog.rb +1 -0
  787. data/spec/support/models/category.rb +1 -0
  788. data/spec/support/models/child.rb +1 -0
  789. data/spec/support/models/child_doc.rb +1 -0
  790. data/spec/support/models/church.rb +1 -0
  791. data/spec/support/models/circle.rb +1 -0
  792. data/spec/support/models/circuit.rb +1 -0
  793. data/spec/support/models/circus.rb +1 -0
  794. data/spec/support/models/code.rb +1 -0
  795. data/spec/support/models/coding/pull_request.rb +1 -0
  796. data/spec/support/models/coding.rb +1 -0
  797. data/spec/support/models/comment.rb +1 -0
  798. data/spec/support/models/company.rb +1 -0
  799. data/spec/support/models/consumption_period.rb +1 -0
  800. data/spec/support/models/contextable_item.rb +1 -0
  801. data/spec/support/models/contractor.rb +1 -0
  802. data/spec/support/models/cookie.rb +1 -0
  803. data/spec/support/models/country_code.rb +1 -0
  804. data/spec/support/models/courier_job.rb +1 -0
  805. data/spec/support/models/cover.rb +1 -0
  806. data/spec/support/models/crate.rb +1 -0
  807. data/spec/support/models/customer.rb +1 -0
  808. data/spec/support/models/customer_address.rb +1 -0
  809. data/spec/support/models/deed.rb +1 -0
  810. data/spec/support/models/definition.rb +1 -0
  811. data/spec/support/models/delegating_patient.rb +1 -0
  812. data/spec/support/models/description.rb +1 -0
  813. data/spec/support/models/dictionary.rb +1 -0
  814. data/spec/support/models/division.rb +1 -0
  815. data/spec/support/models/doctor.rb +1 -0
  816. data/spec/support/models/dog.rb +1 -0
  817. data/spec/support/models/dokument.rb +1 -0
  818. data/spec/support/models/draft.rb +1 -0
  819. data/spec/support/models/dragon.rb +1 -0
  820. data/spec/support/models/driver.rb +1 -0
  821. data/spec/support/models/drug.rb +1 -0
  822. data/spec/support/models/dungeon.rb +1 -0
  823. data/spec/support/models/edit.rb +1 -0
  824. data/spec/support/models/email.rb +1 -0
  825. data/spec/support/models/employer.rb +1 -0
  826. data/spec/support/models/entry.rb +1 -0
  827. data/spec/support/models/eraser.rb +1 -0
  828. data/spec/support/models/even.rb +1 -0
  829. data/spec/support/models/event.rb +1 -0
  830. data/spec/support/models/exhibition.rb +1 -0
  831. data/spec/support/models/exhibitor.rb +1 -0
  832. data/spec/support/models/explosion.rb +1 -0
  833. data/spec/support/models/eye.rb +1 -0
  834. data/spec/support/models/eye_bowl.rb +1 -0
  835. data/spec/support/models/face.rb +1 -0
  836. data/spec/support/models/fanatic.rb +1 -0
  837. data/spec/support/models/favorite.rb +8 -1
  838. data/spec/support/models/filesystem.rb +1 -0
  839. data/spec/support/models/fire_hydrant.rb +1 -0
  840. data/spec/support/models/firefox.rb +1 -0
  841. data/spec/support/models/fish.rb +1 -0
  842. data/spec/support/models/folder.rb +1 -0
  843. data/spec/support/models/folder_item.rb +1 -0
  844. data/spec/support/models/fruits.rb +1 -0
  845. data/spec/support/models/game.rb +1 -0
  846. data/spec/support/models/ghost.rb +1 -0
  847. data/spec/support/models/guitar.rb +1 -0
  848. data/spec/support/models/hole.rb +1 -0
  849. data/spec/support/models/home.rb +1 -0
  850. data/spec/support/models/house.rb +1 -0
  851. data/spec/support/models/html_writer.rb +1 -0
  852. data/spec/support/models/id_key.rb +1 -0
  853. data/spec/support/models/idnodef.rb +1 -0
  854. data/spec/support/models/image.rb +1 -0
  855. data/spec/support/models/implant.rb +1 -0
  856. data/spec/support/models/instrument.rb +1 -0
  857. data/spec/support/models/item.rb +1 -0
  858. data/spec/support/models/jar.rb +1 -0
  859. data/spec/support/models/kaleidoscope.rb +1 -0
  860. data/spec/support/models/kangaroo.rb +1 -0
  861. data/spec/support/models/label.rb +1 -0
  862. data/spec/support/models/language.rb +1 -0
  863. data/spec/support/models/lat_lng.rb +1 -6
  864. data/spec/support/models/league.rb +1 -0
  865. data/spec/support/models/learner.rb +1 -0
  866. data/spec/support/models/line_item.rb +1 -0
  867. data/spec/support/models/location.rb +1 -0
  868. data/spec/support/models/login.rb +1 -0
  869. data/spec/support/models/manufacturer.rb +1 -0
  870. data/spec/support/models/meat.rb +1 -0
  871. data/spec/support/models/membership.rb +1 -0
  872. data/spec/support/models/message.rb +1 -0
  873. data/spec/support/models/minim.rb +1 -0
  874. data/spec/support/models/mixed_drink.rb +1 -0
  875. data/spec/support/models/mop.rb +1 -0
  876. data/spec/support/models/movie.rb +1 -0
  877. data/spec/support/models/my_hash.rb +1 -0
  878. data/spec/support/models/name.rb +1 -0
  879. data/spec/support/models/name_only.rb +1 -0
  880. data/spec/support/models/node.rb +1 -0
  881. data/spec/support/models/note.rb +1 -0
  882. data/spec/support/models/nut.rb +1 -0
  883. data/spec/support/models/odd.rb +1 -0
  884. data/spec/support/models/order.rb +1 -0
  885. data/spec/support/models/ordered_post.rb +1 -0
  886. data/spec/support/models/ordered_preference.rb +1 -0
  887. data/spec/support/models/oscar.rb +1 -0
  888. data/spec/support/models/other_owner_object.rb +1 -0
  889. data/spec/support/models/override.rb +1 -0
  890. data/spec/support/models/ownable.rb +1 -0
  891. data/spec/support/models/owner.rb +1 -0
  892. data/spec/support/models/pack.rb +1 -0
  893. data/spec/support/models/page.rb +1 -0
  894. data/spec/support/models/page_question.rb +1 -0
  895. data/spec/support/models/palette.rb +1 -0
  896. data/spec/support/models/parent.rb +1 -0
  897. data/spec/support/models/parent_doc.rb +1 -0
  898. data/spec/support/models/passport.rb +1 -0
  899. data/spec/support/models/patient.rb +1 -0
  900. data/spec/support/models/pdf_writer.rb +1 -0
  901. data/spec/support/models/pencil.rb +1 -0
  902. data/spec/support/models/person.rb +1 -0
  903. data/spec/support/models/pet.rb +1 -0
  904. data/spec/support/models/pet_owner.rb +1 -0
  905. data/spec/support/models/phone.rb +1 -0
  906. data/spec/support/models/piano.rb +1 -0
  907. data/spec/support/models/pizza.rb +1 -0
  908. data/spec/support/models/player.rb +1 -0
  909. data/spec/support/models/post.rb +1 -0
  910. data/spec/support/models/post_genre.rb +1 -0
  911. data/spec/support/models/powerup.rb +1 -0
  912. data/spec/support/models/preference.rb +1 -0
  913. data/spec/support/models/princess.rb +1 -0
  914. data/spec/support/models/product.rb +1 -0
  915. data/spec/support/models/profile.rb +1 -0
  916. data/spec/support/models/pronunciation.rb +1 -0
  917. data/spec/support/models/pub.rb +1 -0
  918. data/spec/support/models/publication/encyclopedia.rb +1 -0
  919. data/spec/support/models/publication/review.rb +1 -0
  920. data/spec/support/models/publication.rb +1 -0
  921. data/spec/support/models/purchase.rb +1 -0
  922. data/spec/support/models/purchased_item.rb +1 -0
  923. data/spec/support/models/question.rb +1 -0
  924. data/spec/support/models/quiz.rb +1 -0
  925. data/spec/support/models/rating.rb +1 -0
  926. data/spec/support/models/record.rb +1 -0
  927. data/spec/support/models/registry.rb +1 -0
  928. data/spec/support/models/role.rb +1 -0
  929. data/spec/support/models/root_category.rb +1 -0
  930. data/spec/support/models/sandbox/app/models/app_models_message.rb +4 -0
  931. data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
  932. data/spec/support/models/sandbox/sandbox_message.rb +4 -0
  933. data/spec/support/models/sandbox/sandbox_user.rb +4 -0
  934. data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
  935. data/spec/support/models/sandwich.rb +1 -0
  936. data/spec/support/models/scheduler.rb +1 -0
  937. data/spec/support/models/school.rb +1 -0
  938. data/spec/support/models/scribe.rb +1 -0
  939. data/spec/support/models/sealer.rb +1 -0
  940. data/spec/support/models/seat.rb +1 -0
  941. data/spec/support/models/seo.rb +1 -0
  942. data/spec/support/models/series.rb +1 -0
  943. data/spec/support/models/server.rb +1 -0
  944. data/spec/support/models/service.rb +1 -0
  945. data/spec/support/models/shape.rb +1 -0
  946. data/spec/support/models/shelf.rb +1 -0
  947. data/spec/support/models/shield.rb +1 -0
  948. data/spec/support/models/shipment_address.rb +1 -0
  949. data/spec/support/models/shipping_container.rb +1 -0
  950. data/spec/support/models/shipping_pack.rb +1 -0
  951. data/spec/support/models/shirt.rb +1 -0
  952. data/spec/support/models/shop.rb +1 -0
  953. data/spec/support/models/short_agent.rb +1 -0
  954. data/spec/support/models/short_quiz.rb +1 -0
  955. data/spec/support/models/simple.rb +1 -0
  956. data/spec/support/models/slave.rb +1 -0
  957. data/spec/support/models/song.rb +1 -0
  958. data/spec/support/models/sound.rb +1 -0
  959. data/spec/support/models/spacer.rb +1 -0
  960. data/spec/support/models/square.rb +1 -0
  961. data/spec/support/models/staff.rb +1 -0
  962. data/spec/support/models/store_as_dup_test1.rb +1 -0
  963. data/spec/support/models/store_as_dup_test2.rb +1 -0
  964. data/spec/support/models/store_as_dup_test3.rb +1 -0
  965. data/spec/support/models/store_as_dup_test4.rb +1 -0
  966. data/spec/support/models/strategy.rb +1 -0
  967. data/spec/support/models/student.rb +1 -0
  968. data/spec/support/models/sub_item.rb +1 -0
  969. data/spec/support/models/subscription.rb +1 -0
  970. data/spec/support/models/survey.rb +1 -0
  971. data/spec/support/models/symptom.rb +1 -0
  972. data/spec/support/models/system_role.rb +1 -0
  973. data/spec/support/models/tag.rb +1 -0
  974. data/spec/support/models/target.rb +1 -0
  975. data/spec/support/models/template.rb +1 -0
  976. data/spec/support/models/thing.rb +1 -0
  977. data/spec/support/models/threadlocker.rb +1 -0
  978. data/spec/support/models/title.rb +1 -0
  979. data/spec/support/models/tool.rb +1 -0
  980. data/spec/support/models/topping.rb +1 -0
  981. data/spec/support/models/toy.rb +1 -0
  982. data/spec/support/models/track.rb +1 -0
  983. data/spec/support/models/translation.rb +1 -0
  984. data/spec/support/models/tree.rb +1 -0
  985. data/spec/support/models/truck.rb +1 -0
  986. data/spec/support/models/updatable.rb +1 -0
  987. data/spec/support/models/user.rb +1 -0
  988. data/spec/support/models/user_account.rb +1 -0
  989. data/spec/support/models/validation_callback.rb +1 -0
  990. data/spec/support/models/vehicle.rb +1 -0
  991. data/spec/support/models/version.rb +1 -0
  992. data/spec/support/models/vertex.rb +1 -0
  993. data/spec/support/models/vet_visit.rb +1 -0
  994. data/spec/support/models/video.rb +1 -0
  995. data/spec/support/models/video_game.rb +1 -0
  996. data/spec/support/models/washer.rb +1 -0
  997. data/spec/support/models/weapon.rb +1 -0
  998. data/spec/support/models/wiki_page.rb +1 -0
  999. data/spec/support/models/word.rb +1 -0
  1000. data/spec/support/models/word_origin.rb +1 -0
  1001. data/spec/support/models/writer.rb +1 -0
  1002. data/spec/support/rails_mock.rb +32 -0
  1003. data/spec/support/shared/time.rb +3 -21
  1004. data/spec/support/sinatra_mock.rb +7 -0
  1005. data/spec/support/spec_config.rb +30 -9
  1006. data.tar.gz.sig +0 -0
  1007. metadata +127 -46
  1008. metadata.gz.sig +1 -0
  1009. data/lib/mongoid/association/referenced/eager.rb +0 -163
  1010. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -113
  1011. data/lib/mongoid/contextual/geo_near.rb +0 -236
  1012. data/lib/mongoid/errors/invalid_session_use.rb +0 -21
  1013. data/lib/mongoid/errors/invalid_storage_parent.rb +0 -27
  1014. data/lib/mongoid/query_cache.rb +0 -68
  1015. data/lib/mongoid/validatable/numericality.rb +0 -19
  1016. data/spec/mongoid/contextual/geo_near_spec.rb +0 -471
  1017. data/spec/mongoid/extensions_spec.rb +0 -43
  1018. data/spec/mongoid/query_cache_middleware_spec.rb +0 -50
  1019. data/spec/mongoid/query_cache_spec.rb +0 -865
  1020. data/spec/shared/lib/mrss/release/candidate.rb +0 -281
  1021. data/spec/shared/lib/mrss/release/product_data.rb +0 -144
  1022. data/spec/shared/lib/tasks/candidate.rake +0 -64
@@ -35,34 +35,38 @@ add_uri_option() {
35
35
  }
36
36
 
37
37
  prepare_server() {
38
+ arch=$1
39
+
38
40
  if test -n "$USE_OPT_MONGODB"; then
39
41
  export BINDIR=/opt/mongodb/bin
40
42
  export PATH=$BINDIR:$PATH
41
43
  return
42
44
  fi
43
45
 
44
- . $PROJECT_DIRECTORY/.mod/drivers-evergreen-tools/.evergreen/download-mongodb.sh
46
+ if test "$MONGODB_VERSION" = latest; then
47
+ # Test on the most recent published 4.3 release.
48
+ # https://jira.mongodb.org/browse/RUBY-1724
45
49
 
46
- get_distro
47
- arch="${1:-$DISTRO}"
50
+ . $PROJECT_DIRECTORY/.mod/drivers-evergreen-tools/.evergreen/download-mongodb.sh
51
+
52
+ get_distro
53
+ get_mongodb_download_url_for "$DISTRO" "latest"
54
+ prepare_server_from_url $MONGODB_DOWNLOAD_URL
55
+ else
56
+ download_version="$MONGODB_VERSION"
57
+ url=`$(dirname $0)/get-mongodb-download-url $download_version $arch`
58
+ prepare_server_from_url $url
59
+ fi
48
60
 
49
- get_mongodb_download_url_for "$arch" "$MONGODB_VERSION"
50
- prepare_server_from_url "$MONGODB_DOWNLOAD_URL" "$MONGOSH_DOWNLOAD_URL"
51
61
  }
52
62
 
53
63
  prepare_server_from_url() {
54
- server_url=$1
55
- mongosh_url=$2
64
+ url=$1
56
65
 
57
- dirname=`basename $server_url |sed -e s/.tgz//`
66
+ dirname=`basename $url |sed -e s/.tgz//`
58
67
  mongodb_dir="$MONGO_ORCHESTRATION_HOME"/mdb/"$dirname"
59
68
  mkdir -p "$mongodb_dir"
60
- curl --retry 3 $server_url | tar xz -C "$mongodb_dir" --strip-components 1 -f -
61
-
62
- if test -n "$mongosh_url"; then
63
- curl --retry 3 $mongosh_url | tar xz -C "$mongodb_dir" --strip-components 1 -f -
64
- fi
65
-
69
+ curl --retry 3 $url | tar xz -C "$mongodb_dir" --strip-components 1 -f -
66
70
  BINDIR="$mongodb_dir"/bin
67
71
  export PATH="$BINDIR":$PATH
68
72
  }
@@ -166,26 +170,13 @@ install_mlaunch_git() {
166
170
  fi
167
171
  }
168
172
 
169
- install_haproxy() {
170
- if ! command -v haproxy &> /dev/null; then
171
- if ! command -v apt-get &> /dev/null; then
172
- # no apt-get; assume RHEL
173
- sudo yum -y install haproxy
174
- else
175
- sudo apt-get update && sudo apt-get install --yes haproxy
176
- fi
177
- else
178
- echo 'haproxy is present'
179
- fi
180
- }
181
-
182
173
  install_cmake() {
183
174
  if ! command -v cmake &> /dev/null; then
184
175
  if ! command -v apt-get &> /dev/null; then
185
176
  # no apt-get; assume RHEL
186
177
  sudo yum -y install cmake libarchive
187
178
  else
188
- sudo apt-get update && sudo apt-get install --yes cmake
179
+ sudo apt-get install --yes cmake
189
180
  fi
190
181
  else
191
182
  echo 'cmake is present'
@@ -218,14 +209,17 @@ calculate_server_args() {
218
209
  args="$args --setParameter acceptAPIVersion2=1"
219
210
  fi
220
211
 
221
- args="$args --setParameter diagnosticDataCollectionEnabled=false"
222
-
212
+ # diagnosticDataCollectionEnabled is a mongod-only parameter on server 3.2,
213
+ # and mlaunch does not support specifying mongod-only parameters:
214
+ # https://github.com/rueckstiess/mtools/issues/696
215
+ # Pass it to 3.4 and newer servers where it is accepted by all daemons.
216
+ if test $mongo_version -ge 34; then
217
+ args="$args --setParameter diagnosticDataCollectionEnabled=false"
218
+ fi
223
219
  local uri_options=
224
220
  if test "$TOPOLOGY" = replica-set; then
225
221
  args="$args --replicaset --name test-rs --nodes 2 --arbiter"
226
222
  export HAVE_ARBITER=1
227
- elif test "$TOPOLOGY" = replica-set-single-node; then
228
- args="$args --replicaset --name test-rs --nodes 1"
229
223
  elif test "$TOPOLOGY" = sharded-cluster; then
230
224
  args="$args --replicaset --nodes 2 --sharded 1 --name test-rs"
231
225
  if test -z "$SINGLE_MONGOS"; then
@@ -1,5 +1,6 @@
1
1
  # When changing, also update the hash in share/Dockerfile.
2
- JDK_VERSION=jdk21
2
+ TOOLCHAIN_VERSION=ded7ea845b08cf96f11a747d9540ba3199580dea
3
+ JDK_VERSION=jdk17
3
4
 
4
5
  set_env_java() {
5
6
  ls -l /opt || true
@@ -89,13 +90,34 @@ set_env_ruby() {
89
90
  if test "$USE_OPT_TOOLCHAIN" = 1; then
90
91
  # Nothing, also PATH is already set
91
92
  :
93
+ elif true; then
94
+
95
+ # For testing toolchains:
96
+ #toolchain_url=https://s3.amazonaws.com//mciuploads/mongo-ruby-toolchain/`host_distro`/f11598d091441ffc8d746aacfdc6c26741a3e629/mongo_ruby_driver_toolchain_`host_distro |tr - _`_patch_f11598d091441ffc8d746aacfdc6c26741a3e629_5e46f2793e8e866f36eda2c5_20_02_14_19_18_18.tar.gz
97
+ toolchain_url=http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/$TOOLCHAIN_VERSION/`host_distro`/$RVM_RUBY.tar.xz
98
+ curl --retry 3 -fL $toolchain_url |tar Jxf -
99
+ export PATH=`pwd`/rubies/$RVM_RUBY/bin:$PATH
100
+ #export PATH=`pwd`/rubies/python/3/bin:$PATH
101
+
102
+ # Attempt to get bundler to report all errors - so far unsuccessful
103
+ #curl --retry 3 -o bundler-openssl.diff https://github.com/bundler/bundler/compare/v2.0.1...p-mongo:report-errors.diff
104
+ #find . -path \*/lib/bundler/fetcher.rb -exec patch {} bundler-openssl.diff \;
105
+
92
106
  else
93
- # For testing unpublished builds:
94
- #build_url=https://s3.amazonaws.com/mciuploads/mongo-ruby-toolchain/library/`host_distro`/$RVM_RUBY.tar.xz
95
107
 
96
- build_url=http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-toolchain/library/`host_distro`/$RVM_RUBY.tar.xz
97
- curl --retry 3 -fL $build_url |tar Jxf -
98
- export PATH=`pwd`/rubies/$RVM_RUBY/bin:$PATH
108
+ # Normal operation
109
+ if ! test -d $HOME/.rubies/$RVM_RUBY/bin; then
110
+ echo "Ruby directory does not exist: $HOME/.rubies/$RVM_RUBY/bin" 1>&2
111
+ echo "Contents of /opt:" 1>&2
112
+ ls -l /opt 1>&2 || true
113
+ echo ".rubies symlink:" 1>&2
114
+ ls -ld $HOME/.rubies 1>&2 || true
115
+ echo "Our rubies:" 1>&2
116
+ ls -l $HOME/.rubies 1>&2 || true
117
+ exit 2
118
+ fi
119
+ export PATH=$HOME/.rubies/$RVM_RUBY/bin:$PATH
120
+
99
121
  fi
100
122
 
101
123
  ruby --version
@@ -106,5 +128,19 @@ set_env_ruby() {
106
128
 
107
129
  ruby -v |fgrep $ruby_name
108
130
  ruby -v |fgrep $ruby_version
131
+
132
+ # We shouldn't need to update rubygems, and there is value in
133
+ # testing on whatever rubygems came with each supported ruby version
134
+ #echo 'updating rubygems'
135
+ #gem update --system
136
+
137
+ # Only install bundler when not using ruby-head.
138
+ # ruby-head comes with bundler and gem complains
139
+ # because installing bundler would overwrite the bundler binary.
140
+ # We now install bundler in the toolchain, hence nothing needs to be done
141
+ # in the tests.
142
+ if false && echo "$RVM_RUBY" |grep -q jruby; then
143
+ gem install bundler -v '<2'
144
+ fi
109
145
  fi
110
146
  }
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  require 'lite_spec_helper'
4
5
 
@@ -48,11 +49,15 @@ require 'support/expectations'
48
49
  require 'support/helpers'
49
50
  require 'support/macros'
50
51
  require 'support/constraints'
52
+ require 'support/crypt'
53
+
54
+ use_ssl = %w[ ssl 1 true ].include?(ENV['SSL'])
55
+ ssl_options = { ssl: use_ssl }.freeze
51
56
 
52
57
  # Give MongoDB servers time to start up in CI environments
53
58
  if SpecConfig.instance.ci?
54
59
  starting = true
55
- client = Mongo::Client.new(SpecConfig.instance.addresses)
60
+ client = Mongo::Client.new(SpecConfig.instance.addresses, ssl_options)
56
61
  while starting
57
62
  begin
58
63
  client.command(ping: 1)
@@ -69,15 +74,15 @@ CONFIG = {
69
74
  default: {
70
75
  database: database_id,
71
76
  hosts: SpecConfig.instance.addresses,
72
- options: {
77
+ options: ssl_options.merge(
73
78
  server_selection_timeout: 3.42,
74
79
  wait_queue_timeout: 1,
75
80
  max_pool_size: 5,
76
81
  heartbeat_frequency: 180,
77
- user: MONGOID_ROOT_USER.name,
78
- password: MONGOID_ROOT_USER.password,
79
- auth_source: Mongo::Database::ADMIN,
80
- }
82
+ user: SpecConfig.instance.uri.client_options[:user] || MONGOID_ROOT_USER.name,
83
+ password: SpecConfig.instance.uri.client_options[:password] || MONGOID_ROOT_USER.password,
84
+ auth_source: Mongo::Database::ADMIN
85
+ )
81
86
  }
82
87
  },
83
88
  options: {
@@ -101,16 +106,6 @@ Dir[ File.join(MODELS, "*.rb") ].sort.each do |file|
101
106
  autoload name.camelize.to_sym, name
102
107
  end
103
108
 
104
- module Rails
105
- class Application
106
- end
107
- end
108
-
109
- module MyApp
110
- class Application < Rails::Application
111
- end
112
- end
113
-
114
109
  module Mongoid
115
110
  class Query
116
111
  include Mongoid::Criteria::Queryable
@@ -122,24 +117,27 @@ ActiveSupport::Inflector.inflections do |inflect|
122
117
  inflect.singular("address_components", "address_component")
123
118
  end
124
119
 
125
- I18n.config.enforce_available_locales = false
120
+ Time.zone = 'UTC'
126
121
 
122
+ I18n.config.enforce_available_locales = false
127
123
 
128
124
  if %w(yes true 1).include?((ENV['TEST_I18N_FALLBACKS'] || '').downcase)
129
125
  require "i18n/backend/fallbacks"
130
126
  end
131
127
 
132
- # The user must be created before any of the tests are loaded, until
133
- # https://jira.mongodb.org/browse/MONGOID-4827 is implemented.
134
- client = Mongo::Client.new(SpecConfig.instance.addresses, server_selection_timeout: 3.03)
135
- begin
136
- # Create the root user administrator as the first user to be added to the
137
- # database. This user will need to be authenticated in order to add any
138
- # more users to any other databases.
139
- client.database.users.create(MONGOID_ROOT_USER)
140
- rescue Mongo::Error::OperationFailure => e
141
- ensure
142
- client.close
128
+ unless SpecConfig.instance.atlas?
129
+ # The user must be created before any of the tests are loaded, until
130
+ # https://jira.mongodb.org/browse/MONGOID-4827 is implemented.
131
+ client = Mongo::Client.new(SpecConfig.instance.addresses, server_selection_timeout: 3.03)
132
+ begin
133
+ # Create the root user administrator as the first user to be added to the
134
+ # database. This user will need to be authenticated in order to add any
135
+ # more users to any other databases.
136
+ client.database.users.create(MONGOID_ROOT_USER)
137
+ rescue Mongo::Error::OperationFailure => e
138
+ ensure
139
+ client.close
140
+ end
143
141
  end
144
142
 
145
143
  RSpec.configure do |config|
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  # Set up a root user so we can set up authentication on a database level.
4
5
  MONGOID_ROOT_USER = Mongo::Auth::User.new(
@@ -1,3 +1,4 @@
1
+ # rubocop:todo all
1
2
  require 'singleton'
2
3
 
3
4
  class ClientRegistry
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Constraints
4
5
  RAILS_VERSION = ActiveSupport.version.to_s.split('.')[0..1].join('.').freeze
@@ -0,0 +1,50 @@
1
+ # rubocop:todo all
2
+ module Crypt
3
+ class Patient
4
+ include Mongoid::Document
5
+
6
+ encrypt_with key_id: "grolrnFVSSW9Gq04Q87R9Q=="
7
+
8
+ field :code, type: String
9
+ field :medical_records, type: Array, encrypt: { deterministic: false}
10
+ field :blood_type, type: String, encrypt: {
11
+ deterministic: false,
12
+ key_name_field: :blood_type_key_name
13
+ }
14
+ field :ssn, type: Integer, encrypt: { deterministic: true }
15
+ field :blood_type_key_name, type: String
16
+
17
+ embeds_one :insurance, class_name: "Crypt::Insurance"
18
+ end
19
+
20
+ class Insurance
21
+ include Mongoid::Document
22
+
23
+ field :policy_number, type: Integer, encrypt: { deterministic: true }
24
+ embedded_in :patient, class_name: "Crypt::Patient"
25
+ end
26
+
27
+ class User
28
+ include Mongoid::Document
29
+
30
+ field :name, type: String, encrypt: {
31
+ key_id: "grolrnFVSSW9Gq04Q87R9Q==",
32
+ deterministic: false
33
+ }
34
+ field :email, type: String, encrypt: {
35
+ key_id: "S34mE/HhSFSym3yErpER6Q==",
36
+ deterministic: true
37
+ }
38
+ end
39
+
40
+ class Car
41
+ include Mongoid::Document
42
+
43
+ store_in database: 'vehicles'
44
+
45
+ encrypt_with key_id: "grolrnFVSSW9Gq04Q87R9Q==", deterministic: true
46
+
47
+ field :vin, type: String, encrypt: true
48
+ field :make, type: String
49
+ end
50
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+ # rubocop:todo all
3
+
4
+ module Mongoid
5
+ # This module includes helpers for testing encryption.
6
+ module Crypt
7
+
8
+ shared_context 'with encryption' do
9
+ let(:mongocryptd_port) do
10
+ if ENV['MONGO_RUBY_DRIVER_MONGOCRYPTD_PORT'] &&
11
+ !ENV['MONGO_RUBY_DRIVER_MONGOCRYPTD_PORT'].empty?
12
+ then
13
+ ENV['MONGO_RUBY_DRIVER_MONGOCRYPTD_PORT'].to_i
14
+ else
15
+ 27020
16
+ end
17
+ end
18
+
19
+ let(:extra_options) do
20
+ {
21
+ mongocryptd_spawn_args: ["--port=#{mongocryptd_port}"],
22
+ mongocryptd_uri: "mongodb://localhost:#{mongocryptd_port}",
23
+ }
24
+ end
25
+
26
+ let(:crypt_shared_lib_path) do
27
+ ENV['MONGO_RUBY_DRIVER_CRYPT_SHARED_LIB_PATH']
28
+ end
29
+
30
+ let(:key_vault_client) do
31
+ Mongo::Client.new(SpecConfig.instance.addresses, database: key_vault_database)
32
+ end
33
+
34
+ let(:key_vault_database) do
35
+ 'encryption'
36
+ end
37
+
38
+ let(:key_vault_collection) do
39
+ '__keyVault'
40
+ end
41
+
42
+ let(:key_vault_namespace) do
43
+ "#{key_vault_database}.#{key_vault_collection}"
44
+ end
45
+
46
+ let(:local_master_key) do
47
+ 'A' * 96
48
+ end
49
+
50
+ let(:kms_providers) do
51
+ {
52
+ local: {
53
+ key: local_master_key
54
+ }
55
+ }
56
+ end
57
+
58
+ let(:key_alt_name) do
59
+ 'mongoid_test_key'
60
+ end
61
+
62
+ let(:client_encryption) do
63
+ Mongo::ClientEncryption.new(
64
+ key_vault_client,
65
+ key_vault_namespace: key_vault_namespace,
66
+ kms_providers: kms_providers
67
+ )
68
+ end
69
+
70
+ let(:data_key_id) do
71
+ if (data_key = client_encryption.get_key_by_alt_name(key_alt_name))
72
+ Base64.encode64(data_key['_id'].data)
73
+ else
74
+ key_id = client_encryption.create_data_key('local', key_alt_names: [key_alt_name])
75
+ Base64.encode64(key_id.data).strip
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -1,31 +1,29 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Expectations
5
- # Previously this method used RSpec::Mocks with .exactly.times(n).and_call_original,
6
- # which stopped working reliably in Ruby 3.3. Now we directly wrap the target method.
7
- def expect_query(number)
8
- if %i[ sharded load-balanced ].include?(ClusterConfig.instance.topology) && number > 0
9
- skip 'This spec requires replica set or standalone topology'
10
- end
11
6
 
12
- klass = Mongo::Server::ConnectionBase
13
- original_method = klass.instance_method(:command_started)
14
- query_count = 0
7
+ def connection_class
8
+ if defined?(Mongo::Server::ConnectionBase)
9
+ Mongo::Server::ConnectionBase
10
+ else
11
+ # Pre-2.8 drivers
12
+ Mongo::Server::Connection
13
+ end
14
+ end
15
15
 
16
- begin
17
- klass.define_method(:command_started) do |*args, **kwargs|
18
- query_count += 1
19
- original_method.bind_call(self, *args, **kwargs)
16
+ def expect_query(number)
17
+ rv = nil
18
+ RSpec::Mocks.with_temporary_scope do
19
+ if number > 0
20
+ expect_any_instance_of(connection_class).to receive(:command_started).exactly(number).times.and_call_original
21
+ else
22
+ expect_any_instance_of(connection_class).not_to receive(:command_started)
20
23
  end
21
-
22
- result = yield
23
- expect(query_count).to eq(number)
24
- result
25
- ensure
26
- klass.remove_method(:command_started)
27
- klass.define_method(:command_started, original_method)
24
+ rv = yield
28
25
  end
26
+ rv
29
27
  end
30
28
 
31
29
  def expect_no_queries(&block)
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+ # rubocop:todo all
3
+
4
+ # A helper utility for allowing features to be loaded and constants defined
5
+ # inside a sandbox, where they can be unloaded and undefined when finished.
6
+ #
7
+ # @example Quarantining a block of code.
8
+ # FeatureSandbox.quarantine do
9
+ # require "support/rails_mock"
10
+ # expect(defined?(Rails)).to be == "constant"
11
+ # end
12
+ # expect(defined?(Rails)).to be_nil
13
+ module FeatureSandbox
14
+ extend self
15
+
16
+ # Initiates the quarantine by noting the current state of the top-level
17
+ # constants, the $LOADED_FEATURES array, and the $LOAD_PATH.
18
+ #
19
+ # @return Hash The current state of the environment.
20
+ def start_quarantine
21
+ { constants: Object.constants.dup,
22
+ features: $LOADED_FEATURES.dup,
23
+ load_path: $LOAD_PATH.dup }
24
+ end
25
+
26
+ # Terminates the quarantine indicated by the given state, by rolling back
27
+ # changes made since the state was created.
28
+ #
29
+ # @param [ Hash ] state The state object to roll the environment back to.
30
+ def end_quarantine(state)
31
+ restore_load_path(state[:load_path])
32
+ unload_features($LOADED_FEATURES - state[:features])
33
+ unload_constants(Object, Object.constants - state[:constants])
34
+ end
35
+
36
+ # A convenience method for starting a quarantine, yielding to a block, and
37
+ # then ending the quarantine when the block finishes.
38
+ #
39
+ # @yield The block will be executed within the quarantine, with all changes
40
+ # to state rolled back upon completion.
41
+ def quarantine
42
+ state = start_quarantine
43
+ yield
44
+ ensure
45
+ end_quarantine(state)
46
+ end
47
+
48
+ private
49
+
50
+ def restore_load_path(list)
51
+ $LOAD_PATH.replace(list)
52
+ end
53
+
54
+ def unload_features(list)
55
+ list.each do |path|
56
+ $LOADED_FEATURES.delete(path)
57
+ end
58
+ end
59
+
60
+ def unload_constants(parent, list)
61
+ list.each do |name|
62
+ obj = parent.const_get(name)
63
+ if obj.is_a?(Module) && obj.constants(false).any?
64
+ unload_constants(obj, obj.constants(false))
65
+ end
66
+
67
+ Mongoid.deregister_model(obj) if obj.is_a?(Mongoid::Document)
68
+
69
+ parent.send(:remove_const, name)
70
+ end
71
+ end
72
+ end
@@ -1,3 +1,4 @@
1
+ # rubocop:todo all
1
2
  module Helpers
2
3
  # Reloads the specified model class.
3
4
  #
@@ -1,30 +1,31 @@
1
+ # rubocop:todo all
1
2
  module Mongoid
2
3
  module ImmutableIds
3
4
  def immutable_id_examples_as(name)
4
5
  shared_examples_for name do
5
6
  shared_examples 'a persisted document' do
6
- it 'should ignore the change and issue a warning' do
7
- expect(Mongoid::Warnings).to receive(:warn_mutable_ids)
8
- expect { invoke_operation! }.not_to raise_error
9
- expect(id_is_unchanged).not_to be legacy_behavior_expects_id_to_change
7
+ it 'should disallow _id to be updated' do
8
+ expect { invoke_operation! }
9
+ .to raise_error(Mongoid::Errors::ImmutableAttribute)
10
+ end
11
+
12
+ context 'when immutable_ids is false' do
13
+ before { Mongoid::Config.immutable_ids = false }
14
+ after { Mongoid::Config.immutable_ids = true }
15
+
16
+ it 'should ignore the change and issue a warning' do
17
+ expect(Mongoid::Warnings).to receive(:warn_mutable_ids)
18
+ expect { invoke_operation! }.not_to raise_error
19
+ expect(id_is_unchanged).not_to be legacy_behavior_expects_id_to_change
20
+ end
10
21
  end
11
22
 
12
- context 'when immutable_ids is true' do
13
- before { Mongoid::Config.immutable_ids = true }
14
- after { Mongoid::Config.immutable_ids = false }
23
+ context 'when id is set to the existing value' do
24
+ let(:new_id_value) { object._id }
15
25
 
16
- it 'should disallow _id to be updated' do
26
+ it 'should allow the update to proceed' do
17
27
  expect { invoke_operation! }
18
- .to raise_error(Mongoid::Errors::ImmutableAttribute)
19
- end
20
-
21
- context 'when id is set to the existing value' do
22
- let(:new_id_value) { object._id }
23
-
24
- it 'should allow the update to proceed' do
25
- expect { invoke_operation! }
26
- .not_to raise_error
27
- end
28
+ .not_to raise_error
28
29
  end
29
30
  end
30
31
  end
@@ -77,7 +78,8 @@ module Mongoid
77
78
 
78
79
  context 'updating embeds_one via parent' do
79
80
  context 'when immutable_ids is false' do
80
- before { expect(Mongoid::Config.immutable_ids).to be false }
81
+ before { Mongoid::Config.immutable_ids = false }
82
+ after { Mongoid::Config.immutable_ids = true }
81
83
 
82
84
  it 'should ignore the change' do
83
85
  expect(Mongoid::Warnings).to receive(:warn_mutable_ids)
@@ -94,8 +96,7 @@ module Mongoid
94
96
  end
95
97
 
96
98
  context 'when immutable_ids is true' do
97
- before { Mongoid::Config.immutable_ids = true }
98
- after { Mongoid::Config.immutable_ids = false }
99
+ before { expect(Mongoid::Config.immutable_ids).to be true }
99
100
 
100
101
  it 'should raise an exception' do
101
102
  parent.pet = pet = Pet.new
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  module Mongoid
4
5
  module Macros
@@ -73,7 +74,7 @@ module Mongoid
73
74
 
74
75
  def query_cache_enabled
75
76
  around do |example|
76
- Mongoid::QueryCache.cache do
77
+ Mongo::QueryCache.cache do
77
78
  example.run
78
79
  end
79
80
  end
@@ -102,12 +103,9 @@ module Mongoid
102
103
  end
103
104
  end
104
105
 
105
- def time_zone_override(tz)
106
+ def time_zone_override(time_zone)
106
107
  around do |example|
107
- old_tz = Time.zone
108
- Time.zone = tz
109
- example.run
110
- Time.zone = old_tz
108
+ Time.use_zone(time_zone) { example.run }
111
109
  end
112
110
  end
113
111
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  class Account
4
5
  include Mongoid::Document
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  class Acolyte
4
5
  include Mongoid::Document
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  class Actor
4
5
  include Mongoid::Document
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  class Actress < Actor
4
5
  end