Class: Gem::Resolver::InstallerSet
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/installer_set.rb |
Overview
A set of gems for installation sourced from remote sources and local .gem
files
Class Method Summary
-
.new(domain) ⇒ InstallerSet
constructor
Creates a new
InstallerSet
that will look for gems indomain
.
Instance Attribute Summary
- #prerelease=(allow_prerelease) writeonly
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. |
Instance Method Summary
-
#add_always_install(dependency)
Looks up the latest specification for
dependency
and adds it to the always_install list. -
#add_local(dep_name, spec, source)
Adds a local gem requested using
dep_name
with the givenspec
that can be loaded and installed using thesource
. -
#errors
Errors encountered while resolving gems.
-
#find_all(req)
Returns an array of IndexSpecification objects matching DependencyRequest
req
. - #prefetch(reqs)
Set - Inherited
Constructor Details
.new(domain) ⇒ InstallerSet
Creates a new InstallerSet
that will look for gems in domain
.
# File 'lib/rubygems/resolver/installer_set.rb', line 32
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
Instance Attribute Details
#prerelease=(allow_prerelease) (writeonly)
[ GitHub ]# File 'lib/rubygems/resolver/installer_set.rb', line 165
def prerelease= allow_prerelease super @remote_set.prerelease = allow_prerelease end
Instance Method Details
#add_always_install(dependency)
Looks up the latest specification for dependency
and adds it to the always_install list.
# File 'lib/rubygems/resolver/installer_set.rb', line 52
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)
Adds a local gem requested using dep_name
with the given spec
that can be loaded and installed using the source
.
# File 'lib/rubygems/resolver/installer_set.rb', line 85
def add_local dep_name, spec, source @local[dep_name] = [spec, source] end
#errors
Errors encountered while resolving gems
# File 'lib/rubygems/resolver/installer_set.rb', line 106
def errors @errors + @remote_set.errors end
#find_all(req)
Returns an array of IndexSpecification objects matching DependencyRequest req
.
# File 'lib/rubygems/resolver/installer_set.rb', line 114
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 begin 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 rescue Gem::Package::FormatError # ignore 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)
[ GitHub ]# File 'lib/rubygems/resolver/installer_set.rb', line 161
def prefetch(reqs) @remote_set.prefetch(reqs) if consider_remote? end