Strange behavior of alias_method_chains

Greetings.

I've got very strange behavior of alias_method_chains, and I hope
someone will advise me.

I have a rails 2.2.2 app created with
#rails aliasApp

, a class XYZ residing in app/helpers/xyz.rb:

<code>
class XYZ

  attr_accessor :name
  attr_accessor :value

  def initialize (a, b)
    puts "in XYZ constructor"
    self.name = a
    self.value = b
  end

  def a
    puts self.name
  end

  def b
    puts self.value
  end
end
</code>

, and an extended class XYZ in app/views/xyz_ext.rb

<code>
class XYZ
   def initialize_with_extension a,b
      puts "before chain"
      initialize_without_extension a,b
      puts "after chain"
   end
   alias_method_chain :initialize, :extension
end
</code>

So basically what I expect to have three lines in the console when
creating XYZ:
1) before chain
2) in Alias constructor
3) after chain

BUT I get something really different!

silencio:alias u2$ script/console
Loading development environment (Rails 2.2.2)

require 'app/views/xyz_ext.rb'

=> ["XYZ"]

XYZ.new 1,3

before chain
ArgumentError: wrong number of arguments (2 for 0)
from ./app/views/xyz_ext.rb:4:in `initialize_without_extension'
from ./app/views/xyz_ext.rb:4:in `initialize'
from (irb):3:in `new'
from (irb):3

Any ideas on this error would be very appreciated!
Alex

The problem here is that the "normal" XYZ in xyz.rb is never loaded so
you're trying to call Object's initialize, which does not take 2
arguments

Fred

Fred,

I really appreciate your help. The following works like a charm.

silencio:alias u2$ script/console
Loading development environment (Rails 2.2.2)

require 'app/helpers/alias.rb'

=> ["XYZ"]

require 'app/views/alias_ext.rb'

=> []

XYZ.new 1,2

before chain
in Alias constructor
after chain
=> #<XYZ:0x259c73c @value=2, @name=1>

But having this in mind, how do I ensure that my 'app/helpers/alias.rb'
is loaded BEFORE any extended classes? Sorry if this a really newbie
question..

Alex

Frederick Cheung wrote:

Require it explicitly from the extension file ?

Thanks again!

Frederick Cheung wrote: