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 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