提交 5396b0f3 编写于 作者: M Michael Koziarski

Use HEAD instead of GET inside exists? Closes #11062 [bscofield]


git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8827 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 9e13b966
*SVN*
* Use HEAD instead of GET in exists? [bscofield]
* Fix small documentation typo. Closes #10670 [l.guidi]
* find_or_create_resource_for handles module nesting. #10646 [xavier]
......
......@@ -436,7 +436,13 @@ def delete(id, options = {})
# Note.exists(1349)
# # => false
def exists?(id, options = {})
id && !find_single(id, options).nil?
if id
prefix_options, query_options = split_options(options[:params])
path = element_path(id, prefix_options, query_options)
response = connection.head(path, headers)
response.code == 200
end
# id && !find_single(id, options).nil?
rescue ActiveResource::ResourceNotFound
false
end
......
......@@ -101,6 +101,12 @@ def post(path, body = '', headers = {})
request(:post, path, body.to_s, build_request_headers(headers))
end
# Execute a HEAD request.
# Used to ...
def head(path, headers= {})
request(:head, path, build_request_headers(headers))
end
private
# Makes request to remote service.
......
......@@ -9,7 +9,7 @@ def initialize(responses)
@responses = responses
end
for method in [ :post, :put, :get, :delete ]
for method in [ :post, :put, :get, :delete, :head ]
module_eval <<-EOE, __FILE__, __LINE__
def #{method}(path, request_headers = {}, body = nil, status = 200, response_headers = {})
@responses[Request.new(:#{method}, path, nil, request_headers)] = Response.new(body || "", status, response_headers)
......@@ -56,7 +56,7 @@ def #{method}(path, body, headers)
EOE
end
for method in [ :get, :delete ]
for method in [ :get, :delete, :head ]
module_eval <<-EOE, __FILE__, __LINE__
def #{method}(path, headers)
request = ActiveResource::Request.new(:#{method}, path, nil, headers)
......
......@@ -36,6 +36,11 @@ def setup
mock.put "/people//addresses/1.xml", {}, nil, 404
mock.delete "/people//addresses/1.xml", {}, nil, 404
mock.post "/people//addresses.xml", {}, nil, 404
mock.head "/people/1.xml", {}, nil, 200
mock.head "/people/99.xml", {}, nil, 404
mock.head "/people/1/addresses/1.xml", {}, nil, 200
mock.head "/people/1/addresses/2.xml", {}, nil, 404
mock.head "/people/2/addresses/1.xml", {}, nil, 404
end
end
......
......@@ -27,6 +27,7 @@ def setup
mock.delete "/people/2.xml", @header, nil, 200
mock.post "/people.xml", {}, nil, 201, 'Location' => '/people/5.xml'
mock.post "/members.xml", {}, @header, 201, 'Location' => '/people/6.xml'
mock.head "/people/1.xml", {}, nil, 200
end
end
......@@ -105,6 +106,12 @@ def test_get
assert_equal "Matz", matz["name"]
end
def test_head
response = @conn.head("/people/1.xml")
assert response.body.blank?
assert_equal 200, response.code
end
def test_get_with_header
david = @conn.get("/people/2.xml", @header)
assert_equal "David", david["name"]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册