File Coverage

blib/lib/WWW/Gitea/API/Issues.pm
Criterion Covered Total %
statement 29 63 46.0
branch 7 46 15.2
condition n/a
subroutine 8 14 57.1
pod 7 7 100.0
total 51 130 39.2


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