itsme213 schrieb:
> My specific use case needs a wide variety of ways of merging object graphs
> (a bit like Joel's SuperHash, but deep + broad graphs and full control over
> inheritance and merge rules). Given graphs g1,g2, I want to create their
> merge g3:
>   g3.delegate_to(g1, g2)

I'm also interested in this subject. What I'm trying to do is to join 
object graphs that don't have to know about each other. I call the 
medium between the object graphs "seams" (it rhymes with "object teams", 
see [1] and [2]). As yet, I have coded the basics only, some AOP like 
functions. With object seams, the method "delegate_to" in your 
role/person example could be coded as

   require "seam"

   class Person
     def delegate_to(role)
       @seam.clear if @seam
       @seam = Seam.new do |s|
         s.instead_of(self, :describe) do role.describe end
         s.instead_of(role, :name) do self.name end
       end
     end
   end

Send me a mail, if you're interested, and I'll add the preliminary code 
to my rubyforge project (which is still empty).

Regards,
Pit

[1] http://www.objectteams.org
[2] http://www.objectteams.org/software.html#ROT