Compare commits

...

139 Commits

Author SHA1 Message Date
Graham Ollis
88041ec8b0 fix cpantesters failures based on permissions 2013-01-12 09:05:35 -05:00
Graham Ollis
1fe6401667 update Changes 2013-01-09 14:19:22 -05:00
Graham Ollis
c00f8934de rm not_found, as it is no longer used. 2013-01-09 14:14:44 -05:00
Graham Ollis
d4902f8bf0 Merge pull request #34 from rkitover/master
fix reporting not found templates
2013-01-09 11:08:03 -08:00
Rafael Kitover
4225658dbc report not finding a template correctly
TtRenderer was dying with a 'not found' error when a template was not
found, instead of returning 0, which was interfering with things like
the error screen.

Use $provider->fetch to find templates and return 0 when a template is
not found.
2013-01-09 13:17:11 -05:00
Rafael Kitover
d45efa5405 failing test for not returning not found correctly 2013-01-09 13:13:53 -05:00
Graham Ollis
f3e65cedce v1.35 2012-12-30 10:33:14 -05:00
Graham Ollis
906c68db34 doco 2012-12-30 10:33:01 -05:00
Graham Ollis
c7012a1be0 doco typo 2012-12-29 10:27:32 -05:00
Graham Ollis
5e7728270f v1.34 2012-12-29 10:23:19 -05:00
Graham Ollis
7618cacaa4 fix hang in t/deep_recursion.t on *BSD 2012-12-27 14:51:34 -05:00
Graham Ollis
80340f9950 update changes 2012-12-27 13:37:31 -05:00
Graham Ollis
fb396704bf Merge branch 'master' of github.com:abh/mojox-renderer-tt 2012-12-27 13:22:20 -05:00
Graham Ollis
1d9ea654e9 use temp COMPILE_DIR to avoid test failures
where the default COMPILE_DIR already exists and is owned
by another user or not writable for some other reason by
the testing user.
2012-12-27 13:21:23 -05:00
Graham Ollis
3ec7366d6e better diagnostics
use filename and linenumber in eval for better diagnostic in test
2012-12-26 21:56:21 -05:00
Graham Ollis
a5e72c7526 rm commented code 2012-12-26 21:26:57 -05:00
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
31 changed files with 1279 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"

130
Changes
View File

@@ -1,5 +1,131 @@
Revision history for MojoX-Renderer-TT
Revision history for Mojolicious::Plugin::TtRenderer
{{$NEXT}}
- fix default_template2.t to use temp directory for COMPILE_DIR
1.36 January 9, 2013
- Use $provider->fetch to find templates (GH#34)
1.35 December 30, 2012
- Documentation fix
1.34 December 29, 2012
- Include META.json in distribution.
1.33 December 27, 2012
- Fix hang in t/deep_recursion.t on *BSD
1.32 December 27, 2012
- silenced a few annoying warnings during test
- use temp directory for COMPILE_DIR in tests to avoid failures if the
default compile directory already exists and is owned by someone else.
1.31 December 26, 2012
- 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<Mojolicious::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.

59
dist.ini Normal file
View File

@@ -0,0 +1,59 @@
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]
[MetaJSON]

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<Mojolicious::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,353 @@
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';
use POSIX ':errno_h';
__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);
my $ok = do {
if (defined $inline) {
$self->tt->process(\$inline, @params);
}
else {
my @ret = $provider->fetch($t);
if (not defined $ret[1]) {
$self->tt->process($ret[0], @params);
}
elsif (not defined $ret[0]) { # not found
return 0;
}
else { # error
return 0 if $! == ENOENT && (not ref $ret[0]); # not found when not blessed exception
die $ret[0];
}
}
};
# 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 _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);
} 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,9 @@
#!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" );

60
t/deep_recursion.t Normal file
View File

@@ -0,0 +1,60 @@
#!/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;
use File::Temp qw( tempdir );
use File::Spec;
# Send log to tmp file so that it doesn't clutter up the screen.
app->log->level('fatal');
app->log->path(do {
File::Spec->catfile(tempdir(CLEANUP => 1), 'mojo.log');
});
plugin 'tt_renderer' => {template_options => { COMPILE_DIR => tempdir( CLEANUP => 1 ) }};
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 + % %]

37
t/default_template.t Normal file
View File

@@ -0,0 +1,37 @@
use strict;
use warnings;
use Test::More tests => 3;
use Test::Mojo;
use File::Temp qw( tempdir );
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 => tempdir( CLEANUP => 1 ),
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

37
t/default_template2.t Normal file
View File

@@ -0,0 +1,37 @@
use strict;
use warnings;
use Test::More tests => 3;
use Test::Mojo;
use File::Temp qw( tempdir );
use FindBin '$Bin';
use Mojolicious::Lite;
use Mojolicious::Plugin::TtRenderer::Engine ();
my $tt = Mojolicious::Plugin::TtRenderer::Engine->build(
mojo => app,
template_options => {
UNICODE => 1,
ENCODING => 'UTF-8',
INCLUDE_PATH => "$Bin/templates",
COMPILE_DIR => tempdir( CLEANUP => 1 ),
}
);
app->renderer->add_handler(tt => $tt);
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

156
t/lite_app.t Normal file
View File

@@ -0,0 +1,156 @@
#!/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;
use File::Temp qw( tempdir );
# Silence
app->log->level('fatal');
use_ok('Mojolicious::Plugin::TtRenderer::Engine');
plugin 'tt_renderer' => {template_options => {PRE_CHOMP => 1, POST_CHOMP => 1, TRIM => 1, COMPILE_DIR => tempdir( CLEANUP => 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') %]

31
t/multiple_paths.t Normal file
View File

@@ -0,0 +1,31 @@
#!/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;
use File::Temp qw( tempdir );
# Silence
app->log->level('fatal');
my @paths = map { app->home->rel_dir($_) } "templates/multiple_first", "templates/multiple_second";
app->renderer->paths([@paths]);
plugin 'TtRenderer' => {template_options => { COMPILE_DIR => tempdir( CLEANUP => 1 ) }};
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 {
unless($^O eq 'MSWin32') {
eval '# line '. __LINE__ . ' "' . __FILE__ . qq("\n). q{
use POSIX qw( setlocale LC_ALL );
setlocale(LC_ALL, 'C');
};
warn $@ if $@;
}
}
use File::Temp qw( tempdir );
use Mojo::IOLoop;
use Test::More;
# Use a clean temporary directory
BEGIN { $ENV{MOJO_TMPDIR} ||= tempdir( CLEANUP => 1) }
# 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' => {template_options => { COMPILE_DIR => tempdir( CLEANUP => 1 ) }};
# 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 })
{
# ignore warnings coming from Devel::Cycle
local $SIG{__WARN__} = sub { };
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, COMPILE_DIR => tempdir( CLEANUP => 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' -%]