38 lines
831 B
Ruby
38 lines
831 B
Ruby
|
module Liquid
|
||
|
class RangeLookup
|
||
|
def self.parse(start_markup, end_markup)
|
||
|
start_obj = Expression.parse(start_markup)
|
||
|
end_obj = Expression.parse(end_markup)
|
||
|
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
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def initialize(start_obj, end_obj)
|
||
|
@start_obj = start_obj
|
||
|
@end_obj = end_obj
|
||
|
end
|
||
|
|
||
|
def evaluate(context)
|
||
|
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
|