Module: Guard::Internals::Tracing

Defined in:
lib/guard/internals/tracing.rb

Class Method Summary collapse

Class Method Details

.trace(mod, meth) ⇒ Object


4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/guard/internals/tracing.rb', line 4

def self.trace(mod, meth)
  meta = (class << mod; self; end)
  original_meth = "original_#{meth}".to_sym

  if mod.respond_to?(original_meth)
    fail "ALREADY TRACED: #{mod}.#{meth}"
  end

  meta.send(:alias_method, original_meth, meth)
  meta.send(:define_method, meth) do |*args, &block|
    yield(*args) if block_given?
    mod.send original_meth, *args, &block
  end
end

.untrace(mod, meth) ⇒ Object


19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/guard/internals/tracing.rb', line 19

def self.untrace(mod, meth)
  meta = (class << mod; self; end)
  original_meth = "original_#{meth}".to_sym

  unless mod.respond_to?(original_meth)
    fail "NOT TRACED: #{mod}.#{meth} (no method: #{original_meth})"
  end

  meta.send(:remove_method, meth)
  meta.send(:alias_method, meth, original_meth)
  meta.send(:undef_method, original_meth)
end