=head1 VERSION
-Version 0.11
+Version 0.12
=cut
-our $VERSION = '0.11';
+our $VERSION = '0.12';
=head1 SYNOPSIS
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
my $report = $validate->delimiter_teplates(
report => 1,
+ accumulated => 1,
);
Options:
Generate humanly readable report with single fields
+=item accumulated
+
+Use accumulated data from all inputs
+
=back
=cut
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;
=head2 save_delimiters_templates
+Save accumulated delimiter templates
+
+ $validator->save_delimiters_template( '/path/to/validate/delimiters' );
+
=cut
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");
$row->{'000'} = [ 42 ];
- $v->reset_errors;
+ $v->reset;
my $e = $v->validate_rec( $row );
diag ">> validate $d\n",dump($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' );
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 );