# class Gem::Resolver::Molinillo::Resolver::Resolution::UnwindDetails

### Public Instance Methods

<=>(other) click to toggle source

We compare `UnwindDetails` when choosing which state to unwind to. If two options have the same state_index we prefer the one most removed from a requirement that caused the conflict. Both options would unwind to the same state, but a ‘grandparent` option will filter out fewer of its possibilities after doing so - where a state is both a `parent` and a `grandparent` to requirements that have caused a conflict this is the correct behaviour. @param [UnwindDetail] other UnwindDetail to be compared @return [Integer] integer specifying ordering

    # File lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb, line 83
    def <=>(other)
      if state_index > other.state_index
        1
      elsif state_index == other.state_index
        reversed_requirement_tree_index <=> other.reversed_requirement_tree_index
      else
        -1
      end
    end

all_requirements() click to toggle source

@return [Array] array of all the requirements that led to the need for

    this unwind

    # File lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb, line 126
    def all_requirements
      @all_requirements ||= requirement_trees.flatten(1)
    end

reversed_requirement_tree_index() click to toggle source

@return [Integer] index of state requirement in reversed requirement tree

    (the conflicting requirement itself will be at position 0)

    # File lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb, line 95
    def reversed_requirement_tree_index
      @reversed_requirement_tree_index ||=
        if state_requirement
          requirement_tree.reverse.index(state_requirement)
        else
          999_999
        end
    end

sub_dependencies_to_avoid() click to toggle source

@return [Array] array of sub-dependencies to avoid when choosing a

    new possibility for the state we've unwound to. Only relevant for
    non-primary unwinds

    # File lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb, line 116
    def sub_dependencies_to_avoid
      @requirements_to_avoid ||=
        requirement_trees.map do |tree|
          index = tree.index(state_requirement)
          tree[index + 1] if index
        end.compact
    end

unwinding_to_primary_requirement?() click to toggle source

@return [Boolean] where the requirement of the state we’re unwinding

    to directly caused the conflict. Note: in this case, it is
    impossible for the state we're unwinding to to be a parent of
    any of the other conflicting requirements (or we would have
    circularity)

    # File lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb, line 109
    def unwinding_to_primary_requirement?
      requirement_tree.last == state_requirement
    end