[僕] 2007年11月03日 アーカイブ

僕ト云フ事

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

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 と その他互換のあるモジュールでも使ってみる

なるほど、納得です。