Module: TestProf::EventProf::Monitor

Defined in:
lib/test_prof/event_prof/monitor.rb

Overview

Wrap methods with instrumentation

Defined Under Namespace

Classes: BaseTracker, TopLevelTracker

Class Method Summary collapse

Class Method Details

.call(mod, event, *mids, guard: nil, top_level: false) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/test_prof/event_prof/monitor.rb', line 46

def call(mod, event, *mids, guard: nil, top_level: false)
  tracker = top_level ? TopLevelTracker.new(event) : BaseTracker.new(event)

  patch = Module.new do
    mids.each do |mid|
      if RUBY_VERSION >= "2.7.0"
        define_method(mid) do |*args, **kwargs, &block|
          next super(*args, **kwargs, &block) unless guard.nil? || instance_exec(*args, **kwargs, &guard)
          tracker.track { super(*args, **kwargs, &block) }
        end
      else
        define_method(mid) do |*args, &block|
          next super(*args, &block) unless guard.nil? || instance_exec(*args, &guard)
          tracker.track { super(*args, &block) }
        end
      end
    end
  end

  mod.prepend(patch)
end