From 0088b08dcaf16176c8f9364d1d786f0c3728d369 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Tue, 29 Jul 2014 11:48:14 -0700 Subject: [PATCH] helpers should be a Set so it doesn't grow unbounded since helpers is a set, we can be confident about when to remove methods from the module. --- .../lib/action_dispatch/routing/route_set.rb | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb index aa0803e0e3..14c5d663a3 100644 --- a/actionpack/lib/action_dispatch/routing/route_set.rb +++ b/actionpack/lib/action_dispatch/routing/route_set.rb @@ -90,7 +90,7 @@ class NamedRouteCollection #:nodoc: def initialize @routes = {} - @helpers = [] + @helpers = Set.new @module = Module.new end @@ -100,7 +100,7 @@ def helper_names def clear! @helpers.each do |helper| - @module.remove_possible_method helper + @module.send :undef_method, helper end @routes.clear @@ -108,7 +108,11 @@ def clear! end def add(name, route) - routes[name.to_sym] = route + key = name.to_sym + if routes.key? key + undef_named_route_methods @module, name + end + routes[key] = route define_named_route_methods(@module, name, route) end @@ -256,7 +260,6 @@ def handle_positional_args(controller_options, inner_options, args, result, path def define_url_helper(mod, route, name, opts, route_key, url_strategy) helper = UrlHelper.create(route, opts, route_key, url_strategy) - mod.remove_possible_method name mod.module_eval do define_method(name) do |*args| options = nil @@ -272,6 +275,11 @@ def define_named_route_methods(mod, name, route) define_url_helper mod, route, :"#{name}_path", route.defaults, name, PATH define_url_helper mod, route, :"#{name}_url", route.defaults, name, FULL end + + def undef_named_route_methods(mod, name) + mod.send :undef_method, :"#{name}_path" + mod.send :undef_method, :"#{name}_url" + end end # :stopdoc: -- GitLab