aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionmailer/lib/action_mailer/deprecated_api.rb45
-rw-r--r--actionmailer/test/mail_service_test.rb2
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