ArkのData::Model対応として、Ark::Plugin::Authentication::Store::Data::ModelとArk::Plugin::Authentication::Store::Data::Model::Fastというプラグインモジュールを作ってみました。
githubでforkしています。
http://github.com/gardejo/ark-perl/tree/master
前者は普通に$model->getするのに対して、後者はインデックスを使って$model->lookupしているのが違いです。別々のモジュールに分ける必要性は、多分ないです(モジュール内で吸収すべきですね)。
目下、開発中の私のアプリケーションで満足に動いているのですが、あくまでまだ実験です。
留保の理由は以下の通りです。
$infoをどう使ったものか......
around 'find_user' => sub {
my $prev = shift->(@_);
return $prev if $prev;
my ($self, $id, $info) = @_; # How I intend to use $info?
my $model = $self->app->model( $self->data_model_model );
my $condition = {
where => [
$self->data_model_user_field => $id,
],
limit => 1,
};
my $iterator = $model->get( $self->data_model_target => $condition );
return
unless $iterator;
my $user = $iterator->next;
# ...
ご覧のように、$infoを使っていません。
$c->autenticate()の引数に$c->req->paramsをそのまま渡すのかと思っていましたが、考えてみればそんな義理はないので、以下のようにSELECT条件を書くのが良いのかなと思います。
$info = defined $info ? $info : {};
%$info = (
(
where => [
$self->data_model_user_field => $id,
],
limit => 1,
), %$info
);
他にも、どうせ$iteratorが1回回ったら終わりなので、limit => 1が必要なのかどうかといった疑問もあります。むしろData::Modelの使い方の話かも知れませんが、実測していないのでどちらの方が効率がよいのか、まだ分かっていません。
テストは通しましたが、DB作成を生DBIではなく、折角なのでData::Modelの自前で作った方が良かったかも、とも思っています。
githubデビュー
ところで、このささやかなモジュールの公開が、私のgithubデビューでした。同時に、gitデビューでもありました。Subversionから安易に流れようとTortoise gitを使おうとしたのですが、push周りの設定がすぐには分からなかったので、生gitを叩きました。後日、覚え書き程度にpushに成功するまでのメモを記しておこうと思います。
なお、今回の笑うポイントは、初回push時に追加ファイルをpushし忘れたということです。あぁ、情けない......。と思ったら、2回目のpush時もテストの追加を忘れていたということが分かって、やっぱり夜更けに生産活動をするものではないなと思いました。
コメントする