includeだけでincludeとextendする方法

読んでます。

メタプログラミングRuby

メタプログラミングRuby

その中でMerbを例に「クラス拡張ミックスイン」という技が載っていた。


簡単に言えば、モジュールをいつものようにincludeするだけで、クラスメソッド化もしてしまう方法である。


いやーほんとRubyって魔術っぽいですよね。

module Hoge
  def self.included(base)
    base.extend(self)
  end

  def hoge
    "hoge!!!!"
  end
end

class Fuga
  include Hoge
end

puts Fuga.new.hoge #=> "huge!!!!"
puts Fuga.hoge     #=> "huge!!!!"

モジュールがincludeされたときのフックメソッドをオーバライドして、
更に中でextendしてしまうという。