rubygems-update 3.5.3 → 3.7.1

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 (437) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1410 -686
  3. data/CODE_OF_CONDUCT.md +79 -28
  4. data/CONTRIBUTING.md +4 -226
  5. data/Manifest.txt +107 -83
  6. data/README.md +16 -11
  7. data/SECURITY.md +7 -0
  8. data/bundler/CHANGELOG.md +1525 -931
  9. data/bundler/README.md +9 -9
  10. data/bundler/bundler.gemspec +2 -2
  11. data/bundler/lib/bundler/build_metadata.rb +10 -11
  12. data/bundler/lib/bundler/checksum.rb +22 -12
  13. data/bundler/lib/bundler/cli/add.rb +3 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +1 -1
  15. data/bundler/lib/bundler/cli/check.rb +3 -3
  16. data/bundler/lib/bundler/cli/common.rb +1 -1
  17. data/bundler/lib/bundler/cli/config.rb +2 -2
  18. data/bundler/lib/bundler/cli/console.rb +8 -10
  19. data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
  20. data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
  21. data/bundler/lib/bundler/cli/doctor.rb +27 -151
  22. data/bundler/lib/bundler/cli/exec.rb +1 -0
  23. data/bundler/lib/bundler/cli/fund.rb +1 -1
  24. data/bundler/lib/bundler/cli/gem.rb +74 -46
  25. data/bundler/lib/bundler/cli/info.rb +6 -6
  26. data/bundler/lib/bundler/cli/inject.rb +3 -3
  27. data/bundler/lib/bundler/cli/install.rb +19 -10
  28. data/bundler/lib/bundler/cli/issue.rb +3 -3
  29. data/bundler/lib/bundler/cli/lock.rb +32 -11
  30. data/bundler/lib/bundler/cli/outdated.rb +23 -23
  31. data/bundler/lib/bundler/cli/plugin.rb +3 -2
  32. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  33. data/bundler/lib/bundler/cli/show.rb +3 -3
  34. data/bundler/lib/bundler/cli/update.rb +3 -3
  35. data/bundler/lib/bundler/cli.rb +75 -145
  36. data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
  37. data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
  38. data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
  39. data/bundler/lib/bundler/compact_index_client/updater.rb +6 -16
  40. data/bundler/lib/bundler/compact_index_client.rb +52 -85
  41. data/bundler/lib/bundler/constants.rb +8 -1
  42. data/bundler/lib/bundler/current_ruby.rb +48 -34
  43. data/bundler/lib/bundler/definition.rb +501 -328
  44. data/bundler/lib/bundler/dependency.rb +93 -47
  45. data/bundler/lib/bundler/dsl.rb +147 -103
  46. data/bundler/lib/bundler/endpoint_specification.rb +30 -3
  47. data/bundler/lib/bundler/env.rb +1 -1
  48. data/bundler/lib/bundler/environment_preserver.rb +5 -23
  49. data/bundler/lib/bundler/errors.rb +53 -5
  50. data/bundler/lib/bundler/feature_flag.rb +18 -18
  51. data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
  52. data/bundler/lib/bundler/fetcher/dependency.rb +2 -1
  53. data/bundler/lib/bundler/fetcher/downloader.rb +34 -8
  54. data/bundler/lib/bundler/fetcher.rb +63 -26
  55. data/bundler/lib/bundler/force_platform.rb +0 -2
  56. data/bundler/lib/bundler/friendly_errors.rb +3 -2
  57. data/bundler/lib/bundler/gem_helper.rb +1 -1
  58. data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
  59. data/bundler/lib/bundler/index.rb +7 -2
  60. data/bundler/lib/bundler/injector.rb +14 -16
  61. data/bundler/lib/bundler/inline.rb +42 -17
  62. data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
  63. data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
  64. data/bundler/lib/bundler/installer/standalone.rb +2 -5
  65. data/bundler/lib/bundler/installer.rb +22 -45
  66. data/bundler/lib/bundler/lazy_specification.rb +121 -48
  67. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  68. data/bundler/lib/bundler/lockfile_parser.rb +36 -9
  69. data/bundler/lib/bundler/man/bundle-add.1 +44 -27
  70. data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
  71. data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
  72. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  73. data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
  74. data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
  75. data/bundler/lib/bundler/man/bundle-check.1 +7 -5
  76. data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
  77. data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
  78. data/bundler/lib/bundler/man/bundle-config.1 +180 -138
  79. data/bundler/lib/bundler/man/bundle-config.1.ronn +96 -99
  80. data/bundler/lib/bundler/man/bundle-console.1 +4 -6
  81. data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
  82. data/bundler/lib/bundler/man/bundle-doctor.1 +46 -7
  83. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +49 -5
  84. data/bundler/lib/bundler/man/bundle-env.1 +9 -0
  85. data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
  86. data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
  87. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
  88. data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
  89. data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
  90. data/bundler/lib/bundler/man/bundle-gem.1 +69 -28
  91. data/bundler/lib/bundler/man/bundle-gem.1.ronn +42 -6
  92. data/bundler/lib/bundler/man/bundle-help.1 +3 -3
  93. data/bundler/lib/bundler/man/bundle-info.1 +7 -4
  94. data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
  95. data/bundler/lib/bundler/man/bundle-init.1 +5 -5
  96. data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
  97. data/bundler/lib/bundler/man/bundle-inject.1 +13 -5
  98. data/bundler/lib/bundler/man/bundle-inject.1.ronn +10 -2
  99. data/bundler/lib/bundler/man/bundle-install.1 +20 -17
  100. data/bundler/lib/bundler/man/bundle-install.1.ronn +26 -23
  101. data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
  102. data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
  103. data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
  104. data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  105. data/bundler/lib/bundler/man/bundle-list.1 +3 -3
  106. data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
  107. data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
  108. data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
  109. data/bundler/lib/bundler/man/bundle-open.1 +4 -4
  110. data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
  111. data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
  112. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
  113. data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
  114. data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
  115. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
  116. data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
  117. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  118. data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
  119. data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
  120. data/bundler/lib/bundler/man/bundle-show.1 +7 -4
  121. data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
  122. data/bundler/lib/bundler/man/bundle-update.1 +17 -11
  123. data/bundler/lib/bundler/man/bundle-update.1.ronn +17 -9
  124. data/bundler/lib/bundler/man/bundle-version.1 +3 -3
  125. data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
  126. data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
  127. data/bundler/lib/bundler/man/bundle.1 +3 -3
  128. data/bundler/lib/bundler/man/gemfile.5 +7 -5
  129. data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
  130. data/bundler/lib/bundler/man/index.txt +4 -0
  131. data/bundler/lib/bundler/match_metadata.rb +13 -0
  132. data/bundler/lib/bundler/match_platform.rb +31 -12
  133. data/bundler/lib/bundler/materialization.rb +59 -0
  134. data/bundler/lib/bundler/mirror.rb +3 -3
  135. data/bundler/lib/bundler/plugin/api/source.rb +5 -4
  136. data/bundler/lib/bundler/plugin/events.rb +24 -0
  137. data/bundler/lib/bundler/plugin/index.rb +5 -1
  138. data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
  139. data/bundler/lib/bundler/plugin/installer.rb +37 -17
  140. data/bundler/lib/bundler/plugin/source_list.rb +4 -4
  141. data/bundler/lib/bundler/plugin.rb +21 -2
  142. data/bundler/lib/bundler/process_lock.rb +10 -14
  143. data/bundler/lib/bundler/remote_specification.rb +6 -1
  144. data/bundler/lib/bundler/resolver/base.rb +14 -3
  145. data/bundler/lib/bundler/resolver/candidate.rb +18 -27
  146. data/bundler/lib/bundler/resolver/package.rb +20 -3
  147. data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
  148. data/bundler/lib/bundler/resolver/strategy.rb +40 -0
  149. data/bundler/lib/bundler/resolver.rb +114 -52
  150. data/bundler/lib/bundler/retry.rb +1 -1
  151. data/bundler/lib/bundler/ruby_dsl.rb +12 -3
  152. data/bundler/lib/bundler/ruby_version.rb +7 -1
  153. data/bundler/lib/bundler/rubygems_ext.rb +303 -150
  154. data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
  155. data/bundler/lib/bundler/rubygems_integration.rb +40 -73
  156. data/bundler/lib/bundler/runtime.rb +48 -35
  157. data/bundler/lib/bundler/self_manager.rb +36 -26
  158. data/bundler/lib/bundler/settings/validator.rb +0 -23
  159. data/bundler/lib/bundler/settings.rb +36 -27
  160. data/bundler/lib/bundler/setup.rb +6 -0
  161. data/bundler/lib/bundler/shared_helpers.rb +45 -25
  162. data/bundler/lib/bundler/source/gemspec.rb +1 -4
  163. data/bundler/lib/bundler/source/git/git_proxy.rb +26 -9
  164. data/bundler/lib/bundler/source/git.rb +113 -41
  165. data/bundler/lib/bundler/source/metadata.rb +4 -3
  166. data/bundler/lib/bundler/source/path.rb +14 -18
  167. data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
  168. data/bundler/lib/bundler/source/rubygems.rb +54 -48
  169. data/bundler/lib/bundler/source.rb +2 -0
  170. data/bundler/lib/bundler/source_list.rb +54 -12
  171. data/bundler/lib/bundler/source_map.rb +1 -1
  172. data/bundler/lib/bundler/spec_set.rb +227 -103
  173. data/bundler/lib/bundler/stub_specification.rb +29 -2
  174. data/bundler/lib/bundler/templates/Executable +0 -11
  175. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  176. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
  177. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
  178. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +17 -15
  179. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -12
  180. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  181. data/bundler/lib/bundler/ui/shell.rb +26 -4
  182. data/bundler/lib/bundler/ui/silent.rb +12 -1
  183. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
  184. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
  185. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  186. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
  187. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
  188. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  189. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +2 -1
  190. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +134 -57
  191. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
  192. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
  193. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
  194. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
  195. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
  196. data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
  197. data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  198. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
  199. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
  200. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
  201. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
  202. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
  203. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
  204. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  205. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
  206. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  207. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  208. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
  209. data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
  210. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
  211. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
  212. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
  213. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
  214. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
  215. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
  216. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
  217. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  218. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
  219. data/bundler/lib/bundler/vendored_net_http.rb +20 -5
  220. data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
  221. data/bundler/lib/bundler/vendored_timeout.rb +7 -3
  222. data/bundler/lib/bundler/vendored_uri.rb +18 -1
  223. data/bundler/lib/bundler/version.rb +10 -2
  224. data/bundler/lib/bundler/worker.rb +1 -1
  225. data/bundler/lib/bundler/yaml_serializer.rb +12 -7
  226. data/bundler/lib/bundler.rb +101 -61
  227. data/{bundler → doc/bundler}/UPGRADING.md +132 -127
  228. data/doc/rubygems/CONTRIBUTING.md +227 -0
  229. data/{POLICIES.md → doc/rubygems/POLICIES.md} +86 -17
  230. data/exe/update_rubygems +1 -1
  231. data/lib/rubygems/basic_specification.rb +50 -10
  232. data/lib/rubygems/bundler_version_finder.rb +1 -1
  233. data/lib/rubygems/command.rb +1 -4
  234. data/lib/rubygems/command_manager.rb +5 -6
  235. data/lib/rubygems/commands/build_command.rb +2 -11
  236. data/lib/rubygems/commands/cleanup_command.rb +3 -13
  237. data/lib/rubygems/commands/contents_command.rb +17 -10
  238. data/lib/rubygems/commands/environment_command.rb +5 -0
  239. data/lib/rubygems/commands/exec_command.rb +18 -11
  240. data/lib/rubygems/commands/fetch_command.rb +14 -0
  241. data/lib/rubygems/commands/help_command.rb +2 -2
  242. data/lib/rubygems/commands/install_command.rb +0 -4
  243. data/lib/rubygems/commands/pristine_command.rb +29 -19
  244. data/lib/rubygems/commands/push_command.rb +31 -6
  245. data/lib/rubygems/commands/rdoc_command.rb +3 -10
  246. data/lib/rubygems/commands/rebuild_command.rb +262 -0
  247. data/lib/rubygems/commands/setup_command.rb +13 -18
  248. data/lib/rubygems/commands/sources_command.rb +2 -2
  249. data/lib/rubygems/commands/uninstall_command.rb +9 -4
  250. data/lib/rubygems/commands/unpack_command.rb +0 -6
  251. data/lib/rubygems/commands/update_command.rb +13 -22
  252. data/lib/rubygems/config_file.rb +45 -16
  253. data/lib/rubygems/core_ext/kernel_require.rb +15 -3
  254. data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
  255. data/lib/rubygems/defaults.rb +7 -7
  256. data/lib/rubygems/dependency.rb +12 -16
  257. data/lib/rubygems/dependency_list.rb +1 -1
  258. data/lib/rubygems/deprecate.rb +79 -77
  259. data/lib/rubygems/errors.rb +2 -1
  260. data/lib/rubygems/exceptions.rb +2 -9
  261. data/lib/rubygems/ext/builder.rb +21 -8
  262. data/lib/rubygems/ext/cargo_builder.rb +16 -26
  263. data/lib/rubygems/ext/cmake_builder.rb +7 -2
  264. data/lib/rubygems/ext/configure_builder.rb +7 -2
  265. data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
  266. data/lib/rubygems/ext/rake_builder.rb +7 -4
  267. data/lib/rubygems/gem_runner.rb +9 -0
  268. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +11 -4
  269. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
  270. data/lib/rubygems/gemcutter_utilities.rb +52 -26
  271. data/lib/rubygems/gemspec_helpers.rb +19 -0
  272. data/lib/rubygems/install_update_options.rb +5 -0
  273. data/lib/rubygems/installer.rb +76 -90
  274. data/lib/rubygems/local_remote_options.rb +8 -8
  275. data/lib/rubygems/package/tar_header.rb +31 -4
  276. data/lib/rubygems/package/tar_reader/entry.rb +1 -5
  277. data/lib/rubygems/package/tar_writer.rb +5 -4
  278. data/lib/rubygems/package.rb +13 -8
  279. data/lib/rubygems/platform.rb +148 -43
  280. data/lib/rubygems/psych_tree.rb +4 -0
  281. data/lib/rubygems/query_utils.rb +2 -2
  282. data/lib/rubygems/rdoc.rb +16 -3
  283. data/lib/rubygems/remote_fetcher.rb +6 -7
  284. data/lib/rubygems/request.rb +5 -5
  285. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
  286. data/lib/rubygems/request_set.rb +4 -7
  287. data/lib/rubygems/requirement.rb +16 -12
  288. data/lib/rubygems/resolver/activation_request.rb +1 -1
  289. data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
  290. data/lib/rubygems/resolver/api_set.rb +13 -8
  291. data/lib/rubygems/resolver/best_set.rb +1 -29
  292. data/lib/rubygems/resolver/composed_set.rb +3 -3
  293. data/lib/rubygems/resolver/git_set.rb +0 -1
  294. data/lib/rubygems/resolver/index_set.rb +2 -2
  295. data/lib/rubygems/resolver/source_set.rb +1 -1
  296. data/lib/rubygems/resolver/spec_specification.rb +7 -0
  297. data/lib/rubygems/resolver.rb +8 -8
  298. data/lib/rubygems/s3_uri_signer.rb +8 -6
  299. data/lib/rubygems/safe_marshal/reader.rb +31 -14
  300. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
  301. data/lib/rubygems/safe_yaml.rb +10 -1
  302. data/lib/rubygems/security.rb +1 -1
  303. data/lib/rubygems/source/git.rb +22 -17
  304. data/lib/rubygems/source/installed.rb +3 -1
  305. data/lib/rubygems/source/local.rb +8 -4
  306. data/lib/rubygems/source/specific_file.rb +5 -3
  307. data/lib/rubygems/source.rb +37 -29
  308. data/lib/rubygems/source_list.rb +1 -1
  309. data/lib/rubygems/spec_fetcher.rb +47 -15
  310. data/lib/rubygems/specification.rb +110 -183
  311. data/lib/rubygems/specification_policy.rb +33 -13
  312. data/lib/rubygems/specification_record.rb +212 -0
  313. data/lib/rubygems/stub_specification.rb +32 -10
  314. data/lib/rubygems/target_rbconfig.rb +50 -0
  315. data/lib/rubygems/uninstaller.rb +42 -22
  316. data/lib/rubygems/uri.rb +6 -6
  317. data/lib/rubygems/uri_formatter.rb +2 -1
  318. data/lib/rubygems/util/licenses.rb +118 -1
  319. data/lib/rubygems/util.rb +1 -1
  320. data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  321. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
  322. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
  323. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  324. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  325. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  326. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  327. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
  328. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  329. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  330. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
  331. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  332. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
  333. data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  334. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
  335. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
  336. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
  337. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
  338. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
  339. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
  340. data/lib/rubygems/vendor/net-http/COPYING +56 -0
  341. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
  342. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
  343. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
  344. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
  345. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
  346. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
  347. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
  348. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +149 -70
  349. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
  350. data/lib/rubygems/vendor/optparse/COPYING +56 -0
  351. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
  352. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
  353. data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
  354. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
  355. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
  356. data/lib/rubygems/vendor/resolv/COPYING +56 -0
  357. data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +165 -69
  358. data/lib/rubygems/vendor/securerandom/COPYING +56 -0
  359. data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
  360. data/lib/rubygems/vendor/timeout/COPYING +56 -0
  361. data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
  362. data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
  363. data/lib/rubygems/vendor/uri/COPYING +56 -0
  364. data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
  365. data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
  366. data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
  367. data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
  368. data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
  369. data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
  370. data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
  371. data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
  372. data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
  373. data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  374. data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  375. data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
  376. data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
  377. data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
  378. data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
  379. data/lib/rubygems/vendored_molinillo.rb +3 -0
  380. data/lib/rubygems/vendored_net_http.rb +5 -0
  381. data/lib/rubygems/vendored_optparse.rb +3 -0
  382. data/lib/rubygems/vendored_securerandom.rb +3 -0
  383. data/lib/rubygems/vendored_timeout.rb +5 -0
  384. data/lib/rubygems/vendored_tsort.rb +3 -0
  385. data/lib/rubygems/version.rb +26 -9
  386. data/lib/rubygems/yaml_serializer.rb +12 -7
  387. data/lib/rubygems.rb +160 -53
  388. data/rubygems-update.gemspec +11 -6
  389. data/setup.rb +1 -1
  390. metadata +124 -96
  391. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
  392. data/bundler/lib/bundler/gem_helpers.rb +0 -127
  393. data/bundler/lib/bundler/templates/Executable.bundler +0 -109
  394. data/bundler/lib/bundler/vendor/fileutils/.document +0 -1
  395. data/bundler/lib/bundler/vendor/net-http-persistent/.document +0 -1
  396. data/bundler/lib/bundler/vendor/pub_grub/.document +0 -1
  397. data/bundler/lib/bundler/vendor/thor/.document +0 -1
  398. data/bundler/lib/bundler/vendor/tsort/.document +0 -1
  399. data/bundler/lib/bundler/vendor/uri/.document +0 -1
  400. data/lib/rubygems/net/http.rb +0 -3
  401. data/lib/rubygems/net-http/.document +0 -1
  402. data/lib/rubygems/net-http/LICENSE.txt +0 -22
  403. data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
  404. data/lib/rubygems/net-protocol/.document +0 -1
  405. data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
  406. data/lib/rubygems/optparse/.document +0 -1
  407. data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
  408. data/lib/rubygems/optparse.rb +0 -3
  409. data/lib/rubygems/resolv/.document +0 -1
  410. data/lib/rubygems/resolv/LICENSE.txt +0 -22
  411. data/lib/rubygems/resolver/molinillo/.document +0 -1
  412. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  413. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  414. data/lib/rubygems/resolver/molinillo.rb +0 -3
  415. data/lib/rubygems/shellwords.rb +0 -3
  416. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +0 -21
  417. data/lib/rubygems/timeout/.document +0 -1
  418. data/lib/rubygems/timeout/LICENSE.txt +0 -22
  419. data/lib/rubygems/timeout.rb +0 -3
  420. data/lib/rubygems/tsort/.document +0 -1
  421. data/lib/rubygems/tsort/LICENSE.txt +0 -22
  422. data/lib/rubygems/tsort.rb +0 -3
  423. /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
  424. /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
  425. /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
  426. /data/lib/rubygems/ssl_certs/rubygems.org/{GlobalSignRootCA_R3.pem → GlobalSign.pem} +0 -0
  427. /data/{bundler/lib/bundler/vendor/connection_pool → lib/rubygems/vendor}/.document +0 -0
  428. /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
  429. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
  430. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
  431. /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
  432. /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
  433. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
  434. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
  435. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
  436. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
  437. /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -0,0 +1,880 @@
1
+ # frozen_string_literal: true
2
+ #--
3
+ # = uri/common.rb
4
+ #
5
+ # Author:: Akira Yamada <akira@ruby-lang.org>
6
+ # License::
7
+ # You can redistribute it and/or modify it under the same term as Ruby.
8
+ #
9
+ # See Gem::URI for general documentation
10
+ #
11
+
12
+ require_relative "rfc2396_parser"
13
+ require_relative "rfc3986_parser"
14
+
15
+ module Gem::URI
16
+ # The default parser instance for RFC 2396.
17
+ RFC2396_PARSER = RFC2396_Parser.new
18
+ Ractor.make_shareable(RFC2396_PARSER) if defined?(Ractor)
19
+
20
+ # The default parser instance for RFC 3986.
21
+ RFC3986_PARSER = RFC3986_Parser.new
22
+ Ractor.make_shareable(RFC3986_PARSER) if defined?(Ractor)
23
+
24
+ # The default parser instance.
25
+ DEFAULT_PARSER = RFC3986_PARSER
26
+ Ractor.make_shareable(DEFAULT_PARSER) if defined?(Ractor)
27
+
28
+ # Set the default parser instance.
29
+ def self.parser=(parser = RFC3986_PARSER)
30
+ remove_const(:Parser) if defined?(::Gem::URI::Parser)
31
+ const_set("Parser", parser.class)
32
+
33
+ remove_const(:REGEXP) if defined?(::Gem::URI::REGEXP)
34
+ remove_const(:PATTERN) if defined?(::Gem::URI::PATTERN)
35
+ if Parser == RFC2396_Parser
36
+ const_set("REGEXP", Gem::URI::RFC2396_REGEXP)
37
+ const_set("PATTERN", Gem::URI::RFC2396_REGEXP::PATTERN)
38
+ end
39
+
40
+ Parser.new.regexp.each_pair do |sym, str|
41
+ remove_const(sym) if const_defined?(sym, false)
42
+ const_set(sym, str)
43
+ end
44
+ end
45
+ self.parser = RFC3986_PARSER
46
+
47
+ def self.const_missing(const) # :nodoc:
48
+ if const == :REGEXP
49
+ warn "Gem::URI::REGEXP is obsolete. Use Gem::URI::RFC2396_REGEXP explicitly.", uplevel: 1 if $VERBOSE
50
+ Gem::URI::RFC2396_REGEXP
51
+ elsif value = RFC2396_PARSER.regexp[const]
52
+ warn "Gem::URI::#{const} is obsolete. Use RFC2396_PARSER.regexp[#{const.inspect}] explicitly.", uplevel: 1 if $VERBOSE
53
+ value
54
+ elsif value = RFC2396_Parser.const_get(const)
55
+ warn "Gem::URI::#{const} is obsolete. Use RFC2396_Parser::#{const} explicitly.", uplevel: 1 if $VERBOSE
56
+ value
57
+ else
58
+ super
59
+ end
60
+ end
61
+
62
+ module Util # :nodoc:
63
+ def make_components_hash(klass, array_hash)
64
+ tmp = {}
65
+ if array_hash.kind_of?(Array) &&
66
+ array_hash.size == klass.component.size - 1
67
+ klass.component[1..-1].each_index do |i|
68
+ begin
69
+ tmp[klass.component[i + 1]] = array_hash[i].clone
70
+ rescue TypeError
71
+ tmp[klass.component[i + 1]] = array_hash[i]
72
+ end
73
+ end
74
+
75
+ elsif array_hash.kind_of?(Hash)
76
+ array_hash.each do |key, value|
77
+ begin
78
+ tmp[key] = value.clone
79
+ rescue TypeError
80
+ tmp[key] = value
81
+ end
82
+ end
83
+ else
84
+ raise ArgumentError,
85
+ "expected Array of or Hash of components of #{klass} (#{klass.component[1..-1].join(', ')})"
86
+ end
87
+ tmp[:scheme] = klass.to_s.sub(/\A.*::/, '').downcase
88
+
89
+ return tmp
90
+ end
91
+ module_function :make_components_hash
92
+ end
93
+
94
+ module Schemes # :nodoc:
95
+ end
96
+ private_constant :Schemes
97
+
98
+ # Registers the given +klass+ as the class to be instantiated
99
+ # when parsing a \Gem::URI with the given +scheme+:
100
+ #
101
+ # Gem::URI.register_scheme('MS_SEARCH', Gem::URI::Generic) # => Gem::URI::Generic
102
+ # Gem::URI.scheme_list['MS_SEARCH'] # => Gem::URI::Generic
103
+ #
104
+ # Note that after calling String#upcase on +scheme+, it must be a valid
105
+ # constant name.
106
+ def self.register_scheme(scheme, klass)
107
+ Schemes.const_set(scheme.to_s.upcase, klass)
108
+ end
109
+
110
+ # Returns a hash of the defined schemes:
111
+ #
112
+ # Gem::URI.scheme_list
113
+ # # =>
114
+ # {"MAILTO"=>Gem::URI::MailTo,
115
+ # "LDAPS"=>Gem::URI::LDAPS,
116
+ # "WS"=>Gem::URI::WS,
117
+ # "HTTP"=>Gem::URI::HTTP,
118
+ # "HTTPS"=>Gem::URI::HTTPS,
119
+ # "LDAP"=>Gem::URI::LDAP,
120
+ # "FILE"=>Gem::URI::File,
121
+ # "FTP"=>Gem::URI::FTP}
122
+ #
123
+ # Related: Gem::URI.register_scheme.
124
+ def self.scheme_list
125
+ Schemes.constants.map { |name|
126
+ [name.to_s.upcase, Schemes.const_get(name)]
127
+ }.to_h
128
+ end
129
+
130
+ INITIAL_SCHEMES = scheme_list
131
+ private_constant :INITIAL_SCHEMES
132
+ Ractor.make_shareable(INITIAL_SCHEMES) if defined?(Ractor)
133
+
134
+ # Returns a new object constructed from the given +scheme+, +arguments+,
135
+ # and +default+:
136
+ #
137
+ # - The new object is an instance of <tt>Gem::URI.scheme_list[scheme.upcase]</tt>.
138
+ # - The object is initialized by calling the class initializer
139
+ # using +scheme+ and +arguments+.
140
+ # See Gem::URI::Generic.new.
141
+ #
142
+ # Examples:
143
+ #
144
+ # values = ['john.doe', 'www.example.com', '123', nil, '/forum/questions/', nil, 'tag=networking&order=newest', 'top']
145
+ # Gem::URI.for('https', *values)
146
+ # # => #<Gem::URI::HTTPS https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
147
+ # Gem::URI.for('foo', *values, default: Gem::URI::HTTP)
148
+ # # => #<Gem::URI::HTTP foo://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
149
+ #
150
+ def self.for(scheme, *arguments, default: Generic)
151
+ const_name = scheme.to_s.upcase
152
+
153
+ uri_class = INITIAL_SCHEMES[const_name]
154
+ uri_class ||= if /\A[A-Z]\w*\z/.match?(const_name) && Schemes.const_defined?(const_name, false)
155
+ Schemes.const_get(const_name, false)
156
+ end
157
+ uri_class ||= default
158
+
159
+ return uri_class.new(scheme, *arguments)
160
+ end
161
+
162
+ #
163
+ # Base class for all Gem::URI exceptions.
164
+ #
165
+ class Error < StandardError; end
166
+ #
167
+ # Not a Gem::URI.
168
+ #
169
+ class InvalidURIError < Error; end
170
+ #
171
+ # Not a Gem::URI component.
172
+ #
173
+ class InvalidComponentError < Error; end
174
+ #
175
+ # Gem::URI is valid, bad usage is not.
176
+ #
177
+ class BadURIError < Error; end
178
+
179
+ # Returns a 9-element array representing the parts of the \Gem::URI
180
+ # formed from the string +uri+;
181
+ # each array element is a string or +nil+:
182
+ #
183
+ # names = %w[scheme userinfo host port registry path opaque query fragment]
184
+ # values = Gem::URI.split('https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
185
+ # names.zip(values)
186
+ # # =>
187
+ # [["scheme", "https"],
188
+ # ["userinfo", "john.doe"],
189
+ # ["host", "www.example.com"],
190
+ # ["port", "123"],
191
+ # ["registry", nil],
192
+ # ["path", "/forum/questions/"],
193
+ # ["opaque", nil],
194
+ # ["query", "tag=networking&order=newest"],
195
+ # ["fragment", "top"]]
196
+ #
197
+ def self.split(uri)
198
+ DEFAULT_PARSER.split(uri)
199
+ end
200
+
201
+ # Returns a new \Gem::URI object constructed from the given string +uri+:
202
+ #
203
+ # Gem::URI.parse('https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
204
+ # # => #<Gem::URI::HTTPS https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
205
+ # Gem::URI.parse('http://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
206
+ # # => #<Gem::URI::HTTP http://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
207
+ #
208
+ # It's recommended to first ::escape string +uri+
209
+ # if it may contain invalid Gem::URI characters.
210
+ #
211
+ def self.parse(uri)
212
+ DEFAULT_PARSER.parse(uri)
213
+ end
214
+
215
+ # Merges the given Gem::URI strings +str+
216
+ # per {RFC 2396}[https://www.rfc-editor.org/rfc/rfc2396.html].
217
+ #
218
+ # Each string in +str+ is converted to an
219
+ # {RFC3986 Gem::URI}[https://www.rfc-editor.org/rfc/rfc3986.html] before being merged.
220
+ #
221
+ # Examples:
222
+ #
223
+ # Gem::URI.join("http://example.com/","main.rbx")
224
+ # # => #<Gem::URI::HTTP http://example.com/main.rbx>
225
+ #
226
+ # Gem::URI.join('http://example.com', 'foo')
227
+ # # => #<Gem::URI::HTTP http://example.com/foo>
228
+ #
229
+ # Gem::URI.join('http://example.com', '/foo', '/bar')
230
+ # # => #<Gem::URI::HTTP http://example.com/bar>
231
+ #
232
+ # Gem::URI.join('http://example.com', '/foo', 'bar')
233
+ # # => #<Gem::URI::HTTP http://example.com/bar>
234
+ #
235
+ # Gem::URI.join('http://example.com', '/foo/', 'bar')
236
+ # # => #<Gem::URI::HTTP http://example.com/foo/bar>
237
+ #
238
+ def self.join(*str)
239
+ DEFAULT_PARSER.join(*str)
240
+ end
241
+
242
+ #
243
+ # == Synopsis
244
+ #
245
+ # Gem::URI::extract(str[, schemes][,&blk])
246
+ #
247
+ # == Args
248
+ #
249
+ # +str+::
250
+ # String to extract URIs from.
251
+ # +schemes+::
252
+ # Limit Gem::URI matching to specific schemes.
253
+ #
254
+ # == Description
255
+ #
256
+ # Extracts URIs from a string. If block given, iterates through all matched URIs.
257
+ # Returns nil if block given or array with matches.
258
+ #
259
+ # == Usage
260
+ #
261
+ # require "rubygems/vendor/uri/lib/uri"
262
+ #
263
+ # Gem::URI.extract("text here http://foo.example.org/bla and here mailto:test@example.com and here also.")
264
+ # # => ["http://foo.example.com/bla", "mailto:test@example.com"]
265
+ #
266
+ def self.extract(str, schemes = nil, &block) # :nodoc:
267
+ warn "Gem::URI.extract is obsolete", uplevel: 1 if $VERBOSE
268
+ DEFAULT_PARSER.extract(str, schemes, &block)
269
+ end
270
+
271
+ #
272
+ # == Synopsis
273
+ #
274
+ # Gem::URI::regexp([match_schemes])
275
+ #
276
+ # == Args
277
+ #
278
+ # +match_schemes+::
279
+ # Array of schemes. If given, resulting regexp matches to URIs
280
+ # whose scheme is one of the match_schemes.
281
+ #
282
+ # == Description
283
+ #
284
+ # Returns a Regexp object which matches to Gem::URI-like strings.
285
+ # The Regexp object returned by this method includes arbitrary
286
+ # number of capture group (parentheses). Never rely on its number.
287
+ #
288
+ # == Usage
289
+ #
290
+ # require 'rubygems/vendor/uri/lib/uri'
291
+ #
292
+ # # extract first Gem::URI from html_string
293
+ # html_string.slice(Gem::URI.regexp)
294
+ #
295
+ # # remove ftp URIs
296
+ # html_string.sub(Gem::URI.regexp(['ftp']), '')
297
+ #
298
+ # # You should not rely on the number of parentheses
299
+ # html_string.scan(Gem::URI.regexp) do |*matches|
300
+ # p $&
301
+ # end
302
+ #
303
+ def self.regexp(schemes = nil)# :nodoc:
304
+ warn "Gem::URI.regexp is obsolete", uplevel: 1 if $VERBOSE
305
+ DEFAULT_PARSER.make_regexp(schemes)
306
+ end
307
+
308
+ TBLENCWWWCOMP_ = {} # :nodoc:
309
+ 256.times do |i|
310
+ TBLENCWWWCOMP_[-i.chr] = -('%%%02X' % i)
311
+ end
312
+ TBLENCURICOMP_ = TBLENCWWWCOMP_.dup.freeze # :nodoc:
313
+ TBLENCWWWCOMP_[' '] = '+'
314
+ TBLENCWWWCOMP_.freeze
315
+ TBLDECWWWCOMP_ = {} # :nodoc:
316
+ 256.times do |i|
317
+ h, l = i>>4, i&15
318
+ TBLDECWWWCOMP_[-('%%%X%X' % [h, l])] = -i.chr
319
+ TBLDECWWWCOMP_[-('%%%x%X' % [h, l])] = -i.chr
320
+ TBLDECWWWCOMP_[-('%%%X%x' % [h, l])] = -i.chr
321
+ TBLDECWWWCOMP_[-('%%%x%x' % [h, l])] = -i.chr
322
+ end
323
+ TBLDECWWWCOMP_['+'] = ' '
324
+ TBLDECWWWCOMP_.freeze
325
+
326
+ # Returns a URL-encoded string derived from the given string +str+.
327
+ #
328
+ # The returned string:
329
+ #
330
+ # - Preserves:
331
+ #
332
+ # - Characters <tt>'*'</tt>, <tt>'.'</tt>, <tt>'-'</tt>, and <tt>'_'</tt>.
333
+ # - Character in ranges <tt>'a'..'z'</tt>, <tt>'A'..'Z'</tt>,
334
+ # and <tt>'0'..'9'</tt>.
335
+ #
336
+ # Example:
337
+ #
338
+ # Gem::URI.encode_www_form_component('*.-_azAZ09')
339
+ # # => "*.-_azAZ09"
340
+ #
341
+ # - Converts:
342
+ #
343
+ # - Character <tt>' '</tt> to character <tt>'+'</tt>.
344
+ # - Any other character to "percent notation";
345
+ # the percent notation for character <i>c</i> is <tt>'%%%X' % c.ord</tt>.
346
+ #
347
+ # Example:
348
+ #
349
+ # Gem::URI.encode_www_form_component('Here are some punctuation characters: ,;?:')
350
+ # # => "Here+are+some+punctuation+characters%3A+%2C%3B%3F%3A"
351
+ #
352
+ # Encoding:
353
+ #
354
+ # - If +str+ has encoding Encoding::ASCII_8BIT, argument +enc+ is ignored.
355
+ # - Otherwise +str+ is converted first to Encoding::UTF_8
356
+ # (with suitable character replacements),
357
+ # and then to encoding +enc+.
358
+ #
359
+ # In either case, the returned string has forced encoding Encoding::US_ASCII.
360
+ #
361
+ # Related: Gem::URI.encode_uri_component (encodes <tt>' '</tt> as <tt>'%20'</tt>).
362
+ def self.encode_www_form_component(str, enc=nil)
363
+ _encode_uri_component(/[^*\-.0-9A-Z_a-z]/, TBLENCWWWCOMP_, str, enc)
364
+ end
365
+
366
+ # Returns a string decoded from the given \URL-encoded string +str+.
367
+ #
368
+ # The given string is first encoded as Encoding::ASCII-8BIT (using String#b),
369
+ # then decoded (as below), and finally force-encoded to the given encoding +enc+.
370
+ #
371
+ # The returned string:
372
+ #
373
+ # - Preserves:
374
+ #
375
+ # - Characters <tt>'*'</tt>, <tt>'.'</tt>, <tt>'-'</tt>, and <tt>'_'</tt>.
376
+ # - Character in ranges <tt>'a'..'z'</tt>, <tt>'A'..'Z'</tt>,
377
+ # and <tt>'0'..'9'</tt>.
378
+ #
379
+ # Example:
380
+ #
381
+ # Gem::URI.decode_www_form_component('*.-_azAZ09')
382
+ # # => "*.-_azAZ09"
383
+ #
384
+ # - Converts:
385
+ #
386
+ # - Character <tt>'+'</tt> to character <tt>' '</tt>.
387
+ # - Each "percent notation" to an ASCII character.
388
+ #
389
+ # Example:
390
+ #
391
+ # Gem::URI.decode_www_form_component('Here+are+some+punctuation+characters%3A+%2C%3B%3F%3A')
392
+ # # => "Here are some punctuation characters: ,;?:"
393
+ #
394
+ # Related: Gem::URI.decode_uri_component (preserves <tt>'+'</tt>).
395
+ def self.decode_www_form_component(str, enc=Encoding::UTF_8)
396
+ _decode_uri_component(/\+|%\h\h/, str, enc)
397
+ end
398
+
399
+ # Like Gem::URI.encode_www_form_component, except that <tt>' '</tt> (space)
400
+ # is encoded as <tt>'%20'</tt> (instead of <tt>'+'</tt>).
401
+ def self.encode_uri_component(str, enc=nil)
402
+ _encode_uri_component(/[^*\-.0-9A-Z_a-z]/, TBLENCURICOMP_, str, enc)
403
+ end
404
+
405
+ # Like Gem::URI.decode_www_form_component, except that <tt>'+'</tt> is preserved.
406
+ def self.decode_uri_component(str, enc=Encoding::UTF_8)
407
+ _decode_uri_component(/%\h\h/, str, enc)
408
+ end
409
+
410
+ def self._encode_uri_component(regexp, table, str, enc)
411
+ str = str.to_s.dup
412
+ if str.encoding != Encoding::ASCII_8BIT
413
+ if enc && enc != Encoding::ASCII_8BIT
414
+ str.encode!(Encoding::UTF_8, invalid: :replace, undef: :replace)
415
+ str.encode!(enc, fallback: ->(x){"&##{x.ord};"})
416
+ end
417
+ str.force_encoding(Encoding::ASCII_8BIT)
418
+ end
419
+ str.gsub!(regexp, table)
420
+ str.force_encoding(Encoding::US_ASCII)
421
+ end
422
+ private_class_method :_encode_uri_component
423
+
424
+ def self._decode_uri_component(regexp, str, enc)
425
+ raise ArgumentError, "invalid %-encoding (#{str})" if /%(?!\h\h)/.match?(str)
426
+ str.b.gsub(regexp, TBLDECWWWCOMP_).force_encoding(enc)
427
+ end
428
+ private_class_method :_decode_uri_component
429
+
430
+ # Returns a URL-encoded string derived from the given
431
+ # {Enumerable}[https://docs.ruby-lang.org/en/master/Enumerable.html#module-Enumerable-label-Enumerable+in+Ruby+Classes]
432
+ # +enum+.
433
+ #
434
+ # The result is suitable for use as form data
435
+ # for an \HTTP request whose <tt>Content-Type</tt> is
436
+ # <tt>'application/x-www-form-urlencoded'</tt>.
437
+ #
438
+ # The returned string consists of the elements of +enum+,
439
+ # each converted to one or more URL-encoded strings,
440
+ # and all joined with character <tt>'&'</tt>.
441
+ #
442
+ # Simple examples:
443
+ #
444
+ # Gem::URI.encode_www_form([['foo', 0], ['bar', 1], ['baz', 2]])
445
+ # # => "foo=0&bar=1&baz=2"
446
+ # Gem::URI.encode_www_form({foo: 0, bar: 1, baz: 2})
447
+ # # => "foo=0&bar=1&baz=2"
448
+ #
449
+ # The returned string is formed using method Gem::URI.encode_www_form_component,
450
+ # which converts certain characters:
451
+ #
452
+ # Gem::URI.encode_www_form('f#o': '/', 'b-r': '$', 'b z': '@')
453
+ # # => "f%23o=%2F&b-r=%24&b+z=%40"
454
+ #
455
+ # When +enum+ is Array-like, each element +ele+ is converted to a field:
456
+ #
457
+ # - If +ele+ is an array of two or more elements,
458
+ # the field is formed from its first two elements
459
+ # (and any additional elements are ignored):
460
+ #
461
+ # name = Gem::URI.encode_www_form_component(ele[0], enc)
462
+ # value = Gem::URI.encode_www_form_component(ele[1], enc)
463
+ # "#{name}=#{value}"
464
+ #
465
+ # Examples:
466
+ #
467
+ # Gem::URI.encode_www_form([%w[foo bar], %w[baz bat bah]])
468
+ # # => "foo=bar&baz=bat"
469
+ # Gem::URI.encode_www_form([['foo', 0], ['bar', :baz, 'bat']])
470
+ # # => "foo=0&bar=baz"
471
+ #
472
+ # - If +ele+ is an array of one element,
473
+ # the field is formed from <tt>ele[0]</tt>:
474
+ #
475
+ # Gem::URI.encode_www_form_component(ele[0])
476
+ #
477
+ # Example:
478
+ #
479
+ # Gem::URI.encode_www_form([['foo'], [:bar], [0]])
480
+ # # => "foo&bar&0"
481
+ #
482
+ # - Otherwise the field is formed from +ele+:
483
+ #
484
+ # Gem::URI.encode_www_form_component(ele)
485
+ #
486
+ # Example:
487
+ #
488
+ # Gem::URI.encode_www_form(['foo', :bar, 0])
489
+ # # => "foo&bar&0"
490
+ #
491
+ # The elements of an Array-like +enum+ may be mixture:
492
+ #
493
+ # Gem::URI.encode_www_form([['foo', 0], ['bar', 1, 2], ['baz'], :bat])
494
+ # # => "foo=0&bar=1&baz&bat"
495
+ #
496
+ # When +enum+ is Hash-like,
497
+ # each +key+/+value+ pair is converted to one or more fields:
498
+ #
499
+ # - If +value+ is
500
+ # {Array-convertible}[https://docs.ruby-lang.org/en/master/implicit_conversion_rdoc.html#label-Array-Convertible+Objects],
501
+ # each element +ele+ in +value+ is paired with +key+ to form a field:
502
+ #
503
+ # name = Gem::URI.encode_www_form_component(key, enc)
504
+ # value = Gem::URI.encode_www_form_component(ele, enc)
505
+ # "#{name}=#{value}"
506
+ #
507
+ # Example:
508
+ #
509
+ # Gem::URI.encode_www_form({foo: [:bar, 1], baz: [:bat, :bam, 2]})
510
+ # # => "foo=bar&foo=1&baz=bat&baz=bam&baz=2"
511
+ #
512
+ # - Otherwise, +key+ and +value+ are paired to form a field:
513
+ #
514
+ # name = Gem::URI.encode_www_form_component(key, enc)
515
+ # value = Gem::URI.encode_www_form_component(value, enc)
516
+ # "#{name}=#{value}"
517
+ #
518
+ # Example:
519
+ #
520
+ # Gem::URI.encode_www_form({foo: 0, bar: 1, baz: 2})
521
+ # # => "foo=0&bar=1&baz=2"
522
+ #
523
+ # The elements of a Hash-like +enum+ may be mixture:
524
+ #
525
+ # Gem::URI.encode_www_form({foo: [0, 1], bar: 2})
526
+ # # => "foo=0&foo=1&bar=2"
527
+ #
528
+ def self.encode_www_form(enum, enc=nil)
529
+ enum.map do |k,v|
530
+ if v.nil?
531
+ encode_www_form_component(k, enc)
532
+ elsif v.respond_to?(:to_ary)
533
+ v.to_ary.map do |w|
534
+ str = encode_www_form_component(k, enc)
535
+ unless w.nil?
536
+ str << '='
537
+ str << encode_www_form_component(w, enc)
538
+ end
539
+ end.join('&')
540
+ else
541
+ str = encode_www_form_component(k, enc)
542
+ str << '='
543
+ str << encode_www_form_component(v, enc)
544
+ end
545
+ end.join('&')
546
+ end
547
+
548
+ # Returns name/value pairs derived from the given string +str+,
549
+ # which must be an ASCII string.
550
+ #
551
+ # The method may be used to decode the body of Net::HTTPResponse object +res+
552
+ # for which <tt>res['Content-Type']</tt> is <tt>'application/x-www-form-urlencoded'</tt>.
553
+ #
554
+ # The returned data is an array of 2-element subarrays;
555
+ # each subarray is a name/value pair (both are strings).
556
+ # Each returned string has encoding +enc+,
557
+ # and has had invalid characters removed via
558
+ # {String#scrub}[https://docs.ruby-lang.org/en/master/String.html#method-i-scrub].
559
+ #
560
+ # A simple example:
561
+ #
562
+ # Gem::URI.decode_www_form('foo=0&bar=1&baz')
563
+ # # => [["foo", "0"], ["bar", "1"], ["baz", ""]]
564
+ #
565
+ # The returned strings have certain conversions,
566
+ # similar to those performed in Gem::URI.decode_www_form_component:
567
+ #
568
+ # Gem::URI.decode_www_form('f%23o=%2F&b-r=%24&b+z=%40')
569
+ # # => [["f#o", "/"], ["b-r", "$"], ["b z", "@"]]
570
+ #
571
+ # The given string may contain consecutive separators:
572
+ #
573
+ # Gem::URI.decode_www_form('foo=0&&bar=1&&baz=2')
574
+ # # => [["foo", "0"], ["", ""], ["bar", "1"], ["", ""], ["baz", "2"]]
575
+ #
576
+ # A different separator may be specified:
577
+ #
578
+ # Gem::URI.decode_www_form('foo=0--bar=1--baz', separator: '--')
579
+ # # => [["foo", "0"], ["bar", "1"], ["baz", ""]]
580
+ #
581
+ def self.decode_www_form(str, enc=Encoding::UTF_8, separator: '&', use__charset_: false, isindex: false)
582
+ raise ArgumentError, "the input of #{self.name}.#{__method__} must be ASCII only string" unless str.ascii_only?
583
+ ary = []
584
+ return ary if str.empty?
585
+ enc = Encoding.find(enc)
586
+ str.b.each_line(separator) do |string|
587
+ string.chomp!(separator)
588
+ key, sep, val = string.partition('=')
589
+ if isindex
590
+ if sep.empty?
591
+ val = key
592
+ key = +''
593
+ end
594
+ isindex = false
595
+ end
596
+
597
+ if use__charset_ and key == '_charset_' and e = get_encoding(val)
598
+ enc = e
599
+ use__charset_ = false
600
+ end
601
+
602
+ key.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
603
+ if val
604
+ val.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
605
+ else
606
+ val = +''
607
+ end
608
+
609
+ ary << [key, val]
610
+ end
611
+ ary.each do |k, v|
612
+ k.force_encoding(enc)
613
+ k.scrub!
614
+ v.force_encoding(enc)
615
+ v.scrub!
616
+ end
617
+ ary
618
+ end
619
+
620
+ private
621
+ =begin command for WEB_ENCODINGS_
622
+ curl https://encoding.spec.whatwg.org/encodings.json|
623
+ ruby -rjson -e 'H={}
624
+ h={
625
+ "shift_jis"=>"Windows-31J",
626
+ "euc-jp"=>"cp51932",
627
+ "iso-2022-jp"=>"cp50221",
628
+ "x-mac-cyrillic"=>"macCyrillic",
629
+ }
630
+ JSON($<.read).map{|x|x["encodings"]}.flatten.each{|x|
631
+ Encoding.find(n=h.fetch(n=x["name"].downcase,n))rescue next
632
+ x["labels"].each{|y|H[y]=n}
633
+ }
634
+ puts "{"
635
+ H.each{|k,v|puts %[ #{k.dump}=>#{v.dump},]}
636
+ puts "}"
637
+ '
638
+ =end
639
+ WEB_ENCODINGS_ = {
640
+ "unicode-1-1-utf-8"=>"utf-8",
641
+ "utf-8"=>"utf-8",
642
+ "utf8"=>"utf-8",
643
+ "866"=>"ibm866",
644
+ "cp866"=>"ibm866",
645
+ "csibm866"=>"ibm866",
646
+ "ibm866"=>"ibm866",
647
+ "csisolatin2"=>"iso-8859-2",
648
+ "iso-8859-2"=>"iso-8859-2",
649
+ "iso-ir-101"=>"iso-8859-2",
650
+ "iso8859-2"=>"iso-8859-2",
651
+ "iso88592"=>"iso-8859-2",
652
+ "iso_8859-2"=>"iso-8859-2",
653
+ "iso_8859-2:1987"=>"iso-8859-2",
654
+ "l2"=>"iso-8859-2",
655
+ "latin2"=>"iso-8859-2",
656
+ "csisolatin3"=>"iso-8859-3",
657
+ "iso-8859-3"=>"iso-8859-3",
658
+ "iso-ir-109"=>"iso-8859-3",
659
+ "iso8859-3"=>"iso-8859-3",
660
+ "iso88593"=>"iso-8859-3",
661
+ "iso_8859-3"=>"iso-8859-3",
662
+ "iso_8859-3:1988"=>"iso-8859-3",
663
+ "l3"=>"iso-8859-3",
664
+ "latin3"=>"iso-8859-3",
665
+ "csisolatin4"=>"iso-8859-4",
666
+ "iso-8859-4"=>"iso-8859-4",
667
+ "iso-ir-110"=>"iso-8859-4",
668
+ "iso8859-4"=>"iso-8859-4",
669
+ "iso88594"=>"iso-8859-4",
670
+ "iso_8859-4"=>"iso-8859-4",
671
+ "iso_8859-4:1988"=>"iso-8859-4",
672
+ "l4"=>"iso-8859-4",
673
+ "latin4"=>"iso-8859-4",
674
+ "csisolatincyrillic"=>"iso-8859-5",
675
+ "cyrillic"=>"iso-8859-5",
676
+ "iso-8859-5"=>"iso-8859-5",
677
+ "iso-ir-144"=>"iso-8859-5",
678
+ "iso8859-5"=>"iso-8859-5",
679
+ "iso88595"=>"iso-8859-5",
680
+ "iso_8859-5"=>"iso-8859-5",
681
+ "iso_8859-5:1988"=>"iso-8859-5",
682
+ "arabic"=>"iso-8859-6",
683
+ "asmo-708"=>"iso-8859-6",
684
+ "csiso88596e"=>"iso-8859-6",
685
+ "csiso88596i"=>"iso-8859-6",
686
+ "csisolatinarabic"=>"iso-8859-6",
687
+ "ecma-114"=>"iso-8859-6",
688
+ "iso-8859-6"=>"iso-8859-6",
689
+ "iso-8859-6-e"=>"iso-8859-6",
690
+ "iso-8859-6-i"=>"iso-8859-6",
691
+ "iso-ir-127"=>"iso-8859-6",
692
+ "iso8859-6"=>"iso-8859-6",
693
+ "iso88596"=>"iso-8859-6",
694
+ "iso_8859-6"=>"iso-8859-6",
695
+ "iso_8859-6:1987"=>"iso-8859-6",
696
+ "csisolatingreek"=>"iso-8859-7",
697
+ "ecma-118"=>"iso-8859-7",
698
+ "elot_928"=>"iso-8859-7",
699
+ "greek"=>"iso-8859-7",
700
+ "greek8"=>"iso-8859-7",
701
+ "iso-8859-7"=>"iso-8859-7",
702
+ "iso-ir-126"=>"iso-8859-7",
703
+ "iso8859-7"=>"iso-8859-7",
704
+ "iso88597"=>"iso-8859-7",
705
+ "iso_8859-7"=>"iso-8859-7",
706
+ "iso_8859-7:1987"=>"iso-8859-7",
707
+ "sun_eu_greek"=>"iso-8859-7",
708
+ "csiso88598e"=>"iso-8859-8",
709
+ "csisolatinhebrew"=>"iso-8859-8",
710
+ "hebrew"=>"iso-8859-8",
711
+ "iso-8859-8"=>"iso-8859-8",
712
+ "iso-8859-8-e"=>"iso-8859-8",
713
+ "iso-ir-138"=>"iso-8859-8",
714
+ "iso8859-8"=>"iso-8859-8",
715
+ "iso88598"=>"iso-8859-8",
716
+ "iso_8859-8"=>"iso-8859-8",
717
+ "iso_8859-8:1988"=>"iso-8859-8",
718
+ "visual"=>"iso-8859-8",
719
+ "csisolatin6"=>"iso-8859-10",
720
+ "iso-8859-10"=>"iso-8859-10",
721
+ "iso-ir-157"=>"iso-8859-10",
722
+ "iso8859-10"=>"iso-8859-10",
723
+ "iso885910"=>"iso-8859-10",
724
+ "l6"=>"iso-8859-10",
725
+ "latin6"=>"iso-8859-10",
726
+ "iso-8859-13"=>"iso-8859-13",
727
+ "iso8859-13"=>"iso-8859-13",
728
+ "iso885913"=>"iso-8859-13",
729
+ "iso-8859-14"=>"iso-8859-14",
730
+ "iso8859-14"=>"iso-8859-14",
731
+ "iso885914"=>"iso-8859-14",
732
+ "csisolatin9"=>"iso-8859-15",
733
+ "iso-8859-15"=>"iso-8859-15",
734
+ "iso8859-15"=>"iso-8859-15",
735
+ "iso885915"=>"iso-8859-15",
736
+ "iso_8859-15"=>"iso-8859-15",
737
+ "l9"=>"iso-8859-15",
738
+ "iso-8859-16"=>"iso-8859-16",
739
+ "cskoi8r"=>"koi8-r",
740
+ "koi"=>"koi8-r",
741
+ "koi8"=>"koi8-r",
742
+ "koi8-r"=>"koi8-r",
743
+ "koi8_r"=>"koi8-r",
744
+ "koi8-ru"=>"koi8-u",
745
+ "koi8-u"=>"koi8-u",
746
+ "dos-874"=>"windows-874",
747
+ "iso-8859-11"=>"windows-874",
748
+ "iso8859-11"=>"windows-874",
749
+ "iso885911"=>"windows-874",
750
+ "tis-620"=>"windows-874",
751
+ "windows-874"=>"windows-874",
752
+ "cp1250"=>"windows-1250",
753
+ "windows-1250"=>"windows-1250",
754
+ "x-cp1250"=>"windows-1250",
755
+ "cp1251"=>"windows-1251",
756
+ "windows-1251"=>"windows-1251",
757
+ "x-cp1251"=>"windows-1251",
758
+ "ansi_x3.4-1968"=>"windows-1252",
759
+ "ascii"=>"windows-1252",
760
+ "cp1252"=>"windows-1252",
761
+ "cp819"=>"windows-1252",
762
+ "csisolatin1"=>"windows-1252",
763
+ "ibm819"=>"windows-1252",
764
+ "iso-8859-1"=>"windows-1252",
765
+ "iso-ir-100"=>"windows-1252",
766
+ "iso8859-1"=>"windows-1252",
767
+ "iso88591"=>"windows-1252",
768
+ "iso_8859-1"=>"windows-1252",
769
+ "iso_8859-1:1987"=>"windows-1252",
770
+ "l1"=>"windows-1252",
771
+ "latin1"=>"windows-1252",
772
+ "us-ascii"=>"windows-1252",
773
+ "windows-1252"=>"windows-1252",
774
+ "x-cp1252"=>"windows-1252",
775
+ "cp1253"=>"windows-1253",
776
+ "windows-1253"=>"windows-1253",
777
+ "x-cp1253"=>"windows-1253",
778
+ "cp1254"=>"windows-1254",
779
+ "csisolatin5"=>"windows-1254",
780
+ "iso-8859-9"=>"windows-1254",
781
+ "iso-ir-148"=>"windows-1254",
782
+ "iso8859-9"=>"windows-1254",
783
+ "iso88599"=>"windows-1254",
784
+ "iso_8859-9"=>"windows-1254",
785
+ "iso_8859-9:1989"=>"windows-1254",
786
+ "l5"=>"windows-1254",
787
+ "latin5"=>"windows-1254",
788
+ "windows-1254"=>"windows-1254",
789
+ "x-cp1254"=>"windows-1254",
790
+ "cp1255"=>"windows-1255",
791
+ "windows-1255"=>"windows-1255",
792
+ "x-cp1255"=>"windows-1255",
793
+ "cp1256"=>"windows-1256",
794
+ "windows-1256"=>"windows-1256",
795
+ "x-cp1256"=>"windows-1256",
796
+ "cp1257"=>"windows-1257",
797
+ "windows-1257"=>"windows-1257",
798
+ "x-cp1257"=>"windows-1257",
799
+ "cp1258"=>"windows-1258",
800
+ "windows-1258"=>"windows-1258",
801
+ "x-cp1258"=>"windows-1258",
802
+ "x-mac-cyrillic"=>"macCyrillic",
803
+ "x-mac-ukrainian"=>"macCyrillic",
804
+ "chinese"=>"gbk",
805
+ "csgb2312"=>"gbk",
806
+ "csiso58gb231280"=>"gbk",
807
+ "gb2312"=>"gbk",
808
+ "gb_2312"=>"gbk",
809
+ "gb_2312-80"=>"gbk",
810
+ "gbk"=>"gbk",
811
+ "iso-ir-58"=>"gbk",
812
+ "x-gbk"=>"gbk",
813
+ "gb18030"=>"gb18030",
814
+ "big5"=>"big5",
815
+ "big5-hkscs"=>"big5",
816
+ "cn-big5"=>"big5",
817
+ "csbig5"=>"big5",
818
+ "x-x-big5"=>"big5",
819
+ "cseucpkdfmtjapanese"=>"cp51932",
820
+ "euc-jp"=>"cp51932",
821
+ "x-euc-jp"=>"cp51932",
822
+ "csiso2022jp"=>"cp50221",
823
+ "iso-2022-jp"=>"cp50221",
824
+ "csshiftjis"=>"Windows-31J",
825
+ "ms932"=>"Windows-31J",
826
+ "ms_kanji"=>"Windows-31J",
827
+ "shift-jis"=>"Windows-31J",
828
+ "shift_jis"=>"Windows-31J",
829
+ "sjis"=>"Windows-31J",
830
+ "windows-31j"=>"Windows-31J",
831
+ "x-sjis"=>"Windows-31J",
832
+ "cseuckr"=>"euc-kr",
833
+ "csksc56011987"=>"euc-kr",
834
+ "euc-kr"=>"euc-kr",
835
+ "iso-ir-149"=>"euc-kr",
836
+ "korean"=>"euc-kr",
837
+ "ks_c_5601-1987"=>"euc-kr",
838
+ "ks_c_5601-1989"=>"euc-kr",
839
+ "ksc5601"=>"euc-kr",
840
+ "ksc_5601"=>"euc-kr",
841
+ "windows-949"=>"euc-kr",
842
+ "utf-16be"=>"utf-16be",
843
+ "utf-16"=>"utf-16le",
844
+ "utf-16le"=>"utf-16le",
845
+ } # :nodoc:
846
+ Ractor.make_shareable(WEB_ENCODINGS_) if defined?(Ractor)
847
+
848
+ # :nodoc:
849
+ # return encoding or nil
850
+ # http://encoding.spec.whatwg.org/#concept-encoding-get
851
+ def self.get_encoding(label)
852
+ Encoding.find(WEB_ENCODINGS_[label.to_str.strip.downcase]) rescue nil
853
+ end
854
+ end # module Gem::URI
855
+
856
+ module Gem
857
+
858
+ #
859
+ # Returns a \Gem::URI object derived from the given +uri+,
860
+ # which may be a \Gem::URI string or an existing \Gem::URI object:
861
+ #
862
+ # # Returns a new Gem::URI.
863
+ # uri = Gem::URI('http://github.com/ruby/ruby')
864
+ # # => #<Gem::URI::HTTP http://github.com/ruby/ruby>
865
+ # # Returns the given Gem::URI.
866
+ # Gem::URI(uri)
867
+ # # => #<Gem::URI::HTTP http://github.com/ruby/ruby>
868
+ #
869
+ def URI(uri)
870
+ if uri.is_a?(Gem::URI::Generic)
871
+ uri
872
+ elsif uri = String.try_convert(uri)
873
+ Gem::URI.parse(uri)
874
+ else
875
+ raise ArgumentError,
876
+ "bad argument (expected Gem::URI object or Gem::URI string)"
877
+ end
878
+ end
879
+ module_function :URI
880
+ end