Updating deprecated API to sanitize old style attachments hash to work with...

Updating deprecated API to sanitize old style attachments hash to work with new mail.attachments method
上级 3829f9ec
...@@ -30,23 +30,48 @@ def attachment(params, &block) ...@@ -30,23 +30,48 @@ def attachment(params, &block)
super # Run deprecation hooks super # Run deprecation hooks
params = { :content_type => params } if String === params params = { :content_type => params } if String === params
if filename = params.delete(:filename) if params[:filename]
content_disposition = "attachment; filename=\"#{File.basename(filename)}\"" params = normalize_file_hash(params)
else else
content_disposition = "attachment" params = normalize_nonfile_hash(params)
end end
params[:content] = params.delete(:data) if params[:data]
params = { :content_disposition => content_disposition,
:content_transfer_encoding => "base64" }.merge(params)
part(params, &block) part(params, &block)
end end
private private
def normalize_nonfile_hash(params)
content_disposition = "attachment;"
mime_type = params.delete(:mime_type)
if content_type = params.delete(:content_type)
content_type = "#{mime_type || content_type};"
end
params[:body] = params.delete(:data) if params[:data]
{ :content_type => content_type,
:content_disposition => content_disposition }.merge(params)
end
def normalize_file_hash(params)
filename = File.basename(params.delete(:filename))
content_disposition = "attachment; filename=\"#{File.basename(filename)}\""
mime_type = params.delete(:mime_type)
if (content_type = params.delete(:content_type)) && (content_type !~ /filename=/)
content_type = "#{mime_type || content_type}; filename=\"#{filename}\""
end
params[:body] = params.delete(:data) if params[:data]
{ :content_type => content_type,
:content_disposition => content_disposition }.merge(params)
end
def create_mail #:nodoc: def create_mail #:nodoc:
m = @message m = @message
......
...@@ -1036,7 +1036,7 @@ def test_decode_message_with_unknown_charset ...@@ -1036,7 +1036,7 @@ def test_decode_message_with_unknown_charset
def test_empty_header_values_omitted def test_empty_header_values_omitted
result = TestMailer.create_unnamed_attachment(@recipient).encoded result = TestMailer.create_unnamed_attachment(@recipient).encoded
assert_match %r{Content-Type: application/octet-stream;}, result assert_match %r{Content-Type: application/octet-stream;}, result
assert_match %r{Content-Disposition: attachment[^;]}, result assert_match %r{Content-Disposition: attachment;}, result
end end
def test_headers_with_nonalpha_chars def test_headers_with_nonalpha_chars
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册