Use replacement string for replace filters literally (#924)

This commit is contained in:
Dylan Thacker-Smith
2017-08-28 11:51:20 -04:00
committed by GitHub
parent 44eaa4b9d8
commit 27c91203ab
2 changed files with 6 additions and 2 deletions

View File

@@ -201,12 +201,14 @@ module Liquid
# Replace occurrences of a string with another
def replace(input, string, replacement = ''.freeze)
input.to_s.gsub(string.to_s, replacement.to_s)
replacement = replacement.to_s
input.to_s.gsub(string.to_s) { replacement }
end
# Replace the first occurrences of a string with another
def replace_first(input, string, replacement = ''.freeze)
input.to_s.sub(string.to_s, replacement.to_s)
replacement = replacement.to_s
input.to_s.sub(string.to_s) { replacement }
end
# remove a substring

View File

@@ -362,8 +362,10 @@ class StandardFiltersTest < Minitest::Test
def test_replace
assert_equal '2 2 2 2', @filters.replace('1 1 1 1', '1', 2)
assert_equal '2 2 2 2', @filters.replace('1 1 1 1', 1, 2)
assert_equal "\\& \\& \\& \\&", @filters.replace('1 1 1 1', '1', "\\&")
assert_equal '2 1 1 1', @filters.replace_first('1 1 1 1', '1', 2)
assert_equal '2 1 1 1', @filters.replace_first('1 1 1 1', 1, 2)
assert_equal '\\& 1 1 1', @filters.replace_first("1 1 1 1", '1', "\\&")
assert_template_result '2 1 1 1', "{{ '1 1 1 1' | replace_first: '1', 2 }}"
end