File Coverage

blib/lib/Net/Amazon/S3/Operation/Objects/List/Response.pm
Criterion Covered Total %
statement 30 30 100.0
branch 2 2 100.0
condition n/a
subroutine 10 10 100.0
pod 0 8 0.0
total 42 50 84.0


line stmt bran cond sub pod time code
1             package Net::Amazon::S3::Operation::Objects::List::Response;
2             # ABSTRACT: An internal class to list a bucket (List Objects Version 1)
3             $Net::Amazon::S3::Operation::Objects::List::Response::VERSION = '0.99';
4 99     99   833 use Moose;
  99         671  
  99         921  
5              
6             extends 'Net::Amazon::S3::Response';
7              
8             sub bucket {
9 5     5 0 162 $_[0]->_data->{bucket};
10             }
11              
12             sub prefix {
13 5     5 0 135 $_[0]->_data->{prefix};
14             }
15              
16             sub marker {
17 5     5 0 132 $_[0]->_data->{marker};
18             }
19              
20             sub next_marker {
21 8     8 0 210 $_[0]->_data->{next_marker};
22             }
23              
24             sub max_keys {
25 5     5 0 129 $_[0]->_data->{max_keys};
26             }
27              
28             sub is_truncated {
29 8     8 0 268 $_[0]->_data->{is_truncated};
30             }
31              
32             sub contents {
33 9     9 0 20 @{ $_[0]->_data->{contents} };
  9         271  
34             }
35              
36             sub common_prefixes {
37 2     2 0 3 @{ $_[0]->_data->{common_prefixes} };
  2         56  
38             }
39              
40             sub _parse_data {
41 9     9   178 my ($self) = @_;
42              
43 9         259 my $xpc = $self->xpath_context;
44              
45 9         49 my $data = {
46             bucket => scalar $xpc->findvalue ("/s3:ListBucketResult/s3:Name"),
47             prefix => scalar $xpc->findvalue ("/s3:ListBucketResult/s3:Prefix"),
48             marker => scalar $xpc->findvalue ("/s3:ListBucketResult/s3:Marker"),
49             next_marker => scalar $xpc->findvalue ("/s3:ListBucketResult/s3:NextMarker"),
50             max_keys => scalar $xpc->findvalue ("/s3:ListBucketResult/s3:MaxKeys"),
51             is_truncated => scalar $xpc->findvalue ("/s3:ListBucketResult/s3:IsTruncated") eq 'true',
52             contents => [],
53             common_prefixes => [],
54             };
55              
56 9         3225 for my $content ($xpc->findnodes ("/s3:ListBucketResult/s3:Contents")) {
57 12         926 push @{ $data->{contents} }, {
  12         53  
58             key => scalar $xpc->findvalue ("./s3:Key", $content),
59             last_modified => scalar $xpc->findvalue ("./s3:LastModified", $content),
60             etag => scalar $xpc->findvalue ("./s3:ETag", $content),
61             size => scalar $xpc->findvalue ("./s3:Size", $content),
62             storage_class => scalar $xpc->findvalue ("./s3:StorageClass", $content),
63             owner => {
64             id => $xpc->findvalue ("./s3:Owner/s3:ID", $content),
65             displayname => $xpc->findvalue ("./s3:Owner/s3:DisplayName", $content),
66             },
67             };
68 12         4853 $data->{contents}[-1]{etag} =~ s/^"|"$//g;
69             }
70              
71 9         604 for my $delimiter ($xpc->findnodes ("/s3:ListBucketResult/s3:Delimiter")) {
72 4         155 $data->{delimiter} = $xpc->findvalue ('.', $delimiter);
73             }
74              
75 9 100       589 if (defined $data->{delimiter}) {
76 4         57 my $strip_delim = length $data->{delimiter};
77              
78 4         18 for my $common_prefix ($xpc->findnodes ("/s3:ListBucketResult/s3:CommonPrefixes")) {
79 6         203 my $prefix = $xpc->findvalue ('./s3:Prefix', $common_prefix);
80 6         368 $prefix = substr $prefix, 0, -$strip_delim;
81 6         95 push @{ $data->{common_prefixes} }, $prefix;
  6         27  
82             }
83             }
84              
85 9         197 return $data;
86             }
87              
88             1;
89              
90             __END__
91              
92             =pod
93              
94             =encoding UTF-8
95              
96             =head1 NAME
97              
98             Net::Amazon::S3::Operation::Objects::List::Response - An internal class to list a bucket (List Objects Version 1)
99              
100             =head1 VERSION
101              
102             version 0.99
103              
104             =head1 DESCRIPTION
105              
106             Implements operation L<< ListObjects|https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html >>.
107              
108             =head1 AUTHOR
109              
110             Branislav Zahradník <barney@cpan.org>
111              
112             =head1 COPYRIGHT AND LICENSE
113              
114             This software is copyright (c) 2021 by Amazon Digital Services, Leon Brocard, Brad Fitzpatrick, Pedro Figueiredo, Rusty Conover, Branislav Zahradník.
115              
116             This is free software; you can redistribute it and/or modify it under
117             the same terms as the Perl 5 programming language system itself.
118              
119             =cut