diff --git a/lib/liquid/range_lookup.rb b/lib/liquid/range_lookup.rb index 9f80c5d..4f4ed6b 100644 --- a/lib/liquid/range_lookup.rb +++ b/lib/liquid/range_lookup.rb @@ -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 diff --git a/test/integration/expression_test.rb b/test/integration/expression_test.rb index 5301985..3841fec 100644 --- a/test/integration/expression_test.rb +++ b/test/integration/expression_test.rb @@ -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