Sha256: c618d2221513dd65dea6f06a2db34c901bce5706cfc09fd08998a0e8589ac5f5

Contents?: true

Size: 1.59 KB

Versions: 2

Compression:

Stored size: 1.59 KB

Contents

# ReadCommand will open a gem's rdoc
class Gem::Commands::ReadCommand < Gem::Command
  include OpenGem::CommonOptions
  include Gem::VersionOption
  
  def initialize
    super 'read', "Opens the gem's documentation", 
      :command => nil, 
      :version=>  Gem::Requirement.default,
      :latest=>   false
    
    add_command_option "Application to read rdoc with"
    add_latest_version_option
    add_version_option
    add_exact_match_option
  end
  
  def arguments # :nodoc:
    "GEMNAME       gem to read"
  end

  def execute
    name = get_one_gem_name
    spec = get_spec(name){|s| s.has_rdoc? }
    if spec && path = get_path(spec)
      if File.exists? path
        read_gem path
      elsif ask_yes_no "The rdoc seems to be missing, would you like to generate one?", true
        generate_rdoc spec
        read_gem path
      end
    end
  end
  
  def get_path(spec)
    File.join(spec.installation_path, "doc", spec.full_name, 'rdoc','index.html')
  end
  
  def generate_rdoc spec
    Gem::DocManager.new(spec).generate_rdoc
  end
  
  def rdoc_reader
    options[:command] || case RUBY_PLATFORM.downcase
      when /darwin/ then 'open'
      when /mswin/  then 'explorer'
      when /linux/  then 'firefox'
      else               'firefox' # Come on, if you write ruby, you probably have firefox installed ;)
    end
  end
  
  def read_gem(path)
    command_parts = Shellwords.shellwords(rdoc_reader)
    command_parts << path
    success = system(*command_parts)
    if !success 
      raise Gem::CommandLineError, "Could not run '#{rdoc_reader} #{path}', exit code: #{$?.exitstatus}"
    end
  end
  
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
adamsanderson-open_gem-1.4.0 lib/rubygems/commands/read_command.rb
open_gem-1.4.0 lib/rubygems/commands/read_command.rb