mongoid 7.5.4 → 8.1.7

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 (442) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -3
  3. data/README.md +6 -6
  4. data/Rakefile +44 -46
  5. data/lib/config/locales/en.yml +92 -43
  6. data/lib/mongoid/association/accessors.rb +44 -11
  7. data/lib/mongoid/association/bindable.rb +50 -2
  8. data/lib/mongoid/association/builders.rb +5 -3
  9. data/lib/mongoid/association/constrainable.rb +0 -1
  10. data/lib/mongoid/association/eager_loadable.rb +29 -7
  11. data/lib/mongoid/association/embedded/batchable.rb +34 -11
  12. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  13. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  14. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
  15. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
  16. data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
  17. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  18. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
  19. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +85 -46
  20. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  21. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
  22. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
  23. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  24. data/lib/mongoid/association/macros.rb +8 -1
  25. data/lib/mongoid/association/many.rb +11 -7
  26. data/lib/mongoid/association/nested/many.rb +5 -4
  27. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  28. data/lib/mongoid/association/nested/one.rb +45 -7
  29. data/lib/mongoid/association/one.rb +2 -2
  30. data/lib/mongoid/association/options.rb +9 -9
  31. data/lib/mongoid/association/proxy.rb +15 -4
  32. data/lib/mongoid/association/referenced/auto_save.rb +4 -3
  33. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  34. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  35. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  36. data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
  37. data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
  38. data/lib/mongoid/association/referenced/eager.rb +2 -2
  39. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
  40. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
  41. data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
  42. data/lib/mongoid/association/referenced/has_many/proxy.rb +40 -21
  43. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  44. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  45. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  46. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
  47. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  48. data/lib/mongoid/association/referenced/syncable.rb +4 -4
  49. data/lib/mongoid/association/reflections.rb +4 -4
  50. data/lib/mongoid/association/relatable.rb +44 -10
  51. data/lib/mongoid/association.rb +5 -5
  52. data/lib/mongoid/atomic/modifiers.rb +2 -2
  53. data/lib/mongoid/atomic.rb +16 -7
  54. data/lib/mongoid/attributes/dynamic.rb +4 -4
  55. data/lib/mongoid/attributes/nested.rb +6 -6
  56. data/lib/mongoid/attributes/processing.rb +37 -6
  57. data/lib/mongoid/attributes/projector.rb +2 -2
  58. data/lib/mongoid/attributes/readonly.rb +3 -3
  59. data/lib/mongoid/attributes.rb +51 -42
  60. data/lib/mongoid/changeable.rb +147 -14
  61. data/lib/mongoid/clients/options.rb +5 -1
  62. data/lib/mongoid/clients/sessions.rb +2 -14
  63. data/lib/mongoid/clients/storage_options.rb +2 -5
  64. data/lib/mongoid/clients/validators/storage.rb +3 -15
  65. data/lib/mongoid/collection_configurable.rb +58 -0
  66. data/lib/mongoid/composable.rb +2 -0
  67. data/lib/mongoid/config/defaults.rb +60 -0
  68. data/lib/mongoid/config/options.rb +3 -0
  69. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  70. data/lib/mongoid/config/validators/client.rb +6 -6
  71. data/lib/mongoid/config/validators.rb +1 -0
  72. data/lib/mongoid/config.rb +153 -18
  73. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  74. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  75. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  76. data/lib/mongoid/contextual/atomic.rb +1 -1
  77. data/lib/mongoid/contextual/geo_near.rb +7 -7
  78. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  79. data/lib/mongoid/contextual/memory.rb +285 -58
  80. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  81. data/lib/mongoid/contextual/mongo.rb +540 -346
  82. data/lib/mongoid/contextual/none.rb +193 -20
  83. data/lib/mongoid/contextual/queryable.rb +1 -1
  84. data/lib/mongoid/contextual.rb +14 -2
  85. data/lib/mongoid/copyable.rb +32 -8
  86. data/lib/mongoid/criteria/findable.rb +8 -5
  87. data/lib/mongoid/criteria/includable.rb +27 -22
  88. data/lib/mongoid/criteria/marshalable.rb +10 -2
  89. data/lib/mongoid/criteria/permission.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  91. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
  92. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  93. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  94. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  95. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  96. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
  97. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -9
  98. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  99. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  100. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  101. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  102. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
  103. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
  104. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  105. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  106. data/lib/mongoid/criteria/queryable/key.rb +4 -4
  107. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
  108. data/lib/mongoid/criteria/queryable/optional.rb +11 -17
  109. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  110. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  111. data/lib/mongoid/criteria/queryable/selectable.rb +47 -38
  112. data/lib/mongoid/criteria/queryable/selector.rb +92 -7
  113. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  114. data/lib/mongoid/criteria/queryable.rb +12 -7
  115. data/lib/mongoid/criteria/scopable.rb +2 -2
  116. data/lib/mongoid/criteria/translator.rb +45 -0
  117. data/lib/mongoid/criteria.rb +20 -40
  118. data/lib/mongoid/deprecable.rb +37 -0
  119. data/lib/mongoid/deprecation.rb +25 -0
  120. data/lib/mongoid/document.rb +127 -35
  121. data/lib/mongoid/equality.rb +8 -8
  122. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  123. data/lib/mongoid/errors/document_not_found.rb +10 -6
  124. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  125. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  126. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  127. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  128. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  129. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  130. data/lib/mongoid/errors/invalid_field.rb +6 -2
  131. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  132. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  133. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  134. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  135. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  136. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  137. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  138. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  139. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  140. data/lib/mongoid/errors/no_client_database.rb +1 -1
  141. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  142. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  143. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  144. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  145. data/lib/mongoid/errors.rb +6 -3
  146. data/lib/mongoid/extensions/array.rb +9 -7
  147. data/lib/mongoid/extensions/big_decimal.rb +33 -10
  148. data/lib/mongoid/extensions/binary.rb +42 -0
  149. data/lib/mongoid/extensions/boolean.rb +8 -2
  150. data/lib/mongoid/extensions/date.rb +26 -20
  151. data/lib/mongoid/extensions/date_time.rb +1 -1
  152. data/lib/mongoid/extensions/false_class.rb +1 -1
  153. data/lib/mongoid/extensions/float.rb +7 -4
  154. data/lib/mongoid/extensions/hash.rb +38 -9
  155. data/lib/mongoid/extensions/integer.rb +7 -4
  156. data/lib/mongoid/extensions/module.rb +1 -1
  157. data/lib/mongoid/extensions/object.rb +10 -8
  158. data/lib/mongoid/extensions/range.rb +41 -10
  159. data/lib/mongoid/extensions/regexp.rb +11 -4
  160. data/lib/mongoid/extensions/set.rb +11 -4
  161. data/lib/mongoid/extensions/string.rb +11 -22
  162. data/lib/mongoid/extensions/symbol.rb +4 -15
  163. data/lib/mongoid/extensions/time.rb +29 -16
  164. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  165. data/lib/mongoid/extensions/true_class.rb +1 -1
  166. data/lib/mongoid/extensions.rb +1 -0
  167. data/lib/mongoid/factory.rb +55 -7
  168. data/lib/mongoid/fields/foreign_key.rb +11 -4
  169. data/lib/mongoid/fields/localized.rb +19 -4
  170. data/lib/mongoid/fields/standard.rb +17 -7
  171. data/lib/mongoid/fields/validators/macro.rb +3 -9
  172. data/lib/mongoid/fields.rb +142 -28
  173. data/lib/mongoid/findable.rb +54 -24
  174. data/lib/mongoid/indexable/specification.rb +2 -2
  175. data/lib/mongoid/indexable/validators/options.rb +6 -2
  176. data/lib/mongoid/interceptable.rb +186 -16
  177. data/lib/mongoid/matchable.rb +1 -1
  178. data/lib/mongoid/matcher/eq_impl.rb +1 -1
  179. data/lib/mongoid/matcher/type.rb +1 -1
  180. data/lib/mongoid/matcher.rb +48 -14
  181. data/lib/mongoid/persistable/creatable.rb +19 -9
  182. data/lib/mongoid/persistable/deletable.rb +2 -2
  183. data/lib/mongoid/persistable/destroyable.rb +1 -1
  184. data/lib/mongoid/persistable/savable.rb +14 -2
  185. data/lib/mongoid/persistable/unsettable.rb +2 -2
  186. data/lib/mongoid/persistable/updatable.rb +69 -12
  187. data/lib/mongoid/persistable/upsertable.rb +21 -2
  188. data/lib/mongoid/persistable.rb +6 -3
  189. data/lib/mongoid/persistence_context.rb +6 -4
  190. data/lib/mongoid/query_cache.rb +13 -261
  191. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  192. data/lib/mongoid/railties/database.rake +7 -2
  193. data/lib/mongoid/reloadable.rb +10 -8
  194. data/lib/mongoid/scopable.rb +15 -13
  195. data/lib/mongoid/selectable.rb +1 -2
  196. data/lib/mongoid/serializable.rb +17 -13
  197. data/lib/mongoid/stateful.rb +57 -10
  198. data/lib/mongoid/tasks/database.rake +12 -0
  199. data/lib/mongoid/tasks/database.rb +20 -2
  200. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  201. data/lib/mongoid/threaded.rb +42 -12
  202. data/lib/mongoid/timestamps/created.rb +1 -1
  203. data/lib/mongoid/timestamps/updated.rb +2 -2
  204. data/lib/mongoid/touchable.rb +3 -4
  205. data/lib/mongoid/traversable.rb +10 -5
  206. data/lib/mongoid/utils.rb +22 -0
  207. data/lib/mongoid/validatable/associated.rb +98 -17
  208. data/lib/mongoid/validatable/localizable.rb +1 -1
  209. data/lib/mongoid/validatable/macros.rb +5 -7
  210. data/lib/mongoid/validatable/presence.rb +2 -2
  211. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  212. data/lib/mongoid/validatable.rb +17 -6
  213. data/lib/mongoid/version.rb +1 -1
  214. data/lib/mongoid/warnings.rb +19 -4
  215. data/lib/mongoid.rb +17 -3
  216. data/spec/config/mongoid.yml +16 -0
  217. data/spec/integration/app_spec.rb +24 -19
  218. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  219. data/spec/integration/associations/embedded_spec.rb +15 -0
  220. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  221. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  222. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  223. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -0
  224. data/spec/integration/associations/has_one_spec.rb +97 -1
  225. data/spec/integration/associations/scope_option_spec.rb +1 -1
  226. data/spec/integration/callbacks_models.rb +132 -1
  227. data/spec/integration/callbacks_spec.rb +381 -4
  228. data/spec/integration/criteria/range_spec.rb +95 -1
  229. data/spec/integration/discriminator_key_spec.rb +118 -80
  230. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  231. data/spec/integration/i18n_fallbacks_spec.rb +3 -32
  232. data/spec/integration/matcher_examples_spec.rb +20 -13
  233. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  234. data/spec/integration/matcher_operator_spec.rb +3 -5
  235. data/spec/integration/persistence/range_field_spec.rb +350 -0
  236. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  237. data/spec/mongoid/association/depending_spec.rb +9 -9
  238. data/spec/mongoid/association/eager_spec.rb +2 -1
  239. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  240. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  241. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
  242. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  243. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +290 -65
  244. data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
  245. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -0
  246. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  247. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  248. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
  249. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  250. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  251. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  252. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  253. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +19 -0
  254. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  255. data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
  256. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
  257. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  258. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  259. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  260. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  261. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +215 -177
  262. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  263. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  264. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  265. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  266. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  267. data/spec/mongoid/association/syncable_spec.rb +15 -1
  268. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  269. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  270. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  271. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  272. data/spec/mongoid/attributes_spec.rb +526 -33
  273. data/spec/mongoid/changeable_spec.rb +429 -37
  274. data/spec/mongoid/clients/factory_spec.rb +23 -30
  275. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  276. data/spec/mongoid/clients_spec.rb +149 -15
  277. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  278. data/spec/mongoid/config/defaults_spec.rb +160 -0
  279. data/spec/mongoid/config_spec.rb +214 -31
  280. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  281. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  282. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  283. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  284. data/spec/mongoid/contextual/memory_spec.rb +850 -88
  285. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  286. data/spec/mongoid/contextual/mongo_spec.rb +2256 -1005
  287. data/spec/mongoid/contextual/none_spec.rb +60 -21
  288. data/spec/mongoid/copyable_spec.rb +453 -11
  289. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  290. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  291. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  292. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  293. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  294. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  295. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  296. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  297. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  298. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  299. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
  300. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
  301. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  302. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  303. data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
  304. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  305. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
  306. data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
  307. data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
  308. data/spec/mongoid/criteria/translator_spec.rb +132 -0
  309. data/spec/mongoid/criteria_projection_spec.rb +1 -5
  310. data/spec/mongoid/criteria_spec.rb +469 -1205
  311. data/spec/mongoid/document_fields_spec.rb +173 -24
  312. data/spec/mongoid/document_spec.rb +32 -41
  313. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  314. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  315. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  316. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  317. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  318. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  319. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  320. data/spec/mongoid/extensions/array_spec.rb +16 -2
  321. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
  322. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  323. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  324. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  325. data/spec/mongoid/extensions/date_spec.rb +71 -1
  326. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  327. data/spec/mongoid/extensions/float_spec.rb +53 -74
  328. data/spec/mongoid/extensions/hash_spec.rb +33 -3
  329. data/spec/mongoid/extensions/integer_spec.rb +50 -64
  330. data/spec/mongoid/extensions/range_spec.rb +255 -54
  331. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  332. data/spec/mongoid/extensions/set_spec.rb +106 -0
  333. data/spec/mongoid/extensions/string_spec.rb +53 -25
  334. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  335. data/spec/mongoid/extensions/time_spec.rb +639 -106
  336. data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
  337. data/spec/mongoid/factory_spec.rb +61 -1
  338. data/spec/mongoid/fields/localized_spec.rb +80 -37
  339. data/spec/mongoid/fields_spec.rb +503 -87
  340. data/spec/mongoid/findable_spec.rb +450 -58
  341. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  342. data/spec/mongoid/indexable_spec.rb +55 -30
  343. data/spec/mongoid/interceptable_spec.rb +824 -22
  344. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  345. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  346. data/spec/mongoid/mongoizable_spec.rb +285 -0
  347. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  348. data/spec/mongoid/persistable/deletable_spec.rb +28 -8
  349. data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
  350. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  351. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  352. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  353. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  354. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  355. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  356. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  357. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  358. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  359. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  360. data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
  361. data/spec/mongoid/persistence_context_spec.rb +31 -57
  362. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  363. data/spec/mongoid/query_cache_spec.rb +56 -215
  364. data/spec/mongoid/reloadable_spec.rb +83 -6
  365. data/spec/mongoid/scopable_spec.rb +91 -1
  366. data/spec/mongoid/serializable_spec.rb +25 -39
  367. data/spec/mongoid/shardable_spec.rb +4 -4
  368. data/spec/mongoid/stateful_spec.rb +150 -8
  369. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  370. data/spec/mongoid/tasks/database_spec.rb +127 -0
  371. data/spec/mongoid/timestamps_spec.rb +392 -4
  372. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  373. data/spec/mongoid/touchable_spec.rb +390 -2
  374. data/spec/mongoid/touchable_spec_models.rb +14 -8
  375. data/spec/mongoid/traversable_spec.rb +13 -35
  376. data/spec/mongoid/validatable/associated_spec.rb +27 -34
  377. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  378. data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
  379. data/spec/mongoid/warnings_spec.rb +35 -0
  380. data/spec/mongoid_spec.rb +34 -16
  381. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  382. data/spec/rails/mongoid_spec.rb +4 -16
  383. data/spec/spec_helper.rb +5 -0
  384. data/spec/support/constraints.rb +24 -0
  385. data/spec/support/immutable_ids.rb +118 -0
  386. data/spec/support/macros.rb +78 -0
  387. data/spec/support/models/artist.rb +0 -1
  388. data/spec/support/models/augmentation.rb +12 -0
  389. data/spec/support/models/band.rb +5 -0
  390. data/spec/support/models/book.rb +1 -0
  391. data/spec/support/models/building.rb +2 -0
  392. data/spec/support/models/catalog.rb +24 -0
  393. data/spec/support/models/circus.rb +3 -0
  394. data/spec/support/models/cover.rb +10 -0
  395. data/spec/support/models/fanatic.rb +8 -0
  396. data/spec/support/models/implant.rb +9 -0
  397. data/spec/support/models/label.rb +2 -0
  398. data/spec/support/models/lat_lng.rb +6 -0
  399. data/spec/support/models/name.rb +10 -0
  400. data/spec/support/models/passport.rb +9 -0
  401. data/spec/support/models/person.rb +2 -0
  402. data/spec/support/models/player.rb +2 -0
  403. data/spec/support/models/powerup.rb +12 -0
  404. data/spec/support/models/product.rb +1 -0
  405. data/spec/support/models/purse.rb +9 -0
  406. data/spec/support/models/registry.rb +1 -0
  407. data/spec/support/models/school.rb +14 -0
  408. data/spec/support/models/shield.rb +18 -0
  409. data/spec/support/models/student.rb +14 -0
  410. data/spec/support/models/weapon.rb +12 -0
  411. metadata +101 -96
  412. checksums.yaml.gz.sig +0 -0
  413. data/lib/mongoid/errors/eager_load.rb +0 -23
  414. data/lib/mongoid/errors/invalid_value.rb +0 -17
  415. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
  416. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
  417. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
  418. data/spec/shared/LICENSE +0 -20
  419. data/spec/shared/bin/get-mongodb-download-url +0 -17
  420. data/spec/shared/bin/s3-copy +0 -45
  421. data/spec/shared/bin/s3-upload +0 -69
  422. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  423. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  424. data/spec/shared/lib/mrss/constraints.rb +0 -378
  425. data/spec/shared/lib/mrss/docker_runner.rb +0 -291
  426. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  427. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  428. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  429. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  430. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  431. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  432. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  433. data/spec/shared/lib/mrss/utils.rb +0 -15
  434. data/spec/shared/share/Dockerfile.erb +0 -325
  435. data/spec/shared/share/haproxy-1.conf +0 -16
  436. data/spec/shared/share/haproxy-2.conf +0 -17
  437. data/spec/shared/shlib/config.sh +0 -27
  438. data/spec/shared/shlib/distro.sh +0 -74
  439. data/spec/shared/shlib/server.sh +0 -392
  440. data/spec/shared/shlib/set_env.sh +0 -169
  441. data.tar.gz.sig +0 -0
  442. metadata.gz.sig +0 -3
@@ -1,378 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- module Mrss
5
- module Constraints
6
- def min_server_version(version)
7
- parsed_version = Gem::Version.new(version)
8
-
9
- before(:all) do
10
- if parsed_version > Gem::Version.new(ClusterConfig.instance.server_version)
11
- skip "Server version #{version} or higher required, we have #{ClusterConfig.instance.server_version}"
12
- end
13
- end
14
- end
15
-
16
- def max_server_version(version)
17
- parsed_version = Gem::Version.new(version)
18
-
19
- before(:all) do
20
- if parsed_version < Gem::Version.new(ClusterConfig.instance.server_version)
21
- skip "Server version #{version} or lower required, we have #{ClusterConfig.instance.server_version}"
22
- end
23
- end
24
- end
25
-
26
- def min_server_fcv(version)
27
- parsed_version = Gem::Version.new(version)
28
-
29
- before(:all) do
30
- unless Gem::Version.new(ClusterConfig.instance.fcv_ish) >= parsed_version
31
- skip "FCV #{version} or higher required, we have #{ClusterConfig.instance.fcv_ish} (server #{ClusterConfig.instance.server_version})"
32
- end
33
- end
34
- end
35
-
36
- def max_server_fcv(version)
37
- parsed_version = Gem::Version.new(version)
38
-
39
- before(:all) do
40
- if parsed_version < Gem::Version.new(ClusterConfig.instance.fcv_ish)
41
- skip "FCV #{version} or lower required, we have #{ClusterConfig.instance.fcv_ish} (server #{ClusterConfig.instance.server_version})"
42
- end
43
- end
44
- end
45
-
46
- def require_topology(*topologies)
47
- invalid_topologies = topologies - [:single, :replica_set, :sharded, :load_balanced]
48
-
49
- unless invalid_topologies.empty?
50
- raise ArgumentError, "Invalid topologies requested: #{invalid_topologies.join(', ')}"
51
- end
52
-
53
- before(:all) do
54
- unless topologies.include?(topology = ClusterConfig.instance.topology)
55
- skip "Topology #{topologies.join(' or ')} required, we have #{topology}"
56
- end
57
- end
58
- end
59
-
60
- def max_example_run_time(timeout)
61
- around do |example|
62
- TimeoutInterrupt.timeout(timeout, TimeoutInterrupt::Error.new("Test execution terminated after #{timeout} seconds")) do
63
- example.run
64
- end
65
- end
66
- end
67
-
68
- def require_transaction_support
69
- before(:all) do
70
- case ClusterConfig.instance.topology
71
- when :single
72
- skip 'Transactions tests require a replica set (4.0+) or a sharded cluster (4.2+)'
73
- when :replica_set
74
- unless ClusterConfig.instance.server_version >= '4.0'
75
- skip 'Transactions tests in a replica set topology require server 4.0+'
76
- end
77
- when :sharded, :load_balanced
78
- unless ClusterConfig.instance.server_version >= '4.2'
79
- skip 'Transactions tests in a sharded cluster topology require server 4.2+'
80
- end
81
- else
82
- raise NotImplementedError
83
- end
84
- end
85
- end
86
-
87
- # Fail command fail point was added to mongod in 4.0 and to mongos in 4.2.
88
- def require_fail_command
89
- require_transaction_support
90
- end
91
-
92
- def require_tls
93
- before(:all) do
94
- unless SpecConfig.instance.ssl?
95
- skip "SSL not enabled"
96
- end
97
- end
98
- end
99
-
100
- def require_no_tls
101
- before(:all) do
102
- if SpecConfig.instance.ssl?
103
- skip "SSL enabled"
104
- end
105
- end
106
- end
107
-
108
- def require_retry_writes
109
- before(:all) do
110
- unless SpecConfig.instance.retry_writes?
111
- skip "Retry writes is disabled"
112
- end
113
- end
114
- end
115
-
116
- def require_no_retry_writes
117
- before(:all) do
118
- if SpecConfig.instance.retry_writes?
119
- skip "Retry writes is enabled"
120
- end
121
- end
122
- end
123
-
124
- def require_compression
125
- before(:all) do
126
- if SpecConfig.instance.compressors.nil?
127
- skip "Compression is not enabled"
128
- end
129
- end
130
- end
131
-
132
- def require_zlib_compression
133
- before(:all) do
134
- compressors = SpecConfig.instance.compressors
135
- unless compressors && compressors.include?('zlib')
136
- skip "Zlib compression is not enabled"
137
- end
138
- end
139
- end
140
-
141
- def require_snappy_compression
142
- before(:all) do
143
- compressors = SpecConfig.instance.compressors
144
- unless compressors && compressors.include?('snappy')
145
- skip "Snappy compression is not enabled"
146
- end
147
- end
148
- end
149
-
150
- def require_no_snappy_compression
151
- before(:all) do
152
- compressors = SpecConfig.instance.compressors
153
- if compressors && compressors.include?('snappy')
154
- skip "Snappy compression is enabled"
155
- end
156
- end
157
- end
158
-
159
- def require_zstd_compression
160
- before(:all) do
161
- compressors = SpecConfig.instance.compressors
162
- unless compressors && compressors.include?('zstd')
163
- skip "Zstd compression is not enabled"
164
- end
165
- end
166
- end
167
-
168
- def require_no_zstd_compression
169
- before(:all) do
170
- compressors = SpecConfig.instance.compressors
171
- if compressors && compressors.include?('zstd')
172
- skip "Zstd compression is enabled"
173
- end
174
- end
175
- end
176
-
177
- def require_no_compression
178
- before(:all) do
179
- if SpecConfig.instance.compressors
180
- skip "Compression is enabled"
181
- end
182
- end
183
- end
184
-
185
- def ruby_version_gte(version)
186
- before(:all) do
187
- if RUBY_VERSION < version
188
- skip "Ruby version #{version} or higher required"
189
- end
190
- end
191
- end
192
-
193
- def ruby_version_lt(version)
194
- before(:all) do
195
- if RUBY_VERSION >= version
196
- skip "Ruby version less than #{version} required"
197
- end
198
- end
199
- end
200
-
201
- def require_auth(*values)
202
- before(:all) do
203
- if values.any?
204
- unless values.include?(ENV['AUTH'])
205
- msg = values.map { |v| "AUTH=#{v}" }.join(' or ')
206
- skip "This test requires #{msg}"
207
- end
208
- else
209
- unless ENV['AUTH'] == 'auth' || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
210
- skip "Auth required"
211
- end
212
- end
213
- end
214
- end
215
-
216
- def require_no_auth
217
- before(:all) do
218
- auth = ENV.fetch('AUTH', '')
219
- if (!auth.empty? && auth != 'noauth') || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
220
- skip "Auth not allowed"
221
- end
222
- end
223
- end
224
-
225
- def require_x509_auth
226
- before(:all) do
227
- unless SpecConfig.instance.x509_auth?
228
- skip "X.509 auth required"
229
- end
230
- end
231
- end
232
-
233
- def require_no_external_user
234
- before(:all) do
235
- if SpecConfig.instance.external_user?
236
- skip "External user configurations are not compatible with this test"
237
- end
238
- end
239
- end
240
-
241
- # Can the driver specify a write concern that won't be overridden?
242
- # (mongos 4.0+ overrides the write concern)
243
- def require_set_write_concern
244
- before(:all) do
245
- if %i(sharded load_balanced).include?(ClusterConfig.instance.topology) &&
246
- ClusterConfig.instance.short_server_version >= '4.0'
247
- then
248
- skip "mongos 4.0+ overrides write concern"
249
- end
250
- end
251
- end
252
-
253
- def require_multi_mongos
254
- before(:all) do
255
- if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length == 1
256
- skip 'Test requires a minimum of two mongoses if run in sharded topology'
257
- end
258
-
259
- if ClusterConfig.instance.topology == :load_balanced && SpecConfig.instance.single_mongos?
260
- skip 'Test requires a minimum of two mongoses if run in load-balanced topology'
261
- end
262
- end
263
- end
264
-
265
- # In sharded topology operations are distributed to the mongoses.
266
- # When we set fail points, the fail point may be set on one mongos and
267
- # operation may be executed on another mongos, causing failures.
268
- # Tests that are not setting targeted fail points should utilize this
269
- # method to restrict themselves to single mongos.
270
- #
271
- # In load-balanced topology, the same problem can happen when there is
272
- # more than one mongos behind the load balancer.
273
- def require_no_multi_mongos
274
- before(:all) do
275
- if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length > 1
276
- skip 'Test requires a single mongos if run in sharded topology'
277
- end
278
- if ClusterConfig.instance.topology == :load_balanced && !SpecConfig.instance.single_mongos?
279
- skip 'Test requires a single mongos, as indicated by SINGLE_MONGOS=1 environment variable, if run in load-balanced topology'
280
- end
281
- end
282
- end
283
-
284
- alias :require_no_multi_shard :require_no_multi_mongos
285
-
286
- def require_wired_tiger
287
- before(:all) do
288
- # Storage detection fails for serverless instances. However, it is safe to
289
- # assume that a serverless instance uses WiredTiger Storage Engine.
290
- if !SpecConfig.instance.serverless? && ClusterConfig.instance.storage_engine != :wired_tiger
291
- skip 'Test requires WiredTiger storage engine'
292
- end
293
- end
294
- end
295
-
296
- def require_wired_tiger_on_36
297
- before(:all) do
298
- if ClusterConfig.instance.short_server_version >= '3.6'
299
- # Storage detection fails for serverless instances. However, it is safe to
300
- # assume that a serverless instance uses WiredTiger Storage Engine.
301
- if !SpecConfig.instance.serverless? && ClusterConfig.instance.storage_engine != :wired_tiger
302
- skip 'Test requires WiredTiger storage engine on 3.6+ servers'
303
- end
304
- end
305
- end
306
- end
307
-
308
- def require_mmapv1
309
- before(:all) do
310
- if SpecConfig.instance.serverless? || ClusterConfig.instance.storage_engine != :mmapv1
311
- skip 'Test requires MMAPv1 storage engine'
312
- end
313
- end
314
- end
315
-
316
- def require_enterprise
317
- before(:all) do
318
- unless ClusterConfig.instance.enterprise?
319
- skip 'Test requires enterprise build of MongoDB'
320
- end
321
- end
322
- end
323
-
324
- # Integration tests for SRV polling require internet connectivity to
325
- # look up SRV records and a sharded cluster configured on default port on
326
- # localhost (localhost:27017, localhost:27018).
327
- def require_default_port_deployment
328
- # Because the DNS records at test1.test.build.10gen.cc point to
329
- # localhost:27017 & localhost:27018, the test suite must have been
330
- # configured to use these addresses
331
- before(:all) do
332
- have_default_port = SpecConfig.instance.addresses.any? do |address|
333
- %w(127.0.0.1 127.0.0.1:27017 localhost localhost:27017).include?(address)
334
- end
335
- unless have_default_port
336
- skip 'This test requires the test suite to be configured for localhost:27017'
337
- end
338
- end
339
- end
340
-
341
- # Some tests perform assertions on what the driver is logging.
342
- # Some test configurations, for example OCSP with unknown response,
343
- # produce warnings due to optional checks failing.
344
- # This constraint skips tests that issue logging assertions on configurations
345
- # that may produce non-test-originated log entries.
346
- def require_warning_clean
347
- before(:all) do
348
- if ENV['OCSP_STATUS'] == 'unknown'
349
- skip 'Unknown OCSP status is not global warning-clean'
350
- end
351
- end
352
- end
353
-
354
- def require_required_api_version
355
- before(:all) do
356
- unless ENV['API_VERSION_REQUIRED'] == '1'
357
- skip 'Set API_VERSION_REQUIRED=1 to run this test'
358
- end
359
- end
360
- end
361
-
362
- def require_no_required_api_version
363
- before(:all) do
364
- if ENV['API_VERSION_REQUIRED'] == '1'
365
- skip 'Cannot have API_VERSION_REQUIRED=1 to run this test'
366
- end
367
- end
368
- end
369
-
370
- def require_unix_socket
371
- before(:all) do
372
- if ENV['TOPOLOGY'] == 'load-balanced'
373
- skip 'Load balancer does not listen on Unix sockets'
374
- end
375
- end
376
- end
377
- end
378
- end
@@ -1,291 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- require 'optparse'
5
- require 'erb'
6
- autoload :Dotenv, 'dotenv'
7
-
8
- module Mrss
9
- autoload :ServerVersionRegistry, 'mrss/server_version_registry'
10
-
11
- class DockerRunner
12
- def initialize(**opts)
13
- # These options are required:
14
- opts.fetch(:image_tag)
15
- opts.fetch(:dockerfile_path)
16
- opts.fetch(:default_script)
17
- opts.fetch(:project_lib_subdir)
18
-
19
- @options = opts.merge(preload: true)
20
- end
21
-
22
- attr_reader :options
23
-
24
- def run
25
- process_arguments
26
- unless @options[:exec_only]
27
- create_dockerfile
28
- create_image
29
- end
30
- if @options[:mongo_only]
31
- run_deployment
32
- else
33
- run_tests
34
- end
35
- end
36
-
37
- private
38
-
39
- def process_arguments
40
- #@options = {}
41
- OptionParser.new do |opts|
42
- opts.banner = "Usage: test-on-docker [-d distro] [evergreen_key=value ...]"
43
-
44
- opts.on("-a", "--add-env=PATH", "Load environment variables from PATH in .env format") do |path|
45
- @options[:extra_env] ||= {}
46
- unless File.exist?(path)
47
- raise "-a option references nonexistent file #{path}"
48
- end
49
- Dotenv.parse(path).each do |k, v|
50
- @options[:extra_env][k] = v
51
- end
52
- end
53
-
54
- opts.on("-d", "--distro=DISTRO", "Distro to use") do |v|
55
- @options[:distro] = v
56
- end
57
-
58
- opts.on('-e', '--exec-only', 'Execute tests using existing Dockerfile (for offline user)') do |v|
59
- @options[:exec_only] = v
60
- end
61
-
62
- opts.on('-m', '--mongo-only=PORT', 'Start the MongoDB deployment and expose it to host on ports starting with PORT') do |v|
63
- @options[:mongo_only] = v.to_i
64
- end
65
-
66
- opts.on('-p', '--preload', 'Preload Ruby toolchain and server binaries in docker (default)') do |v|
67
- @options[:preload] = v
68
- end
69
-
70
- opts.on('-P', '--no-preload', 'Do not preload Ruby toolchain and server binaries in docker') do
71
- @options[:preload] = false
72
- end
73
-
74
- opts.on('-s', '--script=SCRIPT', 'Test script to invoke') do |v|
75
- @options[:script] = v
76
- end
77
-
78
- opts.on('-i', '--interactive', 'Interactive mode - disable per-test timeouts') do |v|
79
- @options[:interactive] = v
80
- end
81
- end.parse!
82
-
83
- @env = Hash[ARGV.map do |arg|
84
- arg.split('=', 2)
85
- end]
86
-
87
- @env['RVM_RUBY'] ||= 'ruby-2.7'
88
- unless ruby =~ /^j?ruby-/
89
- raise "RVM_RUBY option is not in expected format: #{ruby}"
90
- end
91
-
92
- @env['MONGODB_VERSION'] ||= '4.4'
93
- end
94
-
95
- def create_dockerfile
96
- template_path = File.join(File.dirname(__FILE__), '../../share/Dockerfile.erb')
97
- result = ERB.new(File.read(template_path)).result(binding)
98
- File.open(dockerfile_path, 'w') do |f|
99
- f << result
100
- end
101
- end
102
-
103
- def image_tag
104
- options.fetch(:image_tag)
105
- end
106
-
107
- def dockerfile_path
108
- options.fetch(:dockerfile_path)
109
- end
110
-
111
- def create_image
112
- run_command(['docker', 'build',
113
- '-t', image_tag,
114
- '-f', dockerfile_path,
115
- '.'])
116
- end
117
-
118
- BASE_TEST_COMMAND = %w(docker run --rm -i --tmpfs /tmpfs:exec).freeze
119
-
120
- def run_tests
121
- run_command(BASE_TEST_COMMAND + tty_arg + extra_env + [image_tag] +
122
- script.split(/\s+/))
123
- end
124
-
125
- def run_deployment
126
- run_command(BASE_TEST_COMMAND + tty_arg + extra_env + [
127
- '-e', %q`TEST_CMD=watch -x bash -c "ps awwxu |egrep 'mongo|ocsp'"`,
128
- '-e', 'BIND_ALL=true',
129
- ] + port_forwards + [image_tag] + script.split(/\s+/))
130
- end
131
-
132
- def tty_arg
133
- tty = File.open('/dev/stdin') do |f|
134
- f.isatty
135
- end
136
- if tty
137
- %w(-t --init)
138
- else
139
- []
140
- end
141
- end
142
-
143
- def extra_env
144
- if @options[:extra_env]
145
- @options[:extra_env].map do |k, v|
146
- # Here the value must not be escaped
147
- ['-e', "#{k}=#{v}"]
148
- end.flatten
149
- else
150
- []
151
- end
152
- end
153
-
154
- def port_forwards
155
- args = (0...num_exposed_ports).map do |i|
156
- host_port = @options[:mongo_only] + i
157
- container_port = 27017 + i
158
- ['-p', "#{host_port}:#{container_port}"]
159
- end.flatten
160
-
161
- if @env['OCSP_ALGORITHM'] && !@env['OCSP_VERIFIER']
162
- args += %w(-p 8100:8100)
163
- end
164
-
165
- args
166
- end
167
-
168
- def run_command(cmd)
169
- if pid = fork
170
- Process.wait(pid)
171
- unless $?.exitstatus == 0
172
- raise "Process exited with code #{$?.exitstatus}"
173
- end
174
- else
175
- exec(*cmd)
176
- end
177
- end
178
-
179
- def distro
180
- @options[:distro] || if app_tests?
181
- 'ubuntu2004'
182
- else
183
- case server_version
184
- when '3.6'
185
- 'debian9'
186
- when '4.0', '4.2'
187
- 'ubuntu1804'
188
- else
189
- 'ubuntu2004'
190
- end
191
- end
192
- end
193
-
194
- BASE_IMAGES = {
195
- 'debian81' => 'debian:jessie',
196
- 'debian92' => 'debian:stretch',
197
- 'debian10' => 'debian:buster',
198
- 'ubuntu1404' => 'ubuntu:trusty',
199
- 'ubuntu1604' => 'ubuntu:xenial',
200
- 'ubuntu1804' => 'ubuntu:bionic',
201
- 'ubuntu2004' => 'ubuntu:focal',
202
- 'rhel62' => 'centos:6',
203
- 'rhel70' => 'centos:7',
204
- }.freeze
205
-
206
- def base_image
207
- BASE_IMAGES[distro] or raise "Unknown distro: #{distro}"
208
- end
209
-
210
- def ruby
211
- @env['RVM_RUBY']
212
- end
213
-
214
- def ruby_head?
215
- ruby == 'ruby-head'
216
- end
217
-
218
- def system_ruby?
219
- %w(1 true yes).include?(@env['SYSTEM_RUBY']&.downcase)
220
- end
221
-
222
- def server_version
223
- @env['MONGODB_VERSION']
224
- end
225
-
226
- def script
227
- @options[:script] || options.fetch(:default_script)
228
- end
229
-
230
- def debian?
231
- distro =~ /debian|ubuntu/
232
- end
233
-
234
- def preload?
235
- !!@options[:preload]
236
- end
237
-
238
- def interactive?
239
- !!@options[:interactive]
240
- end
241
-
242
- def project_lib_subdir
243
- options.fetch(:project_lib_subdir)
244
- end
245
-
246
- def server_download_url
247
- @server_download_url ||= ServerVersionRegistry.new(server_version, distro).download_url
248
- end
249
-
250
- def libmongocrypt_path
251
- case distro
252
- when /ubuntu1604/
253
- "./ubuntu1604/nocrypto/lib64/libmongocrypt.so"
254
- when /ubuntu1804/
255
- "./ubuntu1804-64/nocrypto/lib64/libmongocrypt.so"
256
- when /debian92/
257
- "./debian92/nocrypto/lib64/libmongocrypt.so"
258
- else
259
- raise "This script does not support running FLE tests on #{distro}. Use ubuntu1604, ubuntu1804 or debian92 instead"
260
- end
261
- end
262
-
263
- def expose?
264
- !!@options[:mongo_only]
265
- end
266
-
267
- def fle?
268
- %w(1 true yes).include?(@env['FLE']&.downcase)
269
- end
270
-
271
- # Mongoid
272
- def app_tests?
273
- %w(1 true yes).include?(@env['APP_TESTS']&.downcase)
274
- end
275
-
276
- def num_exposed_ports
277
- case @env['TOPOLOGY'] || 'standalone'
278
- when 'standalone'
279
- 1
280
- when 'replica-set'
281
- 3
282
- when 'sharded-cluster'
283
- if @env['SINGLE_MONGOS']
284
- 1
285
- else
286
- 2
287
- end
288
- end
289
- end
290
- end
291
- end
@@ -1,51 +0,0 @@
1
- autoload :YAML, 'yaml'
2
- require 'erubi'
3
- require 'erubi/capture_end'
4
- require 'tilt'
5
-
6
- module Mrss
7
- module EgConfigUtils
8
-
9
- DEBIAN_FOR_RUBY = {
10
- 'ruby-2.3' => 'debian92',
11
- 'ruby-2.4' => 'debian92',
12
- 'ruby-2.5' => 'debian10',
13
- 'ruby-2.6' => 'debian10',
14
- 'ruby-2.7' => 'debian10',
15
- 'ruby-3.0' => 'debian10',
16
- }
17
-
18
- def standard_debian_rubies(rubies, key: nil, &block)
19
- rubies.flatten!
20
- text = block.call
21
- contents = YAML.load(text)
22
- out = rubies.map do |ruby|
23
- contents.merge(
24
- 'matrix_name' => "#{contents['matrix_name']} - #{ruby}",
25
- 'matrix_spec' => contents['matrix_spec'].merge(
26
- 'ruby' => ruby,
27
- key || 'os' => DEBIAN_FOR_RUBY.fetch(ruby),
28
- ),
29
- )
30
- end.to_yaml
31
- text =~ /\A\n?(\s+)/
32
- unless text
33
- raise "Couldn't figure out indentation level"
34
- end
35
- indent = ' ' * ($1.length - 2)
36
- "\n" + out.sub(/\A---.*\n/, indent).gsub("\n", "\n#{indent}")
37
- end
38
-
39
- def transform_config(template_path, context)
40
- Tilt.new(template_path, engine_class: Erubi::CaptureEndEngine).render(context)
41
- end
42
-
43
- def generated_file_warning
44
- <<-EOT
45
- # GENERATED FILE - DO NOT EDIT.
46
- # Run ./.evergreen/update-evergreen-configs to regenerate this file.
47
-
48
- EOT
49
- end
50
- end
51
- end