diff options
Diffstat (limited to 'lib/rubygems/dependency_resolver/activation_request.rb')
-rw-r--r-- | lib/rubygems/dependency_resolver/activation_request.rb | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/lib/rubygems/dependency_resolver/activation_request.rb b/lib/rubygems/dependency_resolver/activation_request.rb new file mode 100644 index 0000000000..25af6378ac --- /dev/null +++ b/lib/rubygems/dependency_resolver/activation_request.rb @@ -0,0 +1,109 @@ +## +# 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 + |