Add Faraday::Connection#basic_auth and Faraday::Connection#token_auth for specifying Authorization headers

This commit is contained in:
rick 2010-04-27 10:53:05 -04:00
parent 031d5e1c56
commit bbab11d606
3 changed files with 39 additions and 45 deletions

View File

@ -4,6 +4,11 @@ module Faraday
class << self
attr_accessor :default_adapter
attr_writer :default_connection
private
def method_missing(name, *args, &block)
default_connection.send(name, *args, &block)
end
end
self.default_adapter = :net_http
@ -12,51 +17,6 @@ module Faraday
@default_connection ||= Connection.new
end
# use the method signature from Faraday::Connection
def self.build(options = {}, &block)
default_connection.build(options, &block)
end
def self.get(url = nil, headers = nil, &block)
default_connection.get(url, headers, &block)
end
def self.post(url = nil, body = nil, headers = nil, &block)
default_connection.post(url, body, headers, &block)
end
def self.put(url = nil, body = nil, headers = nil, &block)
default_connection.put(url, body, headers, &block)
end
def self.head(url = nil, headers = nil, &block)
default_connection.head(url, headers, &block)
end
def self.delete(url = nil, headers = nil, &block)
default_connection.delete(url, headers, &block)
end
def self.in_parallel?
default_connection.in_parallel?
end
def self.in_parallel(manager)
default_connection.in_parallel(manager)
end
def self.proxy(arg = nil)
default_connection.proxy(arg)
end
def self.url_prefix=(url)
default_connection.url_prefix = url
end
def self.path_prefix=(value)
default_connection.path_prefix = value
end
module AutoloadHelper
def register_lookup_modules(mods)
(@lookup_module_index ||= {}).update(mods)

View File

@ -1,5 +1,6 @@
require 'addressable/uri'
require 'set'
require 'base64'
module Faraday
class Connection
@ -68,6 +69,20 @@ module Faraday
run_request :delete, url, nil, headers, &block
end
def basic_auth(login, pass)
@headers['authorization'] = "Basic #{Base64.encode64("#{login}:#{pass}").strip}"
end
def token_auth(token, options = {})
values = ["token=#{token.to_s.inspect}"]
options.each do |key, value|
values << "#{key}=#{value.to_s.inspect}"
end
# 21 = "Authorization: Token ".size
comma = ",\n#{' ' * 21}"
@headers['authorization'] = "Token #{values * comma}"
end
def in_parallel?
!!@parallel_manager
end

View File

@ -52,6 +52,25 @@ class TestConnection < Faraday::TestCase
assert_equal '1', conn.headers['A']
end
def test_basic_auth_sets_authorization_header
conn = Faraday::Connection.new
conn.basic_auth 'Aladdin', 'open sesame'
assert_equal 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==', conn.headers['Authorization']
end
def test_token_auth_sets_authorization_header
conn = Faraday::Connection.new
conn.token_auth 'abcdef'
assert_equal 'Token token="abcdef"', conn.headers['Authorization']
end
def test_token_auth_with_options_sets_authorization_header
conn = Faraday::Connection.new
conn.token_auth 'abcdef', :nonce => 'abc'
assert_equal 'Token token="abcdef",
nonce="abc"', conn.headers['Authorization']
end
def test_build_url_uses_connection_host_as_default_uri_host
conn = Faraday::Connection.new
conn.host = 'sushi.com'