From a88f111d33dfcdf8f47e7e89f9dd3c7079e905cd Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 8 Oct 2012 17:19:16 -0500 Subject: docs --- lib/Text/Handlebars.pm | 155 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) diff --git a/lib/Text/Handlebars.pm b/lib/Text/Handlebars.pm index 53d9061..29123be 100644 --- a/lib/Text/Handlebars.pm +++ b/lib/Text/Handlebars.pm @@ -1,12 +1,98 @@ package Text::Handlebars; use strict; use warnings; +# ABSTRACT: http://handlebarsjs.com/ for Text::Xslate use base 'Text::Xslate'; use Scalar::Util 'weaken'; use Try::Tiny; +=head1 SYNOPSIS + + use Text::Handlebars; + + my $handlebars = Text::Handlebars->new( + helpers => { + fullName => sub { + my ($context, $person) = @_; + return $person->{firstName} + . ' ' + . $person->{lastName}; + }, + }, + ); + + my $vars = { + author => { firstName => 'Alan', lastName => 'Johnson' }, + body => "I Love Handlebars", + comments => [ + author => { firstName => 'Yehuda', lastName => 'Katz' }, + body => "Me too!", + ], + }; + + say $handlebars->render_string(<<'TEMPLATE', $vars); +
+

By {{fullName author}}

+
{{body}}
+ +

Comments

+ + {{#each comments}} +

By {{fullName author}}

+
{{body}}
+ {{/each}} +
+ TEMPLATE + +produces + +
+

By Alan Johnson

+
I Love Handlebars
+ +

Comments

+ +

By Yehuda Katz

+
Me Too!
+
+ +=head1 DESCRIPTION + +This module subclasses L to provide a parser for +L templates. In most ways, this module +functions identically to Text::Xslate, except that it parses Handlebars +templates instead. + +Text::Handlebars accepts an additional constructor parameter of C to +define Handlebars-style helper functions. Standard helpers are identical to +functions defined with the C parameter, except that they receive the +current context implicitly as the first parameter (since perl doesn't have an +implicit C parameter). Block helpers also receive the context as the +first parameter, and they also receive the C parameter as a hashref. +As an example: + + sub { + my ($context, $items, $options) = @_; + + my $out = "
    "; + + for my $item (@$items) { + $out .= "
  • " . $options->{fn}->($item) . "
  • "; + } + + return $out . "
\n"; + }, + +defines a simple block helper to generate a C<<
    >> list. + +Text::Handlebars also overrides C and C to allow using +any type of data (not just hashrefs) as a context (so rendering a template +consisting of only C<{{.}}> works properly). + +=cut + sub default_helpers { my $class = shift; return { @@ -181,4 +267,73 @@ sub render { } } +=head1 BUGS/CAVEATS + +=over 4 + +=item * + +The auto-indenting behavior for partials is not yet implemented, due to +limitations in Text::Xslate. + +=item * + +Passing a new context to partials is not yet supported. + +=item * + +The C parameter for C<@foo> variables when calling +C<< $options->{fn}->() >> is not supported, because I don't understand its +purpose. If someone wants this functionality, feel free to let me know, and +tell me why. + +=back + +Please report any bugs through RT: email +C, or browse to +L. + +=head1 SEE ALSO + +L + +L + +=head1 SUPPORT + +You can find this documentation for this module with the perldoc command. + + perldoc Text::Handlebars + +You can also look for information at: + +=over 4 + +=item * AnnoCPAN: Annotated CPAN documentation + +L + +=item * CPAN Ratings + +L + +=item * RT: CPAN's request tracker + +L + +=item * Search CPAN + +L + +=back + +=for Pod::Coverage + default_helpers + default_functions + options + render + render_string + +=cut + 1; -- cgit v1.2.3