mirror of
https://github.com/lostisland/faraday.git
synced 2025-12-11 00:04:41 -05:00
support PATCH and OPTIONS methods
Added a `patch` helper method, but OPTIONS requests need to be done manually.
This commit is contained in:
parent
9ae912b2c8
commit
2343a4e98f
@ -12,11 +12,8 @@ module Faraday
|
|||||||
session = ::Patron::Session.new
|
session = ::Patron::Session.new
|
||||||
|
|
||||||
response = begin
|
response = begin
|
||||||
if Connection::METHODS_WITH_BODIES.include? env[:method]
|
data = Connection::METHODS_WITH_BODIES.include?(env[:method]) ? env[:body].to_s : nil
|
||||||
session.send(env[:method], env[:url].to_s, env[:body].to_s, env[:request_headers])
|
session.request(env[:method], env[:url].to_s, env[:request_headers], :data => data)
|
||||||
else
|
|
||||||
session.send(env[:method], env[:url].to_s, env[:request_headers])
|
|
||||||
end
|
|
||||||
rescue Errno::ECONNREFUSED
|
rescue Errno::ECONNREFUSED
|
||||||
raise Error::ConnectionFailed, $!
|
raise Error::ConnectionFailed, $!
|
||||||
end
|
end
|
||||||
@ -26,5 +23,11 @@ module Faraday
|
|||||||
@app.call env
|
@app.call env
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# HAX: helps but doesn't work completely
|
||||||
|
# https://github.com/toland/patron/issues/34
|
||||||
|
valid_actions = ::Patron::Request::VALID_ACTIONS
|
||||||
|
valid_actions << :patch unless valid_actions.include? :patch
|
||||||
|
valid_actions << :options unless valid_actions.include? :options
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -6,8 +6,8 @@ module Faraday
|
|||||||
class Connection
|
class Connection
|
||||||
include Addressable
|
include Addressable
|
||||||
|
|
||||||
METHODS = Set.new [:get, :post, :put, :delete, :head]
|
METHODS = Set.new [:get, :post, :put, :delete, :head, :patch, :options]
|
||||||
METHODS_WITH_BODIES = Set.new [:post, :put]
|
METHODS_WITH_BODIES = Set.new [:post, :put, :patch, :options]
|
||||||
|
|
||||||
attr_accessor :host, :port, :scheme, :params, :headers, :parallel_manager
|
attr_accessor :host, :port, :scheme, :params, :headers, :parallel_manager
|
||||||
attr_reader :path_prefix, :builder, :options, :ssl
|
attr_reader :path_prefix, :builder, :options, :ssl
|
||||||
@ -76,6 +76,11 @@ module Faraday
|
|||||||
run_request(:put, url, body, headers, &block)
|
run_request(:put, url, body, headers, &block)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def patch(url = nil, body = nil, headers = nil)
|
||||||
|
block = block_given? ? Proc.new : nil
|
||||||
|
run_request(:patch, url, body, headers, &block)
|
||||||
|
end
|
||||||
|
|
||||||
def head(url = nil, headers = nil)
|
def head(url = nil, headers = nil)
|
||||||
block = block_given? ? Proc.new : nil
|
block = block_given? ? Proc.new : nil
|
||||||
run_request(:head, url, nil, headers, &block)
|
run_request(:head, url, nil, headers, &block)
|
||||||
|
|||||||
@ -67,8 +67,8 @@ else
|
|||||||
assert_equal "file live_test.rb text/x-ruby", resp.body
|
assert_equal "file live_test.rb text/x-ruby", resp.body
|
||||||
end unless :default == adapter # isn't configured for multipart
|
end unless :default == adapter # isn't configured for multipart
|
||||||
|
|
||||||
# http://github.com/toland/patron/issues/#issue/9
|
# https://github.com/toland/patron/issues/9
|
||||||
if ENV['FORCE'] || adapter != Faraday::Adapter::Patron
|
if ENV['FORCE'] || %[Faraday::Adapter::Patron] != adapter.to_s
|
||||||
define_method "test_#{adapter}_PUT_send_url_encoded_params" do
|
define_method "test_#{adapter}_PUT_send_url_encoded_params" do
|
||||||
resp = create_connection(adapter).put do |req|
|
resp = create_connection(adapter).put do |req|
|
||||||
req.url 'echo_name'
|
req.url 'echo_name'
|
||||||
@ -90,6 +90,21 @@ else
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# https://github.com/toland/patron/issues/34
|
||||||
|
unless %w[Faraday::Adapter::Patron Faraday::Adapter::EMSynchrony].include? adapter.to_s
|
||||||
|
define_method "test_#{adapter}_PATCH_send_url_encoded_params" do
|
||||||
|
resp = create_connection(adapter).patch('echo_name', 'name' => 'zack')
|
||||||
|
assert_equal %("zack"), resp.body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
unless %[Faraday::Adapter::EMSynchrony] == adapter.to_s
|
||||||
|
define_method "test_#{adapter}_OPTIONS" do
|
||||||
|
resp = create_connection(adapter).run_request(:options, '/options', nil, {})
|
||||||
|
assert_equal "hi", resp.body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
define_method "test_#{adapter}_HEAD_send_url_encoded_params" do
|
define_method "test_#{adapter}_HEAD_send_url_encoded_params" do
|
||||||
resp = create_connection(adapter).head do |req|
|
resp = create_connection(adapter).head do |req|
|
||||||
req.url 'hello', 'name' => 'zack'
|
req.url 'hello', 'name' => 'zack'
|
||||||
|
|||||||
@ -20,18 +20,22 @@ post '/file' do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
%w[get post].each do |method|
|
[:get, :post].each do |method|
|
||||||
send(method, '/hello') do
|
send(method, '/hello') do
|
||||||
"hello #{params[:name]}"
|
"hello #{params[:name]}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
%w[post put].each do |method|
|
%w[POST PUT PATCH].each do |http_method|
|
||||||
send(method, '/echo_name') do
|
settings.send(:route, http_method, '/echo_name') do
|
||||||
params[:name].inspect
|
params[:name].inspect
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
options '/options' do
|
||||||
|
'hi'
|
||||||
|
end
|
||||||
|
|
||||||
delete '/delete_with_json' do
|
delete '/delete_with_json' do
|
||||||
%/{"deleted":true}/
|
%/{"deleted":true}/
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user