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:

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

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

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

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:ininitialize’
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

Sent from my iPhone

On 23 Nov 2008, at 18:52, Alex Sonar <rails-mailing-list@andreas-

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 C. wrote:

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

Sent from my iPhone

On 23 Nov 2008, at 18:52, Alex Sonar <rails-mailing-list@andreas-

Thanks again!

Frederick C. wrote:

Require it explicitly from the extension file ?

Sent from my iPhone

On 23 Nov 2008, at 20:31, Alex Sonar <rails-mailing-list@andreas-

Require it explicitly from the extension file ?

Sent from my iPhone

On 23 Nov 2008, at 20:31, Alex Sonar <rails-mailing-list@andreas-