bundler 1.11.1 → 2.2.6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bundler might be problematic. Click here for more details.

Files changed (328) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +2125 -840
  3. data/LICENSE.md +18 -19
  4. data/README.md +33 -11
  5. data/bundler.gemspec +34 -21
  6. data/exe/bundle +36 -6
  7. data/exe/bundler +2 -18
  8. data/lib/bundler.rb +435 -160
  9. data/lib/bundler/build_metadata.rb +45 -0
  10. data/lib/bundler/capistrano.rb +9 -3
  11. data/lib/bundler/cli.rb +550 -130
  12. data/lib/bundler/cli/add.rb +47 -0
  13. data/lib/bundler/cli/binstubs.rb +26 -10
  14. data/lib/bundler/cli/cache.rb +25 -17
  15. data/lib/bundler/cli/check.rb +8 -7
  16. data/lib/bundler/cli/clean.rb +8 -8
  17. data/lib/bundler/cli/common.rb +69 -9
  18. data/lib/bundler/cli/config.rb +170 -76
  19. data/lib/bundler/cli/console.rb +6 -1
  20. data/lib/bundler/cli/doctor.rb +140 -0
  21. data/lib/bundler/cli/exec.rb +63 -21
  22. data/lib/bundler/cli/fund.rb +36 -0
  23. data/lib/bundler/cli/gem.rb +158 -42
  24. data/lib/bundler/cli/info.rb +73 -0
  25. data/lib/bundler/cli/init.rb +22 -7
  26. data/lib/bundler/cli/inject.rb +38 -10
  27. data/lib/bundler/cli/install.rb +139 -104
  28. data/lib/bundler/cli/issue.rb +40 -0
  29. data/lib/bundler/cli/list.rb +60 -0
  30. data/lib/bundler/cli/lock.rb +27 -5
  31. data/lib/bundler/cli/open.rb +13 -5
  32. data/lib/bundler/cli/outdated.rb +251 -46
  33. data/lib/bundler/cli/platform.rb +6 -2
  34. data/lib/bundler/cli/plugin.rb +41 -0
  35. data/lib/bundler/cli/pristine.rb +52 -0
  36. data/lib/bundler/cli/remove.rb +18 -0
  37. data/lib/bundler/cli/show.rb +5 -4
  38. data/lib/bundler/cli/update.rb +67 -26
  39. data/lib/bundler/cli/viz.rb +11 -6
  40. data/lib/bundler/compact_index_client.rb +125 -0
  41. data/lib/bundler/compact_index_client/cache.rb +110 -0
  42. data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  43. data/lib/bundler/compact_index_client/updater.rb +104 -0
  44. data/lib/bundler/constants.rb +2 -0
  45. data/lib/bundler/current_ruby.rb +51 -174
  46. data/lib/bundler/definition.rb +533 -216
  47. data/lib/bundler/dep_proxy.rb +18 -8
  48. data/lib/bundler/dependency.rb +39 -12
  49. data/lib/bundler/deployment.rb +7 -0
  50. data/lib/bundler/deprecate.rb +31 -2
  51. data/lib/bundler/dsl.rb +188 -91
  52. data/lib/bundler/endpoint_specification.rb +51 -10
  53. data/lib/bundler/env.rb +116 -48
  54. data/lib/bundler/environment_preserver.rb +82 -0
  55. data/lib/bundler/errors.rb +108 -31
  56. data/lib/bundler/feature_flag.rb +60 -0
  57. data/lib/bundler/fetcher.rb +81 -52
  58. data/lib/bundler/fetcher/base.rb +15 -3
  59. data/lib/bundler/fetcher/compact_index.rb +140 -0
  60. data/lib/bundler/fetcher/dependency.rb +36 -42
  61. data/lib/bundler/fetcher/downloader.rb +39 -12
  62. data/lib/bundler/fetcher/index.rb +34 -9
  63. data/lib/bundler/friendly_errors.rb +132 -88
  64. data/lib/bundler/gem_helper.rb +92 -50
  65. data/lib/bundler/gem_helpers.rb +90 -5
  66. data/lib/bundler/gem_tasks.rb +3 -1
  67. data/lib/bundler/gem_version_promoter.rb +190 -0
  68. data/lib/bundler/gemdeps.rb +29 -0
  69. data/lib/bundler/graph.rb +20 -41
  70. data/lib/bundler/index.rb +74 -57
  71. data/lib/bundler/injector.rb +242 -31
  72. data/lib/bundler/inline.rb +49 -23
  73. data/lib/bundler/installer.rb +190 -74
  74. data/lib/bundler/installer/gem_installer.rb +33 -20
  75. data/lib/bundler/installer/parallel_installer.rb +201 -97
  76. data/lib/bundler/installer/standalone.rb +10 -6
  77. data/lib/bundler/lazy_specification.rb +74 -10
  78. data/lib/bundler/lockfile_generator.rb +95 -0
  79. data/lib/bundler/lockfile_parser.rb +126 -74
  80. data/lib/bundler/{ssl_certs → man}/.document +0 -0
  81. data/lib/bundler/man/bundle-add.1 +66 -0
  82. data/lib/bundler/man/bundle-add.1.ronn +46 -0
  83. data/lib/bundler/man/bundle-binstubs.1 +42 -0
  84. data/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
  85. data/lib/bundler/man/bundle-cache.1 +55 -0
  86. data/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +22 -16
  87. data/lib/bundler/man/bundle-check.1 +31 -0
  88. data/lib/bundler/man/bundle-check.1.ronn +26 -0
  89. data/lib/bundler/man/bundle-clean.1 +24 -0
  90. data/lib/bundler/man/bundle-clean.1.ronn +18 -0
  91. data/lib/bundler/man/bundle-config.1 +488 -0
  92. data/lib/bundler/man/bundle-config.1.ronn +388 -0
  93. data/lib/bundler/man/bundle-doctor.1 +44 -0
  94. data/lib/bundler/man/bundle-doctor.1.ronn +33 -0
  95. data/lib/bundler/man/bundle-exec.1 +165 -0
  96. data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +20 -4
  97. data/lib/bundler/man/bundle-gem.1 +102 -0
  98. data/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +37 -13
  99. data/lib/bundler/man/bundle-info.1 +20 -0
  100. data/lib/bundler/man/bundle-info.1.ronn +17 -0
  101. data/lib/bundler/man/bundle-init.1 +25 -0
  102. data/lib/bundler/man/bundle-init.1.ronn +29 -0
  103. data/lib/bundler/man/bundle-inject.1 +33 -0
  104. data/lib/bundler/man/bundle-inject.1.ronn +22 -0
  105. data/lib/bundler/man/bundle-install.1 +338 -0
  106. data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +82 -76
  107. data/lib/bundler/man/bundle-list.1 +50 -0
  108. data/lib/bundler/man/bundle-list.1.ronn +33 -0
  109. data/lib/bundler/man/bundle-lock.1 +84 -0
  110. data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +47 -0
  111. data/lib/bundler/man/bundle-open.1 +32 -0
  112. data/lib/bundler/man/bundle-open.1.ronn +19 -0
  113. data/lib/bundler/man/bundle-outdated.1 +155 -0
  114. data/lib/bundler/man/bundle-outdated.1.ronn +111 -0
  115. data/lib/bundler/man/bundle-platform.1 +61 -0
  116. data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +1 -1
  117. data/lib/bundler/man/bundle-pristine.1 +34 -0
  118. data/lib/bundler/man/bundle-pristine.1.ronn +34 -0
  119. data/lib/bundler/man/bundle-remove.1 +31 -0
  120. data/lib/bundler/man/bundle-remove.1.ronn +23 -0
  121. data/lib/bundler/man/bundle-show.1 +23 -0
  122. data/lib/bundler/man/bundle-show.1.ronn +21 -0
  123. data/lib/bundler/man/bundle-update.1 +394 -0
  124. data/lib/bundler/man/bundle-update.1.ronn +350 -0
  125. data/lib/bundler/man/bundle-viz.1 +39 -0
  126. data/lib/bundler/man/bundle-viz.1.ronn +30 -0
  127. data/lib/bundler/man/bundle.1 +136 -0
  128. data/lib/bundler/man/bundle.1.ronn +111 -0
  129. data/lib/bundler/man/gemfile.5 +686 -0
  130. data/{man → lib/bundler/man}/gemfile.5.ronn +117 -95
  131. data/lib/bundler/man/index.txt +25 -0
  132. data/lib/bundler/match_platform.rb +15 -4
  133. data/lib/bundler/mirror.rb +223 -0
  134. data/lib/bundler/plugin.rb +330 -0
  135. data/lib/bundler/plugin/api.rb +81 -0
  136. data/lib/bundler/plugin/api/source.rb +304 -0
  137. data/lib/bundler/plugin/dsl.rb +53 -0
  138. data/lib/bundler/plugin/events.rb +61 -0
  139. data/lib/bundler/plugin/index.rb +182 -0
  140. data/lib/bundler/plugin/installer.rb +109 -0
  141. data/lib/bundler/plugin/installer/git.rb +38 -0
  142. data/lib/bundler/plugin/installer/rubygems.rb +27 -0
  143. data/lib/bundler/plugin/source_list.rb +27 -0
  144. data/lib/bundler/process_lock.rb +24 -0
  145. data/lib/bundler/psyched_yaml.rb +2 -6
  146. data/lib/bundler/remote_specification.rb +42 -9
  147. data/lib/bundler/resolver.rb +312 -225
  148. data/lib/bundler/resolver/spec_group.rb +122 -0
  149. data/lib/bundler/retry.rb +11 -5
  150. data/lib/bundler/ruby_dsl.rb +9 -2
  151. data/lib/bundler/ruby_version.rb +84 -61
  152. data/lib/bundler/rubygems_ext.rb +92 -53
  153. data/lib/bundler/rubygems_gem_installer.rb +84 -0
  154. data/lib/bundler/rubygems_integration.rb +320 -395
  155. data/lib/bundler/runtime.rb +87 -75
  156. data/lib/bundler/settings.rb +297 -119
  157. data/lib/bundler/settings/validator.rb +102 -0
  158. data/lib/bundler/setup.rb +13 -12
  159. data/lib/bundler/shared_helpers.rb +234 -53
  160. data/lib/bundler/similarity_detector.rb +5 -3
  161. data/lib/bundler/source.rb +63 -4
  162. data/lib/bundler/source/gemspec.rb +18 -0
  163. data/lib/bundler/source/git.rb +97 -50
  164. data/lib/bundler/source/git/git_proxy.rb +138 -65
  165. data/lib/bundler/source/metadata.rb +67 -0
  166. data/lib/bundler/source/path.rb +83 -47
  167. data/lib/bundler/source/path/installer.rb +42 -11
  168. data/lib/bundler/source/rubygems.rb +231 -116
  169. data/lib/bundler/source/rubygems/remote.rb +30 -1
  170. data/lib/bundler/source_list.rb +103 -21
  171. data/lib/bundler/spec_set.rb +96 -51
  172. data/lib/bundler/stub_specification.rb +87 -4
  173. data/lib/bundler/templates/.document +1 -0
  174. data/lib/bundler/templates/Executable +14 -1
  175. data/lib/bundler/templates/Executable.bundler +114 -0
  176. data/lib/bundler/templates/Executable.standalone +6 -4
  177. data/lib/bundler/templates/Gemfile +4 -1
  178. data/lib/bundler/templates/gems.rb +8 -0
  179. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +79 -44
  180. data/lib/bundler/templates/newgem/Gemfile.tt +18 -2
  181. data/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
  182. data/lib/bundler/templates/newgem/README.md.tt +16 -10
  183. data/lib/bundler/templates/newgem/Rakefile.tt +22 -8
  184. data/lib/bundler/templates/newgem/bin/console.tt +2 -1
  185. data/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  186. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  187. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +4 -4
  188. data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +3 -3
  189. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  190. data/lib/bundler/templates/newgem/gitignore.tt +5 -1
  191. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  192. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +9 -6
  193. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +6 -4
  194. data/lib/bundler/templates/newgem/newgem.gemspec.tt +27 -28
  195. data/lib/bundler/templates/newgem/rspec.tt +1 -0
  196. data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  197. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +4 -4
  198. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -2
  199. data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +3 -1
  200. data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  201. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  202. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  203. data/lib/bundler/templates/newgem/{.travis.yml.tt → travis.yml.tt} +2 -0
  204. data/lib/bundler/ui.rb +5 -3
  205. data/lib/bundler/ui/rg_proxy.rb +3 -1
  206. data/lib/bundler/ui/shell.rb +54 -21
  207. data/lib/bundler/ui/silent.rb +26 -1
  208. data/lib/bundler/uri_credentials_filter.rb +43 -0
  209. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
  210. data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
  211. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
  212. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  213. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1764 -0
  214. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +11 -5
  215. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  216. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +81 -0
  217. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +113 -134
  218. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
  219. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
  220. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
  221. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  222. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
  223. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
  224. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
  225. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
  226. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +158 -0
  227. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +82 -8
  228. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +4 -1
  229. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +2 -0
  230. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +6 -2
  231. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +555 -150
  232. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +6 -3
  233. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +19 -12
  234. data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent.rb +310 -467
  235. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  236. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  237. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  238. data/lib/bundler/vendor/thor/lib/thor.rb +58 -25
  239. data/lib/bundler/vendor/thor/lib/thor/actions.rb +50 -33
  240. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  241. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +5 -3
  242. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +9 -19
  243. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +16 -8
  244. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +79 -22
  245. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +33 -20
  246. data/lib/bundler/vendor/thor/lib/thor/base.rb +110 -67
  247. data/lib/bundler/vendor/thor/lib/thor/command.rb +33 -24
  248. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
  249. data/lib/bundler/vendor/thor/lib/thor/error.rb +81 -3
  250. data/lib/bundler/vendor/thor/lib/thor/group.rb +16 -16
  251. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +5 -5
  252. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  253. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
  254. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  255. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  256. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  257. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +4 -7
  258. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +18 -18
  259. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +60 -26
  260. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +31 -13
  261. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  262. data/lib/bundler/vendor/thor/lib/thor/runner.rb +42 -39
  263. data/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
  264. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +109 -39
  265. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +7 -3
  266. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +5 -5
  267. data/lib/bundler/vendor/thor/lib/thor/util.rb +26 -9
  268. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  269. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  270. data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  271. data/lib/bundler/vendor/uri/lib/uri/common.rb +744 -0
  272. data/lib/bundler/vendor/uri/lib/uri/file.rb +94 -0
  273. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  274. data/lib/bundler/vendor/uri/lib/uri/generic.rb +1568 -0
  275. data/lib/bundler/vendor/uri/lib/uri/http.rb +88 -0
  276. data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  277. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  278. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +21 -0
  279. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +294 -0
  280. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  281. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +125 -0
  282. data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  283. data/lib/bundler/vendored_fileutils.rb +4 -0
  284. data/lib/bundler/vendored_molinillo.rb +3 -1
  285. data/lib/bundler/vendored_persistent.rb +45 -9
  286. data/lib/bundler/vendored_thor.rb +8 -3
  287. data/lib/bundler/vendored_tmpdir.rb +4 -0
  288. data/lib/bundler/vendored_uri.rb +4 -0
  289. data/lib/bundler/version.rb +7 -4
  290. data/lib/bundler/version_ranges.rb +122 -0
  291. data/lib/bundler/vlad.rb +8 -2
  292. data/lib/bundler/worker.rb +38 -6
  293. data/lib/bundler/yaml_serializer.rb +89 -0
  294. metadata +164 -158
  295. data/.gitignore +0 -16
  296. data/.rspec +0 -3
  297. data/.rubocop.yml +0 -105
  298. data/.rubocop_todo.yml +0 -120
  299. data/.travis.yml +0 -97
  300. data/CODE_OF_CONDUCT.md +0 -42
  301. data/CONTRIBUTING.md +0 -32
  302. data/DEVELOPMENT.md +0 -118
  303. data/ISSUES.md +0 -96
  304. data/Rakefile +0 -309
  305. data/bin/rake +0 -14
  306. data/bin/rspec +0 -10
  307. data/bin/rubocop +0 -11
  308. data/exe/bundle_ruby +0 -60
  309. data/lib/bundler/cli/package.rb +0 -45
  310. data/lib/bundler/environment.rb +0 -41
  311. data/lib/bundler/gem_path_manipulation.rb +0 -8
  312. data/lib/bundler/gem_remote_fetcher.rb +0 -41
  313. data/lib/bundler/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
  314. data/lib/bundler/ssl_certs/AddTrustExternalCARoot.pem +0 -32
  315. data/lib/bundler/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
  316. data/lib/bundler/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
  317. data/lib/bundler/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
  318. data/lib/bundler/ssl_certs/GeoTrustGlobalCA.pem +0 -20
  319. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -64
  320. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  321. data/lib/bundler/vendor/net/http/faster.rb +0 -26
  322. data/lib/bundler/vendor/net/http/persistent/ssl_reuse.rb +0 -128
  323. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -10
  324. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -98
  325. data/man/bundle-config.ronn +0 -187
  326. data/man/bundle-update.ronn +0 -188
  327. data/man/bundle.ronn +0 -98
  328. data/man/index.txt +0 -8
@@ -1,16 +1,18 @@
1
1
  class Bundler::Thor
2
2
  class Option < Argument #:nodoc:
3
- attr_reader :aliases, :group, :lazy_default, :hide
3
+ attr_reader :aliases, :group, :lazy_default, :hide, :repeatable
4
4
 
5
5
  VALID_TYPES = [:boolean, :numeric, :hash, :array, :string]
6
6
 
7
7
  def initialize(name, options = {})
8
+ @check_default_type = options[:check_default_type]
8
9
  options[:required] = false unless options.key?(:required)
10
+ @repeatable = options.fetch(:repeatable, false)
9
11
  super
10
- @lazy_default = options[:lazy_default]
11
- @group = options[:group].to_s.capitalize if options[:group]
12
- @aliases = Array(options[:aliases])
13
- @hide = options[:hide]
12
+ @lazy_default = options[:lazy_default]
13
+ @group = options[:group].to_s.capitalize if options[:group]
14
+ @aliases = Array(options[:aliases])
15
+ @hide = options[:hide]
14
16
  end
15
17
 
16
18
  # This parse quick options given as method_options. It makes several
@@ -40,31 +42,33 @@ class Bundler::Thor
40
42
  #
41
43
  # By default all options are optional, unless :required is given.
42
44
  #
43
- def self.parse(key, value) # rubocop:disable MethodLength
45
+ def self.parse(key, value)
44
46
  if key.is_a?(Array)
45
47
  name, *aliases = key
46
48
  else
47
- name, aliases = key, []
49
+ name = key
50
+ aliases = []
48
51
  end
49
52
 
50
53
  name = name.to_s
51
54
  default = value
52
55
 
53
56
  type = case value
54
- when Symbol
55
- default = nil
56
- if VALID_TYPES.include?(value)
57
- value
58
- elsif required = (value == :required) # rubocop:disable AssignmentInCondition
59
- :string
60
- end
61
- when TrueClass, FalseClass
62
- :boolean
63
- when Numeric
64
- :numeric
65
- when Hash, Array, String
66
- value.class.name.downcase.to_sym
67
- end
57
+ when Symbol
58
+ default = nil
59
+ if VALID_TYPES.include?(value)
60
+ value
61
+ elsif required = (value == :required) # rubocop:disable AssignmentInCondition
62
+ :string
63
+ end
64
+ when TrueClass, FalseClass
65
+ :boolean
66
+ when Numeric
67
+ :numeric
68
+ when Hash, Array, String
69
+ value.class.name.downcase.to_sym
70
+ end
71
+
68
72
  new(name.to_s, :required => required, :type => type, :default => default, :aliases => aliases)
69
73
  end
70
74
 
@@ -78,15 +82,15 @@ class Bundler::Thor
78
82
 
79
83
  def usage(padding = 0)
80
84
  sample = if banner && !banner.to_s.empty?
81
- "#{switch_name}=#{banner}"
85
+ "#{switch_name}=#{banner}".dup
82
86
  else
83
87
  switch_name
84
88
  end
85
89
 
86
- sample = "[#{sample}]" unless required?
90
+ sample = "[#{sample}]".dup unless required?
87
91
 
88
92
  if boolean?
89
- sample << ", [#{dasherize("no-" + human_name)}]" unless name == "force"
93
+ sample << ", [#{dasherize('no-' + human_name)}]" unless (name == "force") || name.start_with?("no-")
90
94
  end
91
95
 
92
96
  if aliases.empty?
@@ -107,7 +111,37 @@ class Bundler::Thor
107
111
  protected
108
112
 
109
113
  def validate!
110
- fail ArgumentError, "An option cannot be boolean and required." if boolean? && required?
114
+ raise ArgumentError, "An option cannot be boolean and required." if boolean? && required?
115
+ validate_default_type!
116
+ end
117
+
118
+ def validate_default_type!
119
+ default_type = case @default
120
+ when nil
121
+ return
122
+ when TrueClass, FalseClass
123
+ required? ? :string : :boolean
124
+ when Numeric
125
+ :numeric
126
+ when Symbol
127
+ :string
128
+ when Hash, Array, String
129
+ @default.class.name.downcase.to_sym
130
+ end
131
+
132
+ expected_type = (@repeatable && @type != :hash) ? :array : @type
133
+
134
+ if default_type != expected_type
135
+ err = "Expected #{expected_type} default value for '#{switch_name}'; got #{@default.inspect} (#{default_type})"
136
+
137
+ if @check_default_type
138
+ raise ArgumentError, err
139
+ elsif @check_default_type == nil
140
+ Bundler::Thor.deprecation_warning "#{err}.\n" +
141
+ 'This will be rejected in the future unless you explicitly pass the options `check_default_type: false`' +
142
+ ' or call `allow_incompatible_default_type!` in your code'
143
+ end
144
+ end
111
145
  end
112
146
 
113
147
  def dasherized?
@@ -119,7 +153,7 @@ class Bundler::Thor
119
153
  end
120
154
 
121
155
  def dasherize(str)
122
- (str.length > 1 ? "--" : "-") + str.gsub("_", "-")
156
+ (str.length > 1 ? "--" : "-") + str.tr("_", "-")
123
157
  end
124
158
  end
125
159
  end
@@ -14,23 +14,24 @@ class Bundler::Thor
14
14
  when true
15
15
  "--#{key}"
16
16
  when Array
17
- "--#{key} #{value.map { |v| v.inspect }.join(' ')}"
17
+ "--#{key} #{value.map(&:inspect).join(' ')}"
18
18
  when Hash
19
19
  "--#{key} #{value.map { |k, v| "#{k}:#{v}" }.join(' ')}"
20
20
  when nil, false
21
- ""
21
+ nil
22
22
  else
23
23
  "--#{key} #{value.inspect}"
24
24
  end
25
- end.join(" ")
25
+ end.compact.join(" ")
26
26
  end
27
27
 
28
28
  # Takes a hash of Bundler::Thor::Option and a hash with defaults.
29
29
  #
30
30
  # If +stop_on_unknown+ is true, #parse will stop as soon as it encounters
31
31
  # an unknown option or a regular argument.
32
- def initialize(hash_options = {}, defaults = {}, stop_on_unknown = false)
32
+ def initialize(hash_options = {}, defaults = {}, stop_on_unknown = false, disable_required_check = false)
33
33
  @stop_on_unknown = stop_on_unknown
34
+ @disable_required_check = disable_required_check
34
35
  options = hash_options.values
35
36
  super(options)
36
37
 
@@ -40,7 +41,10 @@ class Bundler::Thor
40
41
  @non_assigned_required.delete(hash_options[key])
41
42
  end
42
43
 
43
- @shorts, @switches, @extra = {}, {}, []
44
+ @shorts = {}
45
+ @switches = {}
46
+ @extra = []
47
+ @stopped_parsing_after_extra_index = nil
44
48
 
45
49
  options.each do |option|
46
50
  @switches[option.switch_name] = option
@@ -52,7 +56,7 @@ class Bundler::Thor
52
56
  end
53
57
  end
54
58
 
55
- def remaining # rubocop:disable TrivialAccessors
59
+ def remaining
56
60
  @extra
57
61
  end
58
62
 
@@ -63,6 +67,7 @@ class Bundler::Thor
63
67
  if result == OPTS_END
64
68
  shift
65
69
  @parsing_options = false
70
+ @stopped_parsing_after_extra_index ||= @extra.size
66
71
  super
67
72
  else
68
73
  result
@@ -92,10 +97,12 @@ class Bundler::Thor
92
97
 
93
98
  switch = normalize_switch(switch)
94
99
  option = switch_option(switch)
95
- @assigns[option.human_name] = parse_peek(switch, option)
100
+ result = parse_peek(switch, option)
101
+ assign_result!(option, result)
96
102
  elsif @stop_on_unknown
97
103
  @parsing_options = false
98
104
  @extra << shifted
105
+ @stopped_parsing_after_extra_index ||= @extra.size
99
106
  @extra << shift while peek
100
107
  break
101
108
  elsif match
@@ -109,7 +116,7 @@ class Bundler::Thor
109
116
  end
110
117
  end
111
118
 
112
- check_requirement!
119
+ check_requirement! unless @disable_required_check
113
120
 
114
121
  assigns = Bundler::Thor::CoreExt::HashWithIndifferentAccess.new(@assigns)
115
122
  assigns.freeze
@@ -117,13 +124,24 @@ class Bundler::Thor
117
124
  end
118
125
 
119
126
  def check_unknown!
127
+ to_check = @stopped_parsing_after_extra_index ? @extra[0...@stopped_parsing_after_extra_index] : @extra
128
+
120
129
  # an unknown option starts with - or -- and has no more --'s afterward.
121
- unknown = @extra.select { |str| str =~ /^--?(?:(?!--).)*$/ }
122
- fail UnknownArgumentError, "Unknown switches '#{unknown.join(', ')}'" unless unknown.empty?
130
+ unknown = to_check.select { |str| str =~ /^--?(?:(?!--).)*$/ }
131
+ raise UnknownArgumentError.new(@switches.keys, unknown) unless unknown.empty?
123
132
  end
124
133
 
125
134
  protected
126
135
 
136
+ def assign_result!(option, result)
137
+ if option.repeatable && option.type == :hash
138
+ (@assigns[option.human_name] ||= {}).merge!(result)
139
+ elsif option.repeatable
140
+ (@assigns[option.human_name] ||= []) << result
141
+ else
142
+ @assigns[option.human_name] = result
143
+ end
144
+ end
127
145
  # Check if the current value in peek is a registered switch.
128
146
  #
129
147
  # Two booleans are returned. The first is true if the current value
@@ -153,7 +171,7 @@ class Bundler::Thor
153
171
  end
154
172
 
155
173
  def switch?(arg)
156
- switch_option(normalize_switch(arg))
174
+ !switch_option(normalize_switch(arg)).nil?
157
175
  end
158
176
 
159
177
  def switch_option(arg)
@@ -186,7 +204,7 @@ class Bundler::Thor
186
204
  shift
187
205
  false
188
206
  else
189
- true
207
+ @switches.key?(switch) || !no_or_skip?(switch)
190
208
  end
191
209
  else
192
210
  @switches.key?(switch) || !no_or_skip?(switch)
@@ -207,7 +225,7 @@ class Bundler::Thor
207
225
  elsif option.lazy_default
208
226
  return option.lazy_default
209
227
  else
210
- fail MalformattedArgumentError, "No value provided for option '#{switch}'"
228
+ raise MalformattedArgumentError, "No value provided for option '#{switch}'"
211
229
  end
212
230
  end
213
231
 
@@ -25,6 +25,7 @@ class Bundler::Thor
25
25
  end
26
26
 
27
27
  def self.included(base)
28
+ super(base)
28
29
  # Hack. Make rakefile point to invoker, so rdoc task is generated properly.
29
30
  rakefile = File.basename(caller[0].match(/(.*):\d+/)[1])
30
31
  Rake.application.instance_variable_set(:@rakefile, rakefile)
@@ -1,20 +1,27 @@
1
- require "bundler/vendor/thor/lib/thor"
2
- require "bundler/vendor/thor/lib/thor/group"
3
- require "bundler/vendor/thor/lib/thor/core_ext/io_binary_read"
1
+ require_relative "../thor"
2
+ require_relative "group"
4
3
 
5
- require "fileutils"
6
- require "open-uri"
7
4
  require "yaml"
8
5
  require "digest/md5"
9
6
  require "pathname"
10
7
 
11
8
  class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLength
9
+ autoload :OpenURI, "open-uri"
10
+
12
11
  map "-T" => :list, "-i" => :install, "-u" => :update, "-v" => :version
13
12
 
13
+ def self.banner(command, all = false, subcommand = false)
14
+ "thor " + command.formatted_usage(self, all, subcommand)
15
+ end
16
+
17
+ def self.exit_on_failure?
18
+ true
19
+ end
20
+
14
21
  # Override Bundler::Thor#help so it can give information about any class and any method.
15
22
  #
16
23
  def help(meth = nil)
17
- if meth && !self.respond_to?(meth)
24
+ if meth && !respond_to?(meth)
18
25
  initialize_thorfiles(meth)
19
26
  klass, command = Bundler::Thor::Util.find_class_and_command_by_namespace(meth)
20
27
  self.class.handle_no_command_error(command, false) if klass.nil?
@@ -45,19 +52,21 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
45
52
  # command in said directory.
46
53
  begin
47
54
  if File.directory?(File.expand_path(name))
48
- base, package = File.join(name, "main.thor"), :directory
49
- contents = open(base) { |input| input.read }
55
+ base = File.join(name, "main.thor")
56
+ package = :directory
57
+ contents = open(base, &:read)
50
58
  else
51
- base, package = name, :file
52
- contents = open(name) { |input| input.read }
59
+ base = name
60
+ package = :file
61
+ contents = open(name, &:read)
53
62
  end
54
63
  rescue OpenURI::HTTPError
55
64
  raise Error, "Error opening URI '#{name}'"
56
65
  rescue Errno::ENOENT
57
- fail Error, "Error opening file '#{name}'"
66
+ raise Error, "Error opening file '#{name}'"
58
67
  end
59
68
 
60
- say "Your Bundler::Thorfile contains:"
69
+ say "Your Thorfile contains:"
61
70
  say contents
62
71
 
63
72
  unless options["force"]
@@ -94,6 +103,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
94
103
  if package == :file
95
104
  File.open(destination, "w") { |f| f.puts contents }
96
105
  else
106
+ require "fileutils"
97
107
  FileUtils.cp_r(name, destination)
98
108
  end
99
109
 
@@ -102,15 +112,16 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
102
112
 
103
113
  desc "version", "Show Bundler::Thor version"
104
114
  def version
105
- require "bundler/vendor/thor/lib/thor/version"
115
+ require_relative "version"
106
116
  say "Bundler::Thor #{Bundler::Thor::VERSION}"
107
117
  end
108
118
 
109
119
  desc "uninstall NAME", "Uninstall a named Bundler::Thor module"
110
120
  def uninstall(name)
111
- fail Error, "Can't find module '#{name}'" unless thor_yaml[name]
121
+ raise Error, "Can't find module '#{name}'" unless thor_yaml[name]
112
122
  say "Uninstalling #{name}."
113
- FileUtils.rm_rf(File.join(thor_root, "#{thor_yaml[name][:filename]}"))
123
+ require "fileutils"
124
+ FileUtils.rm_rf(File.join(thor_root, (thor_yaml[name][:filename]).to_s))
114
125
 
115
126
  thor_yaml.delete(name)
116
127
  save_yaml(thor_yaml)
@@ -120,7 +131,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
120
131
 
121
132
  desc "update NAME", "Update a Bundler::Thor file from its original location"
122
133
  def update(name)
123
- fail Error, "Can't find module '#{name}'" if !thor_yaml[name] || !thor_yaml[name][:location]
134
+ raise Error, "Can't find module '#{name}'" if !thor_yaml[name] || !thor_yaml[name][:location]
124
135
 
125
136
  say "Updating '#{name}' from #{thor_yaml[name][:location]}"
126
137
 
@@ -128,6 +139,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
128
139
  self.options = options.merge("as" => name)
129
140
 
130
141
  if File.directory? File.expand_path(name)
142
+ require "fileutils"
131
143
  FileUtils.rm_rf(File.join(thor_root, old_filename))
132
144
 
133
145
  thor_yaml.delete(old_filename)
@@ -138,9 +150,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
138
150
  filename = install(thor_yaml[name][:location])
139
151
  end
140
152
 
141
- unless filename == old_filename
142
- File.delete(File.join(thor_root, old_filename))
143
- end
153
+ File.delete(File.join(thor_root, old_filename)) unless filename == old_filename
144
154
  end
145
155
 
146
156
  desc "installed", "List the installed Bundler::Thor modules and commands"
@@ -168,10 +178,6 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
168
178
 
169
179
  private
170
180
 
171
- def self.banner(command, all = false, subcommand = false)
172
- "thor " + command.formatted_usage(self, all, subcommand)
173
- end
174
-
175
181
  def thor_root
176
182
  Bundler::Thor::Util.thor_root
177
183
  end
@@ -190,6 +196,7 @@ private
190
196
  yaml_file = File.join(thor_root, "thor.yml")
191
197
 
192
198
  unless File.exist?(yaml_file)
199
+ require "fileutils"
193
200
  FileUtils.mkdir_p(thor_root)
194
201
  yaml_file = File.join(thor_root, "thor.yml")
195
202
  FileUtils.touch(yaml_file)
@@ -198,11 +205,7 @@ private
198
205
  File.open(yaml_file, "w") { |f| f.puts yaml.to_yaml }
199
206
  end
200
207
 
201
- def self.exit_on_failure?
202
- true
203
- end
204
-
205
- # Load the Bundler::Thorfiles. If relevant_to is supplied, looks for specific files
208
+ # Load the Thorfiles. If relevant_to is supplied, looks for specific files
206
209
  # in the thor_root instead of loading them all.
207
210
  #
208
211
  # By default, it also traverses the current path until find Bundler::Thor files, as
@@ -215,11 +218,11 @@ private
215
218
  end
216
219
  end
217
220
 
218
- # Finds Bundler::Thorfiles by traversing from your current directory down to the root
221
+ # Finds Thorfiles by traversing from your current directory down to the root
219
222
  # directory of your system. If at any time we find a Bundler::Thor file, we stop.
220
223
  #
221
- # We also ensure that system-wide Bundler::Thorfiles are loaded first, so local
222
- # Bundler::Thorfiles can override them.
224
+ # We also ensure that system-wide Thorfiles are loaded first, so local
225
+ # Thorfiles can override them.
223
226
  #
224
227
  # ==== Example
225
228
  #
@@ -227,7 +230,7 @@ private
227
230
  #
228
231
  # 1. /Users/wycats/dev/thor
229
232
  # 2. /Users/wycats/dev
230
- # 3. /Users/wycats <-- we find a Bundler::Thorfile here, so we stop
233
+ # 3. /Users/wycats <-- we find a Thorfile here, so we stop
231
234
  #
232
235
  # Suppose we start at c:\Documents and Settings\james\dev\thor ...
233
236
  #
@@ -235,7 +238,7 @@ private
235
238
  # 2. c:\Documents and Settings\james\dev
236
239
  # 3. c:\Documents and Settings\james
237
240
  # 4. c:\Documents and Settings
238
- # 5. c:\ <-- no Bundler::Thorfiles found!
241
+ # 5. c:\ <-- no Thorfiles found!
239
242
  #
240
243
  def thorfiles(relevant_to = nil, skip_lookup = false)
241
244
  thorfiles = []
@@ -256,18 +259,18 @@ private
256
259
  end
257
260
  end
258
261
 
259
- # Load Bundler::Thorfiles relevant to the given method. If you provide "foo:bar" it
262
+ # Load Thorfiles relevant to the given method. If you provide "foo:bar" it
260
263
  # will load all thor files in the thor.yaml that has "foo" e "foo:bar"
261
264
  # namespaces registered.
262
265
  #
263
266
  def thorfiles_relevant_to(meth)
264
267
  lookup = [meth, meth.split(":")[0...-1].join(":")]
265
268
 
266
- files = thor_yaml.select do |k, v|
269
+ files = thor_yaml.select do |_, v|
267
270
  v[:namespaces] && !(v[:namespaces] & lookup).empty?
268
271
  end
269
272
 
270
- files.map { |k, v| File.join(thor_root, "#{v[:filename]}") }
273
+ files.map { |_, v| File.join(thor_root, (v[:filename]).to_s) }
271
274
  end
272
275
 
273
276
  # Display information about the given klasses. If with_module is given,
@@ -276,7 +279,7 @@ private
276
279
  def display_klasses(with_modules = false, show_internal = false, klasses = Bundler::Thor::Base.subclasses)
277
280
  klasses -= [Bundler::Thor, Bundler::Thor::Runner, Bundler::Thor::Group] unless show_internal
278
281
 
279
- fail Error, "No Bundler::Thor commands available" if klasses.empty?
282
+ raise Error, "No Bundler::Thor commands available" if klasses.empty?
280
283
  show_modules if with_modules && !thor_yaml.empty?
281
284
 
282
285
  list = Hash.new { |h, k| h[k] = [] }
@@ -306,8 +309,8 @@ private
306
309
  alias_method :display_tasks, :display_commands
307
310
 
308
311
  def show_modules #:nodoc:
309
- info = []
310
- labels = %w[Modules Namespaces]
312
+ info = []
313
+ labels = %w(Modules Namespaces)
311
314
 
312
315
  info << labels
313
316
  info << ["-" * labels[0].size, "-" * labels[1].size]