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