active_shipping 1.6.5 → 1.7.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/.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
|