Refactor.rb (decoration plus AOP)

Hi all,

Courtesy of Yuki S., 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

2008/8/1 Daniel B. [email protected]:

Hi all,

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

Stefan

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs