NAME
Dist::Zilla::Plugin::Templates::Manual - Templates
plugin user manual
VERSION
Version v0.6.1, released on 2015-10-31 22:59 UTC.
WHAT?
Dist-Zilla-Plugin-Templates
(or just Templates
) is a Dist-Zilla
plugin allowing developers to insert fragments of Perl code into arbitrary text files, which become templates. When building a distribution with Dist::Zilla
, Templates
plugin evaluates these fragments, and replaces each fragment with result of its evaluation.
This is Templates
user manual. Read this if you want to convert any text file into template.
If you are going to hack or extend Dist-Zilla-Plugin-Templates
, read the module documentation. General topics like getting source, building, installing, bug reporting and some others are covered in the README.
SYNOPSIS
In your dist.ini:
name = Assa
version = 0.007
…
[Templates]
templates = :InstallModules
; ^ Template files,
; all .pm and .pod files in this example.
package = MY
; ^ Evaluate Perl fragments in context
; of this package.
prepend = use autodie ':all';
prepend = use Path::Tiny;
; ^ Code to execute in the beginning of
; each fragment.
…
In lib/Assa.pm:
package Assa;
our $VERSION = '{{ $dist->version }}';
…
1;
=head1 RATIONALE
{{
# Include content of doc/rationale.pod file
# (with expanding templates, if any):
include( "doc/rationale.pod" )->fill_in;
}}
=head1 EXAMPLES
=head2 example.pl
{{
# Include content of ex/example.pl file,
# strip trailing newlines,
# indent it to make it verbatim:
include( "ex/example.pl" )->chomp->indent;
}}
=head1 COPYRIGHT AND LICENSE
{{ $dist->license->notice }}
=cut
DESCRIPTION
TODO
Predefined Variables
$dist
Reference to Dist::Zilla
object. Primary purpose of the variable is providing access to the distribution properties, like $dist->version
, $dist->name
, $dist->version
, etc, but $dist
also gives full access to Dist::Zilla
object.
$plugin
Reference to the plugin (usually to the Templates
, or to its descendant, if someone creates it). There is no much meaning in it, though. The variable is provided for compatibility with GatherDir::Template
plugin. However, the variable can be used for debug or error reporting, e. g.:
$plugin->log_debug( … );
$plugin->log( … );
Predefined Functions
include
include( $filename )
The function include
returns a reference to Dist::Zilla::Plugin::Templates::File
object (which is a descendant of Dist::Zilla::File::InMemory
class). The object being evaluated in string context returns the file content, so
{{ include( 'ex/example.pl' )->content; }}
can be shortened to
{{ include( 'ex/example.pl' ); }}
with the same result.
Dist::Zilla::Plugin::Templates::File
defines few methods which can be useful in Perl code and/or POD templates:
{{ include( 'ex/example.pl' )->indent; }}
{{
include( 'doc/caveats.pod' )->fill_in .
include( 'doc/feedback.pod' )->fill_in;
}}
Since many Dist::Zilla::Plugin::Templates::File
methods return self-reference, calls may be chained:
{{ include( 'ex/example.pl' )->fill_in->chomp->indent; }}
See Dist::Zilla::Plugin::Templates::File
for the list of methods.
OPTIONS
The plugin defines only one option templates
. Other options (package
, prepend
, delimiter
, …) come from TextTemplater
role, so see TextTemplater
role manual for details.
template
templates
Name of file finder to provide files to be treated as templates. The default value is :NoFiles
. Use any of standard finders like :MainModule
, :InstallModules
, :AllFiles
(see "default_finders" in Dist::Zilla::Role::FileFinderUser), or create your own finder with FileFinder::ByName
and FileFinder::Filter
plugins.
Option may be specified several times, e. g.:
templates = :InstallModules
templates = :TestFiles
Each selected file will be processed only once, even if a file "found" by more than one finder:
templates = :InstallModules
templates = :AllFiles
template
is an alias for templates
.
WHY?
Because I was not satisfied with existing solutions.
GatherDir::Template
(shipped as a part of Dist::Zilla
) combines two tasks: it adds files to distribution and does template processing. Such coupling introduces some limitations: All the templates must be in a separate directory, you cannot freely mix template and non-template files. If you use source manifest and adds files to distribution with Manifest::Read
or GatherFromManifest
plugins, you cannot manifest your templates — it causes "attempt to add filename multiple times" error.
TemplateFiles
solves this problem, but has its own limitations. It requires to list all the templates individually, you cannot use Dist::Zilla
file finders to declare all install modules (or all tests, or all files, etc).
Both GatherDir::Template
and TemplateFiles
suffer from disadvantages of Dist::Zilla
TextTemplate
role: lack of control over Text::Template
engine and awful error reporting.
Thus, Templates
plugin:
Uses
TextTemplater
role to provide better control overText::Template
engine and better error reporting.Uses
Dist::Zilla
file finders to select files.
EXAMPLES
TODO:
SEE ALSO
Dist::Zilla
-
Distribution builder.
Dist::Zilla::Role::TextTemplate
-
Bridge between
Dist::Zilla
andText::Template
, provides templating capabilities toDist::Zilla
plugins. It is a part ofDist::Zilla
distribution. It has limited template engine control and awful error reporting (as of v5.037). Dist::Zilla::Role::TextTemplater
-
An alternative to standard
TextTemplate
, it uses the same template engine,Text::Template
, but provides better engine control and error reporting. Dist::Zilla::Plugin::TemplateFiles
-
Alternative approach. It does not use file finders, so you have to specify every template file individually. It also uses
Dist::Zilla
standardTextTemplate
role with all the subsequences. Dist::Zilla::Plugin::GatherDir::Template
-
A combo of file gathering and templating capabilities. It uses standard
TextTemplate
role. Text::Template
-
The great templating engine used by both
TextTemplate
andTextTemplater
roles. Dist::Zilla::Plugin::Templates
AUTHOR
Van de Bugger <van.de.bugger@gmail.com>
COPYRIGHT AND LICENSE
Copyright (C) 2015 Van de Bugger
License GPLv3+: The GNU General Public License version 3 or later <http://www.gnu.org/licenses/gpl-3.0.txt>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.