mixin class variables?

Hello,
How can I get a mixin to add class variables to a class? For
instance:

class User < ActiveRecord::Base
  acts_as_moron
end

I want the acts_as_moron call to add the class variable @@moron to the
User class such that it's available to all instance methods
(especially those added by the mixin).

The way I'm trying to do it now is that in my mixin module, in the
acts_as_moron method, I simply try to init '@@moron = true', but then
my mixin instance methods complain about it not being there.

Thanks for the help,
-- Christopher

module Foobar
  def self.included mod
    class << mod
      @@name = "foobar"
    end
  end
end

class Wow
  include Foobar
  def self.say_name
    p @@name
  end
end

Wow.say_name #=> "foobar"

Is that what you wanted?

Yes (with modifications). I want say_name to be an instance method
and not a class method. Your example still works if I change say_name
to an instance method, so yes, that is what I want.

I'm still a little confused though. I'm basing my plugin's structure
after Juixe's acts_as_rateable plugin and I still don't see where to
put the class vars.

Here is what his module looks like:

# ActsAsRateable
module Juixe
  module Acts #:nodoc:
    module Rateable #:nodoc:

      def self.included(base)
        base.extend ClassMethods
      end

      module ClassMethods
        def acts_as_rateable
          has_many :ratings, :as => :rateable, :dependent => true
          include Juixe::Acts::Rateable::InstanceMethods
          extend Juixe::Acts::Rateable::SingletonMethods
        end
      end

      # This module contains class methods
      module SingletonMethods
        # method definitions here
      end

      # This module contains instance methods
      module InstanceMethods
        # method definitions here
      end

    end
  end
end

Now if I declare a class variable in acts_as_rateable, that variable
is not accessible in any of the methods defined in the InstanceMethods
module.

It looks like the trick is in:
class << mod
  @@name = "foobar"
end

Can you explain what that is doing? It seems if I declare my class
var in that way, then every class that extends ActiveRecord::Base will
have that class var and not just the ones that are declared with my
acts_as_blah method.

Any ideas? Thanks,
-- Christopher

Ok, here is a small pastie showing what I want:
http://pastie.caboo.se/39569

Look at the last 3 lines to see my desired output.

show_message complains that @@message is an uninitialized class
variable.

Thanks for the help,
-- Christopher

Its because obj.extend(Mod) only adds instance methods of given Mod to
the object being extended. It won't mess with class variables. Thats
why i used:

class << mod
  @@name = "foobar"
end

to extend module mod, which is basically like opening the class/module
definition of module and adding instance methods, class variables or
anything you please.

PS: please do not top post.