Skip to content

Commit b41d951

Browse files
authored
Merge pull request #988 from metacpan/mickey/add_versions_plain_mode
GH#927 Add plain mode + version filter to release/versions endpoint
2 parents 6e3a37b + 8fc0ac0 commit b41d951

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

lib/MetaCPAN/Query/Release.pm

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -560,11 +560,28 @@ sub all_by_author {
560560
}
561561

562562
sub versions {
563-
my ( $self, $dist ) = @_;
563+
my ( $self, $dist, $versions ) = @_;
564564

565565
my $size = $dist eq 'perl' ? 1000 : 250;
566+
567+
my $query;
568+
569+
if ( @{$versions} ) {
570+
$query = {
571+
bool => {
572+
must => [
573+
{ term => { distribution => $dist } },
574+
{ terms => { version => $versions } },
575+
]
576+
}
577+
};
578+
}
579+
else {
580+
$query = { term => { distribution => $dist } };
581+
}
582+
566583
my $body = {
567-
query => { term => { distribution => $dist } },
584+
query => $query,
568585
size => $size,
569586
sort => [ { date => 'desc' } ],
570587
fields => [

lib/MetaCPAN/Server/Controller/Release.pm

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,21 @@ sub all_by_author : Path('all_by_author') : Args(1) {
8686

8787
sub versions : Path('versions') : Args(1) {
8888
my ( $self, $c, $dist ) = @_;
89+
my %params = %{ $c->req->params }{qw( plain versions )};
8990
$c->add_dist_key($dist);
9091
$c->cdn_max_age('1y');
91-
$c->stash_or_detach( $self->model($c)->versions($dist) );
92+
my $data = $self->model($c)
93+
->versions( $dist, [ split /,/, $params{versions} || '' ] );
94+
95+
if ( $params{plain} ) {
96+
my $data = join "\n",
97+
map { join "\t", @{$_}{qw/ version download_url /} }
98+
@{ $data->{releases} };
99+
$c->res->body($data);
100+
}
101+
else {
102+
$c->stash_or_detach($data);
103+
}
92104
}
93105

94106
sub top_uploaders : Path('top_uploaders') : Args() {

0 commit comments

Comments
 (0)