File Coverage

blib/lib/Path/Tiny/Archive/Zip.pm
Criterion Covered Total %
statement 38 43 88.3
branch 11 20 55.0
condition n/a
subroutine 10 10 100.0
pod 2 2 100.0
total 61 75 81.3


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   152225 use strict;
  2         24  
  2         60  
6 2     2   12 use warnings;
  2         4  
  2         99  
7              
8 2     2   1238 use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
  2         152927  
  2         290  
9 2     2   18 use Path::Tiny qw( path );
  2         3  
  2         76  
10              
11 2     2   871 use namespace::clean;
  2         28971  
  2         12  
12              
13 2     2   1016 use Exporter qw( import );
  2         3  
  2         143  
14              
15              
16             our $VERSION = '0.003';
17              
18             our %EXPORT_TAGS = ( const =>[qw(
19             COMPRESSION_DEFAULT
20             COMPRESSION_NONE
21             COMPRESSION_FASTEST
22             COMPRESSION_BEST
23             )] );
24             our @EXPORT_OK = @{ $EXPORT_TAGS{const} };
25              
26              
27             BEGIN {
28 2     2   93 push(@Path::Tiny::ISA, __PACKAGE__);
29             }
30              
31             use constant {
32 2         667 COMPRESSION_DEFAULT => COMPRESSION_LEVEL_DEFAULT, # 6
33             COMPRESSION_NONE => COMPRESSION_LEVEL_NONE, # 0
34             COMPRESSION_FASTEST => COMPRESSION_LEVEL_FASTEST, # 1
35             COMPRESSION_BEST => COMPRESSION_LEVEL_BEST_COMPRESSION, # 9
36 2     2   11 };
  2         4  
37              
38              
39              
40             sub zip {
41 4     4 1 4143 my ($self, $dest, $level) = @_;
42              
43 4         41 my $zip = Archive::Zip->new;
44              
45 4 100       168 if ($self->is_file) {
    50          
46 3 100       75 $zip->addFile($self->realpath->stringify(), $self->basename, defined $level ? $level : ());
47             }
48             elsif ($self->is_dir) {
49 1 50       46 $zip->addTree($self->realpath->stringify(), '', undef, defined $level ? $level : ());
50             }
51             else {
52 0         0 return;
53             }
54              
55 4         6969 $dest = path($dest);
56              
57 4 50       101 unless ($zip->writeToFileNamed($dest->realpath->stringify()) == AZ_OK) {
58 0         0 return;
59             }
60              
61 4         10461 return $dest;
62             }
63              
64              
65             sub unzip {
66 2     2 1 13584 my ($self, $dest) = @_;
67              
68 2         22 my $zip = Archive::Zip->new();
69              
70 2 50       80 unless ($zip->read($self->realpath->stringify()) == AZ_OK) {
71 0         0 return;
72             }
73              
74 2         2956 $dest = path($dest);
75 2 50       123 if ($dest->exists) {
76 2 50       43 return unless $dest->is_dir;
77             }
78             else {
79 0 0       0 $dest->mkpath() or return;
80             }
81              
82 2 50       30 unless ($zip->extractTree(undef, $dest->realpath->stringify()) == AZ_OK) {
83 0         0 return;
84             }
85              
86 2         5302 return $dest;
87             }
88              
89              
90             1;
91              
92             __END__