diff --git a/lib/liquid/range_lookup.rb b/lib/liquid/range_lookup.rb index 8da022dc..93bb420c 100644 --- a/lib/liquid/range_lookup.rb +++ b/lib/liquid/range_lookup.rb @@ -16,9 +16,22 @@ module Liquid end def evaluate(context) - start_int = Utils.to_integer(context.evaluate(@start_obj)) - end_int = Utils.to_integer(context.evaluate(@end_obj)) + start_int = to_integer(context.evaluate(@start_obj)) + end_int = to_integer(context.evaluate(@end_obj)) start_int..end_int 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/tags/for_tag_test.rb b/test/integration/tags/for_tag_test.rb index fe2779fc..d9d396f3 100644 --- a/test/integration/tags/for_tag_test.rb +++ b/test/integration/tags/for_tag_test.rb @@ -42,6 +42,8 @@ HERE assert_raises(Liquid::ArgumentError) do Template.parse('{% for i in (a..2) %}{% endfor %}').render!("a" => [1, 2]) end + + assert_template_result(' 0 1 2 3 ', '{% for item in (a..3) %} {{item}} {% endfor %}', "a" => "invalid integer") end def test_for_with_variable_range