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

@!visibility private @see `DependencyGraph#detach_vertex_named`

### Attributes

name[R]

@return [String] the name of the vertex to detach

### 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 12
    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 56
    def initialize(name)
      @name = name
    end

### Public Instance Methods

down(graph) click to toggle source

(see `Action#down`)

    # File lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb, line 38
    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

up(graph) click to toggle source

(see `Action#up`)

    # File lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb, line 17
    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