Methods
Constants
ENCODING_TAG | = | Regexp.new("\\A(<%#{ENCODING_FLAG}-?%>)[ \\t]*") |
Class Public methods
call(template, source) Link
Instance Public methods
call(template, source) Link
# File actionview/lib/action_view/template/handlers/erb.rb, line 65 def call(template, source) # 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 = source.b erb = template_source.gsub(ENCODING_TAG, "") encoding = $2 erb.force_encoding valid_encoding(source.dup, encoding) # Always make sure we return a String in the default_internal erb.encode! # Strip trailing newlines from the template if enabled erb.chomp! if strip_trailing_newlines options = { escape: (self.class.escape_ignore_list.include? template.type), trim: (self.class.erb_trim_mode == "-") } if ActionView::Base.annotate_rendered_view_with_filenames && template.format == :html options[:preamble] = "@output_buffer.safe_append='<!-- BEGIN #{template.short_identifier} -->';" options[:postamble] = "@output_buffer.safe_append='<!-- END #{template.short_identifier} -->';@output_buffer" end self.class.erb_implementation.new(erb, options).src end
handles_encoding?() Link
supports_streaming?() Link
translate_location(spot, _backtrace_location, source) Link
Translate an error location returned by ErrorHighlight to the correct source location inside the template.
# File actionview/lib/action_view/template/handlers/erb.rb, line 43 def translate_location(spot, _backtrace_location, source) compiled = spot[:script_lines] highlight = compiled[spot[:first_lineno] - 1]&.byteslice((spot[:first_column] - 1)...spot[:last_column]) return nil if highlight.blank? source_lines = source.lines lineno_delta = find_lineno_offset(compiled, source_lines, highlight, spot[:first_lineno]) tokens = ::ERB::Util.tokenize(source_lines[spot[:first_lineno] - lineno_delta - 1]) column_delta = find_offset(spot[:snippet], tokens, spot[:first_column]) spot[:first_lineno] -= lineno_delta spot[:last_lineno] -= lineno_delta spot[:first_column] -= column_delta spot[:last_column] -= column_delta spot[:script_lines] = source_lines spot rescue NotImplementedError, LocationParsingError nil end