File Coverage

blib/lib/Catmandu/Importer/MARC/MARCMaker.pm
Criterion Covered Total %
statement 13 13 100.0
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 18 18 100.0


line stmt bran cond sub pod time code
1             =head1 NAME
2              
3             Catmandu::Importer::MARC::MARCMaker - Package that imports MARCMaker records
4              
5             =head1 SYNOPSIS
6              
7             # From the command line
8             $ catmandu convert MARC --type MARCMaker --fix "marc_map('245a','title')" < /foo/data.mrk
9              
10             # From perl
11             use Catmandu;
12              
13             # import records from file
14             my $importer = Catmandu->importer('MARC',file => '/foo/data.mrk', type => 'MARCMaker');
15             my $fixer = Catmandu->fixer("marc_map('245a','title')");
16              
17             $importer->each(sub {
18             my $item = shift;
19             ...
20             });
21              
22             # or using the fixer
23              
24             $fixer->fix($importer)->each(sub {
25             my $item = shift;
26             printf "title: %s\n" , $item->{title};
27             });
28              
29             =head1 CONFIGURATION
30              
31             =over
32              
33             =item id
34              
35             The MARC field which contains the system id (default: 001)
36              
37             =item file
38              
39             Read input from a local file given by its path. Alternatively a scalar
40             reference can be passed to read from a string.
41              
42             =item fh
43              
44             Read input from an L<IO::Handle>. If not specified, L<Catmandu::Util::io> is used to
45             create the input stream from the C<file> argument or by using STDIN.
46              
47             =item encoding
48              
49             Binmode of the input stream C<fh>. Set to C<:utf8> by default.
50              
51             =item fix
52              
53             An ARRAY of one or more fixes or file scripts to be applied to imported items.
54              
55             =back
56              
57             =head1 METHODS
58              
59             Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited.
60              
61             =head1 SEE ALSO
62              
63             L<Catmandu::Importer>,
64             L<Catmandu::Iterable>
65              
66             =cut
67             package Catmandu::Importer::MARC::MARCMaker;
68 1     1   673 use Catmandu::Sane;
  1         2  
  1         8  
69 1     1   202 use Moo;
  1         2  
  1         6  
70 1     1   636 use MARC::File::MARCMaker;
  1         9160  
  1         26  
71 1     1   277 use Catmandu::Importer::MARC::Decoder;
  1         2  
  1         163  
72              
73             our $VERSION = '1.20';
74              
75             with 'Catmandu::Importer';
76              
77             has id => (is => 'ro' , default => sub { '001' });
78             has decoder => (
79             is => 'ro',
80             lazy => 1 ,
81             builder => sub {
82 1     1   18 Catmandu::Importer::MARC::Decoder->new;
83             } );
84              
85             sub generator {
86             my ($self) = @_;
87             my $file = MARC::File::MARCMaker->in($self->fh);
88             # MARC::File doesn't provide support for inline files
89             $file = $self->decoder->fake_marc_file($self->fh,'MARC::File::MARCMaker') unless $file;
90             sub {
91             $self->decoder->decode($file->next(),$self->id);
92             }
93             }
94              
95             1;