Sha256: a126f3f716c9b2737e3300dc38ad5d1f5a268ea8c769d5c2bd7078257c54a00c
Contents?: true
Size: 1.52 KB
Versions: 2
Compression:
Stored size: 1.52 KB
Contents
# frozen_string_literal: true module FriendlyShipping module Services class UpsJson class ParseCityStateLookupResponse extend Dry::Monads::Result::Mixin def self.call(request:, response:) parsed_response = ParseJsonResponse.call( request: request, response: response, expected_root_key: 'XAVResponse' ) parsed_response.bind do |city_state_lookup_response| if city_state_lookup_response['XAVResponse'].keys.include?('NoCandidatesIndicator') Failure( FriendlyShipping::ApiResult.new( "No candidates found.", original_request: request, original_response: response ) ) else candidate = city_state_lookup_response.dig('XAVResponse', 'Candidate').first Success( FriendlyShipping::ApiResult.new( Physical::Location.new( city: candidate.dig('AddressKeyFormat', 'PoliticalDivision2'), region: candidate.dig('AddressKeyFormat', 'PoliticalDivision1'), country: candidate.dig('AddressKeyFormat', 'CountryCode'), zip: candidate.dig('AddressKeyFormat', 'PostcodePrimaryLow') ), original_request: request, original_response: response ) ) end end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems