[僕] DBIx::Class::FromFormValidatorSimple を Data::FormValidator でも使ってみる

僕ト云フ事

たろマークはてなブックマーク

2007年11月03日

[dbic] 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 していただけないでしょうか?
よろしくお願いします。

# 海賊たろ [TypeKey Profile Page] (2007年11月03日 20:48)

問題なければ commit させていただきます。
とりあえず、coderepos の commiter にならねば(;'-')

# woremacx (2007年11月03日 21:06)

よろしくお願いします!!

# 海賊たろ [TypeKey Profile Page] (2007年11月04日 01:01)

ikasam_a さんのが妥当だと思うので ikasam_a さんに commit してもらうと良いんじゃないかと思います。
http://catalyst.g.hatena.ne.jp/ikasam_a/20071103/1194098864

僕は commit 権申請中なので、committer になった時、またなにか気がついたら commit させていただきます!!

コメントを投稿