In Files

  • rubygems/resolver/installer_set.rb

Class/Module Index [+]

Quicksearch

Gem::Resolver::InstallerSet

A set of gems for installation sourced from remote sources and local .gem files

Public Class Methods

new(domain) click to toggle source

Creates a new InstallerSet that will look for gems in domain.

 
               # File rubygems/resolver/installer_set.rb, line 31
def initialize domain
  super()

  @domain = domain
  @remote = consider_remote?

  @f = Gem::SpecFetcher.fetcher

  @always_install      = []
  @ignore_dependencies = false
  @ignore_installed    = false
  @local               = {}
  @remote_set          = Gem::Resolver::BestSet.new
  @specs               = {}
end
            

Public Instance Methods

add_always_install(dependency) click to toggle source

Looks up the latest specification for dependency and adds it to the always_install list.

 
               # File rubygems/resolver/installer_set.rb, line 51
def add_always_install dependency
  request = Gem::Resolver::DependencyRequest.new dependency, nil

  found = find_all request

  found.delete_if { |s|
    s.version.prerelease? and not s.local?
  } unless dependency.prerelease?

  found = found.select do |s|
    Gem::Source::SpecificFile === s.source or
      Gem::Platform::RUBY == s.platform or
      Gem::Platform.local === s.platform
  end

  if found.empty? then
    exc = Gem::UnsatisfiableDependencyError.new request
    exc.errors = errors

    raise exc
  end

  newest = found.max_by do |s|
    [s.version, s.platform == Gem::Platform::RUBY ? -1 : 1]
  end

  @always_install << newest.spec
end
            
add_local(dep_name, spec, source) click to toggle source

Adds a local gem requested using dep_name with the given spec that can be loaded and installed using the source.

 
               # File rubygems/resolver/installer_set.rb, line 84
def add_local dep_name, spec, source
  @local[dep_name] = [spec, source]
end
            
errors() click to toggle source

Errors encountered while resolving gems

 
               # File rubygems/resolver/installer_set.rb, line 105
def errors
  @errors + @remote_set.errors
end
            
find_all(req) click to toggle source

Returns an array of IndexSpecification objects matching DependencyRequest req.

 
               # File rubygems/resolver/installer_set.rb, line 113
def find_all req
  res = []

  dep  = req.dependency

  return res if @ignore_dependencies and
            @always_install.none? { |spec| dep.match? spec }

  name = dep.name

  dep.matching_specs.each do |gemspec|
    next if @always_install.any? { |spec| spec.name == gemspec.name }

    res << Gem::Resolver::InstalledSpecification.new(self, gemspec)
  end unless @ignore_installed

  if consider_local? then
    matching_local = @local.values.select do |spec, _|
      req.match? spec
    end.map do |spec, source|
      Gem::Resolver::LocalSpecification.new self, spec, source
    end

    res.concat matching_local

    local_source = Gem::Source::Local.new

    if local_spec = local_source.find_gem(name, dep.requirement) then
      res << Gem::Resolver::IndexSpecification.new(
        self, local_spec.name, local_spec.version,
        local_source, local_spec.platform)
    end
  end

  res.delete_if do |spec|
    spec.version.prerelease? and not dep.prerelease?
  end

  res.concat @remote_set.find_all req if consider_remote?

  res
end
            
prefetch(reqs) click to toggle source
 
               # File rubygems/resolver/installer_set.rb, line 156
def prefetch(reqs)
  @remote_set.prefetch(reqs) if consider_remote?
end
            
prerelease=(allow_prerelease) click to toggle source
 
               # File rubygems/resolver/installer_set.rb, line 160
def prerelease= allow_prerelease
  super

  @remote_set.prerelease = allow_prerelease
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.