Class: Gem::Resolver::Molinillo::DependencyGraph::Vertex
- Inherits:
-
Object
- Object
- Gem::Resolver::Molinillo::DependencyGraph::Vertex
- 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
Instance Attribute Summary collapse
-
#explicit_requirements ⇒ Array<Object>
readonly
The explicit requirements that required this vertex.
-
#incoming_edges ⇒ Array<Edge>
The edges of #graph that have ‘self` as their Edge#destination.
-
#name ⇒ String
The name of the vertex.
-
#outgoing_edges ⇒ Array<Edge>
The edges of #graph that have ‘self` as their Edge#origin.
-
#payload ⇒ Object
The payload the vertex holds.
-
#root ⇒ Boolean
(also: #root?)
Whether the vertex is considered a root vertex.
Instance Method Summary collapse
-
#==(other) ⇒ Boolean
(also: #eql?)
Whether the two vertices are equal, determined by a recursive traversal of each #successors.
-
#ancestor?(other) ⇒ Boolean
(also: #is_reachable_from?)
Is there a path from ‘other` to `self` following edges in the dependency graph?.
-
#hash ⇒ Fixnum
A hash for the vertex based upon its #name.
-
#initialize(name, payload) ⇒ Vertex
constructor
Initializes a vertex with the given name and payload.
-
#inspect ⇒ String
A string suitable for debugging.
-
#path_to?(other) ⇒ Boolean
(also: #descendent?)
Is there a path from ‘self` to `other` following edges in the dependency graph?.
-
#predecessors ⇒ Array<Vertex>
The vertices of #graph that have an edge with ‘self` as their Edge#destination.
-
#recursive_predecessors ⇒ Array<Vertex>
The vertices of #graph where ‘self` is a #descendent?.
-
#recursive_successors ⇒ Array<Vertex>
The vertices of #graph where ‘self` is an #ancestor?.
-
#requirements ⇒ Array<Object>
All of the requirements that required this vertex.
- #shallow_eql?(other) ⇒ Boolean
-
#successors ⇒ Array<Vertex>
The vertices of #graph that have an edge with ‘self` as their Edge#origin.
Constructor Details
#initialize(name, payload) ⇒ Vertex
Initializes a vertex with the given name and payload.
24 25 26 27 28 29 30 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 24 def initialize(name, payload) @name = name.frozen? ? name : name.dup.freeze @payload = payload @explicit_requirements = [] @outgoing_edges = [] @incoming_edges = [] end |
Instance Attribute Details
#explicit_requirements ⇒ Array<Object> (readonly)
Returns the explicit requirements that required this vertex.
15 16 17 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 15 def explicit_requirements @explicit_requirements end |
#incoming_edges ⇒ Array<Edge>
Returns the edges of #graph that have ‘self` as their Edge#destination.
44 45 46 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 44 def incoming_edges @incoming_edges end |
#name ⇒ String
Returns the name of the vertex.
8 9 10 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 8 def name @name end |
#outgoing_edges ⇒ Array<Edge>
Returns the edges of #graph that have ‘self` as their Edge#origin.
40 41 42 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 40 def outgoing_edges @outgoing_edges end |
#payload ⇒ Object
Returns the payload the vertex holds.
11 12 13 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 11 def payload @payload end |
#root ⇒ Boolean Also known as: root?
Returns whether the vertex is considered a root vertex.
18 19 20 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 18 def root @root end |
Instance Method Details
#==(other) ⇒ Boolean Also known as: eql?
Returns whether the two vertices are equal, determined by a recursive traversal of each #successors.
83 84 85 86 87 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 83 def ==(other) return true if equal?(other) shallow_eql?(other) && successors.to_set == other.successors.to_set end |
#ancestor?(other) ⇒ Boolean Also known as: is_reachable_from?
Is there a path from ‘other` to `self` following edges in the dependency graph?
118 119 120 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 118 def ancestor?(other) other.path_to?(self) end |
#hash ⇒ Fixnum
Returns a hash for the vertex based upon its #name.
102 103 104 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 102 def hash name.hash end |
#inspect ⇒ String
Returns a string suitable for debugging.
77 78 79 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 77 def inspect "#{self.class}:#{name}(#{payload.inspect})" end |
#path_to?(other) ⇒ Boolean Also known as: descendent?
Is there a path from ‘self` to `other` following edges in the dependency graph?
109 110 111 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 109 def path_to?(other) equal?(other) || successors.any? { |v| v.path_to?(other) } end |
#predecessors ⇒ Array<Vertex>
Returns the vertices of #graph that have an edge with ‘self` as their Edge#destination.
48 49 50 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 48 def predecessors incoming_edges.map(&:origin) end |
#recursive_predecessors ⇒ Array<Vertex>
Returns the vertices of #graph where ‘self` is a #descendent?.
54 55 56 57 58 59 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 54 def recursive_predecessors vertices = predecessors vertices += vertices.map(&:recursive_predecessors).flatten(1) vertices.uniq! vertices end |
#recursive_successors ⇒ Array<Vertex>
Returns the vertices of #graph where ‘self` is an #ancestor?.
69 70 71 72 73 74 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 69 def recursive_successors vertices = successors vertices += vertices.map(&:recursive_successors).flatten(1) vertices.uniq! vertices end |
#requirements ⇒ Array<Object>
Returns all of the requirements that required this vertex.
34 35 36 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 34 def requirements incoming_edges.map(&:requirement) + explicit_requirements end |
#shallow_eql?(other) ⇒ Boolean
92 93 94 95 96 97 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 92 def shallow_eql?(other) return true if equal?(other) other && name == other.name && payload == other.payload end |
#successors ⇒ Array<Vertex>
Returns the vertices of #graph that have an edge with ‘self` as their Edge#origin.
63 64 65 |
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb', line 63 def successors outgoing_edges.map(&:destination) end |