Self.included(base) and base.class_eval problems, etc


#1

I spent a whole night trying to figure out why a module I was including
wasn’t producing any results.

I finally narrowed it down to this bit of code in the module:

def self.included(base)
base.send :current_user, :logged_in?, :user?
end

For some reason, commenting it out lets everything run fine, and it
seems that leaving it in causes the module to fail silently.

Can someone explain to me what this is doing? I’ve seen similar calls
to self.included(base) which ended with base.extend(SomeModule).

I searched high and low for documentation on this, but found nothing.
My best guess is it’s some quasi-magic method that’s trying to allow
ActionView to use these methods as well. Any idea why it’s failing or
where I can read up on this?

Thanks!


#2

Running this command over my gems,

>find /lib/ruby/g*/1*/g* -iname "*.rb" -print | xargs egrep 

“<def>.*included>” |
grep 3758 | wc
22 74 2119

is saying that there are about 22 places where this function has already
been defined in rails build 3758. You are probably overwriting one of
these.
Changing your functions name should solve your problem. Or you could try
calling
‘super’ in your function. I guess running ruby with warnings turned on
will tell
you if you are redefining the function.


#3

On Mar 8, 2006, at 1:38 AM, removed_email_address@domain.invalid wrote:

For some reason, commenting it out lets everything run fine, and it
seems that leaving it in causes the module to fail silently.

The default included() is what adds the methods, so you need to add a
call to super to keep that behavior.

James Edward G. II