Include Instance & Class Methods from a Module
Basically in Ruby we can include instance methods and extend class methods from a module. However, sometimes we just want to be lazy that we can do both from one module. Let's say we have a module A.
module A
  def b
    puts "method b from module A"
  end
  def c
    puts "method c from module A"
  end
end
Thus we can include and extend both from it like:
class B
  include A
  extend A
end
B.new.b # => "method b from module A"
B.b     # => "method b from module A"
B.new.c # => "method c from module A"
B.c     # => "method c from module A"
Nevertheless sometimes we want the code clean. For example, we want b to be a class method and c to be an instance method. This can be done with Module#included like the following.
module A
  def self.included(klass)
    def klass.b
      puts "method b from module A"
    end
  end
  def c
    puts "method c from module A"
  end
end
In this way, we will only have to include it once and make them accessible as we want:
class B
  include A
end
B.new.b # => NoMethodError
B.b     # => "method b from module A"
B.new.c # => "method c from module A"
B.c     # => NoMethodError

