たろマーク (はてなブックマーク)
-
[ javascript ][ test ] Rspec ライクな Javascript テストフレームワーク
-
[ ezpublish ] eZ のデータソースを CakePHP で使うためのアダプタ。Rails とか Django にこれを移植すれば!
-
[ iquestioner ]
-
[ ruby ]
-
[ lazy-people ] おつでしたー
■ DBIx::Class::FromFormValidatorSimple を Data::FormValidator でも使ってみる
id:woremacx さんが作った DBIx::Class::FromFormValidatorSimple、$c じゃなくて $c->form(FormValidator::Simple::Results) を渡すようになって、FV::Simple だけじゃなくて Data::FormValidator も使えるんじゃないかなぁと改造してみた。
(ちなみに自分は Data::FormValidator は使ってないです。試してみたくなっただけ><)
Index: lib/DBIx/Class/FromFormValidatorSimple.pm
===================================================================
--- lib/DBIx/Class/FromFormValidatorSimple.pm (リビジョン 1057)
+++ lib/DBIx/Class/FromFormValidatorSimple.pm (作業コピー)
@@ -16,9 +16,17 @@
sub create_from_fvs {
my ($self, $results, $args) = @_;
- my $allowed = "FormValidator::Simple::Results";
- croak "pass me a $allowed object" unless blessed($results) eq $allowed;
- croak "has error on form" if $results->has_error;
+ my $fvs = "FormValidator::Simple::Results";
+ my $dfv = "Data::FormValidator::Results";
+ if ( blessed($results) eq $fvs ) {
+ croak "has error on form" if $results->has_error;
+ }
+ elsif ( blessed($results) eq $dfv ) {
+ croak "has error on form" if $results->has_missing;
+ }
+ else {
+ croak "pass me a object of $fvs or $dfv";
+ }
my $cols = $args || {};
@@ -39,9 +47,15 @@
sub update_from_fvs {
my ($self, $results, $args) = @_;
- my $allowed = "FormValidator::Simple::Results";
- croak "pass me a $allowed object" unless blessed($results) eq $allowed;
- croak "has error on form" if $results->has_error;
+ my $fvs = "FormValidator::Simple::Results";
+ my $dfv = "Data::FormValidator::Results";
+ if ( blessed($results) eq $fvs ) {
+ croak "has error on form" if $results->has_error;
+ } elsif ( blessed($results) eq $dfv ) {
+ croak "has error on form" if $results->has_missing;
+ } else {
+ croak "pass me a object of $fvs or $dfv";
+ }
my $cols = $args || {};
なんか汚くなってしまったけど意図が伝われば幸い(;'-')
ちなみに試しに動かしてみたコードはこんなの。
#!/usr/local/bin/perl
use strict;
use warnings;
use lib qw( ./extlib ./lib );
use CGI;
use FFVS::Schema;
use Data::FormValidator;
use FormValidator::Simple;
use XXX;
my $schema = FFVS::Schema->connect('dbi:mysql:hoge','hoge','hoge');
my $q = CGI->new;
$q->param(name => 'taro');
$q->param(mail => 'taro@example.com');
$q->param(test => 'waha-');
my $profile = {
required => [qw/name mail/],
};
my $results = Data::FormValidator->check( $q, $profile );
# my $results = FormValidator::Simple->check( $q => [ name => [qw/NOT_BLANK/], mail => [qw/NOT_BLANK/], ] );
$schema->resultset('Test')->create_from_fvs($results,{mail => 'vkgtaro@example.com'});
追記
id:ikasam_a さんがスマートな解決策を提示してくれました。
DBIC::FromFVS を FVS と DFV と その他互換のあるモジュールでも使ってみる
なるほど、納得です。
トラックバック
このエントリーのトラックバックURL:
http://vkgtaro.jp/cgi-bin/mt/mt-tb.cgi/617





コメント
# woremacx (2007年11月03日 20:45)
こんにちは。
サポートする Validator の範囲を増やしていただいてありがとうございます。
もし面倒でなければ、commit していただけないでしょうか?
よろしくお願いします。
# 海賊たろ
(2007年11月03日 20:48)
問題なければ commit させていただきます。
とりあえず、coderepos の commiter にならねば(;'-')
# woremacx (2007年11月03日 21:06)
よろしくお願いします!!
# 海賊たろ
(2007年11月04日 01:01)
ikasam_a さんのが妥当だと思うので ikasam_a さんに commit してもらうと良いんじゃないかと思います。
http://catalyst.g.hatena.ne.jp/ikasam_a/20071103/1194098864
僕は commit 権申請中なので、committer になった時、またなにか気がついたら commit させていただきます!!