# class 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 lib/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 lib/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 lib/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 lib/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 = <<-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) click to toggle source

Returns true if the conflicting dependency's name matches `spec`.

    # File lib/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 lib/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 lib/rubygems/resolver/conflict.rb, line 150
    def requester
      @failed_dep.requester
    end