From 4c9d2009f9f653afa3a8a1c090191d69f2a77406 Mon Sep 17 00:00:00 2001 From: Justin Li Date: Tue, 12 May 2015 16:49:39 -0400 Subject: [PATCH] Add find_own_variable method to look up internal context variables --- lib/liquid/context.rb | 13 ++++++++++++- lib/liquid/tags/for.rb | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/liquid/context.rb b/lib/liquid/context.rb index e93dcba..8f74afe 100644 --- a/lib/liquid/context.rb +++ b/lib/liquid/context.rb @@ -177,7 +177,18 @@ module Liquid variable = variable.to_liquid variable.context = self if variable.respond_to?(:context=) - return variable + variable + end + + def find_own_variable(key) + index = @scopes.find_index { |s| s.has_key?(key) } + return unless index + + scope = @scopes[index] + variable = lookup_and_evaluate(@scopes[index], key).to_liquid + variable.context = self if variable.respond_to?(:context=) + + variable end def lookup_and_evaluate(obj, key) diff --git a/lib/liquid/tags/for.rb b/lib/liquid/tags/for.rb index 05b1b93..643e1a8 100644 --- a/lib/liquid/tags/for.rb +++ b/lib/liquid/tags/for.rb @@ -99,7 +99,7 @@ module Liquid # Store our progress through the collection for the continue flag context.registers[:for][@name] = from + segment.length - parent_loop = context.find_variable('forloop'.freeze) + parent_loop = context.find_own_variable('forloop'.freeze) context.stack do segment.each_with_index do |item, index|