Class: VisualizeRuby::Parser::If

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

Instance Method Summary collapse

Constructor Details

#initialize(ast) ⇒ If

Returns a new instance of If.



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

def initialize(ast)
  @ast = ast
end

Instance Method Details

#branch(on_bool) ⇒ Object



25
26
27
28
29
30
# File 'lib/visualize_ruby/parser/if.rb', line 25

def branch(on_bool)
  on_bool_nodes, on_bool_edges = Parser.new(ast: on_bool).parse
  on_bool_node                 = on_bool_nodes.first
  nodes.concat(on_bool_nodes)
  return on_bool_node, on_bool_edges
end

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

Returns:



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

def parse
  break_ast

  condition_nodes               = set_conditions(condition)
  on_true_node, on_true_edges   = branch(on_true)
  on_false_node, on_false_edges = branch(on_false) if on_false

  condition_nodes.each do |condition_node|
    edges << Edge.new(name: "true", nodes: [condition_node, on_true_node])
    edges << Edge.new(name: "false", nodes: [condition_node, on_false_node]) if on_false
  end
  edges.concat(on_false_edges) if on_false
  edges.concat(on_true_edges)
  return [nodes, edges]
end