i'm on a box with latest (today's) ruby and rails.  i started seeing bizzare
errors with infinite stack recursion for a simple

   ModelName.find :all

the code is kinda deep, but you can see how the problem occurs by looking at

   activerecord-1.13.1/lib/active_record/callbacks.rb +215

there we see

   object = instantiate_without_callbacks(record)

scanning up a bit we see


     def self.append_features(base) #:nodoc:
       super

       base.extend(ClassMethods)
       base.class_eval do
         class << self
           include Observable
           alias_method :instantiate_without_callbacks, :instantiate
           alias_method :instantiate, :instantiate_with_callbacks
         end


the first alias method is supposed to do

   instantiate_without_callbacks -> ActiveRecord::Base::instaniate

the second

   instantiate -> the yet to be defined ActiveRecord::Callbacks::instantiate_with_callbacks

which takes you back to line 215, shows:

     module ClassMethods #:nodoc:
       def instantiate_with_callbacks(record)

  ยทยทยท       ect = instantiate_without_callbacks(record)

what is supposed to happen here is that any call to
ActiveRecord::Base::instantiate first calls instantiate_with_callbacks, which
calls instantiate_without_callbacks, which calls the, supposedly, __original__
ActiveRecord::Base::instantiate.

what __actually__ happens in this:

   >> Company.find :all
   - /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active_record/base.rb:431:in `find_by_sql'
   - /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active_record/base.rb:431:in `find_by_sql'
   - /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active_record/base.rb:395:in `find'
   - (irb):1:in `irb_binding'
   - /usr/local/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding'
   - /usr/local/lib/ruby/1.8/irb/workspace.rb:52


   - /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active_record/callbacks.rb:222:in `instantiate'
   - /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active_record/base.rb:431:in `find_by_sql'
   - /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active_record/base.rb:431:in `find_by_sql'
   - /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active_record/base.rb:395:in `find'
   - (irb):1:in `irb_binding'
   - /usr/local/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding'
   - /usr/local/lib/ruby/1.8/irb/workspace.rb:52


   - /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active_record/callbacks.rb:222:in `instantiate'
   - /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active_record/base.rb:431:in `find_by_sql'
   - /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active_record/base.rb:431:in `find_by_sql'
   - /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.13.1/lib/active_record/base.rb:395:in `find'
   - (irb):1:in `irb_binding'
   - /usr/local/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding'
   - /usr/local/lib/ruby/1.8/irb/workspace.rb:52

and so on and so forth.  eg. - infinite recursion.

it seems the original instanciate is lost in this whole method shuffling
approach.

this code works in 1.8.2 and 1.8.3.  unless the bevhaiour of alias_methods has
changed - hard to beleive - this seems to be a bad bug.  i've tried to distill
this to a simple example with no luck.  so i'm afaid  there is more to it that
the above.  all you need do to reproduce is setup a rails dir, create a model,
and run YourModel.find :all.

system info

   root:rr# uname -srm
   FreeBSD 5.3-RELEASE i386

   root:rr# ruby -v
   ruby 1.8.4 (2005-12-01) [i386-freebsd5.3]

   root:rr# rails -v
   Rails 0.14.4

hopefully i've not overlooked something obvious here - our water pipes froze
today so i haven't been able to drink coffee.

thoughts?

-a
-- 
===============================================================================
| ara [dot] t [dot] howard [at] noaa [dot] gov
| all happiness comes from the desire for others to be happy.  all misery
| comes from the desire for oneself to be happy.
| -- bodhicaryavatara
===============================================================================