rubygems-update 3.1.4 → 3.2.14

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 (576) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +791 -492
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +24 -10
  5. data/Manifest.txt +77 -104
  6. data/POLICIES.md +6 -12
  7. data/README.md +1 -1
  8. data/Rakefile +75 -101
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +1717 -1426
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +18 -32
  13. data/bundler/bundler.gemspec +4 -4
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +33 -9
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +56 -21
  18. data/bundler/lib/bundler/cli/add.rb +1 -1
  19. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  20. data/bundler/lib/bundler/cli/cache.rb +2 -7
  21. data/bundler/lib/bundler/cli/clean.rb +1 -1
  22. data/bundler/lib/bundler/cli/common.rb +14 -0
  23. data/bundler/lib/bundler/cli/console.rb +1 -1
  24. data/bundler/lib/bundler/cli/doctor.rb +1 -1
  25. data/bundler/lib/bundler/cli/exec.rb +4 -4
  26. data/bundler/lib/bundler/cli/fund.rb +36 -0
  27. data/bundler/lib/bundler/cli/gem.rb +121 -28
  28. data/bundler/lib/bundler/cli/info.rb +15 -4
  29. data/bundler/lib/bundler/cli/init.rb +2 -2
  30. data/bundler/lib/bundler/cli/inject.rb +1 -1
  31. data/bundler/lib/bundler/cli/install.rb +13 -11
  32. data/bundler/lib/bundler/cli/issue.rb +2 -2
  33. data/bundler/lib/bundler/cli/list.rb +12 -10
  34. data/bundler/lib/bundler/cli/outdated.rb +87 -66
  35. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  36. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  37. data/bundler/lib/bundler/cli/show.rb +1 -1
  38. data/bundler/lib/bundler/cli/update.rb +3 -1
  39. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  40. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
  41. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  42. data/bundler/lib/bundler/compact_index_client/updater.rb +6 -14
  43. data/bundler/lib/bundler/definition.rb +115 -123
  44. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  45. data/bundler/lib/bundler/dependency.rb +3 -10
  46. data/bundler/lib/bundler/dsl.rb +40 -33
  47. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  48. data/bundler/lib/bundler/env.rb +1 -1
  49. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  50. data/bundler/lib/bundler/errors.rb +1 -0
  51. data/bundler/lib/bundler/feature_flag.rb +0 -4
  52. data/bundler/lib/bundler/fetcher.rb +4 -4
  53. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  54. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  55. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  56. data/bundler/lib/bundler/fetcher/index.rb +3 -4
  57. data/bundler/lib/bundler/friendly_errors.rb +22 -13
  58. data/bundler/lib/bundler/gem_helper.rb +35 -18
  59. data/bundler/lib/bundler/gem_helpers.rb +36 -25
  60. data/bundler/lib/bundler/gem_version_promoter.rb +4 -4
  61. data/bundler/lib/bundler/graph.rb +1 -1
  62. data/bundler/lib/bundler/index.rb +12 -7
  63. data/bundler/lib/bundler/injector.rb +22 -4
  64. data/bundler/lib/bundler/inline.rb +2 -1
  65. data/bundler/lib/bundler/installer.rb +37 -49
  66. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  67. data/bundler/lib/bundler/installer/parallel_installer.rb +16 -18
  68. data/bundler/lib/bundler/installer/standalone.rb +17 -2
  69. data/bundler/lib/bundler/lazy_specification.rb +40 -25
  70. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  71. data/bundler/lib/bundler/lockfile_parser.rb +4 -14
  72. data/bundler/lib/bundler/man/.document +1 -0
  73. data/bundler/{man → lib/bundler/man}/bundle-add.1 +1 -1
  74. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  75. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
  76. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  77. data/bundler/{man → lib/bundler/man}/bundle-cache.1 +1 -1
  78. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  79. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  80. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  81. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  82. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  83. data/bundler/{man → lib/bundler/man}/bundle-config.1 +22 -31
  84. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +30 -40
  85. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  86. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  87. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +1 -1
  88. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  89. data/bundler/{man → lib/bundler/man}/bundle-gem.1 +25 -3
  90. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  91. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  92. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  93. data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
  94. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  95. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +1 -1
  96. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  97. data/bundler/{man → lib/bundler/man}/bundle-install.1 +30 -3
  98. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  99. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  100. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  101. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  102. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  103. data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
  104. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  105. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
  106. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  107. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +1 -1
  108. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  109. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  110. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  111. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  112. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  113. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  114. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  115. data/bundler/{man → lib/bundler/man}/bundle-update.1 +1 -1
  116. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  117. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +1 -1
  118. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  119. data/bundler/{man → lib/bundler/man}/bundle.1 +1 -1
  120. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  121. data/bundler/{man → lib/bundler/man}/gemfile.5 +4 -4
  122. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  123. data/bundler/{man → lib/bundler/man}/index.txt +0 -0
  124. data/bundler/lib/bundler/mirror.rb +2 -2
  125. data/bundler/lib/bundler/plugin.rb +31 -5
  126. data/bundler/lib/bundler/plugin/api/source.rb +8 -1
  127. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  128. data/bundler/lib/bundler/plugin/index.rb +10 -1
  129. data/bundler/lib/bundler/plugin/installer.rb +9 -11
  130. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  131. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  132. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  133. data/bundler/lib/bundler/remote_specification.rb +5 -2
  134. data/bundler/lib/bundler/resolver.rb +133 -77
  135. data/bundler/lib/bundler/resolver/spec_group.rb +75 -48
  136. data/bundler/lib/bundler/retry.rb +1 -1
  137. data/bundler/lib/bundler/ruby_version.rb +1 -1
  138. data/bundler/lib/bundler/rubygems_ext.rb +69 -9
  139. data/bundler/lib/bundler/rubygems_gem_installer.rb +50 -9
  140. data/bundler/lib/bundler/rubygems_integration.rb +25 -60
  141. data/bundler/lib/bundler/runtime.rb +4 -14
  142. data/bundler/lib/bundler/settings.rb +50 -47
  143. data/bundler/lib/bundler/shared_helpers.rb +3 -3
  144. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  145. data/bundler/lib/bundler/source.rb +7 -1
  146. data/bundler/lib/bundler/source/git.rb +24 -22
  147. data/bundler/lib/bundler/source/git/git_proxy.rb +82 -80
  148. data/bundler/lib/bundler/source/metadata.rb +0 -4
  149. data/bundler/lib/bundler/source/path.rb +7 -3
  150. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  151. data/bundler/lib/bundler/source/rubygems.rb +43 -22
  152. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  153. data/bundler/lib/bundler/source_list.rb +30 -25
  154. data/bundler/lib/bundler/spec_set.rb +14 -13
  155. data/bundler/lib/bundler/stub_specification.rb +25 -7
  156. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  157. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  158. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  159. data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -5
  160. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  161. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  162. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  163. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  164. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  165. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  166. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  167. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  168. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +15 -7
  169. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  170. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  171. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  172. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  173. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  174. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  175. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  176. data/bundler/lib/bundler/ui/shell.rb +5 -5
  177. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  178. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  179. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  180. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -2
  181. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  182. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
  183. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +3 -3
  184. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  185. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
  186. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +49 -47
  187. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +82 -189
  188. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +5 -13
  189. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +1 -1
  190. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +4 -2
  192. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  193. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +1 -1
  194. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
  195. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +9 -8
  196. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +5 -2
  197. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
  198. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  199. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  200. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  201. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  202. data/bundler/lib/bundler/version.rb +1 -1
  203. data/bundler/lib/bundler/worker.rb +1 -1
  204. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  205. data/lib/rubygems.rb +84 -160
  206. data/lib/rubygems/available_set.rb +4 -6
  207. data/lib/rubygems/basic_specification.rb +11 -9
  208. data/lib/rubygems/bundler_version_finder.rb +14 -9
  209. data/lib/rubygems/command.rb +17 -16
  210. data/lib/rubygems/command_manager.rb +5 -6
  211. data/lib/rubygems/commands/build_command.rb +40 -20
  212. data/lib/rubygems/commands/cert_command.rb +2 -10
  213. data/lib/rubygems/commands/check_command.rb +0 -2
  214. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  215. data/lib/rubygems/commands/contents_command.rb +4 -6
  216. data/lib/rubygems/commands/dependency_command.rb +6 -8
  217. data/lib/rubygems/commands/environment_command.rb +1 -3
  218. data/lib/rubygems/commands/fetch_command.rb +2 -4
  219. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  220. data/lib/rubygems/commands/help_command.rb +3 -3
  221. data/lib/rubygems/commands/info_command.rb +8 -5
  222. data/lib/rubygems/commands/install_command.rb +3 -5
  223. data/lib/rubygems/commands/list_command.rb +8 -7
  224. data/lib/rubygems/commands/lock_command.rb +1 -3
  225. data/lib/rubygems/commands/mirror_command.rb +0 -2
  226. data/lib/rubygems/commands/open_command.rb +0 -4
  227. data/lib/rubygems/commands/outdated_command.rb +0 -2
  228. data/lib/rubygems/commands/owner_command.rb +9 -4
  229. data/lib/rubygems/commands/pristine_command.rb +11 -5
  230. data/lib/rubygems/commands/push_command.rb +10 -47
  231. data/lib/rubygems/commands/query_command.rb +14 -344
  232. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  233. data/lib/rubygems/commands/search_command.rb +7 -7
  234. data/lib/rubygems/commands/server_command.rb +3 -1
  235. data/lib/rubygems/commands/setup_command.rb +101 -74
  236. data/lib/rubygems/commands/signin_command.rb +0 -2
  237. data/lib/rubygems/commands/signout_command.rb +0 -2
  238. data/lib/rubygems/commands/sources_command.rb +6 -4
  239. data/lib/rubygems/commands/specification_command.rb +8 -4
  240. data/lib/rubygems/commands/stale_command.rb +1 -3
  241. data/lib/rubygems/commands/uninstall_command.rb +1 -3
  242. data/lib/rubygems/commands/unpack_command.rb +1 -3
  243. data/lib/rubygems/commands/update_command.rb +59 -14
  244. data/lib/rubygems/commands/which_command.rb +0 -2
  245. data/lib/rubygems/commands/yank_command.rb +4 -7
  246. data/lib/rubygems/config_file.rb +20 -4
  247. data/lib/rubygems/core_ext/kernel_require.rb +29 -36
  248. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  249. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  250. data/lib/rubygems/defaults.rb +101 -7
  251. data/lib/rubygems/dependency.rb +8 -9
  252. data/lib/rubygems/dependency_installer.rb +6 -78
  253. data/lib/rubygems/dependency_list.rb +7 -9
  254. data/lib/rubygems/deprecate.rb +46 -1
  255. data/lib/rubygems/doctor.rb +4 -4
  256. data/lib/rubygems/errors.rb +3 -14
  257. data/lib/rubygems/exceptions.rb +2 -33
  258. data/lib/rubygems/ext.rb +6 -6
  259. data/lib/rubygems/ext/build_error.rb +2 -0
  260. data/lib/rubygems/ext/builder.rb +19 -39
  261. data/lib/rubygems/ext/cmake_builder.rb +6 -9
  262. data/lib/rubygems/ext/configure_builder.rb +5 -8
  263. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  264. data/lib/rubygems/ext/rake_builder.rb +4 -6
  265. data/lib/rubygems/gem_runner.rb +3 -10
  266. data/lib/rubygems/gemcutter_utilities.rb +102 -21
  267. data/lib/rubygems/indexer.rb +1 -22
  268. data/lib/rubygems/install_update_options.rb +7 -7
  269. data/lib/rubygems/installer.rb +59 -80
  270. data/lib/rubygems/installer_test_case.rb +25 -11
  271. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  272. data/lib/rubygems/local_remote_options.rb +1 -1
  273. data/lib/rubygems/mock_gem_ui.rb +0 -6
  274. data/lib/rubygems/name_tuple.rb +3 -7
  275. data/lib/rubygems/openssl.rb +7 -0
  276. data/lib/rubygems/package.rb +14 -25
  277. data/lib/rubygems/package/digest_io.rb +0 -2
  278. data/lib/rubygems/package/file_source.rb +0 -2
  279. data/lib/rubygems/package/io_source.rb +0 -2
  280. data/lib/rubygems/package/old.rb +1 -3
  281. data/lib/rubygems/package/tar_header.rb +4 -6
  282. data/lib/rubygems/package/tar_reader.rb +0 -3
  283. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  284. data/lib/rubygems/package/tar_test_case.rb +2 -4
  285. data/lib/rubygems/package/tar_writer.rb +2 -12
  286. data/lib/rubygems/package_task.rb +1 -7
  287. data/lib/rubygems/path_support.rb +1 -3
  288. data/lib/rubygems/platform.rb +21 -16
  289. data/lib/rubygems/psych_tree.rb +0 -2
  290. data/lib/rubygems/query_utils.rb +353 -0
  291. data/lib/rubygems/rdoc.rb +0 -12
  292. data/lib/rubygems/remote_fetcher.rb +18 -37
  293. data/lib/rubygems/request.rb +4 -11
  294. data/lib/rubygems/request/connection_pools.rb +1 -5
  295. data/lib/rubygems/request/http_pool.rb +0 -2
  296. data/lib/rubygems/request/https_pool.rb +0 -2
  297. data/lib/rubygems/request_set.rb +7 -20
  298. data/lib/rubygems/request_set/gem_dependency_api.rb +5 -7
  299. data/lib/rubygems/request_set/lockfile.rb +8 -12
  300. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  301. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  302. data/lib/rubygems/requirement.rb +21 -22
  303. data/lib/rubygems/resolver.rb +14 -12
  304. data/lib/rubygems/resolver/activation_request.rb +9 -3
  305. data/lib/rubygems/resolver/api_set.rb +30 -23
  306. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  307. data/lib/rubygems/resolver/api_specification.rb +23 -9
  308. data/lib/rubygems/resolver/best_set.rb +2 -4
  309. data/lib/rubygems/resolver/composed_set.rb +3 -5
  310. data/lib/rubygems/resolver/conflict.rb +2 -4
  311. data/lib/rubygems/resolver/current_set.rb +0 -2
  312. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  313. data/lib/rubygems/resolver/git_set.rb +0 -2
  314. data/lib/rubygems/resolver/git_specification.rb +0 -2
  315. data/lib/rubygems/resolver/index_set.rb +1 -3
  316. data/lib/rubygems/resolver/index_specification.rb +32 -2
  317. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  318. data/lib/rubygems/resolver/installer_set.rb +60 -13
  319. data/lib/rubygems/resolver/local_specification.rb +0 -2
  320. data/lib/rubygems/resolver/lock_set.rb +2 -4
  321. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -6
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  327. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  328. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  329. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  330. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  331. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  332. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  333. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  334. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  335. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
  336. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  337. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +12 -0
  338. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  339. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  340. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  341. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  342. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  343. data/lib/rubygems/resolver/set.rb +0 -2
  344. data/lib/rubygems/resolver/source_set.rb +0 -2
  345. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  346. data/lib/rubygems/resolver/specification.rb +13 -3
  347. data/lib/rubygems/resolver/stats.rb +0 -2
  348. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  349. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  350. data/lib/rubygems/s3_uri_signer.rb +2 -8
  351. data/lib/rubygems/safe_yaml.rb +4 -4
  352. data/lib/rubygems/security.rb +27 -34
  353. data/lib/rubygems/security/policy.rb +4 -8
  354. data/lib/rubygems/security/signer.rb +5 -7
  355. data/lib/rubygems/security/trust_dir.rb +1 -3
  356. data/lib/rubygems/server.rb +15 -12
  357. data/lib/rubygems/source.rb +23 -12
  358. data/lib/rubygems/source/git.rb +7 -8
  359. data/lib/rubygems/source/installed.rb +0 -2
  360. data/lib/rubygems/source/local.rb +2 -4
  361. data/lib/rubygems/source/lock.rb +0 -2
  362. data/lib/rubygems/source/specific_file.rb +0 -2
  363. data/lib/rubygems/source/vendor.rb +0 -2
  364. data/lib/rubygems/source_list.rb +4 -7
  365. data/lib/rubygems/spec_fetcher.rb +19 -18
  366. data/lib/rubygems/specification.rb +120 -131
  367. data/lib/rubygems/specification_policy.rb +79 -29
  368. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  369. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  370. data/lib/rubygems/stub_specification.rb +1 -5
  371. data/lib/rubygems/syck_hack.rb +0 -2
  372. data/lib/rubygems/test_case.rb +98 -129
  373. data/lib/rubygems/test_utilities.rb +12 -19
  374. data/lib/rubygems/uninstaller.rb +35 -16
  375. data/lib/rubygems/uri_formatter.rb +2 -3
  376. data/lib/rubygems/uri_parser.rb +0 -2
  377. data/lib/rubygems/user_interaction.rb +1 -26
  378. data/lib/rubygems/util.rb +8 -2
  379. data/lib/rubygems/util/licenses.rb +4 -6
  380. data/lib/rubygems/util/list.rb +0 -2
  381. data/lib/rubygems/validator.rb +1 -3
  382. data/lib/rubygems/version.rb +4 -6
  383. data/lib/rubygems/version_option.rb +6 -0
  384. data/rubygems-update.gemspec +3 -3
  385. data/setup.rb +2 -7
  386. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  387. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  388. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  389. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  390. data/test/rubygems/rubygems_plugin.rb +0 -2
  391. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  392. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -2
  393. data/test/rubygems/test_bundled_ca.rb +42 -45
  394. data/test/rubygems/test_config.rb +0 -2
  395. data/test/rubygems/test_deprecate.rb +40 -7
  396. data/test/rubygems/test_gem.rb +167 -87
  397. data/test/rubygems/test_gem_available_set.rb +3 -5
  398. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  399. data/test/rubygems/test_gem_command.rb +24 -7
  400. data/test/rubygems/test_gem_command_manager.rb +36 -5
  401. data/test/rubygems/test_gem_commands_build_command.rb +233 -15
  402. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  403. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  404. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  405. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  406. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  407. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  408. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  409. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  410. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  411. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  412. data/test/rubygems/test_gem_commands_install_command.rb +163 -34
  413. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  414. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  415. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  416. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  417. data/test/rubygems/test_gem_commands_outdated_command.rb +17 -1
  418. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  419. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  420. data/test/rubygems/test_gem_commands_push_command.rb +77 -9
  421. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  422. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  423. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  424. data/test/rubygems/test_gem_commands_setup_command.rb +160 -135
  425. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  426. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  427. data/test/rubygems/test_gem_commands_sources_command.rb +60 -2
  428. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  429. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  430. data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -3
  431. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  432. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  433. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  434. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  435. data/test/rubygems/test_gem_config_file.rb +17 -12
  436. data/test/rubygems/test_gem_dependency.rb +0 -2
  437. data/test/rubygems/test_gem_dependency_installer.rb +133 -247
  438. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  439. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  440. data/test/rubygems/test_gem_doctor.rb +28 -2
  441. data/test/rubygems/test_gem_ext_builder.rb +50 -47
  442. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -25
  443. data/test/rubygems/test_gem_ext_configure_builder.rb +6 -22
  444. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  445. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -24
  446. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  447. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  448. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  449. data/test/rubygems/test_gem_indexer.rb +9 -15
  450. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  451. data/test/rubygems/test_gem_installer.rb +260 -115
  452. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  453. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  454. data/test/rubygems/test_gem_package.rb +38 -31
  455. data/test/rubygems/test_gem_package_old.rb +4 -6
  456. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  457. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  458. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  459. data/test/rubygems/test_gem_package_tar_writer.rb +4 -6
  460. data/test/rubygems/test_gem_package_task.rb +46 -13
  461. data/test/rubygems/test_gem_path_support.rb +0 -2
  462. data/test/rubygems/test_gem_platform.rb +71 -6
  463. data/test/rubygems/test_gem_rdoc.rb +0 -2
  464. data/test/rubygems/test_gem_remote_fetcher.rb +213 -212
  465. data/test/rubygems/test_gem_request.rb +13 -17
  466. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  467. data/test/rubygems/test_gem_request_set.rb +20 -22
  468. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  469. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  470. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  471. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  472. data/test/rubygems/test_gem_requirement.rb +43 -3
  473. data/test/rubygems/test_gem_resolver.rb +6 -8
  474. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  475. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  476. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  477. data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
  478. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  479. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  480. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  481. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  482. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  483. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  484. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  485. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  486. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  487. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  488. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  489. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  490. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  491. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  492. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  493. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  494. data/test/rubygems/test_gem_security.rb +22 -24
  495. data/test/rubygems/test_gem_security_policy.rb +7 -12
  496. data/test/rubygems/test_gem_security_signer.rb +10 -12
  497. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  498. data/test/rubygems/test_gem_server.rb +10 -14
  499. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  500. data/test/rubygems/test_gem_source.rb +19 -18
  501. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  502. data/test/rubygems/test_gem_source_git.rb +12 -13
  503. data/test/rubygems/test_gem_source_installed.rb +7 -9
  504. data/test/rubygems/test_gem_source_list.rb +1 -2
  505. data/test/rubygems/test_gem_source_local.rb +8 -10
  506. data/test/rubygems/test_gem_source_lock.rb +10 -12
  507. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  508. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  509. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  510. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  511. data/test/rubygems/test_gem_specification.rb +171 -139
  512. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  513. data/test/rubygems/test_gem_stub_specification.rb +4 -6
  514. data/test/rubygems/test_gem_text.rb +1 -3
  515. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  516. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  517. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  518. data/test/rubygems/test_gem_util.rb +11 -11
  519. data/test/rubygems/test_gem_validator.rb +1 -3
  520. data/test/rubygems/test_gem_version.rb +1 -3
  521. data/test/rubygems/test_gem_version_option.rb +1 -3
  522. data/test/rubygems/test_kernel.rb +25 -10
  523. data/test/rubygems/test_project_sanity.rb +7 -2
  524. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  525. data/test/rubygems/test_require.rb +291 -56
  526. data/test/test_changelog_generator.rb +17 -0
  527. metadata +84 -136
  528. data/.bundle/config +0 -2
  529. data/.rubocop.yml +0 -91
  530. data/Gemfile +0 -8
  531. data/Gemfile.lock +0 -43
  532. data/bundler/CODE_OF_CONDUCT.md +0 -136
  533. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  534. data/bundler/man/bundle-add.1.txt +0 -58
  535. data/bundler/man/bundle-binstubs.1.txt +0 -48
  536. data/bundler/man/bundle-cache.1.txt +0 -78
  537. data/bundler/man/bundle-check.1.txt +0 -33
  538. data/bundler/man/bundle-clean.1.txt +0 -26
  539. data/bundler/man/bundle-config.1.txt +0 -528
  540. data/bundler/man/bundle-doctor.1.txt +0 -44
  541. data/bundler/man/bundle-exec.1.txt +0 -178
  542. data/bundler/man/bundle-gem.1.txt +0 -91
  543. data/bundler/man/bundle-info.1.txt +0 -21
  544. data/bundler/man/bundle-init.1.txt +0 -34
  545. data/bundler/man/bundle-inject.1.txt +0 -32
  546. data/bundler/man/bundle-install.1.txt +0 -401
  547. data/bundler/man/bundle-list.1.txt +0 -43
  548. data/bundler/man/bundle-lock.1.txt +0 -93
  549. data/bundler/man/bundle-open.1.txt +0 -29
  550. data/bundler/man/bundle-outdated.1.txt +0 -131
  551. data/bundler/man/bundle-platform.1.txt +0 -57
  552. data/bundler/man/bundle-pristine.1.txt +0 -44
  553. data/bundler/man/bundle-remove.1.txt +0 -34
  554. data/bundler/man/bundle-show.1.txt +0 -27
  555. data/bundler/man/bundle-update.1.txt +0 -390
  556. data/bundler/man/bundle-viz.1.txt +0 -39
  557. data/bundler/man/bundle.1.txt +0 -116
  558. data/bundler/man/gemfile.5.txt +0 -649
  559. data/lib/rubygems/source_local.rb +0 -7
  560. data/lib/rubygems/source_specific_file.rb +0 -6
  561. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  562. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  563. data/lib/ubygems.rb +0 -14
  564. data/tmp/.keep +0 -0
  565. data/util/CL2notes +0 -55
  566. data/util/bisect +0 -10
  567. data/util/ci.sh +0 -62
  568. data/util/cops/deprecations.rb +0 -52
  569. data/util/create_certs.rb +0 -171
  570. data/util/create_certs.sh +0 -27
  571. data/util/create_encrypted_key.rb +0 -16
  572. data/util/generate_spdx_license_list.rb +0 -63
  573. data/util/patch_with_prs.rb +0 -77
  574. data/util/rubocop +0 -8
  575. data/util/update_bundled_ca_certificates.rb +0 -139
  576. data/util/update_changelog.rb +0 -64
@@ -6,9 +6,6 @@
6
6
  # See LICENSE.txt for permissions.
7
7
  #++
8
8
 
9
- require 'rubygems/version'
10
- require 'rubygems/requirement'
11
- require 'rubygems/platform'
12
9
  require 'rubygems/deprecate'
13
10
  require 'rubygems/basic_specification'
14
11
  require 'rubygems/stub_specification'
@@ -37,7 +34,6 @@ require 'rubygems/util/list'
37
34
  # items you may add to a specification.
38
35
 
39
36
  class Gem::Specification < Gem::BasicSpecification
40
-
41
37
  extend Gem::Deprecate
42
38
 
43
39
  # REFACTOR: Consider breaking out this version stuff into a separate
@@ -81,18 +77,18 @@ class Gem::Specification < Gem::BasicSpecification
81
77
  -1 => ['(RubyGems versions up to and including 0.7 did not have versioned specifications)'],
82
78
  1 => [
83
79
  'Deprecated "test_suite_file" in favor of the new, but equivalent, "test_files"',
84
- '"test_file=x" is a shortcut for "test_files=[x]"'
80
+ '"test_file=x" is a shortcut for "test_files=[x]"',
85
81
  ],
86
82
  2 => [
87
83
  'Added "required_rubygems_version"',
88
84
  'Now forward-compatible with future versions',
89
85
  ],
90
86
  3 => [
91
- 'Added Fixnum validation to the specification_version'
87
+ 'Added Fixnum validation to the specification_version',
92
88
  ],
93
89
  4 => [
94
- 'Added sandboxed freeform metadata to the specification version.'
95
- ]
90
+ 'Added sandboxed freeform metadata to the specification version.',
91
+ ],
96
92
  }.freeze
97
93
 
98
94
  MARSHAL_FIELDS = { # :nodoc:
@@ -180,12 +176,13 @@ class Gem::Specification < Gem::BasicSpecification
180
176
  end
181
177
  end
182
178
 
183
- @@attributes = @@default_value.keys.sort_by { |s| s.to_s }
184
- @@array_attributes = @@default_value.reject { |k,v| v != [] }.keys
179
+ @@attributes = @@default_value.keys.sort_by {|s| s.to_s }
180
+ @@array_attributes = @@default_value.reject {|k,v| v != [] }.keys
185
181
  @@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition do |k|
186
182
  @@default_value[k].nil?
187
183
  end
188
184
 
185
+ @@stubs = nil
189
186
  @@stubs_by_name = {}
190
187
 
191
188
  # Sentinel object to represent "not found" stubs
@@ -249,12 +246,11 @@ class Gem::Specification < Gem::BasicSpecification
249
246
  # require 'rake'
250
247
  # spec.files = FileList['lib/**/*.rb',
251
248
  # 'bin/*',
252
- # '[A-Z]*',
253
- # 'test/**/*'].to_a
249
+ # '[A-Z]*'].to_a
254
250
  #
255
251
  # # or without Rake...
256
252
  # spec.files = Dir['lib/**/*.rb'] + Dir['bin/*']
257
- # spec.files += Dir['[A-Z]*'] + Dir['test/**/*']
253
+ # spec.files += Dir['[A-Z]*']
258
254
  # spec.files.reject! { |fn| fn.include? "CVS" }
259
255
 
260
256
  def files
@@ -390,6 +386,7 @@ class Gem::Specification < Gem::BasicSpecification
390
386
  # "mailing_list_uri" => "https://groups.example.com/bestgemever",
391
387
  # "source_code_uri" => "https://example.com/user/bestgemever",
392
388
  # "wiki_uri" => "https://example.com/user/bestgemever/wiki"
389
+ # "funding_uri" => "https://example.com/donate"
393
390
  # }
394
391
  #
395
392
  # These links will be used on your gem's page on rubygems.org and must pass
@@ -560,6 +557,10 @@ class Gem::Specification < Gem::BasicSpecification
560
557
  # spec.add_runtime_dependency 'example', '~> 1.1', '>= 1.1.4'
561
558
 
562
559
  def add_runtime_dependency(gem, *requirements)
560
+ if requirements.uniq.size != requirements.size
561
+ warn "WARNING: duplicated #{gem} dependency #{requirements}"
562
+ end
563
+
563
564
  add_dependency_with_type(gem, :runtime, requirements)
564
565
  end
565
566
 
@@ -665,6 +666,9 @@ class Gem::Specification < Gem::BasicSpecification
665
666
  #
666
667
  # # Only prereleases or final releases after 2.6.0.preview2
667
668
  # spec.required_ruby_version = '> 2.6.0.preview2'
669
+ #
670
+ # # This gem will work with 2.3.0 or greater, including major version 3, but lesser than 4.0.0
671
+ # spec.required_ruby_version = '>= 2.3', '< 4'
668
672
 
669
673
  def required_ruby_version=(req)
670
674
  @required_ruby_version = Gem::Requirement.create req
@@ -725,7 +729,7 @@ class Gem::Specification < Gem::BasicSpecification
725
729
  # Deprecated: You must now specify the executable name to Gem.bin_path.
726
730
 
727
731
  attr_writer :default_executable
728
- deprecate :default_executable=, :none, 2018, 12
732
+ rubygems_deprecate :default_executable=
729
733
 
730
734
  ##
731
735
  # Allows deinstallation of gems with legacy platforms.
@@ -746,8 +750,8 @@ class Gem::Specification < Gem::BasicSpecification
746
750
  # After a reset, make sure already loaded specs
747
751
  # are still marked as activated.
748
752
  specs = {}
749
- Gem.loaded_specs.each_value{|s| specs[s] = true}
750
- @@all.each{|s| s.activated = true if specs[s]}
753
+ Gem.loaded_specs.each_value{|s| specs[s] = true }
754
+ @@all.each{|s| s.activated = true if specs[s] }
751
755
  end
752
756
  @@all
753
757
  end
@@ -767,7 +771,7 @@ class Gem::Specification < Gem::BasicSpecification
767
771
  end
768
772
 
769
773
  def self.gemspec_stubs_in(dir, pattern)
770
- Gem::Util.glob_files_in_dir(pattern, dir).map { |path| yield path }.select(&:valid?)
774
+ Gem::Util.glob_files_in_dir(pattern, dir).map {|path| yield path }.select(&:valid?)
771
775
  end
772
776
  private_class_method :gemspec_stubs_in
773
777
 
@@ -782,21 +786,11 @@ class Gem::Specification < Gem::BasicSpecification
782
786
  dirs.flat_map do |dir|
783
787
  base_dir = File.dirname dir
784
788
  gems_dir = File.join base_dir, "gems"
785
- gemspec_stubs_in(dir, pattern) { |path| yield path, base_dir, gems_dir }
789
+ gemspec_stubs_in(dir, pattern) {|path| yield path, base_dir, gems_dir }
786
790
  end
787
791
  end
788
792
  private_class_method :map_stubs
789
793
 
790
- def self.uniq_by(list, &block) # :nodoc:
791
- list.uniq(&block)
792
- end
793
- private_class_method :uniq_by
794
-
795
- def self.sort_by!(list, &block)
796
- list.sort_by!(&block)
797
- end
798
- private_class_method :sort_by!
799
-
800
794
  def self.each_spec(dirs) # :nodoc:
801
795
  each_gemspec(dirs) do |path|
802
796
  spec = self.load path
@@ -810,11 +804,9 @@ class Gem::Specification < Gem::BasicSpecification
810
804
  def self.stubs
811
805
  @@stubs ||= begin
812
806
  pattern = "*.gemspec"
813
- stubs = Gem.loaded_specs.values + installed_stubs(dirs, pattern) + default_stubs(pattern)
814
- stubs = uniq_by(stubs) { |stub| stub.full_name }
807
+ stubs = stubs_for_pattern(pattern, false)
815
808
 
816
- _resort!(stubs)
817
- @@stubs_by_name = stubs.select { |s| Gem::Platform.match s.platform }.group_by(&:name)
809
+ @@stubs_by_name = stubs.select {|s| Gem::Platform.match_spec? s }.group_by(&:name)
818
810
  stubs
819
811
  end
820
812
  end
@@ -830,8 +822,6 @@ class Gem::Specification < Gem::BasicSpecification
830
822
  end
831
823
  end
832
824
 
833
- EMPTY = [].freeze # :nodoc:
834
-
835
825
  ##
836
826
  # Returns a Gem::StubSpecification for installed gem named +name+
837
827
  # only returns stubs that match Gem.platforms
@@ -840,23 +830,32 @@ class Gem::Specification < Gem::BasicSpecification
840
830
  if @@stubs
841
831
  @@stubs_by_name[name] || []
842
832
  else
843
- pattern = "#{name}-*.gemspec"
844
- stubs = Gem.loaded_specs.values +
845
- installed_stubs(dirs, pattern).select { |s| Gem::Platform.match s.platform } +
846
- default_stubs(pattern)
847
- stubs = uniq_by(stubs) { |stub| stub.full_name }.group_by(&:name)
848
- stubs.each_value { |v| _resort!(v) }
849
-
850
- @@stubs_by_name.merge! stubs
851
- @@stubs_by_name[name] ||= EMPTY
833
+ @@stubs_by_name[name] ||= stubs_for_pattern("#{name}-*.gemspec").select do |s|
834
+ s.name == name
835
+ end
852
836
  end
853
837
  end
854
838
 
839
+ ##
840
+ # Finds stub specifications matching a pattern from the standard locations,
841
+ # optionally filtering out specs not matching the current platform
842
+ #
843
+ def self.stubs_for_pattern(pattern, match_platform = true) # :nodoc:
844
+ installed_stubs = installed_stubs(Gem::Specification.dirs, pattern)
845
+ installed_stubs.select! {|s| Gem::Platform.match_spec? s } if match_platform
846
+ stubs = installed_stubs + default_stubs(pattern)
847
+ stubs = stubs.uniq {|stub| stub.full_name }
848
+ _resort!(stubs)
849
+ stubs
850
+ end
851
+
855
852
  def self._resort!(specs) # :nodoc:
856
853
  specs.sort! do |a, b|
857
854
  names = a.name <=> b.name
858
855
  next names if names.nonzero?
859
- b.version <=> a.version
856
+ versions = b.version <=> a.version
857
+ next versions if versions.nonzero?
858
+ b.platform == Gem::Platform::RUBY ? -1 : 1
860
859
  end
861
860
  end
862
861
 
@@ -939,7 +938,7 @@ class Gem::Specification < Gem::BasicSpecification
939
938
  def self.dirs=(dirs)
940
939
  self.reset
941
940
 
942
- @@dirs = Array(dirs).map { |dir| File.join dir, "specifications" }
941
+ @@dirs = Array(dirs).map {|dir| File.join dir, "specifications" }
943
942
  end
944
943
 
945
944
  extend Enumerable
@@ -1022,10 +1021,7 @@ class Gem::Specification < Gem::BasicSpecification
1022
1021
  # Return currently unresolved specs that contain the file matching +path+.
1023
1022
 
1024
1023
  def self.find_in_unresolved(path)
1025
- # TODO: do we need these?? Kill it
1026
- specs = unresolved_deps.values.map { |dep| dep.to_specs }.flatten
1027
-
1028
- specs.find_all { |spec| spec.contains_requirable_file? path }
1024
+ unresolved_specs.find_all {|spec| spec.contains_requirable_file? path }
1029
1025
  end
1030
1026
 
1031
1027
  ##
@@ -1033,9 +1029,7 @@ class Gem::Specification < Gem::BasicSpecification
1033
1029
  # specs that contain the file matching +path+.
1034
1030
 
1035
1031
  def self.find_in_unresolved_tree(path)
1036
- specs = unresolved_deps.values.map { |dep| dep.to_specs }.flatten
1037
-
1038
- specs.each do |spec|
1032
+ unresolved_specs.each do |spec|
1039
1033
  spec.traverse do |from_spec, dep, to_spec, trail|
1040
1034
  if to_spec.has_conflicts? || to_spec.conficts_when_loaded_with?(trail)
1041
1035
  :next
@@ -1048,6 +1042,11 @@ class Gem::Specification < Gem::BasicSpecification
1048
1042
  []
1049
1043
  end
1050
1044
 
1045
+ def self.unresolved_specs
1046
+ unresolved_deps.values.map {|dep| dep.to_specs }.flatten
1047
+ end
1048
+ private_class_method :unresolved_specs
1049
+
1051
1050
  ##
1052
1051
  # Special loader for YAML files. When a Specification object is loaded
1053
1052
  # from a YAML file, it bypasses the normal Ruby object initialization
@@ -1084,21 +1083,23 @@ class Gem::Specification < Gem::BasicSpecification
1084
1083
  _latest_specs Gem::Specification._all, prerelease
1085
1084
  end
1086
1085
 
1086
+ ##
1087
+ # Return the latest installed spec for gem +name+.
1088
+
1089
+ def self.latest_spec_for(name)
1090
+ latest_specs(true).find {|installed_spec| installed_spec.name == name }
1091
+ end
1092
+
1087
1093
  def self._latest_specs(specs, prerelease = false) # :nodoc:
1088
- result = Hash.new { |h,k| h[k] = {} }
1089
- native = {}
1094
+ result = {}
1090
1095
 
1091
1096
  specs.reverse_each do |spec|
1092
1097
  next if spec.version.prerelease? unless prerelease
1093
1098
 
1094
- native[spec.name] = spec.version if spec.platform == Gem::Platform::RUBY
1095
- result[spec.name][spec.platform] = spec
1099
+ result[spec.name] = spec
1096
1100
  end
1097
1101
 
1098
- result.map(&:last).map(&:values).flatten.reject do |spec|
1099
- minimum = native[spec.name]
1100
- minimum && spec.version < minimum
1101
- end.sort_by{ |tup| tup.name }
1102
+ result.map(&:last).flatten.sort_by{|tup| tup.name }
1102
1103
  end
1103
1104
 
1104
1105
  ##
@@ -1155,7 +1156,7 @@ class Gem::Specification < Gem::BasicSpecification
1155
1156
 
1156
1157
  def self.normalize_yaml_input(input)
1157
1158
  result = input.respond_to?(:read) ? input.read : input
1158
- result = "--- " + result unless result =~ /\A--- /
1159
+ result = "--- " + result unless result.start_with?("--- ")
1159
1160
  result = result.dup
1160
1161
  result.gsub!(/ !!null \n/, " \n")
1161
1162
  # date: 2011-04-26 00:00:00.000000000Z
@@ -1172,7 +1173,7 @@ class Gem::Specification < Gem::BasicSpecification
1172
1173
  # version as well.
1173
1174
 
1174
1175
  def self.outdated
1175
- outdated_and_latest_version.map { |local, _| local.name }
1176
+ outdated_and_latest_version.map {|local, _| local.name }
1176
1177
  end
1177
1178
 
1178
1179
  ##
@@ -1193,7 +1194,7 @@ class Gem::Specification < Gem::BasicSpecification
1193
1194
  Gem::Dependency.new local_spec.name, ">= #{local_spec.version}"
1194
1195
 
1195
1196
  remotes, = fetcher.search_for_dependency dependency
1196
- remotes = remotes.map { |n, _| n.version }
1197
+ remotes = remotes.map {|n, _| n.version }
1197
1198
 
1198
1199
  latest_remote = remotes.sort.last
1199
1200
 
@@ -1224,7 +1225,7 @@ class Gem::Specification < Gem::BasicSpecification
1224
1225
 
1225
1226
  def self.reset
1226
1227
  @@dirs = nil
1227
- Gem.pre_reset_hooks.each { |hook| hook.call }
1228
+ Gem.pre_reset_hooks.each {|hook| hook.call }
1228
1229
  @@all = nil
1229
1230
  @@stubs = nil
1230
1231
  @@stubs_by_name = {}
@@ -1241,19 +1242,19 @@ class Gem::Specification < Gem::BasicSpecification
1241
1242
  versions = find_all_by_name(dep.name)
1242
1243
  unless versions.empty?
1243
1244
  warn " Available/installed versions of this gem:"
1244
- versions.each { |s| warn " - #{s.version}" }
1245
+ versions.each {|s| warn " - #{s.version}" }
1245
1246
  end
1246
1247
  end
1247
1248
  warn "#{w}: Clearing out unresolved specs. Try 'gem cleanup <gem>'"
1248
1249
  warn "Please report a bug if this causes problems."
1249
1250
  unresolved.clear
1250
1251
  end
1251
- Gem.post_reset_hooks.each { |hook| hook.call }
1252
+ Gem.post_reset_hooks.each {|hook| hook.call }
1252
1253
  end
1253
1254
 
1254
1255
  # DOC: This method needs documented or nodoc'd
1255
1256
  def self.unresolved_deps
1256
- @unresolved_deps ||= Hash.new { |h, n| h[n] = Gem::Dependency.new n }
1257
+ @unresolved_deps ||= Hash.new {|h, n| h[n] = Gem::Dependency.new n }
1257
1258
  end
1258
1259
 
1259
1260
  ##
@@ -1284,7 +1285,7 @@ class Gem::Specification < Gem::BasicSpecification
1284
1285
  # Cleanup any YAML::PrivateType. They only show up for an old bug
1285
1286
  # where nil => null, so just convert them to nil based on the type.
1286
1287
 
1287
- array.map! { |e| e.kind_of?(YAML::PrivateType) ? nil : e }
1288
+ array.map! {|e| e.kind_of?(YAML::PrivateType) ? nil : e }
1288
1289
 
1289
1290
  spec.instance_variable_set :@rubygems_version, array[0]
1290
1291
  # spec version
@@ -1349,7 +1350,7 @@ class Gem::Specification < Gem::BasicSpecification
1349
1350
  true, # has_rdoc
1350
1351
  @new_platform,
1351
1352
  @licenses,
1352
- @metadata
1353
+ @metadata,
1353
1354
  ]
1354
1355
  end
1355
1356
 
@@ -1397,7 +1398,11 @@ class Gem::Specification < Gem::BasicSpecification
1397
1398
  raise e
1398
1399
  end
1399
1400
 
1400
- specs = spec_dep.to_specs
1401
+ begin
1402
+ specs = spec_dep.to_specs
1403
+ rescue Gem::MissingSpecError => e
1404
+ raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{self.spec_file}")
1405
+ end
1401
1406
 
1402
1407
  if specs.size == 1
1403
1408
  specs.first.activate
@@ -1433,7 +1438,7 @@ class Gem::Specification < Gem::BasicSpecification
1433
1438
  self.summary = sanitize_string(summary)
1434
1439
  self.description = sanitize_string(description)
1435
1440
  self.post_install_message = sanitize_string(post_install_message)
1436
- self.authors = authors.collect { |a| sanitize_string(a) }
1441
+ self.authors = authors.collect {|a| sanitize_string(a) }
1437
1442
  end
1438
1443
 
1439
1444
  ##
@@ -1445,13 +1450,7 @@ class Gem::Specification < Gem::BasicSpecification
1445
1450
  # HACK the #to_s is in here because RSpec has an Array of Arrays of
1446
1451
  # Strings for authors. Need a way to disallow bad values on gemspec
1447
1452
  # generation. (Probably won't happen.)
1448
- string = string.to_s
1449
-
1450
- begin
1451
- Builder::XChar.encode string
1452
- rescue NameError, NoMethodError
1453
- string.to_xs
1454
- end
1453
+ string.to_s
1455
1454
  end
1456
1455
 
1457
1456
  ##
@@ -1462,7 +1461,7 @@ class Gem::Specification < Gem::BasicSpecification
1462
1461
  return nil if executables.nil?
1463
1462
 
1464
1463
  if @bindir
1465
- Array(executables).map { |e| File.join(@bindir, e) }
1464
+ Array(executables).map {|e| File.join(@bindir, e) }
1466
1465
  else
1467
1466
  executables
1468
1467
  end
@@ -1544,7 +1543,7 @@ class Gem::Specification < Gem::BasicSpecification
1544
1543
  def build_args
1545
1544
  if File.exist? build_info_file
1546
1545
  build_info = File.readlines build_info_file
1547
- build_info = build_info.map { |x| x.strip }
1546
+ build_info = build_info.map {|x| x.strip }
1548
1547
  build_info.delete ""
1549
1548
  build_info
1550
1549
  else
@@ -1636,7 +1635,7 @@ class Gem::Specification < Gem::BasicSpecification
1636
1635
 
1637
1636
  def conficts_when_loaded_with?(list_of_specs) # :nodoc:
1638
1637
  result = list_of_specs.any? do |spec|
1639
- spec.dependencies.any? { |dep| dep.runtime? && (dep.name == name) && !satisfies_requirement?(dep) }
1638
+ spec.dependencies.any? {|dep| dep.runtime? && (dep.name == name) && !satisfies_requirement?(dep) }
1640
1639
  end
1641
1640
  result
1642
1641
  end
@@ -1725,7 +1724,7 @@ class Gem::Specification < Gem::BasicSpecification
1725
1724
  end
1726
1725
  result
1727
1726
  end
1728
- deprecate :default_executable, :none, 2018, 12
1727
+ rubygems_deprecate :default_executable
1729
1728
 
1730
1729
  ##
1731
1730
  # The default value for specification attribute +name+
@@ -1750,10 +1749,11 @@ class Gem::Specification < Gem::BasicSpecification
1750
1749
  #
1751
1750
  # [depending_gem, dependency, [list_of_gems_that_satisfy_dependency]]
1752
1751
 
1753
- def dependent_gems
1752
+ def dependent_gems(check_dev=true)
1754
1753
  out = []
1755
1754
  Gem::Specification.each do |spec|
1756
- spec.dependencies.each do |dep|
1755
+ deps = check_dev ? spec.dependencies : spec.runtime_dependencies
1756
+ deps.each do |dep|
1757
1757
  if self.satisfies_requirement?(dep)
1758
1758
  sats = []
1759
1759
  find_all_satisfiers(dep) do |sat|
@@ -1770,7 +1770,7 @@ class Gem::Specification < Gem::BasicSpecification
1770
1770
  # Returns all specs that matches this spec's runtime dependencies.
1771
1771
 
1772
1772
  def dependent_specs
1773
- runtime_dependencies.map { |dep| dep.to_specs }.flatten
1773
+ runtime_dependencies.map {|dep| dep.to_specs }.flatten
1774
1774
  end
1775
1775
 
1776
1776
  ##
@@ -1784,7 +1784,7 @@ class Gem::Specification < Gem::BasicSpecification
1784
1784
  # List of dependencies that are used for development
1785
1785
 
1786
1786
  def development_dependencies
1787
- dependencies.select { |d| d.type == :development }
1787
+ dependencies.select {|d| d.type == :development }
1788
1788
  end
1789
1789
 
1790
1790
  ##
@@ -1845,29 +1845,23 @@ class Gem::Specification < Gem::BasicSpecification
1845
1845
  end
1846
1846
 
1847
1847
  ##
1848
- # Sets executables to +value+, ensuring it is an array. Don't
1849
- # use this, push onto the array instead.
1848
+ # Sets executables to +value+, ensuring it is an array.
1850
1849
 
1851
1850
  def executables=(value)
1852
- # TODO: warn about setting instead of pushing
1853
1851
  @executables = Array(value)
1854
1852
  end
1855
1853
 
1856
1854
  ##
1857
- # Sets extensions to +extensions+, ensuring it is an array. Don't
1858
- # use this, push onto the array instead.
1855
+ # Sets extensions to +extensions+, ensuring it is an array.
1859
1856
 
1860
1857
  def extensions=(extensions)
1861
- # TODO: warn about setting instead of pushing
1862
1858
  @extensions = Array extensions
1863
1859
  end
1864
1860
 
1865
1861
  ##
1866
- # Sets extra_rdoc_files to +files+, ensuring it is an array. Don't
1867
- # use this, push onto the array instead.
1862
+ # Sets extra_rdoc_files to +files+, ensuring it is an array.
1868
1863
 
1869
1864
  def extra_rdoc_files=(files)
1870
- # TODO: warn about setting instead of pushing
1871
1865
  @extra_rdoc_files = Array files
1872
1866
  end
1873
1867
 
@@ -1933,7 +1927,7 @@ class Gem::Specification < Gem::BasicSpecification
1933
1927
  def has_rdoc # :nodoc:
1934
1928
  true
1935
1929
  end
1936
- deprecate :has_rdoc, :none, 2018, 12
1930
+ rubygems_deprecate :has_rdoc
1937
1931
 
1938
1932
  ##
1939
1933
  # Deprecated and ignored.
@@ -1943,10 +1937,10 @@ class Gem::Specification < Gem::BasicSpecification
1943
1937
  def has_rdoc=(ignored) # :nodoc:
1944
1938
  @has_rdoc = true
1945
1939
  end
1946
- deprecate :has_rdoc=, :none, 2018, 12
1940
+ rubygems_deprecate :has_rdoc=
1947
1941
 
1948
1942
  alias :has_rdoc? :has_rdoc # :nodoc:
1949
- deprecate :has_rdoc?, :none, 2018, 12
1943
+ rubygems_deprecate :has_rdoc?
1950
1944
 
1951
1945
  ##
1952
1946
  # True if this gem has files in test_files
@@ -1968,7 +1962,9 @@ class Gem::Specification < Gem::BasicSpecification
1968
1962
  yaml_initialize coder.tag, coder.map
1969
1963
  end
1970
1964
 
1971
- eval <<-RB, binding, __FILE__, __LINE__ + 1
1965
+ eval <<-RUBY, binding, __FILE__, __LINE__ + 1
1966
+ # frozen_string_literal: true
1967
+
1972
1968
  def set_nil_attributes_to_nil
1973
1969
  #{@@nil_attributes.map {|key| "@#{key} = nil" }.join "; "}
1974
1970
  end
@@ -1978,7 +1974,7 @@ class Gem::Specification < Gem::BasicSpecification
1978
1974
  #{@@non_nil_attributes.map {|key| "@#{key} = #{INITIALIZE_CODE_FOR_DEFAULTS[key]}" }.join ";"}
1979
1975
  end
1980
1976
  private :set_not_nil_attributes_to_default_values
1981
- RB
1977
+ RUBY
1982
1978
 
1983
1979
  ##
1984
1980
  # Specification constructor. Assigns the default values to the attributes
@@ -2003,6 +1999,10 @@ class Gem::Specification < Gem::BasicSpecification
2003
1999
  self.name = name if name
2004
2000
  self.version = version if version
2005
2001
 
2002
+ if platform = Gem.platforms.last and platform != Gem::Platform::RUBY and platform != Gem::Platform.local
2003
+ self.platform = platform
2004
+ end
2005
+
2006
2006
  yield self if block_given?
2007
2007
  end
2008
2008
 
@@ -2115,7 +2115,7 @@ class Gem::Specification < Gem::BasicSpecification
2115
2115
  end
2116
2116
 
2117
2117
  if @specification_version > CURRENT_SPECIFICATION_VERSION and
2118
- sym.to_s =~ /=$/
2118
+ sym.to_s.end_with?("=")
2119
2119
  warn "ignoring #{sym} loading #{full_name}" if $DEBUG
2120
2120
  else
2121
2121
  super
@@ -2199,7 +2199,7 @@ class Gem::Specification < Gem::BasicSpecification
2199
2199
 
2200
2200
  attributes.each do |attr_name|
2201
2201
  current_value = self.send attr_name
2202
- current_value = current_value.sort if %i(files test_files).include? attr_name
2202
+ current_value = current_value.sort if %i[files test_files].include? attr_name
2203
2203
  if current_value != default_value(attr_name) or
2204
2204
  self.class.required_attribute? attr_name
2205
2205
 
@@ -2249,11 +2249,9 @@ class Gem::Specification < Gem::BasicSpecification
2249
2249
  end
2250
2250
 
2251
2251
  ##
2252
- # Sets rdoc_options to +value+, ensuring it is an array. Don't
2253
- # use this, push onto the array instead.
2252
+ # Sets rdoc_options to +value+, ensuring it is an array.
2254
2253
 
2255
2254
  def rdoc_options=(options)
2256
- # TODO: warn about setting instead of pushing
2257
2255
  @rdoc_options = Array options
2258
2256
  end
2259
2257
 
@@ -2272,11 +2270,9 @@ class Gem::Specification < Gem::BasicSpecification
2272
2270
  end
2273
2271
 
2274
2272
  ##
2275
- # Set requirements to +req+, ensuring it is an array. Don't
2276
- # use this, push onto the array instead.
2273
+ # Set requirements to +req+, ensuring it is an array.
2277
2274
 
2278
2275
  def requirements=(req)
2279
- # TODO: warn about setting instead of pushing
2280
2276
  @requirements = Array req
2281
2277
  end
2282
2278
 
@@ -2298,9 +2294,9 @@ class Gem::Specification < Gem::BasicSpecification
2298
2294
  def ruby_code(obj)
2299
2295
  case obj
2300
2296
  when String then obj.dump + ".freeze"
2301
- when Array then '[' + obj.map { |x| ruby_code x }.join(", ") + ']'
2297
+ when Array then '[' + obj.map {|x| ruby_code x }.join(", ") + ']'
2302
2298
  when Hash then
2303
- seg = obj.keys.sort.map { |k| "#{k.to_s.dump} => #{obj[k].to_s.dump}" }
2299
+ seg = obj.keys.sort.map {|k| "#{k.to_s.dump} => #{obj[k].to_s.dump}" }
2304
2300
  "{ #{seg.join(', ')} }"
2305
2301
  when Gem::Version then obj.to_s.dump
2306
2302
  when DateLike then obj.strftime('%Y-%m-%d').dump
@@ -2328,7 +2324,7 @@ class Gem::Specification < Gem::BasicSpecification
2328
2324
  # True if this gem has the same attributes as +other+.
2329
2325
 
2330
2326
  def same_attributes?(spec)
2331
- @@attributes.all? { |name, default| self.send(name) == spec.send(name) }
2327
+ @@attributes.all? {|name, default| self.send(name) == spec.send(name) }
2332
2328
  end
2333
2329
 
2334
2330
  private :same_attributes?
@@ -2427,7 +2423,7 @@ class Gem::Specification < Gem::BasicSpecification
2427
2423
  # still have their default values are omitted.
2428
2424
 
2429
2425
  def to_ruby
2430
- require 'openssl'
2426
+ require_relative 'openssl'
2431
2427
  mark_version
2432
2428
  result = []
2433
2429
  result << "# -*- encoding: utf-8 -*-"
@@ -2460,14 +2456,14 @@ class Gem::Specification < Gem::BasicSpecification
2460
2456
  :version,
2461
2457
  :has_rdoc,
2462
2458
  :default_executable,
2463
- :metadata
2459
+ :metadata,
2464
2460
  ]
2465
2461
 
2466
2462
  @@attributes.each do |attr_name|
2467
2463
  next if handled.include? attr_name
2468
2464
  current_value = self.send(attr_name)
2469
2465
  if current_value != default_value(attr_name) || self.class.required_attribute?(attr_name)
2470
- result << " s.#{attr_name} = #{ruby_code current_value}" unless current_value.is_a?(OpenSSL::PKey::RSA)
2466
+ result << " s.#{attr_name} = #{ruby_code current_value}" unless defined?(OpenSSL::PKey::RSA) && current_value.is_a?(OpenSSL::PKey::RSA)
2471
2467
  end
2472
2468
  end
2473
2469
 
@@ -2558,7 +2554,7 @@ class Gem::Specification < Gem::BasicSpecification
2558
2554
  begin
2559
2555
  dependencies.each do |dep|
2560
2556
  next unless dep.runtime?
2561
- dep.to_specs.each do |dep_spec|
2557
+ dep.matching_specs(true).each do |dep_spec|
2562
2558
  next if visited.has_key?(dep_spec)
2563
2559
  visited[dep_spec] = true
2564
2560
  trail.push(dep_spec)
@@ -2570,7 +2566,7 @@ class Gem::Specification < Gem::BasicSpecification
2570
2566
  unless result == :next
2571
2567
  spec_name = dep_spec.name
2572
2568
  dep_spec.traverse(trail, visited, &block) unless
2573
- trail.any? { |s| s.name == spec_name }
2569
+ trail.any? {|s| s.name == spec_name }
2574
2570
  end
2575
2571
  end
2576
2572
  end
@@ -2595,30 +2591,27 @@ class Gem::Specification < Gem::BasicSpecification
2595
2591
  end
2596
2592
 
2597
2593
  def keep_only_files_and_directories
2598
- @executables.delete_if { |x| File.directory?(File.join(@bindir, x)) }
2599
- @extensions.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
2600
- @extra_rdoc_files.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
2601
- @files.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
2602
- @test_files.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
2594
+ @executables.delete_if {|x| File.directory?(File.join(@bindir, x)) }
2595
+ @extensions.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
2596
+ @extra_rdoc_files.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
2597
+ @files.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
2598
+ @test_files.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
2603
2599
  end
2604
2600
 
2605
2601
  def validate_metadata
2606
2602
  Gem::SpecificationPolicy.new(self).validate_metadata
2607
2603
  end
2604
+ rubygems_deprecate :validate_metadata
2608
2605
 
2609
- ##
2610
- # Checks that dependencies use requirements as we recommend. Warnings are
2611
- # issued when dependencies are open-ended or overly strict for semantic
2612
- # versioning.
2613
2606
  def validate_dependencies
2614
2607
  Gem::SpecificationPolicy.new(self).validate_dependencies
2615
2608
  end
2609
+ rubygems_deprecate :validate_dependencies
2616
2610
 
2617
- ##
2618
- # Checks to see if the files to be packaged are world-readable.
2619
2611
  def validate_permissions
2620
2612
  Gem::SpecificationPolicy.new(self).validate_permissions
2621
2613
  end
2614
+ rubygems_deprecate :validate_permissions
2622
2615
 
2623
2616
  ##
2624
2617
  # Set the version to +version+, potentially also setting
@@ -2681,8 +2674,4 @@ class Gem::Specification < Gem::BasicSpecification
2681
2674
  def raw_require_paths # :nodoc:
2682
2675
  @require_paths
2683
2676
  end
2684
-
2685
2677
  end
2686
-
2687
- # DOC: What is this and why is it here, randomly, at the end of this file?
2688
- Gem.clear_paths