Class: VisualizeRuby::Parser::If

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

Instance Method Summary collapse

Methods included from Conditions

#set_conditions

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from VisualizeRuby::Parser::Base

Instance Method Details

#branch(on_bool) ⇒ Object



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

def branch(on_bool)
  return [], [] unless on_bool
  on_bool_nodes, on_bool_edges = Parser.new(ast: on_bool).parse
  return on_bool_nodes, on_bool_edges
end

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

Returns:



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

def parse
  break_ast

  condition_nodes                = set_conditions(condition)
  on_true_nodes, on_true_edges   = branch(on_true)
  on_false_nodes, on_false_edges = branch(on_false)
  last_condition                 = condition_nodes.last
  on_true_nodes[0]               = on_true_node = (on_true_nodes.first || branch_leaf(last_condition, "true"))
  on_false_nodes[0]              = on_false_node = (on_false_nodes.first || branch_leaf(last_condition, "false"))
  nodes.concat(on_true_nodes)
  nodes.concat(on_false_nodes)
  edges << Edge.new(name: "true", nodes: [last_condition, on_true_node])
  edges << Edge.new(name: "false", nodes: [last_condition, on_false_node])
  edges.concat(on_false_edges)
  edges.concat(on_true_edges)
  return [nodes, edges]
end