mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-16 09:20:42 -07:00
performance: Use split limit in truncatewords (#1361)
This commit is contained in:
@@ -89,13 +89,15 @@ module Liquid
|
||||
|
||||
def truncatewords(input, words = 15, truncate_string = "...")
|
||||
return if input.nil?
|
||||
wordlist = input.to_s.split
|
||||
words = Utils.to_integer(words)
|
||||
input = input.to_s
|
||||
words = Utils.to_integer(words)
|
||||
words = 1 if words <= 0
|
||||
|
||||
l = words - 1
|
||||
l = 0 if l < 0
|
||||
wordlist = input.split(" ", words + 1)
|
||||
return input if wordlist.length <= words
|
||||
|
||||
wordlist.length > l ? wordlist[0..l].join(" ").concat(truncate_string.to_s) : input
|
||||
wordlist.pop
|
||||
wordlist.join(" ").concat(truncate_string.to_s)
|
||||
end
|
||||
|
||||
# Split input string into an array of substrings separated by given pattern.
|
||||
|
||||
@@ -175,6 +175,9 @@ class StandardFiltersTest < Minitest::Test
|
||||
)
|
||||
assert_equal("测试测试测试测试", @filters.truncatewords('测试测试测试测试', 5))
|
||||
assert_equal('one two1', @filters.truncatewords("one two three", 2, 1))
|
||||
assert_equal('one two three...', @filters.truncatewords("one two\tthree\nfour", 3))
|
||||
assert_equal('one two...', @filters.truncatewords("one two three four", 2))
|
||||
assert_equal('one...', @filters.truncatewords("one two three four", 0))
|
||||
end
|
||||
|
||||
def test_strip_html
|
||||
|
||||
Reference in New Issue
Block a user