Skip to content

Commit

Permalink
Support for PUT and DELETE.
Browse files Browse the repository at this point in the history
  • Loading branch information
zenhob committed Dec 23, 2009
1 parent 6449b66 commit 998850e
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 16 deletions.
34 changes: 18 additions & 16 deletions lib/faraday/adapter/net_http.rb
Expand Up @@ -5,31 +5,33 @@ module Adapter
module NetHttp
extend Faraday::Connection::Options

def _post(uri, data, request_headers)
def _perform(method, uri, data, request_headers)
http = Net::HTTP.new(uri.host, uri.port)
response_class.new do |resp|
post_data = post_encode(data)
http_resp = http.post(uri.path, post_data, request_headers) do |chunk|
resp.process(chunk)
end
http_resp = http.send_request(method, uri.path, data, request_headers)
resp.process http_resp.body
http_resp.each_header do |key, value|
resp.headers[key] = value
end
end
rescue Errno::ECONNREFUSED
raise Faraday::Error::ConnectionFailed, "connection refused"
end

def _put(uri, data, request_headers)
_perform('PUT', uri, post_encode(data), request_headers)
end

def _post(uri, data, request_headers)
_perform('POST', uri, post_encode(data), request_headers)
end

def _get(uri, request_headers)
http = Net::HTTP.new(uri.host, uri.port)
response_class.new do |resp|
http_resp = http.get(uri.path, request_headers) do |chunk|
resp.process(chunk)
end
http_resp.each_header do |key, value|
resp.headers[key] = value
end
end
rescue Errno::ECONNREFUSED
raise Faraday::Error::ConnectionFailed, "connection refused"
_perform('GET', uri, nil, request_headers)
end

def _delete(uri, request_headers)
_perform('DELETE', uri, nil, request_headers)
end

def post_encode data
Expand Down
8 changes: 8 additions & 0 deletions lib/faraday/adapter/typhoeus.rb
Expand Up @@ -33,6 +33,14 @@ def _get(uri, request_headers)
_perform(:get, uri, :headers => request_headers)
end

def _put(uri, data, request_headers)
_perform(:put, uri, :headers => request_headers, :params => data)
end

def _delete(uri, request_headers)
_perform(:delete, uri, :headers => request_headers)
end

def _perform method, uri, params
response_class.new do |resp|
is_async = in_parallel?
Expand Down
13 changes: 13 additions & 0 deletions lib/faraday/connection.rb
Expand Up @@ -46,6 +46,19 @@ def post(uri, params = {}, headers = {})
_post build_uri(uri), params, headers
end

# Override in a subclass, or include an adapter
#
# def _put(uri, post_params, headers)
# end
#
def put(uri, params = {}, headers = {})
_put build_uri(uri), params, headers
end

def delete(uri, params = {}, headers = {})
_delete build_uri(uri, params), headers
end

def response_class
@response_class || Response
end
Expand Down
28 changes: 28 additions & 0 deletions test/adapter_test.rb
Expand Up @@ -6,6 +6,34 @@ class AdapterTest < Faraday::TestCase
end

Faraday::Adapter.loaded_adapters.each do |adapter|
describe "#delete with #{adapter} adapter" do
before do
@connection.extend adapter
end

it "retrieves the response body with YajlResponse" do
@connection.response_class = Faraday::Response::YajlResponse
assert_equal({'deleted' => true},
@connection.delete('delete_me').body)
end
end

describe "#put with #{adapter} adapter" do
before do
@connection.extend adapter
end

it "sends params" do
assert_equal 'hello zack', @connection.put('hello', 'name' => 'zack').body
end

it "retrieves the response body with YajlResponse" do
@connection.response_class = Faraday::Response::YajlResponse
assert_equal({'name' => 'zack'},
@connection.put('echo_name', 'name' => 'zack').body)
end
end

describe "#post with #{adapter} adapter" do
before do
@connection.extend adapter
Expand Down
12 changes: 12 additions & 0 deletions test/live_server.rb
Expand Up @@ -13,6 +13,18 @@
"hello #{params[:name]}"
end

put '/hello' do
"hello #{params[:name]}"
end

post '/echo_name' do
%/{"name":#{params[:name].inspect}}/
end

put '/echo_name' do
%/{"name":#{params[:name].inspect}}/
end

delete '/delete_me' do
%/{"deleted":true}/
end

0 comments on commit 998850e

Please sign in to comment.