Show
Ignore:
Timestamp:
06/08/08 21:30:52 (6 years ago)
Author:
tomyhero
Message:

lang/perl/FormValidator::LazyWay? : check()の中身のレイアウトを整理した

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/FormValidator-LazyWay/branches/rebuild/lib/FormValidator/LazyWay.pm

    r13428 r13498  
    3838    FormValidator::LazyWay::Utils::check_profile_syntax( \%profile ); 
    3939 
    40     $profile{required} = map { $_ => 1 } FormValidator::LazyWay::Utils::arrayify( $profile{required} ); 
    41     $profile{optional} = map { $_ => 1 } FormValidator::LazyWay::Utils::arrayify( $profile{optional} ); 
     40    $profile{required} = map { $_ => 1 } 
     41        FormValidator::LazyWay::Utils::arrayify( $profile{required} ); 
     42    $profile{optional} = map { $_ => 1 } 
     43        FormValidator::LazyWay::Utils::arrayify( $profile{optional} ); 
     44    $profile{may_be_plural} 
     45        = map { $_ => 1 } _arrayify( $profile{may_be_plural} ); 
     46    $profile{must_be_plural} 
     47        = map { $_ => 1 } _arrayify( $profile{must_be_plural} ); 
    4248 
    4349    my @subs = ( 
     50        # デフォルトセット 
    4451        sub { $self->_set_default(@_) }, 
     52        # 空白のフィールドのキーを消去 
    4553        sub { $self->_remove_empty_fields(@_) }, 
     54        # 未定義のフィールドをセット、そしてvalidから消去 
     55        sub { $self->_set_unknown(@_) }, 
     56        # missingのフィールドをセット、そしてvalidから消去 
     57        sub { $self->_check_required_fields(@_) }, 
     58        # 複数定義(missing,overfolows)のフィールドをセット、そしてvalidから消去 
     59        # TODO : エラーメッセージに、指定数が入るようにできた方がいいなぁ。 
     60        sub { $self->_check_must_be_plural(@_) }, 
     61        # invalidチェックループ 
     62        sub { $self->_validation_block(@_) }, 
     63        # エラーメッセージセット 
     64        sub { $self->_set_error_message(@_) }, 
    4665    ); 
    4766 
     
    5170 
    5271    return FormValidator::LazyWay::Result->new($result); 
     72} 
     73 
     74sub _set_error_message { 
     75 
     76} 
     77 
     78sub _validation_block { 
     79    my $self    = shift; 
     80    my $storage = shift; 
     81    my $profile = shift; 
     82 
     83    my @subs   = (); 
     84    my @fields = keys %{ $storage->{valid} }; 
     85 
     86    for my $field ( @fields ) { 
     87        # missing , overflows , empty optional 
     88        next unless exists $storage->{valid}{$field};     
     89 
     90        for my $sub (@subs) { 
     91            $sub->( $storage, $profile ); 
     92        } 
     93    } 
     94 
     95} 
     96 
     97sub _check_must_be_plural { 
     98    my $self    = shift; 
     99    my $storage = shift; 
     100    my $profile = shift; 
     101 
     102    foreach my $field ( keys %{ $profile->{must_be_plural} } ) { 
     103        if ( ref $storage->{valid}{$field} eq 'ARRAY' ) { 
     104        # TODO: missing or overflows 
     105            unless ( 
     106                scalar @{ $storage->{valid}{$field} } 
     107                == $profile->{must_be_plural}{$field} ) 
     108            { 
     109                push @{ $storage->{overflows} }, $field; 
     110                delete $storage->{valid}{$field}; 
     111            } 
     112        } 
     113        else { 
     114            push @{ $storage->{overflows} }, $field; 
     115            delete $storage->{valid}{$field}; 
     116        } 
     117    } 
     118 
     119} 
     120 
     121sub _check_required_fields { 
     122    my $self    = shift; 
     123    my $storage = shift; 
     124    my $profile = shift; 
     125 
     126    for my $field ( keys %{ $profile->{required} } ) { 
     127        push @{ $storage->{missings} }, $field 
     128            unless exists $storage->{valid}{$field}; 
     129        delete $storage->{valid}{$field} 
     130            unless exists $storage->{valid}{$field}; 
     131    } 
     132 
     133} 
     134 
     135sub _set_unknown { 
     136    my $self    = shift; 
     137    my $storage = shift; 
     138    my $profile = shift; 
     139 
     140    @{ $storage->{unknown} } = grep { 
     141        not(   exists $profile->{optional}{$_} 
     142            or exists $profile->{required}{$_} ) 
     143    } keys %{ $storage->{valid} }; 
     144 
     145    # and remove them from the list 
     146    for my $field ( @{ $storage->{unknown} } ) { 
     147        delete $storage->{valid}{$field}; 
     148    } 
     149 
    53150} 
    54151