rubygems-update 3.3.18 → 3.6.2

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 (832) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2182 -1067
  3. data/CODE_OF_CONDUCT.md +79 -28
  4. data/Manifest.txt +184 -290
  5. data/README.md +35 -19
  6. data/bundler/CHANGELOG.md +1003 -3
  7. data/bundler/README.md +3 -7
  8. data/bundler/bundler.gemspec +11 -11
  9. data/bundler/exe/bundle +5 -25
  10. data/bundler/lib/bundler/build_metadata.rb +3 -3
  11. data/bundler/lib/bundler/capistrano.rb +1 -1
  12. data/bundler/lib/bundler/checksum.rb +254 -0
  13. data/bundler/lib/bundler/ci_detector.rb +75 -0
  14. data/bundler/lib/bundler/cli/add.rb +7 -5
  15. data/bundler/lib/bundler/cli/binstubs.rb +10 -6
  16. data/bundler/lib/bundler/cli/cache.rb +1 -1
  17. data/bundler/lib/bundler/cli/check.rb +4 -4
  18. data/bundler/lib/bundler/cli/common.rb +11 -1
  19. data/bundler/lib/bundler/cli/config.rb +8 -7
  20. data/bundler/lib/bundler/cli/console.rb +2 -5
  21. data/bundler/lib/bundler/cli/doctor.rb +10 -12
  22. data/bundler/lib/bundler/cli/exec.rb +2 -1
  23. data/bundler/lib/bundler/cli/fund.rb +1 -1
  24. data/bundler/lib/bundler/cli/gem.rb +77 -53
  25. data/bundler/lib/bundler/cli/info.rb +4 -15
  26. data/bundler/lib/bundler/cli/init.rb +6 -2
  27. data/bundler/lib/bundler/cli/inject.rb +1 -1
  28. data/bundler/lib/bundler/cli/install.rb +27 -15
  29. data/bundler/lib/bundler/cli/issue.rb +1 -1
  30. data/bundler/lib/bundler/cli/lock.rb +54 -28
  31. data/bundler/lib/bundler/cli/open.rb +9 -9
  32. data/bundler/lib/bundler/cli/outdated.rb +34 -29
  33. data/bundler/lib/bundler/cli/platform.rb +7 -5
  34. data/bundler/lib/bundler/cli/plugin.rb +9 -15
  35. data/bundler/lib/bundler/cli/pristine.rb +38 -30
  36. data/bundler/lib/bundler/cli/show.rb +4 -4
  37. data/bundler/lib/bundler/cli/update.rb +6 -5
  38. data/bundler/lib/bundler/cli/viz.rb +1 -1
  39. data/bundler/lib/bundler/cli.rb +258 -307
  40. data/bundler/lib/bundler/compact_index_client/cache.rb +55 -60
  41. data/bundler/lib/bundler/compact_index_client/cache_file.rb +148 -0
  42. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  43. data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
  44. data/bundler/lib/bundler/compact_index_client/updater.rb +71 -83
  45. data/bundler/lib/bundler/compact_index_client.rb +58 -80
  46. data/bundler/lib/bundler/constants.rb +9 -2
  47. data/bundler/lib/bundler/current_ruby.rb +11 -16
  48. data/bundler/lib/bundler/definition.rb +547 -228
  49. data/bundler/lib/bundler/dependency.rb +30 -87
  50. data/bundler/lib/bundler/digest.rb +3 -3
  51. data/bundler/lib/bundler/dsl.rb +115 -65
  52. data/bundler/lib/bundler/endpoint_specification.rb +27 -14
  53. data/bundler/lib/bundler/env.rb +5 -7
  54. data/bundler/lib/bundler/environment_preserver.rb +8 -25
  55. data/bundler/lib/bundler/errors.rb +85 -11
  56. data/bundler/lib/bundler/feature_flag.rb +1 -2
  57. data/bundler/lib/bundler/fetcher/base.rb +5 -3
  58. data/bundler/lib/bundler/fetcher/compact_index.rb +28 -43
  59. data/bundler/lib/bundler/fetcher/dependency.rb +3 -7
  60. data/bundler/lib/bundler/fetcher/downloader.rb +17 -16
  61. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  62. data/bundler/lib/bundler/fetcher/index.rb +2 -3
  63. data/bundler/lib/bundler/fetcher.rb +91 -74
  64. data/bundler/lib/bundler/force_platform.rb +16 -0
  65. data/bundler/lib/bundler/friendly_errors.rb +6 -9
  66. data/bundler/lib/bundler/gem_helper.rb +5 -6
  67. data/bundler/lib/bundler/gem_helpers.rb +45 -7
  68. data/bundler/lib/bundler/gem_version_promoter.rb +68 -109
  69. data/bundler/lib/bundler/graph.rb +9 -9
  70. data/bundler/lib/bundler/index.rb +69 -73
  71. data/bundler/lib/bundler/injector.rb +12 -13
  72. data/bundler/lib/bundler/inline.rb +40 -17
  73. data/bundler/lib/bundler/installer/gem_installer.rb +13 -12
  74. data/bundler/lib/bundler/installer/parallel_installer.rb +19 -66
  75. data/bundler/lib/bundler/installer/standalone.rb +29 -15
  76. data/bundler/lib/bundler/installer.rb +27 -77
  77. data/bundler/lib/bundler/lazy_specification.rb +134 -71
  78. data/bundler/lib/bundler/lockfile_generator.rb +13 -4
  79. data/bundler/lib/bundler/lockfile_parser.rb +134 -61
  80. data/bundler/lib/bundler/man/bundle-add.1 +46 -48
  81. data/bundler/lib/bundler/man/bundle-add.1.ronn +54 -22
  82. data/bundler/lib/bundler/man/bundle-binstubs.1 +10 -19
  83. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  84. data/bundler/lib/bundler/man/bundle-cache.1 +38 -25
  85. data/bundler/lib/bundler/man/bundle-cache.1.ronn +40 -4
  86. data/bundler/lib/bundler/man/bundle-check.1 +7 -14
  87. data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
  88. data/bundler/lib/bundler/man/bundle-clean.1 +4 -11
  89. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  90. data/bundler/lib/bundler/man/bundle-config.1 +41 -220
  91. data/bundler/lib/bundler/man/bundle-config.1.ronn +27 -22
  92. data/bundler/lib/bundler/man/bundle-console.1 +33 -0
  93. data/bundler/lib/bundler/man/bundle-console.1.ronn +39 -0
  94. data/bundler/lib/bundler/man/bundle-doctor.1 +5 -19
  95. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
  96. data/bundler/lib/bundler/man/bundle-env.1 +9 -0
  97. data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
  98. data/bundler/lib/bundler/man/bundle-exec.1 +20 -78
  99. data/bundler/lib/bundler/man/bundle-exec.1.ronn +12 -10
  100. data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
  101. data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
  102. data/bundler/lib/bundler/man/bundle-gem.1 +53 -81
  103. data/bundler/lib/bundler/man/bundle-gem.1.ronn +41 -9
  104. data/bundler/lib/bundler/man/bundle-help.1 +9 -0
  105. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  106. data/bundler/lib/bundler/man/bundle-info.1 +8 -11
  107. data/bundler/lib/bundler/man/bundle-info.1.ronn +9 -5
  108. data/bundler/lib/bundler/man/bundle-init.1 +7 -12
  109. data/bundler/lib/bundler/man/bundle-init.1.ronn +4 -1
  110. data/bundler/lib/bundler/man/bundle-inject.1 +17 -19
  111. data/bundler/lib/bundler/man/bundle-inject.1.ronn +12 -2
  112. data/bundler/lib/bundler/man/bundle-install.1 +42 -162
  113. data/bundler/lib/bundler/man/bundle-install.1.ronn +31 -49
  114. data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
  115. data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
  116. data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
  117. data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  118. data/bundler/lib/bundler/man/bundle-list.1 +4 -19
  119. data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
  120. data/bundler/lib/bundler/man/bundle-lock.1 +25 -34
  121. data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
  122. data/bundler/lib/bundler/man/bundle-open.1 +18 -18
  123. data/bundler/lib/bundler/man/bundle-open.1.ronn +10 -1
  124. data/bundler/lib/bundler/man/bundle-outdated.1 +22 -67
  125. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +20 -12
  126. data/bundler/lib/bundler/man/bundle-platform.1 +16 -28
  127. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  128. data/bundler/lib/bundler/man/bundle-plugin.1 +58 -0
  129. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +63 -0
  130. data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
  131. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  132. data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
  133. data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
  134. data/bundler/lib/bundler/man/bundle-show.1 +7 -11
  135. data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
  136. data/bundler/lib/bundler/man/bundle-update.1 +30 -143
  137. data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
  138. data/bundler/lib/bundler/man/bundle-version.1 +22 -0
  139. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  140. data/bundler/lib/bundler/man/bundle-viz.1 +9 -18
  141. data/bundler/lib/bundler/man/bundle-viz.1.ronn +9 -3
  142. data/bundler/lib/bundler/man/bundle.1 +17 -51
  143. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  144. data/bundler/lib/bundler/man/gemfile.5 +77 -341
  145. data/bundler/lib/bundler/man/gemfile.5.ronn +73 -54
  146. data/bundler/lib/bundler/man/index.txt +8 -0
  147. data/bundler/lib/bundler/match_metadata.rb +17 -0
  148. data/bundler/lib/bundler/match_platform.rb +1 -1
  149. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  150. data/bundler/lib/bundler/materialization.rb +59 -0
  151. data/bundler/lib/bundler/mirror.rb +8 -10
  152. data/bundler/lib/bundler/plugin/api/source.rb +7 -5
  153. data/bundler/lib/bundler/plugin/events.rb +24 -0
  154. data/bundler/lib/bundler/plugin/index.rb +13 -5
  155. data/bundler/lib/bundler/plugin/installer/path.rb +18 -0
  156. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
  157. data/bundler/lib/bundler/plugin/installer.rb +42 -19
  158. data/bundler/lib/bundler/plugin/source_list.rb +4 -4
  159. data/bundler/lib/bundler/plugin.rb +35 -7
  160. data/bundler/lib/bundler/process_lock.rb +10 -14
  161. data/bundler/lib/bundler/remote_specification.rb +17 -13
  162. data/bundler/lib/bundler/resolver/base.rb +117 -0
  163. data/bundler/lib/bundler/resolver/candidate.rb +82 -0
  164. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  165. data/bundler/lib/bundler/resolver/package.rb +90 -0
  166. data/bundler/lib/bundler/resolver/root.rb +25 -0
  167. data/bundler/lib/bundler/resolver/spec_group.rb +54 -67
  168. data/bundler/lib/bundler/resolver.rb +432 -329
  169. data/bundler/lib/bundler/retry.rb +2 -2
  170. data/bundler/lib/bundler/ruby_dsl.rb +42 -7
  171. data/bundler/lib/bundler/ruby_version.rb +23 -10
  172. data/bundler/lib/bundler/rubygems_ext.rb +286 -81
  173. data/bundler/lib/bundler/rubygems_gem_installer.rb +77 -68
  174. data/bundler/lib/bundler/rubygems_integration.rb +57 -155
  175. data/bundler/lib/bundler/runtime.rb +28 -17
  176. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  177. data/bundler/lib/bundler/self_manager.rb +50 -12
  178. data/bundler/lib/bundler/settings.rb +144 -58
  179. data/bundler/lib/bundler/setup.rb +13 -1
  180. data/bundler/lib/bundler/shared_helpers.rb +87 -36
  181. data/bundler/lib/bundler/source/git/git_proxy.rb +278 -80
  182. data/bundler/lib/bundler/source/git.rb +161 -68
  183. data/bundler/lib/bundler/source/metadata.rb +16 -16
  184. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  185. data/bundler/lib/bundler/source/path.rb +16 -26
  186. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  187. data/bundler/lib/bundler/source/rubygems.rb +94 -154
  188. data/bundler/lib/bundler/source.rb +3 -1
  189. data/bundler/lib/bundler/source_list.rb +34 -4
  190. data/bundler/lib/bundler/spec_set.rb +195 -65
  191. data/bundler/lib/bundler/stub_specification.rb +34 -4
  192. data/bundler/lib/bundler/templates/Executable +1 -1
  193. data/bundler/lib/bundler/templates/Executable.bundler +6 -11
  194. data/bundler/lib/bundler/templates/Executable.standalone +2 -0
  195. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  196. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  197. data/bundler/lib/bundler/templates/newgem/README.md.tt +11 -5
  198. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -8
  199. data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
  200. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  201. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  202. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  203. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  204. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  205. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  206. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -8
  207. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  208. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  209. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +12 -4
  210. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  211. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
  212. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  213. data/bundler/lib/bundler/ui/shell.rb +60 -15
  214. data/bundler/lib/bundler/ui/silent.rb +33 -6
  215. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
  216. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  217. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  218. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  219. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  220. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +56 -7
  221. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -418
  222. data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
  223. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  224. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  225. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  226. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  227. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +102 -64
  228. data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
  229. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  230. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  231. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  232. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  233. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  234. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  235. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  236. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  237. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  238. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  239. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  240. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  241. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  242. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  243. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  244. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  245. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  246. data/bundler/lib/bundler/vendor/securerandom/.document +1 -0
  247. data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
  248. data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  249. data/bundler/lib/bundler/vendor/thor/.document +1 -0
  250. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  251. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  252. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  253. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -15
  254. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
  255. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
  256. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  257. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  258. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
  259. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
  260. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +12 -1
  261. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  262. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  263. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +17 -1
  264. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  265. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +28 -9
  266. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +46 -7
  267. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  268. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  269. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +35 -159
  270. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
  271. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  272. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -46
  273. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
  274. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  275. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  276. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  277. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
  278. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  279. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +166 -8
  280. data/bundler/lib/bundler/vendor/tsort/.document +1 -0
  281. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  282. data/bundler/lib/bundler/vendor/uri/.document +1 -0
  283. data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
  284. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +343 -148
  285. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +10 -4
  286. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +3 -2
  287. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +44 -33
  288. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  289. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  290. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  291. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  292. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  293. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +25 -12
  294. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +130 -38
  295. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  296. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  297. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  298. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +12 -11
  299. data/bundler/lib/bundler/vendored_net_http.rb +23 -0
  300. data/bundler/lib/bundler/vendored_persistent.rb +0 -36
  301. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  302. data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
  303. data/bundler/lib/bundler/vendored_timeout.rb +12 -0
  304. data/bundler/lib/bundler/vendored_uri.rb +18 -1
  305. data/bundler/lib/bundler/version.rb +5 -1
  306. data/bundler/lib/bundler/vlad.rb +1 -1
  307. data/bundler/lib/bundler/worker.rb +5 -7
  308. data/bundler/lib/bundler/yaml_serializer.rb +22 -13
  309. data/bundler/lib/bundler.rb +155 -148
  310. data/{bundler → doc/bundler}/UPGRADING.md +11 -4
  311. data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +40 -17
  312. data/doc/rubygems/POLICIES.md +204 -0
  313. data/{test/rubygems/fake_certlib/openssl.rb → exe/gem} +5 -1
  314. data/{bin → exe}/update_rubygems +12 -10
  315. data/lib/rubygems/available_set.rb +8 -7
  316. data/lib/rubygems/basic_specification.rb +90 -52
  317. data/lib/rubygems/bundler_version_finder.rb +6 -6
  318. data/lib/rubygems/ci_detector.rb +75 -0
  319. data/lib/rubygems/command.rb +68 -64
  320. data/lib/rubygems/command_manager.rb +39 -24
  321. data/lib/rubygems/commands/build_command.rb +14 -19
  322. data/lib/rubygems/commands/cert_command.rb +39 -39
  323. data/lib/rubygems/commands/check_command.rb +30 -25
  324. data/lib/rubygems/commands/cleanup_command.rb +32 -43
  325. data/lib/rubygems/commands/contents_command.rb +33 -25
  326. data/lib/rubygems/commands/dependency_command.rb +22 -23
  327. data/lib/rubygems/commands/environment_command.rb +8 -9
  328. data/lib/rubygems/commands/exec_command.rb +247 -0
  329. data/lib/rubygems/commands/fetch_command.rb +25 -10
  330. data/lib/rubygems/commands/generate_index_command.rb +40 -74
  331. data/lib/rubygems/commands/help_command.rb +15 -14
  332. data/lib/rubygems/commands/info_command.rb +5 -5
  333. data/lib/rubygems/commands/install_command.rb +31 -38
  334. data/lib/rubygems/commands/list_command.rb +6 -5
  335. data/lib/rubygems/commands/lock_command.rb +6 -5
  336. data/lib/rubygems/commands/mirror_command.rb +4 -3
  337. data/lib/rubygems/commands/open_command.rb +11 -12
  338. data/lib/rubygems/commands/outdated_command.rb +6 -5
  339. data/lib/rubygems/commands/owner_command.rb +23 -22
  340. data/lib/rubygems/commands/pristine_command.rb +83 -62
  341. data/lib/rubygems/commands/push_command.rb +38 -13
  342. data/lib/rubygems/commands/query_command.rb +11 -11
  343. data/lib/rubygems/commands/rdoc_command.rb +23 -28
  344. data/lib/rubygems/commands/rebuild_command.rb +262 -0
  345. data/lib/rubygems/commands/search_command.rb +6 -5
  346. data/lib/rubygems/commands/server_command.rb +4 -3
  347. data/lib/rubygems/commands/setup_command.rb +137 -154
  348. data/lib/rubygems/commands/signin_command.rb +10 -9
  349. data/lib/rubygems/commands/signout_command.rb +8 -7
  350. data/lib/rubygems/commands/sources_command.rb +34 -33
  351. data/lib/rubygems/commands/specification_command.rb +25 -20
  352. data/lib/rubygems/commands/stale_command.rb +5 -4
  353. data/lib/rubygems/commands/uninstall_command.rb +66 -59
  354. data/lib/rubygems/commands/unpack_command.rb +23 -30
  355. data/lib/rubygems/commands/update_command.rb +62 -94
  356. data/lib/rubygems/commands/which_command.rb +9 -8
  357. data/lib/rubygems/commands/yank_command.rb +14 -13
  358. data/lib/rubygems/compatibility.rb +5 -6
  359. data/lib/rubygems/config_file.rb +160 -50
  360. data/lib/rubygems/core_ext/kernel_gem.rb +3 -10
  361. data/lib/rubygems/core_ext/kernel_require.rb +88 -114
  362. data/lib/rubygems/core_ext/kernel_warn.rb +30 -39
  363. data/lib/rubygems/core_ext/tcpsocket_init.rb +4 -2
  364. data/lib/rubygems/defaults.rb +53 -22
  365. data/lib/rubygems/dependency.rb +34 -36
  366. data/lib/rubygems/dependency_installer.rb +52 -56
  367. data/lib/rubygems/dependency_list.rb +8 -7
  368. data/lib/rubygems/deprecate.rb +80 -75
  369. data/lib/rubygems/doctor.rb +23 -22
  370. data/lib/rubygems/errors.rb +6 -8
  371. data/lib/rubygems/exceptions.rb +20 -18
  372. data/lib/rubygems/ext/build_error.rb +2 -1
  373. data/lib/rubygems/ext/builder.rb +56 -32
  374. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
  375. data/lib/rubygems/ext/cargo_builder.rb +158 -131
  376. data/lib/rubygems/ext/cmake_builder.rb +9 -4
  377. data/lib/rubygems/ext/configure_builder.rb +9 -3
  378. data/lib/rubygems/ext/ext_conf_builder.rb +19 -15
  379. data/lib/rubygems/ext/rake_builder.rb +14 -7
  380. data/lib/rubygems/ext.rb +8 -7
  381. data/lib/rubygems/gem_runner.rb +23 -9
  382. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  383. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  384. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +80 -0
  385. data/lib/rubygems/gemcutter_utilities.rb +141 -63
  386. data/lib/rubygems/gemspec_helpers.rb +19 -0
  387. data/lib/rubygems/install_default_message.rb +3 -2
  388. data/lib/rubygems/install_message.rb +3 -2
  389. data/lib/rubygems/install_update_options.rb +72 -67
  390. data/lib/rubygems/installer.rb +148 -130
  391. data/lib/rubygems/installer_uninstaller_utils.rb +2 -4
  392. data/lib/rubygems/local_remote_options.rb +24 -28
  393. data/lib/rubygems/name_tuple.rb +10 -11
  394. data/lib/rubygems/package/digest_io.rb +2 -1
  395. data/lib/rubygems/package/file_source.rb +3 -2
  396. data/lib/rubygems/package/io_source.rb +1 -0
  397. data/lib/rubygems/package/old.rb +11 -10
  398. data/lib/rubygems/package/source.rb +1 -0
  399. data/lib/rubygems/package/tar_header.rb +125 -91
  400. data/lib/rubygems/package/tar_reader/entry.rb +106 -29
  401. data/lib/rubygems/package/tar_reader.rb +16 -39
  402. data/lib/rubygems/package/tar_writer.rb +29 -26
  403. data/lib/rubygems/package.rb +122 -84
  404. data/lib/rubygems/package_task.rb +7 -6
  405. data/lib/rubygems/path_support.rb +11 -11
  406. data/lib/rubygems/platform.rb +119 -70
  407. data/lib/rubygems/psych_tree.rb +6 -1
  408. data/lib/rubygems/query_utils.rb +46 -48
  409. data/lib/rubygems/rdoc.rb +13 -3
  410. data/lib/rubygems/remote_fetcher.rb +47 -39
  411. data/lib/rubygems/request/connection_pools.rb +6 -6
  412. data/lib/rubygems/request/http_pool.rb +2 -1
  413. data/lib/rubygems/request/https_pool.rb +1 -0
  414. data/lib/rubygems/request.rb +48 -44
  415. data/lib/rubygems/request_set/gem_dependency_api.rb +141 -144
  416. data/lib/rubygems/request_set/lockfile/parser.rb +31 -30
  417. data/lib/rubygems/request_set/lockfile/tokenizer.rb +24 -14
  418. data/lib/rubygems/request_set/lockfile.rb +11 -15
  419. data/lib/rubygems/request_set.rb +25 -23
  420. data/lib/rubygems/requirement.rb +30 -27
  421. data/lib/rubygems/resolver/activation_request.rb +7 -10
  422. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  423. data/lib/rubygems/resolver/api_set.rb +20 -13
  424. data/lib/rubygems/resolver/api_specification.rb +8 -7
  425. data/lib/rubygems/resolver/best_set.rb +5 -32
  426. data/lib/rubygems/resolver/composed_set.rb +4 -3
  427. data/lib/rubygems/resolver/conflict.rb +14 -21
  428. data/lib/rubygems/resolver/current_set.rb +1 -0
  429. data/lib/rubygems/resolver/dependency_request.rb +3 -2
  430. data/lib/rubygems/resolver/git_set.rb +2 -2
  431. data/lib/rubygems/resolver/git_specification.rb +7 -6
  432. data/lib/rubygems/resolver/index_set.rb +10 -9
  433. data/lib/rubygems/resolver/index_specification.rb +8 -6
  434. data/lib/rubygems/resolver/installed_specification.rb +6 -5
  435. data/lib/rubygems/resolver/installer_set.rb +19 -22
  436. data/lib/rubygems/resolver/local_specification.rb +4 -3
  437. data/lib/rubygems/resolver/lock_set.rb +6 -5
  438. data/lib/rubygems/resolver/lock_specification.rb +5 -4
  439. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  440. data/lib/rubygems/resolver/set.rb +1 -0
  441. data/lib/rubygems/resolver/source_set.rb +2 -0
  442. data/lib/rubygems/resolver/spec_specification.rb +8 -0
  443. data/lib/rubygems/resolver/specification.rb +2 -1
  444. data/lib/rubygems/resolver/stats.rb +2 -1
  445. data/lib/rubygems/resolver/vendor_set.rb +2 -1
  446. data/lib/rubygems/resolver/vendor_specification.rb +4 -3
  447. data/lib/rubygems/resolver.rb +51 -57
  448. data/lib/rubygems/s3_uri_signer.rb +18 -16
  449. data/lib/rubygems/safe_marshal/elements.rb +146 -0
  450. data/lib/rubygems/safe_marshal/reader.rb +325 -0
  451. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  452. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +428 -0
  453. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  454. data/lib/rubygems/safe_marshal.rb +74 -0
  455. data/lib/rubygems/safe_yaml.rb +14 -26
  456. data/lib/rubygems/security/policies.rb +48 -49
  457. data/lib/rubygems/security/policy.rb +25 -28
  458. data/lib/rubygems/security/signer.rb +16 -7
  459. data/lib/rubygems/security/trust_dir.rb +12 -13
  460. data/lib/rubygems/security.rb +40 -66
  461. data/lib/rubygems/security_option.rb +7 -6
  462. data/lib/rubygems/shellwords.rb +3 -0
  463. data/lib/rubygems/source/git.rb +34 -31
  464. data/lib/rubygems/source/installed.rb +4 -3
  465. data/lib/rubygems/source/local.rb +49 -49
  466. data/lib/rubygems/source/lock.rb +2 -3
  467. data/lib/rubygems/source/specific_file.rb +6 -4
  468. data/lib/rubygems/source/vendor.rb +1 -2
  469. data/lib/rubygems/source.rb +37 -31
  470. data/lib/rubygems/source_list.rb +8 -8
  471. data/lib/rubygems/spec_fetcher.rb +95 -66
  472. data/lib/rubygems/specification.rb +342 -404
  473. data/lib/rubygems/specification_policy.rb +147 -75
  474. data/lib/rubygems/specification_record.rb +212 -0
  475. data/lib/rubygems/stub_specification.rb +56 -30
  476. data/lib/rubygems/target_rbconfig.rb +50 -0
  477. data/lib/rubygems/text.rb +3 -4
  478. data/lib/rubygems/uninstaller.rb +67 -48
  479. data/lib/rubygems/update_suggestion.rb +56 -0
  480. data/lib/rubygems/uri.rb +10 -10
  481. data/lib/rubygems/uri_formatter.rb +2 -2
  482. data/lib/rubygems/user_interaction.rb +50 -40
  483. data/lib/rubygems/util/licenses.rb +310 -39
  484. data/lib/rubygems/util/list.rb +4 -1
  485. data/lib/rubygems/util.rb +19 -20
  486. data/lib/rubygems/validator.rb +15 -14
  487. data/lib/rubygems/vendor/molinillo/.document +1 -0
  488. data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  489. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
  490. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
  491. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  492. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  493. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  494. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  495. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
  496. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  497. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  498. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
  499. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -3
  500. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  501. data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  502. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
  503. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/ui.rb +1 -1
  504. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
  505. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolver.rb +1 -1
  506. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/state.rb +1 -1
  507. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo.rb +2 -2
  508. data/lib/rubygems/vendor/net-http/.document +1 -0
  509. data/lib/rubygems/vendor/net-http/COPYING +56 -0
  510. data/lib/rubygems/vendor/net-http/lib/net/http/exceptions.rb +34 -0
  511. data/lib/rubygems/vendor/net-http/lib/net/http/generic_request.rb +414 -0
  512. data/lib/rubygems/vendor/net-http/lib/net/http/header.rb +981 -0
  513. data/lib/rubygems/vendor/net-http/lib/net/http/proxy_delta.rb +17 -0
  514. data/lib/rubygems/vendor/net-http/lib/net/http/request.rb +88 -0
  515. data/lib/rubygems/vendor/net-http/lib/net/http/requests.rb +430 -0
  516. data/lib/rubygems/vendor/net-http/lib/net/http/response.rb +738 -0
  517. data/lib/rubygems/vendor/net-http/lib/net/http/responses.rb +1174 -0
  518. data/lib/rubygems/vendor/net-http/lib/net/http/status.rb +84 -0
  519. data/lib/rubygems/vendor/net-http/lib/net/http.rb +2580 -0
  520. data/lib/rubygems/vendor/net-http/lib/net/https.rb +23 -0
  521. data/lib/rubygems/vendor/net-protocol/.document +1 -0
  522. data/lib/rubygems/vendor/net-protocol/lib/net/protocol.rb +544 -0
  523. data/lib/rubygems/vendor/optparse/.document +1 -0
  524. data/lib/rubygems/vendor/optparse/COPYING +56 -0
  525. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
  526. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
  527. data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
  528. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
  529. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +206 -83
  530. data/lib/rubygems/vendor/resolv/.document +1 -0
  531. data/lib/rubygems/vendor/resolv/COPYING +56 -0
  532. data/lib/rubygems/vendor/resolv/lib/resolv.rb +3455 -0
  533. data/lib/rubygems/vendor/securerandom/.document +1 -0
  534. data/lib/rubygems/vendor/securerandom/COPYING +56 -0
  535. data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
  536. data/lib/rubygems/vendor/timeout/.document +1 -0
  537. data/lib/rubygems/vendor/timeout/COPYING +56 -0
  538. data/lib/rubygems/vendor/timeout/lib/timeout.rb +198 -0
  539. data/lib/rubygems/vendor/tsort/.document +1 -0
  540. data/lib/rubygems/vendor/tsort/lib/tsort.rb +455 -0
  541. data/lib/rubygems/vendor/uri/.document +1 -0
  542. data/lib/rubygems/vendor/uri/COPYING +56 -0
  543. data/lib/rubygems/vendor/uri/lib/uri/common.rb +876 -0
  544. data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
  545. data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
  546. data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1578 -0
  547. data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
  548. data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
  549. data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
  550. data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
  551. data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
  552. data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  553. data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  554. data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
  555. data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
  556. data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
  557. data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
  558. data/{bundler/lib/bundler → lib/rubygems}/vendored_molinillo.rb +0 -1
  559. data/lib/rubygems/vendored_net_http.rb +5 -0
  560. data/lib/rubygems/vendored_optparse.rb +3 -0
  561. data/lib/rubygems/vendored_securerandom.rb +3 -0
  562. data/lib/rubygems/vendored_timeout.rb +5 -0
  563. data/lib/rubygems/vendored_tsort.rb +3 -0
  564. data/lib/rubygems/version.rb +57 -45
  565. data/lib/rubygems/version_option.rb +6 -8
  566. data/lib/rubygems/yaml_serializer.rb +98 -0
  567. data/lib/rubygems.rb +191 -133
  568. data/rubygems-update.gemspec +16 -9
  569. data/setup.rb +12 -9
  570. metadata +233 -307
  571. data/POLICIES.md +0 -100
  572. data/bin/gem +0 -13
  573. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  574. data/bundler/lib/bundler/templates/gems.rb +0 -5
  575. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  576. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  577. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  578. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  579. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  580. data/bundler/lib/bundler/version_ranges.rb +0 -122
  581. data/lib/rubygems/indexer.rb +0 -427
  582. data/lib/rubygems/mock_gem_ui.rb +0 -85
  583. data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
  584. data/lib/rubygems/optparse.rb +0 -3
  585. data/lib/rubygems/resolver/molinillo/LICENSE +0 -9
  586. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  587. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  588. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  589. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  590. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  591. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  592. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  593. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  594. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  595. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  596. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  597. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  598. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +0 -143
  599. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  600. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  601. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +0 -67
  602. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +0 -839
  603. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +0 -46
  604. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +0 -58
  605. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +0 -11
  606. data/lib/rubygems/resolver/molinillo.rb +0 -2
  607. data/lib/rubygems/tsort/LICENSE.txt +0 -22
  608. data/lib/rubygems/tsort/lib/tsort.rb +0 -454
  609. data/lib/rubygems/tsort.rb +0 -3
  610. data/test/rubygems/alternate_cert.pem +0 -19
  611. data/test/rubygems/alternate_cert_32.pem +0 -19
  612. data/test/rubygems/alternate_key.pem +0 -27
  613. data/test/rubygems/bad_rake.rb +0 -2
  614. data/test/rubygems/ca_cert.pem +0 -77
  615. data/test/rubygems/child_cert.pem +0 -20
  616. data/test/rubygems/child_cert_32.pem +0 -20
  617. data/test/rubygems/child_key.pem +0 -27
  618. data/test/rubygems/client.pem +0 -107
  619. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  620. data/test/rubygems/data/gem-private_key.pem +0 -27
  621. data/test/rubygems/data/gem-public_cert.pem +0 -20
  622. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  623. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  624. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  625. data/test/rubygems/encrypted_private_key.pem +0 -30
  626. data/test/rubygems/expired_cert.pem +0 -19
  627. data/test/rubygems/foo/discover.rb +0 -1
  628. data/test/rubygems/future_cert.pem +0 -19
  629. data/test/rubygems/future_cert_32.pem +0 -19
  630. data/test/rubygems/good_rake.rb +0 -2
  631. data/test/rubygems/grandchild_cert.pem +0 -20
  632. data/test/rubygems/grandchild_cert_32.pem +0 -20
  633. data/test/rubygems/grandchild_key.pem +0 -27
  634. data/test/rubygems/helper.rb +0 -1622
  635. data/test/rubygems/installer_test_case.rb +0 -247
  636. data/test/rubygems/invalid_client.pem +0 -49
  637. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  638. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  639. data/test/rubygems/invalid_key.pem +0 -27
  640. data/test/rubygems/invalid_signer_cert.pem +0 -19
  641. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  642. data/test/rubygems/invalidchild_cert.pem +0 -20
  643. data/test/rubygems/invalidchild_cert_32.pem +0 -20
  644. data/test/rubygems/invalidchild_key.pem +0 -27
  645. data/test/rubygems/package/tar_test_case.rb +0 -139
  646. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  647. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  648. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -3
  649. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -4
  650. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -3
  651. data/test/rubygems/private3072_key.pem +0 -40
  652. data/test/rubygems/private_ec_key.pem +0 -9
  653. data/test/rubygems/private_key.pem +0 -27
  654. data/test/rubygems/public3072_cert.pem +0 -25
  655. data/test/rubygems/public_cert.pem +0 -20
  656. data/test/rubygems/public_cert_32.pem +0 -19
  657. data/test/rubygems/public_key.pem +0 -9
  658. data/test/rubygems/rubygems/commands/crash_command.rb +0 -4
  659. data/test/rubygems/rubygems_plugin.rb +0 -23
  660. data/test/rubygems/sff/discover.rb +0 -1
  661. data/test/rubygems/simple_gem.rb +0 -67
  662. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -7
  663. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  664. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -12
  665. data/test/rubygems/ssl_cert.pem +0 -80
  666. data/test/rubygems/ssl_key.pem +0 -27
  667. data/test/rubygems/test_bundled_ca.rb +0 -60
  668. data/test/rubygems/test_config.rb +0 -27
  669. data/test/rubygems/test_deprecate.rb +0 -157
  670. data/test/rubygems/test_exit.rb +0 -11
  671. data/test/rubygems/test_gem.rb +0 -2112
  672. data/test/rubygems/test_gem_available_set.rb +0 -129
  673. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -125
  674. data/test/rubygems/test_gem_command.rb +0 -400
  675. data/test/rubygems/test_gem_command_manager.rb +0 -334
  676. data/test/rubygems/test_gem_commands_build_command.rb +0 -727
  677. data/test/rubygems/test_gem_commands_cert_command.rb +0 -867
  678. data/test/rubygems/test_gem_commands_check_command.rb +0 -67
  679. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -291
  680. data/test/rubygems/test_gem_commands_contents_command.rb +0 -270
  681. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -227
  682. data/test/rubygems/test_gem_commands_environment_command.rb +0 -167
  683. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -257
  684. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -80
  685. data/test/rubygems/test_gem_commands_help_command.rb +0 -93
  686. data/test/rubygems/test_gem_commands_info_command.rb +0 -43
  687. data/test/rubygems/test_gem_commands_install_command.rb +0 -1553
  688. data/test/rubygems/test_gem_commands_list_command.rb +0 -32
  689. data/test/rubygems/test_gem_commands_lock_command.rb +0 -66
  690. data/test/rubygems/test_gem_commands_mirror.rb +0 -19
  691. data/test/rubygems/test_gem_commands_open_command.rb +0 -97
  692. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -49
  693. data/test/rubygems/test_gem_commands_owner_command.rb +0 -326
  694. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -659
  695. data/test/rubygems/test_gem_commands_push_command.rb +0 -477
  696. data/test/rubygems/test_gem_commands_query_command.rb +0 -857
  697. data/test/rubygems/test_gem_commands_search_command.rb +0 -15
  698. data/test/rubygems/test_gem_commands_server_command.rb +0 -19
  699. data/test/rubygems/test_gem_commands_setup_command.rb +0 -447
  700. data/test/rubygems/test_gem_commands_signin_command.rb +0 -219
  701. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  702. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  703. data/test/rubygems/test_gem_commands_specification_command.rb +0 -276
  704. data/test/rubygems/test_gem_commands_stale_command.rb +0 -42
  705. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -504
  706. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -223
  707. data/test/rubygems/test_gem_commands_update_command.rb +0 -835
  708. data/test/rubygems/test_gem_commands_which_command.rb +0 -84
  709. data/test/rubygems/test_gem_commands_yank_command.rb +0 -180
  710. data/test/rubygems/test_gem_config_file.rb +0 -504
  711. data/test/rubygems/test_gem_dependency.rb +0 -395
  712. data/test/rubygems/test_gem_dependency_installer.rb +0 -1155
  713. data/test/rubygems/test_gem_dependency_list.rb +0 -264
  714. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -26
  715. data/test/rubygems/test_gem_doctor.rb +0 -194
  716. data/test/rubygems/test_gem_ext_builder.rb +0 -338
  717. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  718. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +0 -243
  719. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +0 -10
  720. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
  721. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  722. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/src/lib.rs +0 -27
  723. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  724. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -243
  725. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  726. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
  727. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -8
  728. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -39
  729. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -178
  730. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -33
  731. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -75
  732. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -83
  733. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -79
  734. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -230
  735. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -112
  736. data/test/rubygems/test_gem_gem_runner.rb +0 -113
  737. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -272
  738. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -59
  739. data/test/rubygems/test_gem_indexer.rb +0 -361
  740. data/test/rubygems/test_gem_install_update_options.rb +0 -207
  741. data/test/rubygems/test_gem_installer.rb +0 -2394
  742. data/test/rubygems/test_gem_local_remote_options.rb +0 -132
  743. data/test/rubygems/test_gem_name_tuple.rb +0 -42
  744. data/test/rubygems/test_gem_package.rb +0 -1178
  745. data/test/rubygems/test_gem_package_old.rb +0 -90
  746. data/test/rubygems/test_gem_package_tar_header.rb +0 -225
  747. data/test/rubygems/test_gem_package_tar_reader.rb +0 -87
  748. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -152
  749. data/test/rubygems/test_gem_package_tar_writer.rb +0 -330
  750. data/test/rubygems/test_gem_package_task.rb +0 -117
  751. data/test/rubygems/test_gem_path_support.rb +0 -138
  752. data/test/rubygems/test_gem_platform.rb +0 -391
  753. data/test/rubygems/test_gem_rdoc.rb +0 -136
  754. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1226
  755. data/test/rubygems/test_gem_request.rb +0 -541
  756. data/test/rubygems/test_gem_request_connection_pools.rb +0 -150
  757. data/test/rubygems/test_gem_request_set.rb +0 -671
  758. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -847
  759. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -468
  760. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -543
  761. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
  762. data/test/rubygems/test_gem_requirement.rb +0 -498
  763. data/test/rubygems/test_gem_resolver.rb +0 -791
  764. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -42
  765. data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
  766. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -166
  767. data/test/rubygems/test_gem_resolver_best_set.rb +0 -158
  768. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -43
  769. data/test/rubygems/test_gem_resolver_conflict.rb +0 -81
  770. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -82
  771. data/test/rubygems/test_gem_resolver_git_set.rb +0 -187
  772. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -113
  773. data/test/rubygems/test_gem_resolver_index_set.rb +0 -87
  774. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -92
  775. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -46
  776. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -275
  777. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -43
  778. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -61
  779. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -97
  780. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -18
  781. data/test/rubygems/test_gem_resolver_specification.rb +0 -62
  782. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -81
  783. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -81
  784. data/test/rubygems/test_gem_security.rb +0 -340
  785. data/test/rubygems/test_gem_security_policy.rb +0 -535
  786. data/test/rubygems/test_gem_security_signer.rb +0 -217
  787. data/test/rubygems/test_gem_security_trust_dir.rb +0 -98
  788. data/test/rubygems/test_gem_silent_ui.rb +0 -116
  789. data/test/rubygems/test_gem_source.rb +0 -253
  790. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -36
  791. data/test/rubygems/test_gem_source_git.rb +0 -303
  792. data/test/rubygems/test_gem_source_installed.rb +0 -34
  793. data/test/rubygems/test_gem_source_list.rb +0 -118
  794. data/test/rubygems/test_gem_source_local.rb +0 -106
  795. data/test/rubygems/test_gem_source_lock.rb +0 -112
  796. data/test/rubygems/test_gem_source_specific_file.rb +0 -75
  797. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -49
  798. data/test/rubygems/test_gem_source_vendor.rb +0 -29
  799. data/test/rubygems/test_gem_spec_fetcher.rb +0 -337
  800. data/test/rubygems/test_gem_specification.rb +0 -3756
  801. data/test/rubygems/test_gem_stream_ui.rb +0 -224
  802. data/test/rubygems/test_gem_stub_specification.rb +0 -277
  803. data/test/rubygems/test_gem_text.rb +0 -102
  804. data/test/rubygems/test_gem_uninstaller.rb +0 -674
  805. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -30
  806. data/test/rubygems/test_gem_uri.rb +0 -39
  807. data/test/rubygems/test_gem_uri_formatter.rb +0 -26
  808. data/test/rubygems/test_gem_util.rb +0 -90
  809. data/test/rubygems/test_gem_validator.rb +0 -42
  810. data/test/rubygems/test_gem_version.rb +0 -295
  811. data/test/rubygems/test_gem_version_option.rb +0 -164
  812. data/test/rubygems/test_kernel.rb +0 -129
  813. data/test/rubygems/test_project_sanity.rb +0 -20
  814. data/test/rubygems/test_remote_fetch_error.rb +0 -19
  815. data/test/rubygems/test_require.rb +0 -719
  816. data/test/rubygems/test_rubygems.rb +0 -74
  817. data/test/rubygems/utilities.rb +0 -371
  818. data/test/rubygems/wrong_key_cert.pem +0 -19
  819. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  820. data/test/test_changelog_generator.rb +0 -17
  821. /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/connection_pool}/.document +0 -0
  822. /data/{lib/rubygems/tsort → bundler/lib/bundler/vendor/fileutils}/.document +0 -0
  823. /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
  824. /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
  825. /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
  826. /data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/LICENSE +0 -0
  827. /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
  828. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
  829. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
  830. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
  831. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
  832. /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -1,1622 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rubygems'
4
-
5
- # If bundler gemspec exists, add to stubs
6
- bundler_gemspec = File.expand_path('../../bundler/bundler.gemspec', __dir__)
7
- if File.exist?(bundler_gemspec)
8
- Gem::Specification.dirs.unshift File.dirname(bundler_gemspec)
9
- Gem::Specification.class_variable_set :@@stubs, nil
10
- Gem::Specification.stubs
11
- Gem::Specification.dirs.shift
12
- end
13
-
14
- begin
15
- gem 'test-unit', '~> 3.0'
16
- rescue Gem::LoadError
17
- end
18
-
19
- if File.exist?(bundler_gemspec)
20
- require_relative '../../bundler/lib/bundler'
21
- else
22
- require 'bundler'
23
- end
24
-
25
- require 'test/unit'
26
-
27
- ENV["JARS_SKIP"] = "true" if Gem.java_platform? # avoid unnecessary and noisy `jar-dependencies` post install hook
28
-
29
- require 'rubygems/deprecate'
30
-
31
- require 'fileutils'
32
- require 'pathname'
33
- require 'pp'
34
- require 'rubygems/package'
35
- require 'shellwords'
36
- require 'tmpdir'
37
- require 'uri'
38
- require 'zlib'
39
- require 'benchmark' # stdlib
40
- require 'rubygems/mock_gem_ui'
41
-
42
- module Gem
43
-
44
- ##
45
- # Allows setting the gem path searcher.
46
-
47
- def self.searcher=(searcher)
48
- @searcher = searcher
49
- end
50
-
51
- ##
52
- # Allows toggling Windows behavior.
53
-
54
- def self.win_platform=(val)
55
- @@win_platform = val
56
- end
57
-
58
- ##
59
- # Allows setting path to Ruby.
60
-
61
- def self.ruby=(ruby)
62
- @ruby = ruby
63
- end
64
-
65
- ##
66
- # Sets the default user interaction to a MockGemUi.
67
-
68
- module DefaultUserInteraction
69
- @ui = Gem::MockGemUi.new
70
- end
71
- end
72
-
73
- require "rubygems/command"
74
-
75
- class Gem::Command
76
- ##
77
- # Allows resetting the hash of specific args per command.
78
-
79
- def self.specific_extra_args_hash=(value)
80
- @specific_extra_args_hash = value
81
- end
82
- end
83
-
84
- ##
85
- # RubyGemTestCase provides a variety of methods for testing rubygems and
86
- # gem-related behavior in a sandbox. Through RubyGemTestCase you can install
87
- # and uninstall gems, fetch remote gems through a stub fetcher and be assured
88
- # your normal set of gems is not affected.
89
-
90
- class Gem::TestCase < Test::Unit::TestCase
91
- extend Gem::Deprecate
92
-
93
- attr_accessor :fetcher # :nodoc:
94
-
95
- attr_accessor :gem_repo # :nodoc:
96
-
97
- attr_accessor :uri # :nodoc:
98
-
99
- def assert_activate(expected, *specs)
100
- specs.each do |spec|
101
- case spec
102
- when String then
103
- Gem::Specification.find_by_name(spec).activate
104
- when Gem::Specification then
105
- spec.activate
106
- else
107
- flunk spec.inspect
108
- end
109
- end
110
-
111
- loaded = Gem.loaded_specs.values.map(&:full_name)
112
-
113
- assert_equal expected.sort, loaded.sort if expected
114
- end
115
-
116
- def assert_directory_exists(path, msg = nil)
117
- msg = build_message(msg, "Expected path '#{path}' to be a directory")
118
- assert_path_exist path
119
- assert File.directory?(path), msg
120
- end
121
-
122
- def refute_directory_exists(path, msg = nil)
123
- msg = build_message(msg, "Expected path '#{path}' not to be a directory")
124
- assert_path_not_exist path
125
- refute File.directory?(path), msg
126
- end
127
-
128
- # https://github.com/seattlerb/minitest/blob/21d9e804b63c619f602f3f4ece6c71b48974707a/lib/minitest/assertions.rb#L188
129
- def _synchronize
130
- yield
131
- end
132
-
133
- # https://github.com/seattlerb/minitest/blob/21d9e804b63c619f602f3f4ece6c71b48974707a/lib/minitest/assertions.rb#L546
134
- def capture_subprocess_io
135
- _synchronize do
136
- begin
137
- require "tempfile"
138
-
139
- captured_stdout, captured_stderr = Tempfile.new("out"), Tempfile.new("err")
140
-
141
- orig_stdout, orig_stderr = $stdout.dup, $stderr.dup
142
- $stdout.reopen captured_stdout
143
- $stderr.reopen captured_stderr
144
-
145
- yield
146
-
147
- $stdout.rewind
148
- $stderr.rewind
149
-
150
- return captured_stdout.read, captured_stderr.read
151
- ensure
152
- $stdout.reopen orig_stdout
153
- $stderr.reopen orig_stderr
154
-
155
- orig_stdout.close
156
- orig_stderr.close
157
- captured_stdout.close!
158
- captured_stderr.close!
159
- end
160
- end
161
- end
162
-
163
- ##
164
- # Sets the ENABLE_SHARED entry in RbConfig::CONFIG to +value+ and restores
165
- # the original value when the block ends
166
-
167
- def enable_shared(value)
168
- enable_shared = RbConfig::CONFIG['ENABLE_SHARED']
169
- RbConfig::CONFIG['ENABLE_SHARED'] = value
170
-
171
- yield
172
- ensure
173
- if enable_shared
174
- RbConfig::CONFIG['enable_shared'] = enable_shared
175
- else
176
- RbConfig::CONFIG.delete 'enable_shared'
177
- end
178
- end
179
-
180
- ##
181
- # Sets the vendordir entry in RbConfig::CONFIG to +value+ and restores the
182
- # original value when the block ends
183
- #
184
- def vendordir(value)
185
- vendordir = RbConfig::CONFIG['vendordir']
186
-
187
- if value
188
- RbConfig::CONFIG['vendordir'] = value
189
- else
190
- RbConfig::CONFIG.delete 'vendordir'
191
- end
192
-
193
- yield
194
- ensure
195
- if vendordir
196
- RbConfig::CONFIG['vendordir'] = vendordir
197
- else
198
- RbConfig::CONFIG.delete 'vendordir'
199
- end
200
- end
201
-
202
- ##
203
- # Sets the bindir entry in RbConfig::CONFIG to +value+ and restores the
204
- # original value when the block ends
205
- #
206
- def bindir(value)
207
- with_clean_path_to_ruby do
208
- bindir = RbConfig::CONFIG['bindir']
209
-
210
- if value
211
- RbConfig::CONFIG['bindir'] = value
212
- else
213
- RbConfig::CONFIG.delete 'bindir'
214
- end
215
-
216
- begin
217
- yield
218
- ensure
219
- if bindir
220
- RbConfig::CONFIG['bindir'] = bindir
221
- else
222
- RbConfig::CONFIG.delete 'bindir'
223
- end
224
- end
225
- end
226
- end
227
-
228
- ##
229
- # Sets the EXEEXT entry in RbConfig::CONFIG to +value+ and restores the
230
- # original value when the block ends
231
- #
232
- def exeext(value)
233
- exeext = RbConfig::CONFIG['EXEEXT']
234
-
235
- if value
236
- RbConfig::CONFIG['EXEEXT'] = value
237
- else
238
- RbConfig::CONFIG.delete 'EXEEXT'
239
- end
240
-
241
- yield
242
- ensure
243
- if exeext
244
- RbConfig::CONFIG['EXEEXT'] = exeext
245
- else
246
- RbConfig::CONFIG.delete 'EXEEXT'
247
- end
248
- end
249
-
250
- def scan_make_command_lines(output)
251
- output.scan(/^#{Regexp.escape make_command}(?:[[:blank:]].*)?$/)
252
- end
253
-
254
- def parse_make_command_line_targets(line)
255
- args = line.sub(/^#{Regexp.escape make_command}/, "").shellsplit
256
-
257
- targets = []
258
-
259
- args.each do |arg|
260
- case arg
261
- when /\A(\w+)=/
262
- else
263
- targets << arg
264
- end
265
- end
266
-
267
- targets << '' if targets.empty?
268
-
269
- targets
270
- end
271
-
272
- def assert_contains_make_command(target, output, msg = nil)
273
- if output.match(/\n/)
274
- msg = build_message(msg,
275
- "Expected output containing make command \"%s\", but was \n\nBEGIN_OF_OUTPUT\n%sEND_OF_OUTPUT" % [
276
- ('%s %s' % [make_command, target]).rstrip,
277
- output,
278
- ]
279
- )
280
- else
281
- msg = build_message(msg,
282
- 'Expected make command "%s", but was "%s"' % [
283
- ('%s %s' % [make_command, target]).rstrip,
284
- output,
285
- ]
286
- )
287
- end
288
-
289
- assert scan_make_command_lines(output).any? {|line|
290
- targets = parse_make_command_line_targets(line)
291
-
292
- if targets.include?(target)
293
- true
294
- else
295
- false
296
- end
297
- }, msg
298
- end
299
-
300
- include Gem::DefaultUserInteraction
301
-
302
- ##
303
- # #setup prepares a sandboxed location to install gems. All installs are
304
- # directed to a temporary directory. All install plugins are removed.
305
- #
306
- # If the +RUBY+ environment variable is set the given path is used for
307
- # Gem::ruby. The local platform is set to <tt>i386-mswin32</tt> for Windows
308
- # or <tt>i686-darwin8.10.1</tt> otherwise.
309
-
310
- def setup
311
- @orig_hooks = {}
312
- @orig_env = ENV.to_hash
313
- @tmp = File.expand_path("tmp")
314
-
315
- FileUtils.mkdir_p @tmp
316
-
317
- @tempdir = Dir.mktmpdir("test_rubygems_", @tmp)
318
- @tempdir.tap(&Gem::UNTAINT)
319
-
320
- ENV['GEM_VENDOR'] = nil
321
- ENV['GEMRC'] = nil
322
- ENV['XDG_CACHE_HOME'] = nil
323
- ENV['XDG_CONFIG_HOME'] = nil
324
- ENV['XDG_DATA_HOME'] = nil
325
- ENV['SOURCE_DATE_EPOCH'] = nil
326
- ENV['BUNDLER_VERSION'] = nil
327
-
328
- @current_dir = Dir.pwd
329
- @fetcher = nil
330
-
331
- @back_ui = Gem::DefaultUserInteraction.ui
332
- @ui = Gem::MockGemUi.new
333
- # This needs to be a new instance since we call use_ui(@ui) when we want to
334
- # capture output
335
- Gem::DefaultUserInteraction.ui = Gem::MockGemUi.new
336
-
337
- ENV["TMPDIR"] = @tempdir
338
-
339
- @orig_SYSTEM_WIDE_CONFIG_FILE = Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE
340
- Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
341
- Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
342
- File.join(@tempdir, 'system-gemrc')
343
-
344
- @gemhome = File.join @tempdir, 'gemhome'
345
- @userhome = File.join @tempdir, 'userhome'
346
- ENV["GEM_SPEC_CACHE"] = File.join @tempdir, 'spec_cache'
347
-
348
- @orig_ruby = if ENV['RUBY']
349
- ruby = Gem.ruby
350
- Gem.ruby = ENV['RUBY']
351
- ruby
352
- end
353
-
354
- @git = ENV['GIT'] || (win_platform? ? 'git.exe' : 'git')
355
-
356
- Gem.ensure_gem_subdirectories @gemhome
357
- Gem.ensure_default_gem_subdirectories @gemhome
358
-
359
- @orig_LOAD_PATH = $LOAD_PATH.dup
360
- $LOAD_PATH.map! do |s|
361
- expand_path = File.realpath(s) rescue File.expand_path(s)
362
- if expand_path != s
363
- expand_path.tap(&Gem::UNTAINT)
364
- if s.instance_variable_defined?(:@gem_prelude_index)
365
- expand_path.instance_variable_set(:@gem_prelude_index, expand_path)
366
- end
367
- expand_path.freeze if s.frozen?
368
- s = expand_path
369
- end
370
- s
371
- end
372
-
373
- Dir.chdir @tempdir
374
-
375
- ENV['HOME'] = @userhome
376
- Gem.instance_variable_set :@config_file, nil
377
- Gem.instance_variable_set :@user_home, nil
378
- Gem.instance_variable_set :@config_home, nil
379
- Gem.instance_variable_set :@data_home, nil
380
- Gem.instance_variable_set :@gemdeps, nil
381
- Gem.instance_variable_set :@env_requirements_by_name, nil
382
- Gem.send :remove_instance_variable, :@ruby_version if
383
- Gem.instance_variables.include? :@ruby_version
384
-
385
- FileUtils.mkdir_p @userhome
386
-
387
- ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
388
-
389
- Gem.instance_variable_set(:@default_specifications_dir, nil)
390
- if Gem.java_platform?
391
- @orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
392
- RbConfig::CONFIG['default_gem_home'] = @gemhome
393
- else
394
- Gem.instance_variable_set(:@default_dir, @gemhome)
395
- end
396
-
397
- @orig_bindir = RbConfig::CONFIG["bindir"]
398
- RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
399
-
400
- @orig_sitelibdir = RbConfig::CONFIG["sitelibdir"]
401
- new_sitelibdir = @orig_sitelibdir.sub(RbConfig::CONFIG["prefix"], @gemhome)
402
- $LOAD_PATH.insert(Gem.load_path_insert_index, new_sitelibdir)
403
- RbConfig::CONFIG["sitelibdir"] = new_sitelibdir
404
-
405
- @orig_mandir = RbConfig::CONFIG["mandir"]
406
- RbConfig::CONFIG["mandir"] = File.join @gemhome, "share", "man"
407
-
408
- Gem::Specification.unresolved_deps.clear
409
- Gem.use_paths(@gemhome)
410
-
411
- Gem.loaded_specs.clear
412
- Gem.instance_variable_set(:@activated_gem_paths, 0)
413
- Gem.clear_default_specs
414
- Bundler.reset!
415
-
416
- Gem.configuration.verbose = true
417
- Gem.configuration.update_sources = true
418
-
419
- Gem::RemoteFetcher.fetcher = Gem::FakeFetcher.new
420
-
421
- @gem_repo = "http://gems.example.com/"
422
- @uri = URI.parse @gem_repo
423
- Gem.sources.replace [@gem_repo]
424
-
425
- Gem.searcher = nil
426
- Gem::SpecFetcher.fetcher = nil
427
-
428
- @orig_arch = RbConfig::CONFIG['arch']
429
-
430
- if win_platform?
431
- util_set_arch 'i386-mswin32'
432
- else
433
- util_set_arch 'i686-darwin8.10.1'
434
- end
435
-
436
- %w[post_install_hooks done_installing_hooks post_uninstall_hooks pre_uninstall_hooks pre_install_hooks pre_reset_hooks post_reset_hooks post_build_hooks].each do |name|
437
- @orig_hooks[name] = Gem.send(name).dup
438
- end
439
-
440
- @marshal_version = "#{Marshal::MAJOR_VERSION}.#{Marshal::MINOR_VERSION}"
441
- @orig_LOADED_FEATURES = $LOADED_FEATURES.dup
442
- end
443
-
444
- ##
445
- # #teardown restores the process to its original state and removes the
446
- # tempdir
447
-
448
- def teardown
449
- $LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
450
- if @orig_LOADED_FEATURES
451
- if @orig_LOAD_PATH
452
- ($LOADED_FEATURES - @orig_LOADED_FEATURES).each do |feat|
453
- $LOADED_FEATURES.delete(feat) if feat.start_with?(@tmp)
454
- end
455
- else
456
- $LOADED_FEATURES.replace @orig_LOADED_FEATURES
457
- end
458
- end
459
-
460
- RbConfig::CONFIG['arch'] = @orig_arch
461
-
462
- if defined? Gem::RemoteFetcher
463
- Gem::RemoteFetcher.fetcher = nil
464
- end
465
-
466
- Dir.chdir @current_dir
467
-
468
- FileUtils.rm_rf @tempdir
469
-
470
- ENV.replace(@orig_env)
471
-
472
- Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
473
- Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
474
- @orig_SYSTEM_WIDE_CONFIG_FILE
475
-
476
- Gem.ruby = @orig_ruby if @orig_ruby
477
-
478
- RbConfig::CONFIG['mandir'] = @orig_mandir
479
- RbConfig::CONFIG['sitelibdir'] = @orig_sitelibdir
480
- RbConfig::CONFIG['bindir'] = @orig_bindir
481
-
482
- Gem.instance_variable_set :@default_specifications_dir, nil
483
- if Gem.java_platform?
484
- RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
485
- else
486
- Gem.instance_variable_set :@default_dir, nil
487
- end
488
-
489
- Gem::Specification.unresolved_deps.clear
490
- Gem::refresh
491
-
492
- @orig_hooks.each do |name, hooks|
493
- Gem.send(name).replace hooks
494
- end
495
-
496
- @back_ui.close
497
- end
498
-
499
- def credential_setup
500
- @temp_cred = File.join(@userhome, '.gem', 'credentials')
501
- FileUtils.mkdir_p File.dirname(@temp_cred)
502
- File.write @temp_cred, ':rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97'
503
- File.chmod 0600, @temp_cred
504
- end
505
-
506
- def credential_teardown
507
- FileUtils.rm_rf @temp_cred
508
- end
509
-
510
- def common_installer_setup
511
- common_installer_teardown
512
-
513
- Gem.post_build do |installer|
514
- @post_build_hook_arg = installer
515
- true
516
- end
517
-
518
- Gem.post_install do |installer|
519
- @post_install_hook_arg = installer
520
- end
521
-
522
- Gem.post_uninstall do |uninstaller|
523
- @post_uninstall_hook_arg = uninstaller
524
- end
525
-
526
- Gem.pre_install do |installer|
527
- @pre_install_hook_arg = installer
528
- true
529
- end
530
-
531
- Gem.pre_uninstall do |uninstaller|
532
- @pre_uninstall_hook_arg = uninstaller
533
- end
534
- end
535
-
536
- def common_installer_teardown
537
- Gem.post_build_hooks.clear
538
- Gem.post_install_hooks.clear
539
- Gem.done_installing_hooks.clear
540
- Gem.post_reset_hooks.clear
541
- Gem.post_uninstall_hooks.clear
542
- Gem.pre_install_hooks.clear
543
- Gem.pre_reset_hooks.clear
544
- Gem.pre_uninstall_hooks.clear
545
- end
546
-
547
- def without_any_upwards_gemfiles
548
- ENV["BUNDLE_GEMFILE"] = File.join(@tempdir, "Gemfile")
549
- end
550
-
551
- ##
552
- # A git_gem is used with a gem dependencies file. The gem created here
553
- # has no files, just a gem specification for the given +name+ and +version+.
554
- #
555
- # Yields the +specification+ to the block, if given
556
-
557
- def git_gem(name = 'a', version = 1)
558
- have_git?
559
-
560
- directory = File.join 'git', name
561
- directory = File.expand_path directory
562
-
563
- git_spec = Gem::Specification.new name, version do |specification|
564
- yield specification if block_given?
565
- end
566
-
567
- FileUtils.mkdir_p directory
568
-
569
- gemspec = "#{name}.gemspec"
570
-
571
- File.open File.join(directory, gemspec), 'w' do |io|
572
- io.write git_spec.to_ruby
573
- end
574
-
575
- head = nil
576
-
577
- Dir.chdir directory do
578
- unless File.exist? '.git'
579
- system @git, 'init', '--quiet'
580
- system @git, 'config', 'user.name', 'RubyGems Tests'
581
- system @git, 'config', 'user.email', 'rubygems@example'
582
- end
583
-
584
- system @git, 'add', gemspec
585
- system @git, 'commit', '-a', '-m', 'a non-empty commit message', '--quiet'
586
- head = Gem::Util.popen(@git, 'rev-parse', 'master').strip
587
- end
588
-
589
- return name, git_spec.version, directory, head
590
- end
591
-
592
- ##
593
- # Skips this test unless you have a git executable
594
-
595
- def have_git?
596
- return if in_path? @git
597
-
598
- pend 'cannot find git executable, use GIT environment variable to set'
599
- end
600
-
601
- def in_path?(executable) # :nodoc:
602
- return true if %r{\A([A-Z]:|/)} =~ executable and File.exist? executable
603
-
604
- ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
605
- File.exist? File.join directory, executable
606
- end
607
- end
608
-
609
- ##
610
- # Builds and installs the Gem::Specification +spec+
611
-
612
- def install_gem(spec, options = {})
613
- require 'rubygems/installer'
614
-
615
- gem = spec.cache_file
616
-
617
- unless File.exist? gem
618
- use_ui Gem::MockGemUi.new do
619
- Dir.chdir @tempdir do
620
- Gem::Package.build spec
621
- end
622
- end
623
-
624
- gem = File.join(@tempdir, File.basename(gem)).tap(&Gem::UNTAINT)
625
- end
626
-
627
- Gem::Installer.at(gem, options.merge({ :wrappers => true })).install
628
- end
629
-
630
- ##
631
- # Builds and installs the Gem::Specification +spec+ into the user dir
632
-
633
- def install_gem_user(spec)
634
- install_gem spec, :user_install => true
635
- end
636
-
637
- ##
638
- # Uninstalls the Gem::Specification +spec+
639
- def uninstall_gem(spec)
640
- require 'rubygems/uninstaller'
641
-
642
- Class.new(Gem::Uninstaller) do
643
- def ask_if_ok(spec)
644
- true
645
- end
646
- end.new(spec.name, :executables => true, :user_install => true).uninstall
647
- end
648
-
649
- ##
650
- # Enables pretty-print for all tests
651
-
652
- def mu_pp(obj)
653
- s = String.new
654
- s = PP.pp obj, s
655
- s = s.force_encoding(Encoding.default_external)
656
- s.chomp
657
- end
658
-
659
- ##
660
- # Reads a Marshal file at +path+
661
-
662
- def read_cache(path)
663
- File.open path.dup.tap(&Gem::UNTAINT), 'rb' do |io|
664
- Marshal.load io.read
665
- end
666
- end
667
-
668
- ##
669
- # Reads a binary file at +path+
670
-
671
- def read_binary(path)
672
- Gem.read_binary path
673
- end
674
-
675
- ##
676
- # Writes a binary file to +path+ which is relative to +@gemhome+
677
-
678
- def write_file(path)
679
- path = File.join @gemhome, path unless Pathname.new(path).absolute?
680
- dir = File.dirname path
681
- FileUtils.mkdir_p dir unless File.directory? dir
682
-
683
- File.open path, 'wb' do |io|
684
- yield io if block_given?
685
- end
686
-
687
- path
688
- end
689
-
690
- ##
691
- # Load a YAML string, the psych 3 way
692
-
693
- def load_yaml(yaml)
694
- if Psych.respond_to?(:unsafe_load)
695
- Psych.unsafe_load(yaml)
696
- else
697
- Psych.load(yaml)
698
- end
699
- end
700
-
701
- ##
702
- # Load a YAML file, the psych 3 way
703
-
704
- def load_yaml_file(file)
705
- if Psych.respond_to?(:unsafe_load_file)
706
- Psych.unsafe_load_file(file)
707
- else
708
- Psych.load_file(file)
709
- end
710
- end
711
-
712
- def all_spec_names
713
- Gem::Specification.map(&:full_name)
714
- end
715
-
716
- ##
717
- # Creates a Gem::Specification with a minimum of extra work. +name+ and
718
- # +version+ are the gem's name and version, platform, author, email,
719
- # homepage, summary and description are defaulted. The specification is
720
- # yielded for customization.
721
- #
722
- # The gem is added to the installed gems in +@gemhome+ and the runtime.
723
- #
724
- # Use this with #write_file to build an installed gem.
725
-
726
- def quick_gem(name, version='2')
727
- require 'rubygems/specification'
728
-
729
- spec = Gem::Specification.new do |s|
730
- s.platform = Gem::Platform::RUBY
731
- s.name = name
732
- s.version = version
733
- s.author = 'A User'
734
- s.email = 'example@example.com'
735
- s.homepage = 'http://example.com'
736
- s.summary = "this is a summary"
737
- s.description = "This is a test description"
738
-
739
- yield(s) if block_given?
740
- end
741
-
742
- written_path = write_file spec.spec_file do |io|
743
- io.write spec.to_ruby_for_cache
744
- end
745
-
746
- spec.loaded_from = written_path
747
-
748
- Gem::Specification.reset
749
-
750
- return spec
751
- end
752
-
753
- ##
754
- # Builds a gem from +spec+ and places it in <tt>File.join @gemhome,
755
- # 'cache'</tt>. Automatically creates files based on +spec.files+
756
-
757
- def util_build_gem(spec)
758
- dir = spec.gem_dir
759
- FileUtils.mkdir_p dir
760
-
761
- Dir.chdir dir do
762
- spec.files.each do |file|
763
- next if File.exist? file
764
- FileUtils.mkdir_p File.dirname(file)
765
-
766
- File.open file, 'w' do |fp|
767
- fp.puts "# #{file}"
768
- end
769
- end
770
-
771
- use_ui Gem::MockGemUi.new do
772
- Gem::Package.build spec
773
- end
774
-
775
- cache = spec.cache_file
776
- FileUtils.mv File.basename(cache), cache
777
- end
778
- end
779
-
780
- def util_remove_gem(spec)
781
- FileUtils.rm_rf spec.cache_file
782
- FileUtils.rm_rf spec.spec_file
783
- end
784
-
785
- ##
786
- # Removes all installed gems from +@gemhome+.
787
-
788
- def util_clear_gems
789
- FileUtils.rm_rf File.join(@gemhome, "gems")
790
- FileUtils.mkdir File.join(@gemhome, "gems")
791
- FileUtils.rm_rf File.join(@gemhome, "specifications")
792
- FileUtils.mkdir File.join(@gemhome, "specifications")
793
- Gem::Specification.reset
794
- end
795
-
796
- ##
797
- # Install the provided specs
798
-
799
- def install_specs(*specs)
800
- specs.each do |spec|
801
- Gem::Installer.for_spec(spec, :force => true).install
802
- end
803
-
804
- Gem.searcher = nil
805
- end
806
-
807
- ##
808
- # Installs the provided default specs including writing the spec file
809
-
810
- def install_default_gems(*specs)
811
- specs.each do |spec|
812
- installer = Gem::Installer.for_spec(spec, :install_as_default => true)
813
- installer.install
814
- Gem.register_default_spec(spec)
815
- end
816
- end
817
-
818
- def loaded_spec_names
819
- Gem.loaded_specs.values.map(&:full_name).sort
820
- end
821
-
822
- def unresolved_names
823
- Gem::Specification.unresolved_deps.values.map(&:to_s).sort
824
- end
825
-
826
- def new_default_spec(name, version, deps = nil, *files)
827
- spec = util_spec name, version, deps
828
-
829
- spec.loaded_from = File.join(@gemhome, "specifications", "default", spec.spec_name)
830
- spec.files = files
831
-
832
- lib_dir = File.join(@tempdir, "default_gems", "lib")
833
- lib_dir.instance_variable_set(:@gem_prelude_index, lib_dir)
834
- Gem.instance_variable_set(:@default_gem_load_paths, [*Gem.send(:default_gem_load_paths), lib_dir])
835
- $LOAD_PATH.unshift(lib_dir)
836
- files.each do |file|
837
- rb_path = File.join(lib_dir, file)
838
- FileUtils.mkdir_p(File.dirname(rb_path))
839
- File.open(rb_path, "w") do |rb|
840
- rb << "# #{file}"
841
- end
842
- end
843
-
844
- spec
845
- end
846
-
847
- ##
848
- # Creates a spec with +name+, +version+. +deps+ can specify the dependency
849
- # or a +block+ can be given for full customization of the specification.
850
-
851
- def util_spec(name, version = 2, deps = nil, *files) # :yields: specification
852
- raise "deps or block, not both" if deps and block_given?
853
-
854
- spec = Gem::Specification.new do |s|
855
- s.platform = Gem::Platform::RUBY
856
- s.name = name
857
- s.version = version
858
- s.author = 'A User'
859
- s.email = 'example@example.com'
860
- s.homepage = 'http://example.com'
861
- s.summary = "this is a summary"
862
- s.description = "This is a test description"
863
-
864
- s.files.push(*files) unless files.empty?
865
-
866
- yield s if block_given?
867
- end
868
-
869
- if deps
870
- deps.keys.each do |n|
871
- spec.add_dependency n, (deps[n] || '>= 0')
872
- end
873
- end
874
-
875
- unless files.empty?
876
- write_file spec.spec_file do |io|
877
- io.write spec.to_ruby_for_cache
878
- end
879
-
880
- util_build_gem spec
881
-
882
- FileUtils.rm spec.spec_file
883
- end
884
-
885
- return spec
886
- end
887
-
888
- ##
889
- # Creates a gem with +name+, +version+ and +deps+. The specification will
890
- # be yielded before gem creation for customization. The gem will be placed
891
- # in <tt>File.join @tempdir, 'gems'</tt>. The specification and .gem file
892
- # location are returned.
893
-
894
- def util_gem(name, version, deps = nil, &block)
895
- if deps
896
- block = proc do |s|
897
- deps.keys.each do |n|
898
- s.add_dependency n, (deps[n] || '>= 0')
899
- end
900
- end
901
- end
902
-
903
- spec = quick_gem(name, version, &block)
904
-
905
- util_build_gem spec
906
-
907
- cache_file = File.join @tempdir, 'gems', "#{spec.original_name}.gem"
908
- FileUtils.mkdir_p File.dirname cache_file
909
- FileUtils.mv spec.cache_file, cache_file
910
- FileUtils.rm spec.spec_file
911
-
912
- spec.loaded_from = nil
913
-
914
- [spec, cache_file]
915
- end
916
-
917
- ##
918
- # Gzips +data+.
919
-
920
- def util_gzip(data)
921
- out = StringIO.new
922
-
923
- Zlib::GzipWriter.wrap out do |io|
924
- io.write data
925
- end
926
-
927
- out.string
928
- end
929
-
930
- ##
931
- # Creates several default gems which all have a lib/code.rb file. The gems
932
- # are not installed but are available in the cache dir.
933
- #
934
- # +@a1+:: gem a version 1, this is the best-described gem.
935
- # +@a2+:: gem a version 2
936
- # +@a3a:: gem a version 3.a
937
- # +@a_evil9+:: gem a_evil version 9, use this to ensure similarly-named gems
938
- # don't collide with a.
939
- # +@b2+:: gem b version 2
940
- # +@c1_2+:: gem c version 1.2
941
- # +@pl1+:: gem pl version 1, this gem has a legacy platform of i386-linux.
942
- #
943
- # Additional +prerelease+ gems may also be created:
944
- #
945
- # +@a2_pre+:: gem a version 2.a
946
- # TODO: nuke this and fix tests. this should speed up a lot
947
-
948
- def util_make_gems(prerelease = false)
949
- @a1 = quick_gem 'a', '1' do |s|
950
- s.files = %w[lib/code.rb]
951
- s.require_paths = %w[lib]
952
- s.date = Gem::Specification::TODAY - 86400
953
- s.homepage = 'http://a.example.com'
954
- s.email = %w[example@example.com example2@example.com]
955
- s.authors = %w[Example Example2]
956
- s.description = <<-DESC
957
- This line is really, really long. So long, in fact, that it is more than eighty characters long! The purpose of this line is for testing wrapping behavior because sometimes people don't wrap their text to eighty characters. Without the wrapping, the text might not look good in the RSS feed.
958
-
959
- Also, a list:
960
- * An entry that\'s actually kind of sort
961
- * an entry that\'s really long, which will probably get wrapped funny. That's ok, somebody wasn't thinking straight when they made it more than eighty characters.
962
- DESC
963
- end
964
-
965
- init = proc do |s|
966
- s.files = %w[lib/code.rb]
967
- s.require_paths = %w[lib]
968
- end
969
-
970
- @a2 = quick_gem('a', '2', &init)
971
- @a3a = quick_gem('a', '3.a', &init)
972
- @a_evil9 = quick_gem('a_evil', '9', &init)
973
- @b2 = quick_gem('b', '2', &init)
974
- @c1_2 = quick_gem('c', '1.2', &init)
975
- @x = quick_gem('x', '1', &init)
976
- @dep_x = quick_gem('dep_x', '1') do |s|
977
- s.files = %w[lib/code.rb]
978
- s.require_paths = %w[lib]
979
- s.add_dependency 'x', '>= 1'
980
- end
981
-
982
- @pl1 = quick_gem 'pl', '1' do |s| # l for legacy
983
- s.files = %w[lib/code.rb]
984
- s.require_paths = %w[lib]
985
- s.platform = Gem::Platform.new 'i386-linux'
986
- s.instance_variable_set :@original_platform, 'i386-linux'
987
- end
988
-
989
- if prerelease
990
- @a2_pre = quick_gem('a', '2.a', &init)
991
- write_file File.join(*%W[gems #{@a2_pre.original_name} lib code.rb])
992
- util_build_gem @a2_pre
993
- end
994
-
995
- write_file File.join(*%W[gems #{@a1.original_name} lib code.rb])
996
- write_file File.join(*%W[gems #{@a2.original_name} lib code.rb])
997
- write_file File.join(*%W[gems #{@a3a.original_name} lib code.rb])
998
- write_file File.join(*%W[gems #{@a_evil9.original_name} lib code.rb])
999
- write_file File.join(*%W[gems #{@b2.original_name} lib code.rb])
1000
- write_file File.join(*%W[gems #{@c1_2.original_name} lib code.rb])
1001
- write_file File.join(*%W[gems #{@pl1.original_name} lib code.rb])
1002
- write_file File.join(*%W[gems #{@x.original_name} lib code.rb])
1003
- write_file File.join(*%W[gems #{@dep_x.original_name} lib code.rb])
1004
-
1005
- [@a1, @a2, @a3a, @a_evil9, @b2, @c1_2, @pl1, @x, @dep_x].each do |spec|
1006
- util_build_gem spec
1007
- end
1008
-
1009
- FileUtils.rm_r File.join(@gemhome, "gems", @pl1.original_name)
1010
- end
1011
-
1012
- ##
1013
- # Set the platform to +arch+
1014
-
1015
- def util_set_arch(arch)
1016
- RbConfig::CONFIG['arch'] = arch
1017
- platform = Gem::Platform.new arch
1018
-
1019
- Gem.instance_variable_set :@platforms, nil
1020
- Gem::Platform.instance_variable_set :@local, nil
1021
-
1022
- yield if block_given?
1023
-
1024
- platform
1025
- end
1026
-
1027
- ##
1028
- # Add +spec+ to +@fetcher+ serving the data in the file +path+.
1029
- # +repo+ indicates which repo to make +spec+ appear to be in.
1030
-
1031
- def add_to_fetcher(spec, path=nil, repo=@gem_repo)
1032
- path ||= spec.cache_file
1033
- @fetcher.data["#{@gem_repo}gems/#{spec.file_name}"] = read_binary(path)
1034
- end
1035
-
1036
- ##
1037
- # Sets up Gem::SpecFetcher to return information from the gems in +specs+.
1038
-
1039
- def util_setup_spec_fetcher(*specs)
1040
- all_specs = Gem::Specification.to_a + specs
1041
- Gem::Specification._resort! all_specs
1042
-
1043
- spec_fetcher = Gem::SpecFetcher.fetcher
1044
-
1045
- prerelease, all = all_specs.partition {|spec| spec.version.prerelease? }
1046
- latest = Gem::Specification._latest_specs all_specs
1047
-
1048
- spec_fetcher.specs[@uri] = []
1049
- all.each do |spec|
1050
- spec_fetcher.specs[@uri] << spec.name_tuple
1051
- end
1052
-
1053
- spec_fetcher.latest_specs[@uri] = []
1054
- latest.each do |spec|
1055
- spec_fetcher.latest_specs[@uri] << spec.name_tuple
1056
- end
1057
-
1058
- spec_fetcher.prerelease_specs[@uri] = []
1059
- prerelease.each do |spec|
1060
- spec_fetcher.prerelease_specs[@uri] << spec.name_tuple
1061
- end
1062
-
1063
- # HACK for test_download_to_cache
1064
- unless Gem::RemoteFetcher === @fetcher
1065
- v = Gem.marshal_version
1066
-
1067
- specs = all.map {|spec| spec.name_tuple }
1068
- s_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic specs
1069
-
1070
- latest_specs = latest.map do |spec|
1071
- spec.name_tuple
1072
- end
1073
-
1074
- l_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic latest_specs
1075
-
1076
- prerelease_specs = prerelease.map {|spec| spec.name_tuple }
1077
- p_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic prerelease_specs
1078
-
1079
- @fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
1080
- @fetcher.data["#{@gem_repo}latest_specs.#{v}.gz"] = l_zip
1081
- @fetcher.data["#{@gem_repo}prerelease_specs.#{v}.gz"] = p_zip
1082
-
1083
- write_marshalled_gemspecs(*all_specs)
1084
- end
1085
-
1086
- nil # force errors
1087
- end
1088
-
1089
- def write_marshalled_gemspecs(*all_specs)
1090
- v = Gem.marshal_version
1091
-
1092
- all_specs.each do |spec|
1093
- path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
1094
- data = Marshal.dump spec
1095
- data_deflate = Zlib::Deflate.deflate data
1096
- @fetcher.data[path] = data_deflate
1097
- end
1098
- end
1099
-
1100
- ##
1101
- # Deflates +data+
1102
-
1103
- def util_zip(data)
1104
- Zlib::Deflate.deflate data
1105
- end
1106
-
1107
- def util_set_RUBY_VERSION(version, patchlevel, revision, description, engine = "ruby", engine_version = nil)
1108
- if Gem.instance_variables.include? :@ruby_version
1109
- Gem.send :remove_instance_variable, :@ruby_version
1110
- end
1111
-
1112
- @RUBY_VERSION = RUBY_VERSION
1113
- @RUBY_PATCHLEVEL = RUBY_PATCHLEVEL if defined?(RUBY_PATCHLEVEL)
1114
- @RUBY_REVISION = RUBY_REVISION if defined?(RUBY_REVISION)
1115
- @RUBY_DESCRIPTION = RUBY_DESCRIPTION
1116
- @RUBY_ENGINE = RUBY_ENGINE
1117
- @RUBY_ENGINE_VERSION = RUBY_ENGINE_VERSION if defined?(RUBY_ENGINE_VERSION)
1118
-
1119
- util_clear_RUBY_VERSION
1120
-
1121
- Object.const_set :RUBY_VERSION, version
1122
- Object.const_set :RUBY_PATCHLEVEL, patchlevel
1123
- Object.const_set :RUBY_REVISION, revision
1124
- Object.const_set :RUBY_DESCRIPTION, description
1125
- Object.const_set :RUBY_ENGINE, engine
1126
- Object.const_set :RUBY_ENGINE_VERSION, engine_version if engine_version
1127
- end
1128
-
1129
- def util_restore_RUBY_VERSION
1130
- util_clear_RUBY_VERSION
1131
-
1132
- Object.const_set :RUBY_VERSION, @RUBY_VERSION
1133
- Object.const_set :RUBY_PATCHLEVEL, @RUBY_PATCHLEVEL if
1134
- defined?(@RUBY_PATCHLEVEL)
1135
- Object.const_set :RUBY_REVISION, @RUBY_REVISION if
1136
- defined?(@RUBY_REVISION)
1137
- Object.const_set :RUBY_DESCRIPTION, @RUBY_DESCRIPTION
1138
- Object.const_set :RUBY_ENGINE, @RUBY_ENGINE
1139
- Object.const_set :RUBY_ENGINE_VERSION, @RUBY_ENGINE_VERSION if
1140
- defined?(@RUBY_ENGINE_VERSION)
1141
- end
1142
-
1143
- def util_clear_RUBY_VERSION
1144
- Object.send :remove_const, :RUBY_VERSION
1145
- Object.send :remove_const, :RUBY_PATCHLEVEL if defined?(RUBY_PATCHLEVEL)
1146
- Object.send :remove_const, :RUBY_REVISION if defined?(RUBY_REVISION)
1147
- Object.send :remove_const, :RUBY_DESCRIPTION if defined?(RUBY_DESCRIPTION)
1148
- Object.send :remove_const, :RUBY_ENGINE
1149
- Object.send :remove_const, :RUBY_ENGINE_VERSION if defined?(RUBY_ENGINE_VERSION)
1150
- end
1151
-
1152
- ##
1153
- # Is this test being run on a Windows platform?
1154
-
1155
- def self.win_platform?
1156
- Gem.win_platform?
1157
- end
1158
-
1159
- ##
1160
- # Is this test being run on a Windows platform?
1161
-
1162
- def win_platform?
1163
- Gem.win_platform?
1164
- end
1165
-
1166
- ##
1167
- # Is this test being run on a Java platform?
1168
-
1169
- def self.java_platform?
1170
- Gem.java_platform?
1171
- end
1172
-
1173
- ##
1174
- # Is this test being run on a Java platform?
1175
-
1176
- def java_platform?
1177
- Gem.java_platform?
1178
- end
1179
-
1180
- ##
1181
- # Returns whether or not we're on a version of Ruby built with VC++ (or
1182
- # Borland) versus Cygwin, Mingw, etc.
1183
-
1184
- def self.vc_windows?
1185
- RUBY_PLATFORM.match('mswin')
1186
- end
1187
-
1188
- ##
1189
- # Returns whether or not we're on a version of Ruby built with VC++ (or
1190
- # Borland) versus Cygwin, Mingw, etc.
1191
-
1192
- def vc_windows?
1193
- RUBY_PLATFORM.match('mswin')
1194
- end
1195
-
1196
- ##
1197
- # Is this test being run on a ruby/ruby repository?
1198
- #
1199
-
1200
- def ruby_repo?
1201
- !ENV["GEM_COMMAND"].nil?
1202
- end
1203
-
1204
- ##
1205
- # Returns the make command for the current platform. For versions of Ruby
1206
- # built on MS Windows with VC++ or Borland it will return 'nmake'. On all
1207
- # other platforms, including Cygwin, it will return 'make'.
1208
-
1209
- def self.make_command
1210
- ENV["make"] || ENV["MAKE"] || (vc_windows? ? 'nmake' : 'make')
1211
- end
1212
-
1213
- ##
1214
- # Returns the make command for the current platform. For versions of Ruby
1215
- # built on MS Windows with VC++ or Borland it will return 'nmake'. On all
1216
- # other platforms, including Cygwin, it will return 'make'.
1217
-
1218
- def make_command
1219
- ENV["make"] || ENV["MAKE"] || (vc_windows? ? 'nmake' : 'make')
1220
- end
1221
-
1222
- ##
1223
- # Returns whether or not the nmake command could be found.
1224
-
1225
- def nmake_found?
1226
- system('nmake /? 1>NUL 2>&1')
1227
- end
1228
-
1229
- # In case we're building docs in a background process, this method waits for
1230
- # that process to exit (or if it's already been reaped, or never happened,
1231
- # swallows the Errno::ECHILD error).
1232
- def wait_for_child_process_to_exit
1233
- Process.wait if Process.respond_to?(:fork)
1234
- rescue Errno::ECHILD
1235
- end
1236
-
1237
- ##
1238
- # Allows tests to use a random (but controlled) port number instead of
1239
- # a hardcoded one. This helps CI tools when running parallels builds on
1240
- # the same builder slave.
1241
-
1242
- def self.process_based_port
1243
- @@process_based_port ||= 8000 + $$ % 1000
1244
- end
1245
-
1246
- ##
1247
- # See ::process_based_port
1248
-
1249
- def process_based_port
1250
- self.class.process_based_port
1251
- end
1252
-
1253
- ##
1254
- # Allows the proper version of +rake+ to be used for the test.
1255
-
1256
- def build_rake_in(good=true)
1257
- gem_ruby = Gem.ruby
1258
- Gem.ruby = self.class.rubybin
1259
- env_rake = ENV["rake"]
1260
- rake = (good ? @@good_rake : @@bad_rake)
1261
- ENV["rake"] = rake
1262
- yield rake
1263
- ensure
1264
- Gem.ruby = gem_ruby
1265
- if env_rake
1266
- ENV["rake"] = env_rake
1267
- else
1268
- ENV.delete("rake")
1269
- end
1270
- end
1271
-
1272
- ##
1273
- # Finds the path to the Ruby executable
1274
-
1275
- def self.rubybin
1276
- ruby = ENV["RUBY"]
1277
- return ruby if ruby
1278
- ruby = "ruby"
1279
- rubyexe = "#{ruby}.exe"
1280
-
1281
- 3.times do
1282
- if File.exist? ruby and File.executable? ruby and !File.directory? ruby
1283
- return File.expand_path(ruby)
1284
- end
1285
- if File.exist? rubyexe and File.executable? rubyexe
1286
- return File.expand_path(rubyexe)
1287
- end
1288
- ruby = File.join("..", ruby)
1289
- end
1290
-
1291
- begin
1292
- Gem.ruby
1293
- rescue LoadError
1294
- "ruby"
1295
- end
1296
- end
1297
-
1298
- def ruby_with_rubygems_in_load_path
1299
- [Gem.ruby, "-I", rubygems_path]
1300
- end
1301
-
1302
- def rubygems_path
1303
- $LOAD_PATH.find {|p| p == File.dirname($LOADED_FEATURES.find {|f| f.end_with?("/rubygems.rb") }) }
1304
- end
1305
-
1306
- def with_clean_path_to_ruby
1307
- orig_ruby = Gem.ruby
1308
-
1309
- Gem.instance_variable_set :@ruby, nil
1310
-
1311
- yield
1312
- ensure
1313
- Gem.instance_variable_set :@ruby, orig_ruby
1314
- end
1315
-
1316
- def with_internal_encoding(encoding)
1317
- int_enc = Encoding.default_internal
1318
- silence_warnings { Encoding.default_internal = encoding }
1319
-
1320
- yield
1321
- ensure
1322
- silence_warnings { Encoding.default_internal = int_enc }
1323
- end
1324
-
1325
- def silence_warnings
1326
- old_verbose, $VERBOSE = $VERBOSE, false
1327
- yield
1328
- ensure
1329
- $VERBOSE = old_verbose
1330
- end
1331
-
1332
- class << self
1333
- # :nodoc:
1334
- ##
1335
- # Return the join path, with escaping backticks, dollars, and
1336
- # double-quotes. Unlike `shellescape`, equal-sign is not escaped.
1337
-
1338
- private
1339
-
1340
- def escape_path(*path)
1341
- path = File.join(*path)
1342
- if %r{\A[-+:/=@,.\w]+\z} =~ path
1343
- path
1344
- else
1345
- "\"#{path.gsub(/[`$"]/, '\\&')}\""
1346
- end
1347
- end
1348
- end
1349
-
1350
- @@good_rake = "#{rubybin} #{escape_path(__dir__, 'good_rake.rb')}"
1351
- @@bad_rake = "#{rubybin} #{escape_path(__dir__, 'bad_rake.rb')}"
1352
-
1353
- ##
1354
- # Construct a new Gem::Dependency.
1355
-
1356
- def dep(name, *requirements)
1357
- Gem::Dependency.new name, *requirements
1358
- end
1359
-
1360
- ##
1361
- # Constructs a Gem::Resolver::DependencyRequest from a
1362
- # Gem::Dependency +dep+, a +from_name+ and +from_version+ requesting the
1363
- # dependency and a +parent+ DependencyRequest
1364
-
1365
- def dependency_request(dep, from_name, from_version, parent = nil)
1366
- remote = Gem::Source.new @uri
1367
-
1368
- unless parent
1369
- parent_dep = dep from_name, from_version
1370
- parent = Gem::Resolver::DependencyRequest.new parent_dep, nil
1371
- end
1372
-
1373
- spec = Gem::Resolver::IndexSpecification.new \
1374
- nil, from_name, from_version, remote, Gem::Platform::RUBY
1375
- activation = Gem::Resolver::ActivationRequest.new spec, parent
1376
-
1377
- Gem::Resolver::DependencyRequest.new dep, activation
1378
- end
1379
-
1380
- ##
1381
- # Constructs a new Gem::Requirement.
1382
-
1383
- def req(*requirements)
1384
- return requirements.first if Gem::Requirement === requirements.first
1385
- Gem::Requirement.create requirements
1386
- end
1387
-
1388
- ##
1389
- # Constructs a new Gem::Specification.
1390
-
1391
- def spec(name, version, &block)
1392
- Gem::Specification.new name, v(version), &block
1393
- end
1394
-
1395
- ##
1396
- # Creates a SpecFetcher pre-filled with the gems or specs defined in the
1397
- # block.
1398
- #
1399
- # Yields a +fetcher+ object that responds to +spec+ and +gem+. +spec+ adds
1400
- # a specification to the SpecFetcher while +gem+ adds both a specification
1401
- # and the gem data to the RemoteFetcher so the built gem can be downloaded.
1402
- #
1403
- # If only the a-3 gem is supposed to be downloaded you can save setup
1404
- # time by creating only specs for the other versions:
1405
- #
1406
- # spec_fetcher do |fetcher|
1407
- # fetcher.spec 'a', 1
1408
- # fetcher.spec 'a', 2, 'b' => 3 # dependency on b = 3
1409
- # fetcher.gem 'a', 3 do |spec|
1410
- # # spec is a Gem::Specification
1411
- # # ...
1412
- # end
1413
- # end
1414
-
1415
- def spec_fetcher(repository = @gem_repo)
1416
- Gem::TestCase::SpecFetcherSetup.declare self, repository do |spec_fetcher_setup|
1417
- yield spec_fetcher_setup if block_given?
1418
- end
1419
- end
1420
-
1421
- ##
1422
- # Construct a new Gem::Version.
1423
-
1424
- def v(string)
1425
- Gem::Version.create string
1426
- end
1427
-
1428
- ##
1429
- # A vendor_gem is used with a gem dependencies file. The gem created here
1430
- # has no files, just a gem specification for the given +name+ and +version+.
1431
- #
1432
- # Yields the +specification+ to the block, if given
1433
-
1434
- def vendor_gem(name = 'a', version = 1)
1435
- directory = File.join 'vendor', name
1436
-
1437
- FileUtils.mkdir_p directory
1438
-
1439
- save_gemspec name, version, directory
1440
- end
1441
-
1442
- ##
1443
- # create_gemspec creates gem specification in given +directory+ or '.'
1444
- # for the given +name+ and +version+.
1445
- #
1446
- # Yields the +specification+ to the block, if given
1447
-
1448
- def save_gemspec(name = 'a', version = 1, directory = '.')
1449
- vendor_spec = Gem::Specification.new name, version do |specification|
1450
- yield specification if block_given?
1451
- end
1452
-
1453
- File.open File.join(directory, "#{name}.gemspec"), 'w' do |io|
1454
- io.write vendor_spec.to_ruby
1455
- end
1456
-
1457
- return name, vendor_spec.version, directory
1458
- end
1459
-
1460
- ##
1461
- # The StaticSet is a static set of gem specifications used for testing only.
1462
- # It is available by requiring Gem::TestCase.
1463
-
1464
- class StaticSet < Gem::Resolver::Set
1465
- ##
1466
- # A StaticSet ignores remote because it has a fixed set of gems.
1467
-
1468
- attr_accessor :remote
1469
-
1470
- ##
1471
- # Creates a new StaticSet for the given +specs+
1472
-
1473
- def initialize(specs)
1474
- super()
1475
-
1476
- @specs = specs
1477
-
1478
- @remote = true
1479
- end
1480
-
1481
- ##
1482
- # Adds +spec+ to this set.
1483
-
1484
- def add(spec)
1485
- @specs << spec
1486
- end
1487
-
1488
- ##
1489
- # Finds +dep+ in this set.
1490
-
1491
- def find_spec(dep)
1492
- @specs.reverse_each do |s|
1493
- return s if dep.matches_spec? s
1494
- end
1495
- end
1496
-
1497
- ##
1498
- # Finds all gems matching +dep+ in this set.
1499
-
1500
- def find_all(dep)
1501
- @specs.find_all {|s| dep.match? s, @prerelease }
1502
- end
1503
-
1504
- ##
1505
- # Loads a Gem::Specification from this set which has the given +name+,
1506
- # version +ver+, +platform+. The +source+ is ignored.
1507
-
1508
- def load_spec(name, ver, platform, source)
1509
- dep = Gem::Dependency.new name, ver
1510
- spec = find_spec dep
1511
-
1512
- Gem::Specification.new spec.name, spec.version do |s|
1513
- s.platform = spec.platform
1514
- end
1515
- end
1516
-
1517
- def prefetch(reqs) # :nodoc:
1518
- end
1519
- end
1520
-
1521
- ##
1522
- # Loads certificate named +cert_name+ from <tt>test/rubygems/</tt>.
1523
-
1524
- def self.load_cert(cert_name)
1525
- cert_file = cert_path cert_name
1526
-
1527
- cert = File.read cert_file
1528
-
1529
- OpenSSL::X509::Certificate.new cert
1530
- end
1531
-
1532
- ##
1533
- # Returns the path to the certificate named +cert_name+ from
1534
- # <tt>test/rubygems/</tt>.
1535
-
1536
- def self.cert_path(cert_name)
1537
- if 32 == (Time.at(2**32) rescue 32)
1538
- cert_file = "#{__dir__}/#{cert_name}_cert_32.pem"
1539
-
1540
- return cert_file if File.exist? cert_file
1541
- end
1542
-
1543
- "#{__dir__}/#{cert_name}_cert.pem"
1544
- end
1545
-
1546
- ##
1547
- # Loads a private key named +key_name+ with +passphrase+ in <tt>test/rubygems/</tt>
1548
-
1549
- def self.load_key(key_name, passphrase = nil)
1550
- key_file = key_path key_name
1551
-
1552
- key = File.read key_file
1553
-
1554
- OpenSSL::PKey.read key, passphrase
1555
- end
1556
-
1557
- ##
1558
- # Returns the path to the key named +key_name+ from <tt>test/rubygems</tt>
1559
-
1560
- def self.key_path(key_name)
1561
- "#{__dir__}/#{key_name}_key.pem"
1562
- end
1563
-
1564
- # :stopdoc:
1565
- # only available in RubyGems tests
1566
-
1567
- PRIVATE_KEY_PASSPHRASE = 'Foo bar'.freeze
1568
-
1569
- begin
1570
- PRIVATE_KEY = load_key 'private'
1571
- PRIVATE_KEY_PATH = key_path 'private'
1572
-
1573
- # ENCRYPTED_PRIVATE_KEY is PRIVATE_KEY encrypted with PRIVATE_KEY_PASSPHRASE
1574
- ENCRYPTED_PRIVATE_KEY = load_key 'encrypted_private', PRIVATE_KEY_PASSPHRASE
1575
- ENCRYPTED_PRIVATE_KEY_PATH = key_path 'encrypted_private'
1576
-
1577
- PUBLIC_KEY = PRIVATE_KEY.public_key
1578
-
1579
- PUBLIC_CERT = load_cert 'public'
1580
- PUBLIC_CERT_PATH = cert_path 'public'
1581
- rescue Errno::ENOENT
1582
- PRIVATE_KEY = nil
1583
- PUBLIC_KEY = nil
1584
- PUBLIC_CERT = nil
1585
- end if Gem::HAVE_OPENSSL
1586
- end
1587
-
1588
- # https://github.com/seattlerb/minitest/blob/13c48a03d84a2a87855a4de0c959f96800100357/lib/minitest/mock.rb#L192
1589
- class Object
1590
- def stub(name, val_or_callable, *block_args)
1591
- new_name = "__minitest_stub__#{name}"
1592
-
1593
- metaclass = class << self; self; end
1594
-
1595
- if respond_to? name and not methods.map(&:to_s).include? name.to_s
1596
- metaclass.send :define_method, name do |*args|
1597
- super(*args)
1598
- end
1599
- end
1600
-
1601
- metaclass.send :alias_method, new_name, name
1602
-
1603
- metaclass.send :define_method, name do |*args, &blk|
1604
- if val_or_callable.respond_to? :call
1605
- val_or_callable.call(*args, &blk)
1606
- else
1607
- blk.call(*block_args) if blk
1608
- val_or_callable
1609
- end
1610
- end
1611
-
1612
- metaclass.send(:ruby2_keywords, name) if metaclass.respond_to?(:ruby2_keywords, true)
1613
-
1614
- yield self
1615
- ensure
1616
- metaclass.send :undef_method, name
1617
- metaclass.send :alias_method, name, new_name
1618
- metaclass.send :undef_method, new_name
1619
- end unless method_defined?(:stub) # lib/resolv/test_dns.rb also has the same method definition
1620
- end
1621
-
1622
- require_relative 'utilities'