File Coverage

blib/lib/SignalWire/Agents/REST/Namespaces/Base.pm
Criterion Covered Total %
statement 14 26 53.8
branch 0 2 0.0
condition n/a
subroutine 5 10 50.0
pod 0 5 0.0
total 19 43 44.1


line stmt bran cond sub pod time code
1             package SignalWire::Agents::REST::Namespaces::Base;
2 4     4   6001 use strict;
  4         20  
  4         202  
3 4     4   24 use warnings;
  4         9  
  4         271  
4 4     4   25 use Moo;
  4         9  
  4         29  
5              
6             # Base for all namespace/resource classes.
7             has '_http' => ( is => 'ro', required => 1 );
8             has '_base_path' => ( is => 'ro', required => 1 );
9              
10             sub _path {
11 1     1   5578 my ($self, @parts) = @_;
12 1         17 return join('/', $self->_base_path, @parts);
13             }
14              
15             # --- CrudResource ---
16             package SignalWire::Agents::REST::Namespaces::CrudResource;
17 4     4   2200 use Moo;
  4         7  
  4         20  
18             extends 'SignalWire::Agents::REST::Namespaces::Base';
19              
20             # Subclasses can override: 'PATCH' (default) or 'PUT'
21             has '_update_method' => ( is => 'ro', default => sub { 'PATCH' } );
22              
23             sub list {
24 0     0 0   my ($self, %params) = @_;
25 0 0         my $p = %params ? \%params : undef;
26 0           return $self->_http->get($self->_base_path, params => $p);
27             }
28              
29             sub create {
30 0     0 0   my ($self, %kwargs) = @_;
31 0           return $self->_http->post($self->_base_path, body => \%kwargs);
32             }
33              
34             sub get {
35 0     0 0   my ($self, $resource_id) = @_;
36 0           return $self->_http->get($self->_path($resource_id));
37             }
38              
39             sub update {
40 0     0 0   my ($self, $resource_id, %kwargs) = @_;
41 0           my $method = lc($self->_update_method);
42 0           return $self->_http->$method($self->_path($resource_id), body => \%kwargs);
43             }
44              
45             sub delete_resource {
46 0     0 0   my ($self, $resource_id) = @_;
47 0           return $self->_http->delete_request($self->_path($resource_id));
48             }
49              
50             1;