summary refs log tree commit diff
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-07-30 13:40:06 +0200
committerfranck cuny <franck@lumberjaph.net>2010-07-30 13:40:06 +0200
commit1745c19001c4a4595624fbe97adcfc65820ae5fe (patch)
tree6cbd69d644eaf0499516f501073f416473c84aa4
downloaddancer-template-xslate-1745c19001c4a4595624fbe97adcfc65820ae5fe.tar.gz
initial commit
-rw-r--r--lib/Dancer/Template/Xslate.pm66
-rw-r--r--t/00-load.t8
-rw-r--r--t/01-main.t27
-rw-r--r--t/index.xslate5
4 files changed, 106 insertions, 0 deletions
diff --git a/lib/Dancer/Template/Xslate.pm b/lib/Dancer/Template/Xslate.pm
new file mode 100644
index 0000000..9f1e2c7
--- /dev/null
+++ b/lib/Dancer/Template/Xslate.pm
@@ -0,0 +1,66 @@
+package Dancer::Template::Xslate;
+
+# ABSTRACT: Text::Xslate wrapper for Dancer
+
+use strict;
+use warnings;
+
+use Text::Xslate;
+
+use base 'Dancer::Template::Abstract';
+
+my $_engine;
+
+sub init {
+    my $self = shift;
+
+    my %args = (
+        %{$self->config},
+    );
+
+    $_engine = Text::Xslate->new(%args);
+}
+
+sub render {
+    my ($self, $template, $tokens) = @_;
+
+    my $content = eval {
+        $_engine->render($template, $tokens)
+    };
+
+    if (my $err = $@) {
+        my $error = qq/Couldn't render template "$err"/;
+        die $error;
+    }
+
+    return $content;
+}
+
+1;
+
+=head1 DESCRIPTION
+
+This class is an interface between Dancer's template engine abstraction layer
+and the L<Text::Xslate> module.
+
+In order to use this engine, use the template setting:
+
+    template: xslate
+
+This can be done in your config.yml file or directly in your app code with the
+B<set> keyword.
+
+You can configure L<Text::Xslate> :
+
+    template: xslate
+    engines:
+        xslate:
+            cache_dir  => "/www/.../xslate_cache",
+            cache      => 1,
+            module =>
+                - Text::Xslate::Bridge::TT2 # to keep partial compatibility
+
+
+=head1 SEE ALSO
+
+L<Dancer>, L<Text::Xslate>, L<http://xslate.org/>
diff --git a/t/00-load.t b/t/00-load.t
new file mode 100644
index 0000000..da6530d
--- /dev/null
+++ b/t/00-load.t
@@ -0,0 +1,8 @@
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+BEGIN {
+    use_ok( 'Dancer::Template::Xslate' ) || print "Bail out!
+";
+}
diff --git a/t/01-main.t b/t/01-main.t
new file mode 100644
index 0000000..97682ed
--- /dev/null
+++ b/t/01-main.t
@@ -0,0 +1,27 @@
+use strict;
+use warnings;
+use Test::More tests => 2;
+use Dancer::FileUtils 'path';
+
+use Dancer::Template::Xslate;
+
+my $engine;
+eval { $engine = Dancer::Template::Xslate->new };
+is $@, '',
+  "Dancer::Template::Xslate engine created";
+
+my $template = path('t', 'index.xslate');
+
+my $result = $engine->render(
+    $template,
+    {   var1 => 1,
+        var2 => 2,
+        foo  => 'one',
+        bar  => 'two',
+        baz  => 'three'
+    }
+);
+
+my $expected =
+  'this is var1="1" and var2=2' . "\n\nanother line\n\none two three\n";
+is $result, $expected, "processed a template given as a file name";
diff --git a/t/index.xslate b/t/index.xslate
new file mode 100644
index 0000000..7ec6233
--- /dev/null
+++ b/t/index.xslate
@@ -0,0 +1,5 @@
+this is var1="<: $var1 :>" and var2=<: $var2 :>
+
+another line
+
+<: $foo :> <: $bar :> <: $baz :>