class Synvert::Core::Engine::ERB
Public Class Methods
decode(source)
click to toggle source
convert ruby code to erb.
@param source [String] ruby source code. @return [String] erb source code.
# File lib/synvert/core/engine/erb.rb, line 24 def decode(source) source = decode_ruby_stmt(source) source = decode_ruby_output(source) source = decode_html_output(source) source = remove_erubis_buf(source) end
encode(source)
click to toggle source
convert erb to ruby code.
@param source [String] erb source code. @return [String] ruby source code.
# File lib/synvert/core/engine/erb.rb, line 16 def encode(source) Erubis.new(source.gsub('-%>', '%>'), escape: false, trim: false).src end
Private Class Methods
decode_html_output(source)
click to toggle source
# File lib/synvert/core/engine/erb.rb, line 45 def decode_html_output(source) source.gsub(/@output_buffer.safe_append='(.+?)'.freeze;/m) { reverse_escape_text(Regexp.last_match(1)) }.gsub( /@output_buffer.safe_append=\((.+?)\);#{ERUBY_EXPR_SPLITTER}/mo ) { reverse_escape_text(Regexp.last_match(1)) }.gsub( /@output_buffer.safe_append=(.+?)\s+(do|\{)(\s*\|[^|]*\|)?\s*#{ERUBY_EXPR_SPLITTER}/mo ) { reverse_escape_text(Regexp.last_match(1)) } end
decode_ruby_output(source)
click to toggle source
# File lib/synvert/core/engine/erb.rb, line 37 def decode_ruby_output(source) source.gsub(/@output_buffer.append=\((.+?)\);#{ERUBY_EXPR_SPLITTER}/mo) { "<%=#{Regexp.last_match(1)}%>" }.gsub(/@output_buffer.append= (.+?)\s+(do|\{)(\s*\|[^|]*\|)?\s*#{ERUBY_EXPR_SPLITTER}/mo) { |m| "<%=#{m.sub('@output_buffer.append= ', '').sub(ERUBY_EXPR_SPLITTER, '')}%>" } end
decode_ruby_stmt(source)
click to toggle source
# File lib/synvert/core/engine/erb.rb, line 33 def decode_ruby_stmt(source) source.gsub(/#{ERUBY_STMT_SPLITTER}(.+?)#{ERUBY_STMT_SPLITTER}/mo) { "<%#{Regexp.last_match(1)}%>" } end
remove_erubis_buf(source)
click to toggle source
# File lib/synvert/core/engine/erb.rb, line 53 def remove_erubis_buf(source) source .sub('@output_buffer = output_buffer || ActionView::OutputBuffer.new;', '') .sub('@output_buffer.to_s', '') end
reverse_escape_text(source)
click to toggle source
# File lib/synvert/core/engine/erb.rb, line 59 def reverse_escape_text(source) source.gsub("\\\\", "\\").gsub("\\'", "'") end