class Uncool::Trace

Attributes

log[R]
targets[R]

Public Class Methods

new(targets, options={}) click to toggle source
# File lib/uncool/trace.rb, line 19
def initialize(targets, options={})
  @targets = [targets].compact.flatten
  @options = options
  @log = []
end

Public Instance Methods

activate() click to toggle source
# File lib/uncool/trace.rb, line 53
def activate
  setup
  TracePoint.activate
end
deactivate() click to toggle source
# File lib/uncool/trace.rb, line 59
def deactivate
  TracePoint.deactivate
end
setup() click to toggle source
# File lib/uncool/trace.rb, line 26
def setup
  tracker = self
  TracePoint.trace do |tp|
    #puts "#{tp.self.class}\t#{tp.callee}\t#{tp.event}\t#{tp.return?}"
    if tp.event == 'call' or tp.event == 'c-call'
      if tracker.target?(tp.self.class)
        tracker.log << [tp.self, tp.callee]
      end
    end
  end
end
target?(mod) click to toggle source
# File lib/uncool/trace.rb, line 39
def target?(mod)
  return true if targets.empty?
  targets.find do |target|
    begin
      target_class = eval(target, TOPLEVEL_BINDING) #Object.const_get(target)
    rescue
      nil
    else
      target_class == mod
    end
  end
end
to_analysis() click to toggle source
# File lib/uncool/trace.rb, line 64
def to_analysis
  Analysis.new(self, @options)
end