Class: Gem::Resolver::Conflict
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/rubygems/resolver/conflict.rb |
Overview
Used internally to indicate that a dependency conflicted with a spec that would be activated.
Class Method Summary
-
.new(dependency, activated, failed_dep = dependency) ⇒ Conflict
constructor
Creates a new resolver conflict when #dependency is in conflict with an already #activated specification.
Instance Attribute Summary
-
#activated
readonly
The specification that was activated prior to the conflict.
-
#dependency
readonly
The dependency that is in conflict with the activated gem.
- #failed_dep readonly Internal use only
Instance Method Summary
-
#conflicting_dependencies
Return the 2 dependency objects that conflicted.
-
#explain
A string explanation of the conflict.
-
#explanation
Explanation of the conflict used by exceptions to print useful messages.
-
#for_spec?(spec) ⇒ Boolean
Returns true if the conflicting dependency’s name matches
spec
. -
#request_path(current)
Path of activations from the
current
list. -
#requester
Return the
Specification
that listed the dependency. - #==(other) Internal use only
- #pretty_print(q) Internal use only
Constructor Details
.new(dependency, activated, failed_dep = dependency) ⇒ Conflict
Creates a new resolver conflict when #dependency is in conflict with an already #activated specification.
# File 'lib/rubygems/resolver/conflict.rb', line 24
def initialize(dependency, activated, failed_dep=dependency) @dependency = dependency @activated = activated @failed_dep = failed_dep end
Instance Attribute Details
#activated (readonly)
The specification that was activated prior to the conflict
# File 'lib/rubygems/resolver/conflict.rb', line 11
attr_reader :activated
#dependency (readonly)
The dependency that is in conflict with the activated gem.
# File 'lib/rubygems/resolver/conflict.rb', line 16
attr_reader :dependency
#failed_dep (readonly)
# File 'lib/rubygems/resolver/conflict.rb', line 18
attr_reader :failed_dep # :nodoc:
Instance Method Details
#==(other)
# File 'lib/rubygems/resolver/conflict.rb', line 30
def ==(other) # :nodoc: self.class === other and @dependency == other.dependency and @activated == other.activated and @failed_dep == other.failed_dep end
#conflicting_dependencies
Return the 2 dependency objects that conflicted
# File 'lib/rubygems/resolver/conflict.rb', line 47
def conflicting_dependencies [@failed_dep.dependency, @activated.request.dependency] end
#explain
A string explanation of the conflict.
# File 'lib/rubygems/resolver/conflict.rb', line 40
def explain "<Conflict wanted: #{@failed_dep}, had: #{activated.spec.full_name}>" end
#explanation
Explanation of the conflict used by exceptions to print useful messages
# File 'lib/rubygems/resolver/conflict.rb', line 54
def explanation activated = @activated.spec.full_name dependency = @failed_dep.dependency requirement = dependency.requirement alternates = dependency.matching_specs.map { |spec| spec.full_name } unless alternates.empty? matching = <<-MATCHING.chomp Gems matching %s: %s MATCHING matching = matching % [ dependency, alternates.join(', '), ] end explanation = <<-EXPLANATION Activated %s which does not match conflicting dependency (%s) Conflicting dependency chains: %s versus: %s %s EXPLANATION explanation % [ activated, requirement, request_path(@activated).reverse.join(", depends on\n "), request_path(@failed_dep).reverse.join(", depends on\n "), matching, ] end
#for_spec?(spec) ⇒ Boolean
Returns true if the conflicting dependency’s name matches spec
.
# File 'lib/rubygems/resolver/conflict.rb', line 96
def for_spec?(spec) @dependency.name == spec.name end
#pretty_print(q)
# File 'lib/rubygems/resolver/conflict.rb', line 100
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 q.text ' failed' else q.text ' failed dependency ' q.pp @failed_dep end end end
#request_path(current)
Path of activations from the current
list.
# File 'lib/rubygems/resolver/conflict.rb', line 124
def request_path(current) path = [] while current do case current when Gem::Resolver::ActivationRequest then path << "#{current.request.dependency}, #{current.spec.version} activated" current = current.parent when Gem::Resolver::DependencyRequest then path << "#{current.dependency}" current = current.requester else raise Gem::Exception, "[BUG] unknown request class #{current.class}" end end path = ['user request (gem command or Gemfile)'] if path.empty? path end
#requester
Return the Specification
that listed the dependency
# File 'lib/rubygems/resolver/conflict.rb', line 151
def requester @failed_dep.requester end