diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-10-04 18:43:04 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-10-04 18:43:38 -0500 |
commit | 3aa97f35d6a363350e2c3c41c731c93721b348ac (patch) | |
tree | 470f9ddcf14226a06b0c31361fc49d9937fb496c | |
parent | 8f48b142b49caf1d1e49b2124a27433fecbf5cfa (diff) | |
download | text-handlebars-3aa97f35d6a363350e2c3c41c731c93721b348ac.tar.gz text-handlebars-3aa97f35d6a363350e2c3c41c731c93721b348ac.zip |
make {{this}} an alias to {{.}} and make them work at the top level
-rw-r--r-- | lib/Text/Handlebars.pm | 24 | ||||
-rw-r--r-- | lib/Text/Xslate/Syntax/Handlebars.pm | 3 | ||||
-rw-r--r-- | t/block-helper-builtins.t | 2 | ||||
-rw-r--r-- | t/expressions.t | 16 |
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; |