From baea0a6bf704ce31d808888c0ec87b5e456e68f4 Mon Sep 17 00:00:00 2001 From: Florian Weingarten Date: Mon, 4 Aug 2014 16:47:08 +0000 Subject: [PATCH 1/2] slice filter --- lib/liquid/standardfilters.rb | 5 ++++- test/integration/standard_filter_test.rb | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index 0a956fb..d020155 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -36,12 +36,15 @@ 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) + input.to_s.slice(offset.to_i, (length || 1).to_i) || '' + 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 fc6b600..092d253 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) From 0bea31d2ef57484cd5b3b8922023b0a7c87450bd Mon Sep 17 00:00:00 2001 From: Florian Weingarten Date: Tue, 5 Aug 2014 15:13:15 +0000 Subject: [PATCH 2/2] Use Integer() instead of to_i --- lib/liquid/standardfilters.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index d020155..9962c6a 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -43,7 +43,9 @@ module Liquid end def slice(input, offset, length=nil) - input.to_s.slice(offset.to_i, (length || 1).to_i) || '' + offset = Integer(offset) + length = length ? Integer(length) : 1 + input.to_s.slice(offset, length) || '' end # Truncate a string down to x characters