diff options
author | Fayland Lam <fayland@gmail.com> | 2011-09-24 21:09:32 +0800 |
---|---|---|
committer | Fayland Lam <fayland@gmail.com> | 2011-09-24 21:09:32 +0800 |
commit | 59ae6e6cf948ab5ed7158bd26d03c8ed0cce028e (patch) | |
tree | 328875073b0718de1a0ac2ba4273ce1f604e3111 /lib/Net/GitHub/V3/Issues.pm | |
parent | 48b59ab5980fb7a563ccdb170dd7c3a9f247fb97 (diff) |
issue labels
Diffstat (limited to 'lib/Net/GitHub/V3/Issues.pm')
-rw-r--r-- | lib/Net/GitHub/V3/Issues.pm | 340 |
1 files changed, 339 insertions, 1 deletions
diff --git a/lib/Net/GitHub/V3/Issues.pm b/lib/Net/GitHub/V3/Issues.pm index 548ab6e..a8c4860 100644 --- a/lib/Net/GitHub/V3/Issues.pm +++ b/lib/Net/GitHub/V3/Issues.pm @@ -72,7 +72,7 @@ sub create_issue { sub update_issue { my $self = shift; - if (@_ == 1) { + if (@_ < 3) { unshift @_, $self->repos; unshift @_, $self->user; } @@ -82,6 +82,259 @@ sub update_issue { return $self->query('PATCH', $u, $new_issue); } +## http://developer.github.com/v3/issues/comments/ + +sub comments { + my $self = shift; + + if (@_ == 1) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $issue_id) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/' . uri_escape($issue_id) . '/comments'; + return $self->query($u); +} +sub comment { + my $self = shift; + + if (@_ == 1) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $cid) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/comments/' . uri_escape($cid); + return $self->query($u); +} +sub create_comment { + my $self = shift; + + if (@_ < 3) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $issue_id, $comment) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/' . uri_escape($issue_id) . '/comments'; + return $self->query('POST', $u, $comment); +} + +sub update_comment { + my $self = shift; + + if (@_ < 3) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $cid, $comment) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/comments/' . uri_escape($cid); + return $self->query('PATCH', $u, $comment); +} + +sub delete_comment { + my $self = shift; + + if (@_ == 1) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $cid) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/comments/' . uri_escape($cid); + + my $old_raw_response = $self->raw_response; + $self->raw_response(1); # need check header + my $res = $self->query('DELETE', $u); + $self->raw_response($old_raw_response); + return $res->header('Status') =~ /204/ ? 1 : 0; +} + +## http://developer.github.com/v3/issues/events/ + +sub events { + my $self = shift; + + if (@_ == 1) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $issue_id) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/' . uri_escape($issue_id) . '/events'; + return $self->query($u); +} + +sub repos_events { + my ($self, $user, $repos) = @_; + $user ||= $self->user; $repos ||= $self->repos; + return $self->query("/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/events'); +} + +sub event { + my $self = shift; + + if (@_ == 1) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $issue_id) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/events/' . uri_escape($issue_id); + return $self->query($u); +} + +## http://developer.github.com/v3/issues/labels/ + +sub labels { + my ($self, $user, $repos) = @_; + $user ||= $self->user; $repos ||= $self->repos; + return $self->query("/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/labels'); +} +sub label { + my $self = shift; + + if (@_ == 1) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $id) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/labels/' . uri_escape($id); + return $self->query($u); +} +sub create_label { + my $self = shift; + + if (@_ == 1) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $label) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/labels'; + return $self->query('POST', $u, $label); +} +sub update_label { + my $self = shift; + + if (@_ < 3) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $id, $label) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/labels/' . uri_escape($id); + return $self->query('PATCH', $u, $label); +} +sub delete_label { + my $self = shift; + + if (@_ == 1) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $id) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/labels/' . uri_escape($id); + + my $old_raw_response = $self->raw_response; + $self->raw_response(1); # need check header + my $res = $self->query('DELETE', $u); + $self->raw_response($old_raw_response); + return $res->header('Status') =~ /204/ ? 1 : 0; +} + +sub issue_labels { + my $self = shift; + + if (@_ == 1) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $id) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/' . $id . '/labels'; + return $self->query($u); +} + +sub create_issue_label { + my $self = shift; + + if (@_ < 3) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $id, $labels) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/' . $id . '/labels'; + return $self->query('POST', $u, $label); +} + +sub delete_issue_label { + my $self = shift; + + if (@_ < 3) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $id, $label_id) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/' . $id . '/labels' . $label_id; + + my $old_raw_response = $self->raw_response; + $self->raw_response(1); # need check header + my $res = $self->query('DELETE', $u); + $self->raw_response($old_raw_response); + return $res->header('Status') =~ /204/ ? 1 : 0; +} + +sub replace_issue_label { + my $self = shift; + + if (@_ < 3) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $id, $labels) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/' . $id . '/labels'; + return $self->query('PUT', $u, $label); +} + +sub delete_issue_labels { + my $self = shift; + + if (@_ < 3) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $id) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues/' . $id . '/labels'; + + my $old_raw_response = $self->raw_response; + $self->raw_response(1); # need check header + my $res = $self->query('DELETE', $u); + $self->raw_response($old_raw_response); + return $res->header('Status') =~ /204/ ? 1 : 0; +} + +sub milestone_labels { + my $self = shift; + + if (@_ == 1) { + unshift @_, $self->repos; + unshift @_, $self->user; + } + my ($user, $repos, $id) = @_; + + my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/milestones/' . $id . '/labels'; + return $self->query($u); +} + no Any::Moose; __PACKAGE__->meta->make_immutable; @@ -168,6 +421,91 @@ L<http://developer.github.com/v3/issues/comments/ =over 4 +=item comments + +=item comment + +=item create_comment + +=item update_comment + +=item delete_comment + + my @comments = $issue->comments($issue_id); + my $comment = $issue->comment($comment_id); + my $comment = $issue->create_comment($issue_id, { + "body" => "a new comment" + }); + my $comment = $repos->update_comment($comment_id, { + "body" => "Nice change" + }); + my $st = $repos->delete_comment($comment_id); + +=back + +=head3 Issue Event API + +L<http://developer.github.com/v3/issues/events/> + +=over 4 + +=item events + +=item repos_events + + my @events = $issue->events($issue_id); + my @events = $issue->repos_events; + my $event = $issue->event($event_id); + +=back + +=head3 Issue Labels API + +L<http://developer.github.com/v3/issues/labels/> + +=over 4 + +=item labels + +=item label + +=item create_label + +=item update_label + +=item delete_label + + my @labels = $issue->labels; + my $label = $issue->label($label_id); + my $label = $issue->create_label( { + "name" => "API", + "color" => "FFFFFF" + } ); + my $label = $issue->update_label( $label_id, { + "name" => "bugs", + "color" => "000000" + } ); + my $st = $issue->delete_label($label_id); + +=item issue_labels + +=item create_issue_label + +=item delete_issue_label + +=item replace_issue_label + +=item delete_issue_labels + +=item milestone_labels + + my @labels = $issue->issue_label($issue_id); + my @labels = $issue->create_issue_label($issue_id, ['New Label']); + my $st = $issue->delete_issue_label($issue_id, $label_id); + my @labels = $issue->replace_issue_label($issue_id, ['New Label']); + my $st = $issue->delete_issue_labels($issue_id); + my @lbales = $issue->milestone_labels($milestone_id); + =back =head1 AUTHOR |