File Coverage

blib/lib/Alien/Base/ModuleBuild/File.pm
Criterion Covered Total %
statement 27 47 57.4
branch 5 20 25.0
condition 1 3 33.3
subroutine 10 10 100.0
pod 0 7 0.0
total 43 87 49.4


line stmt bran cond sub pod time code
1             package Alien::Base::ModuleBuild::File;
2              
3 7     7   384751 use strict;
  7         23  
  7         174  
4 7     7   29 use warnings;
  7         11  
  7         132  
5 7     7   27 use Carp;
  7         11  
  7         3377  
6              
7             # ABSTRACT: Private class
8             our $VERSION = '1.16_01'; # TRIAL VERSION
9             $VERSION = eval $VERSION; ## no critic (BuiltinFunctions::ProhibitStringyEval)
10              
11             sub new {
12 442     442 0 611 my $class = shift;
13 442 100       631 my $self = ref $_[0] ? shift : { @_ };
14              
15 442         527 bless $self, $class;
16              
17 442         710 return $self;
18             }
19              
20             sub has_version {
21 19     19 0 25 my $self = shift;
22 19         25 return defined $self->version;
23             }
24              
25             sub get {
26 9     9 0 23 my $self = shift;
27 9         30 my $repo = $self->repository;
28              
29 9         21 my $filename = $repo->get_file($self->filename);
30 9 100       29 if ( my $new_filename = $repo->{new_filename} ) {
31 4         6 $filename = $new_filename;
32             }
33              
34             ## whatever happened, record the new filename
35 9         22 $self->{filename} = $filename;
36              
37 9 50 33     59 if (defined $self->{sha1} || defined $self->{sha256}) {
38 0 0       0 unless (eval { require Digest::SHA }) {
  0         0  
39 0         0 warn "sha1 or sha256 sums are specified but cannot be checked since Digest::SHA is not installed";
40 0         0 require Alien::Base::ModuleBuild;
41 0 0       0 return undef if Alien::Base::ModuleBuild->alien_download_rule =~ /digest/;
42 0         0 return $filename;
43             }
44              
45 0 0       0 eval { require Digest::SHA } or return $filename;
  0         0  
46             ## verify that the SHA-1 and/or SHA-256 sums match if provided
47 0 0       0 if (defined $self->{sha1}) {
48 0         0 my $sha = Digest::SHA->new(1);
49 0         0 $sha->addfile($filename);
50 0 0       0 unless ($sha->hexdigest eq $self->{sha1}) {
51             carp "SHA-1 of downloaded $filename is ", $sha->hexdigest,
52 0         0 " Expected: ", $self->{sha1};
53 0         0 return undef;
54             }
55             }
56 0 0       0 if (defined $self->{sha256}) {
57 0         0 my $sha = Digest::SHA->new(256);
58 0         0 $sha->addfile($filename);
59 0 0       0 unless ($sha->hexdigest eq $self->{sha256}) {
60             carp "SHA-256 of downloaded $filename is ", $sha->hexdigest,
61 0         0 " Expected: ", $self->{sha256};
62 0         0 return undef;
63             }
64             }
65             }
66              
67 9         43 return $filename;
68             }
69              
70 3     3 0 48 sub platform { shift->{platform} }
71 9     9 0 27 sub repository { shift->{repository} }
72 32     32 0 3228 sub version { shift->{version} }
73 16     16 0 151 sub filename { shift->{filename} }
74              
75             1;
76              
77             __END__