+++ /dev/null
-module Faraday
- # Used to setup urls, params, headers, and the request body in a sane manner.
- #
- # @connection.post do |req|
- # req.url 'http://localhost', 'a' => '1' # 'http://localhost?a=1'
- # req.headers['b'] = '2' # Header
- # req.params['c'] = '3' # GET Param
- # req['b'] = '2' # also Header
- # req.body = 'abc'
- # end
- #
- class Request < Struct.new(:method, :path, :params, :headers, :body, :options)
- extend MiddlewareRegistry
-
- register_middleware File.expand_path('../request', __FILE__),
- :url_encoded => [:UrlEncoded, 'url_encoded'],
- :multipart => [:Multipart, 'multipart'],
- :retry => [:Retry, 'retry'],
- :authorization => [:Authorization, 'authorization'],
- :basic_auth => [:BasicAuthentication, 'basic_authentication'],
- :token_auth => [:TokenAuthentication, 'token_authentication'],
- :instrumentation => [:Instrumentation, 'instrumentation']
-
- def self.create(request_method)
- new(request_method).tap do |request|
- yield(request) if block_given?
- end
- end
-
- # Public: Replace params, preserving the existing hash type
- def params=(hash)
- if params
- params.replace hash
- else
- super
- end
- end
-
- # Public: Replace request headers, preserving the existing hash type
- def headers=(hash)
- if headers
- headers.replace hash
- else
- super
- end
- end
-
- def url(path, params = nil)
- if path.respond_to? :query
- if query = path.query
- path = path.dup
- path.query = nil
- end
- else
- path, query = path.split('?', 2)
- end
- self.path = path
- self.params.merge_query query, options.params_encoder
- self.params.update(params) if params
- end
-
- def [](key)
- headers[key]
- end
-
- def []=(key, value)
- headers[key] = value
- end
-
- # ENV Keys
- # :method - a symbolized request method (:get, :post)
- # :body - the request body that will eventually be converted to a string.
- # :url - URI instance for the current request.
- # :status - HTTP response status code
- # :request_headers - hash of HTTP Headers to be sent to the server
- # :response_headers - Hash of HTTP headers from the server
- # :parallel_manager - sent if the connection is in parallel mode
- # :request - Hash of options for configuring the request.
- # :timeout - open/read timeout Integer in seconds
- # :open_timeout - read timeout Integer in seconds
- # :proxy - Hash of proxy options
- # :uri - Proxy Server URI
- # :user - Proxy server username
- # :password - Proxy server password
- # :ssl - Hash of options for configuring SSL requests.
- def to_env(connection)
- Env.new(method, body, connection.build_exclusive_url(path, params),
- options, headers, connection.ssl, connection.parallel_manager)
- end
- end
-end
-