rubygems-update 3.1.2 → 3.2.6

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