class Straw::Tracer
Public Class Methods
new(logger)
click to toggle source
# File lib/straw.rb, line 42 def initialize(logger) @logger = logger end
Public Instance Methods
trace(defaults = {}) { || ... }
click to toggle source
# File lib/straw.rb, line 46 def trace(defaults = {}) tracer = TracePoint.new(:call) do |x| @logger.debug(defaults.merge({ path: x.path, lineno: x.lineno, clazz: x.defined_class, method: x.method_id, args: args_from(x), locals: locals_from(x) })) rescue StandardError => boom @logger.error(defaults.merge({ message: boom.message, stacktrace: boom.backtrace })) end tracer.enable yield ensure tracer.disable end
Private Instance Methods
args_from(trace)
click to toggle source
# File lib/straw.rb, line 60 def args_from(trace) trace.parameters.map(&:last).map { |x| [x, trace.binding.eval(x.to_s)] }.to_h end
locals_from(trace)
click to toggle source
# File lib/straw.rb, line 64 def locals_from(trace) trace.binding.local_variables.map { |x| [x, trace.binding.local_variable_get(x)] }.to_h end