Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

use strict;
$Footprintless::App::Action::VERSION = '1.29';
# ABSTRACT: A base class for actions
# PODNAME: Footprintless::App::Action
use Footprintless::App -ignore;
my $logger = Log::Any->get_logger();
sub _new {
my ( $class, $self ) = @_;
return bless( $self, $class );
}
sub abstract {
my ($self_or_class) = @_;
return Footprintless::App::DocumentationUtil::abstract($self_or_class);
}
sub description {
my ($self_or_class) = @_;
my $description = Footprintless::App::DocumentationUtil::description($self_or_class)
|| ucfirst( $self_or_class->abstract() );
if ( scalar( $self_or_class->opt_spec() ) ) {
$description .= "\n\nAvailable options:\n";
}
return $description;
}
sub prepare {
my ( $class, $app, $footprintless, $coordinate, @args ) = @_;
my ( $opts, $remaining_args, %fields ) =
$class->_process_args( \@args, $class->usage_desc(), $class->opt_spec() );
return (
$class->_new(
{ app => $app,
footprintless => $footprintless,
coordinate => $coordinate,
%fields
}
),
$opts,
$remaining_args
);
}
sub opt_spec {
return ();
}
sub usage {
return $_[0]->{usage};
}
sub usage_error {
my ( $self, $message, $coordinate ) = @_;
die( Footprintless::App::UsageException->new( $message, $coordinate ) );
}
sub validate_args { }
1;
__END__
=pod
=head1 NAME
Footprintless::App::Action - A base class for actions
=head1 VERSION
version 1.29
=head1 FUNCTIONS
=head2 abstract($self_or_class)
Returns the abstract for the action. By default it will pull it from the
C<ABSTRACT> section of the pod. This function should be called using
I<method invokation>.
=head2 description($self_or_class)
Returns the description for the action. By default it will pull it from the
C<DESCRIPTION> section of the pod. This function should be called using
I<method invokation>.
=head2 opt_spec()
Returns an options specificatino for this action according to
L<Getopt::Long::Descriptive>.
=head2 prepare($class, $app, $footprintless, $coordinate, @args)
Processes C<@args> to parse off the options, then generates a new instance
of the action implementation and returns the 3-tuple: action, options,
remaining args. See L<App::Cmd::Command::prepare> for inspiration.
=head1 METHODS
=head2 execute($opts, $args)
Executes the action.
=head2 usage()
Returns the usage object from L<Getopt::Long::Descriptive> for the action.
=head2 usage_error($message, $coordinate)
Die's with a generated message based on C<$message> and C<$coordinate>.
=head2 usage_desc()
Returns the top level usage line. See L<App::Cmd::Command::usage_desc> for
inspiration.
=head2 validate_args($opts, $args)
Performs additional validation on C<$opts> and C<$args>. Calls
L<usage_error($message, $coordinate)> if there is a problem.
=head1 AUTHOR
Lucas Theisen <lucastheisen@pastdev.com>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2016 by Lucas Theisen.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=head1 SEE ALSO
Please see those modules/websites for more information related to this module.
=over 4
=item *
L<Footprintless|Footprintless>
=item *
L<Footprintless::App::DocumentationUtil|Footprintless::App::DocumentationUtil>
=back
=for Pod::Coverage _new
=cut