NAME
Tiffany - Generic interface for Perl5 template engines.
SYNOPSIS
use Tiffany;
my $tmpl = Tiffany->load('Text::Xslate', {syntax => 'TTerse'});
$tmpl->render(\'Hello, [% name %]', {name => 'John'});
# => "Hello, John"
DESCRIPTION
Tiffany is a generic interface for Perl5 template engines.
THIS MODULE IS IN ITS BETA QUALITY. THE API IS STOLEN FROM TILT BUT MAY
CHANGE IN THE FUTURE.
FACTORY METHOD
Tiffany.pm acts as a factory for Tiffany::* classes, which in turn are
the actual adaptor classes for each template engine.
my $tiffany = Tiffany->load($klass, $args)
Load Tiffany::* class if necessary, and create new instance of using
the given arguments.
my $xslate = Tiffany->load("Text::Xslate", +{syntax => 'TTerse'});
my $xslate = Tiffany->load("+My::Template::Engine", +{option => 'here'});
The Tiffany Protocol
The Tiffany protocol is based on duck typing. A template adaptor does
not need to inherit from a particular class, but its API needs to adhere
to the spec provided here.
In the documentation that follows, "Tiffany::Thing" represents an
adaptor class.
my $tiffanny = Tiffany::Thing->new([$args:HashRef|ArrayRef]);
The module SHOULD have a new method.
This method creates a new instance of Tiffany module.
$args should be passed to the constructor of the template engine.
my $result = $tmpl->render($stuff:Scalar|ScalarRef [, @args]);
The module SHOULD have a render method.
This method should invoke the appropriate rendering method for the
underlying template engine, using @args.
If the template engine found any errors, this method MUST throw an
exception.
If the template engine throws any exceptions, Tiffany module SHOULD
pass through the exception unaltered.
$stuff SHOULD expect a Scalar that represents the template filename.
The module MAY allow a ScalarRef that holds the actual template
code.
This method MUST return plain string. Do not return a blessed
reference.
HOW TO USE IT IN MY WEB APPLICATION FRAMEWORK?
Example code is here: eg/sinatraish/ in distribution tar ball or
.
FAQ
Is Tiffany supports JSON?
Tiffany should not support JSON. Tiffany protocol can support JSON
serialize. But real web application needs more things like
Content-Type. It is not supported area for Tiffany.
AUTHOR
Tokuhiro Matsuno
SEE ALSO
Any::Template,
THANKS TO
kazuhooku
gfx
miyagawa
lestrrat
LICENSE
Copyright (C) Tokuhiro Matsuno
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.