File Coverage

blib/lib/Pithub/Repos/Downloads.pm
Criterion Covered Total %
statement 33 33 100.0
branch 12 12 100.0
condition n/a
subroutine 8 8 100.0
pod 5 5 100.0
total 58 58 100.0


line stmt bran cond sub pod time code
1             package Pithub::Repos::Downloads;
2             our $AUTHORITY = 'cpan:PLU';
3             our $VERSION = '0.01040';
4             # ABSTRACT: Github v3 Repo Downloads API
5              
6 16     16   98 use Moo;
  16         29  
  16         1299  
7 16     16   6723 use Carp qw( croak );
  16         28  
  16         1826  
8 16     16   7034 use HTTP::Request::Common qw( POST );
  16         32726  
  16         7652  
9             extends 'Pithub::Base';
10              
11              
12             sub create {
13 5     5 1 8909 my ( $self, %args ) = @_;
14 5 100       38 croak 'Missing key in parameters: data (hashref)' unless ref $args{data} eq 'HASH';
15 4         30 $self->_validate_user_repo_args( \%args );
16             return $self->request(
17             method => 'POST',
18 4         40 path => sprintf( '/repos/%s/%s/downloads', delete $args{user}, delete $args{repo} ),
19             %args,
20             );
21             }
22              
23              
24             sub delete {
25 4     4 1 2910 my ( $self, %args ) = @_;
26 4 100       27 croak 'Missing key in parameters: download_id' unless $args{download_id};
27 3         54 $self->_validate_user_repo_args( \%args );
28             return $self->request(
29             method => 'DELETE',
30 3         31 path => sprintf( '/repos/%s/%s/downloads/%s', delete $args{user}, delete $args{repo}, delete $args{download_id} ),
31             %args,
32             );
33             }
34              
35              
36             sub get {
37 3     3 1 1954 my ( $self, %args ) = @_;
38 3 100       24 croak 'Missing key in parameters: download_id' unless $args{download_id};
39 2         12 $self->_validate_user_repo_args( \%args );
40             return $self->request(
41             method => 'GET',
42 2         26 path => sprintf( '/repos/%s/%s/downloads/%s', delete $args{user}, delete $args{repo}, delete $args{download_id} ),
43             %args,
44             );
45             }
46              
47              
48             sub list {
49 19     19 1 2044 my ( $self, %args ) = @_;
50 19         90 $self->_validate_user_repo_args( \%args );
51             return $self->request(
52             method => 'GET',
53 13         105 path => sprintf( '/repos/%s/%s/downloads', delete $args{user}, delete $args{repo} ),
54             %args,
55             );
56             }
57              
58              
59             sub upload {
60 4     4 1 3360 my ( $self, %args ) = @_;
61 4 100       32 croak 'Missing key in parameters: result (Pithub::Result object)' unless ref $args{result} eq 'Pithub::Result';
62 3 100       17 croak 'Missing key in parameters: file' unless $args{file};
63 2         41 my $result = $args{result}->content;
64 2         76 foreach my $key (qw(path acl name accesskeyid policy signature mime_type)) {
65 8 100       101 croak "Missing key in Pithub::Result content: ${key}" unless grep $_ eq $key, keys %$result;
66             }
67             my %data = (
68             Content_Type => 'form-data',
69             Content => [
70             'key' => $result->{path},
71             'acl' => $result->{acl},
72             'success_action_status' => 201,
73             'Filename' => $result->{name},
74             'AWSAccessKeyId' => $result->{accesskeyid},
75             'Policy' => $result->{policy},
76             'Signature' => $result->{signature},
77             'Content-Type' => $result->{mime_type},
78 1         12 'file' => [ $args{file} ],
79             ],
80             );
81 1         6 my $request = POST $result->{s3_url}, %data;
82 1         17383 return $self->ua->request($request);
83             }
84              
85             1;
86              
87             __END__