File Coverage

blib/lib/WWW/Gitea/API/Releases.pm
Criterion Covered Total %
statement 13 51 25.4
branch 0 40 0.0
condition n/a
subroutine 5 12 41.6
pod 6 6 100.0
total 24 109 22.0


line stmt bran cond sub pod time code
1             package WWW::Gitea::API::Releases;
2              
3             # ABSTRACT: Gitea repository releases API
4              
5 3     3   17 use Moo;
  3         6  
  3         15  
6 3     3   905 use Carp qw(croak);
  3         5  
  3         155  
7 3     3   1270 use WWW::Gitea::Release;
  3         9  
  3         91  
8 3     3   17 use namespace::clean;
  3         4  
  3         10  
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   24 'releases.list' => { method => 'GET', path => '/repos/{owner}/{repo}/releases' },
23             'releases.create' => { method => 'POST', path => '/repos/{owner}/{repo}/releases' },
24             'releases.get' => { method => 'GET', path => '/repos/{owner}/{repo}/releases/{id}' },
25             'releases.get_by_tag' => { method => 'GET', path => '/repos/{owner}/{repo}/releases/tags/{tag}' },
26             'releases.edit' => { method => 'PATCH', path => '/repos/{owner}/{repo}/releases/{id}' },
27             'releases.delete' => { method => 'DELETE', path => '/repos/{owner}/{repo}/releases/{id}' },
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::Release->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('releases.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 'tag_name required' unless defined $args{tag_name};
60 0           my $data = $self->call_operation('releases.create',
61             path => { owner => $owner, repo => $repo }, body => \%args);
62 0           return $self->_wrap($data, $owner, $repo);
63             }
64              
65              
66             sub get {
67 0     0 1   my ($self, $owner, $repo, $id) = @_;
68 0 0         croak 'owner required' unless defined $owner;
69 0 0         croak 'repo required' unless defined $repo;
70 0 0         croak 'id required' unless defined $id;
71 0           my $data = $self->call_operation('releases.get',
72             path => { owner => $owner, repo => $repo, id => $id });
73 0           return $self->_wrap($data, $owner, $repo);
74             }
75              
76              
77             sub get_by_tag {
78 0     0 1   my ($self, $owner, $repo, $tag) = @_;
79 0 0         croak 'owner required' unless defined $owner;
80 0 0         croak 'repo required' unless defined $repo;
81 0 0         croak 'tag required' unless defined $tag;
82 0           my $data = $self->call_operation('releases.get_by_tag',
83             path => { owner => $owner, repo => $repo, tag => $tag });
84 0           return $self->_wrap($data, $owner, $repo);
85             }
86              
87              
88             sub edit {
89 0     0 1   my ($self, $owner, $repo, $id, %args) = @_;
90 0 0         croak 'owner required' unless defined $owner;
91 0 0         croak 'repo required' unless defined $repo;
92 0 0         croak 'id required' unless defined $id;
93 0           my $data = $self->call_operation('releases.edit',
94             path => { owner => $owner, repo => $repo, id => $id }, body => \%args);
95 0           return $self->_wrap($data, $owner, $repo);
96             }
97              
98              
99             sub delete {
100 0     0 1   my ($self, $owner, $repo, $id) = @_;
101 0 0         croak 'owner required' unless defined $owner;
102 0 0         croak 'repo required' unless defined $repo;
103 0 0         croak 'id required' unless defined $id;
104 0           return $self->call_operation('releases.delete',
105             path => { owner => $owner, repo => $repo, id => $id });
106             }
107              
108              
109              
110             1;
111              
112             __END__