From e84a7c1f51e84f26b0edd611c122c6ed92939261 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 2 Jan 2013 14:50:21 -0600 Subject: fix .. in block helpers --- lib/Text/Handlebars.pm | 26 +++++++++++++++++--------- lib/Text/Handlebars/Compiler.pm | 1 + 2 files changed, 18 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/Text/Handlebars.pm b/lib/Text/Handlebars.pm index 63ef398..87a47f5 100644 --- a/lib/Text/Handlebars.pm +++ b/lib/Text/Handlebars.pm @@ -149,15 +149,23 @@ sub _register_builtin_methods { return $weakself->render_string($to_render, $vars); }; $funcs->{'(make_block_helper)'} = sub { - my ($code, $raw_text, $else_raw_text, $hash) = @_; + my ($vars, $code, $raw_text, $else_raw_text, $hash) = @_; my $options = {}; $options->{fn} = sub { my ($new_vars) = @_; + $new_vars = { + %{ canonicalize_vars($new_vars) }, + '..' => $vars, + }; return $weakself->render_string($raw_text, $new_vars); }; $options->{inverse} = sub { my ($new_vars) = @_; + $new_vars = { + %{ canonicalize_vars($new_vars) }, + '..' => $vars, + }; return $weakself->render_string($else_raw_text, $new_vars); }; $options->{hash} = $hash; @@ -188,23 +196,23 @@ 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 }); - } + return $self->SUPER::render_string($string, canonicalize_vars($vars)); } sub render { my $self = shift; my ($name, $vars) = @_; + return $self->SUPER::render($name, canonicalize_vars($vars)); +} + +sub canonicalize_vars { + my ($vars) = @_; if (ref($vars) && ref($vars) eq 'HASH') { - return $self->SUPER::render(@_); + return $vars; } else { - return $self->SUPER::render($name, { '.' => $vars }); + return { '.' => $vars }; } } diff --git a/lib/Text/Handlebars/Compiler.pm b/lib/Text/Handlebars/Compiler.pm index 5b99471..30aca1a 100644 --- a/lib/Text/Handlebars/Compiler.pm +++ b/lib/Text/Handlebars/Compiler.pm @@ -146,6 +146,7 @@ sub _generate_block { first => $self->call( $node, '(make_block_helper)', + $self->vars, $name->first, $block{if}{raw_text}->clone, ($block{else} -- cgit v1.2.3-54-g00ecf