From 28a1a39967ada924179d080b9cd69b3c90f44e4a Mon Sep 17 00:00:00 2001
From: Jeremy Daer <jeremydaer@gmail.com>
Date: Thu, 1 Oct 2015 20:42:52 -0700
Subject: Response#add_header for adding to multi-valued headers like Vary

---
 actionpack/lib/action_dispatch/http/response.rb | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

(limited to 'actionpack/lib')

diff --git a/actionpack/lib/action_dispatch/http/response.rb b/actionpack/lib/action_dispatch/http/response.rb
index 85d9c3be00..f6f63f1f32 100644
--- a/actionpack/lib/action_dispatch/http/response.rb
+++ b/actionpack/lib/action_dispatch/http/response.rb
@@ -161,6 +161,26 @@ module ActionDispatch # :nodoc:
     def set_header(key, v); headers[key] = v;   end
     def delete_header(key); headers.delete key; end
 
+    # Add a header that may have multiple values.
+    #
+    # Example:
+    #   response.add_header 'Vary', 'Accept'
+    #   response.add_header 'Vary', 'Accept-Encoding'
+    #   response.add_header 'Vary', 'Cookie'
+    #
+    #   assert_equal 'Accept,Accept-Encoding,Cookie', response.get_header 'Vary'
+    #
+    # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
+    def add_header(key, v)
+      if v.nil?
+        get_header key
+      elsif have_header? key
+        set_header key, "#{get_header key},#{v}"
+      else
+        set_header key, v
+      end
+    end
+
     def await_commit
       synchronize do
         @cv.wait_until { @committed }
-- 
cgit v1.2.3