File Coverage

blib/lib/WWW/Gitea/Issue.pm
Criterion Covered Total %
statement 27 47 57.4
branch 9 14 64.2
condition n/a
subroutine 10 21 47.6
pod 17 17 100.0
total 63 99 63.6


line stmt bran cond sub pod time code
1             package WWW::Gitea::Issue;
2              
3             # ABSTRACT: Gitea issue entity
4              
5 3     3   19 use Moo;
  3         5  
  3         15  
6 3     3   888 use namespace::clean;
  3         3  
  3         44  
7              
8              
9             has _client => (
10             is => 'ro',
11             required => 1,
12             weak_ref => 1,
13             init_arg => 'client',
14             );
15              
16             has data => (
17             is => 'rw',
18             required => 1,
19             );
20              
21              
22             has owner => ( is => 'ro' );
23             has repo => ( is => 'ro' );
24              
25              
26             sub _owner {
27 2     2   50 my ($self) = @_;
28 2 100       10 return $self->owner if defined $self->owner;
29 1         4 my $r = $self->data->{repository};
30 1 50       5 return $r ? $r->{owner} : undef;
31             }
32              
33             sub _repo {
34 2     2   4 my ($self) = @_;
35 2 100       12 return $self->repo if defined $self->repo;
36 1         4 my $r = $self->data->{repository};
37 1 50       4 return $r ? $r->{name} : undef;
38             }
39              
40 0     0 1 0 sub id { $_[0]->data->{id} }
41 1     1 1 1877 sub number { $_[0]->data->{number} }
42 0     0 1 0 sub title { $_[0]->data->{title} }
43 0     0 1 0 sub body { $_[0]->data->{body} }
44 1     1 1 8 sub state { $_[0]->data->{state} }
45 0     0 1 0 sub html_url { $_[0]->data->{html_url} }
46 0     0 1 0 sub created_at { $_[0]->data->{created_at} }
47 0     0 1 0 sub updated_at { $_[0]->data->{updated_at} }
48 1     1 1 6 sub comments_count { $_[0]->data->{comments} }
49 1 50   1 1 25 sub user_login { my $u = $_[0]->data->{user}; $u ? $u->{login} : undef }
  1         10  
50              
51             sub label_names {
52 1     1 1 2 my ($self) = @_;
53 1 50       3 return [ map { $_->{name} } @{ $self->data->{labels} || [] } ];
  2         9  
  1         5  
54             }
55              
56             sub assignee_logins {
57 1     1 1 2 my ($self) = @_;
58 1 50       2 return [ map { $_->{login} } @{ $self->data->{assignees} || [] } ];
  1         5  
  1         7  
59             }
60              
61              
62             sub refresh {
63 0     0 1   my ($self) = @_;
64 0           my $fresh = $self->_client->issues->get($self->_owner, $self->_repo, $self->number);
65 0           $self->data($fresh->data);
66 0           return $self;
67             }
68              
69              
70             sub edit {
71 0     0 1   my ($self, %args) = @_;
72 0           my $fresh = $self->_client->issues->edit(
73             $self->_owner, $self->_repo, $self->number, %args);
74 0           $self->data($fresh->data);
75 0           return $self;
76             }
77              
78              
79             sub close {
80 0     0 1   my ($self) = @_;
81 0           return $self->edit(state => 'closed');
82             }
83              
84              
85             sub reopen {
86 0     0 1   my ($self) = @_;
87 0           return $self->edit(state => 'open');
88             }
89              
90              
91             sub add_comment {
92 0     0 1   my ($self, $body) = @_;
93 0           return $self->_client->issues->create_comment(
94             $self->_owner, $self->_repo, $self->number, $body);
95             }
96              
97              
98              
99             1;
100              
101             __END__