rubygems-update 3.3.18 → 3.4.19

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 (615) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1429 -1064
  3. data/CONTRIBUTING.md +31 -8
  4. data/Manifest.txt +61 -36
  5. data/POLICIES.md +55 -20
  6. data/README.md +19 -6
  7. data/bundler/CHANGELOG.md +457 -1
  8. data/bundler/README.md +3 -6
  9. data/bundler/UPGRADING.md +11 -4
  10. data/bundler/bundler.gemspec +8 -10
  11. data/bundler/exe/bundle +5 -16
  12. data/bundler/lib/bundler/build_metadata.rb +2 -2
  13. data/bundler/lib/bundler/cli/add.rb +1 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +2 -0
  17. data/bundler/lib/bundler/cli/console.rb +2 -2
  18. data/bundler/lib/bundler/cli/doctor.rb +4 -6
  19. data/bundler/lib/bundler/cli/gem.rb +62 -40
  20. data/bundler/lib/bundler/cli/info.rb +1 -1
  21. data/bundler/lib/bundler/cli/init.rb +6 -2
  22. data/bundler/lib/bundler/cli/install.rb +8 -6
  23. data/bundler/lib/bundler/cli/lock.rb +8 -5
  24. data/bundler/lib/bundler/cli/open.rb +6 -4
  25. data/bundler/lib/bundler/cli/outdated.rb +14 -7
  26. data/bundler/lib/bundler/cli/platform.rb +7 -5
  27. data/bundler/lib/bundler/cli/viz.rb +1 -1
  28. data/bundler/lib/bundler/cli.rb +53 -7
  29. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  30. data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
  31. data/bundler/lib/bundler/constants.rb +1 -1
  32. data/bundler/lib/bundler/current_ruby.rb +16 -5
  33. data/bundler/lib/bundler/definition.rb +262 -133
  34. data/bundler/lib/bundler/dependency.rb +20 -86
  35. data/bundler/lib/bundler/digest.rb +1 -1
  36. data/bundler/lib/bundler/dsl.rb +6 -7
  37. data/bundler/lib/bundler/endpoint_specification.rb +2 -13
  38. data/bundler/lib/bundler/env.rb +2 -2
  39. data/bundler/lib/bundler/environment_preserver.rb +3 -2
  40. data/bundler/lib/bundler/errors.rb +1 -11
  41. data/bundler/lib/bundler/feature_flag.rb +0 -2
  42. data/bundler/lib/bundler/fetcher/compact_index.rb +11 -13
  43. data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
  44. data/bundler/lib/bundler/fetcher/downloader.rb +4 -5
  45. data/bundler/lib/bundler/fetcher/index.rb +1 -2
  46. data/bundler/lib/bundler/fetcher.rb +21 -15
  47. data/bundler/lib/bundler/force_platform.rb +18 -0
  48. data/bundler/lib/bundler/friendly_errors.rb +1 -4
  49. data/bundler/lib/bundler/gem_helper.rb +3 -4
  50. data/bundler/lib/bundler/gem_helpers.rb +7 -2
  51. data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
  52. data/bundler/lib/bundler/graph.rb +3 -3
  53. data/bundler/lib/bundler/index.rb +13 -47
  54. data/bundler/lib/bundler/injector.rb +5 -4
  55. data/bundler/lib/bundler/inline.rb +9 -11
  56. data/bundler/lib/bundler/installer/parallel_installer.rb +4 -34
  57. data/bundler/lib/bundler/installer/standalone.rb +13 -9
  58. data/bundler/lib/bundler/installer.rb +17 -29
  59. data/bundler/lib/bundler/lazy_specification.rb +54 -53
  60. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  61. data/bundler/lib/bundler/lockfile_parser.rb +17 -16
  62. data/bundler/lib/bundler/man/bundle-add.1 +6 -2
  63. data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
  64. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-cache.1 +9 -3
  66. data/bundler/lib/bundler/man/bundle-cache.1.ronn +9 -2
  67. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  68. data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
  69. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  70. data/bundler/lib/bundler/man/bundle-config.1 +26 -10
  71. data/bundler/lib/bundler/man/bundle-config.1.ronn +17 -10
  72. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  73. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  74. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  75. data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
  76. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
  77. data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
  78. data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
  79. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  80. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  81. data/bundler/lib/bundler/man/bundle-info.1 +3 -3
  82. data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
  83. data/bundler/lib/bundler/man/bundle-init.1 +5 -1
  84. data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
  85. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  86. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  87. data/bundler/lib/bundler/man/bundle-install.1 +5 -30
  88. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -29
  89. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  90. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  91. data/bundler/lib/bundler/man/bundle-open.1 +22 -2
  92. data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
  93. data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
  94. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
  95. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  96. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  97. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  98. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  99. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  100. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  101. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  102. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  103. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  104. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  105. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  106. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  107. data/bundler/lib/bundler/man/bundle.1 +15 -10
  108. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  109. data/bundler/lib/bundler/man/gemfile.5 +55 -55
  110. data/bundler/lib/bundler/man/gemfile.5.ronn +57 -53
  111. data/bundler/lib/bundler/man/index.txt +4 -0
  112. data/bundler/lib/bundler/match_metadata.rb +13 -0
  113. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  114. data/bundler/lib/bundler/mirror.rb +5 -7
  115. data/bundler/lib/bundler/plugin/index.rb +5 -5
  116. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
  117. data/bundler/lib/bundler/plugin/installer.rb +5 -2
  118. data/bundler/lib/bundler/plugin.rb +3 -1
  119. data/bundler/lib/bundler/remote_specification.rb +7 -12
  120. data/bundler/lib/bundler/resolver/base.rb +107 -0
  121. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  122. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  123. data/bundler/lib/bundler/resolver/package.rb +72 -0
  124. data/bundler/lib/bundler/resolver/root.rb +25 -0
  125. data/bundler/lib/bundler/resolver/spec_group.rb +42 -71
  126. data/bundler/lib/bundler/resolver.rb +335 -328
  127. data/bundler/lib/bundler/ruby_dsl.rb +7 -1
  128. data/bundler/lib/bundler/ruby_version.rb +8 -8
  129. data/bundler/lib/bundler/rubygems_ext.rb +100 -9
  130. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -14
  131. data/bundler/lib/bundler/rubygems_integration.rb +11 -15
  132. data/bundler/lib/bundler/runtime.rb +2 -6
  133. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  134. data/bundler/lib/bundler/settings.rb +5 -11
  135. data/bundler/lib/bundler/setup.rb +4 -1
  136. data/bundler/lib/bundler/shared_helpers.rb +3 -3
  137. data/bundler/lib/bundler/source/git/git_proxy.rb +237 -74
  138. data/bundler/lib/bundler/source/git.rb +55 -30
  139. data/bundler/lib/bundler/source/metadata.rb +1 -2
  140. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  141. data/bundler/lib/bundler/source/path.rb +6 -6
  142. data/bundler/lib/bundler/source/rubygems.rb +26 -81
  143. data/bundler/lib/bundler/source.rb +1 -1
  144. data/bundler/lib/bundler/source_list.rb +8 -2
  145. data/bundler/lib/bundler/spec_set.rb +60 -37
  146. data/bundler/lib/bundler/templates/Executable +1 -1
  147. data/bundler/lib/bundler/templates/Executable.bundler +5 -10
  148. data/bundler/lib/bundler/templates/Executable.standalone +2 -0
  149. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  150. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  151. data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
  152. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -1
  153. data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
  154. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  155. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  156. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  157. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  158. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  159. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  160. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  161. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  162. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  163. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +9 -2
  164. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  165. data/bundler/lib/bundler/ui/shell.rb +35 -12
  166. data/bundler/lib/bundler/ui/silent.rb +21 -5
  167. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  168. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  169. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  170. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  171. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1351 -409
  172. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  173. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  174. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  175. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  176. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  177. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  178. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  179. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  180. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  181. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  182. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  183. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  184. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  185. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  186. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  187. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  188. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  189. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  190. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  192. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  193. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  194. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  195. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  196. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  197. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  198. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  199. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  200. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  201. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +15 -9
  202. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -6
  203. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  204. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  205. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  206. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  207. data/bundler/lib/bundler/vendored_persistent.rb +1 -33
  208. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  209. data/bundler/lib/bundler/version.rb +5 -1
  210. data/bundler/lib/bundler/worker.rb +5 -7
  211. data/bundler/lib/bundler.rb +25 -77
  212. data/{bin → exe}/gem +4 -5
  213. data/{bin → exe}/update_rubygems +12 -10
  214. data/lib/rubygems/available_set.rb +4 -3
  215. data/lib/rubygems/basic_specification.rb +5 -4
  216. data/lib/rubygems/bundler_version_finder.rb +2 -2
  217. data/lib/rubygems/command.rb +41 -32
  218. data/lib/rubygems/command_manager.rb +30 -15
  219. data/lib/rubygems/commands/build_command.rb +12 -8
  220. data/lib/rubygems/commands/cert_command.rb +34 -33
  221. data/lib/rubygems/commands/check_command.rb +21 -20
  222. data/lib/rubygems/commands/cleanup_command.rb +18 -17
  223. data/lib/rubygems/commands/contents_command.rb +14 -13
  224. data/lib/rubygems/commands/dependency_command.rb +17 -16
  225. data/lib/rubygems/commands/environment_command.rb +6 -5
  226. data/lib/rubygems/commands/exec_command.rb +249 -0
  227. data/lib/rubygems/commands/fetch_command.rb +10 -9
  228. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  229. data/lib/rubygems/commands/help_command.rb +7 -6
  230. data/lib/rubygems/commands/info_command.rb +3 -3
  231. data/lib/rubygems/commands/install_command.rb +28 -23
  232. data/lib/rubygems/commands/list_command.rb +4 -3
  233. data/lib/rubygems/commands/lock_command.rb +5 -4
  234. data/lib/rubygems/commands/mirror_command.rb +4 -3
  235. data/lib/rubygems/commands/open_command.rb +10 -9
  236. data/lib/rubygems/commands/outdated_command.rb +6 -5
  237. data/lib/rubygems/commands/owner_command.rb +17 -14
  238. data/lib/rubygems/commands/pristine_command.rb +46 -36
  239. data/lib/rubygems/commands/push_command.rb +9 -8
  240. data/lib/rubygems/commands/query_command.rb +9 -8
  241. data/lib/rubygems/commands/rdoc_command.rb +21 -19
  242. data/lib/rubygems/commands/search_command.rb +4 -3
  243. data/lib/rubygems/commands/server_command.rb +4 -3
  244. data/lib/rubygems/commands/setup_command.rb +97 -106
  245. data/lib/rubygems/commands/signin_command.rb +10 -9
  246. data/lib/rubygems/commands/signout_command.rb +8 -7
  247. data/lib/rubygems/commands/sources_command.rb +22 -21
  248. data/lib/rubygems/commands/specification_command.rb +14 -13
  249. data/lib/rubygems/commands/stale_command.rb +3 -2
  250. data/lib/rubygems/commands/uninstall_command.rb +44 -40
  251. data/lib/rubygems/commands/unpack_command.rb +14 -13
  252. data/lib/rubygems/commands/update_command.rb +42 -63
  253. data/lib/rubygems/commands/which_command.rb +8 -7
  254. data/lib/rubygems/commands/yank_command.rb +12 -11
  255. data/lib/rubygems/config_file.rb +55 -21
  256. data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
  257. data/lib/rubygems/core_ext/kernel_require.rb +109 -115
  258. data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
  259. data/lib/rubygems/core_ext/tcpsocket_init.rb +3 -1
  260. data/lib/rubygems/defaults.rb +33 -18
  261. data/lib/rubygems/dependency.rb +15 -11
  262. data/lib/rubygems/dependency_installer.rb +38 -37
  263. data/lib/rubygems/dependency_list.rb +7 -6
  264. data/lib/rubygems/deprecate.rb +3 -2
  265. data/lib/rubygems/doctor.rb +19 -18
  266. data/lib/rubygems/errors.rb +3 -2
  267. data/lib/rubygems/exceptions.rb +16 -8
  268. data/lib/rubygems/ext/build_error.rb +2 -1
  269. data/lib/rubygems/ext/builder.rb +37 -21
  270. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
  271. data/lib/rubygems/ext/cargo_builder.rb +150 -111
  272. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  273. data/lib/rubygems/ext/configure_builder.rb +2 -1
  274. data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
  275. data/lib/rubygems/ext/rake_builder.rb +7 -5
  276. data/lib/rubygems/ext.rb +8 -7
  277. data/lib/rubygems/gem_runner.rb +6 -5
  278. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  279. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  280. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  281. data/lib/rubygems/gemcutter_utilities.rb +90 -34
  282. data/lib/rubygems/indexer.rb +29 -28
  283. data/lib/rubygems/install_default_message.rb +3 -2
  284. data/lib/rubygems/install_message.rb +3 -2
  285. data/lib/rubygems/install_update_options.rb +56 -55
  286. data/lib/rubygems/installer.rb +54 -46
  287. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  288. data/lib/rubygems/local_remote_options.rb +19 -20
  289. data/lib/rubygems/mock_gem_ui.rb +3 -2
  290. data/lib/rubygems/name_tuple.rb +5 -4
  291. data/lib/rubygems/optparse/lib/optparse.rb +20 -15
  292. data/lib/rubygems/optparse.rb +1 -1
  293. data/lib/rubygems/package/digest_io.rb +1 -0
  294. data/lib/rubygems/package/file_source.rb +3 -2
  295. data/lib/rubygems/package/io_source.rb +1 -0
  296. data/lib/rubygems/package/old.rb +9 -8
  297. data/lib/rubygems/package/source.rb +1 -0
  298. data/lib/rubygems/package/tar_header.rb +63 -62
  299. data/lib/rubygems/package/tar_reader/entry.rb +91 -9
  300. data/lib/rubygems/package/tar_reader.rb +2 -29
  301. data/lib/rubygems/package/tar_writer.rb +8 -7
  302. data/lib/rubygems/package.rb +64 -48
  303. data/lib/rubygems/package_task.rb +5 -4
  304. data/lib/rubygems/path_support.rb +1 -0
  305. data/lib/rubygems/platform.rb +79 -53
  306. data/lib/rubygems/psych_tree.rb +2 -1
  307. data/lib/rubygems/query_utils.rb +35 -35
  308. data/lib/rubygems/rdoc.rb +3 -2
  309. data/lib/rubygems/remote_fetcher.rb +23 -22
  310. data/lib/rubygems/request/connection_pools.rb +4 -4
  311. data/lib/rubygems/request/http_pool.rb +2 -1
  312. data/lib/rubygems/request/https_pool.rb +1 -0
  313. data/lib/rubygems/request.rb +23 -22
  314. data/lib/rubygems/request_set/gem_dependency_api.rb +123 -123
  315. data/lib/rubygems/request_set/lockfile/parser.rb +28 -27
  316. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -3
  317. data/lib/rubygems/request_set/lockfile.rb +6 -5
  318. data/lib/rubygems/request_set.rb +20 -19
  319. data/lib/rubygems/requirement.rb +15 -14
  320. data/lib/rubygems/resolver/activation_request.rb +4 -3
  321. data/lib/rubygems/resolver/api_set.rb +5 -4
  322. data/lib/rubygems/resolver/api_specification.rb +7 -6
  323. data/lib/rubygems/resolver/best_set.rb +6 -5
  324. data/lib/rubygems/resolver/composed_set.rb +1 -0
  325. data/lib/rubygems/resolver/conflict.rb +11 -10
  326. data/lib/rubygems/resolver/current_set.rb +1 -0
  327. data/lib/rubygems/resolver/dependency_request.rb +3 -2
  328. data/lib/rubygems/resolver/git_set.rb +3 -2
  329. data/lib/rubygems/resolver/git_specification.rb +7 -6
  330. data/lib/rubygems/resolver/index_set.rb +4 -3
  331. data/lib/rubygems/resolver/index_specification.rb +7 -5
  332. data/lib/rubygems/resolver/installed_specification.rb +5 -4
  333. data/lib/rubygems/resolver/installer_set.rb +15 -17
  334. data/lib/rubygems/resolver/local_specification.rb +3 -2
  335. data/lib/rubygems/resolver/lock_set.rb +5 -4
  336. data/lib/rubygems/resolver/lock_specification.rb +5 -4
  337. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
  338. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
  339. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  340. data/lib/rubygems/resolver/molinillo.rb +2 -1
  341. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  342. data/lib/rubygems/resolver/set.rb +1 -0
  343. data/lib/rubygems/resolver/source_set.rb +2 -0
  344. data/lib/rubygems/resolver/spec_specification.rb +1 -0
  345. data/lib/rubygems/resolver/specification.rb +2 -1
  346. data/lib/rubygems/resolver/stats.rb +2 -1
  347. data/lib/rubygems/resolver/vendor_set.rb +2 -1
  348. data/lib/rubygems/resolver/vendor_specification.rb +4 -3
  349. data/lib/rubygems/resolver.rb +41 -40
  350. data/lib/rubygems/s3_uri_signer.rb +10 -8
  351. data/lib/rubygems/safe_yaml.rb +4 -2
  352. data/lib/rubygems/security/policies.rb +48 -47
  353. data/lib/rubygems/security/policy.rb +19 -18
  354. data/lib/rubygems/security/signer.rb +6 -5
  355. data/lib/rubygems/security/trust_dir.rb +5 -4
  356. data/lib/rubygems/security.rb +30 -42
  357. data/lib/rubygems/security_option.rb +6 -5
  358. data/lib/rubygems/shellwords.rb +3 -0
  359. data/lib/rubygems/source/git.rb +22 -22
  360. data/lib/rubygems/source/installed.rb +2 -1
  361. data/lib/rubygems/source/local.rb +3 -2
  362. data/lib/rubygems/source/lock.rb +1 -0
  363. data/lib/rubygems/source/specific_file.rb +2 -1
  364. data/lib/rubygems/source/vendor.rb +1 -0
  365. data/lib/rubygems/source.rb +16 -16
  366. data/lib/rubygems/spec_fetcher.rb +10 -9
  367. data/lib/rubygems/specification.rb +121 -114
  368. data/lib/rubygems/specification_policy.rb +36 -15
  369. data/lib/rubygems/stub_specification.rb +11 -9
  370. data/lib/rubygems/text.rb +2 -2
  371. data/lib/rubygems/tsort/lib/tsort.rb +308 -310
  372. data/lib/rubygems/tsort.rb +1 -1
  373. data/lib/rubygems/uninstaller.rb +19 -18
  374. data/lib/rubygems/update_suggestion.rb +69 -0
  375. data/lib/rubygems/uri.rb +4 -4
  376. data/lib/rubygems/uri_formatter.rb +1 -1
  377. data/lib/rubygems/user_interaction.rb +37 -21
  378. data/lib/rubygems/util/licenses.rb +4 -3
  379. data/lib/rubygems/util/list.rb +1 -0
  380. data/lib/rubygems/util.rb +12 -15
  381. data/lib/rubygems/validator.rb +7 -6
  382. data/lib/rubygems/version.rb +17 -11
  383. data/lib/rubygems/version_option.rb +4 -3
  384. data/lib/rubygems.rb +89 -68
  385. data/rubygems-update.gemspec +10 -8
  386. data/setup.rb +10 -9
  387. data/test/rubygems/alternate_cert.pem +14 -14
  388. data/test/rubygems/alternate_cert_32.pem +15 -15
  389. data/test/rubygems/alternate_key.pem +25 -25
  390. data/test/rubygems/bad_rake.rb +1 -0
  391. data/test/rubygems/bundler_test_gem.rb +421 -0
  392. data/test/rubygems/child_cert.pem +15 -16
  393. data/test/rubygems/child_cert_32.pem +15 -16
  394. data/test/rubygems/child_key.pem +25 -25
  395. data/test/rubygems/encrypted_private_key.pem +26 -26
  396. data/test/rubygems/expired_cert.pem +15 -15
  397. data/test/rubygems/fake_certlib/openssl.rb +1 -0
  398. data/test/rubygems/future_cert.pem +15 -15
  399. data/test/rubygems/future_cert_32.pem +15 -15
  400. data/test/rubygems/good_rake.rb +1 -0
  401. data/test/rubygems/grandchild_cert.pem +15 -16
  402. data/test/rubygems/grandchild_cert_32.pem +15 -16
  403. data/test/rubygems/grandchild_key.pem +25 -25
  404. data/test/rubygems/helper.rb +172 -151
  405. data/test/rubygems/installer_test_case.rb +14 -13
  406. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  407. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  408. data/test/rubygems/invalid_key.pem +25 -25
  409. data/test/rubygems/invalid_signer_cert.pem +15 -15
  410. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  411. data/test/rubygems/invalidchild_cert.pem +15 -16
  412. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  413. data/test/rubygems/invalidchild_key.pem +25 -25
  414. data/test/rubygems/multifactor_auth_utilities.rb +111 -0
  415. data/test/rubygems/package/tar_test_case.rb +53 -17
  416. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  417. data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
  418. data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
  419. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
  420. data/test/rubygems/private_key.pem +25 -25
  421. data/test/rubygems/public_cert.pem +16 -16
  422. data/test/rubygems/public_cert_32.pem +15 -15
  423. data/test/rubygems/public_key.pem +7 -7
  424. data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
  425. data/test/rubygems/rubygems_plugin.rb +3 -2
  426. data/test/rubygems/simple_gem.rb +2 -1
  427. data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
  428. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +6 -4
  429. data/test/rubygems/test_bundled_ca.rb +13 -12
  430. data/test/rubygems/test_config.rb +5 -4
  431. data/test/rubygems/test_deprecate.rb +5 -4
  432. data/test/rubygems/test_exit.rb +9 -3
  433. data/test/rubygems/test_gem.rb +339 -677
  434. data/test/rubygems/test_gem_available_set.rb +22 -21
  435. data/test/rubygems/test_gem_bundler_version_finder.rb +6 -4
  436. data/test/rubygems/test_gem_command.rb +45 -44
  437. data/test/rubygems/test_gem_command_manager.rb +96 -30
  438. data/test/rubygems/test_gem_commands_build_command.rb +74 -63
  439. data/test/rubygems/test_gem_commands_cert_command.rb +98 -99
  440. data/test/rubygems/test_gem_commands_check_command.rb +5 -4
  441. data/test/rubygems/test_gem_commands_cleanup_command.rb +41 -40
  442. data/test/rubygems/test_gem_commands_contents_command.rb +28 -27
  443. data/test/rubygems/test_gem_commands_dependency_command.rb +37 -36
  444. data/test/rubygems/test_gem_commands_environment_command.rb +17 -16
  445. data/test/rubygems/test_gem_commands_exec_command.rb +853 -0
  446. data/test/rubygems/test_gem_commands_fetch_command.rb +38 -37
  447. data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -7
  448. data/test/rubygems/test_gem_commands_help_command.rb +14 -13
  449. data/test/rubygems/test_gem_commands_info_command.rb +29 -2
  450. data/test/rubygems/test_gem_commands_install_command.rb +152 -132
  451. data/test/rubygems/test_gem_commands_list_command.rb +5 -4
  452. data/test/rubygems/test_gem_commands_lock_command.rb +11 -10
  453. data/test/rubygems/test_gem_commands_mirror.rb +3 -2
  454. data/test/rubygems/test_gem_commands_open_command.rb +5 -4
  455. data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
  456. data/test/rubygems/test_gem_commands_owner_command.rb +227 -50
  457. data/test/rubygems/test_gem_commands_pristine_command.rb +142 -93
  458. data/test/rubygems/test_gem_commands_push_command.rb +189 -64
  459. data/test/rubygems/test_gem_commands_query_command.rb +74 -73
  460. data/test/rubygems/test_gem_commands_search_command.rb +3 -2
  461. data/test/rubygems/test_gem_commands_server_command.rb +3 -2
  462. data/test/rubygems/test_gem_commands_setup_command.rb +123 -96
  463. data/test/rubygems/test_gem_commands_signin_command.rb +71 -31
  464. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  465. data/test/rubygems/test_gem_commands_sources_command.rb +29 -29
  466. data/test/rubygems/test_gem_commands_specification_command.rb +33 -32
  467. data/test/rubygems/test_gem_commands_stale_command.rb +5 -4
  468. data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -81
  469. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -31
  470. data/test/rubygems/test_gem_commands_update_command.rb +96 -95
  471. data/test/rubygems/test_gem_commands_which_command.rb +7 -6
  472. data/test/rubygems/test_gem_commands_yank_command.rb +162 -43
  473. data/test/rubygems/test_gem_config_file.rb +94 -81
  474. data/test/rubygems/test_gem_dependency.rb +76 -73
  475. data/test/rubygems/test_gem_dependency_installer.rb +200 -165
  476. data/test/rubygems/test_gem_dependency_list.rb +48 -47
  477. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -4
  478. data/test/rubygems/test_gem_doctor.rb +27 -26
  479. data/test/rubygems/test_gem_ext_builder.rb +60 -61
  480. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +4 -4
  481. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.lock → ext/custom_name_lib/Cargo.lock} +23 -33
  482. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.toml → ext/custom_name_lib/Cargo.toml} +1 -1
  483. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{src → ext/custom_name_lib/src}/lib.rs +1 -1
  484. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
  485. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +37 -33
  486. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  487. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +2 -0
  488. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
  489. data/test/rubygems/test_gem_ext_cargo_builder.rb +48 -59
  490. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +20 -19
  491. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +21 -36
  492. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -15
  493. data/test/rubygems/test_gem_ext_configure_builder.rb +14 -13
  494. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
  495. data/test/rubygems/test_gem_ext_rake_builder.rb +16 -15
  496. data/test/rubygems/test_gem_gem_runner.rb +15 -9
  497. data/test/rubygems/test_gem_gemcutter_utilities.rb +170 -84
  498. data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -4
  499. data/test/rubygems/test_gem_indexer.rb +87 -67
  500. data/test/rubygems/test_gem_install_update_options.rb +17 -16
  501. data/test/rubygems/test_gem_installer.rb +422 -304
  502. data/test/rubygems/test_gem_local_remote_options.rb +11 -10
  503. data/test/rubygems/test_gem_name_tuple.rb +5 -4
  504. data/test/rubygems/test_gem_package.rb +243 -231
  505. data/test/rubygems/test_gem_package_old.rb +14 -13
  506. data/test/rubygems/test_gem_package_tar_header.rb +48 -47
  507. data/test/rubygems/test_gem_package_tar_reader.rb +56 -8
  508. data/test/rubygems/test_gem_package_tar_reader_entry.rb +162 -16
  509. data/test/rubygems/test_gem_package_tar_writer.rb +77 -76
  510. data/test/rubygems/test_gem_package_task.rb +19 -18
  511. data/test/rubygems/test_gem_path_support.rb +15 -14
  512. data/test/rubygems/test_gem_platform.rb +333 -227
  513. data/test/rubygems/test_gem_rdoc.rb +15 -14
  514. data/test/rubygems/test_gem_remote_fetcher.rb +155 -154
  515. data/test/rubygems/test_gem_request.rb +64 -58
  516. data/test/rubygems/test_gem_request_connection_pools.rb +30 -29
  517. data/test/rubygems/test_gem_request_set.rb +101 -100
  518. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +210 -211
  519. data/test/rubygems/test_gem_request_set_lockfile.rb +87 -86
  520. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -57
  521. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +63 -62
  522. data/test/rubygems/test_gem_requirement.rb +48 -41
  523. data/test/rubygems/test_gem_resolver.rb +167 -99
  524. data/test/rubygems/test_gem_resolver_activation_request.rb +7 -6
  525. data/test/rubygems/test_gem_resolver_api_set.rb +34 -33
  526. data/test/rubygems/test_gem_resolver_api_specification.rb +48 -47
  527. data/test/rubygems/test_gem_resolver_best_set.rb +23 -22
  528. data/test/rubygems/test_gem_resolver_composed_set.rb +2 -1
  529. data/test/rubygems/test_gem_resolver_conflict.rb +13 -12
  530. data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -15
  531. data/test/rubygems/test_gem_resolver_git_set.rb +22 -21
  532. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -21
  533. data/test/rubygems/test_gem_resolver_index_set.rb +13 -12
  534. data/test/rubygems/test_gem_resolver_index_specification.rb +17 -16
  535. data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -5
  536. data/test/rubygems/test_gem_resolver_installer_set.rb +79 -34
  537. data/test/rubygems/test_gem_resolver_local_specification.rb +8 -7
  538. data/test/rubygems/test_gem_resolver_lock_set.rb +13 -12
  539. data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -17
  540. data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -1
  541. data/test/rubygems/test_gem_resolver_specification.rb +9 -8
  542. data/test/rubygems/test_gem_resolver_vendor_set.rb +7 -6
  543. data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -10
  544. data/test/rubygems/test_gem_security.rb +69 -68
  545. data/test/rubygems/test_gem_security_policy.rb +72 -72
  546. data/test/rubygems/test_gem_security_signer.rb +35 -34
  547. data/test/rubygems/test_gem_security_trust_dir.rb +7 -6
  548. data/test/rubygems/test_gem_silent_ui.rb +39 -32
  549. data/test/rubygems/test_gem_source.rb +45 -44
  550. data/test/rubygems/test_gem_source_fetch_problem.rb +10 -9
  551. data/test/rubygems/test_gem_source_git.rb +69 -62
  552. data/test/rubygems/test_gem_source_installed.rb +17 -16
  553. data/test/rubygems/test_gem_source_list.rb +6 -5
  554. data/test/rubygems/test_gem_source_local.rb +15 -14
  555. data/test/rubygems/test_gem_source_lock.rb +32 -31
  556. data/test/rubygems/test_gem_source_specific_file.rb +18 -17
  557. data/test/rubygems/test_gem_source_subpath_problem.rb +8 -7
  558. data/test/rubygems/test_gem_source_vendor.rb +14 -13
  559. data/test/rubygems/test_gem_spec_fetcher.rb +73 -72
  560. data/test/rubygems/test_gem_specification.rb +533 -469
  561. data/test/rubygems/test_gem_stream_ui.rb +53 -22
  562. data/test/rubygems/test_gem_stub_specification.rb +33 -32
  563. data/test/rubygems/test_gem_text.rb +2 -1
  564. data/test/rubygems/test_gem_uninstaller.rb +118 -117
  565. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -3
  566. data/test/rubygems/test_gem_update_suggestion.rb +209 -0
  567. data/test/rubygems/test_gem_uri.rb +6 -4
  568. data/test/rubygems/test_gem_uri_formatter.rb +15 -14
  569. data/test/rubygems/test_gem_util.rb +24 -23
  570. data/test/rubygems/test_gem_validator.rb +8 -8
  571. data/test/rubygems/test_gem_version.rb +24 -16
  572. data/test/rubygems/test_gem_version_option.rb +16 -15
  573. data/test/rubygems/test_kernel.rb +43 -48
  574. data/test/rubygems/test_project_sanity.rb +32 -3
  575. data/test/rubygems/test_remote_fetch_error.rb +8 -7
  576. data/test/rubygems/test_require.rb +118 -103
  577. data/test/rubygems/test_rubygems.rb +10 -8
  578. data/test/rubygems/test_webauthn_listener.rb +143 -0
  579. data/test/rubygems/test_webauthn_listener_response.rb +93 -0
  580. data/test/rubygems/test_webauthn_poller.rb +124 -0
  581. data/test/rubygems/utilities.rb +98 -34
  582. data/test/rubygems/wrong_key_cert.pem +15 -15
  583. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  584. data/test/test_changelog_generator.rb +1 -1
  585. metadata +99 -46
  586. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  587. data/bundler/lib/bundler/templates/gems.rb +0 -5
  588. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  589. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  590. data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
  591. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  592. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  593. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  594. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  595. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  596. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  597. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  598. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  599. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  600. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  601. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  602. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  603. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  604. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  605. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  606. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  608. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  609. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  610. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  611. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  612. data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
  613. data/bundler/lib/bundler/version_ranges.rb +0 -122
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
  615. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
@@ -1,28 +1,29 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/commands/cert_command'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/commands/cert_command"
4
5
 
5
6
  unless Gem::HAVE_OPENSSL
6
- warn 'Skipping `gem cert` tests. openssl not found.'
7
+ warn "Skipping `gem cert` tests. openssl not found."
7
8
  end
8
9
 
9
10
  if Gem.java_platform?
10
- warn 'Skipping `gem cert` tests on jruby.'
11
+ warn "Skipping `gem cert` tests on jruby."
11
12
  end
12
13
 
13
14
  class TestGemCommandsCertCommand < Gem::TestCase
14
- ALTERNATE_CERT = load_cert 'alternate'
15
- EXPIRED_PUBLIC_CERT = load_cert 'expired'
15
+ ALTERNATE_CERT = load_cert "alternate"
16
+ EXPIRED_PUBLIC_CERT = load_cert "expired"
16
17
 
17
- ALTERNATE_KEY_FILE = key_path 'alternate'
18
- PRIVATE_KEY_FILE = key_path 'private'
19
- PRIVATE_EC_KEY_FILE = key_path 'private_ec'
20
- PUBLIC_KEY_FILE = key_path 'public'
18
+ ALTERNATE_KEY_FILE = key_path "alternate"
19
+ PRIVATE_KEY_FILE = key_path "private"
20
+ PRIVATE_EC_KEY_FILE = key_path "private_ec"
21
+ PUBLIC_KEY_FILE = key_path "public"
21
22
 
22
- ALTERNATE_CERT_FILE = cert_path 'alternate'
23
- CHILD_CERT_FILE = cert_path 'child'
24
- PUBLIC_CERT_FILE = cert_path 'public'
25
- EXPIRED_PUBLIC_CERT_FILE = cert_path 'expired'
23
+ ALTERNATE_CERT_FILE = cert_path "alternate"
24
+ CHILD_CERT_FILE = cert_path "child"
25
+ PUBLIC_CERT_FILE = cert_path "public"
26
+ EXPIRED_PUBLIC_CERT_FILE = cert_path "expired"
26
27
 
27
28
  def setup
28
29
  super
@@ -44,7 +45,7 @@ class TestGemCommandsCertCommand < Gem::TestCase
44
45
  @trust_dir.trust_cert PUBLIC_CERT
45
46
  @trust_dir.trust_cert ALTERNATE_CERT
46
47
 
47
- matches = @cmd.certificates_matching ''
48
+ matches = @cmd.certificates_matching ""
48
49
 
49
50
  # HACK OpenSSL::X509::Certificate#== is Object#==, so do this the hard way
50
51
  match = matches.next
@@ -64,7 +65,7 @@ class TestGemCommandsCertCommand < Gem::TestCase
64
65
  @trust_dir.trust_cert PUBLIC_CERT
65
66
  @trust_dir.trust_cert ALTERNATE_CERT
66
67
 
67
- matches = @cmd.certificates_matching 'alternate'
68
+ matches = @cmd.certificates_matching "alternate"
68
69
 
69
70
  match = matches.next
70
71
  assert_equal ALTERNATE_CERT.to_pem, match.first.to_pem
@@ -91,7 +92,7 @@ class TestGemCommandsCertCommand < Gem::TestCase
91
92
  end
92
93
 
93
94
  def test_execute_add_twice
94
- self.class.cert_path 'alternate'
95
+ self.class.cert_path "alternate"
95
96
 
96
97
  @cmd.handle_options %W[
97
98
  --add #{PUBLIC_CERT_FILE}
@@ -112,7 +113,7 @@ Added '/CN=alternate/DC=example'
112
113
  end
113
114
 
114
115
  def test_execute_build
115
- passphrase = 'Foo bar'
116
+ passphrase = "Foo bar"
116
117
 
117
118
  @cmd.handle_options %W[--build nobody@example.com]
118
119
 
@@ -139,12 +140,12 @@ Added '/CN=alternate/DC=example'
139
140
  assert_empty output
140
141
  assert_empty @build_ui.error
141
142
 
142
- assert_path_exist File.join(@tempdir, 'gem-private_key.pem')
143
- assert_path_exist File.join(@tempdir, 'gem-public_cert.pem')
143
+ assert_path_exist File.join(@tempdir, "gem-private_key.pem")
144
+ assert_path_exist File.join(@tempdir, "gem-public_cert.pem")
144
145
  end
145
146
 
146
147
  def test_execute_build_key_algorithm_ec_key
147
- passphrase = 'Foo bar'
148
+ passphrase = "Foo bar"
148
149
 
149
150
  @cmd.handle_options %W[--build nobody@example.com --key-algorithm ec]
150
151
 
@@ -171,16 +172,16 @@ Added '/CN=alternate/DC=example'
171
172
  assert_empty output
172
173
  assert_empty @build_ui.error
173
174
 
174
- assert_path_exist File.join(@tempdir, 'gem-private_key.pem')
175
+ assert_path_exist File.join(@tempdir, "gem-private_key.pem")
175
176
 
176
- cert_path = File.join(@tempdir, 'gem-public_cert.pem')
177
+ cert_path = File.join(@tempdir, "gem-public_cert.pem")
177
178
  assert_path_exist cert_path
178
179
  cert = OpenSSL::X509::Certificate.new(File.read(cert_path))
179
180
  assert cert.public_key.is_a? OpenSSL::PKey::EC
180
181
  end
181
182
 
182
183
  def test_execute_build_bad_email_address
183
- passphrase = 'Foo bar'
184
+ passphrase = "Foo bar"
184
185
  email = "nobody@"
185
186
 
186
187
  @cmd.handle_options %W[--build #{email}]
@@ -188,7 +189,6 @@ Added '/CN=alternate/DC=example'
188
189
  @build_ui = Gem::MockGemUi.new "#{passphrase}\n#{passphrase}"
189
190
 
190
191
  use_ui @build_ui do
191
-
192
192
  e = assert_raise Gem::CommandLineError do
193
193
  @cmd.execute
194
194
  end
@@ -196,13 +196,13 @@ Added '/CN=alternate/DC=example'
196
196
  assert_equal "Invalid email address #{email}",
197
197
  e.message
198
198
 
199
- assert_path_not_exist File.join(@tempdir, 'gem-private_key.pem')
200
- assert_path_not_exist File.join(@tempdir, 'gem-public_cert.pem')
199
+ assert_path_not_exist File.join(@tempdir, "gem-private_key.pem")
200
+ assert_path_not_exist File.join(@tempdir, "gem-public_cert.pem")
201
201
  end
202
202
  end
203
203
 
204
204
  def test_execute_build_expiration_days
205
- passphrase = 'Foo bar'
205
+ passphrase = "Foo bar"
206
206
 
207
207
  @cmd.handle_options %W[
208
208
  --build nobody@example.com
@@ -232,8 +232,8 @@ Added '/CN=alternate/DC=example'
232
232
  assert_empty output
233
233
  assert_empty @build_ui.error
234
234
 
235
- assert_path_exist File.join(@tempdir, 'gem-private_key.pem')
236
- assert_path_exist File.join(@tempdir, 'gem-public_cert.pem')
235
+ assert_path_exist File.join(@tempdir, "gem-private_key.pem")
236
+ assert_path_exist File.join(@tempdir, "gem-public_cert.pem")
237
237
 
238
238
  pem = File.read("#{@tempdir}/gem-public_cert.pem")
239
239
  cert = OpenSSL::X509::Certificate.new(pem)
@@ -243,8 +243,8 @@ Added '/CN=alternate/DC=example'
243
243
  end
244
244
 
245
245
  def test_execute_build_bad_passphrase_confirmation
246
- passphrase = 'Foo bar'
247
- passphrase_confirmation = 'Fu bar'
246
+ passphrase = "Foo bar"
247
+ passphrase_confirmation = "Fu bar"
248
248
 
249
249
  @cmd.handle_options %W[--build nobody@example.com]
250
250
 
@@ -266,11 +266,10 @@ Added '/CN=alternate/DC=example'
266
266
 
267
267
  assert_equal "Passphrase and passphrase confirmation don't match",
268
268
  e.message
269
-
270
269
  end
271
270
 
272
- assert_path_not_exist File.join(@tempdir, 'gem-private_key.pem')
273
- assert_path_not_exist File.join(@tempdir, 'gem-public_cert.pem')
271
+ assert_path_not_exist File.join(@tempdir, "gem-private_key.pem")
272
+ assert_path_not_exist File.join(@tempdir, "gem-public_cert.pem")
274
273
  end
275
274
 
276
275
  def test_execute_build_key
@@ -291,8 +290,8 @@ Added '/CN=alternate/DC=example'
291
290
  assert_empty output
292
291
  assert_empty @ui.error
293
292
 
294
- assert_path_exist File.join(@tempdir, 'gem-public_cert.pem')
295
- assert_path_not_exist File.join(@tempdir, 'gem-private_key.pem')
293
+ assert_path_exist File.join(@tempdir, "gem-public_cert.pem")
294
+ assert_path_not_exist File.join(@tempdir, "gem-private_key.pem")
296
295
  end
297
296
 
298
297
  def test_execute_build_encrypted_key
@@ -313,7 +312,7 @@ Added '/CN=alternate/DC=example'
313
312
  assert_empty output
314
313
  assert_empty @ui.error
315
314
 
316
- assert_path_exist File.join(@tempdir, 'gem-public_cert.pem')
315
+ assert_path_exist File.join(@tempdir, "gem-public_cert.pem")
317
316
  end
318
317
 
319
318
  def test_execute_build_ec_key
@@ -334,8 +333,8 @@ Added '/CN=alternate/DC=example'
334
333
  assert_empty output
335
334
  assert_empty @ui.error
336
335
 
337
- assert_path_exist File.join(@tempdir, 'gem-public_cert.pem')
338
- assert_path_not_exist File.join(@tempdir, 'gem-private_key.pem')
336
+ assert_path_exist File.join(@tempdir, "gem-public_cert.pem")
337
+ assert_path_not_exist File.join(@tempdir, "gem-private_key.pem")
339
338
  end
340
339
 
341
340
  def test_execute_certificate
@@ -343,8 +342,8 @@ Added '/CN=alternate/DC=example'
343
342
  @cmd.handle_options %W[--certificate #{PUBLIC_CERT_FILE}]
344
343
  end
345
344
 
346
- assert_equal '', @ui.output
347
- assert_equal '', @ui.error
345
+ assert_equal "", @ui.output
346
+ assert_equal "", @ui.error
348
347
 
349
348
  assert_equal PUBLIC_CERT.to_pem, @cmd.options[:issuer_cert].to_pem
350
349
  end
@@ -383,8 +382,8 @@ Added '/CN=alternate/DC=example'
383
382
  @cmd.send :handle_options, %W[--private-key #{PRIVATE_KEY_FILE}]
384
383
  end
385
384
 
386
- assert_equal '', @ui.output
387
- assert_equal '', @ui.error
385
+ assert_equal "", @ui.output
386
+ assert_equal "", @ui.error
388
387
 
389
388
  assert_equal PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
390
389
  end
@@ -394,8 +393,8 @@ Added '/CN=alternate/DC=example'
394
393
  @cmd.send :handle_options, %W[--private-key #{ENCRYPTED_PRIVATE_KEY_PATH}]
395
394
  end
396
395
 
397
- assert_equal '', @ui.output
398
- assert_equal '', @ui.error
396
+ assert_equal "", @ui.output
397
+ assert_equal "", @ui.error
399
398
 
400
399
  assert_equal ENCRYPTED_PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
401
400
  end
@@ -414,7 +413,7 @@ Added '/CN=alternate/DC=example'
414
413
  end
415
414
 
416
415
  assert_equal "Removed '/CN=nobody/DC=example'\n", @ui.output
417
- assert_equal '', @ui.error
416
+ assert_equal "", @ui.error
418
417
 
419
418
  assert_path_not_exist cert_path
420
419
  end
@@ -441,7 +440,7 @@ Removed '/CN=nobody/DC=example'
441
440
  EXPECTED
442
441
 
443
442
  assert_equal expected, @ui.output
444
- assert_equal '', @ui.error
443
+ assert_equal "", @ui.error
445
444
 
446
445
  assert_path_not_exist public_path
447
446
  assert_path_not_exist alternate_path
@@ -469,17 +468,17 @@ Removed '/CN=alternate/DC=example'
469
468
  EXPECTED
470
469
 
471
470
  assert_equal expected, @ui.output
472
- assert_equal '', @ui.error
471
+ assert_equal "", @ui.error
473
472
 
474
473
  assert_path_not_exist public_path
475
474
  assert_path_not_exist alternate_path
476
475
  end
477
476
 
478
477
  def test_execute_sign
479
- path = File.join @tempdir, 'cert.pem'
478
+ path = File.join @tempdir, "cert.pem"
480
479
  Gem::Security.write ALTERNATE_CERT, path, 0600
481
480
 
482
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
481
+ assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
483
482
 
484
483
  @cmd.handle_options %W[
485
484
  --private-key #{PRIVATE_KEY_FILE}
@@ -492,12 +491,12 @@ Removed '/CN=alternate/DC=example'
492
491
  @cmd.execute
493
492
  end
494
493
 
495
- assert_equal '', @ui.output
496
- assert_equal '', @ui.error
494
+ assert_equal "", @ui.output
495
+ assert_equal "", @ui.error
497
496
 
498
497
  cert = OpenSSL::X509::Certificate.new File.read path
499
498
 
500
- assert_equal '/CN=nobody/DC=example', cert.issuer.to_s
499
+ assert_equal "/CN=nobody/DC=example", cert.issuer.to_s
501
500
 
502
501
  mask = 0100600 & (~File.umask)
503
502
 
@@ -505,10 +504,10 @@ Removed '/CN=alternate/DC=example'
505
504
  end
506
505
 
507
506
  def test_execute_sign_encrypted_key
508
- path = File.join @tempdir, 'cert.pem'
507
+ path = File.join @tempdir, "cert.pem"
509
508
  Gem::Security.write ALTERNATE_CERT, path, 0600
510
509
 
511
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
510
+ assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
512
511
 
513
512
  @cmd.handle_options %W[
514
513
  --private-key #{ENCRYPTED_PRIVATE_KEY_PATH}
@@ -521,12 +520,12 @@ Removed '/CN=alternate/DC=example'
521
520
  @cmd.execute
522
521
  end
523
522
 
524
- assert_equal '', @ui.output
525
- assert_equal '', @ui.error
523
+ assert_equal "", @ui.output
524
+ assert_equal "", @ui.error
526
525
 
527
526
  cert = OpenSSL::X509::Certificate.new File.read path
528
527
 
529
- assert_equal '/CN=nobody/DC=example', cert.issuer.to_s
528
+ assert_equal "/CN=nobody/DC=example", cert.issuer.to_s
530
529
 
531
530
  mask = 0100600 & (~File.umask)
532
531
 
@@ -534,18 +533,18 @@ Removed '/CN=alternate/DC=example'
534
533
  end
535
534
 
536
535
  def test_execute_sign_default
537
- FileUtils.mkdir_p File.join Gem.user_home, '.gem'
536
+ FileUtils.mkdir_p File.join Gem.user_home, ".gem"
538
537
 
539
- private_key_path = File.join Gem.user_home, '.gem', 'gem-private_key.pem'
538
+ private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
540
539
  Gem::Security.write PRIVATE_KEY, private_key_path
541
540
 
542
- public_cert_path = File.join Gem.user_home, '.gem', 'gem-public_cert.pem'
541
+ public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
543
542
  Gem::Security.write PUBLIC_CERT, public_cert_path
544
543
 
545
- path = File.join @tempdir, 'cert.pem'
544
+ path = File.join @tempdir, "cert.pem"
546
545
  Gem::Security.write ALTERNATE_CERT, path, 0600
547
546
 
548
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
547
+ assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
549
548
 
550
549
  @cmd.handle_options %W[--sign #{path}]
551
550
 
@@ -553,12 +552,12 @@ Removed '/CN=alternate/DC=example'
553
552
  @cmd.execute
554
553
  end
555
554
 
556
- assert_equal '', @ui.output
557
- assert_equal '', @ui.error
555
+ assert_equal "", @ui.output
556
+ assert_equal "", @ui.error
558
557
 
559
558
  cert = OpenSSL::X509::Certificate.new File.read path
560
559
 
561
- assert_equal '/CN=nobody/DC=example', cert.issuer.to_s
560
+ assert_equal "/CN=nobody/DC=example", cert.issuer.to_s
562
561
 
563
562
  mask = 0100600 & (~File.umask)
564
563
 
@@ -566,18 +565,18 @@ Removed '/CN=alternate/DC=example'
566
565
  end
567
566
 
568
567
  def test_execute_sign_default_encrypted_key
569
- FileUtils.mkdir_p File.join(Gem.user_home, '.gem')
568
+ FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
570
569
 
571
- private_key_path = File.join Gem.user_home, '.gem', 'gem-private_key.pem'
570
+ private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
572
571
  Gem::Security.write ENCRYPTED_PRIVATE_KEY, private_key_path, 0600, PRIVATE_KEY_PASSPHRASE
573
572
 
574
- public_cert_path = File.join Gem.user_home, '.gem', 'gem-public_cert.pem'
573
+ public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
575
574
  Gem::Security.write PUBLIC_CERT, public_cert_path
576
575
 
577
- path = File.join @tempdir, 'cert.pem'
576
+ path = File.join @tempdir, "cert.pem"
578
577
  Gem::Security.write ALTERNATE_CERT, path, 0600
579
578
 
580
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
579
+ assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
581
580
 
582
581
  @cmd.handle_options %W[--sign #{path}]
583
582
 
@@ -585,12 +584,12 @@ Removed '/CN=alternate/DC=example'
585
584
  @cmd.execute
586
585
  end
587
586
 
588
- assert_equal '', @ui.output
589
- assert_equal '', @ui.error
587
+ assert_equal "", @ui.output
588
+ assert_equal "", @ui.error
590
589
 
591
590
  cert = OpenSSL::X509::Certificate.new File.read path
592
591
 
593
- assert_equal '/CN=nobody/DC=example', cert.issuer.to_s
592
+ assert_equal "/CN=nobody/DC=example", cert.issuer.to_s
594
593
 
595
594
  mask = 0100600 & (~File.umask)
596
595
 
@@ -598,15 +597,15 @@ Removed '/CN=alternate/DC=example'
598
597
  end
599
598
 
600
599
  def test_execute_sign_no_cert
601
- FileUtils.mkdir_p File.join Gem.user_home, '.gem'
600
+ FileUtils.mkdir_p File.join Gem.user_home, ".gem"
602
601
 
603
- private_key_path = File.join Gem.user_home, '.gem', 'gem-private_key.pem'
602
+ private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
604
603
  Gem::Security.write PRIVATE_KEY, private_key_path
605
604
 
606
- path = File.join @tempdir, 'cert.pem'
605
+ path = File.join @tempdir, "cert.pem"
607
606
  Gem::Security.write ALTERNATE_CERT, path, 0600
608
607
 
609
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
608
+ assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
610
609
 
611
610
  @cmd.handle_options %W[--sign #{path}]
612
611
 
@@ -616,7 +615,7 @@ Removed '/CN=alternate/DC=example'
616
615
  end
617
616
  end
618
617
 
619
- assert_equal '', @ui.output
618
+ assert_equal "", @ui.output
620
619
 
621
620
  expected = <<-EXPECTED
622
621
  ERROR: --certificate not specified and ~/.gem/gem-public_cert.pem does not exist
@@ -626,15 +625,15 @@ ERROR: --certificate not specified and ~/.gem/gem-public_cert.pem does not exis
626
625
  end
627
626
 
628
627
  def test_execute_sign_no_key
629
- FileUtils.mkdir_p File.join Gem.user_home, '.gem'
628
+ FileUtils.mkdir_p File.join Gem.user_home, ".gem"
630
629
 
631
- public_cert_path = File.join Gem.user_home, '.gem', 'gem-public_cert.pem'
630
+ public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
632
631
  Gem::Security.write PUBLIC_CERT, public_cert_path
633
632
 
634
- path = File.join @tempdir, 'cert.pem'
633
+ path = File.join @tempdir, "cert.pem"
635
634
  Gem::Security.write ALTERNATE_CERT, path, 0600
636
635
 
637
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
636
+ assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
638
637
 
639
638
  @cmd.handle_options %W[--sign #{path}]
640
639
 
@@ -644,7 +643,7 @@ ERROR: --certificate not specified and ~/.gem/gem-public_cert.pem does not exis
644
643
  end
645
644
  end
646
645
 
647
- assert_equal '', @ui.output
646
+ assert_equal "", @ui.output
648
647
 
649
648
  expected = <<-EXPECTED
650
649
  ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exist
@@ -657,10 +656,10 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
657
656
  gem_path = File.join Gem.user_home, ".gem"
658
657
  Dir.mkdir gem_path
659
658
 
660
- path = File.join @tempdir, 'cert.pem'
659
+ path = File.join @tempdir, "cert.pem"
661
660
  Gem::Security.write EXPIRED_PUBLIC_CERT, path, 0600
662
661
 
663
- assert_equal '/CN=nobody/DC=example', EXPIRED_PUBLIC_CERT.issuer.to_s
662
+ assert_equal "/CN=nobody/DC=example", EXPIRED_PUBLIC_CERT.issuer.to_s
664
663
 
665
664
  tmp_expired_cert_file = File.join(Dir.tmpdir, File.basename(EXPIRED_PUBLIC_CERT_FILE))
666
665
  @cleanup << tmp_expired_cert_file
@@ -682,17 +681,17 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
682
681
  /INFO: Your certificate #{tmp_expired_cert_file} has been re-signed\nINFO: Your expired certificate will be located at: #{expected_path}\.[0-9]+/,
683
682
  @ui.output
684
683
  )
685
- assert_equal '', @ui.error
684
+ assert_equal "", @ui.error
686
685
  end
687
686
 
688
687
  def test_execute_re_sign_with_cert_expiration_length_days
689
688
  gem_path = File.join Gem.user_home, ".gem"
690
689
  Dir.mkdir gem_path
691
690
 
692
- path = File.join @tempdir, 'cert.pem'
691
+ path = File.join @tempdir, "cert.pem"
693
692
  Gem::Security.write EXPIRED_PUBLIC_CERT, path, 0600
694
693
 
695
- assert_equal '/CN=nobody/DC=example', EXPIRED_PUBLIC_CERT.issuer.to_s
694
+ assert_equal "/CN=nobody/DC=example", EXPIRED_PUBLIC_CERT.issuer.to_s
696
695
 
697
696
  tmp_expired_cert_file = File.join(Dir.tmpdir, File.basename(EXPIRED_PUBLIC_CERT_FILE))
698
697
  @cleanup << tmp_expired_cert_file
@@ -714,7 +713,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
714
713
  cert_days_to_expire = (re_signed_cert.not_after - re_signed_cert.not_before).to_i / (24 * 60 * 60)
715
714
 
716
715
  assert_equal(28, cert_days_to_expire)
717
- assert_equal '', @ui.error
716
+ assert_equal "", @ui.error
718
717
  end
719
718
 
720
719
  def test_handle_options
@@ -740,11 +739,11 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
740
739
  assert_equal %w[nobody@example other@example],
741
740
  @cmd.options[:build].map {|name| name.to_s }
742
741
 
743
- assert_equal ['', 'example'], @cmd.options[:list]
742
+ assert_equal ["", "example"], @cmd.options[:list]
744
743
  end
745
744
 
746
745
  def test_handle_options_add_bad
747
- nonexistent = File.join @tempdir, 'nonexistent'
746
+ nonexistent = File.join @tempdir, "nonexistent"
748
747
  e = assert_raise Gem::OptionParser::InvalidArgument do
749
748
  @cmd.handle_options %W[--add #{nonexistent}]
750
749
  end
@@ -752,7 +751,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
752
751
  assert_equal "invalid argument: --add #{nonexistent}: does not exist",
753
752
  e.message
754
753
 
755
- bad = File.join @tempdir, 'bad'
754
+ bad = File.join @tempdir, "bad"
756
755
  FileUtils.touch bad
757
756
 
758
757
  e = assert_raise Gem::OptionParser::InvalidArgument do
@@ -764,7 +763,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
764
763
  end
765
764
 
766
765
  def test_handle_options_certificate
767
- nonexistent = File.join @tempdir, 'nonexistent'
766
+ nonexistent = File.join @tempdir, "nonexistent"
768
767
  e = assert_raise Gem::OptionParser::InvalidArgument do
769
768
  @cmd.handle_options %W[--certificate #{nonexistent}]
770
769
  end
@@ -772,7 +771,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
772
771
  assert_equal "invalid argument: --certificate #{nonexistent}: does not exist",
773
772
  e.message
774
773
 
775
- bad = File.join @tempdir, 'bad'
774
+ bad = File.join @tempdir, "bad"
776
775
  FileUtils.touch bad
777
776
 
778
777
  e = assert_raise Gem::OptionParser::InvalidArgument do
@@ -785,7 +784,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
785
784
  end
786
785
 
787
786
  def test_handle_options_key_bad
788
- nonexistent = File.join @tempdir, 'nonexistent'
787
+ nonexistent = File.join @tempdir, "nonexistent"
789
788
  e = assert_raise Gem::OptionParser::InvalidArgument do
790
789
  @cmd.handle_options %W[--private-key #{nonexistent}]
791
790
  end
@@ -794,7 +793,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
794
793
  "--private-key #{nonexistent}: does not exist",
795
794
  e.message
796
795
 
797
- bad = File.join @tempdir, 'bad'
796
+ bad = File.join @tempdir, "bad"
798
797
  FileUtils.touch bad
799
798
 
800
799
  e = assert_raise Gem::OptionParser::InvalidArgument do
@@ -850,7 +849,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
850
849
  end
851
850
 
852
851
  def test_handle_options_sign_nonexistent
853
- nonexistent = File.join @tempdir, 'nonexistent'
852
+ nonexistent = File.join @tempdir, "nonexistent"
854
853
  e = assert_raise Gem::OptionParser::InvalidArgument do
855
854
  @cmd.handle_options %W[
856
855
  --private-key #{ALTERNATE_KEY_FILE}
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/commands/check_command'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/commands/check_command"
4
5
 
5
6
  class TestGemCommandsCheckCommand < Gem::TestCase
6
7
  def setup
@@ -45,8 +46,8 @@ class TestGemCommandsCheckCommand < Gem::TestCase
45
46
  end
46
47
 
47
48
  def test_doctor
48
- gem 'a'
49
- b = gem 'b'
49
+ gem "a"
50
+ b = gem "b"
50
51
 
51
52
  FileUtils.rm b.spec_file
52
53