123456789_123456789_123456789_123456789_123456789_

Class: Gem::Resolver::Molinillo::DependencyGraph::Vertex

Relationships & Source Files
Inherits: Object
Defined in: lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb

Overview

A vertex in a ::Gem::Resolver::Molinillo::DependencyGraph that encapsulates a #name and a #payload

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(name, payload) ⇒ Vertex

Initializes a vertex with the given name and payload.

Parameters:

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 25

def initialize(name, payload)
  @name = name.frozen? ? name : name.dup.freeze
  @payload = payload
  @explicit_requirements = []
  @outgoing_edges = []
  @incoming_edges = []
end

Instance Attribute Details

#explicit_requirementsArray<Object> (readonly)

Returns:

  • (Array<Object>)

    the explicit requirements that required this vertex

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 16

attr_reader :explicit_requirements

#incoming_edgesArray<Edge> (rw)

Returns:

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 45

attr_accessor :incoming_edges

#nameString (rw)

Returns:

  • (String)

    the name of the vertex

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 9

attr_accessor :name

#outgoing_edgesArray<Edge> (rw)

Returns:

  • (Array<Edge>)

    the edges of #graph that have self as their Edge#origin

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 41

attr_accessor :outgoing_edges

#payloadObject (rw)

Returns:

  • (Object)

    the payload the vertex holds

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 12

attr_accessor :payload

#root? (rw)

Alias for #root.

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 20

alias root? root

Instance Method Details

#==(other) ⇒ Boolean Also known as: #eql?

Returns:

  • (Boolean)

    whether the two vertices are equal, determined by a recursive traversal of each #successors

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 106

def ==(other)
  return true if equal?(other)
  shallow_eql?(other) &&
    successors.to_set == other.successors.to_set
end

#_path_to?(other, visited = new_vertex_set) ⇒ Boolean (protected)

Parameters:

  • other (Vertex)

    the vertex to check if there’s a path to

  • visited (Set<Vertex>) (defaults to: new_vertex_set)

    the vertices of #graph that have been visited

Returns:

  • (Boolean)

    whether there is a path to other from self

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 141

def _path_to?(other, visited = new_vertex_set)
  return false unless visited.add?(self)
  return true if equal?(other)
  successors.any? { |v| v._path_to?(other, visited) }
end

#_recursive_predecessors(vertices = new_vertex_set) ⇒ Set<Vertex> (protected)

Parameters:

  • vertices (Set<Vertex>) (defaults to: new_vertex_set)

    the set to add the predecessors to

Returns:

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 62

def _recursive_predecessors(vertices = new_vertex_set)
  incoming_edges.each do |edge|
    vertex = edge.origin
    next unless vertices.add?(vertex)
    vertex._recursive_predecessors(vertices)
  end

  vertices
end

#_recursive_successors(vertices = new_vertex_set) ⇒ Set<Vertex> (protected)

Parameters:

  • vertices (Set<Vertex>) (defaults to: new_vertex_set)

    the set to add the successors to

Returns:

  • (Set<Vertex>)

    the vertices of #graph where self is an #ancestor?

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 88

def _recursive_successors(vertices = new_vertex_set)
  outgoing_edges.each do |edge|
    vertex = edge.destination
    next unless vertices.add?(vertex)
    vertex._recursive_successors(vertices)
  end

  vertices
end

#ancestor?(other) ⇒ Boolean Also known as: #is_reachable_from?

Is there a path from other to self following edges in the dependency graph?

Returns:

  • (Boolean)

    whether there is a path following edges within this #graph

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 151

def ancestor?(other)
  other.path_to?(self)
end

#descendent?(other)

Alias for #path_to?.

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 136

alias descendent? path_to?

#eql?(other)

Alias for #==.

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 122

alias eql? ==

#hashFixnum

Returns:

  • (Fixnum)

    a hash for the vertex based upon its #name

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 125

def hash
  name.hash
end

#inspectString

Returns:

  • (String)

    a string suitable for debugging

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 100

def inspect
  "#{self.class}:#{name}(#{payload.inspect})"
end

#is_reachable_from?(other)

Alias for #ancestor?.

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 155

alias is_reachable_from? ancestor?

#new_vertex_set (private)

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 157

def new_vertex_set
  require 'set'
  Set.new
end

#path_to?(other) ⇒ Boolean Also known as: #descendent?

Is there a path from self to other following edges in the dependency graph?

Returns:

  • (Boolean)

    whether there is a path following edges within this #graph

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 132

def path_to?(other)
  _path_to?(other)
end

#predecessorsArray<Vertex>

Returns:

  • (Array<Vertex>)

    the vertices of #graph that have an edge with self as their Edge#destination

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 49

def predecessors
  incoming_edges.map(&:origin)
end

#recursive_predecessorsSet<Vertex>

Returns:

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 55

def recursive_predecessors
  _recursive_predecessors
end

#recursive_successorsSet<Vertex>

Returns:

  • (Set<Vertex>)

    the vertices of #graph where self is an #ancestor?

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 81

def recursive_successors
  _recursive_successors
end

#requirementsArray<Object>

Returns:

  • (Array<Object>)

    all of the requirements that required this vertex

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 35

def requirements
  (incoming_edges.map(&:requirement) + explicit_requirements).uniq
end

#rootBoolean (rw) Also known as: #root?

Returns:

  • (Boolean)

    whether the vertex is considered a root vertex

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 19

attr_accessor :root

#shallow_eql?(other) ⇒ Boolean

Parameters:

  • other (Vertex)

    the other vertex to compare to

Returns:

  • (Boolean)

    whether the two vertices are equal, determined solely by #name and #payload equality

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 115

def shallow_eql?(other)
  return true if equal?(other)
  other &&
    name == other.name &&
    payload == other.payload
end

#successorsArray<Vertex>

Returns:

  • (Array<Vertex>)

    the vertices of #graph that have an edge with self as their Edge#origin

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 75

def successors
  outgoing_edges.map(&:destination)
end