From 3891f14a1aebe3bcf45e6718b16ca85ca5f1566a Mon Sep 17 00:00:00 2001 From: Justin Li Date: Mon, 1 Feb 2016 11:00:49 -0500 Subject: [PATCH] Take nested values into account for assign score --- lib/liquid/tags/assign.rb | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/liquid/tags/assign.rb b/lib/liquid/tags/assign.rb index 9cfb478..78b86c1 100644 --- a/lib/liquid/tags/assign.rb +++ b/lib/liquid/tags/assign.rb @@ -23,16 +23,25 @@ module Liquid def render(context) val = @from.render(context) context.scopes.last[@to] = val - - inc = val.instance_of?(String) || val.instance_of?(Array) || val.instance_of?(Hash) ? val.length : 1 - context.resource_limits.assign_score += inc - + context.resource_limits.assign_score += assign_score_of(val) ''.freeze end def blank? true end + + private + + def assign_score_of(val) + if val.instance_of?(String) + val.length + elsif val.instance_of?(Array) || val.instance_of?(Hash) + val.reduce(0) { |n, child| n + assign_score_of(child) } + else + 1 + end + end end Template.register_tag('assign'.freeze, Assign)