Module: HttpResource

Defined in:
lib/http_resource.rb,
lib/http_resource/auth.rb,
lib/http_resource/client.rb,
lib/http_resource/errors.rb,
lib/http_resource/version.rb,
lib/http_resource/resource.rb,
lib/http_resource/auth/basic.rb,
lib/http_resource/auth/bearer.rb,
lib/http_resource/auth/header.rb,
lib/http_resource/value_object.rb,
lib/http_resource/configuration.rb

Overview

A small, zero-dependency framework for building typed REST-resource clients on top of Net::HTTP. Bring a base_url + an auth strategy; get a Net::HTTP transport with a typed error hierarchy, bang/non-bang resources, per-call timeouts and escape-safe URL building.

Build a client directly:

client = HttpResource::Client.new(base_url: "https://api.example.org",
                                  auth: HttpResource::Auth.bearer(token))

…or configure a process-wide default:

HttpResource.configure do |c|
  c.base_url = ENV.fetch("API_URL")
  c.auth = HttpResource::Auth.basic(ENV.fetch("API_USER"), ENV.fetch("API_PASS"))
end
HttpResource.client.get(["api", "ping"])

Defined Under Namespace

Modules: Auth, Expected, ValueObject Classes: ApiError, AuthError, Client, ClientError, Configuration, ConfigurationError, ConnectionError, Error, NotFoundError, RedirectError, Resource, ServerError, TimeoutError, TransportError, ValidationError

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.build_client(base_url: configuration.base_url, auth: configuration.auth, open_timeout: configuration.open_timeout, read_timeout: configuration.read_timeout) ⇒ Object

Build a fresh, independent client. Defaults to the configured base_url/auth, but every option can be overridden per call — handy for talking to more than one host without a global default.



49
50
51
52
# File 'lib/http_resource.rb', line 49

def build_client(base_url: configuration.base_url, auth: configuration.auth,
                 open_timeout: configuration.open_timeout, read_timeout: configuration.read_timeout)
  Client.new(base_url:, auth:, open_timeout:, read_timeout:)
end

.clientObject

The memoized default client, built from ‘configuration`.



42
43
44
# File 'lib/http_resource.rb', line 42

def client
  @client ||= build_client
end

.configurationObject



37
38
39
# File 'lib/http_resource.rb', line 37

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Configure the process-wide default client, then (re)build it.

Yields:



31
32
33
34
35
# File 'lib/http_resource.rb', line 31

def configure
  yield configuration
  @client = build_client
  configuration
end

.reset!Object

Drop the memoized config + client (mainly for tests / reconfiguration).



55
56
57
58
# File 'lib/http_resource.rb', line 55

def reset!
  @configuration = nil
  @client = nil
end