refactore support for multiple normalize files in each lookup
git-svn-id: svn+ssh://mjesec/home/dpavlin/svn/webpac2/trunk@701
07558da8-63fa-0310-ba24-
9fe276d99e06
- $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;
}
$self ? return $self : return undef;
}
sub read_sources {
my $self = shift;
sub read_sources {
my $self = shift;
$self->{config}->iterate_inputs( sub {
my ($input, $database) = @_;
$log->debug("database: $database input = ", dump($input));
$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);
my $path = $normalize->{path};
return unless($path);
$log->debug("$database/$input_name: adding $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 );
+ };
$log->debug("found $nr source files");
$log->debug("found $nr source files");
+ # parse all lookups
+ $_->() foreach (@lookups);
+
return $nr;
}
=head2 parse_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.
It will report invalid databases and inputs in error log after parsing.
sub parse_lookups {
my $self = shift;
sub parse_lookups {
my $self = shift;
- my ($database, $input) = @_;
+ my ($database, $input, $path, $source) = @_;
$input = _input_name($input);
$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 );
$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->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});
my $Document = PPI::Document->new( \$source ) || $log->logdie("can't parse source:\n", $self->{source});
foo => { "foo-input1" => 11, "foo-input2" => 11 },
},
"foo-input2" => {
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" },
+ },
+ },
sub { rec('200','a') . ' ' . rec('200','b') },
'foo','foo-input1',
sub { rec('245','a') },
sub { rec('200','a') . ' ' . rec('200','b') },
'foo','foo-input1',
sub { rec('245','a') },
+ ),
+ lookup(
+ sub { rec('000') },
+ 'baz', 'baz-input',
+ sub { rec('900','x') },
'foo','no-input',
sub { rec('245','a') },
),
'foo','no-input',
sub { rec('245','a') },
),
+ lookup(
+ sub { rec('200','a') . ' ' . rec('200','b') },
+ 'foo','foo-input2',
+ sub { rec('245','a') },
+ ),
lookup(
sub { rec('000') },
lookup(
sub { rec('000') },
sub { rec('900','x') },
);
);
sub { rec('900','x') },
);
);
encoding: 'cp852'
#limit: 10
normalize:
encoding: 'cp852'
#limit: 10
normalize:
- path: 'conf/normalize/foo.pl'
+ - path: 'conf/normalize/bar.pl'
+ - path: 'conf/normalize/baz.pl'