Convert render output to strings in BlockBody

This commit is contained in:
Justin Li
2014-12-05 15:17:09 -05:00
parent 742b3c69bb
commit 9f7e601110
4 changed files with 9 additions and 21 deletions
+4 -2
View File
@@ -104,11 +104,13 @@ module Liquid
def render_token(token, context)
token_output = (token.respond_to?(:render) ? token.render(context) : token)
context.resource_limits.increment_render_length(token_output)
token_str = token_output.is_a?(Array) ? token_output.join : token_output.to_s
context.resource_limits.render_length += token_str.length
if context.resource_limits.reached?
raise MemoryError.new("Memory limits exceeded".freeze)
end
token_output
token_str
end
def create_variable(token, options)
-17
View File
@@ -18,22 +18,5 @@ module Liquid
(@render_score_limit && @render_score > @render_score_limit ) ||
(@assign_score_limit && @assign_score > @assign_score_limit )
end
def increment_render_length(obj)
@render_length += increment_for(obj)
end
def increment_render_score(obj)
@render_score += increment_for(obj)
end
def increment_assign_score(obj)
@assign_score += increment_for(obj)
end
private
def increment_for(obj)
obj.instance_of?(String) || obj.instance_of?(Array) || obj.instance_of?(Hash) ? obj.length : 1
end
end
end
+4 -1
View File
@@ -25,7 +25,10 @@ module Liquid
def render(context)
val = @from.render(context)
context.scopes.last[@to] = val
context.resource_limits.increment_assign_score(val)
inc = val.instance_of?(String) || val.instance_of?(Array) || val.instance_of?(Hash) ? val.length : 1
context.resource_limits.assign_score += inc
''.freeze
end
+1 -1
View File
@@ -25,7 +25,7 @@ module Liquid
def render(context)
output = super
context.scopes.last[@to] = output
context.resource_limits.increment_assign_score(output)
context.resource_limits.assign_score += output.length
''.freeze
end