# 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 ()
Source

    # File lib/rubygems/gem_runner.rb, line 23
    def initialize
      @command_manager_class = Gem::CommandManager
      @config_file_class = Gem::ConfigFile
    end

### Public Instance Methods

run (args)
Source

    # File lib/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

Run the gem command with the following arguments.

### Private Instance Methods

do_configuration (args)
Source

    # File lib/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)
Source

    # File lib/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