DBIx::ClassやFormValidator::Simple::Plugin::DBIC::UniqueをつかってTropy
DBIx::ClassやFormValidator::Simple::Plugin::DBIC::Uniqueをつかってみる。ネタはTropy。Tropyは簡単で良い。
完成品は↓ここで。特に外見で変わったところはありません。
http://nomadscafe.jp/dbiccaropy/dbiccaropy.cgi/
DBIx::Class(0.03003)なんだけど、自分の環境(CentOS 4.2)だとmake testで失敗する。
Failed Test Stat Wstat Total Fail Failed List of Failed ------------------------------------------------------------------------------- t/basicrels/16joins.t 1 256 22 1 4.55% 18 t/helperrels/16joins.t 1 256 22 1 4.55% 18
これとtest途中にDBD::SQLiteのエラーも吐く。とりあえずforce installで入れました。
CGI::Application::Plugin::FormValidator::SimpleをFormValidator::Simpleの0.10で追加されたmessge
handling機能に対応させる為に、
if (exists $params{messages}){ FormValidator::Simple->set_messages($params{messages}); }
これを25行目あたりに追加しました。patchの形じゃなくてすみません。
CGI::Application::Plugin::FormValidator::Simpleがバージョンアップ(0.03)で、messagesオプションが使えるようになりました。miyashitaさんありがとうございます。
現在動いている以前作成したTropyクローン、Caropyと大体同じなのですが、目立った変更点などを書いていきます。
現在のCaropyのソースと、今回のテストTropyのソース。
validatorのオプションに以下を設定
$self->validator( plugins=>[qw/DBIC::Unique/], messages=>'etc/validator_messages.yml', options=>{ dbic_base_class=>'DBICCaropy' } );
エラーメッセージは外部ファイル"etc/validator_messages.yml"に保存。中身はこれになります。
DBIC::Uniqueも使うという目的があったので、ページタイトルがユニークなのを確認することにしました。
create時には、
$self->form( title=>['NOT_BLANK',[qw/DBIC_UNIQUE Entry title/]] );
update時には
$self->form( title=>['NOT_BLANK'], {unique_title=>[qw/id title/]}=>[[qw/DBIC_UNIQUE Entry !id title/]] );
という確認をしています。
ModelとなるクラスのDBICCaropy::Entryでは、randomの取得の為に
sub find_random { shift->search_literal('1 ORDER BY RAND() LIMIT 1')->first; }
を追加した。意外なほど動いた。
あとは、retrieveからfindへの変更をしたぐらいで、簡単に動くものはつくれました。
DBIx::Classについては、Class::DBIと違いを感じるところまで行ってない。もうすこし調べないとな。
コメント
DBD::SQLite がらみで
16join.t だと
http://lists.rawmode.org/pipermail/dbix-class/2005-October/000203.html
このあたりかもしれないですね。
http://trout.me.uk/perl/DBIx-Class-0.03999_01.tar.gz
最新版だとどうでしょう?
投稿者: kato | 2005年11月24日 09:13
DBIx::Classのwiki
http://dbix-class.shadowcatsystems.co.uk/index.cgi?InstallTips
にも書いてありました。
SQL::Abstract、Scalar::Util、DBIあたりをアップデートする必要ありそうです。
投稿者: かぜぶろ | 2005年11月24日 11:32
テストに失敗するのはDBIのアップデートだったようです。
http://trout.me.uk/perl/DBIx-Class-0.03999_02.tar.gz
にアップデートしてみました。
投稿者: かぜぶろ | 2005年11月24日 20:16