class Gem::GemRunner

Run an instance of the gem program.

Gem::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.

Public Class Methods

new() click to toggle source
# File rubygems/gem_runner.rb, line 23
def initialize
  @command_manager_class = Gem::CommandManager
  @config_file_class = Gem::ConfigFile
end

Public Instance Methods

run(args) click to toggle source

Run the gem command with the following arguments.

# File rubygems/gem_runner.rb, line 31
def run(args)
  validate_encoding args
  build_args = extract_build_args args

  do_configuration args

  begin
    Gem.load_env_plugins
  rescue StandardError
    nil
  end
  Gem.load_plugins

  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

Private Instance Methods

do_configuration(args) click to toggle source
# File rubygems/gem_runner.rb, line 84
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
validate_encoding(args) click to toggle source
# File rubygems/gem_runner.rb, line 76
def validate_encoding(args)
  invalid_arg = args.find {|arg| !arg.valid_encoding? }

  if invalid_arg
    raise Gem::OptionParser::InvalidArgument.new("'#{invalid_arg.scrub}' has invalid encoding")
  end
end