A set of gems for installation sourced from remote sources and local .gem files
Class Methods
::
lib/rubygems/resolver/installer_set.rb
View on GitHub
# File tmp/rubies/ruby-3.1.3/lib/rubygems/resolver/installer_set.rb, line 37
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
Creates a new InstallerSet
that will look for gems in domain
.
Instance Methods
lib/rubygems/resolver/installer_set.rb
View on GitHub
# File tmp/rubies/ruby-3.1.3/lib/rubygems/resolver/installer_set.rb, line 58
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(s.platform)
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_matching_metadata = found.reverse.find do |spec|
metadata_satisfied?(spec)
end
if found_matching_metadata.nil?
ensure_required_ruby_version_met(newest.spec)
ensure_required_rubygems_version_met(newest.spec)
else
newest = found_matching_metadata
end
end
@always_install << newest.spec
end
Looks up the latest specification for dependency
and adds it to the always_install list.
lib/rubygems/resolver/installer_set.rb
View on GitHub
# File tmp/rubies/ruby-3.1.3/lib/rubygems/resolver/installer_set.rb, line 105
def add_local(dep_name, spec, source)
@local[dep_name] = [spec, source]
end
Adds a local gem requested using dep_name
with the given spec
that can be loaded and installed using the source
.
#
lib/rubygems/resolver/installer_set.rb
View on GitHub
# File tmp/rubies/ruby-3.1.3/lib/rubygems/resolver/installer_set.rb, line 126
def errors
@errors + @remote_set.errors
end
Errors encountered while resolving gems
lib/rubygems/resolver/installer_set.rb
View on GitHub
# File tmp/rubies/ruby-3.1.3/lib/rubygems/resolver/installer_set.rb, line 134
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
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?
res
end
Returns an array of IndexSpecification objects matching DependencyRequest req
.
lib/rubygems/resolver/installer_set.rb
View on GitHub
# File tmp/rubies/ruby-3.1.3/lib/rubygems/resolver/installer_set.rb, line 244
def metadata_satisfied?(spec)
spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version)
end
No documentation available
lib/rubygems/resolver/installer_set.rb
View on GitHub
# File tmp/rubies/ruby-3.1.3/lib/rubygems/resolver/installer_set.rb, line 175
def prefetch(reqs)
@remote_set.prefetch(reqs) if consider_remote?
end
No documentation available
lib/rubygems/resolver/installer_set.rb
View on GitHub
# File tmp/rubies/ruby-3.1.3/lib/rubygems/resolver/installer_set.rb, line 179
def prerelease=(allow_prerelease)
super
@remote_set.prerelease = allow_prerelease
end
No documentation available