Where and how is defined "attr_accessor"?

  • Thread starter Iñaki Baz Castillo
  • Start date
I

Iñaki Baz Castillo

Hi, I've done some custom "field_accessor" (similar to "attr_accessor" but=
=20
with some neccessary difference). It works perfectly if I=20
defined "field_accessor" in the same class:

class Header
def self.field_accessor(name)
module_eval %{ def #{name}() .... end }
end
end

class From < Header
field_accessor :user, :domain
end


But I'd like to have field_accessor definition out of "Header" class, maybe=
in=20
a module but don't get it working. If I do:

module FieldAccessor
module_eval %{ def #{name}() .... end }
end

class From
include FieldAccessor
field_accessor :user, :domain
end


Then I get:
NoMethodError: undefined method `field_accessor' for From:Class


Later I've tryed with the following and it seems to work:

module FieldAccessor
module_eval %{ def #{name}() .... end }
# It also works with "class_eval".
end

class From
extend FieldAccessor
field_accessor :user, :domain
end



So, while I was writting this mail I found the solution, but would like to=
=20
know if it's the correct way. Thanks a lot.

=2D-=20
I=C3=B1aki Baz Castillo
 
I

Iñaki Baz Castillo

El Mi=C3=A9rcoles, 30 de Abril de 2008, David A. Black escribi=C3=B3:
The last two definitions of FieldAccessor look wrong; you haven't
defined the field_accessor method. But assuming that you correct that,
then yes, extending your class is the best way.

Yes, sorry, what I did is:

module FieldAccessor
def self.field_accessor(name)
module_eval %{ def #{name}() .... end }
# It also works with "class_eval".
end
end

class From
extend FieldAccessor
field_accessor :user, :domain
end


To answer the question in your subject line: attr_accessor is an
instance method of Module. That's why all modules and classes can call
it. You could add field_accessor to Module, but extend is cleaner.

Nice to know, so I was in the good way ;)

Thanks a lot for your help.



=2D-=20
I=C3=B1aki Baz Castillo
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,185
Members
46,736
Latest member
AdolphBig6

Latest Threads

Top