CatCon1 いってきて、Sledge にも Adaptor がほしくなったので つくってみた。
TheSchwartz とのつなぎこみはこんな感じ。Catalyst::Model::Adaptor を基本にインターフェースを DSL っぽくしてみた。
いままで Sledge::Plugin::MogileFS とか Sledge::Plugin::CacheMemcached とか Sledge::Plugin::TheSchwartz とか、config の情報をえるためだけとショートカットのために Sledge の Plugin 書いたりしてたんですけど、Adaptor で POPO なのもいいなーとおもい始めて、ためしにつくってみた次第。
Adaptor の実装はこんな感じ。prepare_arguments と mangle_arguments をわけてる意味がわかんなかったので、prepare_arguments だけにしてあります。あれ、二つにわけることになんの意味あるのでしょうか?教えて!えらいひと!
package YourProj::Adaptor::TheSchwartz; use strict; use warnings; use Sledge::Adaptor; class "TheSchwartz"; prepare_arguments { my ($app, $args) = @_; %$args; }; 1;
あとは、Sledge の方につなぎこんでつかうだけ。
Sledge の config.yaml の中に
production: "Adaptor::TheSchwartz": databases: dsn: ... user: hoge pass: fuga
とかかいて、Pagesで下記のようにする。
package Your::Pages; use Sledge::Plugin::Adaptor; sub dispatch_index { my $self = shift; $self->adaptor('TheSchwartz')->insert($job); $self->adaptor('TheSchwartz')->list_jobs({funcname => 'MyApp::Worker'}); } 1;
Catalyst::Model::Adaptor の Factory とかわかんねーとおもってたら、ヒデキさんに「Adaptor => App起動時, Factory => model呼ぶたび, Factory::PerRequest => 1リクエストごと」とおしえてもらいました!あざっす。