class Temple::Mixins::CompiledDispatcher::DispatchNode

def compile(level = 0, parent = nil)

def compile(level = 0, parent = nil)
  if empty?
    if method
      ('  ' * level) + "#{method}(*exp[#{level}..-1])"
    elsif !parent
      'exp'
    else
      raise 'Invalid dispatcher node'
    end
  else
    code = [('  ' * level) + "case(exp[#{level}])"]
    each do |key, child|
      code << ('  ' * level) + "when #{key.inspect}"
      code << child.compile(level + 1, parent || method)
    end
    if method || !parent
      code << ('  ' * level) + "else"
      if method
        code << ('  ' * level) + "  #{method}(*exp[#{level}..-1])"
      else
        code << ('  ' * level) + "  exp"
      end
    end
    code << ('  ' * level) + "end"
    code.join("\n")
  end
end