bundler 1.9.0 → 1.17.3

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 +1157 -6
  3. data/README.md +33 -6
  4. data/bundler.gemspec +51 -18
  5. data/exe/bundle +31 -0
  6. data/{bin → exe}/bundle_ruby +10 -6
  7. data/exe/bundler +4 -0
  8. data/lib/bundler.rb +326 -207
  9. data/lib/bundler/build_metadata.rb +53 -0
  10. data/lib/bundler/capistrano.rb +9 -3
  11. data/lib/bundler/cli.rb +522 -141
  12. data/lib/bundler/cli/add.rb +35 -0
  13. data/lib/bundler/cli/binstubs.rb +22 -11
  14. data/lib/bundler/cli/cache.rb +7 -6
  15. data/lib/bundler/cli/check.rb +11 -8
  16. data/lib/bundler/cli/clean.rb +7 -8
  17. data/lib/bundler/cli/common.rb +53 -7
  18. data/lib/bundler/cli/config.rb +84 -49
  19. data/lib/bundler/cli/console.rb +13 -8
  20. data/lib/bundler/cli/doctor.rb +140 -0
  21. data/lib/bundler/cli/exec.rb +77 -16
  22. data/lib/bundler/cli/gem.rb +120 -52
  23. data/lib/bundler/cli/info.rb +50 -0
  24. data/lib/bundler/cli/init.rb +21 -7
  25. data/lib/bundler/cli/inject.rb +37 -10
  26. data/lib/bundler/cli/install.rb +139 -78
  27. data/lib/bundler/cli/issue.rb +40 -0
  28. data/lib/bundler/cli/list.rb +58 -0
  29. data/lib/bundler/cli/lock.rb +63 -0
  30. data/lib/bundler/cli/open.rb +9 -6
  31. data/lib/bundler/cli/outdated.rb +221 -35
  32. data/lib/bundler/cli/package.rb +11 -7
  33. data/lib/bundler/cli/platform.rb +7 -4
  34. data/lib/bundler/cli/plugin.rb +24 -0
  35. data/lib/bundler/cli/pristine.rb +47 -0
  36. data/lib/bundler/cli/remove.rb +18 -0
  37. data/lib/bundler/cli/show.rb +11 -10
  38. data/lib/bundler/cli/update.rb +47 -29
  39. data/lib/bundler/cli/viz.rb +12 -8
  40. data/lib/bundler/compact_index_client.rb +109 -0
  41. data/lib/bundler/compact_index_client/cache.rb +118 -0
  42. data/lib/bundler/compact_index_client/updater.rb +116 -0
  43. data/lib/bundler/compatibility_guard.rb +14 -0
  44. data/lib/bundler/constants.rb +3 -1
  45. data/lib/bundler/current_ruby.rb +47 -137
  46. data/lib/bundler/definition.rb +599 -230
  47. data/lib/bundler/dep_proxy.rb +15 -10
  48. data/lib/bundler/dependency.rb +54 -25
  49. data/lib/bundler/deployment.rb +12 -2
  50. data/lib/bundler/deprecate.rb +33 -4
  51. data/lib/bundler/dsl.rb +383 -99
  52. data/lib/bundler/endpoint_specification.rb +72 -7
  53. data/lib/bundler/env.rb +121 -41
  54. data/lib/bundler/environment_preserver.rb +59 -0
  55. data/lib/bundler/errors.rb +158 -0
  56. data/lib/bundler/feature_flag.rb +74 -0
  57. data/lib/bundler/fetcher.rb +171 -280
  58. data/lib/bundler/fetcher/base.rb +52 -0
  59. data/lib/bundler/fetcher/compact_index.rb +126 -0
  60. data/lib/bundler/fetcher/dependency.rb +82 -0
  61. data/lib/bundler/fetcher/downloader.rb +84 -0
  62. data/lib/bundler/fetcher/index.rb +52 -0
  63. data/lib/bundler/friendly_errors.rb +113 -58
  64. data/lib/bundler/gem_helper.rb +73 -46
  65. data/lib/bundler/gem_helpers.rb +85 -9
  66. data/lib/bundler/gem_remote_fetcher.rb +43 -0
  67. data/lib/bundler/gem_tasks.rb +6 -1
  68. data/lib/bundler/gem_version_promoter.rb +190 -0
  69. data/lib/bundler/gemdeps.rb +29 -0
  70. data/lib/bundler/graph.rb +32 -49
  71. data/lib/bundler/index.rb +79 -67
  72. data/lib/bundler/injector.rb +219 -30
  73. data/lib/bundler/inline.rb +74 -0
  74. data/lib/bundler/installer.rb +191 -206
  75. data/lib/bundler/installer/gem_installer.rb +85 -0
  76. data/lib/bundler/installer/parallel_installer.rb +233 -0
  77. data/lib/bundler/installer/standalone.rb +53 -0
  78. data/lib/bundler/lazy_specification.rb +53 -13
  79. data/lib/bundler/lockfile_generator.rb +95 -0
  80. data/lib/bundler/lockfile_parser.rb +157 -62
  81. data/lib/bundler/match_platform.rb +15 -4
  82. data/lib/bundler/mirror.rb +223 -0
  83. data/lib/bundler/plugin.rb +292 -0
  84. data/lib/bundler/plugin/api.rb +81 -0
  85. data/lib/bundler/plugin/api/source.rb +306 -0
  86. data/lib/bundler/plugin/dsl.rb +53 -0
  87. data/lib/bundler/plugin/events.rb +61 -0
  88. data/lib/bundler/plugin/index.rb +162 -0
  89. data/lib/bundler/plugin/installer.rb +96 -0
  90. data/lib/bundler/plugin/installer/git.rb +38 -0
  91. data/lib/bundler/plugin/installer/rubygems.rb +27 -0
  92. data/lib/bundler/plugin/source_list.rb +27 -0
  93. data/lib/bundler/process_lock.rb +24 -0
  94. data/lib/bundler/psyched_yaml.rb +17 -6
  95. data/lib/bundler/remote_specification.rb +68 -11
  96. data/lib/bundler/resolver.rb +263 -229
  97. data/lib/bundler/resolver/spec_group.rb +106 -0
  98. data/lib/bundler/retry.rb +25 -19
  99. data/lib/bundler/ruby_dsl.rb +9 -2
  100. data/lib/bundler/ruby_version.rb +101 -66
  101. data/lib/bundler/rubygems_ext.rb +77 -37
  102. data/lib/bundler/rubygems_gem_installer.rb +106 -0
  103. data/lib/bundler/rubygems_integration.rb +450 -163
  104. data/lib/bundler/runtime.rb +133 -103
  105. data/lib/bundler/settings.rb +344 -83
  106. data/lib/bundler/settings/validator.rb +102 -0
  107. data/lib/bundler/setup.rb +7 -3
  108. data/lib/bundler/shared_helpers.rb +284 -54
  109. data/lib/bundler/similarity_detector.rb +21 -21
  110. data/lib/bundler/source.rb +68 -15
  111. data/lib/bundler/source/gemspec.rb +18 -0
  112. data/lib/bundler/source/git.rb +90 -55
  113. data/lib/bundler/source/git/git_proxy.rb +135 -35
  114. data/lib/bundler/source/metadata.rb +62 -0
  115. data/lib/bundler/source/path.rb +84 -61
  116. data/lib/bundler/source/path/installer.rb +53 -17
  117. data/lib/bundler/source/rubygems.rb +282 -122
  118. data/lib/bundler/source/rubygems/remote.rb +69 -0
  119. data/lib/bundler/source_list.rb +107 -22
  120. data/lib/bundler/spec_set.rb +83 -45
  121. data/lib/bundler/ssl_certs/certificate_manager.rb +8 -7
  122. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +21 -0
  123. data/lib/bundler/ssl_certs/{DigiCertHighAssuranceEVRootCA.pem → rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem} +0 -0
  124. data/lib/bundler/ssl_certs/{AddTrustExternalCARoot-2048.pem → rubygems.org/AddTrustExternalCARoot.pem} +0 -0
  125. data/lib/bundler/stub_specification.rb +108 -0
  126. data/lib/bundler/templates/.document +1 -0
  127. data/lib/bundler/templates/Executable +19 -6
  128. data/lib/bundler/templates/Executable.bundler +105 -0
  129. data/lib/bundler/templates/Executable.standalone +6 -4
  130. data/lib/bundler/templates/Gemfile +4 -1
  131. data/lib/bundler/templates/gems.rb +8 -0
  132. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +68 -7
  133. data/lib/bundler/templates/newgem/Gemfile.tt +4 -2
  134. data/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
  135. data/lib/bundler/templates/newgem/README.md.tt +19 -11
  136. data/lib/bundler/templates/newgem/Rakefile.tt +10 -6
  137. data/lib/bundler/templates/newgem/bin/console.tt +1 -1
  138. data/lib/bundler/templates/newgem/bin/setup.tt +2 -1
  139. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +4 -4
  140. data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +3 -3
  141. data/lib/bundler/templates/newgem/gitignore.tt +5 -1
  142. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +7 -6
  143. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +4 -4
  144. data/lib/bundler/templates/newgem/newgem.gemspec.tt +31 -15
  145. data/lib/bundler/templates/newgem/rspec.tt +1 -0
  146. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +3 -5
  147. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +14 -2
  148. data/lib/bundler/templates/newgem/test/{test_newgem.rb.tt → newgem_test.rb.tt} +2 -2
  149. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +4 -0
  150. data/lib/bundler/templates/newgem/travis.yml.tt +7 -0
  151. data/lib/bundler/ui.rb +5 -3
  152. data/lib/bundler/ui/rg_proxy.rb +5 -7
  153. data/lib/bundler/ui/shell.rb +69 -18
  154. data/lib/bundler/ui/silent.rb +26 -1
  155. data/lib/bundler/uri_credentials_filter.rb +37 -0
  156. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
  157. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +12 -0
  158. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
  159. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  160. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +81 -0
  161. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +223 -0
  162. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
  163. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
  164. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
  165. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  166. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
  167. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
  168. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
  169. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
  170. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +136 -0
  171. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +143 -0
  172. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  173. data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/specification_provider.rb +11 -0
  174. data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/ui.rb +6 -2
  175. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +837 -0
  176. data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/resolver.rb +6 -3
  177. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +58 -0
  178. data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/faster.rb +1 -0
  179. data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent.rb +27 -24
  180. data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent/ssl_reuse.rb +2 -1
  181. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor.rb +47 -22
  182. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions.rb +31 -29
  183. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_file.rb +3 -2
  184. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_link.rb +3 -2
  185. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/directory.rb +3 -3
  186. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/empty_directory.rb +16 -8
  187. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/file_manipulation.rb +66 -18
  188. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/inject_into_file.rb +18 -16
  189. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/base.rb +67 -44
  190. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/command.rb +13 -11
  191. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
  192. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +12 -0
  193. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +129 -0
  194. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/error.rb +3 -3
  195. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/group.rb +14 -14
  196. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/invocation.rb +4 -5
  197. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor.rb +2 -2
  198. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/basic.rb +2 -0
  199. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/readline.rb +0 -0
  200. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  201. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/argument.rb +4 -7
  202. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/arguments.rb +16 -16
  203. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/option.rb +42 -21
  204. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/options.rb +13 -10
  205. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/rake_compat.rb +1 -1
  206. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/runner.rb +35 -33
  207. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell.rb +4 -4
  208. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/basic.rb +49 -33
  209. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/color.rb +2 -2
  210. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/html.rb +5 -5
  211. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/util.rb +8 -7
  212. data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/version.rb +1 -1
  213. data/lib/bundler/vendored_fileutils.rb +9 -0
  214. data/lib/bundler/vendored_molinillo.rb +4 -5
  215. data/lib/bundler/vendored_persistent.rb +45 -4
  216. data/lib/bundler/vendored_thor.rb +8 -5
  217. data/lib/bundler/version.rb +23 -1
  218. data/lib/bundler/version_ranges.rb +76 -0
  219. data/lib/bundler/vlad.rb +8 -2
  220. data/lib/bundler/worker.rb +39 -6
  221. data/lib/bundler/yaml_serializer.rb +90 -0
  222. data/man/bundle-add.1 +58 -0
  223. data/man/bundle-add.1.txt +52 -0
  224. data/man/bundle-add.ronn +40 -0
  225. data/man/bundle-binstubs.1 +40 -0
  226. data/man/bundle-binstubs.1.txt +48 -0
  227. data/man/bundle-binstubs.ronn +43 -0
  228. data/man/bundle-check.1 +31 -0
  229. data/man/bundle-check.1.txt +33 -0
  230. data/man/bundle-check.ronn +26 -0
  231. data/man/bundle-clean.1 +24 -0
  232. data/man/bundle-clean.1.txt +26 -0
  233. data/man/bundle-clean.ronn +18 -0
  234. data/man/bundle-config.1 +497 -0
  235. data/man/bundle-config.1.txt +529 -0
  236. data/man/bundle-config.ronn +256 -31
  237. data/man/bundle-doctor.1 +44 -0
  238. data/man/bundle-doctor.1.txt +44 -0
  239. data/man/bundle-doctor.ronn +33 -0
  240. data/man/bundle-exec.1 +165 -0
  241. data/man/bundle-exec.1.txt +178 -0
  242. data/man/bundle-exec.ronn +19 -3
  243. data/man/bundle-gem.1 +80 -0
  244. data/man/bundle-gem.1.txt +91 -0
  245. data/man/bundle-gem.ronn +78 -0
  246. data/man/bundle-info.1 +20 -0
  247. data/man/bundle-info.1.txt +21 -0
  248. data/man/bundle-info.ronn +17 -0
  249. data/man/bundle-init.1 +25 -0
  250. data/man/bundle-init.1.txt +34 -0
  251. data/man/bundle-init.ronn +29 -0
  252. data/man/bundle-inject.1 +33 -0
  253. data/man/bundle-inject.1.txt +32 -0
  254. data/man/bundle-inject.ronn +22 -0
  255. data/man/bundle-install.1 +308 -0
  256. data/man/bundle-install.1.txt +396 -0
  257. data/man/bundle-install.ronn +64 -67
  258. data/man/bundle-list.1 +50 -0
  259. data/man/bundle-list.1.txt +43 -0
  260. data/man/bundle-list.ronn +33 -0
  261. data/man/bundle-lock.1 +84 -0
  262. data/man/bundle-lock.1.txt +93 -0
  263. data/man/bundle-lock.ronn +94 -0
  264. data/man/bundle-open.1 +32 -0
  265. data/man/bundle-open.1.txt +29 -0
  266. data/man/bundle-open.ronn +19 -0
  267. data/man/bundle-outdated.1 +155 -0
  268. data/man/bundle-outdated.1.txt +131 -0
  269. data/man/bundle-outdated.ronn +111 -0
  270. data/man/bundle-package.1 +55 -0
  271. data/man/bundle-package.1.txt +79 -0
  272. data/man/bundle-package.ronn +14 -8
  273. data/man/bundle-platform.1 +61 -0
  274. data/man/bundle-platform.1.txt +57 -0
  275. data/man/bundle-platform.ronn +1 -1
  276. data/man/bundle-pristine.1 +34 -0
  277. data/man/bundle-pristine.1.txt +44 -0
  278. data/man/bundle-pristine.ronn +34 -0
  279. data/man/bundle-remove.1 +31 -0
  280. data/man/bundle-remove.1.txt +34 -0
  281. data/man/bundle-remove.ronn +23 -0
  282. data/man/bundle-show.1 +23 -0
  283. data/man/bundle-show.1.txt +27 -0
  284. data/man/bundle-show.ronn +21 -0
  285. data/man/bundle-update.1 +394 -0
  286. data/man/bundle-update.1.txt +391 -0
  287. data/man/bundle-update.ronn +180 -18
  288. data/man/bundle-viz.1 +39 -0
  289. data/man/bundle-viz.1.txt +39 -0
  290. data/man/bundle-viz.ronn +30 -0
  291. data/man/bundle.1 +136 -0
  292. data/man/bundle.1.txt +116 -0
  293. data/man/bundle.ronn +46 -33
  294. data/man/gemfile.5 +689 -0
  295. data/man/gemfile.5.ronn +127 -79
  296. data/man/gemfile.5.txt +653 -0
  297. data/man/index.txt +25 -7
  298. metadata +242 -95
  299. data/.gitignore +0 -16
  300. data/.rspec +0 -3
  301. data/.travis.yml +0 -110
  302. data/CODE_OF_CONDUCT.md +0 -40
  303. data/CONTRIBUTING.md +0 -32
  304. data/DEVELOPMENT.md +0 -119
  305. data/ISSUES.md +0 -96
  306. data/Rakefile +0 -302
  307. data/UPGRADING.md +0 -103
  308. data/bin/bundle +0 -21
  309. data/bin/bundler +0 -21
  310. data/lib/bundler/anonymizable_uri.rb +0 -32
  311. data/lib/bundler/environment.rb +0 -42
  312. data/lib/bundler/gem_installer.rb +0 -9
  313. data/lib/bundler/gem_path_manipulation.rb +0 -8
  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/EntrustnetSecureServerCertificationAuthority.pem +0 -28
  317. data/lib/bundler/ssl_certs/GeoTrustGlobalCA.pem +0 -20
  318. data/lib/bundler/templates/newgem/.travis.yml.tt +0 -3
  319. data/lib/bundler/templates/newgem/test/minitest_helper.rb.tt +0 -4
  320. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo.rb +0 -5
  321. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/dependency_graph.rb +0 -266
  322. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/errors.rb +0 -69
  323. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/gem_metadata.rb +0 -3
  324. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/resolution.rb +0 -412
  325. data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/state.rb +0 -43
  326. data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/io_binary_read.rb +0 -10
  327. data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/ordered_hash.rb +0 -98
  328. data/lib/bundler/vendor/thor-0.19.1/lib/thor/parser.rb +0 -4
@@ -5,6 +5,7 @@ class Bundler::Thor
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)
9
10
  super
10
11
  @lazy_default = options[:lazy_default]
@@ -40,31 +41,33 @@ class Bundler::Thor
40
41
  #
41
42
  # By default all options are optional, unless :required is given.
42
43
  #
43
- def self.parse(key, value) # rubocop:disable MethodLength
44
+ def self.parse(key, value)
44
45
  if key.is_a?(Array)
45
46
  name, *aliases = key
46
47
  else
47
- name, aliases = key, []
48
+ name = key
49
+ aliases = []
48
50
  end
49
51
 
50
52
  name = name.to_s
51
53
  default = value
52
54
 
53
55
  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
56
+ when Symbol
57
+ default = nil
58
+ if VALID_TYPES.include?(value)
59
+ value
60
+ elsif required = (value == :required) # rubocop:disable AssignmentInCondition
61
+ :string
62
+ end
63
+ when TrueClass, FalseClass
64
+ :boolean
65
+ when Numeric
66
+ :numeric
67
+ when Hash, Array, String
68
+ value.class.name.downcase.to_sym
69
+ end
70
+
68
71
  new(name.to_s, :required => required, :type => type, :default => default, :aliases => aliases)
69
72
  end
70
73
 
@@ -78,15 +81,15 @@ class Bundler::Thor
78
81
 
79
82
  def usage(padding = 0)
80
83
  sample = if banner && !banner.to_s.empty?
81
- "#{switch_name}=#{banner}"
84
+ "#{switch_name}=#{banner}".dup
82
85
  else
83
86
  switch_name
84
87
  end
85
88
 
86
- sample = "[#{sample}]" unless required?
89
+ sample = "[#{sample}]".dup unless required?
87
90
 
88
91
  if boolean?
89
- sample << ", [#{dasherize("no-" + human_name)}]" unless name == "force"
92
+ sample << ", [#{dasherize('no-' + human_name)}]" unless (name == "force") || name.start_with?("no-")
90
93
  end
91
94
 
92
95
  if aliases.empty?
@@ -107,7 +110,25 @@ class Bundler::Thor
107
110
  protected
108
111
 
109
112
  def validate!
110
- fail ArgumentError, "An option cannot be boolean and required." if boolean? && required?
113
+ raise ArgumentError, "An option cannot be boolean and required." if boolean? && required?
114
+ validate_default_type! if @check_default_type
115
+ end
116
+
117
+ def validate_default_type!
118
+ default_type = case @default
119
+ when nil
120
+ return
121
+ when TrueClass, FalseClass
122
+ required? ? :string : :boolean
123
+ when Numeric
124
+ :numeric
125
+ when Symbol
126
+ :string
127
+ when Hash, Array, String
128
+ @default.class.name.downcase.to_sym
129
+ end
130
+
131
+ raise ArgumentError, "Expected #{@type} default value for '#{switch_name}'; got #{@default.inspect} (#{default_type})" unless default_type == @type
111
132
  end
112
133
 
113
134
  def dasherized?
@@ -119,7 +140,7 @@ class Bundler::Thor
119
140
  end
120
141
 
121
142
  def dasherize(str)
122
- (str.length > 1 ? "--" : "-") + str.gsub("_", "-")
143
+ (str.length > 1 ? "--" : "-") + str.tr("_", "-")
123
144
  end
124
145
  end
125
146
  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,9 @@ 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 = []
44
47
 
45
48
  options.each do |option|
46
49
  @switches[option.switch_name] = option
@@ -52,7 +55,7 @@ class Bundler::Thor
52
55
  end
53
56
  end
54
57
 
55
- def remaining # rubocop:disable TrivialAccessors
58
+ def remaining
56
59
  @extra
57
60
  end
58
61
 
@@ -109,7 +112,7 @@ class Bundler::Thor
109
112
  end
110
113
  end
111
114
 
112
- check_requirement!
115
+ check_requirement! unless @disable_required_check
113
116
 
114
117
  assigns = Bundler::Thor::CoreExt::HashWithIndifferentAccess.new(@assigns)
115
118
  assigns.freeze
@@ -119,7 +122,7 @@ class Bundler::Thor
119
122
  def check_unknown!
120
123
  # an unknown option starts with - or -- and has no more --'s afterward.
121
124
  unknown = @extra.select { |str| str =~ /^--?(?:(?!--).)*$/ }
122
- fail UnknownArgumentError, "Unknown switches '#{unknown.join(', ')}'" unless unknown.empty?
125
+ raise UnknownArgumentError, "Unknown switches '#{unknown.join(', ')}'" unless unknown.empty?
123
126
  end
124
127
 
125
128
  protected
@@ -186,7 +189,7 @@ class Bundler::Thor
186
189
  shift
187
190
  false
188
191
  else
189
- true
192
+ !no_or_skip?(switch)
190
193
  end
191
194
  else
192
195
  @switches.key?(switch) || !no_or_skip?(switch)
@@ -207,7 +210,7 @@ class Bundler::Thor
207
210
  elsif option.lazy_default
208
211
  return option.lazy_default
209
212
  else
210
- fail MalformattedArgumentError, "No value provided for option '#{switch}'"
213
+ raise MalformattedArgumentError, "No value provided for option '#{switch}'"
211
214
  end
212
215
  end
213
216
 
@@ -5,7 +5,7 @@ class Bundler::Thor
5
5
  # Adds a compatibility layer to your Bundler::Thor classes which allows you to use
6
6
  # rake package tasks. For example, to use rspec rake tasks, one can do:
7
7
  #
8
- # require 'thor/rake_compat'
8
+ # require 'bundler/vendor/thor/lib/thor/rake_compat'
9
9
  # require 'rspec/core/rake_task'
10
10
  #
11
11
  # class Default < Bundler::Thor
@@ -1,20 +1,26 @@
1
- require "thor"
2
- require "thor/group"
3
- require "thor/core_ext/io_binary_read"
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"
4
4
 
5
- require "fileutils"
6
- require "open-uri"
7
5
  require "yaml"
8
- require "digest/md5"
6
+ require "digest"
9
7
  require "pathname"
10
8
 
11
9
  class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLength
12
10
  map "-T" => :list, "-i" => :install, "-u" => :update, "-v" => :version
13
11
 
12
+ def self.banner(command, all = false, subcommand = false)
13
+ "thor " + command.formatted_usage(self, all, subcommand)
14
+ end
15
+
16
+ def self.exit_on_failure?
17
+ true
18
+ end
19
+
14
20
  # Override Bundler::Thor#help so it can give information about any class and any method.
15
21
  #
16
22
  def help(meth = nil)
17
- if meth && !self.respond_to?(meth)
23
+ if meth && !respond_to?(meth)
18
24
  initialize_thorfiles(meth)
19
25
  klass, command = Bundler::Thor::Util.find_class_and_command_by_namespace(meth)
20
26
  self.class.handle_no_command_error(command, false) if klass.nil?
@@ -45,16 +51,18 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
45
51
  # command in said directory.
46
52
  begin
47
53
  if File.directory?(File.expand_path(name))
48
- base, package = File.join(name, "main.thor"), :directory
49
- contents = open(base) { |input| input.read }
54
+ base = File.join(name, "main.thor")
55
+ package = :directory
56
+ contents = open(base, &:read)
50
57
  else
51
- base, package = name, :file
52
- contents = open(name) { |input| input.read }
58
+ base = name
59
+ package = :file
60
+ contents = open(name, &:read)
53
61
  end
54
62
  rescue OpenURI::HTTPError
55
63
  raise Error, "Error opening URI '#{name}'"
56
64
  rescue Errno::ENOENT
57
- fail Error, "Error opening file '#{name}'"
65
+ raise Error, "Error opening file '#{name}'"
58
66
  end
59
67
 
60
68
  say "Your Bundler::Thorfile contains:"
@@ -82,7 +90,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
82
90
  end
83
91
 
84
92
  thor_yaml[as] = {
85
- :filename => Digest::MD5.hexdigest(name + as),
93
+ :filename => Digest(:MD5).hexdigest(name + as),
86
94
  :location => location,
87
95
  :namespaces => Bundler::Thor::Util.namespaces_in_content(contents, base)
88
96
  }
@@ -94,6 +102,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
94
102
  if package == :file
95
103
  File.open(destination, "w") { |f| f.puts contents }
96
104
  else
105
+ require "fileutils"
97
106
  FileUtils.cp_r(name, destination)
98
107
  end
99
108
 
@@ -102,15 +111,16 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
102
111
 
103
112
  desc "version", "Show Bundler::Thor version"
104
113
  def version
105
- require "thor/version"
114
+ require "bundler/vendor/thor/lib/thor/version"
106
115
  say "Bundler::Thor #{Bundler::Thor::VERSION}"
107
116
  end
108
117
 
109
118
  desc "uninstall NAME", "Uninstall a named Bundler::Thor module"
110
119
  def uninstall(name)
111
- fail Error, "Can't find module '#{name}'" unless thor_yaml[name]
120
+ raise Error, "Can't find module '#{name}'" unless thor_yaml[name]
112
121
  say "Uninstalling #{name}."
113
- FileUtils.rm_rf(File.join(thor_root, "#{thor_yaml[name][:filename]}"))
122
+ require "fileutils"
123
+ FileUtils.rm_rf(File.join(thor_root, (thor_yaml[name][:filename]).to_s))
114
124
 
115
125
  thor_yaml.delete(name)
116
126
  save_yaml(thor_yaml)
@@ -120,7 +130,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
120
130
 
121
131
  desc "update NAME", "Update a Bundler::Thor file from its original location"
122
132
  def update(name)
123
- fail Error, "Can't find module '#{name}'" if !thor_yaml[name] || !thor_yaml[name][:location]
133
+ raise Error, "Can't find module '#{name}'" if !thor_yaml[name] || !thor_yaml[name][:location]
124
134
 
125
135
  say "Updating '#{name}' from #{thor_yaml[name][:location]}"
126
136
 
@@ -128,6 +138,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
128
138
  self.options = options.merge("as" => name)
129
139
 
130
140
  if File.directory? File.expand_path(name)
141
+ require "fileutils"
131
142
  FileUtils.rm_rf(File.join(thor_root, old_filename))
132
143
 
133
144
  thor_yaml.delete(old_filename)
@@ -138,9 +149,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
138
149
  filename = install(thor_yaml[name][:location])
139
150
  end
140
151
 
141
- unless filename == old_filename
142
- File.delete(File.join(thor_root, old_filename))
143
- end
152
+ File.delete(File.join(thor_root, old_filename)) unless filename == old_filename
144
153
  end
145
154
 
146
155
  desc "installed", "List the installed Bundler::Thor modules and commands"
@@ -168,10 +177,6 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
168
177
 
169
178
  private
170
179
 
171
- def self.banner(command, all = false, subcommand = false)
172
- "thor " + command.formatted_usage(self, all, subcommand)
173
- end
174
-
175
180
  def thor_root
176
181
  Bundler::Thor::Util.thor_root
177
182
  end
@@ -190,6 +195,7 @@ private
190
195
  yaml_file = File.join(thor_root, "thor.yml")
191
196
 
192
197
  unless File.exist?(yaml_file)
198
+ require "fileutils"
193
199
  FileUtils.mkdir_p(thor_root)
194
200
  yaml_file = File.join(thor_root, "thor.yml")
195
201
  FileUtils.touch(yaml_file)
@@ -198,10 +204,6 @@ private
198
204
  File.open(yaml_file, "w") { |f| f.puts yaml.to_yaml }
199
205
  end
200
206
 
201
- def self.exit_on_failure?
202
- true
203
- end
204
-
205
207
  # Load the Bundler::Thorfiles. If relevant_to is supplied, looks for specific files
206
208
  # in the thor_root instead of loading them all.
207
209
  #
@@ -263,11 +265,11 @@ private
263
265
  def thorfiles_relevant_to(meth)
264
266
  lookup = [meth, meth.split(":")[0...-1].join(":")]
265
267
 
266
- files = thor_yaml.select do |k, v|
268
+ files = thor_yaml.select do |_, v|
267
269
  v[:namespaces] && !(v[:namespaces] & lookup).empty?
268
270
  end
269
271
 
270
- files.map { |k, v| File.join(thor_root, "#{v[:filename]}") }
272
+ files.map { |_, v| File.join(thor_root, (v[:filename]).to_s) }
271
273
  end
272
274
 
273
275
  # Display information about the given klasses. If with_module is given,
@@ -276,7 +278,7 @@ private
276
278
  def display_klasses(with_modules = false, show_internal = false, klasses = Bundler::Thor::Base.subclasses)
277
279
  klasses -= [Bundler::Thor, Bundler::Thor::Runner, Bundler::Thor::Group] unless show_internal
278
280
 
279
- fail Error, "No Bundler::Thor commands available" if klasses.empty?
281
+ raise Error, "No Bundler::Thor commands available" if klasses.empty?
280
282
  show_modules if with_modules && !thor_yaml.empty?
281
283
 
282
284
  list = Hash.new { |h, k| h[k] = [] }
@@ -306,8 +308,8 @@ private
306
308
  alias_method :display_tasks, :display_commands
307
309
 
308
310
  def show_modules #:nodoc:
309
- info = []
310
- labels = %w[Modules Namespaces]
311
+ info = []
312
+ labels = %w(Modules Namespaces)
311
313
 
312
314
  info << labels
313
315
  info << ["-" * labels[0].size, "-" * labels[1].size]
@@ -9,7 +9,7 @@ class Bundler::Thor
9
9
  # it will use a colored log, otherwise it will use a basic one without color.
10
10
  #
11
11
  def shell
12
- @shell ||= if ENV["THOR_SHELL"] && ENV["THOR_SHELL"].size > 0
12
+ @shell ||= if ENV["THOR_SHELL"] && !ENV["THOR_SHELL"].empty?
13
13
  Bundler::Thor::Shell.const_get(ENV["THOR_SHELL"])
14
14
  elsif RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ && !ENV["ANSICON"]
15
15
  Bundler::Thor::Shell::Basic
@@ -24,9 +24,9 @@ class Bundler::Thor
24
24
  SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
25
25
  attr_writer :shell
26
26
 
27
- autoload :Basic, "thor/shell/basic"
28
- autoload :Color, "thor/shell/color"
29
- autoload :HTML, "thor/shell/html"
27
+ autoload :Basic, "bundler/vendor/thor/lib/thor/shell/basic"
28
+ autoload :Color, "bundler/vendor/thor/lib/thor/shell/color"
29
+ autoload :HTML, "bundler/vendor/thor/lib/thor/shell/html"
30
30
 
31
31
  # Add shell to initialize config values.
32
32
  #
@@ -1,16 +1,16 @@
1
- require "tempfile"
2
- require "io/console" if RUBY_VERSION > "1.9.2"
3
-
4
1
  class Bundler::Thor
5
2
  module Shell
6
- class Basic # rubocop:disable ClassLength
3
+ class Basic
7
4
  attr_accessor :base
8
5
  attr_reader :padding
9
6
 
10
7
  # Initialize base, mute and padding to nil.
11
8
  #
12
9
  def initialize #:nodoc:
13
- @base, @mute, @padding, @always_force = nil, false, 0, false
10
+ @base = nil
11
+ @mute = false
12
+ @padding = 0
13
+ @always_force = false
14
14
  end
15
15
 
16
16
  # Mute everything that's inside given block
@@ -24,7 +24,7 @@ class Bundler::Thor
24
24
 
25
25
  # Check if base is muted
26
26
  #
27
- def mute? # rubocop:disable TrivialAccessors
27
+ def mute?
28
28
  @mute
29
29
  end
30
30
 
@@ -34,6 +34,15 @@ class Bundler::Thor
34
34
  @padding = [0, value].max
35
35
  end
36
36
 
37
+ # Sets the output padding while executing a block and resets it.
38
+ #
39
+ def indent(count = 1)
40
+ orig_padding = padding
41
+ self.padding = padding + count
42
+ yield
43
+ self.padding = orig_padding
44
+ end
45
+
37
46
  # Asks something to the user and receives a response.
38
47
  #
39
48
  # If asked to limit the correct responses, you can pass in an
@@ -98,7 +107,7 @@ class Bundler::Thor
98
107
  status = set_color status, color, true if color
99
108
 
100
109
  buffer = "#{status}#{spaces}#{message}"
101
- buffer << "\n" unless buffer.end_with?("\n")
110
+ buffer = "#{buffer}\n" unless buffer.end_with?("\n")
102
111
 
103
112
  stdout.print(buffer)
104
113
  stdout.flush
@@ -148,10 +157,12 @@ class Bundler::Thor
148
157
  def print_table(array, options = {}) # rubocop:disable MethodLength
149
158
  return if array.empty?
150
159
 
151
- formats, indent, colwidth = [], options[:indent].to_i, options[:colwidth]
160
+ formats = []
161
+ indent = options[:indent].to_i
162
+ colwidth = options[:colwidth]
152
163
  options[:truncate] = terminal_width if options[:truncate] == true
153
164
 
154
- formats << "%-#{colwidth + 2}s" if colwidth
165
+ formats << "%-#{colwidth + 2}s".dup if colwidth
155
166
  start = colwidth ? 1 : 0
156
167
 
157
168
  colcount = array.max { |a, b| a.size <=> b.size }.size
@@ -161,32 +172,32 @@ class Bundler::Thor
161
172
  start.upto(colcount - 1) do |index|
162
173
  maxima = array.map { |row| row[index] ? row[index].to_s.size : 0 }.max
163
174
  maximas << maxima
164
- if index == colcount - 1
165
- # Don't output 2 trailing spaces when printing the last column
166
- formats << "%-s"
167
- else
168
- formats << "%-#{maxima + 2}s"
169
- end
175
+ formats << if index == colcount - 1
176
+ # Don't output 2 trailing spaces when printing the last column
177
+ "%-s".dup
178
+ else
179
+ "%-#{maxima + 2}s".dup
180
+ end
170
181
  end
171
182
 
172
183
  formats[0] = formats[0].insert(0, " " * indent)
173
184
  formats << "%s"
174
185
 
175
186
  array.each do |row|
176
- sentence = ""
187
+ sentence = "".dup
177
188
 
178
189
  row.each_with_index do |column, index|
179
190
  maxima = maximas[index]
180
191
 
181
- if column.is_a?(Numeric)
192
+ f = if column.is_a?(Numeric)
182
193
  if index == row.size - 1
183
194
  # Don't output 2 trailing spaces when printing the last column
184
- f = "%#{maxima}s"
195
+ "%#{maxima}s"
185
196
  else
186
- f = "%#{maxima}s "
197
+ "%#{maxima}s "
187
198
  end
188
199
  else
189
- f = formats[index]
200
+ formats[index]
190
201
  end
191
202
  sentence << f % column.to_s
192
203
  end
@@ -211,7 +222,7 @@ class Bundler::Thor
211
222
  paras = message.split("\n\n")
212
223
 
213
224
  paras.map! do |unwrapped|
214
- unwrapped.strip.gsub(/\n/, " ").squeeze(" ").gsub(/.{1,#{width}}(?:\s|\Z)/) { ($& + 5.chr).gsub(/\n\005/, "\n").gsub(/\005/, "\n") }
225
+ unwrapped.strip.tr("\n", " ").squeeze(" ").gsub(/.{1,#{width}}(?:\s|\Z)/) { ($& + 5.chr).gsub(/\n\005/, "\n").gsub(/\005/, "\n") }
215
226
  end
216
227
 
217
228
  paras.each do |para|
@@ -230,7 +241,7 @@ class Bundler::Thor
230
241
  # destination<String>:: the destination file to solve conflicts
231
242
  # block<Proc>:: an optional block that returns the value to be used in diff
232
243
  #
233
- def file_collision(destination) # rubocop:disable MethodLength
244
+ def file_collision(destination)
234
245
  return true if @always_force
235
246
  options = block_given? ? "[Ynaqdh]" : "[Ynaqh]"
236
247
 
@@ -241,6 +252,9 @@ class Bundler::Thor
241
252
  )
242
253
 
243
254
  case answer
255
+ when nil
256
+ say ""
257
+ return true
244
258
  when is?(:yes), is?(:force), ""
245
259
  return true
246
260
  when is?(:no), is?(:skip)
@@ -249,7 +263,7 @@ class Bundler::Thor
249
263
  return @always_force = true
250
264
  when is?(:quit)
251
265
  say "Aborting..."
252
- fail SystemExit
266
+ raise SystemExit
253
267
  when is?(:diff)
254
268
  show_diff(destination, yield) if block_given?
255
269
  say "Retrying..."
@@ -262,10 +276,10 @@ class Bundler::Thor
262
276
  # This code was copied from Rake, available under MIT-LICENSE
263
277
  # Copyright (c) 2003, 2004 Jim Weirich
264
278
  def terminal_width
265
- if ENV["THOR_COLUMNS"]
266
- result = ENV["THOR_COLUMNS"].to_i
279
+ result = if ENV["THOR_COLUMNS"]
280
+ ENV["THOR_COLUMNS"].to_i
267
281
  else
268
- result = unix? ? dynamic_width : 80
282
+ unix? ? dynamic_width : 80
269
283
  end
270
284
  result < 10 ? 80 : result
271
285
  rescue
@@ -284,7 +298,7 @@ class Bundler::Thor
284
298
  # Apply color to the given string with optional bold. Disabled in the
285
299
  # Bundler::Thor::Shell::Basic class.
286
300
  #
287
- def set_color(string, *args) #:nodoc:
301
+ def set_color(string, *) #:nodoc:
288
302
  string
289
303
  end
290
304
 
@@ -336,6 +350,7 @@ class Bundler::Thor
336
350
  def show_diff(destination, content) #:nodoc:
337
351
  diff_cmd = ENV["THOR_DIFF"] || ENV["RAILS_DIFF"] || "diff -u"
338
352
 
353
+ require "tempfile"
339
354
  Tempfile.open(File.basename(destination), File.dirname(destination)) do |temp|
340
355
  temp.write content
341
356
  temp.rewind
@@ -353,11 +368,11 @@ class Bundler::Thor
353
368
  end
354
369
 
355
370
  def dynamic_width_stty
356
- %x(stty size 2>/dev/null).split[1].to_i
371
+ `stty size 2>/dev/null`.split[1].to_i
357
372
  end
358
373
 
359
374
  def dynamic_width_tput
360
- %x(tput cols 2>/dev/null).to_i
375
+ `tput cols 2>/dev/null`.to_i
361
376
  end
362
377
 
363
378
  def unix?
@@ -370,7 +385,7 @@ class Bundler::Thor
370
385
  if chars.length <= width
371
386
  chars.join
372
387
  else
373
- ( chars[0, width - 3].join) + "..."
388
+ chars[0, width - 3].join + "..."
374
389
  end
375
390
  end
376
391
  end
@@ -381,7 +396,8 @@ class Bundler::Thor
381
396
  end
382
397
  else
383
398
  def as_unicode
384
- old, $KCODE = $KCODE, "U"
399
+ old = $KCODE
400
+ $KCODE = "U"
385
401
  yield
386
402
  ensure
387
403
  $KCODE = old
@@ -391,12 +407,12 @@ class Bundler::Thor
391
407
  def ask_simply(statement, color, options)
392
408
  default = options[:default]
393
409
  message = [statement, ("(#{default})" if default), nil].uniq.join(" ")
394
- message = prepare_message(message, color)
410
+ message = prepare_message(message, *color)
395
411
  result = Bundler::Thor::LineEditor.readline(message, options)
396
412
 
397
413
  return unless result
398
414
 
399
- result.strip!
415
+ result = result.strip
400
416
 
401
417
  if default && result == ""
402
418
  default