Skip to content

Instantly share code, notes, and snippets.

@banister
Created June 3, 2012 20:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save banister/2864820 to your computer and use it in GitHub Desktop.
Save banister/2864820 to your computer and use it in GitHub Desktop.
[1] (pry) main: 0> class Hello
[1] (pry) main: 0* def self.wrapper(method_name)
[1] (pry) main: 0* old = instance_method(method_name)
[1] (pry) main: 0* define_method(method_name) do |*args, &block|
[1] (pry) main: 0* puts "wrapping method lol"
[1] (pry) main: 0* old.bind(self).call(*args, *block)
[1] (pry) main: 0* end
[1] (pry) main: 0* end
[1] (pry) main: 0* end
=> nil
[2] (pry) main: 0> class Goodbye < Hello
[2] (pry) main: 0* def multiply(x, y)
[2] (pry) main: 0* 2 * x * y
[2] (pry) main: 0* end
[2] (pry) main: 0* def add(x, y)
[2] (pry) main: 0* 2 + x + y
[2] (pry) main: 0* end
[2] (pry) main: 0* end
=> nil
[3] (pry) main: 0> Goodbye.new.multiply(2, 3)
=> 12
[4] (pry) main: 0> Goodbye.new.add(2, 3)
=> 7
[5] (pry) main: 0> class Goodbye
[5] (pry) main: 0* wrapper(:multiply)
[5] (pry) main: 0* wrapper(:add)
[5] (pry) main: 0* end
=> #<Proc:0x000001020f27d0@(pry):4 (lambda)>
[6] (pry) main: 0> Goodbye.new.multiply(2, 3)
wrapping method lol
=> 12
[7] (pry) main: 0> Goodbye.new.add(2, 3)
wrapping method lol
=> 7
[8] (pry) main: 0>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment