friendly_shipping 0.10.0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/README.md +16 -16
- data/lib/friendly_shipping/services/rl/parse_rate_quote_response.rb +3 -3
- data/lib/friendly_shipping/services/ups_json/parse_money_hash.rb +1 -0
- data/lib/friendly_shipping/services/usps_international/parse_rate_response.rb +3 -3
- data/lib/friendly_shipping/services/{usps → usps_international}/parse_xml_response.rb +1 -1
- data/lib/friendly_shipping/services/usps_international/serialize_rate_request.rb +1 -1
- data/lib/friendly_shipping/services/usps_ship/parse_rate_estimates_response.rb +1 -1
- data/lib/friendly_shipping/version.rb +1 -1
- metadata +3 -52
- data/lib/friendly_shipping/inflections.rb +0 -10
- data/lib/friendly_shipping/services/ups/label.rb +0 -20
- data/lib/friendly_shipping/services/ups/label_billing_options.rb +0 -41
- data/lib/friendly_shipping/services/ups/label_item_options.rb +0 -75
- data/lib/friendly_shipping/services/ups/label_options.rb +0 -174
- data/lib/friendly_shipping/services/ups/label_package_options.rb +0 -49
- data/lib/friendly_shipping/services/ups/parse_address_classification_response.rb +0 -29
- data/lib/friendly_shipping/services/ups/parse_address_validation_response.rb +0 -53
- data/lib/friendly_shipping/services/ups/parse_city_state_lookup_response.rb +0 -33
- data/lib/friendly_shipping/services/ups/parse_modifier_element.rb +0 -29
- data/lib/friendly_shipping/services/ups/parse_money_element.rb +0 -128
- data/lib/friendly_shipping/services/ups/parse_rate_response.rb +0 -101
- data/lib/friendly_shipping/services/ups/parse_shipment_accept_response.rb +0 -77
- data/lib/friendly_shipping/services/ups/parse_shipment_confirm_response.rb +0 -24
- data/lib/friendly_shipping/services/ups/parse_time_in_transit_response.rb +0 -56
- data/lib/friendly_shipping/services/ups/parse_void_shipment_response.rb +0 -24
- data/lib/friendly_shipping/services/ups/parse_xml_response.rb +0 -50
- data/lib/friendly_shipping/services/ups/rate_estimate_options.rb +0 -111
- data/lib/friendly_shipping/services/ups/rate_estimate_package_options.rb +0 -22
- data/lib/friendly_shipping/services/ups/serialize_access_request.rb +0 -20
- data/lib/friendly_shipping/services/ups/serialize_address_snippet.rb +0 -60
- data/lib/friendly_shipping/services/ups/serialize_address_validation_request.rb +0 -40
- data/lib/friendly_shipping/services/ups/serialize_city_state_lookup_request.rb +0 -26
- data/lib/friendly_shipping/services/ups/serialize_package_node.rb +0 -75
- data/lib/friendly_shipping/services/ups/serialize_rating_service_selection_request.rb +0 -98
- data/lib/friendly_shipping/services/ups/serialize_shipment_accept_request.rb +0 -27
- data/lib/friendly_shipping/services/ups/serialize_shipment_address_snippet.rb +0 -21
- data/lib/friendly_shipping/services/ups/serialize_shipment_confirm_request.rb +0 -285
- data/lib/friendly_shipping/services/ups/serialize_time_in_transit_request.rb +0 -56
- data/lib/friendly_shipping/services/ups/serialize_void_shipment_request.rb +0 -21
- data/lib/friendly_shipping/services/ups/shipping_methods.rb +0 -111
- data/lib/friendly_shipping/services/ups/timing_options.rb +0 -33
- data/lib/friendly_shipping/services/ups.rb +0 -218
- data/lib/friendly_shipping/services/usps/choose_package_rate.rb +0 -40
- data/lib/friendly_shipping/services/usps/machinable_package.rb +0 -50
- data/lib/friendly_shipping/services/usps/parse_address_validation_response.rb +0 -43
- data/lib/friendly_shipping/services/usps/parse_city_state_lookup_response.rb +0 -41
- data/lib/friendly_shipping/services/usps/parse_package_rate.rb +0 -159
- data/lib/friendly_shipping/services/usps/parse_rate_response.rb +0 -86
- data/lib/friendly_shipping/services/usps/parse_time_in_transit_response.rb +0 -240
- data/lib/friendly_shipping/services/usps/rate_estimate_options.rb +0 -26
- data/lib/friendly_shipping/services/usps/rate_estimate_package_options.rb +0 -66
- data/lib/friendly_shipping/services/usps/serialize_address_validation_request.rb +0 -25
- data/lib/friendly_shipping/services/usps/serialize_city_state_lookup_request.rb +0 -20
- data/lib/friendly_shipping/services/usps/serialize_rate_request.rb +0 -83
- data/lib/friendly_shipping/services/usps/serialize_time_in_transit_request.rb +0 -22
- data/lib/friendly_shipping/services/usps/shipping_methods.rb +0 -66
- data/lib/friendly_shipping/services/usps/timing_options.rb +0 -19
- data/lib/friendly_shipping/services/usps.rb +0 -115
@@ -1,115 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'nokogiri'
|
4
|
-
|
5
|
-
module FriendlyShipping
|
6
|
-
module Services
|
7
|
-
class Usps
|
8
|
-
include Dry::Monads::Result::Mixin
|
9
|
-
|
10
|
-
attr_reader :test, :login, :client
|
11
|
-
|
12
|
-
CARRIER = FriendlyShipping::Carrier.new(
|
13
|
-
id: 'usps',
|
14
|
-
name: 'United States Postal Service',
|
15
|
-
code: 'usps',
|
16
|
-
shipping_methods: SHIPPING_METHODS
|
17
|
-
)
|
18
|
-
|
19
|
-
TEST_URL = 'https://stg-secure.shippingapis.com/ShippingAPI.dll'
|
20
|
-
LIVE_URL = 'https://secure.shippingapis.com/ShippingAPI.dll'
|
21
|
-
|
22
|
-
RESOURCES = {
|
23
|
-
address_validation: 'Verify',
|
24
|
-
city_state_lookup: 'CityStateLookup',
|
25
|
-
rates: 'RateV4',
|
26
|
-
timings: 'SDCGetLocations'
|
27
|
-
}.freeze
|
28
|
-
|
29
|
-
def initialize(login:, test: true, client: HttpClient.new)
|
30
|
-
@login = login
|
31
|
-
@test = test
|
32
|
-
@client = client
|
33
|
-
end
|
34
|
-
|
35
|
-
def carriers
|
36
|
-
Success([CARRIER])
|
37
|
-
end
|
38
|
-
|
39
|
-
# Get rate estimates from USPS
|
40
|
-
#
|
41
|
-
# @param [Physical::Shipment] shipment
|
42
|
-
# @param [FriendlyShipping::Services::Usps::RateEstimateOptions] options What options
|
43
|
-
# to use for this rate estimate call
|
44
|
-
#
|
45
|
-
# @return [Result<Array<FriendlyShipping::Rate>>] When successfully parsing, an array of rates in a Success Monad.
|
46
|
-
# When the parsing is not successful or USPS can't give us rates, a Failure monad containing something that
|
47
|
-
# can be serialized into an error message using `to_s`.
|
48
|
-
def rate_estimates(shipment, options: RateEstimateOptions.new, debug: false)
|
49
|
-
rate_request_xml = SerializeRateRequest.call(shipment: shipment, login: login, options: options)
|
50
|
-
request = build_request(api: :rates, xml: rate_request_xml, debug: debug)
|
51
|
-
|
52
|
-
client.post(request).bind do |response|
|
53
|
-
ParseRateResponse.call(response: response, request: request, shipment: shipment, options: options)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
# Get timing estimates from USPS
|
58
|
-
#
|
59
|
-
# @param [Physical::Shipment] shipment The shipment we want to estimate. Only destination zip and origin zip are used.
|
60
|
-
# @param [FriendlyShipping::Services::Usps::TimingOptions] options Options for the timing estimate call
|
61
|
-
def timings(shipment, options:, debug: false)
|
62
|
-
timings_request_xml = SerializeTimeInTransitRequest.call(shipment: shipment, options: options, login: login)
|
63
|
-
request = build_request(api: :timings, xml: timings_request_xml, debug: debug)
|
64
|
-
|
65
|
-
client.post(request).bind do |response|
|
66
|
-
ParseTimeInTransitResponse.call(response: response, request: request)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
# Validate an address.
|
71
|
-
# @param [Physical::Location] location The address we want to verify
|
72
|
-
# @return [Result<ApiResult<Array<Physical::Location>>>] The response data from UPS encoded in a
|
73
|
-
# `Physical::Location` object. Name and Company name are always nil, the
|
74
|
-
# address lines will be made conformant to what USPS considers right. The returned location will
|
75
|
-
# have the address_type set if possible.
|
76
|
-
def address_validation(location, debug: false)
|
77
|
-
address_validation_request_xml = SerializeAddressValidationRequest.call(location: location, login: login)
|
78
|
-
request = build_request(api: :address_validation, xml: address_validation_request_xml, debug: debug)
|
79
|
-
|
80
|
-
client.post(request).bind do |response|
|
81
|
-
ParseAddressValidationResponse.call(response: response, request: request)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
# Find city and state for a given ZIP code
|
86
|
-
# @param [Physical::Location] location A location object with country and ZIP code set
|
87
|
-
# @return [Result<ApiResult<Array<Physical::Location>>>] The response data from USPS encoded in a
|
88
|
-
# `Physical::Location` object. Country, City and ZIP code will be set, everything else nil.
|
89
|
-
def city_state_lookup(location, debug: false)
|
90
|
-
city_state_lookup_request_xml = SerializeCityStateLookupRequest.call(location: location, login: login)
|
91
|
-
request = build_request(api: :city_state_lookup, xml: city_state_lookup_request_xml, debug: debug)
|
92
|
-
|
93
|
-
client.post(request).bind do |response|
|
94
|
-
ParseCityStateLookupResponse.call(response: response, request: request)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
private
|
99
|
-
|
100
|
-
def build_request(api:, xml:, debug:)
|
101
|
-
FriendlyShipping::Request.new(
|
102
|
-
url: base_url,
|
103
|
-
http_method: "POST",
|
104
|
-
body: "API=#{RESOURCES[api]}&XML=#{CGI.escape xml}",
|
105
|
-
readable_body: xml,
|
106
|
-
debug: debug
|
107
|
-
)
|
108
|
-
end
|
109
|
-
|
110
|
-
def base_url
|
111
|
-
test ? TEST_URL : LIVE_URL
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|