--- trunk/lib/WebPAC/Validate.pm 2007/05/24 12:44:45 837 +++ trunk/lib/WebPAC/Validate.pm 2007/05/27 11:27:12 852 @@ -18,11 +18,11 @@ =head1 VERSION -Version 0.11 +Version 0.12 =cut -our $VERSION = '0.11'; +our $VERSION = '0.12'; =head1 SYNOPSIS @@ -67,10 +67,10 @@ my $self = {@_}; bless($self, $class); -warn dump( @_ ); - my $log = $self->_get_logger(); + $log->logdie("need path or delimiters_path") unless ( $self->{path} || $self->{delimiters_path} ); + if ( $self->{path} ) { my $v_file = read_file( $self->{path} ) || @@ -140,7 +140,7 @@ } } close($d); - warn "_validate_delimiters_templates = ",dump( $self->{_validate_delimiters_templates} ); + #warn "_validate_delimiters_templates = ",dump( $self->{_validate_delimiters_templates} ); } else { $log->warn("delimiters path $path doesn't exist, it will be created after this run"); } @@ -193,11 +193,11 @@ $self->{_delimiters_templates}->{$f}->{$template}++; if ( my $v = $self->{_validate_delimiters_templates} ) { - if ( ! defined( $v->{$template} ) ) { - $errors->{$f}->{invalid_delimiters_combination} = $template; + if ( ! defined( $v->{$f}->{$template} ) ) { + $errors->{$f}->{potentially_invalid_combination} = $template; $errors->{$f}->{dump} = $subfield_dump; - } else { - warn "## $f $template ok\n"; + #} else { + # warn "## $f $template ok\n"; } } } @@ -282,7 +282,7 @@ } } - $log->debug("_delimiters_templates = ", dump( $self->{_delimiters_templates} ) ); + $log->debug("_delimiters_templates = ", sub { dump( $self->{_delimiters_templates} ) } ); foreach my $must (sort keys %{ $self->{must_exist} }) { next if ($fields->{$must}); @@ -293,7 +293,7 @@ if ($errors) { $log->debug("errors: ", $self->report_error( $errors ) ); - my $mfn = $rec->{'000'}->[0] || $log->logconfess("record ", dump( $rec ), " doesn't have MFN"); + my $mfn = $rec->{'000'}->[0] || $log->logconfess("record ", sub { dump( $rec ) }, " doesn't have MFN"); $self->{errors}->{$mfn} = $errors; } @@ -302,17 +302,37 @@ return $errors; } -=head2 reset_errors +=head2 reset + +Clean all accumulated errors for this input and remember delimiter templates +for L -Clean all accumulated errors for this input + $validate->reset; - $validate->reset_errors; +This function B be called after each input to provide accurate statistics. =cut -sub reset_errors { +sub reset { my $self = shift; + + my $log = $self->_get_logger; + delete ($self->{errors}); + + if ( ! $self->{_delimiters_templates} ) { + $log->debug("called without _delimiters_templates?"); + return; + } + + foreach my $f ( keys %{ $self->{_delimiters_templates} } ) { + foreach my $t ( keys %{ $self->{_delimiters_templates}->{$f} } ) { + $self->{_accumulated_delimiters_templates}->{$f}->{$t} += + $self->{_delimiters_templates}->{$f}->{$t}; + } + } + $log->debug("_accumulated_delimiters_templates = ", sub { dump( $self->{_accumulated_delimiter_templates} ) } ); + delete ($self->{_delimiters_templates}); } =head2 all_errors @@ -373,18 +393,14 @@ $accumulated ? "$accumulated\t$k" : $k ); - $log->debug( - ( $new_results ? "new_results: " . dump($new_results) ." " : '' ), - ); + $log->debug( "new_results: ", sub { dump($new_results) } ) if ( $new_results ); push @$results, $new_results if ($new_results); $dump = $new_dump if ($new_dump); } - $log->debug( - ( $results ? "results: " . dump($results) ." " : '' ), - ); + $log->debug( "results: ", sub { dump($results) } ) if ( $results ); if ($#$results == 0) { return ($results->[0], $dump); @@ -448,6 +464,7 @@ my $report = $validate->delimiter_teplates( report => 1, + current_input => 1, ); Options: @@ -458,6 +475,10 @@ Generate humanly readable report with single fields +=item current_input + +Report just current_input and not accumulated data + =back =cut @@ -467,7 +488,8 @@ my $args = {@_}; - my $t = $self->{_delimiters_templates}; + my $t = $self->{_accumulated_delimiters_templates}; + $t = $self->{_delimiters_templates} if ( $args->{current_input} ); my $log = $self->_get_logger; @@ -494,6 +516,10 @@ =head2 save_delimiters_templates +Save accumulated delimiter templates + + $validator->save_delimiters_template( '/path/to/validate/delimiters' ); + =cut sub save_delimiters_templates { @@ -505,6 +531,18 @@ my $log = $self->_get_logger; + if ( ! $self->{_accumulated_delimiters_templates} ) { + $log->error('no _accumulated_delimiters_templates found, reset'); + $self->reset; + } + + if ( ! $self->{_delimiters_templates} ) { + $log->error('found _delimiters_templates, calling reset'); + $self->reset; + } + + $path .= '.new' if ( -e $path ); + open(my $d, '>', $path) || $log->fatal("can't open $path: $!"); print $d $self->delimiters_templates; close($d);