Compare commits

..

40 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
33 changed files with 1018 additions and 524 deletions

1
.gitignore vendored
View File

@@ -1,2 +1,3 @@
/Mojolicious-Plugin-TtRenderer-*
/.build
/example/myapp/log/development.log

View File

@@ -4,6 +4,8 @@ install:
- cpanm -n Template
script: HARNESS_IS_VERBOSE=1 prove -v -Ilib t
perl:
- "5.21"
- "5.20"
- "5.18"
- "5.16"
- "5.14"

271
Changes
View File

@@ -2,180 +2,203 @@ Revision history for Mojolicious::Plugin::TtRenderer
{{$NEXT}}
1.48 2013-08-08 09:13:19 America/New_York
- documentation
1.55 2015-02-28 10:31:58 -0500
- Mojo 6.x compat
1.47 2013-07-26 06:07:35 America/New_York
- Template-Toolkit 2.25 compatability
1.54 2014-12-20 10:17:47 -0500
- cpantesters: do not report on older perls
1.46 May 19, 2013
- Mojolicious 4.0 compatability
1.53 2014-05-31 06:22:47 -0400
- Mojolicious 5.0 support
1.45 April 26, 2013
- correctly support app->default->{layout} (GH#37, Fayland Lam)
1.52 2014-05-08 19:26:47 -0400
- updated repository name
1.44 April 13, 2013
- promote development changes to production
1.51 2014-03-21 14:59:39 -0400
- extended diagnostics
- documentation tweaks
- fix non-lite app example (GH#41, uwisser)
1.43_01 April 11, 2013
- _template_modified returns value from super class instead of 1 if true (GH#36, Fayland Lam)
1.50 2013-08-08T16:51:21-0400
- update Changes to follow spec (GH#39, Сергей Романов)
- minor documentation fixes
1.43 April 8, 2013
- promote development changes
1.49 2013-08-08T09:18:54-0400
- documentation
1.42_04 April 6, 2013
- Updated meta for new github repo location
1.48 2013-08-08T09:13:19-0400
- documentation
1.42_03 March 22, 2013
- Allow custom relative paths for cache_dir (GH#35, Jason Crowther)
1.47 2013-07-26T06:07:35-0400
- Template-Toolkit 2.25 compatability
1.42_02 February 26, 2013
- only create COMPILE_DIR based on UID if the user doesn't specify COMPILE_DIR
1.46 2013-05-19
- Mojolicious 4.0 compatability
1.42_01 February 24, 2013
- set COMPILE_DIR based on UID so that multiple users can use TtRenderer with default config
1.45 2013-04-26
- correctly support app->default->{layout} (GH#37, Fayland Lam)
1.42 February 24, 2013
- fix for test on solaris
1.44 2013-04-13
- promote development changes to production
1.41 February 23, 2013
- Additional testing diagnostics
1.43_01 2013-04-11
- _template_modified returns value from super class instead of 1 if true (GH#36, Fayland Lam)
1.40 February 20, 2013
- Added diagnostic for IO loop implementation in testing
1.43 2013-04-08
- promote development changes
1.39 January 28, 2013
- Documentation updates.
1.42_04 2013-04-06
- Updated meta for new github repo location
1.38 January 27, 2013
- fixed but where DATA templates were not being rendered with empty renderer path
1.42_03 2013-03-22
- Allow custom relative paths for cache_dir (GH#35, Jason Crowther)
1.37 January 12, 2013
- fix default_template2.t to use temp directory for COMPILE_DIR
1.42_02 2013-02-26
- only create COMPILE_DIR based on UID if the user doesn't specify COMPILE_DIR
1.36 January 9, 2013
- Use $provider->fetch to find templates (GH#34)
1.42_01 2013-02-24
- set COMPILE_DIR based on UID so that multiple users can use TtRenderer with default config
1.35 December 30, 2012
- Documentation fix
1.42 2013-02-24
- fix for test on solaris
1.34 December 29, 2012
- Include META.json in distribution.
1.41 2013-02-23
- Additional testing diagnostics
1.33 December 27, 2012
- Fix hang in t/deep_recursion.t on *BSD
1.40 2013-02-20
- Added diagnostic for IO loop implementation in testing
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.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.

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,240 +0,0 @@
=pod
=head1 NAME
Mojolicious::Plugin::TtRenderer - Template Renderer Plugin for Mojolicious
=head1 VERSION
version 1.48
=head1 SYNOPSIS
L<Mojolicious::Lite>:
plugin 'tt_renderer';
L<Mojolicious>
$self->plugin('tt_renderer');
=head1 DESCRIPTION
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.
=encoding utf-8
=head1 OPTIONS
These are the options that can be passed in as arguments to this plugin.
=head2 template_options
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:
plugin 'tt_renderer' => {
template_options => {
PRE_CHOMP => 1,
POST_CHOMP => 1,
TRIM => 1,
},
};
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 RELATIZE
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->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>.
I see you are requesting a document from [% c.req.headers.host %].
=head1 EXAMPLES
L<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>
L<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 C<Mojolicious::Plugin::TtRenderer>
distribution, including the support files required for the full
L<Mojolicious> app example.
=head1 SEE ALSO
L<Mojolicious::Plugin::TtRenderer::Engine>,
L<Mojolicious>,
L<Mojolicious::Guides>,
L<http://mojolicious.org>.
=head1 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
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2013 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

@@ -5,40 +5,17 @@ license = Perl_5
copyright_holder = Ask Bjørn Hansen
# copyright_year = 2009
version = 1.48
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
[MetaResources]
bugtracker.web = https://github.com/plicease/mojox-renderer-tt/issues
repository.web = http://github.com/plicease/mojox-renderer-tt
repository.url = git://github.com/plicease/mojox-renderer-tt.git
repository.type = git
[CheckChangeLog]
[Test::Compile]
[HasVersionTests]
[MetaTests]
[ReadmeAnyFromPod]
type = text
filename = README
location = build
[ReadmeAnyFromPod / ReadMePodInRoot]
type = pod
filename = README.pod
location = root
[MinimumPerl]
[Author::Plicease::Thanks]
current = Graham Ollis <plicease@cpan.org>
original = Ask Bjørn Hansen
@@ -55,6 +32,8 @@ contributor = Fayland Lam
contributor = Jason Crowther
contributor = spleenjack
contributor = Árpád Szász
contributor = Сергей Романов
contributor = uwisser
[Author::Plicease::Upload]
@@ -62,3 +41,28 @@ contributor = Árpád Szász
[MetaNoIndex]
directory = example
[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
; comes with Mojolicious
remove = Mojo::Base
remove = Mojo::ByteStream
remove = Mojolicious::Plugin
remove = Mojo::IOLoop
remove = Mojolicious::Lite
remove = Test::Mojo
[Author::Plicease::InstallerPerlVersion]

View File

@@ -1,21 +0,0 @@
[Thu Aug 8 09:00:16 2013] [info] Listening at "http://*:3000".
[Thu Aug 8 09:00:20 2013] [debug] Your secret passphrase needs to be changed!!!
[Thu Aug 8 09:00:20 2013] [debug] GET "/".
[Thu Aug 8 09:00:20 2013] [debug] Routing to controller "MyApp::Example" and action "welcome".
[Thu Aug 8 09:00:20 2013] [error] parse error - example/welcome.html.tt line 8: unexpected end of input
[Thu Aug 8 09:00:20 2013] [debug] Template "exception.development.html.ep" not found.
[Thu Aug 8 09:00:20 2013] [debug] Template "exception.html.ep" not found.
[Thu Aug 8 09:00:20 2013] [debug] Rendering inline template.
[Thu Aug 8 09:00:20 2013] [debug] Rendering inline template.
[Thu Aug 8 09:00:20 2013] [debug] 500 Internal Server Error (0.061556s, 16.245/s).
[Thu Aug 8 09:00:41 2013] [info] Listening at "http://*:3000".
[Thu Aug 8 09:00:44 2013] [debug] Your secret passphrase needs to be changed!!!
[Thu Aug 8 09:00:44 2013] [debug] GET "/".
[Thu Aug 8 09:00:44 2013] [debug] Routing to controller "MyApp::Example" and action "welcome".
[Thu Aug 8 09:00:44 2013] [debug] 200 OK (0.032461s, 30.806/s).
[Thu Aug 8 09:00:47 2013] [debug] GET "/".
[Thu Aug 8 09:00:47 2013] [debug] Routing to controller "MyApp::Example" and action "welcome".
[Thu Aug 8 09:00:47 2013] [debug] 200 OK (0.001260s, 793.651/s).
[Thu Aug 8 09:00:52 2013] [debug] GET "/".
[Thu Aug 8 09:00:52 2013] [debug] Routing to controller "MyApp::Example" and action "welcome".
[Thu Aug 8 09:00:52 2013] [debug] 200 OK (0.001683s, 594.177/s).

View File

@@ -2,9 +2,9 @@
WRAPPER 'layouts/default.html.tt'
title = 'Welcome'
%]
<h2>[% $message %]</h2>
This page was generated from the template "templates/example/welcome.html.ep"
and the layout "templates/layouts/default.html.ep",
<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

@@ -29,6 +29,14 @@ __END__
=encoding utf-8
=begin stopwords
Bjørn
Szász
Árpád
=end stopwords
=head1 SYNOPSIS
L<Mojolicious::Lite>:
@@ -110,7 +118,7 @@ C<utf-87>
C<128>
=item RELATIZE
=item RELATIVE
C<1> (true)
@@ -128,7 +136,7 @@ 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->home>).
app's home directory (C<$app-E<gt>home>).
=head1 STASH

View File

@@ -21,7 +21,7 @@ sub build {
my $self = shift->SUPER::new(@_);
weaken($self->{app});
$self->_init(@_);
return sub { $self->_render(@_) }
sub { $self->_render(@_) }
}
sub _init {
@@ -68,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 {
@@ -120,7 +120,7 @@ sub _render {
# Error
die $self->tt->error unless $ok;
return 1;
1;
}
1; # End of Mojolicious::Plugin::TtRenderer::Engine
@@ -150,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;
@@ -173,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} }
@@ -206,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;
}
}
@@ -217,7 +216,7 @@ sub _template_content {
$data = '';
$error = "$path: not found";
}
return wantarray ? ($data, $error, time) : $data;
wantarray ? ($data, $error, time) : $data;
}
1;
@@ -226,6 +225,14 @@ __END__
=encoding utf-8
=begin stopwords
Bjørn
Szász
Árpád
=end stopwords
=head1 SYNOPSIS
Add the handler:
@@ -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,7 +323,7 @@ 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>.

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,69 +0,0 @@
#!/usr/bin/env perl
use strict;
use warnings;
#BEGIN { $ENV{MOJO_MODE}='testing'; };
use utf8;
use Test::More;
use Mojolicious::Lite;
use Test::Mojo;
use File::Temp qw( tempdir );
use File::Spec;
if($Mojolicious::VERSION >= 4.0)
{
plan skip_all => 'test broken in mojo 4.0';
}
else
{
plan tests => 3;
}
# 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 + % %]

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;
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.

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;