Class: Gem::Resolver::Conflict

Inherits:
Object
  • Object
show all
Defined in:
lib/rubygems/resolver/conflict.rb

Overview

Used internally to indicate that a dependency conflicted with a spec that would be activated.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dependency, activated, failed_dep = dependency) ⇒ Conflict

Creates a new resolver conflict when dependency is in conflict with an already activated specification.



23
24
25
26
27
# File 'lib/rubygems/resolver/conflict.rb', line 23

def initialize(dependency, activated, failed_dep=dependency)
  @dependency = dependency
  @activated = activated
  @failed_dep = failed_dep
end

Instance Attribute Details

#activatedObject (readonly)

The specification that was activated prior to the conflict



10
11
12
# File 'lib/rubygems/resolver/conflict.rb', line 10

def activated
  @activated
end

#dependencyObject (readonly)

The dependency that is in conflict with the activated gem.



15
16
17
# File 'lib/rubygems/resolver/conflict.rb', line 15

def dependency
  @dependency
end

#failed_depObject (readonly)

:nodoc:



17
18
19
# File 'lib/rubygems/resolver/conflict.rb', line 17

def failed_dep
  @failed_dep
end

Instance Method Details

#==(other) ⇒ Object

:nodoc:



29
30
31
32
33
34
# File 'lib/rubygems/resolver/conflict.rb', line 29

def == other # :nodoc:
  self.class === other and
    @dependency == other.dependency and
    @activated  == other.activated  and
    @failed_dep == other.failed_dep
end

#conflicting_dependenciesObject

Return the 2 dependency objects that conflicted



46
47
48
# File 'lib/rubygems/resolver/conflict.rb', line 46

def conflicting_dependencies
  [@failed_dep.dependency, @activated.request.dependency]
end

#explainObject

A string explanation of the conflict.



39
40
41
# File 'lib/rubygems/resolver/conflict.rb', line 39

def explain
  "<Conflict wanted: #{@failed_dep}, had: #{activated.spec.full_name}>"
end

#explanationObject

Explanation of the conflict used by exceptions to print useful messages



53
54
55
56
57
58
59
60
61
# File 'lib/rubygems/resolver/conflict.rb', line 53

def explanation
  activated   = @activated.spec.full_name
  requirement = @failed_dep.dependency.requirement

  "  Activated %s via:\n    %s\n  instead of (%s) via:\n    %s\n" % [
    activated,   request_path(@activated).join(', '),
    requirement, request_path(requester).join(', '),
  ]
end

#for_spec?(spec) ⇒ Boolean

Returns true if the conflicting dependency’s name matches spec.

Returns:

  • (Boolean)


66
67
68
# File 'lib/rubygems/resolver/conflict.rb', line 66

def for_spec?(spec)
  @dependency.name == spec.name
end

#pretty_print(q) ⇒ Object

:nodoc:



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/rubygems/resolver/conflict.rb', line 70

def pretty_print q # :nodoc:
  q.group 2, '[Dependency conflict: ', ']' do
    q.breakable

    q.text 'activated '
    q.pp @activated

    q.breakable
    q.text ' dependency '
    q.pp @dependency

    q.breakable
    if @dependency == @failed_dep then
      q.text ' failed'
    else
      q.text ' failed dependency '
      q.pp @failed_dep
    end
  end
end

#request_path(current) ⇒ Object

Path of activations from the current list.



94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/rubygems/resolver/conflict.rb', line 94

def request_path current
  path = []

  while current do
    requirement = current.request.dependency.requirement
    path << "#{current.spec.full_name} (#{requirement})"

    current = current.parent
  end

  path = ['user request (gem command or Gemfile)'] if path.empty?

  path
end

#requesterObject

Return the Specification that listed the dependency



112
113
114
# File 'lib/rubygems/resolver/conflict.rb', line 112

def requester
  @failed_dep.requester
end