今回は作りませんでしたが、プラグインの作り方を簡単に紹介したいと思います。
プラグインを作るのは非常に簡単です。Catalyst::Plugin::*というモジュールを作って、メソッドを実装するだけです(リスト30)。
リスト30:プラグインの作り方
package Catalyst::Plugin::MyPlugin;
sub hoge{
my($c, @args) = @_;
# …
}
1;
後は、アプリケーションクラスでプラグインを指定すれば、hogeというメソッドをコンテキストオブジェクトから使えるようになります。これだけなら、アプリケーションクラスに実装するのと変わりませんが、プロジェクト間で共通に使えるものならプラグインにするべきですね。
また、プラグインにオブジェクトが必要で、メソッドを呼ぶたびにオブジェクトを作る必要が無い場合、プラグインでprepareメソッドを定義すれば、コストのかからないようにできます(リスト31)。
リスト31:prepareメソッド
package Catalyst::Plugin::LWP::UA;
use Next;
our $VERSION = 0.01;
sub prepare{
my $class = shift;
my $c = $class->NEXT::prepare(@_);
my $ua = new LWP::UserAgent;
$c->{'LWP::UserAgent'} = $ua;
return $c;
}
sub get{
my($c, $url) = @_;
my $ua = $c->{'LWP::UserAgent'};
# …
}
prepareを使う場合は、約束事として、「useNEXT;」が必要です。また、prepare内でも、
my $c = $class->NEXT::prepare(@_);
が必須で、最後にコンテキストオブジェクトを返さないといけません。
実際は、prepare処理以外にもCatalystの動作フローの間に入ることができますが、ドキュメントにはそこまで書かれていません。実際のプラグインのソースコードを読むのが一番手っ取り早いかもしれません。
|