提交 a293812b 编写于 作者: A Aaron Patterson

only keep one hash of named routes

The outer router object already keeps a hash of named routes, so we
should just use that.
上级 09d846e7
......@@ -155,7 +155,7 @@ def possibles(cache, options, depth = 0)
def build_cache
root = { ___routes: [] }
routes.each_with_index do |route, i|
routes.routes.each_with_index do |route, i|
leaf = route.required_defaults.inject(root) do |h, tuple|
h[tuple] ||= {}
end
......
......@@ -5,11 +5,10 @@ module Journey # :nodoc:
class Routes # :nodoc:
include Enumerable
attr_reader :routes, :named_routes, :custom_routes, :anchored_routes
attr_reader :routes, :custom_routes, :anchored_routes
def initialize
@routes = []
@named_routes = {}
@ast = nil
@anchored_routes = []
@custom_routes = []
......@@ -37,7 +36,6 @@ def clear
routes.clear
anchored_routes.clear
custom_routes.clear
named_routes.clear
end
def partition_route(route)
......@@ -72,7 +70,6 @@ def add_route(name, mapping)
route.precedence = routes.length
routes << route
named_routes[name] = route if name && !named_routes[name]
partition_route(route)
clear_cache!
route
......
......@@ -143,6 +143,7 @@ def get(name)
end
def key?(name)
return unless name
routes.key? name.to_sym
end
......@@ -356,7 +357,7 @@ def initialize(config = DEFAULT_CONFIG)
@set = Journey::Routes.new
@router = Journey::Router.new @set
@formatter = Journey::Formatter.new @set
@formatter = Journey::Formatter.new self
@dispatcher_class = Routing::RouteSet::Dispatcher
end
......
......@@ -8,9 +8,10 @@ class TestRouter < ActiveSupport::TestCase
def setup
@app = Routing::RouteSet::Dispatcher.new({})
@routes = Routes.new
@router = Router.new(@routes)
@formatter = Formatter.new(@routes)
@route_set = ActionDispatch::Routing::RouteSet.new
@routes = @route_set.router.routes
@router = @route_set.router
@formatter = @route_set.formatter
end
class FakeRequestFeeler < ActionDispatch::Request
......@@ -184,8 +185,8 @@ def test_only_required_parts_are_verified
def test_knows_what_parts_are_missing_from_named_route
route_name = "gorby_thunderhorse"
path = Path::Pattern.build("/foo/:id", { :id => /\d+/ }, ['/', '.', '?'], false)
add_route nil, path, {}, [], {}, route_name
mapper = ActionDispatch::Routing::Mapper.new @route_set
mapper.get "/foo/:id", :as => route_name, :id => /\d+/, :to => "foo#bar"
error = assert_raises(ActionController::UrlGenerationError) do
@formatter.generate(route_name, { }, { })
......
......@@ -6,7 +6,9 @@ class TestRoutes < ActiveSupport::TestCase
attr_reader :routes
def setup
@routes = Routes.new
@route_set = ActionDispatch::Routing::RouteSet.new
@routes = @route_set.router.routes
@router = @route_set.router
super
end
......@@ -64,13 +66,11 @@ def test_partition_route
end
def test_first_name_wins
one = Path::Pattern.from_string '/hello'
two = Path::Pattern.from_string '/aaron'
add_route nil, one, {}, [], {}, 'aaron'
add_route nil, two, {}, [], {}, 'aaron'
assert_equal '/hello', routes.named_routes['aaron'].path.spec.to_s
mapper = ActionDispatch::Routing::Mapper.new @route_set
mapper.get "/hello", to: "foo#bar", as: 'aaron'
assert_raise(ArgumentError) do
mapper.get "/aaron", to: "foo#bar", as: 'aaron'
end
end
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册