module Pry::Rubygem

Public Class Methods

complete(so_far) click to toggle source

Completion function for gem-cd and gem-open.

@param [String] so_far what the user's typed so far @return [Array<String>] completions

# File lib/pry/rubygem.rb, line 47
def complete(so_far)
  if so_far =~ / ([^ ]*)\z/
    self.list(%r{\A#{$2}}).map(&:name)
  else
    self.list.map(&:name)
  end
end
install(name) click to toggle source

Installs a gem with all its dependencies.

@param [String] name @return [void]

# File lib/pry/rubygem.rb, line 59
def install(name)
  destination = File.writable?(Gem.dir) ? Gem.dir : Gem.user_dir
  installer = Gem::DependencyInstaller.new(:install_dir => destination)
  installer.install(name)
rescue Errno::EACCES
  raise CommandError,
    "Insufficient permissions to install `#{ text.green(name) }`."
rescue Gem::GemNotFoundException
  raise CommandError, "Gem `#{ text.green(name) }` not found."
else
  Gem.refresh
end
installed?(name) click to toggle source
# File lib/pry/rubygem.rb, line 7
def installed?(name)
  if Gem::Specification.respond_to?(:find_all_by_name)
    Gem::Specification.find_all_by_name(name).any?
  else
    Gem.source_index.find_name(name).first
  end
end
list(pattern = /.*/) click to toggle source

List gems matching a pattern.

@param [Regexp] pattern @return [Array<Gem::Specification>]

# File lib/pry/rubygem.rb, line 35
def list(pattern = /.*/)
  if Gem::Specification.respond_to?(:each)
    Gem::Specification.select{|spec| spec.name =~ pattern }
  else
    Gem.source_index.gems.values.select{|spec| spec.name =~ pattern }
  end
end
spec(name) click to toggle source

Get the gem spec object for the given gem name.

@param [String] name @return [Gem::Specification]

# File lib/pry/rubygem.rb, line 19
def spec(name)
  specs = if Gem::Specification.respond_to?(:each)
            Gem::Specification.find_all_by_name(name)
          else
            Gem.source_index.find_name(name)
          end

  spec = specs.sort_by{ |spec| Gem::Version.new(spec.version) }.first

  spec or raise CommandError, "Gem `#{name}` not found"
end