rubygems-update 3.3.18 → 3.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (832) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2182 -1067
  3. data/CODE_OF_CONDUCT.md +79 -28
  4. data/Manifest.txt +184 -290
  5. data/README.md +35 -19
  6. data/bundler/CHANGELOG.md +1003 -3
  7. data/bundler/README.md +3 -7
  8. data/bundler/bundler.gemspec +11 -11
  9. data/bundler/exe/bundle +5 -25
  10. data/bundler/lib/bundler/build_metadata.rb +3 -3
  11. data/bundler/lib/bundler/capistrano.rb +1 -1
  12. data/bundler/lib/bundler/checksum.rb +254 -0
  13. data/bundler/lib/bundler/ci_detector.rb +75 -0
  14. data/bundler/lib/bundler/cli/add.rb +7 -5
  15. data/bundler/lib/bundler/cli/binstubs.rb +10 -6
  16. data/bundler/lib/bundler/cli/cache.rb +1 -1
  17. data/bundler/lib/bundler/cli/check.rb +4 -4
  18. data/bundler/lib/bundler/cli/common.rb +11 -1
  19. data/bundler/lib/bundler/cli/config.rb +8 -7
  20. data/bundler/lib/bundler/cli/console.rb +2 -5
  21. data/bundler/lib/bundler/cli/doctor.rb +10 -12
  22. data/bundler/lib/bundler/cli/exec.rb +2 -1
  23. data/bundler/lib/bundler/cli/fund.rb +1 -1
  24. data/bundler/lib/bundler/cli/gem.rb +77 -53
  25. data/bundler/lib/bundler/cli/info.rb +4 -15
  26. data/bundler/lib/bundler/cli/init.rb +6 -2
  27. data/bundler/lib/bundler/cli/inject.rb +1 -1
  28. data/bundler/lib/bundler/cli/install.rb +27 -15
  29. data/bundler/lib/bundler/cli/issue.rb +1 -1
  30. data/bundler/lib/bundler/cli/lock.rb +54 -28
  31. data/bundler/lib/bundler/cli/open.rb +9 -9
  32. data/bundler/lib/bundler/cli/outdated.rb +34 -29
  33. data/bundler/lib/bundler/cli/platform.rb +7 -5
  34. data/bundler/lib/bundler/cli/plugin.rb +9 -15
  35. data/bundler/lib/bundler/cli/pristine.rb +38 -30
  36. data/bundler/lib/bundler/cli/show.rb +4 -4
  37. data/bundler/lib/bundler/cli/update.rb +6 -5
  38. data/bundler/lib/bundler/cli/viz.rb +1 -1
  39. data/bundler/lib/bundler/cli.rb +258 -307
  40. data/bundler/lib/bundler/compact_index_client/cache.rb +55 -60
  41. data/bundler/lib/bundler/compact_index_client/cache_file.rb +148 -0
  42. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  43. data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
  44. data/bundler/lib/bundler/compact_index_client/updater.rb +71 -83
  45. data/bundler/lib/bundler/compact_index_client.rb +58 -80
  46. data/bundler/lib/bundler/constants.rb +9 -2
  47. data/bundler/lib/bundler/current_ruby.rb +11 -16
  48. data/bundler/lib/bundler/definition.rb +547 -228
  49. data/bundler/lib/bundler/dependency.rb +30 -87
  50. data/bundler/lib/bundler/digest.rb +3 -3
  51. data/bundler/lib/bundler/dsl.rb +115 -65
  52. data/bundler/lib/bundler/endpoint_specification.rb +27 -14
  53. data/bundler/lib/bundler/env.rb +5 -7
  54. data/bundler/lib/bundler/environment_preserver.rb +8 -25
  55. data/bundler/lib/bundler/errors.rb +85 -11
  56. data/bundler/lib/bundler/feature_flag.rb +1 -2
  57. data/bundler/lib/bundler/fetcher/base.rb +5 -3
  58. data/bundler/lib/bundler/fetcher/compact_index.rb +28 -43
  59. data/bundler/lib/bundler/fetcher/dependency.rb +3 -7
  60. data/bundler/lib/bundler/fetcher/downloader.rb +17 -16
  61. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  62. data/bundler/lib/bundler/fetcher/index.rb +2 -3
  63. data/bundler/lib/bundler/fetcher.rb +91 -74
  64. data/bundler/lib/bundler/force_platform.rb +16 -0
  65. data/bundler/lib/bundler/friendly_errors.rb +6 -9
  66. data/bundler/lib/bundler/gem_helper.rb +5 -6
  67. data/bundler/lib/bundler/gem_helpers.rb +45 -7
  68. data/bundler/lib/bundler/gem_version_promoter.rb +68 -109
  69. data/bundler/lib/bundler/graph.rb +9 -9
  70. data/bundler/lib/bundler/index.rb +69 -73
  71. data/bundler/lib/bundler/injector.rb +12 -13
  72. data/bundler/lib/bundler/inline.rb +40 -17
  73. data/bundler/lib/bundler/installer/gem_installer.rb +13 -12
  74. data/bundler/lib/bundler/installer/parallel_installer.rb +19 -66
  75. data/bundler/lib/bundler/installer/standalone.rb +29 -15
  76. data/bundler/lib/bundler/installer.rb +27 -77
  77. data/bundler/lib/bundler/lazy_specification.rb +134 -71
  78. data/bundler/lib/bundler/lockfile_generator.rb +13 -4
  79. data/bundler/lib/bundler/lockfile_parser.rb +134 -61
  80. data/bundler/lib/bundler/man/bundle-add.1 +46 -48
  81. data/bundler/lib/bundler/man/bundle-add.1.ronn +54 -22
  82. data/bundler/lib/bundler/man/bundle-binstubs.1 +10 -19
  83. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  84. data/bundler/lib/bundler/man/bundle-cache.1 +38 -25
  85. data/bundler/lib/bundler/man/bundle-cache.1.ronn +40 -4
  86. data/bundler/lib/bundler/man/bundle-check.1 +7 -14
  87. data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
  88. data/bundler/lib/bundler/man/bundle-clean.1 +4 -11
  89. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  90. data/bundler/lib/bundler/man/bundle-config.1 +41 -220
  91. data/bundler/lib/bundler/man/bundle-config.1.ronn +27 -22
  92. data/bundler/lib/bundler/man/bundle-console.1 +33 -0
  93. data/bundler/lib/bundler/man/bundle-console.1.ronn +39 -0
  94. data/bundler/lib/bundler/man/bundle-doctor.1 +5 -19
  95. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
  96. data/bundler/lib/bundler/man/bundle-env.1 +9 -0
  97. data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
  98. data/bundler/lib/bundler/man/bundle-exec.1 +20 -78
  99. data/bundler/lib/bundler/man/bundle-exec.1.ronn +12 -10
  100. data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
  101. data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
  102. data/bundler/lib/bundler/man/bundle-gem.1 +53 -81
  103. data/bundler/lib/bundler/man/bundle-gem.1.ronn +41 -9
  104. data/bundler/lib/bundler/man/bundle-help.1 +9 -0
  105. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  106. data/bundler/lib/bundler/man/bundle-info.1 +8 -11
  107. data/bundler/lib/bundler/man/bundle-info.1.ronn +9 -5
  108. data/bundler/lib/bundler/man/bundle-init.1 +7 -12
  109. data/bundler/lib/bundler/man/bundle-init.1.ronn +4 -1
  110. data/bundler/lib/bundler/man/bundle-inject.1 +17 -19
  111. data/bundler/lib/bundler/man/bundle-inject.1.ronn +12 -2
  112. data/bundler/lib/bundler/man/bundle-install.1 +42 -162
  113. data/bundler/lib/bundler/man/bundle-install.1.ronn +31 -49
  114. data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
  115. data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
  116. data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
  117. data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  118. data/bundler/lib/bundler/man/bundle-list.1 +4 -19
  119. data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
  120. data/bundler/lib/bundler/man/bundle-lock.1 +25 -34
  121. data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
  122. data/bundler/lib/bundler/man/bundle-open.1 +18 -18
  123. data/bundler/lib/bundler/man/bundle-open.1.ronn +10 -1
  124. data/bundler/lib/bundler/man/bundle-outdated.1 +22 -67
  125. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +20 -12
  126. data/bundler/lib/bundler/man/bundle-platform.1 +16 -28
  127. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  128. data/bundler/lib/bundler/man/bundle-plugin.1 +58 -0
  129. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +63 -0
  130. data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
  131. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  132. data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
  133. data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
  134. data/bundler/lib/bundler/man/bundle-show.1 +7 -11
  135. data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
  136. data/bundler/lib/bundler/man/bundle-update.1 +30 -143
  137. data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
  138. data/bundler/lib/bundler/man/bundle-version.1 +22 -0
  139. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  140. data/bundler/lib/bundler/man/bundle-viz.1 +9 -18
  141. data/bundler/lib/bundler/man/bundle-viz.1.ronn +9 -3
  142. data/bundler/lib/bundler/man/bundle.1 +17 -51
  143. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  144. data/bundler/lib/bundler/man/gemfile.5 +77 -341
  145. data/bundler/lib/bundler/man/gemfile.5.ronn +73 -54
  146. data/bundler/lib/bundler/man/index.txt +8 -0
  147. data/bundler/lib/bundler/match_metadata.rb +17 -0
  148. data/bundler/lib/bundler/match_platform.rb +1 -1
  149. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  150. data/bundler/lib/bundler/materialization.rb +59 -0
  151. data/bundler/lib/bundler/mirror.rb +8 -10
  152. data/bundler/lib/bundler/plugin/api/source.rb +7 -5
  153. data/bundler/lib/bundler/plugin/events.rb +24 -0
  154. data/bundler/lib/bundler/plugin/index.rb +13 -5
  155. data/bundler/lib/bundler/plugin/installer/path.rb +18 -0
  156. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
  157. data/bundler/lib/bundler/plugin/installer.rb +42 -19
  158. data/bundler/lib/bundler/plugin/source_list.rb +4 -4
  159. data/bundler/lib/bundler/plugin.rb +35 -7
  160. data/bundler/lib/bundler/process_lock.rb +10 -14
  161. data/bundler/lib/bundler/remote_specification.rb +17 -13
  162. data/bundler/lib/bundler/resolver/base.rb +117 -0
  163. data/bundler/lib/bundler/resolver/candidate.rb +82 -0
  164. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  165. data/bundler/lib/bundler/resolver/package.rb +90 -0
  166. data/bundler/lib/bundler/resolver/root.rb +25 -0
  167. data/bundler/lib/bundler/resolver/spec_group.rb +54 -67
  168. data/bundler/lib/bundler/resolver.rb +432 -329
  169. data/bundler/lib/bundler/retry.rb +2 -2
  170. data/bundler/lib/bundler/ruby_dsl.rb +42 -7
  171. data/bundler/lib/bundler/ruby_version.rb +23 -10
  172. data/bundler/lib/bundler/rubygems_ext.rb +286 -81
  173. data/bundler/lib/bundler/rubygems_gem_installer.rb +77 -68
  174. data/bundler/lib/bundler/rubygems_integration.rb +57 -155
  175. data/bundler/lib/bundler/runtime.rb +28 -17
  176. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  177. data/bundler/lib/bundler/self_manager.rb +50 -12
  178. data/bundler/lib/bundler/settings.rb +144 -58
  179. data/bundler/lib/bundler/setup.rb +13 -1
  180. data/bundler/lib/bundler/shared_helpers.rb +87 -36
  181. data/bundler/lib/bundler/source/git/git_proxy.rb +278 -80
  182. data/bundler/lib/bundler/source/git.rb +161 -68
  183. data/bundler/lib/bundler/source/metadata.rb +16 -16
  184. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  185. data/bundler/lib/bundler/source/path.rb +16 -26
  186. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  187. data/bundler/lib/bundler/source/rubygems.rb +94 -154
  188. data/bundler/lib/bundler/source.rb +3 -1
  189. data/bundler/lib/bundler/source_list.rb +34 -4
  190. data/bundler/lib/bundler/spec_set.rb +195 -65
  191. data/bundler/lib/bundler/stub_specification.rb +34 -4
  192. data/bundler/lib/bundler/templates/Executable +1 -1
  193. data/bundler/lib/bundler/templates/Executable.bundler +6 -11
  194. data/bundler/lib/bundler/templates/Executable.standalone +2 -0
  195. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  196. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  197. data/bundler/lib/bundler/templates/newgem/README.md.tt +11 -5
  198. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -8
  199. data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
  200. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  201. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  202. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  203. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  204. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  205. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  206. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -8
  207. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  208. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  209. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +12 -4
  210. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  211. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
  212. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  213. data/bundler/lib/bundler/ui/shell.rb +60 -15
  214. data/bundler/lib/bundler/ui/silent.rb +33 -6
  215. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
  216. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  217. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  218. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  219. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  220. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +56 -7
  221. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -418
  222. data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
  223. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  224. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  225. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  226. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  227. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +102 -64
  228. data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
  229. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  230. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  231. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  232. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  233. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  234. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  235. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  236. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  237. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  238. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  239. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  240. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  241. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  242. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  243. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  244. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  245. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  246. data/bundler/lib/bundler/vendor/securerandom/.document +1 -0
  247. data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
  248. data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  249. data/bundler/lib/bundler/vendor/thor/.document +1 -0
  250. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  251. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  252. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  253. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -15
  254. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
  255. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
  256. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  257. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  258. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
  259. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
  260. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +12 -1
  261. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  262. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  263. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +17 -1
  264. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  265. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +28 -9
  266. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +46 -7
  267. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  268. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  269. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +35 -159
  270. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
  271. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  272. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -46
  273. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
  274. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  275. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  276. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  277. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
  278. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  279. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +166 -8
  280. data/bundler/lib/bundler/vendor/tsort/.document +1 -0
  281. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  282. data/bundler/lib/bundler/vendor/uri/.document +1 -0
  283. data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
  284. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +343 -148
  285. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +10 -4
  286. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +3 -2
  287. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +44 -33
  288. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  289. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  290. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  291. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  292. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  293. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +25 -12
  294. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +130 -38
  295. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  296. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  297. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  298. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +12 -11
  299. data/bundler/lib/bundler/vendored_net_http.rb +23 -0
  300. data/bundler/lib/bundler/vendored_persistent.rb +0 -36
  301. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  302. data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
  303. data/bundler/lib/bundler/vendored_timeout.rb +12 -0
  304. data/bundler/lib/bundler/vendored_uri.rb +18 -1
  305. data/bundler/lib/bundler/version.rb +5 -1
  306. data/bundler/lib/bundler/vlad.rb +1 -1
  307. data/bundler/lib/bundler/worker.rb +5 -7
  308. data/bundler/lib/bundler/yaml_serializer.rb +22 -13
  309. data/bundler/lib/bundler.rb +155 -148
  310. data/{bundler → doc/bundler}/UPGRADING.md +11 -4
  311. data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +40 -17
  312. data/doc/rubygems/POLICIES.md +204 -0
  313. data/{test/rubygems/fake_certlib/openssl.rb → exe/gem} +5 -1
  314. data/{bin → exe}/update_rubygems +12 -10
  315. data/lib/rubygems/available_set.rb +8 -7
  316. data/lib/rubygems/basic_specification.rb +90 -52
  317. data/lib/rubygems/bundler_version_finder.rb +6 -6
  318. data/lib/rubygems/ci_detector.rb +75 -0
  319. data/lib/rubygems/command.rb +68 -64
  320. data/lib/rubygems/command_manager.rb +39 -24
  321. data/lib/rubygems/commands/build_command.rb +14 -19
  322. data/lib/rubygems/commands/cert_command.rb +39 -39
  323. data/lib/rubygems/commands/check_command.rb +30 -25
  324. data/lib/rubygems/commands/cleanup_command.rb +32 -43
  325. data/lib/rubygems/commands/contents_command.rb +33 -25
  326. data/lib/rubygems/commands/dependency_command.rb +22 -23
  327. data/lib/rubygems/commands/environment_command.rb +8 -9
  328. data/lib/rubygems/commands/exec_command.rb +247 -0
  329. data/lib/rubygems/commands/fetch_command.rb +25 -10
  330. data/lib/rubygems/commands/generate_index_command.rb +40 -74
  331. data/lib/rubygems/commands/help_command.rb +15 -14
  332. data/lib/rubygems/commands/info_command.rb +5 -5
  333. data/lib/rubygems/commands/install_command.rb +31 -38
  334. data/lib/rubygems/commands/list_command.rb +6 -5
  335. data/lib/rubygems/commands/lock_command.rb +6 -5
  336. data/lib/rubygems/commands/mirror_command.rb +4 -3
  337. data/lib/rubygems/commands/open_command.rb +11 -12
  338. data/lib/rubygems/commands/outdated_command.rb +6 -5
  339. data/lib/rubygems/commands/owner_command.rb +23 -22
  340. data/lib/rubygems/commands/pristine_command.rb +83 -62
  341. data/lib/rubygems/commands/push_command.rb +38 -13
  342. data/lib/rubygems/commands/query_command.rb +11 -11
  343. data/lib/rubygems/commands/rdoc_command.rb +23 -28
  344. data/lib/rubygems/commands/rebuild_command.rb +262 -0
  345. data/lib/rubygems/commands/search_command.rb +6 -5
  346. data/lib/rubygems/commands/server_command.rb +4 -3
  347. data/lib/rubygems/commands/setup_command.rb +137 -154
  348. data/lib/rubygems/commands/signin_command.rb +10 -9
  349. data/lib/rubygems/commands/signout_command.rb +8 -7
  350. data/lib/rubygems/commands/sources_command.rb +34 -33
  351. data/lib/rubygems/commands/specification_command.rb +25 -20
  352. data/lib/rubygems/commands/stale_command.rb +5 -4
  353. data/lib/rubygems/commands/uninstall_command.rb +66 -59
  354. data/lib/rubygems/commands/unpack_command.rb +23 -30
  355. data/lib/rubygems/commands/update_command.rb +62 -94
  356. data/lib/rubygems/commands/which_command.rb +9 -8
  357. data/lib/rubygems/commands/yank_command.rb +14 -13
  358. data/lib/rubygems/compatibility.rb +5 -6
  359. data/lib/rubygems/config_file.rb +160 -50
  360. data/lib/rubygems/core_ext/kernel_gem.rb +3 -10
  361. data/lib/rubygems/core_ext/kernel_require.rb +88 -114
  362. data/lib/rubygems/core_ext/kernel_warn.rb +30 -39
  363. data/lib/rubygems/core_ext/tcpsocket_init.rb +4 -2
  364. data/lib/rubygems/defaults.rb +53 -22
  365. data/lib/rubygems/dependency.rb +34 -36
  366. data/lib/rubygems/dependency_installer.rb +52 -56
  367. data/lib/rubygems/dependency_list.rb +8 -7
  368. data/lib/rubygems/deprecate.rb +80 -75
  369. data/lib/rubygems/doctor.rb +23 -22
  370. data/lib/rubygems/errors.rb +6 -8
  371. data/lib/rubygems/exceptions.rb +20 -18
  372. data/lib/rubygems/ext/build_error.rb +2 -1
  373. data/lib/rubygems/ext/builder.rb +56 -32
  374. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
  375. data/lib/rubygems/ext/cargo_builder.rb +158 -131
  376. data/lib/rubygems/ext/cmake_builder.rb +9 -4
  377. data/lib/rubygems/ext/configure_builder.rb +9 -3
  378. data/lib/rubygems/ext/ext_conf_builder.rb +19 -15
  379. data/lib/rubygems/ext/rake_builder.rb +14 -7
  380. data/lib/rubygems/ext.rb +8 -7
  381. data/lib/rubygems/gem_runner.rb +23 -9
  382. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  383. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  384. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +80 -0
  385. data/lib/rubygems/gemcutter_utilities.rb +141 -63
  386. data/lib/rubygems/gemspec_helpers.rb +19 -0
  387. data/lib/rubygems/install_default_message.rb +3 -2
  388. data/lib/rubygems/install_message.rb +3 -2
  389. data/lib/rubygems/install_update_options.rb +72 -67
  390. data/lib/rubygems/installer.rb +148 -130
  391. data/lib/rubygems/installer_uninstaller_utils.rb +2 -4
  392. data/lib/rubygems/local_remote_options.rb +24 -28
  393. data/lib/rubygems/name_tuple.rb +10 -11
  394. data/lib/rubygems/package/digest_io.rb +2 -1
  395. data/lib/rubygems/package/file_source.rb +3 -2
  396. data/lib/rubygems/package/io_source.rb +1 -0
  397. data/lib/rubygems/package/old.rb +11 -10
  398. data/lib/rubygems/package/source.rb +1 -0
  399. data/lib/rubygems/package/tar_header.rb +125 -91
  400. data/lib/rubygems/package/tar_reader/entry.rb +106 -29
  401. data/lib/rubygems/package/tar_reader.rb +16 -39
  402. data/lib/rubygems/package/tar_writer.rb +29 -26
  403. data/lib/rubygems/package.rb +122 -84
  404. data/lib/rubygems/package_task.rb +7 -6
  405. data/lib/rubygems/path_support.rb +11 -11
  406. data/lib/rubygems/platform.rb +119 -70
  407. data/lib/rubygems/psych_tree.rb +6 -1
  408. data/lib/rubygems/query_utils.rb +46 -48
  409. data/lib/rubygems/rdoc.rb +13 -3
  410. data/lib/rubygems/remote_fetcher.rb +47 -39
  411. data/lib/rubygems/request/connection_pools.rb +6 -6
  412. data/lib/rubygems/request/http_pool.rb +2 -1
  413. data/lib/rubygems/request/https_pool.rb +1 -0
  414. data/lib/rubygems/request.rb +48 -44
  415. data/lib/rubygems/request_set/gem_dependency_api.rb +141 -144
  416. data/lib/rubygems/request_set/lockfile/parser.rb +31 -30
  417. data/lib/rubygems/request_set/lockfile/tokenizer.rb +24 -14
  418. data/lib/rubygems/request_set/lockfile.rb +11 -15
  419. data/lib/rubygems/request_set.rb +25 -23
  420. data/lib/rubygems/requirement.rb +30 -27
  421. data/lib/rubygems/resolver/activation_request.rb +7 -10
  422. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  423. data/lib/rubygems/resolver/api_set.rb +20 -13
  424. data/lib/rubygems/resolver/api_specification.rb +8 -7
  425. data/lib/rubygems/resolver/best_set.rb +5 -32
  426. data/lib/rubygems/resolver/composed_set.rb +4 -3
  427. data/lib/rubygems/resolver/conflict.rb +14 -21
  428. data/lib/rubygems/resolver/current_set.rb +1 -0
  429. data/lib/rubygems/resolver/dependency_request.rb +3 -2
  430. data/lib/rubygems/resolver/git_set.rb +2 -2
  431. data/lib/rubygems/resolver/git_specification.rb +7 -6
  432. data/lib/rubygems/resolver/index_set.rb +10 -9
  433. data/lib/rubygems/resolver/index_specification.rb +8 -6
  434. data/lib/rubygems/resolver/installed_specification.rb +6 -5
  435. data/lib/rubygems/resolver/installer_set.rb +19 -22
  436. data/lib/rubygems/resolver/local_specification.rb +4 -3
  437. data/lib/rubygems/resolver/lock_set.rb +6 -5
  438. data/lib/rubygems/resolver/lock_specification.rb +5 -4
  439. data/lib/rubygems/resolver/requirement_list.rb +1 -0
  440. data/lib/rubygems/resolver/set.rb +1 -0
  441. data/lib/rubygems/resolver/source_set.rb +2 -0
  442. data/lib/rubygems/resolver/spec_specification.rb +8 -0
  443. data/lib/rubygems/resolver/specification.rb +2 -1
  444. data/lib/rubygems/resolver/stats.rb +2 -1
  445. data/lib/rubygems/resolver/vendor_set.rb +2 -1
  446. data/lib/rubygems/resolver/vendor_specification.rb +4 -3
  447. data/lib/rubygems/resolver.rb +51 -57
  448. data/lib/rubygems/s3_uri_signer.rb +18 -16
  449. data/lib/rubygems/safe_marshal/elements.rb +146 -0
  450. data/lib/rubygems/safe_marshal/reader.rb +325 -0
  451. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  452. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +428 -0
  453. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  454. data/lib/rubygems/safe_marshal.rb +74 -0
  455. data/lib/rubygems/safe_yaml.rb +14 -26
  456. data/lib/rubygems/security/policies.rb +48 -49
  457. data/lib/rubygems/security/policy.rb +25 -28
  458. data/lib/rubygems/security/signer.rb +16 -7
  459. data/lib/rubygems/security/trust_dir.rb +12 -13
  460. data/lib/rubygems/security.rb +40 -66
  461. data/lib/rubygems/security_option.rb +7 -6
  462. data/lib/rubygems/shellwords.rb +3 -0
  463. data/lib/rubygems/source/git.rb +34 -31
  464. data/lib/rubygems/source/installed.rb +4 -3
  465. data/lib/rubygems/source/local.rb +49 -49
  466. data/lib/rubygems/source/lock.rb +2 -3
  467. data/lib/rubygems/source/specific_file.rb +6 -4
  468. data/lib/rubygems/source/vendor.rb +1 -2
  469. data/lib/rubygems/source.rb +37 -31
  470. data/lib/rubygems/source_list.rb +8 -8
  471. data/lib/rubygems/spec_fetcher.rb +95 -66
  472. data/lib/rubygems/specification.rb +342 -404
  473. data/lib/rubygems/specification_policy.rb +147 -75
  474. data/lib/rubygems/specification_record.rb +212 -0
  475. data/lib/rubygems/stub_specification.rb +56 -30
  476. data/lib/rubygems/target_rbconfig.rb +50 -0
  477. data/lib/rubygems/text.rb +3 -4
  478. data/lib/rubygems/uninstaller.rb +67 -48
  479. data/lib/rubygems/update_suggestion.rb +56 -0
  480. data/lib/rubygems/uri.rb +10 -10
  481. data/lib/rubygems/uri_formatter.rb +2 -2
  482. data/lib/rubygems/user_interaction.rb +50 -40
  483. data/lib/rubygems/util/licenses.rb +310 -39
  484. data/lib/rubygems/util/list.rb +4 -1
  485. data/lib/rubygems/util.rb +19 -20
  486. data/lib/rubygems/validator.rb +15 -14
  487. data/lib/rubygems/vendor/molinillo/.document +1 -0
  488. data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  489. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
  490. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
  491. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  492. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  493. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  494. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  495. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
  496. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  497. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  498. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
  499. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -3
  500. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  501. data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  502. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
  503. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/ui.rb +1 -1
  504. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
  505. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolver.rb +1 -1
  506. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/state.rb +1 -1
  507. data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo.rb +2 -2
  508. data/lib/rubygems/vendor/net-http/.document +1 -0
  509. data/lib/rubygems/vendor/net-http/COPYING +56 -0
  510. data/lib/rubygems/vendor/net-http/lib/net/http/exceptions.rb +34 -0
  511. data/lib/rubygems/vendor/net-http/lib/net/http/generic_request.rb +414 -0
  512. data/lib/rubygems/vendor/net-http/lib/net/http/header.rb +981 -0
  513. data/lib/rubygems/vendor/net-http/lib/net/http/proxy_delta.rb +17 -0
  514. data/lib/rubygems/vendor/net-http/lib/net/http/request.rb +88 -0
  515. data/lib/rubygems/vendor/net-http/lib/net/http/requests.rb +430 -0
  516. data/lib/rubygems/vendor/net-http/lib/net/http/response.rb +738 -0
  517. data/lib/rubygems/vendor/net-http/lib/net/http/responses.rb +1174 -0
  518. data/lib/rubygems/vendor/net-http/lib/net/http/status.rb +84 -0
  519. data/lib/rubygems/vendor/net-http/lib/net/http.rb +2580 -0
  520. data/lib/rubygems/vendor/net-http/lib/net/https.rb +23 -0
  521. data/lib/rubygems/vendor/net-protocol/.document +1 -0
  522. data/lib/rubygems/vendor/net-protocol/lib/net/protocol.rb +544 -0
  523. data/lib/rubygems/vendor/optparse/.document +1 -0
  524. data/lib/rubygems/vendor/optparse/COPYING +56 -0
  525. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
  526. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
  527. data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
  528. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
  529. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +206 -83
  530. data/lib/rubygems/vendor/resolv/.document +1 -0
  531. data/lib/rubygems/vendor/resolv/COPYING +56 -0
  532. data/lib/rubygems/vendor/resolv/lib/resolv.rb +3455 -0
  533. data/lib/rubygems/vendor/securerandom/.document +1 -0
  534. data/lib/rubygems/vendor/securerandom/COPYING +56 -0
  535. data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
  536. data/lib/rubygems/vendor/timeout/.document +1 -0
  537. data/lib/rubygems/vendor/timeout/COPYING +56 -0
  538. data/lib/rubygems/vendor/timeout/lib/timeout.rb +198 -0
  539. data/lib/rubygems/vendor/tsort/.document +1 -0
  540. data/lib/rubygems/vendor/tsort/lib/tsort.rb +455 -0
  541. data/lib/rubygems/vendor/uri/.document +1 -0
  542. data/lib/rubygems/vendor/uri/COPYING +56 -0
  543. data/lib/rubygems/vendor/uri/lib/uri/common.rb +876 -0
  544. data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
  545. data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
  546. data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1578 -0
  547. data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
  548. data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
  549. data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
  550. data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
  551. data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
  552. data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  553. data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  554. data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
  555. data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
  556. data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
  557. data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
  558. data/{bundler/lib/bundler → lib/rubygems}/vendored_molinillo.rb +0 -1
  559. data/lib/rubygems/vendored_net_http.rb +5 -0
  560. data/lib/rubygems/vendored_optparse.rb +3 -0
  561. data/lib/rubygems/vendored_securerandom.rb +3 -0
  562. data/lib/rubygems/vendored_timeout.rb +5 -0
  563. data/lib/rubygems/vendored_tsort.rb +3 -0
  564. data/lib/rubygems/version.rb +57 -45
  565. data/lib/rubygems/version_option.rb +6 -8
  566. data/lib/rubygems/yaml_serializer.rb +98 -0
  567. data/lib/rubygems.rb +191 -133
  568. data/rubygems-update.gemspec +16 -9
  569. data/setup.rb +12 -9
  570. metadata +233 -307
  571. data/POLICIES.md +0 -100
  572. data/bin/gem +0 -13
  573. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  574. data/bundler/lib/bundler/templates/gems.rb +0 -5
  575. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  576. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  577. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  578. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  579. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  580. data/bundler/lib/bundler/version_ranges.rb +0 -122
  581. data/lib/rubygems/indexer.rb +0 -427
  582. data/lib/rubygems/mock_gem_ui.rb +0 -85
  583. data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
  584. data/lib/rubygems/optparse.rb +0 -3
  585. data/lib/rubygems/resolver/molinillo/LICENSE +0 -9
  586. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  587. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  588. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  589. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  590. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  591. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  592. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  593. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  594. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  595. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  596. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  597. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  598. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +0 -143
  599. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  600. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  601. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +0 -67
  602. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +0 -839
  603. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +0 -46
  604. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +0 -58
  605. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +0 -11
  606. data/lib/rubygems/resolver/molinillo.rb +0 -2
  607. data/lib/rubygems/tsort/LICENSE.txt +0 -22
  608. data/lib/rubygems/tsort/lib/tsort.rb +0 -454
  609. data/lib/rubygems/tsort.rb +0 -3
  610. data/test/rubygems/alternate_cert.pem +0 -19
  611. data/test/rubygems/alternate_cert_32.pem +0 -19
  612. data/test/rubygems/alternate_key.pem +0 -27
  613. data/test/rubygems/bad_rake.rb +0 -2
  614. data/test/rubygems/ca_cert.pem +0 -77
  615. data/test/rubygems/child_cert.pem +0 -20
  616. data/test/rubygems/child_cert_32.pem +0 -20
  617. data/test/rubygems/child_key.pem +0 -27
  618. data/test/rubygems/client.pem +0 -107
  619. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  620. data/test/rubygems/data/gem-private_key.pem +0 -27
  621. data/test/rubygems/data/gem-public_cert.pem +0 -20
  622. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  623. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  624. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  625. data/test/rubygems/encrypted_private_key.pem +0 -30
  626. data/test/rubygems/expired_cert.pem +0 -19
  627. data/test/rubygems/foo/discover.rb +0 -1
  628. data/test/rubygems/future_cert.pem +0 -19
  629. data/test/rubygems/future_cert_32.pem +0 -19
  630. data/test/rubygems/good_rake.rb +0 -2
  631. data/test/rubygems/grandchild_cert.pem +0 -20
  632. data/test/rubygems/grandchild_cert_32.pem +0 -20
  633. data/test/rubygems/grandchild_key.pem +0 -27
  634. data/test/rubygems/helper.rb +0 -1622
  635. data/test/rubygems/installer_test_case.rb +0 -247
  636. data/test/rubygems/invalid_client.pem +0 -49
  637. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  638. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  639. data/test/rubygems/invalid_key.pem +0 -27
  640. data/test/rubygems/invalid_signer_cert.pem +0 -19
  641. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  642. data/test/rubygems/invalidchild_cert.pem +0 -20
  643. data/test/rubygems/invalidchild_cert_32.pem +0 -20
  644. data/test/rubygems/invalidchild_key.pem +0 -27
  645. data/test/rubygems/package/tar_test_case.rb +0 -139
  646. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  647. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  648. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -3
  649. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -4
  650. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -3
  651. data/test/rubygems/private3072_key.pem +0 -40
  652. data/test/rubygems/private_ec_key.pem +0 -9
  653. data/test/rubygems/private_key.pem +0 -27
  654. data/test/rubygems/public3072_cert.pem +0 -25
  655. data/test/rubygems/public_cert.pem +0 -20
  656. data/test/rubygems/public_cert_32.pem +0 -19
  657. data/test/rubygems/public_key.pem +0 -9
  658. data/test/rubygems/rubygems/commands/crash_command.rb +0 -4
  659. data/test/rubygems/rubygems_plugin.rb +0 -23
  660. data/test/rubygems/sff/discover.rb +0 -1
  661. data/test/rubygems/simple_gem.rb +0 -67
  662. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -7
  663. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  664. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -12
  665. data/test/rubygems/ssl_cert.pem +0 -80
  666. data/test/rubygems/ssl_key.pem +0 -27
  667. data/test/rubygems/test_bundled_ca.rb +0 -60
  668. data/test/rubygems/test_config.rb +0 -27
  669. data/test/rubygems/test_deprecate.rb +0 -157
  670. data/test/rubygems/test_exit.rb +0 -11
  671. data/test/rubygems/test_gem.rb +0 -2112
  672. data/test/rubygems/test_gem_available_set.rb +0 -129
  673. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -125
  674. data/test/rubygems/test_gem_command.rb +0 -400
  675. data/test/rubygems/test_gem_command_manager.rb +0 -334
  676. data/test/rubygems/test_gem_commands_build_command.rb +0 -727
  677. data/test/rubygems/test_gem_commands_cert_command.rb +0 -867
  678. data/test/rubygems/test_gem_commands_check_command.rb +0 -67
  679. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -291
  680. data/test/rubygems/test_gem_commands_contents_command.rb +0 -270
  681. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -227
  682. data/test/rubygems/test_gem_commands_environment_command.rb +0 -167
  683. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -257
  684. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -80
  685. data/test/rubygems/test_gem_commands_help_command.rb +0 -93
  686. data/test/rubygems/test_gem_commands_info_command.rb +0 -43
  687. data/test/rubygems/test_gem_commands_install_command.rb +0 -1553
  688. data/test/rubygems/test_gem_commands_list_command.rb +0 -32
  689. data/test/rubygems/test_gem_commands_lock_command.rb +0 -66
  690. data/test/rubygems/test_gem_commands_mirror.rb +0 -19
  691. data/test/rubygems/test_gem_commands_open_command.rb +0 -97
  692. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -49
  693. data/test/rubygems/test_gem_commands_owner_command.rb +0 -326
  694. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -659
  695. data/test/rubygems/test_gem_commands_push_command.rb +0 -477
  696. data/test/rubygems/test_gem_commands_query_command.rb +0 -857
  697. data/test/rubygems/test_gem_commands_search_command.rb +0 -15
  698. data/test/rubygems/test_gem_commands_server_command.rb +0 -19
  699. data/test/rubygems/test_gem_commands_setup_command.rb +0 -447
  700. data/test/rubygems/test_gem_commands_signin_command.rb +0 -219
  701. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  702. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  703. data/test/rubygems/test_gem_commands_specification_command.rb +0 -276
  704. data/test/rubygems/test_gem_commands_stale_command.rb +0 -42
  705. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -504
  706. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -223
  707. data/test/rubygems/test_gem_commands_update_command.rb +0 -835
  708. data/test/rubygems/test_gem_commands_which_command.rb +0 -84
  709. data/test/rubygems/test_gem_commands_yank_command.rb +0 -180
  710. data/test/rubygems/test_gem_config_file.rb +0 -504
  711. data/test/rubygems/test_gem_dependency.rb +0 -395
  712. data/test/rubygems/test_gem_dependency_installer.rb +0 -1155
  713. data/test/rubygems/test_gem_dependency_list.rb +0 -264
  714. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -26
  715. data/test/rubygems/test_gem_doctor.rb +0 -194
  716. data/test/rubygems/test_gem_ext_builder.rb +0 -338
  717. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  718. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +0 -243
  719. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +0 -10
  720. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
  721. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  722. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/src/lib.rs +0 -27
  723. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  724. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -243
  725. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  726. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
  727. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -8
  728. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -39
  729. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -178
  730. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -33
  731. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -75
  732. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -83
  733. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -79
  734. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -230
  735. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -112
  736. data/test/rubygems/test_gem_gem_runner.rb +0 -113
  737. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -272
  738. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -59
  739. data/test/rubygems/test_gem_indexer.rb +0 -361
  740. data/test/rubygems/test_gem_install_update_options.rb +0 -207
  741. data/test/rubygems/test_gem_installer.rb +0 -2394
  742. data/test/rubygems/test_gem_local_remote_options.rb +0 -132
  743. data/test/rubygems/test_gem_name_tuple.rb +0 -42
  744. data/test/rubygems/test_gem_package.rb +0 -1178
  745. data/test/rubygems/test_gem_package_old.rb +0 -90
  746. data/test/rubygems/test_gem_package_tar_header.rb +0 -225
  747. data/test/rubygems/test_gem_package_tar_reader.rb +0 -87
  748. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -152
  749. data/test/rubygems/test_gem_package_tar_writer.rb +0 -330
  750. data/test/rubygems/test_gem_package_task.rb +0 -117
  751. data/test/rubygems/test_gem_path_support.rb +0 -138
  752. data/test/rubygems/test_gem_platform.rb +0 -391
  753. data/test/rubygems/test_gem_rdoc.rb +0 -136
  754. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1226
  755. data/test/rubygems/test_gem_request.rb +0 -541
  756. data/test/rubygems/test_gem_request_connection_pools.rb +0 -150
  757. data/test/rubygems/test_gem_request_set.rb +0 -671
  758. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -847
  759. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -468
  760. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -543
  761. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
  762. data/test/rubygems/test_gem_requirement.rb +0 -498
  763. data/test/rubygems/test_gem_resolver.rb +0 -791
  764. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -42
  765. data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
  766. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -166
  767. data/test/rubygems/test_gem_resolver_best_set.rb +0 -158
  768. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -43
  769. data/test/rubygems/test_gem_resolver_conflict.rb +0 -81
  770. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -82
  771. data/test/rubygems/test_gem_resolver_git_set.rb +0 -187
  772. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -113
  773. data/test/rubygems/test_gem_resolver_index_set.rb +0 -87
  774. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -92
  775. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -46
  776. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -275
  777. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -43
  778. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -61
  779. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -97
  780. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -18
  781. data/test/rubygems/test_gem_resolver_specification.rb +0 -62
  782. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -81
  783. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -81
  784. data/test/rubygems/test_gem_security.rb +0 -340
  785. data/test/rubygems/test_gem_security_policy.rb +0 -535
  786. data/test/rubygems/test_gem_security_signer.rb +0 -217
  787. data/test/rubygems/test_gem_security_trust_dir.rb +0 -98
  788. data/test/rubygems/test_gem_silent_ui.rb +0 -116
  789. data/test/rubygems/test_gem_source.rb +0 -253
  790. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -36
  791. data/test/rubygems/test_gem_source_git.rb +0 -303
  792. data/test/rubygems/test_gem_source_installed.rb +0 -34
  793. data/test/rubygems/test_gem_source_list.rb +0 -118
  794. data/test/rubygems/test_gem_source_local.rb +0 -106
  795. data/test/rubygems/test_gem_source_lock.rb +0 -112
  796. data/test/rubygems/test_gem_source_specific_file.rb +0 -75
  797. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -49
  798. data/test/rubygems/test_gem_source_vendor.rb +0 -29
  799. data/test/rubygems/test_gem_spec_fetcher.rb +0 -337
  800. data/test/rubygems/test_gem_specification.rb +0 -3756
  801. data/test/rubygems/test_gem_stream_ui.rb +0 -224
  802. data/test/rubygems/test_gem_stub_specification.rb +0 -277
  803. data/test/rubygems/test_gem_text.rb +0 -102
  804. data/test/rubygems/test_gem_uninstaller.rb +0 -674
  805. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -30
  806. data/test/rubygems/test_gem_uri.rb +0 -39
  807. data/test/rubygems/test_gem_uri_formatter.rb +0 -26
  808. data/test/rubygems/test_gem_util.rb +0 -90
  809. data/test/rubygems/test_gem_validator.rb +0 -42
  810. data/test/rubygems/test_gem_version.rb +0 -295
  811. data/test/rubygems/test_gem_version_option.rb +0 -164
  812. data/test/rubygems/test_kernel.rb +0 -129
  813. data/test/rubygems/test_project_sanity.rb +0 -20
  814. data/test/rubygems/test_remote_fetch_error.rb +0 -19
  815. data/test/rubygems/test_require.rb +0 -719
  816. data/test/rubygems/test_rubygems.rb +0 -74
  817. data/test/rubygems/utilities.rb +0 -371
  818. data/test/rubygems/wrong_key_cert.pem +0 -19
  819. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  820. data/test/test_changelog_generator.rb +0 -17
  821. /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/connection_pool}/.document +0 -0
  822. /data/{lib/rubygems/tsort → bundler/lib/bundler/vendor/fileutils}/.document +0 -0
  823. /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
  824. /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
  825. /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
  826. /data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/LICENSE +0 -0
  827. /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
  828. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
  829. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
  830. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
  831. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
  832. /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  #
3
4
  #--
4
5
  # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
@@ -6,12 +7,14 @@
6
7
  # See LICENSE.txt for permissions.
7
8
  #++
8
9
 
9
- require_relative 'deprecate'
10
- require_relative 'basic_specification'
11
- require_relative 'stub_specification'
12
- require_relative 'platform'
13
- require_relative 'requirement'
14
- require_relative 'util/list'
10
+ require_relative "deprecate"
11
+ require_relative "basic_specification"
12
+ require_relative "stub_specification"
13
+ require_relative "platform"
14
+ require_relative "specification_record"
15
+ require_relative "util/list"
16
+
17
+ require "rbconfig"
15
18
 
16
19
  ##
17
20
  # The Specification class contains the information for a gem. Typically
@@ -75,29 +78,29 @@ class Gem::Specification < Gem::BasicSpecification
75
78
  # key should be equal to the CURRENT_SPECIFICATION_VERSION.
76
79
 
77
80
  SPECIFICATION_VERSION_HISTORY = { # :nodoc:
78
- -1 => ['(RubyGems versions up to and including 0.7 did not have versioned specifications)'],
79
- 1 => [
81
+ -1 => ["(RubyGems versions up to and including 0.7 did not have versioned specifications)"],
82
+ 1 => [
80
83
  'Deprecated "test_suite_file" in favor of the new, but equivalent, "test_files"',
81
84
  '"test_file=x" is a shortcut for "test_files=[x]"',
82
85
  ],
83
86
  2 => [
84
87
  'Added "required_rubygems_version"',
85
- 'Now forward-compatible with future versions',
88
+ "Now forward-compatible with future versions",
86
89
  ],
87
90
  3 => [
88
- 'Added Fixnum validation to the specification_version',
91
+ "Added Fixnum validation to the specification_version",
89
92
  ],
90
93
  4 => [
91
- 'Added sandboxed freeform metadata to the specification version.',
94
+ "Added sandboxed freeform metadata to the specification version.",
92
95
  ],
93
96
  }.freeze
94
97
 
95
98
  MARSHAL_FIELDS = { # :nodoc:
96
99
  -1 => 16,
97
- 1 => 16,
98
- 2 => 16,
99
- 3 => 17,
100
- 4 => 18,
100
+ 1 => 16,
101
+ 2 => 16,
102
+ 3 => 17,
103
+ 4 => 18,
101
104
  }.freeze
102
105
 
103
106
  today = Time.now.utc
@@ -106,7 +109,7 @@ class Gem::Specification < Gem::BasicSpecification
106
109
  @load_cache = {} # :nodoc:
107
110
  @load_cache_mutex = Thread::Mutex.new
108
111
 
109
- VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/.freeze # :nodoc:
112
+ VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/ # :nodoc:
110
113
 
111
114
  # :startdoc:
112
115
 
@@ -125,35 +128,35 @@ class Gem::Specification < Gem::BasicSpecification
125
128
  # Map of attribute names to default values.
126
129
 
127
130
  @@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,
131
+ authors: [],
132
+ autorequire: nil,
133
+ bindir: "bin",
134
+ cert_chain: [],
135
+ date: nil,
136
+ dependencies: [],
137
+ description: nil,
138
+ email: nil,
139
+ executables: [],
140
+ extensions: [],
141
+ extra_rdoc_files: [],
142
+ files: [],
143
+ homepage: nil,
144
+ licenses: [],
145
+ metadata: {},
146
+ name: nil,
147
+ platform: Gem::Platform::RUBY,
148
+ post_install_message: nil,
149
+ rdoc_options: [],
150
+ require_paths: ["lib"],
151
+ required_ruby_version: Gem::Requirement.default,
152
+ required_rubygems_version: Gem::Requirement.default,
153
+ requirements: [],
154
+ rubygems_version: Gem::VERSION,
155
+ signing_key: nil,
156
+ specification_version: CURRENT_SPECIFICATION_VERSION,
157
+ summary: nil,
158
+ test_files: [],
159
+ version: nil,
157
160
  }.freeze
158
161
 
159
162
  # rubocop:disable Style/MutableConstant
@@ -162,39 +165,27 @@ class Gem::Specification < Gem::BasicSpecification
162
165
 
163
166
  @@default_value.each do |k,v|
164
167
  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"
168
+ when [], {}, true, false, nil, Numeric, Symbol
169
+ v.inspect
170
+ when String
171
+ v.dump
172
+ else
173
+ "default_value(:#{k}).dup"
173
174
  end
174
175
  end
175
176
 
176
- @@attributes = @@default_value.keys.sort_by {|s| s.to_s }
177
- @@array_attributes = @@default_value.reject {|k,v| v != [] }.keys
177
+ @@attributes = @@default_value.keys.sort_by(&:to_s)
178
+ @@array_attributes = @@default_value.select {|_k,v| v.is_a?(Array) }.keys
178
179
  @@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition do |k|
179
180
  @@default_value[k].nil?
180
181
  end
181
182
 
182
- def self.clear_specs # :nodoc:
183
- @@all = nil
184
- @@stubs = nil
185
- @@stubs_by_name = {}
186
- @@spec_with_requirable_file = {}
187
- @@active_stub_with_requirable_file = {}
188
- end
189
- private_class_method :clear_specs
190
-
191
- clear_specs
192
-
193
183
  # Sentinel object to represent "not found" stubs
194
184
  NOT_FOUND = Struct.new(:to_spec, :this).new # :nodoc:
185
+ deprecate_constant :NOT_FOUND
195
186
 
196
187
  # Tracking removed method calls to warn users during build time.
197
- REMOVED_METHODS = [:rubyforge_project=].freeze # :nodoc:
188
+ REMOVED_METHODS = [:rubyforge_project=, :mark_version].freeze # :nodoc:
198
189
  def removed_method_calls
199
190
  @removed_method_calls ||= []
200
191
  end
@@ -263,8 +254,7 @@ class Gem::Specification < Gem::BasicSpecification
263
254
  @test_files,
264
255
  add_bindir(@executables),
265
256
  @extra_rdoc_files,
266
- @extensions,
267
- ].flatten.compact.uniq.sort
257
+ @extensions].flatten.compact.uniq.sort
268
258
  end
269
259
 
270
260
  ##
@@ -302,7 +292,7 @@ class Gem::Specification < Gem::BasicSpecification
302
292
  #
303
293
  # Usage:
304
294
  #
305
- # spec.description = <<-EOF
295
+ # spec.description = <<~EOF
306
296
  # Rake is a Make-like program implemented in Ruby. Tasks and
307
297
  # dependencies are specified in standard Ruby syntax.
308
298
  # EOF
@@ -339,10 +329,10 @@ class Gem::Specification < Gem::BasicSpecification
339
329
  # The simplest way is to specify the standard SPDX ID
340
330
  # https://spdx.org/licenses/ for the license.
341
331
  # Ideally, you should pick one that is OSI (Open Source Initiative)
342
- # http://opensource.org/licenses/alphabetical approved.
332
+ # https://opensource.org/licenses/ approved.
343
333
  #
344
334
  # The most commonly used OSI-approved licenses are MIT and Apache-2.0.
345
- # GitHub also provides a license picker at http://choosealicense.com/.
335
+ # GitHub also provides a license picker at https://choosealicense.com/.
346
336
  #
347
337
  # You can also use a custom license file along with your gemspec and specify
348
338
  # a LicenseRef-<idstring>, where idstring is the name of the file containing
@@ -401,7 +391,7 @@ class Gem::Specification < Gem::BasicSpecification
401
391
  # "homepage_uri" => "https://bestgemever.example.io",
402
392
  # "mailing_list_uri" => "https://groups.example.com/bestgemever",
403
393
  # "source_code_uri" => "https://example.com/user/bestgemever",
404
- # "wiki_uri" => "https://example.com/user/bestgemever/wiki"
394
+ # "wiki_uri" => "https://example.com/user/bestgemever/wiki",
405
395
  # "funding_uri" => "https://example.com/donate"
406
396
  # }
407
397
  #
@@ -427,11 +417,11 @@ class Gem::Specification < Gem::BasicSpecification
427
417
  end
428
418
 
429
419
  ##
430
- # The path in the gem for executable scripts. Usually 'bin'
420
+ # The path in the gem for executable scripts. Usually 'exe'
431
421
  #
432
422
  # Usage:
433
423
  #
434
- # spec.bindir = 'bin'
424
+ # spec.bindir = 'exe'
435
425
 
436
426
  attr_accessor :bindir
437
427
 
@@ -474,10 +464,7 @@ class Gem::Specification < Gem::BasicSpecification
474
464
  # spec.platform = Gem::Platform.local
475
465
 
476
466
  def platform=(platform)
477
- if @original_platform.nil? or
478
- @original_platform == Gem::Platform::RUBY
479
- @original_platform = platform
480
- end
467
+ @original_platform = platform
481
468
 
482
469
  case platform
483
470
  when Gem::Platform::CURRENT then
@@ -490,12 +477,12 @@ class Gem::Specification < Gem::BasicSpecification
490
477
  # legacy constants
491
478
  when nil, Gem::Platform::RUBY then
492
479
  @new_platform = Gem::Platform::RUBY
493
- when 'mswin32' then # was Gem::Platform::WIN32
494
- @new_platform = Gem::Platform.new 'x86-mswin32'
495
- when 'i586-linux' then # was Gem::Platform::LINUX_586
496
- @new_platform = Gem::Platform.new 'x86-linux'
497
- when 'powerpc-darwin' then # was Gem::Platform::DARWIN
498
- @new_platform = Gem::Platform.new 'ppc-darwin'
480
+ when "mswin32" then # was Gem::Platform::WIN32
481
+ @new_platform = Gem::Platform.new "x86-mswin32"
482
+ when "i586-linux" then # was Gem::Platform::LINUX_586
483
+ @new_platform = Gem::Platform.new "x86-linux"
484
+ when "powerpc-darwin" then # was Gem::Platform::DARWIN
485
+ @new_platform = Gem::Platform.new "ppc-darwin"
499
486
  else
500
487
  @new_platform = Gem::Platform.new platform
501
488
  end
@@ -503,8 +490,6 @@ class Gem::Specification < Gem::BasicSpecification
503
490
  @platform = @new_platform.to_s
504
491
 
505
492
  invalidate_memoized_attributes
506
-
507
- @new_platform
508
493
  end
509
494
 
510
495
  ##
@@ -533,13 +518,6 @@ class Gem::Specification < Gem::BasicSpecification
533
518
 
534
519
  attr_reader :required_rubygems_version
535
520
 
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
521
  ##
544
522
  # The key used to sign this gem. See Gem::Security for details.
545
523
 
@@ -565,9 +543,9 @@ class Gem::Specification < Gem::BasicSpecification
565
543
  #
566
544
  # Usage:
567
545
  #
568
- # spec.add_runtime_dependency 'example', '~> 1.1', '>= 1.1.4'
546
+ # spec.add_dependency 'example', '~> 1.1', '>= 1.1.4'
569
547
 
570
- def add_runtime_dependency(gem, *requirements)
548
+ def add_dependency(gem, *requirements)
571
549
  if requirements.uniq.size != requirements.size
572
550
  warn "WARNING: duplicated #{gem} dependency #{requirements}"
573
551
  end
@@ -578,7 +556,7 @@ class Gem::Specification < Gem::BasicSpecification
578
556
  ##
579
557
  # Executables included in the gem.
580
558
  #
581
- # For example, the rake gem has rake as an executable. You dont specify the
559
+ # For example, the rake gem has rake as an executable. You don't specify the
582
560
  # full path (as in bin/rake); all application-style files are expected to be
583
561
  # found in bindir. These files must be executable Ruby files. Files that
584
562
  # use bash or other interpreters will not work.
@@ -599,7 +577,7 @@ class Gem::Specification < Gem::BasicSpecification
599
577
  # extconf.rb-style files used to compile extensions.
600
578
  #
601
579
  # These files will be run when the gem is installed, causing the C (or
602
- # whatever) code to be compiled on the users machine.
580
+ # whatever) code to be compiled on the user's machine.
603
581
  #
604
582
  # Usage:
605
583
  #
@@ -727,6 +705,21 @@ class Gem::Specification < Gem::BasicSpecification
727
705
  @test_files = Array files
728
706
  end
729
707
 
708
+ ######################################################################
709
+ # :section: Read-only attributes
710
+
711
+ ##
712
+ # The version of RubyGems used to create this gem.
713
+
714
+ attr_accessor :rubygems_version
715
+
716
+ ##
717
+ # The path where this gem installs its extensions.
718
+
719
+ def extensions_dir
720
+ @extensions_dir ||= super
721
+ end
722
+
730
723
  ######################################################################
731
724
  # :section: Specification internals
732
725
 
@@ -735,7 +728,7 @@ class Gem::Specification < Gem::BasicSpecification
735
728
 
736
729
  attr_accessor :activated
737
730
 
738
- alias :activated? :activated
731
+ alias_method :activated?, :activated
739
732
 
740
733
  ##
741
734
  # Autorequire was used by old RubyGems to automatically require a file.
@@ -765,7 +758,7 @@ class Gem::Specification < Gem::BasicSpecification
765
758
  attr_accessor :specification_version
766
759
 
767
760
  def self._all # :nodoc:
768
- @@all ||= Gem.loaded_specs.values | stubs.map(&:to_spec)
761
+ specification_record.all
769
762
  end
770
763
 
771
764
  def self.clear_load_cache # :nodoc:
@@ -775,34 +768,22 @@ class Gem::Specification < Gem::BasicSpecification
775
768
  end
776
769
  private_class_method :clear_load_cache
777
770
 
771
+ def self.gem_path # :nodoc:
772
+ Gem.path
773
+ end
774
+ private_class_method :gem_path
775
+
778
776
  def self.each_gemspec(dirs) # :nodoc:
779
777
  dirs.each do |dir|
780
778
  Gem::Util.glob_files_in_dir("*.gemspec", dir).each do |path|
781
- yield path.tap(&Gem::UNTAINT)
779
+ yield path
782
780
  end
783
781
  end
784
782
  end
785
783
 
786
- def self.gemspec_stubs_in(dir, pattern)
784
+ def self.gemspec_stubs_in(dir, pattern) # :nodoc:
787
785
  Gem::Util.glob_files_in_dir(pattern, dir).map {|path| yield path }.select(&:valid?)
788
786
  end
789
- private_class_method :gemspec_stubs_in
790
-
791
- def self.installed_stubs(dirs, pattern)
792
- map_stubs(dirs, pattern) do |path, base_dir, gems_dir|
793
- Gem::StubSpecification.gemspec_stub(path, base_dir, gems_dir)
794
- end
795
- end
796
- private_class_method :installed_stubs
797
-
798
- def self.map_stubs(dirs, pattern) # :nodoc:
799
- dirs.flat_map do |dir|
800
- base_dir = File.dirname dir
801
- gems_dir = File.join base_dir, "gems"
802
- gemspec_stubs_in(dir, pattern) {|path| yield path, base_dir, gems_dir }
803
- end
804
- end
805
- private_class_method :map_stubs
806
787
 
807
788
  def self.each_spec(dirs) # :nodoc:
808
789
  each_gemspec(dirs) do |path|
@@ -815,13 +796,7 @@ class Gem::Specification < Gem::BasicSpecification
815
796
  # Returns a Gem::StubSpecification for every installed gem
816
797
 
817
798
  def self.stubs
818
- @@stubs ||= begin
819
- pattern = "*.gemspec"
820
- stubs = stubs_for_pattern(pattern, false)
821
-
822
- @@stubs_by_name = stubs.select {|s| Gem::Platform.match_spec? s }.group_by(&:name)
823
- stubs
824
- end
799
+ specification_record.stubs
825
800
  end
826
801
 
827
802
  ##
@@ -840,13 +815,7 @@ class Gem::Specification < Gem::BasicSpecification
840
815
  # only returns stubs that match Gem.platforms
841
816
 
842
817
  def self.stubs_for(name)
843
- if @@stubs
844
- @@stubs_by_name[name] || []
845
- else
846
- @@stubs_by_name[name] ||= stubs_for_pattern("#{name}-*.gemspec").select do |s|
847
- s.name == name
848
- end
849
- end
818
+ specification_record.stubs_for(name)
850
819
  end
851
820
 
852
821
  ##
@@ -854,12 +823,7 @@ class Gem::Specification < Gem::BasicSpecification
854
823
  # optionally filtering out specs not matching the current platform
855
824
  #
856
825
  def self.stubs_for_pattern(pattern, match_platform = true) # :nodoc:
857
- installed_stubs = installed_stubs(Gem::Specification.dirs, pattern)
858
- installed_stubs.select! {|s| Gem::Platform.match_spec? s } if match_platform
859
- stubs = installed_stubs + default_stubs(pattern)
860
- stubs = stubs.uniq {|stub| stub.full_name }
861
- _resort!(stubs)
862
- stubs
826
+ specification_record.stubs_for_pattern(pattern, match_platform)
863
827
  end
864
828
 
865
829
  def self._resort!(specs) # :nodoc:
@@ -868,7 +832,11 @@ class Gem::Specification < Gem::BasicSpecification
868
832
  next names if names.nonzero?
869
833
  versions = b.version <=> a.version
870
834
  next versions if versions.nonzero?
871
- Gem::Platform.sort_priority(b.platform)
835
+ platforms = Gem::Platform.sort_priority(b.platform) <=> Gem::Platform.sort_priority(a.platform)
836
+ next platforms if platforms.nonzero?
837
+ default_gem = a.default_gem_priority <=> b.default_gem_priority
838
+ next default_gem if default_gem.nonzero?
839
+ a.base_dir_priority(gem_path) <=> b.base_dir_priority(gem_path)
872
840
  end
873
841
  end
874
842
 
@@ -888,23 +856,14 @@ class Gem::Specification < Gem::BasicSpecification
888
856
  # properly sorted.
889
857
 
890
858
  def self.add_spec(spec)
891
- return if _all.include? spec
892
-
893
- _all << spec
894
- stubs << spec
895
- (@@stubs_by_name[spec.name] ||= []) << spec
896
-
897
- _resort!(@@stubs_by_name[spec.name])
898
- _resort!(stubs)
859
+ specification_record.add_spec(spec)
899
860
  end
900
861
 
901
862
  ##
902
863
  # Removes +spec+ from the known specs.
903
864
 
904
865
  def self.remove_spec(spec)
905
- _all.delete spec.to_spec
906
- stubs.delete spec
907
- (@@stubs_by_name[spec.name] || []).delete spec
866
+ specification_record.remove_spec(spec)
908
867
  end
909
868
 
910
869
  ##
@@ -912,33 +871,23 @@ class Gem::Specification < Gem::BasicSpecification
912
871
  # You probably want to use one of the Enumerable methods instead.
913
872
 
914
873
  def self.all
915
- warn "NOTE: Specification.all called from #{caller.first}" unless
874
+ warn "NOTE: Specification.all called from #{caller(1, 1).first}" unless
916
875
  Gem::Deprecate.skip
917
876
  _all
918
877
  end
919
878
 
920
879
  ##
921
- # Sets the known specs to +specs+. Not guaranteed to work for you in
922
- # the future. Use at your own risk. Caveat emptor. Doomy doom doom.
923
- # Etc etc.
924
- #
925
- #--
926
- # Makes +specs+ the known specs
927
- # Listen, time is a river
928
- # Winter comes, code breaks
929
- #
930
- # -- wilsonb
880
+ # Sets the known specs to +specs+.
931
881
 
932
882
  def self.all=(specs)
933
- @@stubs_by_name = specs.group_by(&:name)
934
- @@all = @@stubs = specs
883
+ specification_record.all = specs
935
884
  end
936
885
 
937
886
  ##
938
887
  # Return full names of all specs in sorted order.
939
888
 
940
889
  def self.all_names
941
- self._all.map(&:full_name)
890
+ specification_record.all_names
942
891
  end
943
892
 
944
893
  ##
@@ -963,9 +912,7 @@ class Gem::Specification < Gem::BasicSpecification
963
912
  # Return the directories that Specification uses to find specs.
964
913
 
965
914
  def self.dirs
966
- @@dirs ||= Gem.path.collect do |dir|
967
- File.join dir.dup.tap(&Gem::UNTAINT), "specifications"
968
- end
915
+ @@dirs ||= Gem::SpecificationRecord.dirs_from(gem_path)
969
916
  end
970
917
 
971
918
  ##
@@ -973,9 +920,9 @@ class Gem::Specification < Gem::BasicSpecification
973
920
  # this resets the list of known specs.
974
921
 
975
922
  def self.dirs=(dirs)
976
- self.reset
923
+ reset
977
924
 
978
- @@dirs = Array(dirs).map {|dir| File.join dir, "specifications" }
925
+ @@dirs = Gem::SpecificationRecord.dirs_from(Array(dirs))
979
926
  end
980
927
 
981
928
  extend Enumerable
@@ -984,23 +931,15 @@ class Gem::Specification < Gem::BasicSpecification
984
931
  # Enumerate every known spec. See ::dirs= and ::add_spec to set the list of
985
932
  # specs.
986
933
 
987
- def self.each
988
- return enum_for(:each) unless block_given?
989
-
990
- self._all.each do |x|
991
- yield x
992
- end
934
+ def self.each(&block)
935
+ specification_record.each(&block)
993
936
  end
994
937
 
995
938
  ##
996
939
  # Returns every spec that matches +name+ and optional +requirements+.
997
940
 
998
941
  def self.find_all_by_name(name, *requirements)
999
- requirements = Gem::Requirement.default if requirements.empty?
1000
-
1001
- # TODO: maybe try: find_all { |s| spec === dep }
1002
-
1003
- Gem::Dependency.new(name, *requirements).matching_specs
942
+ specification_record.find_all_by_name(name, *requirements)
1004
943
  end
1005
944
 
1006
945
  ##
@@ -1017,20 +956,20 @@ class Gem::Specification < Gem::BasicSpecification
1017
956
  def self.find_by_name(name, *requirements)
1018
957
  requirements = Gem::Requirement.default if requirements.empty?
1019
958
 
1020
- # TODO: maybe try: find { |s| spec === dep }
1021
-
1022
959
  Gem::Dependency.new(name, *requirements).to_spec
1023
960
  end
1024
961
 
962
+ ##
963
+ # Find the best specification matching a +full_name+.
964
+ def self.find_by_full_name(full_name)
965
+ stubs.find {|s| s.full_name == full_name }&.to_spec
966
+ end
967
+
1025
968
  ##
1026
969
  # Return the best specification that contains the file matching +path+.
1027
970
 
1028
971
  def self.find_by_path(path)
1029
- path = path.dup.freeze
1030
- spec = @@spec_with_requirable_file[path] ||= (stubs.find do |s|
1031
- s.contains_requirable_file? path
1032
- end || NOT_FOUND)
1033
- spec.to_spec
972
+ specification_record.find_by_path(path)
1034
973
  end
1035
974
 
1036
975
  ##
@@ -1038,18 +977,15 @@ class Gem::Specification < Gem::BasicSpecification
1038
977
  # amongst the specs that are not activated.
1039
978
 
1040
979
  def self.find_inactive_by_path(path)
1041
- stub = stubs.find do |s|
1042
- next if s.activated?
1043
- s.contains_requirable_file? path
1044
- end
1045
- stub && stub.to_spec
980
+ specification_record.find_inactive_by_path(path)
1046
981
  end
1047
982
 
983
+ ##
984
+ # Return the best specification that contains the file matching +path+, among
985
+ # those already activated.
986
+
1048
987
  def self.find_active_stub_by_path(path)
1049
- stub = @@active_stub_with_requirable_file[path] ||= (stubs.find do |s|
1050
- s.activated? and s.contains_requirable_file? path
1051
- end || NOT_FOUND)
1052
- stub.this
988
+ specification_record.find_active_stub_by_path(path)
1053
989
  end
1054
990
 
1055
991
  ##
@@ -1065,7 +1001,7 @@ class Gem::Specification < Gem::BasicSpecification
1065
1001
 
1066
1002
  def self.find_in_unresolved_tree(path)
1067
1003
  unresolved_specs.each do |spec|
1068
- spec.traverse do |from_spec, dep, to_spec, trail|
1004
+ spec.traverse do |_from_spec, _dep, to_spec, trail|
1069
1005
  if to_spec.has_conflicts? || to_spec.conficts_when_loaded_with?(trail)
1070
1006
  :next
1071
1007
  else
@@ -1078,7 +1014,7 @@ class Gem::Specification < Gem::BasicSpecification
1078
1014
  end
1079
1015
 
1080
1016
  def self.unresolved_specs
1081
- unresolved_deps.values.map {|dep| dep.to_specs }.flatten
1017
+ unresolved_deps.values.flat_map(&:to_specs)
1082
1018
  end
1083
1019
  private_class_method :unresolved_specs
1084
1020
 
@@ -1116,26 +1052,28 @@ class Gem::Specification < Gem::BasicSpecification
1116
1052
  # +prerelease+ is true.
1117
1053
 
1118
1054
  def self.latest_specs(prerelease = false)
1119
- _latest_specs Gem::Specification.stubs, prerelease
1055
+ specification_record.latest_specs(prerelease)
1120
1056
  end
1121
1057
 
1122
1058
  ##
1123
1059
  # Return the latest installed spec for gem +name+.
1124
1060
 
1125
1061
  def self.latest_spec_for(name)
1126
- latest_specs(true).find {|installed_spec| installed_spec.name == name }
1062
+ specification_record.latest_spec_for(name)
1127
1063
  end
1128
1064
 
1129
1065
  def self._latest_specs(specs, prerelease = false) # :nodoc:
1130
1066
  result = {}
1131
1067
 
1132
1068
  specs.reverse_each do |spec|
1133
- next if spec.version.prerelease? unless prerelease
1069
+ unless prerelease
1070
+ next if spec.version.prerelease?
1071
+ end
1134
1072
 
1135
1073
  result[spec.name] = spec
1136
1074
  end
1137
1075
 
1138
- result.map(&:last).flatten.sort_by {|tup| tup.name }
1076
+ result.flat_map(&:last).sort_by(&:name)
1139
1077
  end
1140
1078
 
1141
1079
  ##
@@ -1144,36 +1082,33 @@ class Gem::Specification < Gem::BasicSpecification
1144
1082
  def self.load(file)
1145
1083
  return unless file
1146
1084
 
1147
- _spec = @load_cache_mutex.synchronize { @load_cache[file] }
1148
- return _spec if _spec
1085
+ spec = @load_cache_mutex.synchronize { @load_cache[file] }
1086
+ return spec if spec
1149
1087
 
1150
- file = file.dup.tap(&Gem::UNTAINT)
1151
1088
  return unless File.file?(file)
1152
1089
 
1153
- code = Gem.open_file(file, 'r:UTF-8:-', &:read)
1154
-
1155
- code.tap(&Gem::UNTAINT)
1090
+ code = Gem.open_file(file, "r:UTF-8:-", &:read)
1156
1091
 
1157
1092
  begin
1158
- _spec = eval code, binding, file
1093
+ spec = eval code, binding, file
1159
1094
 
1160
- if Gem::Specification === _spec
1161
- _spec.loaded_from = File.expand_path file.to_s
1095
+ if Gem::Specification === spec
1096
+ spec.loaded_from = File.expand_path file.to_s
1162
1097
  @load_cache_mutex.synchronize do
1163
1098
  prev = @load_cache[file]
1164
1099
  if prev
1165
- _spec = prev
1100
+ spec = prev
1166
1101
  else
1167
- @load_cache[file] = _spec
1102
+ @load_cache[file] = spec
1168
1103
  end
1169
1104
  end
1170
- return _spec
1105
+ return spec
1171
1106
  end
1172
1107
 
1173
- warn "[#{file}] isn't a Gem::Specification (#{_spec.class} instead)."
1108
+ warn "[#{file}] isn't a Gem::Specification (#{spec.class} instead)."
1174
1109
  rescue SignalException, SystemExit
1175
1110
  raise
1176
- rescue SyntaxError, Exception => e
1111
+ rescue SyntaxError, StandardError => e
1177
1112
  warn "Invalid gemspec in [#{file}]: #{e}"
1178
1113
  end
1179
1114
 
@@ -1235,7 +1170,7 @@ class Gem::Specification < Gem::BasicSpecification
1235
1170
  latest_remote = remotes.sort.last
1236
1171
 
1237
1172
  yield [local_spec, latest_remote] if
1238
- latest_remote and local_spec.version < latest_remote
1173
+ latest_remote && local_spec.version < latest_remote
1239
1174
  end
1240
1175
 
1241
1176
  nil
@@ -1261,27 +1196,42 @@ class Gem::Specification < Gem::BasicSpecification
1261
1196
 
1262
1197
  def self.reset
1263
1198
  @@dirs = nil
1264
- Gem.pre_reset_hooks.each {|hook| hook.call }
1265
- clear_specs
1199
+ Gem.pre_reset_hooks.each(&:call)
1200
+ @specification_record = nil
1266
1201
  clear_load_cache
1267
- unresolved = unresolved_deps
1268
- unless unresolved.empty?
1269
- w = "W" + "ARN"
1270
- warn "#{w}: Unresolved or ambiguous specs during Gem::Specification.reset:"
1271
- unresolved.values.each do |dep|
1272
- warn " #{dep}"
1273
-
1274
- versions = find_all_by_name(dep.name)
1275
- unless versions.empty?
1276
- warn " Available/installed versions of this gem:"
1277
- versions.each {|s| warn " - #{s.version}" }
1202
+
1203
+ unless unresolved_deps.empty?
1204
+ unresolved = unresolved_deps.filter_map do |name, dep|
1205
+ matching_versions = find_all_by_name(name)
1206
+ next if dep.latest_version? && matching_versions.any?(&:default_gem?)
1207
+
1208
+ [dep, matching_versions.uniq(&:full_name)]
1209
+ end.to_h
1210
+
1211
+ unless unresolved.empty?
1212
+ warn "WARN: Unresolved or ambiguous specs during Gem::Specification.reset:"
1213
+ unresolved.each do |dep, versions|
1214
+ warn " #{dep}"
1215
+
1216
+ unless versions.empty?
1217
+ warn " Available/installed versions of this gem:"
1218
+ versions.each {|s| warn " - #{s.version}" }
1219
+ end
1278
1220
  end
1221
+ warn "WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'"
1222
+ warn "Please report a bug if this causes problems."
1279
1223
  end
1280
- warn "#{w}: Clearing out unresolved specs. Try 'gem cleanup <gem>'"
1281
- warn "Please report a bug if this causes problems."
1282
- unresolved.clear
1224
+
1225
+ unresolved_deps.clear
1283
1226
  end
1284
- Gem.post_reset_hooks.each {|hook| hook.call }
1227
+ Gem.post_reset_hooks.each(&:call)
1228
+ end
1229
+
1230
+ ##
1231
+ # Keeps track of all currently known specifications
1232
+
1233
+ def self.specification_record
1234
+ @specification_record ||= Gem::SpecificationRecord.new(dirs)
1285
1235
  end
1286
1236
 
1287
1237
  # DOC: This method needs documented or nodoc'd
@@ -1294,10 +1244,23 @@ class Gem::Specification < Gem::BasicSpecification
1294
1244
 
1295
1245
  def self._load(str)
1296
1246
  Gem.load_yaml
1247
+ Gem.load_safe_marshal
1248
+
1249
+ yaml_set = false
1250
+ retry_count = 0
1297
1251
 
1298
1252
  array = begin
1299
- Marshal.load str
1253
+ Gem::SafeMarshal.safe_load str
1300
1254
  rescue ArgumentError => e
1255
+ # Avoid an infinite retry loop when the argument error has nothing to do
1256
+ # with the classes not being defined.
1257
+ # 1 retry each allowed in case all 3 of
1258
+ # - YAML
1259
+ # - YAML::Syck::DefaultKey
1260
+ # - YAML::PrivateType
1261
+ # need to be defined
1262
+ raise if retry_count >= 3
1263
+
1301
1264
  #
1302
1265
  # Some very old marshaled specs included references to `YAML::PrivateType`
1303
1266
  # and `YAML::Syck::DefaultKey` constants due to bugs in the old emitter
@@ -1307,17 +1270,23 @@ class Gem::Specification < Gem::BasicSpecification
1307
1270
  message = e.message
1308
1271
  raise unless message.include?("YAML::")
1309
1272
 
1310
- Object.const_set "YAML", Psych unless Object.const_defined?(:YAML)
1273
+ unless Object.const_defined?(:YAML)
1274
+ Object.const_set "YAML", Psych
1275
+ yaml_set = true
1276
+ end
1311
1277
 
1312
1278
  if message.include?("YAML::Syck::")
1313
1279
  YAML.const_set "Syck", YAML unless YAML.const_defined?(:Syck)
1314
1280
 
1315
- YAML::Syck.const_set "DefaultKey", Class.new if message.include?("YAML::Syck::DefaultKey")
1316
- elsif message.include?("YAML::PrivateType")
1281
+ YAML::Syck.const_set "DefaultKey", Class.new if message.include?("YAML::Syck::DefaultKey") && !YAML::Syck.const_defined?(:DefaultKey)
1282
+ elsif message.include?("YAML::PrivateType") && !YAML.const_defined?(:PrivateType)
1317
1283
  YAML.const_set "PrivateType", Class.new
1318
1284
  end
1319
1285
 
1286
+ retry_count += 1
1320
1287
  retry
1288
+ ensure
1289
+ Object.__send__(:remove_const, "YAML") if yaml_set
1321
1290
  end
1322
1291
 
1323
1292
  spec = Gem::Specification.new
@@ -1345,7 +1314,7 @@ class Gem::Specification < Gem::BasicSpecification
1345
1314
  spec.instance_variable_set :@summary, array[5]
1346
1315
  spec.instance_variable_set :@required_ruby_version, array[6]
1347
1316
  spec.instance_variable_set :@required_rubygems_version, array[7]
1348
- spec.instance_variable_set :@original_platform, array[8]
1317
+ spec.platform = array[8]
1349
1318
  spec.instance_variable_set :@dependencies, array[9]
1350
1319
  # offset due to rubyforge_project removal
1351
1320
  spec.instance_variable_set :@email, array[11]
@@ -1353,9 +1322,7 @@ class Gem::Specification < Gem::BasicSpecification
1353
1322
  spec.instance_variable_set :@description, array[13]
1354
1323
  spec.instance_variable_set :@homepage, array[14]
1355
1324
  spec.instance_variable_set :@has_rdoc, array[15]
1356
- spec.instance_variable_set :@new_platform, array[16]
1357
- spec.instance_variable_set :@platform, array[16].to_s
1358
- spec.instance_variable_set :@license, array[17]
1325
+ spec.instance_variable_set :@licenses, [array[17]]
1359
1326
  spec.instance_variable_set :@metadata, array[18]
1360
1327
  spec.instance_variable_set :@loaded, false
1361
1328
  spec.instance_variable_set :@activated, false
@@ -1392,7 +1359,7 @@ class Gem::Specification < Gem::BasicSpecification
1392
1359
  @required_rubygems_version,
1393
1360
  @original_platform,
1394
1361
  @dependencies,
1395
- '', # rubyforge_project
1362
+ "", # rubyforge_project
1396
1363
  @email,
1397
1364
  @authors,
1398
1365
  @description,
@@ -1411,7 +1378,7 @@ class Gem::Specification < Gem::BasicSpecification
1411
1378
  # there are conflicts upon activation.
1412
1379
 
1413
1380
  def activate
1414
- other = Gem.loaded_specs[self.name]
1381
+ other = Gem.loaded_specs[name]
1415
1382
  if other
1416
1383
  check_version_conflict other
1417
1384
  return false
@@ -1422,11 +1389,11 @@ class Gem::Specification < Gem::BasicSpecification
1422
1389
  activate_dependencies
1423
1390
  add_self_to_load_path
1424
1391
 
1425
- Gem.loaded_specs[self.name] = self
1392
+ Gem.loaded_specs[name] = self
1426
1393
  @activated = true
1427
1394
  @loaded = true
1428
1395
 
1429
- return true
1396
+ true
1430
1397
  end
1431
1398
 
1432
1399
  ##
@@ -1437,7 +1404,7 @@ class Gem::Specification < Gem::BasicSpecification
1437
1404
  def activate_dependencies
1438
1405
  unresolved = Gem::Specification.unresolved_deps
1439
1406
 
1440
- self.runtime_dependencies.each do |spec_dep|
1407
+ runtime_dependencies.each do |spec_dep|
1441
1408
  if loaded = Gem.loaded_specs[spec_dep.name]
1442
1409
  next if spec_dep.matches_spec? loaded
1443
1410
 
@@ -1449,9 +1416,9 @@ class Gem::Specification < Gem::BasicSpecification
1449
1416
  end
1450
1417
 
1451
1418
  begin
1452
- specs = spec_dep.to_specs
1419
+ specs = spec_dep.to_specs.uniq(&:full_name)
1453
1420
  rescue Gem::MissingSpecError => e
1454
- raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{self.spec_file}")
1421
+ raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{spec_file}")
1455
1422
  end
1456
1423
 
1457
1424
  if specs.size == 1
@@ -1497,7 +1464,7 @@ class Gem::Specification < Gem::BasicSpecification
1497
1464
  def sanitize_string(string)
1498
1465
  return string unless string
1499
1466
 
1500
- # HACK the #to_s is in here because RSpec has an Array of Arrays of
1467
+ # HACK: the #to_s is in here because RSpec has an Array of Arrays of
1501
1468
  # Strings for authors. Need a way to disallow bad values on gemspec
1502
1469
  # generation. (Probably won't happen.)
1503
1470
  string.to_s
@@ -1515,8 +1482,8 @@ class Gem::Specification < Gem::BasicSpecification
1515
1482
  else
1516
1483
  executables
1517
1484
  end
1518
- rescue
1519
- return nil
1485
+ rescue StandardError
1486
+ nil
1520
1487
  end
1521
1488
 
1522
1489
  ##
@@ -1541,7 +1508,7 @@ class Gem::Specification < Gem::BasicSpecification
1541
1508
 
1542
1509
  private :add_dependency_with_type
1543
1510
 
1544
- alias add_dependency add_runtime_dependency
1511
+ alias_method :add_runtime_dependency, :add_dependency
1545
1512
 
1546
1513
  ##
1547
1514
  # Adds this spec's require paths to LOAD_PATH, in the proper location.
@@ -1558,7 +1525,7 @@ class Gem::Specification < Gem::BasicSpecification
1558
1525
  # Singular reader for #authors. Returns the first author in the list
1559
1526
 
1560
1527
  def author
1561
- val = authors and val.first
1528
+ (val = authors) && val.first
1562
1529
  end
1563
1530
 
1564
1531
  ##
@@ -1593,7 +1560,7 @@ class Gem::Specification < Gem::BasicSpecification
1593
1560
  def build_args
1594
1561
  if File.exist? build_info_file
1595
1562
  build_info = File.readlines build_info_file
1596
- build_info = build_info.map {|x| x.strip }
1563
+ build_info = build_info.map(&:strip)
1597
1564
  build_info.delete ""
1598
1565
  build_info
1599
1566
  else
@@ -1608,9 +1575,11 @@ class Gem::Specification < Gem::BasicSpecification
1608
1575
  def build_extensions # :nodoc:
1609
1576
  return if extensions.empty?
1610
1577
  return if default_gem?
1578
+ # we need to fresh build when same name and version of default gems
1579
+ return if self.class.find_by_full_name(full_name)&.default_gem?
1611
1580
  return if File.exist? gem_build_complete_path
1612
- return if !File.writable?(base_dir)
1613
- return if !File.exist?(File.join(base_dir, 'extensions'))
1581
+ return unless File.writable?(base_dir)
1582
+ return unless File.exist?(File.join(base_dir, "extensions"))
1614
1583
 
1615
1584
  begin
1616
1585
  # We need to require things in $LOAD_PATH without looking for the
@@ -1618,9 +1587,9 @@ class Gem::Specification < Gem::BasicSpecification
1618
1587
  unresolved_deps = Gem::Specification.unresolved_deps.dup
1619
1588
  Gem::Specification.unresolved_deps.clear
1620
1589
 
1621
- require_relative 'config_file'
1622
- require_relative 'ext'
1623
- require_relative 'user_interaction'
1590
+ require_relative "config_file"
1591
+ require_relative "ext"
1592
+ require_relative "user_interaction"
1624
1593
 
1625
1594
  ui = Gem::SilentUI.new
1626
1595
  Gem::DefaultUserInteraction.use_ui ui do
@@ -1628,7 +1597,7 @@ class Gem::Specification < Gem::BasicSpecification
1628
1597
  builder.build_extensions
1629
1598
  end
1630
1599
  ensure
1631
- ui.close if ui
1600
+ ui&.close
1632
1601
  Gem::Specification.unresolved_deps.replace unresolved_deps
1633
1602
  end
1634
1603
  end
@@ -1668,9 +1637,9 @@ class Gem::Specification < Gem::BasicSpecification
1668
1637
 
1669
1638
  def conflicts
1670
1639
  conflicts = {}
1671
- self.runtime_dependencies.each do |dep|
1640
+ runtime_dependencies.each do |dep|
1672
1641
  spec = Gem.loaded_specs[dep.name]
1673
- if spec and not spec.satisfies_requirement? dep
1642
+ if spec && !spec.satisfies_requirement?(dep)
1674
1643
  (conflicts[spec] ||= []) << dep
1675
1644
  end
1676
1645
  end
@@ -1684,7 +1653,7 @@ class Gem::Specification < Gem::BasicSpecification
1684
1653
 
1685
1654
  def conficts_when_loaded_with?(list_of_specs) # :nodoc:
1686
1655
  result = list_of_specs.any? do |spec|
1687
- spec.dependencies.any? {|dep| dep.runtime? && (dep.name == name) && !satisfies_requirement?(dep) }
1656
+ spec.runtime_dependencies.any? {|dep| (dep.name == name) && !satisfies_requirement?(dep) }
1688
1657
  end
1689
1658
  result
1690
1659
  end
@@ -1694,14 +1663,12 @@ class Gem::Specification < Gem::BasicSpecification
1694
1663
 
1695
1664
  def has_conflicts?
1696
1665
  return true unless Gem.env_requirement(name).satisfied_by?(version)
1697
- self.dependencies.any? do |dep|
1698
- if dep.runtime?
1699
- spec = Gem.loaded_specs[dep.name]
1700
- spec and not spec.satisfies_requirement? dep
1701
- else
1702
- false
1703
- end
1666
+ runtime_dependencies.any? do |dep|
1667
+ spec = Gem.loaded_specs[dep.name]
1668
+ spec && !spec.satisfies_requirement?(dep)
1704
1669
  end
1670
+ rescue ArgumentError => e
1671
+ raise e, "#{name} #{version}: #{e.message}"
1705
1672
  end
1706
1673
 
1707
1674
  # The date this gem was created.
@@ -1718,14 +1685,14 @@ class Gem::Specification < Gem::BasicSpecification
1718
1685
 
1719
1686
  DateLike = Object.new # :nodoc:
1720
1687
  def DateLike.===(obj) # :nodoc:
1721
- defined?(::Date) and Date === obj
1688
+ defined?(::Date) && Date === obj
1722
1689
  end
1723
1690
 
1724
1691
  DateTimeFormat = # :nodoc:
1725
1692
  /\A
1726
1693
  (\d{4})-(\d{2})-(\d{2})
1727
1694
  (\s+ \d{2}:\d{2}:\d{2}\.\d+ \s* (Z | [-+]\d\d:\d\d) )?
1728
- \Z/x.freeze
1695
+ \Z/x
1729
1696
 
1730
1697
  ##
1731
1698
  # The date this gem was created
@@ -1737,17 +1704,17 @@ class Gem::Specification < Gem::BasicSpecification
1737
1704
  # This is the cleanest, most-readable, faster-than-using-Date
1738
1705
  # way to do it.
1739
1706
  @date = case date
1740
- when String then
1741
- if DateTimeFormat =~ date
1742
- Time.utc($1.to_i, $2.to_i, $3.to_i)
1743
- else
1744
- raise(Gem::InvalidSpecificationException,
1745
- "invalid date format in specification: #{date.inspect}")
1746
- end
1747
- when Time, DateLike then
1748
- Time.utc(date.year, date.month, date.day)
1749
- else
1750
- TODAY
1707
+ when String then
1708
+ if DateTimeFormat =~ date
1709
+ Time.utc($1.to_i, $2.to_i, $3.to_i)
1710
+ else
1711
+ raise(Gem::InvalidSpecificationException,
1712
+ "invalid date format in specification: #{date.inspect}")
1713
+ end
1714
+ when Time, DateLike then
1715
+ Time.utc(date.year, date.month, date.day)
1716
+ else
1717
+ TODAY
1751
1718
  end
1752
1719
  end
1753
1720
 
@@ -1758,9 +1725,9 @@ class Gem::Specification < Gem::BasicSpecification
1758
1725
  # executable now. See Gem.bin_path.
1759
1726
 
1760
1727
  def default_executable # :nodoc:
1761
- if defined?(@default_executable) and @default_executable
1728
+ if defined?(@default_executable) && @default_executable
1762
1729
  result = @default_executable
1763
- elsif @executables and @executables.size == 1
1730
+ elsif @executables && @executables.size == 1
1764
1731
  result = Array(@executables).first
1765
1732
  else
1766
1733
  result = nil
@@ -1797,13 +1764,12 @@ class Gem::Specification < Gem::BasicSpecification
1797
1764
  Gem::Specification.each do |spec|
1798
1765
  deps = check_dev ? spec.dependencies : spec.runtime_dependencies
1799
1766
  deps.each do |dep|
1800
- if self.satisfies_requirement?(dep)
1801
- sats = []
1802
- find_all_satisfiers(dep) do |sat|
1803
- sats << sat
1804
- end
1805
- out << [spec, dep, sats]
1767
+ next unless satisfies_requirement?(dep)
1768
+ sats = []
1769
+ find_all_satisfiers(dep) do |sat|
1770
+ sats << sat
1806
1771
  end
1772
+ out << [spec, dep, sats]
1807
1773
  end
1808
1774
  end
1809
1775
  out
@@ -1813,7 +1779,7 @@ class Gem::Specification < Gem::BasicSpecification
1813
1779
  # Returns all specs that matches this spec's runtime dependencies.
1814
1780
 
1815
1781
  def dependent_specs
1816
- runtime_dependencies.map {|dep| dep.to_specs }.flatten
1782
+ runtime_dependencies.flat_map(&:to_specs)
1817
1783
  end
1818
1784
 
1819
1785
  ##
@@ -1839,7 +1805,7 @@ class Gem::Specification < Gem::BasicSpecification
1839
1805
  # spec.doc_dir 'ri' # => "/path/to/gem_repo/doc/a-1/ri"
1840
1806
 
1841
1807
  def doc_dir(type = nil)
1842
- @doc_dir ||= File.join base_dir, 'doc', full_name
1808
+ @doc_dir ||= File.join base_dir, "doc", full_name
1843
1809
 
1844
1810
  if type
1845
1811
  File.join @doc_dir, type
@@ -1849,23 +1815,15 @@ class Gem::Specification < Gem::BasicSpecification
1849
1815
  end
1850
1816
 
1851
1817
  def encode_with(coder) # :nodoc:
1852
- mark_version
1853
-
1854
- coder.add 'name', @name
1855
- coder.add 'version', @version
1856
- platform = case @original_platform
1857
- when nil, '' then
1858
- 'ruby'
1859
- when String then
1860
- @original_platform
1861
- else
1862
- @original_platform.to_s
1863
- end
1864
- coder.add 'platform', platform
1818
+ coder.add "name", @name
1819
+ coder.add "version", @version
1820
+ coder.add "platform", platform.to_s
1821
+ coder.add "original_platform", original_platform.to_s if platform.to_s != original_platform.to_s
1865
1822
 
1866
1823
  attributes = @@attributes.map(&:to_s) - %w[name version platform]
1867
1824
  attributes.each do |name|
1868
- coder.add name, instance_variable_get("@#{name}")
1825
+ value = instance_variable_get("@#{name}")
1826
+ coder.add name, value unless value.nil?
1869
1827
  end
1870
1828
  end
1871
1829
 
@@ -1877,7 +1835,7 @@ class Gem::Specification < Gem::BasicSpecification
1877
1835
  # Singular accessor for #executables
1878
1836
 
1879
1837
  def executable
1880
- val = executables and val.first
1838
+ (val = executables) && val.first
1881
1839
  end
1882
1840
 
1883
1841
  ##
@@ -1952,7 +1910,8 @@ class Gem::Specification < Gem::BasicSpecification
1952
1910
  end
1953
1911
 
1954
1912
  ##
1955
- # Work around bundler removing my methods
1913
+ # Work around old bundler versions removing my methods
1914
+ # Can be removed once RubyGems can no longer install Bundler 2.5
1956
1915
 
1957
1916
  def gem_dir # :nodoc:
1958
1917
  super
@@ -1982,18 +1941,18 @@ class Gem::Specification < Gem::BasicSpecification
1982
1941
  end
1983
1942
  rubygems_deprecate :has_rdoc=
1984
1943
 
1985
- alias :has_rdoc? :has_rdoc # :nodoc:
1944
+ alias_method :has_rdoc?, :has_rdoc # :nodoc:
1986
1945
  rubygems_deprecate :has_rdoc?
1987
1946
 
1988
1947
  ##
1989
1948
  # True if this gem has files in test_files
1990
1949
 
1991
1950
  def has_unit_tests? # :nodoc:
1992
- not test_files.empty?
1951
+ !test_files.empty?
1993
1952
  end
1994
1953
 
1995
1954
  # :stopdoc:
1996
- alias has_test_suite? has_unit_tests?
1955
+ alias_method :has_test_suite?, :has_unit_tests?
1997
1956
  # :startdoc:
1998
1957
 
1999
1958
  def hash # :nodoc:
@@ -2042,7 +2001,7 @@ class Gem::Specification < Gem::BasicSpecification
2042
2001
  self.name = name if name
2043
2002
  self.version = version if version
2044
2003
 
2045
- if platform = Gem.platforms.last and platform != Gem::Platform::RUBY and platform != Gem::Platform.local
2004
+ if (platform = Gem.platforms.last) && platform != Gem::Platform::RUBY && platform != Gem::Platform.local
2046
2005
  self.platform = platform
2047
2006
  end
2048
2007
 
@@ -2050,7 +2009,8 @@ class Gem::Specification < Gem::BasicSpecification
2050
2009
  end
2051
2010
 
2052
2011
  ##
2053
- # Duplicates array_attributes from +other_spec+ so state isn't shared.
2012
+ # Duplicates Array and Gem::Requirement attributes from +other_spec+ so state isn't shared.
2013
+ #
2054
2014
 
2055
2015
  def initialize_copy(other_spec)
2056
2016
  self.class.array_attributes.each do |name|
@@ -2072,6 +2032,9 @@ class Gem::Specification < Gem::BasicSpecification
2072
2032
  raise e
2073
2033
  end
2074
2034
  end
2035
+
2036
+ @required_ruby_version = other_spec.required_ruby_version.dup
2037
+ @required_rubygems_version = other_spec.required_rubygems_version.dup
2075
2038
  end
2076
2039
 
2077
2040
  def base_dir
@@ -2140,13 +2103,6 @@ class Gem::Specification < Gem::BasicSpecification
2140
2103
  @spec_file = nil
2141
2104
  end
2142
2105
 
2143
- ##
2144
- # Sets the rubygems_version to the current RubyGems version.
2145
-
2146
- def mark_version
2147
- @rubygems_version = Gem::VERSION
2148
- end
2149
-
2150
2106
  ##
2151
2107
  # Track removed method calls to warn about during build time.
2152
2108
  # Warn about unknown attributes while loading a spec.
@@ -2157,8 +2113,8 @@ class Gem::Specification < Gem::BasicSpecification
2157
2113
  return
2158
2114
  end
2159
2115
 
2160
- if @specification_version > CURRENT_SPECIFICATION_VERSION and
2161
- sym.to_s.end_with?("=")
2116
+ if @specification_version > CURRENT_SPECIFICATION_VERSION &&
2117
+ sym.to_s.end_with?("=")
2162
2118
  warn "ignoring #{sym} loading #{full_name}" if $DEBUG
2163
2119
  else
2164
2120
  super
@@ -2184,7 +2140,7 @@ class Gem::Specification < Gem::BasicSpecification
2184
2140
  # file list.
2185
2141
 
2186
2142
  def normalize
2187
- if defined?(@extra_rdoc_files) and @extra_rdoc_files
2143
+ if defined?(@extra_rdoc_files) && @extra_rdoc_files
2188
2144
  @extra_rdoc_files.uniq!
2189
2145
  @files ||= []
2190
2146
  @files.concat(@extra_rdoc_files)
@@ -2209,7 +2165,7 @@ class Gem::Specification < Gem::BasicSpecification
2209
2165
  # platform. For use with legacy gems.
2210
2166
 
2211
2167
  def original_name # :nodoc:
2212
- if platform == Gem::Platform::RUBY or platform.nil?
2168
+ if platform == Gem::Platform::RUBY || platform.nil?
2213
2169
  "#{@name}-#{@version}"
2214
2170
  else
2215
2171
  "#{@name}-#{@version}-#{@original_platform}"
@@ -2227,11 +2183,11 @@ class Gem::Specification < Gem::BasicSpecification
2227
2183
  # The platform this gem runs on. See Gem::Platform for details.
2228
2184
 
2229
2185
  def platform
2230
- @new_platform ||= Gem::Platform::RUBY
2186
+ @new_platform ||= Gem::Platform::RUBY # rubocop:disable Naming/MemoizedInstanceVariableName
2231
2187
  end
2232
2188
 
2233
2189
  def pretty_print(q) # :nodoc:
2234
- q.group 2, 'Gem::Specification.new do |s|', 'end' do
2190
+ q.group 2, "Gem::Specification.new do |s|", "end" do
2235
2191
  q.breakable
2236
2192
 
2237
2193
  attributes = @@attributes - [:name, :version]
@@ -2240,23 +2196,22 @@ class Gem::Specification < Gem::BasicSpecification
2240
2196
  attributes.unshift :name
2241
2197
 
2242
2198
  attributes.each do |attr_name|
2243
- current_value = self.send attr_name
2244
- current_value = current_value.sort if %i[files test_files].include? attr_name
2245
- if current_value != default_value(attr_name) or
2246
- self.class.required_attribute? attr_name
2247
-
2248
- q.text "s.#{attr_name} = "
2199
+ current_value = send attr_name
2200
+ current_value = current_value.sort if [:files, :test_files].include? attr_name
2201
+ next unless current_value != default_value(attr_name) ||
2202
+ self.class.required_attribute?(attr_name)
2249
2203
 
2250
- if attr_name == :date
2251
- current_value = current_value.utc
2204
+ q.text "s.#{attr_name} = "
2252
2205
 
2253
- q.text "Time.utc(#{current_value.year}, #{current_value.month}, #{current_value.day})"
2254
- else
2255
- q.pp current_value
2256
- end
2206
+ if attr_name == :date
2207
+ current_value = current_value.utc
2257
2208
 
2258
- q.breakable
2209
+ q.text "Time.utc(#{current_value.year}, #{current_value.month}, #{current_value.day})"
2210
+ else
2211
+ q.pp current_value
2259
2212
  end
2213
+
2214
+ q.breakable
2260
2215
  end
2261
2216
  end
2262
2217
  end
@@ -2266,7 +2221,7 @@ class Gem::Specification < Gem::BasicSpecification
2266
2221
  # that is already loaded (+other+)
2267
2222
 
2268
2223
  def check_version_conflict(other) # :nodoc:
2269
- return if self.version == other.version
2224
+ return if version == other.version
2270
2225
 
2271
2226
  # This gem is already loaded. If the currently loaded gem is not in the
2272
2227
  # list of candidate gems, then we have a version conflict.
@@ -2274,7 +2229,7 @@ class Gem::Specification < Gem::BasicSpecification
2274
2229
  msg = "can't activate #{full_name}, already activated #{other.full_name}"
2275
2230
 
2276
2231
  e = Gem::LoadError.new msg
2277
- e.name = self.name
2232
+ e.name = name
2278
2233
 
2279
2234
  raise e
2280
2235
  end
@@ -2301,7 +2256,7 @@ class Gem::Specification < Gem::BasicSpecification
2301
2256
  # Singular accessor for #require_paths
2302
2257
 
2303
2258
  def require_path
2304
- val = require_paths and val.first
2259
+ (val = require_paths) && val.first
2305
2260
  end
2306
2261
 
2307
2262
  ##
@@ -2326,7 +2281,7 @@ class Gem::Specification < Gem::BasicSpecification
2326
2281
  # Returns the full path to this spec's ri directory.
2327
2282
 
2328
2283
  def ri_dir
2329
- @ri_dir ||= File.join base_dir, 'ri', full_name
2284
+ @ri_dir ||= File.join base_dir, "ri", full_name
2330
2285
  end
2331
2286
 
2332
2287
  ##
@@ -2336,16 +2291,16 @@ class Gem::Specification < Gem::BasicSpecification
2336
2291
  def ruby_code(obj)
2337
2292
  case obj
2338
2293
  when String then obj.dump + ".freeze"
2339
- when Array then '[' + obj.map {|x| ruby_code x }.join(", ") + ']'
2294
+ when Array then "[" + obj.map {|x| ruby_code x }.join(", ") + "]"
2340
2295
  when Hash then
2341
2296
  seg = obj.keys.sort.map {|k| "#{k.to_s.dump} => #{obj[k].to_s.dump}" }
2342
- "{ #{seg.join(', ')} }"
2343
- when Gem::Version then obj.to_s.dump
2344
- when DateLike then obj.strftime('%Y-%m-%d').dump
2345
- when Time then obj.strftime('%Y-%m-%d').dump
2297
+ "{ #{seg.join(", ")} }"
2298
+ when Gem::Version then ruby_code(obj.to_s)
2299
+ when DateLike then obj.strftime("%Y-%m-%d").dump
2300
+ when Time then obj.strftime("%Y-%m-%d").dump
2346
2301
  when Numeric then obj.inspect
2347
2302
  when true, false, nil then obj.inspect
2348
- when Gem::Platform then "Gem::Platform.new(#{obj.to_a.inspect})"
2303
+ when Gem::Platform then "Gem::Platform.new(#{ruby_code obj.to_a})"
2349
2304
  when Gem::Requirement then
2350
2305
  list = obj.as_list
2351
2306
  "Gem::Requirement.new(#{ruby_code(list.size == 1 ? obj.to_s : list)})"
@@ -2366,7 +2321,7 @@ class Gem::Specification < Gem::BasicSpecification
2366
2321
  # True if this gem has the same attributes as +other+.
2367
2322
 
2368
2323
  def same_attributes?(spec)
2369
- @@attributes.all? {|name, default| self.send(name) == spec.send(name) }
2324
+ @@attributes.all? {|name, _default| send(name) == spec.send(name) }
2370
2325
  end
2371
2326
 
2372
2327
  private :same_attributes?
@@ -2375,7 +2330,7 @@ class Gem::Specification < Gem::BasicSpecification
2375
2330
  # Checks if this specification meets the requirement of +dependency+.
2376
2331
 
2377
2332
  def satisfies_requirement?(dependency)
2378
- return @name == dependency.name &&
2333
+ @name == dependency.name &&
2379
2334
  dependency.requirement.satisfied_by?(@version)
2380
2335
  end
2381
2336
 
@@ -2430,7 +2385,7 @@ class Gem::Specification < Gem::BasicSpecification
2430
2385
  # Singular accessor for #test_files
2431
2386
 
2432
2387
  def test_file # :nodoc:
2433
- val = test_files and val.first
2388
+ (val = test_files) && val.first
2434
2389
  end
2435
2390
 
2436
2391
  ##
@@ -2452,7 +2407,7 @@ class Gem::Specification < Gem::BasicSpecification
2452
2407
  @test_files = [@test_suite_file].flatten
2453
2408
  @test_suite_file = nil
2454
2409
  end
2455
- if defined?(@test_files) and @test_files
2410
+ if defined?(@test_files) && @test_files
2456
2411
  @test_files
2457
2412
  else
2458
2413
  @test_files = []
@@ -2465,7 +2420,6 @@ class Gem::Specification < Gem::BasicSpecification
2465
2420
  # still have their default values are omitted.
2466
2421
 
2467
2422
  def to_ruby
2468
- mark_version
2469
2423
  result = []
2470
2424
  result << "# -*- encoding: utf-8 -*-"
2471
2425
  result << "#{Gem::StubSpecification::PREFIX}#{name} #{version} #{platform} #{raw_require_paths.join("\0")}"
@@ -2476,13 +2430,13 @@ class Gem::Specification < Gem::BasicSpecification
2476
2430
 
2477
2431
  result << " s.name = #{ruby_code name}"
2478
2432
  result << " s.version = #{ruby_code version}"
2479
- unless platform.nil? or platform == Gem::Platform::RUBY
2433
+ unless platform.nil? || platform == Gem::Platform::RUBY
2480
2434
  result << " s.platform = #{ruby_code original_platform}"
2481
2435
  end
2482
2436
  result << ""
2483
2437
  result << " s.required_rubygems_version = #{ruby_code required_rubygems_version} if s.respond_to? :required_rubygems_version="
2484
2438
 
2485
- if metadata and !metadata.empty?
2439
+ if metadata && !metadata.empty?
2486
2440
  result << " s.metadata = #{ruby_code metadata} if s.respond_to? :metadata="
2487
2441
  end
2488
2442
  result << " s.require_paths = #{ruby_code raw_require_paths}"
@@ -2503,42 +2457,30 @@ class Gem::Specification < Gem::BasicSpecification
2503
2457
 
2504
2458
  @@attributes.each do |attr_name|
2505
2459
  next if handled.include? attr_name
2506
- current_value = self.send(attr_name)
2460
+ current_value = send(attr_name)
2507
2461
  if current_value != default_value(attr_name) || self.class.required_attribute?(attr_name)
2508
2462
  result << " s.#{attr_name} = #{ruby_code current_value}"
2509
2463
  end
2510
2464
  end
2511
2465
 
2512
2466
  if String === signing_key
2513
- result << " s.signing_key = #{signing_key.dump}.freeze"
2467
+ result << " s.signing_key = #{ruby_code signing_key}"
2514
2468
  end
2515
2469
 
2516
2470
  if @installed_by_version
2517
2471
  result << nil
2518
- result << " s.installed_by_version = \"#{Gem::VERSION}\" if s.respond_to? :installed_by_version"
2472
+ result << " s.installed_by_version = #{ruby_code Gem::VERSION}"
2519
2473
  end
2520
2474
 
2521
2475
  unless dependencies.empty?
2522
2476
  result << nil
2523
- result << " if s.respond_to? :specification_version then"
2524
- result << " s.specification_version = #{specification_version}"
2525
- result << " end"
2477
+ result << " s.specification_version = #{specification_version}"
2526
2478
  result << nil
2527
2479
 
2528
- result << " if s.respond_to? :add_runtime_dependency then"
2529
-
2530
2480
  dependencies.each do |dep|
2531
- req = dep.requirements_list.inspect
2532
2481
  dep.instance_variable_set :@type, :runtime if dep.type.nil? # HACK
2533
- result << " s.add_#{dep.type}_dependency(%q<#{dep.name}>.freeze, #{req})"
2482
+ result << " s.add_#{dep.type}_dependency(%q<#{dep.name}>.freeze, #{ruby_code dep.requirements_list})"
2534
2483
  end
2535
-
2536
- result << " else"
2537
- dependencies.each do |dep|
2538
- version_reqs_param = dep.requirements_list.inspect
2539
- result << " s.add_dependency(%q<#{dep.name}>.freeze, #{version_reqs_param})"
2540
- end
2541
- result << " end"
2542
2484
  end
2543
2485
 
2544
2486
  result << "end"
@@ -2575,14 +2517,14 @@ class Gem::Specification < Gem::BasicSpecification
2575
2517
  # back, we have to check again here to make sure that our
2576
2518
  # psych code was properly loaded, and load it if not.
2577
2519
  unless Gem.const_defined?(:NoAliasYAMLTree)
2578
- require_relative 'psych_tree'
2520
+ require_relative "psych_tree"
2579
2521
  end
2580
2522
 
2581
2523
  builder = Gem::NoAliasYAMLTree.create
2582
2524
  builder << self
2583
2525
  ast = builder.tree
2584
2526
 
2585
- require 'stringio'
2527
+ require "stringio"
2586
2528
  io = StringIO.new
2587
2529
  io.set_encoding Encoding::UTF_8
2588
2530
 
@@ -2598,10 +2540,9 @@ class Gem::Specification < Gem::BasicSpecification
2598
2540
  def traverse(trail = [], visited = {}, &block)
2599
2541
  trail.push(self)
2600
2542
  begin
2601
- dependencies.each do |dep|
2602
- next unless dep.runtime?
2543
+ runtime_dependencies.each do |dep|
2603
2544
  dep.matching_specs(true).each do |dep_spec|
2604
- next if visited.has_key?(dep_spec)
2545
+ next if visited.key?(dep_spec)
2605
2546
  visited[dep_spec] = true
2606
2547
  trail.push(dep_spec)
2607
2548
  begin
@@ -2609,11 +2550,10 @@ class Gem::Specification < Gem::BasicSpecification
2609
2550
  ensure
2610
2551
  trail.pop
2611
2552
  end
2612
- unless result == :next
2613
- spec_name = dep_spec.name
2614
- dep_spec.traverse(trail, visited, &block) unless
2615
- trail.any? {|s| s.name == spec_name }
2616
- end
2553
+ next if result == :next
2554
+ spec_name = dep_spec.name
2555
+ dep_spec.traverse(trail, visited, &block) unless
2556
+ trail.any? {|s| s.name == spec_name }
2617
2557
  end
2618
2558
  end
2619
2559
  ensure
@@ -2644,6 +2584,10 @@ class Gem::Specification < Gem::BasicSpecification
2644
2584
  @test_files.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
2645
2585
  end
2646
2586
 
2587
+ def validate_for_resolution
2588
+ Gem::SpecificationPolicy.new(self).validate_for_resolution
2589
+ end
2590
+
2647
2591
  def validate_metadata
2648
2592
  Gem::SpecificationPolicy.new(self).validate_metadata
2649
2593
  end
@@ -2660,20 +2604,13 @@ class Gem::Specification < Gem::BasicSpecification
2660
2604
  rubygems_deprecate :validate_permissions
2661
2605
 
2662
2606
  ##
2663
- # Set the version to +version+, potentially also setting
2664
- # required_rubygems_version if +version+ indicates it is a
2665
- # prerelease.
2607
+ # Set the version to +version+.
2666
2608
 
2667
2609
  def version=(version)
2668
2610
  @version = Gem::Version.create(version)
2669
- # skip to set required_ruby_version when pre-released rubygems.
2670
- # It caused to raise CircularDependencyError
2671
- if @version.prerelease? && (@name.nil? || @name.strip != "rubygems")
2672
- self.required_rubygems_version = '> 1.3.1'
2673
- end
2674
- invalidate_memoized_attributes
2611
+ return if @version.nil?
2675
2612
 
2676
- return @version
2613
+ invalidate_memoized_attributes
2677
2614
  end
2678
2615
 
2679
2616
  def stubbed?
@@ -2685,14 +2622,13 @@ class Gem::Specification < Gem::BasicSpecification
2685
2622
  case ivar
2686
2623
  when "date"
2687
2624
  # Force Date to go through the extra coerce logic in date=
2688
- self.date = val.tap(&Gem::UNTAINT)
2625
+ self.date = val
2626
+ when "platform"
2627
+ self.platform = val
2689
2628
  else
2690
- instance_variable_set "@#{ivar}", val.tap(&Gem::UNTAINT)
2629
+ instance_variable_set "@#{ivar}", val
2691
2630
  end
2692
2631
  end
2693
-
2694
- @original_platform = @platform # for backwards compatibility
2695
- self.platform = Gem::Platform.new @platform
2696
2632
  end
2697
2633
 
2698
2634
  ##
@@ -2704,17 +2640,19 @@ class Gem::Specification < Gem::BasicSpecification
2704
2640
  end
2705
2641
 
2706
2642
  nil_attributes.each do |attribute|
2707
- default = self.default_value attribute
2643
+ default = default_value attribute
2708
2644
 
2709
2645
  value = case default
2710
- when Time, Numeric, Symbol, true, false, nil then default
2711
- else default.dup
2646
+ when Time, Numeric, Symbol, true, false, nil then default
2647
+ else default.dup
2712
2648
  end
2713
2649
 
2714
2650
  instance_variable_set "@#{attribute}", value
2715
2651
  end
2716
2652
 
2717
2653
  @installed_by_version ||= nil
2654
+
2655
+ nil
2718
2656
  end
2719
2657
 
2720
2658
  def flatten_require_paths # :nodoc: