added required subfields
authorDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 6 Sep 2006 22:42:37 +0000 (22:42 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 6 Sep 2006 22:42:37 +0000 (22:42 +0000)
git-svn-id: svn+ssh://mjesec/home/dpavlin/svn/webpac2/trunk@646 07558da8-63fa-0310-ba24-9fe276d99e06

conf/validate/fflo
lib/WebPAC/Validate.pm

index 5ebdaa7..d0ab8d7 100644 (file)
@@ -1,12 +1,12 @@
 0 
 10 
 101 
-200! a b c d e* f g k
-205 a f 
-210 a c d 
+200! a! b c d e* f g* k
+205 a! f 
+210 a* c* d 
 215 a c d e
-225 a e h i v w
-230 a e f v
+225 a! e h i v w
+230 a! e* f v
 231 a e f v
 232 a e f v
 233 a e f v
index b87dfe9..d553f71 100644 (file)
@@ -18,11 +18,11 @@ WebPAC::Validate - provide simple validation for records
 
 =head1 VERSION
 
-Version 0.03
+Version 0.04
 
 =cut
 
-our $VERSION = '0.03';
+our $VERSION = '0.04';
 
 =head1 SYNOPSIS
 
@@ -91,7 +91,13 @@ sub new {
                $log->logdie("need field name in line $curr_line: $l") unless (defined($fld));
 
                if (@d) {
-                       $v->{$fld} = \@d;
+                       $v->{$fld} = [ map {
+                               my $sf = $_;
+                               if ( $sf =~ s/!(\*)?$/$1/ ) {
+                                       $self->{must_exist_sf}->{ $fld }->{ $sf }++;
+                               };
+                               $sf;
+                       } @d ];
                } else {
                        $v->{$fld} = 1;
                }
@@ -163,8 +169,12 @@ sub validate_errors {
 
                                        delete($v->{subfields}) if (defined($v->{subfields}));
 
+                                       my $subfields;
+
                                        foreach my $sf (keys %{ $v }) {
 
+                                               $subfields->{ $sf }++;
+
                                                # is non-repeatable but with multiple values?
                                                if ( ! first { $_ eq $sf.'*' } @{$r->{$f}} ) {
                                                        if ( ref($v->{$sf}) eq 'ARRAY' ) {
@@ -186,6 +196,18 @@ sub validate_errors {
                                                'repeatable in: ' .
                                                join('', _pack_subfields_hash( $h, 1) );
                                        }
+
+                                       if ( defined( $self->{must_exist_sf}->{$f} ) ) {
+                                               foreach my $sf (sort keys %{ $self->{must_exist_sf}->{$f} }) {
+warn "====> $f $sf must exist\n";
+                                                       push @errors, "$f missing required subfield $sf"
+                                                               unless (
+                                                                       defined( $subfields->{$f} ) &&
+                                                                       defined( $subfields->{$f}->{$sf} )
+                                                               )
+                                               }
+                                       }
+
                                }
                        } elsif (ref($v) eq 'HASH') {
                                push @errors, "$f has subfields which is not valid";