Class: Scaled::HTTP

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

Overview

Low-level HTTP wrapper for Tailscale API requests. Низькорівневий HTTP-обгортка для запитів до Tailscale API.

Constant Summary collapse

DEFAULT_BASE_URL =
"https://api.tailscale.com/api/v2"

Instance Method Summary collapse

Constructor Details

#initialize(auth:, base_url: DEFAULT_BASE_URL, open_timeout: 5, read_timeout: 30, user_agent: "scaled-ruby") ⇒ void

Note: ‘auth` must respond to `apply(headers)`. Нотатка: `auth` має підтримувати метод `apply(headers)`.

Parameters:

  • auth (#apply)

    authentication strategy object

  • base_url (String) (defaults to: DEFAULT_BASE_URL)

    API base URL

  • open_timeout (Numeric) (defaults to: 5)

    connection timeout seconds

  • read_timeout (Numeric) (defaults to: 30)

    read timeout seconds

  • user_agent (String) (defaults to: "scaled-ruby")

    value for User-Agent header



21
22
23
24
25
26
27
# File 'lib/scaled/http.rb', line 21

def initialize(auth:, base_url: DEFAULT_BASE_URL, open_timeout: 5, read_timeout: 30, user_agent: "scaled-ruby")
  @auth = auth
  @base_url = base_url
  @open_timeout = open_timeout
  @read_timeout = read_timeout
  @user_agent = user_agent
end

Instance Method Details

#request(method:, path:, query: nil, body: nil, headers: {}) ⇒ Hash, ...

Note: raises specialized Scaled errors for non-2xx responses. Нотатка: для не-2xx відповідей піднімає спеціалізовані помилки Scaled.

Parameters:

  • method (Symbol, String)

    HTTP method (:get, :post, …)

  • path (String)

    endpoint path beginning with /

  • query (Hash, nil) (defaults to: nil)

    query params (nil values are dropped)

  • body (Hash, Array, nil) (defaults to: nil)

    JSON-serializable request body

  • headers (Hash{String => String}) (defaults to: {})

    extra request headers

Returns:

  • (Hash, Array, String, nil)

    parsed response body



37
38
39
40
41
# File 'lib/scaled/http.rb', line 37

def request(method:, path:, query: nil, body: nil, headers: {})
  uri = build_uri(path, query)
  http_response = perform_request(method: method, uri: uri, body: body, headers: headers)
  parse_or_raise(http_response)
end