File Coverage

blib/lib/WWW/Hetzner/Cloud/API/Firewalls.pm
Criterion Covered Total %
statement 45 52 86.5
branch 11 26 42.3
condition 1 2 50.0
subroutine 13 14 92.8
pod 8 8 100.0
total 78 102 76.4


line stmt bran cond sub pod time code
1             package WWW::Hetzner::Cloud::API::Firewalls;
2             # ABSTRACT: Hetzner Cloud Firewalls API
3              
4             our $VERSION = '0.100';
5              
6 25     25   159 use Moo;
  25         52  
  25         163  
7 25     25   10065 use Carp qw(croak);
  25         55  
  25         1784  
8 25     25   14594 use WWW::Hetzner::Cloud::Firewall;
  25         109  
  25         1082  
9 25     25   174 use namespace::clean;
  25         46  
  25         110  
10              
11              
12             has client => (
13             is => 'ro',
14             required => 1,
15             weak_ref => 1,
16             );
17              
18             sub _wrap {
19 4     4   10 my ($self, $data) = @_;
20 4         85 return WWW::Hetzner::Cloud::Firewall->new(
21             client => $self->client,
22             %$data,
23             );
24             }
25              
26             sub _wrap_list {
27 1     1   2 my ($self, $list) = @_;
28 1         3 return [ map { $self->_wrap($_) } @$list ];
  1         4  
29             }
30              
31              
32             sub list {
33 1     1 1 1041 my ($self, %params) = @_;
34              
35 1         11 my $result = $self->client->get('/firewalls', params => \%params);
36 1   50     6 return $self->_wrap_list($result->{firewalls} // []);
37             }
38              
39              
40             sub get {
41 2     2 1 41 my ($self, $id) = @_;
42 2 50       6 croak "Firewall ID required" unless $id;
43              
44 2         14 my $result = $self->client->get("/firewalls/$id");
45 2         7 return $self->_wrap($result->{firewall});
46             }
47              
48              
49             sub create {
50 2     2 1 44 my ($self, %params) = @_;
51              
52 2 100       203 croak "name required" unless $params{name};
53              
54             my $body = {
55             name => $params{name},
56 1         3 };
57              
58 1 50       3 $body->{rules} = $params{rules} if $params{rules};
59 1 50       3 $body->{labels} = $params{labels} if $params{labels};
60 1 50       2 $body->{apply_to} = $params{apply_to} if $params{apply_to};
61              
62 1         9 my $result = $self->client->post('/firewalls', $body);
63 1         6 return $self->_wrap($result->{firewall});
64             }
65              
66              
67             sub update {
68 0     0 1 0 my ($self, $id, %params) = @_;
69 0 0       0 croak "Firewall 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("/firewalls/$id", $body);
76 0         0 return $self->_wrap($result->{firewall});
77             }
78              
79              
80             sub delete {
81 1     1 1 34 my ($self, $id) = @_;
82 1 50       7 croak "Firewall ID required" unless $id;
83              
84 1         10 return $self->client->delete("/firewalls/$id");
85             }
86              
87              
88             sub set_rules {
89 1     1 1 26 my ($self, $id, $rules) = @_;
90 1 50       3 croak "Firewall ID required" unless $id;
91 1 50       4 croak "Rules arrayref required" unless ref $rules eq 'ARRAY';
92              
93 1         9 return $self->client->post("/firewalls/$id/actions/set_rules", {
94             rules => $rules,
95             });
96             }
97              
98              
99             sub apply_to_resources {
100 1     1 1 23 my ($self, $id, @resources) = @_;
101 1 50       3 croak "Firewall ID required" unless $id;
102              
103 1         8 return $self->client->post("/firewalls/$id/actions/apply_to_resources", {
104             apply_to => \@resources,
105             });
106             }
107              
108              
109             sub remove_from_resources {
110 1     1 1 24 my ($self, $id, @resources) = @_;
111 1 50       4 croak "Firewall ID required" unless $id;
112              
113 1         8 return $self->client->post("/firewalls/$id/actions/remove_from_resources", {
114             remove_from => \@resources,
115             });
116             }
117              
118              
119             1;
120              
121             __END__