From: Stefan Lang Date: 2008-08-01T20:36:32+09:00 Subject: Re: refactor.rb (decoration plus AOP) 2008/8/1 Daniel Berger : > Hi all, > > Courtesy of Yuki Sonoda, I stumbled across this: > > http://gist.github.com/1724 > > Looks pretty cool to me. Decoration plus AOP! I've written a Python-style-decorators library, too. (Code is here: http://repo.or.cz/w/decorate.git) Mainly because I don't like Ruby's private/protected methods. So the library provides decorators to mark single method definitions as private/protected/public: require "decorate/private_method" class Foo private_method def foo ... end end Around/before/after methods are also possible: require "decorate/around_decorator" class MyObject extend Decorate::AroundDecorator around_decorator :log_time, :call => :log_time def log_time(call) t0 = Time.now call.transfer puts "#{call.receiver}.#{call.message}(#{call.args}) took #{Time.now - t0} seconds" call.result end log_time def do_something(x) sleep(rand(x)) end end m = MyObject.new m.do_something(2) m.do_something(1) $ ruby around_example.rb #.do_something(2) took 0.998558 seconds #.do_something(1) took 1.9e-05 seconds Stefan