removing DBMD, phase I
authorShawn Boyette <sboyette@esilibrary.com>
Thu, 25 Jun 2009 17:31:50 +0000 (17:31 +0000)
committerShawn Boyette <sboyette@esilibrary.com>
Thu, 25 Jun 2009 17:31:50 +0000 (17:31 +0000)
Equinox-Migration/lib/Equinox/Migration/MapDrivenMARCXMLProc.pm
Equinox-Migration/t/03-MapDrivenMARCXMLProc.t
extract_holdings

index 194a593..dc45baf 100644 (file)
@@ -14,11 +14,11 @@ Equinox::Migration::MapDrivenMARCXMLProc
 
 =head1 VERSION
 
-Version 1.003
+Version 1.004
 
 =cut
 
-our $VERSION = '1.003';
+our $VERSION = '1.004';
 
 my $dstore;
 my $sfmap;
@@ -63,13 +63,14 @@ sub new {
                                                       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;
@@ -86,8 +87,6 @@ sub new {
     return $self;
 }
 
-sub DESTROY { unlink "EMMXSSTORAGE.dbmd" }
-
 =head2 parse_record
 
 Extracts data from the next record, per the mapping file.
@@ -107,7 +106,7 @@ sub parse_record {
     $reccount++;
 
     # check for required fields
-    check_required();
+    check_required($crec);
     push @{ $dstore->{recs} }, $crec;
 
     print STDERR "$reccount\n"
@@ -187,8 +186,8 @@ sub process_subs {
 
 
 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}}) {
index 8c0d0f9..e4a06a8 100644 (file)
@@ -49,7 +49,6 @@ is ($rec->{tags}[0]{tag}, 999, 'tag id 4');
 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 ''
@@ -63,28 +62,26 @@ is ($rec->{tags}[0]{uni}{j}, undef, 'we shouldnt have captured this, even if it
 $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');
@@ -101,7 +98,6 @@ is_deeply ($rec->{tags}[0]{multi}{'x'}, ['FICTION','FICTION2','FICTION3','FICTIO
            '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',
index fadcf8d..91febc9 100755 (executable)
@@ -50,9 +50,8 @@ sub extract_holdings {
         print HOLDINGS "BEGIN;\n\negid\thseq\t" unless $j;
         my $rec = $m->{data}{recs}[$i];
         my $k = 0; # holding-within-record pointer
-
         # for each holdings tag in the record...
-        while ( $rec->{tmap}{ $c->{holdings} }[$k] ) {
+        while ( defined $rec->{tmap}{ $c->{holdings} }[$k] ) {
             my $holdidx = $rec->{tmap}{ $c->{holdings} }[$k];
             my $tagid = $rec->{tags}[$holdidx]{tag};
             $k++;