Extract Parser#number parse out of Expression.parse

This commit is contained in:
Charles-P. Clermont
2026-01-26 16:52:17 -05:00
parent 2a86852eb3
commit e1e0129983
3 changed files with 18 additions and 3 deletions
+7
View File
@@ -52,11 +52,18 @@ module Liquid
case token[0]
when :string
string
when :number
number
else
parse_expression(expression_string)
end
end
def number
num = consume(:number)
Expression.parse_number(num)
end
def string
consume(:string)[1..-2]
end
+3 -3
View File
@@ -67,7 +67,7 @@ class ExpressionTest < Minitest::Test
Liquid::Template.parse(template, expression_cache: cache).render
assert_equal(
["1", "2", "x", "y"],
["x", "y"],
cache.to_a.map { _1[0] }.sort,
)
end
@@ -91,7 +91,7 @@ class ExpressionTest < Minitest::Test
cache = parse_context.instance_variable_get(:@expression_cache)
assert_equal(
["1", "2", "x", "y"],
["x", "y"],
cache.to_a.map { _1[0] }.sort,
)
end
@@ -112,7 +112,7 @@ class ExpressionTest < Minitest::Test
Liquid::Template.parse(template, expression_cache: cache).render
assert_equal(
["1", "2", "x", "y"],
["x", "y"],
cache.to_a.map { _1[0] }.sort,
)
end
+8
View File
@@ -58,6 +58,14 @@ class ParserUnitTest < Minitest::Test
assert_equal('"wut"', p.expression_string)
end
def test_number
p = new_parser('-1 0 1 2.0')
assert_equal(-1, p.number)
assert_equal(0, p.number)
assert_equal(1, p.number)
assert_equal(2.0, p.number)
end
def test_string
p = new_parser("'s1' \"s2\" 'this \"s3\"' \"that 's4'\"")
assert_equal('s1', p.string)