関連するメソッドのいくつかの小さなグループを定義する Moose クラスがいくつかあります。これらのグループをパッケージ POD で明確にしたいと考えています。
Dist::Zilla
コマンドで andPod::Weaver
を使用し=method
ます。=head2-like
コマンドの間にいくつかのコマンドを挿入して=method
、目的の効果を達成することはできますか?
関連するメソッドのいくつかの小さなグループを定義する Moose クラスがいくつかあります。これらのグループをパッケージ POD で明確にしたいと考えています。
Dist::Zilla
コマンドで andPod::Weaver
を使用し=method
ます。=head2-like
コマンドの間にいくつかのコマンドを挿入して=method
、目的の効果を達成することはできますか?
Redis::Clientでどのようにそれを行ったかについての投稿をここに書きました: Falling in Love with Pod::Weaver。
最も簡単な方法は、次のように、カスタムCollect
ディレクティブを追加weaver.ini
し、各タイプに異なるカスタム POD コマンドを与えることでメソッドを整理することです。
[Collect / FOO METHODS]
command = foo_method
[Collect / BAR METHODS]
command = bar_method
[Collect / BAZ METHODS]
command = baz_method
次に、PODを次のように記述します
=foo_method blah blah
Weaver は自動的にそれらを独自に収集します=head1
。
それよりも複雑なことをしたい場合は、独自の Pod::Weaver プラグインを作成できます。要点は、解析された POD からカスタム コマンド名を検索し、Pod::Elementalオブジェクトを返すことによってそれらを変換することです。ここに私が書いたプラグインがあります:
package Pod::Weaver::Plugin::RedisLinks;
# ABSTRACT: Add links to Redis documentation
use Moose;
with 'Pod::Weaver::Role::Transformer';
use Data::Dumper;
use Scalar::Util 'blessed';
use aliased 'Pod::Elemental::Element::Pod5::Ordinary';
sub transform_document {
my ( $self, $doc ) = @_;
my @children = $doc->children;
my @new_children;
foreach my $child( @{ $children[0] } ) {
if ( $child->can( 'command' )
&& $child->command =~ /^(?:key|str|list|hash|set|zset|conn|serv)_method/ ) {
my $meth_name = $child->content;
$meth_name =~ s/^\s*?(\S+)\s*$/$1/;
my $cmd_name = uc $meth_name;
$cmd_name =~ tr/_/ /;
my $link_name = $meth_name;
$link_name =~ tr/_/-/;
my $new_para = Ordinary->new(
content => sprintf 'Redis L<%s|%s> command.',
$cmd_name, 'http://redis.io/commands/' . $link_name );
push @new_children, $child, $new_para;
next;
}
push @new_children, $child;
}
$doc->children( \@new_children );
}
__PACKAGE__->meta->make_immutable;
1;
このtransform_document
メソッドには、解析されたドキュメントがパラメーターとして渡されます。次に、最上位のコマンドを使用して というラベル/^(?:key|str|list|hash|set|zset|conn|serv)_method/
の付いた要素を探し、名前を少し変更してから、必要なフォーマット済み POD コンテンツを含む新しい POD 段落を作成します。