All pastes #437120 Raw Edit

jhobbs

public text v1 · immutable
·published 2007-04-12 21:43 UTC
rendered paste body
#!/usr/bin/ruby

module HookEachFunction 
	def setup_hooks(object)
		object.instance_eval do
			@orig_procs = Hash.new
			object.public_methods(false).each { |method|
				method_proc = object.method(method).to_proc
				@orig_procs[method] = method_proc
				eval("def " + method + "(*args)
					puts 'before'
					@orig_procs[\"" + method + "\"].call(args)
					puts 'after'
				     end
				     ")
			}
		end
	end
end

class HookTest
	include HookEachFunction
	def initialize
		setup_hooks(self)
	end
			
	def hi(to, you)
		puts "hi" + to + you
	end

	def sup(dog)
		puts dog
	end
end

test = HookTest.new
test.hi(" to", " you")
test.sup("again")

outputs:

[jhobbs@pion ~]$ ./AutoTicker.rb
before
hi to you
after
before
again
after