class Gem::Resolver::APISet

The global rubygems pool, available via the rubygems.org API. Returns instances of APISpecification.

Attributes

source[R]

The Gem::Source that gems are fetched from

uri[R]

The corresponding place to fetch gems.

Public Class Methods

new(dep_uri = "https://index.rubygems.org/info/") click to toggle source

Creates a new APISet that will retrieve gems from uri using the RubyGems API URL dep_uri which is described at guides.rubygems.org/rubygems-org-api

Calls superclass method
# File rubygems/resolver/api_set.rb, line 30
def initialize(dep_uri = "https://index.rubygems.org/info/")
  super()

  dep_uri = Gem::URI dep_uri unless Gem::URI === dep_uri

  @dep_uri = dep_uri
  @uri     = dep_uri + ".."

  @data   = Hash.new {|h,k| h[k] = [] }
  @source = Gem::Source.new @uri

  @to_fetch = []
end

Public Instance Methods

find_all(req) click to toggle source

Return an array of APISpecification objects matching DependencyRequest req.

# File rubygems/resolver/api_set.rb, line 48
def find_all(req)
  res = []

  return res unless @remote

  if @to_fetch.include?(req.name)
    prefetch_now
  end

  versions(req.name).each do |ver|
    if req.dependency.match? req.name, ver[:number], @prerelease
      res << Gem::Resolver::APISpecification.new(self, ver)
    end
  end

  res
end
prefetch(reqs) click to toggle source

A hint run by the resolver to allow the Set to fetch data for DependencyRequests reqs.

# File rubygems/resolver/api_set.rb, line 70
def prefetch(reqs)
  return unless @remote
  names = reqs.map {|r| r.dependency.name }
  needed = names - @data.keys - @to_fetch

  @to_fetch += needed
end

Private Instance Methods

lines(str) click to toggle source
# File rubygems/resolver/api_set.rb, line 124
def lines(str)
  lines = str.split("\n")
  header = lines.index("---")
  header ? lines[header + 1..-1] : lines
end
parse_gem(string) click to toggle source
# File rubygems/resolver/api_set.rb, line 130
def parse_gem(string)
  @gem_parser ||= GemParser.new
  @gem_parser.parse(string)
end