NAME
App::ModuleFeaturesUtils - CLI Utilities related to Module::Features
VERSION
This document describes version 0.006 of App::ModuleFeaturesUtils (from Perl distribution App-ModuleFeaturesUtils), released on 2021-08-31.
DESCRIPTION
This distribution includes the following utilities:
FUNCTIONS
check_feature_set_spec
Usage:
check_feature_set_spec(
%args
) -> [
$status_code
,
$reason
,
$payload
, \
%result_meta
]
Check specification in %FEATURES_DEF in Modules::Features::* module.
Examples:
Check %FEATURES_DEF in Module::Features::TextTable:
check_feature_set_spec(
feature_set_name
=>
"TextTable"
);
# -> [200, "OK", undef, { "func.warnings" => [] }]
This function is not exported.
Arguments ('*' denotes required arguments):
feature_set_data => hash
feature_set_name => perl::modulefeatures::modname
Returns an enveloped result (an array).
First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata.
Return value: (any)
check_features_decl
Usage:
check_features_decl(
%args
) -> [
$status_code
,
$reason
,
$payload
, \
%result_meta
]
Check %FEATURES in a module (or given in argument).
Examples:
Check feature declaration (%FEATURES) in a module:
check_features_decl(
module
=>
"Text::Table::Sprintf"
);
# -> [200, undef, undef, {}]
This function is not exported.
Arguments ('*' denotes required arguments):
features_decl_data => hash
module => perl::modname
Returns an enveloped result (an array).
First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata.
Return value: (any)
check_module_features
Usage:
check_module_features(
%args
) -> [
$status_code
,
$reason
,
$payload
, \
%result_meta
]
Check %FEATURES in a module and return the value of specified feature.
Examples:
Check all features declared in a module:
check_module_features(
module
=>
"Text::Table::Sprintf"
);
Result:
[
200,
"OK"
,
{
TextTable
=> {
can_align_cell_containing_color_code
=> 0,
can_align_cell_containing_newline
=> 0,
can_align_cell_containing_wide_character
=> 0,
can_color
=> 0,
can_color_theme
=> 0,
can_colspan
=> 0,
can_customize_border
=> 0,
can_halign
=> 0,
can_halign_individual_cell
=> 0,
can_halign_individual_column
=> 0,
can_halign_individual_row
=> 0,
can_hpad
=> 0,
can_hpad_individual_cell
=> 0,
can_hpad_individual_column
=> 0,
can_hpad_individual_row
=> 0,
can_rowspan
=> 0,
can_set_cell_height
=> 0,
can_set_cell_height_of_individual_row
=> 0,
can_set_cell_width
=> 0,
can_set_cell_width_of_individual_column
=> 0,
can_use_box_character
=> 0,
can_valign
=> 0,
can_valign_individual_cell
=> 0,
can_valign_individual_column
=> 0,
can_valign_individual_row
=> 0,
can_vpad
=> 0,
can_vpad_individual_cell
=> 0,
can_vpad_individual_column
=> 0,
can_vpad_individual_row
=> 0,
speed
=>
"fast"
,
},
},
{},
]
Check a single feature declared in a module:
check_module_features(
module
=>
"Text::Table::Sprintf"
,
feature_name
=>
"speed"
);
Result:
[200,
"OK"
,
"fast"
, {}]
This function is not exported.
Arguments ('*' denotes required arguments):
feature_name => str
Can be unqualified:
feature_name
or qualified with feature set name using the
::
or/
separator:Feature::SetName::feature_name
Feature/SetName/feature_name
module* => perl::modname
Returns an enveloped result (an array).
First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata.
Return value: (any)
compare_module_features
Usage:
compare_module_features(
%args
) -> [
$status_code
,
$reason
,
$payload
, \
%result_meta
]
Return a table data comparing features from several modules.
Examples:
Compare features of two modules:
compare_module_features(
modules
=> [
"Text::ANSITable"
,
"Text::Table::More"
]);
Result:
[
200,
"OK"
,
[
{
"feature_set"
=>
"PerlTrove"
,
"feature"
=>
"Development Status"
,
"Text::ANSITable"
=>
"5 - Production/Stable"
,
"Text::Table::More"
=>
"4 - Beta"
,
},
{
"feature_set"
=>
"PerlTrove"
,
"feature"
=>
"Environment"
,
"Text::ANSITable"
=>
"Console"
,
"Text::Table::More"
=>
"Console"
,
},
{
"feature_set"
=>
"PerlTrove"
,
"feature"
=>
"Intended Audience"
,
"Text::ANSITable"
=> [
"Developers"
],
"Text::Table::More"
=> [
"Developers"
],
},
{
"feature_set"
=>
"PerlTrove"
,
"feature"
=>
"License"
,
"Text::ANSITable"
=>
"OSI Approved :: Artistic License"
,
"Text::Table::More"
=>
"OSI Approved :: Artistic License"
,
},
{
"feature_set"
=>
"PerlTrove"
,
"feature"
=>
"Programming Language"
,
"Text::ANSITable"
=>
"Perl"
,
"Text::Table::More"
=>
"Perl"
,
},
{
"feature_set"
=>
"PerlTrove"
,
"feature"
=>
"Topic"
,
"Text::ANSITable"
=> [
"Software Development :: Libraries :: Perl Modules"
,
"Utilities"
,
],
"Text::Table::More"
=> [
"Software Development :: Libraries :: Perl Modules"
,
"Utilities"
,
],
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_align_cell_containing_color_code"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_align_cell_containing_newline"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_align_cell_containing_wide_character"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_color"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_color_theme"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_colspan"
,
"Text::ANSITable"
=> 0,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_customize_border"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_halign"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_halign_individual_cell"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_halign_individual_column"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_halign_individual_row"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_hpad"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_hpad_individual_cell"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_hpad_individual_column"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_hpad_individual_row"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_rowspan"
,
"Text::ANSITable"
=> 0,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_set_cell_height"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_set_cell_height_of_individual_row"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_set_cell_width"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_set_cell_width_of_individual_column"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_use_box_character"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_valign"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_valign_individual_cell"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_valign_individual_column"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_valign_individual_row"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 1,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_vpad"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_vpad_individual_cell"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_vpad_individual_column"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"can_vpad_individual_row"
,
"Text::ANSITable"
=> 1,
"Text::Table::More"
=> 0,
},
{
"feature_set"
=>
"TextTable"
,
"feature"
=>
"speed"
,
"Text::ANSITable"
=>
"slow"
,
"Text::Table::More"
=>
"slow"
,
},
],
{
"table.fields"
=> [
"feature_set"
,
"feature"
,
"Text::ANSITable"
,
"Text::Table::More"
,
],
},
]
This function is not exported.
Arguments ('*' denotes required arguments):
modules* => array[perl::modname]
Returns an enveloped result (an array).
First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata.
Return value: (any)
get_feature_set_spec
Usage:
get_feature_set_spec(
%args
) -> [
$status_code
,
$reason
,
$payload
, \
%result_meta
]
Get feature set specification.
Examples:
Example #1:
get_feature_set_spec(
feature_set_name
=>
"TextTable"
);
# -> [200, "OK", {}, {}]
This function is not exported.
Arguments ('*' denotes required arguments):
feature_set_name* => perl::modulefeatures::modname
Returns an enveloped result (an array).
First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata.
Return value: (any)
get_features_decl
Usage:
get_features_decl(
%args
) -> [
$status_code
,
$reason
,
$payload
, \
%result_meta
]
Get features declaration.
Examples:
Example #1:
get_features_decl(
module
=>
"Text::Table::Tiny"
);
Result:
[
200,
"OK"
,
{
"features"
=> {
TextTable
=> {
can_align_cell_containing_color_code
=> 1,
can_align_cell_containing_newline
=> 0,
can_align_cell_containing_wide_character
=> 0,
can_color
=> 0,
can_color_theme
=> 0,
can_colspan
=> 0,
can_customize_border
=> 1,
can_halign
=> 1,
can_halign_individual_cell
=> 0,
can_halign_individual_column
=> 1,
can_halign_individual_row
=> 0,
can_hpad
=> 0,
can_hpad_individual_cell
=> 0,
can_hpad_individual_column
=> 0,
can_hpad_individual_row
=> 0,
can_rowspan
=> 0,
can_set_cell_height
=> 0,
can_set_cell_height_of_individual_row
=> 0,
can_set_cell_width
=> 0,
can_set_cell_width_of_individual_column
=> 0,
can_use_box_character
=> 0,
can_valign
=> 0,
can_valign_individual_cell
=> 0,
can_valign_individual_column
=> 0,
can_valign_individual_row
=> 0,
can_vpad
=> 0,
can_vpad_individual_cell
=> 0,
can_vpad_individual_column
=> 0,
can_vpad_individual_row
=> 0,
speed
=>
"medium"
,
},
},
"module_v"
=> 1.02,
"x.source"
=>
"pm:Text::Table::Tiny::_ModuleFeatures"
,
},
{},
]
This function is not exported.
Arguments ('*' denotes required arguments):
module* => perl::modname
Returns an enveloped result (an array).
First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata.
Return value: (any)
list_feature_set_features
Usage:
list_feature_set_features(
%args
) -> [
$status_code
,
$reason
,
$payload
, \
%result_meta
]
List features in a feature set.
This function is not exported.
Arguments ('*' denotes required arguments):
detail => bool
Return detailed record for each result item.
feature_set_name* => perl::modulefeatures::modname
Returns an enveloped result (an array).
First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata.
Return value: (any)
list_feature_sets
Usage:
list_feature_sets(
%args
) -> [
$status_code
,
$reason
,
$payload
, \
%result_meta
]
List feature sets (in modules under Module::Features:: namespace).
Examples:
Example #1:
list_feature_sets();
Result:
[
200,
"OK"
,
[
"Dummy"
,
"PerlTrove"
,
"PythonTrove"
,
"TextTable"
],
{},
]
Show detail:
list_feature_sets();
Result:
[
200,
"OK"
,
[
"Dummy"
,
"PerlTrove"
,
"PythonTrove"
,
"TextTable"
],
{},
]
This function is not exported.
Arguments ('*' denotes required arguments):
detail => bool
Return detailed record for each result item.
Returns an enveloped result (an array).
First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata.
Return value: (any)
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/App-ModuleFeaturesUtils.
SOURCE
Source repository is at https://github.com/perlancar/perl-App-ModuleFeaturesUtils.
SEE ALSO
AUTHOR
perlancar <perlancar@cpan.org>
CONTRIBUTING
To contribute, you can send patches by email/via RT, or send pull requests on GitHub.
Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via:
% prove -l
If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla plugin and/or Pod::Weaver::Plugin. Any additional steps required beyond that are considered a bug and can be reported to me.
COPYRIGHT AND LICENSE
This software is copyright (c) 2021 by perlancar <perlancar@cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
BUGS
Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=App-ModuleFeaturesUtils
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.