mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-12 23:40:45 -07:00
Merge pull request #407 from Shopify/slice_arrays
Slice filter for arrays
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user