class RShade::Trace

Constants

EVENTS

Attributes

event_store[RW]
filter[RW]
formatter[RW]

Public Class Methods

new(options={}) click to toggle source
# File lib/rshade/trace.rb, line 6
def initialize(options={})
  @event_store = EventStore.new
  @formatter = options.fetch(:formatter, RShade.config.formatter)
  @filter = options.fetch(:filter, RShade.config.filter)
  @tp = TracePoint.new(*EVENTS, &method(:process_trace))
  @level = 1
  @stat = {}
  @calls = 0
  @returns = 0
end
reveal(options={}, &block) click to toggle source
# File lib/rshade/trace.rb, line 17
def self.reveal(options={}, &block)
  new(options).reveal(&block)
end

Public Instance Methods

process_trace(tp) click to toggle source
# File lib/rshade/trace.rb, line 39
def process_trace(tp)
  if tp.event == :call
    @level +=1
    hash = EventSerializer.call(tp, @level)
    return unless filter.call(hash)
    @calls += 1
    event_store << Event.new(hash)
  end

  if tp.event == :return && @level > 0
    @returns += 1
    @level -=1
  end
end
reveal() { || ... } click to toggle source
# File lib/rshade/trace.rb, line 21
def reveal
  return unless block_given?

  @tp.enable
  yield
  self
ensure
  @tp.disable
end
show() click to toggle source
# File lib/rshade/trace.rb, line 31
def show
  formatter.call(event_store)
end
stat() click to toggle source
# File lib/rshade/trace.rb, line 35
def stat
  { calls: @calls, returns: @returns }
end