Class: FriendlyShipping::Services::UspsInternational

Inherits:
Object
  • Object
show all
Defined in:
lib/friendly_shipping/services/usps_international/rate_estimate_options.rb,
lib/friendly_shipping/services/usps_international.rb,
lib/friendly_shipping/services/usps_international/shipping_methods.rb,
lib/friendly_shipping/services/usps_international/parse_package_rate.rb,
lib/friendly_shipping/services/usps_international/parse_rate_response.rb,
lib/friendly_shipping/services/usps_international/serialize_rate_request.rb,
lib/friendly_shipping/services/usps_international/rate_estimate_package_options.rb

Overview

Options for one package when rating

Defined Under Namespace

Classes: ParsePackageRate, ParseRateResponse, RateEstimateOptions, RateEstimatePackageOptions, SerializeRateRequest

Constant Summary collapse

CONTAINERS =
{
  rectanglular: 'RECTANGULAR',
  roll: 'ROLL',
  variable: 'VARIABLE'
}.freeze
MAIL_TYPES =
{
  all: 'ALL',
  airmail: 'AIRMAIL MBAG',
  envelope: 'ENVELOPE',
  flat_rate: 'FLATRATE',
  letter: 'LETTER',
  large_envelope: 'LARGEENVELOPE',
  package: 'PACKAGE',
  post_cards: 'POSTCARDS'
}.freeze
TEST_URL =
'https://stg-secure.shippingapis.com/ShippingAPI.dll'
LIVE_URL =
'https://secure.shippingapis.com/ShippingAPI.dll'
RESOURCES =
{
  rates: 'IntlRateV2',
}.freeze
SHIPPING_METHODS =
[
  ["1", "Priority Mail Express International"],
  ["2", "Priority Mail International"],
  ["4", "Global Express Guaranteed; (GXG)"],
  ["5", "Global Express Guaranteed; Document"],
  ["6", "Global Express Guarantee; Non-Document Rectangular"],
  ["7", "Global Express Guaranteed; Non-Document Non-Rectangular"],
  ["8", "Priority Mail International; Flat Rate Envelope"],
  ["9", "Priority Mail International; Medium Flat Rate Box"],
  ["10", "Priority Mail Express International; Flat Rate Envelope"],
  ["11", "Priority Mail International; Large Flat Rate Box"],
  ["12", "USPS GXG; Envelopes"],
  ["13", "First-Class Mail; International Letter"],
  ["14", "First-Class Mail; International Large Envelope"],
  ["15", "First-Class Package International Service"],
  ["16", "Priority Mail International; Small Flat Rate Box"],
  ["17", "Priority Mail Express International; Legal Flat Rate Envelope"],
  ["18", "Priority Mail International; Gift Card Flat Rate Envelope"],
  ["19", "Priority Mail International; Window Flat Rate Envelope"],
  ["20", "Priority Mail International; Small Flat Rate Envelope"],
  ["28", "Airmail M-Bag"]
].map do |code, name|
  FriendlyShipping::ShippingMethod.new(
    origin_countries: [Carmen::Country.coded('US')],
    name: name,
    service_code: code,
    domestic: false,
    international: true,
  )
end.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(login:, test: true, client: HttpClient.new) ⇒ UspsInternational

Returns a new instance of UspsInternational.



40
41
42
43
44
# File 'lib/friendly_shipping/services/usps_international.rb', line 40

def initialize(login:, test: true, client: HttpClient.new)
  @login = 
  @test = test
  @client = client
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



14
15
16
# File 'lib/friendly_shipping/services/usps_international.rb', line 14

def client
  @client
end

#loginObject (readonly)

Returns the value of attribute login.



14
15
16
# File 'lib/friendly_shipping/services/usps_international.rb', line 14

def 
  @login
end

#testObject (readonly)

Returns the value of attribute test.



14
15
16
# File 'lib/friendly_shipping/services/usps_international.rb', line 14

def test
  @test
end

Instance Method Details

#rate_estimates(shipment, options: RateEstimateOptions.new, debug: false) ⇒ Result<Array<FriendlyShipping::Rate>>

Get rate estimates from USPS International

Parameters:

Returns:

  • (Result<Array<FriendlyShipping::Rate>>)

    When successfully parsing, an array of rates in a Success Monad. When the parsing is not successful or USPS can’t give us rates, a Failure monad containing something that can be serialized into an error message using ‘to_s`.



55
56
57
58
59
60
61
# File 'lib/friendly_shipping/services/usps_international.rb', line 55

def rate_estimates(shipment, options: RateEstimateOptions.new, debug: false)
  rate_request_xml = SerializeRateRequest.call(shipment: shipment, login: , options: options)
  request = build_request(api: :rates, xml: rate_request_xml, debug: debug)
  client.post(request).bind do |response|
    ParseRateResponse.call(response: response, request: request, shipment: shipment, options: options)
  end
end