class Rabbit::GemFinder

Public Class Methods

new(logger=nil) click to toggle source
# File lib/rabbit/gem-finder.rb, line 23
def initialize(logger=nil)
  @logger = logger || Logger.default
end

Public Instance Methods

find(name, prefix) click to toggle source
# File lib/rabbit/gem-finder.rb, line 27
def find(name, prefix)
  normalized_name = name.downcase
  unless normalized_name.start_with?(prefix)
    normalized_name = "#{prefix}#{normalized_name}"
  end

  retried = false
  spec = nil
  begin
    spec = Gem::Specification.find_by_name(name)
  rescue Gem::LoadError
    begin
      spec = Gem::Specification.find_by_name(normalized_name)
    rescue Gem::LoadError
      unless retried
        retried = true
        require "rubygems/dependency_installer"
        options = {}
        if File.writable?(Gem.dir)
          @logger.info(_("Installing gem: %s") % normalized_name)
        else
          options[:user_install] = true
          format = _("Installing gem in user install mode: %s")
          @logger.info(format % normalized_name)
        end
        installer = Gem::DependencyInstaller.new(options)
        installer.install(normalized_name, Gem::Requirement.default)
        retry
      end
    end
  end
  spec
end