summaryrefslogtreecommitdiff
path: root/lib/Net/GitHub/V3/Issues.pm
diff options
context:
space:
mode:
authorHarald Jörg <Harald.Joerg@arcor.de>2018-02-12 16:51:08 +0100
committerHarald Jörg <Harald.Joerg@arcor.de>2018-02-12 16:51:08 +0100
commit7bb50b37e22d059b5aef609dfd5ee89c9fb99954 (patch)
tree7bb51471a46a62040b69777c57bd4c01921d1de9 /lib/Net/GitHub/V3/Issues.pm
parent6c286b39e85053051ab01de73fe08b2ce4e44b43 (diff)
Initial patch for item-per-item pagination for the Issues submodule
Diffstat (limited to 'lib/Net/GitHub/V3/Issues.pm')
-rw-r--r--lib/Net/GitHub/V3/Issues.pm87
1 files changed, 75 insertions, 12 deletions
diff --git a/lib/Net/GitHub/V3/Issues.pm b/lib/Net/GitHub/V3/Issues.pm
index dd6bb47..b41ed3c 100644
--- a/lib/Net/GitHub/V3/Issues.pm
+++ b/lib/Net/GitHub/V3/Issues.pm
@@ -11,20 +11,54 @@ with 'Net::GitHub::V3::Query';
sub issues {
my $self = shift;
- my $args = @_ % 2 ? shift : { @_ };
+ return $self->query(_issues_arg2url(@_));
+}
+
+sub next_issue {
+ my $self = shift;
+
+ return $self->next(_issues_arg2url(@_));
+}
+
+sub close_issue {
+ my $self = shift;
+
+ return $self->close(_issues_arg2url(@_));
+}
+
+
+sub _issues_arg2url {
+ my $args = @_ % 2 ? shift : { @_ };
my @p;
foreach my $p (qw/filter state labels sort direction since/) {
push @p, "$p=" . $args->{$p} if exists $args->{$p};
}
my $u = '/issues';
$u .= '?' . join('&', @p) if @p;
- return $self->query($u);
+ return $u;
}
sub repos_issues {
my $self = shift;
+ return $self->query($self->_repos_issues_arg2url(@_));
+}
+
+sub next_repos_issue {
+ my $self = shift;
+
+ return $self->next($self->_repos_issues_arg2url(@_));
+}
+
+sub close_repos_issue {
+ my $self = shift;
+
+ return $self->close($self->_repos_issues_arg2url(@_));
+}
+
+sub _repos_issues_arg2url {
+ my $self = shift;
if (@_ < 2) {
unshift @_, $self->repo;
unshift @_, $self->u;
@@ -37,7 +71,7 @@ sub repos_issues {
}
my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/issues';
$u .= '?' . join('&', @p) if @p;
- return $self->query($u);
+ return $u;
}
## build methods on fly
@@ -48,32 +82,32 @@ my %__methods = (
update_issue => { url => "/repos/%s/%s/issues/%s", method => 'PATCH', args => 1 },
## http://developer.github.com/v3/issues/comments/
- comments => { url => "/repos/%s/%s/issues/%s/comments" },
+ comments => { url => "/repos/%s/%s/issues/%s/comments", paginate => 1 },
comment => { url => "/repos/%s/%s/issues/comments/%s" },
create_comment => { url => "/repos/%s/%s/issues/%s/comments", method => 'POST', args => 1 },
update_comment => { url => "/repos/%s/%s/issues/comments/%s", method => 'PATCH', args => 1 },
delete_comment => { url => "/repos/%s/%s/issues/comments/%s", method => 'DELETE', check_status => 204 },
# http://developer.github.com/v3/issues/events/
- events => { url => "/repos/%s/%s/issues/%s/events" },
- repos_events => { url => "/repos/%s/%s/issues/events" },
+ events => { url => "/repos/%s/%s/issues/%s/events", paginate => 1 },
+ repos_events => { url => "/repos/%s/%s/issues/events" , paginate => 1 },
event => { url => "/repos/%s/%s/issues/events/%s" },
# http://developer.github.com/v3/issues/labels/
- labels => { url => "/repos/%s/%s/labels" },
+ labels => { url => "/repos/%s/%s/labels", paginate => 1 },
label => { url => "/repos/%s/%s/labels/%s" },
create_label => { url => "/repos/%s/%s/labels", method => 'POST', args => 1 },
update_label => { url => "/repos/%s/%s/labels/%s", method => 'PATCH', args => 1 },
delete_label => { url => "/repos/%s/%s/labels/%s", method => 'DELETE', check_status => 204 },
- issue_labels => { url => "/repos/%s/%s/issues/%s/labels" },
+ issue_labels => { url => "/repos/%s/%s/issues/%s/labels", paginate => 1 },
create_issue_label => { url => "/repos/%s/%s/issues/%s/labels", method => 'POST', args => 1 },
delete_issue_label => { url => "/repos/%s/%s/issues/%s/labels/%s", method => 'DELETE', check_status => 204 },
replace_issue_label => { url => "/repos/%s/%s/issues/%s/labels", method => 'PUT', args => 1 },
delete_issue_labels => { url => "/repos/%s/%s/issues/%s/labels", method => 'DELETE', check_status => 204 },
- milestone_labels => { url => "/repos/%s/%s/milestones/%s/labels" },
+ milestone_labels => { url => "/repos/%s/%s/milestones/%s/labels", paginate => 1 },
# http://developer.github.com/v3/issues/milestones/
- milestone => { url => "/repos/%s/%s/milestones/%s" },
+ milestone => { url => "/repos/%s/%s/milestones/%s", paginate => 1 },
create_milestone => { url => "/repos/%s/%s/milestones", method => 'POST', args => 1 },
update_milestone => { url => "/repos/%s/%s/milestones/%s", method => 'PATCH', args => 1 },
delete_milestone => { url => "/repos/%s/%s/milestones/%s", method => 'DELETE', check_status => 204 },
@@ -85,6 +119,24 @@ __build_methods(__PACKAGE__, %__methods);
sub milestones {
my $self = shift;
+ return $self->query($self->_milestones_arg2url(@_));
+}
+
+sub next_milestone {
+ my $self = shift;
+
+ return $self->next($self->_milestones_arg2url(@_));
+}
+
+sub close_milestone {
+ my $self = shift;
+
+ return $self->close($self->_milestones_arg2url(@_));
+}
+
+sub _milestones_arg2url {
+ my $self = shift;
+
if (@_ < 3) {
unshift @_, $self->repo;
unshift @_, $self->u;
@@ -97,7 +149,7 @@ sub milestones {
}
my $u = "/repos/" . uri_escape($user) . "/" . uri_escape($repos) . '/milestones';
$u .= '?' . join('&', @p) if @p;
- return $self->query($u);
+ return $u;
}
no Moo;
@@ -130,6 +182,10 @@ L<http://developer.github.com/v3/issues/>
my @issues = $issue->issues();
my @issues = $issue->issues(filter => 'assigned', state => 'open');
+ while (my $next_issue = $issues->next_issue(...)) { ...; }
+
+Returns issues assigned to the authenticated user.
+
=back
@@ -153,6 +209,7 @@ B<To ease the keyboard, we provied two ways to call any method which starts with
my @issues = $issue->repos_issues($user, $repos);
my @issues = $issue->repos_issues( { state => 'open' } );
my @issues = $issue->repos_issues($user, $repos, { state => 'open' } );
+ while (my $r_issue = $issue->next_repos_issue(...)) { ...; }
=item issue
@@ -196,6 +253,7 @@ L<http://developer.github.com/v3/issues/comments/>
=item delete_comment
my @comments = $issue->comments($issue_number);
+ while (my $comment = $issue->next_comment($issue_number)) { ...; }
my $comment = $issue->comment($comment_id);
my $comment = $issue->create_comment($issue_number, {
"body" => "a new comment"
@@ -218,7 +276,9 @@ L<http://developer.github.com/v3/issues/events/>
=item repos_events
my @events = $issue->events($issue_number);
+ while (my $event = $issue->next_event($issue_number)) { ...; }
my @events = $issue->repos_events;
+ while (my $r_event = $issue->next_repos_event) { ...; }
my $event = $issue->event($event_id);
=back
@@ -240,6 +300,7 @@ L<http://developer.github.com/v3/issues/labels/>
=item delete_label
my @labels = $issue->labels;
+ while (my $label = $issue->next_label) { ...; }
my $label = $issue->label($label_name);
my $label = $issue->create_label( {
"name" => "API",
@@ -263,12 +324,13 @@ L<http://developer.github.com/v3/issues/labels/>
=item milestone_labels
- my @labels = $issue->issue_label($issue_number);
+ my @labels = $issue->issue_labels($issue_number);
my @labels = $issue->create_issue_label($issue_number, ['New Label']);
my $st = $issue->delete_issue_label($issue_number, $label_name);
my @labels = $issue->replace_issue_label($issue_number, ['New Label']);
my $st = $issue->delete_issue_labels($issue_number);
my @lables = $issue->milestone_labels($milestone_id);
+ while (my $label = $issue->next_milestone_label($milestone_id)) { ...; }
=back
@@ -290,6 +352,7 @@ L<http://developer.github.com/v3/issues/milestones/>
my @milestones = $issue->milestones;
my @milestones = $issue->milestones( { state => 'open' } );
+ while (my $milestone = $issue->next_milestone( ... )) { ...; }
my $milestone = $issue->milestone($milestone_id);
my $milestone = $issue->create_milestone( {
"title" => "String",