class Bundler::CLI - bundler-1.15.4 Documentation

# class Bundler::CLI

### Constants

AUTO_INSTALL_CMDS
PARSEABLE_COMMANDS

### Public Class Methods

dispatch(*) click to toggle source
Calls superclass method

    # File lib/bundler/cli.rb, line 20
    def self.dispatch(*)
      super do |i|
        i.send(:print_command)
        i.send(:warn_on_outdated_bundler)
      end
    end

handle_no_command_error(command, has_namespace = $thor_runner) click to toggle source
Calls superclass method

    # File lib/bundler/cli.rb, line 93
    def self.handle_no_command_error(command, has_namespace = $thor_runner)
      if Bundler.feature_flag.plugins? && Bundler::Plugin.command?(command)
        return Bundler::Plugin.exec_command(command, ARGV[1..-1])
      end

      return super unless command_path = Bundler.which("bundler-#{command}")

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

new(*args) click to toggle source
Calls superclass method Bundler::Thor::Actions.new

    # File lib/bundler/cli.rb, line 27
    def initialize(*args)
      super

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

      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.settings.cli_flags_given = !options.empty?
      unprinted_warnings = Bundler.ui.unprinted_warnings
      Bundler.ui = UI::Shell.new(options)
      Bundler.ui.level = "debug" if options["verbose"]
      unprinted_warnings.each {|w| Bundler.ui.warn(w) }

      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

reformatted_help_args(args) click to toggle source

Reformat the arguments passed to bundle that include a –help flag into the corresponding `bundle help #{command}` call

    # File lib/bundler/cli.rb, line 571
    def self.reformatted_help_args(args)
      bundler_commands = all_commands.keys
      help_flags = %w(--help -h)
      exec_commands = %w(e ex exe exec)
      help_used = args.index {|a| help_flags.include? a }
      exec_used = args.index {|a| exec_commands.include? a }
      command = args.find {|a| bundler_commands.include? a }
      if exec_used && help_used
        if exec_used + help_used == 1
          %w(help exec)
        else
          args
        end
      elsif help_used
        args = args.dup
        args.delete_at(help_used)
        ["help", command || args].flatten.compact
      else
        args
      end
    end

source_root() click to toggle source

    # File lib/bundler/cli.rb, line 468
    def self.source_root
      File.expand_path(File.join(File.dirname(__FILE__), "templates"))
    end

start(*) click to toggle source
Calls superclass method

    # File lib/bundler/cli.rb, line 11
    def self.start(*)
      super
    rescue Exception => e
      Bundler.ui = UI::Shell.new
      raise e
    ensure
      Bundler::SharedHelpers.print_major_deprecations!
    end

### Public Instance Methods

add(gem_name) click to toggle source

    # File lib/bundler/cli.rb, line 279
    def add(gem_name)
      require "bundler/cli/add"
      Add.new(options.dup, gem_name).run
    end

binstubs(*gems) click to toggle source

    # File lib/bundler/cli.rb, line 266
    def binstubs(*gems)
      require "bundler/cli/binstubs"
      Binstubs.new(options, gems).run
    end

cache() click to toggle source

    # File lib/bundler/cli.rb, line 321
    def cache
      require "bundler/cli/cache"
      Cache.new(options).run
    end

check() click to toggle source

    # File lib/bundler/cli.rb, line 128
    def check
      require "bundler/cli/check"
      Check.new(options).run
    end

clean() click to toggle source

    # File lib/bundler/cli.rb, line 477
    def clean
      require "bundler/cli/clean"
      Clean.new(options.dup).run
    end

config(*args) click to toggle source

    # File lib/bundler/cli.rb, line 377
    def config(*args)
      require "bundler/cli/config"
      Config.new(options, args, self).run
    end

console(group = nil) click to toggle source

    # File lib/bundler/cli.rb, line 389
    def console(group = nil)
      # TODO: Remove for 2.0
      require "bundler/cli/console"
      Console.new(options, group).run
    end

doctor() click to toggle source

    # File lib/bundler/cli.rb, line 546
    def doctor
      require "bundler/cli/doctor"
      Doctor.new(options).run
    end

env() click to toggle source

    # File lib/bundler/cli.rb, line 532
    def env
      Env.new.write($stdout)
    end

exec(*args) click to toggle source

    # File lib/bundler/cli.rb, line 359
    def exec(*args)
      require "bundler/cli/exec"
      Exec.new(options, args).run
    end

help(cli = nil) click to toggle source
Calls superclass method

    # File lib/bundler/cli.rb, line 68
    def help(cli = nil)
      case cli
      when "gemfile" then command = "gemfile"
      when nil       then command = "bundle"
      else command = "bundle-#{cli}"
      end

      man_path  = File.expand_path("../../../man", __FILE__)
      man_pages = Hash[Dir.glob(File.join(man_path, "*")).grep(/.*\.\d*\Z/).collect do |f|
        [File.basename(f, ".*"), f]
      end]

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

info(gem_name) click to toggle source

    # File lib/bundler/cli.rb, line 249
    def info(gem_name)
      require "bundler/cli/info"
      Info.new(options, gem_name).run
    end

init() click to toggle source

    # File lib/bundler/cli.rb, line 110
    def init
      require "bundler/cli/init"
      Init.new(options.dup).run
    end

inject(name, version) click to toggle source

    # File lib/bundler/cli.rb, line 495
    def inject(name, version)
      SharedHelpers.major_deprecation "The `inject` command has been replaced by the `add` command"
      require "bundler/cli/inject"
      Inject.new(options.dup, name, version).run
    end

install() click to toggle source

    # File lib/bundler/cli.rb, line 184
    def install
      require "bundler/cli/install"
      Bundler.settings.temporary(:no_install => false) do
        Install.new(options.dup).run
      end
    end

issue() click to toggle source

    # File lib/bundler/cli.rb, line 552
    def issue
      require "bundler/cli/issue"
      Issue.new.run
    end

licenses() click to toggle source

    # File lib/bundler/cli.rb, line 402
    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

lock() click to toggle source

    # File lib/bundler/cli.rb, line 526
    def lock
      require "bundler/cli/lock"
      Lock.new(options).run
    end

open(name) click to toggle source

    # File lib/bundler/cli.rb, line 383
    def open(name)
      require "bundler/cli/open"
      Open.new(options, name).run
    end

outdated(*gems) click to toggle source

    # File lib/bundler/cli.rb, line 312
    def outdated(*gems)
      require "bundler/cli/outdated"
      Outdated.new(options, gems).run
    end

package() click to toggle source

    # File lib/bundler/cli.rb, line 345
    def package
      require "bundler/cli/package"
      Package.new(options).run
    end

platform() click to toggle source

    # File lib/bundler/cli.rb, line 485
    def platform
      require "bundler/cli/platform"
      Platform.new(options).run
    end

pristine() click to toggle source

    # File lib/bundler/cli.rb, line 558
    def pristine
      require "bundler/cli/pristine"
      Pristine.new.run
    end

show(gem_name = nil) click to toggle source

    # File lib/bundler/cli.rb, line 239
    def show(gem_name = nil)
      Bundler::SharedHelpers.major_deprecation("use `bundle show` instead of `bundle list`") if ARGV[0] == "list"
      require "bundler/cli/show"
      Show.new(options, gem_name).run
    end

update(*gems) click to toggle source

    # File lib/bundler/cli.rb, line 225
    def update(*gems)
      require "bundler/cli/update"
      Update.new(options, gems).run
    end

version() click to toggle source

    # File lib/bundler/cli.rb, line 396
    def version
      Bundler.ui.info "Bundler version #{Bundler::VERSION}"
    end

viz() click to toggle source

    # File lib/bundler/cli.rb, line 426
    def viz
      require "bundler/cli/viz"
      Viz.new(options.dup).run
    end

### Private Instance Methods

auto_install() click to toggle source

Automatically invoke `bundle install` and resume if Bundler.settings exists. This is set through config cmd `bundle config #auto_install 1`.

Note that this method `nil`s out the global Definition object, so it should be called first, before you instantiate anything like an `Installer` that'll keep a reference to the old one instead.

    # File lib/bundler/cli.rb, line 602
    def auto_install
      return unless Bundler.settings[:auto_install]

      begin
        Bundler.definition.specs
      rescue GemNotFound
        Bundler.ui.info "Automatically installing missing gems."
        Bundler.reset!
        invoke :install, []
        Bundler.reset!
      end
    end

gem(name) click to toggle source

    # File lib/bundler/cli.rb, line 443
    def gem(name)
    end

print_command() click to toggle source

    # File lib/bundler/cli.rb, line 615
    def print_command
      return unless Bundler.ui.debug?
      _, _, config = @_initializer
      current_command = config[:current_command]
      command_name = current_command.name
      return if PARSEABLE_COMMANDS.include?(command_name)
      command = ["bundle", command_name] + args
      options_to_print = options.dup
      options_to_print.delete_if do |k, v|
        next unless o = current_command.options[k]
        o.default == v
      end
      command << Thor::Options.to_switches(options_to_print.sort_by(&:first)).strip
      command.reject!(&:empty?)
      Bundler.ui.info "Running `#{command * " "}` with bundler #{Bundler::VERSION}"
    end

warn_on_outdated_bundler() click to toggle source

    # File lib/bundler/cli.rb, line 632
    def warn_on_outdated_bundler
      return if Bundler.settings[:disable_version_check]

      _, _, config = @_initializer
      current_command = config[:current_command]
      command_name = current_command.name
      return if PARSEABLE_COMMANDS.include?(command_name)

      latest = Fetcher::CompactIndex.
               new(nil, Source::Rubygems::Remote.new(URI("https://rubygems.org")), nil).
               send(:compact_index_client).
               instance_variable_get(:@cache).
               dependencies("bundler").
               map {|d| Gem::Version.new(d.first) }.
               max
      return unless latest

      current = Gem::Version.new(VERSION)
      return if current >= latest

      Bundler.ui.warn "The latest bundler is #{latest}, but you are currently running #{current}.\nTo update, run `gem install bundler#{" --pre" if latest.prerelease?}`"
    rescue
      nil
    end