From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

our $DATE = '2020-05-08'; # DATE
our $VERSION = '0.050'; # VERSION
use 5.010001;
use strict;
use App::lcpan ();
sub _init {
my %args = @_;
App::lcpan::_init(\%args, 'ro');
# collect all the functions we want to expose into App::lcpan::Daemon
# package.
{
no strict 'refs';
log_trace("Enumerating functions ...");
my $mods = PERLANCAR::Module::List::list_modules(
"App::lcpan::Cmd::", {list_modules=>1});
for my $mod (sort keys %$mods) {
my $func = $mod; $func =~ s/.+:://;
my $mod_pm = $mod; $mod_pm =~ s!::!/!g; $mod_pm .= ".pm";
require $mod_pm;
my $meta = ${"$mod\::SPEC"}{handle_cmd}
or die "$mod does not contain \$SPEC{handle_cmd}";
# we currently only support queries/ro-access to the DB (and
# filesystem), so we exclude all functions that have the tags
# 'write-to-db' or 'write-to-fs'.
if (grep {/^write-to-fs/} @{ $meta->{tags} }) {
log_info("Skipped %s (has write-to-fs tag)", $mod);
next;
} elsif (grep {/^write-to-db/} @{ $meta->{tags} }) {
log_info("Skipped %s (has write-to-db tag)", $mod);
next;
}
# remove connection args, we will connect once and provide the dbh
# to the function via _init().
my $args = $meta->{args};
for (keys %App::lcpan::common_args) { delete $args->{$_} }
# we also remove all arguments that have the 'expose-fs-path' tag
# (can expose the full path of the server's filesystem).
for (keys %$args) {
delete $args->{$_}
if grep {/^expose-fs-path$/} @{ $args->{$_}{tags} // [] };
}
# install
*{"App::lcpan::Daemon::$func"} = \&{"$mod\::handle_cmd"};
${"App::lcpan::Daemon::SPEC"}{$func} = $meta;
}
}
}
1;
# ABSTRACT: Daemon-mode lcpan
__END__
=pod
=encoding UTF-8
=head1 NAME
App::lcpan::Daemon - Daemon-mode lcpan
=head1 VERSION
This document describes version 0.050 of App::lcpan::Daemon (from Perl distribution App-lcpan-Daemon), released on 2020-05-08.
=head1 SYNOPSIS
See L<lcpand-simple> script for the L<Riap::Simple> server.
See C<www/lcpand.psgi> in this distribution's share files for the PSGI
application.
=head1 HOMEPAGE
Please visit the project's homepage at L<https://metacpan.org/release/App-lcpan-Daemon>.
=head1 SOURCE
=head1 BUGS
Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=App-lcpan-Daemon>
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.
=head1 SEE ALSO
L<App::lcpan>
=head1 AUTHOR
perlancar <perlancar@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2020, 2017, 2016 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.
=cut