class Tracer

Attributes

data[R]
path[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/tracer.rb, line 4
def initialize(options = {})
  @options = options
  @trace = build_tracer
  @path = []
  @data = []
end

Public Instance Methods

disable() click to toggle source
# File lib/tracer.rb, line 15
def disable
  @trace.disable
end
enable() click to toggle source
# File lib/tracer.rb, line 11
def enable
  @trace.enable
end

Private Instance Methods

build_tracer() click to toggle source
# File lib/tracer.rb, line 25
def build_tracer
  TracePoint.new(:call, :return) do |event|
    next if event.defined_class == self.class

    case event.event
    when :return
      @options[:display_return_value] && event.return_value && @data.push(
        key: uniq_key,
        parent: @path.last,
        text: "Return: #{event.return_value}"
      )
      @path.pop
    when :call
      key = uniq_key
      data = { key: key, parent: @path.last, text: event.method_id }.compact
      @data.push(data)
      @path.push(key)
    end
  end
end
uniq_key() click to toggle source
# File lib/tracer.rb, line 21
def uniq_key
  rand(1..1_000).to_s + Time.now.to_f.to_s
end