123456789_123456789_123456789_123456789_123456789_

Class: ActionView::Template::Handlers::ERB::Herb

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Herb::Engine
Instance Chain:
self, Herb::Engine
Inherits: Herb::Engine
  • ::Object
Defined in: actionview/lib/action_view/template/handlers/erb/herb.rb

Class Method Summary

Instance Method Summary

Constructor Details

.new(input, properties = {}) ⇒ Herb

This method is for internal use only.
[ GitHub ]

  
# File 'actionview/lib/action_view/template/handlers/erb/herb.rb', line 14

def initialize(input, properties = {})
  @newline_pending = 0

  # Dup properties so that we don't modify argument
  properties = Hash[properties]

  properties[:bufvar]     ||= "@output_buffer"
  properties[:preamble]   ||= ""
  properties[:postamble]  ||= "#{properties[:bufvar]}"

  # Tell Herb whether the template will be compiled with `frozen_string_literal: true`
  properties[:freeze_template_literals] = !Template.frozen_string_literal

  # Leave all escaping to ActionView::OutputBuffer.
  properties[:escapefunc] = ""
  properties[:attrfunc]   = nil
  properties[:jsfunc]     = nil
  properties[:cssfunc]    = nil

  super
end

Instance Method Details

#add_code(code) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/template/handlers/erb/herb.rb', line 74

def add_code(code)
  flush_newline_if_pending(src)
  super
end

#add_expression(indicator, code, block: false) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/template/handlers/erb/herb.rb', line 56

def add_expression(indicator, code, block: false)
  flush_newline_if_pending(src)

  with_buffer do
    if (indicator == "==") || @escape
      src << ".safe_expr_append="
    else
      src << ".append="
    end

    if block
      src << " " << code
    else
      src << "(" << code << trailing_newline(code) << ")"
    end
  end
end

#add_expression_block(indicator, code) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/template/handlers/erb/herb.rb', line 52

def add_expression_block(indicator, code)
  add_expression(indicator, code, block: true)
end

#add_postamble(_) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/template/handlers/erb/herb.rb', line 79

def add_postamble(_)
  flush_newline_if_pending(src)
  super
end

#add_text(text) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/template/handlers/erb/herb.rb', line 37

def add_text(text)
  return if text.empty?

  if text == "\n"
    @newline_pending += 1
  else
    with_buffer do
      src << ".safe_append='"
      src << "\n" * @newline_pending if @newline_pending > 0
      src << text.gsub(/['\\]/, '\\\\\&') << @text_end
    end
    @newline_pending = 0
  end
end

#flush_newline_if_pending(src) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/template/handlers/erb/herb.rb', line 84

def flush_newline_if_pending(src)
  if @newline_pending > 0
    with_buffer { src << ".safe_append='#{"\n" * @newline_pending}" << @text_end }
    @newline_pending = 0
  end
end