active_shipping 1.6.5 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +74 -60
- data/dev.yml +19 -0
- data/lib/active_shipping/carriers/fedex.rb +5 -0
- data/lib/active_shipping/carriers/ups.rb +7 -4
- data/lib/active_shipping/carriers/usps.rb +2 -2
- data/lib/active_shipping/rate_estimate.rb +51 -17
- data/lib/active_shipping/version.rb +1 -1
- data/test/fixtures/xml/fedex/tracking_response_failure_code_9045.xml +52 -0
- data/test/remote/ups_test.rb +19 -0
- data/test/remote/usps_test.rb +1 -9
- data/test/unit/carriers/fedex_test.rb +12 -0
- data/test/unit/carriers/usps_test.rb +4 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aded0a13e4d317dc8bb370ae2203c874282a2a47
|
4
|
+
data.tar.gz: 296ade65ae145953d279045449ba84757abcf02e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9053d50d49b00869a4e29bb8a04d48bb44fa86f189eed51c1f8a2846a0c95baf9ff6b8d4fbebe6f72178be256e4b612650b97d22851a12c03a56fe0be86a5ad7
|
7
|
+
data.tar.gz: 03afa606338e9aedac600911f886f11b6945ae617cd41ab3336d2620c36d354cc2ce682d54a2a55c861397caf907cd039dba12612e26d105c654a5dd45f97f8d
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -26,7 +26,9 @@ Active Shipping is currently being used and improved in a production environment
|
|
26
26
|
|
27
27
|
## Installation
|
28
28
|
|
29
|
-
|
29
|
+
```ruby
|
30
|
+
gem install active_shipping
|
31
|
+
```
|
30
32
|
|
31
33
|
...or add it to your project's [Gemfile](http://bundler.io/).
|
32
34
|
|
@@ -34,68 +36,78 @@ Active Shipping is currently being used and improved in a production environment
|
|
34
36
|
|
35
37
|
### Compare rates from different carriers
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
39
|
+
```ruby
|
40
|
+
require 'active_shipping'
|
41
|
+
|
42
|
+
# Package up a poster and a Wii for your nephew.
|
43
|
+
packages = [
|
44
|
+
ActiveShipping::Package.new(100, # 100 grams
|
45
|
+
[93,10], # 93 cm long, 10 cm diameter
|
46
|
+
cylinder: true), # cylinders have different volume calculations
|
47
|
+
|
48
|
+
ActiveShipping::Package.new(7.5 * 16, # 7.5 lbs, times 16 oz/lb.
|
49
|
+
[15, 10, 4.5], # 15x10x4.5 inches
|
50
|
+
units: :imperial) # not grams, not centimetres
|
51
|
+
]
|
52
|
+
|
53
|
+
# You live in Beverly Hills, he lives in Ottawa
|
54
|
+
origin = ActiveShipping::Location.new(country: 'US',
|
55
|
+
state: 'CA',
|
56
|
+
city: 'Beverly Hills',
|
57
|
+
zip: '90210')
|
58
|
+
|
59
|
+
destination = ActiveShipping::Location.new(country: 'CA',
|
60
|
+
province: 'ON',
|
61
|
+
city: 'Ottawa',
|
62
|
+
postal_code: 'K1P 1J1')
|
63
|
+
|
64
|
+
# Find out how much it'll be.
|
65
|
+
ups = ActiveShipping::UPS.new(login: 'auntjudy', password: 'secret', key: 'xml-access-key')
|
66
|
+
response = ups.find_rates(origin, destination, packages)
|
67
|
+
|
68
|
+
ups_rates = response.rates.sort_by(&:price).collect {|rate| [rate.service_name, rate.price]}
|
69
|
+
# => [["UPS Standard", 3936],
|
70
|
+
# ["UPS Worldwide Expedited", 8682],
|
71
|
+
# ["UPS Saver", 9348],
|
72
|
+
# ["UPS Express", 9702],
|
73
|
+
# ["UPS Worldwide Express Plus", 14502]]
|
74
|
+
|
75
|
+
# Check out USPS for comparison...
|
76
|
+
usps = ActiveShipping::USPS.new(login: 'developer-key')
|
77
|
+
response = usps.find_rates(origin, destination, packages)
|
78
|
+
|
79
|
+
usps_rates = response.rates.sort_by(&:price).collect {|rate| [rate.service_name, rate.price]}
|
80
|
+
# => [["USPS Priority Mail International", 4110],
|
81
|
+
# ["USPS Express Mail International (EMS)", 5750],
|
82
|
+
# ["USPS Global Express Guaranteed Non-Document Non-Rectangular", 9400],
|
83
|
+
# ["USPS GXG Envelopes", 9400],
|
84
|
+
# ["USPS Global Express Guaranteed Non-Document Rectangular", 9400],
|
85
|
+
# ["USPS Global Express Guaranteed", 9400]]
|
86
|
+
```
|
83
87
|
|
84
88
|
### Track a FedEx package
|
85
89
|
|
86
|
-
|
87
|
-
|
90
|
+
```ruby
|
91
|
+
fedex = ActiveShipping::FedEx.new(login: '999999999', password: '7777777', key: '1BXXXXXXXXXxrcB', account: '51XXXXX20')
|
92
|
+
tracking_info = fedex.find_tracking_info('tracking-number', carrier_code: 'fedex_ground') # Ground package
|
88
93
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
94
|
+
tracking_info.shipment_events.each do |event|
|
95
|
+
puts "#{event.name} at #{event.location.city}, #{event.location.state} on #{event.time}. #{event.message}"
|
96
|
+
end
|
97
|
+
# => Package information transmitted to FedEx at NASHVILLE LOCAL, TN on Thu Oct 23 00:00:00 UTC 2008.
|
98
|
+
# Picked up by FedEx at NASHVILLE LOCAL, TN on Thu Oct 23 17:30:00 UTC 2008.
|
99
|
+
# Scanned at FedEx sort facility at NASHVILLE, TN on Thu Oct 23 18:50:00 UTC 2008.
|
100
|
+
# Departed FedEx sort facility at NASHVILLE, TN on Thu Oct 23 22:33:00 UTC 2008.
|
101
|
+
# Arrived at FedEx sort facility at KNOXVILLE, TN on Fri Oct 24 02:45:00 UTC 2008.
|
102
|
+
# Scanned at FedEx sort facility at KNOXVILLE, TN on Fri Oct 24 05:56:00 UTC 2008.
|
103
|
+
# Delivered at Knoxville, TN on Fri Oct 24 16:45:00 UTC 2008. Signed for by: T.BAKER
|
104
|
+
```
|
105
|
+
|
106
|
+
#### FedEx connection notes
|
107
|
+
|
108
|
+
The :login key passed to ```ActiveShipping::FedEx.new()``` is really the FedEx meter number, not the FedEx login.
|
109
|
+
|
110
|
+
When developing with test credentials, be sure to pass ```test: true``` to ```ActiveShipping::FedEx.new()``` .
|
99
111
|
|
100
112
|
## Running the tests
|
101
113
|
|
@@ -113,7 +125,9 @@ https://github.com/Shopify/active_shipping/tree/master/test/fixtures/xml/usps
|
|
113
125
|
|
114
126
|
To log requests and responses, just set the `logger` on your carrier class to some kind of `Logger` object:
|
115
127
|
|
116
|
-
|
128
|
+
```ruby
|
129
|
+
ActiveShipping::USPS.logger = Logger.new($stdout)
|
130
|
+
```
|
117
131
|
|
118
132
|
(This logging functionality is provided by the [`PostsData` module](https://github.com/Shopify/active_utils/blob/master/lib/active_utils/posts_data.rb) in the `active_utils` dependency.)
|
119
133
|
|
data/dev.yml
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
name: active_shipping
|
2
|
+
|
3
|
+
up:
|
4
|
+
- ruby:
|
5
|
+
version: 2.2.4
|
6
|
+
build: true
|
7
|
+
- bundler
|
8
|
+
|
9
|
+
commands:
|
10
|
+
test:
|
11
|
+
syntax:
|
12
|
+
optional: file args...
|
13
|
+
desc: 'run all tests or a specific test file'
|
14
|
+
run: |
|
15
|
+
if [[ $# -eq 0 ]]; then
|
16
|
+
bundle exec rake test
|
17
|
+
else
|
18
|
+
bundle exec ruby -Itest "$@"
|
19
|
+
fi
|
@@ -605,6 +605,11 @@ module ActiveShipping
|
|
605
605
|
else
|
606
606
|
raise ActiveShipping::ResponseContentError, StandardError.new(first_notification.at('Message').text)
|
607
607
|
end
|
608
|
+
elsif first_notification.at('Severity').text == 'FAILURE'
|
609
|
+
case first_notification.at('Code').text
|
610
|
+
when '9045'
|
611
|
+
raise ActiveShipping::ResponseContentError, StandardError.new(first_notification.at('Message').text)
|
612
|
+
end
|
608
613
|
end
|
609
614
|
|
610
615
|
tracking_number = tracking_details.at('TrackingNumber').text
|
@@ -3,6 +3,7 @@
|
|
3
3
|
module ActiveShipping
|
4
4
|
class UPS < Carrier
|
5
5
|
self.retry_safe = true
|
6
|
+
self.ssl_version = :TLSv1_2
|
6
7
|
|
7
8
|
cattr_accessor :default_options
|
8
9
|
cattr_reader :name
|
@@ -532,10 +533,12 @@ module ActiveShipping
|
|
532
533
|
xml.Weight([value.round(3), 0.1].max)
|
533
534
|
end
|
534
535
|
|
535
|
-
|
536
|
-
xml.
|
537
|
-
|
538
|
-
|
536
|
+
if packages.any? {|package| package.value.present?}
|
537
|
+
xml.InvoiceLineTotal do
|
538
|
+
xml.CurrencyCode('USD')
|
539
|
+
total_value = packages.inject(0) {|sum, package| sum + package.value.to_i}
|
540
|
+
xml.MonetaryValue(total_value)
|
541
|
+
end
|
539
542
|
end
|
540
543
|
|
541
544
|
xml.PickupDate(pickup_date.strftime('%Y%m%d'))
|
@@ -247,8 +247,8 @@ module ActiveShipping
|
|
247
247
|
timestamp = "#{node.at('EventDate').text}, #{node.at('EventTime').text}"
|
248
248
|
Time.parse(timestamp)
|
249
249
|
else
|
250
|
-
#
|
251
|
-
Time.
|
250
|
+
# Epoch time, because we need to sort properly by time
|
251
|
+
Time.at(0)
|
252
252
|
end
|
253
253
|
|
254
254
|
event_code = node.at('EventCode').text
|
@@ -63,7 +63,7 @@ module ActiveShipping
|
|
63
63
|
# The price of insurance in cents.
|
64
64
|
# @return [Integer]
|
65
65
|
class RateEstimate
|
66
|
-
|
66
|
+
attr_accessor :origin, :destination, :package_rates,
|
67
67
|
:carrier, :service_name, :service_code,
|
68
68
|
:shipping_date, :delivery_date, :delivery_range,
|
69
69
|
:currency, :negotiated_rate, :insurance_price,
|
@@ -71,25 +71,25 @@ module ActiveShipping
|
|
71
71
|
:compare_price, :phone_required
|
72
72
|
|
73
73
|
def initialize(origin, destination, carrier, service_name, options = {})
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
74
|
+
self.origin, self.destination, self.carrier, self.service_name = origin, destination, carrier, service_name
|
75
|
+
self.service_code = options[:service_code]
|
76
|
+
self.estimate_reference = options[:estimate_reference]
|
77
|
+
self.pickup_time = options[:pickup_time]
|
78
|
+
self.expires_at = options[:expires_at]
|
79
79
|
if options[:package_rates]
|
80
|
-
|
80
|
+
self.package_rates = options[:package_rates].map { |p| p.update(:rate => Package.cents_from(p[:rate])) }
|
81
81
|
else
|
82
|
-
|
82
|
+
self.package_rates = Array(options[:packages]).map { |p| {:package => p} }
|
83
83
|
end
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
84
|
+
self.total_price = options[:total_price]
|
85
|
+
self.negotiated_rate = options[:negotiated_rate]
|
86
|
+
self.compare_price = options[:compare_price]
|
87
|
+
self.phone_required = options[:phone_required]
|
88
|
+
self.currency = options[:currency]
|
89
|
+
self.delivery_range = options[:delivery_range]
|
90
|
+
self.shipping_date = options[:shipping_date]
|
91
|
+
self.delivery_date = @delivery_range.last
|
92
|
+
self.insurance_price = options[:insurance_price]
|
93
93
|
end
|
94
94
|
|
95
95
|
# The total price of the shipments in cents.
|
@@ -125,6 +125,40 @@ module ActiveShipping
|
|
125
125
|
package_rates.length
|
126
126
|
end
|
127
127
|
|
128
|
+
protected
|
129
|
+
|
130
|
+
def delivery_range=(delivery_range)
|
131
|
+
@delivery_range = delivery_range ? delivery_range.map { |date| date_for(date) }.compact : []
|
132
|
+
end
|
133
|
+
|
134
|
+
def total_price=(total_price)
|
135
|
+
@total_price = Package.cents_from(total_price)
|
136
|
+
end
|
137
|
+
|
138
|
+
def negotiated_rate=(negotiated_rate)
|
139
|
+
@negotiated_rate = negotiated_rate ? Package.cents_from(negotiated_rate) : nil
|
140
|
+
end
|
141
|
+
|
142
|
+
def compare_price=(compare_price)
|
143
|
+
@compare_price = compare_price ? Package.cents_from(compare_price) : nil
|
144
|
+
end
|
145
|
+
|
146
|
+
def currency=(currency)
|
147
|
+
@currency = ActiveUtils::CurrencyCode.standardize(currency)
|
148
|
+
end
|
149
|
+
|
150
|
+
def phone_required=(phone_required)
|
151
|
+
@phone_required = !!phone_required
|
152
|
+
end
|
153
|
+
|
154
|
+
def shipping_date=(shipping_date)
|
155
|
+
@shipping_date = date_for(shipping_date)
|
156
|
+
end
|
157
|
+
|
158
|
+
def insurance_price=(insurance_price)
|
159
|
+
@insurance_price = Package.cents_from(insurance_price)
|
160
|
+
end
|
161
|
+
|
128
162
|
private
|
129
163
|
|
130
164
|
# Returns a Date object for a given input
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<TrackReply xmlns="http://fedex.com/ws/track/v7" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
|
3
|
+
<HighestSeverity>SUCCESS</HighestSeverity>
|
4
|
+
<Notifications>
|
5
|
+
<Severity>SUCCESS</Severity>
|
6
|
+
<Source>trck</Source>
|
7
|
+
<Code>0</Code>
|
8
|
+
<Message>Request was successfully processed.</Message>
|
9
|
+
<LocalizedMessage>Request was successfully processed.</LocalizedMessage>
|
10
|
+
</Notifications>
|
11
|
+
<TransactionDetail>
|
12
|
+
<CustomerTransactionId>ActiveShipping</CustomerTransactionId>
|
13
|
+
</TransactionDetail>
|
14
|
+
<Version>
|
15
|
+
<ServiceId>trck</ServiceId>
|
16
|
+
<Major>7</Major>
|
17
|
+
<Intermediate>0</Intermediate>
|
18
|
+
<Minor>0</Minor>
|
19
|
+
</Version>
|
20
|
+
<CompletedTrackDetails>
|
21
|
+
<HighestSeverity>SUCCESS</HighestSeverity>
|
22
|
+
<Notifications>
|
23
|
+
<Severity>SUCCESS</Severity>
|
24
|
+
<Source>trck</Source>
|
25
|
+
<Code>0</Code>
|
26
|
+
<Message>Request was successfully processed.</Message>
|
27
|
+
<LocalizedMessage>Request was successfully processed.</LocalizedMessage>
|
28
|
+
</Notifications>
|
29
|
+
<DuplicateWaybill>false</DuplicateWaybill>
|
30
|
+
<MoreData>false</MoreData>
|
31
|
+
<TrackDetails>
|
32
|
+
<Notification>
|
33
|
+
<Severity>FAILURE</Severity>
|
34
|
+
<Source>trck</Source>
|
35
|
+
<Code>9045</Code>
|
36
|
+
<Message>Sorry, we are unable to process your tracking request. Please retry later, or contact Customer Service at 1.800.Go.FedEx(R) 800.463.3339.</Message>
|
37
|
+
<LocalizedMessage>Sorry, we are unable to process your tracking request. Please retry later, or contact Customer Service at 1.800.Go.FedEx(R) 800.463.3339.</LocalizedMessage>
|
38
|
+
</Notification>
|
39
|
+
<TrackingNumber>020207021381215</TrackingNumber>
|
40
|
+
<StatusDetail>
|
41
|
+
<Location>
|
42
|
+
<Residential>false</Residential>
|
43
|
+
</Location>
|
44
|
+
</StatusDetail>
|
45
|
+
<PackageSequenceNumber>0</PackageSequenceNumber>
|
46
|
+
<PackageCount>0</PackageCount>
|
47
|
+
<DeliveryAttempts>0</DeliveryAttempts>
|
48
|
+
<TotalUniqueAddressCountInConsolidation>0</TotalUniqueAddressCountInConsolidation>
|
49
|
+
<RedirectToHoldEligibility>INELIGIBLE</RedirectToHoldEligibility>
|
50
|
+
</TrackDetails>
|
51
|
+
</CompletedTrackDetails>
|
52
|
+
</TrackReply>
|
data/test/remote/ups_test.rb
CHANGED
@@ -286,6 +286,25 @@ class RemoteUPSTest < Minitest::Test
|
|
286
286
|
assert_equal Date.parse(1.business_days.from_now.to_s), ground_delivery_estimate.date
|
287
287
|
end
|
288
288
|
|
289
|
+
def test_delivery_date_estimates_within_zip_with_no_value
|
290
|
+
today = Date.current
|
291
|
+
|
292
|
+
response = @carrier.get_delivery_date_estimates(
|
293
|
+
location_fixtures[:new_york_with_name],
|
294
|
+
location_fixtures[:new_york_with_name],
|
295
|
+
package_fixtures.values_at(:book),
|
296
|
+
today,
|
297
|
+
{
|
298
|
+
:test => true
|
299
|
+
}
|
300
|
+
)
|
301
|
+
|
302
|
+
assert response.success?
|
303
|
+
refute_empty response.delivery_estimates
|
304
|
+
ground_delivery_estimate = response.delivery_estimates.select {|de| de.service_name == "UPS Ground"}.first
|
305
|
+
assert_equal Date.parse(1.business_days.from_now.to_s), ground_delivery_estimate.date
|
306
|
+
end
|
307
|
+
|
289
308
|
def test_delivery_date_estimates_across_zips
|
290
309
|
today = Date.current
|
291
310
|
|
data/test/remote/usps_test.rb
CHANGED
@@ -11,14 +11,6 @@ class RemoteUSPSTest < Minitest::Test
|
|
11
11
|
skip(e.message)
|
12
12
|
end
|
13
13
|
|
14
|
-
def test_tracking
|
15
|
-
response = @carrier.find_tracking_info('LN757696446US', test: false)
|
16
|
-
assert response.success?, response.message
|
17
|
-
assert_equal 13,response.shipment_events.size
|
18
|
-
assert_equal 'DELIVERED', response.shipment_events.last.message
|
19
|
-
assert_equal Time.parse('2015-11-30 13:02:00 UTC'), response.actual_delivery_date
|
20
|
-
end
|
21
|
-
|
22
14
|
def test_tracking_with_attempted_delivery
|
23
15
|
response = @carrier.find_tracking_info('9405515901606017103876', test: false)
|
24
16
|
assert response.success?, response.message
|
@@ -26,7 +18,7 @@ class RemoteUSPSTest < Minitest::Test
|
|
26
18
|
assert_equal 'DELIVERED', response.shipment_events.last.message
|
27
19
|
assert_equal Time.parse('2015-12-10 14:42:00 UTC'), response.attempted_delivery_date
|
28
20
|
assert_equal Time.parse('2015-12-24 10:51:00 UTC'), response.actual_delivery_date
|
29
|
-
end
|
21
|
+
end
|
30
22
|
|
31
23
|
def test_tracking_with_bad_number
|
32
24
|
assert_raises(ResponseError) do
|
@@ -327,6 +327,18 @@ class FedExTest < Minitest::Test
|
|
327
327
|
end
|
328
328
|
end
|
329
329
|
|
330
|
+
def test_response_failure_code_9045
|
331
|
+
mock_response = xml_fixture('fedex/tracking_response_failure_code_9045')
|
332
|
+
@carrier.expects(:commit).returns(mock_response)
|
333
|
+
|
334
|
+
error = assert_raises(ActiveShipping::ResponseContentError) do
|
335
|
+
@carrier.find_tracking_info('123456789013')
|
336
|
+
end
|
337
|
+
|
338
|
+
msg = 'Sorry, we are unable to process your tracking request. Please retry later, or contact Customer Service at 1.800.Go.FedEx(R) 800.463.3339.'
|
339
|
+
assert_equal msg, error.message
|
340
|
+
end
|
341
|
+
|
330
342
|
def test_parsing_response_without_notifications
|
331
343
|
mock_response = xml_fixture('fedex/reply_without_notifications')
|
332
344
|
|
@@ -139,8 +139,11 @@ class USPSTest < Minitest::Test
|
|
139
139
|
assert_nil response.scheduled_delivery_date
|
140
140
|
assert_nil response.shipment_events.last.location.city
|
141
141
|
|
142
|
+
time = Time.at(0)
|
143
|
+
expected_utc_time = Time.utc(time.year, time.month, time.mday, time.hour, time.min, time.sec)
|
144
|
+
|
142
145
|
assert_equal 'NP', response.shipment_events.first.type_code
|
143
|
-
assert_equal
|
146
|
+
assert_equal expected_utc_time, response.shipment_events.first.time
|
144
147
|
|
145
148
|
special_country = xml_fixture('usps/tracking_response_alt').gsub('CANADA','TAIWAN')
|
146
149
|
@carrier.expects(:commit).returns(special_country)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_shipping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James MacAulay
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2016-
|
14
|
+
date: 2016-03-29 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: quantified
|
@@ -181,6 +181,7 @@ files:
|
|
181
181
|
- README.md
|
182
182
|
- Rakefile
|
183
183
|
- active_shipping.gemspec
|
184
|
+
- dev.yml
|
184
185
|
- lib/active_shipping.rb
|
185
186
|
- lib/active_shipping/carrier.rb
|
186
187
|
- lib/active_shipping/carriers.rb
|
@@ -281,6 +282,7 @@ files:
|
|
281
282
|
- test/fixtures/xml/fedex/tracking_response_delivered_at_facility.xml
|
282
283
|
- test/fixtures/xml/fedex/tracking_response_delivered_with_signature.xml
|
283
284
|
- test/fixtures/xml/fedex/tracking_response_empty_status_detail.xml
|
285
|
+
- test/fixtures/xml/fedex/tracking_response_failure_code_9045.xml
|
284
286
|
- test/fixtures/xml/fedex/tracking_response_in_transit.xml
|
285
287
|
- test/fixtures/xml/fedex/tracking_response_invalid_status_code.xml
|
286
288
|
- test/fixtures/xml/fedex/tracking_response_invalid_tracking_number.xml
|
@@ -487,6 +489,7 @@ test_files:
|
|
487
489
|
- test/fixtures/xml/fedex/tracking_response_delivered_at_facility.xml
|
488
490
|
- test/fixtures/xml/fedex/tracking_response_delivered_with_signature.xml
|
489
491
|
- test/fixtures/xml/fedex/tracking_response_empty_status_detail.xml
|
492
|
+
- test/fixtures/xml/fedex/tracking_response_failure_code_9045.xml
|
490
493
|
- test/fixtures/xml/fedex/tracking_response_in_transit.xml
|
491
494
|
- test/fixtures/xml/fedex/tracking_response_invalid_status_code.xml
|
492
495
|
- test/fixtures/xml/fedex/tracking_response_invalid_tracking_number.xml
|