File Coverage

blib/lib/Data/Unixish/subsort.pm
Criterion Covered Total %
statement 36 36 100.0
branch 1 2 50.0
condition n/a
subroutine 8 8 100.0
pod 1 1 100.0
total 46 47 97.8


line stmt bran cond sub pod time code
1             package Data::Unixish::subsort;
2              
3             our $DATE = '2019-10-26'; # DATE
4             our $VERSION = '1.571'; # VERSION
5              
6 1     1   543 use 5.010;
  1         7  
7 1     1   5 use strict;
  1         2  
  1         22  
8 1     1   422 use syntax 'each_on_array'; # to support perl < 5.12
  1         24342  
  1         5  
9 1     1   3591 use warnings;
  1         2  
  1         31  
10             #use Log::Any '$log';
11              
12 1     1   454 use Data::Unixish::Util qw(%common_args);
  1         4  
  1         311  
13              
14             our %SPEC;
15              
16             $SPEC{subsort} = {
17             v => 1.1,
18             summary => 'Sort items using Sort::Sub routine',
19             args => {
20             %common_args,
21             routine => {
22             summary => 'Sort::Sub routine name',
23             schema=>['str*', match=>qr/\A\w+\z/],
24             req => 1,
25             pos => 0,
26             },
27             reverse => {
28             summary => 'Whether to reverse sort result',
29             schema=>[bool => {default=>0}],
30             cmdline_aliases => { r=>{} },
31             },
32             ci => {
33             summary => 'Whether to ignore case',
34             schema=>[bool => {default=>0}],
35             cmdline_aliases => { i=>{} },
36             },
37             },
38             tags => [qw/ordering/],
39             };
40             sub subsort {
41 3     3 1 14 my %args = @_;
42 3         8 my ($in, $out) = ($args{in}, $args{out});
43 3 50       17 my $routine = $args{routine} or return [400, "Please specify routine"];
44 3         6 my $reverse = $args{reverse};
45 3         6 my $ci = $args{ci};
46              
47 1     1   8 no warnings;
  1         1  
  1         36  
48 1     1   5 no strict 'refs';
  1         1  
  1         186  
49 3         6 my @buf;
50              
51             # special case
52 3         15 while (my ($index, $item) = each @$in) {
53 9         28 push @buf, $item;
54             }
55              
56 3         1109 require "Sort/Sub/$routine.pm";
57 3         327 my $gen_sorter = \&{"Sort::Sub::$routine\::gen_sorter"};
  3         14  
58 3         11 my $sorter = $gen_sorter->($reverse, $ci);
59              
60 3         4980 @buf = sort {$sorter->($a, $b)} @buf;
  9         576  
61              
62 3         246 push @$out, $_ for @buf;
63              
64 3         27 [200, "OK"];
65             }
66              
67             1;
68             # ABSTRACT: Sort items using Sort::Sub routine
69              
70             __END__