1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/rubygems/dependency_resolver/activation_request.rb
drbrain 47f0248b08 * lib/rubygems: Import RubyGems 2.1
* test/rubygems:  Ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41873 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-09 23:21:36 +00:00

109 lines
1.9 KiB
Ruby

##
# Specifies a Specification object that should be activated.
# Also contains a dependency that was used to introduce this
# activation.
class Gem::DependencyResolver::ActivationRequest
attr_reader :request
attr_reader :spec
def initialize spec, req, others_possible = true
@spec = spec
@request = req
@others_possible = others_possible
end
def == other
case other
when Gem::Specification
@spec == other
when Gem::DependencyResolver::ActivationRequest
@spec == other.spec && @request == other.request
else
false
end
end
def download path
if @spec.respond_to? :source
source = @spec.source
else
source = Gem.sources.first
end
Gem.ensure_gem_subdirectories path
source.download full_spec, path
end
def full_name
@spec.full_name
end
def full_spec
Gem::Specification === @spec ? @spec : @spec.spec
end
def inspect # :nodoc:
others_possible = nil
others_possible = ' (others possible)' if @others_possible
'#<%s for %p from %s%s>' % [
self.class, @spec, @request, others_possible
]
end
##
# Indicates if the requested gem has already been installed.
def installed?
this_spec = full_spec
Gem::Specification.any? do |s|
s == this_spec
end
end
def name
@spec.name
end
##
# Indicate if this activation is one of a set of possible
# requests for the same Dependency request.
def others_possible?
@others_possible
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
q.breakable
q.text ' (other possible)' if @others_possible
end
end
def version
@spec.version
end
end