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   163463 use Moo;
  16         79  
  16         153  
7              
8             our $VERSION = '0.01040';
9              
10 16     16   4873 use Carp qw( croak );
  16         44  
  16         770  
11 16     16   508 use Pithub::Issues;
  16         31  
  16         385  
12 16     16   6109 use Pithub::Markdown;
  16         44  
  16         465  
13 16     16   529 use Pithub::PullRequests;
  16         26  
  16         308  
14 16     16   6636 use Pithub::Repos::Actions ();
  16         52  
  16         389  
15 16     16   6181 use Pithub::Repos::Collaborators;
  16         49  
  16         415  
16 16     16   6242 use Pithub::Repos::Commits;
  16         42  
  16         417  
17 16     16   6481 use Pithub::Repos::Contents;
  16         45  
  16         1526  
18 16     16   7184 use Pithub::Repos::Downloads;
  16         46  
  16         459  
19 16     16   6755 use Pithub::Repos::Forks;
  16         42  
  16         390  
20 16     16   6249 use Pithub::Repos::Hooks;
  16         42  
  16         407  
21 16     16   6188 use Pithub::Repos::Keys;
  16         38  
  16         430  
22 16     16   6157 use Pithub::Repos::Releases;
  16         43  
  16         413  
23 16     16   6577 use Pithub::Repos::Starring;
  16         40  
  16         426  
24 16     16   5992 use Pithub::Repos::Stats;
  16         35  
  16         465  
25 16     16   6467 use Pithub::Repos::Statuses;
  16         46  
  16         413  
26 16     16   6129 use Pithub::Repos::Watching;
  16         40  
  16         19115  
27              
28             extends 'Pithub::Base';
29              
30              
31             sub actions {
32 1     1 1 415 return shift->_create_instance( Pithub::Repos::Actions::, @_ );
33             }
34              
35              
36             sub branch {
37 3     3 1 10129 my ( $self, %args ) = @_;
38 3 100       27 croak 'Missing key in parameters: branch (string)' unless defined $args{branch};
39 2         16 $self->_validate_user_repo_args( \%args );
40             return $self->request(
41             method => 'GET',
42             path => sprintf(
43             '/repos/%s/%s/branches/%s', delete $args{user},
44             delete $args{repo},
45             delete $args{branch},
46 2         27 ),
47             %args,
48             );
49             }
50              
51              
52             sub branches {
53 9     9 1 1393 my ( $self, %args ) = @_;
54 9         46 $self->_validate_user_repo_args( \%args );
55             return $self->request(
56             method => 'GET',
57 9         103 path => sprintf( '/repos/%s/%s/branches', delete $args{user}, delete $args{repo} ),
58             %args,
59             );
60             }
61              
62              
63             sub rename_branch {
64 2     2 1 1333 my ( $self, %args ) = @_;
65 2 50       10 croak 'Missing parameters: branch' unless $args{branch};
66 2 50       9 croak 'Missing key in parameters: data (hashref)' unless ref $args{data} eq 'HASH';
67 2         12 $self->_validate_user_repo_args( \%args );
68             return $self->request(
69             method => 'POST',
70 2         24 path => sprintf( '/repos/%s/%s/branches/%s/rename', delete $args{user}, delete $args{repo}, delete $args{branch} ),
71             %args,
72             );
73             }
74              
75              
76             sub merge_branch {
77 2     2 1 1233 my ( $self, %args ) = @_;
78 2 50       13 croak 'Missing key in parameters: data (hashref)' unless ref $args{data} eq 'HASH';
79 2         13 $self->_validate_user_repo_args( \%args );
80             return $self->request(
81             method => 'POST',
82 2         23 path => sprintf( '/repos/%s/%s/merges', delete $args{user}, delete $args{repo} ),
83             %args,
84             );
85             }
86              
87              
88             sub collaborators {
89 13     13 1 1115 return shift->_create_instance('Pithub::Repos::Collaborators', @_);
90             }
91              
92              
93             sub commits {
94 13     13 1 1821 return shift->_create_instance('Pithub::Repos::Commits', @_);
95             }
96              
97              
98             sub contents {
99 1     1 1 1178 return shift->_create_instance('Pithub::Repos::Contents', @_);
100             }
101              
102              
103             sub contributors {
104 9     9 1 1331 my ( $self, %args ) = @_;
105 9         39 $self->_validate_user_repo_args( \%args );
106             return $self->request(
107             method => 'GET',
108 9         64 path => sprintf( '/repos/%s/%s/contributors', delete $args{user}, delete $args{repo} ),
109             %args,
110             );
111             }
112              
113              
114             sub create {
115 6     6 1 6387 my ( $self, %args ) = @_;
116 6 100       41 croak 'Missing key in parameters: data (hashref)' unless ref $args{data} eq 'HASH';
117 5 100       16 if ( my $org = delete $args{org} ) {
118 3         27 return $self->request(
119             method => 'POST',
120             path => sprintf( '/orgs/%s/repos', $org ),
121             %args,
122             );
123             }
124             else {
125 2         14 return $self->request(
126             method => 'POST',
127             path => '/user/repos',
128             %args,
129             );
130             }
131             }
132              
133              
134             sub delete {
135 4     4 1 2493 my( $self, %args ) = @_;
136 4         19 $self->_validate_user_repo_args( \%args );
137             return $self->request(
138             method => 'DELETE',
139 2         16 path => sprintf( '/repos/%s/%s', delete $args{user}, delete $args{repo} ),
140             %args,
141             );
142             }
143              
144              
145             sub downloads {
146 13     13 1 1887 return shift->_create_instance('Pithub::Repos::Downloads', @_);
147             }
148              
149              
150             sub forks {
151 13     13 1 1861 return shift->_create_instance('Pithub::Repos::Forks', @_);
152             }
153              
154              
155             sub get {
156 2     2 1 1279 my ( $self, %args ) = @_;
157 2         13 $self->_validate_user_repo_args( \%args );
158             return $self->request(
159             method => 'GET',
160 2         21 path => sprintf( '/repos/%s/%s', delete $args{user}, delete $args{repo} ),
161             %args,
162             );
163             }
164              
165              
166             sub hooks {
167 1     1 1 1158 return shift->_create_instance('Pithub::Repos::Hooks', @_);
168             }
169              
170              
171             sub issues {
172 1     1 1 1179 return shift->_create_instance('Pithub::Issues', @_);
173             }
174              
175              
176             sub keys {
177 13     13 1 1771 return shift->_create_instance('Pithub::Repos::Keys', @_);
178             }
179              
180              
181             sub languages {
182 9     9 1 1372 my ( $self, %args ) = @_;
183 9         42 $self->_validate_user_repo_args( \%args );
184             return $self->request(
185             method => 'GET',
186 9         70 path => sprintf( '/repos/%s/%s/languages', delete $args{user}, delete $args{repo} ),
187             %args,
188             );
189             }
190              
191              
192             sub list {
193 5     5 1 7996 my ( $self, %args ) = @_;
194 5 100       23 if ( my $user = delete $args{user} ) {
    100          
195 2         19 return $self->request(
196             method => 'GET',
197             path => sprintf( '/users/%s/repos', $user ),
198             %args,
199             );
200             }
201             elsif ( my $org = delete $args{org} ) {
202 1         10 return $self->request(
203             method => 'GET',
204             path => sprintf( '/orgs/%s/repos', $org ),
205             %args
206             );
207             }
208             else {
209 2         11 return $self->request(
210             method => 'GET',
211             path => '/user/repos',
212             %args,
213             );
214             }
215             }
216              
217              
218             sub markdown {
219 2     2 1 1193 my $self = shift;
220 2         31 return $self->_create_instance('Pithub::Markdown',
221             mode => 'gfm', context => sprintf( '%s/%s', $self->user, $self->repo ),
222             @_);
223             }
224              
225              
226             sub pull_requests {
227 1     1 1 1186 return shift->_create_instance('Pithub::PullRequests', @_);
228             }
229              
230              
231             sub releases {
232 3     3 1 41215 return shift->_create_instance('Pithub::Repos::Releases', @_);
233             }
234              
235              
236             sub starring {
237 1     1 1 1187 return shift->_create_instance('Pithub::Repos::Starring', @_);
238             }
239              
240              
241             sub stats {
242 1     1 1 1173 return shift->_create_instance('Pithub::Repos::Stats', @_);
243             }
244              
245              
246             sub statuses {
247 1     1 1 1140 return shift->_create_instance('Pithub::Repos::Statuses', @_);
248             }
249              
250              
251             sub tags {
252 9     9 1 1328 my ( $self, %args ) = @_;
253 9         41 $self->_validate_user_repo_args( \%args );
254             return $self->request(
255             method => 'GET',
256 9         65 path => sprintf( '/repos/%s/%s/tags', delete $args{user}, delete $args{repo} ),
257             %args,
258             );
259             }
260              
261              
262             sub teams {
263 9     9 1 1382 my ( $self, %args ) = @_;
264 9         42 $self->_validate_user_repo_args( \%args );
265             return $self->request(
266             method => 'GET',
267 9         70 path => sprintf( '/repos/%s/%s/teams', delete $args{user}, delete $args{repo} ),
268             %args,
269             );
270             }
271              
272              
273             sub update {
274 4     4 1 3053 my ( $self, %args ) = @_;
275 4 100       31 croak 'Missing key in parameters: data (hashref)' unless ref $args{data} eq 'HASH';
276 3         18 $self->_validate_user_repo_args( \%args );
277             return $self->request(
278             method => 'PATCH',
279 3         34 path => sprintf( '/repos/%s/%s', delete $args{user}, delete $args{repo} ),
280             %args,
281             );
282             }
283              
284              
285             sub watching {
286 13     13 1 1813 return shift->_create_instance('Pithub::Repos::Watching', @_);
287             }
288              
289             1;
290              
291             __END__