Class: Bundler::CLI

Inherits:
Thor
  • Object
show all
Includes:
Thor::Actions
Defined in:
lib/bundler/cli.rb

Defined Under Namespace

Modules: Common Classes: Binstubs, Cache, Check, Clean, Config, Console, Exec, Gem, Init, Inject, Install, Lock, Open, Outdated, Package, Platform, Show, Update, Viz

Constant Summary

AUTO_INSTALL_CMDS =
%w(show binstubs outdated exec open console licenses clean)

Constants inherited from Thor

Thor::AmbiguousTaskError, Thor::DynamicTask, Thor::HELP_MAPPINGS, Thor::HiddenTask, Thor::TEMPLATE_EXTNAME, Thor::THOR_RESERVED_WORDS, Thor::Task, Thor::UndefinedTaskError, Thor::VERSION

Instance Attribute Summary

Attributes included from Thor::Actions

#behavior

Attributes included from Thor::Base

#args, #options, #parent_options

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Thor::Actions

#action, #append_to_file, #apply, #chmod, #comment_lines, #copy_file, #create_file, #create_link, #destination_root, #destination_root=, #directory, #empty_directory, #find_in_source_paths, #get, #gsub_file, #in_root, included, #inject_into_class, #insert_into_file, #inside, #link_file, #prepend_to_file, #relative_to_original_destination_root, #remove_file, #run, #run_ruby_script, #source_paths, #template, #thor, #uncomment_lines

Methods inherited from Thor

check_unknown_options!, check_unknown_options?, command_help, default_command, desc, help, long_desc, map, method_option, method_options, package_name, printable_commands, register, stop_on_unknown_option!, stop_on_unknown_option?, subcommand, subcommand_classes, subcommands

Methods included from Thor::Base

included, register_klass_file, subclass_files, subclasses

Constructor Details

#initialize(*args) ⇒ CLI

Returns a new instance of CLI



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/bundler/cli.rb', line 16

def initialize(*args)
  super

  custom_gemfile = options[:gemfile] || Bundler.settings[:gemfile]
  ENV["BUNDLE_GEMFILE"] = File.expand_path(custom_gemfile) if custom_gemfile && !custom_gemfile.empty?

  Bundler.settings[:retry] = options[:retry] if options[:retry]

  current_cmd = args.last[:current_command].name
  auto_install if AUTO_INSTALL_CMDS.include?(current_cmd)
rescue UnknownArgumentError => e
  raise InvalidOption, e.message
ensure
  self.options ||= {}
  Bundler.ui = UI::Shell.new(options)
  Bundler.ui.level = "debug" if options["verbose"]

  if ENV["RUBYGEMS_GEMDEPS"] && !ENV["RUBYGEMS_GEMDEPS"].empty?
    Bundler.ui.warn(
      "The RUBYGEMS_GEMDEPS environment variable is set. This enables RubyGems' " \
      "experimental Gemfile mode, which may conflict with Bundler and cause unexpected errors. " \
      "To remove this warning, unset RUBYGEMS_GEMDEPS.", :wrap => true)
  end
end

Class Method Details

.handle_no_command_error(command, has_namespace = $thor_runner) ⇒ Object



83
84
85
86
87
# File 'lib/bundler/cli.rb', line 83

def self.handle_no_command_error(command, has_namespace = $thor_runner)
  return super unless command_path = Bundler.which("bundler-#{command}")

  Kernel.exec(command_path, *ARGV[1..-1])
end

.source_rootObject



373
374
375
# File 'lib/bundler/cli.rb', line 373

def self.source_root
  File.expand_path(File.join(File.dirname(__FILE__), "templates"))
end

.startObject



9
10
11
12
13
14
# File 'lib/bundler/cli.rb', line 9

def self.start(*)
  super
rescue Exception => e
  Bundler.ui = UI::Shell.new
  raise e
end

Instance Method Details

#binstubs(*gems) ⇒ Object



225
226
227
228
# File 'lib/bundler/cli.rb', line 225

def binstubs(*gems)
  require "bundler/cli/binstubs"
  Binstubs.new(options, gems).run
end

#cacheObject



252
253
254
255
# File 'lib/bundler/cli.rb', line 252

def cache
  require "bundler/cli/cache"
  Cache.new(options).run
end

#checkObject



114
115
116
117
# File 'lib/bundler/cli.rb', line 114

def check
  require "bundler/cli/check"
  Check.new(options).run
end

#cleanObject



382
383
384
385
# File 'lib/bundler/cli.rb', line 382

def clean
  require "bundler/cli/clean"
  Clean.new(options.dup).run
end

#config(*args) ⇒ Object



305
306
307
308
# File 'lib/bundler/cli.rb', line 305

def config(*args)
  require "bundler/cli/config"
  Config.new(options, args, self).run
end

#console(group = nil) ⇒ Object



317
318
319
320
# File 'lib/bundler/cli.rb', line 317

def console(group = nil)
  require "bundler/cli/console"
  Console.new(options, group).run
end

#envObject



416
417
418
# File 'lib/bundler/cli.rb', line 416

def env
  Env.new.write($stdout)
end

#exec(*args) ⇒ Object



288
289
290
291
# File 'lib/bundler/cli.rb', line 288

def exec(*args)
  require "bundler/cli/exec"
  Exec.new(options, args).run
end

#gem(name) ⇒ Object



368
369
370
371
# File 'lib/bundler/cli.rb', line 368

def gem(name)
  require "bundler/cli/gem"
  Gem.new(options, name, self).run
end

#help(cli = nil) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/bundler/cli.rb', line 50

def help(cli = nil)
  case cli
  when "gemfile" then command = "gemfile.5"
  when nil       then command = "bundle"
  else command = "bundle-#{cli}"
  end

  manpages = %w(
    bundle
    bundle-config
    bundle-exec
    bundle-gem
    bundle-install
    bundle-package
    bundle-update
    bundle-platform
    gemfile.5)

  if manpages.include?(command)
    root = File.expand_path("../man", __FILE__)

    if Bundler.which("man") && root !~ %r{^file:/.+!/META-INF/jruby.home/.+}
      Kernel.exec "man #{root}/#{command}"
    else
      puts File.read("#{root}/#{command}.txt")
    end
  elsif command_path = Bundler.which("bundler-#{cli}")
    Kernel.exec(command_path, "--help")
  else
    super
  end
end

#initObject



96
97
98
99
# File 'lib/bundler/cli.rb', line 96

def init
  require "bundler/cli/init"
  Init.new(options.dup).run
end

#inject(name, version, *gems) ⇒ Object



396
397
398
399
# File 'lib/bundler/cli.rb', line 396

def inject(name, version, *gems)
  require "bundler/cli/inject"
  Inject.new(options, name, version, gems).run
end

#installObject



170
171
172
173
# File 'lib/bundler/cli.rb', line 170

def install
  require "bundler/cli/install"
  Install.new(options.dup).run
end

#licensesObject



329
330
331
332
333
334
335
336
337
338
339
340
# File 'lib/bundler/cli.rb', line 329

def licenses
  Bundler.load.specs.sort_by {|s| s.license.to_s }.reverse_each do |s|
    gem_name = s.name
    license  = s.license || s.licenses

    if license.empty?
      Bundler.ui.warn "#{gem_name}: Unknown"
    else
      Bundler.ui.info "#{gem_name}: #{license}"
    end
  end
end

#lockObject



410
411
412
413
# File 'lib/bundler/cli.rb', line 410

def lock
  require "bundler/cli/lock"
  Lock.new(options).run
end

#open(name) ⇒ Object



311
312
313
314
# File 'lib/bundler/cli.rb', line 311

def open(name)
  require "bundler/cli/open"
  Open.new(options, name).run
end

#outdated(*gems) ⇒ Object



243
244
245
246
# File 'lib/bundler/cli.rb', line 243

def outdated(*gems)
  require "bundler/cli/outdated"
  Outdated.new(options, gems).run
end

#packageObject



274
275
276
277
# File 'lib/bundler/cli.rb', line 274

def package
  require "bundler/cli/package"
  Package.new(options).run
end

#platformObject



390
391
392
393
# File 'lib/bundler/cli.rb', line 390

def platform
  require "bundler/cli/platform"
  Platform.new(options).run
end

#show(gem_name = nil) ⇒ Object



209
210
211
212
# File 'lib/bundler/cli.rb', line 209

def show(gem_name = nil)
  require "bundler/cli/show"
  Show.new(options, gem_name).run
end

#update(*gems) ⇒ Object



195
196
197
198
# File 'lib/bundler/cli.rb', line 195

def update(*gems)
  require "bundler/cli/update"
  Update.new(options, gems).run
end

#versionObject



323
324
325
# File 'lib/bundler/cli.rb', line 323

def version
  Bundler.ui.info "Bundler version #{Bundler::VERSION}"
end

#vizObject



353
354
355
356
# File 'lib/bundler/cli.rb', line 353

def viz
  require "bundler/cli/viz"
  Viz.new(options).run
end