Class: FriendlyShipping::Services::USPSShip::ParseTimingsResponse
- Inherits:
-
Object
- Object
- FriendlyShipping::Services::USPSShip::ParseTimingsResponse
- Extended by:
- Dry::Monads::Result::Mixin
- Defined in:
- lib/friendly_shipping/services/usps_ship/parse_timings_response.rb
Class Method Summary collapse
-
.call(request:, response:) ⇒ Success<ApiResult<Array<Timing>>>, Failure<ApiResult<String>>
Parse a timings response.
- .failure(error, request, response) ⇒ Failure<ApiResult>
-
.success(timings, request, response) ⇒ Success<ApiResult<Array<Timing>>]
Success
>].
Class Method Details
.call(request:, response:) ⇒ Success<ApiResult<Array<Timing>>>, Failure<ApiResult<String>>
Parse a timings response.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/friendly_shipping/services/usps_ship/parse_timings_response.rb', line 15 def call(request:, response:) timings = JSON.parse(response.body).map do |timing| shipping_method = SHIPPING_METHODS.detect { |sm| sm.service_code == timing['mailClass'] } # The delivery estimate is blank if an invalid destination zip code was used delivery = timing.dig('delivery', 'scheduledDeliveryDateTime') next unless delivery FriendlyShipping::Timing.new( shipping_method: shipping_method, pickup: Time.parse(timing['acceptanceDateTime']), delivery: Time.parse(delivery), guaranteed: timing['delivery']['guaranteedDelivery'], data: { notes: timing['notes'], service_standard: timing['serviceStandard'], service_standard_message: timing['serviceStandardMessage'] } ) end.compact if timings.empty? failure(api_error("No timings were returned. Is the destination zip correct?"), request, response) else success(timings, request, response) end rescue JSON::ParserError => e failure(e, request, response) end |
.failure(error, request, response) ⇒ Failure<ApiResult>
63 64 65 66 67 68 69 70 71 |
# File 'lib/friendly_shipping/services/usps_ship/parse_timings_response.rb', line 63 def failure(error, request, response) Failure( ApiResult.new( error, original_request: request, original_response: response ) ) end |
.success(timings, request, response) ⇒ Success<ApiResult<Array<Timing>>]
Returns Success
49 50 51 52 53 54 55 56 57 |
# File 'lib/friendly_shipping/services/usps_ship/parse_timings_response.rb', line 49 def success(timings, request, response) Success( ApiResult.new( timings, original_request: request, original_response: response ) ) end |