summaryrefslogtreecommitdiff
path: root/lib/Net/GitHub/V3/Issues.pm
diff options
context:
space:
mode:
authorFayland Lam <fayland@gmail.com>2011-09-24 21:09:32 +0800
committerFayland Lam <fayland@gmail.com>2011-09-24 21:09:32 +0800
commit59ae6e6cf948ab5ed7158bd26d03c8ed0cce028e (patch)
tree328875073b0718de1a0ac2ba4273ce1f604e3111 /lib/Net/GitHub/V3/Issues.pm
parent48b59ab5980fb7a563ccdb170dd7c3a9f247fb97 (diff)
issue labels
Diffstat (limited to 'lib/Net/GitHub/V3/Issues.pm')
-rw-r--r--lib/Net/GitHub/V3/Issues.pm340
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