Forum: Ruby self.included(base) and base.class_eval problems, etc.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
9041a942421f5447c2306399b991d70d?d=identicon&s=25 unknown (Guest)
on 2006-03-08 08:41
(Received via mailing list)
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!
Ce60c4f78a63b0695e4dafc4bd7964f7?d=identicon&s=25 Lou Vanek (Guest)
on 2006-03-08 14:11
(Received via mailing list)
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.
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2006-03-08 14:54
(Received via mailing list)
On Mar 8, 2006, at 1:38 AM, n8agrin@gmail.com 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 Gray II
This topic is locked and can not be replied to.