Class: Saddle::Middleware::Request::UrlEncoded

Inherits:
Faraday::Middleware
  • Object
show all
Defined in:
lib/saddle/middleware/request/url_encoded.rb

Overview

Make sure you set request = :urlencoded for it to be activated.

Constant Summary collapse

CONTENT_TYPE =
'Content-Type'.freeze
URL_ENCODED_MIME_TYPE =
'application/x-www-form-urlencoded'.freeze
MULTIPART_MIME_TYPE =
'multipart/form-data'.freeze
VALID_MIME_TYPES =
[URL_ENCODED_MIME_TYPE, MULTIPART_MIME_TYPE]
DEFAULT_MULTIPART_BOUNDARY =
"-^---_---^-".freeze

Instance Method Summary collapse

Instance Method Details

#call(env) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/saddle/middleware/request/url_encoded.rb', line 26

def call(env)
  if env[:request][:request_style] == :urlencoded
    # Make sure we're working with a valid body that's not a String
    if env[:body] and !env[:body].respond_to?(:to_str)
      if has_multipart?(env[:body])
        env[:request][:boundary] ||= DEFAULT_MULTIPART_BOUNDARY
        env[:request_headers][CONTENT_TYPE] ||= MULTIPART_MIME_TYPE
        env[:request_headers][CONTENT_TYPE] += ";boundary=#{env[:request][:boundary]}"
        env[:body] = create_multipart(env, env[:body])
      else
        env[:request_headers][CONTENT_TYPE] ||= URL_ENCODED_MIME_TYPE
        env[:body] = Faraday::Utils::ParamsHash[env[:body]].to_query
      end
    end
  end
  @app.call env
end