Raise Liquid::ArgumentError on invalid range

This commit is contained in:
Peter Zhu
2020-11-12 16:08:16 -05:00
parent 38600338cf
commit 2cf4b1bd55
2 changed files with 15 additions and 18 deletions

View File

@@ -12,7 +12,18 @@ module Liquid
if start_obj.respond_to?(:evaluate) || end_obj.respond_to?(:evaluate)
new(start_obj, end_obj)
else
start_obj.to_i..end_obj.to_i
to_integer(start_obj)..to_integer(end_obj)
end
end
def self.to_integer(input)
case input
when Integer
input
when NilClass, String, Float
input.to_i
else
Utils.to_integer(input)
end
end
@@ -24,26 +35,13 @@ module Liquid
end
def evaluate(context)
start_int = to_integer(context.evaluate(@start_expr))
end_int = to_integer(context.evaluate(@end_expr))
start_int = self.class.to_integer(context.evaluate(@start_expr))
end_int = self.class.to_integer(context.evaluate(@end_expr))
start_int..end_int
end
def ==(other)
self.class == other.class && start_expr == other.start_expr && end_expr == other.end_expr
end
private
def to_integer(input)
case input
when Integer
input
when NilClass, String
input.to_i
else
Utils.to_integer(input)
end
end
end
end

View File

@@ -32,8 +32,7 @@ class ExpressionTest < Minitest::Test
assert_equal(0..0, parse_and_eval("('a'..'b')"))
with_error_mode(:strict) do
e = assert_raises(NoMethodError) { parse_and_eval("(1..(1..5))") }
assert_match(/undefined method `to_i' for 1..5:Range/, e.message)
assert_raises(Liquid::ArgumentError) { parse_and_eval("(1..(1..5))") }
end
end