File Coverage

blib/lib/WWW/Hetzner/Cloud/API/PlacementGroups.pm
Criterion Covered Total %
statement 34 41 82.9
branch 5 16 31.2
condition 1 2 50.0
subroutine 10 11 90.9
pod 5 5 100.0
total 55 75 73.3


line stmt bran cond sub pod time code
1             package WWW::Hetzner::Cloud::API::PlacementGroups;
2             # ABSTRACT: Hetzner Cloud Placement Groups API
3              
4             our $VERSION = '0.100';
5              
6 25     25   171 use Moo;
  25         63  
  25         216  
7 25     25   10384 use Carp qw(croak);
  25         95  
  25         2029  
8 25     25   13943 use WWW::Hetzner::Cloud::PlacementGroup;
  25         104  
  25         1099  
9 25     25   189 use namespace::clean;
  25         52  
  25         129  
10              
11              
12             has client => (
13             is => 'ro',
14             required => 1,
15             weak_ref => 1,
16             );
17              
18             sub _wrap {
19 3     3   10 my ($self, $data) = @_;
20 3         89 return WWW::Hetzner::Cloud::PlacementGroup->new(
21             client => $self->client,
22             %$data,
23             );
24             }
25              
26             sub _wrap_list {
27 1     1   4 my ($self, $list) = @_;
28 1         4 return [ map { $self->_wrap($_) } @$list ];
  1         6  
29             }
30              
31              
32             sub list {
33 1     1 1 1733 my ($self, %params) = @_;
34              
35 1         13 my $result = $self->client->get('/placement_groups', params => \%params);
36 1   50     10 return $self->_wrap_list($result->{placement_groups} // []);
37             }
38              
39              
40             sub get {
41 1     1 1 40 my ($self, $id) = @_;
42 1 50       6 croak "Placement Group ID required" unless $id;
43              
44 1         12 my $result = $self->client->get("/placement_groups/$id");
45 1         7 return $self->_wrap($result->{placement_group});
46             }
47              
48              
49             sub create {
50 1     1 1 39 my ($self, %params) = @_;
51              
52 1 50       7 croak "name required" unless $params{name};
53 1 50       6 croak "type required" unless $params{type};
54              
55             my $body = {
56             name => $params{name},
57             type => $params{type},
58 1         5 };
59              
60 1 50       5 $body->{labels} = $params{labels} if $params{labels};
61              
62 1         9 my $result = $self->client->post('/placement_groups', $body);
63 1         6 return $self->_wrap($result->{placement_group});
64             }
65              
66              
67             sub update {
68 0     0 1 0 my ($self, $id, %params) = @_;
69 0 0       0 croak "Placement Group ID required" unless $id;
70              
71 0         0 my $body = {};
72 0 0       0 $body->{name} = $params{name} if exists $params{name};
73 0 0       0 $body->{labels} = $params{labels} if exists $params{labels};
74              
75 0         0 my $result = $self->client->put("/placement_groups/$id", $body);
76 0         0 return $self->_wrap($result->{placement_group});
77             }
78              
79              
80             sub delete {
81 1     1 1 52 my ($self, $id) = @_;
82 1 50       7 croak "Placement Group ID required" unless $id;
83              
84 1         11 return $self->client->delete("/placement_groups/$id");
85             }
86              
87              
88             1;
89              
90             __END__