File Coverage

blib/lib/WWW/Gitea/API/PullRequests.pm
Criterion Covered Total %
statement 13 56 23.2
branch 0 46 0.0
condition 0 2 0.0
subroutine 5 12 41.6
pod 6 6 100.0
total 24 122 19.6


line stmt bran cond sub pod time code
1             package WWW::Gitea::API::PullRequests;
2              
3             # ABSTRACT: Gitea pull requests API
4              
5 3     3   17 use Moo;
  3         4  
  3         14  
6 3     3   943 use Carp qw(croak);
  3         5  
  3         203  
7 3     3   1221 use WWW::Gitea::PullRequest;
  3         8  
  3         95  
8 3     3   20 use namespace::clean;
  3         5  
  3         12  
9              
10              
11             has client => (
12             is => 'ro',
13             required => 1,
14             weak_ref => 1,
15             );
16              
17              
18             has openapi_operations => (
19             is => 'lazy',
20             builder => sub {
21             return {
22 1     1   21 'pulls.list' => { method => 'GET', path => '/repos/{owner}/{repo}/pulls' },
23             'pulls.create' => { method => 'POST', path => '/repos/{owner}/{repo}/pulls' },
24             'pulls.get' => { method => 'GET', path => '/repos/{owner}/{repo}/pulls/{index}' },
25             'pulls.edit' => { method => 'PATCH', path => '/repos/{owner}/{repo}/pulls/{index}' },
26             'pulls.merge' => { method => 'POST', path => '/repos/{owner}/{repo}/pulls/{index}/merge' },
27             'pulls.is_merged' => { method => 'GET', path => '/repos/{owner}/{repo}/pulls/{index}/merge' },
28             };
29             },
30             );
31              
32              
33             with 'WWW::Gitea::Role::OpenAPI';
34              
35             sub _wrap {
36 0     0     my ($self, $data, $owner, $repo) = @_;
37 0 0         return WWW::Gitea::PullRequest->new(
    0          
38             client => $self->client,
39             data => $data,
40             (defined $owner ? (owner => $owner) : ()),
41             (defined $repo ? (repo => $repo) : ()),
42             );
43             }
44              
45             sub list {
46 0     0 1   my ($self, $owner, $repo, %query) = @_;
47 0 0         croak 'owner required' unless defined $owner;
48 0 0         croak 'repo required' unless defined $repo;
49 0           my $data = $self->call_operation('pulls.list',
50             path => { owner => $owner, repo => $repo }, query => \%query);
51 0 0         return [ map { $self->_wrap($_, $owner, $repo) } @{ $data || [] } ];
  0            
  0            
52             }
53              
54              
55             sub create {
56 0     0 1   my ($self, $owner, $repo, %args) = @_;
57 0 0         croak 'owner required' unless defined $owner;
58 0 0         croak 'repo required' unless defined $repo;
59 0 0         croak 'head required' unless defined $args{head};
60 0 0         croak 'base required' unless defined $args{base};
61 0 0         croak 'title required' unless defined $args{title};
62 0           my $data = $self->call_operation('pulls.create',
63             path => { owner => $owner, repo => $repo }, body => \%args);
64 0           return $self->_wrap($data, $owner, $repo);
65             }
66              
67              
68             sub get {
69 0     0 1   my ($self, $owner, $repo, $index) = @_;
70 0 0         croak 'owner required' unless defined $owner;
71 0 0         croak 'repo required' unless defined $repo;
72 0 0         croak 'index required' unless defined $index;
73 0           my $data = $self->call_operation('pulls.get',
74             path => { owner => $owner, repo => $repo, index => $index });
75 0           return $self->_wrap($data, $owner, $repo);
76             }
77              
78              
79             sub edit {
80 0     0 1   my ($self, $owner, $repo, $index, %args) = @_;
81 0 0         croak 'owner required' unless defined $owner;
82 0 0         croak 'repo required' unless defined $repo;
83 0 0         croak 'index required' unless defined $index;
84 0           my $data = $self->call_operation('pulls.edit',
85             path => { owner => $owner, repo => $repo, index => $index },
86             body => \%args);
87 0           return $self->_wrap($data, $owner, $repo);
88             }
89              
90              
91             sub merge {
92 0     0 1   my ($self, $owner, $repo, $index, %args) = @_;
93 0 0         croak 'owner required' unless defined $owner;
94 0 0         croak 'repo required' unless defined $repo;
95 0 0         croak 'index required' unless defined $index;
96 0   0       $args{Do} //= 'merge';
97 0           return $self->call_operation('pulls.merge',
98             path => { owner => $owner, repo => $repo, index => $index },
99             body => \%args);
100             }
101              
102              
103             sub is_merged {
104 0     0 1   my ($self, $owner, $repo, $index) = @_;
105 0 0         croak 'owner required' unless defined $owner;
106 0 0         croak 'repo required' unless defined $repo;
107 0 0         croak 'index required' unless defined $index;
108 0           my $op = $self->get_operation('pulls.is_merged');
109             my $path = $self->_resolve_path($op->{path},
110 0           { owner => $owner, repo => $repo, index => $index });
111 0           my $code = $self->client->request_status($op->{method}, $path);
112 0 0         return $code == 204 ? 1 : 0;
113             }
114              
115              
116              
117             1;
118              
119             __END__