class RubyAstVisualizer::Core

Public Class Methods

new(ast) click to toggle source
# File lib/ruby_ast_visualizer.rb, line 5
def initialize(ast)
  @node_id = 0
  @ast = ast
end

Public Instance Methods

visualize() click to toggle source
# File lib/ruby_ast_visualizer.rb, line 10
def visualize
  GraphViz.new(:G, type: :digraph) {|g|
    reconfigure(g, @ast)
  }
end

Private Instance Methods

fetch_node_id(node) click to toggle source
# File lib/ruby_ast_visualizer.rb, line 37
def fetch_node_id(node)
  case node
  when Integer, NilClass, String, Symbol
    (@node_id += 1).to_s
  else
    node.object_id.to_s
  end
end
reconfigure(g, node) click to toggle source
# File lib/ruby_ast_visualizer.rb, line 18
def reconfigure(g, node)
  self_node = g.add_nodes(fetch_node_id(node), label: node.type)

  node.children.each {|child|
    label = case child
            when Integer; child
            when NilClass; 'nil'
            when String; "\"#{child}\""
            when Symbol; ":#{child}"
            else
              child.type.to_s
            end

    self_node << g.add_nodes(fetch_node_id(child), label: label)

    reconfigure(g, child) if child.respond_to? :children
  }
end