123456789_123456789_123456789_123456789_123456789_

Class: Gem::Resolver::Molinillo::DependencyGraph::Log

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Enumerable
Inherits: Object
Defined in: lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb

Overview

A log for dependency graph actions

Class Method Summary

Instance Method Summary

Constructor Details

.newLog

Initializes an empty log

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb', line 14

def initialize
  @current_action = @first_action = nil
end

Instance Method Details

#add_edge_no_circular(graph, origin, destination, requirement)

Parameters:

  • graph (Graph)

    the graph to perform the action on

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb', line 40

def add_edge_no_circular(graph, origin, destination, requirement)
  push_action(graph, AddEdgeNoCircular.new(origin, destination, requirement))
end

#add_vertex(graph, name, payload, root)

Parameters:

  • graph (Graph)

    the graph to perform the action on

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb', line 30

def add_vertex(graph, name, payload, root)
  push_action(graph, AddVertex.new(name, payload, root))
end

#delete_edge(graph, origin_name, destination_name, requirement)

Parameters:

  • graph (Graph)

    the graph to perform the action on

  • origin_name (String)
  • destination_name (String)
  • requirement (Object)
[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb', line 50

def delete_edge(graph, origin_name, destination_name, requirement)
  push_action(graph, DeleteEdge.new(origin_name, destination_name, requirement))
end

#detach_vertex_named(graph, name)

Parameters:

  • graph (Graph)

    the graph to perform the action on

[ GitHub ]

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

def detach_vertex_named(graph, name)
  push_action(graph, DetachVertexNamed.new(name))
end

#each {|Action| ... } (private)

Enumerates each action in the log

Yields:

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb', line 76

def each
  return enum_for unless block_given?
  action = @first_action
  loop do
    break unless action
    yield action
    action = action.next
  end
  self
end

#pop!(graph) ⇒ Action

Pops the most recent action from the log and undoes the action

Parameters:

Returns:

  • (Action)

    the action that was popped off the log

[ GitHub ]

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

def pop!(graph)
  return unless action = @current_action
  unless @current_action = action.previous
    @first_action = nil
  end
  action.down(graph)
  action
end

#push_action(graph, action) ⇒ Object (private)

Adds the given action to the log, running the action

Parameters:

Returns:

  • The value returned by action.up

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb', line 116

def push_action(graph, action)
  action.previous = @current_action
  @current_action.next = action if @current_action
  @current_action = action
  @first_action ||= action
  action.up(graph)
end

#reverse_each {|Action| ... } (private)

Enumerates each action in the log in reverse order

Yields:

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb', line 90

def reverse_each
  return enum_for(:reverse_each) unless block_given?
  action = @current_action
  loop do
    break unless action
    yield action
    action = action.previous
  end
  self
end

#rewind_to(graph, tag)

Parameters:

  • graph (Graph)

    the graph to perform the action on

[ GitHub ]

  
# File 'lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb', line 102

def rewind_to(graph, tag)
  loop do
    action = pop!(graph)
    raise "No tag #{tag.inspect} found" unless action
    break if action.class.action_name == :tag && action.tag == tag
  end
end

#set_payload(graph, name, payload)

Parameters:

  • graph (Graph)

    the graph to perform the action on

[ GitHub ]

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

def set_payload(graph, name, payload)
  push_action(graph, SetPayload.new(name, payload))
end

#tag(graph, tag)

Parameters:

  • graph (Graph)

    the graph to perform the action on

[ GitHub ]

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

def tag(graph, tag)
  push_action(graph, Tag.new(tag))
end