$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});
foo => { "foo-input1" => 11, "foo-input2" => 11 },
},
"foo-input2" => {
- bar => { "bar-input" => "200-a-200-e" },
- baz => { "baz-input" => "200-a" },
- foo => { "foo-input1" => 11, "foo-input2" => 11 },
+ bar => { "bar-input" => "900-x" },
+ baz => { "baz-input" => "900-x" },
+ foo => { "foo-input1" => "245-a", "foo-input2" => "245-a" },
},
},
- bar => { "bar-input" => { foo => { "foo-input1" => "245-a" } } },
- baz => { "baz-input" => { baz => { "baz-input" => "900-x" } } },
+ bar => {
+ "bar-input" => {
+ baz => { "baz-input" => "900-x" },
+ foo => { "foo-input1" => "245-a" },
+ },
+ },
+ baz => {
+ "baz-input" => {
+ bar => { "bar-input" => "900-x" },
+ foo => { "foo-input2" => "245-a" },
+ },
+ },
};