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
@@ -0,0 +1,209 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "helper"
4
+ require "rubygems/command"
5
+ require "rubygems/update_suggestion"
6
+
7
+ class TestUpdateSuggestion < Gem::TestCase
8
+ def setup
9
+ super
10
+
11
+ @cmd = Gem::Command.new "dummy", "dummy"
12
+ @cmd.extend Gem::UpdateSuggestion
13
+ @start_time = 1_000_000
14
+ @minute = 60 * 60
15
+ @week = 7 * 24 * @minute
16
+ end
17
+
18
+ def with_eglible_environment(**params)
19
+ self.class.with_eglible_environment(**params) do
20
+ yield
21
+ end
22
+ end
23
+
24
+ def self.with_eglible_environment(
25
+ tty: true,
26
+ rubygems_version: Gem::Version.new("1.2.3"),
27
+ latest_rubygems_version: Gem::Version.new("2.0.0"),
28
+ ci: false,
29
+ reset_last_update_check: true,
30
+ cmd:
31
+ )
32
+ original_config, Gem.configuration[:prevent_update_suggestion] = Gem.configuration[:prevent_update_suggestion], nil
33
+ original_env, ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"] = ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"], nil
34
+ original_disable, Gem.disable_system_update_message = Gem.disable_system_update_message, nil
35
+ Gem.configuration.last_update_check = 0 if reset_last_update_check
36
+
37
+ Gem.ui.stub :tty?, tty do
38
+ Gem.stub :rubygems_version, rubygems_version do
39
+ Gem.stub :latest_rubygems_version, latest_rubygems_version do
40
+ cmd.stub :ci?, ci do
41
+ yield
42
+ end
43
+ end
44
+ end
45
+ end
46
+ ensure
47
+ Gem.configuration[:prevent_update_suggestion] = original_config
48
+ ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"] = original_env
49
+ Gem.disable_system_update_message = original_disable
50
+ end
51
+
52
+ def test_update_suggestion
53
+ Gem.stub :rubygems_version, Gem::Version.new("1.2.3") do
54
+ Gem.stub :latest_rubygems_version, Gem::Version.new("2.0.0") do
55
+ assert_equal @cmd.update_suggestion, <<~SUGGESTION
56
+
57
+ A new release of RubyGems is available: 1.2.3 → 2.0.0!
58
+ Run `gem update --system 2.0.0` to update your installation.
59
+
60
+ SUGGESTION
61
+ end
62
+ end
63
+ end
64
+
65
+ def test_eglible_for_update
66
+ with_eglible_environment(cmd: @cmd) do
67
+ Time.stub :now, 123456789 do
68
+ assert @cmd.eglible_for_update?
69
+ assert_equal Gem.configuration.last_update_check, 123456789
70
+
71
+ # test last check is written to config file
72
+ assert File.read(Gem.configuration.state_file_name).match("123456789")
73
+ end
74
+ end
75
+ end
76
+
77
+ def test_eglible_for_update_is_not_annoying_when_new_version_is_released
78
+ current_version = Gem::Version.new("1.2.0")
79
+ latest_version = current_version
80
+
81
+ # checking for first time, it is not eglible since new version
82
+ # is not released yet and stored
83
+ with_eglible_environment(cmd: @cmd, rubygems_version: current_version, latest_rubygems_version: latest_version) do
84
+ Time.stub :now, @start_time do
85
+ refute @cmd.eglible_for_update?
86
+ assert_equal Gem.configuration.last_update_check, @start_time
87
+ end
88
+ end
89
+
90
+ # checking next week, it is not eglible since new version
91
+ # is not released yet and timestamp is stored
92
+ with_eglible_environment(
93
+ cmd: @cmd,
94
+ rubygems_version: current_version,
95
+ latest_rubygems_version: latest_version,
96
+ reset_last_update_check: false
97
+ ) do
98
+ Time.stub :now, @start_time + @week do
99
+ refute @cmd.eglible_for_update?
100
+ assert_equal Gem.configuration.last_update_check, @start_time + @week
101
+ end
102
+ end
103
+
104
+ # pretend new version is released
105
+ latest_version = Gem::Version.new("1.3.0")
106
+
107
+ # checking later same next week, it is not eglible even new version
108
+ # is released and timestamp is not stored
109
+ with_eglible_environment(
110
+ cmd: @cmd,
111
+ rubygems_version: current_version,
112
+ latest_rubygems_version: latest_version,
113
+ reset_last_update_check: false
114
+ ) do
115
+ Time.stub :now, @start_time + @week + @minute do
116
+ refute @cmd.eglible_for_update?
117
+ assert_equal Gem.configuration.last_update_check, @start_time + @week
118
+ end
119
+ end
120
+ end
121
+
122
+ def test_eglible_for_update_is_not_annoying_when_not_upgraded
123
+ with_eglible_environment(cmd: @cmd) do
124
+ # checking for first time, it is eglible and stored
125
+ Time.stub :now, @start_time do
126
+ assert @cmd.eglible_for_update?
127
+ assert_equal Gem.configuration.last_update_check, @start_time
128
+ end
129
+
130
+ # checking minute later is not eglible and not stored
131
+ Time.stub :now, @start_time + @minute do
132
+ refute @cmd.eglible_for_update?
133
+ assert_equal Gem.configuration.last_update_check, @start_time
134
+ end
135
+
136
+ # checking week later is eglible again and stored
137
+ Time.stub :now, @start_time + @week do
138
+ assert @cmd.eglible_for_update?
139
+ assert_equal Gem.configuration.last_update_check, @start_time + @week
140
+ end
141
+ end
142
+ end
143
+
144
+ def test_eglible_for_update_prevent_config
145
+ with_eglible_environment(cmd: @cmd) do
146
+ begin
147
+ original_config, Gem.configuration[:prevent_update_suggestion] = Gem.configuration[:prevent_update_suggestion], true
148
+ refute @cmd.eglible_for_update?
149
+ ensure
150
+ Gem.configuration[:prevent_update_suggestion] = original_config
151
+ end
152
+ end
153
+ end
154
+
155
+ def test_eglible_for_update_prevent_env
156
+ with_eglible_environment(cmd: @cmd) do
157
+ begin
158
+ original_env, ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"] = ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"], "yes"
159
+ refute @cmd.eglible_for_update?
160
+ ensure
161
+ ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"] = original_env
162
+ end
163
+ end
164
+ end
165
+
166
+ def test_eglible_for_update_non_tty
167
+ with_eglible_environment(tty: false, cmd: @cmd) do
168
+ refute @cmd.eglible_for_update?
169
+ end
170
+ end
171
+
172
+ def test_eglible_for_update_for_prerelease
173
+ with_eglible_environment(rubygems_version: Gem::Version.new("1.0.0-rc1"), cmd: @cmd) do
174
+ refute @cmd.eglible_for_update?
175
+ end
176
+ end
177
+
178
+ def test_eglible_for_update_disabled_update
179
+ with_eglible_environment(cmd: @cmd) do
180
+ begin
181
+ original_disable, Gem.disable_system_update_message = Gem.disable_system_update_message, "disabled"
182
+ refute @cmd.eglible_for_update?
183
+ ensure
184
+ Gem.disable_system_update_message = original_disable
185
+ end
186
+ end
187
+ end
188
+
189
+ def test_eglible_for_update_on_ci
190
+ with_eglible_environment(ci: true, cmd: @cmd) do
191
+ refute @cmd.eglible_for_update?
192
+ end
193
+ end
194
+
195
+ def test_eglible_for_update_unwrittable_config
196
+ with_eglible_environment(cmd: @cmd) do
197
+ Gem.configuration.stub :state_file_writable?, false do
198
+ refute @cmd.eglible_for_update?
199
+ end
200
+ end
201
+ end
202
+
203
+ def test_eglible_for_update_notification_delay
204
+ with_eglible_environment(cmd: @cmd) do
205
+ Gem.configuration.last_update_check = Time.now.to_i
206
+ refute @cmd.eglible_for_update?
207
+ end
208
+ end
209
+ end
@@ -1,5 +1,7 @@
1
- require_relative 'helper'
2
- require 'rubygems/uri'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "helper"
4
+ require "rubygems/uri"
3
5
 
4
6
  class TestUri < Gem::TestCase
5
7
  def test_to_s_not_string
@@ -31,9 +33,9 @@ class TestUri < Gem::TestCase
31
33
  end
32
34
 
33
35
  def test_redacted_does_not_modify_uri
34
- url = 'https://user:password@example.com'
36
+ url = "https://user:password@example.com"
35
37
  uri = Gem::Uri.new(url)
36
- assert_equal 'https://user:REDACTED@example.com', uri.redacted.to_s
38
+ assert_equal "https://user:REDACTED@example.com", uri.redacted.to_s
37
39
  assert_equal url, uri.to_s
38
40
  end
39
41
  end
@@ -1,26 +1,27 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/uri_formatter'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/uri_formatter"
4
5
 
5
6
  class TestGemUriFormatter < Gem::TestCase
6
7
  def test_normalize_uri
7
- assert_equal 'FILE://example/',
8
- Gem::UriFormatter.new('FILE://example/').normalize
9
- assert_equal 'FTP://example/',
10
- Gem::UriFormatter.new('FTP://example/').normalize
11
- assert_equal 'HTTP://example/',
12
- Gem::UriFormatter.new('HTTP://example/').normalize
13
- assert_equal 'HTTPS://example/',
14
- Gem::UriFormatter.new('HTTPS://example/').normalize
15
- assert_equal 'http://example/',
16
- Gem::UriFormatter.new('example/').normalize
8
+ assert_equal "FILE://example/",
9
+ Gem::UriFormatter.new("FILE://example/").normalize
10
+ assert_equal "FTP://example/",
11
+ Gem::UriFormatter.new("FTP://example/").normalize
12
+ assert_equal "HTTP://example/",
13
+ Gem::UriFormatter.new("HTTP://example/").normalize
14
+ assert_equal "HTTPS://example/",
15
+ Gem::UriFormatter.new("HTTPS://example/").normalize
16
+ assert_equal "http://example/",
17
+ Gem::UriFormatter.new("example/").normalize
17
18
  end
18
19
 
19
20
  def test_escape
20
- assert_equal 'a%40b%5Cc', Gem::UriFormatter.new('a@b\c').escape
21
+ assert_equal "a%40b%5Cc", Gem::UriFormatter.new('a@b\c').escape
21
22
  end
22
23
 
23
24
  def test_unescape
24
- assert_equal 'a@b\c', Gem::UriFormatter.new('a%40b%5Cc').unescape
25
+ assert_equal 'a@b\c', Gem::UriFormatter.new("a%40b%5Cc").unescape
25
26
  end
26
27
  end
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/util'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/util"
4
5
 
5
6
  class TestGemUtil < Gem::TestCase
6
7
  def test_class_popen
7
8
  pend "popen with a block does not behave well on jruby" if Gem.java_platform?
8
- assert_equal "0\n", Gem::Util.popen(*ruby_with_rubygems_in_load_path, '-e', 'p 0')
9
+ assert_equal "0\n", Gem::Util.popen(*ruby_with_rubygems_in_load_path, "-e", "p 0")
9
10
 
10
11
  assert_raise Errno::ECHILD do
11
12
  Process.wait(-1)
@@ -16,7 +17,7 @@ class TestGemUtil < Gem::TestCase
16
17
  pend if Gem.java_platform?
17
18
  Gem::Deprecate.skip_during do
18
19
  out, err = capture_output do
19
- Gem::Util.silent_system(*ruby_with_rubygems_in_load_path, '-e', 'puts "hello"; warn "hello"')
20
+ Gem::Util.silent_system(*ruby_with_rubygems_in_load_path, "-e", 'puts "hello"; warn "hello"')
20
21
  end
21
22
  assert_empty out
22
23
  assert_empty err
@@ -24,35 +25,35 @@ class TestGemUtil < Gem::TestCase
24
25
  end
25
26
 
26
27
  def test_traverse_parents
27
- FileUtils.mkdir_p 'a/b/c'
28
+ FileUtils.mkdir_p "a/b/c"
28
29
 
29
- enum = Gem::Util.traverse_parents 'a/b/c'
30
+ enum = Gem::Util.traverse_parents "a/b/c"
30
31
 
31
- assert_equal File.join(@tempdir, 'a/b/c'), enum.next
32
- assert_equal File.join(@tempdir, 'a/b'), enum.next
33
- assert_equal File.join(@tempdir, 'a'), enum.next
32
+ assert_equal File.join(@tempdir, "a/b/c"), enum.next
33
+ assert_equal File.join(@tempdir, "a/b"), enum.next
34
+ assert_equal File.join(@tempdir, "a"), enum.next
34
35
  loop { break if enum.next.nil? } # exhaust the enumerator
35
36
  end
36
37
 
37
38
  def test_traverse_parents_does_not_crash_on_permissions_error
38
- pend 'skipped on MS Windows (chmod has no effect)' if win_platform? || java_platform?
39
+ pend "skipped on MS Windows (chmod has no effect)" if win_platform? || java_platform?
39
40
 
40
- FileUtils.mkdir_p 'd/e/f'
41
+ FileUtils.mkdir_p "d/e/f"
41
42
  # remove 'execute' permission from "e" directory and make it
42
43
  # impossible to cd into it and its children
43
- FileUtils.chmod(0666, 'd/e')
44
+ FileUtils.chmod(0666, "d/e")
44
45
 
45
- pend 'skipped in root privilege' if Process.uid.zero?
46
+ pend "skipped in root privilege" if Process.uid.zero?
46
47
 
47
- paths = Gem::Util.traverse_parents('d/e/f').to_a
48
+ paths = Gem::Util.traverse_parents("d/e/f").to_a
48
49
 
49
- assert_equal File.join(@tempdir, 'd'), paths[0]
50
+ assert_equal File.join(@tempdir, "d"), paths[0]
50
51
  assert_equal @tempdir, paths[1]
51
52
  assert_equal File.realpath("..", @tempdir), paths[2]
52
53
  assert_equal File.realpath("../..", @tempdir), paths[3]
53
54
  ensure
54
55
  # restore default permissions, allow the directory to be removed
55
- FileUtils.chmod(0775, 'd/e') unless win_platform? || java_platform?
56
+ FileUtils.chmod(0775, "d/e") unless win_platform? || java_platform?
56
57
  end
57
58
 
58
59
  def test_linked_list_find
@@ -64,19 +65,19 @@ class TestGemUtil < Gem::TestCase
64
65
  end
65
66
 
66
67
  def test_glob_files_in_dir
67
- FileUtils.mkdir_p 'g'
68
- FileUtils.touch File.join('g', 'h.rb')
69
- FileUtils.touch File.join('g', 'i.rb')
68
+ FileUtils.mkdir_p "g"
69
+ FileUtils.touch File.join("g", "h.rb")
70
+ FileUtils.touch File.join("g", "i.rb")
70
71
 
71
72
  expected_paths = [
72
- File.join(@tempdir, 'g/h.rb'),
73
- File.join(@tempdir, 'g/i.rb'),
73
+ File.join(@tempdir, "g/h.rb"),
74
+ File.join(@tempdir, "g/i.rb"),
74
75
  ]
75
76
 
76
- files_with_absolute_base = Gem::Util.glob_files_in_dir('*.rb', File.join(@tempdir, 'g'))
77
+ files_with_absolute_base = Gem::Util.glob_files_in_dir("*.rb", File.join(@tempdir, "g"))
77
78
  assert_equal expected_paths.sort, files_with_absolute_base.sort
78
79
 
79
- files_with_relative_base = Gem::Util.glob_files_in_dir('*.rb', 'g')
80
+ files_with_relative_base = Gem::Util.glob_files_in_dir("*.rb", "g")
80
81
  assert_equal expected_paths.sort, files_with_relative_base.sort
81
82
  end
82
83
 
@@ -11,21 +11,21 @@ class TestGemValidator < Gem::TestCase
11
11
  end
12
12
 
13
13
  def test_alien
14
- @spec = quick_gem 'a' do |s|
14
+ @spec = quick_gem "a" do |s|
15
15
  s.files = %w[lib/a.rb lib/b.rb]
16
16
  end
17
17
 
18
18
  util_build_gem @spec
19
19
 
20
- FileUtils.rm File.join(@spec.gem_dir, 'lib/b.rb')
21
- FileUtils.touch File.join(@spec.gem_dir, 'lib/c.rb')
20
+ FileUtils.rm File.join(@spec.gem_dir, "lib/b.rb")
21
+ FileUtils.touch File.join(@spec.gem_dir, "lib/c.rb")
22
22
 
23
- alien = @validator.alien 'a'
23
+ alien = @validator.alien "a"
24
24
 
25
25
  expected = {
26
26
  @spec.file_name => [
27
- Gem::Validator::ErrorData.new('lib/b.rb', 'Missing file'),
28
- Gem::Validator::ErrorData.new('lib/c.rb', 'Extra file'),
27
+ Gem::Validator::ErrorData.new("lib/b.rb", "Missing file"),
28
+ Gem::Validator::ErrorData.new("lib/c.rb", "Extra file"),
29
29
  ],
30
30
  }
31
31
 
@@ -33,9 +33,9 @@ class TestGemValidator < Gem::TestCase
33
33
  end
34
34
 
35
35
  def test_alien_default
36
- new_default_spec 'c', 1, nil, 'lib/c.rb'
36
+ new_default_spec "c", 1, nil, "lib/c.rb"
37
37
 
38
- alien = @validator.alien 'c'
38
+ alien = @validator.alien "c"
39
39
 
40
40
  assert_empty alien
41
41
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
2
+
3
+ require_relative "helper"
3
4
  require "rubygems/version"
4
5
 
5
6
  class TestGemVersion < Gem::TestCase
@@ -32,12 +33,19 @@ class TestGemVersion < Gem::TestCase
32
33
  def test_class_create
33
34
  real = Gem::Version.new(1.0)
34
35
 
35
- assert_same real, Gem::Version.create(real)
36
- assert_nil Gem::Version.create(nil)
36
+ assert_same real, Gem::Version.create(real)
37
+
38
+ expected = "nil versions are discouraged and will be deprecated in Rubygems 4\n"
39
+ actual_stdout, actual_stderr = capture_output do
40
+ assert_nil Gem::Version.create(nil)
41
+ end
42
+ assert_empty actual_stdout
43
+ assert_equal(expected, actual_stderr)
44
+
37
45
  assert_equal v("5.1"), Gem::Version.create("5.1")
38
46
 
39
- ver = '1.1'.freeze
40
- assert_equal v('1.1'), Gem::Version.create(ver)
47
+ ver = "1.1"
48
+ assert_equal v("1.1"), Gem::Version.create(ver)
41
49
  end
42
50
 
43
51
  def test_class_correct
@@ -53,8 +61,8 @@ class TestGemVersion < Gem::TestCase
53
61
  end
54
62
 
55
63
  def test_class_new_subclass
56
- v1 = Gem::Version.new '1'
57
- v2 = V.new '1'
64
+ v1 = Gem::Version.new "1"
65
+ v2 = V.new "1"
58
66
 
59
67
  refute_same v1, v2
60
68
  end
@@ -81,7 +89,7 @@ class TestGemVersion < Gem::TestCase
81
89
  end
82
90
 
83
91
  def test_initialize
84
- ["1.0", "1.0 ", " 1.0 ", "1.0\n", "\n1.0\n", "1.0".freeze].each do |good|
92
+ ["1.0", "1.0 ", " 1.0 ", "1.0\n", "\n1.0\n", "1.0"].each do |good|
85
93
  assert_version_equal "1.0", good
86
94
  end
87
95
 
@@ -120,10 +128,10 @@ class TestGemVersion < Gem::TestCase
120
128
  assert_prerelease "22.1.50.0.d"
121
129
  assert_prerelease "1.2.d.42"
122
130
 
123
- assert_prerelease '1.A'
131
+ assert_prerelease "1.A"
124
132
 
125
- assert_prerelease '1-1'
126
- assert_prerelease '1-a'
133
+ assert_prerelease "1-1"
134
+ assert_prerelease "1-a"
127
135
 
128
136
  refute_prerelease "1.2.0"
129
137
  refute_prerelease "2.9"
@@ -199,7 +207,7 @@ class TestGemVersion < Gem::TestCase
199
207
 
200
208
  # modifying the segments of a version should not affect the segments of the cached version object
201
209
  def test_segments
202
- v('9.8.7').segments[2] += 1
210
+ v("9.8.7").segments[2] += 1
203
211
 
204
212
  refute_version_equal "9.8.8", "9.8.7"
205
213
  assert_equal [9,8,7], v("9.8.7").segments
@@ -212,10 +220,10 @@ class TestGemVersion < Gem::TestCase
212
220
  end
213
221
 
214
222
  def test_frozen_version
215
- v = v('1.freeze.test').freeze
216
- assert_less_than v, v('1')
217
- assert_version_equal v('1'), v.release
218
- assert_version_equal v('2'), v.bump
223
+ v = v("1.freeze.test").freeze
224
+ assert_less_than v, v("1")
225
+ assert_version_equal v("1"), v.release
226
+ assert_version_equal v("2"), v.bump
219
227
  end
220
228
 
221
229
  # Asserts that +version+ is a prerelease.
@@ -1,13 +1,14 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/command'
4
- require 'rubygems/version_option'
2
+
3
+ require_relative "helper"
4
+ require "rubygems/command"
5
+ require "rubygems/version_option"
5
6
 
6
7
  class TestGemVersionOption < Gem::TestCase
7
8
  def setup
8
9
  super
9
10
 
10
- @cmd = Gem::Command.new 'dummy', 'dummy'
11
+ @cmd = Gem::Command.new "dummy", "dummy"
11
12
  @cmd.extend Gem::VersionOption
12
13
  end
13
14
 
@@ -43,8 +44,8 @@ class TestGemVersionOption < Gem::TestCase
43
44
 
44
45
  expected = [
45
46
  Gem::Platform::RUBY,
46
- Gem::Platform.new('x86-freebsd6'),
47
- Gem::Platform.new('x86-freebsd7'),
47
+ Gem::Platform.new("x86-freebsd6"),
48
+ Gem::Platform.new("x86-freebsd7"),
48
49
  ]
49
50
 
50
51
  assert_equal expected, Gem.platforms
@@ -69,7 +70,7 @@ class TestGemVersionOption < Gem::TestCase
69
70
 
70
71
  expected = [
71
72
  Gem::Platform::RUBY,
72
- Gem::Platform.new('x86-freebsd6'),
73
+ Gem::Platform.new("x86-freebsd6"),
73
74
  ]
74
75
 
75
76
  assert_equal expected, Gem.platforms
@@ -84,7 +85,7 @@ class TestGemVersionOption < Gem::TestCase
84
85
  :args => [],
85
86
  :explicit_prerelease => false,
86
87
  :prerelease => false,
87
- :version => Gem::Requirement.new('> 1'),
88
+ :version => Gem::Requirement.new("> 1"),
88
89
  }
89
90
 
90
91
  assert_equal expected, @cmd.options
@@ -93,13 +94,13 @@ class TestGemVersionOption < Gem::TestCase
93
94
  def test_version_option_compound
94
95
  @cmd.add_version_option
95
96
 
96
- @cmd.handle_options ['--version', '< 1, > 0.9']
97
+ @cmd.handle_options ["--version", "< 1, > 0.9"]
97
98
 
98
99
  expected = {
99
100
  :args => [],
100
101
  :explicit_prerelease => false,
101
102
  :prerelease => false,
102
- :version => Gem::Requirement.new('< 1', '> 0.9'),
103
+ :version => Gem::Requirement.new("< 1", "> 0.9"),
103
104
  }
104
105
 
105
106
  assert_equal expected, @cmd.options
@@ -108,13 +109,13 @@ class TestGemVersionOption < Gem::TestCase
108
109
  def test_multiple_version_operator_option_compound
109
110
  @cmd.add_version_option
110
111
 
111
- @cmd.handle_options ['--version', '< 1', '--version', '> 0.9']
112
+ @cmd.handle_options ["--version", "< 1", "--version", "> 0.9"]
112
113
 
113
114
  expected = {
114
115
  :args => [],
115
116
  :explicit_prerelease => false,
116
117
  :prerelease => false,
117
- :version => Gem::Requirement.new('< 1', '> 0.9'),
118
+ :version => Gem::Requirement.new("< 1", "> 0.9"),
118
119
  }
119
120
 
120
121
  assert_equal expected, @cmd.options
@@ -130,7 +131,7 @@ class TestGemVersionOption < Gem::TestCase
130
131
  :args => [],
131
132
  :explicit_prerelease => true,
132
133
  :prerelease => true,
133
- :version => Gem::Requirement.new('> 1'),
134
+ :version => Gem::Requirement.new("> 1"),
134
135
  }
135
136
 
136
137
  assert_equal expected, @cmd.options
@@ -145,7 +146,7 @@ class TestGemVersionOption < Gem::TestCase
145
146
  :args => [],
146
147
  :explicit_prerelease => false,
147
148
  :prerelease => true,
148
- :version => Gem::Requirement.new('> 1.a'),
149
+ :version => Gem::Requirement.new("> 1.a"),
149
150
  }
150
151
 
151
152
  assert_equal expected, @cmd.options
@@ -156,7 +157,7 @@ class TestGemVersionOption < Gem::TestCase
156
157
  :args => [],
157
158
  :explicit_prerelease => false,
158
159
  :prerelease => false,
159
- :version => Gem::Requirement.new('> 1'),
160
+ :version => Gem::Requirement.new("> 1"),
160
161
  }
161
162
 
162
163
  assert_equal expected, @cmd.options