123456789_123456789_123456789_123456789_123456789_

Class: ActionDispatch::Journey::Visitors::Dot

Do not use. This class is for internal use only.
Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: ActionDispatch::Journey::Visitors::FunctionalVisitor
Defined in: actionpack/lib/action_dispatch/journey/visitors.rb

Overview

class String < FunctionalVisitor # :nodoc:

private
  def binary(node, seed)
    visit(node.right, visit(node.left, seed))
  end

  def nary(node, seed)
    last_child = node.children.last
    node.children.inject(seed) { |s, c|
      string = visit(c, s)
      string << "|" unless last_child == c
      string
    }
  end

  def terminal(node, seed)
    seed + node.left
  end

  def visit_GROUP(node, seed)
    visit(node.left, seed.dup << "(") << ")"
  end

  INSTANCE = new

end

Constant Summary

FunctionalVisitor - Inherited

DISPATCH_CACHE

Class Method Summary

Instance Method Summary

Constructor Details

.newDot

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/journey/visitors.rb', line 229

def initialize
  @nodes = []
  @edges = []
end

Instance Method Details

#accept(node, seed = [[], []])

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/journey/visitors.rb', line 234

def accept(node, seed = [[], []])
  super
  nodes, edges = seed
  <<-eodot
  digraph parse_tree {
    size="8,5"
    node [shape = none];
    edge [dir = none];
    #{nodes.join "\n"}
    #{edges.join("\n")}
  }
  eodot
end

#binary(node, seed) (private)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/journey/visitors.rb', line 249

def binary(node, seed)
  seed.last.concat node.children.map { |c|
    "#{node.object_id} -> #{c.object_id};"
  }
  super
end

#nary(node, seed) (private)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/journey/visitors.rb', line 256

def nary(node, seed)
  seed.last.concat node.children.map { |c|
    "#{node.object_id} -> #{c.object_id};"
  }
  super
end

#terminal(node, seed) (private)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/journey/visitors.rb', line 288

def terminal(node, seed)
  value = node.left

  seed.first << "#{node.object_id} [label=\"#{value}\"];"
  seed
end

#unary(node, seed) (private)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/journey/visitors.rb', line 263

def unary(node, seed)
  seed.last << "#{node.object_id} -> #{node.left.object_id};"
  super
end

#visit_CAT(node, seed) (private)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/journey/visitors.rb', line 273

def visit_CAT(node, seed)
  seed.first << "#{node.object_id} [label=\"○\"];"
  super
end

#visit_GROUP(node, seed) (private)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/journey/visitors.rb', line 268

def visit_GROUP(node, seed)
  seed.first << "#{node.object_id} [label=\"()\"];"
  super
end

#visit_OR(node, seed) (private)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/journey/visitors.rb', line 283

def visit_OR(node, seed)
  seed.first << "#{node.object_id} [label=\"|\"];"
  super
end

#visit_STAR(node, seed) (private)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/journey/visitors.rb', line 278

def visit_STAR(node, seed)
  seed.first << "#{node.object_id} [label=\"*\"];"
  super
end