Fix keyword arguments warnings in Action Mailer

This commit is contained in:
Ryuta Kamizono 2020-01-19 14:29:32 +09:00
parent 950b39482d
commit c10b580909
5 changed files with 23 additions and 2 deletions

@ -619,6 +619,7 @@ def method_missing(method_name, *args)
super
end
end
ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
def respond_to_missing?(method, include_all = false)
action_methods.include?(method.to_s) || super

@ -23,6 +23,7 @@ def initialize(mailer_class, action, *args) #:nodoc:
@processed_mailer = nil
@mail_message = nil
end
ruby2_keywords(:initialize) if respond_to?(:ruby2_keywords, true)
# Method calls are delegated to the Mail::Message that's ready to deliver.
def __getobj__ #:nodoc:
@ -143,10 +144,16 @@ def enqueue_delivery(delivery_method, options = {})
def arguments_for(delivery_job, delivery_method)
if delivery_job <= MailDeliveryJob
[@mailer_class.name, @action.to_s, delivery_method.to_s, args: @args]
ruby2_keywords_arguments \
@mailer_class.name, @action.to_s, delivery_method.to_s, args: @args
else
[@mailer_class.name, @action.to_s, delivery_method.to_s, *@args]
end
end
def ruby2_keywords_arguments(*args)
args
end
ruby2_keywords(:ruby2_keywords_arguments) if respond_to?(:ruby2_keywords, true)
end
end

@ -132,6 +132,7 @@ def initialize(mailer_class, action, params, *args)
super(mailer_class, action, *args)
@params = params
end
ruby2_keywords(:initialize) if respond_to?(:ruby2_keywords, true)
private
def processed_mailer
@ -161,7 +162,8 @@ def delivery_job_class
def arguments_for(delivery_job, delivery_method)
if delivery_job <= MailDeliveryJob
[@mailer_class.name, @action.to_s, delivery_method.to_s, params: @params, args: @args]
ruby2_keywords_arguments \
@mailer_class.name, @action.to_s, delivery_method.to_s, params: @params, args: @args
else
[@mailer_class.name, @action.to_s, delivery_method.to_s, @params, *@args]
end

@ -22,6 +22,10 @@ def test_message(*)
mail(from: "test-sender@test.com", to: "test-receiver@test.com", subject: "Test Subject", body: "Test Body")
end
def test_kwargs(argument:)
mail(from: "test-sender@test.com", to: "test-receiver@test.com", subject: "Test Subject", body: "Test Body")
end
def test_raise(klass_name)
raise klass_name.constantize, "boom"
end

@ -164,4 +164,11 @@ def to_global_id(options = {})
assert_equal DelayedMailer, DelayedMailer.last_rescue_from_instance
assert_equal "Error while trying to deserialize arguments: boom, missing find", DelayedMailer.last_error.message
end
test "allows for keyword arguments" do
assert_performed_with(job: ActionMailer::MailDeliveryJob, args: ["DelayedMailer", "test_kwargs", "deliver_now", args: [argument: 1]]) do
message = DelayedMailer.test_kwargs(argument: 1)
message.deliver_later
end
end
end