Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
9c1e48ea
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,体验更适合开发者的 AI 搜索 >>
提交
9c1e48ea
编写于
12月 23, 2008
作者:
J
Joshua Peek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ActionController::VerbPiggybacking middleware
上级
3562d54d
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
49 addition
and
38 deletion
+49
-38
actionpack/lib/action_controller.rb
actionpack/lib/action_controller.rb
+1
-0
actionpack/lib/action_controller/integration.rb
actionpack/lib/action_controller/integration.rb
+11
-0
actionpack/lib/action_controller/middlewares.rb
actionpack/lib/action_controller/middlewares.rb
+2
-0
actionpack/lib/action_controller/request.rb
actionpack/lib/action_controller/request.rb
+9
-11
actionpack/lib/action_controller/verb_piggybacking.rb
actionpack/lib/action_controller/verb_piggybacking.rb
+24
-0
actionpack/test/controller/rack_test.rb
actionpack/test/controller/rack_test.rb
+0
-23
actionpack/test/controller/request_test.rb
actionpack/test/controller/request_test.rb
+2
-4
未找到文件。
actionpack/lib/action_controller.rb
浏览文件 @
9c1e48ea
...
...
@@ -74,6 +74,7 @@ def self.load_all!
autoload
:Translation
,
'action_controller/translation'
autoload
:UrlRewriter
,
'action_controller/url_rewriter'
autoload
:UrlWriter
,
'action_controller/url_rewriter'
autoload
:VerbPiggybacking
,
'action_controller/verb_piggybacking'
autoload
:Verification
,
'action_controller/verification'
module
Assertions
...
...
actionpack/lib/action_controller/integration.rb
浏览文件 @
9c1e48ea
...
...
@@ -2,6 +2,17 @@
require
'uri'
require
'active_support/test_case'
# Monkey patch Rack::Lint to support rewind
module
Rack
class
Lint
class
InputWrapper
def
rewind
@input
.
rewind
end
end
end
end
module
ActionController
module
Integration
#:nodoc:
# An integration Session instance represents a set of requests and responses
...
...
actionpack/lib/action_controller/middlewares.rb
浏览文件 @
9c1e48ea
...
...
@@ -17,3 +17,5 @@
}
)
end
use
ActionController
::
VerbPiggybacking
actionpack/lib/action_controller/request.rb
浏览文件 @
9c1e48ea
...
...
@@ -45,8 +45,6 @@ def key?(key)
# UnknownHttpMethod is raised for invalid methods not listed in ACCEPTED_HTTP_METHODS.
def
request_method
method
=
@env
[
'REQUEST_METHOD'
]
method
=
parameters
[
:_method
]
if
method
==
'POST'
&&
!
parameters
[
:_method
].
blank?
HTTP_METHOD_LOOKUP
[
method
]
||
raise
(
UnknownHttpMethod
,
"
#{
method
}
, accepted HTTP methods are
#{
HTTP_METHODS
.
to_sentence
}
"
)
end
memoize
:request_method
...
...
@@ -143,15 +141,15 @@ def etag_matches?(etag)
# supplied, both must match, or the request is not considered fresh.
def
fresh?
(
response
)
case
when
if_modified_since
&&
if_none_match
not_modified?
(
response
.
last_modified
)
&&
etag_matches?
(
response
.
etag
)
when
if_modified_since
not_modified?
(
response
.
last_modified
)
when
if_none_match
etag_matches?
(
response
.
etag
)
else
false
end
when
if_modified_since
&&
if_none_match
not_modified?
(
response
.
last_modified
)
&&
etag_matches?
(
response
.
etag
)
when
if_modified_since
not_modified?
(
response
.
last_modified
)
when
if_none_match
etag_matches?
(
response
.
etag
)
else
false
end
end
# Returns the Mime type for the \format used in the request.
...
...
actionpack/lib/action_controller/verb_piggybacking.rb
0 → 100644
浏览文件 @
9c1e48ea
module
ActionController
# TODO: Use Rack::MethodOverride when it is released
class
VerbPiggybacking
HTTP_METHODS
=
%w(GET HEAD PUT POST DELETE OPTIONS)
def
initialize
(
app
)
@app
=
app
end
def
call
(
env
)
if
env
[
"REQUEST_METHOD"
]
==
"POST"
req
=
Request
.
new
(
env
)
if
method
=
(
req
.
parameters
[
:_method
]
||
env
[
"HTTP_X_HTTP_METHOD_OVERRIDE"
])
method
=
method
.
to_s
.
upcase
if
HTTP_METHODS
.
include?
(
method
)
env
[
"REQUEST_METHOD"
]
=
method
end
end
end
@app
.
call
(
env
)
end
end
end
actionpack/test/controller/rack_test.rb
浏览文件 @
9c1e48ea
...
...
@@ -187,29 +187,6 @@ def test_xml_content_type_verification
end
end
class
RackRequestMethodTest
<
BaseRackTest
def
test_get
assert_equal
:get
,
@request
.
request_method
end
def
test_post
@request
.
env
[
'REQUEST_METHOD'
]
=
'POST'
assert_equal
:post
,
@request
.
request_method
end
def
test_put
set_content_data
'_method=put'
assert_equal
:put
,
@request
.
request_method
end
def
test_delete
set_content_data
'_method=delete'
assert_equal
:delete
,
@request
.
request_method
end
end
class
RackRequestNeedsRewoundTest
<
BaseRackTest
def
test_body_should_be_rewound
data
=
'foo'
...
...
actionpack/test/controller/request_test.rb
浏览文件 @
9c1e48ea
...
...
@@ -303,18 +303,16 @@ def test_invalid_http_method_raises_exception
end
def
test_allow_method_hacking_on_post
self
.
request_method
=
:post
[
:get
,
:head
,
:options
,
:put
,
:post
,
:delete
].
each
do
|
method
|
@request
.
instance_eval
{
@parameters
=
{
:_method
=>
method
.
to_s
}
;
@request_method
=
nil
}
self
.
request_method
=
method
@request
.
request_method
(
true
)
assert_equal
(
method
==
:head
?
:get
:
method
,
@request
.
method
)
end
end
def
test_invalid_method_hacking_on_post_raises_exception
self
.
request_method
=
:post
@request
.
instance_eval
{
@parameters
=
{
:_method
=>
:random_method
}
;
@request_method
=
nil
}
assert_raises
(
ActionController
::
UnknownHttpMethod
)
do
self
.
request_method
=
:_random_method
@request
.
request_method
(
true
)
end
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录