diff --git a/dancer/Changes b/dancer/Changes new file mode 100644 index 0000000..2a6ccb7 --- /dev/null +++ b/dancer/Changes @@ -0,0 +1,5 @@ +Revision history for Dancer::Template::TemplateZoom + +0.0001 Date/time + First version, released on an unsuspecting world. + diff --git a/dancer/Makefile.PL b/dancer/Makefile.PL new file mode 100644 index 0000000..ad0c25a --- /dev/null +++ b/dancer/Makefile.PL @@ -0,0 +1,21 @@ +use strict; +use warnings; +use ExtUtils::MakeMaker; + +WriteMakefile( + NAME => 'Dancer::Template::TemplateZoom', + AUTHOR => q{Stefan Hornburg (Racke) }, + VERSION_FROM => 'lib/Dancer/Template/TemplateZoom.pm', + ABSTRACT_FROM => 'lib/Dancer/Template/TemplateZoom.pm', + ($ExtUtils::MakeMaker::VERSION >= 6.3002 + ? ('LICENSE'=> 'perl') + : ()), + PL_FILES => {}, + PREREQ_PM => { + 'Test::More' => 0, + 'Dancer' => 0, + 'Template::Zoom' => 0, + }, + dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, + clean => { FILES => 'Dancer-Template-Template-Zoom-*' }, +); diff --git a/dancer/README b/dancer/README new file mode 100644 index 0000000..d1d7e28 --- /dev/null +++ b/dancer/README @@ -0,0 +1,63 @@ +NAME + Dancer::Template::TemplateZoom - Template::Zoom wrapper for Dancer + +VERSION + Version 0.0001 + +DESCRIPTION + This class is an interface between Dancer's template engine abstraction + layer and the Template::Zoom module. + + In order to use this engine, use the template setting: + + template: template_zoom + + The default template extension is ".html". + +METHODS + default_tmpl_ext + Returns default template extension. + + render TEMPLATE TOKENS + Renders template TEMPLATE with values from TOKENS. + +SEE ALSO + Dancer, Template::Zoom + +AUTHOR + Stefan Hornburg (Racke), + +BUGS + Please report any bugs or feature requests to `bug-template-zoom at + rt.cpan.org', or through the web interface at + http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Template-Zoom. + +SUPPORT + You can find documentation for this module with the perldoc command. + + perldoc Template::Zoom + + You can also look for information at: + + * RT: CPAN's request tracker + http://rt.cpan.org/NoAuth/Bugs.html?Dist=Dancer-Template-TemplateZoo + m + + * AnnoCPAN: Annotated CPAN documentation + http://annocpan.org/dist/Dancer-Template-TemplateZoom + + * CPAN Ratings + http://cpanratings.perl.org/d/Dancer-Template-TemplateZoom + + * Search CPAN + http://search.cpan.org/dist/Dancer-Template-TemplateZoom/ + +LICENSE AND COPYRIGHT + Copyright 2011 Stefan Hornburg (Racke) . + + This program is free software; you can redistribute it and/or modify it + under the terms of either: the GNU General Public License as published + by the Free Software Foundation; or the Artistic License. + + See http://dev.perl.org/licenses/ for more information. + diff --git a/dancer/lib/Dancer/Template/TemplateZoom.pm b/dancer/lib/Dancer/Template/TemplateZoom.pm new file mode 100644 index 0000000..d04a79d --- /dev/null +++ b/dancer/lib/Dancer/Template/TemplateZoom.pm @@ -0,0 +1,113 @@ +package Dancer::Template::TemplateZoom; + +use strict; +use warnings; + +use Template::Zoom; + +use base 'Dancer::Template::Abstract'; + +our $VERSION = '0.0001'; + +=head1 NAME + +Dancer::Template::TemplateZoom - Template::Zoom wrapper for Dancer + +=head1 VERSION + +Version 0.0001 + +=head1 DESCRIPTION + +This class is an interface between Dancer's template engine abstraction layer +and the L module. + +In order to use this engine, use the template setting: + + template: template_zoom + +The default template extension is ".html". + +=head1 METHODS + +=head2 default_tmpl_ext + +Returns default template extension. + +=head2 render TEMPLATE TOKENS + +Renders template TEMPLATE with values from TOKENS. + +=cut + +sub default_tmpl_ext { + return 'html'; +} + +sub render ($$$) { + my ($self, $template, $tokens) = @_; + my ($zoom); + + # derive file name for specification from template file names + $zoom = new Template::Zoom(template_file => $template, + scopes => 1, + values => $tokens, + ); + + return $zoom->process(); +} + +=head1 SEE ALSO + +L, L + +=head1 AUTHOR + +Stefan Hornburg (Racke), + +=head1 BUGS + +Please report any bugs or feature requests to C, or through +the web interface at L. + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc Template::Zoom + +You can also look for information at: + +=over 4 + +=item * RT: CPAN's request tracker + +L + +=item * AnnoCPAN: Annotated CPAN documentation + +L + +=item * CPAN Ratings + +L + +=item * Search CPAN + +L + +=back + +=head1 LICENSE AND COPYRIGHT + +Copyright 2011 Stefan Hornburg (Racke) . + +This program is free software; you can redistribute it and/or modify it +under the terms of either: the GNU General Public License as published +by the Free Software Foundation; or the Artistic License. + +See http://dev.perl.org/licenses/ for more information. + +=cut + +1; diff --git a/dancer/t/00-load.t b/dancer/t/00-load.t new file mode 100644 index 0000000..8b84e7a --- /dev/null +++ b/dancer/t/00-load.t @@ -0,0 +1,10 @@ +#!perl -T + +use Test::More tests => 1; + +BEGIN { + use_ok( 'Dancer::Template::TemplateZoom' ) || print "Bail out! +"; +} + +diag( "Testing Dancer::Template::TemplateZoom $Dancer::Template::TemplateZoom::VERSION, Perl $], $^X" ); diff --git a/dancer/t/boilerplate.t b/dancer/t/boilerplate.t new file mode 100644 index 0000000..73bce1c --- /dev/null +++ b/dancer/t/boilerplate.t @@ -0,0 +1,55 @@ +#!perl -T + +use strict; +use warnings; +use Test::More tests => 3; + +sub not_in_file_ok { + my ($filename, %regex) = @_; + open( my $fh, '<', $filename ) + or die "couldn't open $filename for reading: $!"; + + my %violated; + + while (my $line = <$fh>) { + while (my ($desc, $regex) = each %regex) { + if ($line =~ $regex) { + push @{$violated{$desc}||=[]}, $.; + } + } + } + + if (%violated) { + fail("$filename contains boilerplate text"); + diag "$_ appears on lines @{$violated{$_}}" for keys %violated; + } else { + pass("$filename contains no boilerplate text"); + } +} + +sub module_boilerplate_ok { + my ($module) = @_; + not_in_file_ok($module => + 'the great new $MODULENAME' => qr/ - The great new /, + 'boilerplate description' => qr/Quick summary of what the module/, + 'stub function definition' => qr/function[12]/, + ); +} + +TODO: { + local $TODO = "Need to replace the boilerplate text"; + + not_in_file_ok(README => + "The README is used..." => qr/The README is used/, + "'version information here'" => qr/to provide version information/, + ); + + not_in_file_ok(Changes => + "placeholder date/time" => qr(Date/time) + ); + + module_boilerplate_ok('lib/Dancer/Template/TemplateZoom.pm'); + + +} + diff --git a/dancer/t/manifest.t b/dancer/t/manifest.t new file mode 100644 index 0000000..45eb83f --- /dev/null +++ b/dancer/t/manifest.t @@ -0,0 +1,13 @@ +#!perl -T + +use strict; +use warnings; +use Test::More; + +unless ( $ENV{RELEASE_TESTING} ) { + plan( skip_all => "Author tests not required for installation" ); +} + +eval "use Test::CheckManifest 0.9"; +plan skip_all => "Test::CheckManifest 0.9 required" if $@; +ok_manifest(); diff --git a/dancer/t/pod-coverage.t b/dancer/t/pod-coverage.t new file mode 100644 index 0000000..fc40a57 --- /dev/null +++ b/dancer/t/pod-coverage.t @@ -0,0 +1,18 @@ +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 $@; + +all_pod_coverage_ok(); diff --git a/dancer/t/pod.t b/dancer/t/pod.t new file mode 100644 index 0000000..ee8b18a --- /dev/null +++ b/dancer/t/pod.t @@ -0,0 +1,12 @@ +#!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();