# Aop?

**URL:** <https://www.ruby-forum.com/t/aop/84416>\
**Category:** Ruby\
**Created:** [February 4, 2007, 4:55am UTC](https://www.ruby-forum.com/t/aop/84416 "2007-02-04T04:55:48Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [February 4, 2007, 4:55am UTC](https://www.ruby-forum.com/t/aop/84416/1 "2007-02-04T04:55:48Z")

</div>

Hi,  
Is there an AOP implementation for Ruby?  
I have heard that using metaprogramming facilities obviates AOP.  
How is it so?  
Thanks

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [February 4, 2007, 5:26am UTC](https://www.ruby-forum.com/t/aop/84416/2 "2007-02-04T05:26:49Z")

</div>

On Feb 3, 10:55 pm, removed\_email\_address@domain.invalid wrote:

> Hi,  
> Is there an AOP implementation for Ruby?  
> I have heard that using metaprogramming facilities obviates AOP.  
> How is it so?  
> Thanks

I will give you a very broad example and you can narrow it from there:

ObjectSpace.each\_object(Class) do |c|  
c.class\_eval do  
c.instance\_methods(false).each do |m|  
alias\_method “_#{m}“, m  
define\_method(m) do |\*args|  
puts “doing #{m}…”  
send(”_#{m}”,\*args)  
end  
end  
end  
end

Note this is untested, and imperfect, but it should give you a good  
idea of how Ruby’s metaprogramming abilities can be used for AOP.

Some other things that might interest you:

[RCRchive](http://rcrchive.net/rcrs/1)  
[http://facets.rubyforge.org](http://facets.rubyforge.org) (see cut.rb)  
[http://aspectr.sourceforge.net/](http://aspectr.sourceforge.net/)  
[Ruminations of a Programmer: Does Ruby need AOP ?](http://debasishg.blogspot.com/2006/06/does-ruby-need-aop.html)

T.

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [February 5, 2007, 8:50am UTC](https://www.ruby-forum.com/t/aop/84416/3 "2007-02-05T08:50:56Z")

</div>

removed\_email\_address@domain.invalid schrieb:

> Is there an AOP implementation for Ruby?  
> Have a look at [http://rubyforge.org/projects/aspectr/](http://rubyforge.org/projects/aspectr/)

Regards,  
Jan

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [February 4, 2007, 8:01pm UTC](https://www.ruby-forum.com/t/aop/84416/4 "2007-02-04T20:01:08Z")

</div>

Trans wrote:

> On Feb 3, 10:55 pm, removed\_email\_address@domain.invalid wrote:
> 
> > Hi,  
> > Is there an AOP implementation for Ruby?  
> > I have heard that using metaprogramming facilities obviates AOP.  
> > How is it so?  
> > Thanks

For those of us who are lazy or interested in IOC features, there is  
Copland ([http://copland.rubyforge.org/](http://copland.rubyforge.org/)). It provides support for  
AOP-like pre- and post- hooks, as well as providing a wealth of other  
features, such as dependency injection, service factories, and  
registries which help keep modules of large systems decoupled from each  
other. I’m still learning about it myself, but it may help you out if  
you want any of those features in addition to basic AOP.

Hope that helps,  
Ronnie  
Garduño
