class ActionView::Template::Handlers::ERB - actionview-4.2.3 Documentation

# class ActionView::Template::Handlers::ERB

### Constants

ENCODING_TAG

### Public Class Methods

call(template) click to toggle source

    # File lib/action_view/template/handlers/erb.rb, line 92
    def self.call(template)
      new.call(template)
    end

### Public Instance Methods

call(template) click to toggle source

    # File lib/action_view/template/handlers/erb.rb, line 104
    def call(template)
      # First, convert to BINARY, so in case the encoding is
      # wrong, we can still find an encoding tag
      # (<%# encoding %>) inside the String using a regular
      # expression
      template_source = template.source.dup.force_encoding(Encoding::ASCII_8BIT)

      erb = template_source.gsub(ENCODING_TAG, '')
      encoding = $2

      erb.force_encoding valid_encoding(template.source.dup, encoding)

      # Always make sure we return a String in the default_internal
      erb.encode!

      self.class.erb_implementation.new(
        erb,
        :escape => (self.class.escape_whitelist.include? template.type),
        :trim => (self.class.erb_trim_mode == "-")
      ).src
    end

handles_encoding?() click to toggle source

    # File lib/action_view/template/handlers/erb.rb, line 100
    def handles_encoding?
      true
    end

supports_streaming?() click to toggle source

    # File lib/action_view/template/handlers/erb.rb, line 96
    def supports_streaming?
      true
    end

### Private Instance Methods

valid_encoding(string, encoding) click to toggle source

    # File lib/action_view/template/handlers/erb.rb, line 128
    def valid_encoding(string, encoding)
      # If a magic encoding comment was found, tag the
      # String with this encoding. This is for a case
      # where the original String was assumed to be,
      # for instance, UTF-8, but a magic comment
      # proved otherwise
      string.force_encoding(encoding) if encoding

      # If the String is valid, return the encoding we found
      return string.encoding if string.valid_encoding?

      # Otherwise, raise an exception
      raise WrongEncodingError.new(string, string.encoding)
    end