--- trunk/lib/WebPAC/Normalize/Lookup.pm 2005/07/16 11:07:38 3 +++ trunk/lib/WebPAC/Lookup.pm 2005/07/16 12:37:18 4 @@ -1,4 +1,4 @@ -package WebPAC::Normalize::Lookup; +package WebPAC::Lookup; use warnings; use strict; @@ -7,10 +7,11 @@ use base qw/WebPAC::Common/; use File::Slurp; +use Data::Dumper; =head1 NAME -WebPAC::Normalize::Lookup - simple normalisation plugin to produce lookup +WebPAC::Lookup - simple normalisation plugin to produce lookup =head1 VERSION @@ -23,16 +24,18 @@ =head1 SYNOPSIS This module will produce in-memory lookups for easy resolution of lookups -to different records in source files. It can also be use with -C to produce tree hierarchies. +to different records in source files. This will enable you to resolve +relational data in source format. -Lookups are defined in C. +It can also be use with C to produce tree hierarchies. + +Lookups are defined in C. C argument is an array of lookups to create. Each lookup must have C and C. Optional parametar C is perl code to evaluate before storing -value in index. +value in lookup. - my $lookup => [ + @lookup = [ { 'key' => 'd:v900', 'val' => 'v250^a' }, { 'eval' => '"v901^a" eq "Područje"', 'key' => 'pa:v561^4:v562^4:v461^1', @@ -46,8 +49,8 @@ Create new lookup object. - my $lookup = new WebPAC::Normalize::Lookup( - config => '/path/to/conf/lookup/lookup.pm', + my $lookup = new WebPAC::Lookup( + lookup_file => '/path/to/conf/lookup/lookup.pm', ); =cut @@ -59,43 +62,48 @@ my $log = $self->_get_logger(); - my $config = $self->{'config'} || $log->logconfess("need path to lookup file in config parametar"); + my $lookup_file = $self->{'lookup_file'} || $log->logconfess("need path to lookup file in lookup_file parametar"); - my $lookup_code = read_file($config) || $log->logconfess("can't read lookup file $config: $!"); + my $lookup_code = read_file($lookup_file) || $log->logconfess("can't read lookup file $lookup_file: $!"); { no strict 'vars'; - do $config or $log->logdie("Failed to read configuration parameters '$config' $! $@"); - $self->{'lookup_def'} = \@lookup || $log->logdie("lookup config doesn't produce \@lookup array"); + do $lookup_file or $log->logdie("Failed to read configuration parameters '$lookup_file' $! $@"); + $self->{'lookup_def'} = \@lookup || $log->logdie("lookup config $lookup_file doesn't produce \@lookup array"); } - $log->logconfess("lookup config file isn't ARRAY") if ($self->{'lookup_def'} !~ /ARRAY/o); + $log->logconfess("lookup config file isn't ARRAY", sub { Dumper( $self->{'lookup_def'} ) }) if ($self->{'lookup_def'} !~ /ARRAY/o); $self ? return $self : return undef; } -=head2 create_lookup +=head2 add Create lookup from record using lookup definition. - $self->create_lookup($rec, @lookups); + $self->create_lookup($rec); -Called internally by C methods. +Returns true if this record produced lookup. =cut -sub create_lookup { +sub add($) { my $self = shift; my $log = $self->_get_logger(); my $rec = shift || $log->logconfess("need record to create lookup"); $log->logconfess("need HASH as first argument!") if ($rec !~ /HASH/o); + $log->logconfess("need HASH as first argument!") if ($self->{'lookup_def'} !~ /ARRAY/o); + + my $n = 0; - foreach my $i ($self->{'loookup_def'}) { + foreach my $i (@{ $self->{'lookup_def'} }) { $log->logconfess("need key") unless defined($i->{'key'}); $log->logconfess("need val") unless defined($i->{'val'}); + $n++; + if (defined($i->{'eval'})) { # eval first, so we can skip fill_in for key and val my $eval = $self->fill_in($rec,$i->{'eval'}) || next; @@ -112,6 +120,8 @@ push @{$self->{'lookup'}->{$key}}, @val; } } + + return $n; } =head1 AUTHOR @@ -127,4 +137,4 @@ =cut -1; # End of WebPAC::Normalize::Lookup +1; # End of WebPAC::Lookup