FormValidator::Lite::Upload を Mojolicious に対応させる

多分こんな感じで行けるんじゃないでしょうか。

FormValidator::Lite::Upload を Mojo::Message::Request に対応して、

--- perl5/lib/perl5/FormValidator/Lite/Upload.pm        2012-06-06 00:40:55.000000000 +0900
+++ lib/FormValidator/Lite/Upload.pm    2012-06-06 00:43:22.000000000 +0900
@@ -29,6 +29,8 @@
             'HTTPEngine';
         } elsif ($q->isa('Plack::Request')) {
             'PlackRequest';
+        } elsif ($q->isa('Mojo::Message::Request')) {
+            'MojoUpload';
         } else {
             if ($q->can('upload')){ # duck typing
                 # this feature is needed by HTML::Shakan or other form validation libraries

FormValidator::Lite::Upload::MojoUpload を作成。

package FormValidator::Lite::Upload::MojoUpload;
use strict;
use warnings;
use base qw/FormValidator::Lite::Upload/;

sub new {
    my ($class, $q, $name) = @_;
    my $upload = $q->upload($name);
    return unless $upload;
        
    bless {
        q        => $q,
        name     => $name,
        upload   => $upload,
    }, $class;
}   

sub size { shift->{upload}->size }
sub type { shift->{upload}->headers->content_type }
sub fh   { shift->{upload}->asset->handle }
    
1;

FormValidator::Lite の新しいバージョンをチェックしたら色々と機能が追加されてて良い感じに便利でした。


[追記 06/15]
TODO: asset が Mojo::Asset::Memory の場合に fh() が多分コケるので、それに対応する。