« ライブドア|次世代テクノロジーセミナーシリーズ | メイン | Data::Pageとページナビゲーション »

DBIx::ClassやFormValidator::Simple::Plugin::DBIC::UniqueをつかってTropy

DBIx::ClassFormValidator::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と違いを感じるところまで行ってない。もうすこし調べないとな。

トラックバック

この一覧は、次のエントリーを参照しています: DBIx::ClassやFormValidator::Simple::Plugin::DBIC::UniqueをつかってTropy:

» DBIx::Class と Class::DBI 比較 from Lost-Season
DBIx::ClassやFormValidator::Simple::Plugi... [詳しくはこちら]

» 新年だからCatalystでも勉強しよう from ヒビノアワ
新しい年になったことだし、ちょっと変わったことでもやってみましょうということで、... [詳しくはこちら]

コメント

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

最新版だとどうでしょう?

DBIx::Classのwiki
http://dbix-class.shadowcatsystems.co.uk/index.cgi?InstallTips
にも書いてありました。
SQL::Abstract、Scalar::Util、DBIあたりをアップデートする必要ありそうです。

テストに失敗するのはDBIのアップデートだったようです。

http://trout.me.uk/perl/DBIx-Class-0.03999_02.tar.gz
にアップデートしてみました。

コメントを投稿