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

Version Path
friendly_shipping-0.10.1 lib/friendly_shipping/services/ups_json/parse_city_state_lookup_response.rb
friendly_shipping-0.10.0 lib/friendly_shipping/services/ups_json/parse_city_state_lookup_response.rb