mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-18 18:30:40 -07: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
|
end
|
||||||
|
|
||||||
def slice(input, offset, length = nil)
|
def slice(input, offset, length = nil)
|
||||||
offset = Integer(offset)
|
offset = to_integer(offset)
|
||||||
length = length ? Integer(length) : 1
|
length = length ? to_integer(length) : 1
|
||||||
|
|
||||||
if input.is_a?(Array)
|
if input.is_a?(Array)
|
||||||
input.slice(offset, length) || []
|
input.slice(offset, length) || []
|
||||||
@@ -317,6 +317,16 @@ module Liquid
|
|||||||
|
|
||||||
private
|
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)
|
def to_number(obj)
|
||||||
case obj
|
case obj
|
||||||
when Float
|
when Float
|
||||||
|
|||||||
@@ -76,6 +76,13 @@ class StandardFiltersTest < Minitest::Test
|
|||||||
assert_equal '', @filters.slice(nil, 0)
|
assert_equal '', @filters.slice(nil, 0)
|
||||||
assert_equal '', @filters.slice('foobar', 100, 10)
|
assert_equal '', @filters.slice('foobar', 100, 10)
|
||||||
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
|
end
|
||||||
|
|
||||||
def test_slice_on_arrays
|
def test_slice_on_arrays
|
||||||
|
|||||||
Reference in New Issue
Block a user