Sha256: da14d5ca5311358880ca0afa7664dda8c0f0de06548c4e89a29f950546b70df8

Contents?: true

Size: 1.29 KB

Versions: 21

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true

module FriendlyShipping
  module Services
    class Usps
      class ParseCityStateLookupResponse
        class << self
          # Parse a response from USPS' city/state lookup API
          #
          # @param [FriendlyShipping::Request] request The request that was used to obtain this Response
          # @param [FriendlyShipping::Response] response The response that USPS returned
          # @return [Result<FriendlyShipping::AddressValidationResult>]
          def call(request:, response:)
            # Filter out error responses and directly return a failure
            parsing_result = ParseXMLResponse.call(response.body, 'CityStateLookupResponse')
            parsing_result.fmap do |xml|
              address = xml.root.at('ZipCode')
              suggestions = [
                Physical::Location.new(
                  city: address&.at('City')&.text,
                  region: address&.at('State')&.text,
                  zip: address&.at('Zip5')&.text,
                  country: 'US'
                )
              ]
              FriendlyShipping::ApiResult.new(
                suggestions,
                original_request: request,
                original_response: response,
              )
            end
          end
        end
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
friendly_shipping-0.5.2 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.5.1 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.5 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.14 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.13 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.12 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.11 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.10 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.9 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.8 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.7 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.6 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.5 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.4 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.3 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.2 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.1 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.4.0 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.3.4 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb
friendly_shipping-0.3.3 lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb