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<ApiFailure<String>>
Parse a timings response.
Class Method Details
.call(request:, response:) ⇒ Success<ApiResult<Array<Timing>>>, Failure<ApiFailure<String>>
Parse a timings response.
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 44 45 |
# File 'lib/friendly_shipping/services/usps_ship/parse_timings_response.rb', line 17 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("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 |