Include ClassMethods in plugins

Why is that in so many plugins I see people using (including
acts_as_taggable by DHH):

init.rb

ActiveRecord::Base.send(:include, ActiveRecord::Acts::SomeModule)

lib/some_module.rb

module ActiveRecord
module Acts
module SomeModule
def self.included(base)
base.extend(ClassMethods)
end

  module ClassMethods
    def acts_as_something
      # code
    end
  end
end

end
end

why go through all that rather than just call:

init.rb

ActiveRecord::Base.extend ActiveRecord::Acts::SomeModule::ClassMethods

and skip the self.included method?

wyrosdick wrote:

module SomeModule
end
end

why go through all that rather than just call:

init.rb

ActiveRecord::Base.extend ActiveRecord::Acts::SomeModule::ClassMethods

and skip the self.included method?

I guess the use of self.included paves the way for more complex things
to be done when the module included. It also allows the module to be
included into a single AR model or a class of AR models, rather than
into all of AR itself.

If you definitely want to apply the module to all of AR an even shorter
alternative is:

lib/some_module.rb

class ActiveRecord
def self.acts_as_something
# code
end
end


We develop, watch us RoR, in numbers too big to ignore.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs