Class: NxtHttpClient::Client

Inherits:
Object
  • Object
show all
Extended by:
ClientDsl
Defined in:
lib/nxt_http_client/client.rb,
lib/nxt_http_client/client/batch_patch.rb

Overview

The entry point to this gem. The Client class is designed to be extended into custom base classes, but you can also create a one-off instance with the ‘.make` method.`

Defined Under Namespace

Modules: BatchPatch

Constant Summary collapse

CACHE_STRATEGIES =
%w[global thread].freeze
HTTP_METHODS =
%w[get post patch put delete head].freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ClientDsl

after_fire, around_fire, before_fire, clear_fire_callbacks, configure, log, response_handler

Class Method Details

.make(&block) ⇒ Object

Get an anonymous client for one-off use. Example:

client = NxtHttpClient::Client.make do
  configure do |config|
    config.base_url = 'www.httpstat.us'
  end
end
client.get('200')


18
19
20
# File 'lib/nxt_http_client/client.rb', line 18

def self.make(&block)
  Class.new(self, &block).new
end

Instance Method Details

#build_request(url, **opts) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/nxt_http_client/client.rb', line 22

def build_request(url, **opts)
  url = build_url(opts, url)
  opts = build_headers(opts)

  set_timeouts(opts)

  if config.json_request
    opts[:body] = opts[:body].to_json # Typhoeus requires userland JSON encoding
  end

  Typhoeus::Request.new(url, **opts.symbolize_keys)
end

#fire(url = '', **opts, &block) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/nxt_http_client/client.rb', line 35

def fire(url = '', **opts, &block)
  response_handler = build_response_handler(opts[:response_handler], &block)
  request = build_request(url, **opts.except(:response_handler))

  current_error = nil
  result = nil

  setup_on_headers_callback(request, response_handler)
  setup_on_body_callback(request, response_handler)

  request.on_complete do |response|
    result = callback_or_response(response, response_handler)
  end

  run_before_fire_callbacks(request, response_handler)

  run_around_fire_callbacks(request, response_handler) do
    request.run
  rescue StandardError => error
    current_error = error
  end

  result = run_after_fire_callbacks(request, request.response, result, current_error)
  result || (raise current_error if current_error)

  result
end