From e661d39b89d1e7baa1d8e492d9ca6ad37bac5e1f Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Mon, 25 Sep 2006 12:51:47 +0000 Subject: [PATCH] r994@llin: dpavlin | 2006-09-25 14:49:05 +0200 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 --- lib/WebPAC/Parser.pm | 46 +++++++++++++---------------------------- t/2-parse.t | 20 +++++++++++++----- t/conf/normalize/bar.pl | 5 +++++ t/conf/normalize/baz.pl | 7 ++++++- t/conf/test.yml | 3 ++- 5 files changed, 42 insertions(+), 39 deletions(-) diff --git a/lib/WebPAC/Parser.pm b/lib/WebPAC/Parser.pm index e8efdeb..d8fc8ea 100644 --- a/lib/WebPAC/Parser.pm +++ b/lib/WebPAC/Parser.pm @@ -63,12 +63,6 @@ sub new { $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; } @@ -80,8 +74,6 @@ Called by L. =cut -sub _input_name($); - sub read_sources { my $self = shift; @@ -89,22 +81,14 @@ sub read_sources { 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); @@ -118,13 +102,11 @@ $log->warn("normalize = ",dump(@normalize)); $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++; } @@ -132,14 +114,17 @@ $log->warn("normalize = ",dump(@normalize)); $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 +Called for each normalize source in each input by L It will report invalid databases and inputs in error log after parsing. @@ -147,7 +132,7 @@ 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); @@ -156,12 +141,9 @@ sub parse_lookups { $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}); diff --git a/t/2-parse.t b/t/2-parse.t index b094735..60eb0c9 100755 --- a/t/2-parse.t +++ b/t/2-parse.t @@ -66,13 +66,23 @@ my $expected_depend = { 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" }, + }, + }, }; diff --git a/t/conf/normalize/bar.pl b/t/conf/normalize/bar.pl index 70b3476..4c87e1c 100644 --- a/t/conf/normalize/bar.pl +++ b/t/conf/normalize/bar.pl @@ -3,5 +3,10 @@ marc('900','x', 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') }, ) ); diff --git a/t/conf/normalize/baz.pl b/t/conf/normalize/baz.pl index 579e4bb..2231b13 100644 --- a/t/conf/normalize/baz.pl +++ b/t/conf/normalize/baz.pl @@ -9,9 +9,14 @@ marc('900','x', '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') }, - 'baz', 'baz-input', + 'bar', 'bar-input', sub { rec('900','x') }, ); ); diff --git a/t/conf/test.yml b/t/conf/test.yml index c27e9fd..ead2162 100644 --- a/t/conf/test.yml +++ b/t/conf/test.yml @@ -23,7 +23,8 @@ databases: encoding: 'cp852' #limit: 10 normalize: - path: 'conf/normalize/foo.pl' + - path: 'conf/normalize/bar.pl' + - path: 'conf/normalize/baz.pl' bar: name: 'bar name' -- 2.20.1