Class: HTTP::Request::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/http/request/builder.rb

Overview

Builds HTTP::Request objects from resolved options

Examples:

Build a request from options

options = HTTP::Options.new(headers: {"Accept" => "application/json"})
builder = HTTP::Request::Builder.new(options)
request = builder.build(:get, "https://example.com")

See Also:

Constant Summary collapse

HTTP_OR_HTTPS_RE =

Pattern matching HTTP or HTTPS URI schemes

%r{\Ahttps?://}i

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ HTTP::Request::Builder

Initialize a new Request Builder

Examples:

HTTP::Request::Builder.new(HTTP::Options.new)

Parameters:



32
33
34
# File 'lib/http/request/builder.rb', line 32

def initialize(options)
  @options = options
end

Instance Method Details

#build(verb, uri) ⇒ HTTP::Request

Build an HTTP request

Examples:

builder.build(:get, "https://example.com")

Parameters:

  • verb (Symbol)

    the HTTP method

  • uri (#to_s)

    the URI to request

Returns:



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/http/request/builder.rb', line 45

def build(verb, uri)
  uri     = make_request_uri(uri)
  headers = make_request_headers
  body    = make_request_body(headers)

  req = HTTP::Request.new(
    verb:           verb,
    uri:            uri,
    uri_normalizer: @options.feature(:normalize_uri)&.normalizer,
    proxy:          @options.proxy,
    headers:        headers,
    body:           body
  )

  wrap(req)
end

#wrap(request) ⇒ HTTP::Request

Wrap a request through feature middleware

Examples:

builder.wrap(redirect_request)

Parameters:

Returns:



70
71
72
73
74
# File 'lib/http/request/builder.rb', line 70

def wrap(request)
  @options.features.inject(request) do |req, (_name, feature)|
    feature.wrap_request(req)
  end
end