friendly_shipping 0.3.4 → 0.4.0
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/.env.template +1 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +13 -4
- data/Gemfile +1 -0
- data/README.md +21 -2
- data/friendly_shipping.gemspec +1 -1
- data/lib/friendly_shipping/api_failure.rb +3 -0
- data/lib/friendly_shipping/api_result.rb +3 -0
- data/lib/friendly_shipping/carrier.rb +6 -0
- data/lib/friendly_shipping/http_client.rb +1 -0
- data/lib/friendly_shipping/item_options.rb +11 -0
- data/lib/friendly_shipping/label.rb +17 -9
- data/lib/friendly_shipping/package_options.rb +28 -0
- data/lib/friendly_shipping/rate.rb +9 -8
- data/lib/friendly_shipping/request.rb +4 -0
- data/lib/friendly_shipping/response.rb +3 -0
- data/lib/friendly_shipping/services/ship_engine.rb +10 -11
- data/lib/friendly_shipping/services/ship_engine/label_options.rb +34 -0
- data/lib/friendly_shipping/services/ship_engine/label_package_options.rb +28 -0
- data/lib/friendly_shipping/services/ship_engine/parse_label_response.rb +6 -1
- data/lib/friendly_shipping/services/ship_engine/parse_rate_estimate_response.rb +7 -7
- data/lib/friendly_shipping/services/ship_engine/rate_estimates_options.rb +25 -0
- data/lib/friendly_shipping/services/ship_engine/serialize_label_shipment.rb +15 -14
- data/lib/friendly_shipping/services/ship_engine/serialize_rate_estimate_request.rb +2 -2
- data/lib/friendly_shipping/services/ups.rb +47 -2
- data/lib/friendly_shipping/services/ups/label_billing_options.rb +41 -0
- data/lib/friendly_shipping/services/ups/label_item_options.rb +74 -0
- data/lib/friendly_shipping/services/ups/label_options.rb +165 -0
- data/lib/friendly_shipping/services/ups/label_package_options.rb +43 -0
- data/lib/friendly_shipping/services/ups/parse_money_element.rb +128 -0
- data/lib/friendly_shipping/services/ups/parse_rate_response.rb +8 -7
- data/lib/friendly_shipping/services/ups/parse_shipment_accept_response.rb +75 -0
- data/lib/friendly_shipping/services/ups/parse_shipment_confirm_response.rb +22 -0
- data/lib/friendly_shipping/services/ups/parse_xml_response.rb +2 -1
- data/lib/friendly_shipping/services/ups/serialize_address_snippet.rb +11 -6
- data/lib/friendly_shipping/services/ups/serialize_package_node.rb +21 -6
- data/lib/friendly_shipping/services/ups/serialize_shipment_accept_request.rb +27 -0
- data/lib/friendly_shipping/services/ups/serialize_shipment_address_snippet.rb +21 -0
- data/lib/friendly_shipping/services/ups/serialize_shipment_confirm_request.rb +282 -0
- data/lib/friendly_shipping/services/ups_freight.rb +76 -0
- data/lib/friendly_shipping/services/ups_freight/generate_commodity_information.rb +33 -0
- data/lib/friendly_shipping/services/ups_freight/generate_freight_rate_request_hash.rb +72 -0
- data/lib/friendly_shipping/services/ups_freight/generate_location_hash.rb +39 -0
- data/lib/friendly_shipping/services/ups_freight/generate_ups_security_hash.rb +23 -0
- data/lib/friendly_shipping/services/ups_freight/parse_freight_rate_response.rb +53 -0
- data/lib/friendly_shipping/services/ups_freight/parse_json_response.rb +38 -0
- data/lib/friendly_shipping/services/ups_freight/rates_item_options.rb +72 -0
- data/lib/friendly_shipping/services/ups_freight/rates_options.rb +54 -0
- data/lib/friendly_shipping/services/ups_freight/rates_package_options.rb +38 -0
- data/lib/friendly_shipping/services/ups_freight/shipping_methods.rb +25 -0
- data/lib/friendly_shipping/services/usps.rb +1 -1
- data/lib/friendly_shipping/services/usps/parse_xml_response.rb +1 -1
- data/lib/friendly_shipping/services/usps/serialize_rate_request.rb +0 -4
- data/lib/friendly_shipping/shipment_options.rb +23 -0
- data/lib/friendly_shipping/shipping_method.rb +7 -0
- data/lib/friendly_shipping/version.rb +1 -1
- metadata +33 -6
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'friendly_shipping/services/ups_freight/rates_item_options'
|
4
|
+
|
5
|
+
module FriendlyShipping
|
6
|
+
module Services
|
7
|
+
class UpsFreight
|
8
|
+
# Options for packages/pallets within a UPS Freight shipment
|
9
|
+
#
|
10
|
+
# @attribute [Symbol] handling _unit How this shipment is divided. Any of the keys in `HANDLING_UNIT_TYPES`
|
11
|
+
# @attribute [RatesItemOptions] item_options Options for each of the items on the pallet/in the carboy/etc.
|
12
|
+
class RatesPackageOptions < FriendlyShipping::PackageOptions
|
13
|
+
HANDLING_UNIT_TYPES = {
|
14
|
+
pallet: { code: "PLT", description: "Pallet", handling_unit_tag: 'One' },
|
15
|
+
skid: { code: "SKD", description: "Skid", handling_unit_tag: 'One' },
|
16
|
+
carboy: { code: "CBY", description: "Carboy", handling_unit_tag: 'One' },
|
17
|
+
totes: { code: "TOT", description: "Totes", handling_unit_tag: 'One' },
|
18
|
+
other: { code: "OTH", description: "Other", handling_unit_tag: 'Two' },
|
19
|
+
loose: { code: "LOO", description: "Loose", handling_unit_tag: 'Two' }
|
20
|
+
}.freeze
|
21
|
+
|
22
|
+
attr_reader :handling_unit_description,
|
23
|
+
:handling_unit_tag,
|
24
|
+
:handling_unit_code
|
25
|
+
|
26
|
+
def initialize(
|
27
|
+
handling_unit: :pallet,
|
28
|
+
**kwargs
|
29
|
+
)
|
30
|
+
@handling_unit_code = HANDLING_UNIT_TYPES.fetch(handling_unit).fetch(:code)
|
31
|
+
@handling_unit_description = HANDLING_UNIT_TYPES.fetch(handling_unit).fetch(:description)
|
32
|
+
@handling_unit_tag = "HandlingUnit#{HANDLING_UNIT_TYPES.fetch(handling_unit).fetch(:handling_unit_tag)}"
|
33
|
+
super kwargs.merge(item_options_class: RatesItemOptions)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FriendlyShipping
|
4
|
+
module Services
|
5
|
+
class UpsFreight
|
6
|
+
ORIGIN_COUNTRIES = %w(
|
7
|
+
CA MX PR US
|
8
|
+
).map { |country_code| Carmen::Country.coded(country_code) }.freeze
|
9
|
+
|
10
|
+
SHIPPING_METHODS = [
|
11
|
+
['308', 'UPS Freight LTL'],
|
12
|
+
['309', 'UPS Freight LTL - Guaranteed'],
|
13
|
+
['334', 'UPS Freight LTL - Guaranteed A.M.'],
|
14
|
+
['349', 'UPS Standard LTL']
|
15
|
+
].freeze.map do |code, name|
|
16
|
+
FriendlyShipping::ShippingMethod.new(
|
17
|
+
name: name,
|
18
|
+
service_code: code,
|
19
|
+
origin_countries: ORIGIN_COUNTRIES,
|
20
|
+
multi_package: true
|
21
|
+
).freeze
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -59,7 +59,7 @@ module FriendlyShipping
|
|
59
59
|
# can be serialized into an error message using `to_s`.
|
60
60
|
def rate_estimates(shipment, shipping_method: nil, debug: false)
|
61
61
|
rate_request_xml = SerializeRateRequest.call(shipment: shipment, login: login, shipping_method: shipping_method)
|
62
|
-
request = build_request(api: :
|
62
|
+
request = build_request(api: :rates, xml: rate_request_xml, debug: debug)
|
63
63
|
|
64
64
|
client.post(request).bind do |response|
|
65
65
|
ParseRateResponse.call(response: response, request: request, shipment: shipment)
|
@@ -9,7 +9,7 @@ module FriendlyShipping
|
|
9
9
|
|
10
10
|
class << self
|
11
11
|
def call(response_body, expected_root_tag)
|
12
|
-
xml = Nokogiri.XML(response_body)
|
12
|
+
xml = Nokogiri.XML(response_body, &:strict)
|
13
13
|
|
14
14
|
if xml.root.nil? || ![expected_root_tag, 'Error'].include?(xml.root.name)
|
15
15
|
Failure('Invalid document')
|
@@ -74,10 +74,6 @@ module FriendlyShipping
|
|
74
74
|
ounces == 16 ? 15.999 : [ounces, 1].max
|
75
75
|
end
|
76
76
|
|
77
|
-
def strip_zip(zip)
|
78
|
-
zip.to_s.scan(/\d{5}/).first || zip
|
79
|
-
end
|
80
|
-
|
81
77
|
def girth(package)
|
82
78
|
width, length = package.dimensions.sort.first(2)
|
83
79
|
(width.scale(2) + length.scale(2)).convert_to(:inches).value.to_f
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FriendlyShipping
|
4
|
+
class ShipmentOptions
|
5
|
+
def initialize(
|
6
|
+
package_options: Set.new,
|
7
|
+
package_options_class: PackageOptions
|
8
|
+
)
|
9
|
+
@package_options = package_options
|
10
|
+
@package_options_class = package_options_class
|
11
|
+
end
|
12
|
+
|
13
|
+
def options_for_package(package)
|
14
|
+
package_options.detect do |package_option|
|
15
|
+
package_option.package_id == package.id
|
16
|
+
end || package_options_class.new(package_id: nil)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_reader :package_options, :package_options_class
|
22
|
+
end
|
23
|
+
end
|
@@ -4,6 +4,13 @@ module FriendlyShipping
|
|
4
4
|
class ShippingMethod
|
5
5
|
attr_reader :name, :service_code, :carrier, :origin_countries
|
6
6
|
|
7
|
+
# @param [String] name The shipping method's name
|
8
|
+
# @param [String] service_code The shipping method's service code
|
9
|
+
# @param [Boolean] domestic Whether this is a domestic shipping method
|
10
|
+
# @param [Boolean] international Whether this is an international shipping method
|
11
|
+
# @param [Boolean] multi_package Whether this is a multi-package shipping method
|
12
|
+
# @param [FriendlyShipping::Carrier] carrier This shipping method's carrier
|
13
|
+
# @param [Array] origin_countries Countries this shipping method ships from
|
7
14
|
def initialize(
|
8
15
|
name: nil,
|
9
16
|
service_code: nil,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: friendly_shipping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Meyerhoff
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: data_uri
|
@@ -70,16 +70,16 @@ dependencies:
|
|
70
70
|
name: physical
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 0.4.4
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 0.4.4
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rest-client
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,24 +164,36 @@ files:
|
|
164
164
|
- lib/friendly_shipping/api_result.rb
|
165
165
|
- lib/friendly_shipping/carrier.rb
|
166
166
|
- lib/friendly_shipping/http_client.rb
|
167
|
+
- lib/friendly_shipping/item_options.rb
|
167
168
|
- lib/friendly_shipping/label.rb
|
169
|
+
- lib/friendly_shipping/package_options.rb
|
168
170
|
- lib/friendly_shipping/rate.rb
|
169
171
|
- lib/friendly_shipping/request.rb
|
170
172
|
- lib/friendly_shipping/response.rb
|
171
173
|
- lib/friendly_shipping/services/ship_engine.rb
|
172
174
|
- lib/friendly_shipping/services/ship_engine/bad_request.rb
|
173
175
|
- lib/friendly_shipping/services/ship_engine/bad_request_handler.rb
|
176
|
+
- lib/friendly_shipping/services/ship_engine/label_options.rb
|
177
|
+
- lib/friendly_shipping/services/ship_engine/label_package_options.rb
|
174
178
|
- lib/friendly_shipping/services/ship_engine/parse_carrier_response.rb
|
175
179
|
- lib/friendly_shipping/services/ship_engine/parse_label_response.rb
|
176
180
|
- lib/friendly_shipping/services/ship_engine/parse_rate_estimate_response.rb
|
177
181
|
- lib/friendly_shipping/services/ship_engine/parse_void_response.rb
|
182
|
+
- lib/friendly_shipping/services/ship_engine/rate_estimates_options.rb
|
178
183
|
- lib/friendly_shipping/services/ship_engine/serialize_label_shipment.rb
|
179
184
|
- lib/friendly_shipping/services/ship_engine/serialize_rate_estimate_request.rb
|
180
185
|
- lib/friendly_shipping/services/ups.rb
|
186
|
+
- lib/friendly_shipping/services/ups/label_billing_options.rb
|
187
|
+
- lib/friendly_shipping/services/ups/label_item_options.rb
|
188
|
+
- lib/friendly_shipping/services/ups/label_options.rb
|
189
|
+
- lib/friendly_shipping/services/ups/label_package_options.rb
|
181
190
|
- lib/friendly_shipping/services/ups/parse_address_classification_response.rb
|
182
191
|
- lib/friendly_shipping/services/ups/parse_address_validation_response.rb
|
183
192
|
- lib/friendly_shipping/services/ups/parse_city_state_lookup_response.rb
|
193
|
+
- lib/friendly_shipping/services/ups/parse_money_element.rb
|
184
194
|
- lib/friendly_shipping/services/ups/parse_rate_response.rb
|
195
|
+
- lib/friendly_shipping/services/ups/parse_shipment_accept_response.rb
|
196
|
+
- lib/friendly_shipping/services/ups/parse_shipment_confirm_response.rb
|
185
197
|
- lib/friendly_shipping/services/ups/parse_xml_response.rb
|
186
198
|
- lib/friendly_shipping/services/ups/serialize_access_request.rb
|
187
199
|
- lib/friendly_shipping/services/ups/serialize_address_snippet.rb
|
@@ -189,7 +201,21 @@ files:
|
|
189
201
|
- lib/friendly_shipping/services/ups/serialize_city_state_lookup_request.rb
|
190
202
|
- lib/friendly_shipping/services/ups/serialize_package_node.rb
|
191
203
|
- lib/friendly_shipping/services/ups/serialize_rating_service_selection_request.rb
|
204
|
+
- lib/friendly_shipping/services/ups/serialize_shipment_accept_request.rb
|
205
|
+
- lib/friendly_shipping/services/ups/serialize_shipment_address_snippet.rb
|
206
|
+
- lib/friendly_shipping/services/ups/serialize_shipment_confirm_request.rb
|
192
207
|
- lib/friendly_shipping/services/ups/shipping_methods.rb
|
208
|
+
- lib/friendly_shipping/services/ups_freight.rb
|
209
|
+
- lib/friendly_shipping/services/ups_freight/generate_commodity_information.rb
|
210
|
+
- lib/friendly_shipping/services/ups_freight/generate_freight_rate_request_hash.rb
|
211
|
+
- lib/friendly_shipping/services/ups_freight/generate_location_hash.rb
|
212
|
+
- lib/friendly_shipping/services/ups_freight/generate_ups_security_hash.rb
|
213
|
+
- lib/friendly_shipping/services/ups_freight/parse_freight_rate_response.rb
|
214
|
+
- lib/friendly_shipping/services/ups_freight/parse_json_response.rb
|
215
|
+
- lib/friendly_shipping/services/ups_freight/rates_item_options.rb
|
216
|
+
- lib/friendly_shipping/services/ups_freight/rates_options.rb
|
217
|
+
- lib/friendly_shipping/services/ups_freight/rates_package_options.rb
|
218
|
+
- lib/friendly_shipping/services/ups_freight/shipping_methods.rb
|
193
219
|
- lib/friendly_shipping/services/usps.rb
|
194
220
|
- lib/friendly_shipping/services/usps/choose_package_rate.rb
|
195
221
|
- lib/friendly_shipping/services/usps/machinable_package.rb
|
@@ -202,6 +228,7 @@ files:
|
|
202
228
|
- lib/friendly_shipping/services/usps/serialize_city_state_lookup_request.rb
|
203
229
|
- lib/friendly_shipping/services/usps/serialize_rate_request.rb
|
204
230
|
- lib/friendly_shipping/services/usps/shipping_methods.rb
|
231
|
+
- lib/friendly_shipping/shipment_options.rb
|
205
232
|
- lib/friendly_shipping/shipping_method.rb
|
206
233
|
- lib/friendly_shipping/version.rb
|
207
234
|
homepage: https://github.com/friendly_cart/friendly_shipping
|