File Coverage

blib/lib/Apertur/SDK/Resource/Sessions.pm
Criterion Covered Total %
statement 14 44 31.8
branch 0 6 0.0
condition n/a
subroutine 5 14 35.7
pod 8 9 88.8
total 27 73 36.9


line stmt bran cond sub pod time code
1             package Apertur::SDK::Resource::Sessions;
2              
3 1     1   7 use strict;
  1         2  
  1         72  
4 1     1   7 use warnings;
  1         1  
  1         82  
5              
6 1     1   8 use JSON qw(encode_json);
  1         2  
  1         7  
7 1     1   152 use URI::Escape qw(uri_escape);
  1         2  
  1         984  
8              
9             sub new {
10 3     3 0 9 my ($class, %args) = @_;
11 3         22 return bless { http => $args{http} }, $class;
12             }
13              
14             sub create {
15 0     0 1   my ($self, %options) = @_;
16             return $self->{http}->request(
17 0           'POST', '/api/v1/upload-sessions',
18             body => encode_json(\%options),
19             );
20             }
21              
22             sub get {
23 0     0 1   my ($self, $uuid) = @_;
24 0           return $self->{http}->request('GET', "/api/v1/upload/$uuid/session");
25             }
26              
27             sub update {
28 0     0 1   my ($self, $uuid, %options) = @_;
29             return $self->{http}->request(
30 0           'PATCH', "/api/v1/upload-sessions/$uuid",
31             body => encode_json(\%options),
32             );
33             }
34              
35             sub list {
36 0     0 1   my ($self, %params) = @_;
37 0           my $qs = _build_query_string(%params);
38 0           return $self->{http}->request('GET', "/api/v1/sessions$qs");
39             }
40              
41             sub recent {
42 0     0 1   my ($self, %params) = @_;
43 0           my $qs = _build_query_string(%params);
44 0           return $self->{http}->request('GET', "/api/v1/sessions/recent$qs");
45             }
46              
47             sub qr {
48 0     0 1   my ($self, $uuid, %options) = @_;
49 0           my $qs = _build_query_string(%options);
50 0           return $self->{http}->request_raw('GET', "/api/v1/upload-sessions/$uuid/qr$qs");
51             }
52              
53             sub verify_password {
54 0     0 1   my ($self, $uuid, $password) = @_;
55             return $self->{http}->request(
56 0           'POST', "/api/v1/upload/$uuid/verify-password",
57             body => encode_json({ password => $password }),
58             );
59             }
60              
61             sub delivery_status {
62 0     0 1   my ($self, $uuid, %opts) = @_;
63 0           my $path = "/api/v1/upload-sessions/$uuid/delivery-status";
64 0           my %req_opts;
65 0 0         if (defined $opts{poll_from}) {
66 0           $path .= '?pollFrom=' . uri_escape($opts{poll_from});
67             # Long-poll: server holds up to 5 min; give the request 6 min so the
68             # server releases first under the happy path.
69 0           $req_opts{timeout} = 360;
70             }
71 0           return $self->{http}->request('GET', $path, %req_opts);
72             }
73              
74             sub _build_query_string {
75 0     0     my (%params) = @_;
76 0           my @parts;
77 0           for my $key (sort keys %params) {
78 0 0         next unless defined $params{$key};
79 0           push @parts, uri_escape($key) . '=' . uri_escape($params{$key});
80             }
81 0 0         return @parts ? '?' . join('&', @parts) : '';
82             }
83              
84             1;
85              
86             __END__