Class: FriendlyShipping::HttpClient

Inherits:
Object
  • Object
show all
Includes:
Dry::Monads::Result::Mixin
Defined in:
lib/friendly_shipping/http_client.rb

Overview

A façade for RestClient which constructs requests, wraps responses in Dry::Monad results, and calls the API error handler with failures.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(error_handler: FriendlyShipping::ApiErrorHandler.new) ⇒ HttpClient

Returns a new instance of HttpClient.

Parameters:

  • error_handler (.call) (defaults to: FriendlyShipping::ApiErrorHandler.new)

    called if an API error occurs



19
20
21
# File 'lib/friendly_shipping/http_client.rb', line 19

def initialize(error_handler: FriendlyShipping::ApiErrorHandler.new)
  @error_handler = error_handler
end

Instance Attribute Details

#error_handler.call (readonly)

Returns the API error handler.

Returns:

  • (.call)

    the API error handler



16
17
18
# File 'lib/friendly_shipping/http_client.rb', line 16

def error_handler
  @error_handler
end

Instance Method Details

#delete(request) ⇒ Success<Response>, Failure<ApiFailure>

Makes a DELETE request and handles the response.

Parameters:

  • request (Request)

    the request to DELETE

Returns:



39
40
41
42
43
44
45
# File 'lib/friendly_shipping/http_client.rb', line 39

def delete(request)
  http_response = ::RestClient.delete(request.url, request.headers)

  Success(Response.new_from_rest_client_response(http_response))
rescue ::RestClient::Exception => e
  error_handler.call(e, original_request: request, original_response: e.response)
end

#get(request) ⇒ Success<Response>, Failure<ApiFailure>

Makes a GET request and handles the response.

Parameters:

  • request (Request)

    the request to GET

Returns:



26
27
28
29
30
31
32
33
34
# File 'lib/friendly_shipping/http_client.rb', line 26

def get(request)
  http_response = ::RestClient.get(
    request.url, request.headers
  )

  Success(Response.new_from_rest_client_response(http_response))
rescue ::RestClient::Exception => e
  error_handler.call(e, original_request: request, original_response: e.response)
end

#post(request) ⇒ Success<Response>, Failure<ApiFailure>

Makes a POST request and handles the response.

Parameters:

  • request (Request)

    the request to POST

Returns:



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/friendly_shipping/http_client.rb', line 50

def post(request)
  http_response = ::RestClient.post(
    request.url,
    request.body,
    request.headers
  )

  Success(Response.new_from_rest_client_response(http_response))
rescue ::RestClient::Exception => e
  error_handler.call(e, original_request: request, original_response: e.response)
end

#put(request) ⇒ Success<Response>, Failure<ApiFailure>

Makes a PUT request and handles the response.

Parameters:

  • request (Request)

    the request to PUT

Returns:



65
66
67
68
69
70
71
72
73
74
75
# File 'lib/friendly_shipping/http_client.rb', line 65

def put(request)
  http_response = ::RestClient.put(
    request.url,
    request.body,
    request.headers
  )

  Success(Response.new_from_rest_client_response(http_response))
rescue ::RestClient::Exception => e
  error_handler.call(e, original_request: request, original_response: e.response)
end