aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew White <andyw@pixeltrix.co.uk>2013-07-21 17:10:34 +0100
committerAndrew White <andyw@pixeltrix.co.uk>2013-07-21 17:11:52 +0100
commite5275f9b5924f36f2bdd4dd9ac0a4f420384748f (patch)
treefac9d13131a8892725a1a4d50b2087daf8dc9a52
parent3613235cc3d7d87ce02e51a80f67706c0853b524 (diff)
downloadrails-e5275f9b5924f36f2bdd4dd9ac0a4f420384748f.tar.gz
rails-e5275f9b5924f36f2bdd4dd9ac0a4f420384748f.tar.bz2
rails-e5275f9b5924f36f2bdd4dd9ac0a4f420384748f.zip
Clear named routes when routes.rb is reloaded
Fix an issue where Journey was failing to clear the named routes hash when the routes were reloaded and since it doesn't overwrite existing routes then if a route changed but wasn't renamed it kept the old definition. This was being masked by the optimised url helpers so it only became apparent when passing an options hash to the url helper.
-rw-r--r--actionpack/CHANGELOG.md8
-rw-r--r--actionpack/lib/action_dispatch/journey/routes.rb1
-rw-r--r--railties/test/application/routing_test.rb45
3 files changed, 54 insertions, 0 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md
index eac3488a62..ae109852a6 100644
--- a/actionpack/CHANGELOG.md
+++ b/actionpack/CHANGELOG.md
@@ -1,3 +1,11 @@
+* Fix an issue where Journey was failing to clear the named routes hash when the
+ routes were reloaded and since it doesn't overwrite existing routes then if a
+ route changed but wasn't renamed it kept the old definition. This was being
+ masked by the optimised url helpers so it only became apparent when passing an
+ options hash to the url helper.
+
+ *Andrew White*
+
* Skip routes pointing to a redirect or mounted application when generating urls
using an options hash as they aren't relevant and generate incorrect urls.
diff --git a/actionpack/lib/action_dispatch/journey/routes.rb b/actionpack/lib/action_dispatch/journey/routes.rb
index a99d6d0d6a..80e3818ccd 100644
--- a/actionpack/lib/action_dispatch/journey/routes.rb
+++ b/actionpack/lib/action_dispatch/journey/routes.rb
@@ -30,6 +30,7 @@ module ActionDispatch
def clear
routes.clear
+ named_routes.clear
end
def partitioned_routes
diff --git a/railties/test/application/routing_test.rb b/railties/test/application/routing_test.rb
index 1a4e2d4123..8576a2b738 100644
--- a/railties/test/application/routing_test.rb
+++ b/railties/test/application/routing_test.rb
@@ -372,6 +372,51 @@ module ApplicationTests
end
end
+ test 'named routes are cleared when reloading' do
+ app('development')
+
+ controller :foo, <<-RUBY
+ class FooController < ApplicationController
+ def index
+ render text: "foo"
+ end
+ end
+ RUBY
+
+ controller :bar, <<-RUBY
+ class BarController < ApplicationController
+ def index
+ render text: "bar"
+ end
+ end
+ RUBY
+
+ app_file 'config/routes.rb', <<-RUBY
+ Rails.application.routes.draw do
+ get ':locale/foo', to: 'foo#index', as: 'foo'
+ end
+ RUBY
+
+ get '/en/foo'
+ assert_equal 'foo', last_response.body
+ assert_equal '/en/foo', Rails.application.routes.url_helpers.foo_path(:locale => 'en')
+
+ app_file 'config/routes.rb', <<-RUBY
+ Rails.application.routes.draw do
+ get ':locale/bar', to: 'bar#index', as: 'foo'
+ end
+ RUBY
+
+ Rails.application.reload_routes!
+
+ get '/en/foo'
+ assert_equal 404, last_response.status
+
+ get '/en/bar'
+ assert_equal 'bar', last_response.body
+ assert_equal '/en/bar', Rails.application.routes.url_helpers.foo_path(:locale => 'en')
+ end
+
test 'resource routing with irregular inflection' do
app_file 'config/initializers/inflection.rb', <<-RUBY
ActiveSupport::Inflector.inflections do |inflect|