In Files

  • rubygems/resolver/conflict.rb

Class/Module Index [+]

Quicksearch

Gem::Resolver::Conflict

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

Attributes

activated[R]

The specification that was activated prior to the conflict

dependency[R]

The dependency that is in conflict with the activated gem.

Public Class Methods

new(dependency, activated, failed_dep=dependency) click to toggle source

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

 
               # File rubygems/resolver/conflict.rb, line 23
def initialize(dependency, activated, failed_dep=dependency)
  @dependency = dependency
  @activated = activated
  @failed_dep = failed_dep
end
            

Public Instance Methods

conflicting_dependencies() click to toggle source

Return the 2 dependency objects that conflicted

 
               # File rubygems/resolver/conflict.rb, line 46
def conflicting_dependencies
  [@failed_dep.dependency, @activated.request.dependency]
end
            
explain() click to toggle source

A string explanation of the conflict.

 
               # File rubygems/resolver/conflict.rb, line 39
def explain
  "<Conflict wanted: #{@failed_dep}, had: #{activated.spec.full_name}>"
end
            
explanation() click to toggle source

Explanation of the conflict used by exceptions to print useful messages

 
               # File rubygems/resolver/conflict.rb, line 53
  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? then
      matching = "
  Gems matching %s:
    %s
".chomp

      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) click to toggle source

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

 
               # File rubygems/resolver/conflict.rb, line 95
def for_spec?(spec)
  @dependency.name == spec.name
end
            
request_path(current) click to toggle source

Path of activations from the current list.

 
               # File rubygems/resolver/conflict.rb, line 123
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() click to toggle source

Return the Specification that listed the dependency

 
               # File rubygems/resolver/conflict.rb, line 150
def requester
  @failed_dep.requester
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.