diff --git a/lib/liquid/tags/assign.rb b/lib/liquid/tags/assign.rb index ff4ab40..6d4f7d8 100644 --- a/lib/liquid/tags/assign.rb +++ b/lib/liquid/tags/assign.rb @@ -45,11 +45,18 @@ module Liquid def assign_score_of(val) if val.instance_of?(String) val.bytesize - elsif val.instance_of?(Array) || val.instance_of?(Hash) + elsif val.instance_of?(Array) sum = 1 # Uses #each to avoid extra allocations. val.each { |child| sum += assign_score_of(child) } 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 1 end diff --git a/test/integration/assign_test.rb b/test/integration/assign_test.rb index 01f355c..b956fd1 100644 --- a/test/integration/assign_test.rb +++ b/test/integration/assign_test.rb @@ -88,8 +88,8 @@ class AssignTest < Minitest::Test def test_assign_score_of_hash assert_equal(1, assign_score_of({})) - assert_equal(6, assign_score_of('int' => 123)) - assert_equal(14, assign_score_of('int' => 123, 'str' => 'abcd')) + assert_equal(5, assign_score_of('int' => 123)) + assert_equal(12, assign_score_of('int' => 123, 'str' => 'abcd')) end private