module Faraday class Request::Authorization < Faraday::Middleware KEY = "Authorization".freeze unless defined? KEY # Public def self.header(type, token) case token when String, Symbol "#{type} #{token}" when Hash build_hash(type.to_s, token) else raise ArgumentError, "Can't build an Authorization #{type} header from #{token.inspect}" end end # Internal def self.build_hash(type, hash) offset = KEY.size + type.size + 3 comma = ",\n#{' ' * offset}" values = [] hash.each do |key, value| values << "#{key}=#{value.to_s.inspect}" end "#{type} #{values * comma}" end def initialize(app, type, token) @header_value = self.class.header(type, token) super(app) end # Public def call(env) unless env.request_headers[KEY] env.request_headers[KEY] = @header_value end @app.call(env) end end end