concern.rb

Path: lib/active_support/concern.rb
Last Update: Mon Nov 29 01:10:13 +0000 2010

A typical module looks like this

  module M
    def self.included(base)
      base.send(:extend, ClassMethods)
      base.send(:include, InstanceMethods)
      scope :foo, :conditions => { :created_at => nil }
    end

    module ClassMethods
      def cm; puts 'I am a class method'; end
    end

    module InstanceMethods
      def im; puts 'I am an instance method'; end
    end
  end

By using ActiveSupport::Concern the above module could instead be written as:

  module M
    extend ActiveSupport::Concern

    included do
      scope :foo, :conditions => { :created_at => nil }
    end

    module ClassMethods
      def cm; puts 'I am a class method'; end
    end

    module InstanceMethods
      def im; puts 'I am an instance method'; end
    end
  end

[Validate]