—use
strict;
use
warnings;
$Footprintless::App::DocumentationUtil::VERSION
=
'1.29'
;
# ABSTRACT: A utility class for generating help documentation from POD
# PODNAME: Footprintless::App::DocumentationUtil
use
File::Spec;
use
Log::Any;
my
$logger
= Log::Any->get_logger();
our
@EXPORT_OK
=
qw(
abstract
description
examples
pod_section
)
;
sub
abstract {
my
(
$self_or_class
) =
@_
;
my
$pm_file
= _pm_file(
$self_or_class
);
return
'(unknown)'
unless
(
$pm_file
);
return
Footprintless::Util::slurp(
$pm_file
) =~ /^
#+\s*ABSTRACT: (.*)$/m ? $1 : '(unknown)';
}
sub
description {
return
pod_section(
$_
[0],
'DESCRIPTION'
, 0,
qr/Description:\n/
);
}
sub
examples {
return
pod_section(
$_
[0],
'EXAMPLES'
);
}
sub
pod_section {
my
(
$self_or_class
,
$section
,
$indent
,
$remove
) =
@_
;
my
$pm_file
= _pm_file(
$self_or_class
)
||
return
$self_or_class
->abstract();
my
$pod
=
''
;
open
(
my
$output
,
'>'
, \
$pod
);
Pod::Usage::pod2usage(
-input
=>
$pm_file
,
-output
=>
$output
,
-exit
=>
"NOEXIT"
,
-verbose
=> 99,
-sections
=>
$section
,
indent
=>
$indent
);
if
(
$pod
) {
$pod
=~ s/
$remove
//m
if
(
$remove
);
chomp
(
$pod
);
}
return
$pod
;
}
sub
_pm_file {
my
(
$self_or_class
) =
@_
;
my
$class
=
ref
(
$self_or_class
) ||
$self_or_class
;
my
@pm_file_parts
=
split
( /::/,
$class
);
$pm_file_parts
[
$#pm_file_parts
] .=
'.pm'
;
my
$pm_file
= File::Spec->catfile(
@pm_file_parts
);
my
$path
=
$INC
{
$pm_file
};
unless
(
$path
) {
foreach
my
$prefix
(
@INC
) {
my
$prefix_path
= File::Spec->catfile(
$prefix
,
$pm_file
);
if
( -f
$prefix_path
) {
$path
=
$prefix_path
;
last
;
}
}
}
return
$path
;
}
1;
__END__
=pod
=head1 NAME
Footprintless::App::DocumentationUtil - A utility class for generating help documentation from POD
=head1 VERSION
version 1.29
=head1 EXPORT_OK
=head2 abstract($self_or_class)
Returns the content of the C<ABSTRACT> section of the pod for
C<$self_or_class>.
=head2 description($self_or_class)
Returns the content of the C<DESCRIPTION> section of the pod for
C<$self_or_class>.
=head2 examples($self_or_class)
Returns the content of the C<EXAMPLES> section of the pod for
C<$self_or_class>.
=head2 pod_section($self_or_class, $section, $indent, $remove)
Returns the content of the C<$section> section of the pod for
C<$self_or_class> with indent level C<$indent>. If specified,
C<$remove> a regex used to find content to remove.
=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>
=back
=cut