Ruby include vs extend

include makes module methods as instance methods in the target class

extend: makes module methods as class methods in the target class

A very good document ruby-include-vs-extend

[backup]

module Foo
  def self.included(base)
    base.extend(ClassMethods)
  end
  
  module ClassMethods
    def bar
      puts 'base extend -- class method'
    end
  end
  
  def foo
    puts 'include -- instance method'
  end
end

class Bar
  include Foo
end

Bar.bar         #==>  class method
Bar.new.foo     #==>  instance method
Bar.foo         #==>  NoMethodError
Bar.new.bar     #==>  NoMethodError