mirror of
https://github.com/kemko/liquid.git
synced 2026-01-01 15:55:40 +03:00
Raise Liquid::ArgumentError on invalid range
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user