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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 67c1a999efbdf53ccf0184cb263ae02c952be3ad
4
- data.tar.gz: a810e0262340b15fec6bafdf157197a3af7a4a7e
3
+ metadata.gz: aded0a13e4d317dc8bb370ae2203c874282a2a47
4
+ data.tar.gz: 296ade65ae145953d279045449ba84757abcf02e
5
5
  SHA512:
6
- metadata.gz: ff22888d9dcdfaa98693bda3b993a83bb1c2404f7b217e359ba5f97e35bf21b283a8b6bf483b82a9f743aa10c43940de3ba5ae29e86abb905997297103016592
7
- data.tar.gz: 9d827efa63c84851a042498c57c2ab184807ac34d89deb2d7e822358d977fff9a5c0ac88c0bd97fa5c95f2454af966210ec1c35fb6ef4deb47059510ac070364
6
+ metadata.gz: 9053d50d49b00869a4e29bb8a04d48bb44fa86f189eed51c1f8a2846a0c95baf9ff6b8d4fbebe6f72178be256e4b612650b97d22851a12c03a56fe0be86a5ad7
7
+ data.tar.gz: 03afa606338e9aedac600911f886f11b6945ae617cd41ab3336d2620c36d354cc2ce682d54a2a55c861397caf907cd039dba12612e26d105c654a5dd45f97f8d
data/.gitignore CHANGED
@@ -11,3 +11,4 @@ test/fixtures/live_credentials.yml
11
11
  .yardoc/
12
12
  doc/
13
13
  .idea
14
+ .bundle
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
- gem install active_shipping
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
- require 'active_shipping'
38
-
39
- # Package up a poster and a Wii for your nephew.
40
- packages = [
41
- ActiveShipping::Package.new( 100, # 100 grams
42
- [93,10], # 93 cm long, 10 cm diameter
43
- :cylinder => true), # cylinders have different volume calculations
44
-
45
- ActiveShipping::Package.new( 7.5 * 16, # 7.5 lbs, times 16 oz/lb.
46
- [15, 10, 4.5], # 15x10x4.5 inches
47
- :units => :imperial) # not grams, not centimetres
48
- ]
49
-
50
- # You live in Beverly Hills, he lives in Ottawa
51
- origin = ActiveShipping::Location.new( :country => 'US',
52
- :state => 'CA',
53
- :city => 'Beverly Hills',
54
- :zip => '90210')
55
-
56
- destination = ActiveShipping::Location.new( :country => 'CA',
57
- :province => 'ON',
58
- :city => 'Ottawa',
59
- :postal_code => 'K1P 1J1')
60
-
61
- # Find out how much it'll be.
62
- ups = ActiveShipping::UPS.new(:login => 'auntjudy', :password => 'secret', :key => 'xml-access-key')
63
- response = ups.find_rates(origin, destination, packages)
64
-
65
- ups_rates = response.rates.sort_by(&:price).collect {|rate| [rate.service_name, rate.price]}
66
- # => [["UPS Standard", 3936],
67
- # ["UPS Worldwide Expedited", 8682],
68
- # ["UPS Saver", 9348],
69
- # ["UPS Express", 9702],
70
- # ["UPS Worldwide Express Plus", 14502]]
71
-
72
- # Check out USPS for comparison...
73
- usps = ActiveShipping::USPS.new(:login => 'developer-key')
74
- response = usps.find_rates(origin, destination, packages)
75
-
76
- usps_rates = response.rates.sort_by(&:price).collect {|rate| [rate.service_name, rate.price]}
77
- # => [["USPS Priority Mail International", 4110],
78
- # ["USPS Express Mail International (EMS)", 5750],
79
- # ["USPS Global Express Guaranteed Non-Document Non-Rectangular", 9400],
80
- # ["USPS GXG Envelopes", 9400],
81
- # ["USPS Global Express Guaranteed Non-Document Rectangular", 9400],
82
- # ["USPS Global Express Guaranteed", 9400]]
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
- fedex = ActiveShipping::FedEx.new(login: '999999999', password: '7777777', key: '1BXXXXXXXXXxrcB', account: '51XXXXX20')
87
- tracking_info = fedex.find_tracking_info('tracking-number', :carrier_code => 'fedex_ground') # Ground package
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
- tracking_info.shipment_events.each do |event|
90
- puts "#{event.name} at #{event.location.city}, #{event.location.state} on #{event.time}. #{event.message}"
91
- end
92
- # => Package information transmitted to FedEx at NASHVILLE LOCAL, TN on Thu Oct 23 00:00:00 UTC 2008.
93
- # Picked up by FedEx at NASHVILLE LOCAL, TN on Thu Oct 23 17:30:00 UTC 2008.
94
- # Scanned at FedEx sort facility at NASHVILLE, TN on Thu Oct 23 18:50:00 UTC 2008.
95
- # Departed FedEx sort facility at NASHVILLE, TN on Thu Oct 23 22:33:00 UTC 2008.
96
- # Arrived at FedEx sort facility at KNOXVILLE, TN on Fri Oct 24 02:45:00 UTC 2008.
97
- # Scanned at FedEx sort facility at KNOXVILLE, TN on Fri Oct 24 05:56:00 UTC 2008.
98
- # Delivered at Knoxville, TN on Fri Oct 24 16:45:00 UTC 2008. Signed for by: T.BAKER
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
- ActiveShipping::USPS.logger = Logger.new($stdout)
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
- xml.InvoiceLineTotal do
536
- xml.CurrencyCode('USD')
537
- total_value = packages.inject(0) {|sum, package| sum + package.value}
538
- xml.MonetaryValue(total_value)
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
- # Arbitrary time in past, because we need to sort properly by time
251
- Time.parse("Jan 01, 2000")
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
- attr_reader :origin, :destination, :package_rates,
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
- @origin, @destination, @carrier, @service_name = origin, destination, carrier, service_name
75
- @service_code = options[:service_code]
76
- @estimate_reference = options[:estimate_reference]
77
- @pickup_time = options[:pickup_time]
78
- @expires_at = options[:expires_at]
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
- @package_rates = options[:package_rates].map { |p| p.update(:rate => Package.cents_from(p[:rate])) }
80
+ self.package_rates = options[:package_rates].map { |p| p.update(:rate => Package.cents_from(p[:rate])) }
81
81
  else
82
- @package_rates = Array(options[:packages]).map { |p| {:package => p} }
82
+ self.package_rates = Array(options[:packages]).map { |p| {:package => p} }
83
83
  end
84
- @total_price = Package.cents_from(options[:total_price])
85
- @negotiated_rate = options[:negotiated_rate] ? Package.cents_from(options[:negotiated_rate]) : nil
86
- @compare_price = options[:compare_price] ? Package.cents_from(options[:compare_price]) : nil
87
- @phone_required = !!options[:phone_required]
88
- @currency = ActiveUtils::CurrencyCode.standardize(options[:currency])
89
- @delivery_range = options[:delivery_range] ? options[:delivery_range].map { |date| date_for(date) }.compact : []
90
- @shipping_date = date_for(options[:shipping_date])
91
- @delivery_date = @delivery_range.last
92
- @insurance_price = Package.cents_from(options[:insurance_price])
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
@@ -1,3 +1,3 @@
1
1
  module ActiveShipping
2
- VERSION = "1.6.5"
2
+ VERSION = "1.7.0"
3
3
  end
@@ -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>
@@ -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
 
@@ -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 Time.parse('Jan 01, 2000'), response.shipment_events.first.time
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.6.5
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-01-08 00:00:00.000000000 Z
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