Class: VisualizeRuby::Parser::Case

Inherits:
Object
  • Object
show all
Defined in:
lib/visualize_ruby/parser/case.rb

Instance Method Summary collapse

Constructor Details

#initialize(ast) ⇒ Case

Returns a new instance of Case.



4
5
6
# File 'lib/visualize_ruby/parser/case.rb', line 4

def initialize(ast)
  @ast = ast
end

Instance Method Details

#edgesObject



31
32
33
# File 'lib/visualize_ruby/parser/case.rb', line 31

def edges
  @edges ||= []
end

#nodesObject



27
28
29
# File 'lib/visualize_ruby/parser/case.rb', line 27

def nodes
  @nodes ||= []
end

#parseArray<VisualizeRuby::Node>, Array<VisualizeRuby::Edge>

Returns:



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/visualize_ruby/parser/case.rb', line 9

def parse
  condition, *_whens, _else = @ast.children
  condition_node = Node.new(name: AstHelper.new(condition).description, type: :decision)
  nodes << condition_node
  _whens.each do |_when|
    edge_name, actions = _when.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
  _else_node = Node.new(name: AstHelper.new(_else).description, type: :action)
  _else_edge = Edge.new(name: "else", nodes: [condition_node, _else_node])
  nodes << _else_node
  edges << _else_edge
  return nodes, edges
end