class Gem::Commands::OpenCommand - RDoc Documentation

# class Gem::Commands::OpenCommand

### Public Class Methods

new() click to toggle source
Calls superclass method `Gem::Command::new`

    # File lib/rubygems/commands/open_command.rb, line 8
    def initialize
      super 'open', 'Open gem sources in editor'

      add_option('-e', '--editor COMMAND', String,
                 "Prepends COMMAND to gem path. Could be used to specify editor.") do |command, options|
        options[:editor] = command || get_env_editor
      end
      add_option('-v', '--version VERSION', String,
                 "Opens specific gem version") do |version|
        options[:version] = version
      end
    end

### Public Instance Methods

execute() click to toggle source

    # File lib/rubygems/commands/open_command.rb, line 49
    def execute
      @version = options[:version] || Gem::Requirement.default
      @editor  = options[:editor] || get_env_editor

      found = open_gem(get_one_gem_name)

      terminate_interaction 1 unless found
    end

get_env_editor() click to toggle source

    # File lib/rubygems/commands/open_command.rb, line 42
    def get_env_editor
      ENV['GEM_EDITOR'] ||
        ENV['VISUAL'] ||
        ENV['EDITOR'] ||
        'vi'
    end

open_editor(path) click to toggle source

    # File lib/rubygems/commands/open_command.rb, line 71
    def open_editor(path)
      Dir.chdir(path) do
        system(*@editor.split(/\s+/) + [path])
      end
    end

open_gem(name) click to toggle source

    # File lib/rubygems/commands/open_command.rb, line 58
    def open_gem(name)
      spec = spec_for name

      return false unless spec

      if spec.default_gem?
        say "'#{name}' is a default gem and can't be opened."
        return false
      end

      open_editor(spec.full_gem_path)
    end

spec_for(name) click to toggle source

    # File lib/rubygems/commands/open_command.rb, line 77
    def spec_for(name)
      spec = Gem::Specification.find_all_by_name(name, @version).first

      return spec if spec

      say "Unable to find gem '#{name}'"
    end