class Gem::Resolver::Molinillo::DependencyGraph::DetachVertexNamed

@!visibility private @see Gem::Resolver::Molinillo::DependencyGraph#detach_vertex_named

Public Class Methods

action_name() click to toggle source

(see Action#name)

# File lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb, line 11
def self.action_name
  :add_vertex
end
new(name) click to toggle source

Initialize an action to detach a vertex from a dependency graph @param [String] name the name of the vertex to detach

# File lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb, line 55
def initialize(name)
  @name = name
end

Public Instance Methods

down(graph) click to toggle source

(see Gem::Resolver::Molinillo::DependencyGraph::Action#down)

# File lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb, line 37
  def down(graph)
    return unless @vertex
    graph.vertices[@vertex.name] = @vertex
    @vertex.outgoing_edges.each do |e|
      e.destination.incoming_edges << e
    end
    @vertex.incoming_edges.each do |e|
      e.origin.outgoing_edges << e
    end
  end

  # @!group DetachVertexNamed

  # @return [String] the name of the vertex to detach
  attr_reader :name

  # Initialize an action to detach a vertex from a dependency graph
  # @param [String] name the name of the vertex to detach
  def initialize(name)
    @name = name
  end
end
up(graph) click to toggle source

(see Gem::Resolver::Molinillo::DependencyGraph::Action#up)

# File lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb, line 16
def up(graph)
  return [] unless @vertex = graph.vertices.delete(name)

  removed_vertices = [@vertex]
  @vertex.outgoing_edges.each do |e|
    v = e.destination
    v.incoming_edges.delete(e)
    if !v.root? && v.incoming_edges.empty?
      removed_vertices.concat graph.detach_vertex_named(v.name)
    end
  end

  @vertex.incoming_edges.each do |e|
    v = e.origin
    v.outgoing_edges.delete(e)
  end

  removed_vertices
end