mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-19 02:40:41 -07:00
Merge pull request #253 from trishume/fix-range-parsing
Fix bad range parsing.
This commit is contained in:
@@ -15,6 +15,7 @@ module Liquid
|
|||||||
SINGLE_STRING_LITERAL = /'[^\']*'/
|
SINGLE_STRING_LITERAL = /'[^\']*'/
|
||||||
DOUBLE_STRING_LITERAL = /"[^\"]*"/
|
DOUBLE_STRING_LITERAL = /"[^\"]*"/
|
||||||
NUMBER_LITERAL = /-?\d+(\.\d+)?/
|
NUMBER_LITERAL = /-?\d+(\.\d+)?/
|
||||||
|
DOTDOT = /\.\./
|
||||||
COMPARISON_OPERATOR = /==|!=|<>|<=?|>=?|contains/
|
COMPARISON_OPERATOR = /==|!=|<>|<=?|>=?|contains/
|
||||||
|
|
||||||
def initialize(input)
|
def initialize(input)
|
||||||
@@ -32,6 +33,7 @@ module Liquid
|
|||||||
when t = @ss.scan(DOUBLE_STRING_LITERAL) then [:string, t]
|
when t = @ss.scan(DOUBLE_STRING_LITERAL) then [:string, t]
|
||||||
when t = @ss.scan(NUMBER_LITERAL) then [:number, t]
|
when t = @ss.scan(NUMBER_LITERAL) then [:number, t]
|
||||||
when t = @ss.scan(IDENTIFIER) then [:id, t]
|
when t = @ss.scan(IDENTIFIER) then [:id, t]
|
||||||
|
when t = @ss.scan(DOTDOT) then [:dotdot, t]
|
||||||
else
|
else
|
||||||
c = @ss.getch
|
c = @ss.getch
|
||||||
if s = SPECIALS[c]
|
if s = SPECIALS[c]
|
||||||
|
|||||||
@@ -53,8 +53,7 @@ module Liquid
|
|||||||
elsif token.first == :open_round
|
elsif token.first == :open_round
|
||||||
consume
|
consume
|
||||||
first = expression
|
first = expression
|
||||||
consume(:dot)
|
consume(:dotdot)
|
||||||
consume(:dot)
|
|
||||||
last = expression
|
last = expression
|
||||||
consume(:close_round)
|
consume(:close_round)
|
||||||
"(#{first}..#{last})"
|
"(#{first}..#{last})"
|
||||||
|
|||||||
@@ -56,6 +56,14 @@ class ParserTest < Test::Unit::TestCase
|
|||||||
assert_equal '"wut"', p.expression
|
assert_equal '"wut"', p.expression
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_ranges
|
||||||
|
p = Parser.new("(5..7) (1.5..9.6) (young..old) (hi[5].wat..old)")
|
||||||
|
assert_equal '(5..7)', p.expression
|
||||||
|
assert_equal '(1.5..9.6)', p.expression
|
||||||
|
assert_equal '(young..old)', p.expression
|
||||||
|
assert_equal '(hi[5].wat..old)', p.expression
|
||||||
|
end
|
||||||
|
|
||||||
def test_arguments
|
def test_arguments
|
||||||
p = Parser.new("filter: hi.there[5], keyarg: 7")
|
p = Parser.new("filter: hi.there[5], keyarg: 7")
|
||||||
assert_equal 'filter', p.consume(:id)
|
assert_equal 'filter', p.consume(:id)
|
||||||
|
|||||||
Reference in New Issue
Block a user