File Coverage

blib/lib/WWW/Hetzner/Cloud/API/Datacenters.pm
Criterion Covered Total %
statement 30 30 100.0
branch 4 6 66.6
condition 1 2 50.0
subroutine 9 9 100.0
pod 3 3 100.0
total 47 50 94.0


line stmt bran cond sub pod time code
1             package WWW::Hetzner::Cloud::API::Datacenters;
2             # ABSTRACT: Hetzner Cloud Datacenters API
3              
4             our $VERSION = '0.100';
5              
6 25     25   170 use Moo;
  25         49  
  25         158  
7 25     25   10106 use Carp qw(croak);
  25         60  
  25         1722  
8 25     25   13112 use WWW::Hetzner::Cloud::Datacenter;
  25         92  
  25         985  
9 25     25   173 use namespace::clean;
  25         45  
  25         112  
10              
11              
12             has client => (
13             is => 'ro',
14             required => 1,
15             weak_ref => 1,
16             );
17              
18             sub _wrap {
19 10     10   22 my ($self, $data) = @_;
20 10         282 return WWW::Hetzner::Cloud::Datacenter->new(
21             client => $self->client,
22             %$data,
23             );
24             }
25              
26             sub _wrap_list {
27 3     3   11 my ($self, $list) = @_;
28 3         10 return [ map { $self->_wrap($_) } @$list ];
  9         2379  
29             }
30              
31              
32             sub list {
33 3     3 1 1577 my ($self, %params) = @_;
34              
35 3         29 my $result = $self->client->get('/datacenters', params => \%params);
36 3   50     21 return $self->_wrap_list($result->{datacenters} // []);
37             }
38              
39              
40             sub get {
41 1     1 1 36 my ($self, $id) = @_;
42 1 50       6 croak "Datacenter ID required" unless $id;
43              
44 1         12 my $result = $self->client->get("/datacenters/$id");
45 1         7 return $self->_wrap($result->{datacenter});
46             }
47              
48              
49             sub get_by_name {
50 2     2 1 87 my ($self, $name) = @_;
51 2 50       10 croak "Name required" unless $name;
52              
53 2         9 my $datacenters = $self->list;
54 2         100 for my $dc (@$datacenters) {
55 5 100       29 return $dc if $dc->name eq $name;
56             }
57 1         12 return;
58             }
59              
60              
61             1;
62              
63             __END__