NAME
Mock::Data::Template - Create a generator that plugs other templates into a string
SYNOPSIS
my $mock= Mock::Data->new(
generators => {
first_name => ['Alex','Pat'],
last_name => ['Smith','Jones'],
name => Mock::Data::Template->new("{first_name} {last_name}"),
ten_words => "{join word count=10}",
}
);
DESCRIPTION
Mock::Data provides a convenient and simple templating system where "{...}"
in the text gets replaced by the output of another generator. The contents of the curly braces can be a simple template name (which is found by name in the collection of generators of the current Mock::Data
) or it can include parameters, both positional and named.
SYNTAX
# Call without parameters
"literal text {template_name} literal text"
# Call with positional parameters
"literal text {template_name literal_param_1 literal_param_2} literal text"
# Call with named parameters
"literal text {template_name param5=literal_val} literal text"
# Call with whitespace in parameter (hex escapes)
"literal text {template_name two{#20}words} literal text"
# Call with zero-length string parameter (prefix => "")
"literal text {template_name prefix={}}"
# Call with nested templates
"{template1 text{#20}with{#20}{template2}{#20}embedded}"
CONSTRUCTOR
new
Mock::Data::Template->new($template);
...->new(template => $template);
This constructor only accepts one attribute, template
, which will be immediately parsed to check for syntax errors. Note that references to other generators are not resolved until the template is executed, which may cause exceptions if generators of those names are not present in the Mock::Data
instance.
Instances of Mock::Data::Template
do not hold references to the Mock::Data
or anything in it, and may be shared freely.
ATTRIBUTES
template
The template string that was passed to the constructor
METHODS
compile
Return a coderef that executes the generator.
generate
Evaluate the template on the current Mock::Data and return the string.
to_string
Templates stringify as "template('original_text')"
parse_template
my $tree= Mock::Data::Template->parse_template("{a}{b}{c {d}}");
my $sub= Mock::Data::Template->parse_template("{a}{b}{c {d}}", { compile => 1 });
Class or instance method. This parses a template string, returning a scalar, or an arrayref of parts where scalars are literal strings and arrayrefs represent a call to another generator. Arrayrefs in the parameter list of the call to a generator represent templates, and arrayrefs within that represent call, and arrayrefs within that represent templates, and so on.
If the compile
flag is given, this returns a coderef instead of an arrayref (but can still return a plain scalar). The coderef matches the API for generators, taking a reference to Mock::Data as the first parameter.
AUTHOR
Michael Conrad <mike@nrdvana.net>
VERSION
version 0.04
COPYRIGHT AND LICENSE
This software is copyright (c) 2024 by Michael Conrad.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.