# 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 9
    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 50
    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 43
    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 72
    def open_editor(path)
      system(*@editor.split(/\s+/) + [path], { chdir: path })
    end

open_gem(name) click to toggle source

    # File lib/rubygems/commands/open_command.rb, line 59
    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 76
    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