The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Contentment::Generator::Template - Generator for Template Toolkit templates

SYNOPSIS

  my $source = <<'END_OF_TEMPLATE';
  Hello [% args.who %]!

  [% META
      title = 'Testing'
      description = 'This is a test.' 
      kind = 'text/plain' %]
  END_OF_TEMPLATE

  my $generator = Contentment::Generator::Template->new({
      source => $source,
  });

  my $title = $generator->get_property('title');

  $generator->generate({ who => 'World' });

DESCRIPTION

A generator for Template Toolkit templates.

$generator = Contentment::Generator::Template->new(\%args)

This constructs a template generator. It takes the following arguments:

source (required)

This is the source template to generate from. It takes the same kinds of items as the "source" option to the constructor Contentment::Generator::Plain takes.

properties (optional, defaults to {})

This is the set of properties to start with. These will be overridden by any properties in the source.

variables (optional, defaults to {})

This allows the caller to set additional "global" variables to pass into the template. Arguments are normally passed in the "args" hash. This creates additional top-level variables. For example:

  my $generator = Contentment::Tempalte::Generator->new({
      source    => 'Hello [% who %]! How is [% args.who %]?',
      variables => { who => 'Homer' },
  });

  $generator->generate({ who => 'Marge' });

outputs:

  Hello Homer! How is Marge?

Don't use the "args" key. It will be clobbered during generation.

$source = $self->source

Returns the source. It also compiles the template the first time it's called.

$generator->properties (EXCEPTION)

This method throws an exception stating:

  Undefined subroutine &Contentment::Generator::Template::properties called

The reason for this exception is because there is no way to retrieve a list of properties from template toolkit templates.

$value = $generator->get_property($key)

Retrieves the property value for the given key, $key. This will fetch the property for the key from the proeprties set in source first, then fallback to properties set in the "properties" option to the constructor.

$generator->generate(\%args, \%vars)

Processes the template with the given arguments.

The first argument, %args, is passed as a hash named "args" to the template. The second argument, %vars, is passed directly into the template (with any key named "args" clobbered).

HOOK HANDLERS

Contentment::Generator::Template::match

Handles the "Contentment::VFS::generator" hook. Specifies that the "Contentment::Generator::Template" generator should be used to generate files ending in ".tt2".

BUGS

Currently, this generator compiles the source twice most of the time. This is due to the seemly obfuscated nature of the Template Toolkit compiler. I need to unravel the innards a bit more to learn how to use a Template::Document correctly.

SEE ALSO

Contentment::VFS, Contentment::Generator::Plain

AUTHOR

Andrew Sterling Hanenkamp, <hanenkamp@cpan.org>

COPYRIGHT AND LICENSE

Copyright 2005 Andrew Sterling Hanenkamp. All Rights Reserved.

Contentment is distributed and licensed under the same terms as Perl itself.