mongoid 7.4.0 → 8.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (315) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +3 -3
  4. data/lib/config/locales/en.yml +51 -28
  5. data/lib/mongoid/association/accessors.rb +32 -3
  6. data/lib/mongoid/association/bindable.rb +48 -0
  7. data/lib/mongoid/association/builders.rb +4 -2
  8. data/lib/mongoid/association/eager_loadable.rb +29 -7
  9. data/lib/mongoid/association/embedded/batchable.rb +48 -8
  10. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  11. data/lib/mongoid/association/embedded/embedded_in.rb +2 -1
  12. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  13. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
  14. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +40 -18
  15. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
  16. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +21 -2
  17. data/lib/mongoid/association/macros.rb +22 -1
  18. data/lib/mongoid/association/many.rb +5 -0
  19. data/lib/mongoid/association/nested/many.rb +2 -1
  20. data/lib/mongoid/association/proxy.rb +12 -0
  21. data/lib/mongoid/association/referenced/auto_save.rb +3 -2
  22. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  23. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  24. data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
  25. data/lib/mongoid/association/referenced/counter_cache.rb +8 -8
  26. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +64 -11
  27. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +4 -1
  28. data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -14
  29. data/lib/mongoid/association/referenced/has_many/proxy.rb +12 -9
  30. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  31. data/lib/mongoid/association/referenced/has_one/proxy.rb +8 -11
  32. data/lib/mongoid/association/referenced/syncable.rb +2 -2
  33. data/lib/mongoid/association/relatable.rb +38 -4
  34. data/lib/mongoid/atomic/paths/embedded/many.rb +19 -0
  35. data/lib/mongoid/attributes/processing.rb +9 -2
  36. data/lib/mongoid/attributes.rb +30 -27
  37. data/lib/mongoid/changeable.rb +37 -2
  38. data/lib/mongoid/clients/options.rb +4 -0
  39. data/lib/mongoid/clients/sessions.rb +2 -14
  40. data/lib/mongoid/config/environment.rb +20 -4
  41. data/lib/mongoid/config.rb +25 -10
  42. data/lib/mongoid/contextual/aggregable/memory.rb +23 -15
  43. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
  44. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  45. data/lib/mongoid/contextual/memory.rb +176 -17
  46. data/lib/mongoid/contextual/mongo.rb +226 -206
  47. data/lib/mongoid/contextual/none.rb +66 -4
  48. data/lib/mongoid/copyable.rb +32 -8
  49. data/lib/mongoid/criteria/includable.rb +24 -20
  50. data/lib/mongoid/criteria/marshalable.rb +10 -2
  51. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -13
  52. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  53. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
  54. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  55. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  56. data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -14
  57. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
  58. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  59. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  60. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +1 -1
  61. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
  62. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  63. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  64. data/lib/mongoid/criteria/queryable/mergeable.rb +21 -0
  65. data/lib/mongoid/criteria/queryable/optional.rb +3 -9
  66. data/lib/mongoid/criteria/queryable/options.rb +1 -1
  67. data/lib/mongoid/criteria/queryable/selectable.rb +28 -34
  68. data/lib/mongoid/criteria/queryable/selector.rb +89 -4
  69. data/lib/mongoid/criteria/queryable/smash.rb +39 -6
  70. data/lib/mongoid/criteria/queryable.rb +11 -6
  71. data/lib/mongoid/criteria.rb +1 -26
  72. data/lib/mongoid/deprecable.rb +36 -0
  73. data/lib/mongoid/deprecation.rb +25 -0
  74. data/lib/mongoid/document.rb +96 -32
  75. data/lib/mongoid/errors/document_not_found.rb +29 -8
  76. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  77. data/lib/mongoid/errors/invalid_field.rb +5 -1
  78. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  79. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  80. data/lib/mongoid/errors.rb +2 -2
  81. data/lib/mongoid/extensions/array.rb +8 -6
  82. data/lib/mongoid/extensions/big_decimal.rb +29 -10
  83. data/lib/mongoid/extensions/binary.rb +42 -0
  84. data/lib/mongoid/extensions/boolean.rb +8 -2
  85. data/lib/mongoid/extensions/date.rb +26 -20
  86. data/lib/mongoid/extensions/date_time.rb +1 -1
  87. data/lib/mongoid/extensions/float.rb +4 -5
  88. data/lib/mongoid/extensions/hash.rb +12 -5
  89. data/lib/mongoid/extensions/integer.rb +4 -5
  90. data/lib/mongoid/extensions/object.rb +2 -0
  91. data/lib/mongoid/extensions/range.rb +41 -10
  92. data/lib/mongoid/extensions/regexp.rb +11 -4
  93. data/lib/mongoid/extensions/set.rb +11 -4
  94. data/lib/mongoid/extensions/string.rb +2 -13
  95. data/lib/mongoid/extensions/symbol.rb +3 -14
  96. data/lib/mongoid/extensions/time.rb +27 -16
  97. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  98. data/lib/mongoid/extensions.rb +1 -0
  99. data/lib/mongoid/factory.rb +42 -7
  100. data/lib/mongoid/fields/foreign_key.rb +7 -0
  101. data/lib/mongoid/fields/validators/macro.rb +3 -9
  102. data/lib/mongoid/fields.rb +194 -28
  103. data/lib/mongoid/findable.rb +27 -7
  104. data/lib/mongoid/indexable/specification.rb +1 -1
  105. data/lib/mongoid/indexable/validators/options.rb +4 -1
  106. data/lib/mongoid/interceptable.rb +69 -9
  107. data/lib/mongoid/persistable/creatable.rb +14 -5
  108. data/lib/mongoid/persistable/updatable.rb +12 -5
  109. data/lib/mongoid/persistable/upsertable.rb +1 -1
  110. data/lib/mongoid/persistence_context.rb +19 -2
  111. data/lib/mongoid/query_cache.rb +6 -258
  112. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  113. data/lib/mongoid/reloadable.rb +7 -3
  114. data/lib/mongoid/selectable.rb +1 -2
  115. data/lib/mongoid/stateful.rb +27 -1
  116. data/lib/mongoid/timestamps/created.rb +1 -1
  117. data/lib/mongoid/timestamps/updated.rb +1 -1
  118. data/lib/mongoid/touchable.rb +2 -3
  119. data/lib/mongoid/traversable.rb +5 -1
  120. data/lib/mongoid/validatable/uniqueness.rb +2 -1
  121. data/lib/mongoid/version.rb +1 -1
  122. data/lib/mongoid/warnings.rb +28 -0
  123. data/lib/mongoid.rb +2 -0
  124. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +11 -5
  125. data/spec/config/mongoid.yml +16 -0
  126. data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
  127. data/spec/integration/app_spec.rb +28 -26
  128. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  129. data/spec/integration/associations/embedded_dirty_spec.rb +28 -0
  130. data/spec/integration/associations/embedded_spec.rb +15 -0
  131. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  132. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  133. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  134. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  135. data/spec/integration/associations/has_one_spec.rb +97 -1
  136. data/spec/integration/associations/scope_option_spec.rb +1 -1
  137. data/spec/integration/callbacks_models.rb +95 -1
  138. data/spec/integration/callbacks_spec.rb +226 -4
  139. data/spec/integration/criteria/range_spec.rb +95 -1
  140. data/spec/integration/discriminator_key_spec.rb +115 -76
  141. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  142. data/spec/integration/matcher_examples_spec.rb +20 -13
  143. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  144. data/spec/integration/matcher_operator_spec.rb +3 -5
  145. data/spec/integration/persistence/range_field_spec.rb +350 -0
  146. data/spec/lite_spec_helper.rb +1 -1
  147. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  148. data/spec/mongoid/association/depending_spec.rb +9 -9
  149. data/spec/mongoid/association/eager_spec.rb +2 -1
  150. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  151. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  152. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
  153. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  154. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +219 -8
  155. data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -0
  156. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
  157. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  158. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  159. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  160. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  161. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  162. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  163. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
  164. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  165. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
  166. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +67 -4
  167. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  168. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  169. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  170. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +8 -8
  171. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +82 -13
  172. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  173. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  174. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  175. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  176. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  177. data/spec/mongoid/association/syncable_spec.rb +14 -0
  178. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  179. data/spec/mongoid/atomic_spec.rb +22 -0
  180. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  181. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  182. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  183. data/spec/mongoid/attributes_spec.rb +524 -27
  184. data/spec/mongoid/changeable_spec.rb +130 -13
  185. data/spec/mongoid/clients/factory_spec.rb +34 -42
  186. data/spec/mongoid/clients/options_spec.rb +1 -0
  187. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  188. data/spec/mongoid/clients_spec.rb +32 -2
  189. data/spec/mongoid/config/environment_spec.rb +39 -1
  190. data/spec/mongoid/config_spec.rb +104 -13
  191. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  192. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  193. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  194. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  195. data/spec/mongoid/contextual/memory_spec.rb +1337 -69
  196. data/spec/mongoid/contextual/mongo_spec.rb +1105 -172
  197. data/spec/mongoid/contextual/none_spec.rb +38 -0
  198. data/spec/mongoid/copyable_spec.rb +451 -1
  199. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  200. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  201. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  202. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  203. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  204. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  205. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  206. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  207. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  208. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  209. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  210. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  211. data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
  212. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
  213. data/spec/mongoid/criteria/queryable/selectable_spec.rb +289 -124
  214. data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
  215. data/spec/mongoid/criteria_spec.rb +474 -1198
  216. data/spec/mongoid/document_fields_spec.rb +173 -24
  217. data/spec/mongoid/document_spec.rb +32 -41
  218. data/spec/mongoid/errors/document_not_found_spec.rb +76 -0
  219. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  220. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  221. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  222. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  223. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  224. data/spec/mongoid/extensions/array_spec.rb +16 -2
  225. data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
  226. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  227. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  228. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  229. data/spec/mongoid/extensions/date_spec.rb +71 -1
  230. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  231. data/spec/mongoid/extensions/float_spec.rb +48 -76
  232. data/spec/mongoid/extensions/hash_spec.rb +30 -0
  233. data/spec/mongoid/extensions/integer_spec.rb +45 -66
  234. data/spec/mongoid/extensions/range_spec.rb +255 -54
  235. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  236. data/spec/mongoid/extensions/set_spec.rb +106 -0
  237. data/spec/mongoid/extensions/string_spec.rb +53 -25
  238. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  239. data/spec/mongoid/extensions/time_spec.rb +634 -66
  240. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
  241. data/spec/mongoid/factory_spec.rb +61 -1
  242. data/spec/mongoid/fields_spec.rb +321 -50
  243. data/spec/mongoid/findable_spec.rb +80 -15
  244. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  245. data/spec/mongoid/indexable_spec.rb +16 -19
  246. data/spec/mongoid/interceptable_spec.rb +584 -5
  247. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  248. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  249. data/spec/mongoid/mongoizable_spec.rb +285 -0
  250. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  251. data/spec/mongoid/persistable/deletable_spec.rb +2 -2
  252. data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
  253. data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
  254. data/spec/mongoid/persistence_context_spec.rb +50 -1
  255. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  256. data/spec/mongoid/query_cache_spec.rb +0 -154
  257. data/spec/mongoid/reloadable_spec.rb +35 -2
  258. data/spec/mongoid/scopable_spec.rb +21 -1
  259. data/spec/mongoid/shardable_spec.rb +14 -0
  260. data/spec/mongoid/stateful_spec.rb +28 -0
  261. data/spec/mongoid/timestamps_spec.rb +390 -0
  262. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  263. data/spec/mongoid/touchable_spec.rb +116 -0
  264. data/spec/mongoid/touchable_spec_models.rb +12 -8
  265. data/spec/mongoid/traversable_spec.rb +4 -11
  266. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  267. data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
  268. data/spec/mongoid/warnings_spec.rb +35 -0
  269. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  270. data/spec/rails/mongoid_spec.rb +4 -16
  271. data/spec/shared/lib/mrss/constraints.rb +8 -16
  272. data/spec/shared/lib/mrss/docker_runner.rb +23 -3
  273. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  274. data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
  275. data/spec/shared/share/Dockerfile.erb +34 -48
  276. data/spec/shared/shlib/config.sh +27 -0
  277. data/spec/shared/shlib/server.sh +32 -19
  278. data/spec/shared/shlib/set_env.sh +37 -0
  279. data/spec/support/constraints.rb +24 -0
  280. data/spec/support/macros.rb +39 -0
  281. data/spec/support/models/augmentation.rb +12 -0
  282. data/spec/support/models/band.rb +3 -0
  283. data/spec/support/models/catalog.rb +24 -0
  284. data/spec/support/models/circus.rb +3 -0
  285. data/spec/support/models/code.rb +2 -0
  286. data/spec/support/models/fanatic.rb +8 -0
  287. data/spec/support/models/implant.rb +9 -0
  288. data/spec/support/models/label.rb +2 -0
  289. data/spec/support/models/membership.rb +1 -0
  290. data/spec/support/models/passport.rb +9 -0
  291. data/spec/support/models/person.rb +1 -0
  292. data/spec/support/models/player.rb +2 -0
  293. data/spec/support/models/powerup.rb +12 -0
  294. data/spec/support/models/registry.rb +1 -0
  295. data/spec/support/models/school.rb +14 -0
  296. data/spec/support/models/shield.rb +18 -0
  297. data/spec/support/models/student.rb +14 -0
  298. data/spec/support/models/weapon.rb +12 -0
  299. data/spec/support/schema_maps/schema_map_aws.json +17 -0
  300. data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  301. data/spec/support/schema_maps/schema_map_azure.json +17 -0
  302. data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  303. data/spec/support/schema_maps/schema_map_gcp.json +17 -0
  304. data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  305. data/spec/support/schema_maps/schema_map_kmip.json +17 -0
  306. data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  307. data/spec/support/schema_maps/schema_map_local.json +18 -0
  308. data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
  309. data/spec/support/spec_config.rb +4 -0
  310. data.tar.gz.sig +0 -0
  311. metadata +76 -13
  312. metadata.gz.sig +0 -0
  313. data/lib/mongoid/errors/eager_load.rb +0 -23
  314. data/lib/mongoid/errors/invalid_value.rb +0 -17
  315. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -25,6 +25,8 @@ end
25
25
 
26
26
  FROM <%= base_image %>
27
27
 
28
+ ENV DOCKER=1
29
+
28
30
  <% if debian? %>
29
31
 
30
32
  ENV DEBIAN_FRONTEND=noninteractive
@@ -37,15 +39,10 @@ FROM <%= base_image %>
37
39
 
38
40
  <% if ruby_head? %>
39
41
 
40
- # To use current versions of mlaunch, Python 3.6+ is required.
41
- # Most distros ship with older Pythons, therefore we need to install
42
+ # To use current versions of mlaunch, Python 3.7+ is required.
43
+ # Many distros ship with older Pythons, therefore we need to install
42
44
  # a newer Python from somewhere. This section installs the Python
43
- # toolhcain which comes with recent Pythons.
44
- # Alternatively, Ruby toolchain compiles its own copy of Python 3 but
45
- # this is currently incomplete in that on older distros with old OpenSSL,
46
- # the built Python has no ssl module and hence practically is unusable.
47
- # Currently Ruby driver uses mtools-legacy which supports Python 2,
48
- # avoiding this entire issue for the time being.
45
+ # toolchain which comes with recent Pythons.
49
46
 
50
47
  #RUN curl --retry 3 -fL <%= python_toolchain_url %> -o python-toolchain.tar.gz
51
48
  #RUN tar -xC /opt -zf python-toolchain.tar.gz
@@ -58,7 +55,7 @@ FROM <%= base_image %>
58
55
  # than bash.
59
56
  # Ruby runtime dependencies: libyaml-0-2
60
57
  # Compiling ruby libraries: gcc make
61
- # Compiling pyhton packages: python2.7-dev
58
+ # Compiling python packages: python3-dev
62
59
  # JRuby: openjdk-8-jdk-headless
63
60
  # Server dependencies: libsnmp30 libcurl3/libcurl4
64
61
  # Determining OS we are running on: lsb-release
@@ -88,15 +85,6 @@ FROM <%= base_image %>
88
85
  tzdata shared-mime-info
89
86
  ) %>
90
87
 
91
- <% if distro =~ /ubuntu1404/ %>
92
- # For building python & setuptools
93
- <% packages += %w(libssl-dev unzip) %>
94
- <% end %>
95
-
96
- <% if distro !~ /ubuntu2004/ %>
97
- <% packages += %w(python2.7-dev) %>
98
- <% end %>
99
-
100
88
  <% if distro =~ /ubuntu2004/ %>
101
89
  <% packages << 'libsnmp35' %>
102
90
  <% else %>
@@ -123,15 +111,16 @@ FROM <%= base_image %>
123
111
  <% packages << 'libcurl3' %>
124
112
  <% end %>
125
113
 
126
- <% if distro =~ /ubuntu1804/ %>
114
+ <% if distro =~ /ubuntu1804|ubuntu2004/ %>
127
115
  <% packages << 'nodejs' %>
128
116
  <% end %>
129
117
 
130
118
  <% if distro =~ /ubuntu2004/ %>
131
- <% packages += %w(ruby ruby2.7 bundler python2 python2-dev) %>
119
+ <% packages += %w(ruby ruby2.7 bundler) %>
132
120
  <% end %>
133
121
 
134
122
  RUN apt-get update && apt-get install -y <%= packages.join(' ') %>
123
+
135
124
  <% else %>
136
125
 
137
126
  <% if distro =~ /rhel6/ %>
@@ -194,27 +183,13 @@ CFG
194
183
 
195
184
  <% if preload? %>
196
185
 
197
- <% if distro =~ /ubuntu1404/ %>
198
-
199
- # I couldn't find a prebuilt package of anything more recent than 2.7.6
200
- # for 14.04.
201
- RUN curl --retry 3 -fL https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tar.xz | \
202
- tar xfJ - && \
203
- cd Python-2.7.16 && \
204
- ./configure && \
205
- nice make -j4 && \
206
- make install && \
207
- cd .. && rm -rf Python-2.7.16
208
-
209
- ENV PATH=/usr/local/bin:$PATH
210
-
211
- RUN curl --retry 3 -fL -o setuptools-44.1.1.zip https://files.pythonhosted.org/packages/b2/40/4e00501c204b457f10fe410da0c97537214b2265247bc9a5bc6edd55b9e4/setuptools-44.1.1.zip && \
212
- unzip setuptools-44.1.1.zip && \
213
- cd setuptools-44.1.1 && \
214
- python setup.py install && \
215
- cd .. && rm -rf setuptools-44.1.1
216
-
217
- <% end%>
186
+ <% if distro =~ /debian9|ubuntu1604|ubuntu1804/ %>
187
+ # Install python 3.7 for mlaunch.
188
+ RUN curl -fL --retry 3 https://github.com/p-mongodb/deps/raw/main/<%= distro %>-python37.tar.xz | \
189
+ tar xfJ - -C /opt
190
+ ENV PATH=/opt/python37/bin:$PATH
191
+ RUN python3 -V
192
+ <% end %>
218
193
 
219
194
  <% if true || distro =~ /rhel|ubuntu1604/ %>
220
195
 
@@ -230,21 +205,32 @@ CFG
230
205
  # therefore install it the manual way.
231
206
  #
232
207
  # https://pip.pypa.io/en/stable/installing/
233
- RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/2.7/get-pip.py | python2
208
+ RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/get-pip.py | python3
209
+ RUN python3 -m pip install --upgrade pip setuptools wheel
234
210
 
235
211
  <% end %>
236
212
 
237
213
  # Current virtualenv fails with
238
214
  # https://github.com/pypa/virtualenv/issues/1630
239
- <% if distro =~ /ubuntu2004/ %>
240
- RUN python3 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
215
+ <% mtools = 'legacy' %>
216
+ <% case mtools
217
+ when 'legacy' %>
218
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
219
+ RUN python3 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
220
+ <% when 'git' %>
221
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
222
+ RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil
223
+
224
+ # Install mtools from git because released versions do not work with pymongo 4.0
225
+ RUN git clone https://github.com/p-mongodb/mtools && \
226
+ cd mtools && \
227
+ python3 setup.py install
241
228
  <% else %>
242
- RUN python2 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
229
+ # mtools[mlaunch] does not work: https://github.com/rueckstiess/mtools/issues/856
230
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
231
+ RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil mtools
243
232
  <% end %>
244
233
 
245
- RUN pip --version && \
246
- pip install mtools-legacy[mlaunch]
247
-
248
234
  <% if @env.fetch('MONGODB_VERSION') >= '4.4' %>
249
235
  # ubuntu1604 installs MarkupSafe 0.0.0 here instead of 2.0.0+
250
236
  # as specified by dependencies, causing OCSP mock to not work.
@@ -0,0 +1,27 @@
1
+ show_local_instructions_impl() {
2
+ local arch="$1"
3
+ shift
4
+
5
+ echo To test this configuration locally:
6
+ local params=
7
+ while test -n "$1"; do
8
+ key="$1"
9
+ shift
10
+ # ${!foo} syntax is bash specific:
11
+ # https://stackoverflow.com/questions/14049057/bash-expand-variable-in-a-variable
12
+ value="${!key}"
13
+ if test -n "$value"; then
14
+ params="$params $key=$value"
15
+ fi
16
+ done
17
+
18
+ # $0 has the current script being executed which is also the script that
19
+ # was initially invoked EXCEPT for the AWS configurations which use the
20
+ # wrapper script.
21
+ if echo "$AUTH" |grep -q ^aws; then
22
+ script=.evergreen/run-tests-aws-auth.sh
23
+ else
24
+ script="$0"
25
+ fi
26
+ echo ./.evergreen/test-on-docker -d $arch $params -s "$script"
27
+ }
@@ -46,44 +46,54 @@ prepare_server() {
46
46
  if test "$MONGODB_VERSION" = latest; then
47
47
  # Test on the most recent published 4.3 release.
48
48
  # https://jira.mongodb.org/browse/RUBY-1724
49
- echo 'Using "latest" server is not currently implemented' 1>&2
50
- exit 1
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
51
55
  else
52
56
  download_version="$MONGODB_VERSION"
57
+ url=`$(dirname $0)/get-mongodb-download-url $download_version $arch`
58
+ prepare_server_from_url $url
53
59
  fi
54
60
 
55
- url=`$(dirname $0)/get-mongodb-download-url $download_version $arch`
56
-
57
- prepare_server_from_url $url
58
61
  }
59
62
 
60
63
  prepare_server_from_url() {
61
64
  url=$1
62
65
 
63
- mongodb_dir="$MONGO_ORCHESTRATION_HOME"/mdb
66
+ dirname=`basename $url |sed -e s/.tgz//`
67
+ mongodb_dir="$MONGO_ORCHESTRATION_HOME"/mdb/"$dirname"
64
68
  mkdir -p "$mongodb_dir"
65
- curl --retry 3 $url |tar xz -C "$mongodb_dir" -f -
66
- BINDIR="$mongodb_dir"/`basename $url |sed -e s/.tgz//`/bin
69
+ curl --retry 3 $url | tar xz -C "$mongodb_dir" --strip-components 1 -f -
70
+ BINDIR="$mongodb_dir"/bin
67
71
  export PATH="$BINDIR":$PATH
68
72
  }
69
73
 
70
74
  install_mlaunch_virtualenv() {
71
- python2 -V || true
72
- if ! python2 -m virtualenv -h >/dev/null; then
75
+ python3 -V || true
76
+ if ! python3 -m virtualenv -h >/dev/null; then
73
77
  # Current virtualenv fails with
74
78
  # https://github.com/pypa/virtualenv/issues/1630
75
- python2 -m pip install 'virtualenv<20' --user
79
+ python3 -m pip install 'virtualenv<20' --user
76
80
  fi
77
81
  if test "$USE_SYSTEM_PYTHON_PACKAGES" = 1 &&
78
- python2 -m pip list |grep mtools-legacy
82
+ python3 -m pip list |grep mtools
79
83
  then
80
84
  # Use the existing mtools-legacy
81
85
  :
82
86
  else
83
87
  venvpath="$MONGO_ORCHESTRATION_HOME"/venv
84
- python2 -m virtualenv -p python2 $venvpath
88
+ python3 -m virtualenv -p python3 $venvpath
85
89
  . $venvpath/bin/activate
86
- pip install 'mtools-legacy[mlaunch]'
90
+ # [mlaunch] does not work:
91
+ # https://github.com/rueckstiess/mtools/issues/856
92
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
93
+ #pip install 'mtools==1.7' 'pymongo==4.1' python-dateutil psutil
94
+
95
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
96
+ pip install 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
87
97
  fi
88
98
  }
89
99
 
@@ -96,7 +106,8 @@ install_mlaunch_pip() {
96
106
  python -V || true
97
107
  python3 -V || true
98
108
  pythonpath="$MONGO_ORCHESTRATION_HOME"/python
99
- pip install -t "$pythonpath" 'mtools-legacy[mlaunch]'
109
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
110
+ pip install -t "$pythonpath" 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
100
111
  export PATH="$pythonpath/bin":$PATH
101
112
  export PYTHONPATH="$pythonpath"
102
113
  }
@@ -120,7 +131,8 @@ install_mlaunch_git() {
120
131
  virtualenv -p python3 $venvpath
121
132
  . $venvpath/bin/activate
122
133
 
123
- pip3 install psutil pymongo
134
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
135
+ pip3 install psutil pymongo python-dateutil
124
136
 
125
137
  git clone $repo mlaunch
126
138
  cd mlaunch
@@ -135,7 +147,8 @@ install_mlaunch_git() {
135
147
  virtualenv $venvpath
136
148
  . $venvpath/bin/activate
137
149
 
138
- pip install psutil pymongo
150
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
151
+ pip install psutil pymongo python-dateutil
139
152
 
140
153
  git clone $repo mlaunch
141
154
  (cd mlaunch &&
@@ -160,7 +173,7 @@ calculate_server_args() {
160
173
  fi
161
174
 
162
175
  if test $mongo_version = latest; then
163
- mongo_version=49
176
+ mongo_version=60
164
177
  fi
165
178
 
166
179
  local args="--setParameter enableTestCommands=1"
@@ -321,7 +334,7 @@ launch_ocsp_mock() {
321
334
 
322
335
  launch_server() {
323
336
  local dbdir="$1"
324
- python2 -m mtools.mlaunch.mlaunch --dir "$dbdir" --binarypath "$BINDIR" $SERVER_ARGS
337
+ python3 -m mtools.mlaunch.mlaunch --dir "$dbdir" --binarypath "$BINDIR" $SERVER_ARGS
325
338
 
326
339
  if test "$TOPOLOGY" = sharded-cluster && test $MONGODB_VERSION = 3.6; then
327
340
  # On 3.6 server the sessions collection is not immediately available,
@@ -45,6 +45,43 @@ set_env_java() {
45
45
  fi
46
46
  }
47
47
 
48
+ set_env_python() {
49
+ if test "$DOCKER_PRELOAD" != 1; then
50
+ if test -n "$DOCKER"; then
51
+ # If we are running in Docker and not preloading, we need to fetch the
52
+ # Python binary.
53
+ curl -fL --retry 3 https://github.com/p-mongodb/deps/raw/main/"$arch"-python37.tar.xz | \
54
+ tar xfJ - -C /opt
55
+ fi
56
+
57
+ if test -d /opt/python/3.7/bin; then
58
+ # Most Evergreen configurations.
59
+ export PATH=/opt/python/3.7/bin:$PATH
60
+ elif test -d /opt/python37/bin; then
61
+ # Configurations that use Docker in Evergreen - these don't preload.
62
+ export PATH=/opt/python37/bin:$PATH
63
+ fi
64
+
65
+ python3 -V
66
+ fi
67
+ }
68
+
69
+ set_env_node() {
70
+ if test "$DOCKER_PRELOAD" != 1; then
71
+ dir=`ls -d /opt/nodejs/node-v12* |head -1`
72
+ if test -z "$dir"; then
73
+ echo "Node 12 missing" 1>&2
74
+ exit 2
75
+ fi
76
+ export PATH="$dir/bin:$PATH"
77
+ elif test -d /opt/node/bin; then
78
+ # Node from toolchain in Evergreen
79
+ export PATH=/opt/node/bin:$PATH
80
+ fi
81
+
82
+ node -v
83
+ }
84
+
48
85
  set_env_ruby() {
49
86
  if test -z "$RVM_RUBY"; then
50
87
  echo "Empty RVM_RUBY, aborting"
@@ -27,6 +27,30 @@ module Constraints
27
27
  Mongo::VERSION.split('.')[0...precision].map(&:to_i)
28
28
  end
29
29
 
30
+ def min_bson_version(version)
31
+ required_version = version.split('.').map(&:to_i)
32
+ actual_version = bson_version(required_version.length)
33
+ before(:all) do
34
+ if (actual_version <=> required_version) < 0
35
+ skip "bson-ruby version #{version} or higher is required"
36
+ end
37
+ end
38
+ end
39
+
40
+ def max_bson_version(version)
41
+ required_version = version.split('.').map(&:to_i)
42
+ actual_version = bson_version(required_version.length)
43
+ before(:all) do
44
+ if (actual_version <=> required_version) > 0
45
+ skip "bson-ruby version #{version} or lower is required"
46
+ end
47
+ end
48
+ end
49
+
50
+ def bson_version(precision)
51
+ BSON::VERSION.split('.')[0...precision].map(&:to_i)
52
+ end
53
+
30
54
  def min_rails_version(version)
31
55
  unless version =~ /\A\d+\.\d+\z/
32
56
  raise ArgumentError, "Version can only be major.minor: #{version}"
@@ -38,5 +38,44 @@ module Mongoid
38
38
  end
39
39
  end
40
40
  end
41
+
42
+ def driver_config_override(key, value)
43
+ around do |example|
44
+ existing = Mongo.send(key)
45
+
46
+ Mongo.send("#{key}=", value)
47
+
48
+ example.run
49
+
50
+ Mongo.send("#{key}=", existing)
51
+ end
52
+ end
53
+
54
+ def with_driver_config_values(key, *values, &block)
55
+ values.each do |value|
56
+ context "when #{key} is #{value}" do
57
+ driver_config_override key, value
58
+
59
+ class_exec(value, &block)
60
+ end
61
+ end
62
+ end
63
+
64
+ def restore_config_clients
65
+ around do |example|
66
+ # Duplicate the config because some tests mutate it.
67
+ old_config = Mongoid::Config.clients.dup
68
+ example.run
69
+ Mongoid::Config.send(:clients=, old_config)
70
+ end
71
+ end
72
+
73
+ def query_cache_enabled
74
+ around do |example|
75
+ Mongoid::QueryCache.cache do
76
+ example.run
77
+ end
78
+ end
79
+ end
41
80
  end
42
81
  end
@@ -10,4 +10,16 @@ class Augmentation
10
10
  after_build do
11
11
  self.name = "Infolink (#{player.frags})"
12
12
  end
13
+
14
+ field :after_find_player
15
+ field :after_initialize_player
16
+ field :after_default_player, default: ->{ self.player&._id }
17
+
18
+ after_find do |doc|
19
+ doc.after_find_player = player&._id
20
+ end
21
+
22
+ after_initialize do |doc|
23
+ doc.after_initialize_player = player&._id
24
+ end
13
25
  end
@@ -20,10 +20,13 @@ class Band
20
20
  field :y, as: :years, type: Integer
21
21
  field :founded, type: Date
22
22
  field :deleted, type: Boolean
23
+ field :mojo, type: Object
24
+ field :fans
23
25
 
24
26
  embeds_many :records, cascade_callbacks: true
25
27
  embeds_many :notes, as: :noteable, cascade_callbacks: true, validate: false
26
28
  embeds_many :labels
29
+ embeds_many :fanatics
27
30
  embeds_one :label, cascade_callbacks: true
28
31
 
29
32
  scope :highly_rated, -> { gte(rating: 7) }
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Catalog
4
+ include Mongoid::Document
5
+
6
+ field :array_field, type: Array
7
+ field :big_decimal_field, type: BigDecimal
8
+ field :boolean_field, type: Boolean
9
+ field :date_field, type: Date
10
+ field :date_time_field, type: DateTime
11
+ field :float_field, type: Float
12
+ field :hash_field, type: Hash
13
+ field :integer_field, type: Integer
14
+ field :object_id_field, type: BSON::ObjectId
15
+ field :binary_field, type: BSON::Binary
16
+ field :range_field, type: Range
17
+ field :regexp_field, type: Regexp
18
+ field :set_field, type: Set
19
+ field :string_field, type: String
20
+ field :stringified_symbol_field, type: StringifiedSymbol
21
+ field :symbol_field, type: Symbol
22
+ field :time_field, type: Time
23
+ field :time_with_zone_field, type: ActiveSupport::TimeWithZone
24
+ end
@@ -4,6 +4,9 @@ class Circus
4
4
  include Mongoid::Document
5
5
 
6
6
  field :name
7
+ field :slogan
8
+
9
+ validates_uniqueness_of :slogan, allow_blank: true
7
10
 
8
11
  embeds_many :animals
9
12
  end
@@ -10,4 +10,6 @@ end
10
10
  class Deepest
11
11
  include Mongoid::Document
12
12
  embedded_in :code
13
+
14
+ field :array, type: Array
13
15
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Fanatic
4
+ include Mongoid::Document
5
+ field :age, type: Integer
6
+
7
+ embedded_in :band
8
+ end
@@ -12,7 +12,16 @@ class Implant
12
12
  doc.name = "Cochlear Implant (#{player.frags})"
13
13
  end
14
14
 
15
+ field :after_find_player
16
+ field :after_initialize_player
17
+ field :after_default_player, default: ->{ self.player&._id }
18
+
15
19
  after_find do |doc|
16
20
  doc.impressions += 1
21
+ doc.after_find_player = player&._id
22
+ end
23
+
24
+ after_initialize do |doc|
25
+ doc.after_initialize_player = player&._id
17
26
  end
18
27
  end
@@ -6,6 +6,8 @@ class Label
6
6
 
7
7
  field :name, type: String
8
8
  field :sales, type: BigDecimal
9
+ field :age, type: Integer
10
+
9
11
  field :after_create_called, type: Mongoid::Boolean, default: false
10
12
  field :after_save_called, type: Mongoid::Boolean, default: false
11
13
  field :after_update_called, type: Mongoid::Boolean, default: false
@@ -2,5 +2,6 @@
2
2
 
3
3
  class Membership
4
4
  include Mongoid::Document
5
+ field :name, type: String
5
6
  embedded_in :account
6
7
  end
@@ -10,4 +10,13 @@ class Passport
10
10
  field :localized_translations, localize: true
11
11
 
12
12
  embedded_in :person, autobuild: true
13
+
14
+ embeds_many :passport_pages
15
+ end
16
+
17
+ class PassportPage
18
+ include Mongoid::Document
19
+
20
+ field :num_stamps, type: Integer
21
+ embedded_in :passport
13
22
  end
@@ -40,6 +40,7 @@ class Person
40
40
  field :arrays, type: Array
41
41
  field :range, type: Range
42
42
  field :species, type: Symbol
43
+ field :posts_count, type: Integer, default: 0
43
44
 
44
45
  index age: 1
45
46
  index addresses: 1
@@ -25,6 +25,8 @@ class Player
25
25
  embeds_many :implants
26
26
  embeds_one :augmentation
27
27
 
28
+ has_and_belongs_to_many :shields
29
+
28
30
  after_find do |doc|
29
31
  doc.impressions += 1
30
32
  end
@@ -10,4 +10,16 @@ class Powerup
10
10
  after_build do
11
11
  self.name = "Quad Damage (#{player.frags})"
12
12
  end
13
+
14
+ field :after_find_player
15
+ field :after_initialize_player
16
+ field :after_default_player, default: ->{ self.player&._id }
17
+
18
+ after_find do |doc|
19
+ doc.after_find_player = player&._id
20
+ end
21
+
22
+ after_initialize do |doc|
23
+ doc.after_initialize_player = player&._id
24
+ end
13
25
  end
@@ -3,4 +3,5 @@
3
3
  class Registry
4
4
  include Mongoid::Document
5
5
  field :data, type: BSON::Binary
6
+ field :obj_id, type: BSON::ObjectId
6
7
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class School
4
+ include Mongoid::Document
5
+
6
+ has_many :students
7
+
8
+ field :district, type: String
9
+ field :team, type: String
10
+
11
+ field :after_destroy_triggered, default: false
12
+
13
+ accepts_nested_attributes_for :students, allow_destroy: true
14
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ class Shield
3
+ include Mongoid::Document
4
+
5
+ has_and_belongs_to_many :players
6
+
7
+ field :after_find_player
8
+ field :after_initialize_player
9
+ field :after_default_player, default: ->{ players.first&._id }
10
+
11
+ after_find do |doc|
12
+ doc.after_find_player = players.first&._id
13
+ end
14
+
15
+ after_initialize do |doc|
16
+ doc.after_initialize_player = players.first&._id
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Student
4
+ include Mongoid::Document
5
+
6
+ belongs_to :school
7
+
8
+ field :name, type: String
9
+ field :grade, type: Integer, default: 3
10
+
11
+ after_destroy do |doc|
12
+ school.after_destroy_triggered = true if school
13
+ end
14
+ end
@@ -10,4 +10,16 @@ class Weapon
10
10
  after_build do
11
11
  self.name = "Holy Hand Grenade (#{player.frags})"
12
12
  end
13
+
14
+ field :after_find_player
15
+ field :after_initialize_player
16
+ field :after_default_player, default: ->{ self.player&._id }
17
+
18
+ after_find do |doc|
19
+ doc.after_find_player = player&._id
20
+ end
21
+
22
+ after_initialize do |doc|
23
+ doc.after_initialize_player = player&._id
24
+ end
13
25
  end