File Coverage

lib/WorldCat/MARC/Record/Monkeypatch.pm
Criterion Covered Total %
statement 35 40 87.5
branch 4 12 33.3
condition n/a
subroutine 6 6 100.0
pod 0 2 0.0
total 45 60 75.0


line stmt bran cond sub pod time code
1 2     2   11 use strict;
  2         5  
  2         46  
2 2     2   7 use warnings;
  2         4  
  2         77  
3             package WorldCat::MARC::Record::Monkeypatch;
4             $WorldCat::MARC::Record::Monkeypatch::VERSION = '1.002';
5             # ABSTRACT: Monkeypatch MARC::Record to add useful methods
6              
7              
8 2     2   8 use feature qw(say);
  2         3  
  2         161  
9 2     2   899 use Time::Piece;
  2         10706  
  2         8  
10              
11             # Specs:
12             # https://www.oclc.org/support/services/batchload/controlnumber.en.html
13             #
14             # NOTE(dcschmidt): Definitely incomplete; needs more tests/sample data.
15             sub MARC::Record::oclc_number {
16 1     1 0 26 my ($self) = @_;
17              
18 1 50       3 if (my $f001 = $self->field('001')) {
19 1 50       50 if ($f001->data =~ qr/^(ocm|ocn|on\.)(\d+)$/) {
20 1         27 return int $2;
21             }
22             }
23              
24 0 0       0 if (my $f019 = $self->field('019')) {
25 0         0 return int $f019->data;
26             }
27              
28 0 0       0 if (my $f035a = $self->subfield('035', 'a')) {
29 0 0       0 if ($f035a->data =~ qr/OCoLC.(\d+)$/) {
30 0         0 return int $1;
31             }
32             }
33             }
34              
35             sub MARC::Record::new_from_marc21xml {
36 1     1 0 128901 my ($class, $raw) = @_;
37              
38 1         7 my $marc_rec = "$class"->new;
39 1         14 $marc_rec->leader($raw->{leader});
40              
41             # Add control fields
42 1         13 for my $cfield (@{$raw->{controlfield}}) {
  1         3  
43             $marc_rec->append_fields(MARC::Field->new(
44             $cfield->{tag},
45             $cfield->{content},
46 4         125 ));
47             }
48              
49             # Add data fields
50 1         29 for my $dfield (@{$raw->{datafield}}) {
  1         2  
51 22         979 my $content = $dfield->{content};
52 22         23 my $ind1 = $dfield->{ind1};
53 22         21 my $ind2 = $dfield->{ind2};
54 22         22 my $subfields = $dfield->{subfield};
55 22         21 my $tag = $dfield->{tag};
56              
57             # Normalize subfields to an array of hashrefs
58 50         44 my %subfields = map { @{$_}{qw(code content)} } @{
  50         101  
59 22 100       20 ref $subfields eq 'HASH' ? [$subfields] : $subfields
  22         39  
60             };
61              
62 22         54 $marc_rec->append_fields(MARC::Field->new($tag, $ind1, $ind2, %subfields));
63             }
64              
65 1         49 return $marc_rec;
66             }
67              
68             1;
69              
70             __END__