Compare commits

...

123 Commits

Author SHA1 Message Date
Graham Ollis
6146b1f2f5 set locale "C" in tests
This ensures that the error string is what we expect it to be
2012-12-26 21:22:07 -05:00
Graham Ollis
5116c191f3 update Changes 2012-12-22 15:14:11 -05:00
Graham Ollis
5828f878d8 don't rely on English locale in test 2012-12-22 15:10:59 -05:00
Graham Ollis
f4beaf9864 use non-capturing for performance 2012-12-19 12:33:19 -05:00
Graham Ollis
ce9e1b955e load test to test loading of all .pm files 2012-12-18 11:02:18 -05:00
Graham Ollis
37ee2ee753 support multiple renderer paths 2012-12-18 11:00:47 -05:00
Graham Ollis
cdc31b07be update changes 2012-10-31 11:19:28 -04:00
Graham Ollis
57b9c39b15 specify a minumum perl version. 2012-10-11 11:18:37 -04:00
Graham Ollis
194a9219e9 fix cpanm warning. 2012-10-02 11:42:17 -04:00
Graham Ollis
5505c5d82a utf-8 for perldoc 2012-10-02 11:34:42 -04:00
Graham Ollis
daceb5876f documentation updates. 2012-10-02 11:33:07 -04:00
Graham Ollis
54d13555ef Merge branch 'master' of github.com:abh/mojox-renderer-tt 2012-08-31 08:18:19 -04:00
Graham Ollis
d6d98cc533 fix for win32 2012-08-31 08:18:01 -04:00
Graham Ollis
51af0a7893 return 0 on not found 2012-08-25 07:15:15 -04:00
ollisg
b48b4274db add test case for GH#30 2012-08-24 22:23:37 -04:00
Graham Ollis
e64ce4c484 refactor fetching templates from DATA 2012-08-24 05:47:54 -04:00
Graham Ollis
af61eff483 update email. 2012-08-23 22:27:43 -04:00
Graham Ollis
cf390c5456 update changes 2012-08-23 22:26:09 -04:00
Graham Ollis
20d795cb51 Compatibility with mojo 3.33 2012-08-23 22:20:08 -04:00
Graham Ollis
7455ae1be8 v1.23 2012-08-23 15:27:07 -04:00
Graham Ollis
870d195761 use die instead of render_exception 2012-08-23 15:26:38 -04:00
Graham Ollis
b21db5cf22 v1.22 2012-08-21 20:39:02 -04:00
Graham Ollis
24990483e5 avoid deep recursion
when using a tt template for exceptions, and there is
an exception in the template, don't go into infinite
recursion.
2012-08-21 16:30:19 -04:00
Graham Ollis
4f5d3a0951 update Changes 2012-08-21 15:47:33 -04:00
Graham Ollis
a72ec0e750 ignore cycles that are taken care of in Template::Provider#DESTROY 2012-08-21 15:44:33 -04:00
Graham Ollis
2956335d9e use Test::Memory::Cycle instead of find_cycle 2012-08-21 14:55:28 -04:00
Graham Ollis
7d1ac4eecd tt is private. 2012-08-21 14:49:58 -04:00
Graham Ollis
28ae3d62f8 return 1 on failure 2012-08-21 15:44:10 -03:00
Ask Bjørn Hansen
944fa2ecae Update Changes for v1.21 2012-06-05 16:25:52 -07:00
Ask Bjørn Hansen
3364b8a05a Remove Test::DistManifest Dist::Zilla plugin 2012-06-05 16:23:42 -07:00
Ask Bjørn Hansen
6047db4ef2 Add MYMETA.* to MANIFEST.SKIP 2012-06-05 16:21:43 -07:00
Ask Bjørn Hansen
b37a7639d3 Update dist.ini to use new names for some plugins 2012-06-05 16:12:58 -07:00
Ask Bjørn Hansen
511ee4463b Let Dist::Zilla set VERSION
Closes #17
2012-06-05 16:04:07 -07:00
Ask Bjørn Hansen
bdc9f56452 Use app->renderer->paths to find template directories
Closes #20
2012-06-05 15:53:08 -07:00
Ask Bjørn Hansen
618adbd774 "Manually" install dependencies 2012-06-05 15:19:58 -07:00
Ask Bjørn Hansen
c0b649d55f Add travis-ci configuration 2012-06-05 15:15:21 -07:00
Ask Bjørn Hansen
1e1a9ab835 Merge pull request #23 from mbethke/master
Fix error handling problem

(closes #22)
2012-06-05 15:08:42 -07:00
Matthias Bethke
96d31d45a0 Added template for render error test 2012-05-18 00:41:21 -06:00
Matthias Bethke
bbfab8db4e Checking HTTP status code for TT render error test 2012-05-18 00:40:50 -06:00
Matthias Bethke
92bb64406b Checking HTTP status code in TT render error test 2012-05-18 00:37:18 -06:00
Matthias Bethke
989ea57cf9 Fixed double TT rendering on error
If a template produced a rendering error in process() but did not produce one
when called without stash variables, the Mojo::Exception would be built
incorrectly, leading to an exception that masked the original error.
2012-05-17 14:00:17 -06:00
Ask Bjørn Hansen
b3c64c75d4 Require Mojolicious 2.51 to avoid memory leak
Closes #19
2012-02-22 08:09:40 -08:00
Ask Bjørn Hansen
a89a9a4344 Merge pull request #21 from marcusramberg/move_cache
Cache templates in tmpdir by default
2012-02-01 01:17:52 -08:00
Marcus Ramberg
78c9d24bc7 Cache templates in tmpdir by default 2012-01-25 15:11:11 +01:00
Ask Bjørn Hansen
859ec53953 Note fixes from Magnus Holm in Changes 2011-10-08 21:05:18 -07:00
Ask Bjørn Hansen
0b0acd510e Document the 'c' stash variable (RT#70866, Matthias Bethke) 2011-10-08 21:04:17 -07:00
Ask Bjørn Hansen
0527eee24a Merge pull request #18 from judofyr/cycles
Fix memory leaks
2011-09-07 09:51:25 -07:00
Magnus Holm
bd48aa5066 Fix cycles 2011-09-07 11:05:55 +02:00
Magnus Holm
77b9531fae Add test case for cycles 2011-09-07 11:04:25 +02:00
Ask Bjørn Hansen
248f13717a Mark 1.20 in Changes 2011-08-01 09:37:07 -07:00
Ask Bjørn Hansen
9f20c780b8 Add Mojolicious-Plugin-TtRenderer-* to .gitignore 2011-08-01 09:35:17 -07:00
Ask Bjørn Hansen
c7c249b51f Update distribution name 2011-08-01 09:34:46 -07:00
Cosimo Streppone
dae8329981 [GH#12] Drop MojoX::* namespace
Renamed MojoX:: namespace to Mojolicious::Plugin::TtRenderer::Engine,
so there's ::Engine, ::Helper and ::Provider.

MojoX:: is deprecated and not to be used, according to @sri.
2011-08-01 11:56:25 +02:00
Ask Bjørn Hansen
5e650027c7 Mark 1.13 in Changes 2011-06-07 17:38:43 -07:00
Ask Bjørn Hansen
698fc48b58 Compatibility with Mojolicious 1.3+ 2011-06-07 17:38:10 -07:00
Ask Bjørn Hansen
49075ebe44 v1.12 2011-02-28 00:45:24 -08:00
Htbaa
0acdb2fcde Simplified regex and added comment why backslashes are being converted 2011-02-26 19:56:17 +01:00
Htbaa
dc52fec399 Inline wrappers and includes now work on Windows
closes gh-13
2011-02-26 12:46:02 +01:00
Ask Bjørn Hansen
a896a311bb Mark 1.11 in Changes 2011-02-06 16:00:58 -08:00
Ask Bjørn Hansen
b6a0f10414 Update Changes 2011-02-06 15:59:56 -08:00
Ask Bjørn Hansen
68747b7f2f Merge remote branch 'marcusramberg/master' 2011-02-06 15:57:10 -08:00
Marcus Ramberg
323d5a9294 Change to use relative paths, add exception template for tests 2011-02-06 08:50:02 +01:00
Ask Bjørn Hansen
46715dc95e Mark 1.10 release in Changes 2011-02-05 12:25:48 -08:00
Ask Bjørn Hansen
392b97e81a Ignore .ttc files from tests 2011-02-05 12:22:44 -08:00
Ask Bjørn Hansen
a5e276f633 Update Changes 2011-02-05 12:20:42 -08:00
Ask Bjørn Hansen
fc453fe4fb Try fixing tests on Strawberry Perl (RT#65282)
(thanks Christiaan Kras)
2011-02-05 12:12:47 -08:00
Ask Bjørn Hansen
32c83d6109 Fix bugtracker URL in META.yml 2011-02-05 12:11:05 -08:00
Maxim Vuets
5e5c23d786 Make Mojolicious 'layout'/'extends' working 2011-02-05 10:02:09 -08:00
Ask Bjørn Hansen
fa30565b6b 1.0 released 2011-01-22 17:14:48 -08:00
Ask Bjørn Hansen
a0d8b522ff Update Changes 2011-01-22 17:13:27 -08:00
Ask Bjørn Hansen
388422491f Require Mojolicious 1.0+ 2011-01-22 10:47:00 -08:00
Ask Bjørn Hansen
1e7dc3044b Merge remote branch 'marcusramberg/master' 2011-01-22 10:33:09 -08:00
Marcus Ramberg
01b8f94a2b Fix inline rendering and test failures 2011-01-22 17:50:08 +01:00
Marcus Ramberg
26d555938f Fix unicode test 2011-01-22 14:42:42 +01:00
Marcus Ramberg
0d419c9ecd Support new mojolicious error template 2011-01-22 14:42:15 +01:00
Ask Bjørn Hansen
0708cfd051 Set repository and bug tracker URLs for the META.yml file 2011-01-17 10:19:11 -08:00
Ask Bjørn Hansen
3495571029 Update Changes 2010-12-27 14:53:35 -08:00
Árpád Szász
d51eea608b Fixed helper compatibility with Mojolicious 1.0 2010-12-28 00:28:50 +02:00
Marcus Ramberg
c3e8c9ff73 Tests for plugin 2010-10-10 06:02:54 +08:00
Maxim Vuets
0588884a9f Fix POD synopsis 2010-10-09 14:50:25 -07:00
spleenjack
084c79825f Replaced deprecated Mojo dependence with Mojolicious 2010-10-09 14:43:52 -07:00
Ask Bjørn Hansen
3bddf34485 'inline' argument is in stash, not in options for _render() 2010-10-05 00:38:44 -07:00
vti
201774941a Added inline template support 2010-10-05 09:02:39 +02:00
Ask Bjørn Hansen
be2d2ed0ec Add release date to Changes 2010-08-02 02:10:00 -07:00
Ask Bjørn Hansen
89e744d8de Let Dist::Zilla help manage the VERSION number 2010-08-02 01:41:37 -07:00
Ask Bjørn Hansen
b981e7080d Add .build directory to .gitignore 2010-08-02 01:36:29 -07:00
Ask Bjørn Hansen
5315d1efda Use Dist::Zilla to make releases 2010-08-02 01:35:41 -07:00
Ask Bjørn Hansen
d7f3b740f5 Update Changes 2010-08-02 01:33:59 -07:00
vti
9f26a20192 Fixed template path 2010-07-29 15:14:13 +03:00
vti
731fe52836 Updated documentation 2010-06-15 13:53:36 +02:00
vti
988d1f954b Die when helper is not found 2010-06-15 13:42:22 +02:00
vti
1e4eeba737 Added helpers 2010-06-15 13:29:30 +02:00
vti
857e517039 Don't pollute namespace 2010-06-15 12:34:05 +02:00
vti
96d2be17b4 Made it more modern 2010-06-15 12:27:12 +02:00
Ask Bjørn Hansen
a2ce996b97 Minor documentation updates 2010-04-20 22:54:08 -07:00
Ask Bjørn Hansen
c4c554a46a Prepare 0.31 2009-09-11 16:02:24 -07:00
Ask Bjørn Hansen
f2d62f0a25 Remove deprecated 'new' method 2009-09-11 16:01:24 -07:00
Ask Bjørn Hansen
72855bad28 Update MANIFEST (oops, thanks Sebastian) 2009-09-11 15:56:30 -07:00
Ask Bjørn Hansen
29a6a8c946 Update copyright year 2009-09-11 11:55:21 -07:00
Ask Bjørn Hansen
270ec1e6e5 Make changes file formatted nicer 2009-09-11 11:55:03 -07:00
Ask Bjørn Hansen
ec4e464d90 Prepare 0.30; update Mojo dependency 2009-09-09 21:18:55 -07:00
giftnuss
d7726cfa0e Keep plugin in sync with mojo project
- Add test template with new naming schema

Signed-off-by: Ask Bjørn Hansen <ask@develooper.com>
2009-09-09 21:15:44 -07:00
Ask Bjørn Hansen
68438d57cb Mojo can't run with -T currently 2009-09-09 21:15:38 -07:00
Ask Bjørn Hansen
6cae190a7a Prepare v0.21 to work with new Mojo's 2009-07-29 15:49:24 -07:00
giftnuss
165c3b39f2 Update stash key from 'template_path' to 'template' to match mojo change
Signed-off-by: Ask Bjørn Hansen <ask@develooper.com>
2009-07-29 15:44:10 -07:00
Ask Bjørn Hansen
460b36497a prepare 0.20 release 2008-12-09 17:20:18 -08:00
Ask Bjørn Hansen
91a817b322 Add default INCLUDE_PATH (templates) 2008-12-09 17:19:43 -08:00
vti
e779579347 test fix 2008-12-09 16:45:28 -08:00
Ask Bjørn Hansen
e3db05fcb6 Merge commit 'vti/vti' 2008-12-08 20:44:26 -08:00
vti
3c8ec94a70 changes due to the new options passed to handler 2008-12-07 01:08:07 +01:00
Ask Bjørn Hansen
a3b6ccdb2b Update MANIFEST files
Signed-off-by: Ask Bjørn Hansen <ask@develooper.com>
2008-11-24 03:42:19 -08:00
vti
bbabbf9ac1 Made default compile dir not unix specific
Signed-off-by: Ask Bjørn Hansen <ask@develooper.com>
2008-11-17 02:54:22 -08:00
Ask Bjørn Hansen
0a42dd4f90 Update synopsis (thanks to Fayland 林) 2008-11-17 02:45:49 -08:00
Ask Bjørn Hansen
dc1c1570e1 Require Mojo 0.8011 (using named parameters) 2008-11-12 00:16:05 -08:00
Ask Bjørn Hansen
1bcae03e9c perltidy 2008-11-12 00:13:47 -08:00
Ask Bjørn Hansen
e0b5f09326 prepare v0.10 2008-11-12 00:07:20 -08:00
Ask Bjørn Hansen
8402f4f597 Update to work with named parameters in new version of Mojo
Instead of "tx" pass the context in the "c" variable
2008-11-12 00:06:20 -08:00
Ask Bjørn Hansen
44f5312fef Move the VERSION definition out of the pod section 2008-11-12 00:04:13 -08:00
Ask Bjørn Hansen
62146bb307 Rename "new" to "build"
Signed-off-by: Ask Bjørn Hansen <ask@develooper.com>
2008-11-12 00:04:09 -08:00
vti
68783f08e2 fixes due to new Mojo::Renderer error handling, tests
Signed-off-by: Ask Bjørn Hansen <ask@develooper.com>
2008-11-11 23:53:28 -08:00
Ask Bjørn Hansen
9dce1eb021 Add note about the git repositories
Fix POD encoding

Signed-off-by: Ask Bjørn Hansen <ask@develooper.com>
2008-11-11 04:05:39 -08:00
Ask Bjørn Hansen
bf71ca8cec Accept options for the Template object
Prepare 0.02
2008-11-10 11:14:38 -08:00
Ask Bjørn Hansen
d6ac8a1c94 Template.pm is required (duh) 2008-11-10 10:12:49 -08:00
30 changed files with 1199 additions and 258 deletions

2
.gitignore vendored
View File

@@ -6,7 +6,9 @@ _build*
pm_to_blib*
*.tar.gz
.lwpcookies
Mojolicious-Plugin-TtRenderer-*
MojoX-Renderer-TT-*
cover_db
*~
*.bak
.build

View File

@@ -1,9 +0,0 @@
# auto-generated shipit config file.
steps = FindVersion, ChangeVersion, CheckChangeLog, DistTest, Commit, Tag, MakeDist
git.tagpattern = release/%v
# svn.tagpattern = MyProj-%v
# svn.tagpattern = http://code.example.com/svn/tags/MyProj-%v
# CheckChangeLog.files = ChangeLog, MyProj.CHANGES

8
.travis.yml Normal file
View File

@@ -0,0 +1,8 @@
language: perl
install:
- cpanm Mojolicious Template
script: HARNESS_IS_VERBOSE=1 prove -v -Ilib t
perl:
- "5.14"
- "5.12"
- "5.10"

110
Changes
View File

@@ -1,5 +1,111 @@
Revision history for MojoX-Renderer-TT
Revision history for Mojolicious::Plugin::TtRenderer
{{$NEXT}}
- Set locale "C" in tests that rely on it
1.30 December 22, 2012
- Don't rely on English locale in the test t/tt_plugin_lite_app.t
1.29 December 18, 2012
- support multiple renderer paths
1.28 October 11, 2012
- specify minimum perl version
1.27 October 2, 2012
- documentation fixes and updates.
1.26 August 31, 2012
- Windows compatability with Cwd::abs_path
1.25 August 25, 2012
- Return 0 on not found, die on error (GH#30)
1.24 August 23, 2012
- Compatibility with Mojolicious 3.33+
1.23 August 23, 2012
- Use die instead of render_exception (GH#29)
1.22 August 21, 2012
- Compatibility with Mojolicious 3.05+ (GH#24)
- Avoid deep recursion when exception template dies (GH#25,GH26)
- Fixed test failures (GH#27,GH#28)
1.21 June 5, 2012
- Fixed double TT rendering on error (Matthias Bethke (GH#21))
- Cache templates in tmpdir by default (Marcus Ramberg)
- Require Mojolicious 2.51 to avoid memory leaks (GH#19)
- Document the 'c' stash variable (RT#70866, Matthias Bethke)
- Fix memory leaks, add tests for them (GH#18, Magnus Holm)
- Use app->renderer->paths to find template directories (GH#17)
1.20 August 1, 2011
- Drop use of MojoX namespace for Mojolicious::Plugin::TtRenderer::
(GH#12, Cosimo Streppone)
1.13 June 7, 2011
- Compatibility with Mojolicious 1.3+
1.12 February 28, 2011
- Inline wrappers and includes now work on Windows
(GH#13, Christiaan Kras)
1.11 February 6, 2011
- Change to use relative paths (Marcus Ramberg)
- Add exception template for tests
1.10 February 5, 2011
- Support Mojolicious 'layout'/'extends' (Maxim Vuets, Marcus
Ramberg)
- Fix Strawberry Perl tests (RT#65282, Christiaan Kras, Ask)
- Update bugtracker URL in META.yml
1.0 January 22, 2011
- Require (and be compatible with) Mojolicious 1.0+
- Added inline template support (Viacheslav Tykhanovskyi & Ask)
- Fix inline rendering and test failures (Marcus Ramberg)
- Fixed helper compatibility with Mojolicious 1.0 (Árpád Szász)
- Support new mojolicious error template (Marcus)
- Fix unicode test (Marcus & Spleenjack)
- Replaced deprecated Mojo dependence with Mojolicious (spleenjack)
0.40 August 2, 2010
- Updated for newer Mojo (Viacheslav Tykhanovskyi)
- Added helpers (Viacheslav Tykhanovskyi)
- Documentation updates
0.31 September 11, 2009
- Remove deprecated 'new' method
- Update MANIFEST (oops, thanks Sebastian)
0.30 September 9, 2009
- Revert the change of template_path stash key
- Reflect recent changes in mojo project (v0.991251) (Sebastian Knapp)
- One test with Mojolicious added (Sebastian Knapp)
0.21 July 29, 2009
- Update stash key from 'template_path' to 'template' to
match mojo change (Sebastian Knapp)
0.20 December 9, 2008
- Updates to work with Mojo 0.9
- Add default INCLUDE_PATH
- Made default compile dir not Unix specific (Viacheslav
Tykhanovskyi)
0.10 November 12, 2008
- Update to work with named parameters in new version of Mojo
- Instead of "tx" pass the context in the "c" variable
- Rename "new" to "build"
- Add real tests (Viacheslav Tykhanovskyi)
- Update to work with new error handling in Mojo
(Viacheslav Tykhanovskyi)
0.02 November 10, 2008
- Add template_options parameter
- Fix Template dependency
0.01 November 9, 2008
First version, released on an unsuspecting world.
- First version, released on an unsuspecting world.

View File

@@ -1,10 +0,0 @@
Changes
MANIFEST
MANIFEST.SKIP
Makefile.PL
README
lib/MojoX/Renderer/TT.pm
t/00-load.t
t/pod-coverage.t
t/pod.t
.perltidyrc

View File

@@ -1,5 +1,44 @@
\.git\/
.*~$
\.shipit$
.*\.bak$
^\.gitignore$
# Avoid version control files.
\bRCS\b
\bCVS\b
\bSCCS\b
,v$
\B\.svn\b
\B\.git\b
\b_darcs\b
# Avoid Makemaker generated and utility files.
\bMANIFEST\.bak
\bMYMETA.*
\bMakefile$
\bblib/
\bMakeMaker-\d
\bpm_to_blib\.ts$
\bpm_to_blib$
\bblibdirs\.ts$ # 6.18 through 6.25 generated this
# Avoid Module::Build generated and utility files.
\bBuild$
\b_build/
# Avoid temp and backup files.
~$
\.old$
\#$
\b\.#
\.bak$
# Avoid Devel::Cover files.
\bcover_db\b
### DEFAULT MANIFEST.SKIP ENDS HERE ####
t/tmp/ctpl
\.DS_Store$
\.sw.$
(\w+-)*(\w+)-\d\.\d+(?:\.tar\.gz)?$
\.t\.log$
\.prove$

View File

@@ -1,20 +0,0 @@
use strict;
use warnings;
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'MojoX::Renderer::TT',
AUTHOR => 'Ask Bjørn Hansen <ask@develooper.com>',
VERSION_FROM => 'lib/MojoX/Renderer/TT.pm',
ABSTRACT_FROM => 'lib/MojoX/Renderer/TT.pm',
($ExtUtils::MakeMaker::VERSION >= 6.3002
? ('LICENSE'=> 'perl')
: ()),
PL_FILES => {},
PREREQ_PM => {
'Test::More' => 0,
'Mojo' => 0.8009,
},
dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
clean => { FILES => 'MojoX-Renderer-TT-*' },
);

40
README
View File

@@ -1,40 +0,0 @@
MojoX-Renderer-TT
This module implements a Template Toolkit renderer for the Mojo
framework.
INSTALLATION
To install this module, run the following commands:
perl Makefile.PL
make
make test
make install
SUPPORT AND DOCUMENTATION
After installing, you can find documentation for this module with the
perldoc command.
perldoc MojoX::Renderer::TT
You can also look for information at:
RT, CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.html?Dist=MojoX-Renderer-TT
CPAN Ratings
http://cpanratings.perl.org/d/MojoX-Renderer-TT
Search CPAN
http://search.cpan.org/dist/MojoX-Renderer-TT/
COPYRIGHT AND LICENCE
Copyright (C) 2008 Ask Bjørn Hansen
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

89
README.pod Normal file
View File

@@ -0,0 +1,89 @@
=encoding utf-8
=head1 NAME
Mojolicious::Plugin::TtRenderer - Template Renderer Plugin
=head1 SYNOPSIS
# Mojolicious
$self->plugin('tt_renderer');
$self->plugin(tt_renderer => {template_options => {FILTERS => [ ... ]}});
# Mojolicious::Lite
plugin 'tt_renderer';
plugin tt_renderer => {template_options => {FILTERS => [ ... ]}};
=head1 DESCRIPTION
L<Mojolicous::Plugin::TtRenderer> is a simple loader for
L<Mojolicious::Plugin::TtRenderer::Engine>.
=head1 METHODS
L<Mojolicious::Plugin::TtRenderer> inherits all methods from
L<Mojolicious::Plugin> and implements the following new ones.
=head2 C<register>
$plugin->register;
Register renderer in L<Mojolicious> application.
=head1 EXTRA STASH VARIABLES
The current controller instance can be accessed as C<c>.
[% c.req.headers.host %]
=head1 SEE ALSO
L<Mojolicious::Plugin::TtRenderer::Engine>, L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicious.org>.
=head1 AUTHOR
Current maintainer: Graham Ollis C<< <plicease@cpan.org> >>
Original author: Ask Bjørn Hansen, C<< <ask at develooper.com> >>
=head1 BUGS
Please report any bugs or feature requests to the project's github issue tracker
L<https://github.com/abh/mojox-renderer-tt/issues?state=open>.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Mojolicious::Plugin::TtRenderer
You can also look for information at:
=over 4
=item * git repository
L<http://git.develooper.com/?p=MojoX-Renderer-TT.git;a=summary>,
L<git://git.develooper.com/MojoX-Renderer-TT.git>
L<http://github.com/abh/mojox-renderer-tt/>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/MojoX-Renderer-TT>
=item * Search CPAN
L<http://search.cpan.org/dist/MojoX-Renderer-TT/>
=back
=head1 COPYRIGHT & LICENSE
Copyright 2008-2010 Ask Bjørn Hansen, all rights reserved.
Copyright 2012 Graham Ollis.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

57
dist.ini Normal file
View File

@@ -0,0 +1,57 @@
name = Mojolicious-Plugin-TtRenderer
author = Graham Ollis <plicease@cpan.org>
license = Perl_5
copyright_holder = Ask Bjørn Hansen
# copyright_year = 2009
[Prereqs]
Mojolicious = 3.33
Template = 2.18
[Prereqs / TestRequires ]
Test::More = 0
[@Git]
tag_format = release/%v
# push_to = all
[@Filter]
bundle = @Basic
remove = Readme
remove = Manifest
[MetaResources]
bugtracker.web = https://github.com/abh/mojox-renderer-tt/issues
repository.web = http://github.com/abh/mojox-renderer-tt
repository.url = git://github.com/abh/mojox-renderer-tt.git
repository.type = git
[Homepage]
[BumpVersionFromGit]
version_regexp = ^release/(.*)
[PkgVersion]
[CheckChangeLog]
[Test::Compile]
[HasVersionTests]
[MetaTests]
[ReadmeAnyFromPod]
type = text
filename = README
location = build
[ReadmeAnyFromPod / ReadMePodInRoot]
type = pod
filename = README.pod
location = root
[Manifest]
[NextRelease]
format = %-7v %{MMMM d, yyyy}d
[MinimumPerl]

View File

@@ -1,167 +0,0 @@
package MojoX::Renderer::TT;
use warnings;
use strict;
use base 'Mojo::Base';
use Template ();
use Carp ();
__PACKAGE__->attr('tt', chained => 1,);
sub new {
my $self = shift->SUPER::new(@_);
$self->_init(@_);
return sub { $self->_render(@_) }
}
sub _init {
my $self = shift;
my %args = @_;
my $mojo = delete $args{mojo};
my $dir = $mojo && $mojo->home->rel_dir('tmp/ctpl');
# TODO
# take and process options :-)
my %config = (
COMPILE_EXT => '.ttc',
COMPILE_DIR => ($dir || "/tmp"),
UNICODE => 1,
ENCODING => 'utf-8',
CACHE_SIZE => 128,
RELATIVE => 1,
ABSOLUTE => 1,
);
$self->tt(Template->new(\%config))
or Carp::croak "Could not initialize Template object: $Template::ERROR";
return $self;
}
sub _render {
my ($self, $mojo, $tx, $path, $args) = @_;
$args ||= {};
#use Data::Dump qw(dump);
#warn dump(\$args);
my $output;
unless ($self->tt->process($path, {%$args, tx => $tx}, \$output, {binmode => ":utf8"})) {
Carp::carp $self->tt->error . "\n";
return $self->tt->error;
}
else {
return $output;
}
}
=head1 NAME
MojoX::Renderer::TT - Template Toolkit renderer for Mojo
=head1 VERSION
Version 0.01
=cut
our $VERSION = '0.01';
=head1 SYNOPSIS
Add the handler:
use MojoX::Renderer::TT;
sub startup {
...
$self->renderer->add_handler( tt => MojoX::Renderer::TT->new( mojo => $self ) );
}
And then in the handler call render which will call the
MojoX::Renderer::TT renderer.
$c->render(foo => 123, bar => [qw(giz mo)]);
=head1 METHODS
=head2 new
This currently requires a C<mojo> parameter pointing to the base class (Mojo).
object. This method returns not a TT object, but a handler for the Mojo renderer.
=head1 AUTHOR
Ask Bjørn Hansen, C<< <ask at develooper.com> >>
=head1 TODO
* Rename C<new> to something more sensical?
* Better support non-Mojolicious frameworks
* Don't require the mojo parameter
* Move the default template cache directory?
* Should the "tx" tpl parameter be called "c" (for context) instead?
* Accept options for setting up the Tempate object
* Better way to pass parameters to the templates?
* More sophisticated default search path?
=head1 BUGS
Please report any bugs or feature requests to C<bug-mojox-renderer-tt at rt.cpan.org>, or through
the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=MojoX-Renderer-TT>. 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 MojoX::Renderer::TT
You can also look for information at:
=over 4
=item * RT: CPAN's request tracker
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=MojoX-Renderer-TT>
=item * AnnoCPAN: Annotated CPAN documentation
L<http://annocpan.org/dist/MojoX-Renderer-TT>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/MojoX-Renderer-TT>
=item * Search CPAN
L<http://search.cpan.org/dist/MojoX-Renderer-TT/>
=back
=head1 ACKNOWLEDGEMENTS
=head1 COPYRIGHT & LICENSE
Copyright 2008 Ask Bjørn Hansen, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
1; # End of MojoX::Renderer::TT

View File

@@ -0,0 +1,116 @@
package Mojolicious::Plugin::TtRenderer;
use strict;
use warnings;
use v5.10;
use base 'Mojolicious::Plugin';
use Mojolicious::Plugin::TtRenderer::Engine;
sub register {
my ($self, $app, $args) = @_;
$args ||= {};
my $tt = Mojolicious::Plugin::TtRenderer::Engine->build(%$args, app => $app);
# Add "tt" handler
$app->renderer->add_handler(tt => $tt);
}
$Mojolicious::Plugin::TtRenderer::VERSION //= ('devel');
1;
__END__
=encoding utf-8
=head1 NAME
Mojolicious::Plugin::TtRenderer - Template Renderer Plugin
=head1 SYNOPSIS
# Mojolicious
$self->plugin('tt_renderer');
$self->plugin(tt_renderer => {template_options => {FILTERS => [ ... ]}});
# Mojolicious::Lite
plugin 'tt_renderer';
plugin tt_renderer => {template_options => {FILTERS => [ ... ]}};
=head1 DESCRIPTION
L<Mojolicous::Plugin::TtRenderer> is a simple loader for
L<Mojolicious::Plugin::TtRenderer::Engine>.
=head1 METHODS
L<Mojolicious::Plugin::TtRenderer> inherits all methods from
L<Mojolicious::Plugin> and implements the following new ones.
=head2 C<register>
$plugin->register;
Register renderer in L<Mojolicious> application.
=head1 EXTRA STASH VARIABLES
The current controller instance can be accessed as C<c>.
[% c.req.headers.host %]
=head1 SEE ALSO
L<Mojolicious::Plugin::TtRenderer::Engine>, L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicious.org>.
=head1 AUTHOR
Current maintainer: Graham Ollis C<< <plicease@cpan.org> >>
Original author: Ask Bjørn Hansen, C<< <ask at develooper.com> >>
=head1 BUGS
Please report any bugs or feature requests to the project's github issue tracker
L<https://github.com/abh/mojox-renderer-tt/issues?state=open>.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Mojolicious::Plugin::TtRenderer
You can also look for information at:
=over 4
=item * git repository
L<http://git.develooper.com/?p=MojoX-Renderer-TT.git;a=summary>,
L<git://git.develooper.com/MojoX-Renderer-TT.git>
L<http://github.com/abh/mojox-renderer-tt/>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/MojoX-Renderer-TT>
=item * Search CPAN
L<http://search.cpan.org/dist/MojoX-Renderer-TT/>
=back
=head1 COPYRIGHT & LICENSE
Copyright 2008-2010 Ask Bjørn Hansen, all rights reserved.
Copyright 2012 Graham Ollis.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut

View File

@@ -0,0 +1,339 @@
package Mojolicious::Plugin::TtRenderer::Engine;
use warnings;
use strict;
use v5.10;
use base 'Mojo::Base';
use Carp ();
use File::Spec ();
use Mojo::ByteStream 'b';
use Template ();
use Cwd qw/abs_path/;
use Scalar::Util 'weaken';
__PACKAGE__->attr('tt');
sub build {
my $self = shift->SUPER::new(@_);
weaken($self->{app});
$self->_init(@_);
return sub { $self->_render(@_) }
}
sub _init {
my $self = shift;
my %args = @_;
#$Template::Parser::DEBUG = 1;
my $dir;
my $app = delete $args{mojo} || delete $args{app};
if($dir=$args{cache_dir}) {
if($app && substr($dir,0,1) ne '/') {
$dir=$app->home->rel_dir('tmp/ctpl');
}
}
# TODO
# take and process options :-)
my @renderer_paths = $app ? map { abs_path($_) } grep { -d $_ } @{ $app->renderer->paths } : ();
my %config = (
( @renderer_paths > 0
? (INCLUDE_PATH => [@renderer_paths, 'templates'])
: ()
),
COMPILE_EXT => '.ttc',
COMPILE_DIR => ($dir || abs_path(File::Spec->tmpdir)),
UNICODE => 1,
ENCODING => 'utf-8',
CACHE_SIZE => 128,
RELATIVE => 1,
%{$args{template_options} || {}},
);
$config{LOAD_TEMPLATES} =
[Mojolicious::Plugin::TtRenderer::Provider->new(%config, renderer => $app->renderer)]
unless $config{LOAD_TEMPLATES};
$self->tt(Template->new(\%config))
or Carp::croak "Could not initialize Template object: $Template::ERROR";
return $self;
}
sub _render {
my ($self, $renderer, $c, $output, $options) = @_;
# Inline
my $inline = $options->{inline};
# Template
my $t = $renderer->template_name($options);
$t = 'inline' if defined $inline;
return unless $t;
my $helper = Mojolicious::Plugin::TtRenderer::Helper->new(ctx => $c);
# Purge previous result
$$output = '';
my @params = ({%{$c->stash}, c => $c, h => $helper}, $output, {binmode => ':utf8'});
my $provider = $self->tt->{SERVICE}->{CONTEXT}->{LOAD_TEMPLATES}->[0];
$provider->options($options);
$provider->ctx($c);
$provider->not_found(0);
my $ok = $self->tt->process(defined $inline ? \$inline : $t, @params);
return 0 if $provider->not_found;
# Error
die $self->tt->error unless $ok;
return 1;
}
1; # End of Mojolicious::Plugin::TtRenderer::Engine
package
Mojolicious::Plugin::TtRenderer::Helper;
use strict;
use warnings;
use base 'Mojo::Base';
our $AUTOLOAD;
__PACKAGE__->attr('ctx');
sub AUTOLOAD {
my $self = shift;
my $method = $AUTOLOAD;
return if $method =~ /^[A-Z]+?$/;
return if $method =~ /^_/;
return if $method =~ /(?:\:*?)DESTROY$/;
$method = (split '::' => $method)[-1];
die qq/Unknown helper: $method/ unless $self->ctx->app->renderer->helpers->{$method};
return $self->ctx->$method(@_);
}
1;
package
Mojolicious::Plugin::TtRenderer::Provider;
use strict;
use warnings;
use base 'Template::Provider';
use Scalar::Util 'weaken';
sub new {
my $class = shift;
my %params = @_;
my $renderer = delete $params{renderer};
my $self = $class->SUPER::new(%params);
$self->renderer($renderer);
weaken($self->{renderer});
return $self;
}
sub renderer { @_ > 1 ? $_[0]->{renderer} = $_[1] : $_[0]->{renderer} }
sub ctx { @_ > 1 ? $_[0]->{ctx} = $_[1] : $_[0]->{ctx} }
sub options { @_ > 1 ? $_[0]->{options} = $_[1] : $_[0]->{options} }
sub not_found { @_ > 1 ? $_[0]->{not_found} = $_[1] : $_[0]->{not_found} }
sub _template_modified {
my($self, $template) = @_;
return 1 if $self->SUPER::_template_modified($template);
return $template =~ /^templates(?:\/|\\)/;
}
sub _template_content {
my $self = shift;
my ($path) = @_;
my $options = delete $self->{options};
# Convert backslashes to forward slashes to make inline templates work on Windows
$path =~ s/\\/\//g;
my ($t) = ($path =~ m{templates\/(.*)$});
if (-r $path) {
return $self->SUPER::_template_content(@_);
}
my $data;
my $error = '';
# Try DATA section
if(defined $options) {
$data = $self->renderer->get_data_template($options);
$self->not_found(1) unless defined $data;
} else {
my $loader = Mojo::Loader->new;
foreach my $class (@{ $self->renderer->classes }) {
$data = $loader->data($class, $t);
last if $data;
}
}
unless($data) {
$data = '';
$error = "$path: not found";
}
return wantarray ? ($data, $error, time) : $data;
}
1;
__END__
=encoding utf-8
=head1 NAME
Mojolicious::Plugin::TtRenderer::Engine - Template Toolkit renderer for Mojo
=head1 SYNOPSIS
Add the handler:
sub startup {
...
# Via mojolicious plugin
$self->plugin(tt_renderer => {template_options => {FILTERS => [ ... ]}});
# Or manually
use Mojolicious::Plugin::TtRenderer::Engine;
my $tt = Mojolicious::Plugin::TtRenderer::Engine->build(
mojo => $self,
template_options => {
PROCESS => 'tpl/wrapper',
FILTERS => [ ... ],
UNICODE => 1,
ENCODING => 'UTF-8',
}
);
$self->renderer->add_handler( tt => $tt );
}
Template parameter are taken from C< $c->stash >.
=head1 RENDERING
The template file for C<"example/welcome"> would be C<"templates/welcome.html.tt">.
When template file is not available rendering from C<__DATA__> is attempted.
__DATA__
@@ welcome.html.tt
Welcome, [% user.name %]!
Inline template is also supported:
$self->render(inline => '[% 1 + 1 %]', handler => 'tt');
=head1 HELPERS
Helpers are exported automatically under C<h> namespace.
[% h.url_for('index') %]
=head1 METHODS
=head2 build
This method returns a handler for the Mojolicious renderer.
Supported parameters are
=over 4
=item mojo
C<build> currently uses a C<mojo> parameter pointing to the base class (Mojo).
object. When used the INCLUDE_PATH will be set to
=item template_options
A hash reference of options that are passed to Template->new().
=item cache_dir
Absolute or relative dir to your app home, to cache processed versions of your
templates. Will default to a temp-dir if not set.
=back
=head1 AUTHOR
Current maintainer: Graham Ollis C<< <plicease@cpan.org> >>
Original author: Ask Bjørn Hansen, C<< <ask at develooper.com> >>
=head1 TODO
* Better support non-Mojolicious frameworks
* Better way to pass parameters to the templates? (stash)
* More sophisticated default search path?
=head1 BUGS
Please report any bugs or feature requests to the project's github issue tracker
L<https://github.com/abh/mojox-renderer-tt/issues?state=open>.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Mojolicious::Plugin::TtRenderer::Engine
You can also look for information at:
=over 4
=item * git repository
L<http://git.develooper.com/?p=MojoX-Renderer-TT.git;a=summary>,
L<git://git.develooper.com/MojoX-Renderer-TT.git>
L<http://github.com/abh/mojox-renderer-tt/>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/MojoX-Renderer-TT>
=item * Search CPAN
L<http://search.cpan.org/dist/MojoX-Renderer-TT/>
=back
=head1 COPYRIGHT & LICENSE
Copyright 2008-2010 Ask Bjørn Hansen, all rights reserved.
Copyright 2012 Graham Ollis.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut

2
t/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/tmp/
*.ttc

View File

@@ -1,9 +1,10 @@
#!perl -T
#!perl
use Test::More tests => 1;
use Test::More tests => 2;
BEGIN {
use_ok( 'MojoX::Renderer::TT' );
use_ok( 'Mojolicious::Plugin::TtRenderer' );
use_ok( 'Mojolicious::Plugin::TtRenderer::Engine' );
}
diag( "Testing MojoX::Renderer::TT $MojoX::Renderer::TT::VERSION, Perl $], $^X" );
diag( "Testing Mojolicious::Plugin::TtRenderer::Engine $Mojolicious::Plugin::TtRenderer::Engine::VERSION, Perl $], $^X" );

55
t/deep_recursion.t Normal file
View File

@@ -0,0 +1,55 @@
#!/usr/bin/env perl
use strict;
use warnings;
#BEGIN { $ENV{MOJO_MODE}='testing'; };
use utf8;
use Test::More tests => 3;
use Mojolicious::Lite;
use Test::Mojo;
# Silence
app->log->level('fatal');
plugin 'tt_renderer';
get '/exception' => sub { die };
#say app->mode;
#app->start;
#exit;
my $t = Test::Mojo->new;
$t->app->renderer->default_handler('tt');
my $deep_recursion = 0;
do {
local $SIG{__WARN__} = sub {
my $warning = shift;
if($warning =~ /Deep recursion/) {
$deep_recursion = 1;
die $warning;
}
};
$t->get_ok('/exception')
->status_is(500);
};
ok !$deep_recursion, 'no deep recursion';
__DATA__
@@ exception.development.html.tt
[% 1 + % %]
@@ exception.html.tt
[% 1 + % %]
@@ exception.testing.html.tt
[% 1 + % %]

36
t/default_template.t Normal file
View File

@@ -0,0 +1,36 @@
use strict;
use warnings;
use Test::More tests => 3;
use Test::Mojo;
use Mojolicious::Lite;
# Tell Mojolicious we want to load the TT renderer plugin
app->plugin(
tt_renderer => {
template_options => {
# These options are specific to TT
INCLUDE_PATH => 'templates',
COMPILE_DIR => 'templates_c',
COMPILE_EXT => '.ttc',
# ... anything else to be passed on to TT should go here
},
}
);
app->renderer->default_handler('tt');
get '/' => sub {
die 'foo';
};
my $t = Test::Mojo->new;
$t->get_ok('/')
->status_is(500)
->content_like(qr{foo});
__DATA__
@@ index.html.tt
anything

155
t/lite_app.t Normal file
View File

@@ -0,0 +1,155 @@
#!/usr/bin/env perl
use strict;
use warnings;
BEGIN { $ENV{MOJO_MODE}='testing'; };
use utf8;
use Test::More tests => 39;
use Mojolicious::Lite;
use Mojo::ByteStream 'b';
use Test::Mojo;
# Silence
app->log->level('fatal');
use_ok('Mojolicious::Plugin::TtRenderer::Engine');
plugin 'tt_renderer' => {template_options => {PRE_CHOMP => 1, POST_CHOMP => 1, TRIM => 1}};
get '/exception' => 'error';
get '/with_include' => 'include';
get '/with_wrapper' => 'wrapper';
get '/badinclude' => 'badinclude';
get '/badwrapper' => 'badwrapper';
get '/with_auto_wrapper' => 'auto_wrapper';
get '/inheritance_base' => 'inheritance_base';
get '/inheritance_derived' => 'inheritance_derived';
get '/unicode' => 'unicode';
get '/helpers' => 'helpers';
get '/unknown_helper' => 'unknown_helper';
get '/on-disk' => 'foo';
get '/bar/:message' => 'bar';
get '/inline' => sub { shift->render(inline => '[% 1 + 1 %]', handler => 'tt') };
my $t = Test::Mojo->new;
# Exception
$t->get_ok('/exception')->status_is(500)->content_like(qr/Exception/i);
# Normal rendering
$t->get_ok('/bar/hello')->content_is("hello");
# With include
$t->get_ok('/with_include')->content_is("HelloInclude!Hallo");
# Bad inclde
$t->get_ok('/badinclude')->status_is(500)->content_like(qr/Exception/i)->content_like(qr/bogus\.inc/);
# Bad wrapper
$t->get_ok('/badwrapper')->status_is(500)->content_like(qr/Exception/i)->content_like(qr/layouts\/bogus\.html\.tt/);
# With wrapper
$t->get_ok('/with_wrapper')->content_is("wrapped");
# With auto wrapper
$t->get_ok('/with_auto_wrapper')->content_is("wrapped");
# Inheritance
$t->get_ok('/inheritance_base')->content_is("untouched");
$t->get_ok('/inheritance_derived')->content_is("edited");
# Unicode
$t->get_ok('/unicode')->content_is("привет");
# Helpers
$t->get_ok('/helpers')->content_is("/helpers");
# Unknown helper
$t->get_ok('/unknown_helper')->status_is(500)->content_like(qr//);
# On Disk
$t->get_ok('/on-disk')->content_is("4");
# Not found
$t->get_ok('/not_found')->status_is(404)->content_like(qr/not found/i);
# Inline
$t->get_ok('/inline')->status_is(200)->content_is('2');
__DATA__
@@ bar.html.tt
[% message %]
@@ error.html.tt
[% 1 + % %]
@@ include.inc
Hello
@@ includes/sub/include.inc
Hallo
@@ include.html.tt
[%- INCLUDE 'include.inc' -%]
Include!
[% INCLUDE 'includes/sub/include.inc' -%]
@@ badinclude.html.tt
[%- INCLUDE 'bogus.inc' -%]
not here
@@ layouts/layout.html.tt
w[%- content -%]d
@@ wrapper.html.tt
[%- WRAPPER 'layouts/layout.html.tt' -%]
rappe
[%- END -%]
@@ badwrapper.html.tt
[%- WRAPPER 'layouts/bogus.html.tt' %-]
not here
[%- END -%]
@@ layouts/auto_layout.html.tt
w[%- h.content -%]d
@@ auto_wrapper.html.tt
[% CALL h.layout('auto_layout') %]
rappe
@@ inheritance_base.html.tt
[% verb = BLOCK %]untouch[% END %]
[% h.content('verb', verb) %]ed
@@ inheritance_derived.html.tt
[% CALL h.extends('inheritance_base') %]
[% verb = BLOCK %]edit[% END %]
[% h.content('verb', verb) %]
@@ unicode.html.tt
привет
@@ helpers.html.tt
[% h.url_for('helpers') %]
@@ unknown_helper.html.tt
[% h.unknown_helper('foo') %]

30
t/multiple_paths.t Normal file
View File

@@ -0,0 +1,30 @@
#!/usr/bin/env perl
use strict;
use warnings;
BEGIN { $ENV{MOJO_MODE}='testing'; };
use utf8;
use Test::More tests => 6;
use Mojolicious::Lite;
use Test::Mojo;
# Silence
app->log->level('fatal');
my @paths = map { app->home->rel_dir($_) } "templates/multiple_first", "templates/multiple_second";
app->renderer->paths([@paths]);
plugin 'TtRenderer';
get '/first' => 'first';
get '/second' => 'second';
my $t = Test::Mojo->new;
$t->get_ok('/first')->status_is(200)->content_like(qr/First/);
$t->get_ok('/second')->status_is(200)->content_like(qr/Second/);

View File

@@ -15,4 +15,7 @@ eval "use Pod::Coverage $min_pc";
plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage"
if $@;
all_pod_coverage_ok();
plan tests => 2;
pod_coverage_ok('Mojolicious::Plugin::TtRenderer');
pod_coverage_ok('Mojolicious::Plugin::TtRenderer::Engine', { also_private => [qr{^tt$}] } );

13
t/templates/Foo.pm Normal file
View File

@@ -0,0 +1,13 @@
package
Foo;
1;
__DATA__
@@ include.inc
Hello
@@ includes/sub/include.inc
Hallo
@@ layouts/layout.html.tt
w[%- content -%]d

View File

@@ -0,0 +1,4 @@
foo
[% PROCESS doesnotexist.tt IF do_process %]
bar

View File

@@ -0,0 +1,8 @@
% my $s = $self->stash;
% my $e = $self->stash('exception');
% delete $s->{inner_template};
% delete $s->{exception};
% my $dump = dumper $s;
% $s->{exception} = $e;
An Exception has occured: <%= $e->message %>
at <%= $e->line->[0] %> in <%= $e->line->[1] %>

1
t/templates/foo.html.tt Normal file
View File

@@ -0,0 +1 @@
[% 2 + 2 %]

View File

@@ -0,0 +1 @@
test123[% 456 %]

View File

@@ -0,0 +1 @@
First

View File

@@ -0,0 +1 @@
Second

View File

@@ -0,0 +1 @@
Second

71
t/tt_plugin_lite_app.t Normal file
View File

@@ -0,0 +1,71 @@
#!/usr/bin/env perl
# Copyright (C) 2008-2010, Sebastian Riedel.
use strict;
use warnings;
BEGIN {
#use if $^O ne 'MSWin32', POSIX => qw/setlocale LC_ALL/;
#setlocale(&LC_ALL, 'C') if $^O ne 'MSWin32';
unless($^O eq 'MSWin32') {
eval q{
use POSIX qw( setlocale LC_ALL );
setlocale(LC_ALL, 'C');
};
warn $@ if $@;
}
}
use File::Temp;
use Mojo::IOLoop;
use Test::More;
# Use a clean temporary directory
BEGIN { $ENV{MOJO_TMPDIR} ||= File::Temp::tempdir }
# Make sure sockets are working
plan skip_all => 'working sockets required for this test!'
unless Mojo::IOLoop->new->generate_port;
plan tests => 6;
# Leela: OK, this has gotta stop. I'm going to remind Fry of his humanity the way only a woman can.
# Farnsworth: You're going to do his laundry?
use Mojolicious::Lite;
use Test::Mojo;
# POD renderer plugin
plugin 'tt_renderer';
# Silence
app->log->level('error');
# GET /
get '/' => 'index';
get '/blow' => sub {
shift->render(template => 'conditional-exception', do_process => 1);
};
my $t = Test::Mojo->new;
# Simple TT template
$t->get_ok('/')->status_is(200)
->content_like(qr/test123456/);
$t->get_ok('/blow')->status_is(500)->content_like(qr/file error - doesnotexist\.tt: No such file or directory/);
if(eval q{ use Devel::Cycle; 1 })
{
Devel::Cycle::find_cycle(app, sub {
my $arg = shift;
# Template::Provider (from which M::P::T::Provider inherits) has some cycles which are freed manaully by
# its DESTROY method, so we skip reporting those cycles.
unless(scalar(scalar(grep { ref($_->[2]) eq 'Mojolicious::Plugin::TtRenderer::Provider' && $_->[1] =~ /^(HEAD|TAIL|LOOKUP)$/ } @$arg)) > 0)
{
#use YAML ();
#diag YAML::Dump([ map { [ $_->[0], $_->[1], ref($_->[2]), ref($_->[3]) ] } @$arg ]);
fail('Cycle found')
}
});
};

48
t/two_data.t Normal file
View File

@@ -0,0 +1,48 @@
#!/usr/bin/env perl
use strict;
use warnings;
BEGIN { $ENV{MOJO_MODE} = 'testing' };
use utf8;
use Test::More tests => 7;
use Mojolicious::Lite;
use Test::Mojo;
use File::Temp qw( tempdir );
use FindBin ();
use lib "$FindBin::Bin/templates";
use_ok 'Foo';
push @{app->renderer->classes}, 'Foo';
plugin 'tt_renderer' => {template_options => {PRE_CHOMP => 1, POST_CHOMP => 1, TRIM => 1}};
app->log->level('fatal');
get '/with_include' => 'include';
get '/with_wrapper' => 'wrapper';
my $t = Test::Mojo->new;
# With include
$t->get_ok('/with_include')->status_is(200)->content_is("HelloInclude!Hallo");
# With wrapper
$t->get_ok('/with_wrapper')->status_is(200)->content_is("wrapped");
__DATA__
@@ wrapper.html.tt
[%- WRAPPER 'layouts/layout.html.tt' -%]
rappe
[%- END -%]
@@ include.html.tt
[%- INCLUDE 'include.inc' -%]
Include!
[%- INCLUDE 'includes/sub/include.inc' -%]