Move parse_expression to Parser.unsafe_parse_expression

- Add Parser#string
- Add Parser#unsafe_parse_expression
- Add private Parser#parse_expression
- Remove ParseContext.parse_expression
- Remove Tag.parse_expression
- Condition.parse_expression now takes a parser as argument
This commit is contained in:
Charles-P. Clermont
2026-01-26 16:52:17 -05:00
parent cf3d845315
commit 7d0bdd166d
11 changed files with 207 additions and 70 deletions
+7 -8
View File
@@ -166,25 +166,24 @@ class ConditionUnitTest < Minitest::Test
assert_includes(err.lines.map(&:strip), expected)
end
def test_parse_expression_with_safe_true
def test_parse_expression
environment = Environment.build
parse_context = ParseContext.new(environment: environment)
result = Condition.parse_expression(parse_context, 'product.title', safe: true)
parser = parse_context.new_parser('product.title')
result = Condition.parse_expression(parser)
assert_instance_of(VariableLookup, result)
assert_equal('product', result.name)
assert_equal(['title'], result.lookups)
end
def test_parse_expression_raises_internal_error_if_not_safe
def test_parse_expression_returns_method_literal_for_blank_and_empty
environment = Environment.build
parse_context = ParseContext.new(environment: environment)
parser = parse_context.new_parser('blank')
result = Condition.parse_expression(parser)
error = assert_raises(Liquid::InternalError) do
Condition.parse_expression(parse_context, 'product.title')
end
assert_match(/unsafe parse_expression cannot be used/, error.message)
assert_instance_of(Condition::MethodLiteral, result)
end
# Tests for blank? comparison without ActiveSupport