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.01039';
4             # ABSTRACT: Github v3 Repo Downloads API
5              
6 15     15   90 use Moo;
  15         29  
  15         87  
7 15     15   3875 use Carp qw( croak );
  15         34  
  15         1363  
8 15     15   6466 use HTTP::Request::Common qw( POST );
  15         30868  
  15         7228  
9             extends 'Pithub::Base';
10              
11              
12             sub create {
13 5     5 1 9683 my ( $self, %args ) = @_;
14 5 100       30 croak 'Missing key in parameters: data (hashref)' unless ref $args{data} eq 'HASH';
15 4         31 $self->_validate_user_repo_args( \%args );
16             return $self->request(
17             method => 'POST',
18 4         39 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 3506 my ( $self, %args ) = @_;
26 4 100       21 croak 'Missing key in parameters: download_id' unless $args{download_id};
27 3         18 $self->_validate_user_repo_args( \%args );
28             return $self->request(
29             method => 'DELETE',
30 3         42 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 2310 my ( $self, %args ) = @_;
38 3 100       19 croak 'Missing key in parameters: download_id' unless $args{download_id};
39 2         13 $self->_validate_user_repo_args( \%args );
40             return $self->request(
41             method => 'GET',
42 2         24 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 2326 my ( $self, %args ) = @_;
50 19         64 $self->_validate_user_repo_args( \%args );
51             return $self->request(
52             method => 'GET',
53 13         166 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 3574 my ( $self, %args ) = @_;
61 4 100       20 croak 'Missing key in parameters: result (Pithub::Result object)' unless ref $args{result} eq 'Pithub::Result';
62 3 100       14 croak 'Missing key in parameters: file' unless $args{file};
63 2         38 my $result = $args{result}->content;
64 2         80 foreach my $key (qw(path acl name accesskeyid policy signature mime_type)) {
65 8 100       51 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         9 'file' => [ $args{file} ],
79             ],
80             );
81 1         6 my $request = POST $result->{s3_url}, %data;
82 1         16402 return $self->ua->request($request);
83             }
84              
85             1;
86              
87             __END__