Class: ActionView::Template::Handlers::ERB
- Defined in:
- actionview/lib/action_view/template/handlers/erb.rb,
actionview/lib/action_view/template/handlers/erb/erubi.rb
Defined Under Namespace
Classes: Erubi
Constant Summary collapse
- ENCODING_TAG =
Regexp.new("\\A(<%#{ENCODING_FLAG}-?%>)[ \\t]*")
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
.call(template, source) ⇒ Object
27 28 29 |
# File 'actionview/lib/action_view/template/handlers/erb.rb', line 27 def self.call(template, source) new.call(template, source) end |
Instance Method Details
#call(template, source) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'actionview/lib/action_view/template/handlers/erb.rb', line 57 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 |
#handles_encoding? ⇒ Boolean
35 36 37 |
# File 'actionview/lib/action_view/template/handlers/erb.rb', line 35 def handles_encoding? true end |
#supports_streaming? ⇒ Boolean
31 32 33 |
# File 'actionview/lib/action_view/template/handlers/erb.rb', line 31 def supports_streaming? true end |
#translate_location(spot, backtrace_location, source) ⇒ Object
Translate an error location returned by ErrorHighlight to the correct source location inside the template.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'actionview/lib/action_view/template/handlers/erb.rb', line 41 def translate_location(spot, backtrace_location, source) # Tokenize the source line 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 end |