Merge pull request #406 from Shopify/slice_filter

slice filter
This commit is contained in:
Florian Weingarten
2014-08-05 17:14:01 +02:00
2 changed files with 20 additions and 1 deletions

View File

@@ -36,12 +36,17 @@ module Liquid
def escape(input)
CGI.escapeHTML(input) rescue input
end
alias_method :h, :escape
def escape_once(input)
input.to_s.gsub(HTML_ESCAPE_ONCE_REGEXP, HTML_ESCAPE)
end
alias_method :h, :escape
def slice(input, offset, length=nil)
offset = Integer(offset)
length = length ? Integer(length) : 1
input.to_s.slice(offset, length) || ''
end
# Truncate a string down to x characters
def truncate(input, length = 50, truncate_string = "...".freeze)

View File

@@ -64,6 +64,20 @@ class StandardFiltersTest < Minitest::Test
assert_equal '', @filters.upcase(nil)
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
assert_equal '1234...', @filters.truncate('1234567890', 7)
assert_equal '1234567890', @filters.truncate('1234567890', 20)