File Coverage

blib/lib/Catmandu/Exporter/Breaker/Parser/marc.pm
Criterion Covered Total %
statement 24 24 100.0
branch 2 2 100.0
condition 4 6 66.6
subroutine 6 6 100.0
pod 0 1 0.0
total 36 39 92.3


line stmt bran cond sub pod time code
1             package Catmandu::Exporter::Breaker::Parser::marc;
2              
3 2     2   373901 use Catmandu::Sane;
  2         11  
  2         18  
4 2     2   621 use Moo;
  2         6  
  2         17  
5 2     2   1473 use Catmandu::Breaker;
  2         5  
  2         69  
6 2     2   15 use namespace::clean;
  2         5  
  2         16  
7              
8             our $VERSION = '0.141';
9              
10             has tags => (is => 'ro' , default => sub { +{} });
11             has breaker => (is => 'lazy');
12              
13             sub _build_breaker {
14 1     1   162 Catmandu::Breaker->new;
15             }
16              
17             sub add {
18 20     20 0 668 my ($self, $data, $io) = @_;
19              
20 20   33     64 my $identifier = $data->{_id} // $self->breaker->counter;
21              
22 20         37 my $record = $data->{record};
23              
24 20         44 for my $field (@$record) {
25 362         65802 my ($tag,$ind1,$ind2,@data) = @$field;
26              
27 362         893 $self->tags->{$tag} = 1;
28              
29 362         809 for (my $i = 0 ; $i < @data ; $i += 2) {
30 2086 100 100     252900 if ($i == 0 && $data[$i] eq '_') {
31 80         1428 $io->print(
32             $self->breaker->to_breaker(
33             $identifier ,
34             $tag ,
35             $data[$i+1])
36             );
37             }
38             else {
39 2006         36173 $io->print(
40             $self->breaker->to_breaker(
41             $identifier ,
42             $tag . $data[$i] ,
43             $data[$i+1])
44             );
45             }
46             }
47             }
48              
49 20         4405 1;
50             }
51              
52             1;
53              
54             __END__
55              
56             =head1 NAME
57              
58             Catmandu::Exporter::Breaker::Parser::marc - handler for MARC format
59              
60             =head1 DESCRIPTION
61              
62             This L<Catmandu::Breaker> handler breaks MARC format.
63              
64             =head1 SEE ALSO
65              
66             L<Catmandu::MARC>
67              
68             =cut