Skip to content

Commit

Permalink
Add latest option for search
Browse files Browse the repository at this point in the history
  • Loading branch information
hythm7 committed Sep 29, 2023
1 parent d6370f3 commit 9a261e1
Show file tree
Hide file tree
Showing 8 changed files with 27 additions and 4 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ Search available distributions
**options:**

<pre>
latest → latest version
relaxed → relaxed search
details → details of dist
count < number > → number of dists to be returned
Expand All @@ -137,6 +138,7 @@ norelaxed → no relaxed search
<b>Examples:</b>
<pre>
<b>pakku search dist</b> # search distributions matching dist (ignored case) on online recman
<b>pakku search latest dist</b> # show latest version
<b>pakku search norelaxed dist</b> # no relaxed search
<b>pakku search count 4 dist</b> # search dist and return the lates 4 versions only
<b>pakku search details dist</b> # search dist and list all details
Expand Down
1 change: 1 addition & 0 deletions lib/Pakku/Command/Config.rakumod
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ my class Search {

has Bool $.details;
has Bool $.relaxed;
has Bool $.latest;
has Int() $.count;

}
Expand Down
2 changes: 2 additions & 0 deletions lib/Pakku/Command/Help.rakumod
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,12 @@ method !search-help ( ) {
%search<desc> = 'Search distribution on Recman';

%search<example>.push: 'pakku search dist';
%search<example>.push: 'pakku search latest dist';
%search<example>.push: 'pakku search norelaxed dist';
%search<example>.push: 'pakku search count 5 dist';
%search<example>.push: 'pakku search details dist';

%search<opt>.push: ( 'latest' => 'latest version' );
%search<opt>.push: ( 'relaxed' => 'relaxed search' );
%search<opt>.push: ( 'count' => 'distributions count' );
%search<opt>.push: ( 'details' => 'search details' );
Expand Down
3 changes: 2 additions & 1 deletion lib/Pakku/Command/Search.rakumod
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ multi method fly (
:@spec!,
Int:D :$count = 666,
Bool:D :$relaxed = True,
Bool:D :$latest = False,
Bool:D :$details = False,

) {
Expand All @@ -20,7 +21,7 @@ multi method fly (

my $promise = start sink @spec
==> map( -> $spec { Pakku::Spec.new: $spec } )
==> map( -> $spec { self!recman.search( :$spec :$relaxed :$count ).Slip } )
==> map( -> $spec { self!recman.search( :$spec :$relaxed :$latest :$count ).Slip } )
==> grep( *.defined )
==> map( -> $meta { Pakku::Meta.new( $meta ).gist: :$details } )
==> map( -> $meta { out $meta unless self!dont } );
Expand Down
15 changes: 14 additions & 1 deletion lib/Pakku/Grammar/Cmd.rakumod
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ grammar Pakku::Grammar::Cmd {
proto token searchopt { * }
token searchopt:sym<details> { <details> }
token searchopt:sym<relaxed> { <relaxed> }
token searchopt:sym<latest> { <latest> }
token searchopt:sym<count> { <count> <.space>+ <number> }

proto token nukeopt { * }
Expand Down Expand Up @@ -430,6 +431,12 @@ grammar Pakku::Grammar::Cmd {
token relaxed:sym<nr> { <sym> }


proto token latest { * }
token latest:sym<latest> { <sym> }
token latest:sym<l> { <sym> }
token latest:sym<nolatest> { <sym> }
token latest:sym<nl> { <sym> }

proto token count { * }
token count:sym<count> { <sym> }
token count:sym<c> { <sym> }
Expand Down Expand Up @@ -943,6 +950,7 @@ class Pakku::Grammar::CmdActions {

method searchopt:sym<details> ( $/ ) { make $<details>.made }
method searchopt:sym<relaxed> ( $/ ) { make $<relaxed>.made }
method searchopt:sym<latest> ( $/ ) { make $<latest>.made }
method searchopt:sym<count> ( $/ ) { make ( count => $<number>.Int ) }

method stateopt:sym<clean> ( $/ ) { make $<clean>.made }
Expand Down Expand Up @@ -1056,11 +1064,16 @@ class Pakku::Grammar::CmdActions {
method details:sym<nd> ( $/ ) { make ( :!details ) }

method relaxed:sym<relaxed> ( $/ ) { make ( :relaxed ) }
method relaxed:sym<d> ( $/ ) { make ( :relaxed ) }
method relaxed:sym<r> ( $/ ) { make ( :relaxed ) }
method relaxed:sym<norelaxed> ( $/ ) { make ( :!relaxed ) }
method relaxed:sym<nr> ( $/ ) { make ( :!relaxed ) }


method latest:sym<latest> ( $/ ) { make ( :latest ) }
method latest:sym<l> ( $/ ) { make ( :latest ) }
method latest:sym<nolatest> ( $/ ) { make ( :!latest ) }
method latest:sym<nl> ( $/ ) { make ( :!latest ) }

method level:sym<nothing> ( $/ ) { make 'nothing' }
method level:sym<all> ( $/ ) { make 'all' }
method level:sym<debug> ( $/ ) { make 'debug' }
Expand Down
3 changes: 2 additions & 1 deletion lib/Pakku/Recman.rakumod
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,11 @@ method search (
::?CLASS:D:
Pakku::Spec::Raku:D :$spec!,
Bool:D :$relaxed!,
Bool:D :$latest!,
Int:D :$count!,

) {

flat @!recman.map: *.search: :$spec :$relaxed :$count;
flat @!recman.map: *.search: :$spec :$relaxed :$latest :$count;

}
4 changes: 3 additions & 1 deletion lib/Pakku/Recman/HTTP.rakumod
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ method search (
::?CLASS:D:
:$spec!,
:$relaxed!,
:$latest!,
:$count!,

) {
Expand All @@ -60,8 +61,9 @@ method search (
@query.push( 'ver=' ~ url-encode $ver ) if $ver;
@query.push( 'auth=' ~ url-encode $auth ) if $auth;
@query.push( 'api=' ~ url-encode $api ) if $api;
@query.push( 'count=' ~ url-encode $count ) if $count;
@query.push( 'latest=' ~ url-encode $latest ) if $latest;
@query.push( 'relaxed=' ~ url-encode $relaxed ) if $relaxed;
@query.push( 'count=' ~ url-encode $count ) if $count;

my $uri = $!location ~ '/meta/search/' ~ url-encode $name;

Expand Down
1 change: 1 addition & 0 deletions resources/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@
}
],
"search": {
"latest": false,
"details": false
},
"test": {
Expand Down

0 comments on commit 9a261e1

Please sign in to comment.