From fbb2fc8aa7d17fd86ad9c3fbbe60ef84a4cde950 Mon Sep 17 00:00:00 2001
From: Jimmy Bourassa <jimmy.bourassa@hooktstudios.com>
Date: Thu, 24 Aug 2017 01:13:54 -0400
Subject: Fix AM::Base.default proc arity breaking change

PR #29270 changed the number of arguments that gets passed to Procs
defined in ActionMail::Base.default. With this changeset, Procs can
now have 1 or 0 arguments

Also adds test coverage for AM::Base.default Proc arity.
---
 actionmailer/lib/action_mailer/base.rb | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

(limited to 'actionmailer/lib')

diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb
index a54eb52dcb..8477539c49 100644
--- a/actionmailer/lib/action_mailer/base.rb
+++ b/actionmailer/lib/action_mailer/base.rb
@@ -889,7 +889,7 @@ module ActionMailer
         default_values = self.class.default.map do |key, value|
           [
             key,
-            value.is_a?(Proc) ? instance_exec(&value) : value
+            compute_default(value)
           ]
         end.to_h
 
@@ -898,6 +898,16 @@ module ActionMailer
         headers_with_defaults
       end
 
+      def compute_default(value)
+        return value unless value.is_a?(Proc)
+
+        if value.arity == 1
+          instance_exec(self, &value)
+        else
+          instance_exec(&value)
+        end
+      end
+
       def assign_headers_to_message(message, headers)
         assignable = headers.except(:parts_order, :content_type, :body, :template_name,
                                     :template_path, :delivery_method, :delivery_method_options)
-- 
cgit v1.2.3