Module: FunSwap
- Defined in:
- lib/funswap.rb
Class Method Summary collapse
-
.swap(mod, fn_name, fn) ⇒ Object
Swap module function in method and return the old function.
- .with_fn(mod, fn_name, fn, &blk) ⇒ Object
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 |