mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-20 19:30:47 -07:00
blank and empty as variable names
This commit is contained in:
@@ -78,17 +78,17 @@ module Liquid
|
|||||||
private
|
private
|
||||||
|
|
||||||
def equal_variables(left, right)
|
def equal_variables(left, right)
|
||||||
if left.is_a?(Symbol)
|
if left.is_a?(Liquid::Expression::MethodLiteral)
|
||||||
if right.respond_to?(left)
|
if right.respond_to?(left.method_name)
|
||||||
return right.send(left.to_s)
|
return right.send(left.method_name)
|
||||||
else
|
else
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if right.is_a?(Symbol)
|
if right.is_a?(Liquid::Expression::MethodLiteral)
|
||||||
if left.respond_to?(right)
|
if left.respond_to?(right.method_name)
|
||||||
return left.send(right.to_s)
|
return left.send(right.method_name)
|
||||||
else
|
else
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,11 +1,24 @@
|
|||||||
module Liquid
|
module Liquid
|
||||||
class Expression
|
class Expression
|
||||||
|
class MethodLiteral
|
||||||
|
attr_reader :method_name, :to_s
|
||||||
|
|
||||||
|
def initialize(method_name, to_s)
|
||||||
|
@method_name = method_name
|
||||||
|
@to_s = to_s
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_liquid
|
||||||
|
to_s
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
LITERALS = {
|
LITERALS = {
|
||||||
nil => nil, 'nil'.freeze => nil, 'null'.freeze => nil, ''.freeze => nil,
|
nil => nil, 'nil'.freeze => nil, 'null'.freeze => nil, ''.freeze => nil,
|
||||||
'true'.freeze => true,
|
'true'.freeze => true,
|
||||||
'false'.freeze => false,
|
'false'.freeze => false,
|
||||||
'blank'.freeze => :blank?,
|
'blank'.freeze => MethodLiteral.new(:blank?, '').freeze,
|
||||||
'empty'.freeze => :empty?
|
'empty'.freeze => MethodLiteral.new(:empty?, '').freeze
|
||||||
}
|
}
|
||||||
|
|
||||||
def self.parse(markup)
|
def self.parse(markup)
|
||||||
|
|||||||
@@ -24,6 +24,16 @@ class VariableTest < Minitest::Test
|
|||||||
assert_equal '', template.render!
|
assert_equal '', template.render!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_using_blank_as_variable_name
|
||||||
|
template = Template.parse("{% assign foo = blank %}{{ foo }}")
|
||||||
|
assert_equal '', template.render!
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_using_empty_as_variable_name
|
||||||
|
template = Template.parse("{% assign foo = empty %}{{ foo }}")
|
||||||
|
assert_equal '', template.render!
|
||||||
|
end
|
||||||
|
|
||||||
def test_hash_scoping
|
def test_hash_scoping
|
||||||
template = Template.parse(%({{ test.test }}))
|
template = Template.parse(%({{ test.test }}))
|
||||||
assert_equal 'worked', template.render!('test' => { 'test' => 'worked' })
|
assert_equal 'worked', template.render!('test' => { 'test' => 'worked' })
|
||||||
|
|||||||
@@ -110,4 +110,3 @@ class ErrorDrop < Liquid::Drop
|
|||||||
raise Exception, 'exception'
|
raise Exception, 'exception'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user