Skip to content

Commit a5d522f

Browse files
committed
added support for 'latest' in versions param of release/versions/DIST
When using versions (CSV) you can use 'latest' as a valid verison number to refer to the release marked with 'status=latest' Examples: https://fastapi.metacpan.org/v1/release/versions/perl?versions=latest https://fastapi.metacpan.org/v1/release/versions/perl?versions=5.26.0,latest
1 parent b41d951 commit a5d522f

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

lib/MetaCPAN/Query/Release.pm

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -566,12 +566,39 @@ sub versions {
566566

567567
my $query;
568568

569+
# 'versions' param was sent
569570
if ( @{$versions} ) {
571+
my $filter_versions;
572+
573+
# we only want 'latest' version
574+
if ( @{$versions} == 1 and $versions->[0] eq 'latest' ) {
575+
$filter_versions = { term => { status => 'latest' } };
576+
}
577+
else {
578+
if ( grep $_ eq 'latest', @{$versions} ) {
579+
580+
# we want a combination of 'latest' and specific versions
581+
@{$versions} = grep $_ ne 'latest', @{$versions};
582+
$filter_versions = {
583+
bool => {
584+
should => [
585+
{ terms => { version => $versions } },
586+
{ term => { status => 'latest' } },
587+
],
588+
}
589+
};
590+
}
591+
else {
592+
# we only want specific versions
593+
$filter_versions = { terms => { version => $versions } };
594+
}
595+
}
596+
570597
$query = {
571598
bool => {
572599
must => [
573-
{ term => { distribution => $dist } },
574-
{ terms => { version => $versions } },
600+
{ term => { distribution => $dist } },
601+
$filter_versions
575602
]
576603
}
577604
};

0 commit comments

Comments
 (0)