App-td
view release on metacpan or search on metacpan
lib/App/td.pm view on Meta::CPAN
our %actions = (
'actions' => {summary=>'List available actions', req_input=>0},
'as-aoaos' => {summary=>'Convert table data to aoaos form'},
'as-aohos' => {summary=>'Convert table data to aohos form'},
'as-csv' => {summary=>'Convert table data to CSV'},
'avg-row' => {summary=>'Append an average row'},
'avg' => {summary=>'Return average of all numeric columns'},
'cat' => {summary=>'Pass table data'},
'colcount-row' => {summary=>'Append a row containing number of columns'},
'colcount' => {summary=>'Count number of columns'},
'colnames' => {summary=>'Return only the row containing column names'},
'colnames-row' => {summary=>'Append a row containing column names'},
'head' => {summary=>'Only return the first N rows'},
'info' => {summary=>'Check if input is table data and show information about the table'},
'nauniq' => {summary=>'Remove non-adjacent duplicates'},
'pick' => {summary=>'Pick one or more random rows, alias for `shuf`', tags=>['alias']},
'rowcount-row' => {summary=>'Count number of rows (equivalent to "wc -l" in Unix)'},
'rowcount' => {summary=>'Append a row containing rowcount'},
'rownum-col' => {summary=>'Add a column containing row number'},
'select' => {summary=>'Select one or more columns'},
'shuf' => {summary=>'Generate random permutations of rows'},
'sort' => {summary=>'Sort rows'},
'sum-row' => {summary=>'Append a row containing sums'},
'sum' => {summary=>'Return a row containing sum of all numeric columns'},
'tail' => {summary=>'Only return the last N rows'},
'transpose' => {summary=>'Transpose table'},
'uniq' => {summary=>'Remove adjacent duplicates'},
'wc-row' => {summary=>'Alias for rowcount-row', tags=>['alias']},
'wc' => {summary=>'Alias for rowcount', tags=>['alias']},
'grep-row' => {summary=>'Use Perl code to filter rows', tags=>['perl']},
'grep' => {summary=>'Alias for grep-row', tags=>['perl', 'alias']},
'grep-col' => {summary=>'Use Perl code to filter columns', tags=>['perl']},
'map-row' => {summary=>'Use Perl code to transform rows', tags=>['perl']},
'map' => {summary=>'Alias for map-row', tags=>['perl', 'alias']},
'psort' => {summary=>'Use Perl code to transform row', tags=>['perl']},
);
sub _get_table_spec_from_envres {
my $envres = shift;
my $tf = $envres->[3]{'table.fields'};
my $tfa = $envres->[3]{'table.field_aligns'};
my $tff = $envres->[3]{'table.field_formats'};
my $tfu = $envres->[3]{'table.field_units'};
return undef unless $tf; ## no critic: BuiltinFunctions::ProhibitStringyEval
my $spec = {fields=>{}};
my $i = 0;
for (@$tf) {
$spec->{fields}{$_} = {
pos=>$i,
maybe _align => $tfa->[$i],
maybe _format => $tff->[$i],
maybe _unit => $tfu->[$i],
};
$i++;
}
$spec;
}
sub _decode_json {
require Cpanel::JSON::XS;
state $json = Cpanel::JSON::XS->new->allow_nonref;
$json->decode(shift);
}
sub _get_td_obj {
require Data::Check::Structure;
my $input = shift;
my ($input_form, $input_obj, $input_form_err);
CHECK_STRUCT: {
if (Data::Check::Structure::is_aohos($input->[2])) {
$input_form = 'aohos';
my $spec = _get_table_spec_from_envres($input);
require Data::TableData::Object::aohos;
$input_obj = Data::TableData::Object::aohos->new($input->[2], $spec);
last CHECK_STRUCT;
} else {
$input_form_err ||= $Data::Check::Structure::errstr;
}
if (Data::Check::Structure::is_aoaos($input->[2])) {
$input_form = 'aoaos';
my $spec = _get_table_spec_from_envres($input);
require Data::TableData::Object::aoaos;
$input_obj = Data::TableData::Object::aoaos->new($input->[2], $spec);
last CHECK_STRUCT;
} else {
$input_form_err ||= $Data::Check::Structure::errstr;
}
if (Data::Check::Structure::is_aos($input->[2])) {
$input_form = 'aos';
require Data::TableData::Object::aos;
$input_obj = Data::TableData::Object::aos->new($input->[2]);
last CHECK_STRUCT;
} else {
$input_form_err ||= $Data::Check::Structure::errstr;
}
if (Data::Check::Structure::is_hos($input->[2])) {
$input_form = 'hos';
require Data::TableData::Object::hash;
$input_obj = Data::TableData::Object::hash->new($input->[2]);
last CHECK_STRUCT;
} else {
$input_form_err ||= $Data::Check::Structure::errstr;
}
my $form = ref($input->[2]);
$form ||= "scalar";
$input_form_err ||= "not aoaos/aohos/aos/hos ($form)";
} # CHECK
($input_form, $input_obj, $input_form_err);
}
$SPEC{td} = {
v => 1.1,
summary => 'Manipulate table data',
description => <<'_',
( run in 0.450 second using v1.01-cache-2.11-cpan-39bf76dae61 )