Module: FunSwap

Defined in:
lib/funswap.rb

Class Method Summary collapse

Class Method Details

.swap(mod, fn_name, fn) ⇒ Object

Swap module function in method and return the old function.

mod:module -> fn_name:symbol -> fn:proc -> old_fn:proc



7
8
9
10
11
12
13
14
15
16
# File 'lib/funswap.rb', line 7

def self.swap(mod, fn_name, fn)
  old_fn = mod.method(fn_name).to_proc
  begin
    eigenclass = class << mod; self; end
    eigenclass.class_eval { remove_method fn_name }
  rescue NameError
  end
  mod.class.send(:define_method, fn_name, fn)
  old_fn
end

.with_fn(mod, fn_name, fn, &blk) ⇒ Object



18
19
20
21
22
23
# File 'lib/funswap.rb', line 18

def self.with_fn(mod, fn_name, fn, &blk)
  old_fn = swap(mod, fn_name, fn)
  blk.call()
ensure
  swap(mod, fn_name, old_fn)
end