File Coverage

blib/lib/Path/Tiny/Archive/Zip.pm
Criterion Covered Total %
statement 35 40 87.5
branch 11 20 55.0
condition n/a
subroutine 9 9 100.0
pod 2 2 100.0
total 57 71 80.2


line stmt bran cond sub pod time code
1             package Path::Tiny::Archive::Zip;
2              
3             # ABSTRACT: Zip/unzip add-on for file path utility
4              
5 2     2   173097 use strict;
  2         25  
  2         64  
6 2     2   10 use warnings;
  2         5  
  2         53  
7              
8 2     2   1496 use Archive::Zip ();
  2         176704  
  2         64  
9 2     2   20 use Exporter qw( import );
  2         4  
  2         69  
10 2     2   12 use Path::Tiny qw( path );
  2         4  
  2         202  
11              
12              
13             our $VERSION = '0.004';
14              
15             our %EXPORT_TAGS = ( const =>[qw(
16             COMPRESSION_DEFAULT
17             COMPRESSION_NONE
18             COMPRESSION_FASTEST
19             COMPRESSION_BEST
20             )] );
21             our @EXPORT_OK = @{ $EXPORT_TAGS{const} };
22              
23              
24             BEGIN {
25 2     2   91 push(@Path::Tiny::ISA, __PACKAGE__);
26             }
27              
28             use constant {
29 2         811 COMPRESSION_DEFAULT => Archive::Zip::COMPRESSION_LEVEL_DEFAULT, # 6
30             COMPRESSION_NONE => Archive::Zip::COMPRESSION_LEVEL_NONE, # 0
31             COMPRESSION_FASTEST => Archive::Zip::COMPRESSION_LEVEL_FASTEST, # 1
32             COMPRESSION_BEST => Archive::Zip::COMPRESSION_LEVEL_BEST_COMPRESSION, # 9
33 2     2   13 };
  2         4  
34              
35              
36             sub zip {
37 4     4 1 4832 my ($self, $dest, $level) = @_;
38              
39 4         23 my $zip = Archive::Zip->new;
40              
41 4 100       146 if ($self->is_file) {
    50          
42 3 100       85 $zip->addFile($self->stringify(), $self->basename, defined $level ? $level : ());
43             }
44             elsif ($self->is_dir) {
45 1 50       43 $zip->addTree($self->stringify(), '', undef, defined $level ? $level : ());
46             }
47             else {
48 0         0 return;
49             }
50              
51 4         8760 $dest = path($dest);
52              
53 4 50       150 unless ($zip->writeToFileNamed($dest->stringify()) == Archive::Zip::AZ_OK) {
54 0         0 return;
55             }
56              
57 4         12432 return $dest;
58             }
59              
60              
61             sub unzip {
62 2     2 1 16555 my ($self, $dest) = @_;
63              
64 2         13 my $zip = Archive::Zip->new();
65              
66 2 50       82 unless ($zip->read($self->stringify()) == Archive::Zip::AZ_OK) {
67 0         0 return;
68             }
69              
70 2         2864 $dest = path($dest);
71 2 50       133 if ($dest->exists) {
72 2 50       55 return unless $dest->is_dir;
73             }
74             else {
75 0 0       0 $dest->mkpath() or return;
76             }
77              
78 2 50       35 unless ($zip->extractTree(undef, $dest->stringify()) == Archive::Zip::AZ_OK) {
79 0         0 return;
80             }
81              
82 2         5239 return $dest;
83             }
84              
85              
86             1;
87              
88             __END__