親父と一緒にやってるBPMに変わる新しいアプリケーション「Kailas」の開発で、 必要になったので Data::Validator::Simple っていうちっちゃいモジュールを作り出しました。 アプリの要求として、「条件分岐」させなくてはいけないところがあって、 その判定に使うってのが作ることになった主な目的です。 条件分岐というと if else 使いますが、それを抽象化して、 特定のルール、例えばその値が範囲内にあるかどうかという「BETWEEN」や、 文字列や数値が一緒かという「EQUAL_TO」などをパラメータと共に渡せば結果が返ってくるという具合です。
というといわゆるFormValidator::*を思い浮かべますし、 実際のところそれを使ってもよかったのですが、 今回特殊なパターンがでてくることを想定したり、 基本的にWebのFormから受け取るようなデータは扱わないつもりなので、 作ってみました。
とはいってもFormValidatorっぽい動きもしたいよねーとも思ったりしたので、 Data::Validator::Simple::Formオブジェクトがその役目を(ある程度)担うようにもできてます。 実践に使ってないのでなんとも言えませんが、その辺りは改良できればします。
まだdeveloper release扱いなので、APIが変わるかもしれませんが、 以下現状のSYNOPSISを解説。
まずは単一なデータの検証。
use Data::Validator::Simple; my $data = Data::Validator::Simple->new( data => 5 ); my $result = $data->check( ['BETWEEN', 4, 10 ] ); if( $result ){ print "valid"; }else{ print "error"; }
複雑なパターン。checkメソッドに配列で渡せば順番で評価。 渡す値がハッシュリファレンスでかつ評価が成功した場合、その中のsuccessを返します。 successの中身は何でもいいので、この辺りがKailasで生きてくるはずです。
my $data = Data::Validator::Simple->new( data => 5 ); my $result = $data->check( { rule => [ 'EQUAL_TO', 6 ], success => 'fist_message', }, { rule => [ 'EQUAL_TO', 5 ], success => 'second_message', } ); print $result; # second_message
最後に、FormValidator的に使う方法。
my $q = CGI->new; $q->param( id => 'login_id' ); $q->param( name => 'user_name' ); my %params = $q->Vars; my $form = Data::Validator::Simple->form; my $results = $form->check( \%params, { id => [ 'ASCII', [ 'LENGTH', 4, 10 ] ], name => [ 'LENGTH', 4, 20 ] } ); if( $results->{id} && $results->{name} ){ print "valid"; }
今のところValidateに使えるルールが少ないので、これは増やしていくと共に、 Web特有のそれ以外のケースにも対応したいです。 で、まぁかなーりFormValidator::Simpleを参考にしているので、 それでいいんじゃねーか!みたいなことはおいといて、 更なる発展を自分で祈って作っていきます。
0.01_01というバージョンでshipitしちゃったんで! そのうちsearch.cpan.orgにインデックスされると思います。