mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-18 10:20:43 -07:00
Fix MethodLiteral for updated blank & empty
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user