r1253@llin: dpavlin | 2007-05-27 12:49:54 +0200
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 27 May 2007 10:50:37 +0000 (10:50 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 27 May 2007 10:50:37 +0000 (10:50 +0000)
 added accumulated delimiters templates to hold all templates which are
 found in this run (and thus saved to --validate-delimiters file) while
 generating correct stats for each input

git-svn-id: svn+ssh://mjesec/home/dpavlin/svn/webpac2/trunk@849 07558da8-63fa-0310-ba24-9fe276d99e06

lib/WebPAC/Validate.pm
run.pl
t/1-validate-delimiters.t
t/1-validate.t

index e2e582a..80c60bf 100644 (file)
@@ -18,11 +18,11 @@ WebPAC::Validate - provide simple validation for records
 
 =head1 VERSION
 
-Version 0.11
+Version 0.12
 
 =cut
 
-our $VERSION = '0.11';
+our $VERSION = '0.12';
 
 =head1 SYNOPSIS
 
@@ -302,17 +302,37 @@ sub validate_rec {
        return $errors;
 }
 
-=head2 reset_errors
+=head2 reset
 
-Clean all accumulated errors for this input
+Clean all accumulated errors for this input and remember delimiter templates
+for L<save_delimiters_templates>
 
-  $validate->reset_errors;
+  $validate->reset;
+
+This function B<must> 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 = ", dump( $self->{_accumulated_delimiter_templates} ));
+       delete ($self->{_delimiters_templates});
 }
 
 =head2 all_errors
@@ -448,6 +468,7 @@ Generate report of delimiter tamplates
 
   my $report = $validate->delimiter_teplates(
        report => 1,
+       accumulated => 1,
   );
 
 Options:
@@ -458,6 +479,10 @@ Options:
 
 Generate humanly readable report with single fields
 
+=item accumulated
+
+Use accumulated data from all inputs
+
 =back
 
 =cut
@@ -467,7 +492,12 @@ sub delimiters_templates {
 
        my $args = {@_};
 
-       my $t = $self->{_delimiters_templates};
+       my $t;
+       if ( $args->{accumulated} ) {
+               $t = $self->{_accumulated_delimiters_templates};
+       } else {
+               $t = $self->{_delimiters_templates};
+       }
 
        my $log = $self->_get_logger;
 
@@ -494,6 +524,10 @@ sub delimiters_templates {
 
 =head2 save_delimiters_templates
 
+Save accumulated delimiter templates
+
+  $validator->save_delimiters_template( '/path/to/validate/delimiters' );
+
 =cut
 
 sub save_delimiters_templates {
@@ -505,10 +539,20 @@ sub save_delimiters_templates {
 
        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;
+       print $d $self->delimiters_templates( accumulated => 1 );
        close($d);
 
        $log->info("new delimiters templates saved to $path");
diff --git a/run.pl b/run.pl
index 7cc1e6a..92c9686 100755 (executable)
--- a/run.pl
+++ b/run.pl
@@ -583,6 +583,8 @@ while (my ($database, $db_config) = each %{ $config->databases }) {
                # close report
                close($report_fh) if ($report_fh)
 
+               # reset validate stats
+               $validate->reset if ( $validate );
        }
 
        eval { $indexer->finish } if ($indexer && $indexer->can('finish'));
index 9fe42d5..1a663a4 100755 (executable)
@@ -38,7 +38,7 @@ sub test_v {
 
        $row->{'000'} = [ 42 ];
 
-       $v->reset_errors;
+       $v->reset;
        my $e = $v->validate_rec( $row );
 
        diag ">> validate $d\n",dump($e) if ($debug);
@@ -93,7 +93,7 @@ diag $e if ( $debug );
 
 ok( $v->save_delimiters_templates, 'save_delimiters_templates' );
 
-ok( -s $delimiters_path, "$delimiters_path " . -s $delimiters_path . " bytes" );
+ok( -s $delimiters_path, "$delimiters_path " . ( -s $delimiters_path ) . " bytes" );
 
 ok( $v->save_delimiters_templates, 'save_delimiters_templates to existing file' );
 
@@ -105,6 +105,6 @@ ok(my $v2 = new WebPAC::Validate(
        debug => $debug,
 ), "new");
 
-is_deeply( $v->{_delimiters_templates}, $v2->{_validate_delimiters_templates}, 'save/load ok');
+is_deeply( $v->{_accumulated_delimiters_templates}, $v2->{_validate_delimiters_templates}, 'save/load ok');
 
 diag dump( $v, $v2 ) if ( $debug );
index 52957c5..0114fde 100755 (executable)
@@ -46,7 +46,7 @@ sub test_v {
 
        $row->{'000'} = [ 42 ];
 
-       $v->reset_errors;
+       $v->reset;
        my $e = $v->validate_rec( $row );
 
        diag "validate $d\n",dump($e) if ($debug);