File Coverage

blib/lib/Net/Amazon/S3/Request/Role/XML/Content.pm
Criterion Covered Total %
statement 21 21 100.0
branch 3 4 75.0
condition 1 3 33.3
subroutine 2 2 100.0
pod n/a
total 27 30 90.0


line stmt bran cond sub pod time code
1             package Net::Amazon::S3::Request::Role::XML::Content;
2             # ABSTRACT: Role providing XML content
3             $Net::Amazon::S3::Request::Role::XML::Content::VERSION = '0.99';
4 99     99   68980 use Moose::Role;
  99         292  
  99         953  
5              
6             with 'Net::Amazon::S3::Request::Role::HTTP::Header::Content_length';
7             with 'Net::Amazon::S3::Request::Role::HTTP::Header::Content_type' => { content_type => 'application/xml' };
8              
9             sub _build_xml {
10 39     39   147 my ($self, $root_name, $root_content) = @_;
11              
12 39         354 my $ns = Net::Amazon::S3::Constants->S3_NAMESPACE_URI;
13              
14 39         591 my $xml_doc = XML::LibXML::Document->new ('1.0','UTF-8');
15 39         603 my $root_element = $xml_doc->createElementNS ($ns, $root_name);
16 39         260 $xml_doc->setDocumentElement ($root_element);
17              
18 39         814 my @queue = ([ $root_element, $root_content ]);
19 39         186 while (my $node = shift @queue) {
20 117         1534 my ($parent, $content) = @$node;
21              
22 117         249 for my $tag (@$content) {
23 195         1259 my ($tag_name, $tag_content) = %$tag;
24 195         1010 my $tag_node = $parent->addNewChild ($ns, $tag_name);
25              
26 195 100       505 if (ref $tag_content) {
27 78         189 push @queue, [$tag_node, $tag_content];
28 78         314 next;
29             }
30              
31 117 50 33     568 if (defined $tag_content && length $tag_content) {
32 117         1026 $tag_node->addChild ($xml_doc->createTextNode ($tag_content));
33 117         547 next;
34             }
35             }
36             }
37              
38 39         1180 $xml_doc->toString;
39             }
40              
41             1;
42              
43             __END__
44              
45             =pod
46              
47             =encoding UTF-8
48              
49             =head1 NAME
50              
51             Net::Amazon::S3::Request::Role::XML::Content - Role providing XML content
52              
53             =head1 VERSION
54              
55             version 0.99
56              
57             =head1 AUTHOR
58              
59             Branislav Zahradník <barney@cpan.org>
60              
61             =head1 COPYRIGHT AND LICENSE
62              
63             This software is copyright (c) 2021 by Amazon Digital Services, Leon Brocard, Brad Fitzpatrick, Pedro Figueiredo, Rusty Conover, Branislav Zahradník.
64              
65             This is free software; you can redistribute it and/or modify it under
66             the same terms as the Perl 5 programming language system itself.
67              
68             =cut