Dist::Zilla::Plugin::TemplateModule - a simple module-from-template plugin


Dist-Zilla documentation Contained in the Dist-Zilla distribution.

Index


Code Index:

NAME

Top

Dist::Zilla::Plugin::TemplateModule - a simple module-from-template plugin

VERSION

Top

version 4.200008

DESCRIPTION

Top

This is a ModuleMaker used for creating new Perl modules files when minting a new dist with dzil new. It uses Text::Template (via Dist::Zilla::Role::TextTemplate) to render a template into a Perl module. The template is given two variables for use in rendering: $name, the module name; and $dist, the Dist::Zilla object. The module is always created as a file under ./lib.

By default, the template looks something like this:

  use strict;
  use warnings;
  package {{ $name }};

  1;

ATTRIBUTES

Top

template

The template parameter may be given to the plugin to provide a different filename, absolute or relative to the build root.

AUTHOR

Top

Ricardo SIGNES <rjbs@cpan.org>

COPYRIGHT AND LICENSE

Top


Dist-Zilla documentation Contained in the Dist-Zilla distribution.

package Dist::Zilla::Plugin::TemplateModule;
BEGIN {
  $Dist::Zilla::Plugin::TemplateModule::VERSION = '4.200008';
}
# ABSTRACT: a simple module-from-template plugin
use Moose;
with qw(Dist::Zilla::Role::ModuleMaker Dist::Zilla::Role::TextTemplate);

use autodie;

use Data::Section 0.004 -setup; # fixed header_re
use Dist::Zilla::File::InMemory;


has template => (
  is  => 'ro',
  isa => 'Str',
  predicate => 'has_template',
);

sub make_module {
  my ($self, $arg) = @_;

  my $template;

  if ($self->has_template) {
    open my $fh, '<', $self->template;

    # Win32
    binmode $fh, ':raw';
    $template = do { local $/; <$fh> };
  } else {
    $template = ${ $self->section_data('Module.pm') };
  }

  my $content = $self->fill_in_string(
    $template,
    {
      dist => \($self->zilla),
      name => $arg->{name},
    },
  );

  (my $filename = $arg->{name}) =~ s{::}{/}g;

  my $file = Dist::Zilla::File::InMemory->new({
    name    => "lib/$filename.pm",
    content => $content,
  });

  $self->add_file($file);
}

__PACKAGE__->meta->make_immutable;
no Moose;
1;



__DATA__
__[ Module.pm ]__
use strict;
use warnings;
package {{ $name }};

1;