Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
12f2fc56
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
12f2fc56
编写于
3月 02, 2015
作者:
A
Aaron Patterson
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #15806 from tgxworld/partition_routes_during_setup
Partition routes during setup.
上级
3d69222c
89edfbd3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
39 addition
and
8 deletion
+39
-8
actionpack/CHANGELOG.md
actionpack/CHANGELOG.md
+5
-0
actionpack/lib/action_dispatch/journey/router.rb
actionpack/lib/action_dispatch/journey/router.rb
+1
-1
actionpack/lib/action_dispatch/journey/routes.rb
actionpack/lib/action_dispatch/journey/routes.rb
+12
-7
actionpack/test/journey/routes_test.rb
actionpack/test/journey/routes_test.rb
+21
-0
未找到文件。
actionpack/CHANGELOG.md
浏览文件 @
12f2fc56
*
Partitioning of routes is now done when the routes are being drawn. This
helps to decrease the time spent filtering the routes during the first request.
*Guo Xiang Tan*
*
Fix regression in functional tests. Responses should have default headers
assigned.
...
...
actionpack/lib/action_dispatch/journey/router.rb
浏览文件 @
12f2fc56
...
...
@@ -88,7 +88,7 @@ def simulator
end
def
custom_routes
partitioned_routes
.
last
routes
.
custom_routes
end
def
filter_routes
(
path
)
...
...
actionpack/lib/action_dispatch/journey/routes.rb
浏览文件 @
12f2fc56
...
...
@@ -5,13 +5,14 @@ module Journey # :nodoc:
class
Routes
# :nodoc:
include
Enumerable
attr_reader
:routes
,
:named_routes
attr_reader
:routes
,
:named_routes
,
:custom_routes
,
:anchored_routes
def
initialize
@routes
=
[]
@named_routes
=
{}
@ast
=
nil
@partitioned_routes
=
nil
@anchored_routes
=
[]
@custom_routes
=
[]
@simulator
=
nil
end
...
...
@@ -30,18 +31,22 @@ def each(&block)
def
clear
routes
.
clear
anchored_routes
.
clear
custom_routes
.
clear
named_routes
.
clear
end
def
partitioned_routes
@partitioned_routes
||=
routes
.
partition
do
|
r
|
r
.
path
.
anchored
&&
r
.
ast
.
grep
(
Nodes
::
Symbol
).
all?
(
&
:default_regexp?
)
def
partition_route
(
route
)
if
route
.
path
.
anchored
&&
route
.
ast
.
grep
(
Nodes
::
Symbol
).
all?
(
&
:default_regexp?
)
anchored_routes
<<
route
else
custom_routes
<<
route
end
end
def
ast
@ast
||=
begin
asts
=
partitioned_routes
.
first
.
map
(
&
:ast
)
asts
=
anchored_routes
.
map
(
&
:ast
)
Nodes
::
Or
.
new
(
asts
)
unless
asts
.
empty?
end
end
...
...
@@ -60,6 +65,7 @@ def add_route(app, path, conditions, defaults, name = nil)
route
.
precedence
=
routes
.
length
routes
<<
route
named_routes
[
name
]
=
route
if
name
&&
!
named_routes
[
name
]
partition_route
(
route
)
clear_cache!
route
end
...
...
@@ -68,7 +74,6 @@ def add_route(app, path, conditions, defaults, name = nil)
def
clear_cache!
@ast
=
nil
@partitioned_routes
=
nil
@simulator
=
nil
end
end
...
...
actionpack/test/journey/routes_test.rb
浏览文件 @
12f2fc56
...
...
@@ -3,6 +3,10 @@
module
ActionDispatch
module
Journey
class
TestRoutes
<
ActiveSupport
::
TestCase
setup
do
@routes
=
Routes
.
new
end
def
test_clear
routes
=
Routes
.
new
exp
=
Router
::
Strexp
.
build
'/foo(/:id)'
,
{},
[
'/.?'
]
...
...
@@ -36,6 +40,23 @@ def test_simulator_changes
assert_not_equal
sim
,
routes
.
simulator
end
def
test_partition_route
path
=
Path
::
Pattern
.
from_string
'/hello'
anchored_route
=
@routes
.
add_route
nil
,
path
,
{},
{},
{}
assert_equal
[
anchored_route
],
@routes
.
anchored_routes
assert_equal
[],
@routes
.
custom_routes
strexp
=
Router
::
Strexp
.
build
(
"/hello/:who"
,
{
who:
/\d/
},
[
'/'
,
'.'
,
'?'
]
)
path
=
Path
::
Pattern
.
new
strexp
custom_route
=
@routes
.
add_route
nil
,
path
,
{},
{},
{}
assert_equal
[
custom_route
],
@routes
.
custom_routes
assert_equal
[
anchored_route
],
@routes
.
anchored_routes
end
def
test_first_name_wins
routes
=
Routes
.
new
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录