class Bundler::Molinillo::DependencyGraph::Log

A log for dependency graph actions

Public Class Methods

new() click to toggle source

Initializes an empty log

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 15
def initialize
  @current_action = @first_action = nil
end

Public Instance Methods

add_edge_no_circular(graph, origin, destination, requirement) click to toggle source

@macro action

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 41
def add_edge_no_circular(graph, origin, destination, requirement)
  push_action(graph, AddEdgeNoCircular.new(origin, destination, requirement))
end
add_vertex(graph, name, payload, root) click to toggle source

@macro action

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 31
def add_vertex(graph, name, payload, root)
  push_action(graph, AddVertex.new(name, payload, root))
end
delete_edge(graph, origin_name, destination_name, requirement) click to toggle source

{include:DependencyGraph#delete_edge} @param [Graph] graph the graph to perform the action on @param [String] origin_name @param [String] destination_name @param [Object] requirement @return (see Bundler::Molinillo::DependencyGraph#delete_edge)

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 51
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) click to toggle source

@macro action

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 36
def detach_vertex_named(graph, name)
  push_action(graph, DetachVertexNamed.new(name))
end
each() { |action| ... } click to toggle source

@!visibility private Enumerates each action in the log @yield [Action]

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 77
      def each
        return enum_for unless block_given?
        action = @first_action
        loop do
          break unless action
          yield action
          action = action.next
        end
        self
      end

      # @!visibility private
      # Enumerates each action in the log in reverse order
      # @yield [Action]
      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

      # @macro action
      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

      private

      # Adds the given action to the log, running the action
      # @param [DependencyGraph] graph
      # @param [Action] action
      # @return The value returned by `action.up`
      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
    end
  end
end
pop!(graph) click to toggle source

Pops the most recent action from the log and undoes the action @param [DependencyGraph] graph @return [Action] the action that was popped off the log

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 63
    def pop!(graph)
      return unless action = @current_action
      unless @current_action = action.previous
        @first_action = nil
      end
      action.down(graph)
      action
    end

    extend Enumerable

    # @!visibility private
    # Enumerates each action in the log
    # @yield [Action]
    def each
      return enum_for unless block_given?
      action = @first_action
      loop do
        break unless action
        yield action
        action = action.next
      end
      self
    end

    # @!visibility private
    # Enumerates each action in the log in reverse order
    # @yield [Action]
    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

    # @macro action
    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

    private

    # Adds the given action to the log, running the action
    # @param [DependencyGraph] graph
    # @param [Action] action
    # @return The value returned by `action.up`
    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
  end
end
push_action(graph, action) click to toggle source

Adds the given action to the log, running the action @param [DependencyGraph] graph @param [Action] action @return The value returned by `action.up`

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 117
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| ... } click to toggle source

@!visibility private Enumerates each action in the log in reverse order @yield [Action]

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 91
    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

    # @macro action
    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

    private

    # Adds the given action to the log, running the action
    # @param [DependencyGraph] graph
    # @param [Action] action
    # @return The value returned by `action.up`
    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
  end
end
rewind_to(graph, tag) click to toggle source

@macro action

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 103
  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

  private

  # Adds the given action to the log, running the action
  # @param [DependencyGraph] graph
  # @param [Action] action
  # @return The value returned by `action.up`
  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
end
set_payload(graph, name, payload) click to toggle source

@macro action

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 56
def set_payload(graph, name, payload)
  push_action(graph, SetPayload.new(name, payload))
end
tag(graph, tag) click to toggle source

@macro action

# File lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb, line 26
def tag(graph, tag)
  push_action(graph, Tag.new(tag))
end