読者です 読者をやめる 読者になる 読者になる

複数のモジュールにあるStaticeMethodsを1つのクラスのクラスメソッドにまとめる

1つ前までのConcernではうまくいかないので修正。これでほぼrailsのConcernと同じです。

解説

まずMとM2はConcernをextendしたときに@dependenciesが定義されます。"include M"で、M.append_feachers(M2)が呼ばれます。M2は@dependenciesをinstance variableとして持つので@dependenciesにMが追加されます。

class CがM2をincludeすると、M2.append_featues(C)が呼ばれます。Cは@dependenciesを持たないので、M2をincludeします(super)。それから@depandenciesに入っているモジュールをCは全てincludeします(今回はMだけ)。最後にC.extend M2::StaticMethodsが実行されるので、M2::StaticMethodsに定義されているメソッドがCのクラスメソッドになります。

CがMをincludeしたタイミングでM.append_features(C)が呼ばれます。M2と同様にM::StaticMethodsがextendされて、M::StaticMethodsはCのクラスメソッドになります。