Fixes Rails issue 687 (ActionMailer is html escaping ampersand in urls in plain text messages) for Rails 3.2.1

  • Download Gist
dont_escape_html_in_plain_text_templates.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
# fixes https://github.com/rails/rails/issues/687 for Rails 3.2.1.
# put this in an initializer.
module ActionView
class Template
module Handlers
class ERB
def call(template)
if template.source.encoding_aware?
# 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("BINARY")
 
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!
else
erb = template.source.dup
end
 
self.class.erb_implementation.new(
erb,
:escape => template.identifier !~ /\.html/, # only escape HTML templates
:trim => (self.class.erb_trim_mode == "-")
).src
end
end
end
end
end

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.