Merge pull request #407 from Shopify/slice_arrays

Slice filter for arrays
This commit is contained in:
Florian Weingarten
2014-08-05 20:00:45 +02:00
2 changed files with 20 additions and 1 deletions
+5
View File
@@ -45,8 +45,13 @@ module Liquid
def slice(input, offset, length=nil) def slice(input, offset, length=nil)
offset = Integer(offset) offset = Integer(offset)
length = length ? Integer(length) : 1 length = length ? Integer(length) : 1
if input.is_a?(Array)
input.slice(offset, length) || []
else
input.to_s.slice(offset, length) || '' input.to_s.slice(offset, length) || ''
end end
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
@@ -78,6 +78,20 @@ class StandardFiltersTest < Minitest::Test
assert_equal '', @filters.slice('foobar', -100, 10) assert_equal '', @filters.slice('foobar', -100, 10)
end end
def test_slice_on_arrays
input = 'foobar'.split(//)
assert_equal %w{o o b}, @filters.slice(input, 1, 3)
assert_equal %w{o o b a r}, @filters.slice(input, 1, 1000)
assert_equal %w{}, @filters.slice(input, 1, 0)
assert_equal %w{o}, @filters.slice(input, 1, 1)
assert_equal %w{b a r}, @filters.slice(input, 3, 3)
assert_equal %w{a r}, @filters.slice(input, -2, 2)
assert_equal %w{a r}, @filters.slice(input, -2, 1000)
assert_equal %w{r}, @filters.slice(input, -1)
assert_equal %w{}, @filters.slice(input, 100, 10)
assert_equal %w{}, @filters.slice(input, -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)