mirror of
https://github.com/kemko/liquid.git
synced 2026-01-01 15:55:40 +03:00
Merge pull request #583 from Shopify/slice-nil-offset
Raise a Liquid::ArgumentError in slice filter for invalid integers.
This commit is contained in:
@@ -46,8 +46,8 @@ module Liquid
|
||||
end
|
||||
|
||||
def slice(input, offset, length = nil)
|
||||
offset = Integer(offset)
|
||||
length = length ? Integer(length) : 1
|
||||
offset = to_integer(offset)
|
||||
length = length ? to_integer(length) : 1
|
||||
|
||||
if input.is_a?(Array)
|
||||
input.slice(offset, length) || []
|
||||
@@ -317,6 +317,16 @@ module Liquid
|
||||
|
||||
private
|
||||
|
||||
def to_integer(num)
|
||||
return num if num.is_a?(Integer)
|
||||
num = num.to_s
|
||||
begin
|
||||
Integer(num)
|
||||
rescue ::ArgumentError
|
||||
raise Liquid::ArgumentError, "invalid integer"
|
||||
end
|
||||
end
|
||||
|
||||
def to_number(obj)
|
||||
case obj
|
||||
when Float
|
||||
|
||||
@@ -76,6 +76,13 @@ class StandardFiltersTest < Minitest::Test
|
||||
assert_equal '', @filters.slice(nil, 0)
|
||||
assert_equal '', @filters.slice('foobar', 100, 10)
|
||||
assert_equal '', @filters.slice('foobar', -100, 10)
|
||||
assert_equal 'oob', @filters.slice('foobar', '1', '3')
|
||||
assert_raises(Liquid::ArgumentError) do
|
||||
@filters.slice('foobar', nil)
|
||||
end
|
||||
assert_raises(Liquid::ArgumentError) do
|
||||
@filters.slice('foobar', 0, "")
|
||||
end
|
||||
end
|
||||
|
||||
def test_slice_on_arrays
|
||||
|
||||
Reference in New Issue
Block a user