Fix MethodLiteral for updated blank & empty

This commit is contained in:
Charles-P. Clermont
2026-01-27 10:07:36 -05:00
parent a4e82eb5c1
commit ef4770975b
4 changed files with 53 additions and 20 deletions
+1 -1
View File
@@ -72,7 +72,7 @@ module Liquid
end
def apply_method_literal(node, other)
other.send(node.method_name) if other.respond_to?(node.method_name)
node.apply(other)
end
def equal_variables(left, right)
+2 -2
View File
@@ -9,8 +9,8 @@ module Liquid
'' => nil,
'true' => true,
'false' => false,
'blank' => MethodLiteral.new(:blank?, '').freeze,
'empty' => MethodLiteral.new(:empty?, '').freeze,
'blank' => MethodLiteral::BLANK,
'empty' => MethodLiteral::EMPTY,
}.freeze
DOT = ".".ord
+34 -1
View File
@@ -4,13 +4,46 @@ module Liquid
class MethodLiteral
attr_reader :method_name, :to_s
def initialize(method_name, to_s)
def initialize(method_name, to_s, &evaluator)
@method_name = method_name
@to_s = to_s
@evaluator = evaluator
end
def apply(value)
if value.respond_to?(@method_name)
value.send(@method_name)
elsif @evaluator
@evaluator.call(value)
end
end
def to_liquid
to_s
end
BLANK = MethodLiteral.new(:blank?, '') do |value|
case value
when NilClass, FalseClass
true
when TrueClass, Numeric
false
when String
value.empty? || value.match?(/\A\s*\z/)
when Array, Hash
value.empty?
else
value.respond_to?(:empty?) ? value.empty? : false
end
end.freeze
EMPTY = MethodLiteral.new(:empty?, '') do |value|
case value
when String, Array, Hash
value.empty?
else
value.respond_to?(:empty?) ? value.empty? : nil
end
end.freeze
end
end