r772@llin: dpavlin | 2006-07-02 22:14:37 +0200
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 2 Jul 2006 20:14:21 +0000 (20:14 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 2 Jul 2006 20:14:21 +0000 (20:14 +0000)
 rough implementation of marc_leader (not tested enough)

git-svn-id: svn+ssh://mjesec/home/dpavlin/svn/webpac2/trunk@564 07558da8-63fa-0310-ba24-9fe276d99e06

lib/WebPAC/Normalize.pm
run.pl
t/3-normalize.t

index 560d602..db6b921 100644 (file)
@@ -7,7 +7,7 @@ use Exporter 'import';
 
        tag search display
        marc marc_indicators marc_repeatable_subfield
-       marc_compose
+       marc_compose marc_leader
 
        rec1 rec2 rec
        regex prefix suffix surround
@@ -33,11 +33,11 @@ WebPAC::Normalize - describe normalisaton rules using sets
 
 =head1 VERSION
 
-Version 0.08
+Version 0.09
 
 =cut
 
-our $VERSION = '0.08';
+our $VERSION = '0.09';
 
 =head1 SYNOPSIS
 
@@ -357,6 +357,25 @@ sub search {
        $out->{$name}->{search} = \@o;
 }
 
+=head2 marc_leader
+
+Setup fields within MARC leader or get leader
+
+  marc_leader('05','c');
+  my $leader = marc_leader();
+
+=cut
+
+sub marc_leader {
+       my ($offset,$value) = @_;
+
+       if ($offset) {
+               $out->{' leader'}->{ $offset } = $value;
+       } else {
+               return $out->{' leader'};
+       }
+}
+
 =head2 marc
 
 Save value for MARC field
diff --git a/run.pl b/run.pl
index d633414..f374abf 100755 (executable)
--- a/run.pl
+++ b/run.pl
@@ -328,6 +328,19 @@ while (my ($database, $db_config) = each %{ $config->{databases} }) {
                                        } else {
                                                $marc->add_fields( @marc_fields );
 
+                                               # tweak leader
+                                               if (my $new_l = WebPAC::Normalize::marc_leader()) {
+
+                                                       my $leader = $marc->leader;
+
+                                                       foreach my $o ( keys %$new_l ) {
+                                                               my $insert = $new_l->{$o};
+                                                               $leader = substr($leader, 0, $o) .
+                                                                       $insert . substr($leader, $o+length($insert));
+                                                       }
+                                                       $marc->leader( $leader );
+                                               }
+
                                                if ($marc_lint) {
                                                        $lint->check_record( $marc );
                                                        my $err = join( "\n", $lint->warnings );
@@ -339,7 +352,7 @@ while (my ($database, $db_config) = each %{ $config->{databases} }) {
                                                }
 
                                                if ($marc_dump) {
-                                                       $log->info("MARC record on MFN $mfn\n",
+                                                       $log->info("MARC record on MFN $mfn\tleader:", $marc->leader(), "\n",
                                                                "Original imput row: ",dump($row), "\n",
                                                                "Normalized MARC row: ",dump(@marc_fields), "\n",
                                                        );
index 748dc4e..7e5bb64 100755 (executable)
@@ -2,7 +2,7 @@
 
 use strict;
 
-use Test::More tests => 99;
+use Test::More tests => 103;
 use Test::Exception;
 use Cwd qw/abs_path/;
 use blib;
@@ -525,5 +525,11 @@ sub test_s {
                        ]
                ],
        );
+
+       cmp_ok(marc_leader('06',42), '==', 42, 'marc_leader');
+       cmp_ok(marc_leader('11',5), '==', 5, 'marc_leader');
+       ok(marc_leader(), 'marc_leader get');
+       diag "leader: ", dump(marc_leader()) if ($debug);
+       is_deeply(marc_leader(), { '06' => 42, 11 => 5 }, "marc_leader full");
 }