Class: ActionView::Template::Handlers::ERB
- Defined in:
- actionview/lib/action_view/template/handlers/erb.rb,
actionview/lib/action_view/template/handlers/erb/erubi.rb more...
Defined Under Namespace
Classes: Erubi
Constant Summary collapse
- ENCODING_TAG =
Regexp.new("\\A(<%#{ENCODING_FLAG}-?%>)[ \\t]*")
- LocationParsingError =
:nodoc:
Class.new(StandardError)
Class Method Summary collapse
Instance Method Summary collapse
- #call(template, source) ⇒ Object
- #handles_encoding? ⇒ Boolean
- #supports_streaming? ⇒ Boolean
-
#translate_location(spot, backtrace_location, source) ⇒ Object
Translate an error location returned by ErrorHighlight to the correct source location inside the template.
Class Method Details
permalink .call(template, source) ⇒ Object
[View source]
29 30 31 |
# File 'actionview/lib/action_view/template/handlers/erb.rb', line 29 def self.call(template, source) new.call(template, source) end |
Instance Method Details
permalink #call(template, source) ⇒ Object
[View source]
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'actionview/lib/action_view/template/handlers/erb.rb', line 63 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 = { 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 [:preamble] = "@output_buffer.safe_append='<!-- BEGIN #{template.short_identifier} -->';" [:postamble] = "@output_buffer.safe_append='<!-- END #{template.short_identifier} -->';@output_buffer" end self.class.erb_implementation.new(erb, ).src end |
permalink #handles_encoding? ⇒ Boolean
37 38 39 |
# File 'actionview/lib/action_view/template/handlers/erb.rb', line 37 def handles_encoding? true end |
permalink #supports_streaming? ⇒ Boolean
33 34 35 |
# File 'actionview/lib/action_view/template/handlers/erb.rb', line 33 def supports_streaming? true end |
permalink #translate_location(spot, backtrace_location, source) ⇒ Object
Translate an error location returned by ErrorHighlight to the correct source location inside the template.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'actionview/lib/action_view/template/handlers/erb.rb', line 43 def translate_location(spot, backtrace_location, source) # Tokenize the source line source_lines = source.lines return nil if source_lines.size < backtrace_location.lineno tokens = ::ERB::Util.tokenize(source_lines[backtrace_location.lineno - 1]) new_first_column = find_offset(spot[:snippet], tokens, spot[:first_column]) lineno_delta = spot[:first_lineno] - backtrace_location.lineno spot[:first_lineno] -= lineno_delta spot[:last_lineno] -= lineno_delta column_delta = spot[:first_column] - new_first_column spot[:first_column] -= column_delta spot[:last_column] -= column_delta spot[:script_lines] = source_lines spot rescue NotImplementedError, LocationParsingError nil end |