日向夏特殊応援部隊

俺様向けメモ

Catalystの拡張は$cだけじゃないYO!

はじめに

良くPluginを書くってなるとまず見るのが、これですかね。

基本的には$cにメソッドを追加するってのが本来のやり方なんですけど、
別にそれを守らなきゃ行けないって訳じゃないです。

良いサンプル

MD5の例をソース見て解説すると、

package Catalyst::Plugin::Upload::MD5;

use strict;
use Catalyst::Request::Upload;
use Digest::MD5;

our $VERSION = '0.01';

{
    package Catalyst::Request::Upload;

    sub md5sum {
        my $self = shift;

        unless ( $self->{md5sum} ) {
            $self->{md5sum} = Digest::MD5->new->addfile( $self->fh )->hexdigest;
        }

        return $self->{md5sum};
    }
}
1;

って感じでCatalystの他のモジュールのpackageを指定してメソッドを追加するだけ。
ここの例だとCatalyst::Request::Uploadに対してメソッドの追加をする。

Pluginなので、setup_pluginsで当然ロードしてくれる。
基本@ISAにぶっこむだけですけど、特に追加するメソッドは無く、この定義のみ読まれるので、新たな機能を追加する事が可能ですよーって話。

これでEngineだとかDispacherとかにちょい機能追加ってのも可能ですね。