package Template::Benchmark::Engines::Tenjin; use warnings; use strict; use base qw/Template::Benchmark::Engine/; use File::Spec; # 0.05 has a different API to prior versions. use Tenjin 0.05; # Governs how long cached files remain valid, given it can be ten # minutes or more after cache generation before it runs again, we # want to set this to a high value. $Tenjin::TIMESTAMP_INTERVAL = 60 * 60 * 24; use IO::File; our $VERSION = '1.09_01'; our %feature_syntaxes = ( literal_text => join( "\n", ( join( ' ', ( 'foo' ) x 12 ) ) x 5 ), scalar_variable => '[== $scalar_variable =]', hash_variable_value => '[== $hash_variable->{hash_value_key} =]', array_variable_value => '[== $array_variable->[ 2 ] =]', deep_data_structure_value => '[== $this->{is}{a}{very}{deep}{hash}{structure} =]', array_loop_value => '[== $_ =]' . "\n", hash_loop_value => '' . '[== $_ =]: [== $hash_loop->{$_} =]' . '' . "\n", records_loop_value => '' . '[== $_->{name} =]: [== $_->{age} =]' . '' . "\n", array_loop_template => '[== $_ =]' . "\n", hash_loop_template => '' . '[== $_ =]: [== $hash_loop->{$_} =]' . '' . "\n", records_loop_template => '' . '[== $_->{name} =]: [== $_->{age} =]' . '' . "\n", constant_if_literal => 'true' . "\n", variable_if_literal => 'true' . "\n", constant_if_else_literal => 'truefalse' . "\n", variable_if_else_literal => 'true' . 'false' . "\n", constant_if_template => '[== $template_if_true =]' . "\n", variable_if_template => '[== $template_if_true =]' . '' . "\n", constant_if_else_template => '[== $template_if_true =]' . '[== $template_if_false =]' . "\n", variable_if_else_template => '' . '[== $template_if_true =]' . '[== $template_if_false =]' . "\n", constant_expression => '[== 10 + 12 =]', variable_expression => '[== $variable_expression_a * ' . '$variable_expression_b =]', complex_variable_expression => '[== ( ( $variable_expression_a * ' . '$variable_expression_b ) + ' . '$variable_expression_a - ' . '$variable_expression_b ) / ' . '$variable_expression_b =]', constant_function => q{[== substr( 'this has a substring.', 11, 9 ) =]}, variable_function => '[== substr( $variable_function_arg, 4, 2 ) =]', ); sub syntax_type { return( 'embedded-perl' ); } sub pure_perl { return( 1 ); } sub benchmark_descriptions { return( { Tenj => "Tenjin ($Tenjin::VERSION)", } ); } sub benchmark_functions_for_uncached_string { my ( $self ) = @_; return( undef ); } sub benchmark_functions_for_uncached_disk { my ( $self, $template_dir ) = @_; my ( @template_dirs ); @template_dirs = ( $template_dir ); return( { Tenj => sub { my $t = Tenjin->new( { path => \@template_dirs, cache => 0, } ); \$t->render( $_[ 0 ], { %{$_[ 1 ]}, %{$_[ 2 ]} } ); }, } ); } sub benchmark_functions_for_disk_cache { my ( $self, $template_dir, $cache_dir ) = @_; my ( @template_dirs ); @template_dirs = ( $template_dir ); return( { Tenj => sub { my $t = Tenjin->new( { path => \@template_dirs, } ); \$t->render( $_[ 0 ], { %{$_[ 1 ]}, %{$_[ 2 ]} } ); }, } ); } sub benchmark_functions_for_shared_memory_cache { my ( $self, $template_dir, $cache_dir ) = @_; return( undef ); } sub benchmark_functions_for_memory_cache { my ( $self, $template_dir, $cache_dir ) = @_; return( undef ); } # TODO: this seems suspiciously slow, not sure it's caching. sub benchmark_functions_for_instance_reuse { my ( $self, $template_dir, $cache_dir ) = @_; my ( $t, @template_dirs ); @template_dirs = ( $template_dir ); return( { Tenj => sub { $t = Tenjin->new( { path => \@template_dirs, } ) unless $t; \$t->render( $_[ 0 ], { %{$_[ 1 ]}, %{$_[ 2 ]} } ); }, } ); } 1; __END__ =pod =head1 NAME Template::Benchmark::Engines::Tenjin - Template::Benchmark plugin for Tenjin. =head1 SYNOPSIS Provides benchmark functions and template feature syntaxes to allow L to benchmark the L template engine. =head1 AUTHOR Sam Graham, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc Template::Benchmark::Engines::Tenjin You can also look for information at: =over 4 =item * RT: CPAN's request tracker L =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * Search CPAN L =back =head1 ACKNOWLEDGEMENTS Thanks to Paul Seamons for creating the the bench_various_templaters.pl script distributed with L, which was the ultimate inspiration for this module. =head1 COPYRIGHT & LICENSE Copyright 2010 Sam Graham. This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information. =cut