class Slimi::Filters::EndInserter

Append missing ‘end` line to embedded Ruby code in control block.

Public Instance Methods

on_multi(*expressions) click to toggle source

@param [Array<Array>] expressions

# File lib/slimi/filters/end_inserter.rb, line 8
def on_multi(*expressions)
  result = [:multi]
  prev_indent = false
  expressions.each do |source|
    expression = Expression.new(source)
    if expression.control?
      raise ::Temple::FilterError, 'Explicit end statements are forbidden.' if expression.end?

      result << code_end if prev_indent && !expression.else?

      prev_indent = expression.if?
    elsif !expression.newline? && prev_indent
      result << code_end
      prev_indent = false
    end

    result << compile(source)
  end

  result << code_end if prev_indent
  result
end

Private Instance Methods

code_end() click to toggle source

@return [Array]

# File lib/slimi/filters/end_inserter.rb, line 34
def code_end
  [:code, 'end']
end