diff --git a/lib/liquid/condition.rb b/lib/liquid/condition.rb index 7db9cf35..3e798498 100644 --- a/lib/liquid/condition.rb +++ b/lib/liquid/condition.rb @@ -41,16 +41,22 @@ module Liquid end def evaluate(context = Context.new) - result = interpret_condition(left, right, operator, context) + condition = self + result = nil + loop do + result = interpret_condition(condition.left, condition.right, condition.operator, context) - case @child_relation - when :or - result || @child_condition.evaluate(context) - when :and - result && @child_condition.evaluate(context) - else - result + case condition.child_relation + when :or + break if result + when :and + break unless result + else + break + end + condition = condition.child_condition end + result end def or(condition) @@ -75,6 +81,10 @@ module Liquid "#" end + protected + + attr_reader :child_relation, :child_condition + private def equal_variables(left, right)