未验证 提交 ebededb3 编写于 作者: E Eugene Kenny 提交者: Jeremy Daer

Don't mutate raw_source in mailer preview interceptor

The raw_source method is documented as returning the exact value that
was used to create the body; mutating it breaks that contract.

Additionally, if the value used to create the body is blank, raw_source
returns a frozen string which causes the interceptor to raise an error.
上级 d1e06546
......@@ -26,7 +26,7 @@ def initialize(message) #:nodoc:
def transform! #:nodoc:
return message if html_part.blank?
html_source.gsub!(PATTERN) do |match|
html_part.body = html_part.decoded.gsub(PATTERN) do |match|
if part = find_part(match[9..-2])
%[src="#{data_url(part)}"]
else
......@@ -46,10 +46,6 @@ def html_part
@html_part ||= message.html_part
end
def html_source
html_part.body.raw_source
end
def data_url(part)
"data:#{part.mime_type};base64,#{strict_encode64(part.body.raw_source)}"
end
......
......@@ -671,6 +671,40 @@ def foo
assert_match %r[<p>Hello, World!</p>], last_response.body
end
test "multipart mailer preview with empty parts" do
mailer "notifier", <<-RUBY
class Notifier < ActionMailer::Base
default from: "from@example.com"
def foo
mail to: "to@example.org"
end
end
RUBY
text_template "notifier/foo", <<-RUBY
RUBY
html_template "notifier/foo", <<-RUBY
RUBY
mailer_preview "notifier", <<-RUBY
class NotifierPreview < ActionMailer::Preview
def foo
Notifier.foo
end
end
RUBY
app("development")
get "/rails/mailers/notifier/foo?part=text/plain"
assert_equal 200, last_response.status
get "/rails/mailers/notifier/foo?part=text/html"
assert_equal 200, last_response.status
end
private
def build_app
super
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册