App-AcmeCpanauthors

 view release on metacpan or  search on metacpan

lib/App/AcmeCpanauthors.pm  view on Meta::CPAN

    my $detail = $args{detail};
    my $module = $args{module};

    if ($action eq 'list_installed') {

        my @res;
        for (@{ _list_installed() }) {
            if ($detail) {
                push @res, $_;
            } else {
                push @res, $_->{name};
            }
        }
        [200, "OK", \@res,
         {('cmdline.default_format' => 'text') x !!$detail}];

    } elsif ($action eq 'list_cpan') {

        my @methods = $args{lcpan} ?
            ('lcpan', 'metacpan') : ('metacpan', 'lcpan');

      METHOD:
        for my $method (@methods) {
            if ($method eq 'lcpan') {
                unless (eval { require App::lcpan::Call; 1 }) {
                    warn "App::lcpan::Call is not installed, skipped listing ".
                        "modules from local CPAN mirror\n";
                    next METHOD;
                }
                my $res = App::lcpan::Call::call_lcpan_script(
                    argv => [
                        qw/mods --namespace Acme::CPANAuthors/,
                        ("-l") x !!$detail,
                    ],
                );
                return $res if $res->[0] != 200;
                if ($detail) {
                    return [200, "OK",
                            [grep {!_should_skip($_->{module})}
                                 map {$_->{module} =~ s/\AAcme::CPANAuthors:://; $_}
                                     grep {$_->{module} =~ /Acme::CPANAuthors::/} sort @{$res->[2]}]];
                } else {
                    return [200, "OK",
                            [grep {!_should_skip($_)}
                                 map {my $ac_mod = $_; $ac_mod =~ s/\AAcme::CPANAuthors:://; $ac_mod }
                                     grep {/Acme::CPANAuthors::/} sort @{$res->[2]}]];
                }
            } elsif ($method eq 'metacpan') {
                unless (eval { require MetaCPAN::Client; 1 }) {
                    warn "MetaCPAN::Client is not installed, skipped listing ".
                        "modules from MetaCPAN\n";
                    next METHOD;
                }
                my $mcpan = MetaCPAN::Client->new;
                my $rs = $mcpan->module({
                        'module.name'=>'Acme::CPANAuthors::*',
                    });
                my @res;
                while (my $row = $rs->next) {
                    my $mod = $row->module->[0]{name};
                    say "D: mod=$mod" if $ENV{DEBUG};
                    $mod =~ s/\AAcme::CPANAuthors:://;
                    next if _should_skip($mod);
                    push @res, $mod unless grep {$mod eq $_} @res;
                }
                warn "Empty result from MetaCPAN\n" unless @res;
                return [200, "OK", [sort @res]];
            }
        }
        return [412, "Can't find a way to list CPAN mirrors"];

    } elsif ($action eq 'list_ids') {

        return [400, "Please specify module"] unless $module;

        require Acme::CPANAuthors;
        my $authors = Acme::CPANAuthors->new($module);
        [200, "OK", [$authors->id]];

    } else {

        [400, "Unknown action '$action'"];

    }
}

1;
# ABSTRACT: Unofficial CLI for Acme::CPANAuthors

__END__

=pod

=encoding UTF-8

=head1 NAME

App::AcmeCpanauthors - Unofficial CLI for Acme::CPANAuthors

=head1 VERSION

This document describes version 0.004 of App::AcmeCpanauthors (from Perl distribution App-AcmeCpanauthors), released on 2023-06-17.

=head1 SYNOPSIS

See the included script L<acme-cpanauthors>.

=head1 FUNCTIONS


=head2 acme_cpanauthors

Usage:

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

Unofficial CLI for Acme::CPANAuthors.

Examples:

=over



( run in 3.260 seconds using v1.01-cache-2.11-cpan-5e09290becf )