File Coverage

blib/lib/Dist/Metadata/Archive.pm
Criterion Covered Total %
statement 30 31 96.7
branch 7 8 87.5
condition 3 3 100.0
subroutine 10 11 90.9
pod 7 7 100.0
total 57 60 95.0


line stmt bran cond sub pod time code
1             # vim: set ts=2 sts=2 sw=2 expandtab smarttab:
2             #
3             # This file is part of Dist-Metadata
4             #
5             # This software is copyright (c) 2011 by Randy Stauner.
6             #
7             # This is free software; you can redistribute it and/or modify it under
8             # the same terms as the Perl 5 programming language system itself.
9             #
10 5     5   1442 use strict;
  5         4  
  5         122  
11 5     5   16 use warnings;
  5         5  
  5         236  
12              
13             package Dist::Metadata::Archive;
14             our $AUTHORITY = 'cpan:RWSTAUNER';
15             # ABSTRACT: Base class for Dist::Metadata archive files
16             $Dist::Metadata::Archive::VERSION = '0.927';
17 5     5   17 use Carp (); # core
  5         7  
  5         64  
18 5     5   388 use parent 'Dist::Metadata::Dist';
  5         288  
  5         28  
19              
20             push(@Dist::Metadata::CARP_NOT, __PACKAGE__);
21              
22              
23             sub new {
24 30     30 1 3266 my $class = shift;
25 30         151 my $self = $class->SUPER::new(@_);
26              
27 27 100       73 if( $class eq __PACKAGE__ ){
28             my $subclass = 'Dist::Metadata::' .
29 21 100       107 ( $self->{file} =~ /\.zip$/ ? 'Zip' : 'Tar' );
30              
31 21 50       1156 eval "require $subclass"
32             or Carp::croak $@;
33              
34             # rebless into format specific subclass
35 21         91 bless $self, $subclass;
36             }
37              
38 27         77 return $self;
39             }
40              
41 33     33 1 72 sub required_attribute { 'file' }
42              
43              
44             sub archive {
45 73     73 1 2982 my ($self) = @_;
46 73   100     324 return $self->{archive} ||= do {
47 24         88 my $file = $self->file;
48              
49 24 100       876 Carp::croak "File '$file' does not exist"
50             unless -e $file;
51              
52 21         75 $self->read_archive($file); # return
53             };
54             }
55              
56              
57 21     21 1 74 sub default_file_spec { 'Unix' }
58              
59              
60             sub determine_name_and_version {
61 22     22 1 45 my ($self) = @_;
62 22         51 $self->set_name_and_version( $self->parse_name_and_version( $self->file ) );
63 22         127 return $self->SUPER::determine_name_and_version(@_);
64             }
65              
66              
67             sub file {
68 48     48 1 164 return $_[0]->{file};
69             }
70              
71              
72             sub read_archive {
73 0     0 1   Carp::croak q[Method 'read_archive' not defined];
74             }
75              
76             1;
77              
78             __END__