lib/temple/filters/multi_flattener.rb



module Temple
  module Filters
    class MultiFlattener
      def initialize(options = {})
        @options = {}
      end
      
      def compile(exp)
        return exp unless exp.first == :multi
        # If the multi contains a single element, just return the element
        return compile(exp[1]) if exp.length == 2
        result = [:multi]
        
        exp[1..-1].each do |e|
          e = compile(e)
          if e.first == :multi
            result.concat(e[1..-1])
          else
            result << e
          end
        end
        
        result
      end
    end
  end
end