--- trunk/lib/WebPAC/Validate.pm 2006/09/06 22:07:21 645 +++ trunk/lib/WebPAC/Validate.pm 2006/09/06 22:42:37 646 @@ -18,11 +18,11 @@ =head1 VERSION -Version 0.03 +Version 0.04 =cut -our $VERSION = '0.03'; +our $VERSION = '0.04'; =head1 SYNOPSIS @@ -91,7 +91,13 @@ $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 @@ 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 @@ '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";