File Coverage

blib/lib/WWW/Gitea/API/Issues.pm
Criterion Covered Total %
statement 16 63 25.4
branch 0 46 0.0
condition n/a
subroutine 6 14 42.8
pod 7 7 100.0
total 29 130 22.3


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 3     3   17 use Moo;
  3         5  
  3         17  
6 3     3   969 use Carp qw(croak);
  3         4  
  3         171  
7 3     3   1325 use WWW::Gitea::Issue;
  3         8  
  3         102  
8 3     3   1383 use WWW::Gitea::Comment;
  3         10  
  3         102  
9 3     3   19 use namespace::clean;
  3         5  
  3         12  
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 1     1   24 '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     my ($self, $data, $owner, $repo) = @_;
39 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 0     0 1   my ($self, $owner, $repo, %query) = @_;
49 0 0         croak 'owner required' unless defined $owner;
50 0 0         croak 'repo required' unless defined $repo;
51 0           my $data = $self->call_operation('issues.list',
52             path => { owner => $owner, repo => $repo }, query => \%query);
53 0 0         return [ map { $self->_wrap($_, $owner, $repo) } @{ $data || [] } ];
  0            
  0            
54             }
55              
56              
57             sub create {
58 0     0 1   my ($self, $owner, $repo, %args) = @_;
59 0 0         croak 'owner required' unless defined $owner;
60 0 0         croak 'repo required' unless defined $repo;
61 0 0         croak 'title required' unless defined $args{title};
62 0           my $data = $self->call_operation('issues.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('issues.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('issues.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 search {
92 0     0 1   my ($self, %query) = @_;
93 0           my $data = $self->call_operation('issues.search', query => \%query);
94 0 0         return [ map { $self->_wrap($_) } @{ $data || [] } ];
  0            
  0            
95             }
96              
97              
98             sub comments {
99 0     0 1   my ($self, $owner, $repo, $index) = @_;
100 0 0         croak 'owner required' unless defined $owner;
101 0 0         croak 'repo required' unless defined $repo;
102 0 0         croak 'index required' unless defined $index;
103 0           my $data = $self->call_operation('issues.list_comments',
104             path => { owner => $owner, repo => $repo, index => $index });
105             return [ map {
106 0           WWW::Gitea::Comment->new(client => $self->client, data => $_)
107 0 0         } @{ $data || [] } ];
  0            
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__