slice filter

This commit is contained in:
Florian Weingarten
2014-08-04 16:47:08 +00:00
parent 17347d43de
commit baea0a6bf7
2 changed files with 18 additions and 1 deletions
+4 -1
View File
@@ -36,12 +36,15 @@ module Liquid
def escape(input) def escape(input)
CGI.escapeHTML(input) rescue input CGI.escapeHTML(input) rescue input
end end
alias_method :h, :escape
def escape_once(input) def escape_once(input)
input.to_s.gsub(HTML_ESCAPE_ONCE_REGEXP, HTML_ESCAPE) input.to_s.gsub(HTML_ESCAPE_ONCE_REGEXP, HTML_ESCAPE)
end end
alias_method :h, :escape def slice(input, offset, length=nil)
input.to_s.slice(offset.to_i, (length || 1).to_i) || ''
end
# Truncate a string down to x characters # Truncate a string down to x characters
def truncate(input, length = 50, truncate_string = "...".freeze) def truncate(input, length = 50, truncate_string = "...".freeze)
+14
View File
@@ -64,6 +64,20 @@ class StandardFiltersTest < Minitest::Test
assert_equal '', @filters.upcase(nil) assert_equal '', @filters.upcase(nil)
end end
def test_slice
assert_equal 'oob', @filters.slice('foobar', 1, 3)
assert_equal 'oobar', @filters.slice('foobar', 1, 1000)
assert_equal '', @filters.slice('foobar', 1, 0)
assert_equal 'o', @filters.slice('foobar', 1, 1)
assert_equal 'bar', @filters.slice('foobar', 3, 3)
assert_equal 'ar', @filters.slice('foobar', -2, 2)
assert_equal 'ar', @filters.slice('foobar', -2, 1000)
assert_equal 'r', @filters.slice('foobar', -1)
assert_equal '', @filters.slice(nil, 0)
assert_equal '', @filters.slice('foobar', 100, 10)
assert_equal '', @filters.slice('foobar', -100, 10)
end
def test_truncate def test_truncate
assert_equal '1234...', @filters.truncate('1234567890', 7) assert_equal '1234...', @filters.truncate('1234567890', 7)
assert_equal '1234567890', @filters.truncate('1234567890', 20) assert_equal '1234567890', @filters.truncate('1234567890', 20)