Class: Dommy::Rack::RequestBuilder
- Inherits:
-
Object
- Object
- Dommy::Rack::RequestBuilder
- 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
- #build(method:, url:, headers: {}, body: nil, params: nil, cookie_string: "") ⇒ Object
-
#initialize(config) ⇒ RequestBuilder
constructor
A new instance of RequestBuilder.
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
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, ) env["CONTENT_TYPE"] = content_type if content_type env.merge!(env_headers) env end |