File Coverage

blib/lib/WWW/Hetzner/Robot/API/Traffic.pm
Criterion Covered Total %
statement 27 30 90.0
branch 16 22 72.7
condition 2 3 66.6
subroutine 4 4 100.0
pod 1 1 100.0
total 50 60 83.3


line stmt bran cond sub pod time code
1             package WWW::Hetzner::Robot::API::Traffic;
2             # ABSTRACT: Hetzner Robot Traffic API
3              
4             our $VERSION = '0.100';
5              
6 24     24   211 use Moo;
  24         57  
  24         163  
7 24     24   9545 use Carp qw(croak);
  24         75  
  24         1524  
8 24     24   145 use namespace::clean;
  24         41  
  24         169  
9              
10              
11             has client => (
12             is => 'ro',
13             required => 1,
14             weak_ref => 1,
15             );
16              
17             sub query {
18 8     8 1 61664 my ($self, %params) = @_;
19              
20             # Validate required params
21             croak "Parameter 'type' required (day, month, year)"
22 8 100       286 unless $params{type};
23             croak "Invalid type '$params{type}' - must be day, month, or year"
24 7 100       231 unless $params{type} =~ /^(day|month|year)$/;
25 6 100       201 croak "Parameter 'from' required" unless $params{from};
26 5 100       195 croak "Parameter 'to' required" unless $params{to};
27             croak "At least one 'ip' or 'subnet' required"
28 4 50 66     282 unless $params{ip} || $params{subnet};
29              
30             # Build POST data
31 3         7 my %post;
32 3         11 $post{type} = $params{type};
33 3         9 $post{from} = $params{from};
34 3         8 $post{to} = $params{to};
35              
36             # Handle arrays for ip[] and subnet[]
37 3 50       12 if ($params{ip}) {
38 3 100       17 my @ips = ref $params{ip} eq 'ARRAY' ? @{$params{ip}} : ($params{ip});
  1         4  
39 3         12 $post{'ip[]'} = \@ips;
40             }
41 3 50       12 if ($params{subnet}) {
42 0 0       0 my @subnets = ref $params{subnet} eq 'ARRAY' ? @{$params{subnet}} : ($params{subnet});
  0         0  
43 0         0 $post{'subnet[]'} = \@subnets;
44             }
45              
46             $post{single_values} = $params{single_values} ? 'true' : 'false'
47 3 50       13 if exists $params{single_values};
    100          
48              
49 3         31 my $result = $self->client->post('/traffic', \%post);
50 3         19 return $result->{traffic};
51             }
52              
53              
54              
55             1.
56              
57             __END__