ActiveSupport::Concern
以前書いたモジュールの特異メソッドをincludeして使うと同じことが、ActiveSupport::Concernを使うことでもうちょっと綺麗に書ける。
module A
extend ActiveSupport::Concern
included do
# Aがincludeされた際に、includeしたクラスのコンテキストで実行される
end
module InstanceMethods
def instance_method_of_a
p "instance_method_of_a"
end
end
module ClassMethods
def class_method_of_a
p "class_method_of_a"
end
end
end
class B include A end
こんなモジュールをとあるクラスBでincludeすることで、
- InstansMethods以下に定義されたメソッドがincludeによってインスタンスメソッドとして追加
- ClassMethods以下に定義されたメソッドがextendによってクラスメソッドとして追加
される。
モジュールをincludeすることによって追加されるクラスメソッド、インスタンスメソッドが明確になるので嬉しい。
ただそれだけだとちょっとメリットが弱い気がしなくもない。きっとincludedや、今回触れなかったextendedあたりが活躍するんだろう。