class Bytewise::Ast::Expression

Public Class Methods

new(parts) click to toggle source
# File lib/brace_markup/ast/expression.rb, line 4
def initialize(parts)
  @parts = parts
end

Public Instance Methods

render(context) click to toggle source
# File lib/brace_markup/ast/expression.rb, line 8
def render(context)
  parts = @parts.clone
  last_value = render_part(parts.shift, context)

  parts.each_with_index do |part, i|
    next_part = parts[i + 1]

    next if i % 2 == 1

    if part.is_a? Operators::Operator
      if part.is_a? Operators::LogicalAnd
        return false unless last_value

        last_value = render_part(next_part, context)
      elsif part.is_a? Operators::LogicalOr
        return true if last_value

        last_value = render_part(next_part, context)
      else
        last_value = part.evaluate(last_value, render_part(next_part, context))
      end

    else
      raise Exception.new("Parts have to be connected by an Operator")
    end
  end

  last_value
end
render_part(part, *args) click to toggle source
# File lib/brace_markup/ast/expression.rb, line 38
def render_part(part, *args)
  if part.is_a? Node
    part.render(*args)
  else
    part
  end
end