From 95d5c24bfc154046c5fb4e4e41d170a42350e2d9 Mon Sep 17 00:00:00 2001 From: Konstantin Tennhard Date: Mon, 12 Sep 2016 12:13:12 -0400 Subject: [PATCH] Standard filter truncate: truncate_string string coercion The argument `truncate_string` is now coerced into a string to avoid `NoMethodError`s. This is mostly for added resiliency. It is doubtful that someone would actually intent to use a number as truncate string, but accidentally supplying one is entirely possible. --- lib/liquid/standardfilters.rb | 5 +++-- test/integration/standard_filter_test.rb | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index 50f2dc4..c87cd7c 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -65,9 +65,10 @@ module Liquid return if input.nil? input_str = input.to_s length = Utils.to_integer(length) - l = length - truncate_string.length + truncate_string_str = truncate_string.to_s + l = length - truncate_string_str.length l = 0 if l < 0 - input_str.length > length ? input_str[0...l] + truncate_string : input_str + input_str.length > length ? input_str[0...l] + truncate_string_str : input_str end def truncatewords(input, words = 15, truncate_string = "...".freeze) diff --git a/test/integration/standard_filter_test.rb b/test/integration/standard_filter_test.rb index 909ad44..c852ac6 100644 --- a/test/integration/standard_filter_test.rb +++ b/test/integration/standard_filter_test.rb @@ -115,6 +115,7 @@ class StandardFiltersTest < Minitest::Test assert_equal '...', @filters.truncate('1234567890', 0) assert_equal '1234567890', @filters.truncate('1234567890') assert_equal "测试...", @filters.truncate("测试测试测试测试", 5) + assert_equal '12341', @filters.truncate("1234567890", 5, 1) end def test_split