$self->read_sources;
- $self->{config}->iterate_inputs( sub {
- my ($input, $database) = @_;
- return unless $self->valid_database_input($database, _input_name($input));
- $self->parse_lookups($database, _input_name($input));
- } );
-
$self ? return $self : return undef;
}
=cut
-sub _input_name($);
-
sub read_sources {
my $self = shift;
my $nr = 0;
+ my @lookups;
+
$self->{config}->iterate_inputs( sub {
my ($input, $database) = @_;
$log->debug("database: $database input = ", dump($input));
- my @normalize;
-
- if (ref($input->{normalize}) eq 'ARRAY') {
- @normalize = @{ $input->{normalize} };
- } else {
- @normalize = ( $input->{normalize} );
- }
-
-$log->warn("normalize = ",dump(@normalize));
-
- foreach my $normalize (@normalize) {
+ foreach my $normalize (@{ $input->{normalize} }) {
my $path = $normalize->{path};
return unless($path);
$log->debug("$database/$input_name: adding $path");
- $self->{valid_inputs}->{$database}->{$input_name} = {
- source => $s,
- path => $full,
- usage => 0,
- } unless defined($self->{valid_inputs}->{$database}->{$input_name});
+ $self->{valid_inputs}->{$database}->{$input_name}++;
- $self->{valid_inputs}->{$database}->{$input_name}->{usage}++;
+ push @lookups, sub {
+ $self->parse_lookups( $database, $input_name, $full, $s );
+ };
$nr++;
}
$log->debug("found $nr source files");
+ # parse all lookups
+ $_->() foreach (@lookups);
+
return $nr;
}
=head2 parse_lookups
- $parser->parse_lookups($database,$input);
+ $parser->parse_lookups($database,$input,$path,$source);
-Called for each input by L</new>
+Called for each normalize source in each input by L</new>
It will report invalid databases and inputs in error log after parsing.
sub parse_lookups {
my $self = shift;
- my ($database, $input) = @_;
+ my ($database, $input, $path, $source) = @_;
$input = _input_name($input);
$log->logdie("invalid database $database" ) unless $self->valid_database( $database );
$log->logdie("invalid input $input of database $database", ) unless $self->valid_database_input( $database, $input );
- my $source = $self->{valid_inputs}->{$database}->{$input}->{source};
- my $path = $self->{valid_inputs}->{$database}->{$input}->{path};
-
$log->logdie("no source found for database $database input $input path $path") unless ($source);
- $log->info("parsing lookups for $database/$input from $path");
+ $log->info("parsing lookups for $database/$input from $path (",length($source)," bytes)");
my $Document = PPI::Document->new( \$source ) || $log->logdie("can't parse source:\n", $self->{source});