mongoid 8.1.9 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1035) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -0
  3. data/LICENSE +1 -1
  4. data/README.md +4 -9
  5. data/Rakefile +63 -45
  6. data/lib/config/locales/en.yml +66 -5
  7. data/lib/mongoid/association/accessors.rb +16 -20
  8. data/lib/mongoid/association/bindable.rb +27 -8
  9. data/lib/mongoid/association/builders.rb +3 -2
  10. data/lib/mongoid/association/constrainable.rb +1 -0
  11. data/lib/mongoid/association/depending.rb +16 -1
  12. data/lib/mongoid/association/eager.rb +160 -0
  13. data/lib/mongoid/association/eager_loadable.rb +15 -7
  14. data/lib/mongoid/association/embedded/batchable.rb +6 -7
  15. data/lib/mongoid/association/embedded/cyclic.rb +1 -0
  16. data/lib/mongoid/association/embedded/eager.rb +23 -0
  17. data/lib/mongoid/association/embedded/embedded_in/binding.rb +5 -4
  18. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +1 -0
  19. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +21 -7
  20. data/lib/mongoid/association/embedded/embedded_in.rb +7 -0
  21. data/lib/mongoid/association/embedded/embeds_many/binding.rb +3 -2
  22. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -0
  23. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +134 -144
  24. data/lib/mongoid/association/embedded/embeds_many.rb +1 -0
  25. data/lib/mongoid/association/embedded/embeds_one/binding.rb +3 -2
  26. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +1 -0
  27. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +112 -54
  28. data/lib/mongoid/association/embedded/embeds_one.rb +1 -0
  29. data/lib/mongoid/association/embedded.rb +2 -0
  30. data/lib/mongoid/association/macros.rb +17 -14
  31. data/lib/mongoid/association/many.rb +1 -0
  32. data/lib/mongoid/association/marshalable.rb +4 -0
  33. data/lib/mongoid/association/nested/many.rb +8 -3
  34. data/lib/mongoid/association/nested/nested_buildable.rb +32 -0
  35. data/lib/mongoid/association/nested/one.rb +6 -3
  36. data/lib/mongoid/association/nested.rb +1 -0
  37. data/lib/mongoid/association/one.rb +1 -0
  38. data/lib/mongoid/association/options.rb +9 -2
  39. data/lib/mongoid/association/proxy.rb +30 -18
  40. data/lib/mongoid/association/referenced/auto_save.rb +6 -2
  41. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  42. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -0
  43. data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -1
  44. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -14
  45. data/lib/mongoid/association/referenced/belongs_to.rb +2 -1
  46. data/lib/mongoid/association/referenced/counter_cache.rb +7 -2
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +15 -3
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +1 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +132 -94
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +8 -3
  52. data/lib/mongoid/association/referenced/has_many/binding.rb +1 -0
  53. data/lib/mongoid/association/referenced/has_many/buildable.rb +1 -0
  54. data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
  55. data/lib/mongoid/association/referenced/has_many/enumerable.rb +39 -6
  56. data/lib/mongoid/association/referenced/has_many/proxy.rb +131 -104
  57. data/lib/mongoid/association/referenced/has_many.rb +2 -1
  58. data/lib/mongoid/association/referenced/has_one/binding.rb +1 -0
  59. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -0
  60. data/lib/mongoid/association/referenced/has_one/eager.rb +3 -3
  61. data/lib/mongoid/association/referenced/has_one/proxy.rb +37 -28
  62. data/lib/mongoid/association/referenced/has_one.rb +5 -1
  63. data/lib/mongoid/association/referenced/syncable.rb +7 -6
  64. data/lib/mongoid/association/referenced.rb +1 -0
  65. data/lib/mongoid/association/reflections.rb +5 -4
  66. data/lib/mongoid/association/relatable.rb +10 -4
  67. data/lib/mongoid/association.rb +5 -0
  68. data/lib/mongoid/atomic/modifiers.rb +1 -0
  69. data/lib/mongoid/atomic/paths/embedded/many.rb +2 -1
  70. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -0
  71. data/lib/mongoid/atomic/paths/embedded.rb +1 -0
  72. data/lib/mongoid/atomic/paths/root.rb +1 -0
  73. data/lib/mongoid/atomic/paths.rb +1 -0
  74. data/lib/mongoid/atomic.rb +23 -62
  75. data/lib/mongoid/atomic_update_preparer.rb +88 -0
  76. data/lib/mongoid/attributes/dynamic.rb +1 -0
  77. data/lib/mongoid/attributes/embedded.rb +34 -0
  78. data/lib/mongoid/attributes/nested.rb +3 -2
  79. data/lib/mongoid/attributes/processing.rb +11 -10
  80. data/lib/mongoid/attributes/projector.rb +1 -0
  81. data/lib/mongoid/attributes/readonly.rb +4 -8
  82. data/lib/mongoid/attributes.rb +6 -4
  83. data/lib/mongoid/cacheable.rb +2 -1
  84. data/lib/mongoid/changeable.rb +58 -49
  85. data/lib/mongoid/clients/factory.rb +37 -1
  86. data/lib/mongoid/clients/options.rb +113 -3
  87. data/lib/mongoid/clients/sessions.rb +245 -64
  88. data/lib/mongoid/clients/storage_options.rb +37 -1
  89. data/lib/mongoid/clients/validators/storage.rb +1 -0
  90. data/lib/mongoid/clients/validators.rb +1 -0
  91. data/lib/mongoid/clients.rb +36 -4
  92. data/lib/mongoid/collection_configurable.rb +1 -0
  93. data/lib/mongoid/composable.rb +5 -0
  94. data/lib/mongoid/config/defaults.rb +16 -36
  95. data/lib/mongoid/config/encryption.rb +213 -0
  96. data/lib/mongoid/config/environment.rb +2 -5
  97. data/lib/mongoid/config/introspection.rb +152 -0
  98. data/lib/mongoid/config/options.rb +8 -3
  99. data/lib/mongoid/config/validators/async_query_executor.rb +12 -2
  100. data/lib/mongoid/config/validators/client.rb +1 -0
  101. data/lib/mongoid/config/validators/option.rb +1 -0
  102. data/lib/mongoid/config/validators.rb +1 -0
  103. data/lib/mongoid/config.rb +57 -91
  104. data/lib/mongoid/contextual/aggregable/memory.rb +1 -0
  105. data/lib/mongoid/contextual/aggregable/mongo.rb +2 -5
  106. data/lib/mongoid/contextual/aggregable/none.rb +1 -0
  107. data/lib/mongoid/contextual/aggregable.rb +1 -0
  108. data/lib/mongoid/contextual/atomic.rb +98 -11
  109. data/lib/mongoid/contextual/command.rb +3 -0
  110. data/lib/mongoid/contextual/map_reduce.rb +6 -0
  111. data/lib/mongoid/contextual/memory.rb +45 -42
  112. data/lib/mongoid/contextual/mongo/documents_loader.rb +3 -2
  113. data/lib/mongoid/contextual/mongo.rb +32 -60
  114. data/lib/mongoid/contextual/none.rb +15 -32
  115. data/lib/mongoid/contextual/queryable.rb +4 -0
  116. data/lib/mongoid/contextual.rb +4 -0
  117. data/lib/mongoid/copyable.rb +3 -2
  118. data/lib/mongoid/criteria/findable.rb +44 -4
  119. data/lib/mongoid/criteria/includable.rb +5 -4
  120. data/lib/mongoid/criteria/inspectable.rb +4 -0
  121. data/lib/mongoid/criteria/marshalable.rb +4 -0
  122. data/lib/mongoid/criteria/modifiable.rb +5 -0
  123. data/lib/mongoid/criteria/options.rb +1 -0
  124. data/lib/mongoid/criteria/permission.rb +5 -0
  125. data/lib/mongoid/criteria/queryable/aggregable.rb +1 -0
  126. data/lib/mongoid/criteria/queryable/expandable.rb +1 -0
  127. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -1
  128. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
  129. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -1
  130. data/lib/mongoid/criteria/queryable/extensions/date.rb +4 -3
  131. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +2 -1
  132. data/lib/mongoid/criteria/queryable/extensions/hash.rb +2 -1
  133. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +2 -1
  134. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -16
  135. data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -1
  136. data/lib/mongoid/criteria/queryable/extensions/range.rb +2 -1
  137. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +7 -1
  138. data/lib/mongoid/criteria/queryable/extensions/set.rb +2 -1
  139. data/lib/mongoid/criteria/queryable/extensions/string.rb +15 -3
  140. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +2 -1
  141. data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -1
  142. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -1
  143. data/lib/mongoid/criteria/queryable/extensions.rb +1 -0
  144. data/lib/mongoid/criteria/queryable/key.rb +10 -0
  145. data/lib/mongoid/criteria/queryable/macroable.rb +1 -0
  146. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -0
  147. data/lib/mongoid/criteria/queryable/optional.rb +1 -0
  148. data/lib/mongoid/criteria/queryable/options.rb +1 -0
  149. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -0
  150. data/lib/mongoid/criteria/queryable/selectable.rb +12 -27
  151. data/lib/mongoid/criteria/queryable/selector.rb +5 -2
  152. data/lib/mongoid/criteria/queryable/smash.rb +1 -0
  153. data/lib/mongoid/criteria/queryable/storable.rb +4 -3
  154. data/lib/mongoid/criteria/queryable.rb +1 -0
  155. data/lib/mongoid/criteria/scopable.rb +5 -0
  156. data/lib/mongoid/criteria/translator.rb +1 -0
  157. data/lib/mongoid/criteria.rb +37 -10
  158. data/lib/mongoid/deprecable.rb +1 -0
  159. data/lib/mongoid/deprecation.rb +8 -4
  160. data/lib/mongoid/document.rb +171 -125
  161. data/lib/mongoid/encryptable.rb +53 -0
  162. data/lib/mongoid/equality.rb +2 -22
  163. data/lib/mongoid/errors/ambiguous_relationship.rb +1 -0
  164. data/lib/mongoid/errors/attribute_not_loaded.rb +34 -0
  165. data/lib/mongoid/errors/callback.rb +1 -0
  166. data/lib/mongoid/errors/create_collection_failure.rb +1 -0
  167. data/lib/mongoid/errors/criteria_argument_required.rb +1 -0
  168. data/lib/mongoid/errors/delete_restriction.rb +1 -0
  169. data/lib/mongoid/errors/document_not_destroyed.rb +1 -0
  170. data/lib/mongoid/errors/document_not_found.rb +1 -0
  171. data/lib/mongoid/errors/drop_collection_failure.rb +1 -0
  172. data/lib/mongoid/errors/empty_config_file.rb +1 -0
  173. data/lib/mongoid/errors/immutable_attribute.rb +1 -0
  174. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -0
  175. data/lib/mongoid/errors/invalid_async_query_executor.rb +1 -0
  176. data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +33 -0
  177. data/lib/mongoid/errors/invalid_collection.rb +1 -0
  178. data/lib/mongoid/errors/invalid_config_file.rb +1 -0
  179. data/lib/mongoid/errors/invalid_config_option.rb +1 -0
  180. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -0
  181. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +1 -0
  182. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -0
  183. data/lib/mongoid/errors/invalid_elem_match_operator.rb +1 -0
  184. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +6 -4
  185. data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +27 -0
  186. data/lib/mongoid/errors/invalid_expression_operator.rb +1 -0
  187. data/lib/mongoid/errors/invalid_field.rb +1 -0
  188. data/lib/mongoid/errors/invalid_field_operator.rb +1 -0
  189. data/lib/mongoid/errors/invalid_field_option.rb +1 -0
  190. data/lib/mongoid/errors/invalid_field_type.rb +1 -0
  191. data/lib/mongoid/errors/invalid_find.rb +1 -0
  192. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -0
  193. data/lib/mongoid/errors/invalid_includes.rb +1 -0
  194. data/lib/mongoid/errors/invalid_index.rb +1 -0
  195. data/lib/mongoid/errors/invalid_options.rb +1 -0
  196. data/lib/mongoid/errors/invalid_path.rb +1 -0
  197. data/lib/mongoid/errors/invalid_persistence_option.rb +1 -0
  198. data/lib/mongoid/errors/invalid_query.rb +1 -0
  199. data/lib/mongoid/errors/invalid_relation.rb +1 -0
  200. data/lib/mongoid/errors/invalid_relation_option.rb +1 -0
  201. data/lib/mongoid/errors/invalid_scope.rb +1 -0
  202. data/lib/mongoid/errors/invalid_session_nesting.rb +17 -0
  203. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +1 -1
  204. data/lib/mongoid/errors/invalid_storage_options.rb +1 -0
  205. data/lib/mongoid/errors/invalid_time.rb +1 -0
  206. data/lib/mongoid/errors/invalid_transaction_nesting.rb +17 -0
  207. data/lib/mongoid/errors/inverse_not_found.rb +1 -0
  208. data/lib/mongoid/errors/mixed_client_configuration.rb +1 -0
  209. data/lib/mongoid/errors/mixed_relations.rb +1 -0
  210. data/lib/mongoid/errors/mongoid_error.rb +4 -3
  211. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -0
  212. data/lib/mongoid/errors/no_client_config.rb +1 -0
  213. data/lib/mongoid/errors/no_client_database.rb +1 -0
  214. data/lib/mongoid/errors/no_client_hosts.rb +1 -0
  215. data/lib/mongoid/errors/no_clients_config.rb +1 -0
  216. data/lib/mongoid/errors/no_default_client.rb +1 -0
  217. data/lib/mongoid/errors/no_environment.rb +1 -0
  218. data/lib/mongoid/errors/no_map_reduce_output.rb +1 -0
  219. data/lib/mongoid/errors/no_metadata.rb +1 -0
  220. data/lib/mongoid/errors/no_parent.rb +1 -0
  221. data/lib/mongoid/errors/readonly_attribute.rb +1 -0
  222. data/lib/mongoid/errors/readonly_document.rb +1 -0
  223. data/lib/mongoid/errors/rollback.rb +15 -0
  224. data/lib/mongoid/errors/scope_overwrite.rb +1 -0
  225. data/lib/mongoid/errors/sessions_not_supported.rb +17 -0
  226. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -0
  227. data/lib/mongoid/errors/transaction_error.rb +25 -0
  228. data/lib/mongoid/errors/transactions_not_supported.rb +17 -0
  229. data/lib/mongoid/errors/unknown_attribute.rb +1 -0
  230. data/lib/mongoid/errors/unknown_model.rb +1 -0
  231. data/lib/mongoid/errors/unsaved_document.rb +1 -0
  232. data/lib/mongoid/errors/unsupported_javascript.rb +1 -0
  233. data/lib/mongoid/errors/validations.rb +1 -0
  234. data/lib/mongoid/errors.rb +10 -1
  235. data/lib/mongoid/evolvable.rb +1 -0
  236. data/lib/mongoid/extensions/array.rb +10 -24
  237. data/lib/mongoid/extensions/big_decimal.rb +14 -6
  238. data/lib/mongoid/extensions/binary.rb +3 -0
  239. data/lib/mongoid/extensions/boolean.rb +3 -0
  240. data/lib/mongoid/extensions/date.rb +7 -2
  241. data/lib/mongoid/extensions/date_time.rb +4 -6
  242. data/lib/mongoid/extensions/decimal128.rb +3 -0
  243. data/lib/mongoid/extensions/false_class.rb +5 -2
  244. data/lib/mongoid/extensions/float.rb +4 -1
  245. data/lib/mongoid/extensions/hash.rb +21 -143
  246. data/lib/mongoid/extensions/integer.rb +6 -1
  247. data/lib/mongoid/extensions/module.rb +4 -1
  248. data/lib/mongoid/extensions/nil_class.rb +5 -2
  249. data/lib/mongoid/extensions/object.rb +23 -35
  250. data/lib/mongoid/extensions/object_id.rb +3 -0
  251. data/lib/mongoid/extensions/range.rb +9 -6
  252. data/lib/mongoid/extensions/raw_value.rb +34 -0
  253. data/lib/mongoid/extensions/regexp.rb +3 -0
  254. data/lib/mongoid/extensions/set.rb +13 -2
  255. data/lib/mongoid/extensions/string.rb +18 -10
  256. data/lib/mongoid/extensions/symbol.rb +5 -0
  257. data/lib/mongoid/extensions/time.rb +7 -19
  258. data/lib/mongoid/extensions/time_with_zone.rb +6 -2
  259. data/lib/mongoid/extensions/true_class.rb +5 -2
  260. data/lib/mongoid/extensions.rb +2 -32
  261. data/lib/mongoid/factory.rb +134 -40
  262. data/lib/mongoid/fields/encrypted.rb +48 -0
  263. data/lib/mongoid/fields/foreign_key.rb +29 -3
  264. data/lib/mongoid/fields/localized.rb +6 -0
  265. data/lib/mongoid/fields/standard.rb +5 -0
  266. data/lib/mongoid/fields/validators/macro.rb +3 -1
  267. data/lib/mongoid/fields/validators.rb +1 -0
  268. data/lib/mongoid/fields.rb +41 -46
  269. data/lib/mongoid/findable.rb +2 -2
  270. data/lib/mongoid/indexable/specification.rb +55 -19
  271. data/lib/mongoid/indexable/validators/options.rb +1 -0
  272. data/lib/mongoid/indexable.rb +1 -0
  273. data/lib/mongoid/inspectable.rb +32 -0
  274. data/lib/mongoid/interceptable.rb +18 -8
  275. data/lib/mongoid/loadable.rb +83 -0
  276. data/lib/mongoid/loggable.rb +1 -0
  277. data/lib/mongoid/matchable.rb +1 -0
  278. data/lib/mongoid/matcher/all.rb +15 -0
  279. data/lib/mongoid/matcher/and.rb +14 -0
  280. data/lib/mongoid/matcher/bits.rb +19 -0
  281. data/lib/mongoid/matcher/bits_all_clear.rb +21 -0
  282. data/lib/mongoid/matcher/bits_all_set.rb +21 -0
  283. data/lib/mongoid/matcher/bits_any_clear.rb +21 -0
  284. data/lib/mongoid/matcher/bits_any_set.rb +21 -0
  285. data/lib/mongoid/matcher/elem_match.rb +15 -0
  286. data/lib/mongoid/matcher/elem_match_expression.rb +14 -2
  287. data/lib/mongoid/matcher/eq.rb +15 -0
  288. data/lib/mongoid/matcher/eq_impl.rb +33 -16
  289. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +14 -2
  290. data/lib/mongoid/matcher/exists.rb +15 -0
  291. data/lib/mongoid/matcher/expression.rb +13 -0
  292. data/lib/mongoid/matcher/expression_operator.rb +14 -0
  293. data/lib/mongoid/matcher/field_expression.rb +15 -0
  294. data/lib/mongoid/matcher/field_operator.rb +24 -0
  295. data/lib/mongoid/matcher/gt.rb +15 -0
  296. data/lib/mongoid/matcher/gte.rb +15 -0
  297. data/lib/mongoid/matcher/in.rb +15 -0
  298. data/lib/mongoid/matcher/lt.rb +15 -0
  299. data/lib/mongoid/matcher/lte.rb +15 -0
  300. data/lib/mongoid/matcher/mod.rb +16 -0
  301. data/lib/mongoid/matcher/ne.rb +15 -0
  302. data/lib/mongoid/matcher/nin.rb +15 -0
  303. data/lib/mongoid/matcher/nor.rb +14 -0
  304. data/lib/mongoid/matcher/not.rb +16 -0
  305. data/lib/mongoid/matcher/or.rb +14 -0
  306. data/lib/mongoid/matcher/regex.rb +24 -0
  307. data/lib/mongoid/matcher/size.rb +16 -0
  308. data/lib/mongoid/matcher/type.rb +25 -0
  309. data/lib/mongoid/matcher.rb +5 -15
  310. data/lib/mongoid/persistable/creatable.rb +14 -9
  311. data/lib/mongoid/persistable/deletable.rb +7 -2
  312. data/lib/mongoid/persistable/destroyable.rb +34 -7
  313. data/lib/mongoid/persistable/incrementable.rb +2 -1
  314. data/lib/mongoid/persistable/logical.rb +1 -0
  315. data/lib/mongoid/persistable/maxable.rb +37 -0
  316. data/lib/mongoid/persistable/minable.rb +37 -0
  317. data/lib/mongoid/persistable/multipliable.rb +36 -0
  318. data/lib/mongoid/persistable/poppable.rb +1 -0
  319. data/lib/mongoid/persistable/pullable.rb +1 -0
  320. data/lib/mongoid/persistable/pushable.rb +1 -0
  321. data/lib/mongoid/persistable/renamable.rb +1 -0
  322. data/lib/mongoid/persistable/savable.rb +1 -0
  323. data/lib/mongoid/persistable/settable.rb +1 -0
  324. data/lib/mongoid/persistable/unsettable.rb +1 -0
  325. data/lib/mongoid/persistable/updatable.rb +37 -18
  326. data/lib/mongoid/persistable/upsertable.rb +20 -7
  327. data/lib/mongoid/persistable.rb +11 -1
  328. data/lib/mongoid/persistence_context.rb +46 -6
  329. data/lib/mongoid/positional.rb +1 -0
  330. data/lib/mongoid/railtie.rb +24 -1
  331. data/lib/mongoid/railties/bson_object_id_serializer.rb +39 -0
  332. data/lib/mongoid/railties/console_sandbox.rb +42 -0
  333. data/lib/mongoid/railties/controller_runtime.rb +20 -4
  334. data/lib/mongoid/railties/database.rake +12 -0
  335. data/lib/mongoid/reloadable.rb +38 -30
  336. data/lib/mongoid/scopable.rb +19 -23
  337. data/lib/mongoid/search_indexable.rb +167 -0
  338. data/lib/mongoid/selectable.rb +1 -0
  339. data/lib/mongoid/serializable.rb +8 -7
  340. data/lib/mongoid/shardable.rb +1 -0
  341. data/lib/mongoid/stateful.rb +9 -3
  342. data/lib/mongoid/stringified_symbol.rb +19 -6
  343. data/lib/mongoid/tasks/database.rake +13 -0
  344. data/lib/mongoid/tasks/database.rb +63 -0
  345. data/lib/mongoid/tasks/encryption.rake +59 -0
  346. data/lib/mongoid/tasks/encryption.rb +108 -0
  347. data/lib/mongoid/threaded/lifecycle.rb +1 -0
  348. data/lib/mongoid/threaded.rb +94 -30
  349. data/lib/mongoid/timestamps/created/short.rb +1 -0
  350. data/lib/mongoid/timestamps/created.rb +5 -11
  351. data/lib/mongoid/timestamps/short.rb +1 -0
  352. data/lib/mongoid/timestamps/timeless.rb +29 -0
  353. data/lib/mongoid/timestamps/updated/short.rb +1 -0
  354. data/lib/mongoid/timestamps/updated.rb +2 -1
  355. data/lib/mongoid/timestamps.rb +1 -0
  356. data/lib/mongoid/touchable.rb +154 -49
  357. data/lib/mongoid/traversable.rb +127 -122
  358. data/lib/mongoid/utils.rb +32 -2
  359. data/lib/mongoid/validatable/associated.rb +4 -6
  360. data/lib/mongoid/validatable/format.rb +1 -0
  361. data/lib/mongoid/validatable/length.rb +1 -0
  362. data/lib/mongoid/validatable/localizable.rb +1 -0
  363. data/lib/mongoid/validatable/macros.rb +5 -0
  364. data/lib/mongoid/validatable/presence.rb +1 -0
  365. data/lib/mongoid/validatable/queryable.rb +9 -0
  366. data/lib/mongoid/validatable/uniqueness.rb +2 -1
  367. data/lib/mongoid/validatable.rb +3 -2
  368. data/lib/mongoid/version.rb +2 -1
  369. data/lib/mongoid/warnings.rb +9 -16
  370. data/lib/mongoid.rb +38 -5
  371. data/lib/rails/generators/mongoid/config/config_generator.rb +17 -3
  372. data/lib/rails/generators/mongoid/config/templates/mongoid.rb +25 -0
  373. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +36 -62
  374. data/lib/rails/generators/mongoid/model/model_generator.rb +4 -0
  375. data/lib/rails/generators/mongoid_generator.rb +13 -0
  376. data/lib/rails/mongoid.rb +4 -29
  377. data/spec/config/mongoid.yml +0 -1
  378. data/spec/integration/active_job_spec.rb +32 -0
  379. data/spec/integration/app_spec.rb +72 -48
  380. data/spec/integration/associations/belongs_to_spec.rb +1 -0
  381. data/spec/integration/associations/embedded_dirty_spec.rb +1 -0
  382. data/spec/integration/associations/embedded_spec.rb +75 -6
  383. data/spec/integration/associations/embeds_many_spec.rb +1 -0
  384. data/spec/integration/associations/embeds_one_spec.rb +1 -0
  385. data/spec/integration/associations/foreign_key_spec.rb +1 -0
  386. data/spec/integration/associations/foreign_key_spec_models.rb +1 -0
  387. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +1 -0
  388. data/spec/integration/associations/has_many_spec.rb +1 -0
  389. data/spec/integration/associations/has_one_spec.rb +1 -0
  390. data/spec/integration/associations/nested_attributes_assignment_spec.rb +1 -0
  391. data/spec/integration/associations/reverse_population_spec.rb +1 -0
  392. data/spec/integration/associations/reverse_population_spec_models.rb +1 -0
  393. data/spec/integration/associations/scope_option_spec.rb +1 -0
  394. data/spec/integration/atomic/modifiers_spec.rb +1 -0
  395. data/spec/integration/bson_regexp_raw_spec.rb +1 -0
  396. data/spec/integration/callbacks_models.rb +3 -2
  397. data/spec/integration/callbacks_spec.rb +2 -1
  398. data/spec/integration/contextual/empty_spec.rb +1 -0
  399. data/spec/integration/criteria/alias_query_spec.rb +25 -88
  400. data/spec/integration/criteria/date_field_spec.rb +1 -0
  401. data/spec/integration/criteria/default_scope_spec.rb +1 -0
  402. data/spec/integration/criteria/logical_spec.rb +10 -28
  403. data/spec/integration/criteria/range_spec.rb +1 -2
  404. data/spec/integration/criteria/raw_value_spec.rb +525 -0
  405. data/spec/integration/criteria/time_with_zone_spec.rb +1 -0
  406. data/spec/integration/discriminator_key_spec.rb +1 -0
  407. data/spec/integration/discriminator_value_spec.rb +1 -0
  408. data/spec/integration/document_spec.rb +1 -0
  409. data/spec/integration/dots_and_dollars_spec.rb +1 -0
  410. data/spec/integration/encryption_spec.rb +100 -0
  411. data/spec/integration/i18n_fallbacks_spec.rb +7 -33
  412. data/spec/integration/matcher_examples_spec.rb +1 -0
  413. data/spec/integration/matcher_operator_data/bits_all_clear.yml +0 -15
  414. data/spec/integration/matcher_operator_data/bits_all_set.yml +0 -15
  415. data/spec/integration/matcher_operator_data/bits_any_clear.yml +0 -15
  416. data/spec/integration/matcher_operator_data/bits_any_set.yml +0 -15
  417. data/spec/integration/matcher_operator_data/size.yml +0 -3
  418. data/spec/integration/matcher_operator_data/type.yml +0 -6
  419. data/spec/integration/matcher_operator_data/type_array.yml +0 -1
  420. data/spec/integration/matcher_operator_data/type_decimal.yml +0 -4
  421. data/spec/integration/matcher_operator_spec.rb +1 -0
  422. data/spec/integration/matcher_spec.rb +21 -66
  423. data/spec/integration/persistence/range_field_spec.rb +1 -0
  424. data/spec/integration/server_query_spec.rb +1 -0
  425. data/spec/integration/shardable_spec.rb +1 -0
  426. data/spec/integration/stringified_symbol_field_spec.rb +1 -0
  427. data/spec/lite_spec_helper.rb +36 -10
  428. data/spec/mongoid/association/accessors_spec.rb +11 -28
  429. data/spec/mongoid/association/auto_save_spec.rb +1 -0
  430. data/spec/mongoid/association/builders_spec.rb +1 -0
  431. data/spec/mongoid/association/constrainable_spec.rb +1 -0
  432. data/spec/mongoid/association/counter_cache_spec.rb +1 -0
  433. data/spec/mongoid/association/depending_spec.rb +1 -0
  434. data/spec/mongoid/association/eager_spec.rb +52 -24
  435. data/spec/mongoid/association/embedded/cyclic_spec.rb +1 -0
  436. data/spec/mongoid/association/embedded/dirty_spec.rb +1 -0
  437. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +1 -0
  438. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +1 -0
  439. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +1 -0
  440. data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -7
  441. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -0
  442. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +1 -0
  443. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1 -0
  444. data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -2
  445. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +4 -7
  446. data/spec/mongoid/association/embedded/embeds_many_spec.rb +1 -0
  447. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -0
  448. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +1 -0
  449. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1 -0
  450. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -0
  451. data/spec/mongoid/association/embedded/embeds_one_models.rb +6 -1
  452. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -1
  453. data/spec/mongoid/association/embedded/embeds_one_spec.rb +1 -0
  454. data/spec/mongoid/association/macros_spec.rb +1 -0
  455. data/spec/mongoid/association/nested/many_spec.rb +1 -0
  456. data/spec/mongoid/association/nested/one_spec.rb +1 -0
  457. data/spec/mongoid/association/options_spec.rb +1 -0
  458. data/spec/mongoid/association/polymorphic_spec.rb +1 -0
  459. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +1 -0
  460. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +1 -0
  461. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +1 -0
  462. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1 -4
  463. data/spec/mongoid/association/referenced/belongs_to_models.rb +1 -0
  464. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +2 -1
  465. data/spec/mongoid/association/referenced/belongs_to_spec.rb +1 -0
  466. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -0
  467. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +2 -1
  468. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +1 -0
  469. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -0
  470. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +1 -3
  471. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +1 -0
  472. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -1
  473. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1 -0
  474. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -0
  475. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +1 -0
  476. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +1 -0
  477. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -0
  478. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
  479. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1085 -2002
  480. data/spec/mongoid/association/referenced/has_many_models.rb +1 -0
  481. data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -1
  482. data/spec/mongoid/association/referenced/has_many_spec.rb +1 -0
  483. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -0
  484. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +1 -0
  485. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +1 -0
  486. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1 -0
  487. data/spec/mongoid/association/referenced/has_one_models.rb +1 -0
  488. data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -1
  489. data/spec/mongoid/association/referenced/has_one_spec.rb +1 -0
  490. data/spec/mongoid/association/reflections_spec.rb +1 -0
  491. data/spec/mongoid/association/syncable_spec.rb +1 -0
  492. data/spec/mongoid/association_spec.rb +1 -60
  493. data/spec/mongoid/atomic/modifiers_spec.rb +1 -0
  494. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -0
  495. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -0
  496. data/spec/mongoid/atomic/paths/root_spec.rb +1 -0
  497. data/spec/mongoid/atomic/paths_spec.rb +1 -0
  498. data/spec/mongoid/atomic_spec.rb +1 -0
  499. data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
  500. data/spec/mongoid/attributes/dynamic_spec.rb +1 -0
  501. data/spec/mongoid/attributes/embedded_spec.rb +118 -0
  502. data/spec/mongoid/attributes/nested_spec.rb +1 -0
  503. data/spec/mongoid/attributes/nested_spec_models.rb +1 -0
  504. data/spec/mongoid/attributes/projector_spec.rb +1 -0
  505. data/spec/mongoid/attributes/readonly_spec.rb +1 -19
  506. data/spec/mongoid/attributes_spec.rb +18 -35
  507. data/spec/mongoid/cacheable_spec.rb +1 -0
  508. data/spec/mongoid/changeable_spec.rb +4 -3
  509. data/spec/mongoid/clients/factory_spec.rb +77 -0
  510. data/spec/mongoid/clients/options_spec.rb +9 -5
  511. data/spec/mongoid/clients/sessions_spec.rb +27 -10
  512. data/spec/mongoid/clients/transactions_spec.rb +958 -185
  513. data/spec/mongoid/clients/transactions_spec_models.rb +159 -0
  514. data/spec/mongoid/clients_spec.rb +47 -2
  515. data/spec/mongoid/collection_configurable_spec.rb +1 -0
  516. data/spec/mongoid/composable_spec.rb +1 -0
  517. data/spec/mongoid/config/defaults_spec.rb +31 -92
  518. data/spec/mongoid/config/encryption_spec.rb +152 -0
  519. data/spec/mongoid/config/environment_spec.rb +13 -41
  520. data/spec/mongoid/config/introspection_spec.rb +114 -0
  521. data/spec/mongoid/config/options_spec.rb +1 -0
  522. data/spec/mongoid/config_spec.rb +20 -133
  523. data/spec/mongoid/contextual/aggregable/memory_spec.rb +1 -0
  524. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +1 -0
  525. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +5 -29
  526. data/spec/mongoid/contextual/aggregable/none_spec.rb +3 -14
  527. data/spec/mongoid/contextual/atomic_spec.rb +203 -12
  528. data/spec/mongoid/contextual/map_reduce_spec.rb +1 -0
  529. data/spec/mongoid/contextual/memory_spec.rb +364 -534
  530. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +10 -3
  531. data/spec/mongoid/contextual/mongo_spec.rb +101 -277
  532. data/spec/mongoid/contextual/none_spec.rb +1 -0
  533. data/spec/mongoid/copyable_spec.rb +1 -0
  534. data/spec/mongoid/copyable_spec_models.rb +1 -0
  535. data/spec/mongoid/criteria/findable_spec.rb +191 -0
  536. data/spec/mongoid/criteria/includable_spec.rb +1 -0
  537. data/spec/mongoid/criteria/includable_spec_models.rb +1 -0
  538. data/spec/mongoid/criteria/inspectable_spec.rb +1 -0
  539. data/spec/mongoid/criteria/marshalable_spec.rb +3 -2
  540. data/spec/mongoid/criteria/modifiable_spec.rb +1 -0
  541. data/spec/mongoid/criteria/options_spec.rb +1 -0
  542. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -0
  543. data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -0
  544. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +1 -0
  545. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +8 -7
  546. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -0
  547. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +21 -11
  548. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +1 -0
  549. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -0
  550. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -0
  551. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -0
  552. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -0
  553. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +1 -0
  554. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -0
  555. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +1 -0
  556. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -11
  557. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -11
  558. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -0
  559. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -66
  560. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -0
  561. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +1 -0
  562. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +1 -0
  563. data/spec/mongoid/criteria/queryable/key_spec.rb +1 -0
  564. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +1 -0
  565. data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -0
  566. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -0
  567. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -0
  568. data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -0
  569. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +4 -3
  570. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +1 -0
  571. data/spec/mongoid/criteria/queryable/selectable_spec.rb +51 -214
  572. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +1 -0
  573. data/spec/mongoid/criteria/queryable/selector_spec.rb +96 -0
  574. data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -0
  575. data/spec/mongoid/criteria/queryable/storable_spec.rb +10 -32
  576. data/spec/mongoid/criteria/scopable_spec.rb +1 -0
  577. data/spec/mongoid/criteria/translator_spec.rb +1 -0
  578. data/spec/mongoid/criteria_projection_spec.rb +6 -5
  579. data/spec/mongoid/criteria_spec.rb +221 -359
  580. data/spec/mongoid/document_fields_spec.rb +1 -0
  581. data/spec/mongoid/document_persistence_context_spec.rb +77 -0
  582. data/spec/mongoid/document_query_spec.rb +5 -4
  583. data/spec/mongoid/document_spec.rb +3 -148
  584. data/spec/mongoid/equality_spec.rb +41 -149
  585. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -0
  586. data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
  587. data/spec/mongoid/errors/callback_spec.rb +1 -0
  588. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -0
  589. data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -0
  590. data/spec/mongoid/errors/document_not_found_spec.rb +1 -0
  591. data/spec/mongoid/errors/invalid_collection_spec.rb +1 -0
  592. data/spec/mongoid/errors/invalid_config_file_spec.rb +1 -0
  593. data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -0
  594. data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -0
  595. data/spec/mongoid/errors/invalid_field_spec.rb +1 -0
  596. data/spec/mongoid/errors/invalid_field_type_spec.rb +1 -0
  597. data/spec/mongoid/errors/invalid_find_spec.rb +1 -0
  598. data/spec/mongoid/errors/invalid_includes_spec.rb +1 -0
  599. data/spec/mongoid/errors/invalid_index_spec.rb +1 -0
  600. data/spec/mongoid/errors/invalid_options_spec.rb +1 -0
  601. data/spec/mongoid/errors/invalid_path_spec.rb +1 -0
  602. data/spec/mongoid/errors/invalid_relation_spec.rb +1 -0
  603. data/spec/mongoid/errors/invalid_scope_spec.rb +1 -0
  604. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -0
  605. data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -0
  606. data/spec/mongoid/errors/invalid_time_spec.rb +1 -0
  607. data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -0
  608. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -0
  609. data/spec/mongoid/errors/mixed_relations_spec.rb +1 -0
  610. data/spec/mongoid/errors/mongoid_error_spec.rb +9 -22
  611. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -0
  612. data/spec/mongoid/errors/no_client_config_spec.rb +1 -0
  613. data/spec/mongoid/errors/no_client_database_spec.rb +1 -0
  614. data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -0
  615. data/spec/mongoid/errors/no_clients_config_spec.rb +1 -0
  616. data/spec/mongoid/errors/no_environment_spec.rb +1 -0
  617. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -0
  618. data/spec/mongoid/errors/no_metadata_spec.rb +1 -0
  619. data/spec/mongoid/errors/no_parent_spec.rb +1 -0
  620. data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -0
  621. data/spec/mongoid/errors/readonly_document_spec.rb +1 -0
  622. data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -0
  623. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -0
  624. data/spec/mongoid/errors/unknown_attribute_spec.rb +1 -0
  625. data/spec/mongoid/errors/unsaved_document_spec.rb +1 -0
  626. data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -0
  627. data/spec/mongoid/errors/validations_spec.rb +1 -0
  628. data/spec/mongoid/extensions/array_spec.rb +3 -262
  629. data/spec/mongoid/extensions/big_decimal_spec.rb +5 -4
  630. data/spec/mongoid/extensions/binary_spec.rb +1 -0
  631. data/spec/mongoid/extensions/boolean_spec.rb +1 -0
  632. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +8 -7
  633. data/spec/mongoid/extensions/date_spec.rb +3 -20
  634. data/spec/mongoid/extensions/date_time_spec.rb +3 -9
  635. data/spec/mongoid/extensions/decimal128_spec.rb +1 -0
  636. data/spec/mongoid/extensions/false_class_spec.rb +1 -7
  637. data/spec/mongoid/extensions/float_spec.rb +3 -9
  638. data/spec/mongoid/extensions/hash_spec.rb +19 -222
  639. data/spec/mongoid/extensions/integer_spec.rb +3 -8
  640. data/spec/mongoid/extensions/module_spec.rb +1 -0
  641. data/spec/mongoid/extensions/nil_class_spec.rb +1 -0
  642. data/spec/mongoid/extensions/object_id_spec.rb +1 -0
  643. data/spec/mongoid/extensions/object_spec.rb +1 -176
  644. data/spec/mongoid/extensions/range_spec.rb +1 -11
  645. data/spec/mongoid/extensions/raw_value_spec.rb +67 -0
  646. data/spec/mongoid/extensions/regexp_spec.rb +1 -0
  647. data/spec/mongoid/extensions/set_spec.rb +2 -3
  648. data/spec/mongoid/extensions/string_spec.rb +3 -113
  649. data/spec/mongoid/extensions/stringified_symbol_spec.rb +1 -0
  650. data/spec/mongoid/extensions/symbol_spec.rb +1 -31
  651. data/spec/mongoid/extensions/time_spec.rb +32 -350
  652. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -30
  653. data/spec/mongoid/extensions/true_class_spec.rb +1 -7
  654. data/spec/mongoid/factory_spec.rb +1 -0
  655. data/spec/mongoid/fields/foreign_key_spec.rb +282 -119
  656. data/spec/mongoid/fields/localized_spec.rb +1 -0
  657. data/spec/mongoid/fields/standard_spec.rb +1 -0
  658. data/spec/mongoid/fields_spec.rb +60 -66
  659. data/spec/mongoid/findable_spec.rb +2 -61
  660. data/spec/mongoid/indexable/specification_spec.rb +132 -13
  661. data/spec/mongoid/indexable_spec.rb +323 -9
  662. data/spec/mongoid/inspectable_spec.rb +81 -0
  663. data/spec/mongoid/interceptable_spec.rb +3 -82
  664. data/spec/mongoid/interceptable_spec_models.rb +112 -47
  665. data/spec/mongoid/loading_spec.rb +110 -0
  666. data/spec/mongoid/loggable_spec.rb +1 -0
  667. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -0
  668. data/spec/mongoid/mongoizable_spec.rb +1 -0
  669. data/spec/mongoid/monkey_patches_spec.rb +211 -0
  670. data/spec/mongoid/persistable/creatable_spec.rb +1 -0
  671. data/spec/mongoid/persistable/deletable_spec.rb +78 -31
  672. data/spec/mongoid/persistable/destroyable_spec.rb +230 -52
  673. data/spec/mongoid/persistable/incrementable_spec.rb +1 -0
  674. data/spec/mongoid/persistable/logical_spec.rb +1 -0
  675. data/spec/mongoid/persistable/maxable_spec.rb +147 -0
  676. data/spec/mongoid/persistable/minable_spec.rb +147 -0
  677. data/spec/mongoid/persistable/multipliable_spec.rb +227 -0
  678. data/spec/mongoid/persistable/poppable_spec.rb +1 -0
  679. data/spec/mongoid/persistable/pullable_spec.rb +1 -0
  680. data/spec/mongoid/persistable/pushable_spec.rb +1 -0
  681. data/spec/mongoid/persistable/renamable_spec.rb +1 -0
  682. data/spec/mongoid/persistable/savable_spec.rb +2 -6
  683. data/spec/mongoid/persistable/settable_spec.rb +5 -4
  684. data/spec/mongoid/persistable/unsettable_spec.rb +1 -0
  685. data/spec/mongoid/persistable/updatable_spec.rb +3 -2
  686. data/spec/mongoid/persistable/upsertable_spec.rb +34 -1
  687. data/spec/mongoid/persistable_spec.rb +1 -0
  688. data/spec/mongoid/persistence_context_spec.rb +1 -0
  689. data/spec/mongoid/positional_spec.rb +1 -0
  690. data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +24 -0
  691. data/spec/mongoid/railties/console_sandbox_spec.rb +44 -0
  692. data/spec/mongoid/relations/proxy_spec.rb +1 -0
  693. data/spec/mongoid/reloadable_spec.rb +28 -83
  694. data/spec/mongoid/scopable_spec.rb +39 -50
  695. data/spec/mongoid/search_indexable_spec.rb +147 -0
  696. data/spec/mongoid/selectable_spec.rb +1 -0
  697. data/spec/mongoid/serializable_spec.rb +10 -16
  698. data/spec/mongoid/shardable_models.rb +1 -0
  699. data/spec/mongoid/shardable_spec.rb +1 -0
  700. data/spec/mongoid/stateful_spec.rb +1 -0
  701. data/spec/mongoid/tasks/database_rake_spec.rb +127 -49
  702. data/spec/mongoid/tasks/database_spec.rb +48 -1
  703. data/spec/mongoid/tasks/encryption_spec.rb +187 -0
  704. data/spec/mongoid/threaded_spec.rb +38 -0
  705. data/spec/mongoid/timestamps/created/short_spec.rb +1 -0
  706. data/spec/mongoid/timestamps/created_spec.rb +1 -23
  707. data/spec/mongoid/timestamps/timeless_spec.rb +1 -0
  708. data/spec/mongoid/timestamps/updated/short_spec.rb +1 -0
  709. data/spec/mongoid/timestamps/updated_spec.rb +1 -0
  710. data/spec/mongoid/timestamps_spec.rb +1 -0
  711. data/spec/mongoid/timestamps_spec_models.rb +1 -0
  712. data/spec/mongoid/touchable_spec.rb +490 -62
  713. data/spec/mongoid/touchable_spec_models.rb +96 -1
  714. data/spec/mongoid/traversable_spec.rb +1 -0
  715. data/spec/mongoid/validatable/associated_spec.rb +5 -14
  716. data/spec/mongoid/validatable/format_spec.rb +1 -0
  717. data/spec/mongoid/validatable/length_spec.rb +1 -0
  718. data/spec/mongoid/validatable/numericality_spec.rb +1 -0
  719. data/spec/mongoid/validatable/presence_spec.rb +1 -0
  720. data/spec/mongoid/validatable/uniqueness_spec.rb +48 -3
  721. data/spec/mongoid/validatable_spec.rb +1 -0
  722. data/spec/mongoid/warnings_spec.rb +1 -0
  723. data/spec/mongoid_spec.rb +27 -0
  724. data/spec/rails/controller_extension/controller_runtime_spec.rb +1 -0
  725. data/spec/rails/mongoid_spec.rb +26 -117
  726. data/spec/shared/LICENSE +20 -0
  727. data/spec/shared/bin/get-mongodb-download-url +17 -0
  728. data/spec/shared/bin/s3-copy +45 -0
  729. data/spec/shared/bin/s3-upload +69 -0
  730. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  731. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  732. data/spec/shared/lib/mrss/constraints.rb +378 -0
  733. data/spec/shared/lib/mrss/docker_runner.rb +298 -0
  734. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  735. data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
  736. data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
  737. data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
  738. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  739. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  740. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  741. data/spec/shared/lib/mrss/utils.rb +37 -0
  742. data/spec/shared/share/Dockerfile.erb +281 -0
  743. data/spec/shared/share/haproxy-1.conf +16 -0
  744. data/spec/shared/share/haproxy-2.conf +17 -0
  745. data/spec/shared/shlib/config.sh +27 -0
  746. data/spec/shared/shlib/distro.sh +74 -0
  747. data/spec/shared/shlib/server.sh +417 -0
  748. data/spec/shared/shlib/set_env.sh +146 -0
  749. data/spec/spec_helper.rb +26 -28
  750. data/spec/support/authorization.rb +1 -0
  751. data/spec/support/client_registry.rb +1 -0
  752. data/spec/support/constraints.rb +1 -0
  753. data/spec/support/crypt/models.rb +50 -0
  754. data/spec/support/crypt.rb +80 -0
  755. data/spec/support/expectations.rb +1 -0
  756. data/spec/support/feature_sandbox.rb +72 -0
  757. data/spec/support/helpers.rb +1 -0
  758. data/spec/support/immutable_ids.rb +22 -21
  759. data/spec/support/macros.rb +4 -6
  760. data/spec/support/models/account.rb +1 -0
  761. data/spec/support/models/acolyte.rb +1 -0
  762. data/spec/support/models/actor.rb +1 -0
  763. data/spec/support/models/actress.rb +1 -0
  764. data/spec/support/models/address.rb +3 -0
  765. data/spec/support/models/address_component.rb +1 -0
  766. data/spec/support/models/address_number.rb +1 -0
  767. data/spec/support/models/agency.rb +1 -0
  768. data/spec/support/models/agent.rb +1 -0
  769. data/spec/support/models/album.rb +1 -0
  770. data/spec/support/models/alert.rb +1 -0
  771. data/spec/support/models/animal.rb +1 -0
  772. data/spec/support/models/answer.rb +1 -0
  773. data/spec/support/models/appointment.rb +1 -0
  774. data/spec/support/models/armrest.rb +1 -0
  775. data/spec/support/models/array_field.rb +1 -0
  776. data/spec/support/models/article.rb +1 -0
  777. data/spec/support/models/artist.rb +1 -0
  778. data/spec/support/models/artwork.rb +1 -0
  779. data/spec/support/models/audible_sound.rb +1 -0
  780. data/spec/support/models/audio.rb +1 -0
  781. data/spec/support/models/augmentation.rb +1 -0
  782. data/spec/support/models/author.rb +1 -0
  783. data/spec/support/models/baby.rb +1 -0
  784. data/spec/support/models/band.rb +5 -1
  785. data/spec/support/models/bar.rb +1 -0
  786. data/spec/support/models/basic.rb +1 -0
  787. data/spec/support/models/bed.rb +1 -0
  788. data/spec/support/models/big_palette.rb +1 -0
  789. data/spec/support/models/birthday.rb +1 -0
  790. data/spec/support/models/bolt.rb +1 -0
  791. data/spec/support/models/bomb.rb +1 -0
  792. data/spec/support/models/book.rb +1 -0
  793. data/spec/support/models/breed.rb +1 -0
  794. data/spec/support/models/browser.rb +1 -0
  795. data/spec/support/models/building.rb +1 -0
  796. data/spec/support/models/building_address.rb +1 -0
  797. data/spec/support/models/bus.rb +1 -0
  798. data/spec/support/models/business.rb +1 -0
  799. data/spec/support/models/callback_test.rb +1 -0
  800. data/spec/support/models/canvas.rb +1 -0
  801. data/spec/support/models/car.rb +1 -0
  802. data/spec/support/models/cat.rb +1 -0
  803. data/spec/support/models/catalog.rb +1 -0
  804. data/spec/support/models/category.rb +1 -0
  805. data/spec/support/models/child.rb +1 -0
  806. data/spec/support/models/child_doc.rb +1 -0
  807. data/spec/support/models/church.rb +1 -0
  808. data/spec/support/models/circle.rb +1 -0
  809. data/spec/support/models/circuit.rb +1 -0
  810. data/spec/support/models/circus.rb +1 -0
  811. data/spec/support/models/code.rb +1 -0
  812. data/spec/support/models/coding/pull_request.rb +1 -0
  813. data/spec/support/models/coding.rb +1 -0
  814. data/spec/support/models/comment.rb +1 -0
  815. data/spec/support/models/company.rb +1 -0
  816. data/spec/support/models/consumption_period.rb +1 -0
  817. data/spec/support/models/contextable_item.rb +1 -0
  818. data/spec/support/models/contractor.rb +1 -0
  819. data/spec/support/models/cookie.rb +1 -0
  820. data/spec/support/models/country_code.rb +1 -0
  821. data/spec/support/models/courier_job.rb +1 -0
  822. data/spec/support/models/cover.rb +1 -0
  823. data/spec/support/models/crate.rb +1 -0
  824. data/spec/support/models/customer.rb +1 -0
  825. data/spec/support/models/customer_address.rb +1 -0
  826. data/spec/support/models/deed.rb +1 -0
  827. data/spec/support/models/definition.rb +1 -0
  828. data/spec/support/models/delegating_patient.rb +1 -0
  829. data/spec/support/models/description.rb +1 -0
  830. data/spec/support/models/dictionary.rb +1 -0
  831. data/spec/support/models/division.rb +1 -0
  832. data/spec/support/models/doctor.rb +1 -0
  833. data/spec/support/models/dog.rb +1 -0
  834. data/spec/support/models/dokument.rb +1 -0
  835. data/spec/support/models/draft.rb +1 -0
  836. data/spec/support/models/dragon.rb +1 -0
  837. data/spec/support/models/driver.rb +1 -0
  838. data/spec/support/models/drug.rb +1 -0
  839. data/spec/support/models/dungeon.rb +1 -0
  840. data/spec/support/models/edit.rb +1 -0
  841. data/spec/support/models/email.rb +1 -0
  842. data/spec/support/models/employer.rb +1 -0
  843. data/spec/support/models/entry.rb +1 -0
  844. data/spec/support/models/eraser.rb +1 -0
  845. data/spec/support/models/even.rb +1 -0
  846. data/spec/support/models/event.rb +1 -0
  847. data/spec/support/models/exhibition.rb +1 -0
  848. data/spec/support/models/exhibitor.rb +1 -0
  849. data/spec/support/models/explosion.rb +1 -0
  850. data/spec/support/models/eye.rb +1 -0
  851. data/spec/support/models/eye_bowl.rb +1 -0
  852. data/spec/support/models/face.rb +1 -0
  853. data/spec/support/models/fanatic.rb +1 -0
  854. data/spec/support/models/favorite.rb +8 -1
  855. data/spec/support/models/filesystem.rb +1 -0
  856. data/spec/support/models/fire_hydrant.rb +1 -0
  857. data/spec/support/models/firefox.rb +1 -0
  858. data/spec/support/models/fish.rb +1 -0
  859. data/spec/support/models/folder.rb +1 -0
  860. data/spec/support/models/folder_item.rb +1 -0
  861. data/spec/support/models/fruits.rb +1 -0
  862. data/spec/support/models/game.rb +1 -0
  863. data/spec/support/models/ghost.rb +1 -0
  864. data/spec/support/models/guitar.rb +1 -0
  865. data/spec/support/models/hole.rb +1 -0
  866. data/spec/support/models/home.rb +1 -0
  867. data/spec/support/models/house.rb +1 -0
  868. data/spec/support/models/html_writer.rb +1 -0
  869. data/spec/support/models/id_key.rb +1 -0
  870. data/spec/support/models/idnodef.rb +1 -0
  871. data/spec/support/models/image.rb +1 -0
  872. data/spec/support/models/implant.rb +1 -0
  873. data/spec/support/models/instrument.rb +1 -0
  874. data/spec/support/models/item.rb +1 -0
  875. data/spec/support/models/jar.rb +1 -0
  876. data/spec/support/models/kaleidoscope.rb +1 -0
  877. data/spec/support/models/kangaroo.rb +1 -0
  878. data/spec/support/models/label.rb +1 -0
  879. data/spec/support/models/language.rb +1 -0
  880. data/spec/support/models/lat_lng.rb +1 -6
  881. data/spec/support/models/league.rb +1 -0
  882. data/spec/support/models/learner.rb +1 -0
  883. data/spec/support/models/line_item.rb +1 -0
  884. data/spec/support/models/location.rb +1 -0
  885. data/spec/support/models/login.rb +1 -0
  886. data/spec/support/models/manufacturer.rb +1 -0
  887. data/spec/support/models/meat.rb +1 -0
  888. data/spec/support/models/membership.rb +1 -0
  889. data/spec/support/models/message.rb +1 -0
  890. data/spec/support/models/minim.rb +1 -0
  891. data/spec/support/models/mixed_drink.rb +1 -0
  892. data/spec/support/models/mop.rb +1 -0
  893. data/spec/support/models/movie.rb +1 -0
  894. data/spec/support/models/my_hash.rb +1 -0
  895. data/spec/support/models/name.rb +1 -0
  896. data/spec/support/models/name_only.rb +1 -0
  897. data/spec/support/models/node.rb +1 -0
  898. data/spec/support/models/note.rb +1 -0
  899. data/spec/support/models/nut.rb +1 -0
  900. data/spec/support/models/odd.rb +1 -0
  901. data/spec/support/models/order.rb +1 -0
  902. data/spec/support/models/ordered_post.rb +1 -0
  903. data/spec/support/models/ordered_preference.rb +1 -0
  904. data/spec/support/models/oscar.rb +1 -0
  905. data/spec/support/models/other_owner_object.rb +1 -0
  906. data/spec/support/models/override.rb +1 -0
  907. data/spec/support/models/ownable.rb +1 -0
  908. data/spec/support/models/owner.rb +1 -0
  909. data/spec/support/models/pack.rb +1 -0
  910. data/spec/support/models/page.rb +1 -0
  911. data/spec/support/models/page_question.rb +1 -0
  912. data/spec/support/models/palette.rb +1 -0
  913. data/spec/support/models/parent.rb +1 -0
  914. data/spec/support/models/parent_doc.rb +1 -0
  915. data/spec/support/models/passport.rb +1 -0
  916. data/spec/support/models/patient.rb +1 -0
  917. data/spec/support/models/pdf_writer.rb +1 -0
  918. data/spec/support/models/pencil.rb +1 -0
  919. data/spec/support/models/person.rb +1 -0
  920. data/spec/support/models/pet.rb +1 -0
  921. data/spec/support/models/pet_owner.rb +1 -0
  922. data/spec/support/models/phone.rb +1 -0
  923. data/spec/support/models/piano.rb +1 -0
  924. data/spec/support/models/pizza.rb +1 -0
  925. data/spec/support/models/player.rb +1 -0
  926. data/spec/support/models/post.rb +1 -0
  927. data/spec/support/models/post_genre.rb +1 -0
  928. data/spec/support/models/powerup.rb +1 -0
  929. data/spec/support/models/preference.rb +1 -0
  930. data/spec/support/models/princess.rb +1 -0
  931. data/spec/support/models/product.rb +1 -0
  932. data/spec/support/models/profile.rb +1 -0
  933. data/spec/support/models/pronunciation.rb +1 -0
  934. data/spec/support/models/pub.rb +1 -0
  935. data/spec/support/models/publication/encyclopedia.rb +1 -0
  936. data/spec/support/models/publication/review.rb +1 -0
  937. data/spec/support/models/publication.rb +1 -0
  938. data/spec/support/models/purchase.rb +1 -0
  939. data/spec/support/models/purchased_item.rb +1 -0
  940. data/spec/support/models/question.rb +1 -0
  941. data/spec/support/models/quiz.rb +1 -0
  942. data/spec/support/models/rating.rb +1 -0
  943. data/spec/support/models/record.rb +1 -0
  944. data/spec/support/models/registry.rb +1 -0
  945. data/spec/support/models/role.rb +1 -0
  946. data/spec/support/models/root_category.rb +1 -0
  947. data/spec/support/models/sandbox/app/models/app_models_message.rb +4 -0
  948. data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
  949. data/spec/support/models/sandbox/sandbox_message.rb +4 -0
  950. data/spec/support/models/sandbox/sandbox_user.rb +4 -0
  951. data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
  952. data/spec/support/models/sandwich.rb +1 -0
  953. data/spec/support/models/scheduler.rb +1 -0
  954. data/spec/support/models/school.rb +1 -0
  955. data/spec/support/models/scribe.rb +1 -0
  956. data/spec/support/models/sealer.rb +1 -0
  957. data/spec/support/models/seat.rb +1 -0
  958. data/spec/support/models/seo.rb +1 -0
  959. data/spec/support/models/series.rb +1 -0
  960. data/spec/support/models/server.rb +1 -0
  961. data/spec/support/models/service.rb +1 -0
  962. data/spec/support/models/shape.rb +1 -0
  963. data/spec/support/models/shelf.rb +1 -0
  964. data/spec/support/models/shield.rb +1 -0
  965. data/spec/support/models/shipment_address.rb +1 -0
  966. data/spec/support/models/shipping_container.rb +1 -0
  967. data/spec/support/models/shipping_pack.rb +1 -0
  968. data/spec/support/models/shirt.rb +1 -0
  969. data/spec/support/models/shop.rb +1 -0
  970. data/spec/support/models/short_agent.rb +1 -0
  971. data/spec/support/models/short_quiz.rb +1 -0
  972. data/spec/support/models/simple.rb +1 -0
  973. data/spec/support/models/slave.rb +1 -0
  974. data/spec/support/models/song.rb +1 -0
  975. data/spec/support/models/sound.rb +1 -0
  976. data/spec/support/models/spacer.rb +1 -0
  977. data/spec/support/models/square.rb +1 -0
  978. data/spec/support/models/staff.rb +1 -0
  979. data/spec/support/models/store_as_dup_test1.rb +1 -0
  980. data/spec/support/models/store_as_dup_test2.rb +1 -0
  981. data/spec/support/models/store_as_dup_test3.rb +1 -0
  982. data/spec/support/models/store_as_dup_test4.rb +1 -0
  983. data/spec/support/models/strategy.rb +1 -0
  984. data/spec/support/models/student.rb +1 -0
  985. data/spec/support/models/sub_item.rb +1 -0
  986. data/spec/support/models/subscription.rb +1 -0
  987. data/spec/support/models/survey.rb +1 -0
  988. data/spec/support/models/symptom.rb +1 -0
  989. data/spec/support/models/system_role.rb +1 -0
  990. data/spec/support/models/tag.rb +1 -0
  991. data/spec/support/models/target.rb +1 -0
  992. data/spec/support/models/template.rb +1 -0
  993. data/spec/support/models/thing.rb +1 -0
  994. data/spec/support/models/threadlocker.rb +1 -0
  995. data/spec/support/models/title.rb +1 -0
  996. data/spec/support/models/tool.rb +1 -0
  997. data/spec/support/models/topping.rb +1 -0
  998. data/spec/support/models/toy.rb +1 -0
  999. data/spec/support/models/track.rb +1 -0
  1000. data/spec/support/models/translation.rb +1 -0
  1001. data/spec/support/models/tree.rb +1 -0
  1002. data/spec/support/models/truck.rb +1 -0
  1003. data/spec/support/models/updatable.rb +1 -0
  1004. data/spec/support/models/user.rb +1 -0
  1005. data/spec/support/models/user_account.rb +1 -0
  1006. data/spec/support/models/validation_callback.rb +1 -0
  1007. data/spec/support/models/vehicle.rb +1 -0
  1008. data/spec/support/models/version.rb +1 -0
  1009. data/spec/support/models/vertex.rb +1 -0
  1010. data/spec/support/models/vet_visit.rb +1 -0
  1011. data/spec/support/models/video.rb +1 -0
  1012. data/spec/support/models/video_game.rb +1 -0
  1013. data/spec/support/models/washer.rb +1 -0
  1014. data/spec/support/models/weapon.rb +1 -0
  1015. data/spec/support/models/wiki_page.rb +1 -0
  1016. data/spec/support/models/word.rb +1 -0
  1017. data/spec/support/models/word_origin.rb +1 -0
  1018. data/spec/support/models/writer.rb +1 -0
  1019. data/spec/support/rails_mock.rb +32 -0
  1020. data/spec/support/shared/time.rb +3 -21
  1021. data/spec/support/sinatra_mock.rb +7 -0
  1022. data/spec/support/spec_config.rb +30 -9
  1023. data.tar.gz.sig +0 -0
  1024. metadata +171 -37
  1025. metadata.gz.sig +1 -0
  1026. data/lib/mongoid/association/referenced/eager.rb +0 -163
  1027. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -113
  1028. data/lib/mongoid/contextual/geo_near.rb +0 -236
  1029. data/lib/mongoid/errors/invalid_session_use.rb +0 -21
  1030. data/lib/mongoid/errors/invalid_storage_parent.rb +0 -27
  1031. data/lib/mongoid/query_cache.rb +0 -68
  1032. data/spec/mongoid/contextual/geo_near_spec.rb +0 -471
  1033. data/spec/mongoid/extensions_spec.rb +0 -43
  1034. data/spec/mongoid/query_cache_middleware_spec.rb +0 -50
  1035. data/spec/mongoid/query_cache_spec.rb +0 -865
@@ -0,0 +1,417 @@
1
+ # This file contains functions pertaining to downloading, starting and
2
+ # configuring a MongoDB server.
3
+
4
+ # Note that mlaunch is executed with (and therefore installed with) Python 2.
5
+ # The reason for this is that in the past, some of the distros we tested on
6
+ # had an ancient version of Python 3 that was unusable (e.g. it couldn't
7
+ # install anything from PyPI due to outdated TLS/SSL implementation).
8
+ # It is likely that all of the current distros we use have a recent enough
9
+ # and working Python 3 implementation, such that we could use Python 3 for
10
+ # everything.
11
+ #
12
+ # Note that some distros (e.g. ubuntu2004) do not contain a `python' binary
13
+ # at all, thus python2 or python3 must be explicitly specified depending on
14
+ # the desired version.
15
+
16
+ set_fcv() {
17
+ if test -n "$FCV"; then
18
+ mongo --eval 'assert.commandWorked(db.adminCommand( { setFeatureCompatibilityVersion: "'"$FCV"'" } ));' "$MONGODB_URI"
19
+ mongo --quiet --eval 'db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )' |grep "version.*$FCV"
20
+ fi
21
+ }
22
+
23
+ add_uri_option() {
24
+ opt=$1
25
+
26
+ if ! echo $MONGODB_URI |sed -e s,//,, |grep -q /; then
27
+ MONGODB_URI="$MONGODB_URI/"
28
+ fi
29
+
30
+ if ! echo $MONGODB_URI |grep -q '?'; then
31
+ MONGODB_URI="$MONGODB_URI?"
32
+ fi
33
+
34
+ MONGODB_URI="$MONGODB_URI&$opt"
35
+ }
36
+
37
+ prepare_server() {
38
+ arch=$1
39
+
40
+ if test -n "$USE_OPT_MONGODB"; then
41
+ export BINDIR=/opt/mongodb/bin
42
+ export PATH=$BINDIR:$PATH
43
+ return
44
+ fi
45
+
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
49
+
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
60
+
61
+ }
62
+
63
+ prepare_server_from_url() {
64
+ url=$1
65
+
66
+ dirname=`basename $url |sed -e s/.tgz//`
67
+ mongodb_dir="$MONGO_ORCHESTRATION_HOME"/mdb/"$dirname"
68
+ mkdir -p "$mongodb_dir"
69
+ curl --retry 3 $url | tar xz -C "$mongodb_dir" --strip-components 1 -f -
70
+ BINDIR="$mongodb_dir"/bin
71
+ export PATH="$BINDIR":$PATH
72
+ }
73
+
74
+ install_mlaunch_venv() {
75
+ python3 -V || true
76
+ if ! python3 -m venv -h >/dev/null; then
77
+ # Current virtualenv fails with
78
+ # https://github.com/pypa/virtualenv/issues/1630
79
+ python3 -m pip install venv --user
80
+ fi
81
+ if ! python3 -m ensurepip -h > /dev/null; then
82
+ # Debian11/Ubuntu2204 have venv installed, but it is nonfunctional unless
83
+ # the python3-venv package is also installed (it lacks the ensurepip
84
+ # module).
85
+ sudo apt-get install --yes python3-venv
86
+ fi
87
+ if test "$USE_SYSTEM_PYTHON_PACKAGES" = 1 &&
88
+ python3 -m pip list |grep mtools
89
+ then
90
+ # Use the existing mtools-legacy
91
+ :
92
+ else
93
+ # Spawn a virtual environment, but only if one is not already
94
+ # active...
95
+ if test -z "$VIRTUAL_ENV"; then
96
+ venvpath="$MONGO_ORCHESTRATION_HOME"/venv
97
+ python3 -m venv $venvpath
98
+ . $venvpath/bin/activate
99
+ fi
100
+
101
+ # [mlaunch] does not work:
102
+ # https://github.com/rueckstiess/mtools/issues/856
103
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
104
+ #pip install 'mtools==1.7' 'pymongo==4.1' python-dateutil psutil
105
+
106
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
107
+ pip install --upgrade setuptools
108
+ pip install 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
109
+ fi
110
+ }
111
+
112
+ install_mlaunch_pip() {
113
+ if test -n "$USE_OPT_MONGODB" && which mlaunch >/dev/null 2>&1; then
114
+ # mlaunch is preinstalled in the docker image, do not install it here
115
+ return
116
+ fi
117
+
118
+ python -V || true
119
+ python3 -V || true
120
+ pythonpath="$MONGO_ORCHESTRATION_HOME"/python
121
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
122
+ pip install -t "$pythonpath" 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
123
+ export PATH="$pythonpath/bin":$PATH
124
+ export PYTHONPATH="$pythonpath"
125
+ }
126
+
127
+ install_mlaunch_git() {
128
+ repo=$1
129
+ branch=$2
130
+ python -V || true
131
+ python3 -V || true
132
+ which pip || true
133
+ which pip3 || true
134
+
135
+ if false; then
136
+ if ! virtualenv --version; then
137
+ python3 `which pip3` install --user virtualenv
138
+ export PATH=$HOME/.local/bin:$PATH
139
+ virtualenv --version
140
+ fi
141
+
142
+ venvpath="$MONGO_ORCHESTRATION_HOME"/venv
143
+ virtualenv -p python3 $venvpath
144
+ . $venvpath/bin/activate
145
+
146
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
147
+ pip3 install psutil pymongo python-dateutil
148
+
149
+ git clone $repo mlaunch
150
+ cd mlaunch
151
+ git checkout origin/$branch
152
+ python3 setup.py install
153
+ cd ..
154
+ else
155
+ pip install --user 'virtualenv==13'
156
+ export PATH=$HOME/.local/bin:$PATH
157
+
158
+ venvpath="$MONGO_ORCHESTRATION_HOME"/venv
159
+ virtualenv $venvpath
160
+ . $venvpath/bin/activate
161
+
162
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
163
+ pip install psutil pymongo python-dateutil
164
+
165
+ git clone $repo mlaunch
166
+ (cd mlaunch &&
167
+ git checkout origin/$branch &&
168
+ python2 setup.py install
169
+ )
170
+ fi
171
+ }
172
+
173
+ install_cmake() {
174
+ if ! command -v cmake &> /dev/null; then
175
+ if ! command -v apt-get &> /dev/null; then
176
+ # no apt-get; assume RHEL
177
+ sudo yum -y install cmake libarchive
178
+ else
179
+ sudo apt-get install --yes cmake
180
+ fi
181
+ else
182
+ echo 'cmake is present'
183
+ fi
184
+ }
185
+
186
+ # This function sets followong global variables:
187
+ # server_cert_path
188
+ # server_ca_path
189
+ # server_client_cert_path
190
+ #
191
+ # These variables are used later to connect to processes via mongo client.
192
+ calculate_server_args() {
193
+ local mongo_version=`echo $MONGODB_VERSION |tr -d .`
194
+
195
+ if test -z "$mongo_version"; then
196
+ echo "$MONGODB_VERSION must be set and not contain only dots" 1>&2
197
+ exit 3
198
+ fi
199
+
200
+ if test $mongo_version = latest; then
201
+ mongo_version=70
202
+ fi
203
+
204
+ local args="--setParameter enableTestCommands=1"
205
+
206
+ if test $mongo_version -ge 50; then
207
+ args="$args --setParameter acceptApiVersion2=1"
208
+ elif test $mongo_version -ge 47; then
209
+ args="$args --setParameter acceptAPIVersion2=1"
210
+ fi
211
+
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
219
+ local uri_options=
220
+ if test "$TOPOLOGY" = replica-set; then
221
+ args="$args --replicaset --name test-rs --nodes 2 --arbiter"
222
+ export HAVE_ARBITER=1
223
+ elif test "$TOPOLOGY" = sharded-cluster; then
224
+ args="$args --replicaset --nodes 2 --sharded 1 --name test-rs"
225
+ if test -z "$SINGLE_MONGOS"; then
226
+ args="$args --mongos 2"
227
+ fi
228
+ elif test "$TOPOLOGY" = standalone; then
229
+ args="$args --single"
230
+ elif test "$TOPOLOGY" = load-balanced; then
231
+ args="$args --replicaset --nodes 2 --sharded 1 --name test-rs --port 27117"
232
+ if test -z "$MRSS_ROOT"; then
233
+ echo "Please set MRSS_ROOT" 1>&2
234
+ exit 2
235
+ fi
236
+ if test -n "$SINGLE_MONGOS"; then
237
+ haproxy_config=$MRSS_ROOT/share/haproxy-1.conf
238
+ else
239
+ args="$args --mongos 2"
240
+ haproxy_config=$MRSS_ROOT/share/haproxy-2.conf
241
+ fi
242
+ uri_options="$uri_options&loadBalanced=true"
243
+ else
244
+ echo "Unknown topology: $TOPOLOGY" 1>&2
245
+ exit 1
246
+ fi
247
+ if test -n "$MMAPV1"; then
248
+ args="$args --storageEngine mmapv1 --smallfiles --noprealloc"
249
+ uri_options="$uri_options&retryReads=false&retryWrites=false"
250
+ fi
251
+ if test "$AUTH" = auth; then
252
+ args="$args --auth --username bob --password pwd123"
253
+ elif test "$AUTH" = x509; then
254
+ args="$args --auth --username bootstrap --password bootstrap"
255
+ elif echo "$AUTH" |grep -q ^aws; then
256
+ args="$args --auth --username bootstrap --password bootstrap"
257
+ args="$args --setParameter authenticationMechanisms=MONGODB-AWS,SCRAM-SHA-1,SCRAM-SHA-256"
258
+ uri_options="$uri_options&authMechanism=MONGODB-AWS&authSource=\$external"
259
+ fi
260
+
261
+ if test -n "$OCSP"; then
262
+ if test -z "$OCSP_ALGORITHM"; then
263
+ echo "OCSP_ALGORITHM must be set if OCSP is set" 1>&2
264
+ exit 1
265
+ fi
266
+ fi
267
+
268
+ if test "$SSL" = ssl || test -n "$OCSP_ALGORITHM"; then
269
+ if test -n "$OCSP_ALGORITHM"; then
270
+ if test "$OCSP_MUST_STAPLE" = 1; then
271
+ server_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server-mustStaple.pem
272
+ else
273
+ server_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
274
+ fi
275
+ server_ca_path=spec/support/ocsp/$OCSP_ALGORITHM/ca.crt
276
+ server_client_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
277
+ else
278
+ server_cert_path=spec/support/certificates/server-second-level-bundle.pem
279
+ server_ca_path=spec/support/certificates/ca.crt
280
+ server_client_cert_path=spec/support/certificates/client.pem
281
+ fi
282
+
283
+ if test -n "$OCSP_ALGORITHM"; then
284
+ client_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
285
+ elif test "$AUTH" = x509; then
286
+ client_cert_path=spec/support/certificates/client-x509.pem
287
+
288
+ uri_options="$uri_options&authMechanism=MONGODB-X509"
289
+ elif echo $RVM_RUBY |grep -q jruby; then
290
+ # JRuby does not grok chained certificate bundles -
291
+ # https://github.com/jruby/jruby-openssl/issues/181
292
+ client_cert_path=spec/support/certificates/client.pem
293
+ else
294
+ client_cert_path=spec/support/certificates/client-second-level-bundle.pem
295
+ fi
296
+
297
+ uri_options="$uri_options&tls=true&"\
298
+ "tlsCAFile=$server_ca_path&"\
299
+ "tlsCertificateKeyFile=$client_cert_path"
300
+
301
+ args="$args --sslMode requireSSL"\
302
+ " --sslPEMKeyFile $server_cert_path"\
303
+ " --sslCAFile $server_ca_path"\
304
+ " --sslClientCertificate $server_client_cert_path"
305
+ fi
306
+
307
+ # Docker forwards ports to the external interface, not to the loopback.
308
+ # Hence we must bind to all interfaces here.
309
+ if test -n "$BIND_ALL"; then
310
+ args="$args --bind_ip_all"
311
+ fi
312
+
313
+ # MongoDB servers pre-4.2 do not enable zlib compression by default
314
+ if test "$COMPRESSOR" = snappy; then
315
+ args="$args --networkMessageCompressors snappy"
316
+ elif test "$COMPRESSOR" = zlib; then
317
+ args="$args --networkMessageCompressors zlib"
318
+ fi
319
+
320
+ if test -n "$OCSP_ALGORITHM" || test -n "$OCSP_VERIFIER"; then
321
+ python3 -m pip install asn1crypto oscrypto flask
322
+ fi
323
+
324
+ local ocsp_args=
325
+ if test -n "$OCSP_ALGORITHM"; then
326
+ if test -z "$server_ca_path"; then
327
+ echo "server_ca_path must have been set" 1>&2
328
+ exit 1
329
+ fi
330
+ ocsp_args="--ca_file $server_ca_path"
331
+ if test "$OCSP_DELEGATE" = 1; then
332
+ ocsp_args="$ocsp_args \
333
+ --ocsp_responder_cert spec/support/ocsp/$OCSP_ALGORITHM/ocsp-responder.crt \
334
+ --ocsp_responder_key spec/support/ocsp/$OCSP_ALGORITHM/ocsp-responder.key \
335
+ "
336
+ else
337
+ ocsp_args="$ocsp_args \
338
+ --ocsp_responder_cert spec/support/ocsp/$OCSP_ALGORITHM/ca.crt \
339
+ --ocsp_responder_key spec/support/ocsp/$OCSP_ALGORITHM/ca.key \
340
+ "
341
+ fi
342
+ if test -n "$OCSP_STATUS"; then
343
+ ocsp_args="$ocsp_args --fault $OCSP_STATUS"
344
+ fi
345
+ fi
346
+
347
+ OCSP_ARGS="$ocsp_args"
348
+ SERVER_ARGS="$args"
349
+ URI_OPTIONS="$uri_options"
350
+ }
351
+
352
+ launch_ocsp_mock() {
353
+ if test -n "$OCSP_ARGS"; then
354
+ # Bind to 0.0.0.0 for Docker
355
+ python3 spec/support/ocsp/ocsp_mock.py $OCSP_ARGS -b 0.0.0.0 -p 8100 &
356
+ OCSP_MOCK_PID=$!
357
+ fi
358
+ }
359
+
360
+ launch_server() {
361
+ local dbdir="$1"
362
+ python3 -m mtools.mlaunch.mlaunch --dir "$dbdir" --binarypath "$BINDIR" $SERVER_ARGS
363
+
364
+ if test "$TOPOLOGY" = sharded-cluster && test $MONGODB_VERSION = 3.6; then
365
+ # On 3.6 server the sessions collection is not immediately available,
366
+ # so we run the refreshLogicalSessionCacheNow command on the config server
367
+ # and again on each mongos in order for the mongoses
368
+ # to correctly report logicalSessionTimeoutMinutes.
369
+ mongos_regex="\s*mongos\s+([0-9]+)\s+running\s+[0-9]+"
370
+ config_server_regex="\s*config\sserver\s+([0-9]+)\s+running\s+[0-9]+"
371
+ config_server=""
372
+ mongoses=()
373
+ if test "$AUTH" = auth
374
+ then
375
+ base_url="mongodb://bob:pwd123@localhost"
376
+ else
377
+ base_url="mongodb://localhost"
378
+ fi
379
+ if test "$SSL" = "ssl"
380
+ then
381
+ mongo_command="${BINDIR}/mongo --ssl --sslPEMKeyFile $server_cert_path --sslCAFile $server_ca_path"
382
+ else
383
+ mongo_command="${BINDIR}/mongo"
384
+ fi
385
+
386
+ while read -r line
387
+ do
388
+ if [[ $line =~ $config_server_regex ]]
389
+ then
390
+ port="${BASH_REMATCH[1]}"
391
+ config_server="${base_url}:${port}"
392
+ fi
393
+ if [[ $line =~ $mongos_regex ]]
394
+ then
395
+ port="${BASH_REMATCH[1]}"
396
+ mongoses+=("${base_url}:${port}")
397
+ fi
398
+ done < <(python2 -m mtools.mlaunch.mlaunch list --dir "$dbdir" --binarypath "$BINDIR")
399
+
400
+ if [ -n "$config_server" ]; then
401
+ ${mongo_command} "$config_server" --eval 'db.adminCommand("refreshLogicalSessionCacheNow")'
402
+ for mongos in ${mongoses[*]}
403
+ do
404
+ ${mongo_command} "$mongos" --eval 'db.adminCommand("refreshLogicalSessionCacheNow")'
405
+ done
406
+ fi
407
+ fi
408
+
409
+ if test "$TOPOLOGY" = load-balanced; then
410
+ if test -z "$haproxy_config"; then
411
+ echo haproxy_config should have been set 1>&2
412
+ exit 3
413
+ fi
414
+
415
+ haproxy -D -f $haproxy_config -p $mongodb_dir/haproxy.pid
416
+ fi
417
+ }
@@ -0,0 +1,146 @@
1
+ # When changing, also update the hash in share/Dockerfile.
2
+ TOOLCHAIN_VERSION=ded7ea845b08cf96f11a747d9540ba3199580dea
3
+ JDK_VERSION=jdk17
4
+
5
+ set_env_java() {
6
+ ls -l /opt || true
7
+ ls -l /usr/lib/jvm || true
8
+
9
+ # Use toolchain java if it exists
10
+ if [ -f /opt/java/$JDK_VERSION/bin/java ]; then
11
+ export JAVACMD=/opt/java/$JDK_VERSION/bin/java
12
+ else
13
+ echo Could not find $JDK_VERSION in /opt/java
14
+ fi
15
+
16
+ if test -n "$JAVACMD"; then
17
+ eval $JAVACMD -version
18
+ elif which java 2>/dev/null; then
19
+ java -version
20
+ else
21
+ echo No java runtime found
22
+ fi
23
+ }
24
+
25
+ set_env_python() {
26
+ if test "$DOCKER_PRELOAD" != 1; then
27
+ if test -n "$DOCKER"; then
28
+ # If we are running in Docker and not preloading, we need to fetch the
29
+ # Python binary.
30
+ curl -fL --retry 3 https://github.com/p-mongodb/deps/raw/main/"$arch"-python37.tar.xz | \
31
+ tar xfJ - -C /opt
32
+ fi
33
+
34
+ if test -d /opt/python/3.7/bin; then
35
+ # Most Evergreen configurations.
36
+ export PATH=/opt/python/3.7/bin:$PATH
37
+ elif test -d /opt/python37/bin; then
38
+ # Configurations that use Docker in Evergreen - these don't preload.
39
+ export PATH=/opt/python37/bin:$PATH
40
+ fi
41
+
42
+ python3 -V
43
+ fi
44
+ }
45
+
46
+ set_env_node() {
47
+ if test "$DOCKER_PRELOAD" != 1; then
48
+ dir=`ls -d /opt/nodejs/node-v12* |head -1`
49
+ if test -z "$dir"; then
50
+ echo "Node 12 missing" 1>&2
51
+ exit 2
52
+ fi
53
+ export PATH="$dir/bin:$PATH"
54
+ elif test -d /opt/node/bin; then
55
+ # Node from toolchain in Evergreen
56
+ export PATH=/opt/node/bin:$PATH
57
+ fi
58
+
59
+ node -v
60
+ }
61
+
62
+ set_env_ruby() {
63
+ if test -z "$RVM_RUBY"; then
64
+ echo "Empty RVM_RUBY, aborting"
65
+ exit 2
66
+ fi
67
+
68
+ #ls -l /opt
69
+
70
+ # Necessary for jruby
71
+ set_env_java
72
+
73
+ if [ "$RVM_RUBY" == "ruby-head" ]; then
74
+ # When we use ruby-head, we do not install the Ruby toolchain.
75
+ # But we still need Python 3.6+ to run mlaunch.
76
+ # Since the ruby-head tests are run on ubuntu1604, we can use the
77
+ # globally installed Python toolchain.
78
+ #export PATH=/opt/python/3.7/bin:$PATH
79
+
80
+ # 12.04, 14.04 and 16.04 are good
81
+ curl --retry 3 -fL http://rubies.travis-ci.org/ubuntu/`lsb_release -rs`/x86_64/ruby-head.tar.bz2 |tar xfj -
82
+ # TODO adjust gem path?
83
+ export PATH=`pwd`/ruby-head/bin:`pwd`/ruby-head/lib/ruby/gems/2.6.0/bin:$PATH
84
+ ruby --version
85
+ ruby --version |grep dev
86
+ elif test "$SYSTEM_RUBY" = 1; then
87
+ # Nothing
88
+ :
89
+ else
90
+ if test "$USE_OPT_TOOLCHAIN" = 1; then
91
+ # Nothing, also PATH is already set
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
+
106
+ else
107
+
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
+
121
+ fi
122
+
123
+ ruby --version
124
+
125
+ # Ensure we're using the right ruby
126
+ ruby_name=`echo $RVM_RUBY |awk -F- '{print $1}'`
127
+ ruby_version=`echo $RVM_RUBY |awk -F- '{print $2}' |cut -c 1-3`
128
+
129
+ ruby -v |fgrep $ruby_name
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
145
+ fi
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