aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer
diff options
context:
space:
mode:
authorIsaac Betesh <iybetesh@gmail.com>2019-05-09 12:38:58 -0700
committerIsaac Betesh <iybetesh@gmail.com>2019-05-21 13:11:19 -0700
commitefeddb08dae3dc6240118444234e3acdcfdffaa1 (patch)
treeb59746f0f24e325f6719995d2ec3ea3ca8d24cc6 /actionmailer
parent973096b6ae1f34310316a74e282501357739ac87 (diff)
downloadrails-efeddb08dae3dc6240118444234e3acdcfdffaa1.tar.gz
rails-efeddb08dae3dc6240118444234e3acdcfdffaa1.tar.bz2
rails-efeddb08dae3dc6240118444234e3acdcfdffaa1.zip
Prevent reading inline attachments after `mail` was called from raising an inaccurate exception
Without this change, `attachments.inline['my_attachment'].present?`, for example, would raise the exception `Can't add attachments after mail was called`. I first brought this issue up at https://github.com/rails/rails/issues/16163#issuecomment-437378347. Note that this commit addresses only one of the 2 problems I described in that comment. The other problem is that using `attachments.inline['my_attachment']` for reading an attachment is unnecessary--it's the same as `attachments['my_attachment']`--even before `mail` is called. We could add a warning about the unnecessary use of `inline` but I'm saving that for a later PR since my comment has not received any feedback yet.
Diffstat (limited to 'actionmailer')
-rw-r--r--actionmailer/lib/action_mailer/base.rb2
-rw-r--r--actionmailer/test/base_test.rb11
2 files changed, 12 insertions, 1 deletions
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb
index c1ac9c2ad1..93e7a30e4f 100644
--- a/actionmailer/lib/action_mailer/base.rb
+++ b/actionmailer/lib/action_mailer/base.rb
@@ -738,7 +738,7 @@ module ActionMailer
end
class LateAttachmentsProxy < SimpleDelegator
- def inline; _raise_error end
+ def inline; self end
def []=(_name, _content); _raise_error end
private
diff --git a/actionmailer/test/base_test.rb b/actionmailer/test/base_test.rb
index c07fca5b5e..0bfd12cd3e 100644
--- a/actionmailer/test/base_test.rb
+++ b/actionmailer/test/base_test.rb
@@ -267,6 +267,17 @@ class BaseTest < ActiveSupport::TestCase
assert_match(/Can't add attachments after `mail` was called./, e.message)
end
+ test "accessing inline attachments after mail was called works" do
+ class LateInlineAttachmentMailer < ActionMailer::Base
+ def welcome
+ mail body: "yay", from: "welcome@example.com", to: "to@example.com"
+ attachments.inline["invoice.pdf"]
+ end
+ end
+
+ assert_nothing_raised { LateInlineAttachmentMailer.welcome.message }
+ end
+
test "adding inline attachments while rendering mail works" do
class LateInlineAttachmentMailer < ActionMailer::Base
def on_render