class TraceCalls::MethodCall

Attributes

called_at_lineno[R]
children[R]
file_path[R]
lineno[R]
name[R]
parent[R]
scope[R]

Public Class Methods

new(name, scope, file_path, lineno, parent, called_at_lineno) click to toggle source
# File lib/trace_calls/method_call.rb, line 13
def initialize(name, scope, file_path, lineno, parent, called_at_lineno)
  @name = name
  @scope = scope
  @file_path = file_path
  @lineno = lineno
  @parent = parent ? parent : self
  @called_at_lineno = called_at_lineno
  @children = []
end

Public Instance Methods

<<(method_call) click to toggle source
# File lib/trace_calls/method_call.rb, line 31
def <<(method_call)
  @children << method_call
  self
end
eql?(other) click to toggle source
# File lib/trace_calls/method_call.rb, line 73
def eql?(other)
  other.hash == hash
end
fully_qualified_name() click to toggle source
# File lib/trace_calls/method_call.rb, line 61
def fully_qualified_name
  "#{file_path}:#{lineno}:#{@scope}::#{@name}"
end
hash() click to toggle source
# File lib/trace_calls/method_call.rb, line 69
def hash
  "#{parent.fully_qualified_name}\##{called_at_lineno}>#{fully_qualified_name}".hash
end
is_leaf?() click to toggle source
# File lib/trace_calls/method_call.rb, line 27
def is_leaf?
  @children.empty?
end
is_root?() click to toggle source
# File lib/trace_calls/method_call.rb, line 23
def is_root?
  @parent == self
end
leaves() click to toggle source
# File lib/trace_calls/method_call.rb, line 36
def leaves
  return [self] if is_leaf?
  @children.map(&:leaves).flatten
end
qualified_name() click to toggle source
# File lib/trace_calls/method_call.rb, line 65
def qualified_name
  "#{@scope}::#{@name}"
end
to_s(detailed: false) click to toggle source

+-root

+-child 1
+-child 2
\-child 3
  \-child 1
# File lib/trace_calls/method_call.rb, line 46
def to_s(detailed: false)
  method_name_to_get_node_name = (detailed ? :fully_qualified_name : :qualified_name)
  line = ""
  line << "+-" if is_root?
  line << "#{send(method_name_to_get_node_name)}"
  line << " called from #{parent.send(method_name_to_get_node_name)} at #{called_at_lineno}" unless is_root?
  unless children.empty?
    line << "\n"
    line << children[0..-2].map{ |child| treeify_child_line(child, detailed: detailed) }.join
    line << treeify_child_line(children.last, last_child: true, detailed: detailed)
  end
  line = line[0..-2] if line[-1] == "\n"
  line
end

Private Instance Methods

treeify_child_line(child, last_child: false, detailed: false) click to toggle source
# File lib/trace_calls/method_call.rb, line 79
def treeify_child_line(child, last_child: false, detailed: false)
  anchor = (last_child ? "\\" : "+")
  child_text = ""
  child_lines = child.to_s(detailed: detailed).lines
  child_text << "  #{anchor}-" + child_lines.shift
  while not child_lines.empty? do
    child_text << "  |" + child_lines.shift[1..-1]
  end
  child_text << "\n"
end