Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
a1ce52ef
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,发现更多精彩内容 >>
提交
a1ce52ef
编写于
10月 20, 2009
作者:
J
Joshua Peek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
New routing dsl
上级
df68cae0
变更
6
展开全部
隐藏空白更改
内联
并排
Showing
6 changed file
with
1443 addition
and
797 deletion
+1443
-797
actionpack/lib/action_dispatch/routing.rb
actionpack/lib/action_dispatch/routing.rb
+1
-0
actionpack/lib/action_dispatch/routing/deprecated_mapper.rb
actionpack/lib/action_dispatch/routing/deprecated_mapper.rb
+879
-0
actionpack/lib/action_dispatch/routing/mapper.rb
actionpack/lib/action_dispatch/routing/mapper.rb
+219
-785
actionpack/lib/action_dispatch/routing/route_set.rb
actionpack/lib/action_dispatch/routing/route_set.rb
+2
-2
actionpack/test/controller/resources_test.rb
actionpack/test/controller/resources_test.rb
+10
-10
actionpack/test/controller/routing_test.rb
actionpack/test/controller/routing_test.rb
+332
-0
未找到文件。
actionpack/lib/action_dispatch/routing.rb
浏览文件 @
a1ce52ef
...
...
@@ -260,6 +260,7 @@ module ActionDispatch
# Run <tt>rake routes</tt>.
#
module
Routing
autoload
:DeprecatedMapper
,
'action_dispatch/routing/deprecated_mapper'
autoload
:Mapper
,
'action_dispatch/routing/mapper'
autoload
:RouteSet
,
'action_dispatch/routing/route_set'
...
...
actionpack/lib/action_dispatch/routing/deprecated_mapper.rb
0 → 100644
浏览文件 @
a1ce52ef
此差异已折叠。
点击以展开。
actionpack/lib/action_dispatch/routing/mapper.rb
浏览文件 @
a1ce52ef
此差异已折叠。
点击以展开。
actionpack/lib/action_dispatch/routing/route_set.rb
浏览文件 @
a1ce52ef
...
...
@@ -208,9 +208,9 @@ def initialize
clear!
end
def
draw
def
draw
(
&
block
)
clear!
yield
Mapper
.
new
(
self
)
Mapper
.
new
(
self
).
instance_exec
(
DeprecatedMapper
.
new
(
self
),
&
block
)
@set
.
add_route
(
NotFound
)
install_helpers
@set
.
freeze
...
...
actionpack/test/controller/resources_test.rb
浏览文件 @
a1ce52ef
...
...
@@ -41,7 +41,7 @@ def teardown
end
def
test_should_arrange_actions
resource
=
ActionDispatch
::
Routing
::
Mapper
::
Resource
.
new
(
:messages
,
resource
=
ActionDispatch
::
Routing
::
Deprecated
Mapper
::
Resource
.
new
(
:messages
,
:collection
=>
{
:rss
=>
:get
,
:reorder
=>
:post
,
:csv
=>
:post
},
:member
=>
{
:rss
=>
:get
,
:atom
=>
:get
,
:upload
=>
:post
,
:fix
=>
:post
},
:new
=>
{
:preview
=>
:get
,
:draft
=>
:get
})
...
...
@@ -54,18 +54,18 @@ def test_should_arrange_actions
end
def
test_should_resource_controller_name_equal_resource_name_by_default
resource
=
ActionDispatch
::
Routing
::
Mapper
::
Resource
.
new
(
:messages
,
{})
resource
=
ActionDispatch
::
Routing
::
Deprecated
Mapper
::
Resource
.
new
(
:messages
,
{})
assert_equal
'messages'
,
resource
.
controller
end
def
test_should_resource_controller_name_equal_controller_option
resource
=
ActionDispatch
::
Routing
::
Mapper
::
Resource
.
new
(
:messages
,
:controller
=>
'posts'
)
resource
=
ActionDispatch
::
Routing
::
Deprecated
Mapper
::
Resource
.
new
(
:messages
,
:controller
=>
'posts'
)
assert_equal
'posts'
,
resource
.
controller
end
def
test_should_all_singleton_paths_be_the_same
[
:path
,
:nesting_path_prefix
,
:member_path
].
each
do
|
method
|
resource
=
ActionDispatch
::
Routing
::
Mapper
::
SingletonResource
.
new
(
:messages
,
:path_prefix
=>
'admin'
)
resource
=
ActionDispatch
::
Routing
::
Deprecated
Mapper
::
SingletonResource
.
new
(
:messages
,
:path_prefix
=>
'admin'
)
assert_equal
'admin/messages'
,
resource
.
send
(
method
)
end
end
...
...
@@ -121,7 +121,7 @@ def test_override_paths_for_member_and_collection_methods
end
def
test_override_paths_for_default_restful_actions
resource
=
ActionDispatch
::
Routing
::
Mapper
::
Resource
.
new
(
:messages
,
resource
=
ActionDispatch
::
Routing
::
Deprecated
Mapper
::
Resource
.
new
(
:messages
,
:path_names
=>
{
:new
=>
'nuevo'
,
:edit
=>
'editar'
})
assert_equal
resource
.
new_path
,
"
#{
resource
.
path
}
/nuevo"
end
...
...
@@ -281,7 +281,7 @@ def test_with_member_action
def
test_with_member_action_and_requirement
expected_options
=
{
:controller
=>
'messages'
,
:action
=>
'mark'
,
:id
=>
'1.1.1'
}
with_restful_routing
(
:messages
,
:requirements
=>
{
:id
=>
/[0-9]\.[0-9]\.[0-9]/
},
:member
=>
{
:mark
=>
:get
})
do
assert_recognizes
(
expected_options
,
:path
=>
'messages/1.1.1/mark'
,
:method
=>
:get
)
end
...
...
@@ -701,8 +701,8 @@ def test_should_not_allow_delete_or_put_on_collection_path
def
test_should_not_allow_invalid_head_method_for_member_routes
with_routing
do
|
set
|
set
.
draw
do
|
map
|
assert_raise
(
ArgumentError
)
do
assert_raise
(
ArgumentError
)
do
set
.
draw
do
|
map
|
map
.
resources
:messages
,
:member
=>
{
:something
=>
:head
}
end
end
...
...
@@ -711,8 +711,8 @@ def test_should_not_allow_invalid_head_method_for_member_routes
def
test_should_not_allow_invalid_http_methods_for_member_routes
with_routing
do
|
set
|
set
.
draw
do
|
map
|
assert_raise
(
ArgumentError
)
do
assert_raise
(
ArgumentError
)
do
set
.
draw
do
|
map
|
map
.
resources
:messages
,
:member
=>
{
:something
=>
:invalid
}
end
end
...
...
actionpack/test/controller/routing_test.rb
浏览文件 @
a1ce52ef
...
...
@@ -2046,3 +2046,335 @@ def assert_raise(e)
assert
true
end
end
class
TestRoutingMapper
<
ActiveSupport
::
TestCase
include
Rack
::
Test
::
Methods
SprocketsApp
=
lambda
{
|
env
|
[
200
,
{
"Content-Type"
=>
"text/html"
},
[
"javascripts"
]]
}
class
IpRestrictor
def
self
.
matches?
(
request
)
request
.
ip
=~
/192\.168\.1\.1\d\d/
end
end
class
Dispatcher
def
self
.
new
(
*
args
)
lambda
{
|
env
|
params
=
env
[
'action_dispatch.request.path_parameters'
]
controller
,
action
=
params
[
:controller
],
params
[
:action
]
[
200
,
{
'Content-Type'
=>
'text/html'
},
[
"
#{
controller
}
#
#{
action
}
"
]]
}
end
end
old_dispatcher
=
ActionDispatch
::
Routing
::
RouteSet
::
Dispatcher
ActionDispatch
::
Routing
::
RouteSet
.
module_eval
{
remove_const
:Dispatcher
}
ActionDispatch
::
Routing
::
RouteSet
.
module_eval
{
const_set
:Dispatcher
,
Dispatcher
}
Routes
=
ActionDispatch
::
Routing
::
RouteSet
.
new
Routes
.
draw
do
controller
:sessions
do
get
'login'
,
:to
=>
:new
,
:as
=>
:login
post
'login'
,
:to
=>
:create
delete
'logout'
,
:to
=>
:destroy
,
:as
=>
:logout
end
match
'account/login'
,
:to
=>
redirect
(
"/login"
)
match
'openid/login'
,
:via
=>
[
:get
,
:post
],
:to
=>
"openid#login"
controller
(
:global
)
do
match
'global/:action'
match
'global/export'
,
:to
=>
:export
,
:as
=>
:export_request
match
'global/hide_notice'
,
:to
=>
:hide_notice
,
:as
=>
:hide_notice
match
'/export/:id/:file'
,
:to
=>
:export
,
:as
=>
:export_download
,
:constraints
=>
{
:file
=>
/.*/
}
end
constraints
(
:ip
=>
/192\.168\.1\.\d\d\d/
)
do
get
'admin'
,
:to
=>
"queenbee#index"
end
constraints
IpRestrictor
do
get
'admin/accounts'
,
:to
=>
"queenbee#accounts"
end
resources
:projects
,
:controller
=>
:project
do
resources
:involvements
,
:attachments
resources
:participants
do
put
:update_all
,
:on
=>
:collection
end
resources
:companies
do
resources
:people
resource
:avatar
end
resources
:images
do
post
:revise
,
:on
=>
:member
end
resources
:people
do
namespace
":access_token"
do
resource
:avatar
end
member
do
put
:accessible_projects
post
:resend
,
:generate_new_password
end
end
resources
:posts
do
get
:archive
,
:toggle_view
,
:on
=>
:collection
post
:preview
,
:on
=>
:member
resource
:subscription
resources
:comments
do
post
:preview
,
:on
=>
:collection
end
end
end
match
'sprockets.js'
,
:to
=>
SprocketsApp
match
'people/:id/update'
,
:to
=>
'people#update'
,
:as
=>
:update_person
match
'/projects/:project_id/people/:id/update'
,
:to
=>
'people#update'
,
:as
=>
:update_project_person
# misc
match
'articles/:year/:month/:day/:title'
,
:to
=>
"articles#show"
,
:as
=>
:article
namespace
:account
do
resource
:subscription
,
:credit
,
:credit_card
end
controller
:articles
do
scope
'articles'
do
scope
':title'
,
:title
=>
/[a-z]+/
,
:as
=>
:with_title
do
match
':id'
,
:to
=>
:with_id
end
end
end
scope
':access_token'
,
:constraints
=>
{
:access_token
=>
/\w{5,5}/
}
do
resources
:rooms
end
end
ActionDispatch
::
Routing
::
RouteSet
.
module_eval
{
remove_const
:Dispatcher
}
ActionDispatch
::
Routing
::
RouteSet
.
module_eval
{
const_set
:Dispatcher
,
old_dispatcher
}
def
app
Routes
end
def
test_logout
delete
'/logout'
assert_equal
'sessions#destroy'
,
last_response
.
body
# assert_equal '/logout', app.logout_path
end
def
test_login
get
'/login'
assert_equal
'sessions#new'
,
last_response
.
body
post
'/login'
assert_equal
'sessions#create'
,
last_response
.
body
# assert_equal '/login', app.login_path
end
def
test_login_redirect
get
'/account/login'
assert_equal
301
,
last_response
.
status
assert_equal
'http://example.org/login'
,
last_response
.
headers
[
'Location'
]
assert_equal
'Moved Permanently'
,
last_response
.
body
end
def
test_openid
get
'/openid/login'
assert_equal
'openid#login'
,
last_response
.
body
post
'/openid/login'
assert_equal
'openid#login'
,
last_response
.
body
end
# def test_admin
# get '/admin', {}, {'REMOTE_ADDR' => '192.168.1.100'}
# assert_equal 'queenbee#index', last_response.body
#
# assert_raise(ActionController::RoutingError) { get '/admin', {}, {'REMOTE_ADDR' => '10.0.0.100'} }
#
# get '/admin/accounts', {}, {'REMOTE_ADDR' => '192.168.1.100'}
# assert_equal 'queenbee#accounts', last_response.body
#
# assert_raise(ActionController::RoutingError) { get '/admin/accounts', {}, {'REMOTE_ADDR' => '10.0.0.100'} }
# end
def
test_global
get
'/global/dashboard'
assert_equal
'global#dashboard'
,
last_response
.
body
get
'/global/export'
assert_equal
'global#export'
,
last_response
.
body
get
'/global/hide_notice'
assert_equal
'global#hide_notice'
,
last_response
.
body
get
'/export/123/foo.txt'
assert_equal
'global#export'
,
last_response
.
body
# assert_equal '/global/export', app.export_request_path
# assert_equal '/global/hide_notice', app.hide_notice_path
# assert_equal '/export/123/foo.txt', app.export_download_path(:id => 123, :file => 'foo.txt')
end
def
test_projects
get
'/projects/1'
assert_equal
'projects#show'
,
last_response
.
body
end
def
test_projects_involvements
get
'/projects/1/involvements'
assert_equal
'involvements#index'
,
last_response
.
body
get
'/projects/1/involvements/1'
assert_equal
'involvements#show'
,
last_response
.
body
end
def
test_projects_attachments
get
'/projects/1/attachments'
assert_equal
'attachments#index'
,
last_response
.
body
end
def
test_projects_participants
get
'/projects/1/participants'
assert_equal
'participants#index'
,
last_response
.
body
put
'/projects/1/participants/update_all'
assert_equal
'participants#update_all'
,
last_response
.
body
end
def
test_projects_companies
get
'/projects/1/companies'
assert_equal
'companies#index'
,
last_response
.
body
get
'/projects/1/companies/1/people'
assert_equal
'people#index'
,
last_response
.
body
get
'/projects/1/companies/1/avatar'
assert_equal
'avatar#show'
,
last_response
.
body
end
def
test_project_images
get
'/projects/1/images'
assert_equal
'images#index'
,
last_response
.
body
post
'/projects/1/images/1/revise'
assert_equal
'images#revise'
,
last_response
.
body
end
def
test_projects_people
get
'/projects/1/people'
assert_equal
'people#index'
,
last_response
.
body
get
'/projects/1/people/1'
assert_equal
'people#show'
,
last_response
.
body
get
'/projects/1/people/1/7a2dec8/avatar'
assert_equal
'avatar#show'
,
last_response
.
body
put
'/projects/1/people/1/accessible_projects'
assert_equal
'people#accessible_projects'
,
last_response
.
body
post
'/projects/1/people/1/resend'
assert_equal
'people#resend'
,
last_response
.
body
post
'/projects/1/people/1/generate_new_password'
assert_equal
'people#generate_new_password'
,
last_response
.
body
end
def
test_projects_posts
get
'/projects/1/posts'
assert_equal
'posts#index'
,
last_response
.
body
get
'/projects/1/posts/archive'
assert_equal
'posts#archive'
,
last_response
.
body
get
'/projects/1/posts/toggle_view'
assert_equal
'posts#toggle_view'
,
last_response
.
body
post
'/projects/1/posts/1/preview'
assert_equal
'posts#preview'
,
last_response
.
body
get
'/projects/1/posts/1/subscription'
assert_equal
'subscription#show'
,
last_response
.
body
get
'/projects/1/posts/1/comments'
assert_equal
'comments#index'
,
last_response
.
body
post
'/projects/1/posts/1/comments/preview'
assert_equal
'comments#preview'
,
last_response
.
body
end
def
test_sprockets
get
'/sprockets.js'
assert_equal
'javascripts'
,
last_response
.
body
end
def
test_update_person_route
get
'/people/1/update'
assert_equal
'people#update'
,
last_response
.
body
# assert_equal '/people/1/update', app.update_person_path(:id => 1)
end
def
test_update_project_person
get
'/projects/1/people/2/update'
assert_equal
'people#update'
,
last_response
.
body
# assert_equal '/projects/1/people/2/update', app.update_project_person_path(:project_id => 1, :id => 2)
end
def
test_articles_perma
get
'/articles/2009/08/18/rails-3'
assert_equal
'articles#show'
,
last_response
.
body
# assert_equal '/articles/2009/8/18/rails-3', app.article_path(:year => 2009, :month => 8, :day => 18, :title => 'rails-3')
end
def
test_account_namespace
get
'/account/subscription'
assert_equal
'subscription#show'
,
last_response
.
body
get
'/account/credit'
assert_equal
'credit#show'
,
last_response
.
body
get
'/account/credit_card'
assert_equal
'credit_card#show'
,
last_response
.
body
end
def
test_articles_with_id
get
'/articles/rails/1'
assert_equal
'articles#with_id'
,
last_response
.
body
assert_raise
(
ActionController
::
RoutingError
)
{
get
'/articles/123/1'
}
# assert_equal '/articles/rails/1', app.with_title_path(:title => 'rails', :id => 1)
end
def
test_access_token_rooms
get
'/12345/rooms'
assert_equal
'rooms#index'
,
last_response
.
body
get
'/12345/rooms/1'
assert_equal
'rooms#show'
,
last_response
.
body
get
'/12345/rooms/1/edit'
assert_equal
'rooms#edit'
,
last_response
.
body
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录