diff options
author | José Valim and Mikel Lindsaar <raasdnil@gmail.com> | 2010-01-22 12:46:19 +1100 |
---|---|---|
committer | José Valim and Mikel Lindsaar <raasdnil@gmail.com> | 2010-01-22 12:46:19 +1100 |
commit | 12c001fec449864db64eca9ba3a477a7da30b2ba (patch) | |
tree | ef1712cee7d77b9cc069fcdf24fc4d71622bf779 | |
parent | 3829f9ecfd6fcd54edbc15f624ee3b68f6dae135 (diff) | |
download | rails-12c001fec449864db64eca9ba3a477a7da30b2ba.tar.gz rails-12c001fec449864db64eca9ba3a477a7da30b2ba.tar.bz2 rails-12c001fec449864db64eca9ba3a477a7da30b2ba.zip |
Updating deprecated API to sanitize old style attachments hash to work with new mail.attachments method
-rw-r--r-- | actionmailer/lib/action_mailer/deprecated_api.rb | 45 | ||||
-rw-r--r-- | actionmailer/test/mail_service_test.rb | 2 |
2 files changed, 36 insertions, 11 deletions
diff --git a/actionmailer/lib/action_mailer/deprecated_api.rb b/actionmailer/lib/action_mailer/deprecated_api.rb index d096ea6180..19c94aee8d 100644 --- a/actionmailer/lib/action_mailer/deprecated_api.rb +++ b/actionmailer/lib/action_mailer/deprecated_api.rb @@ -30,23 +30,48 @@ module ActionMailer super # Run deprecation hooks params = { :content_type => params } if String === params - - if filename = params.delete(:filename) - content_disposition = "attachment; filename=\"#{File.basename(filename)}\"" + + if params[:filename] + params = normalize_file_hash(params) else - content_disposition = "attachment" + params = normalize_nonfile_hash(params) end - - params[:content] = params.delete(:data) if params[:data] - - params = { :content_disposition => content_disposition, - :content_transfer_encoding => "base64" }.merge(params) - part(params, &block) end 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: m = @message diff --git a/actionmailer/test/mail_service_test.rb b/actionmailer/test/mail_service_test.rb index f83e13f16f..51d722ea00 100644 --- a/actionmailer/test/mail_service_test.rb +++ b/actionmailer/test/mail_service_test.rb @@ -1036,7 +1036,7 @@ EOF def test_empty_header_values_omitted result = TestMailer.create_unnamed_attachment(@recipient).encoded assert_match %r{Content-Type: application/octet-stream;}, result - assert_match %r{Content-Disposition: attachment[^;]}, result + assert_match %r{Content-Disposition: attachment;}, result end def test_headers_with_nonalpha_chars |