提交 7e6cda15 编写于 作者: M Matt Jones 提交者: Joshua Peek

Ensure routing optimizations are cleared when new routes are added [#981 state:resolved]

Signed-off-by: NJoshua Peek <josh@joshpeek.com>
上级 41efd738
......@@ -147,6 +147,15 @@ def recognize_optimized(path, env)
end
}, __FILE__, __LINE__
end
def clear_recognize_optimized!
instance_eval %{
def recognize_optimized(path, environment)
write_recognize_optimized!
recognize_optimized(path, environment)
end
}, __FILE__, __LINE__
end
end
end
end
......@@ -195,7 +195,7 @@ def initialize
self.routes = []
self.named_routes = NamedRouteCollection.new
write_recognize_optimized!
clear_recognize_optimized!
end
# Subclasses and plugins may override this method to specify a different
......@@ -217,7 +217,7 @@ def clear!
@routes_by_controller = nil
# This will force routing/recognition_optimization.rb
# to refresh optimisations.
@compiled_recognize_optimized = nil
clear_recognize_optimized!
end
def install_helpers(destinations = [ActionController::Base, ActionView::Base], regenerate_code = false)
......
......@@ -1375,6 +1375,36 @@ def test_failed_requirements_raises_exception_with_violated_requirements
x.send(:foo_with_requirement_url, "I am Against the requirements")
end
end
def test_routes_changed_correctly_after_clear
ActionController::Base.optimise_named_routes = true
rs = ::ActionController::Routing::RouteSet.new
rs.draw do |r|
r.connect 'ca', :controller => 'ca', :action => "aa"
r.connect 'cb', :controller => 'cb', :action => "ab"
r.connect 'cc', :controller => 'cc', :action => "ac"
r.connect ':controller/:action/:id'
r.connect ':controller/:action/:id.:format'
end
hash = rs.recognize_path "/cc"
assert_not_nil hash
assert_equal %w(cc ac), [hash[:controller], hash[:action]]
rs.draw do |r|
r.connect 'cb', :controller => 'cb', :action => "ab"
r.connect 'cc', :controller => 'cc', :action => "ac"
r.connect ':controller/:action/:id'
r.connect ':controller/:action/:id.:format'
end
hash = rs.recognize_path "/cc"
assert_not_nil hash
assert_equal %w(cc ac), [hash[:controller], hash[:action]]
end
end
class RouteTest < Test::Unit::TestCase
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册