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
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "rubygems/test_case"
3
4
  require "open3"
4
5
 
5
- class TestProjectSanity < Minitest::Test
6
-
6
+ class TestProjectSanity < Gem::TestCase
7
7
  def test_manifest_is_up_to_date
8
8
  skip unless File.exist?(File.expand_path("../../../Rakefile", __FILE__))
9
9
 
@@ -12,4 +12,9 @@ class TestProjectSanity < Minitest::Test
12
12
  assert status.success?, "Expected Manifest.txt to be up to date, but it's not. Run `rake update_manifest` to sync it."
13
13
  end
14
14
 
15
+ def test_require_rubygems_package
16
+ err, status = Open3.capture2e(*ruby_with_rubygems_in_load_path, "--disable-gems", "-e", "'require \"rubygems/package\"'")
17
+
18
+ assert status.success?, err
19
+ end
15
20
  end
@@ -2,7 +2,6 @@
2
2
  require 'rubygems/test_case'
3
3
 
4
4
  class TestRemoteFetchError < Gem::TestCase
5
-
6
5
  def test_password_redacted
7
6
  error = Gem::RemoteFetcher::FetchError.new('There was an error fetching', 'https://user:secret@gemsource.org')
8
7
  refute_match 'secret', error.to_s
@@ -17,5 +16,4 @@ class TestRemoteFetchError < Gem::TestCase
17
16
  error = Gem::RemoteFetcher::FetchError.new('There was an error fetching', 'https://gemsource.org')
18
17
  assert_equal error.to_s, 'There was an error fetching (https://gemsource.org)'
19
18
  end
20
-
21
19
  end
@@ -3,9 +3,7 @@ require 'rubygems/test_case'
3
3
  require 'rubygems'
4
4
 
5
5
  class TestGemRequire < Gem::TestCase
6
-
7
6
  class Latch
8
-
9
7
  def initialize(count = 1)
10
8
  @count = count
11
9
  @lock = Monitor.new
@@ -24,7 +22,6 @@ class TestGemRequire < Gem::TestCase
24
22
  @cv.wait_while { @count > 0 }
25
23
  end
26
24
  end
27
-
28
25
  end
29
26
 
30
27
  def setup
@@ -45,6 +42,35 @@ class TestGemRequire < Gem::TestCase
45
42
  refute require(path), "'#{path}' was not yet required"
46
43
  end
47
44
 
45
+ def test_respect_loaded_features_caching_like_standard_require
46
+ dir = Dir.mktmpdir("test_require", @tempdir)
47
+
48
+ lp1 = File.join dir, 'foo1'
49
+ foo1 = File.join lp1, 'foo.rb'
50
+
51
+ FileUtils.mkdir_p lp1
52
+ File.open(foo1, 'w') {|f| f.write "class Object; HELLO = 'foo1' end" }
53
+
54
+ lp = $LOAD_PATH.dup
55
+
56
+ $LOAD_PATH.unshift lp1
57
+ assert_require 'foo'
58
+ assert_equal "foo1", ::Object::HELLO
59
+
60
+ lp2 = File.join dir, 'foo2'
61
+ foo2 = File.join lp2, 'foo.rb'
62
+
63
+ FileUtils.mkdir_p lp2
64
+ File.open(foo2, 'w') {|f| f.write "class Object; HELLO = 'foo2' end" }
65
+
66
+ $LOAD_PATH.unshift lp2
67
+ refute_require 'foo'
68
+ assert_equal "foo1", ::Object::HELLO
69
+ ensure
70
+ $LOAD_PATH.replace lp
71
+ Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
72
+ end
73
+
48
74
  # Providing -I on the commandline should always beat gems
49
75
  def test_dash_i_beats_gems
50
76
  a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
@@ -60,7 +86,7 @@ class TestGemRequire < Gem::TestCase
60
86
  c_rb = File.join dash_i_arg, 'b', 'c.rb'
61
87
 
62
88
  FileUtils.mkdir_p File.dirname c_rb
63
- File.open(c_rb, 'w') { |f| f.write "class Object; HELLO = 'world' end" }
89
+ File.open(c_rb, 'w') {|f| f.write "class Object; HELLO = 'world' end" }
64
90
 
65
91
  lp = $LOAD_PATH.dup
66
92
 
@@ -70,7 +96,7 @@ class TestGemRequire < Gem::TestCase
70
96
  assert_require 'test_gem_require_a'
71
97
  assert_require 'b/c' # this should be required from -I
72
98
  assert_equal "world", ::Object::HELLO
73
- assert_equal %w(a-1 b-1), loaded_spec_names
99
+ assert_equal %w[a-1 b-1], loaded_spec_names
74
100
  ensure
75
101
  $LOAD_PATH.replace lp
76
102
  Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
@@ -94,7 +120,7 @@ class TestGemRequire < Gem::TestCase
94
120
  c1 = new_default_spec "c", "1", nil, "c/c.rb"
95
121
  c2 = new_default_spec "c", "2", nil, "c/c.rb"
96
122
 
97
- install_default_specs c1, c2, b1, a1
123
+ install_default_gems c1, c2, b1, a1
98
124
 
99
125
  dir = Dir.mktmpdir("test_require", @tempdir)
100
126
  dash_i_arg = File.join dir, 'lib'
@@ -102,7 +128,7 @@ class TestGemRequire < Gem::TestCase
102
128
  c_rb = File.join dash_i_arg, 'c', 'c.rb'
103
129
 
104
130
  FileUtils.mkdir_p File.dirname c_rb
105
- File.open(c_rb, 'w') { |f| f.write "class Object; HELLO = 'world' end" }
131
+ File.open(c_rb, 'w') {|f| f.write "class Object; HELLO = 'world' end" }
106
132
 
107
133
  assert_require 'test_gem_require_a'
108
134
 
@@ -114,12 +140,31 @@ class TestGemRequire < Gem::TestCase
114
140
  assert_require 'b/c'
115
141
  assert_require 'c/c' # this should be required from -I
116
142
  assert_equal "world", ::Object::HELLO
117
- assert_equal %w(a-1 b-1), loaded_spec_names
143
+ assert_equal %w[a-1 b-1], loaded_spec_names
118
144
  ensure
119
145
  $LOAD_PATH.replace lp
120
146
  Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
121
147
  end
122
148
 
149
+ def test_dash_i_respects_default_library_extension_priority
150
+ skip "extensions don't quite work on jruby" if Gem.java_platform?
151
+ skip "not installed yet" unless RbConfig::TOPDIR
152
+
153
+ dash_i_ext_arg = util_install_extension_file('a')
154
+ dash_i_lib_arg = util_install_ruby_file('a')
155
+
156
+ lp = $LOAD_PATH.dup
157
+
158
+ begin
159
+ $LOAD_PATH.unshift dash_i_lib_arg
160
+ $LOAD_PATH.unshift dash_i_ext_arg
161
+ assert_require 'a'
162
+ assert_match(/a\.rb$/, $LOADED_FEATURES.last)
163
+ ensure
164
+ $LOAD_PATH.replace lp
165
+ end
166
+ end
167
+
123
168
  def test_concurrent_require
124
169
  Object.const_set :FILE_ENTERED_LATCH, Latch.new(2)
125
170
  Object.const_set :FILE_EXIT_LATCH, Latch.new(1)
@@ -153,11 +198,11 @@ class TestGemRequire < Gem::TestCase
153
198
  install_specs b1, b2, a1
154
199
 
155
200
  assert_require 'test_gem_require_a'
156
- assert_equal %w(a-1 b-1), loaded_spec_names
201
+ assert_equal %w[a-1 b-1], loaded_spec_names
157
202
  assert_equal unresolved_names, []
158
203
 
159
204
  assert_require "b/c"
160
- assert_equal %w(a-1 b-1), loaded_spec_names
205
+ assert_equal %w[a-1 b-1], loaded_spec_names
161
206
  end
162
207
 
163
208
  def test_require_is_lazy_with_inexact_req
@@ -168,11 +213,11 @@ class TestGemRequire < Gem::TestCase
168
213
  install_specs b1, b2, a1
169
214
 
170
215
  assert_require 'test_gem_require_a'
171
- assert_equal %w(a-1), loaded_spec_names
216
+ assert_equal %w[a-1], loaded_spec_names
172
217
  assert_equal unresolved_names, ["b (>= 1)"]
173
218
 
174
219
  assert_require "b/c"
175
- assert_equal %w(a-1 b-2), loaded_spec_names
220
+ assert_equal %w[a-1 b-2], loaded_spec_names
176
221
  end
177
222
 
178
223
  def test_require_is_not_lazy_with_one_possible
@@ -182,11 +227,11 @@ class TestGemRequire < Gem::TestCase
182
227
  install_specs b1, a1
183
228
 
184
229
  assert_require 'test_gem_require_a'
185
- assert_equal %w(a-1 b-1), loaded_spec_names
230
+ assert_equal %w[a-1 b-1], loaded_spec_names
186
231
  assert_equal unresolved_names, []
187
232
 
188
233
  assert_require "b/c"
189
- assert_equal %w(a-1 b-1), loaded_spec_names
234
+ assert_equal %w[a-1 b-1], loaded_spec_names
190
235
  end
191
236
 
192
237
  def test_require_can_use_a_pathname_object
@@ -195,7 +240,7 @@ class TestGemRequire < Gem::TestCase
195
240
  install_specs a1
196
241
 
197
242
  assert_require Pathname.new 'test_gem_require_a'
198
- assert_equal %w(a-1), loaded_spec_names
243
+ assert_equal %w[a-1], loaded_spec_names
199
244
  assert_equal unresolved_names, []
200
245
  end
201
246
 
@@ -205,32 +250,77 @@ class TestGemRequire < Gem::TestCase
205
250
  stdlib one is already in $LOADED_FEATURES?. Reproducible by running the
206
251
  spaceship_specific_file test before this one" if java_platform?
207
252
 
208
- lp = $LOAD_PATH.dup
209
- lib_dir = File.expand_path(File.join(File.dirname(__FILE__), "../../lib"))
210
- if File.exist?(lib_dir)
253
+ skip "not installed yet" unless RbConfig::TOPDIR
254
+
255
+ lib_dir = File.expand_path("../../lib", File.dirname(__FILE__))
256
+ rubylibdir = File.realdirpath(RbConfig::CONFIG["rubylibdir"])
257
+ if rubylibdir == lib_dir
258
+ # testing in the ruby repository where RubyGems' lib/ == stdlib lib/
259
+ # In that case we want to move the stdlib lib/ to still be after b-2 in $LOAD_PATH
260
+ lp = $LOAD_PATH.dup
211
261
  $LOAD_PATH.delete lib_dir
212
262
  $LOAD_PATH.push lib_dir
263
+ load_path_changed = true
213
264
  end
214
265
 
266
+ require 'benchmark' # the stdlib
267
+
215
268
  a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
216
269
  b1 = util_spec "b", "1", nil, "lib/benchmark.rb"
217
270
  b2 = util_spec "b", "2", nil, "lib/benchmark.rb"
218
271
 
219
272
  install_specs b1, b2, a1
220
273
 
274
+ # Activates a-1, but not b-1 and b-2
221
275
  assert_require 'test_gem_require_a'
276
+ assert_equal %w[a-1], loaded_spec_names
277
+ assert $LOAD_PATH.include? a1.load_paths[0]
278
+ refute $LOAD_PATH.include? b1.load_paths[0]
279
+ refute $LOAD_PATH.include? b2.load_paths[0]
280
+
222
281
  assert_equal unresolved_names, ["b (>= 1)"]
223
282
 
224
- refute require('benchmark'), "benchmark should have already been loaded"
283
+ # The require('benchmark') below will activate b-2. However, its
284
+ # lib/benchmark.rb won't ever be loaded. The reason is MRI sees that even
285
+ # though b-2 is earlier in $LOAD_PATH it already loaded a benchmark.rb file
286
+ # and that still exists in $LOAD_PATH (further down),
287
+ # and as a result #gem_original_require returns false.
288
+ refute require('benchmark'), "the benchmark stdlib should be recognized as already loaded"
289
+
290
+ assert_includes $LOAD_PATH, b2.load_paths[0]
291
+ assert_includes $LOAD_PATH, rubylibdir
292
+ message = proc {
293
+ "this test relies on the b-2 gem lib/ to be before stdlib to make sense\n" +
294
+ $LOAD_PATH.pretty_inspect
295
+ }
296
+ assert_operator $LOAD_PATH.index(b2.load_paths[0]), :<, $LOAD_PATH.index(rubylibdir), message
225
297
 
226
298
  # We detected that we should activate b-2, so we did so, but
227
- # then original_require decided "I've already got benchmark.rb" loaded.
228
- # This case is fine because our lazy loading is provided exactly
299
+ # then #gem_original_require decided "I've already got some benchmark.rb" loaded.
300
+ # This case is fine because our lazy loading provided exactly
229
301
  # the same behavior as eager loading would have.
230
302
 
231
- assert_equal %w(a-1 b-2), loaded_spec_names
303
+ assert_equal %w[a-1 b-2], loaded_spec_names
232
304
  ensure
233
- $LOAD_PATH.replace lp unless java_platform?
305
+ $LOAD_PATH.replace lp if load_path_changed
306
+ end
307
+
308
+ def test_activate_via_require_respects_loaded_default_from_default_gems
309
+ a1 = new_default_spec "a", "1", nil, "a.rb"
310
+
311
+ # simulate requiring a default gem before rubygems is loaded
312
+ Kernel.send(:gem_original_require, "a")
313
+
314
+ # simulate registering default specs on loading rubygems
315
+ install_default_gems a1
316
+
317
+ a2 = util_spec "a", "2", nil, "lib/a.rb"
318
+
319
+ install_specs a2
320
+
321
+ refute_require 'a'
322
+
323
+ assert_equal %w[a-1], loaded_spec_names
234
324
  end
235
325
 
236
326
  def test_already_activated_direct_conflict
@@ -244,12 +334,12 @@ class TestGemRequire < Gem::TestCase
244
334
 
245
335
  a1.activate
246
336
  c1.activate
247
- assert_equal %w(a-1 c-1), loaded_spec_names
337
+ assert_equal %w[a-1 c-1], loaded_spec_names
248
338
  assert_equal ["b (> 0)"], unresolved_names
249
339
 
250
340
  assert require("ib")
251
341
 
252
- assert_equal %w(a-1 b-1 c-1), loaded_spec_names
342
+ assert_equal %w[a-1 b-1 c-1], loaded_spec_names
253
343
  assert_equal [], unresolved_names
254
344
  end
255
345
 
@@ -266,7 +356,7 @@ class TestGemRequire < Gem::TestCase
266
356
 
267
357
  a1.activate
268
358
  c1.activate
269
- assert_equal %w(a-1 c-1), loaded_spec_names
359
+ assert_equal %w[a-1 c-1], loaded_spec_names
270
360
  assert_equal ["b (> 0)", "x (> 0)"], unresolved_names
271
361
 
272
362
  e = assert_raises(Gem::LoadError) do
@@ -289,7 +379,7 @@ class TestGemRequire < Gem::TestCase
289
379
 
290
380
  a1.activate
291
381
  c1.activate
292
- assert_equal %w(a-1 c-1), loaded_spec_names
382
+ assert_equal %w[a-1 c-1], loaded_spec_names
293
383
  assert_equal ["b (> 0)"], unresolved_names
294
384
 
295
385
  e = assert_raises(Gem::LoadError) do
@@ -315,26 +405,26 @@ class TestGemRequire < Gem::TestCase
315
405
 
316
406
  # Remove an old default gem version directly from disk as if someone ran
317
407
  # gem cleanup.
318
- FileUtils.rm_rf(File.join @default_dir, "#{b1.full_name}")
319
- FileUtils.rm_rf(File.join @default_spec_dir, "#{b1.full_name}.gemspec")
408
+ FileUtils.rm_rf(File.join @gemhome, "#{b1.full_name}")
409
+ FileUtils.rm_rf(File.join @gemhome, "specifications", "default", "#{b1.full_name}.gemspec")
320
410
 
321
411
  # Require gems that have not been removed.
322
412
  assert_require 'a/b'
323
- assert_equal %w(a-1.0), loaded_spec_names
413
+ assert_equal %w[a-1.0], loaded_spec_names
324
414
  assert_require 'b/d'
325
- assert_equal %w(a-1.0 b-2.0), loaded_spec_names
415
+ assert_equal %w[a-1.0 b-2.0], loaded_spec_names
326
416
  end
327
417
 
328
418
  def test_require_doesnt_traverse_development_dependencies
329
419
  a = util_spec("a#{$$}", "1", nil, "lib/a#{$$}.rb")
330
420
  z = util_spec("z", "1", "w" => "> 0")
331
- w1 = util_spec("w", "1") { |s| s.add_development_dependency "non-existent" }
332
- w2 = util_spec("w", "2") { |s| s.add_development_dependency "non-existent" }
421
+ w1 = util_spec("w", "1") {|s| s.add_development_dependency "non-existent" }
422
+ w2 = util_spec("w", "2") {|s| s.add_development_dependency "non-existent" }
333
423
 
334
424
  install_specs a, w1, w2, z
335
425
 
336
426
  assert gem("z")
337
- assert_equal %w(z-1), loaded_spec_names
427
+ assert_equal %w[z-1], loaded_spec_names
338
428
  assert_equal ["w (> 0)"], unresolved_names
339
429
 
340
430
  assert require("a#{$$}")
@@ -343,15 +433,15 @@ class TestGemRequire < Gem::TestCase
343
433
  def test_default_gem_only
344
434
  default_gem_spec = new_default_spec("default", "2.0.0.0",
345
435
  nil, "default/gem.rb")
346
- install_default_specs(default_gem_spec)
436
+ install_default_gems(default_gem_spec)
347
437
  assert_require "default/gem"
348
- assert_equal %w(default-2.0.0.0), loaded_spec_names
438
+ assert_equal %w[default-2.0.0.0], loaded_spec_names
349
439
  end
350
440
 
351
441
  def test_default_gem_require_activates_just_once
352
442
  default_gem_spec = new_default_spec("default", "2.0.0.0",
353
443
  nil, "default/gem.rb")
354
- install_default_specs(default_gem_spec)
444
+ install_default_gems(default_gem_spec)
355
445
 
356
446
  assert_require "default/gem"
357
447
 
@@ -364,6 +454,17 @@ class TestGemRequire < Gem::TestCase
364
454
  assert_equal 0, times_called
365
455
  end
366
456
 
457
+ def test_second_gem_require_does_not_resolve_path_manually_before_going_through_standard_require
458
+ a1 = util_spec "a", "1", nil, "lib/test_gem_require_a.rb"
459
+ install_gem a1
460
+
461
+ assert_require "test_gem_require_a"
462
+
463
+ stub(:gem_original_require, ->(path) { assert_equal "test_gem_require_a", path }) do
464
+ require "test_gem_require_a"
465
+ end
466
+ end
467
+
367
468
  def test_realworld_default_gem
368
469
  testing_ruby_repo = !ENV["GEM_COMMAND"].nil?
369
470
  skip "this test can't work under ruby-core setup" if testing_ruby_repo || java_platform?
@@ -373,32 +474,84 @@ class TestGemRequire < Gem::TestCase
373
474
  require "json"
374
475
  puts Gem.loaded_specs["json"]
375
476
  RUBY
376
- output = Gem::Util.popen(Gem.ruby, "-e", cmd).strip
477
+ output = Gem::Util.popen(*ruby_with_rubygems_in_load_path, "-e", cmd).strip
478
+ assert $?.success?
479
+ refute_empty output
480
+ end
481
+
482
+ def test_realworld_upgraded_default_gem
483
+ testing_ruby_repo = !ENV["GEM_COMMAND"].nil?
484
+ skip "this test can't work under ruby-core setup" if testing_ruby_repo
485
+
486
+ newer_json = util_spec("json", "999.99.9", nil, ["lib/json.rb"])
487
+ install_gem newer_json
488
+
489
+ path = "#{@tempdir}/test_realworld_upgraded_default_gem.rb"
490
+ code = <<-RUBY
491
+ $stderr = $stdout
492
+ require "json"
493
+ puts Gem.loaded_specs["json"].version
494
+ puts $LOADED_FEATURES
495
+ RUBY
496
+ File.write(path, code)
497
+
498
+ output = Gem::Util.popen({ 'GEM_HOME' => @gemhome }, *ruby_with_rubygems_in_load_path, path).strip
499
+ assert $?.success?
377
500
  refute_empty output
501
+ assert_equal "999.99.9", output.lines[0].chomp
502
+ # Make sure only files from the newer json gem are loaded, and no files from the default json gem
503
+ assert_equal ["#{@gemhome}/gems/json-999.99.9/lib/json.rb"], output.lines.grep(%r{/gems/json-}).map(&:chomp)
378
504
  end
379
505
 
380
506
  def test_default_gem_and_normal_gem
381
507
  default_gem_spec = new_default_spec("default", "2.0.0.0",
382
508
  nil, "default/gem.rb")
383
- install_default_specs(default_gem_spec)
509
+ install_default_gems(default_gem_spec)
384
510
  normal_gem_spec = util_spec("default", "3.0", nil,
385
511
  "lib/default/gem.rb")
386
512
  install_specs(normal_gem_spec)
387
513
  assert_require "default/gem"
388
- assert_equal %w(default-3.0), loaded_spec_names
514
+ assert_equal %w[default-3.0], loaded_spec_names
515
+ end
516
+
517
+ def test_normal_gems_with_overridden_load_error_message
518
+ normal_gem_spec = util_spec("normal", "3.0", nil, "lib/normal/gem.rb")
519
+
520
+ install_specs(normal_gem_spec)
521
+
522
+ File.write("require_with_overridden_load_error_message.rb", <<-RUBY)
523
+ LoadError.class_eval do
524
+ def message
525
+ "Overridden message"
526
+ end
527
+ end
528
+
529
+ require 'normal/gem'
530
+ RUBY
531
+
532
+ require "open3"
533
+
534
+ output, exit_status = Open3.capture2e(
535
+ { "GEM_HOME" => Gem.paths.home },
536
+ *ruby_with_rubygems_in_load_path,
537
+ "-r",
538
+ "./require_with_overridden_load_error_message.rb"
539
+ )
540
+
541
+ assert exit_status.success?, "Require failed due to #{output}"
389
542
  end
390
543
 
391
544
  def test_default_gem_prerelease
392
545
  default_gem_spec = new_default_spec("default", "2.0.0",
393
546
  nil, "default/gem.rb")
394
- install_default_specs(default_gem_spec)
547
+ install_default_gems(default_gem_spec)
395
548
 
396
549
  normal_gem_higher_prerelease_spec = util_spec("default", "3.0.0.rc2", nil,
397
550
  "lib/default/gem.rb")
398
- install_default_specs(normal_gem_higher_prerelease_spec)
551
+ install_default_gems(normal_gem_higher_prerelease_spec)
399
552
 
400
553
  assert_require "default/gem"
401
- assert_equal %w(default-3.0.0.rc2), loaded_spec_names
554
+ assert_equal %w[default-3.0.0.rc2], loaded_spec_names
402
555
  end
403
556
 
404
557
  def loaded_spec_names
@@ -412,10 +565,8 @@ class TestGemRequire < Gem::TestCase
412
565
  def test_try_activate_error_unlocks_require_monitor
413
566
  silence_warnings do
414
567
  class << ::Gem
415
-
416
568
  alias old_try_activate try_activate
417
569
  def try_activate(*); raise 'raised from try_activate'; end
418
-
419
570
  end
420
571
  end
421
572
 
@@ -426,9 +577,7 @@ class TestGemRequire < Gem::TestCase
426
577
  ensure
427
578
  silence_warnings do
428
579
  class << ::Gem
429
-
430
580
  alias try_activate old_try_activate
431
-
432
581
  end
433
582
  end
434
583
  Kernel::RUBYGEMS_ACTIVATION_MONITOR.exit
@@ -437,14 +586,14 @@ class TestGemRequire < Gem::TestCase
437
586
  def test_require_when_gem_defined
438
587
  default_gem_spec = new_default_spec("default", "2.0.0.0",
439
588
  nil, "default/gem.rb")
440
- install_default_specs(default_gem_spec)
589
+ install_default_gems(default_gem_spec)
441
590
  c = Class.new do
442
591
  def self.gem(*args)
443
592
  raise "received #gem with #{args.inspect}"
444
593
  end
445
594
  end
446
595
  assert c.send(:require, "default/gem")
447
- assert_equal %w(default-2.0.0.0), loaded_spec_names
596
+ assert_equal %w[default-2.0.0.0], loaded_spec_names
448
597
  end
449
598
 
450
599
  def test_require_default_when_gem_defined
@@ -456,7 +605,7 @@ class TestGemRequire < Gem::TestCase
456
605
  end
457
606
  end
458
607
  assert c.send(:require, "a#{$$}")
459
- assert_equal %W(a#{$$}-1), loaded_spec_names
608
+ assert_equal %W[a#{$$}-1], loaded_spec_names
460
609
  end
461
610
 
462
611
  def test_require_bundler
@@ -500,38 +649,79 @@ class TestGemRequire < Gem::TestCase
500
649
  if RUBY_VERSION >= "2.5"
501
650
  ["", "Kernel."].each do |prefix|
502
651
  define_method "test_no_kernel_require_in_#{prefix.tr(".", "_")}warn_with_uplevel" do
503
- lib = File.realpath("../../../lib", __FILE__)
504
652
  Dir.mktmpdir("warn_test") do |dir|
505
653
  File.write(dir + "/sub.rb", "#{prefix}warn 'uplevel', 'test', uplevel: 1\n")
506
654
  File.write(dir + "/main.rb", "require 'sub'\n")
507
655
  _, err = capture_subprocess_io do
508
- system(@@ruby, "-w", "--disable=gems", "-I", lib, "-C", dir, "-I.", "main.rb")
656
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "-I", dir, "main.rb")
509
657
  end
510
658
  assert_match(/main\.rb:1: warning: uplevel\ntest\n$/, err)
511
659
  _, err = capture_subprocess_io do
512
- system(@@ruby, "-w", "--enable=gems", "-I", lib, "-C", dir, "-I.", "main.rb")
660
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "-I", dir, "main.rb")
513
661
  end
514
662
  assert_match(/main\.rb:1: warning: uplevel\ntest\n$/, err)
515
663
  end
516
664
  end
517
665
 
518
666
  define_method "test_no_other_behavioral_changes_with_#{prefix.tr(".", "_")}warn" do
519
- lib = File.realpath("../../../lib", __FILE__)
520
667
  Dir.mktmpdir("warn_test") do |dir|
521
668
  File.write(dir + "/main.rb", "#{prefix}warn({x:1}, {y:2}, [])\n")
522
669
  _, err = capture_subprocess_io do
523
- system(@@ruby, "-w", "--disable=gems", "-I", lib, "-C", dir, "main.rb")
670
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "main.rb")
524
671
  end
525
672
  assert_match(/{:x=>1}\n{:y=>2}\n$/, err)
526
673
  _, err = capture_subprocess_io do
527
- system(@@ruby, "-w", "--enable=gems", "-I", lib, "-C", dir, "main.rb")
674
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "main.rb")
528
675
  end
529
676
  assert_match(/{:x=>1}\n{:y=>2}\n$/, err)
530
677
  end
531
678
  end
532
679
  end
680
+
681
+ def test_no_crash_when_overriding_warn_with_warning_module
682
+ skip "https://github.com/oracle/truffleruby/issues/2109" if RUBY_ENGINE == "truffleruby"
683
+
684
+ Dir.mktmpdir("warn_test") do |dir|
685
+ File.write(dir + "/main.rb", "module Warning; def warn(str); super; end; end; warn 'Foo Bar'")
686
+ _, err = capture_subprocess_io do
687
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "main.rb")
688
+ end
689
+ assert_match(/Foo Bar\n$/, err)
690
+ _, err = capture_subprocess_io do
691
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "main.rb")
692
+ end
693
+ assert_match(/Foo Bar\n$/, err)
694
+ end
695
+ end
696
+
697
+ def test_expected_backtrace_location_when_inheriting_from_basic_object_and_including_kernel
698
+ Dir.mktmpdir("warn_test") do |dir|
699
+ File.write(dir + "/main.rb", "\nrequire 'sub'\n")
700
+ File.write(dir + "/sub.rb", <<-'RUBY')
701
+ require 'rubygems'
702
+ class C < BasicObject
703
+ include ::Kernel
704
+ def deprecated
705
+ warn "This is a deprecated method", uplevel: 2
706
+ end
707
+ end
708
+ C.new.deprecated
709
+ RUBY
710
+
711
+ _, err = capture_subprocess_io do
712
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "-I", dir, "main.rb")
713
+ end
714
+ assert_match(/main\.rb:2: warning: This is a deprecated method$/, err)
715
+ _, err = capture_subprocess_io do
716
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "-I", dir, "main.rb")
717
+ end
718
+ assert_match(/main\.rb:2: warning: This is a deprecated method$/, err)
719
+ end
720
+ end
533
721
  end
534
722
 
723
+ private
724
+
535
725
  def silence_warnings
536
726
  old_verbose, $VERBOSE = $VERBOSE, false
537
727
  yield
@@ -539,4 +729,49 @@ class TestGemRequire < Gem::TestCase
539
729
  $VERBOSE = old_verbose
540
730
  end
541
731
 
732
+ def util_install_extension_file(name)
733
+ spec = quick_gem name
734
+ util_build_gem spec
735
+
736
+ spec.extensions << "extconf.rb"
737
+ write_file File.join(@tempdir, "extconf.rb") do |io|
738
+ io.write <<-RUBY
739
+ require "mkmf"
740
+ CONFIG['LDSHARED'] = '$(TOUCH) $@ ||'
741
+ create_makefile("#{name}")
742
+ RUBY
743
+ end
744
+
745
+ write_file File.join(@tempdir, "#{name}.c") do |io|
746
+ io.write <<-C
747
+ void Init_#{name}() { }
748
+ C
749
+ end
750
+
751
+ write_file File.join(@tempdir, "depend")
752
+
753
+ spec.files += ["extconf.rb", "depend", "#{name}.c"]
754
+
755
+ so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}")
756
+ refute_path_exists so
757
+
758
+ path = Gem::Package.build spec
759
+ installer = Gem::Installer.at path
760
+ installer.install
761
+ assert_path_exists so
762
+
763
+ spec.gem_dir
764
+ end
765
+
766
+ def util_install_ruby_file(name)
767
+ dir_lib = Dir.mktmpdir("test_require_lib", @tempdir)
768
+ dash_i_lib_arg = File.join dir_lib
769
+
770
+ a_rb = File.join dash_i_lib_arg, "#{name}.rb"
771
+
772
+ FileUtils.mkdir_p File.dirname a_rb
773
+ File.open(a_rb, 'w') {|f| f.write "# #{name}.rb" }
774
+
775
+ dash_i_lib_arg
776
+ end
542
777
  end