--- trunk/lib/WebPAC/Input/ISIS.pm 2005/12/18 22:16:44 289 +++ trunk/lib/WebPAC/Input/ISIS.pm 2006/08/25 12:31:06 619 @@ -3,7 +3,6 @@ use warnings; use strict; -use blib; use WebPAC::Input; =head1 NAME @@ -12,11 +11,11 @@ =head1 VERSION -Version 0.03 +Version 0.05 =cut -our $VERSION = '0.03'; +our $VERSION = '0.05'; =head1 SYNOPSIS @@ -38,7 +37,7 @@ sub init { my $self = shift; - eval "use Biblio::Isis 0.13;"; + eval "use Biblio::Isis;"; unless ($@) { $self->{have_biblio_isis} = 1 } else { @@ -49,12 +48,27 @@ =head2 open_db -Returns handle to database +Returns handle to database and size in records - my $db = $open_db( + my ($db,$size) = $isis->open_db( path => '/path/to/LIBRI' + filter => sub { + my ($l,$field_nr) = @_; + # do something with $l which is line of input file + return $l; + }, } +Options: + +=over 4 + +=item path + +path to CDS/ISIS database + +=back + =cut sub open_db { @@ -78,11 +92,7 @@ $isis_db = new Biblio::Isis( isisdb => $arg->{path}, include_deleted => 1, - hash_filter => sub { - my $l = shift || return; - $l = $self->{iconv}->convert($l) if ($self->{iconv}); - return $l; - }, + hash_filter => $arg->{filter} ? sub { return $arg->{filter}->(@_); } : undef, ) or $log->logdie("can't find database $arg->{path}"); $db_size = $isis_db->count; @@ -98,16 +108,14 @@ Return record with ID C<$mfn> from database - my $rec = $self->fetch_rec( $db, $mfn ); - -} + my $rec = $self->fetch_rec( $db, $mfn, $filter_coderef); =cut sub fetch_rec { my $self = shift; - my ($isis_db, $mfn) = @_; + my ($isis_db, $mfn, $filter_coderef) = @_; my $rec; @@ -131,7 +139,7 @@ } else { $val = $l; } - push @{$rec->{$k}}, $val; + push @{$rec->{"$k"}}, $val; } } else { push @{$rec->{'000'}}, $mfn; @@ -139,7 +147,11 @@ } } elsif ($self->{have_biblio_isis}) { - $rec = $isis_db->to_hash($mfn); + $rec = $isis_db->to_hash({ + mfn => $mfn, + include_subfields => 1, + hash_filter => $filter_coderef, + }); } else { $self->_get_logger()->logdie("hum? implementation missing?"); }