Strange behavior of alias_method_chains


#1

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


#2

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-


#3

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-


#4

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-


#5

Require it explicitly from the extension file ?

Sent from my iPhone

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