123456789_123456789_123456789_123456789_123456789_

Class: Gem::Molinillo::Resolver::Resolution::UnwindDetails

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Struct
Instance Chain:
self, Comparable, Struct
Inherits: Struct
  • Object
Defined in: lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb,
lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb

Overview

Details of the state to unwind to when a conflict occurs, and the cause of the unwind

Instance Attribute Summary

Instance Method Summary

Instance Attribute Details

#conflicting_requirements (rw)

Details of the state to unwind to when a conflict occurs, and the cause of the unwind

[ GitHub ]

  
# File 'lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb', line 62

UnwindDetails = Struct.new(
  :state_index,
  :state_requirement,
  :requirement_tree,
  :conflicting_requirements,
  :requirement_trees,
  :requirements_unwound_to_instead
)

#requirement_tree (rw)

Details of the state to unwind to when a conflict occurs, and the cause of the unwind

[ GitHub ]

  
# File 'lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb', line 62

UnwindDetails = Struct.new(
  :state_index,
  :state_requirement,
  :requirement_tree,
  :conflicting_requirements,
  :requirement_trees,
  :requirements_unwound_to_instead
)

#requirement_trees (rw)

Details of the state to unwind to when a conflict occurs, and the cause of the unwind

[ GitHub ]

  
# File 'lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb', line 62

UnwindDetails = Struct.new(
  :state_index,
  :state_requirement,
  :requirement_tree,
  :conflicting_requirements,
  :requirement_trees,
  :requirements_unwound_to_instead
)

#requirements_unwound_to_instead (rw)

Details of the state to unwind to when a conflict occurs, and the cause of the unwind

[ GitHub ]

  
# File 'lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb', line 62

UnwindDetails = Struct.new(
  :state_index,
  :state_requirement,
  :requirement_tree,
  :conflicting_requirements,
  :requirement_trees,
  :requirements_unwound_to_instead
)

#state_index (rw)

Details of the state to unwind to when a conflict occurs, and the cause of the unwind

[ GitHub ]

  
# File 'lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb', line 62

UnwindDetails = Struct.new(
  :state_index,
  :state_requirement,
  :requirement_tree,
  :conflicting_requirements,
  :requirement_trees,
  :requirements_unwound_to_instead
)

#state_requirement (rw)

Details of the state to unwind to when a conflict occurs, and the cause of the unwind

[ GitHub ]

  
# File 'lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb', line 62

UnwindDetails = Struct.new(
  :state_index,
  :state_requirement,
  :requirement_tree,
  :conflicting_requirements,
  :requirement_trees,
  :requirements_unwound_to_instead
)

#unwinding_to_primary_requirement?Boolean (readonly)

Returns:

  • (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 be a parent of any of the other conflicting requirements (or we would have circularity)

[ GitHub ]

  
# File 'lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb', line 109

def unwinding_to_primary_requirement?
  requirement_tree.last == state_requirement
end

Instance Method Details

#<=>(other) ⇒ Integer

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.

Parameters:

  • other (UnwindDetail)

    UnwindDetail to be compared

Returns:

  • (Integer)

    integer specifying ordering

[ GitHub ]

  
# File 'lib/rubygems/vendor/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_requirementsArray

Returns:

  • (Array)

    array of all the requirements that led to the need for this unwind

[ GitHub ]

  
# File 'lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb', line 126

def all_requirements
  @all_requirements ||= requirement_trees.flatten(1)
end

#reversed_requirement_tree_indexInteger

Returns:

  • (Integer)

    index of state requirement in reversed requirement tree (the conflicting requirement itself will be at position 0)

[ GitHub ]

  
# File 'lib/rubygems/vendor/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_avoidArray

Returns:

  • (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

[ GitHub ]

  
# File 'lib/rubygems/vendor/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