diff options
-rw-r--r-- | lib/Text/Handlebars.pm | 26 | ||||
-rw-r--r-- | lib/Text/Handlebars/Compiler.pm | 1 | ||||
-rw-r--r-- | t/block-helper-builtins.t | 2 |
3 files changed, 18 insertions, 11 deletions
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} diff --git a/t/block-helper-builtins.t b/t/block-helper-builtins.t index dac692e..504b350 100644 --- a/t/block-helper-builtins.t +++ b/t/block-helper-builtins.t @@ -196,7 +196,6 @@ RENDERED "unless helper (true)" ); -{ local $TODO = "unimplemented"; local $SIG{__WARN__} = sub { }; render_ok( <<'TEMPLATE', <ul class="people_list"> @@ -222,6 +221,5 @@ TEMPLATE RENDERED "each helper with ../" ); -} done_testing; |