2013-01-09 6 views

답변

2

여기에 Redis::Client에 대한 작업을 게시 한 글은 Falling in Love with Pod::Weaver입니다. 그런 다음이

처럼 POD 쓰기

[Collect/FOO METHODS] 
command = foo_method 

[Collect/BAR METHODS] 
command = bar_method 

[Collect/BAZ METHODS] 
command = baz_method 

: 할

가장 간단한 것은 당신의 weaver.ini에 사용자 지정 Collect 지시를 추가하고과 같이, 각 유형에 다른 사용자 정의 POD 명령을 제공하여 방법을 정리하다

=foo_method blah blah 

위버는 자동으로 해당 항목을 =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 단락을 만듭니다.

+0

신속하고 유용한 답변 인 friedo에 감사드립니다. 지금 당장은 첫 번째 접근법이 저에게는 잘 작동하지만 두 번째 접근법의 가능성을 높이 평가합니다. –

+0

문제 없음 - 위버를 즐기십시오. 정말 멋진 도구입니다. – friedo