123456789_123456789_123456789_123456789_123456789_

Class: Gem::GemRunner

Relationships & Source Files
Inherits: Object
Defined in: lib/rubygems/gem_runner.rb

Overview

Run an instance of the gem program.

GemRunner is only intended for internal use by RubyGems itself. It does not form any public API and may change at any time for any reason.

If you would like to duplicate functionality of gem commands, use the classes they call directly.

Class Method Summary

Instance Method Summary

Constructor Details

.new(options = {}) ⇒ GemRunner

[ GitHub ]

  
# File 'lib/rubygems/gem_runner.rb', line 29

def initialize(options={})
  if !options.empty? && !Gem::Deprecate.skip
    Kernel.warn "NOTE: passing options to Gem::GemRunner.new is deprecated with no replacement. It will be removed on or after 2016-10-01."
  end

  @command_manager_class = options[:command_manager] || Gem::CommandManager
  @config_file_class = options[:config_file] || Gem::ConfigFile
end

Instance Method Details

#do_configuration(args) (private)

[ GitHub ]

  
# File 'lib/rubygems/gem_runner.rb', line 78

def do_configuration(args)
  Gem.configuration = @config_file_class.new(args)
  Gem.use_paths Gem.configuration[:gemhome], Gem.configuration[:gempath]
  Gem::Command.extra_args = Gem.configuration[:gem]
end

#extract_build_args(args)

This method is for internal use only.

Separates the build arguments (those following --) from the other arguments in the list.

[ GitHub ]

  
# File 'lib/rubygems/gem_runner.rb', line 66

def extract_build_args(args) # :nodoc:
  return [] unless offset = args.index('--')

  build_args = args.slice!(offset...args.length)

  build_args.shift

  build_args
end

#run(args)

Run the gem command with the following arguments.

[ GitHub ]

  
# File 'lib/rubygems/gem_runner.rb', line 41

def run(args)
  build_args = extract_build_args args

  do_configuration args

  cmd = @command_manager_class.instance

  cmd.command_names.each do |command_name|
    config_args = Gem.configuration[command_name]
    config_args = case config_args
                  when String
                    config_args.split ' '
                  else
                    Array(config_args)
                  end
    Gem::Command.add_specific_extra_args command_name, config_args
  end

  cmd.run Gem.configuration.args, build_args
end