123456789_123456789_123456789_123456789_123456789_

Class: Gem::Resolver::IndexSet

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Set
Instance Chain:
self, Set
Inherits: Gem::Resolver::Set
Defined in: lib/rubygems/resolver/index_set.rb

Overview

The global rubygems pool represented via the traditional source index.

Class Method Summary

Set - Inherited

Instance Attribute Summary

Set - Inherited

#errors

Errors encountered when resolving gems.

#prerelease

When true, allows matching of requests to prerelease gems.

#remote

Set to true to disable network access for this set.

#remote?

When true, this set is allowed to access the network when looking up specifications or dependencies.

Instance Method Summary

Set - Inherited

#find_all

The find_all method must be implemented.

#prefetch

The #prefetch method may be overridden, but this is not necessary.

Constructor Details

.new(source = nil) ⇒ IndexSet

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubygems/resolver/index_set.rb', line 8

def initialize(source = nil) # :nodoc:
  super()

  @f =
    if source
      sources = Gem::SourceList.from [source]

      Gem::SpecFetcher.new sources
    else
      Gem::SpecFetcher.fetcher
    end

  @all = Hash.new {|h,k| h[k] = [] }

  list, errors = @f.available_specs :complete

  @errors.concat errors

  list.each do |uri, specs|
    specs.each do |n|
      @all[n.name] << [uri, n]
    end
  end

  @specs = {}
end

Instance Method Details

#find_all(req)

Return an array of IndexSpecification objects matching DependencyRequest req.

[ GitHub ]

  
# File 'lib/rubygems/resolver/index_set.rb', line 39

def find_all(req)
  res = []

  return res unless @remote

  name = req.dependency.name

  @all[name].each do |uri, n|
    next unless req.match? n, @prerelease
    res << Gem::Resolver::IndexSpecification.new(
      self, n.name, n.version, uri, n.platform
    )
  end

  res
end

#pretty_print(q)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubygems/resolver/index_set.rb', line 56

def pretty_print(q) # :nodoc:
  q.group 2, "[IndexSet", "]" do
    q.breakable
    q.text "sources:"
    q.breakable
    q.pp @f.sources

    q.breakable
    q.text "specs:"

    q.breakable

    names = @all.values.flat_map do |tuples|
      tuples.map do |_, tuple|
        tuple.full_name
      end
    end

    q.seplist names do |name|
      q.text name
    end
  end
end