=head1 VERSION
-Version 1.003
+Version 1.004
=cut
-our $VERSION = '1.003';
+our $VERSION = '1.004';
my $dstore;
my $sfmap;
mods => \@mods );
# initialize datastore
- die "Datastore file 'EMMXSSTORAGE.dbmd' already exists. Exiting.\n"
- if (-e "EMMXSSTORAGE.dbmd");
- $dstore = DBM::Deep->new( file => "EMMXSSTORAGE.dbmd",
- max_buckets => 64,
- #data_sector_size => 256,
- autoflush => 0,
- );
+ #die "Datastore file 'EMMXSSTORAGE.dbmd' already exists. Exiting.\n"
+ # if (-e "EMMXSSTORAGE.dbmd");
+ #$dstore = DBM::Deep->new( file => "EMMXSSTORAGE.dbmd",
+ # max_buckets => 64,
+ # #data_sector_size => 256,
+ # autoflush => 0,
+ # );
+ $dstore = {};
$reccount = 0; # next record ptr
$dstore->{tags} = $sfmap->tags; # list of all tags
$self->{data} = $dstore;
return $self;
}
-sub DESTROY { unlink "EMMXSSTORAGE.dbmd" }
-
=head2 parse_record
Extracts data from the next record, per the mapping file.
$reccount++;
# check for required fields
- check_required();
+ check_required($crec);
push @{ $dstore->{recs} }, $crec;
print STDERR "$reccount\n"
sub check_required {
+ my ($crec) = @_;
my $mods = $sfmap->mods;
- my $crec = $dstore->{crec};
for my $tag_id (keys %{$mods->{required}}) {
for my $code (@{$mods->{required}{$tag_id}}) {
is ($rec->{tags}[0]{uni}{a}, "FIC DEV", 'subfield value 4');
$rec = shift @{ $mp->{data}{recs} };
is ($rec, undef, 'no more records');
-$mp->DESTROY;
# with map-01, 999$a and 999$q are captured. q only exists on the second
# record; the others should the placeholder value of ''
$rec = shift @{ $mp->{data}{recs} };
is ($rec->{tags}[0]{uni}{a}, "MYS 2", '999$a');
is ($rec->{tags}[0]{uni}{q}, "TEST", '999$q does exist here');
-$mp->DESTROY;
# map-02 adds 999$x *not* as multi, producing a fatal error on the last record
-#eval { $mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt',
-# mapfile => 't/corpus/mdmpmap-02.txt');
-# };
-#$@ =~ /^(Multiple occurances of a non-multi field: 999x at rec 4)/;
-#is ($1, "Multiple occurances of a non-multi field: 999x at rec 4",
-# '999$x not declared multi, but is');
+eval { $mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt',
+ mapfile => 't/corpus/mdmpmap-02.txt');
+ };
+$@ =~ /^(Multiple occurances of a non-multi field: 999x at rec 4)/;
+is ($1, "Multiple occurances of a non-multi field: 999x at rec 4",
+ '999$x not declared multi, but is');
# map-03 has 999$s as required, producing a fatal on record X
-#$mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt',
-# mapfile => 't/corpus/mdmpmap-03.txt');
-#eval { $rec = $mp->parse_record };
-#is ($@, "Required mapping 999s not found in rec 1\n", '999$s removed from this record');
-#eval { $rec = $mp->parse_record };
-#is ($@, "", '999$s exists here tho');
+eval { $mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt',
+ mapfile => 't/corpus/mdmpmap-03.txt') };
+$@ =~ /^(.+)\n/;
+is ($1, "Required mapping 999s not found in rec 1", '999$s removed from this record');
# map-04 has fields in 999 and 250, and multi data
$mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt',
mapfile => 't/corpus/mdmpmap-04.txt');
$rec = shift @{ $mp->{data}{recs} };
+is (scalar @{ $rec->{tags} }, 2, "2 tags captured");
is ($rec->{tags}[0]{tag}, 250, 'should be 250');
is ($rec->{tags}[0]{uni}{a}, "1st ed.", '999$a');
is ($rec->{tags}[1]{tag}, 999, 'should be 999');
'999$x - multi');
is ($rec->{tmap}{250}, undef, 'tag map test 2a');
is_deeply ($rec->{tmap}{999}, [0], 'tag map test 2b');
-$mp->DESTROY;
# map-05 is map-04 with a "no digits" filter on 999$x
$mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt',