r1097@llin: dpavlin | 2006-10-08 22:24:54 +0200
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 8 Oct 2006 20:28:17 +0000 (20:28 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 8 Oct 2006 20:28:17 +0000 (20:28 +0000)
 replaced generate_marc with universal have_rules [0.08]

git-svn-id: svn+ssh://mjesec/home/dpavlin/svn/webpac2/trunk@755 07558da8-63fa-0310-ba24-9fe276d99e06

TODO
lib/WebPAC/Parser.pm
run.pl
t/2-parse.t

diff --git a/TODO b/TODO
index a748ab5..eedf283 100644 (file)
--- a/TODO
+++ b/TODO
@@ -32,9 +32,9 @@
 + generate reports (validation and stats) for each input
 + rewrite lookup support to use WebPAC::Normalize [2.28]
 + marc_leader shouldn't really be included in hash returned by data_structure
++ add checks for search directive in normalization to parser
 - fix-length fields (<100) support
 - add option to specify output marc path in config.yml
-- add checks for search directive in normalization to parser
 - support splitting of config yml to multiple files
 - add dBase input format
 - remove delimiters characters from index and query entered
index 9d98691..d8533c6 100644 (file)
@@ -17,11 +17,11 @@ WebPAC::Parser - parse perl normalization configuration files (rules) and mungle
 
 =head1 VERSION
 
-Version 0.07
+Version 0.08
 
 =cut
 
-our $VERSION = '0.07';
+our $VERSION = '0.08';
 
 =head1 SYNOPSIS
 
@@ -169,23 +169,53 @@ sub normalize_rules {
 }
 
 
-=head2 generate_marc
+=head2 have_rules
 
-  my $do_marc = $parser->generate_marc($database, $input);
+  my $do_marc = $parser->have_rules('marc', $database, $input);
+  my $do_index = $parser->have_rules('search', $database);
 
-This function will return hash containing count of all found C<marc_*> directives.
+This function will return hash containing count of all found C<marc_*> or
+C<search> directives. Input name is optional.
 
 =cut
 
-sub generate_marc {
+sub have_rules {
        my $self = shift;
-       my ($database,$input) = @_;
+
+       my $log = $self->_get_logger();
+       my $type = shift @_ || $log->logconfess("need at least type");
+       my $database = shift @_ || $log->logconfess("database is required");
+       my $input = shift @_;
+
        $input = _input_name($input);
-       return unless (
-               defined( $self->{_generate_marc}->{ _q($database) } ) &&
-               defined( $self->{_generate_marc}->{ _q($database) }->{ _q($input) } )
-       );
-       return $self->{_generate_marc}->{ _q($database) }->{ _q($input) };
+
+
+       return unless defined( $self->{_have_rules}->{ _q($database) } );
+
+       my $database_rules = $self->{_have_rules}->{ _q($database ) };
+
+       if (defined($input)) {
+
+               return unless (
+                       defined( $database_rules->{ _q($input) } ) &&
+                       defined( $database_rules->{ _q($input) }->{ $type } )
+               );
+
+               return $database_rules->{ _q($input) }->{ $type };
+       }
+
+       my $usage;
+
+       foreach my $i (keys %{ $database_rules }) {
+               next unless defined( $database_rules->{$i}->{$type} );
+
+               foreach my $t (keys %{ $database_rules->{ $i }->{$type} }) {
+                       $usage->{ $t } += $database_rules->{ $i }->{ $t };
+               }
+       }
+
+       return $usage;
+
 }
 
 
@@ -390,10 +420,13 @@ sub _parse_source {
                        my ($Document,$Element) = @_;
 
                        $Element->isa('PPI::Token::Word') or return '';
-                       $Element->content =~ m/^marc/ or return '';
-
-                       $log->debug("found marc output generation for $database/$input");
-                       $self->{_generate_marc}->{ $database }->{ $input }->{ $Element->content }++;
+                       if ($Element->content =~ m/^(marc|search)/) {
+                               my $what = $1;
+                               $log->debug("found $what rules in $database/$input");
+                               $self->{_have_rules}->{ $database }->{ $input }->{ $what }->{ $Element->content }++;
+                       } else {
+                               return '';
+                       }
        });
 
        return 1;
diff --git a/run.pl b/run.pl
index be1cf1c..3de6189 100755 (executable)
--- a/run.pl
+++ b/run.pl
@@ -7,7 +7,7 @@ use File::Temp qw/tempdir/;
 use lib './lib';
 
 use WebPAC::Common 0.02;
-use WebPAC::Parser 0.07;
+use WebPAC::Parser 0.08;
 use WebPAC::Input 0.13;
 use WebPAC::Store 0.11;
 use WebPAC::Normalize 0.22;
@@ -198,7 +198,7 @@ while (my ($database, $db_config) = each %{ $config->databases }) {
        }
 
        my $indexer;
-       if ($use_indexer) {
+       if ($use_indexer && $parser->have_rules( 'search', $database )) {
 
                my $cfg_name = $use_indexer;
                $cfg_name =~ s/\-.*$//;
@@ -408,7 +408,7 @@ while (my ($database, $db_config) = each %{ $config->databases }) {
                }
 
                my $marc;
-               if ($parser->generate_marc( $database, $input_name )) {
+               if ($parser->have_rules( 'marc', $database, $input_name )) {
                        $marc = new WebPAC::Output::MARC(
                                path => "out/marc/${database}-${input_name}.marc",
                                lint => $marc_lint,
index 10e677f..36f4da2 100755 (executable)
@@ -123,7 +123,7 @@ ok(
                debug => $debug,
 ), "new");
 
-ok(my $marc = $parser->generate_marc('marc','marc-input'), 'generate_marc');
+ok(my $marc = $parser->have_rules('marc', 'marc', 'marc-input'), 'have_rules(marc,...)');
 
 diag "marc: ",dump($marc) if ($debug);