Compare commits

...

64 Commits

Author SHA1 Message Date
Graham Ollis
56599bf4f7 rm unnecessary returns 2015-03-19 13:45:03 -04:00
Graham Ollis
bba3793735 v1.55
- Mojo 6.x compat
2015-02-28 10:32:15 -05:00
Graham Ollis
ac65e8797e update changes 2015-02-28 10:31:34 -05:00
Graham Ollis
32f8daf9cd mojo 6.x compat 2015-02-28 10:31:27 -05:00
Graham Ollis
1025d74a36 v1.54
- cpantesters: do not report on older perls
2014-12-20 10:18:14 -05:00
Graham Ollis
4203effb6b update changes 2014-12-20 10:16:02 -05:00
Graham Ollis
c6276a8d78 update release tests and diagnostic 2014-12-20 10:15:34 -05:00
Graham Ollis
6dfa5560a8 do not report on older Perls 2014-12-20 10:14:21 -05:00
Graham Ollis
bca2f85fb3 update travis 2014-07-31 08:24:57 -04:00
Graham Ollis
5b364d31ac v1.53
- Mojolicious 5.0 support
2014-05-31 06:23:08 -04:00
Graham Ollis
f9bc6aa56a some house keeping 2014-05-31 06:20:50 -04:00
Graham Ollis
65e4bbf7c8 Mojolicious 5.0 support 2014-05-31 06:12:45 -04:00
Graham Ollis
5870c014c2 v1.52
- updated repository name
2014-05-08 19:27:10 -04:00
Graham Ollis
8dcb4147f7 updated repostiryo name 2014-05-08 19:25:32 -04:00
Graham Ollis
c489fbc86e update diagnostic and release tets 2014-05-08 19:25:20 -04:00
Graham Ollis
9699560925 clean up deps 2014-03-21 15:06:29 -04:00
Graham Ollis
247e2251b3 v1.51
- extended diagnostics
        - documentation tweaks
        - fix non-lite app example (GH#41, uwisser)
2014-03-21 14:59:55 -04:00
Graham Ollis
1b1e8cb63e doco 2014-03-21 14:58:55 -04:00
Graham Ollis
6598b29c2c update release tests 2014-03-21 14:58:30 -04:00
Graham Ollis
b40a0f97ee spelling 2014-03-21 14:58:16 -04:00
Graham Ollis
a1f36d716f update diagnostic 2014-03-21 14:57:50 -04:00
Graham Ollis
af07f0f983 example dev log should not be included in git or cpan 2014-03-21 14:42:55 -04:00
Ulrich Wisser
14884dd82d Fix template names in text and variable name in heading 2014-03-21 10:24:25 +01:00
Graham Ollis
f029ad393f doco 2013-09-28 12:45:16 -04:00
Graham Ollis
3ca192cd4f new diagnostic 2013-09-28 12:36:00 -04:00
Graham Ollis
e955bb151a spacing 2013-09-28 12:26:19 -04:00
Graham Ollis
02696ed4a1 migrate to newer version of [@Author::Plicease] 2013-09-10 07:53:20 -04:00
Graham Ollis
7bf464398d v1.50
- update Changes to follow spec (GH#39, Сергей Романов)
        - minor documentation fixes
2013-08-08 16:51:35 -04:00
Graham Ollis
a7a268267c fix the stopwords 2013-08-08 16:50:43 -04:00
Graham Ollis
19876306b6 tweaks 2013-08-08 16:45:01 -04:00
Graham Ollis
2b230680e5 Merge branch 'master' of github.com:plicease/mojox-renderer-tt 2013-08-08 16:37:25 -04:00
Graham Ollis
b72fb699e9 add release tests
(fix minor stuff found by release tets)
2013-08-08 16:37:09 -04:00
Graham Ollis
9667221f20 Merge pull request #39 from sergeyromanov/patch-1
Reformat change log as per CPAN::Changes::Spec
2013-08-08 13:36:23 -07:00
Sergey Romanov
a9ffb24a8f Revert dist.ini, put time and TZ back 2013-08-08 23:43:41 +04:00
Graham Ollis
f0136a4a24 forgot that mojo doesn't support 5.8 anymore 2013-08-08 15:18:25 -04:00
Sergey Romanov
003b7c431c Adjust release date format within dzil 2013-08-08 21:42:19 +04:00
Sergey Romanov
a55ae15582 Reformat change log as per CPAN::Changes::Spec 2013-08-08 21:22:02 +04:00
Graham Ollis
75d795fd6f more perl? 2013-08-08 09:22:36 -04:00
Graham Ollis
9c4e322dec v1.49
- documentation
2013-08-08 09:19:19 -04:00
Graham Ollis
48b19a5ab9 formatting fixes 2013-08-08 09:18:41 -04:00
Graham Ollis
6cd14f157a v1.48
- documentation
2013-08-08 09:13:32 -04:00
Graham Ollis
da9f15fa17 you know what? Don't really need that. 2013-08-08 09:13:07 -04:00
Graham Ollis
5267ab7538 more doco improvements 2013-08-08 09:11:04 -04:00
Graham Ollis
90e2562862 tweak example 2013-08-08 09:05:58 -04:00
Graham Ollis
e541ac92b7 include a full app example 2013-08-08 09:03:48 -04:00
Graham Ollis
6386e0620e doco 2013-08-08 08:51:56 -04:00
Graham Ollis
cfbf3e8ea3 use mojolicious' full name in abstract 2013-08-07 09:52:27 -04:00
Graham Ollis
8a367fc87d v1.47
- Template-Toolkit 2.25 compatability
2013-07-26 06:07:47 -04:00
Graham Ollis
ab7117d632 change regex to fix test 2013-07-26 05:58:36 -04:00
Graham Ollis
b2062785db Merge branch 'master' of github.com:plicease/mojox-renderer-tt 2013-07-10 07:35:13 -04:00
Graham Ollis
a30b13d6b0 doco 2013-07-10 07:35:01 -04:00
Graham Ollis
002efafefa test against perl 5.18 2013-07-06 09:28:45 -04:00
Graham Ollis
fc6b51b1c1 rm pre-dzil cruft 2013-06-25 12:00:03 -04:00
Graham Ollis
654ff61789 v1.46
- Mojolicious 4.0 compatability
2013-05-19 11:13:27 -04:00
Graham Ollis
d340a27585 travis update 2013-05-19 11:10:25 -04:00
Graham Ollis
5d3e3eaf3b mojo 4.0 compat 2013-05-19 11:07:01 -04:00
Graham Ollis
d63632735f test against 5.16 2013-05-07 20:26:06 -04:00
Graham Ollis
90f8df88a9 v1.45
- correctly support app->default->{layout} (GH#37, Fayland Lam)
2013-04-26 13:38:19 -04:00
Fayland Lam
fe963f6511 fix for defaults layout 2013-04-26 13:35:46 -04:00
Graham Ollis
9be62a9c2c v1.44
- promote development changes to production
2013-04-13 17:49:27 -04:00
Graham Ollis
7f072b88be v1.43_01
- _template_modified returns value from super class instead of 1 if true (GH#36, Fayland Lam)
2013-04-11 15:43:42 -04:00
Graham Ollis
0faf79001b fix for GH#36 2013-04-11 15:42:20 -04:00
Graham Ollis
f22529d42e v1.43
- promote development changes
2013-04-08 14:03:08 -04:00
Graham Ollis
abcd8c3293 v1.42_04
- Updated meta for new github repo location
2013-04-06 20:30:57 -04:00
43 changed files with 1312 additions and 540 deletions

17
.gitignore vendored
View File

@@ -1,14 +1,3 @@
blib*
Makefile
Makefile.old
Build
_build*
pm_to_blib*
*.tar.gz
.lwpcookies
Mojolicious-Plugin-TtRenderer-*
MojoX-Renderer-TT-*
cover_db
*~
*.bak
.build
/Mojolicious-Plugin-TtRenderer-*
/.build
/example/myapp/log/development.log

View File

@@ -1,8 +1,13 @@
language: perl
install:
- cpanm Mojolicious Template
- cpanm -n Mojolicious
- cpanm -n Template
script: HARNESS_IS_VERBOSE=1 prove -v -Ilib t
perl:
- "5.21"
- "5.20"
- "5.18"
- "5.16"
- "5.14"
- "5.12"
- "5.10"

263
Changes
View File

@@ -2,156 +2,203 @@ Revision history for Mojolicious::Plugin::TtRenderer
{{$NEXT}}
1.42_03 March 22, 2013
- Allow custom relative paths for cache_dir (GH#35, Jason Crowther)
1.55 2015-02-28 10:31:58 -0500
- Mojo 6.x compat
1.42_02 February 26, 2013
- only create COMPILE_DIR based on UID if the user doesn't specify COMPILE_DIR
1.54 2014-12-20 10:17:47 -0500
- cpantesters: do not report on older perls
1.42_01 February 24, 2013
- set COMPILE_DIR based on UID so that multiple users can use TtRenderer with default config
1.53 2014-05-31 06:22:47 -0400
- Mojolicious 5.0 support
1.42 February 24, 2013
- fix for test on solaris
1.52 2014-05-08 19:26:47 -0400
- updated repository name
1.41 February 23, 2013
- Additional testing diagnostics
1.51 2014-03-21 14:59:39 -0400
- extended diagnostics
- documentation tweaks
- fix non-lite app example (GH#41, uwisser)
1.40 February 20, 2013
- Added diagnostic for IO loop implementation in testing
1.50 2013-08-08T16:51:21-0400
- update Changes to follow spec (GH#39, Сергей Романов)
- minor documentation fixes
1.39 January 28, 2013
- Documentation updates.
1.49 2013-08-08T09:18:54-0400
- documentation
1.38 January 27, 2013
- fixed but where DATA templates were not being rendered with empty renderer path
1.48 2013-08-08T09:13:19-0400
- documentation
1.37 January 12, 2013
- fix default_template2.t to use temp directory for COMPILE_DIR
1.47 2013-07-26T06:07:35-0400
- Template-Toolkit 2.25 compatability
1.36 January 9, 2013
- Use $provider->fetch to find templates (GH#34)
1.46 2013-05-19
- Mojolicious 4.0 compatability
1.35 December 30, 2012
- Documentation fix
1.45 2013-04-26
- correctly support app->default->{layout} (GH#37, Fayland Lam)
1.34 December 29, 2012
- Include META.json in distribution.
1.44 2013-04-13
- promote development changes to production
1.33 December 27, 2012
- Fix hang in t/deep_recursion.t on *BSD
1.43_01 2013-04-11
- _template_modified returns value from super class instead of 1 if true (GH#36, Fayland Lam)
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
1.43 2013-04-08
- promote development changes
1.42_04 2013-04-06
- Updated meta for new github repo location
1.42_03 2013-03-22
- Allow custom relative paths for cache_dir (GH#35, Jason Crowther)
1.42_02 2013-02-26
- only create COMPILE_DIR based on UID if the user doesn't specify COMPILE_DIR
1.42_01 2013-02-24
- set COMPILE_DIR based on UID so that multiple users can use TtRenderer with default config
1.42 2013-02-24
- fix for test on solaris
1.41 2013-02-23
- Additional testing diagnostics
1.40 2013-02-20
- Added diagnostic for IO loop implementation in testing
1.39 2013-01-28
- Documentation updates.
1.38 2013-01-27
- fixed but where DATA templates were not being rendered with empty renderer path
1.37 2013-01-12
- fix default_template2.t to use temp directory for COMPILE_DIR
1.36 2013-01-09
- Use $provider->fetch to find templates (GH#34)
1.35 2012-12-30
- Documentation fix
1.34 2012-12-29
- Include META.json in distribution.
1.33 2012-12-27
- Fix hang in t/deep_recursion.t on *BSD
1.32 2012-12-27
- 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.31 2012-12-26
- 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.30 2012-12-22
- 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.29 2012-12-18
- support multiple renderer paths
1.28 October 11, 2012
- specify minimum perl version
1.28 2012-10-11
- specify minimum perl version
1.27 October 2, 2012
- documentation fixes and updates.
1.27 2012-10-02
- documentation fixes and updates.
1.26 August 31, 2012
- Windows compatability with Cwd::abs_path
1.26 2012-08-31
- Windows compatability with Cwd::abs_path
1.25 August 25, 2012
- Return 0 on not found, die on error (GH#30)
1.25 2012-08-25
- Return 0 on not found, die on error (GH#30)
1.24 August 23, 2012
- Compatibility with Mojolicious 3.33+
1.24 2012-08-23
- Compatibility with Mojolicious 3.33+
1.23 August 23, 2012
- Use die instead of render_exception (GH#29)
1.23 2012-08-23
- 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.22 2012-08-21
- 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.21 2012-06-05
- 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::
1.20 2011-08-01
- Drop use of MojoX namespace for Mojolicious::Plugin::TtRenderer::
(GH#12, Cosimo Streppone)
1.13 June 7, 2011
- Compatibility with Mojolicious 1.3+
1.13 2011-06-07
- Compatibility with Mojolicious 1.3+
1.12 February 28, 2011
- Inline wrappers and includes now work on Windows
1.12 2011-02-28
- 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.11 2011-02-06
- Change to use relative paths (Marcus Ramberg)
- Add exception template for tests
1.10 February 5, 2011
- Support Mojolicious 'layout'/'extends' (Maxim Vuets, Marcus
1.10 2011-02-05
- Support Mojolicious 'layout'/'extends' (Maxim Vuets, Marcus
Ramberg)
- Fix Strawberry Perl tests (RT#65282, Christiaan Kras, Ask)
- Update bugtracker URL in META.yml
- 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)
1.0 2011-01-22
- 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.40 2010-08-02
- 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.31 2009-09-11
- 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.30 2009-09-09
- 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
0.21 2009-07-29
- 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
0.20 2008-12-09
- 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
0.10 2008-11-12
- 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.
0.02 2008-11-10
- Add template_options parameter
- Fix Template dependency
0.01 2008-11-09
- First version, released on an unsuspecting world.

View File

@@ -1,44 +0,0 @@
# 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$

231
README.md Normal file
View File

@@ -0,0 +1,231 @@
# Mojolicious::Plugin::TtRenderer [![Build Status](https://secure.travis-ci.org/plicease/Mojolicious-Plugin-TtRenderer.png)](http://travis-ci.org/plicease/Mojolicious-Plugin-TtRenderer)
Template Renderer Plugin for Mojolicious
# SYNOPSIS
[Mojolicious::Lite](https://metacpan.org/pod/Mojolicious::Lite):
plugin 'tt_renderer';
[Mojolicious](https://metacpan.org/pod/Mojolicious)
$self->plugin('tt_renderer');
# DESCRIPTION
This plugin is a simple Template Toolkit renderer for [Mojolicious](https://metacpan.org/pod/Mojolicious).
Its defaults are usually reasonable, although for finer grain detail in
configuration you may want to use
[Mojolicious::Plugin::TtRenderer::Engine](https://metacpan.org/pod/Mojolicious::Plugin::TtRenderer::Engine) directly.
# OPTIONS
These are the options that can be passed in as arguments to this plugin.
## template\_options
Configuration hash passed into [Template](https://metacpan.org/pod/Template)'s constructor, see
[Template Toolkit's configuration summary](https://metacpan.org/pod/Template#CONFIGURATION-SUMMARY)
for details. Here is an example using the [Mojolicious::Lite](https://metacpan.org/pod/Mojolicious::Lite) form:
plugin 'tt_renderer' => {
template_options => {
PRE_CHOMP => 1,
POST_CHOMP => 1,
TRIM => 1,
},
};
Here is the same example using the full [Mojolicious](https://metacpan.org/pod/Mojolicious) app form:
package MyApp;
use Mojo::Base qw( Mojolicious );
sub startup {
my($self) = @_;
$self->plugin('tt_renderer' => {
template_options => {
PRE_CHOMP => 1,
POST_CHOMP => 1,
TRIM => 1,
},
}
...
}
These options will be used if you do not override them:
- INCLUDE\_PATH
Generated based on your application's renderer's configuration. It
will include all renderer paths, in addition to search files located
in the `__DATA__` section by the usual logic used by [Mojolicious](https://metacpan.org/pod/Mojolicious).
- COMPILE\_EXT
`.ttc`
- UNICODE
`1` (true)
- ENCODING
`utf-87`
- CACHE\_SIZE
`128`
- RELATIVE
`1` (true)
## cache\_dir
Specifies the directory in which compiled template files are
written. This:
plugin 'tt_renderer', { cache_dir => 'some/path' };
is equivalent to
plugin 'tt_renderer', { template_options { COMPILE_DIR => 'some/path' } };
except in the first example relative paths are relative to the [Mojolicious](https://metacpan.org/pod/Mojolicious)
app's home directory (`$app->home`).
# STASH
## h
Helpers are available via the `h` entry in the stash.
<a href="[% h.url_for('index') %]">go back to index</a>
## c
The current controller instance can be accessed as `c`.
I see you are requesting a document from [% c.req.headers.host %].
# EXAMPLES
[Mojolicious::Lite](https://metacpan.org/pod/Mojolicious::Lite) example:
use Mojolicious::Lite;
plugin 'tt_renderer';
get '/' => sub {
my $self = shift;
$self->render('index');
};
app->start;
__DATA__
@@ index.html.tt
[%
WRAPPER 'layouts/default.html.tt'
title = 'Welcome'
%]
<p>Welcome to the Mojolicious real-time web framework!</p>
<p>Welcome to the TtRenderer plugin!</p>
[% END %]
@@ layouts/default.html.tt
<!DOCTYPE html>
<html>
<head><title>[% title %]</title></head>
<body>[% content %]</body>
</html>
[Mojolicious](https://metacpan.org/pod/Mojolicious) example:
package MyApp;
use Mojo::Base 'Mojolicious';
sub startup {
my $self = shift;
$self->plugin('tt_renderer');
my $r = $self->routes;
$r->get('/')->to('example#welcome');
}
1;
package MyApp::Example;
use Mojo::Base 'Mojolicious::Controller';
# This action will render a template
sub welcome {
my $self = shift;
# Render template "example/welcome.html.tt" with message
$self->render(
message => 'Looks like your TtRenderer is working!');
}
1;
These are also included with the `Mojolicious::Plugin::TtRenderer`
distribution, including the support files required for the full
[Mojolicious](https://metacpan.org/pod/Mojolicious) app example.
# SEE ALSO
[Mojolicious::Plugin::TtRenderer::Engine](https://metacpan.org/pod/Mojolicious::Plugin::TtRenderer::Engine),
[Mojolicious](https://metacpan.org/pod/Mojolicious),
[Mojolicious::Guides](https://metacpan.org/pod/Mojolicious::Guides),
[http://mojolicious.org](http://mojolicious.org).
# AUTHOR
Original author: Ask Bjørn Hansen
Current maintainer: Graham Ollis <plicease@cpan.org>
Contributors:
vti
Marcus Ramberg
Matthias Bethke
Htbaa
Magnus Holm
Maxim Vuets
Rafael Kitover
giftnuss
Cosimo Streppone
Fayland Lam
Jason Crowther
spleenjack
Árpád Szász
Сергей Романов
uwisser
# COPYRIGHT AND LICENSE
This software is copyright (c) 2015 by Ask Bjørn Hansen.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

View File

@@ -1,92 +0,0 @@
=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.

View File

@@ -5,57 +5,64 @@ license = Perl_5
copyright_holder = Ask Bjørn Hansen
# copyright_year = 2009
version = 1.42_03
version = 1.55
[@Author::Plicease]
release_tests = 1
travis_status = 1
installer = ModuleBuild
[Prereqs]
Mojolicious = 3.33
Mojolicious = 5.81
Template = 2.18
[Prereqs / TestRequires ]
Test::More = 0
[Author::Plicease::Thanks]
current = Graham Ollis <plicease@cpan.org>
original = Ask Bjørn Hansen
contributor = vti
contributor = Marcus Ramberg
contributor = Matthias Bethke
contributor = Htbaa
contributor = Magnus Holm
contributor = Maxim Vuets
contributor = Rafael Kitover
contributor = giftnuss
contributor = Cosimo Streppone
contributor = Fayland Lam
contributor = Jason Crowther
contributor = spleenjack
contributor = Árpád Szász
contributor = Сергей Романов
contributor = uwisser
[NextRelease]
format = %-7v %{MMMM d, yyyy}d
[Author::Plicease::Upload]
[@Git]
tag_format = release/%v
# push_to = all
[InsertExample]
[@Filter]
bundle = @Basic
remove = Readme
remove = Manifest
[MetaNoIndex]
directory = example
[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
[RemovePrereqs]
; comes with Perl
remove = warnings
remove = strict
remove = lib
remove = utf8
remove = base
remove = Carp
remove = Cwd
remove = File::Spec
remove = Scalar::Util
remove = File::Temp
remove = FindBin
remove = IO::Handle
[Homepage]
; comes with Mojolicious
remove = Mojo::Base
remove = Mojo::ByteStream
remove = Mojolicious::Plugin
remove = Mojo::IOLoop
remove = Mojolicious::Lite
remove = Test::Mojo
;[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]
[MinimumPerl]
[MetaJSON]
[Author::Plicease::InstallerPerlVersion]

8
example/README Normal file
View File

@@ -0,0 +1,8 @@
Included in this directory are two examples of how to use the Template Toolkit
Renderer.
myapp.pl - Mojolicious::Lite example
myapp/ - full Mojolicious application example
They were created as minor modifications of the applications generated
using the 'mojo generate' command.

28
example/myapp.pl Normal file
View File

@@ -0,0 +1,28 @@
use Mojolicious::Lite;
plugin 'tt_renderer';
get '/' => sub {
my $self = shift;
$self->render('index');
};
app->start;
__DATA__
@@ index.html.tt
[%
WRAPPER 'layouts/default.html.tt'
title = 'Welcome'
%]
<p>Welcome to the Mojolicious real-time web framework!</p>
<p>Welcome to the TtRenderer plugin!</p>
[% END %]
@@ layouts/default.html.tt
<!DOCTYPE html>
<html>
<head><title>[% title %]</title></head>
<body>[% content %]</body>
</html>

View File

@@ -0,0 +1,11 @@
package MyApp;
use Mojo::Base 'Mojolicious';
sub startup {
my $self = shift;
$self->plugin('tt_renderer');
my $r = $self->routes;
$r->get('/')->to('example#welcome');
}
1;

View File

@@ -0,0 +1,13 @@
package MyApp::Example;
use Mojo::Base 'Mojolicious::Controller';
# This action will render a template
sub welcome {
my $self = shift;
# Render template "example/welcome.html.tt" with message
$self->render(
message => 'Looks like your TtRenderer is working!');
}
1;

View File

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<title>Welcome to the Mojolicious real-time web framework!</title>
</head>
<body>
<h2>Welcome to the Mojolicious real-time web framework!</h2>
This is the static document "public/index.html",
<a href="/">click here</a> to get back to the start.
</body>
</html>

11
example/myapp/script/my_app Executable file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/env perl
use strict;
use warnings;
use FindBin;
BEGIN { unshift @INC, "$FindBin::Bin/../lib" }
# Start command line interface for application
require Mojolicious::Commands;
Mojolicious::Commands->start_app('MyApp');

9
example/myapp/t/basic.t Normal file
View File

@@ -0,0 +1,9 @@
use Mojo::Base -strict;
use Test::More;
use Test::Mojo;
my $t = Test::Mojo->new('MyApp');
$t->get_ok('/')->status_is(200)->content_like(qr/Mojolicious/i);
done_testing();

View File

@@ -0,0 +1,10 @@
[%
WRAPPER 'layouts/default.html.tt'
title = 'Welcome'
%]
<h2>[% message %]</h2>
This page was generated from the template "templates/example/welcome.html.tt"
and the layout "templates/layouts/default.html.tt",
<a href="[% url_for %]">click here</a> to reload the page or
<a href="/index.html">here</a> to move forward to a static page.
[% END %]

View File

@@ -0,0 +1,5 @@
<!DOCTYPE html>
<html>
<head><title>[% title %]</title></head>
<body>[% content %]</body>
</html>

View File

@@ -4,6 +4,9 @@ use strict;
use warnings;
use v5.10;
# ABSTRACT: Template Renderer Plugin for Mojolicious
# VERSION
use base 'Mojolicious::Plugin';
use Mojolicious::Plugin::TtRenderer::Engine;
@@ -26,41 +29,144 @@ __END__
=encoding utf-8
=head1 NAME
=begin stopwords
Mojolicious::Plugin::TtRenderer - Template Renderer Plugin
Bjørn
Szász
Árpád
=end stopwords
=head1 SYNOPSIS
# Mojolicious
$self->plugin('tt_renderer');
$self->plugin(tt_renderer => {template_options => {FILTERS => [ ... ]}});
L<Mojolicious::Lite>:
# Mojolicious::Lite
plugin 'tt_renderer';
plugin tt_renderer => {template_options => {FILTERS => [ ... ]}};
L<Mojolicious>
$self->plugin('tt_renderer');
=head1 DESCRIPTION
L<Mojolicious::Plugin::TtRenderer> is a simple loader for
L<Mojolicious::Plugin::TtRenderer::Engine>.
This plugin is a simple Template Toolkit renderer for L<Mojolicious>.
Its defaults are usually reasonable, although for finer grain detail in
configuration you may want to use
L<Mojolicious::Plugin::TtRenderer::Engine> directly.
=head1 METHODS
=head1 OPTIONS
L<Mojolicious::Plugin::TtRenderer> inherits all methods from
L<Mojolicious::Plugin> and implements the following new ones.
These are the options that can be passed in as arguments to this plugin.
=head2 C<register>
=head2 template_options
$plugin->register;
Configuration hash passed into L<Template>'s constructor, see
L<Template Toolkit's configuration summary|Template#CONFIGURATION-SUMMARY>
for details. Here is an example using the L<Mojolicious::Lite> form:
Register renderer in L<Mojolicious> application.
plugin 'tt_renderer' => {
template_options => {
PRE_CHOMP => 1,
POST_CHOMP => 1,
TRIM => 1,
},
};
=head1 EXTRA STASH VARIABLES
Here is the same example using the full L<Mojolicious> app form:
package MyApp;
use Mojo::Base qw( Mojolicious );
sub startup {
my($self) = @_;
$self->plugin('tt_renderer' => {
template_options => {
PRE_CHOMP => 1,
POST_CHOMP => 1,
TRIM => 1,
},
}
...
}
These options will be used if you do not override them:
=over 4
=item INCLUDE_PATH
Generated based on your application's renderer's configuration. It
will include all renderer paths, in addition to search files located
in the C<__DATA__> section by the usual logic used by L<Mojolicious>.
=item COMPILE_EXT
C<.ttc>
=item UNICODE
C<1> (true)
=item ENCODING
C<utf-87>
=item CACHE_SIZE
C<128>
=item RELATIVE
C<1> (true)
=back
=head2 cache_dir
Specifies the directory in which compiled template files are
written. This:
plugin 'tt_renderer', { cache_dir => 'some/path' };
is equivalent to
plugin 'tt_renderer', { template_options { COMPILE_DIR => 'some/path' } };
except in the first example relative paths are relative to the L<Mojolicious>
app's home directory (C<$app-E<gt>home>).
=head1 STASH
=head2 h
Helpers are available via the C<h> entry in the stash.
<a href="[% h.url_for('index') %]">go back to index</a>
=head2 c
The current controller instance can be accessed as C<c>.
[% c.req.headers.host %]
I see you are requesting a document from [% c.req.headers.host %].
=head1 EXAMPLES
L<Mojolicious::Lite> example:
# EXAMPLE: example/myapp.pl
L<Mojolicious> example:
# EXAMPLE: example/myapp/lib/MyApp.pm
# EXAMPLE: example/myapp/lib/MyApp/Example.pm
These are also included with the C<Mojolicious::Plugin::TtRenderer>
distribution, including the support files required for the full
L<Mojolicious> app example.
=head1 SEE ALSO
@@ -69,51 +175,4 @@ 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

@@ -3,9 +3,7 @@ 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';
@@ -14,13 +12,16 @@ use Cwd qw/abs_path/;
use Scalar::Util 'weaken';
use POSIX ':errno_h';
# ABSTRACT: Template Toolkit renderer for Mojolicious
# VERSION
__PACKAGE__->attr('tt');
sub build {
my $self = shift->SUPER::new(@_);
weaken($self->{app});
$self->_init(@_);
return sub { $self->_render(@_) }
sub { $self->_render(@_) }
}
sub _init {
@@ -67,7 +68,7 @@ sub _init {
$self->tt(Template->new(\%config))
or Carp::croak "Could not initialize Template object: $Template::ERROR";
return $self;
$self;
}
sub _render {
@@ -81,12 +82,16 @@ sub _render {
$t = 'inline' if defined $inline;
return unless $t;
my $helper = Mojolicious::Plugin::TtRenderer::Helper->new(ctx => $c);
# Purge previous result
$$output = '';
# fixes for t/lite_app_with_default_layouts.t
unless ($c->stash->{layout}) {
$c->stash->{content} ||= $c->stash->{'mojo.content'}->{content};
}
my @params = ({%{$c->stash}, c => $c, h => $helper}, $output, {binmode => ':utf8'});
my $provider = $self->tt->{SERVICE}->{CONTEXT}->{LOAD_TEMPLATES}->[0];
$provider->options($options);
@@ -115,7 +120,7 @@ sub _render {
# Error
die $self->tt->error unless $ok;
return 1;
1;
}
1; # End of Mojolicious::Plugin::TtRenderer::Engine
@@ -145,7 +150,7 @@ sub AUTOLOAD {
die qq/Unknown helper: $method/ unless $self->ctx->app->renderer->helpers->{$method};
return $self->ctx->$method(@_);
$self->ctx->$method(@_);
}
1;
@@ -168,7 +173,7 @@ sub new {
my $self = $class->SUPER::new(%params);
$self->renderer($renderer);
weaken($self->{renderer});
return $self;
$self;
}
sub renderer { @_ > 1 ? $_[0]->{renderer} = $_[1] : $_[0]->{renderer} }
@@ -177,8 +182,7 @@ 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(?:\/|\\)/;
$self->SUPER::_template_modified($template) || $template =~ /^templates(?:\/|\\)/;
}
sub _template_content {
@@ -202,9 +206,8 @@ sub _template_content {
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);
$data = Mojo::Loader::data_section($class, $t);
last if $data;
}
}
@@ -213,7 +216,7 @@ sub _template_content {
$data = '';
$error = "$path: not found";
}
return wantarray ? ($data, $error, time) : $data;
wantarray ? ($data, $error, time) : $data;
}
1;
@@ -222,9 +225,13 @@ __END__
=encoding utf-8
=head1 NAME
=begin stopwords
Mojolicious::Plugin::TtRenderer::Engine - Template Toolkit renderer for Mojo
Bjørn
Szász
Árpád
=end stopwords
=head1 SYNOPSIS
@@ -252,7 +259,17 @@ Add the handler:
$self->renderer->add_handler( tt => $tt );
}
Template parameter are taken from C< $c->stash >.
Template parameter are taken from C<$c-E<gt>stash>.
=head1 DESCRIPTION
See L<Mojolicious::Plugin::TtRenderer> for details on the plugin interface to this module.
This module provides an engine for the rendering of L<Template Toolkit|Template> templates
within a Mojolicious context. Templates may be, stored on the local file system, provided
inline by the controller or included in the C<__DATA__> section. Where possible this modules
attempts to provide a TT analogue interface to the L<Perlish templates|Mojo::Template> which
come with Mojolicious.
=head1 RENDERING
@@ -294,7 +311,7 @@ object. When used the INCLUDE_PATH will be set to
A hash reference of options that are passed to Template->new(). Note that if you
specify an C<INCLUDE_PATH> through this option it will remove the DATA section
templates from your path. A better way to specify an C<INCLUDE_PATH> if you also
want to use DATA section templates it by manipulting the L<Mojolicious::Renderer>
want to use DATA section templates it by manipulating the L<Mojolicious::Renderer>
path.
=item cache_dir
@@ -306,56 +323,9 @@ templates. Will default to a temp-dir if not set.
=head1 SEE ALSO
L<Mojolicious::Plugin::TtRenderer::Engine>,
L<Mojolicious::Plugin::TtRenderer>,
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::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

View File

@@ -1,9 +0,0 @@
#!perl
use Test::More tests => 2;
BEGIN {
use_ok( 'Mojolicious::Plugin::TtRenderer' );
use_ok( 'Mojolicious::Plugin::TtRenderer::Engine' );
}

View File

@@ -1,11 +1,13 @@
use strict;
use warnings;
use Test::More tests => 1;
use Test::More;
use Mojo::IOLoop;
our $format;
my $loop = eval { Mojo::IOLoop->singleton };
diag $@ if $@;
ok $loop;
diag ref eval { $loop->reactor };
diag sprintf $format, 'mojo io loop', ref eval { $loop->reactor };
diag $@ if $@;
1;

1
t/00_diag.pre.txt Normal file
View File

@@ -0,0 +1 @@
EV

91
t/00_diag.t Normal file
View File

@@ -0,0 +1,91 @@
use strict;
use warnings;
use Config;
use Test::More tests => 1;
BEGIN {
my @modules;
eval q{
require FindBin;
require File::Spec;
1;
} || die $@;
do {
my $fh;
if(open($fh, '<', File::Spec->catfile($FindBin::Bin, '00_diag.pre.txt')))
{
@modules = <$fh>;
close $fh;
chomp @modules;
}
};
eval qq{ require $_ } for @modules;
};
sub spacer ()
{
diag '';
diag '';
diag '';
}
pass 'okay';
my @modules;
do {
my $fh;
open($fh, '<', File::Spec->catfile($FindBin::Bin, '00_diag.txt'));
@modules = <$fh>;
close $fh;
chomp @modules;
};
my $max = 1;
$max = $_ > $max ? $_ : $max for map { length $_ } @modules;
our $format = "%-${max}s %s";
spacer;
my @keys = sort grep /(MOJO|PERL|\A(LC|HARNESS)_|\A(SHELL|LANG)\Z)/i, keys %ENV;
if(@keys > 0)
{
diag "$_=$ENV{$_}" for @keys;
if($ENV{PERL5LIB})
{
spacer;
diag "PERL5LIB path";
diag $_ for split $Config{path_sep}, $ENV{PERL5LIB};
}
elsif($ENV{PERLLIB})
{
spacer;
diag "PERLLIB path";
diag $_ for split $Config{path_sep}, $ENV{PERLLIB};
}
spacer;
}
diag sprintf $format, 'perl ', $^V;
require(File::Spec->catfile($FindBin::Bin, '00_diag.pl'))
if -e File::Spec->catfile($FindBin::Bin, '00_diag.pl');
foreach my $module (@modules)
{
if(eval qq{ require $module; 1 })
{
my $ver = eval qq{ \$$module\::VERSION };
$ver = 'undef' unless defined $ver;
diag sprintf $format, $module, $ver;
}
else
{
diag sprintf $format, $module, '-';
}
}
spacer;

7
t/00_diag.txt Normal file
View File

@@ -0,0 +1,7 @@
EV
Module::Build
Mojolicious
POSIX
Template
Template::Provider
Test::More

7
t/00_load.t Normal file
View File

@@ -0,0 +1,7 @@
use strict;
use warnings;
use Test::More tests => 2;
use_ok( 'Mojolicious::Plugin::TtRenderer' );
use_ok( 'Mojolicious::Plugin::TtRenderer::Engine' );

View File

@@ -1,60 +0,0 @@
#!/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 + % %]

View File

@@ -0,0 +1,37 @@
#!/usr/bin/env perl
use strict;
use warnings;
BEGIN { $ENV{MOJO_MODE}='testing'; };
use utf8;
use Test::More tests => 3;
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 ) }};
app->defaults(layout => 'wrapper');
get '/test' => 'test';
my $t = Test::Mojo->new;
$t->get_ok('/test')->content_is("WS-hello-EW");
__DATA__
@@ test.html.tt
hello
@@ layouts/wrapper.html.tt
WS-[%- content -%]-EW

View File

@@ -1,21 +0,0 @@
use strict;
use warnings;
use Test::More;
# Ensure a recent version of Test::Pod::Coverage
my $min_tpc = 1.08;
eval "use Test::Pod::Coverage $min_tpc";
plan skip_all => "Test::Pod::Coverage $min_tpc required for testing POD coverage"
if $@;
# Test::Pod::Coverage doesn't require a minimum Pod::Coverage version,
# but older versions don't recognize some common documentation styles
my $min_pc = 0.18;
eval "use Pod::Coverage $min_pc";
plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage"
if $@;
plan tests => 2;
pod_coverage_ok('Mojolicious::Plugin::TtRenderer');
pod_coverage_ok('Mojolicious::Plugin::TtRenderer::Engine', { also_private => [qr{^tt$}] } );

12
t/pod.t
View File

@@ -1,12 +0,0 @@
#!perl -T
use strict;
use warnings;
use Test::More;
# Ensure a recent version of Test::Pod
my $min_tp = 1.22;
eval "use Test::Pod $min_tp";
plan skip_all => "Test::Pod $min_tp required for testing POD" if $@;
all_pod_files_ok();

View File

@@ -1,5 +1,7 @@
package
Foo;
use strict;
use warnings;
1;
__DATA__

View File

@@ -24,7 +24,7 @@ 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;
unless Mojo::IOLoop::Server->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.
@@ -51,7 +51,7 @@ 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/);
$t->get_ok('/blow')->status_is(500)->content_like(qr/file error - (templates\/)?doesnotexist\.tt: (No such file or directory|not found)/);
if(eval q{ use Devel::Cycle; 1 })
{

View File

@@ -0,0 +1,9 @@
use strict;
use warnings;
use Test::More tests => 1;
SKIP: {
eval q{ use Dist::Zilla::PluginBundle::Author::Plicease };
skip '[@Plicease] is not installed', 1 if $@;
ok $Dist::Zilla::PluginBundle::Author::Plicease::VERSION >= 1.45, '[@Plicease] >= 1.45';
}

27
xt/release/changes.t Normal file
View File

@@ -0,0 +1,27 @@
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => 'test requires Test::CPAN::Changes'
unless eval q{ use Test::CPAN::Changes; 1 };
};
use Test::CPAN::Changes;
use FindBin;
use File::Spec;
chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
do {
my $old = \&Test::Builder::carp;
my $new = sub {
my($self, @messages) = @_;
return if $messages[0] =~ /^Date ".*" is not in the recommend format/;
$old->($self, @messages);
};
no warnings 'redefine';
*Test::Builder::carp = $new;
};
changes_file_ok;
done_testing;

14
xt/release/eol.t Normal file
View File

@@ -0,0 +1,14 @@
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => 'test requires Test::EOL'
unless eval q{ use Test::EOL; 1 };
};
use Test::EOL;
use FindBin;
use File::Spec;
chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
all_perl_files_ok(grep { -e $_ } qw( bin lib t Makefile.PL ));

19
xt/release/fixme.t Normal file
View File

@@ -0,0 +1,19 @@
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => 'test requires Test::Fixme'
unless eval q{ use Test::Fixme 0.14; 1 };
};
use Test::Fixme 0.07;
use FindBin;
use File::Spec;
chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
run_tests(
match => qr/FIXME/,
where => [ grep { -e $_ } qw( bin lib t Makefile.PL )],
warn => 1,
);

15
xt/release/no_tabs.t Normal file
View File

@@ -0,0 +1,15 @@
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => 'test requires Test::NoTabs'
unless eval q{ use Test::NoTabs; 1 };
};
use Test::NoTabs;
use FindBin;
use File::Spec;
chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
all_perl_files_ok( grep { -e $_ } qw( bin lib t Makefile.PL ));

15
xt/release/pod.t Normal file
View File

@@ -0,0 +1,15 @@
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => 'test requires Test::Pod'
unless eval q{ use Test::Pod; 1 };
};
use Test::Pod;
use FindBin;
use File::Spec;
chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
all_pod_files_ok( grep { -e $_ } qw( bin lib ));

72
xt/release/pod_coverage.t Normal file
View File

@@ -0,0 +1,72 @@
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => 'test requires Test::Pod::Coverage'
unless eval q{ use Test::Pod::Coverage; 1 };
plan skip_all => 'test requires YAML'
unless eval q{ use YAML; 1; };
};
use Test::Pod::Coverage;
use YAML qw( LoadFile );
use FindBin;
use File::Spec;
my $config_filename = File::Spec->catfile(
$FindBin::Bin, 'release.yml'
);
my $config;
$config = LoadFile($config_filename)
if -r $config_filename;
plan skip_all => 'disabled' if $config->{pod_coverage}->{skip};
chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
my @private_classes;
my %private_methods;
push @{ $config->{pod_coverage}->{private} },
'Alien::.*::Install::Files#Inline';
foreach my $private (@{ $config->{pod_coverage}->{private} })
{
my($class,$method) = split /#/, $private;
if(defined $class && $class ne '')
{
my $regex = eval 'qr{^' . $class . '$}';
if(defined $method && $method ne '')
{
push @private_classes, { regex => $regex, method => $method };
}
else
{
push @private_classes, { regex => $regex, all => 1 };
}
}
elsif(defined $method && $method ne '')
{
$private_methods{$_} = 1 for split /,/, $method;
}
}
my @classes = all_modules;
plan tests => scalar @classes;
foreach my $class (@classes)
{
SKIP: {
my($is_private_class) = map { 1 } grep { $class =~ $_->{regex} && $_->{all} } @private_classes;
skip "private class: $class", 1 if $is_private_class;
my %methods = map {; $_ => 1 } map { split /,/, $_->{method} } grep { $class =~ $_->{regex} } @private_classes;
$methods{$_} = 1 for keys %private_methods;
my $also_private = eval 'qr{^' . join('|', keys %methods ) . '$}';
pod_coverage_ok $class, { also_private => [$also_private] };
};
}

View File

@@ -0,0 +1,27 @@
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => 'test requires Test::Pod::Spelling::CommonMistakes'
unless eval q{ use Test::Pod::Spelling::CommonMistakes; 1 };
plan skip_all => 'test requires YAML'
unless eval q{ use YAML qw( LoadFile ); 1 };
};
use Test::Pod::Spelling::CommonMistakes;
use FindBin;
use File::Spec;
my $config_filename = File::Spec->catfile(
$FindBin::Bin, 'release.yml'
);
my $config;
$config = LoadFile($config_filename)
if -r $config_filename;
plan skip_all => 'disabled' if $config->{pod_spelling_common}->{skip};
chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
# FIXME test files in bin too.
all_pod_files_ok;

View File

@@ -0,0 +1,101 @@
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => 'test requires Test::Spelling'
unless eval q{ use Test::Spelling; 1 };
plan skip_all => 'test requires YAML'
unless eval q{ use YAML; 1; };
};
use Test::Spelling;
use YAML qw( LoadFile );
use FindBin;
use File::Spec;
my $config_filename = File::Spec->catfile(
$FindBin::Bin, 'release.yml'
);
my $config;
$config = LoadFile($config_filename)
if -r $config_filename;
plan skip_all => 'disabled' if $config->{pod_spelling_system}->{skip};
chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
add_stopwords(@{ $config->{pod_spelling_system}->{stopwords} });
add_stopwords(<DATA>);
all_pod_files_spelling_ok;
__DATA__
Plicease
stdout
stderr
stdin
subref
loopback
username
os
Ollis
Mojolicious
plicease
CPAN
reinstall
TODO
filename
filenames
login
callback
callbacks
standalone
VMS
hostname
hostnames
TCP
UDP
IP
API
MSWin32
OpenBSD
FreeBSD
NetBSD
unencrypted
WebSocket
WebSockets
timestamp
timestamps
poney
BackPAN
portably
RedHat
AIX
BSD
XS
FFI
perlish
optimizations
subdirectory
RESTful
SQLite
JavaScript
dir
plugins
munge
jQuery
namespace
PDF
PDFs
usernames
DBI
pluggable
APIs
SSL
JSON
YAML
uncommented
Solaris
OpenVMS
URI
URL
CGI

36
xt/release/release.yml Normal file
View File

@@ -0,0 +1,36 @@
---
pod_spelling_system:
# list of words that are spelled correctly
# (regardless of what spell check thinks)
stopwords:
- Bethke
- Cosimo
- Crowther
- Holm
- Htbaa
- Kitover
- Magnus
- Mojo
- Ramberg
- Streppone
- Vuets
- dir
- giftnuss
- mojo
- namespace
- renderer
- spleenjack
- vti
- app's
- renderer's
- Toolkit's
- Fayland
- TT
- uwisser
pod_coverage:
# format is "Class#method" or "Class", regex allowed
# for either Class or method.
private:
- Mojolicious::Plugin::TtRenderer#register
- Mojolicious::Plugin::TtRenderer::Engine#tt

15
xt/release/strict.t Normal file
View File

@@ -0,0 +1,15 @@
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => 'test requires Test::Strict'
unless eval q{ use Test::Strict; 1 };
};
use Test::Strict;
use FindBin;
use File::Spec;
chdir(File::Spec->catdir($FindBin::Bin, File::Spec->updir, File::Spec->updir));
all_perl_files_ok( grep { -e $_ } qw( bin lib t Makefile.PL ));

63
xt/release/unused_vars.t Normal file
View File

@@ -0,0 +1,63 @@
use strict;
use warnings;
use Test::More;
BEGIN { plan skip_all => 'test requires Test::Vars ' unless eval q{ use Test::Vars; 1 } }
BEGIN { plan skip_all => 'test requires Path::Class' unless eval q{ use Path::Class::Dir; 1 } }
BEGIN { plan skip_all => 'test requires YAML' unless eval q{ use YAML; 1 } }
my $dir = Path::Class::Dir->new(__FILE__)->parent->parent->parent;
my $config = YAML::LoadFile($dir->file(qw( xt release release.yml )));
plan skip_all => 'disabled' unless defined $config->{unused_vars}->{skip} && !$config->{unused_vars}->{skip};
my @modules;
recurse($dir->subdir('lib'));
sub recurse
{
my $dir = shift;
foreach my $child ($dir->children)
{
if($child->is_dir)
{
recurse($child);
}
else
{
push @modules, $child if $child->basename =~ /\.pm$/;
}
}
}
plan tests => scalar @modules;
my %global = (
ignore_vars => { map { $_ => 1 } @{ $config->{unused_vars}->{global}->{ignore_vars} } },
);
if(defined $config->{unused_vars}->{global}->{ignore_if})
{
$global{ignore_if} = eval $config->{unused_vars}->{global}->{ignore_if};
die $@ if $@;
}
foreach my $file (@modules)
{
my @mod = $file->components;
shift @mod; # get rid of '.';
shift @mod; # get rid of 'lib';
$mod[-1] =~ s/\.pm$//;
my $mod = join '::', @mod;
my %local = %global;
foreach my $ignore (@{ $config->{unused_vars}->{module}->{$mod}->{ignore_vars} || []})
{
$local{ignore_vars}->{$ignore} = 1;
}
if(defined $config->{unused_vars}->{module}->{$mod}->{ignore_if})
{
$local{ignore_if} = eval $config->{unused_vars}->{module}->{$mod}->{ignore_if};
die $@ if $@;
}
vars_ok($file, %local);
}

36
xt/release/version.t Normal file
View File

@@ -0,0 +1,36 @@
use strict;
use warnings;
use Test::More;
use FindBin ();
BEGIN {
plan skip_all => "test requires Test::Version 1.001001"
unless eval q{ use Test::Version 1.001001 qw( version_all_ok ), { has_version => 1 }; 1 };
plan skip_all => "test requires Path::Class"
unless eval q{ use Path::Class qw( file dir ); 1 };
plan skip_all => 'test requires YAML'
unless eval q{ use YAML; 1; };
}
use YAML qw( LoadFile );
use FindBin;
use File::Spec;
plan skip_all => "test not built yet (run dzil test)"
unless -e dir( $FindBin::Bin)->parent->parent->file('Makefile.PL')
|| -e dir( $FindBin::Bin)->parent->parent->file('Build.PL');
my $config_filename = File::Spec->catfile(
$FindBin::Bin, 'release.yml'
);
my $config;
$config = LoadFile($config_filename)
if -r $config_filename;
if($config->{version}->{dir})
{
note "using dir " . $config->{version}->{dir}
}
version_all_ok($config->{version}->{dir} ? ($config->{version}->{dir}) : ());
done_testing;