class Riml::Compiler::UnlessNodeVisitor

Public Instance Methods

compile(node) click to toggle source
# File lib/riml/compiler.rb, line 69
def compile(node)
  condition_visitor = visitor_for_node(node.condition)
  node.condition.parent_node = node
  node.condition.force_newline = true
  node.compiled_output = "if "
  node.compiled_output << "!" if UnlessNode === node

  node.condition.accept(condition_visitor)
  node.body.accept(NodesVisitor.new(:propagate_up_tree => false))

  node.body.compiled_output.each_line do |line|
    outdent = line =~ /\A(\s*)(else\s*|elseif .+)$/
    if outdent && node.non_nested?
      node.compiled_output << node.outdent + line
    else
      node.compiled_output << node.indent + line
    end
  end
  node.compiled_output << "\n" unless node.compiled_output[-1, 1] == "\n"
  node.compiled_output << "endif\n"
end