diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index 9bf209a..b246576 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -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) diff --git a/test/integration/standard_filter_test.rb b/test/integration/standard_filter_test.rb index 56ef72a..5d658e9 100644 --- a/test/integration/standard_filter_test.rb +++ b/test/integration/standard_filter_test.rb @@ -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)