File Coverage

blib/lib/Pithub/Repos.pm
Criterion Covered Total %
statement 119 119 100.0
branch 15 18 83.3
condition n/a
subroutine 47 47 100.0
pod 29 29 100.0
total 210 213 98.5


line stmt bran cond sub pod time code
1             package Pithub::Repos;
2             our $AUTHORITY = 'cpan:PLU';
3              
4             # ABSTRACT: Github v3 Repos API
5              
6 16     16   191661 use Moo;
  16         45  
  16         107  
7              
8             our $VERSION = '0.01041';
9              
10 16     16   5397 use Carp qw( croak );
  16         41  
  16         819  
11 16     16   616 use Pithub::Issues ();
  16         48  
  16         340  
12 16     16   523 use Pithub::Markdown ();
  16         44  
  16         304  
13 16     16   538 use Pithub::PullRequests ();
  16         64  
  16         317  
14 16     16   7183 use Pithub::Repos::Actions ();
  16         77  
  16         383  
15 16     16   7369 use Pithub::Repos::Collaborators ();
  16         58  
  16         361  
16 16     16   7440 use Pithub::Repos::Commits ();
  16         48  
  16         404  
17 16     16   7555 use Pithub::Repos::Contents ();
  16         2630  
  16         402  
18 16     16   8391 use Pithub::Repos::Downloads ();
  16         1350  
  16         389  
19 16     16   7129 use Pithub::Repos::Forks ();
  16         46  
  16         361  
20 16     16   7224 use Pithub::Repos::Hooks ();
  16         47  
  16         397  
21 16     16   7155 use Pithub::Repos::Keys ();
  16         50  
  16         363  
22 16     16   7482 use Pithub::Repos::Releases ();
  16         57  
  16         383  
23 16     16   7267 use Pithub::Repos::Starring ();
  16         50  
  16         428  
24 16     16   6992 use Pithub::Repos::Stats ();
  16         50  
  16         366  
25 16     16   7456 use Pithub::Repos::Statuses ();
  16         45  
  16         408  
26 16     16   7018 use Pithub::Repos::Watching ();
  16         45  
  16         23085  
27              
28             extends 'Pithub::Base';
29              
30              
31             sub actions {
32 1     1 1 641 return shift->_create_instance( Pithub::Repos::Actions::, @_ );
33             }
34              
35              
36             sub branch {
37 3     3 1 11112 my ( $self, %args ) = @_;
38             croak 'Missing key in parameters: branch (string)'
39 3 100       25 unless defined $args{branch};
40 2         14 $self->_validate_user_repo_args( \%args );
41             return $self->request(
42             method => 'GET',
43             path => sprintf(
44             '/repos/%s/%s/branches/%s', delete $args{user},
45             delete $args{repo},
46             delete $args{branch},
47 2         33 ),
48             %args,
49             );
50             }
51              
52              
53             sub branches {
54 9     9 1 1650 my ( $self, %args ) = @_;
55 9         47 $self->_validate_user_repo_args( \%args );
56             return $self->request(
57             method => 'GET',
58             path => sprintf(
59             '/repos/%s/%s/branches', delete $args{user}, delete $args{repo}
60 9         70 ),
61             %args,
62             );
63             }
64              
65              
66             sub rename_branch {
67 2     2 1 1600 my ( $self, %args ) = @_;
68 2 50       16 croak 'Missing parameters: branch' unless $args{branch};
69             croak 'Missing key in parameters: data (hashref)'
70 2 50       11 unless ref $args{data} eq 'HASH';
71 2         10 $self->_validate_user_repo_args( \%args );
72             return $self->request(
73             method => 'POST',
74             path => sprintf(
75             '/repos/%s/%s/branches/%s/rename', delete $args{user},
76             delete $args{repo}, delete $args{branch}
77 2         35 ),
78             %args,
79             );
80             }
81              
82              
83             sub merge_branch {
84 2     2 1 1601 my ( $self, %args ) = @_;
85             croak 'Missing key in parameters: data (hashref)'
86 2 50       13 unless ref $args{data} eq 'HASH';
87 2         13 $self->_validate_user_repo_args( \%args );
88             return $self->request(
89             method => 'POST',
90             path => sprintf(
91             '/repos/%s/%s/merges', delete $args{user}, delete $args{repo}
92 2         29 ),
93             %args,
94             );
95             }
96              
97              
98             sub collaborators {
99 13     13 1 1226 return shift->_create_instance( Pithub::Repos::Collaborators::, @_ );
100             }
101              
102              
103             sub commits {
104 13     13 1 2064 return shift->_create_instance( Pithub::Repos::Commits::, @_ );
105             }
106              
107              
108             sub contents {
109 1     1 1 1419 return shift->_create_instance( Pithub::Repos::Contents::, @_ );
110             }
111              
112              
113             sub contributors {
114 9     9 1 1521 my ( $self, %args ) = @_;
115 9         41 $self->_validate_user_repo_args( \%args );
116             return $self->request(
117             method => 'GET',
118             path => sprintf(
119             '/repos/%s/%s/contributors', delete $args{user},
120             delete $args{repo}
121 9         77 ),
122             %args,
123             );
124             }
125              
126              
127             sub create {
128 6     6 1 7514 my ( $self, %args ) = @_;
129             croak 'Missing key in parameters: data (hashref)'
130 6 100       69 unless ref $args{data} eq 'HASH';
131 5 100       19 if ( my $org = delete $args{org} ) {
132 3         72 return $self->request(
133             method => 'POST',
134             path => sprintf( '/orgs/%s/repos', $org ),
135             %args,
136             );
137             }
138             else {
139 2         14 return $self->request(
140             method => 'POST',
141             path => '/user/repos',
142             %args,
143             );
144             }
145             }
146              
147              
148             sub delete {
149 4     4 1 2773 my ( $self, %args ) = @_;
150 4         21 $self->_validate_user_repo_args( \%args );
151             return $self->request(
152             method => 'DELETE',
153             path =>
154 2         17 sprintf( '/repos/%s/%s', delete $args{user}, delete $args{repo} ),
155             %args,
156             );
157             }
158              
159              
160             sub downloads {
161 13     13 1 2016 return shift->_create_instance( Pithub::Repos::Downloads::, @_ );
162             }
163              
164              
165             sub forks {
166 13     13 1 2057 return shift->_create_instance( Pithub::Repos::Forks::, @_ );
167             }
168              
169              
170             sub get {
171 2     2 1 1964 my ( $self, %args ) = @_;
172 2         17 $self->_validate_user_repo_args( \%args );
173             return $self->request(
174             method => 'GET',
175             path =>
176 2         28 sprintf( '/repos/%s/%s', delete $args{user}, delete $args{repo} ),
177             %args,
178             );
179             }
180              
181              
182             sub hooks {
183 1     1 1 1409 return shift->_create_instance( Pithub::Repos::Hooks::, @_ );
184             }
185              
186              
187             sub issues {
188 1     1 1 1426 return shift->_create_instance( Pithub::Issues::, @_ );
189             }
190              
191              
192             sub keys {
193 13     13 1 2021 return shift->_create_instance( Pithub::Repos::Keys::, @_ );
194             }
195              
196              
197             sub languages {
198 9     9 1 1643 my ( $self, %args ) = @_;
199 9         50 $self->_validate_user_repo_args( \%args );
200             return $self->request(
201             method => 'GET',
202             path => sprintf(
203             '/repos/%s/%s/languages', delete $args{user}, delete $args{repo}
204 9         78 ),
205             %args,
206             );
207             }
208              
209              
210             sub list {
211 5     5 1 10563 my ( $self, %args ) = @_;
212 5 100       29 if ( my $user = delete $args{user} ) {
    100          
213 2         25 return $self->request(
214             method => 'GET',
215             path => sprintf( '/users/%s/repos', $user ),
216             %args,
217             );
218             }
219             elsif ( my $org = delete $args{org} ) {
220 1         11 return $self->request(
221             method => 'GET',
222             path => sprintf( '/orgs/%s/repos', $org ),
223             %args
224             );
225             }
226             else {
227 2         9 return $self->request(
228             method => 'GET',
229             path => '/user/repos',
230             %args,
231             );
232             }
233             }
234              
235              
236             sub markdown {
237 2     2 1 1384 my $self = shift;
238 2         80 return $self->_create_instance(
239             Pithub::Markdown::,
240             mode => 'gfm',
241             context => sprintf( '%s/%s', $self->user, $self->repo ),
242             @_
243             );
244             }
245              
246              
247             sub pull_requests {
248 1     1 1 1404 return shift->_create_instance( Pithub::PullRequests::, @_ );
249             }
250              
251              
252             sub releases {
253 3     3 1 46970 return shift->_create_instance( Pithub::Repos::Releases::, @_ );
254             }
255              
256              
257             sub starring {
258 1     1 1 1366 return shift->_create_instance( Pithub::Repos::Starring::, @_ );
259             }
260              
261              
262             sub stats {
263 1     1 1 1361 return shift->_create_instance( Pithub::Repos::Stats::, @_ );
264             }
265              
266              
267             sub statuses {
268 1     1 1 1345 return shift->_create_instance( Pithub::Repos::Statuses::, @_ );
269             }
270              
271              
272             sub tags {
273 9     9 1 1490 my ( $self, %args ) = @_;
274 9         42 $self->_validate_user_repo_args( \%args );
275             return $self->request(
276             method => 'GET',
277             path => sprintf(
278             '/repos/%s/%s/tags', delete $args{user}, delete $args{repo}
279 9         70 ),
280             %args,
281             );
282             }
283              
284              
285             sub teams {
286 9     9 1 1585 my ( $self, %args ) = @_;
287 9         64 $self->_validate_user_repo_args( \%args );
288             return $self->request(
289             method => 'GET',
290             path => sprintf(
291             '/repos/%s/%s/teams', delete $args{user}, delete $args{repo}
292 9         89 ),
293             %args,
294             );
295             }
296              
297              
298             sub update {
299 4     4 1 3865 my ( $self, %args ) = @_;
300             croak 'Missing key in parameters: data (hashref)'
301 4 100       28 unless ref $args{data} eq 'HASH';
302 3         15 $self->_validate_user_repo_args( \%args );
303             return $self->request(
304             method => 'PATCH',
305             path =>
306 3         38 sprintf( '/repos/%s/%s', delete $args{user}, delete $args{repo} ),
307             %args,
308             );
309             }
310              
311              
312             sub watching {
313 13     13 1 2092 return shift->_create_instance( Pithub::Repos::Watching::, @_ );
314             }
315              
316             1;
317              
318             __END__