rubygems-update 3.1.2 → 3.2.3

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 (560) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +55 -19
  3. data/CONTRIBUTING.md +25 -11
  4. data/History.txt +460 -232
  5. data/Manifest.txt +47 -77
  6. data/POLICIES.md +6 -12
  7. data/README.md +5 -5
  8. data/Rakefile +59 -83
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +1598 -1421
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +18 -32
  13. data/bundler/bundler.gemspec +3 -3
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +32 -7
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +58 -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 +1 -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 +84 -11
  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 +16 -13
  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 +5 -5
  43. data/bundler/lib/bundler/definition.rb +65 -76
  44. data/bundler/lib/bundler/dep_proxy.rb +1 -1
  45. data/bundler/lib/bundler/dependency.rb +3 -10
  46. data/bundler/lib/bundler/dsl.rb +5 -9
  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 -3
  52. data/bundler/lib/bundler/fetcher.rb +4 -3
  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 +33 -19
  59. data/bundler/lib/bundler/gem_helpers.rb +36 -25
  60. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  61. data/bundler/lib/bundler/graph.rb +1 -1
  62. data/bundler/lib/bundler/index.rb +6 -2
  63. data/bundler/lib/bundler/injector.rb +22 -4
  64. data/bundler/lib/bundler/inline.rb +2 -2
  65. data/bundler/lib/bundler/installer.rb +35 -32
  66. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  67. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  68. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  69. data/bundler/lib/bundler/lazy_specification.rb +35 -11
  70. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  71. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  72. data/bundler/lib/bundler/man/.document +1 -0
  73. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  74. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  75. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  76. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  77. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  78. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
  79. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  80. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  81. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  82. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  83. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  84. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  85. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  86. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  87. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  88. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  89. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  90. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  91. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  92. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  93. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  94. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  95. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  96. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  97. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  98. data/bundler/lib/bundler/mirror.rb +2 -2
  99. data/bundler/lib/bundler/plugin.rb +30 -5
  100. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  101. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  102. data/bundler/lib/bundler/plugin/index.rb +10 -1
  103. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  104. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  105. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  106. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  107. data/bundler/lib/bundler/remote_specification.rb +5 -2
  108. data/bundler/lib/bundler/resolver.rb +37 -18
  109. data/bundler/lib/bundler/resolver/spec_group.rb +36 -21
  110. data/bundler/lib/bundler/retry.rb +1 -1
  111. data/bundler/lib/bundler/ruby_version.rb +1 -1
  112. data/bundler/lib/bundler/rubygems_ext.rb +53 -9
  113. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  114. data/bundler/lib/bundler/rubygems_integration.rb +26 -61
  115. data/bundler/lib/bundler/runtime.rb +4 -14
  116. data/bundler/lib/bundler/settings.rb +49 -46
  117. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  118. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  119. data/bundler/lib/bundler/source.rb +1 -1
  120. data/bundler/lib/bundler/source/git.rb +5 -5
  121. data/bundler/lib/bundler/source/git/git_proxy.rb +57 -60
  122. data/bundler/lib/bundler/source/path.rb +7 -3
  123. data/bundler/lib/bundler/source/path/installer.rb +8 -10
  124. data/bundler/lib/bundler/source/rubygems.rb +13 -16
  125. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  126. data/bundler/lib/bundler/source_list.rb +2 -2
  127. data/bundler/lib/bundler/spec_set.rb +7 -9
  128. data/bundler/lib/bundler/stub_specification.rb +17 -7
  129. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  130. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  131. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  132. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  133. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  134. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  135. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  136. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  137. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  138. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  139. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  140. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -6
  141. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  142. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  143. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  144. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  145. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  146. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  147. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  148. data/bundler/lib/bundler/ui/shell.rb +5 -5
  149. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  150. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  151. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  152. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  153. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  154. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  155. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
  156. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -208
  157. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  158. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  159. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  160. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  161. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  162. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  163. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  164. data/bundler/lib/bundler/version.rb +1 -1
  165. data/bundler/lib/bundler/worker.rb +1 -1
  166. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  167. data/bundler/man/bundle-add.1 +1 -1
  168. data/bundler/man/bundle-binstubs.1 +5 -3
  169. data/bundler/man/bundle-cache.1 +1 -1
  170. data/bundler/man/bundle-check.1 +1 -1
  171. data/bundler/man/bundle-clean.1 +1 -1
  172. data/bundler/man/bundle-config.1 +16 -25
  173. data/bundler/man/bundle-doctor.1 +1 -1
  174. data/bundler/man/bundle-exec.1 +1 -1
  175. data/bundler/man/bundle-gem.1 +25 -3
  176. data/bundler/man/bundle-info.1 +1 -1
  177. data/bundler/man/bundle-init.1 +1 -1
  178. data/bundler/man/bundle-inject.1 +1 -1
  179. data/bundler/man/bundle-install.1 +30 -3
  180. data/bundler/man/bundle-list.1 +7 -7
  181. data/bundler/man/bundle-lock.1 +1 -1
  182. data/bundler/man/bundle-open.1 +1 -1
  183. data/bundler/man/bundle-outdated.1 +1 -1
  184. data/bundler/man/bundle-platform.1 +1 -1
  185. data/bundler/man/bundle-pristine.1 +1 -1
  186. data/bundler/man/bundle-remove.1 +1 -1
  187. data/bundler/man/bundle-show.1 +1 -1
  188. data/bundler/man/bundle-update.1 +1 -1
  189. data/bundler/man/bundle-viz.1 +1 -1
  190. data/bundler/man/bundle.1 +1 -1
  191. data/bundler/man/gemfile.5 +4 -4
  192. data/lib/rubygems.rb +138 -187
  193. data/lib/rubygems/available_set.rb +4 -6
  194. data/lib/rubygems/basic_specification.rb +12 -10
  195. data/lib/rubygems/bundler_version_finder.rb +14 -9
  196. data/lib/rubygems/command.rb +17 -17
  197. data/lib/rubygems/command_manager.rb +5 -6
  198. data/lib/rubygems/commands/build_command.rb +40 -20
  199. data/lib/rubygems/commands/cert_command.rb +2 -10
  200. data/lib/rubygems/commands/check_command.rb +0 -2
  201. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  202. data/lib/rubygems/commands/contents_command.rb +4 -6
  203. data/lib/rubygems/commands/dependency_command.rb +6 -8
  204. data/lib/rubygems/commands/environment_command.rb +1 -3
  205. data/lib/rubygems/commands/fetch_command.rb +2 -4
  206. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  207. data/lib/rubygems/commands/help_command.rb +4 -4
  208. data/lib/rubygems/commands/info_command.rb +8 -5
  209. data/lib/rubygems/commands/install_command.rb +3 -5
  210. data/lib/rubygems/commands/list_command.rb +8 -7
  211. data/lib/rubygems/commands/lock_command.rb +1 -3
  212. data/lib/rubygems/commands/mirror_command.rb +0 -2
  213. data/lib/rubygems/commands/open_command.rb +0 -4
  214. data/lib/rubygems/commands/outdated_command.rb +0 -2
  215. data/lib/rubygems/commands/owner_command.rb +9 -4
  216. data/lib/rubygems/commands/pristine_command.rb +11 -5
  217. data/lib/rubygems/commands/push_command.rb +10 -47
  218. data/lib/rubygems/commands/query_command.rb +14 -344
  219. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  220. data/lib/rubygems/commands/search_command.rb +7 -7
  221. data/lib/rubygems/commands/server_command.rb +3 -1
  222. data/lib/rubygems/commands/setup_command.rb +131 -58
  223. data/lib/rubygems/commands/signin_command.rb +0 -2
  224. data/lib/rubygems/commands/signout_command.rb +0 -2
  225. data/lib/rubygems/commands/sources_command.rb +9 -7
  226. data/lib/rubygems/commands/specification_command.rb +8 -4
  227. data/lib/rubygems/commands/stale_command.rb +1 -3
  228. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  229. data/lib/rubygems/commands/unpack_command.rb +1 -3
  230. data/lib/rubygems/commands/update_command.rb +59 -14
  231. data/lib/rubygems/commands/which_command.rb +0 -2
  232. data/lib/rubygems/commands/yank_command.rb +4 -7
  233. data/lib/rubygems/config_file.rb +11 -4
  234. data/lib/rubygems/core_ext/kernel_require.rb +29 -36
  235. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  236. data/lib/rubygems/defaults.rb +101 -7
  237. data/lib/rubygems/dependency.rb +3 -8
  238. data/lib/rubygems/dependency_installer.rb +6 -78
  239. data/lib/rubygems/dependency_list.rb +7 -9
  240. data/lib/rubygems/deprecate.rb +46 -1
  241. data/lib/rubygems/doctor.rb +4 -4
  242. data/lib/rubygems/errors.rb +3 -14
  243. data/lib/rubygems/exceptions.rb +2 -33
  244. data/lib/rubygems/ext.rb +6 -6
  245. data/lib/rubygems/ext/build_error.rb +2 -0
  246. data/lib/rubygems/ext/builder.rb +16 -35
  247. data/lib/rubygems/ext/cmake_builder.rb +5 -7
  248. data/lib/rubygems/ext/configure_builder.rb +4 -6
  249. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  250. data/lib/rubygems/ext/rake_builder.rb +4 -6
  251. data/lib/rubygems/gem_runner.rb +3 -10
  252. data/lib/rubygems/gemcutter_utilities.rb +102 -21
  253. data/lib/rubygems/indexer.rb +1 -22
  254. data/lib/rubygems/install_update_options.rb +7 -7
  255. data/lib/rubygems/installer.rb +59 -80
  256. data/lib/rubygems/installer_test_case.rb +25 -11
  257. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  258. data/lib/rubygems/local_remote_options.rb +1 -1
  259. data/lib/rubygems/mock_gem_ui.rb +0 -6
  260. data/lib/rubygems/name_tuple.rb +3 -7
  261. data/lib/rubygems/openssl.rb +7 -0
  262. data/lib/rubygems/package.rb +14 -25
  263. data/lib/rubygems/package/digest_io.rb +0 -2
  264. data/lib/rubygems/package/file_source.rb +0 -2
  265. data/lib/rubygems/package/io_source.rb +0 -2
  266. data/lib/rubygems/package/old.rb +1 -3
  267. data/lib/rubygems/package/tar_header.rb +4 -6
  268. data/lib/rubygems/package/tar_reader.rb +0 -3
  269. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  270. data/lib/rubygems/package/tar_test_case.rb +2 -4
  271. data/lib/rubygems/package/tar_writer.rb +2 -12
  272. data/lib/rubygems/package_task.rb +1 -7
  273. data/lib/rubygems/path_support.rb +1 -3
  274. data/lib/rubygems/platform.rb +21 -12
  275. data/lib/rubygems/psych_tree.rb +0 -2
  276. data/lib/rubygems/query_utils.rb +353 -0
  277. data/lib/rubygems/rdoc.rb +0 -12
  278. data/lib/rubygems/remote_fetcher.rb +11 -28
  279. data/lib/rubygems/request.rb +4 -11
  280. data/lib/rubygems/request/connection_pools.rb +1 -5
  281. data/lib/rubygems/request/http_pool.rb +0 -2
  282. data/lib/rubygems/request/https_pool.rb +0 -2
  283. data/lib/rubygems/request_set.rb +7 -20
  284. data/lib/rubygems/request_set/gem_dependency_api.rb +6 -8
  285. data/lib/rubygems/request_set/lockfile.rb +8 -12
  286. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  287. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  288. data/lib/rubygems/requirement.rb +20 -21
  289. data/lib/rubygems/resolver.rb +14 -12
  290. data/lib/rubygems/resolver/activation_request.rb +9 -3
  291. data/lib/rubygems/resolver/api_set.rb +31 -24
  292. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  293. data/lib/rubygems/resolver/api_specification.rb +24 -10
  294. data/lib/rubygems/resolver/best_set.rb +1 -3
  295. data/lib/rubygems/resolver/composed_set.rb +3 -5
  296. data/lib/rubygems/resolver/conflict.rb +2 -4
  297. data/lib/rubygems/resolver/current_set.rb +0 -2
  298. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  299. data/lib/rubygems/resolver/git_set.rb +0 -2
  300. data/lib/rubygems/resolver/git_specification.rb +0 -2
  301. data/lib/rubygems/resolver/index_set.rb +1 -3
  302. data/lib/rubygems/resolver/index_specification.rb +26 -2
  303. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  304. data/lib/rubygems/resolver/installer_set.rb +60 -13
  305. data/lib/rubygems/resolver/local_specification.rb +0 -2
  306. data/lib/rubygems/resolver/lock_set.rb +2 -4
  307. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  308. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  309. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  310. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  327. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  328. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  329. data/lib/rubygems/resolver/set.rb +0 -2
  330. data/lib/rubygems/resolver/source_set.rb +0 -2
  331. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  332. data/lib/rubygems/resolver/specification.rb +13 -3
  333. data/lib/rubygems/resolver/stats.rb +0 -2
  334. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  335. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  336. data/lib/rubygems/s3_uri_signer.rb +2 -8
  337. data/lib/rubygems/safe_yaml.rb +4 -4
  338. data/lib/rubygems/security.rb +27 -34
  339. data/lib/rubygems/security/policy.rb +4 -8
  340. data/lib/rubygems/security/signer.rb +5 -7
  341. data/lib/rubygems/security/trust_dir.rb +1 -3
  342. data/lib/rubygems/server.rb +16 -13
  343. data/lib/rubygems/source.rb +23 -12
  344. data/lib/rubygems/source/git.rb +7 -8
  345. data/lib/rubygems/source/installed.rb +0 -2
  346. data/lib/rubygems/source/local.rb +2 -4
  347. data/lib/rubygems/source/lock.rb +0 -2
  348. data/lib/rubygems/source/specific_file.rb +0 -2
  349. data/lib/rubygems/source/vendor.rb +0 -2
  350. data/lib/rubygems/source_list.rb +4 -7
  351. data/lib/rubygems/spec_fetcher.rb +19 -18
  352. data/lib/rubygems/specification.rb +113 -126
  353. data/lib/rubygems/specification_policy.rb +88 -30
  354. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  355. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  356. data/lib/rubygems/stub_specification.rb +1 -5
  357. data/lib/rubygems/syck_hack.rb +0 -2
  358. data/lib/rubygems/test_case.rb +105 -132
  359. data/lib/rubygems/test_utilities.rb +12 -19
  360. data/lib/rubygems/uninstaller.rb +35 -16
  361. data/lib/rubygems/uri_formatter.rb +2 -3
  362. data/lib/rubygems/uri_parser.rb +0 -2
  363. data/lib/rubygems/user_interaction.rb +1 -26
  364. data/lib/rubygems/util.rb +15 -3
  365. data/lib/rubygems/util/licenses.rb +4 -6
  366. data/lib/rubygems/util/list.rb +0 -2
  367. data/lib/rubygems/validator.rb +1 -3
  368. data/lib/rubygems/version.rb +5 -7
  369. data/lib/rubygems/version_option.rb +6 -0
  370. data/rubygems-update.gemspec +2 -2
  371. data/setup.rb +2 -7
  372. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  373. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  374. data/test/rubygems/rubygems_plugin.rb +0 -2
  375. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  376. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  377. data/test/rubygems/test_bundled_ca.rb +42 -45
  378. data/test/rubygems/test_config.rb +0 -2
  379. data/test/rubygems/test_deprecate.rb +40 -7
  380. data/test/rubygems/test_gem.rb +151 -99
  381. data/test/rubygems/test_gem_available_set.rb +3 -5
  382. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  383. data/test/rubygems/test_gem_command.rb +24 -7
  384. data/test/rubygems/test_gem_command_manager.rb +36 -5
  385. data/test/rubygems/test_gem_commands_build_command.rb +250 -15
  386. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  387. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  388. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  389. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  390. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  391. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  392. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  393. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  394. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  395. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  396. data/test/rubygems/test_gem_commands_install_command.rb +163 -34
  397. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  398. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  399. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  400. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  401. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  402. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  403. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  404. data/test/rubygems/test_gem_commands_push_command.rb +77 -9
  405. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  406. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  407. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  408. data/test/rubygems/test_gem_commands_setup_command.rb +165 -124
  409. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  410. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  411. data/test/rubygems/test_gem_commands_sources_command.rb +99 -3
  412. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  413. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  414. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  415. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  416. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  417. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  418. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  419. data/test/rubygems/test_gem_config_file.rb +7 -12
  420. data/test/rubygems/test_gem_dependency.rb +0 -2
  421. data/test/rubygems/test_gem_dependency_installer.rb +90 -193
  422. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  423. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  424. data/test/rubygems/test_gem_doctor.rb +28 -2
  425. data/test/rubygems/test_gem_ext_builder.rb +26 -47
  426. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
  427. data/test/rubygems/test_gem_ext_configure_builder.rb +4 -20
  428. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  429. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -24
  430. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  431. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  432. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  433. data/test/rubygems/test_gem_indexer.rb +9 -15
  434. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  435. data/test/rubygems/test_gem_installer.rb +258 -115
  436. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  437. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  438. data/test/rubygems/test_gem_package.rb +41 -39
  439. data/test/rubygems/test_gem_package_old.rb +4 -6
  440. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  441. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  442. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  443. data/test/rubygems/test_gem_package_tar_writer.rb +9 -6
  444. data/test/rubygems/test_gem_package_task.rb +46 -13
  445. data/test/rubygems/test_gem_path_support.rb +0 -2
  446. data/test/rubygems/test_gem_platform.rb +63 -6
  447. data/test/rubygems/test_gem_rdoc.rb +0 -2
  448. data/test/rubygems/test_gem_remote_fetcher.rb +168 -211
  449. data/test/rubygems/test_gem_request.rb +13 -17
  450. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  451. data/test/rubygems/test_gem_request_set.rb +72 -22
  452. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  453. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  454. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  455. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  456. data/test/rubygems/test_gem_requirement.rb +10 -4
  457. data/test/rubygems/test_gem_resolver.rb +6 -8
  458. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  459. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  460. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  461. data/test/rubygems/test_gem_resolver_best_set.rb +5 -7
  462. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  463. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  464. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  465. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  466. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  467. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  468. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  469. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  470. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  471. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  472. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  473. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  474. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  475. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  476. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  477. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  478. data/test/rubygems/test_gem_security.rb +22 -24
  479. data/test/rubygems/test_gem_security_policy.rb +7 -12
  480. data/test/rubygems/test_gem_security_signer.rb +10 -12
  481. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  482. data/test/rubygems/test_gem_server.rb +10 -14
  483. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  484. data/test/rubygems/test_gem_source.rb +19 -18
  485. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  486. data/test/rubygems/test_gem_source_git.rb +12 -13
  487. data/test/rubygems/test_gem_source_installed.rb +7 -9
  488. data/test/rubygems/test_gem_source_list.rb +1 -2
  489. data/test/rubygems/test_gem_source_local.rb +8 -10
  490. data/test/rubygems/test_gem_source_lock.rb +10 -12
  491. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  492. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  493. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  494. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  495. data/test/rubygems/test_gem_specification.rb +182 -131
  496. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  497. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  498. data/test/rubygems/test_gem_text.rb +1 -3
  499. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  500. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  501. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  502. data/test/rubygems/test_gem_util.rb +7 -7
  503. data/test/rubygems/test_gem_validator.rb +1 -3
  504. data/test/rubygems/test_gem_version.rb +1 -3
  505. data/test/rubygems/test_gem_version_option.rb +1 -3
  506. data/test/rubygems/test_kernel.rb +25 -10
  507. data/test/rubygems/test_project_sanity.rb +7 -2
  508. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  509. data/test/rubygems/test_require.rb +291 -56
  510. data/test/test_changelog_generator.rb +17 -0
  511. metadata +65 -96
  512. data/.bundle/config +0 -2
  513. data/.rubocop.yml +0 -91
  514. data/Gemfile +0 -8
  515. data/Gemfile.lock +0 -43
  516. data/bundler/CODE_OF_CONDUCT.md +0 -136
  517. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  518. data/bundler/man/bundle-add.1.txt +0 -58
  519. data/bundler/man/bundle-binstubs.1.txt +0 -48
  520. data/bundler/man/bundle-cache.1.txt +0 -78
  521. data/bundler/man/bundle-check.1.txt +0 -33
  522. data/bundler/man/bundle-clean.1.txt +0 -26
  523. data/bundler/man/bundle-config.1.txt +0 -528
  524. data/bundler/man/bundle-doctor.1.txt +0 -44
  525. data/bundler/man/bundle-exec.1.txt +0 -178
  526. data/bundler/man/bundle-gem.1.txt +0 -91
  527. data/bundler/man/bundle-info.1.txt +0 -21
  528. data/bundler/man/bundle-init.1.txt +0 -34
  529. data/bundler/man/bundle-inject.1.txt +0 -32
  530. data/bundler/man/bundle-install.1.txt +0 -401
  531. data/bundler/man/bundle-list.1.txt +0 -43
  532. data/bundler/man/bundle-lock.1.txt +0 -93
  533. data/bundler/man/bundle-open.1.txt +0 -29
  534. data/bundler/man/bundle-outdated.1.txt +0 -131
  535. data/bundler/man/bundle-platform.1.txt +0 -57
  536. data/bundler/man/bundle-pristine.1.txt +0 -44
  537. data/bundler/man/bundle-remove.1.txt +0 -34
  538. data/bundler/man/bundle-show.1.txt +0 -27
  539. data/bundler/man/bundle-update.1.txt +0 -390
  540. data/bundler/man/bundle-viz.1.txt +0 -39
  541. data/bundler/man/bundle.1.txt +0 -116
  542. data/bundler/man/gemfile.5.txt +0 -649
  543. data/lib/rubygems/source_local.rb +0 -7
  544. data/lib/rubygems/source_specific_file.rb +0 -6
  545. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  546. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  547. data/lib/ubygems.rb +0 -14
  548. data/tmp/.keep +0 -0
  549. data/util/CL2notes +0 -55
  550. data/util/bisect +0 -10
  551. data/util/ci.sh +0 -62
  552. data/util/cops/deprecations.rb +0 -52
  553. data/util/create_certs.rb +0 -171
  554. data/util/create_certs.sh +0 -27
  555. data/util/create_encrypted_key.rb +0 -16
  556. data/util/generate_spdx_license_list.rb +0 -63
  557. data/util/patch_with_prs.rb +0 -77
  558. data/util/rubocop +0 -8
  559. data/util/update_bundled_ca_certificates.rb +0 -139
  560. data/util/update_changelog.rb +0 -67
@@ -9,7 +9,6 @@ require 'rubygems/name_tuple'
9
9
  # SpecFetcher handles metadata updates from remote gem repositories.
10
10
 
11
11
  class Gem::SpecFetcher
12
-
13
12
  include Gem::UserInteraction
14
13
  include Gem::Text
15
14
 
@@ -92,14 +91,14 @@ class Gem::SpecFetcher
92
91
 
93
92
  list.each do |source, specs|
94
93
  if dependency.name.is_a?(String) && specs.respond_to?(:bsearch)
95
- start_index = (0 ... specs.length).bsearch{ |i| specs[i].name >= dependency.name }
96
- end_index = (0 ... specs.length).bsearch{ |i| specs[i].name > dependency.name }
94
+ start_index = (0 ... specs.length).bsearch{|i| specs[i].name >= dependency.name }
95
+ end_index = (0 ... specs.length).bsearch{|i| specs[i].name > dependency.name }
97
96
  specs = specs[start_index ... end_index] if start_index && end_index
98
97
  end
99
98
 
100
99
  found[source] = specs.select do |tup|
101
100
  if dependency.match?(tup)
102
- if matching_platform and !Gem::Platform.match(tup.platform)
101
+ if matching_platform and !Gem::Platform.match_gem?(tup.platform, tup.name)
103
102
  pm = (
104
103
  rejected_specs[dependency] ||= \
105
104
  Gem::PlatformMismatch.new(tup.name, tup.version))
@@ -122,7 +121,7 @@ class Gem::SpecFetcher
122
121
  end
123
122
  end
124
123
 
125
- tuples = tuples.sort_by { |x| x[0] }
124
+ tuples = tuples.sort_by {|x| x[0] }
126
125
 
127
126
  return [tuples, errors]
128
127
  end
@@ -171,30 +170,33 @@ class Gem::SpecFetcher
171
170
  # Suggests gems based on the supplied +gem_name+. Returns an array of
172
171
  # alternative gem names.
173
172
 
174
- def suggest_gems_from_name(gem_name, type = :latest)
173
+ def suggest_gems_from_name(gem_name, type = :latest, num_results = 5)
175
174
  gem_name = gem_name.downcase.tr('_-', '')
176
175
  max = gem_name.size / 2
177
176
  names = available_specs(type).first.values.flatten(1)
178
177
 
179
178
  matches = names.map do |n|
180
179
  next unless n.match_platform?
181
-
182
- distance = levenshtein_distance gem_name, n.name.downcase.tr('_-', '')
183
-
184
- next if distance >= max
185
-
186
- return [n.name] if distance == 0
187
-
188
- [n.name, distance]
180
+ [n.name, 0] if n.name.downcase.tr('_-', '').include?(gem_name)
189
181
  end.compact
190
182
 
183
+ if matches.length < num_results
184
+ matches += names.map do |n|
185
+ next unless n.match_platform?
186
+ distance = levenshtein_distance gem_name, n.name.downcase.tr('_-', '')
187
+ next if distance >= max
188
+ return [n.name] if distance == 0
189
+ [n.name, distance]
190
+ end.compact
191
+ end
192
+
191
193
  matches = if matches.empty? && type != :prerelease
192
194
  suggest_gems_from_name gem_name, :prerelease
193
195
  else
194
- matches.uniq.sort_by { |name, dist| dist }
196
+ matches.uniq.sort_by {|name, dist| dist }
195
197
  end
196
198
 
197
- matches.first(5).map { |name, dist| name }
199
+ matches.map {|name, dist| name }.uniq.first(num_results)
198
200
  end
199
201
 
200
202
  ##
@@ -251,10 +253,9 @@ class Gem::SpecFetcher
251
253
 
252
254
  def tuples_for(source, type, gracefully_ignore=false) # :nodoc:
253
255
  @caches[type][source.uri] ||=
254
- source.load_specs(type).sort_by { |tup| tup.name }
256
+ source.load_specs(type).sort_by {|tup| tup.name }
255
257
  rescue Gem::RemoteFetcher::FetchError
256
258
  raise unless gracefully_ignore
257
259
  []
258
260
  end
259
-
260
261
  end
@@ -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,8 +176,8 @@ 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
@@ -193,6 +189,12 @@ class Gem::Specification < Gem::BasicSpecification
193
189
  @@spec_with_requirable_file = {}
194
190
  @@active_stub_with_requirable_file = {}
195
191
 
192
+ # Tracking removed method calls to warn users during build time.
193
+ REMOVED_METHODS = [:rubyforge_project=].freeze # :nodoc:
194
+ def removed_method_calls
195
+ @removed_method_calls ||= []
196
+ end
197
+
196
198
  ######################################################################
197
199
  # :section: Required gemspec attributes
198
200
 
@@ -243,12 +245,11 @@ class Gem::Specification < Gem::BasicSpecification
243
245
  # require 'rake'
244
246
  # spec.files = FileList['lib/**/*.rb',
245
247
  # 'bin/*',
246
- # '[A-Z]*',
247
- # 'test/**/*'].to_a
248
+ # '[A-Z]*'].to_a
248
249
  #
249
250
  # # or without Rake...
250
251
  # spec.files = Dir['lib/**/*.rb'] + Dir['bin/*']
251
- # spec.files += Dir['[A-Z]*'] + Dir['test/**/*']
252
+ # spec.files += Dir['[A-Z]*']
252
253
  # spec.files.reject! { |fn| fn.include? "CVS" }
253
254
 
254
255
  def files
@@ -384,6 +385,7 @@ class Gem::Specification < Gem::BasicSpecification
384
385
  # "mailing_list_uri" => "https://groups.example.com/bestgemever",
385
386
  # "source_code_uri" => "https://example.com/user/bestgemever",
386
387
  # "wiki_uri" => "https://example.com/user/bestgemever/wiki"
388
+ # "funding_uri" => "https://example.com/donate"
387
389
  # }
388
390
  #
389
391
  # These links will be used on your gem's page on rubygems.org and must pass
@@ -554,6 +556,10 @@ class Gem::Specification < Gem::BasicSpecification
554
556
  # spec.add_runtime_dependency 'example', '~> 1.1', '>= 1.1.4'
555
557
 
556
558
  def add_runtime_dependency(gem, *requirements)
559
+ if requirements.uniq.size != requirements.size
560
+ warn "WARNING: duplicated #{gem} dependency #{requirements}"
561
+ end
562
+
557
563
  add_dependency_with_type(gem, :runtime, requirements)
558
564
  end
559
565
 
@@ -719,21 +725,13 @@ class Gem::Specification < Gem::BasicSpecification
719
725
  # Deprecated: You must now specify the executable name to Gem.bin_path.
720
726
 
721
727
  attr_writer :default_executable
722
- deprecate :default_executable=, :none, 2018, 12
728
+ rubygems_deprecate :default_executable=
723
729
 
724
730
  ##
725
731
  # Allows deinstallation of gems with legacy platforms.
726
732
 
727
733
  attr_writer :original_platform # :nodoc:
728
734
 
729
- ##
730
- # Deprecated and ignored.
731
- #
732
- # Formerly used to set rubyforge project.
733
-
734
- attr_writer :rubyforge_project
735
- deprecate :rubyforge_project=, :none, 2019, 12
736
-
737
735
  ##
738
736
  # The Gem::Specification version of this gemspec.
739
737
  #
@@ -748,8 +746,8 @@ class Gem::Specification < Gem::BasicSpecification
748
746
  # After a reset, make sure already loaded specs
749
747
  # are still marked as activated.
750
748
  specs = {}
751
- Gem.loaded_specs.each_value{|s| specs[s] = true}
752
- @@all.each{|s| s.activated = true if specs[s]}
749
+ Gem.loaded_specs.each_value{|s| specs[s] = true }
750
+ @@all.each{|s| s.activated = true if specs[s] }
753
751
  end
754
752
  @@all
755
753
  end
@@ -769,7 +767,7 @@ class Gem::Specification < Gem::BasicSpecification
769
767
  end
770
768
 
771
769
  def self.gemspec_stubs_in(dir, pattern)
772
- Gem::Util.glob_files_in_dir(pattern, dir).map { |path| yield path }.select(&:valid?)
770
+ Gem::Util.glob_files_in_dir(pattern, dir).map {|path| yield path }.select(&:valid?)
773
771
  end
774
772
  private_class_method :gemspec_stubs_in
775
773
 
@@ -784,21 +782,11 @@ class Gem::Specification < Gem::BasicSpecification
784
782
  dirs.flat_map do |dir|
785
783
  base_dir = File.dirname dir
786
784
  gems_dir = File.join base_dir, "gems"
787
- gemspec_stubs_in(dir, pattern) { |path| yield path, base_dir, gems_dir }
785
+ gemspec_stubs_in(dir, pattern) {|path| yield path, base_dir, gems_dir }
788
786
  end
789
787
  end
790
788
  private_class_method :map_stubs
791
789
 
792
- def self.uniq_by(list, &block) # :nodoc:
793
- list.uniq(&block)
794
- end
795
- private_class_method :uniq_by
796
-
797
- def self.sort_by!(list, &block)
798
- list.sort_by!(&block)
799
- end
800
- private_class_method :sort_by!
801
-
802
790
  def self.each_spec(dirs) # :nodoc:
803
791
  each_gemspec(dirs) do |path|
804
792
  spec = self.load path
@@ -812,11 +800,11 @@ class Gem::Specification < Gem::BasicSpecification
812
800
  def self.stubs
813
801
  @@stubs ||= begin
814
802
  pattern = "*.gemspec"
815
- stubs = Gem.loaded_specs.values + installed_stubs(dirs, pattern) + default_stubs(pattern)
816
- stubs = uniq_by(stubs) { |stub| stub.full_name }
803
+ stubs = installed_stubs(dirs, pattern) + default_stubs(pattern)
804
+ stubs = stubs.uniq {|stub| stub.full_name }
817
805
 
818
806
  _resort!(stubs)
819
- @@stubs_by_name = stubs.select { |s| Gem::Platform.match s.platform }.group_by(&:name)
807
+ @@stubs_by_name = stubs.select {|s| Gem::Platform.match_spec? s }.group_by(&:name)
820
808
  stubs
821
809
  end
822
810
  end
@@ -839,15 +827,13 @@ class Gem::Specification < Gem::BasicSpecification
839
827
  # only returns stubs that match Gem.platforms
840
828
 
841
829
  def self.stubs_for(name)
842
- if @@stubs
843
- @@stubs_by_name[name] || []
830
+ if @@stubs_by_name[name]
831
+ @@stubs_by_name[name]
844
832
  else
845
833
  pattern = "#{name}-*.gemspec"
846
- stubs = Gem.loaded_specs.values +
847
- installed_stubs(dirs, pattern).select { |s| Gem::Platform.match s.platform } +
848
- default_stubs(pattern)
849
- stubs = uniq_by(stubs) { |stub| stub.full_name }.group_by(&:name)
850
- stubs.each_value { |v| _resort!(v) }
834
+ stubs = installed_stubs(dirs, pattern).select {|s| Gem::Platform.match_spec? s } + default_stubs(pattern)
835
+ stubs = stubs.uniq {|stub| stub.full_name }.group_by(&:name)
836
+ stubs.each_value {|v| _resort!(v) }
851
837
 
852
838
  @@stubs_by_name.merge! stubs
853
839
  @@stubs_by_name[name] ||= EMPTY
@@ -941,7 +927,7 @@ class Gem::Specification < Gem::BasicSpecification
941
927
  def self.dirs=(dirs)
942
928
  self.reset
943
929
 
944
- @@dirs = Array(dirs).map { |dir| File.join dir, "specifications" }
930
+ @@dirs = Array(dirs).map {|dir| File.join dir, "specifications" }
945
931
  end
946
932
 
947
933
  extend Enumerable
@@ -1024,10 +1010,7 @@ class Gem::Specification < Gem::BasicSpecification
1024
1010
  # Return currently unresolved specs that contain the file matching +path+.
1025
1011
 
1026
1012
  def self.find_in_unresolved(path)
1027
- # TODO: do we need these?? Kill it
1028
- specs = unresolved_deps.values.map { |dep| dep.to_specs }.flatten
1029
-
1030
- specs.find_all { |spec| spec.contains_requirable_file? path }
1013
+ unresolved_specs.find_all {|spec| spec.contains_requirable_file? path }
1031
1014
  end
1032
1015
 
1033
1016
  ##
@@ -1035,9 +1018,7 @@ class Gem::Specification < Gem::BasicSpecification
1035
1018
  # specs that contain the file matching +path+.
1036
1019
 
1037
1020
  def self.find_in_unresolved_tree(path)
1038
- specs = unresolved_deps.values.map { |dep| dep.to_specs }.flatten
1039
-
1040
- specs.each do |spec|
1021
+ unresolved_specs.each do |spec|
1041
1022
  spec.traverse do |from_spec, dep, to_spec, trail|
1042
1023
  if to_spec.has_conflicts? || to_spec.conficts_when_loaded_with?(trail)
1043
1024
  :next
@@ -1050,6 +1031,11 @@ class Gem::Specification < Gem::BasicSpecification
1050
1031
  []
1051
1032
  end
1052
1033
 
1034
+ def self.unresolved_specs
1035
+ unresolved_deps.values.map {|dep| dep.to_specs }.flatten
1036
+ end
1037
+ private_class_method :unresolved_specs
1038
+
1053
1039
  ##
1054
1040
  # Special loader for YAML files. When a Specification object is loaded
1055
1041
  # from a YAML file, it bypasses the normal Ruby object initialization
@@ -1086,8 +1072,15 @@ class Gem::Specification < Gem::BasicSpecification
1086
1072
  _latest_specs Gem::Specification._all, prerelease
1087
1073
  end
1088
1074
 
1075
+ ##
1076
+ # Return the latest installed spec for gem +name+.
1077
+
1078
+ def self.latest_spec_for(name)
1079
+ latest_specs(true).find {|installed_spec| installed_spec.name == name }
1080
+ end
1081
+
1089
1082
  def self._latest_specs(specs, prerelease = false) # :nodoc:
1090
- result = Hash.new { |h,k| h[k] = {} }
1083
+ result = Hash.new {|h,k| h[k] = {} }
1091
1084
  native = {}
1092
1085
 
1093
1086
  specs.reverse_each do |spec|
@@ -1100,7 +1093,7 @@ class Gem::Specification < Gem::BasicSpecification
1100
1093
  result.map(&:last).map(&:values).flatten.reject do |spec|
1101
1094
  minimum = native[spec.name]
1102
1095
  minimum && spec.version < minimum
1103
- end.sort_by{ |tup| tup.name }
1096
+ end.sort_by{|tup| tup.name }
1104
1097
  end
1105
1098
 
1106
1099
  ##
@@ -1157,7 +1150,7 @@ class Gem::Specification < Gem::BasicSpecification
1157
1150
 
1158
1151
  def self.normalize_yaml_input(input)
1159
1152
  result = input.respond_to?(:read) ? input.read : input
1160
- result = "--- " + result unless result =~ /\A--- /
1153
+ result = "--- " + result unless result.start_with?("--- ")
1161
1154
  result = result.dup
1162
1155
  result.gsub!(/ !!null \n/, " \n")
1163
1156
  # date: 2011-04-26 00:00:00.000000000Z
@@ -1174,7 +1167,7 @@ class Gem::Specification < Gem::BasicSpecification
1174
1167
  # version as well.
1175
1168
 
1176
1169
  def self.outdated
1177
- outdated_and_latest_version.map { |local, _| local.name }
1170
+ outdated_and_latest_version.map {|local, _| local.name }
1178
1171
  end
1179
1172
 
1180
1173
  ##
@@ -1195,7 +1188,7 @@ class Gem::Specification < Gem::BasicSpecification
1195
1188
  Gem::Dependency.new local_spec.name, ">= #{local_spec.version}"
1196
1189
 
1197
1190
  remotes, = fetcher.search_for_dependency dependency
1198
- remotes = remotes.map { |n, _| n.version }
1191
+ remotes = remotes.map {|n, _| n.version }
1199
1192
 
1200
1193
  latest_remote = remotes.sort.last
1201
1194
 
@@ -1226,7 +1219,7 @@ class Gem::Specification < Gem::BasicSpecification
1226
1219
 
1227
1220
  def self.reset
1228
1221
  @@dirs = nil
1229
- Gem.pre_reset_hooks.each { |hook| hook.call }
1222
+ Gem.pre_reset_hooks.each {|hook| hook.call }
1230
1223
  @@all = nil
1231
1224
  @@stubs = nil
1232
1225
  @@stubs_by_name = {}
@@ -1243,19 +1236,19 @@ class Gem::Specification < Gem::BasicSpecification
1243
1236
  versions = find_all_by_name(dep.name)
1244
1237
  unless versions.empty?
1245
1238
  warn " Available/installed versions of this gem:"
1246
- versions.each { |s| warn " - #{s.version}" }
1239
+ versions.each {|s| warn " - #{s.version}" }
1247
1240
  end
1248
1241
  end
1249
1242
  warn "#{w}: Clearing out unresolved specs. Try 'gem cleanup <gem>'"
1250
1243
  warn "Please report a bug if this causes problems."
1251
1244
  unresolved.clear
1252
1245
  end
1253
- Gem.post_reset_hooks.each { |hook| hook.call }
1246
+ Gem.post_reset_hooks.each {|hook| hook.call }
1254
1247
  end
1255
1248
 
1256
1249
  # DOC: This method needs documented or nodoc'd
1257
1250
  def self.unresolved_deps
1258
- @unresolved_deps ||= Hash.new { |h, n| h[n] = Gem::Dependency.new n }
1251
+ @unresolved_deps ||= Hash.new {|h, n| h[n] = Gem::Dependency.new n }
1259
1252
  end
1260
1253
 
1261
1254
  ##
@@ -1286,7 +1279,7 @@ class Gem::Specification < Gem::BasicSpecification
1286
1279
  # Cleanup any YAML::PrivateType. They only show up for an old bug
1287
1280
  # where nil => null, so just convert them to nil based on the type.
1288
1281
 
1289
- array.map! { |e| e.kind_of?(YAML::PrivateType) ? nil : e }
1282
+ array.map! {|e| e.kind_of?(YAML::PrivateType) ? nil : e }
1290
1283
 
1291
1284
  spec.instance_variable_set :@rubygems_version, array[0]
1292
1285
  # spec version
@@ -1351,7 +1344,7 @@ class Gem::Specification < Gem::BasicSpecification
1351
1344
  true, # has_rdoc
1352
1345
  @new_platform,
1353
1346
  @licenses,
1354
- @metadata
1347
+ @metadata,
1355
1348
  ]
1356
1349
  end
1357
1350
 
@@ -1399,7 +1392,11 @@ class Gem::Specification < Gem::BasicSpecification
1399
1392
  raise e
1400
1393
  end
1401
1394
 
1402
- specs = spec_dep.to_specs
1395
+ begin
1396
+ specs = spec_dep.to_specs
1397
+ rescue Gem::MissingSpecError => e
1398
+ raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{self.spec_file}")
1399
+ end
1403
1400
 
1404
1401
  if specs.size == 1
1405
1402
  specs.first.activate
@@ -1435,7 +1432,7 @@ class Gem::Specification < Gem::BasicSpecification
1435
1432
  self.summary = sanitize_string(summary)
1436
1433
  self.description = sanitize_string(description)
1437
1434
  self.post_install_message = sanitize_string(post_install_message)
1438
- self.authors = authors.collect { |a| sanitize_string(a) }
1435
+ self.authors = authors.collect {|a| sanitize_string(a) }
1439
1436
  end
1440
1437
 
1441
1438
  ##
@@ -1447,13 +1444,7 @@ class Gem::Specification < Gem::BasicSpecification
1447
1444
  # HACK the #to_s is in here because RSpec has an Array of Arrays of
1448
1445
  # Strings for authors. Need a way to disallow bad values on gemspec
1449
1446
  # generation. (Probably won't happen.)
1450
- string = string.to_s
1451
-
1452
- begin
1453
- Builder::XChar.encode string
1454
- rescue NameError, NoMethodError
1455
- string.to_xs
1456
- end
1447
+ string.to_s
1457
1448
  end
1458
1449
 
1459
1450
  ##
@@ -1464,7 +1455,7 @@ class Gem::Specification < Gem::BasicSpecification
1464
1455
  return nil if executables.nil?
1465
1456
 
1466
1457
  if @bindir
1467
- Array(executables).map { |e| File.join(@bindir, e) }
1458
+ Array(executables).map {|e| File.join(@bindir, e) }
1468
1459
  else
1469
1460
  executables
1470
1461
  end
@@ -1546,7 +1537,7 @@ class Gem::Specification < Gem::BasicSpecification
1546
1537
  def build_args
1547
1538
  if File.exist? build_info_file
1548
1539
  build_info = File.readlines build_info_file
1549
- build_info = build_info.map { |x| x.strip }
1540
+ build_info = build_info.map {|x| x.strip }
1550
1541
  build_info.delete ""
1551
1542
  build_info
1552
1543
  else
@@ -1638,7 +1629,7 @@ class Gem::Specification < Gem::BasicSpecification
1638
1629
 
1639
1630
  def conficts_when_loaded_with?(list_of_specs) # :nodoc:
1640
1631
  result = list_of_specs.any? do |spec|
1641
- spec.dependencies.any? { |dep| dep.runtime? && (dep.name == name) && !satisfies_requirement?(dep) }
1632
+ spec.dependencies.any? {|dep| dep.runtime? && (dep.name == name) && !satisfies_requirement?(dep) }
1642
1633
  end
1643
1634
  result
1644
1635
  end
@@ -1727,7 +1718,7 @@ class Gem::Specification < Gem::BasicSpecification
1727
1718
  end
1728
1719
  result
1729
1720
  end
1730
- deprecate :default_executable, :none, 2018, 12
1721
+ rubygems_deprecate :default_executable
1731
1722
 
1732
1723
  ##
1733
1724
  # The default value for specification attribute +name+
@@ -1752,10 +1743,11 @@ class Gem::Specification < Gem::BasicSpecification
1752
1743
  #
1753
1744
  # [depending_gem, dependency, [list_of_gems_that_satisfy_dependency]]
1754
1745
 
1755
- def dependent_gems
1746
+ def dependent_gems(check_dev=true)
1756
1747
  out = []
1757
1748
  Gem::Specification.each do |spec|
1758
- spec.dependencies.each do |dep|
1749
+ deps = check_dev ? spec.dependencies : spec.runtime_dependencies
1750
+ deps.each do |dep|
1759
1751
  if self.satisfies_requirement?(dep)
1760
1752
  sats = []
1761
1753
  find_all_satisfiers(dep) do |sat|
@@ -1772,7 +1764,7 @@ class Gem::Specification < Gem::BasicSpecification
1772
1764
  # Returns all specs that matches this spec's runtime dependencies.
1773
1765
 
1774
1766
  def dependent_specs
1775
- runtime_dependencies.map { |dep| dep.to_specs }.flatten
1767
+ runtime_dependencies.map {|dep| dep.to_specs }.flatten
1776
1768
  end
1777
1769
 
1778
1770
  ##
@@ -1786,7 +1778,7 @@ class Gem::Specification < Gem::BasicSpecification
1786
1778
  # List of dependencies that are used for development
1787
1779
 
1788
1780
  def development_dependencies
1789
- dependencies.select { |d| d.type == :development }
1781
+ dependencies.select {|d| d.type == :development }
1790
1782
  end
1791
1783
 
1792
1784
  ##
@@ -1847,29 +1839,23 @@ class Gem::Specification < Gem::BasicSpecification
1847
1839
  end
1848
1840
 
1849
1841
  ##
1850
- # Sets executables to +value+, ensuring it is an array. Don't
1851
- # use this, push onto the array instead.
1842
+ # Sets executables to +value+, ensuring it is an array.
1852
1843
 
1853
1844
  def executables=(value)
1854
- # TODO: warn about setting instead of pushing
1855
1845
  @executables = Array(value)
1856
1846
  end
1857
1847
 
1858
1848
  ##
1859
- # Sets extensions to +extensions+, ensuring it is an array. Don't
1860
- # use this, push onto the array instead.
1849
+ # Sets extensions to +extensions+, ensuring it is an array.
1861
1850
 
1862
1851
  def extensions=(extensions)
1863
- # TODO: warn about setting instead of pushing
1864
1852
  @extensions = Array extensions
1865
1853
  end
1866
1854
 
1867
1855
  ##
1868
- # Sets extra_rdoc_files to +files+, ensuring it is an array. Don't
1869
- # use this, push onto the array instead.
1856
+ # Sets extra_rdoc_files to +files+, ensuring it is an array.
1870
1857
 
1871
1858
  def extra_rdoc_files=(files)
1872
- # TODO: warn about setting instead of pushing
1873
1859
  @extra_rdoc_files = Array files
1874
1860
  end
1875
1861
 
@@ -1935,7 +1921,7 @@ class Gem::Specification < Gem::BasicSpecification
1935
1921
  def has_rdoc # :nodoc:
1936
1922
  true
1937
1923
  end
1938
- deprecate :has_rdoc, :none, 2018, 12
1924
+ rubygems_deprecate :has_rdoc
1939
1925
 
1940
1926
  ##
1941
1927
  # Deprecated and ignored.
@@ -1945,10 +1931,10 @@ class Gem::Specification < Gem::BasicSpecification
1945
1931
  def has_rdoc=(ignored) # :nodoc:
1946
1932
  @has_rdoc = true
1947
1933
  end
1948
- deprecate :has_rdoc=, :none, 2018, 12
1934
+ rubygems_deprecate :has_rdoc=
1949
1935
 
1950
1936
  alias :has_rdoc? :has_rdoc # :nodoc:
1951
- deprecate :has_rdoc?, :none, 2018, 12
1937
+ rubygems_deprecate :has_rdoc?
1952
1938
 
1953
1939
  ##
1954
1940
  # True if this gem has files in test_files
@@ -1970,7 +1956,9 @@ class Gem::Specification < Gem::BasicSpecification
1970
1956
  yaml_initialize coder.tag, coder.map
1971
1957
  end
1972
1958
 
1973
- eval <<-RB, binding, __FILE__, __LINE__ + 1
1959
+ eval <<-RUBY, binding, __FILE__, __LINE__ + 1
1960
+ # frozen_string_literal: true
1961
+
1974
1962
  def set_nil_attributes_to_nil
1975
1963
  #{@@nil_attributes.map {|key| "@#{key} = nil" }.join "; "}
1976
1964
  end
@@ -1980,7 +1968,7 @@ class Gem::Specification < Gem::BasicSpecification
1980
1968
  #{@@non_nil_attributes.map {|key| "@#{key} = #{INITIALIZE_CODE_FOR_DEFAULTS[key]}" }.join ";"}
1981
1969
  end
1982
1970
  private :set_not_nil_attributes_to_default_values
1983
- RB
1971
+ RUBY
1984
1972
 
1985
1973
  ##
1986
1974
  # Specification constructor. Assigns the default values to the attributes
@@ -2005,6 +1993,10 @@ class Gem::Specification < Gem::BasicSpecification
2005
1993
  self.name = name if name
2006
1994
  self.version = version if version
2007
1995
 
1996
+ if platform = Gem.platforms.last and platform != Gem::Platform::RUBY and platform != Gem::Platform.local
1997
+ self.platform = platform
1998
+ end
1999
+
2008
2000
  yield self if block_given?
2009
2001
  end
2010
2002
 
@@ -2107,11 +2099,17 @@ class Gem::Specification < Gem::BasicSpecification
2107
2099
  end
2108
2100
 
2109
2101
  ##
2102
+ # Track removed method calls to warn about during build time.
2110
2103
  # Warn about unknown attributes while loading a spec.
2111
2104
 
2112
2105
  def method_missing(sym, *a, &b) # :nodoc:
2106
+ if REMOVED_METHODS.include?(sym)
2107
+ removed_method_calls << sym
2108
+ return
2109
+ end
2110
+
2113
2111
  if @specification_version > CURRENT_SPECIFICATION_VERSION and
2114
- sym.to_s =~ /=$/
2112
+ sym.to_s.end_with?("=")
2115
2113
  warn "ignoring #{sym} loading #{full_name}" if $DEBUG
2116
2114
  else
2117
2115
  super
@@ -2195,7 +2193,7 @@ class Gem::Specification < Gem::BasicSpecification
2195
2193
 
2196
2194
  attributes.each do |attr_name|
2197
2195
  current_value = self.send attr_name
2198
- current_value = current_value.sort if %i(files test_files).include? attr_name
2196
+ current_value = current_value.sort if %i[files test_files].include? attr_name
2199
2197
  if current_value != default_value(attr_name) or
2200
2198
  self.class.required_attribute? attr_name
2201
2199
 
@@ -2245,11 +2243,9 @@ class Gem::Specification < Gem::BasicSpecification
2245
2243
  end
2246
2244
 
2247
2245
  ##
2248
- # Sets rdoc_options to +value+, ensuring it is an array. Don't
2249
- # use this, push onto the array instead.
2246
+ # Sets rdoc_options to +value+, ensuring it is an array.
2250
2247
 
2251
2248
  def rdoc_options=(options)
2252
- # TODO: warn about setting instead of pushing
2253
2249
  @rdoc_options = Array options
2254
2250
  end
2255
2251
 
@@ -2268,11 +2264,9 @@ class Gem::Specification < Gem::BasicSpecification
2268
2264
  end
2269
2265
 
2270
2266
  ##
2271
- # Set requirements to +req+, ensuring it is an array. Don't
2272
- # use this, push onto the array instead.
2267
+ # Set requirements to +req+, ensuring it is an array.
2273
2268
 
2274
2269
  def requirements=(req)
2275
- # TODO: warn about setting instead of pushing
2276
2270
  @requirements = Array req
2277
2271
  end
2278
2272
 
@@ -2294,9 +2288,9 @@ class Gem::Specification < Gem::BasicSpecification
2294
2288
  def ruby_code(obj)
2295
2289
  case obj
2296
2290
  when String then obj.dump + ".freeze"
2297
- when Array then '[' + obj.map { |x| ruby_code x }.join(", ") + ']'
2291
+ when Array then '[' + obj.map {|x| ruby_code x }.join(", ") + ']'
2298
2292
  when Hash then
2299
- seg = obj.keys.sort.map { |k| "#{k.to_s.dump} => #{obj[k].to_s.dump}" }
2293
+ seg = obj.keys.sort.map {|k| "#{k.to_s.dump} => #{obj[k].to_s.dump}" }
2300
2294
  "{ #{seg.join(', ')} }"
2301
2295
  when Gem::Version then obj.to_s.dump
2302
2296
  when DateLike then obj.strftime('%Y-%m-%d').dump
@@ -2324,7 +2318,7 @@ class Gem::Specification < Gem::BasicSpecification
2324
2318
  # True if this gem has the same attributes as +other+.
2325
2319
 
2326
2320
  def same_attributes?(spec)
2327
- @@attributes.all? { |name, default| self.send(name) == spec.send(name) }
2321
+ @@attributes.all? {|name, default| self.send(name) == spec.send(name) }
2328
2322
  end
2329
2323
 
2330
2324
  private :same_attributes?
@@ -2423,7 +2417,7 @@ class Gem::Specification < Gem::BasicSpecification
2423
2417
  # still have their default values are omitted.
2424
2418
 
2425
2419
  def to_ruby
2426
- require 'openssl'
2420
+ require_relative 'openssl'
2427
2421
  mark_version
2428
2422
  result = []
2429
2423
  result << "# -*- encoding: utf-8 -*-"
@@ -2456,14 +2450,14 @@ class Gem::Specification < Gem::BasicSpecification
2456
2450
  :version,
2457
2451
  :has_rdoc,
2458
2452
  :default_executable,
2459
- :metadata
2453
+ :metadata,
2460
2454
  ]
2461
2455
 
2462
2456
  @@attributes.each do |attr_name|
2463
2457
  next if handled.include? attr_name
2464
2458
  current_value = self.send(attr_name)
2465
2459
  if current_value != default_value(attr_name) || self.class.required_attribute?(attr_name)
2466
- result << " s.#{attr_name} = #{ruby_code current_value}" unless current_value.is_a?(OpenSSL::PKey::RSA)
2460
+ result << " s.#{attr_name} = #{ruby_code current_value}" unless defined?(OpenSSL::PKey::RSA) && current_value.is_a?(OpenSSL::PKey::RSA)
2467
2461
  end
2468
2462
  end
2469
2463
 
@@ -2566,7 +2560,7 @@ class Gem::Specification < Gem::BasicSpecification
2566
2560
  unless result == :next
2567
2561
  spec_name = dep_spec.name
2568
2562
  dep_spec.traverse(trail, visited, &block) unless
2569
- trail.any? { |s| s.name == spec_name }
2563
+ trail.any? {|s| s.name == spec_name }
2570
2564
  end
2571
2565
  end
2572
2566
  end
@@ -2591,30 +2585,27 @@ class Gem::Specification < Gem::BasicSpecification
2591
2585
  end
2592
2586
 
2593
2587
  def keep_only_files_and_directories
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) }
2588
+ @executables.delete_if {|x| File.directory?(File.join(@bindir, x)) }
2589
+ @extensions.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
2590
+ @extra_rdoc_files.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
2591
+ @files.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
2592
+ @test_files.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
2599
2593
  end
2600
2594
 
2601
2595
  def validate_metadata
2602
2596
  Gem::SpecificationPolicy.new(self).validate_metadata
2603
2597
  end
2598
+ rubygems_deprecate :validate_metadata
2604
2599
 
2605
- ##
2606
- # Checks that dependencies use requirements as we recommend. Warnings are
2607
- # issued when dependencies are open-ended or overly strict for semantic
2608
- # versioning.
2609
2600
  def validate_dependencies
2610
2601
  Gem::SpecificationPolicy.new(self).validate_dependencies
2611
2602
  end
2603
+ rubygems_deprecate :validate_dependencies
2612
2604
 
2613
- ##
2614
- # Checks to see if the files to be packaged are world-readable.
2615
2605
  def validate_permissions
2616
2606
  Gem::SpecificationPolicy.new(self).validate_permissions
2617
2607
  end
2608
+ rubygems_deprecate :validate_permissions
2618
2609
 
2619
2610
  ##
2620
2611
  # Set the version to +version+, potentially also setting
@@ -2677,8 +2668,4 @@ class Gem::Specification < Gem::BasicSpecification
2677
2668
  def raw_require_paths # :nodoc:
2678
2669
  @require_paths
2679
2670
  end
2680
-
2681
2671
  end
2682
-
2683
- # DOC: What is this and why is it here, randomly, at the end of this file?
2684
- Gem.clear_paths