File Coverage

blib/lib/Paws/Net/EC2Caller.pm
Criterion Covered Total %
statement 59 59 100.0
branch 15 18 83.3
condition n/a
subroutine 7 7 100.0
pod 0 3 0.0
total 81 87 93.1


line stmt bran cond sub pod time code
1             package Paws::Net::EC2Caller;
2 7     7   5932 use Moose::Role;
  7         22  
  7         68  
3 7     7   39257 use HTTP::Request::Common;
  7         31043  
  7         593  
4 7     7   54 use POSIX qw(strftime);
  7         16  
  7         63  
5              
6             sub array_flatten_string {
7 11     11 0 22 my $self = shift;
8 11 50       39 return ($self->flattened_arrays)?'%s.%d':'%s.member.%d';
9             }
10              
11             # converts the objects that represent the call into parameters that the API can understand
12             sub _to_querycaller_params {
13 28     28   83 my ($self, $params) = @_;
14 28         65 my %p;
15 28         146 foreach my $att (grep { $_ !~ m/^_/ } $params->meta->get_attribute_list) {
  168         1606  
16 168         302 my $key;
17 168 100       521 if ($params->meta->get_attribute($att)->does('Paws::API::Attribute::Trait::NameInRequest')){
18 156         48240 $key = $params->meta->get_attribute($att)->request_name;
19             } else {
20 12         1299 $key = $att;
21             }
22            
23             # This is due to code found in serialize.py (EC2Serializer)
24 168         599 substr($key,0,1) = uc(substr($key,0,1));
25              
26 168 100       5285 if (defined $params->$att) {
27 19         60 my $att_type = $params->meta->get_attribute($att)->type_constraint;
28              
29 19 100       1186 if ($self->_is_internal_type($att_type)) {
    100          
30 14 100       893 if ($att_type eq 'Bool') {
31 1 50       33 $p{ $key } = ($params->{$att} == 1) ? 'true' : 'false';
32             } else {
33 13         435 $p{ $key } = $params->{$att};
34             }
35             } elsif ($att_type =~ m/^ArrayRef\[(.*)\]/) {
36 3 100       610 if ($self->_is_internal_type("$1")){
37 1         3 my $i = 1;
38 1         3 foreach my $value (@{ $params->$att }){
  1         39  
39 2         13 $p{ sprintf($self->array_flatten_string, $key, $i) } = $value;
40 2         7 $i++
41             }
42             } else {
43 2         6 my $i = 1;
44 2         4 foreach my $value (@{ $params->$att }){
  2         48  
45 4         21 my %complex_value = $self->_to_querycaller_params($value);
46 4         14 map { $p{ sprintf($self->array_flatten_string . ".%s", $key, $i, $_) } = $complex_value{$_} } keys %complex_value;
  9         33  
47 4         20 $i++
48             }
49             }
50             } else {
51 2         391 my %complex_value = $self->_to_querycaller_params($params->$att);
52 2         9 map { $p{ "$key.$_" } = $complex_value{$_} } keys %complex_value;
  2         17  
53             }
54             }
55             }
56 28         925 return %p;
57             }
58              
59             sub generate_content_from_parameters {
60 22     22 0 81 my ($self, $request) = @_;
61              
62 22         658 $request->headers->content_type('application/x-www-form-urlencoded');
63 22         610 my $url = URI->new('http:');
64 22         2876 $url->query_form($request->parameters);
65 22         3604 my $content = $url->query;
66             # HTML/4.01 says that line breaks are represented as "CR LF" pairs (i.e., `%0D%0A')
67 22 50       338 $content =~ s/(?<!%0D)%0A/%0D%0A/g if (defined $content);
68 22         858 return $content;
69             }
70              
71             sub prepare_request_for_call {
72 22     22 0 95 my ($self, $call) = @_;
73              
74 22         347 my $request = Paws::Net::APIRequest->new();
75              
76 22         19947 $request->url($self->_api_endpoint . '/');
77 22         940 $request->uri('/');
78 22         696 $request->method('POST');
79              
80 22         757 $request->parameters({ Action => $call->_api_call,
81             Version => $self->version,
82             $self->_to_querycaller_params($call)
83             });
84              
85 22         140 $request->content($self->generate_content_from_parameters($request));
86              
87 22         166 $self->sign($request);
88              
89 22         1058 return $request;
90             }
91             1;