package Pod::Readme::Plugin::version; use Moo::Role; our $VERSION = 'v1.2.3'; use ExtUtils::MakeMaker; use Types::Standard qw/ Bool Str /; use Pod::Readme::Types qw/ File HeadingLevel /; =head1 NAME Pod::Readme::Plugin::version - Include version in README =head1 SYNOPSIS =for readme plugin version =head1 DESCRIPTION This is a plugin for L that includes the release version. =head1 ARGUMENTS =head2 C =for readme plugin version file='lib/My/App.pm' By default, it will extract the version from the same file that the F is being extracted from. If this is a different file, then it should be specified. =head2 C =for readme plugin version title='VERSION' This argument allows you to change the title of the heading. =cut requires 'parse_cmd_args'; has 'version_file' => ( is => 'rw', isa => File, required => 0, coerce => sub { File->coerce(@_) }, lazy => 1, default => sub { my ($self) = @_; $self->input_file; }, ); has 'version_title' => ( is => 'rw', isa => Str, default => 'VERSION', lazy => 1, ); has 'version_heading_level' => ( is => 'rw', isa => HeadingLevel, default => 1, lazy => 1, ); has 'version_run' => ( is => 'rw', isa => Bool, default => 0, lazy => 1, ); around 'depends_on' => sub { my ($orig, $self) = @_; return ($self->version_file, $self->$orig); }; sub cmd_version { my ( $self, @args ) = @_; die "The version plugin can only be used once" if $self->version_run; my $res = $self->parse_cmd_args( [qw/ file title heading-level /], @args ); foreach my $key ( keys %{$res} ) { ( my $name = "version_${key}" ) =~ s/-/_/g; if ( my $method = $self->can($name) ) { $self->$method( $res->{$key} ); } else { die "Invalid key: '${key}'"; } } if ( my $file = $self->version_file ) { my $heading = $self->can( "write_head" . $self->version_heading_level ) or die "Invalid heading level: " . $self->version_heading_level; $self->$heading( $self->version_title ); $self->write_para( MM->parse_version($file) ); $self->version_run(1); } else { die "Don't know what file to determine the version from"; } } use namespace::autoclean; 1;