Refactor.rb (decoration plus AOP)

Hi all,

Courtesy of Yuki Sonoda, I stumbled across this:

Looks pretty cool to me. Decoration plus AOP!

Ara, have you already done something like this?

Just thought I'd mention it.

Regards,

Dan

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
    #<MyObject:0x7fa30c7c9c08>.do_something(2) took 0.998558 seconds
    #<MyObject:0x7fa30c7c9c08>.do_something(1) took 1.9e-05 seconds

Stefan

···

2008/8/1 Daniel Berger <djberg96@gmail.com>:

Hi all,

Courtesy of Yuki Sonoda, I stumbled across this:

1724’s gists · GitHub

Looks pretty cool to me. Decoration plus AOP!