Skip to content

Commit ca8264e

Browse files
authored
Merge pull request #153 from barberj/barberj/sure-post-usps-pic-number
UPS SurePost USPSPICNumber
2 parents 4528061 + fb04738 commit ca8264e

File tree

6 files changed

+106
-1
lines changed

6 files changed

+106
-1
lines changed

lib/friendly_shipping/services/ups.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
require 'friendly_shipping/services/ups/parse_time_in_transit_response'
2020
require 'friendly_shipping/services/ups/parse_void_shipment_response'
2121
require 'friendly_shipping/services/ups/shipping_methods'
22+
require 'friendly_shipping/services/ups/label'
2223
require 'friendly_shipping/services/ups/label_options'
2324
require 'friendly_shipping/services/ups/rate_estimate_options'
2425
require 'friendly_shipping/services/ups/timing_options'
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# frozen_string_literal: true
2+
3+
module FriendlyShipping
4+
module Services
5+
class Ups
6+
class Label < FriendlyShipping::Label
7+
attr_reader :usps_tracking_number
8+
9+
# @param [String] usps_tracking_number The label's usps tracking number. Limited to SUREPOST
10+
def initialize(
11+
usps_tracking_number: nil,
12+
**params
13+
)
14+
@usps_tracking_number = usps_tracking_number
15+
super(**params)
16+
end
17+
end
18+
end
19+
end
20+
end

lib/friendly_shipping/services/ups/parse_shipment_accept_response.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ def build_labels(xml)
3636
cost_breakdown = build_cost_breakdown(package)
3737
package_cost = cost_breakdown.values.any? ? cost_breakdown.values.sum : nil
3838
encoded_label_data = package.at('LabelImage/GraphicImage')&.text
39-
FriendlyShipping::Label.new(
39+
FriendlyShipping::Services::Ups::Label.new(
4040
tracking_number: package.at('TrackingNumber').text,
41+
usps_tracking_number: package.at('USPSPICNumber')&.text,
4142
label_data: encoded_label_data ? Base64.decode64(encoded_label_data) : nil,
4243
label_format: package.at('LabelImage/LabelImageFormat/Code')&.text,
4344
cost: package_cost,
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?xml version="1.0"?>
2+
<ShipmentAcceptResponse>
3+
<Response>
4+
<ResponseStatusCode>1</ResponseStatusCode>
5+
<ResponseStatusDescription>Success</ResponseStatusDescription>
6+
</Response>
7+
<ShipmentResults>
8+
<ShipmentCharges>
9+
<TransportationCharges>
10+
<CurrencyCode>USD</CurrencyCode>
11+
<MonetaryValue>24.95</MonetaryValue>
12+
</TransportationCharges>
13+
<ServiceOptionsCharges>
14+
<CurrencyCode>USD</CurrencyCode>
15+
<MonetaryValue>0.00</MonetaryValue>
16+
</ServiceOptionsCharges>
17+
<TotalCharges>
18+
<CurrencyCode>USD</CurrencyCode>
19+
<MonetaryValue>24.95</MonetaryValue>
20+
</TotalCharges>
21+
</ShipmentCharges>
22+
<BillingWeight>
23+
<UnitOfMeasurement>
24+
<Code>LBS</Code>
25+
<Description>Pounds</Description>
26+
</UnitOfMeasurement>
27+
<Weight>10.0</Weight>
28+
</BillingWeight>
29+
<ShipmentIdentificationNumber>1ZXXXXXXXXXXXXXXXX</ShipmentIdentificationNumber>
30+
<PackageResults>
31+
<TrackingNumber>1ZXXXXXXXXXXXXXXXX</TrackingNumber>
32+
<BaseServiceCharge>
33+
<CurrencyCode>USD</CurrencyCode>
34+
<MonetaryValue>21.60</MonetaryValue>
35+
</BaseServiceCharge>
36+
<ServiceOptionsCharges>
37+
<CurrencyCode>USD</CurrencyCode>
38+
<MonetaryValue>0.00</MonetaryValue>
39+
</ServiceOptionsCharges>
40+
<LabelImage>
41+
<LabelImageFormat>
42+
<Code>ZPL</Code>
43+
</LabelImageFormat>
44+
<GraphicImage>Cl5YQQ0KXkxSTg0KXk1OWQ0KXk1GTixODQpeTEgxMCwxMg0KXk1DWQ0KXlBPSQ0KXlBXODEyDQpeQ0kyNw0KXkZPOTYsNTQ0XkJZM15CQ04sMTQ4LE4sTixOLEFeRlYxWlk5MzE5V1lXOTc0NTgyMjleRlMNCl5GTzM3LDk4M15CWTNeQkNOLDE2MixOLE4sTixEXkZWNDIwMzAwOTI+ODkyNjEyOTAzMTAzMTEwNTQxNDc1MDAwMDY4XkZTDQpeRk8yOTUsMzExXkJZM15CQ04sMTA3LE4sTixOLEFeRlY0MjAzMDA5Mjk5OTheRlMNCl5GTzIwLDIyMV5DVlleQkQyXkZIX15GRDk4ODg0MDMwMDkyOTk5OFspPl8xRTAxXzFEOTYxWjk3NDU4MjI5XzFEVVBTTl8xRFk5MzE5V18xRTA3RzdCOTBSR18xQytRWC1TMkYiJkQ2IF8xQ0xSQSVGMCZBTTZfMURWNDZMMFcvLTYqJ0VfMERfMUVfMDReRlMNCl5GTzE1LDExXkEwTiwyMiwyNl5GVkNBTkRMRVNDSUVOQ0UsIElOQy5eRlMNCl5GTzE1LDM2XkEwTiwyMiwyNl5GVlNPTUUgU1ReRlMNCl5GTzE1LDYwXkEwTiwyMiwyNl5GVkRVUkhBTSBOQyAyNzcwM15GUw0KXkZPOTEsODleQTBOLDMwLDM0XkZWU0hJUCBeRlMNCl5GTzkxLDEzMF5BME4sMzAsMzReRlZUTyA6IF5GUw0KXkZPMTg4LDg5XkEwTiwzMCwzNF5GVlVTUFMgMzAwOTJeRlMNCl5GTzE4OCwxMzBeQTBOLDMwLDM0XkZWNTYwMCBTUEFMRElORyBEUl5GUw0KXkZPMTg4LDE3MV5BME4sMzAsMzReRlZQRUFDSFRSRUUgQ09STkVSUyAgIEdBICAzMDA5Mi05OTk4XkZTDQpeRk80NTcsOV5BME4sMjgsMzJeRlY1IExCU15GUw0KXkZPMjY0LDU3OV5BME4sOTUsNzReRlZTQU1QTEVeRlMNCl5GTzE1LDc2N15BME4sMjIsMjZeRlZVU1BTIERFTElWRVIgVE86IF5GUw0KXkZPMTUsNzkyXkEwTiwyMiwyNl5GVkpVU1RJTiBCQVJCRVJeRlMNCl5GTzE1LDgxNl5BME4sMjIsMjZeRlY1MDIzIFdJTExJQU1TUE9SVCBEUklWRV5GUw0KXkZPMTUsODQwXkEwTiwyMiwyNl5GVlBFQUNIVFJFRSBDT1JORVJTLCBHQSAzMDA5Ml5GUw0KXkZPMjM2LDkxN15BME4sMzAsMzReRlZVU1BTIFRSQUNLSU5HICMgZVZTIF5GUw0KXkZPMTQyLDExNjleQTBOLDI4LDMyXkZWOTI2MSAyOTAzIDEwMzEgMTA1NCAxNDc1IDAwMDAgNjggXkZTDQpeRk82MTksNzM3XkEwTiwxOCwyMl5GVlBBUkNFTCBTRUxFQ1ReRlMNCl5GTzYwMiw3NjdeQTBOLDE4LDIyXkZWVVMgUE9TVEFHRSBQQUlEXkZTDQpeRk82NzEsNzkzXkEwTiwxOCwyMl5GVlVQU15GUw0KXkZPNjcxLDgxOF5BME4sMTgsMjJeRlZlVlNeRlMNCl5GTzEwMiw3MzFeQTBOLDI2LDMwXkZWQ2Fycmllci1MZWF2ZSBJZiBObyBSZXNwb25zZV5GUw0KXkZPNTE4LDUxXkEwTiwyMiwyNl5GVkRXVDogMTQsMTIsOF5GUw0KXkZPNjg4LDleQTBOLDI4LDMyXkZWMSBPRiAxXkZTDQpeRk8xNSw0NjNeQTBOLDQ1LDQ0XkZWVVBTIFNVUkVQT1NUXkZTDQpeRk8xNSw1MDheQTBOLDI2LDMwXkZWVFJBQ0tJTkcgIzogMVogWTkzIDE5VyBZVyA5NzQ1IDgyMjleRlMNCl5GTzI5NSwyMjFeQTBOLDcyLDY4XkZWR0EgMzAwIDktMTAgWF5GUw0KXkZPNjkwLDQ0N15HQjEyMiw5MSw5MSxCLDBeRlMNCl5GTzAsNTM0XkdCODEyLDQsNCxCLDBeRlMNCl5GTzAsNDQxXkdCODEyLDE0LDE0LEIsMF5GUw0KXkZPMCw3MDReR0I4MTIsMTUsMTUsQiwwXkZTDQpeRk8wLDIxMl5HQjgxMiw0LDQsQiwwXkZTDQpeRk8yNDQsMjEzXkdCNCwyMzQsNCxCLDBeRlMNCl5GTzAsODk0XkdCODEyLDExLDExLEIsMF5GUw0KXkZPMCwxMjA3XkdCODEyLDExLDExLEIsMF5GUw0KXkZPNTg1LDg0NV5HQjIwNSw0LDQsQiwwXkZTDQpeRk81ODUsNzI3XkdCMjA1LDMsMyxCLDBeRlMNCl5GTzU4NSw3MjdeR0IyLDEyMiwyLEIsMF5GUw0KXkZPNzg4LDcyN15HQjIsMTIyLDIsQiwwXkZTDQpeWFoNCg==</GraphicImage>
45+
</LabelImage>
46+
<USPSPICNumber>92612903103110541475000068</USPSPICNumber>
47+
<ItemizedCharges>
48+
<Code>375</Code>
49+
<CurrencyCode>USD</CurrencyCode>
50+
<MonetaryValue>3.35</MonetaryValue>
51+
</ItemizedCharges>
52+
</PackageResults>
53+
</ShipmentResults>
54+
</ShipmentAcceptResponse>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
5+
RSpec.describe FriendlyShipping::Services::Ups::Label do
6+
it { is_expected.to respond_to(:id) }
7+
it { is_expected.to respond_to(:shipment_id) }
8+
it { is_expected.to respond_to(:tracking_number) }
9+
it { is_expected.to respond_to(:service_code) }
10+
it { is_expected.to respond_to(:label_href) }
11+
it { is_expected.to respond_to(:data) }
12+
it { is_expected.to respond_to(:label_format) }
13+
it { is_expected.to respond_to(:shipment_cost) }
14+
it { is_expected.to respond_to(:cost) }
15+
it { is_expected.to respond_to(:label_data) }
16+
it { is_expected.to respond_to(:usps_tracking_number) }
17+
end

spec/friendly_shipping/services/ups/parse_shipment_accept_response_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
expect(subject).to be_a(Array)
2424
expect(subject.length).to eq(1)
2525
expect(subject.map(&:tracking_number)).to be_present
26+
expect(subject.map(&:usps_tracking_number).compact).to be_empty
2627
expect(subject.map(&:label_data).first.first(5)).to eq("GIF87")
2728
expect(subject.map(&:label_format).first.to_s).to eq("GIF")
2829
expect(subject.map(&:shipment_cost).first.to_d).to eq(11.98)
@@ -52,4 +53,15 @@
5253
expect(subject.value!.data.first.data[:form]).to start_with('%PDF-')
5354
end
5455
end
56+
57+
context "SurePost" do
58+
let(:response_body) { File.open(File.join(gem_root, 'spec', 'fixtures', 'ups', 'surepost_shipment_accept_response.xml')).read }
59+
subject { parser.value!.data }
60+
61+
it 'returns labels including value for usps_tracking_number' do
62+
expect(subject).to be_a(Array)
63+
expect(subject.map(&:tracking_number)).to be_present
64+
expect(subject.map(&:usps_tracking_number)).to be_present
65+
end
66+
end
5567
end

0 commit comments

Comments
 (0)