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 InstallerSetthat will look for gems indomain.
Set - Inherited
Instance Attribute Summary
- #prerelease=(allow_prerelease) writeonly
- 
    
      #always_install  
    
    readonly
    Internal use only
    ::Gem::Listof::Gem::Specificationobjects that must always be installed.
- 
    
      #consider_local?  ⇒ Boolean 
    
    readonly
    Internal use only
    Should local gems should be considered? 
- 
    
      #consider_remote?  ⇒ Boolean 
    
    readonly
    Internal use only
    Should remote gems should be considered? 
- 
    
      #force  
    
    rw
    Internal use only
    Ignore ruby & rubygems specification constraints. 
- 
    
      #ignore_dependencies  
    
    rw
    Internal use only
    Only install gems in the always_install list. 
- 
    
      #ignore_installed  
    
    rw
    Internal use only
    Do not look in the installed set when finding specifications. 
- #remote=(remote) writeonly Internal use only
- 
    
      #remote_set  
    
    readonly
    Internal use only
    The remote_set looks up remote gems for installation. 
Set - Inherited
| #errors | Errors encountered when resolving gems. | 
| #prerelease | When true, allows matching of requests to prerelease gems. | 
| #remote | 
 | 
| #remote? | When true, this set is allowed to access the network when looking up specifications or dependencies. | 
Instance Method Summary
- 
    
      #add_always_install(dependency)  
    
    Looks up the latest specification for dependencyand adds it to the always_install list.
- 
    
      #add_local(dep_name, spec, source)  
    
    Adds a local gem requested using dep_namewith the givenspecthat can be loaded and installed using thesource.
- 
    
      #errors  
    
    Errors encountered while resolving gems. 
- 
    
      #find_all(req)  
    
    Returns an array of IndexSpecificationobjects matchingDependencyRequestreq.
- #prefetch(reqs)
- #metadata_satisfied?(spec) ⇒ Boolean private
- #inspect Internal use only
- 
    
      #load_spec(name, ver, platform, source)  
    
    Internal use only
    Called from IndexSpecificationto get a trueSpecificationobject.
- 
    
      #local?(dep_name)  ⇒ Boolean 
    
    Internal use only
    Has a local gem for dep_namebeen added to this set?
- #pretty_print(q) Internal use only
- #ensure_required_ruby_version_met(spec) private Internal use only
- #ensure_required_rubygems_version_met(spec) private Internal use only
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 38
def initialize(domain) super() @domain = domain @f = Gem::SpecFetcher.fetcher @always_install = [] @ignore_dependencies = false @ignore_installed = false @local = {} @local_source = Gem::Source::Local.new @remote_set = Gem::Resolver::BestSet.new @force = false @specs = {} end
Instance Attribute Details
#always_install (readonly)
::Gem::List of ::Gem::Specification objects that must always be installed.
# File 'lib/rubygems/resolver/installer_set.rb', line 11
attr_reader :always_install # :nodoc:
    #consider_local?  ⇒ Boolean  (readonly)
  
  Should local gems should be considered?
# File 'lib/rubygems/resolver/installer_set.rb', line 113
def consider_local? # :nodoc: @domain == :both || @domain == :local end
    #consider_remote?  ⇒ Boolean  (readonly)
  
  Should remote gems should be considered?
# File 'lib/rubygems/resolver/installer_set.rb', line 120
def consider_remote? # :nodoc: @domain == :both || @domain == :remote end
#force (rw)
Ignore ruby & rubygems specification constraints.
# File 'lib/rubygems/resolver/installer_set.rb', line 33
attr_accessor :force # :nodoc:
#ignore_dependencies (rw)
Only install gems in the always_install list
# File 'lib/rubygems/resolver/installer_set.rb', line 16
attr_accessor :ignore_dependencies # :nodoc:
#ignore_installed (rw)
Do not look in the installed set when finding specifications.  This is used by the –install-dir option to gem install
# File 'lib/rubygems/resolver/installer_set.rb', line 22
attr_accessor :ignore_installed # :nodoc:
#prerelease=(allow_prerelease) (writeonly)
[ GitHub ]# File 'lib/rubygems/resolver/installer_set.rb', line 183
def prerelease=(allow_prerelease) super @remote_set.prerelease = allow_prerelease end
#remote=(remote) (writeonly)
# File 'lib/rubygems/resolver/installer_set.rb', line 233
def remote=(remote) # :nodoc: case @domain when :local then @domain = :both if remote when :remote then @domain = nil unless remote when :both then @domain = :local unless remote end end
#remote_set (readonly)
The remote_set looks up remote gems for installation.
# File 'lib/rubygems/resolver/installer_set.rb', line 27
attr_reader :remote_set # :nodoc:
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 59
def add_always_install(dependency) request = Gem::Resolver::DependencyRequest.new dependency, nil found = find_all request found.delete_if do |s| s.version.prerelease? && !s.local? end unless dependency.prerelease? found = found.select do |s| Gem::Source::SpecificFile === s.source || Gem::Platform.match_spec?(s) end found = found.sort_by do |s| [s.version, Gem::Platform.sort_priority(s.platform)] end newest = found.last unless newest exc = Gem::UnsatisfiableDependencyError.new request exc.errors = errors raise exc end unless @force = found.reverse.find do |spec| (spec) end if .nil? ensure_required_ruby_version_met(newest.spec) ensure_required_rubygems_version_met(newest.spec) else newest = end 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 106
def add_local(dep_name, spec, source) @local[dep_name] = [spec, source] end
#ensure_required_ruby_version_met(spec) (private)
# File 'lib/rubygems/resolver/installer_set.rb', line 251
def ensure_required_ruby_version_met(spec) # :nodoc: if rrv = spec.required_ruby_version ruby_version = Gem.ruby_version unless rrv.satisfied_by? ruby_version raise Gem::RuntimeRequirementNotMetError, "#{spec.full_name} requires Ruby version #{rrv}. The current ruby version is #{ruby_version}." end end end
#ensure_required_rubygems_version_met(spec) (private)
# File 'lib/rubygems/resolver/installer_set.rb', line 261
def ensure_required_rubygems_version_met(spec) # :nodoc: if rrgv = spec.required_rubygems_version unless rrgv.satisfied_by? Gem.rubygems_version rg_version = Gem::VERSION raise Gem::RuntimeRequirementNotMetError, "#{spec.full_name} requires RubyGems version #{rrgv}. The current RubyGems version is #{rg_version}. " \ "Try 'gem update --system' to update RubyGems itself." end end end
#errors
Errors encountered while resolving gems
# File 'lib/rubygems/resolver/installer_set.rb', line 127
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 135
def find_all(req) res = [] dep = req.dependency return res if @ignore_dependencies && @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 matching_local = [] if consider_local? 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 begin if local_spec = @local_source.find_gem(name, dep.requirement) 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.concat @remote_set.find_all req if consider_remote? && matching_local.empty? res end
#inspect
# File 'lib/rubygems/resolver/installer_set.rb', line 189
def inspect # :nodoc: always_install = @always_install.map(&:full_name) format("#<%s domain: %s specs: %p always install: %p>", self.class, @domain, @specs.keys, always_install) end
#load_spec(name, ver, platform, source)
Called from IndexSpecification to get a true Specification object.
    #local?(dep_name)  ⇒ Boolean 
  
  Has a local gem for dep_name been added to this set?
# File 'lib/rubygems/resolver/installer_set.rb', line 212
def local?(dep_name) # :nodoc: spec, _ = @local[dep_name] spec end
    #metadata_satisfied?(spec)  ⇒ Boolean  (private)
  
# File 'lib/rubygems/resolver/installer_set.rb', line 246
def (spec) spec.required_ruby_version.satisfied_by?(Gem.ruby_version) && spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version) end
#prefetch(reqs)
[ GitHub ]# File 'lib/rubygems/resolver/installer_set.rb', line 179
def prefetch(reqs) @remote_set.prefetch(reqs) if consider_remote? end
#pretty_print(q)
# File 'lib/rubygems/resolver/installer_set.rb', line 218
def pretty_print(q) # :nodoc: q.group 2, "[InstallerSet", "]" do q.breakable q.text "domain: #{@domain}" q.breakable q.text "specs: " q.pp @specs.keys q.breakable q.text "always install: " q.pp @always_install end end