mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
162 lines
2.9 KiB
Ruby
162 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
##
|
|
# Specifies a Specification object that should be activated. Also contains a
|
|
# dependency that was used to introduce this activation.
|
|
|
|
class Gem::Resolver::ActivationRequest
|
|
##
|
|
# The parent request for this activation request.
|
|
|
|
attr_reader :request
|
|
|
|
##
|
|
# The specification to be activated.
|
|
|
|
attr_reader :spec
|
|
|
|
##
|
|
# Creates a new ActivationRequest that will activate +spec+. The parent
|
|
# +request+ is used to provide diagnostics in case of conflicts.
|
|
|
|
def initialize(spec, request)
|
|
@spec = spec
|
|
@request = request
|
|
end
|
|
|
|
def ==(other) # :nodoc:
|
|
case other
|
|
when Gem::Specification
|
|
@spec == other
|
|
when Gem::Resolver::ActivationRequest
|
|
@spec == other.spec
|
|
else
|
|
false
|
|
end
|
|
end
|
|
|
|
def eql?(other)
|
|
self == other
|
|
end
|
|
|
|
def hash
|
|
@spec.hash
|
|
end
|
|
|
|
##
|
|
# Is this activation request for a development dependency?
|
|
|
|
def development?
|
|
@request.development?
|
|
end
|
|
|
|
##
|
|
# Downloads a gem at +path+ and returns the file path.
|
|
|
|
def download(path)
|
|
Gem.ensure_gem_subdirectories path
|
|
|
|
if @spec.respond_to? :sources
|
|
exception = nil
|
|
path = @spec.sources.find do |source|
|
|
begin
|
|
source.download full_spec, path
|
|
rescue exception
|
|
end
|
|
end
|
|
return path if path
|
|
raise exception if exception
|
|
|
|
elsif @spec.respond_to? :source
|
|
source = @spec.source
|
|
source.download full_spec, path
|
|
|
|
else
|
|
source = Gem.sources.first
|
|
source.download full_spec, path
|
|
end
|
|
end
|
|
|
|
##
|
|
# The full name of the specification to be activated.
|
|
|
|
def full_name
|
|
name_tuple.full_name
|
|
end
|
|
|
|
alias_method :to_s, :full_name
|
|
|
|
##
|
|
# The Gem::Specification for this activation request.
|
|
|
|
def full_spec
|
|
Gem::Specification === @spec ? @spec : @spec.spec
|
|
end
|
|
|
|
def inspect # :nodoc:
|
|
'#<%s for %p from %s>' % [
|
|
self.class, @spec, @request
|
|
]
|
|
end
|
|
|
|
##
|
|
# True if the requested gem has already been installed.
|
|
|
|
def installed?
|
|
case @spec
|
|
when Gem::Resolver::VendorSpecification then
|
|
true
|
|
else
|
|
this_spec = full_spec
|
|
|
|
Gem::Specification.any? do |s|
|
|
s == this_spec
|
|
end
|
|
end
|
|
end
|
|
|
|
##
|
|
# The name of this activation request's specification
|
|
|
|
def name
|
|
@spec.name
|
|
end
|
|
|
|
##
|
|
# Return the ActivationRequest that contained the dependency
|
|
# that we were activated for.
|
|
|
|
def parent
|
|
@request.requester
|
|
end
|
|
|
|
def pretty_print(q) # :nodoc:
|
|
q.group 2, '[Activation request', ']' do
|
|
q.breakable
|
|
q.pp @spec
|
|
|
|
q.breakable
|
|
q.text ' for '
|
|
q.pp @request
|
|
end
|
|
end
|
|
|
|
##
|
|
# The version of this activation request's specification
|
|
|
|
def version
|
|
@spec.version
|
|
end
|
|
|
|
##
|
|
# The platform of this activation request's specification
|
|
|
|
def platform
|
|
@spec.platform
|
|
end
|
|
|
|
private
|
|
|
|
def name_tuple
|
|
@name_tuple ||= Gem::NameTuple.new(name, version, platform)
|
|
end
|
|
end
|