class VisualizeRuby::Parser::If

Attributes

condition[R]
on_false[R]
on_true[R]

Public Instance Methods

branch(on_bool) click to toggle source
# 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
parse() click to toggle source

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

# 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

Private Instance Methods

branch_leaf(last_condition, type) click to toggle source
# File lib/visualize_ruby/parser/if.rb, line 32
def branch_leaf(last_condition, type)
  Node.new(
      name: "END",
      type: :branch_leaf,
      id:   "end-#{type}-'#{last_condition.id}'"
  )
end
break_ast() click to toggle source
# File lib/visualize_ruby/parser/if.rb, line 42
def break_ast
  @condition, @on_true, @on_false = @ast.children.to_a
end