In Files

  • rubygems/dependency_resolver/installer_set.rb

Class/Module Index [+]

Quicksearch

Gem::DependencyResolver::InstallerSet

Attributes

always_install[R]

List of Gem::Specification objects that must always be installed.

ignore_dependencies[RW]

Only install gems in the #always_install list

ignore_installed[RW]

Do not look in the installed set when finding specifications. This is used by the –install-dir option to `gem install`

Public Class Methods

new(domain) click to toggle source
 
               # File rubygems/dependency_resolver/installer_set.rb, line 19
def initialize domain
  @domain = domain

  @f = Gem::SpecFetcher.fetcher

  @all = Hash.new { |h,k| h[k] = [] }
  @always_install      = []
  @ignore_dependencies = false
  @ignore_installed    = false
  @loaded_remote_specs = []
  @specs               = {}
end
            

Public Instance Methods

consider_local?() click to toggle source

Should local gems should be considered?

 
               # File rubygems/dependency_resolver/installer_set.rb, line 35
def consider_local?
  @domain == :both or @domain == :local
end
            
consider_remote?() click to toggle source

Should remote gems should be considered?

 
               # File rubygems/dependency_resolver/installer_set.rb, line 42
def consider_remote?
  @domain == :both or @domain == :remote
end
            
find_all(req) click to toggle source

Returns an array of IndexSpecification objects matching DependencyRequest req.

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

  dep  = req.dependency

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

  name = dep.name

  dep.matching_specs.each do |gemspec|
    next if @always_install.include? gemspec

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

  if consider_local? then
    local_source = Gem::Source::Local.new

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

  if consider_remote? then
    load_remote_specs dep

    @all[name].each do |remote_source, n|
      if dep.match? n then
        res << Gem::DependencyResolver::IndexSpecification.new(
          self, n.name, n.version, remote_source, n.platform)
      end
    end
  end

  res
end
            
load_remote_specs(dep) click to toggle source

Loads remote prerelease specs if dep is a prerelease dependency

 
               # File rubygems/dependency_resolver/installer_set.rb, line 96
def load_remote_specs dep
  types = [:released]
  types << :prerelease if dep.prerelease?

  types.each do |type|
    next if @loaded_remote_specs.include? type
    @loaded_remote_specs << type

    list, = @f.available_specs type

    list.each do |uri, specs|
      specs.each do |n|
        @all[n.name] << [uri, n]
      end
    end
  end
end
            
load_spec(name, ver, source) click to toggle source

Called from IndexSpecification to get a true Specification object.

 
               # File rubygems/dependency_resolver/installer_set.rb, line 118
def load_spec name, ver, source
  key = "#{name}-#{ver}"
  @specs[key] ||= source.fetch_spec Gem::NameTuple.new name, ver
end
            
prefetch(reqs) click to toggle source

No prefetching needed since we load the whole index in initially.

 
               # File rubygems/dependency_resolver/installer_set.rb, line 126
def prefetch(reqs)
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 see Improve the docs, or visit Documenting-ruby.org.

blog comments powered by Disqus