Class: FriendlyShipping::Services::USPSShip::ParseCityStateResponse

Inherits:
Object
  • Object
show all
Extended by:
Dry::Monads::Result::Mixin
Defined in:
lib/friendly_shipping/services/usps_ship/parse_city_state_response.rb

Constant Summary collapse

USA =
Carmen::Country.coded("USA")

Class Method Summary collapse

Class Method Details

.call(request:, response:) ⇒ Success<ApiResult<Physical::Location>>, Failure<ApiResult<String>>

Parse a city/state response.

Parameters:

  • request (Request)

    the request that was used to obtain this response

  • response (Response)

    the response that USPS returned

Returns:



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/friendly_shipping/services/usps_ship/parse_city_state_response.rb', line 16

def call(request:, response:)
  city_state = JSON.parse(response.body)

  if city_state['error']
    failure(
      api_error("Error: #{city_state.dig('error', 'message')}"),
      request,
      response
    )
  else
    success(
      Physical::Location.new(
        city: city_state['city'],
        region: city_state['state'],
        zip: city_state['ZIPCode'],
        country: USA
      ),
      request,
      response
    )
  end
rescue JSON::ParserError => e
  failure(e, request, response)
end

.failure(error, request, response) ⇒ Failure<ApiResult>

Parameters:

Returns:



59
60
61
62
63
64
65
66
67
# File 'lib/friendly_shipping/services/usps_ship/parse_city_state_response.rb', line 59

def failure(error, request, response)
  Failure(
    ApiResult.new(
      error,
      original_request: request,
      original_response: response
    )
  )
end

.success(location, request, response) ⇒ Success<ApiResult<Physical::Location>>

Parameters:

Returns:



45
46
47
48
49
50
51
52
53
# File 'lib/friendly_shipping/services/usps_ship/parse_city_state_response.rb', line 45

def success(location, request, response)
  Success(
    ApiResult.new(
      location,
      original_request: request,
      original_response: response
    )
  )
end