rubygems-update 3.4.21 → 3.5.0

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 (564) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +132 -2
  3. data/Manifest.txt +39 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +74 -0
  6. data/bundler/README.md +1 -2
  7. data/bundler/bundler.gemspec +4 -2
  8. data/bundler/exe/bundle +1 -10
  9. data/bundler/lib/bundler/build_metadata.rb +3 -3
  10. data/bundler/lib/bundler/capistrano.rb +1 -1
  11. data/bundler/lib/bundler/checksum.rb +245 -0
  12. data/bundler/lib/bundler/ci_detector.rb +75 -0
  13. data/bundler/lib/bundler/cli/add.rb +3 -3
  14. data/bundler/lib/bundler/cli/binstubs.rb +4 -4
  15. data/bundler/lib/bundler/cli/cache.rb +1 -1
  16. data/bundler/lib/bundler/cli/check.rb +1 -1
  17. data/bundler/lib/bundler/cli/common.rb +9 -1
  18. data/bundler/lib/bundler/cli/config.rb +8 -7
  19. data/bundler/lib/bundler/cli/console.rb +3 -2
  20. data/bundler/lib/bundler/cli/doctor.rb +2 -2
  21. data/bundler/lib/bundler/cli/exec.rb +1 -1
  22. data/bundler/lib/bundler/cli/gem.rb +31 -23
  23. data/bundler/lib/bundler/cli/info.rb +2 -13
  24. data/bundler/lib/bundler/cli/install.rb +5 -4
  25. data/bundler/lib/bundler/cli/issue.rb +1 -1
  26. data/bundler/lib/bundler/cli/lock.rb +4 -4
  27. data/bundler/lib/bundler/cli/open.rb +1 -1
  28. data/bundler/lib/bundler/cli/outdated.rb +6 -6
  29. data/bundler/lib/bundler/cli/plugin.rb +7 -14
  30. data/bundler/lib/bundler/cli/pristine.rb +38 -30
  31. data/bundler/lib/bundler/cli/show.rb +2 -2
  32. data/bundler/lib/bundler/cli/update.rb +5 -5
  33. data/bundler/lib/bundler/cli.rb +215 -263
  34. data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
  35. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  36. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  37. data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
  38. data/bundler/lib/bundler/compact_index_client.rb +14 -7
  39. data/bundler/lib/bundler/constants.rb +1 -1
  40. data/bundler/lib/bundler/current_ruby.rb +5 -21
  41. data/bundler/lib/bundler/definition.rb +43 -16
  42. data/bundler/lib/bundler/dependency.rb +16 -12
  43. data/bundler/lib/bundler/digest.rb +2 -2
  44. data/bundler/lib/bundler/dsl.rb +43 -25
  45. data/bundler/lib/bundler/endpoint_specification.rb +6 -2
  46. data/bundler/lib/bundler/env.rb +1 -3
  47. data/bundler/lib/bundler/errors.rb +58 -0
  48. data/bundler/lib/bundler/fetcher/base.rb +3 -1
  49. data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
  50. data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
  51. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  52. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  53. data/bundler/lib/bundler/fetcher.rb +28 -25
  54. data/bundler/lib/bundler/friendly_errors.rb +5 -5
  55. data/bundler/lib/bundler/gem_helper.rb +1 -1
  56. data/bundler/lib/bundler/gem_helpers.rb +12 -2
  57. data/bundler/lib/bundler/graph.rb +9 -9
  58. data/bundler/lib/bundler/index.rb +1 -2
  59. data/bundler/lib/bundler/injector.rb +1 -1
  60. data/bundler/lib/bundler/inline.rb +3 -3
  61. data/bundler/lib/bundler/installer/gem_installer.rb +10 -10
  62. data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
  63. data/bundler/lib/bundler/installer/standalone.rb +2 -3
  64. data/bundler/lib/bundler/installer.rb +9 -9
  65. data/bundler/lib/bundler/lazy_specification.rb +28 -17
  66. data/bundler/lib/bundler/lockfile_generator.rb +9 -0
  67. data/bundler/lib/bundler/lockfile_parser.rb +81 -10
  68. data/bundler/lib/bundler/man/bundle-add.1 +3 -26
  69. data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
  70. data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
  71. data/bundler/lib/bundler/man/bundle-check.1 +3 -12
  72. data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
  73. data/bundler/lib/bundler/man/bundle-config.1 +20 -211
  74. data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
  75. data/bundler/lib/bundler/man/bundle-console.1 +4 -22
  76. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
  77. data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
  78. data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
  79. data/bundler/lib/bundler/man/bundle-help.1 +3 -7
  80. data/bundler/lib/bundler/man/bundle-info.1 +3 -9
  81. data/bundler/lib/bundler/man/bundle-init.1 +3 -12
  82. data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
  83. data/bundler/lib/bundler/man/bundle-install.1 +27 -125
  84. data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
  85. data/bundler/lib/bundler/man/bundle-list.1 +4 -19
  86. data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
  87. data/bundler/lib/bundler/man/bundle-open.1 +7 -27
  88. data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
  89. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
  90. data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
  91. data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
  92. data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
  93. data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
  94. data/bundler/lib/bundler/man/bundle-show.1 +3 -10
  95. data/bundler/lib/bundler/man/bundle-update.1 +18 -137
  96. data/bundler/lib/bundler/man/bundle-version.1 +3 -16
  97. data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
  98. data/bundler/lib/bundler/man/bundle.1 +5 -44
  99. data/bundler/lib/bundler/man/gemfile.5 +24 -301
  100. data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
  101. data/bundler/lib/bundler/match_metadata.rb +4 -0
  102. data/bundler/lib/bundler/match_platform.rb +1 -1
  103. data/bundler/lib/bundler/plugin/api/source.rb +3 -2
  104. data/bundler/lib/bundler/plugin/index.rb +8 -0
  105. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  106. data/bundler/lib/bundler/plugin.rb +12 -5
  107. data/bundler/lib/bundler/resolver/base.rb +1 -1
  108. data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
  109. data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
  110. data/bundler/lib/bundler/resolver.rb +16 -16
  111. data/bundler/lib/bundler/ruby_dsl.rb +20 -12
  112. data/bundler/lib/bundler/ruby_version.rb +1 -1
  113. data/bundler/lib/bundler/rubygems_ext.rb +27 -54
  114. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -58
  115. data/bundler/lib/bundler/rubygems_integration.rb +25 -94
  116. data/bundler/lib/bundler/runtime.rb +2 -2
  117. data/bundler/lib/bundler/self_manager.rb +23 -7
  118. data/bundler/lib/bundler/settings.rb +27 -7
  119. data/bundler/lib/bundler/setup.rb +4 -1
  120. data/bundler/lib/bundler/shared_helpers.rb +35 -13
  121. data/bundler/lib/bundler/source/git/git_proxy.rb +22 -14
  122. data/bundler/lib/bundler/source/git.rb +4 -3
  123. data/bundler/lib/bundler/source/metadata.rb +16 -16
  124. data/bundler/lib/bundler/source/path.rb +7 -6
  125. data/bundler/lib/bundler/source/rubygems.rb +21 -14
  126. data/bundler/lib/bundler/source.rb +2 -0
  127. data/bundler/lib/bundler/spec_set.rb +43 -12
  128. data/bundler/lib/bundler/stub_specification.rb +1 -0
  129. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  130. data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
  131. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
  132. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
  133. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  134. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
  135. data/bundler/lib/bundler/ui/shell.rb +2 -2
  136. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  137. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  138. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  140. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  141. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  142. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +36 -36
  143. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  144. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  145. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  146. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +8 -10
  147. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
  148. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
  149. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  150. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  151. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
  152. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
  153. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
  154. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  155. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  156. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
  157. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  158. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
  159. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +44 -6
  160. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  161. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  162. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +26 -150
  163. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +4 -46
  164. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  165. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -45
  166. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
  167. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  168. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  169. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  170. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  171. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
  172. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  173. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +155 -8
  174. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  175. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  176. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  177. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  178. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  179. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  180. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  181. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  182. data/bundler/lib/bundler/version.rb +1 -1
  183. data/bundler/lib/bundler/vlad.rb +1 -1
  184. data/bundler/lib/bundler/yaml_serializer.rb +9 -4
  185. data/bundler/lib/bundler.rb +38 -35
  186. data/lib/rubygems/available_set.rb +4 -4
  187. data/lib/rubygems/basic_specification.rb +35 -37
  188. data/lib/rubygems/bundler_version_finder.rb +4 -4
  189. data/lib/rubygems/ci_detector.rb +75 -0
  190. data/lib/rubygems/command.rb +15 -17
  191. data/lib/rubygems/command_manager.rb +5 -4
  192. data/lib/rubygems/commands/build_command.rb +2 -2
  193. data/lib/rubygems/commands/cert_command.rb +2 -3
  194. data/lib/rubygems/commands/check_command.rb +4 -4
  195. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  196. data/lib/rubygems/commands/contents_command.rb +5 -5
  197. data/lib/rubygems/commands/dependency_command.rb +4 -5
  198. data/lib/rubygems/commands/environment_command.rb +3 -5
  199. data/lib/rubygems/commands/exec_command.rb +1 -1
  200. data/lib/rubygems/commands/fetch_command.rb +2 -2
  201. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  202. data/lib/rubygems/commands/help_command.rb +4 -4
  203. data/lib/rubygems/commands/info_command.rb +2 -2
  204. data/lib/rubygems/commands/install_command.rb +8 -16
  205. data/lib/rubygems/commands/list_command.rb +2 -2
  206. data/lib/rubygems/commands/lock_command.rb +1 -1
  207. data/lib/rubygems/commands/open_command.rb +1 -1
  208. data/lib/rubygems/commands/owner_command.rb +1 -1
  209. data/lib/rubygems/commands/pristine_command.rb +13 -15
  210. data/lib/rubygems/commands/push_command.rb +2 -2
  211. data/lib/rubygems/commands/query_command.rb +4 -5
  212. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  213. data/lib/rubygems/commands/search_command.rb +2 -2
  214. data/lib/rubygems/commands/setup_command.rb +33 -36
  215. data/lib/rubygems/commands/sources_command.rb +12 -12
  216. data/lib/rubygems/commands/specification_command.rb +10 -10
  217. data/lib/rubygems/commands/stale_command.rb +1 -1
  218. data/lib/rubygems/commands/uninstall_command.rb +13 -14
  219. data/lib/rubygems/commands/unpack_command.rb +7 -7
  220. data/lib/rubygems/commands/update_command.rb +11 -13
  221. data/lib/rubygems/commands/which_command.rb +1 -1
  222. data/lib/rubygems/commands/yank_command.rb +1 -1
  223. data/lib/rubygems/compatibility.rb +5 -6
  224. data/lib/rubygems/config_file.rb +7 -7
  225. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  226. data/lib/rubygems/core_ext/kernel_require.rb +20 -49
  227. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  228. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  229. data/lib/rubygems/defaults.rb +15 -3
  230. data/lib/rubygems/dependency.rb +12 -14
  231. data/lib/rubygems/dependency_installer.rb +30 -31
  232. data/lib/rubygems/dependency_list.rb +1 -1
  233. data/lib/rubygems/deprecate.rb +16 -15
  234. data/lib/rubygems/doctor.rb +6 -6
  235. data/lib/rubygems/errors.rb +2 -6
  236. data/lib/rubygems/exceptions.rb +2 -1
  237. data/lib/rubygems/ext/builder.rb +15 -10
  238. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  239. data/lib/rubygems/ext/ext_conf_builder.rb +2 -4
  240. data/lib/rubygems/ext/rake_builder.rb +1 -1
  241. data/lib/rubygems/gem_runner.rb +4 -4
  242. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  243. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  244. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  245. data/lib/rubygems/install_update_options.rb +18 -19
  246. data/lib/rubygems/installer.rb +66 -45
  247. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  248. data/lib/rubygems/local_remote_options.rb +8 -11
  249. data/lib/rubygems/name_tuple.rb +7 -9
  250. data/lib/rubygems/net/http.rb +3 -0
  251. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  252. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  253. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  254. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  255. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  256. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  257. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  258. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  259. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  260. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  261. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  262. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  263. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  264. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  265. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  266. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  267. data/lib/rubygems/package/digest_io.rb +1 -1
  268. data/lib/rubygems/package/old.rb +2 -2
  269. data/lib/rubygems/package/tar_header.rb +45 -39
  270. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  271. data/lib/rubygems/package/tar_reader.rb +14 -5
  272. data/lib/rubygems/package/tar_writer.rb +20 -18
  273. data/lib/rubygems/package.rb +28 -27
  274. data/lib/rubygems/package_task.rb +2 -2
  275. data/lib/rubygems/path_support.rb +10 -11
  276. data/lib/rubygems/platform.rb +65 -48
  277. data/lib/rubygems/query_utils.rb +7 -9
  278. data/lib/rubygems/remote_fetcher.rb +17 -17
  279. data/lib/rubygems/request/connection_pools.rb +3 -3
  280. data/lib/rubygems/request.rb +20 -17
  281. data/lib/rubygems/request_set/gem_dependency_api.rb +120 -123
  282. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  283. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  284. data/lib/rubygems/request_set/lockfile.rb +6 -11
  285. data/lib/rubygems/request_set.rb +5 -5
  286. data/lib/rubygems/requirement.rb +7 -7
  287. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  288. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  289. data/lib/rubygems/resolver/activation_request.rb +1 -3
  290. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  291. data/lib/rubygems/resolver/best_set.rb +1 -1
  292. data/lib/rubygems/resolver/composed_set.rb +1 -1
  293. data/lib/rubygems/resolver/conflict.rb +4 -12
  294. data/lib/rubygems/resolver/index_set.rb +4 -4
  295. data/lib/rubygems/resolver/index_specification.rb +2 -2
  296. data/lib/rubygems/resolver/installer_set.rb +5 -6
  297. data/lib/rubygems/resolver/lock_set.rb +1 -1
  298. data/lib/rubygems/resolver.rb +6 -13
  299. data/lib/rubygems/s3_uri_signer.rb +6 -6
  300. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  301. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  302. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  303. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  304. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  305. data/lib/rubygems/safe_marshal.rb +74 -0
  306. data/lib/rubygems/safe_yaml.rb +5 -28
  307. data/lib/rubygems/security/policies.rb +36 -38
  308. data/lib/rubygems/security/policy.rb +7 -11
  309. data/lib/rubygems/security/signer.rb +1 -1
  310. data/lib/rubygems/security/trust_dir.rb +4 -4
  311. data/lib/rubygems/security.rb +8 -22
  312. data/lib/rubygems/source/git.rb +1 -3
  313. data/lib/rubygems/source/installed.rb +0 -2
  314. data/lib/rubygems/source/local.rb +7 -9
  315. data/lib/rubygems/source/lock.rb +1 -3
  316. data/lib/rubygems/source/specific_file.rb +0 -1
  317. data/lib/rubygems/source/vendor.rb +0 -2
  318. data/lib/rubygems/source.rb +12 -12
  319. data/lib/rubygems/source_list.rb +5 -5
  320. data/lib/rubygems/spec_fetcher.rb +31 -31
  321. data/lib/rubygems/specification.rb +145 -150
  322. data/lib/rubygems/specification_policy.rb +61 -31
  323. data/lib/rubygems/stub_specification.rb +4 -5
  324. data/lib/rubygems/text.rb +1 -2
  325. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  326. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  327. data/lib/rubygems/timeout.rb +3 -0
  328. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  329. data/lib/rubygems/uninstaller.rb +9 -11
  330. data/lib/rubygems/update_suggestion.rb +5 -18
  331. data/lib/rubygems/uri_formatter.rb +1 -1
  332. data/lib/rubygems/user_interaction.rb +17 -23
  333. data/lib/rubygems/util/licenses.rb +113 -35
  334. data/lib/rubygems/util/list.rb +3 -1
  335. data/lib/rubygems/util.rb +2 -4
  336. data/lib/rubygems/validator.rb +6 -4
  337. data/lib/rubygems/version.rb +35 -29
  338. data/lib/rubygems/version_option.rb +2 -5
  339. data/lib/rubygems/yaml_serializer.rb +9 -4
  340. data/lib/rubygems.rb +42 -42
  341. data/rubygems-update.gemspec +4 -4
  342. data/setup.rb +2 -2
  343. metadata +43 -225
  344. data/lib/rubygems/indexer.rb +0 -428
  345. data/lib/rubygems/mock_gem_ui.rb +0 -86
  346. data/test/rubygems/alternate_cert.pem +0 -19
  347. data/test/rubygems/alternate_cert_32.pem +0 -19
  348. data/test/rubygems/alternate_key.pem +0 -27
  349. data/test/rubygems/bad_rake.rb +0 -3
  350. data/test/rubygems/bundler_test_gem.rb +0 -424
  351. data/test/rubygems/ca_cert.pem +0 -77
  352. data/test/rubygems/child_cert.pem +0 -19
  353. data/test/rubygems/child_cert_32.pem +0 -19
  354. data/test/rubygems/child_key.pem +0 -27
  355. data/test/rubygems/client.pem +0 -107
  356. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  357. data/test/rubygems/data/gem-private_key.pem +0 -27
  358. data/test/rubygems/data/gem-public_cert.pem +0 -20
  359. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  360. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  361. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  362. data/test/rubygems/encrypted_private_key.pem +0 -30
  363. data/test/rubygems/expired_cert.pem +0 -19
  364. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  365. data/test/rubygems/foo/discover.rb +0 -1
  366. data/test/rubygems/future_cert.pem +0 -19
  367. data/test/rubygems/future_cert_32.pem +0 -19
  368. data/test/rubygems/good_rake.rb +0 -3
  369. data/test/rubygems/grandchild_cert.pem +0 -19
  370. data/test/rubygems/grandchild_cert_32.pem +0 -19
  371. data/test/rubygems/grandchild_key.pem +0 -27
  372. data/test/rubygems/helper.rb +0 -1649
  373. data/test/rubygems/installer_test_case.rb +0 -248
  374. data/test/rubygems/invalid_client.pem +0 -49
  375. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  376. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  377. data/test/rubygems/invalid_key.pem +0 -27
  378. data/test/rubygems/invalid_signer_cert.pem +0 -19
  379. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  380. data/test/rubygems/invalidchild_cert.pem +0 -19
  381. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  382. data/test/rubygems/invalidchild_key.pem +0 -27
  383. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  384. data/test/rubygems/package/tar_test_case.rb +0 -175
  385. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  386. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  387. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  388. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  389. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  390. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  391. data/test/rubygems/private3072_key.pem +0 -40
  392. data/test/rubygems/private_ec_key.pem +0 -9
  393. data/test/rubygems/private_key.pem +0 -27
  394. data/test/rubygems/public3072_cert.pem +0 -25
  395. data/test/rubygems/public_cert.pem +0 -20
  396. data/test/rubygems/public_cert_32.pem +0 -19
  397. data/test/rubygems/public_key.pem +0 -9
  398. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  399. data/test/rubygems/rubygems_plugin.rb +0 -24
  400. data/test/rubygems/sff/discover.rb +0 -1
  401. data/test/rubygems/simple_gem.rb +0 -68
  402. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  403. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  404. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  405. data/test/rubygems/ssl_cert.pem +0 -80
  406. data/test/rubygems/ssl_key.pem +0 -27
  407. data/test/rubygems/test_bundled_ca.rb +0 -61
  408. data/test/rubygems/test_config.rb +0 -28
  409. data/test/rubygems/test_deprecate.rb +0 -158
  410. data/test/rubygems/test_exit.rb +0 -17
  411. data/test/rubygems/test_gem.rb +0 -1799
  412. data/test/rubygems/test_gem_available_set.rb +0 -130
  413. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  414. data/test/rubygems/test_gem_command.rb +0 -403
  415. data/test/rubygems/test_gem_command_manager.rb +0 -400
  416. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  417. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  418. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  419. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  420. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  421. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  422. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  423. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  424. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  425. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  426. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  427. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  428. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  429. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  430. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  431. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  432. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  433. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  434. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  435. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  436. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  437. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  438. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  439. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  440. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  441. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  442. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  443. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  444. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  445. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  446. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -522
  447. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  448. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  449. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  450. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  451. data/test/rubygems/test_gem_config_file.rb +0 -551
  452. data/test/rubygems/test_gem_dependency.rb +0 -398
  453. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  454. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  455. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  456. data/test/rubygems/test_gem_doctor.rb +0 -195
  457. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  458. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  459. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  460. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  461. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  462. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  463. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  464. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  465. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  466. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  467. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  468. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  469. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  470. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  471. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  472. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  473. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  474. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  475. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  476. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  477. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  478. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  479. data/test/rubygems/test_gem_indexer.rb +0 -381
  480. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  481. data/test/rubygems/test_gem_installer.rb +0 -2512
  482. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  483. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  484. data/test/rubygems/test_gem_package.rb +0 -1306
  485. data/test/rubygems/test_gem_package_old.rb +0 -91
  486. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  487. data/test/rubygems/test_gem_package_tar_reader.rb +0 -135
  488. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  489. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  490. data/test/rubygems/test_gem_package_task.rb +0 -118
  491. data/test/rubygems/test_gem_path_support.rb +0 -139
  492. data/test/rubygems/test_gem_platform.rb +0 -497
  493. data/test/rubygems/test_gem_rdoc.rb +0 -137
  494. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  495. data/test/rubygems/test_gem_request.rb +0 -547
  496. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  497. data/test/rubygems/test_gem_request_set.rb +0 -672
  498. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  499. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  500. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  501. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  502. data/test/rubygems/test_gem_requirement.rb +0 -505
  503. data/test/rubygems/test_gem_resolver.rb +0 -859
  504. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  505. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  506. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  507. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  508. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  509. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  510. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  511. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  512. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  513. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  514. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  515. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  516. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  517. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  518. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  519. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  520. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  521. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  522. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  523. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  524. data/test/rubygems/test_gem_security.rb +0 -341
  525. data/test/rubygems/test_gem_security_policy.rb +0 -535
  526. data/test/rubygems/test_gem_security_signer.rb +0 -218
  527. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  528. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  529. data/test/rubygems/test_gem_source.rb +0 -254
  530. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  531. data/test/rubygems/test_gem_source_git.rb +0 -310
  532. data/test/rubygems/test_gem_source_installed.rb +0 -35
  533. data/test/rubygems/test_gem_source_list.rb +0 -119
  534. data/test/rubygems/test_gem_source_local.rb +0 -107
  535. data/test/rubygems/test_gem_source_lock.rb +0 -113
  536. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  537. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  538. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  539. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  540. data/test/rubygems/test_gem_specification.rb +0 -3856
  541. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  542. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  543. data/test/rubygems/test_gem_text.rb +0 -103
  544. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  545. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  546. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  547. data/test/rubygems/test_gem_uri.rb +0 -41
  548. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  549. data/test/rubygems/test_gem_util.rb +0 -91
  550. data/test/rubygems/test_gem_validator.rb +0 -42
  551. data/test/rubygems/test_gem_version.rb +0 -305
  552. data/test/rubygems/test_gem_version_option.rb +0 -165
  553. data/test/rubygems/test_kernel.rb +0 -124
  554. data/test/rubygems/test_project_sanity.rb +0 -49
  555. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  556. data/test/rubygems/test_require.rb +0 -732
  557. data/test/rubygems/test_rubygems.rb +0 -76
  558. data/test/rubygems/test_webauthn_listener.rb +0 -143
  559. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  560. data/test/rubygems/test_webauthn_poller.rb +0 -124
  561. data/test/rubygems/utilities.rb +0 -436
  562. data/test/rubygems/wrong_key_cert.pem +0 -19
  563. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  564. data/test/test_changelog_generator.rb +0 -17
@@ -13,6 +13,8 @@ require_relative "stub_specification"
13
13
  require_relative "platform"
14
14
  require_relative "util/list"
15
15
 
16
+ require "rbconfig"
17
+
16
18
  ##
17
19
  # The Specification class contains the information for a gem. Typically
18
20
  # defined in a .gemspec file or a Rakefile, and looks like this:
@@ -106,7 +108,7 @@ class Gem::Specification < Gem::BasicSpecification
106
108
  @load_cache = {} # :nodoc:
107
109
  @load_cache_mutex = Thread::Mutex.new
108
110
 
109
- VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/.freeze # :nodoc:
111
+ VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/ # :nodoc:
110
112
 
111
113
  # :startdoc:
112
114
 
@@ -125,35 +127,35 @@ class Gem::Specification < Gem::BasicSpecification
125
127
  # Map of attribute names to default values.
126
128
 
127
129
  @@default_value = {
128
- :authors => [],
129
- :autorequire => nil,
130
- :bindir => "bin",
131
- :cert_chain => [],
132
- :date => nil,
133
- :dependencies => [],
134
- :description => nil,
135
- :email => nil,
136
- :executables => [],
137
- :extensions => [],
138
- :extra_rdoc_files => [],
139
- :files => [],
140
- :homepage => nil,
141
- :licenses => [],
142
- :metadata => {},
143
- :name => nil,
144
- :platform => Gem::Platform::RUBY,
145
- :post_install_message => nil,
146
- :rdoc_options => [],
147
- :require_paths => ["lib"],
148
- :required_ruby_version => Gem::Requirement.default,
149
- :required_rubygems_version => Gem::Requirement.default,
150
- :requirements => [],
151
- :rubygems_version => Gem::VERSION,
152
- :signing_key => nil,
153
- :specification_version => CURRENT_SPECIFICATION_VERSION,
154
- :summary => nil,
155
- :test_files => [],
156
- :version => nil,
130
+ authors: [],
131
+ autorequire: nil,
132
+ bindir: "bin",
133
+ cert_chain: [],
134
+ date: nil,
135
+ dependencies: [],
136
+ description: nil,
137
+ email: nil,
138
+ executables: [],
139
+ extensions: [],
140
+ extra_rdoc_files: [],
141
+ files: [],
142
+ homepage: nil,
143
+ licenses: [],
144
+ metadata: {},
145
+ name: nil,
146
+ platform: Gem::Platform::RUBY,
147
+ post_install_message: nil,
148
+ rdoc_options: [],
149
+ require_paths: ["lib"],
150
+ required_ruby_version: Gem::Requirement.default,
151
+ required_rubygems_version: Gem::Requirement.default,
152
+ requirements: [],
153
+ rubygems_version: Gem::VERSION,
154
+ signing_key: nil,
155
+ specification_version: CURRENT_SPECIFICATION_VERSION,
156
+ summary: nil,
157
+ test_files: [],
158
+ version: nil,
157
159
  }.freeze
158
160
 
159
161
  # rubocop:disable Style/MutableConstant
@@ -162,19 +164,17 @@ class Gem::Specification < Gem::BasicSpecification
162
164
 
163
165
  @@default_value.each do |k,v|
164
166
  INITIALIZE_CODE_FOR_DEFAULTS[k] = case v
165
- when [], {}, true, false, nil, Numeric, Symbol
166
- v.inspect
167
- when String
168
- v.dump
169
- when Numeric
170
- "default_value(:#{k})"
171
- else
172
- "default_value(:#{k}).dup"
167
+ when [], {}, true, false, nil, Numeric, Symbol
168
+ v.inspect
169
+ when String
170
+ v.dump
171
+ else
172
+ "default_value(:#{k}).dup"
173
173
  end
174
174
  end
175
175
 
176
- @@attributes = @@default_value.keys.sort_by {|s| s.to_s }
177
- @@array_attributes = @@default_value.reject {|k,v| v != [] }.keys
176
+ @@attributes = @@default_value.keys.sort_by(&:to_s)
177
+ @@array_attributes = @@default_value.reject {|_k,v| v != [] }.keys
178
178
  @@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition do |k|
179
179
  @@default_value[k].nil?
180
180
  end
@@ -263,8 +263,7 @@ class Gem::Specification < Gem::BasicSpecification
263
263
  @test_files,
264
264
  add_bindir(@executables),
265
265
  @extra_rdoc_files,
266
- @extensions,
267
- ].flatten.compact.uniq.sort
266
+ @extensions].flatten.compact.uniq.sort
268
267
  end
269
268
 
270
269
  ##
@@ -503,8 +502,6 @@ class Gem::Specification < Gem::BasicSpecification
503
502
  @platform = @new_platform.to_s
504
503
 
505
504
  invalidate_memoized_attributes
506
-
507
- @new_platform
508
505
  end
509
506
 
510
507
  ##
@@ -533,13 +530,6 @@ class Gem::Specification < Gem::BasicSpecification
533
530
 
534
531
  attr_reader :required_rubygems_version
535
532
 
536
- ##
537
- # The version of RubyGems used to create this gem.
538
- #
539
- # Do not set this, it is set automatically when the gem is packaged.
540
-
541
- attr_accessor :rubygems_version
542
-
543
533
  ##
544
534
  # The key used to sign this gem. See Gem::Security for details.
545
535
 
@@ -578,7 +568,7 @@ class Gem::Specification < Gem::BasicSpecification
578
568
  ##
579
569
  # Executables included in the gem.
580
570
  #
581
- # For example, the rake gem has rake as an executable. You dont specify the
571
+ # For example, the rake gem has rake as an executable. You don't specify the
582
572
  # full path (as in bin/rake); all application-style files are expected to be
583
573
  # found in bindir. These files must be executable Ruby files. Files that
584
574
  # use bash or other interpreters will not work.
@@ -599,7 +589,7 @@ class Gem::Specification < Gem::BasicSpecification
599
589
  # extconf.rb-style files used to compile extensions.
600
590
  #
601
591
  # These files will be run when the gem is installed, causing the C (or
602
- # whatever) code to be compiled on the users machine.
592
+ # whatever) code to be compiled on the user's machine.
603
593
  #
604
594
  # Usage:
605
595
  #
@@ -727,6 +717,21 @@ class Gem::Specification < Gem::BasicSpecification
727
717
  @test_files = Array files
728
718
  end
729
719
 
720
+ ######################################################################
721
+ # :section: Read-only attributes
722
+
723
+ ##
724
+ # The version of RubyGems used to create this gem.
725
+
726
+ attr_accessor :rubygems_version
727
+
728
+ ##
729
+ # The path where this gem installs its extensions.
730
+
731
+ def extensions_dir
732
+ @extensions_dir ||= super
733
+ end
734
+
730
735
  ######################################################################
731
736
  # :section: Specification internals
732
737
 
@@ -735,7 +740,7 @@ class Gem::Specification < Gem::BasicSpecification
735
740
 
736
741
  attr_accessor :activated
737
742
 
738
- alias :activated? :activated
743
+ alias_method :activated?, :activated
739
744
 
740
745
  ##
741
746
  # Autorequire was used by old RubyGems to automatically require a file.
@@ -778,7 +783,7 @@ class Gem::Specification < Gem::BasicSpecification
778
783
  def self.each_gemspec(dirs) # :nodoc:
779
784
  dirs.each do |dir|
780
785
  Gem::Util.glob_files_in_dir("*.gemspec", dir).each do |path|
781
- yield path.tap(&Gem::UNTAINT)
786
+ yield path
782
787
  end
783
788
  end
784
789
  end
@@ -857,7 +862,7 @@ class Gem::Specification < Gem::BasicSpecification
857
862
  installed_stubs = installed_stubs(Gem::Specification.dirs, pattern)
858
863
  installed_stubs.select! {|s| Gem::Platform.match_spec? s } if match_platform
859
864
  stubs = installed_stubs + default_stubs(pattern)
860
- stubs = stubs.uniq {|stub| stub.full_name }
865
+ stubs = stubs.uniq(&:full_name)
861
866
  _resort!(stubs)
862
867
  stubs
863
868
  end
@@ -938,7 +943,7 @@ class Gem::Specification < Gem::BasicSpecification
938
943
  # Return full names of all specs in sorted order.
939
944
 
940
945
  def self.all_names
941
- self._all.map(&:full_name)
946
+ _all.map(&:full_name)
942
947
  end
943
948
 
944
949
  ##
@@ -964,7 +969,7 @@ class Gem::Specification < Gem::BasicSpecification
964
969
 
965
970
  def self.dirs
966
971
  @@dirs ||= Gem.path.collect do |dir|
967
- File.join dir.dup.tap(&Gem::UNTAINT), "specifications"
972
+ File.join dir, "specifications"
968
973
  end
969
974
  end
970
975
 
@@ -973,7 +978,7 @@ class Gem::Specification < Gem::BasicSpecification
973
978
  # this resets the list of known specs.
974
979
 
975
980
  def self.dirs=(dirs)
976
- self.reset
981
+ reset
977
982
 
978
983
  @@dirs = Array(dirs).map {|dir| File.join dir, "specifications" }
979
984
  end
@@ -987,7 +992,7 @@ class Gem::Specification < Gem::BasicSpecification
987
992
  def self.each
988
993
  return enum_for(:each) unless block_given?
989
994
 
990
- self._all.each do |x|
995
+ _all.each do |x|
991
996
  yield x
992
997
  end
993
998
  end
@@ -1033,9 +1038,10 @@ class Gem::Specification < Gem::BasicSpecification
1033
1038
 
1034
1039
  def self.find_by_path(path)
1035
1040
  path = path.dup.freeze
1036
- spec = @@spec_with_requirable_file[path] ||= (stubs.find do |s|
1041
+ spec = @@spec_with_requirable_file[path] ||= stubs.find do |s|
1037
1042
  s.contains_requirable_file? path
1038
- end || NOT_FOUND)
1043
+ end || NOT_FOUND
1044
+
1039
1045
  spec.to_spec
1040
1046
  end
1041
1047
 
@@ -1052,9 +1058,10 @@ class Gem::Specification < Gem::BasicSpecification
1052
1058
  end
1053
1059
 
1054
1060
  def self.find_active_stub_by_path(path)
1055
- stub = @@active_stub_with_requirable_file[path] ||= (stubs.find do |s|
1061
+ stub = @@active_stub_with_requirable_file[path] ||= stubs.find do |s|
1056
1062
  s.activated? && s.contains_requirable_file?(path)
1057
- end || NOT_FOUND)
1063
+ end || NOT_FOUND
1064
+
1058
1065
  stub.this
1059
1066
  end
1060
1067
 
@@ -1071,7 +1078,7 @@ class Gem::Specification < Gem::BasicSpecification
1071
1078
 
1072
1079
  def self.find_in_unresolved_tree(path)
1073
1080
  unresolved_specs.each do |spec|
1074
- spec.traverse do |from_spec, dep, to_spec, trail|
1081
+ spec.traverse do |_from_spec, _dep, to_spec, trail|
1075
1082
  if to_spec.has_conflicts? || to_spec.conficts_when_loaded_with?(trail)
1076
1083
  :next
1077
1084
  else
@@ -1084,7 +1091,7 @@ class Gem::Specification < Gem::BasicSpecification
1084
1091
  end
1085
1092
 
1086
1093
  def self.unresolved_specs
1087
- unresolved_deps.values.map {|dep| dep.to_specs }.flatten
1094
+ unresolved_deps.values.map(&:to_specs).flatten
1088
1095
  end
1089
1096
  private_class_method :unresolved_specs
1090
1097
 
@@ -1136,12 +1143,14 @@ class Gem::Specification < Gem::BasicSpecification
1136
1143
  result = {}
1137
1144
 
1138
1145
  specs.reverse_each do |spec|
1139
- next if spec.version.prerelease? unless prerelease
1146
+ unless prerelease
1147
+ next if spec.version.prerelease?
1148
+ end
1140
1149
 
1141
1150
  result[spec.name] = spec
1142
1151
  end
1143
1152
 
1144
- result.map(&:last).flatten.sort_by {|tup| tup.name }
1153
+ result.map(&:last).flatten.sort_by(&:name)
1145
1154
  end
1146
1155
 
1147
1156
  ##
@@ -1150,36 +1159,33 @@ class Gem::Specification < Gem::BasicSpecification
1150
1159
  def self.load(file)
1151
1160
  return unless file
1152
1161
 
1153
- _spec = @load_cache_mutex.synchronize { @load_cache[file] }
1154
- return _spec if _spec
1162
+ spec = @load_cache_mutex.synchronize { @load_cache[file] }
1163
+ return spec if spec
1155
1164
 
1156
- file = file.dup.tap(&Gem::UNTAINT)
1157
1165
  return unless File.file?(file)
1158
1166
 
1159
1167
  code = Gem.open_file(file, "r:UTF-8:-", &:read)
1160
1168
 
1161
- code.tap(&Gem::UNTAINT)
1162
-
1163
1169
  begin
1164
- _spec = eval code, binding, file
1170
+ spec = eval code, binding, file
1165
1171
 
1166
- if Gem::Specification === _spec
1167
- _spec.loaded_from = File.expand_path file.to_s
1172
+ if Gem::Specification === spec
1173
+ spec.loaded_from = File.expand_path file.to_s
1168
1174
  @load_cache_mutex.synchronize do
1169
1175
  prev = @load_cache[file]
1170
1176
  if prev
1171
- _spec = prev
1177
+ spec = prev
1172
1178
  else
1173
- @load_cache[file] = _spec
1179
+ @load_cache[file] = spec
1174
1180
  end
1175
1181
  end
1176
- return _spec
1182
+ return spec
1177
1183
  end
1178
1184
 
1179
- warn "[#{file}] isn't a Gem::Specification (#{_spec.class} instead)."
1185
+ warn "[#{file}] isn't a Gem::Specification (#{spec.class} instead)."
1180
1186
  rescue SignalException, SystemExit
1181
1187
  raise
1182
- rescue SyntaxError, Exception => e
1188
+ rescue SyntaxError, StandardError => e
1183
1189
  warn "Invalid gemspec in [#{file}]: #{e}"
1184
1190
  end
1185
1191
 
@@ -1267,7 +1273,7 @@ class Gem::Specification < Gem::BasicSpecification
1267
1273
 
1268
1274
  def self.reset
1269
1275
  @@dirs = nil
1270
- Gem.pre_reset_hooks.each {|hook| hook.call }
1276
+ Gem.pre_reset_hooks.each(&:call)
1271
1277
  clear_specs
1272
1278
  clear_load_cache
1273
1279
  unresolved = unresolved_deps
@@ -1286,7 +1292,7 @@ class Gem::Specification < Gem::BasicSpecification
1286
1292
  warn "Please report a bug if this causes problems."
1287
1293
  unresolved.clear
1288
1294
  end
1289
- Gem.post_reset_hooks.each {|hook| hook.call }
1295
+ Gem.post_reset_hooks.each(&:call)
1290
1296
  end
1291
1297
 
1292
1298
  # DOC: This method needs documented or nodoc'd
@@ -1299,12 +1305,13 @@ class Gem::Specification < Gem::BasicSpecification
1299
1305
 
1300
1306
  def self._load(str)
1301
1307
  Gem.load_yaml
1308
+ Gem.load_safe_marshal
1302
1309
 
1303
1310
  yaml_set = false
1304
1311
  retry_count = 0
1305
1312
 
1306
1313
  array = begin
1307
- Marshal.load str
1314
+ Gem::SafeMarshal.safe_load str
1308
1315
  rescue ArgumentError => e
1309
1316
  # Avoid an infinite retry loop when the argument error has nothing to do
1310
1317
  # with the classes not being defined.
@@ -1434,7 +1441,7 @@ class Gem::Specification < Gem::BasicSpecification
1434
1441
  # there are conflicts upon activation.
1435
1442
 
1436
1443
  def activate
1437
- other = Gem.loaded_specs[self.name]
1444
+ other = Gem.loaded_specs[name]
1438
1445
  if other
1439
1446
  check_version_conflict other
1440
1447
  return false
@@ -1445,11 +1452,11 @@ class Gem::Specification < Gem::BasicSpecification
1445
1452
  activate_dependencies
1446
1453
  add_self_to_load_path
1447
1454
 
1448
- Gem.loaded_specs[self.name] = self
1455
+ Gem.loaded_specs[name] = self
1449
1456
  @activated = true
1450
1457
  @loaded = true
1451
1458
 
1452
- return true
1459
+ true
1453
1460
  end
1454
1461
 
1455
1462
  ##
@@ -1460,7 +1467,7 @@ class Gem::Specification < Gem::BasicSpecification
1460
1467
  def activate_dependencies
1461
1468
  unresolved = Gem::Specification.unresolved_deps
1462
1469
 
1463
- self.runtime_dependencies.each do |spec_dep|
1470
+ runtime_dependencies.each do |spec_dep|
1464
1471
  if loaded = Gem.loaded_specs[spec_dep.name]
1465
1472
  next if spec_dep.matches_spec? loaded
1466
1473
 
@@ -1474,7 +1481,7 @@ class Gem::Specification < Gem::BasicSpecification
1474
1481
  begin
1475
1482
  specs = spec_dep.to_specs
1476
1483
  rescue Gem::MissingSpecError => e
1477
- raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{self.spec_file}")
1484
+ raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{spec_file}")
1478
1485
  end
1479
1486
 
1480
1487
  if specs.size == 1
@@ -1520,7 +1527,7 @@ class Gem::Specification < Gem::BasicSpecification
1520
1527
  def sanitize_string(string)
1521
1528
  return string unless string
1522
1529
 
1523
- # HACK the #to_s is in here because RSpec has an Array of Arrays of
1530
+ # HACK: the #to_s is in here because RSpec has an Array of Arrays of
1524
1531
  # Strings for authors. Need a way to disallow bad values on gemspec
1525
1532
  # generation. (Probably won't happen.)
1526
1533
  string.to_s
@@ -1539,7 +1546,7 @@ class Gem::Specification < Gem::BasicSpecification
1539
1546
  executables
1540
1547
  end
1541
1548
  rescue StandardError
1542
- return nil
1549
+ nil
1543
1550
  end
1544
1551
 
1545
1552
  ##
@@ -1564,7 +1571,7 @@ class Gem::Specification < Gem::BasicSpecification
1564
1571
 
1565
1572
  private :add_dependency_with_type
1566
1573
 
1567
- alias add_dependency add_runtime_dependency
1574
+ alias_method :add_dependency, :add_runtime_dependency
1568
1575
 
1569
1576
  ##
1570
1577
  # Adds this spec's require paths to LOAD_PATH, in the proper location.
@@ -1616,7 +1623,7 @@ class Gem::Specification < Gem::BasicSpecification
1616
1623
  def build_args
1617
1624
  if File.exist? build_info_file
1618
1625
  build_info = File.readlines build_info_file
1619
- build_info = build_info.map {|x| x.strip }
1626
+ build_info = build_info.map(&:strip)
1620
1627
  build_info.delete ""
1621
1628
  build_info
1622
1629
  else
@@ -1693,7 +1700,7 @@ class Gem::Specification < Gem::BasicSpecification
1693
1700
 
1694
1701
  def conflicts
1695
1702
  conflicts = {}
1696
- self.runtime_dependencies.each do |dep|
1703
+ runtime_dependencies.each do |dep|
1697
1704
  spec = Gem.loaded_specs[dep.name]
1698
1705
  if spec && !spec.satisfies_requirement?(dep)
1699
1706
  (conflicts[spec] ||= []) << dep
@@ -1709,7 +1716,7 @@ class Gem::Specification < Gem::BasicSpecification
1709
1716
 
1710
1717
  def conficts_when_loaded_with?(list_of_specs) # :nodoc:
1711
1718
  result = list_of_specs.any? do |spec|
1712
- spec.dependencies.any? {|dep| dep.runtime? && (dep.name == name) && !satisfies_requirement?(dep) }
1719
+ spec.runtime_dependencies.any? {|dep| (dep.name == name) && !satisfies_requirement?(dep) }
1713
1720
  end
1714
1721
  result
1715
1722
  end
@@ -1719,14 +1726,12 @@ class Gem::Specification < Gem::BasicSpecification
1719
1726
 
1720
1727
  def has_conflicts?
1721
1728
  return true unless Gem.env_requirement(name).satisfied_by?(version)
1722
- self.dependencies.any? do |dep|
1723
- if dep.runtime?
1724
- spec = Gem.loaded_specs[dep.name]
1725
- spec && !spec.satisfies_requirement?(dep)
1726
- else
1727
- false
1728
- end
1729
+ runtime_dependencies.any? do |dep|
1730
+ spec = Gem.loaded_specs[dep.name]
1731
+ spec && !spec.satisfies_requirement?(dep)
1729
1732
  end
1733
+ rescue ArgumentError => e
1734
+ raise e, "#{name} #{version}: #{e.message}"
1730
1735
  end
1731
1736
 
1732
1737
  # The date this gem was created.
@@ -1750,7 +1755,7 @@ class Gem::Specification < Gem::BasicSpecification
1750
1755
  /\A
1751
1756
  (\d{4})-(\d{2})-(\d{2})
1752
1757
  (\s+ \d{2}:\d{2}:\d{2}\.\d+ \s* (Z | [-+]\d\d:\d\d) )?
1753
- \Z/x.freeze
1758
+ \Z/x
1754
1759
 
1755
1760
  ##
1756
1761
  # The date this gem was created
@@ -1762,17 +1767,17 @@ class Gem::Specification < Gem::BasicSpecification
1762
1767
  # This is the cleanest, most-readable, faster-than-using-Date
1763
1768
  # way to do it.
1764
1769
  @date = case date
1765
- when String then
1766
- if DateTimeFormat =~ date
1767
- Time.utc($1.to_i, $2.to_i, $3.to_i)
1768
- else
1769
- raise(Gem::InvalidSpecificationException,
1770
- "invalid date format in specification: #{date.inspect}")
1771
- end
1772
- when Time, DateLike then
1773
- Time.utc(date.year, date.month, date.day)
1774
- else
1775
- TODAY
1770
+ when String then
1771
+ if DateTimeFormat =~ date
1772
+ Time.utc($1.to_i, $2.to_i, $3.to_i)
1773
+ else
1774
+ raise(Gem::InvalidSpecificationException,
1775
+ "invalid date format in specification: #{date.inspect}")
1776
+ end
1777
+ when Time, DateLike then
1778
+ Time.utc(date.year, date.month, date.day)
1779
+ else
1780
+ TODAY
1776
1781
  end
1777
1782
  end
1778
1783
 
@@ -1822,7 +1827,7 @@ class Gem::Specification < Gem::BasicSpecification
1822
1827
  Gem::Specification.each do |spec|
1823
1828
  deps = check_dev ? spec.dependencies : spec.runtime_dependencies
1824
1829
  deps.each do |dep|
1825
- next unless self.satisfies_requirement?(dep)
1830
+ next unless satisfies_requirement?(dep)
1826
1831
  sats = []
1827
1832
  find_all_satisfiers(dep) do |sat|
1828
1833
  sats << sat
@@ -1837,7 +1842,7 @@ class Gem::Specification < Gem::BasicSpecification
1837
1842
  # Returns all specs that matches this spec's runtime dependencies.
1838
1843
 
1839
1844
  def dependent_specs
1840
- runtime_dependencies.map {|dep| dep.to_specs }.flatten
1845
+ runtime_dependencies.map(&:to_specs).flatten
1841
1846
  end
1842
1847
 
1843
1848
  ##
@@ -1878,12 +1883,12 @@ class Gem::Specification < Gem::BasicSpecification
1878
1883
  coder.add "name", @name
1879
1884
  coder.add "version", @version
1880
1885
  platform = case @original_platform
1881
- when nil, "" then
1882
- "ruby"
1883
- when String then
1884
- @original_platform
1885
- else
1886
- @original_platform.to_s
1886
+ when nil, "" then
1887
+ "ruby"
1888
+ when String then
1889
+ @original_platform
1890
+ else
1891
+ @original_platform.to_s
1887
1892
  end
1888
1893
  coder.add "platform", platform
1889
1894
 
@@ -2006,7 +2011,7 @@ class Gem::Specification < Gem::BasicSpecification
2006
2011
  end
2007
2012
  rubygems_deprecate :has_rdoc=
2008
2013
 
2009
- alias :has_rdoc? :has_rdoc # :nodoc:
2014
+ alias_method :has_rdoc?, :has_rdoc # :nodoc:
2010
2015
  rubygems_deprecate :has_rdoc?
2011
2016
 
2012
2017
  ##
@@ -2017,7 +2022,7 @@ class Gem::Specification < Gem::BasicSpecification
2017
2022
  end
2018
2023
 
2019
2024
  # :stopdoc:
2020
- alias has_test_suite? has_unit_tests?
2025
+ alias_method :has_test_suite?, :has_unit_tests?
2021
2026
  # :startdoc:
2022
2027
 
2023
2028
  def hash # :nodoc:
@@ -2264,8 +2269,8 @@ class Gem::Specification < Gem::BasicSpecification
2264
2269
  attributes.unshift :name
2265
2270
 
2266
2271
  attributes.each do |attr_name|
2267
- current_value = self.send attr_name
2268
- current_value = current_value.sort if %i[files test_files].include? attr_name
2272
+ current_value = send attr_name
2273
+ current_value = current_value.sort if [:files, :test_files].include? attr_name
2269
2274
  next unless current_value != default_value(attr_name) ||
2270
2275
  self.class.required_attribute?(attr_name)
2271
2276
 
@@ -2289,7 +2294,7 @@ class Gem::Specification < Gem::BasicSpecification
2289
2294
  # that is already loaded (+other+)
2290
2295
 
2291
2296
  def check_version_conflict(other) # :nodoc:
2292
- return if self.version == other.version
2297
+ return if version == other.version
2293
2298
 
2294
2299
  # This gem is already loaded. If the currently loaded gem is not in the
2295
2300
  # list of candidate gems, then we have a version conflict.
@@ -2297,7 +2302,7 @@ class Gem::Specification < Gem::BasicSpecification
2297
2302
  msg = "can't activate #{full_name}, already activated #{other.full_name}"
2298
2303
 
2299
2304
  e = Gem::LoadError.new msg
2300
- e.name = self.name
2305
+ e.name = name
2301
2306
 
2302
2307
  raise e
2303
2308
  end
@@ -2389,7 +2394,7 @@ class Gem::Specification < Gem::BasicSpecification
2389
2394
  # True if this gem has the same attributes as +other+.
2390
2395
 
2391
2396
  def same_attributes?(spec)
2392
- @@attributes.all? {|name, default| self.send(name) == spec.send(name) }
2397
+ @@attributes.all? {|name, _default| send(name) == spec.send(name) }
2393
2398
  end
2394
2399
 
2395
2400
  private :same_attributes?
@@ -2398,8 +2403,8 @@ class Gem::Specification < Gem::BasicSpecification
2398
2403
  # Checks if this specification meets the requirement of +dependency+.
2399
2404
 
2400
2405
  def satisfies_requirement?(dependency)
2401
- return @name == dependency.name &&
2402
- dependency.requirement.satisfied_by?(@version)
2406
+ @name == dependency.name &&
2407
+ dependency.requirement.satisfied_by?(@version)
2403
2408
  end
2404
2409
 
2405
2410
  ##
@@ -2526,7 +2531,7 @@ class Gem::Specification < Gem::BasicSpecification
2526
2531
 
2527
2532
  @@attributes.each do |attr_name|
2528
2533
  next if handled.include? attr_name
2529
- current_value = self.send(attr_name)
2534
+ current_value = send(attr_name)
2530
2535
  if current_value != default_value(attr_name) || self.class.required_attribute?(attr_name)
2531
2536
  result << " s.#{attr_name} = #{ruby_code current_value}"
2532
2537
  end
@@ -2609,10 +2614,9 @@ class Gem::Specification < Gem::BasicSpecification
2609
2614
  def traverse(trail = [], visited = {}, &block)
2610
2615
  trail.push(self)
2611
2616
  begin
2612
- dependencies.each do |dep|
2613
- next unless dep.runtime?
2617
+ runtime_dependencies.each do |dep|
2614
2618
  dep.matching_specs(true).each do |dep_spec|
2615
- next if visited.has_key?(dep_spec)
2619
+ next if visited.key?(dep_spec)
2616
2620
  visited[dep_spec] = true
2617
2621
  trail.push(dep_spec)
2618
2622
  begin
@@ -2670,22 +2674,13 @@ class Gem::Specification < Gem::BasicSpecification
2670
2674
  rubygems_deprecate :validate_permissions
2671
2675
 
2672
2676
  ##
2673
- # Set the version to +version+, potentially also setting
2674
- # required_rubygems_version if +version+ indicates it is a
2675
- # prerelease.
2677
+ # Set the version to +version+.
2676
2678
 
2677
2679
  def version=(version)
2678
2680
  @version = Gem::Version.create(version)
2679
2681
  return if @version.nil?
2680
2682
 
2681
- # skip to set required_ruby_version when pre-released rubygems.
2682
- # It caused to raise CircularDependencyError
2683
- if @version.prerelease? && (@name.nil? || @name.strip != "rubygems")
2684
- self.required_rubygems_version = "> 1.3.1"
2685
- end
2686
2683
  invalidate_memoized_attributes
2687
-
2688
- return @version
2689
2684
  end
2690
2685
 
2691
2686
  def stubbed?
@@ -2697,9 +2692,9 @@ class Gem::Specification < Gem::BasicSpecification
2697
2692
  case ivar
2698
2693
  when "date"
2699
2694
  # Force Date to go through the extra coerce logic in date=
2700
- self.date = val.tap(&Gem::UNTAINT)
2695
+ self.date = val
2701
2696
  else
2702
- instance_variable_set "@#{ivar}", val.tap(&Gem::UNTAINT)
2697
+ instance_variable_set "@#{ivar}", val
2703
2698
  end
2704
2699
  end
2705
2700
 
@@ -2716,11 +2711,11 @@ class Gem::Specification < Gem::BasicSpecification
2716
2711
  end
2717
2712
 
2718
2713
  nil_attributes.each do |attribute|
2719
- default = self.default_value attribute
2714
+ default = default_value attribute
2720
2715
 
2721
2716
  value = case default
2722
- when Time, Numeric, Symbol, true, false, nil then default
2723
- else default.dup
2717
+ when Time, Numeric, Symbol, true, false, nil then default
2718
+ else default.dup
2724
2719
  end
2725
2720
 
2726
2721
  instance_variable_set "@#{attribute}", value