File Coverage

blib/lib/WebService/ValidSign/API/DocumentPackage.pm
Criterion Covered Total %
statement 18 58 31.0
branch 0 10 0.0
condition n/a
subroutine 6 12 50.0
pod 0 4 0.0
total 24 84 28.5


line stmt bran cond sub pod time code
1             package WebService::ValidSign::API::DocumentPackage;
2             our $VERSION = '0.002';
3 2     2   1374 use Moo;
  2         6  
  2         11  
4 2     2   658 use namespace::autoclean;
  2         4  
  2         13  
5              
6             # ABSTRACT: A REST API client for ValidSign
7              
8 2     2   1116 use WebService::ValidSign::Object::Sender;
  2         53  
  2         65  
9 2     2   16 use HTTP::Request;
  2         41  
  2         49  
10 2     2   989 use HTTP::Request::Common;
  2         4541  
  2         157  
11 2     2   16 use Carp qw(croak);
  2         19  
  2         1291  
12              
13             has json => (
14             is => 'ro',
15             builder => 1,
16             );
17              
18             sub _build_json {
19 0     0     require JSON::XS;
20 0           return JSON::XS->new->convert_blessed;
21             }
22              
23             has action_endpoint => (
24             is => 'ro',
25             default => 'packages'
26             );
27              
28             sub details {
29 0     0 0   my ($self, $package) = @_;
30              
31 0           my $uri = $self->get_endpoint($self->action_endpoint, $package->id);
32 0           my $request = HTTP::Request->new(
33             GET => $uri,
34             [
35             'Content-Type' => 'application/json',
36             Accept => 'application/json',
37             ]
38             );
39 0           return $self->call_api($request);
40              
41             }
42              
43             sub create_with_documents {
44 0     0 0   my ($self, $package) = @_;
45 0           my $uri = $self->get_endpoint($self->action_endpoint);
46 0           my $json = $self->json->encode($package);
47              
48 0           my $request = $self->_add_documents($package, $uri, $json);
49              
50 0           my $response = $self->call_api($request);
51 0           $package->id($response->{id});
52 0           return $response->{id};
53             }
54              
55             sub _add_documents {
56 0     0     my ($self, $package, $uri, $json) = @_;
57              
58 0           my @files;
59 0 0         if ($package->count_documents == 1) {
60 0           push(@files, ( file => [ $package->documents->[0]->path ] ));
61             }
62             else {
63 0           foreach (@{$package->documents}) {
  0            
64 0           push(@files, ( 'file[]' => [ $_->path ] ))
65             }
66             }
67              
68 0 0         return POST $uri,
69             'Content_Type' => 'form-data',
70             Accept => 'application/json',
71             Content => [
72             defined $json ? (payload => $json) : (),
73             @files,
74             ];
75             }
76              
77             sub create {
78 0     0 0   my ($self, $package) = @_;
79              
80 0 0         if ($package->has_id) {
81 0           croak("Package is already created, it has an ID");
82             }
83              
84 0 0         if ($package->has_documents) {
85 0           return $self->create_with_documents($package);
86             }
87              
88 0           my $json = $self->json->encode($package);
89 0           my $uri = $self->get_endpoint($self->action_endpoint);
90              
91 0           my $request = HTTP::Request->new(
92             POST => $uri,
93             [
94             'Content-Type' => 'application/json',
95             Accept => 'application/json',
96             ],
97             $json
98             );
99              
100 0           my $response = $self->call_api($request);
101 0           $package->id($response->{id});
102 0           return $response->{id};
103             }
104              
105             sub add_document {
106 0     0 0   my ($self, $package) = @_;
107              
108 0 0         if (!$package->has_id) {
109 0           croak("Please create a document package first on the ValidSign endpoint");
110             }
111              
112 0           my $json = $self->json->encode($package);
113              
114 0           my $uri = $self->get_endpoint(
115             $self->action_endpoint,
116             $package->id,
117             'documents'
118             );
119              
120 0           my $req = $self->_add_documents($package, $uri, $json);
121 0           my $response = $self->call_api($req);
122 0           return $response->{id};
123             }
124              
125             with "WebService::ValidSign::API";
126              
127             __PACKAGE__->meta->make_immutable;
128              
129             __END__
130              
131             =pod
132              
133             =encoding UTF-8
134              
135             =head1 NAME
136              
137             WebService::ValidSign::API::DocumentPackage - A REST API client for ValidSign
138              
139             =head1 VERSION
140              
141             version 0.002
142              
143             =head1 SYNOPSIS
144              
145             =head1 ATTRIBUTES
146              
147             =head1 METHODS
148              
149             =head1 AUTHOR
150              
151             Wesley Schwengle <waterkip@cpan.org>
152              
153             =head1 COPYRIGHT AND LICENSE
154              
155             This software is Copyright (c) 2019 by Wesley Schwengle.
156              
157             This is free software, licensed under:
158              
159             The (three-clause) BSD License
160              
161             =cut