class Gem::Resolver::Conflict - Documentation for Ruby 4.1
Description: class Gem::Resolver::Conflict: Used internally to indicate that a dependency conflicted with a spec that would be activated.
Keywords: ruby,class,Gem::Resolver::Conflict

🔍

No recent searches

# 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)
Source

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

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

### Public Instance Methods

conflicting_dependencies ()
Source

    # File lib/rubygems/resolver/conflict.rb, line 47
    def conflicting_dependencies
      [@failed_dep.dependency, @activated.request.dependency]
    end

Return the 2 dependency objects that conflicted

explain ()
Source

    # File lib/rubygems/resolver/conflict.rb, line 40
    def explain
      "<Conflict wanted: #{@failed_dep}, had: #{activated.spec.full_name}>"
    end

A string explanation of the conflict.

explanation ()
Source

    # 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(&:full_name)

        unless alternates.empty?
          matching = <<-MATCHING.chomp

      Gems matching %s:
        %s
          MATCHING

          matching = format(matching, dependency, alternates.join(", "))
        end

        explanation = <<-EXPLANATION
      Activated %s
      which does not match conflicting dependency (%s)

      Conflicting dependency chains:
        %s

      versus:
        %s
    %s
        EXPLANATION

        format(explanation, activated, requirement, request_path(@activated).reverse.join(", depends on\n    "), request_path(@failed_dep).reverse.join(", depends on\n    "), matching)
      end

Explanation of the conflict used by exceptions to print useful messages

for_spec? (spec)
Source

    # File lib/rubygems/resolver/conflict.rb, line 88
    def for_spec?(spec)
      @dependency.name == spec.name
    end

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

request_path (current)
Source

    # File lib/rubygems/resolver/conflict.rb, line 116
    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.to_s

          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

Path of activations from the `current` list.

requester ()
Source

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

Return the `Specification` that listed the dependency