mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-16 01:10:41 -07:00
Extract Parser#range_lookup out of Expression.parse
This commit is contained in:
+12
-1
@@ -58,8 +58,10 @@ module Liquid
|
||||
string
|
||||
when :number
|
||||
number
|
||||
when :open_round
|
||||
range_lookup
|
||||
else
|
||||
parse_expression(expression_string)
|
||||
raise SyntaxError, "#{token} is not a valid expression"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -88,6 +90,15 @@ module Liquid
|
||||
VariableLookup.new(name, lookups, command_flags)
|
||||
end
|
||||
|
||||
def range_lookup
|
||||
consume(:open_round)
|
||||
first = expression
|
||||
consume(:dotdot)
|
||||
last = expression
|
||||
consume(:close_round)
|
||||
RangeLookup.create(first, last)
|
||||
end
|
||||
|
||||
def expression_string
|
||||
token = @tokens[@p]
|
||||
case token[0]
|
||||
|
||||
@@ -2,13 +2,15 @@
|
||||
|
||||
module Liquid
|
||||
class RangeLookup
|
||||
def self.create(start_obj, end_obj, start_markup, end_markup)
|
||||
def self.create(start_obj, end_obj, start_markup = nil, end_markup = nil)
|
||||
if start_obj.respond_to?(:evaluate) || end_obj.respond_to?(:evaluate)
|
||||
new(start_obj, end_obj)
|
||||
else
|
||||
begin
|
||||
start_obj.to_i..end_obj.to_i
|
||||
rescue NoMethodError
|
||||
start_markup = start_obj.to_s unless start_markup
|
||||
end_markup = end_obj.to_s unless end_markup
|
||||
invalid_expr = start_markup unless start_obj.respond_to?(:to_i)
|
||||
invalid_expr ||= end_markup unless end_obj.respond_to?(:to_i)
|
||||
if invalid_expr
|
||||
|
||||
Reference in New Issue
Block a user