NAME

Module::Abstract::Cwalitee - Calculate the cwalitee of your module Abstract

VERSION

This document describes version 0.008 of Module::Abstract::Cwalitee (from Perl distribution Module-Abstract-Cwalitee), released on 2021-06-06.

SYNOPSIS

use Module::Abstract::Cwalitee qw(
    calc_module_abstract_cwalitee
    list_module_abstract_cwalitee_indicators
);

my $res = calc_module_abstract_cwalitee(
    abstract => 'Calculate the cwalitee of your module Abstract',
);

DESCRIPTION

What is module abstract cwalitee? A metric to attempt to gauge the quality of your module's Abstract. Since actual quality is hard to measure, this metric is called a "cwalitee" instead. The cwalitee concept follows "kwalitee" [1] which is specifically to measure the quality of CPAN distribution. I pick a different spelling to avoid confusion with kwalitee. And unlike kwalitee, the unqualified term "cwalitee" does not refer to a specific, particular subject. There can be "module abstract cwalitee" (which is handled by this module), "CPAN Changes cwalitee", and so on.

FUNCTIONS

calc_module_abstract_cwalitee

Usage:

calc_module_abstract_cwalitee(%args) -> [$status_code, $reason, $payload, \%result_meta]

Examples:

  • Example of a good Abstract:

    calc_module_abstract_cwalitee(abstract => "Calculate the frobnitz of thromblemeisters");

    Result:

    [
      200,
      "OK",
      [
        {
          indicator => "not_empty",
          num => 1,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "language_english",
          num => 2,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "no_shouting",
          num => 3,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_end_with_dot",
          num => 4,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_module_name",
          num => 5,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_multiline",
          num => 6,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_redundant",
          num => 7,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_start_with_lowercase_letter",
          num => 8,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_template",
          num => 9,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_too_long",
          num => 10,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_too_short",
          num => 11,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "Score",
          result => "100.00",
          result_summary => "11 out of 11",
        },
      ],
      { "func.score" => "100.00", "func.score_summary" => "11 out of 11" },
    ]
  • Example of a not-so-good Abstract:

    calc_module_abstract_cwalitee(abstract => "PERL MODULE TO DO SOMETHING");

    Result:

    [
      200,
      "OK",
      [
        {
          indicator => "not_empty",
          num => 1,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "language_english",
          num => 2,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "no_shouting",
          num => 3,
          result => 0,
          result_summary => "All-caps",
          severity => 3,
        },
        {
          indicator => "not_end_with_dot",
          num => 4,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_module_name",
          num => 5,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_multiline",
          num => 6,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_redundant",
          num => 7,
          result => 0,
          result_summary => "Saying 'PERL MODULE TO' is redundant, omit it",
          severity => 3,
        },
        {
          indicator => "not_start_with_lowercase_letter",
          num => 8,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_template",
          num => 9,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_too_long",
          num => 10,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        {
          indicator => "not_too_short",
          num => 11,
          result => 1,
          result_summary => "",
          severity => 3,
        },
        { indicator => "Score", result => 81.82, result_summary => "9 out of 11" },
      ],
      { "func.score" => 81.82, "func.score_summary" => "9 out of 11" },
    ]

This function is not exported by default, but exportable.

Arguments ('*' denotes required arguments):

  • abstract* => str

  • exclude_indicator => array[str]

    Do not use these indicators.

  • exclude_indicator_module => array[perl::modname]

    Do not use indicators from these modules.

  • exclude_indicator_status => array[str]

    Do not use indicators having these statuses.

  • include_indicator => array[str]

    Only use these indicators.

  • include_indicator_module => array[perl::modname]

    Only use indicators from these modules.

  • include_indicator_status => array[str] (default: ["stable"])

    Only use indicators having these statuses.

  • min_indicator_severity => uint (default: 1)

    Minimum indicator severity.

  • 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_module_abstract_cwalitee_indicators

Usage:

list_module_abstract_cwalitee_indicators(%args) -> [$status_code, $reason, $payload, \%result_meta]

Examples:

  • List all installed indicators from all modules:

    list_module_abstract_cwalitee_indicators();

    Result:

    [
      200,
      "OK",
      [
        "language_english",
        "no_shouting",
        "not_empty",
        "not_end_with_dot",
        "not_module_name",
        "not_multiline",
        "not_redundant",
        "not_start_with_lowercase_letter",
        "not_template",
        "not_too_long",
        "not_too_short",
      ],
      {},
    ]
  • List only certain names, show details:

    list_module_abstract_cwalitee_indicators(
      detail  => 1,
      include => ["not_too_short", "not_too_long", "not_template"]
    );

    Result:

    [
      200,
      "OK",
      [
        {
          module   => "Module::Abstract::Cwalitee::Core",
          name     => "not_template",
          priority => 50,
          severity => 3,
          status   => "stable",
          summary  => undef,
        },
        {
          module   => "Module::Abstract::Cwalitee::Core",
          name     => "not_too_long",
          priority => 50,
          severity => 3,
          status   => "stable",
          summary  => undef,
        },
        {
          module   => "Module::Abstract::Cwalitee::Core",
          name     => "not_too_short",
          priority => 50,
          severity => 3,
          status   => "stable",
          summary  => undef,
        },
      ],
      {},
    ]

This function is not exported by default, but exportable.

Arguments ('*' denotes required arguments):

  • detail => bool

  • exclude => array[str]

    Exclude by name.

  • exclude_module => array[perl::modname]

    Exclude by module.

  • exclude_status => array[str]

    Exclude by status.

  • include => array[str]

    Include by name.

  • include_module => array[perl::modname]

    Include by module.

  • include_status => array[str] (default: ["stable"])

    Include by status.

  • max_severity => int (default: 5)

    Maximum severity.

  • min_severity => int (default: 1)

    Minimum severity.

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/Module-Abstract-Cwalitee.

SOURCE

Source repository is at https://github.com/perlancar/perl-Module-Abstract-Cwalitee.

BUGS

Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Module-Abstract-Cwalitee

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.

SEE ALSO

[1] https://cpants.cpanauthors.org/

App::ModuleAbstractCwaliteeUtils for the CLI's.

AUTHOR

perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2021, 2019 by 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.