mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-19 10:52:48 -07:00
Avoid allocating arrays of key value pairs for hashes in assign_score_of
This commit is contained in:
@@ -45,11 +45,18 @@ module Liquid
|
|||||||
def assign_score_of(val)
|
def assign_score_of(val)
|
||||||
if val.instance_of?(String)
|
if val.instance_of?(String)
|
||||||
val.bytesize
|
val.bytesize
|
||||||
elsif val.instance_of?(Array) || val.instance_of?(Hash)
|
elsif val.instance_of?(Array)
|
||||||
sum = 1
|
sum = 1
|
||||||
# Uses #each to avoid extra allocations.
|
# Uses #each to avoid extra allocations.
|
||||||
val.each { |child| sum += assign_score_of(child) }
|
val.each { |child| sum += assign_score_of(child) }
|
||||||
sum
|
sum
|
||||||
|
elsif val.instance_of?(Hash)
|
||||||
|
sum = 1
|
||||||
|
val.each do |key, entry_value|
|
||||||
|
sum += assign_score_of(key)
|
||||||
|
sum += assign_score_of(entry_value)
|
||||||
|
end
|
||||||
|
sum
|
||||||
else
|
else
|
||||||
1
|
1
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -88,8 +88,8 @@ class AssignTest < Minitest::Test
|
|||||||
|
|
||||||
def test_assign_score_of_hash
|
def test_assign_score_of_hash
|
||||||
assert_equal(1, assign_score_of({}))
|
assert_equal(1, assign_score_of({}))
|
||||||
assert_equal(6, assign_score_of('int' => 123))
|
assert_equal(5, assign_score_of('int' => 123))
|
||||||
assert_equal(14, assign_score_of('int' => 123, 'str' => 'abcd'))
|
assert_equal(12, assign_score_of('int' => 123, 'str' => 'abcd'))
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
Reference in New Issue
Block a user