--- trunk/lib/WebPAC/Input/MARC.pm 2005/12/18 23:34:24 291 +++ trunk/lib/WebPAC/Input/MARC.pm 2006/11/03 20:40:38 772 @@ -3,10 +3,8 @@ use warnings; use strict; -use blib; - -use WebPAC::Common; -use MARC::Fast; +use MARC::Fast 0.03; +use base qw/WebPAC::Common/; =head1 NAME @@ -14,11 +12,11 @@ =head1 VERSION -Version 0.01 +Version 0.07 =cut -our $VERSION = '0.01'; +our $VERSION = '0.07'; =head1 SYNOPSIS @@ -26,23 +24,27 @@ Open USMARC, Unimarc or any other file format that has same internal structure using C. - my $marc = new WebPAC::Input::MARC(); - $marc->open( path => '/path/to/marc.iso' ); + my $marc = new WebPAC::Input::MARC( + path => '/path/to/marc.iso' + ); =head1 FUNCTIONS -=head2 open_db +=head2 new -Returns handle to database +Returns new low-level input API object - my $db = $open_db( - path => '/path/to/marc.iso' + my $marc = new WebPAC::Input::MARC( + path => '/path/to/marc.iso', + filter => \&code_ref, } =cut -sub open_db { - my $self = shift; +sub new { + my $class = shift; + my $self = {@_}; + bless($self, $class); my $arg = {@_}; @@ -50,19 +52,23 @@ $log->info("opening MARC database '$arg->{path}'"); - my $db = new MARC::Fast( marcdb => $arg->{path}); + my $db = new MARC::Fast( + marcdb => $arg->{path}, + hash_filter => $arg->{filter}, + ); my $db_size = $db->count - 1; # FIXME - $self->{size} = $db_size; + $self->{_marc_size} = $db_size; + $self->{_marc_db} = $db; - return ($db, $db_size); + $self ? return $self : return undef; } =head2 fetch_rec Return record with ID C<$mfn> from database - my $rec = $self->fetch_rec( $db, $mfn ); + my $rec = $self->fetch_rec( $mfn ); } @@ -71,17 +77,48 @@ sub fetch_rec { my $self = shift; - my ($db, $mfn) = @_; + my $mfn = shift; - if ($mfn > $self->{size}) { - $self->_get_logger()->warn("seek beyond database size $self->{size} to $mfn"); + if ($mfn > $self->{_marc_size}) { + $self->_get_logger()->warn("seek beyond database size $self->{_marc_size} to $mfn"); } else { - my $row = $db->fetch($mfn); + my $row = $self->{_marc_db}->to_hash($mfn); push @{$row->{'000'}}, $mfn; return $row; } } +=head2 dump_rec + +Return dump of record with ID C<$mfn> from database + + my $rec = $self->fetch_rec( $mfn ); + +} + +=cut + +sub dump_rec { + my $self = shift; + + my $mfn = shift; + return $self->{_marc_db}->to_ascii($mfn); +} + +=head2 size + +Return number of records in database + + my $size = $isis->size; + +=cut + +sub size { + my $self = shift; + return $self->{_marc_size}; +} + + =head1 AUTHOR Dobrica Pavlinusic, C<< >>