NAME
Kelp::Generator - Generation templates
SYNOPSIS
use Kelp::Generator;
my $gen = Kelp::Generator->new;
# get available templates
my @template = $gen->list_templates;
# get parsed files (ready to be saved)
my $files_aref = $gen->get_template($template, 'App::Name');
for my $file (@$files_aref) {
my ($file_name, $file_contents) = @$file;
}
DESCRIPTION
This is a class for discovery and parsing of generation templates for Kelp. A generation template is a set of files that can be parsed using Template::Tiny and inserted into a given directory. This class only handles the discovery and parsing of these templates. The kelp-generator
script or custom script should handle saving them in a destination directory.
TEMPLATE CREATION
Discovery
This class will look into a directory in its installation tree to discover available templates. The folder is Kelp/templates
by default and can be changed by constructing the object with different templates_dir
attribute. This means that CPAN modules can add templates to "templates" in Kelp and they will be discovered as long as they have been installed in the same root directory as Kelp without changing the contents of the package variable. Any template that can be discovered in the default directory will be usable in the kelp-generator
script.
Contents
The directory structure of Kelp/templates
directory is as follows:
+ templates
| + template_name
| - template
| - file1.pl.gen
| - NAME.pm.gen
| + another_template_name
| - template
| - file1.tt
Each template directory must have a file named template
, which lists all the files in that template like this:
file1.pl.gen
NAME.pm.gen
Any file that is not listed will not be used.
Template files
Each template file can contain Template code:
My::App::Name eq [% name %]
Name eq [% module_file %]
My/App eq [% module_path %]
It will be replaced accordingly, but only if the file ends with .gen
extension. This extension also allows template files not to be confused with real files, so should be used most of the time. The only case where the .gen
extension should not be used in when generating template files using the same syntax as Template, because there's no way to tell which directives should not be interpreted right away.
Files can also contain NAME, FILE, PATH and DOT in their name, which will be replaced by name
, module_file
, module_path
and .
.
INTERFACE
Methods
new
my $gen = Kelp::Generator->new(templates_dir => $dir);
Constructs a Kelp::Generator instance. templates_dir
is optional.
templates_dir
Returns the current templates directory. Can be changed by passing an argument of this name to new
get_template
my $template_aref = $gen->get_template($template_name, $application_name, %more_vars);
Finds and parses template with Template::Tiny, returning an array reference of files:
['file1.pl', 'contents'],
['replaced_name.pm', 'contents'],
...
Filenames will have directories and .gen
suffix stripped and all placeholders replaced. File contents will be ready for saving.
%more_vars
can be specified to insert more variables into the template.
list_templates
my @templates = $gen->list_templates;
Discovers and returns all the generation template names as a list.
get_template_files
my @files = $gen->get_template_files($template_name);
Returns the list of template files for a given template. Will return full paths, not just file names.