Class: Dommy::Rack::RequestBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/dommy/rack/request_builder.rb

Overview

Builds a Rack-compatible env hash from a high-level request description. Stateless aside from the session config it reads defaults from.

Constant Summary collapse

FORM_URLENCODED =
"application/x-www-form-urlencoded"
BODY_METHODS =
%w[POST PUT PATCH DELETE].freeze

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ RequestBuilder

Returns a new instance of RequestBuilder.



15
16
17
# File 'lib/dommy/rack/request_builder.rb', line 15

def initialize(config)
  @config = config
end

Instance Method Details

#build(method:, url:, headers: {}, body: nil, params: nil, cookie_string: "") ⇒ Object

Raises:

  • (ArgumentError)


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/dommy/rack/request_builder.rb', line 19

def build(method:, url:, headers: {}, body: nil, params: nil, cookie_string: "")
  raise ArgumentError, "pass either :params or :body, not both" if params && body

  verb = method.to_s.upcase
  uri = URI.parse(url)
  env_headers = normalize_headers(headers)

  body_string, query_extra, content_type = encode_payload(verb, params, body, env_headers)
  query = merge_query(uri.query, query_extra)

  env = base_env(verb, uri, query, body_string)
  apply_default_headers(env, env_headers, cookie_string)
  env["CONTENT_TYPE"] = content_type if content_type
  env.merge!(env_headers)
  env
end