aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rubygems/dependency_resolver/activation_request.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems/dependency_resolver/activation_request.rb')
-rw-r--r--lib/rubygems/dependency_resolver/activation_request.rb109
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
+