File Coverage

blib/lib/WWW/Hetzner/Cloud/API/Zones.pm
Criterion Covered Total %
statement 53 53 100.0
branch 18 20 90.0
condition 1 2 50.0
subroutine 15 15 100.0
pod 8 8 100.0
total 95 98 96.9


line stmt bran cond sub pod time code
1             package WWW::Hetzner::Cloud::API::Zones;
2             # ABSTRACT: Hetzner Cloud DNS Zones API
3              
4             our $VERSION = '0.100';
5              
6 25     25   165 use Moo;
  25         55  
  25         180  
7 25     25   10053 use Carp qw(croak);
  25         144  
  25         1555  
8 25     25   15019 use WWW::Hetzner::Cloud::API::RRSets;
  25         169  
  25         1009  
9 25     25   15317 use WWW::Hetzner::Cloud::Zone;
  25         103  
  25         1069  
10 25     25   178 use namespace::clean;
  25         75  
  25         117  
11              
12              
13             has client => (
14             is => 'ro',
15             required => 1,
16             weak_ref => 1,
17             );
18              
19             sub _wrap {
20 7     7   13 my ($self, $data) = @_;
21 7         199 return WWW::Hetzner::Cloud::Zone->new(
22             client => $self->client,
23             %$data,
24             );
25             }
26              
27             sub _wrap_list {
28 2     2   4 my ($self, $list) = @_;
29 2         3 return [ map { $self->_wrap($_) } @$list ];
  2         6  
30             }
31              
32              
33             sub list {
34 2     2 1 934 my ($self, %params) = @_;
35              
36 2         18 my $result = $self->client->get('/zones', params => \%params);
37 2   50     9 return $self->_wrap_list($result->{zones} // []);
38             }
39              
40              
41             sub list_by_label {
42 1     1 1 20 my ($self, $label_selector) = @_;
43 1         4 return $self->list(label_selector => $label_selector);
44             }
45              
46              
47             sub get {
48 2     2 1 52 my ($self, $id) = @_;
49 2 100       173 croak "Zone ID required" unless $id;
50              
51 1         5 my $result = $self->client->get("/zones/$id");
52 1         5 return $self->_wrap($result->{zone});
53             }
54              
55              
56             sub create {
57 4     4 1 134 my ($self, %params) = @_;
58              
59 4 100       387 croak "name required" unless $params{name};
60              
61             my $body = {
62             name => $params{name},
63 3         9 };
64              
65 3 100       12 $body->{labels} = $params{labels} if $params{labels};
66 3 100       12 $body->{ttl} = $params{ttl} if $params{ttl};
67              
68 3         25 my $result = $self->client->post('/zones', $body);
69 3         17 return $self->_wrap($result->{zone});
70             }
71              
72              
73             sub update {
74 2     2 1 102 my ($self, $id, %params) = @_;
75 2 100       168 croak "Zone ID required" unless $id;
76              
77 1         3 my $body = {};
78 1 50       4 $body->{name} = $params{name} if exists $params{name};
79 1 50       7 $body->{labels} = $params{labels} if exists $params{labels};
80              
81 1         11 my $result = $self->client->put("/zones/$id", $body);
82 1         7 return $self->_wrap($result->{zone});
83             }
84              
85              
86             sub delete {
87 2     2 1 121 my ($self, $id) = @_;
88 2 100       164 croak "Zone ID required" unless $id;
89              
90 1         10 return $self->client->delete("/zones/$id");
91             }
92              
93              
94             sub export {
95 2     2 1 68 my ($self, $id) = @_;
96 2 100       212 croak "Zone ID required" unless $id;
97              
98 1         12 my $result = $self->client->get("/zones/$id/export");
99 1         6 return $result;
100             }
101              
102              
103             sub rrsets {
104 32     32 1 2644 my ($self, $zone_id) = @_;
105 32 100       351 croak "Zone ID required" unless $zone_id;
106              
107 31         913 return WWW::Hetzner::Cloud::API::RRSets->new(
108             client => $self->client,
109             zone_id => $zone_id,
110             );
111             }
112              
113              
114             1;
115              
116             __END__