summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/Text/Handlebars.pm24
-rw-r--r--lib/Text/Xslate/Syntax/Handlebars.pm3
-rw-r--r--t/block-helper-builtins.t2
-rw-r--r--t/expressions.t16
4 files changed, 42 insertions, 3 deletions
diff --git a/lib/Text/Handlebars.pm b/lib/Text/Handlebars.pm
index 71b1ac1..c1afc32 100644
--- a/lib/Text/Handlebars.pm
+++ b/lib/Text/Handlebars.pm
@@ -130,4 +130,28 @@ sub _register_builtin_methods {
};
}
+sub render_string {
+ my $self = shift;
+ my ($string, $vars) = @_;
+
+ if (ref($vars) && ref($vars) eq 'HASH') {
+ return $self->SUPER::render_string(@_);
+ }
+ else {
+ return $self->SUPER::render_string($string, { '.' => $vars });
+ }
+}
+
+sub render {
+ my $self = shift;
+ my ($name, $vars) = @_;
+
+ if (ref($vars) && ref($vars) eq 'HASH') {
+ return $self->SUPER::render(@_);
+ }
+ else {
+ return $self->SUPER::render($name, { '.' => $vars });
+ }
+}
+
1;
diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm
index 69a20c6..4ea5f52 100644
--- a/lib/Text/Xslate/Syntax/Handlebars.pm
+++ b/lib/Text/Xslate/Syntax/Handlebars.pm
@@ -210,6 +210,7 @@ sub init_symbols {
$self->infix('/', 256, $self->can('led_dot'));
$self->symbol('.')->set_nud($self->can('nud_dot'));
+ $self->symbol('this')->set_nud($self->can('nud_dot'));
$self->symbol('#')->set_std($self->can('std_block'));
$self->symbol('^')->set_std($self->can('std_block'));
@@ -300,7 +301,7 @@ sub nud_dot {
my $self = shift;
my ($symbol) = @_;
- return $symbol->clone(arity => 'variable');
+ return $symbol->clone(arity => 'variable', id => '.');
}
sub std_block {
diff --git a/t/block-helper-builtins.t b/t/block-helper-builtins.t
index 338e067..9540b27 100644
--- a/t/block-helper-builtins.t
+++ b/t/block-helper-builtins.t
@@ -32,7 +32,6 @@ RENDERED
"with helper"
);
-{ local $TODO = "unimplemented"; local $SIG{__WARN__} = sub { };
render_ok(
<<'TEMPLATE',
<ul class="people_list">
@@ -57,7 +56,6 @@ TEMPLATE
RENDERED
"each helper"
);
-}
render_ok(
<<'TEMPLATE',
diff --git a/t/expressions.t b/t/expressions.t
index 08d0894..f12022c 100644
--- a/t/expressions.t
+++ b/t/expressions.t
@@ -87,4 +87,20 @@ render_ok(
);
}
+render_ok(
+ '{{.}} {{this}}',
+ "foo",
+ "foo foo",
+ "top level current context"
+);
+
+render_ok(
+ '{{#thing}}{{.}} {{this}}{{/thing}}',
+ {
+ thing => [ "foo" ],
+ },
+ "foo foo",
+ "nested current context"
+);
+
done_testing;