File Coverage

blib/lib/Parse/CPAN/Authors.pm
Criterion Covered Total %
statement 49 49 100.0
branch 10 10 100.0
condition n/a
subroutine 9 9 100.0
pod 3 3 100.0
total 71 71 100.0


line stmt bran cond sub pod time code
1             package Parse::CPAN::Authors;
2 2     2   10463 use strict;
  2         6  
  2         74  
3 2     2   1101 use IO::Zlib;
  2         144905  
  2         16  
4 2     2   1712 use Parse::CPAN::Authors::Author;
  2         6  
  2         16  
5 2     2   93 use base qw( Class::Accessor::Fast );
  2         4  
  2         179  
6             __PACKAGE__->mk_accessors(qw( mailrc data ));
7 2     2   13 use vars qw($VERSION);
  2         3  
  2         1099  
8             $VERSION = '2.27';
9              
10             sub new {
11 6     6 1 203442 my $class = shift;
12 6         15 my $filename = shift;
13 6         13 my $self = {};
14 6         20 bless $self, $class;
15              
16 6 100       26 $filename = '01mailrc.txt.gz' if not defined $filename;
17              
18 6 100       33 if ( $filename =~ /^alias / ) {
    100          
19 1         25 $self->mailrc($filename);
20             } elsif ( $filename =~ /\.gz/ ) {
21 3         28 my $fh = IO::Zlib->new( $filename, "rb" );
22 3 100       6504 die "Failed to read $filename: $!" unless $fh;
23 2         15 $self->mailrc( join '', <$fh> );
24 2         2474 $fh->close;
25             } else {
26 2 100       165 open( IN, $filename ) || die "Failed to read $filename: $!";
27 1         120624 $self->mailrc( join '', );
28 1         32 close(IN);
29             }
30              
31 4         345 $self->_parse;
32              
33 4         36 return $self;
34             }
35              
36             sub _parse {
37 4     4   10 my $self = shift;
38 4         9 my $data;
39              
40 4         17 foreach my $line ( split "\n", $self->mailrc ) {
41 40         200 my ( $alias, $pauseid, $long ) = split ' ', $line, 3;
42 40         160 $long =~ s/^"//;
43 40         126 $long =~ s/"$//;
44 40         180 my ($name, $email) = $long =~ /(.*) <(.+)>$/;
45 40         152 my $a = Parse::CPAN::Authors::Author->new;
46 40         532 $a->pauseid($pauseid);
47 40         299 $a->name($name);
48 40         253 $a->email($email);
49 40         281 $data->{$pauseid} = $a;
50             }
51 4         21 $self->data($data);
52             }
53              
54             sub author {
55 8     8 1 12692 my ( $self, $pauseid ) = @_;
56 8         34 return $self->data->{$pauseid};
57             }
58              
59             sub authors {
60 4     4 1 7815 my ($self) = @_;
61 4         9 return values %{ $self->data };
  4         18  
62             }
63              
64             1;
65              
66             __END__