From 4d84922840deb89754f5b5fb61ebea0aeadc52df Mon Sep 17 00:00:00 2001
From: Melanie Gilman <melanie@thoughtbot.com>
Date: Mon, 24 Nov 2014 10:06:16 -0500
Subject: Deprecate string options in URL helpers

Fixes https://github.com/rails/rails/issues/16958

[Byron Bischoff & Melanie Gilman]
---
 actionpack/lib/action_dispatch/routing/route_set.rb | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

(limited to 'actionpack/lib')

diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb
index a641ea3ea9..a8ef5531d5 100644
--- a/actionpack/lib/action_dispatch/routing/route_set.rb
+++ b/actionpack/lib/action_dispatch/routing/route_set.rb
@@ -271,7 +271,7 @@ module ActionDispatch
             controller_options = t.url_options
             options = controller_options.merge @options
             hash = handle_positional_args(controller_options,
-                                          inner_options || {},
+                                          deprecate_string_options(inner_options) || {},
                                           args,
                                           options,
                                           @segment_keys)
@@ -293,6 +293,22 @@ module ActionDispatch
 
             result.merge!(inner_options)
           end
+
+          DEPRECATED_STRING_OPTIONS = %w[controller action]
+
+          def deprecate_string_options(options)
+            options ||= {}
+            deprecated_string_options = options.keys & DEPRECATED_STRING_OPTIONS
+            if deprecated_string_options.any?
+              msg = "Calling URL helpers with string keys #{deprecated_string_options.join(", ")} is deprecated. Use symbols instead."
+              ActiveSupport::Deprecation.warn(msg)
+              deprecated_string_options.each do |option|
+                value = options.delete(option)
+                options[option.to_sym] = value
+              end
+            end
+            options
+          end
         end
 
         private
-- 
cgit v1.2.3