Compare commits

...

18 Commits

Author SHA1 Message Date
Graham Ollis
6146b1f2f5 set locale "C" in tests
This ensures that the error string is what we expect it to be
2012-12-26 21:22:07 -05:00
Graham Ollis
5116c191f3 update Changes 2012-12-22 15:14:11 -05:00
Graham Ollis
5828f878d8 don't rely on English locale in test 2012-12-22 15:10:59 -05:00
Graham Ollis
f4beaf9864 use non-capturing for performance 2012-12-19 12:33:19 -05:00
Graham Ollis
ce9e1b955e load test to test loading of all .pm files 2012-12-18 11:02:18 -05:00
Graham Ollis
37ee2ee753 support multiple renderer paths 2012-12-18 11:00:47 -05:00
Graham Ollis
cdc31b07be update changes 2012-10-31 11:19:28 -04:00
Graham Ollis
57b9c39b15 specify a minumum perl version. 2012-10-11 11:18:37 -04:00
Graham Ollis
194a9219e9 fix cpanm warning. 2012-10-02 11:42:17 -04:00
Graham Ollis
5505c5d82a utf-8 for perldoc 2012-10-02 11:34:42 -04:00
Graham Ollis
daceb5876f documentation updates. 2012-10-02 11:33:07 -04:00
Graham Ollis
54d13555ef Merge branch 'master' of github.com:abh/mojox-renderer-tt 2012-08-31 08:18:19 -04:00
Graham Ollis
d6d98cc533 fix for win32 2012-08-31 08:18:01 -04:00
Graham Ollis
51af0a7893 return 0 on not found 2012-08-25 07:15:15 -04:00
ollisg
b48b4274db add test case for GH#30 2012-08-24 22:23:37 -04:00
Graham Ollis
e64ce4c484 refactor fetching templates from DATA 2012-08-24 05:47:54 -04:00
Graham Ollis
af61eff483 update email. 2012-08-23 22:27:43 -04:00
Graham Ollis
cf390c5456 update changes 2012-08-23 22:26:09 -04:00
15 changed files with 379 additions and 43 deletions

21
Changes
View File

@@ -1,6 +1,27 @@
Revision history for Mojolicious::Plugin::TtRenderer
{{$NEXT}}
- Set locale "C" in tests that rely on it
1.30 December 22, 2012
- Don't rely on English locale in the test t/tt_plugin_lite_app.t
1.29 December 18, 2012
- support multiple renderer paths
1.28 October 11, 2012
- specify minimum perl version
1.27 October 2, 2012
- documentation fixes and updates.
1.26 August 31, 2012
- Windows compatability with Cwd::abs_path
1.25 August 25, 2012
- Return 0 on not found, die on error (GH#30)
1.24 August 23, 2012
- Compatibility with Mojolicious 3.33+
1.23 August 23, 2012

89
README.pod Normal file
View File

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

View File

@@ -1,5 +1,5 @@
name = Mojolicious-Plugin-TtRenderer
author = Ask Bjørn Hansen <ask@develooper.com>
author = Graham Ollis <plicease@cpan.org>
license = Perl_5
copyright_holder = Ask Bjørn Hansen
@@ -38,9 +38,20 @@ version_regexp = ^release/(.*)
[Test::Compile]
[HasVersionTests]
[MetaTests]
[ReadmeFromPod]
[ReadmeAnyFromPod]
type = text
filename = README
location = build
[ReadmeAnyFromPod / ReadMePodInRoot]
type = pod
filename = README.pod
location = root
[Manifest]
[NextRelease]
format = %-7v %{MMMM d, yyyy}d
[MinimumPerl]

View File

@@ -2,6 +2,7 @@ package Mojolicious::Plugin::TtRenderer;
use strict;
use warnings;
use v5.10;
use base 'Mojolicious::Plugin';
@@ -18,11 +19,13 @@ sub register {
$app->renderer->add_handler(tt => $tt);
}
local ($Mojolicious::Plugin::TtRenderer::VERSION) = ('devel') unless defined $Mojolicious::Plugin::TtRenderer::VERSION;
$Mojolicious::Plugin::TtRenderer::VERSION //= ('devel');
1;
__END__
=encoding utf-8
=head1 NAME
Mojolicious::Plugin::TtRenderer - Template Renderer Plugin
@@ -39,7 +42,8 @@ Mojolicious::Plugin::TtRenderer - Template Renderer Plugin
=head1 DESCRIPTION
L<Mojolicous::Plugin::TtRenderer> is a simple loader for L<MojoX::Renderer::TT>.
L<Mojolicous::Plugin::TtRenderer> is a simple loader for
L<Mojolicious::Plugin::TtRenderer::Engine>.
=head1 METHODS
@@ -62,4 +66,51 @@ The current controller instance can be accessed as C<c>.
L<Mojolicious::Plugin::TtRenderer::Engine>, L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicious.org>.
=head1 AUTHOR
Current maintainer: Graham Ollis C<< <plicease@cpan.org> >>
Original author: Ask Bjørn Hansen, C<< <ask at develooper.com> >>
=head1 BUGS
Please report any bugs or feature requests to the project's github issue tracker
L<https://github.com/abh/mojox-renderer-tt/issues?state=open>.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Mojolicious::Plugin::TtRenderer
You can also look for information at:
=over 4
=item * git repository
L<http://git.develooper.com/?p=MojoX-Renderer-TT.git;a=summary>,
L<git://git.develooper.com/MojoX-Renderer-TT.git>
L<http://github.com/abh/mojox-renderer-tt/>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/MojoX-Renderer-TT>
=item * Search CPAN
L<http://search.cpan.org/dist/MojoX-Renderer-TT/>
=back
=head1 COPYRIGHT & LICENSE
Copyright 2008-2010 Ask Bjørn Hansen, all rights reserved.
Copyright 2012 Graham Ollis.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut

View File

@@ -40,9 +40,11 @@ sub _init {
# TODO
# take and process options :-)
my @renderer_paths = $app ? map { abs_path($_) } grep { -d $_ } @{ $app->renderer->paths } : ();
my %config = (
( $app
? (INCLUDE_PATH => (join ":", map { abs_path($_) } @{$app->renderer->paths}))
( @renderer_paths > 0
? (INCLUDE_PATH => [@renderer_paths, 'templates'])
: ()
),
COMPILE_EXT => '.ttc',
@@ -85,9 +87,12 @@ sub _render {
my $provider = $self->tt->{SERVICE}->{CONTEXT}->{LOAD_TEMPLATES}->[0];
$provider->options($options);
$provider->ctx($c);
$provider->not_found(0);
my $ok = $self->tt->process(defined $inline ? \$inline : $t, @params);
return 0 if $provider->not_found;
# Error
die $self->tt->error unless $ok;
@@ -150,8 +155,13 @@ sub new {
sub renderer { @_ > 1 ? $_[0]->{renderer} = $_[1] : $_[0]->{renderer} }
sub ctx { @_ > 1 ? $_[0]->{ctx} = $_[1] : $_[0]->{ctx} }
sub options { @_ > 1 ? $_[0]->{options} = $_[1] : $_[0]->{options} }
sub not_found { @_ > 1 ? $_[0]->{not_found} = $_[1] : $_[0]->{not_found} }
sub _template_modified {1}
sub _template_modified {
my($self, $template) = @_;
return 1 if $self->SUPER::_template_modified($template);
return $template =~ /^templates(?:\/|\\)/;
}
sub _template_content {
my $self = shift;
@@ -167,28 +177,26 @@ sub _template_content {
return $self->SUPER::_template_content(@_);
}
my $data;
my $error = '';
# Try DATA section
if(defined $options)
{
my $d = $self->renderer->get_data_template($options);
return wantarray ? ($d, '', time) : $d
if $d;
}
else
{
my $loader = Mojo::Loader->new;
foreach my $class (@{ $self->renderer->classes })
{
my $d = $loader->data($class, $t);
return wantarray ? ($d, '', time) : $d
if $d;
}
if(defined $options) {
$data = $self->renderer->get_data_template($options);
$self->not_found(1) unless defined $data;
} else {
my $loader = Mojo::Loader->new;
foreach my $class (@{ $self->renderer->classes }) {
$data = $loader->data($class, $t);
last if $data;
}
}
my $data = '';
my $error = "$path: not found";
my $mod_date = time;
return wantarray ? ($data, $error, $mod_date) : $data;
unless($data) {
$data = '';
$error = "$path: not found";
}
return wantarray ? ($data, $error, time) : $data;
}
1;
@@ -277,7 +285,9 @@ templates. Will default to a temp-dir if not set.
=head1 AUTHOR
Ask Bjørn Hansen, C<< <ask at develooper.com> >>
Current maintainer: Graham Ollis C<< <plicease@cpan.org> >>
Original author: Ask Bjørn Hansen, C<< <ask at develooper.com> >>
=head1 TODO
@@ -287,11 +297,8 @@ Ask Bjørn Hansen, C<< <ask at develooper.com> >>
=head1 BUGS
Please report any bugs or feature requests to C<bug-mojox-renderer-tt at rt.cpan.org>,
or through the web interface at
L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=MojoX-Renderer-TT>. I will be
notified, and then you'll automatically be notified of progress on your bug as I
make changes.
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
@@ -310,10 +317,6 @@ L<git://git.develooper.com/MojoX-Renderer-TT.git>
L<http://github.com/abh/mojox-renderer-tt/>
=item * RT: CPAN's request tracker
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=MojoX-Renderer-TT>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/MojoX-Renderer-TT>
@@ -324,13 +327,12 @@ L<http://search.cpan.org/dist/MojoX-Renderer-TT/>
=back
=head1 ACKNOWLEDGEMENTS
=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

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

36
t/default_template.t Normal file
View File

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

View File

@@ -7,7 +7,7 @@ BEGIN { $ENV{MOJO_MODE}='testing'; };
use utf8;
use Test::More tests => 31;
use Test::More tests => 39;
use Mojolicious::Lite;
use Mojo::ByteStream 'b';
@@ -26,6 +26,10 @@ get '/with_include' => 'include';
get '/with_wrapper' => 'wrapper';
get '/badinclude' => 'badinclude';
get '/badwrapper' => 'badwrapper';
get '/with_auto_wrapper' => 'auto_wrapper';
get '/inheritance_base' => 'inheritance_base';
@@ -55,6 +59,12 @@ $t->get_ok('/bar/hello')->content_is("hello");
# With include
$t->get_ok('/with_include')->content_is("HelloInclude!Hallo");
# Bad inclde
$t->get_ok('/badinclude')->status_is(500)->content_like(qr/Exception/i)->content_like(qr/bogus\.inc/);
# Bad wrapper
$t->get_ok('/badwrapper')->status_is(500)->content_like(qr/Exception/i)->content_like(qr/layouts\/bogus\.html\.tt/);
# With wrapper
$t->get_ok('/with_wrapper')->content_is("wrapped");
@@ -102,6 +112,10 @@ Hallo
Include!
[% INCLUDE 'includes/sub/include.inc' -%]
@@ badinclude.html.tt
[%- INCLUDE 'bogus.inc' -%]
not here
@@ layouts/layout.html.tt
w[%- content -%]d
@@ -110,6 +124,11 @@ w[%- content -%]d
rappe
[%- END -%]
@@ badwrapper.html.tt
[%- WRAPPER 'layouts/bogus.html.tt' %-]
not here
[%- END -%]
@@ layouts/auto_layout.html.tt
w[%- h.content -%]d

30
t/multiple_paths.t Normal file
View File

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

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

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

View File

@@ -0,0 +1 @@
First

View File

@@ -0,0 +1 @@
Second

View File

@@ -0,0 +1 @@
Second

View File

@@ -5,6 +5,18 @@
use strict;
use warnings;
BEGIN {
#use if $^O ne 'MSWin32', POSIX => qw/setlocale LC_ALL/;
#setlocale(&LC_ALL, 'C') if $^O ne 'MSWin32';
unless($^O eq 'MSWin32') {
eval q{
use POSIX qw( setlocale LC_ALL );
setlocale(LC_ALL, 'C');
};
warn $@ if $@;
}
}
use File::Temp;
use Mojo::IOLoop;
use Test::More;
@@ -41,7 +53,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 - doesnotexist\.tt: No such file or directory/);
if(eval q{ use Devel::Cycle; 1 })
{
@@ -56,4 +68,4 @@ if(eval q{ use Devel::Cycle; 1 })
fail('Cycle found')
}
});
};
};

48
t/two_data.t Normal file
View File

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