r994@llin: dpavlin | 2006-09-25 14:49:05 +0200
authorDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 25 Sep 2006 12:51:47 +0000 (12:51 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 25 Sep 2006 12:51:47 +0000 (12:51 +0000)
 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
t/2-parse.t
t/conf/normalize/bar.pl
t/conf/normalize/baz.pl
t/conf/test.yml

index e8efdeb..d8fc8ea 100644 (file)
@@ -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</new>.
 
 =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</new>
+Called for each normalize source in each input by L</new>
 
 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});
 
index b094735..60eb0c9 100755 (executable)
@@ -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" },
+                },
+          },
 };
 
 
index 70b3476..4c87e1c 100644 (file)
@@ -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') },
        )
 );
index 579e4bb..2231b13 100644 (file)
@@ -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') },
        );
 );
index c27e9fd..ead2162 100644 (file)
@@ -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'