bundler 2.2.34 → 2.3.0

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -0
  3. data/exe/bundle +7 -8
  4. data/lib/bundler/build_metadata.rb +2 -2
  5. data/lib/bundler/cli/gem.rb +1 -1
  6. data/lib/bundler/cli/install.rb +2 -0
  7. data/lib/bundler/cli.rb +5 -0
  8. data/lib/bundler/definition.rb +14 -2
  9. data/lib/bundler/dependency.rb +5 -7
  10. data/lib/bundler/dsl.rb +0 -27
  11. data/lib/bundler/endpoint_specification.rb +0 -8
  12. data/lib/bundler/fetcher/compact_index.rb +9 -4
  13. data/lib/bundler/fetcher.rb +2 -5
  14. data/lib/bundler/injector.rb +10 -1
  15. data/lib/bundler/installer/gem_installer.rb +1 -6
  16. data/lib/bundler/installer.rb +1 -4
  17. data/lib/bundler/lockfile_parser.rb +10 -13
  18. data/lib/bundler/man/bundle-add.1 +9 -1
  19. data/lib/bundler/man/bundle-add.1.ronn +7 -1
  20. data/lib/bundler/man/bundle-config.1 +2 -2
  21. data/lib/bundler/man/bundle-config.1.ronn +3 -3
  22. data/lib/bundler/man/bundle-install.1 +1 -1
  23. data/lib/bundler/man/bundle-install.1.ronn +2 -2
  24. data/lib/bundler/man/bundle-update.1 +1 -1
  25. data/lib/bundler/man/bundle-update.1.ronn +2 -1
  26. data/lib/bundler/man/gemfile.5 +1 -1
  27. data/lib/bundler/man/gemfile.5.ronn +1 -1
  28. data/lib/bundler/plugin/installer.rb +1 -1
  29. data/lib/bundler/process_lock.rb +1 -1
  30. data/lib/bundler/psyched_yaml.rb +1 -13
  31. data/lib/bundler/resolver.rb +34 -29
  32. data/lib/bundler/rubygems_ext.rb +2 -0
  33. data/lib/bundler/rubygems_integration.rb +11 -48
  34. data/lib/bundler/self_manager.rb +73 -0
  35. data/lib/bundler/shared_helpers.rb +2 -9
  36. data/lib/bundler/source/metadata.rb +1 -1
  37. data/lib/bundler/templates/Executable.bundler +1 -1
  38. data/lib/bundler/templates/Gemfile +0 -2
  39. data/lib/bundler/templates/gems.rb +0 -3
  40. data/lib/bundler/templates/newgem/Rakefile.tt +10 -1
  41. data/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  42. data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  43. data/lib/bundler/ui/shell.rb +1 -1
  44. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +6 -6
  45. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +2 -1
  46. data/lib/bundler/vendor/thor/lib/thor/actions.rb +2 -6
  47. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +0 -6
  48. data/lib/bundler/vendor/thor/lib/thor/error.rb +4 -9
  49. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +1 -19
  50. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +4 -22
  51. data/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  52. data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  53. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  54. data/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
  55. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
  56. data/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
  57. data/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
  58. data/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
  59. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  60. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
  61. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
  62. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
  63. data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  64. data/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
  65. data/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
  66. data/lib/bundler/vendor/uri/lib/uri.rb +0 -1
  67. data/lib/bundler/version.rb +1 -1
  68. data/lib/bundler.rb +9 -3
  69. metadata +7 -5
  70. data/lib/bundler/gemdeps.rb +0 -29
@@ -134,6 +134,7 @@ module Bundler
134
134
  end
135
135
  nested.reduce([]) do |groups, (version, specs)|
136
136
  next groups if locked_requirement && !locked_requirement.satisfied_by?(version)
137
+ next groups unless specs.any? {|spec| spec.match_platform(platform) }
137
138
 
138
139
  specs_by_platform = Hash.new do |current_specs, current_platform|
139
140
  current_specs[current_platform] = select_best_platform_match(specs, current_platform)
@@ -145,7 +146,7 @@ module Bundler
145
146
  next groups if @resolving_only_for_ruby
146
147
 
147
148
  spec_group = SpecGroup.create_for(specs_by_platform, @platforms, platform)
148
- groups << spec_group if spec_group
149
+ groups << spec_group
149
150
 
150
151
  groups
151
152
  end
@@ -262,30 +263,37 @@ module Bundler
262
263
  "If you are updating multiple gems in your Gemfile at once,\n" \
263
264
  "try passing them all to `bundle update`"
264
265
  else
265
- source = source_for(name)
266
- specs = source.specs.search(name)
267
- versions_with_platforms = specs.map {|s| [s.version, s.platform] }
268
- cache_message = begin
269
- " or in gems cached in #{Bundler.settings.app_cache_path}" if Bundler.app_cache.exist?
270
- rescue GemfileNotFound
271
- nil
272
- end
273
- message = String.new("Could not find gem '#{SharedHelpers.pretty_dependency(requirement)}' in #{source}#{cache_message}.\n")
274
- message << "The source contains the following versions of '#{name}': #{formatted_versions_with_platforms(versions_with_platforms)}" if versions_with_platforms.any?
266
+ message = gem_not_found_message(name, requirement, source_for(name))
275
267
  end
276
268
  raise GemNotFound, message
277
269
  end
278
270
  end
279
271
 
280
- def formatted_versions_with_platforms(versions_with_platforms)
281
- version_platform_strs = versions_with_platforms.map do |vwp|
282
- version = vwp.first
283
- platform = vwp.last
284
- version_platform_str = String.new(version.to_s)
285
- version_platform_str << " #{platform}" unless platform.nil? || platform == Gem::Platform::RUBY
286
- version_platform_str
272
+ def gem_not_found_message(name, requirement, source, extra_message = "")
273
+ specs = source.specs.search(name)
274
+ matching_part = name
275
+ requirement_label = SharedHelpers.pretty_dependency(requirement)
276
+ cache_message = begin
277
+ " or in gems cached in #{Bundler.settings.app_cache_path}" if Bundler.app_cache.exist?
278
+ rescue GemfileNotFound
279
+ nil
280
+ end
281
+ specs_matching_requirement = specs.select {| spec| requirement.matches_spec?(spec) }
282
+
283
+ if specs_matching_requirement.any?
284
+ specs = specs_matching_requirement
285
+ matching_part = requirement_label
286
+ requirement_label = "#{requirement_label} #{requirement.__platform}"
287
287
  end
288
- version_platform_strs.join(", ")
288
+
289
+ message = String.new("Could not find gem '#{requirement_label}'#{extra_message} in #{source}#{cache_message}.\n")
290
+
291
+ if specs.any?
292
+ message << "\nThe source contains the following gems matching '#{matching_part}':\n"
293
+ message << specs.map {|s| " * #{s.full_name}" }.join("\n")
294
+ end
295
+
296
+ message
289
297
  end
290
298
 
291
299
  def version_conflict_message(e)
@@ -357,19 +365,16 @@ module Bundler
357
365
 
358
366
  metadata_requirement = name.end_with?("\0")
359
367
 
360
- o << "Could not find gem '" unless metadata_requirement
361
- o << SharedHelpers.pretty_dependency(conflict.requirement)
362
- o << "'" unless metadata_requirement
363
- if conflict.requirement_trees.first.size > 1
364
- o << ", which is required by "
365
- o << "gem '#{SharedHelpers.pretty_dependency(conflict.requirement_trees.first[-2])}',"
368
+ extra_message = if conflict.requirement_trees.first.size > 1
369
+ ", which is required by gem '#{SharedHelpers.pretty_dependency(conflict.requirement_trees.first[-2])}',"
370
+ else
371
+ ""
366
372
  end
367
- o << " "
368
373
 
369
- o << if metadata_requirement
370
- "is not available in #{relevant_source}"
374
+ if metadata_requirement
375
+ o << "#{SharedHelpers.pretty_dependency(conflict.requirement)}#{extra_message} is not available in #{relevant_source}"
371
376
  else
372
- "in #{relevant_source}.\n"
377
+ o << gem_not_found_message(name, conflict.requirement, relevant_source, extra_message)
373
378
  end
374
379
  end
375
380
  end,
@@ -138,6 +138,8 @@ module Gem
138
138
  class Requirement
139
139
  module OrderIndependentComparison
140
140
  def ==(other)
141
+ return unless Gem::Requirement === other
142
+
141
143
  if _requirements_sorted? && other._requirements_sorted?
142
144
  super
143
145
  else
@@ -12,25 +12,21 @@ module Bundler
12
12
  EXT_LOCK = Monitor.new
13
13
  end
14
14
 
15
- def self.version
16
- @version ||= Gem::Version.new(Gem::VERSION)
17
- end
18
-
19
- def self.provides?(req_str)
20
- Gem::Requirement.new(req_str).satisfied_by?(version)
21
- end
22
-
23
15
  def initialize
24
16
  @replaced_methods = {}
25
17
  backport_ext_builder_monitor
26
18
  end
27
19
 
28
20
  def version
29
- self.class.version
21
+ @version ||= Gem.rubygems_version
30
22
  end
31
23
 
32
24
  def provides?(req_str)
33
- self.class.provides?(req_str)
25
+ Gem::Requirement.new(req_str).satisfied_by?(version)
26
+ end
27
+
28
+ def supports_bundler_trampolining?
29
+ provides?(">= 3.3.0.a")
34
30
  end
35
31
 
36
32
  def build_args
@@ -115,7 +111,7 @@ module Bundler
115
111
  Bundler.ui.error "#{e.class}: #{e.message}"
116
112
  Bundler.ui.trace e
117
113
  raise
118
- rescue YamlLibrarySyntaxError => e
114
+ rescue ::Psych::SyntaxError => e
119
115
  raise YamlSyntaxError.new(e, "Your RubyGems configuration, which is " \
120
116
  "usually located in ~/.gemrc, contains invalid YAML syntax.")
121
117
  end
@@ -142,19 +138,6 @@ module Bundler
142
138
  end
143
139
  end
144
140
 
145
- def sources=(val)
146
- # Gem.configuration creates a new Gem::ConfigFile, which by default will read ~/.gemrc
147
- # If that file exists, its settings (including sources) will overwrite the values we
148
- # are about to set here. In order to avoid that, we force memoizing the config file now.
149
- configuration
150
-
151
- Gem.sources = val
152
- end
153
-
154
- def sources
155
- Gem.sources
156
- end
157
-
158
141
  def gem_dir
159
142
  Gem.dir
160
143
  end
@@ -232,18 +215,6 @@ module Bundler
232
215
  EXT_LOCK
233
216
  end
234
217
 
235
- def with_build_args(args)
236
- ext_lock.synchronize do
237
- old_args = build_args
238
- begin
239
- self.build_args = args
240
- yield
241
- ensure
242
- self.build_args = old_args
243
- end
244
- end
245
- end
246
-
247
218
  def spec_from_gem(path, policy = nil)
248
219
  require "rubygems/security"
249
220
  require_relative "psyched_yaml"
@@ -571,10 +542,6 @@ module Bundler
571
542
  Gem::REPOSITORY_SUBDIRECTORIES
572
543
  end
573
544
 
574
- def install_with_build_args(args)
575
- yield
576
- end
577
-
578
545
  def path_separator
579
546
  Gem.path_separator
580
547
  end
@@ -604,6 +571,10 @@ module Bundler
604
571
  end
605
572
  end
606
573
 
574
+ def find_bundler(version)
575
+ find_name("bundler").find {|s| s.version.to_s == version }
576
+ end
577
+
607
578
  def find_name(name)
608
579
  Gem::Specification.stubs_for(name).map(&:to_spec)
609
580
  end
@@ -617,14 +588,6 @@ module Bundler
617
588
  Gem::Specification.send(:default_stubs, "*.gemspec")
618
589
  end
619
590
  end
620
-
621
- def use_gemdeps(gemfile)
622
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path(gemfile)
623
- require_relative "gemdeps"
624
- runtime = Bundler.setup
625
- activated_spec_names = runtime.requested_specs.map(&:to_spec).sort_by(&:name)
626
- [Gemdeps.new(runtime), activated_spec_names]
627
- end
628
591
  end
629
592
 
630
593
  def self.rubygems
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ #
5
+ # This class handles installing and switching to the version of bundler needed
6
+ # by an application.
7
+ #
8
+ class SelfManager
9
+ def restart_with_locked_bundler_if_needed
10
+ return unless needs_switching? && installed?
11
+
12
+ restart_with_locked_bundler
13
+ end
14
+
15
+ def install_locked_bundler_and_restart_with_it_if_needed
16
+ return unless needs_switching?
17
+
18
+ Bundler.ui.info \
19
+ "Bundler #{current_version} is running, but your lockfile was generated with #{lockfile_version}. " \
20
+ "Installing Bundler #{lockfile_version} and restarting using that version."
21
+
22
+ install_and_restart_with_locked_bundler
23
+ end
24
+
25
+ private
26
+
27
+ def install_and_restart_with_locked_bundler
28
+ bundler_dep = Gem::Dependency.new("bundler", lockfile_version)
29
+
30
+ Gem.install(bundler_dep)
31
+ rescue StandardError => e
32
+ Bundler.ui.trace e
33
+ Bundler.ui.warn "There was an error installing the locked bundler version (#{lockfile_version}), rerun with the `--verbose` flag for more details. Going on using bundler #{current_version}."
34
+ else
35
+ restart_with_locked_bundler
36
+ end
37
+
38
+ def restart_with_locked_bundler
39
+ configured_gem_home = ENV["GEM_HOME"]
40
+ configured_gem_path = ENV["GEM_PATH"]
41
+
42
+ Bundler.with_original_env do
43
+ Kernel.exec(
44
+ { "GEM_HOME" => configured_gem_home, "GEM_PATH" => configured_gem_path, "BUNDLER_VERSION" => lockfile_version },
45
+ $PROGRAM_NAME, *ARGV
46
+ )
47
+ end
48
+ end
49
+
50
+ def needs_switching?
51
+ ENV["BUNDLER_VERSION"].nil? &&
52
+ Bundler.rubygems.supports_bundler_trampolining? &&
53
+ SharedHelpers.in_bundle? &&
54
+ lockfile_version &&
55
+ !lockfile_version.end_with?(".dev") &&
56
+ lockfile_version != current_version
57
+ end
58
+
59
+ def installed?
60
+ Bundler.configure
61
+
62
+ Bundler.rubygems.find_bundler(lockfile_version)
63
+ end
64
+
65
+ def current_version
66
+ @current_version ||= Bundler::VERSION
67
+ end
68
+
69
+ def lockfile_version
70
+ @lockfile_version ||= Bundler::LockfileParser.bundled_with
71
+ end
72
+ end
73
+ end
@@ -109,7 +109,7 @@ module Bundler
109
109
  raise VirtualProtocolError.new
110
110
  rescue Errno::ENOSPC
111
111
  raise NoSpaceOnDeviceError.new(path, action)
112
- rescue *[const_get_safely(:ENOTSUP, Errno)].compact
112
+ rescue Errno::ENOTSUP
113
113
  raise OperationNotSupportedError.new(path, action)
114
114
  rescue Errno::EEXIST, Errno::ENOENT
115
115
  raise
@@ -117,13 +117,6 @@ module Bundler
117
117
  raise GenericSystemCallError.new(e, "There was an error accessing `#{path}`.")
118
118
  end
119
119
 
120
- def const_get_safely(constant_name, namespace)
121
- const_in_namespace = namespace.constants.include?(constant_name.to_s) ||
122
- namespace.constants.include?(constant_name.to_sym)
123
- return nil unless const_in_namespace
124
- namespace.const_get(constant_name)
125
- end
126
-
127
120
  def major_deprecation(major_version, message, print_caller_location: false)
128
121
  if print_caller_location
129
122
  caller_location = caller_locations(2, 2).first
@@ -246,7 +239,7 @@ module Bundler
246
239
  current = File.expand_path(SharedHelpers.pwd).tap{|x| x.untaint if RUBY_VERSION < "2.7" }
247
240
 
248
241
  until !File.directory?(current) || current == previous
249
- if ENV["BUNDLE_SPEC_RUN"]
242
+ if ENV["BUNDLER_SPEC_RUN"]
250
243
  # avoid stepping above the tmp directory when testing
251
244
  gemspec = if ENV["GEM_COMMAND"]
252
245
  # for Ruby Core
@@ -25,7 +25,7 @@ module Bundler
25
25
  s.loaded_from = File.expand_path("..", __FILE__)
26
26
  end
27
27
 
28
- if local_spec = Bundler.rubygems.find_name("bundler").find {|s| s.version.to_s == VERSION }
28
+ if local_spec = Bundler.rubygems.find_bundler(VERSION)
29
29
  idx << local_spec
30
30
  end
31
31
 
@@ -73,7 +73,7 @@ m = Module.new do
73
73
 
74
74
  requirement = bundler_gem_version.approximate_recommendation
75
75
 
76
- return requirement unless Gem::Version.new(Gem::VERSION) < Gem::Version.new("2.7.0")
76
+ return requirement unless Gem.rubygems_version < Gem::Version.new("2.7.0")
77
77
 
78
78
  requirement += ".a" if bundler_gem_version.prerelease?
79
79
 
@@ -2,6 +2,4 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
-
7
5
  # gem "rails"
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # A sample gems.rb
4
3
  source "https://rubygems.org"
5
4
 
6
- git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
7
-
8
5
  # gem "rails"
@@ -3,7 +3,16 @@
3
3
  require "bundler/gem_tasks"
4
4
  <% default_task_names = [config[:test_task]].compact -%>
5
5
  <% case config[:test] -%>
6
- <% when "minitest", "test-unit" -%>
6
+ <% when "minitest" -%>
7
+ require "rake/testtask"
8
+
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << "test"
11
+ t.libs << "lib"
12
+ t.test_files = FileList["test/**/test_*.rb"]
13
+ end
14
+
15
+ <% when "test-unit" -%>
7
16
  require "rake/testtask"
8
17
 
9
18
  Rake::TestTask.new(:test) do |t|
@@ -39,6 +39,6 @@ Gem::Specification.new do |spec|
39
39
  # Uncomment to register a new dependency of your gem
40
40
  # spec.add_dependency "example-gem", "~> 1.0"
41
41
 
42
- # For more information and examples about making a new gem, checkout our
42
+ # For more information and examples about making a new gem, check out our
43
43
  # guide at: https://bundler.io/guides/creating_gem.html
44
44
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require "test_helper"
4
4
 
5
- class <%= config[:constant_name] %>Test < Minitest::Test
5
+ class Test<%= config[:constant_name] %> < Minitest::Test
6
6
  def test_that_it_has_a_version_number
7
7
  refute_nil ::<%= config[:constant_name] %>::VERSION
8
8
  end
@@ -81,7 +81,7 @@ module Bundler
81
81
  def trace(e, newline = nil, force = false)
82
82
  return unless debug? || force
83
83
  msg = "#{e.class}: #{e.message}\n#{e.backtrace.join("\n ")}"
84
- tell_me(msg, nil, newline)
84
+ tell_err(msg, nil, newline)
85
85
  end
86
86
 
87
87
  def silence(&blk)
@@ -210,9 +210,9 @@ class Bundler::Thor
210
210
  #
211
211
  # ==== Examples
212
212
  #
213
- # inject_into_class "app/controllers/application_controller.rb", "ApplicationController", " filter_parameter :password\n"
213
+ # inject_into_class "app/controllers/application_controller.rb", ApplicationController, " filter_parameter :password\n"
214
214
  #
215
- # inject_into_class "app/controllers/application_controller.rb", "ApplicationController" do
215
+ # inject_into_class "app/controllers/application_controller.rb", ApplicationController do
216
216
  # " filter_parameter :password\n"
217
217
  # end
218
218
  #
@@ -233,9 +233,9 @@ class Bundler::Thor
233
233
  #
234
234
  # ==== Examples
235
235
  #
236
- # inject_into_module "app/helpers/application_helper.rb", "ApplicationHelper", " def help; 'help'; end\n"
236
+ # inject_into_module "app/helpers/application_helper.rb", ApplicationHelper, " def help; 'help'; end\n"
237
237
  #
238
- # inject_into_module "app/helpers/application_helper.rb", "ApplicationHelper" do
238
+ # inject_into_module "app/helpers/application_helper.rb", ApplicationHelper do
239
239
  # " def help; 'help'; end\n"
240
240
  # end
241
241
  #
@@ -252,7 +252,7 @@ class Bundler::Thor
252
252
  # flag<Regexp|String>:: the regexp or string to be replaced
253
253
  # replacement<String>:: the replacement, can be also given as a block
254
254
  # config<Hash>:: give :verbose => false to not log the status, and
255
- # :force => true, to force the replacement regardles of runner behavior.
255
+ # :force => true, to force the replacement regardless of runner behavior.
256
256
  #
257
257
  # ==== Example
258
258
  #
@@ -331,7 +331,7 @@ class Bundler::Thor
331
331
  path = File.expand_path(path, destination_root)
332
332
 
333
333
  say_status :remove, relative_to_original_destination_root(path), config.fetch(:verbose, true)
334
- if !options[:pretend] && (File.exist?(path) || File.symlink?(path))
334
+ if !options[:pretend] && File.exist?(path)
335
335
  require "fileutils"
336
336
  ::FileUtils.rm_rf(path)
337
337
  end
@@ -106,11 +106,12 @@ class Bundler::Thor
106
106
  # Adds the content to the file.
107
107
  #
108
108
  def replace!(regexp, string, force)
109
+ return if pretend?
109
110
  content = File.read(destination)
110
111
  if force || !content.include?(replacement)
111
112
  success = content.gsub!(regexp, string)
112
113
 
113
- File.open(destination, "wb") { |file| file.write(content) } unless pretend?
114
+ File.open(destination, "wb") { |file| file.write(content) }
114
115
  success
115
116
  end
116
117
  end
@@ -161,8 +161,6 @@ class Bundler::Thor
161
161
  # to the block you provide. The path is set back to the previous path when
162
162
  # the method exits.
163
163
  #
164
- # Returns the value yielded by the block.
165
- #
166
164
  # ==== Parameters
167
165
  # dir<String>:: the directory to move to.
168
166
  # config<Hash>:: give :verbose => true to log and use padding.
@@ -181,18 +179,16 @@ class Bundler::Thor
181
179
  FileUtils.mkdir_p(destination_root)
182
180
  end
183
181
 
184
- result = nil
185
182
  if pretend
186
183
  # In pretend mode, just yield down to the block
187
- result = block.arity == 1 ? yield(destination_root) : yield
184
+ block.arity == 1 ? yield(destination_root) : yield
188
185
  else
189
186
  require "fileutils"
190
- FileUtils.cd(destination_root) { result = block.arity == 1 ? yield(destination_root) : yield }
187
+ FileUtils.cd(destination_root) { block.arity == 1 ? yield(destination_root) : yield }
191
188
  end
192
189
 
193
190
  @destination_stack.pop
194
191
  shell.padding -= 1 if verbose
195
- result
196
192
  end
197
193
 
198
194
  # Goes to the root and execute the given block.
@@ -28,12 +28,6 @@ class Bundler::Thor
28
28
  super(convert_key(key))
29
29
  end
30
30
 
31
- def except(*keys)
32
- dup.tap do |hash|
33
- keys.each { |key| hash.delete(convert_key(key)) }
34
- end
35
- end
36
-
37
31
  def fetch(key, *args)
38
32
  super(convert_key(key), *args)
39
33
  end
@@ -102,14 +102,9 @@ class Bundler::Thor
102
102
  end
103
103
 
104
104
  if Correctable
105
- if DidYouMean.respond_to?(:correct_error)
106
- DidYouMean.correct_error(Bundler::Thor::UndefinedCommandError, UndefinedCommandError::SpellChecker)
107
- DidYouMean.correct_error(Bundler::Thor::UnknownArgumentError, UnknownArgumentError::SpellChecker)
108
- else
109
- DidYouMean::SPELL_CHECKERS.merge!(
110
- 'Bundler::Thor::UndefinedCommandError' => UndefinedCommandError::SpellChecker,
111
- 'Bundler::Thor::UnknownArgumentError' => UnknownArgumentError::SpellChecker
112
- )
113
- end
105
+ DidYouMean::SPELL_CHECKERS.merge!(
106
+ 'Bundler::Thor::UndefinedCommandError' => UndefinedCommandError::SpellChecker,
107
+ 'Bundler::Thor::UnknownArgumentError' => UnknownArgumentError::SpellChecker
108
+ )
114
109
  end
115
110
  end
@@ -45,7 +45,6 @@ class Bundler::Thor
45
45
  @switches = {}
46
46
  @extra = []
47
47
  @stopped_parsing_after_extra_index = nil
48
- @is_treated_as_value = false
49
48
 
50
49
  options.each do |option|
51
50
  @switches[option.switch_name] = option
@@ -75,19 +74,8 @@ class Bundler::Thor
75
74
  end
76
75
  end
77
76
 
78
- def shift
79
- @is_treated_as_value = false
80
- super
81
- end
82
-
83
- def unshift(arg, is_value: false)
84
- @is_treated_as_value = is_value
85
- super(arg)
86
- end
87
-
88
77
  def parse(args) # rubocop:disable MethodLength
89
78
  @pile = args.dup
90
- @is_treated_as_value = false
91
79
  @parsing_options = true
92
80
 
93
81
  while peek
@@ -100,10 +88,7 @@ class Bundler::Thor
100
88
  when SHORT_SQ_RE
101
89
  unshift($1.split("").map { |f| "-#{f}" })
102
90
  next
103
- when EQ_RE
104
- unshift($2, is_value: true)
105
- switch = $1
106
- when SHORT_NUM
91
+ when EQ_RE, SHORT_NUM
107
92
  unshift($2)
108
93
  switch = $1
109
94
  when LONG_RE, SHORT_RE
@@ -163,7 +148,6 @@ class Bundler::Thor
163
148
  # Two booleans are returned. The first is true if the current value
164
149
  # starts with a hyphen; the second is true if it is a registered switch.
165
150
  def current_is_switch?
166
- return [false, false] if @is_treated_as_value
167
151
  case peek
168
152
  when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM
169
153
  [true, switch?($1)]
@@ -175,7 +159,6 @@ class Bundler::Thor
175
159
  end
176
160
 
177
161
  def current_is_switch_formatted?
178
- return false if @is_treated_as_value
179
162
  case peek
180
163
  when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM, SHORT_SQ_RE
181
164
  true
@@ -185,7 +168,6 @@ class Bundler::Thor
185
168
  end
186
169
 
187
170
  def current_is_value?
188
- return true if @is_treated_as_value
189
171
  peek && (!parsing_options? || super)
190
172
  end
191
173
 
@@ -103,23 +103,6 @@ class Bundler::Thor
103
103
  stdout.flush
104
104
  end
105
105
 
106
- # Say (print) an error to the user. If the sentence ends with a whitespace
107
- # or tab character, a new line is not appended (print + flush). Otherwise
108
- # are passed straight to puts (behavior got from Highline).
109
- #
110
- # ==== Example
111
- # say_error("error: something went wrong")
112
- #
113
- def say_error(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
114
- return if quiet?
115
-
116
- buffer = prepare_message(message, *color)
117
- buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")
118
-
119
- stderr.print(buffer)
120
- stderr.flush
121
- end
122
-
123
106
  # Say a status with the given color and appends the message. Since this
124
107
  # method is used frequently by actions, it allows nil or false to be given
125
108
  # in log_status, avoiding the message from being shown. If a Symbol is
@@ -128,14 +111,13 @@ class Bundler::Thor
128
111
  def say_status(status, message, log_status = true)
129
112
  return if quiet? || log_status == false
130
113
  spaces = " " * (padding + 1)
131
- status = status.to_s.rjust(12)
132
- margin = " " * status.length + spaces
133
-
134
114
  color = log_status.is_a?(Symbol) ? log_status : :green
115
+
116
+ status = status.to_s.rjust(12)
135
117
  status = set_color status, color, true if color
136
118
 
137
- message = message.to_s.chomp.gsub(/(?<!\A)^/, margin)
138
- buffer = "#{status}#{spaces}#{message}\n"
119
+ buffer = "#{status}#{spaces}#{message}"
120
+ buffer = "#{buffer}\n" unless buffer.end_with?("\n")
139
121
 
140
122
  stdout.print(buffer)
141
123
  stdout.flush
@@ -21,7 +21,7 @@ class Bundler::Thor
21
21
  end
22
22
 
23
23
  module Shell
24
- SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_error, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
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
27
  autoload :Basic, File.expand_path("shell/basic", __dir__)
@@ -211,7 +211,7 @@ class Bundler::Thor
211
211
  #
212
212
  def globs_for(path)
213
213
  path = escape_globs(path)
214
- ["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/**/*.thor"]
214
+ ["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/*.thor"]
215
215
  end
216
216
 
217
217
  # Return the path to the ruby interpreter taking into account multiple
@@ -1,3 +1,3 @@
1
1
  class Bundler::Thor
2
- VERSION = "1.2.1"
2
+ VERSION = "1.1.0"
3
3
  end