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