On Sun, Feb 14, 2010 at 05:17:49AM +0900, The Higgs bozo wrote:
> Thomas Sawyer wrote:
> > Or something like:
> >
> > require 'facets/kernel/as'
> > 
> > class MyClass
> >   class << self
> >     alias _new new
> >     def new
> >       instance = _new
> >       ancestors.reverse_each do |anc|
> >         if anc.instance_methods(false).include?(:preinitialize)
> >           instance.as(anc).preinitialize
> >         end
> >       end
> >     end
> >   end
> > end
> > 
> > Then define #preinitialize at any level you wish.
> > 
> > (Note this is off the top of my head so it may need tweaking to
> > run).
> 
> Yeah, that was Ryan's point about overly clever solutions. That may
> look good now, but someone who is debugging some code which depends on
> it will hate you. And when you are debugging six months from now,
> you'll hate yourself.
> 
> If you really want to do this, put some real effort into designing a
> clean API for it. Put it in a gem. Make it real, real obvious that
> you're putting a twist on the conventional method calling
> chain. Document the API so it's obvious in a coherent, readily
> understandable way.
> 
> Don't slip a concrete dildo into someone's box of Fruit Loops. They
> won't be happy with your Morning Breakfast Surprise. Put the concrete
> dildo in a clearly labeled box, with instructions. Then when someone
> encounters a problem, "Hey, something is screwing me here. Maybe it's
> the concrete dildo?" at least they know to ask.

I was wondering where my concrete dildo went.  Please clean the Fruit
Loops off and return ASAP.  My lawn ornaments just aren't the same
without it.

-- 
Aaron Patterson
http://tenderlovemaking.com/