Last Modified
2021-02-10 00:32:31 +0000
Requires

Description

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