Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
293bb02f
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 搜索 >>
提交
293bb02f
编写于
12月 23, 2008
作者:
P
Pratik Naik
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Unify ActionController::AbstractRequest and ActionController::Request
上级
b5ecfe78
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
81 addition
and
110 deletion
+81
-110
actionpack/lib/action_controller/request.rb
actionpack/lib/action_controller/request.rb
+47
-76
actionpack/test/controller/request_test.rb
actionpack/test/controller/request_test.rb
+34
-34
未找到文件。
actionpack/lib/action_controller/request.rb
浏览文件 @
293bb02f
...
...
@@ -7,9 +7,35 @@
module
ActionController
# CgiRequest and TestRequest provide concrete implementations.
class
AbstractRequest
<
Rack
::
Request
class
Request
extend
ActiveSupport
::
Memoizable
class
SessionFixationAttempt
<
StandardError
#:nodoc:
end
attr_reader
:env
def
initialize
(
env
)
@env
=
env
end
%w[ AUTH_TYPE GATEWAY_INTERFACE PATH_INFO
PATH_TRANSLATED REMOTE_HOST
REMOTE_IDENT REMOTE_USER SCRIPT_NAME
SERVER_NAME SERVER_PROTOCOL
HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE HTTP_CACHE_CONTROL HTTP_FROM
HTTP_NEGOTIATE HTTP_PRAGMA HTTP_REFERER HTTP_USER_AGENT ]
.
each
do
|
env
|
define_method
(
env
.
sub
(
/^HTTP_/n
,
''
).
downcase
)
do
@env
[
env
]
end
end
def
key?
(
key
)
@env
.
key?
(
key
)
end
HTTP_METHODS
=
%w(get head put post delete options)
HTTP_METHOD_LOOKUP
=
HTTP_METHODS
.
inject
({})
{
|
h
,
m
|
h
[
m
]
=
h
[
m
.
upcase
]
=
m
.
to_sym
;
h
}
...
...
@@ -242,7 +268,6 @@ def server_software
end
memoize
:server_software
# Returns the complete URL used for this request.
def
url
protocol
+
host_with_port
+
request_uri
...
...
@@ -326,11 +351,7 @@ def subdomains(tld_length = 1)
# Returns the query string, accounting for server idiosyncrasies.
def
query_string
if
uri
=
@env
[
'REQUEST_URI'
]
uri
.
split
(
'?'
,
2
)[
1
]
||
''
else
@env
[
'QUERY_STRING'
]
||
''
end
@env
[
'QUERY_STRING'
].
present?
?
@env
[
'QUERY_STRING'
]
:
(
@env
[
'REQUEST_URI'
].
split
(
'?'
,
2
)[
1
]
||
''
)
end
memoize
:query_string
...
...
@@ -432,24 +453,36 @@ def request_parameters
@request_parameters
||=
parse_formatted_request_parameters
end
#--
# Must be implemented in the concrete request
#++
def
body_stream
#:nodoc:
@env
[
'rack.input'
]
end
def
cookies
#:nodoc:
def
cookies
Rack
::
Request
.
new
(
@env
).
cookies
end
def
session
#:nodoc:
def
session
@env
[
'rack.session'
]
||=
{}
end
def
session
=
(
session
)
#:nodoc:
@session
=
session
end
def
reset_session
#:nodoc:
def
reset_session
@env
[
'rack.session'
]
=
{}
end
def
session_options
@env
[
'rack.session.options'
]
||=
{}
end
def
session_options
=
(
options
)
@env
[
'rack.session.options'
]
=
options
end
def
server_port
@env
[
'SERVER_PORT'
].
to_i
end
protected
...
...
@@ -859,66 +892,4 @@ class UploadedStringIO < StringIO
class
UploadedTempfile
<
Tempfile
include
UploadedFile
end
class
Request
<
AbstractRequest
#:nodoc:
attr_accessor
:session_options
class
SessionFixationAttempt
<
StandardError
#:nodoc:
end
%w[ AUTH_TYPE GATEWAY_INTERFACE PATH_INFO
PATH_TRANSLATED REMOTE_HOST
REMOTE_IDENT REMOTE_USER SCRIPT_NAME
SERVER_NAME SERVER_PROTOCOL
HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE HTTP_CACHE_CONTROL HTTP_FROM
HTTP_NEGOTIATE HTTP_PRAGMA HTTP_REFERER HTTP_USER_AGENT ]
.
each
do
|
env
|
define_method
(
env
.
sub
(
/^HTTP_/n
,
''
).
downcase
)
do
@env
[
env
]
end
end
def
query_string
qs
=
super
if
!
qs
.
blank?
qs
else
@env
[
'QUERY_STRING'
]
end
end
def
body_stream
#:nodoc:
@env
[
'rack.input'
]
end
def
key?
(
key
)
@env
.
key?
(
key
)
end
def
cookies
Rack
::
Request
.
new
(
@env
).
cookies
end
def
server_port
@env
[
'SERVER_PORT'
].
to_i
end
def
session_options
@env
[
'rack.session.options'
]
||=
{}
end
def
session_options
=
(
options
)
@env
[
'rack.session.options'
]
=
options
end
def
session
@env
[
'rack.session'
]
||=
{}
end
def
reset_session
@env
[
'rack.session'
]
=
{}
end
end
end
actionpack/test/controller/request_test.rb
浏览文件 @
293bb02f
...
...
@@ -426,95 +426,95 @@ def setup
def
test_query_string
assert_equal
(
{
"action"
=>
"create_customer"
,
"full_name"
=>
"David Heinemeier Hansson"
,
"customerId"
=>
"1"
},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
@query_string
)
ActionController
::
Request
.
parse_query_parameters
(
@query_string
)
)
end
def
test_deep_query_string
expected
=
{
'x'
=>
{
'y'
=>
{
'z'
=>
'10'
}}}
assert_equal
(
expected
,
ActionController
::
Abstract
Request
.
parse_query_parameters
(
'x[y][z]=10'
))
assert_equal
(
expected
,
ActionController
::
Request
.
parse_query_parameters
(
'x[y][z]=10'
))
end
def
test_deep_query_string_with_array
assert_equal
({
'x'
=>
{
'y'
=>
{
'z'
=>
[
'10'
]}}},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
'x[y][z][]=10'
))
assert_equal
({
'x'
=>
{
'y'
=>
{
'z'
=>
[
'10'
,
'5'
]}}},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
'x[y][z][]=10&x[y][z][]=5'
))
assert_equal
({
'x'
=>
{
'y'
=>
{
'z'
=>
[
'10'
]}}},
ActionController
::
Request
.
parse_query_parameters
(
'x[y][z][]=10'
))
assert_equal
({
'x'
=>
{
'y'
=>
{
'z'
=>
[
'10'
,
'5'
]}}},
ActionController
::
Request
.
parse_query_parameters
(
'x[y][z][]=10&x[y][z][]=5'
))
end
def
test_deep_query_string_with_array_of_hash
assert_equal
({
'x'
=>
{
'y'
=>
[{
'z'
=>
'10'
}]}},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
'x[y][][z]=10'
))
assert_equal
({
'x'
=>
{
'y'
=>
[{
'z'
=>
'10'
,
'w'
=>
'10'
}]}},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
'x[y][][z]=10&x[y][][w]=10'
))
assert_equal
({
'x'
=>
{
'y'
=>
[{
'z'
=>
'10'
}]}},
ActionController
::
Request
.
parse_query_parameters
(
'x[y][][z]=10'
))
assert_equal
({
'x'
=>
{
'y'
=>
[{
'z'
=>
'10'
,
'w'
=>
'10'
}]}},
ActionController
::
Request
.
parse_query_parameters
(
'x[y][][z]=10&x[y][][w]=10'
))
end
def
test_deep_query_string_with_array_of_hashes_with_one_pair
assert_equal
({
'x'
=>
{
'y'
=>
[{
'z'
=>
'10'
},
{
'z'
=>
'20'
}]}},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
'x[y][][z]=10&x[y][][z]=20'
))
assert_equal
(
"10"
,
ActionController
::
Abstract
Request
.
parse_query_parameters
(
'x[y][][z]=10&x[y][][z]=20'
)[
"x"
][
"y"
].
first
[
"z"
])
assert_equal
(
"10"
,
ActionController
::
Abstract
Request
.
parse_query_parameters
(
'x[y][][z]=10&x[y][][z]=20'
).
with_indifferent_access
[
:x
][
:y
].
first
[
:z
])
assert_equal
({
'x'
=>
{
'y'
=>
[{
'z'
=>
'10'
},
{
'z'
=>
'20'
}]}},
ActionController
::
Request
.
parse_query_parameters
(
'x[y][][z]=10&x[y][][z]=20'
))
assert_equal
(
"10"
,
ActionController
::
Request
.
parse_query_parameters
(
'x[y][][z]=10&x[y][][z]=20'
)[
"x"
][
"y"
].
first
[
"z"
])
assert_equal
(
"10"
,
ActionController
::
Request
.
parse_query_parameters
(
'x[y][][z]=10&x[y][][z]=20'
).
with_indifferent_access
[
:x
][
:y
].
first
[
:z
])
end
def
test_deep_query_string_with_array_of_hashes_with_multiple_pairs
assert_equal
(
{
'x'
=>
{
'y'
=>
[{
'z'
=>
'10'
,
'w'
=>
'a'
},
{
'z'
=>
'20'
,
'w'
=>
'b'
}]}},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
'x[y][][z]=10&x[y][][w]=a&x[y][][z]=20&x[y][][w]=b'
)
ActionController
::
Request
.
parse_query_parameters
(
'x[y][][z]=10&x[y][][w]=a&x[y][][z]=20&x[y][][w]=b'
)
)
end
def
test_query_string_with_nil
assert_equal
(
{
"action"
=>
"create_customer"
,
"full_name"
=>
''
},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
@query_string_with_empty
)
ActionController
::
Request
.
parse_query_parameters
(
@query_string_with_empty
)
)
end
def
test_query_string_with_array
assert_equal
(
{
"action"
=>
"create_customer"
,
"selected"
=>
[
"1"
,
"2"
,
"3"
]},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
@query_string_with_array
)
ActionController
::
Request
.
parse_query_parameters
(
@query_string_with_array
)
)
end
def
test_query_string_with_amps
assert_equal
(
{
"action"
=>
"create_customer"
,
"name"
=>
"Don't & Does"
},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
@query_string_with_amps
)
ActionController
::
Request
.
parse_query_parameters
(
@query_string_with_amps
)
)
end
def
test_query_string_with_many_equal
assert_equal
(
{
"action"
=>
"create_customer"
,
"full_name"
=>
"abc=def=ghi"
},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
@query_string_with_many_equal
)
ActionController
::
Request
.
parse_query_parameters
(
@query_string_with_many_equal
)
)
end
def
test_query_string_without_equal
assert_equal
(
{
"action"
=>
nil
},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
@query_string_without_equal
)
ActionController
::
Request
.
parse_query_parameters
(
@query_string_without_equal
)
)
end
def
test_query_string_with_empty_key
assert_equal
(
{
"action"
=>
"create_customer"
,
"full_name"
=>
"David Heinemeier Hansson"
},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
@query_string_with_empty_key
)
ActionController
::
Request
.
parse_query_parameters
(
@query_string_with_empty_key
)
)
end
def
test_query_string_with_many_ampersands
assert_equal
(
{
"action"
=>
"create_customer"
,
"full_name"
=>
"David Heinemeier Hansson"
},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
@query_string_with_many_ampersands
)
ActionController
::
Request
.
parse_query_parameters
(
@query_string_with_many_ampersands
)
)
end
def
test_unbalanced_query_string_with_array
assert_equal
(
{
'location'
=>
[
"1"
,
"2"
],
'age_group'
=>
[
"2"
]},
ActionController
::
Abstract
Request
.
parse_query_parameters
(
"location[]=1&location[]=2&age_group[]=2"
)
ActionController
::
Request
.
parse_query_parameters
(
"location[]=1&location[]=2&age_group[]=2"
)
)
assert_equal
(
{
'location'
=>
[
"1"
,
"2"
],
'age_group'
=>
[
"2"
]},
ActionController
::
Abstract
Request
.
parse_request_parameters
({
'location[]'
=>
[
"1"
,
"2"
],
ActionController
::
Request
.
parse_request_parameters
({
'location[]'
=>
[
"1"
,
"2"
],
'age_group[]'
=>
[
"2"
]})
)
end
...
...
@@ -527,7 +527,7 @@ def test_request_hash_parsing
expected
=
{
"note"
=>
{
"viewers"
=>
{
"viewer"
=>
[{
"id"
=>
"1"
,
"type"
=>
"User"
},
{
"type"
=>
"Group"
,
"id"
=>
"2"
}
]}
}
}
assert_equal
(
expected
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
query
))
assert_equal
(
expected
,
ActionController
::
Request
.
parse_request_parameters
(
query
))
end
def
test_parse_params
...
...
@@ -566,7 +566,7 @@ def test_parse_params
}
}
assert_equal
expected_output
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
assert_equal
expected_output
,
ActionController
::
Request
.
parse_request_parameters
(
input
)
end
UploadedStringIO
=
ActionController
::
UploadedStringIO
...
...
@@ -621,7 +621,7 @@ def test_parse_params_from_multipart_upload
"text_part"
=>
"abc"
}
params
=
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
params
=
ActionController
::
Request
.
parse_request_parameters
(
input
)
assert_equal
expected_output
,
params
# Lone filenames are preserved.
...
...
@@ -652,7 +652,7 @@ def test_parse_params_with_file
"logo"
=>
File
.
new
(
File
.
dirname
(
__FILE__
)
+
"/rack_test.rb"
).
path
,
}
assert_equal
expected_output
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
assert_equal
expected_output
,
ActionController
::
Request
.
parse_request_parameters
(
input
)
end
def
test_parse_params_with_array
...
...
@@ -660,55 +660,55 @@ def test_parse_params_with_array
expected_output
=
{
"selected"
=>
[
"1"
,
"2"
,
"3"
]
}
assert_equal
expected_output
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
assert_equal
expected_output
,
ActionController
::
Request
.
parse_request_parameters
(
input
)
end
def
test_parse_params_with_non_alphanumeric_name
input
=
{
"a/b[c]"
=>
%w(d)
}
expected
=
{
"a/b"
=>
{
"c"
=>
"d"
}}
assert_equal
expected
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
assert_equal
expected
,
ActionController
::
Request
.
parse_request_parameters
(
input
)
end
def
test_parse_params_with_single_brackets_in_middle
input
=
{
"a/b[c]d"
=>
%w(e)
}
expected
=
{
"a/b"
=>
{}
}
assert_equal
expected
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
assert_equal
expected
,
ActionController
::
Request
.
parse_request_parameters
(
input
)
end
def
test_parse_params_with_separated_brackets
input
=
{
"a/b@[c]d[e]"
=>
%w(f)
}
expected
=
{
"a/b@"
=>
{
}}
assert_equal
expected
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
assert_equal
expected
,
ActionController
::
Request
.
parse_request_parameters
(
input
)
end
def
test_parse_params_with_separated_brackets_and_array
input
=
{
"a/b@[c]d[e][]"
=>
%w(f)
}
expected
=
{
"a/b@"
=>
{
}}
assert_equal
expected
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
assert_equal
expected
,
ActionController
::
Request
.
parse_request_parameters
(
input
)
end
def
test_parse_params_with_unmatched_brackets_and_array
input
=
{
"a/b@[c][d[e][]"
=>
%w(f)
}
expected
=
{
"a/b@"
=>
{
"c"
=>
{
}}}
assert_equal
expected
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
assert_equal
expected
,
ActionController
::
Request
.
parse_request_parameters
(
input
)
end
def
test_parse_params_with_nil_key
input
=
{
nil
=>
nil
,
"test2"
=>
%w(value1)
}
expected
=
{
"test2"
=>
"value1"
}
assert_equal
expected
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
assert_equal
expected
,
ActionController
::
Request
.
parse_request_parameters
(
input
)
end
def
test_parse_params_with_array_prefix_and_hashes
input
=
{
"a[][b][c]"
=>
%w(d)
}
expected
=
{
"a"
=>
[{
"b"
=>
{
"c"
=>
"d"
}}]}
assert_equal
expected
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
assert_equal
expected
,
ActionController
::
Request
.
parse_request_parameters
(
input
)
end
def
test_parse_params_with_complex_nesting
input
=
{
"a[][b][c][][d][]"
=>
%w(e)
}
expected
=
{
"a"
=>
[{
"b"
=>
{
"c"
=>
[{
"d"
=>
[
"e"
]}]}}]}
assert_equal
expected
,
ActionController
::
Abstract
Request
.
parse_request_parameters
(
input
)
assert_equal
expected
,
ActionController
::
Request
.
parse_request_parameters
(
input
)
end
end
...
...
@@ -770,7 +770,7 @@ def test_no_rewind_stream
# Ensures that parse_multipart_form_parameters works with streams that cannot be rewound
file
=
File
.
open
(
File
.
join
(
FIXTURE_PATH
,
'large_text_file'
),
'rb'
)
file
.
expects
(
:rewind
).
raises
(
Errno
::
ESPIPE
)
params
=
ActionController
::
Abstract
Request
.
parse_multipart_form_parameters
(
file
,
'AaB03x'
,
file
.
stat
.
size
,
{})
params
=
ActionController
::
Request
.
parse_multipart_form_parameters
(
file
,
'AaB03x'
,
file
.
stat
.
size
,
{})
assert_not_equal
0
,
file
.
pos
# file was not rewound after reading
end
end
...
...
@@ -809,7 +809,7 @@ def test_mixed_files
private
def
parse_multipart
(
name
)
File
.
open
(
File
.
join
(
FIXTURE_PATH
,
name
),
'rb'
)
do
|
file
|
params
=
ActionController
::
Abstract
Request
.
parse_multipart_form_parameters
(
file
,
'AaB03x'
,
file
.
stat
.
size
,
{})
params
=
ActionController
::
Request
.
parse_multipart_form_parameters
(
file
,
'AaB03x'
,
file
.
stat
.
size
,
{})
assert_equal
0
,
file
.
pos
# file was rewound after reading
params
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录