class DependencyGrapher::Logger
Attributes
dependencies[R]
Public Class Methods
new()
click to toggle source
# File lib/dependency_grapher/logger.rb, line 9 def initialize @dependencies = {} @keys = Set.new @call_stack = [] @methods = {} @trace = get_trace_point end
Public Instance Methods
disable()
click to toggle source
# File lib/dependency_grapher/logger.rb, line 21 def disable @trace.disable end
dump(filename = "dependencies.yml")
click to toggle source
# File lib/dependency_grapher/logger.rb, line 25 def dump(filename = "dependencies.yml") file = File.open(filename, "w") @keys.each do |key| file.puts @dependencies[key].serialize file.puts end end
enable()
click to toggle source
# File lib/dependency_grapher/logger.rb, line 17 def enable @trace.enable end
Private Instance Methods
get_trace_point()
click to toggle source
# File lib/dependency_grapher/logger.rb, line 34 def get_trace_point # Define a tracepoint for tacking ruby calls and returns tp = TracePoint.trace(:call, :return) do |tp| case tp.event when :call handle_call(tp.defined_class, tp.method_id, tp.path, tp.lineno) when :return handle_return end end tp.disable # Disable tp by default tp end
handle_call(defined_class, method_id, path, lineno)
click to toggle source
# File lib/dependency_grapher/logger.rb, line 48 def handle_call(defined_class, method_id, path, lineno) method = Method.new(ParseClass.call(defined_class), method_id.to_s, path, lineno.to_s) @methods[method.id] = method unless @methods[method.id] @call_stack << @methods[method.id] end
handle_return()
click to toggle source
# File lib/dependency_grapher/logger.rb, line 54 def handle_return kaller = @call_stack[-2] # Second last item on stack is the kaller receiver = @call_stack.pop # First item on stack is receiver # Ignore case where kaller is nil (ie. main) if kaller dep = Dependency.new(kaller, receiver) key = dep.id if @keys.include?(key) @dependencies[key].touch else @dependencies[key] = dep @keys << key end end end