Skip to content

Commit

Permalink
Parameterized mailers can configure delivery job
Browse files Browse the repository at this point in the history
Setting parameterized_delivery_job on a mailer class will cause Parameterized::MessageDelivery to use
the specified job instead of ActionMailer::Parameterized::DeliveryJob:

    class MyMailer < ApplicationMailer
      self.parameterized_delivery_job = MyCustomDeliveryJob
      ...
    end
  • Loading branch information
kule committed Oct 5, 2018
1 parent 0d4b2e4 commit c90c6c1
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 1 deletion.
11 changes: 11 additions & 0 deletions actionmailer/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
* Allow ActionMailer classes to configure the parameterized delivery job
Example:
```
class MyMailer < ApplicationMailer
self.parameterized_delivery_job = MyCustomDeliveryJob
...
end
```

*Luke Pearce*

* `ActionDispatch::IntegrationTest` includes `ActionMailer::TestHelper` module by default.

*Ricardo Díaz*
Expand Down
1 change: 1 addition & 0 deletions actionmailer/lib/action_mailer/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,7 @@ def _protected_ivars # :nodoc:
helper ActionMailer::MailHelper

class_attribute :delivery_job, default: ::ActionMailer::DeliveryJob
class_attribute :parameterized_delivery_job, default: ::ActionMailer::Parameterized::DeliveryJob
class_attribute :default_params, default: {
mime_version: "1.0",
charset: "UTF-8",
Expand Down
3 changes: 2 additions & 1 deletion actionmailer/lib/action_mailer/parameterized.rb
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ def enqueue_delivery(delivery_method, options = {})
super
else
args = @mailer_class.name, @action.to_s, delivery_method.to_s, @params, *@args
ActionMailer::Parameterized::DeliveryJob.set(options).perform_later(*args)
job = @mailer_class.parameterized_delivery_job
job.set(options).perform_later(*args)
end
end
end
Expand Down
13 changes: 13 additions & 0 deletions actionmailer/test/parameterized_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,17 @@ class ParameterizedTest < ActiveSupport::TestCase
invitation = mailer.method(:anything)
end
end

test "should enqueue a parameterized request with the correct delivery job" do
old_delivery_job = ParamsMailer.parameterized_delivery_job
ParamsMailer.parameterized_delivery_job = ParameterizedDummyJob

assert_performed_with(job: ParameterizedDummyJob, args: ["ParamsMailer", "invitation", "deliver_now", { inviter: "david@basecamp.com", invitee: "jason@basecamp.com" } ]) do
@mail.deliver_later
end

ParamsMailer.parameterized_delivery_job = old_delivery_job
end

class ParameterizedDummyJob < ActionMailer::Parameterized::DeliveryJob; end
end

0 comments on commit c90c6c1

Please sign in to comment.