summaryrefslogtreecommitdiff
path: root/lib/rubygems/dependency_resolver/activation_request.rb
blob: 25af6378ac91ec087ce87886d9dac4b53d0c740f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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