# 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
Should local gems should be considered?
# File rubygems/dependency_resolver/installer_set.rb, line 35
def consider_local?
@domain == :both or @domain == :local
end
Should remote gems should be considered?
# File rubygems/dependency_resolver/installer_set.rb, line 42
def consider_remote?
@domain == :both or @domain == :remote
end
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
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
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