class Liquid::Condition

:nodoc:
c.evaluate #=> true
c = Condition.new(1, ‘==’, 1)
Example:
Container for liquid nodes which conveniently wraps decision making logic

def self.operators

def self.operators
  @@operators
end

def self.parse_expression(parse_context, markup)

def self.parse_expression(parse_context, markup)
  @@method_literals[markup] || parse_context.parse_expression(markup)
end

def and(condition)

def and(condition)
  @child_relation  = :and
  @child_condition = condition
end

def attach(attachment)

def attach(attachment)
  @attachment = attachment
end

def deprecated_default_context

def deprecated_default_context
  warn("DEPRECATION WARNING: Condition#evaluate without a context argument is deprecated" \
    " and will be removed from Liquid 6.0.0.")
  Context.new
end

def else?

def else?
  false
end

def equal_variables(left, right)

def equal_variables(left, right)
  if left.is_a?(MethodLiteral)
    if right.respond_to?(left.method_name)
      return right.send(left.method_name)
    else
      return nil
    end
  end
  if right.is_a?(MethodLiteral)
    if left.respond_to?(right.method_name)
      return left.send(right.method_name)
    else
      return nil
    end
  end
  left == right
end

def evaluate(context = deprecated_default_context)

def evaluate(context = deprecated_default_context)
  condition = self
  result = nil
  loop do
    result = interpret_condition(condition.left, condition.right, condition.operator, context)
    case condition.child_relation
    when :or
      break if Liquid::Utils.to_liquid_value(result)
    when :and
      break unless Liquid::Utils.to_liquid_value(result)
    else
      break
    end
    condition = condition.child_condition
  end
  result
end

def initialize(left = nil, operator = nil, right = nil)

def initialize(left = nil, operator = nil, right = nil)
  @left     = left
  @operator = operator
  @right    = right
  @child_relation  = nil
  @child_condition = nil
end

def inspect

def inspect
  "#<Condition #{[@left, @operator, @right].compact.join(' ')}>"
end

def interpret_condition(left, right, op, context)

def interpret_condition(left, right, op, context)
  # If the operator is empty this means that the decision statement is just
  # a single variable. We can just poll this variable from the context and
  # return this as the result.
  return context.evaluate(left) if op.nil?
  left  = Liquid::Utils.to_liquid_value(context.evaluate(left))
  right = Liquid::Utils.to_liquid_value(context.evaluate(right))
  operation = self.class.operators[op] || raise(Liquid::ArgumentError, "Unknown operator #{op}")
  if operation.respond_to?(:call)
    operation.call(self, left, right)
  elsif left.respond_to?(operation) && right.respond_to?(operation) && !left.is_a?(Hash) && !right.is_a?(Hash)
    begin
      left.send(operation, right)
    rescue ::ArgumentError => e
      raise Liquid::ArgumentError, e.message
    end
  end
end

def or(condition)

def or(condition)
  @child_relation  = :or
  @child_condition = condition
end