class VisualizeRuby::Parser::Case

Public Instance Methods

parse() click to toggle source

@return [Array<VisualizeRuby::Node>, Array<VisualizeRuby::Edge>]

# File lib/visualize_ruby/parser/case.rb, line 5
def parse
  ast_condition_node, *ast_when_nodes, ast_else_node = @ast.children
  condition_node = Node.new(ast: ast_condition_node, type: :decision)
  nodes << condition_node

  ast_when_nodes.each do |ast_when_node|
    edge_name, actions = ast_when_node.children
    action_nodes, action_edges = Parser.new(ast: actions).parse
    edges << Edge.new(name:  AstHelper.new(edge_name).description, nodes: [condition_node, action_nodes.first])
    nodes.concat(action_nodes)
    edges.concat(action_edges)
  end

  if ast_else_node
    else_node = Node.new(ast: ast_else_node, type: :action)
    else_edge = Edge.new(name: "else", nodes: [condition_node, else_node])
    nodes << else_node
    edges << else_edge
  end

  return nodes, edges
end