active_shipping 1.2.1 → 1.2.2
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/CHANGELOG.md +6 -0
- data/lib/active_shipping/carriers/usps.rb +20 -6
- data/lib/active_shipping/version.rb +1 -1
- data/test/fixtures/xml/usps/api_error_rate_response.xml +53 -0
- data/test/fixtures/xml/usps/tracking_response_alt.xml +1 -1
- data/test/fixtures/xml/usps/us_rate_request.xml +1 -1
- data/test/fixtures/xml/usps/us_rate_request_large.xml +18 -0
- data/test/fixtures/xml/usps/world_rate_request_only_country.xml +22 -0
- data/test/remote/usps_test.rb +4 -3
- data/test/unit/carriers/usps_test.rb +32 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04f69978f627aaebea9a3ddd7cb9fea8f3bfa503
|
4
|
+
data.tar.gz: fc82de023d281c9f6d20f40ae0c4e7566a4a9d9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5348f5e0ab81dd551e0b899fc8f62302013be5b0873e84de37cdb6e813c403d0e8526d0e0f58e38c3c419899caf7df7caa1f7eff29b893a6917681af07d5990
|
7
|
+
data.tar.gz: 922f4675449eb2bf37ee8b7917589b679b09146d4174fb48661ba9e5fe64285ddf205475a8018490f67acc18563d73eb080d2b4e80f1f8e14bbf21cb8be6142b
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# ActiveShipping CHANGELOG
|
2
2
|
|
3
|
+
### v1.2.2
|
4
|
+
|
5
|
+
- Fix "RECTANGULAR" errors with small USPS US->US package rate requests
|
6
|
+
- Fix error tracking USPS packages to other countries
|
7
|
+
- Fix USPS rate requests to destinations with only a country.
|
8
|
+
|
3
9
|
### v1.2.1
|
4
10
|
|
5
11
|
- Fix compatibility with latest USPS WEBTOOLS international rate schema changes.
|
@@ -246,7 +246,9 @@ module ActiveShipping
|
|
246
246
|
|
247
247
|
country_node = node.at('EventCountry')
|
248
248
|
country = country_node ? country_node.text : ''
|
249
|
-
country = '
|
249
|
+
country = 'UNITED STATES' if country.empty?
|
250
|
+
# USPS returns upcased country names which ActiveUtils doesn't recognize without translation
|
251
|
+
country = find_country_code_case_insensitive(country)
|
250
252
|
|
251
253
|
time = Time.parse(timestamp)
|
252
254
|
zoneless_time = Time.utc(time.year, time.month, time.mday, time.hour, time.min, time.sec)
|
@@ -343,8 +345,11 @@ module ActiveShipping
|
|
343
345
|
xml.ZipDestination(strip_zip(destination_zip))
|
344
346
|
xml.Pounds(0)
|
345
347
|
xml.Ounces("%0.1f" % [package.ounces, 1].max)
|
346
|
-
|
347
|
-
|
348
|
+
size_code = USPS.size_code_for(package)
|
349
|
+
container = CONTAINERS[package.options[:container]]
|
350
|
+
container ||= (package.cylinder? ? 'NONRECTANGULAR' : 'RECTANGULAR') if size_code == 'LARGE'
|
351
|
+
xml.Container(container)
|
352
|
+
xml.Size(size_code)
|
348
353
|
xml.Width("%0.2f" % package.inches(:width))
|
349
354
|
xml.Length("%0.2f" % package.inches(:length))
|
350
355
|
xml.Height("%0.2f" % package.inches(:height))
|
@@ -404,8 +409,10 @@ module ActiveShipping
|
|
404
409
|
xml.public_send(COMMERCIAL_FLAG_NAME.fetch(commercial_type), 'Y')
|
405
410
|
end
|
406
411
|
xml.OriginZip(origin.zip)
|
407
|
-
|
408
|
-
|
412
|
+
if destination.zip.present?
|
413
|
+
xml.AcceptanceDateTime((options[:acceptance_time] || Time.now.utc).iso8601)
|
414
|
+
xml.DestinationPostalCode(destination.zip)
|
415
|
+
end
|
409
416
|
end
|
410
417
|
end
|
411
418
|
end
|
@@ -420,7 +427,7 @@ module ActiveShipping
|
|
420
427
|
|
421
428
|
xml = Nokogiri.XML(response)
|
422
429
|
|
423
|
-
if error = xml.
|
430
|
+
if error = xml.at_xpath('/Error | //ServiceErrors/ServiceError')
|
424
431
|
success = false
|
425
432
|
message = error.at('Description').text
|
426
433
|
else
|
@@ -642,6 +649,13 @@ module ActiveShipping
|
|
642
649
|
response_status_node(document).text
|
643
650
|
end
|
644
651
|
|
652
|
+
def find_country_code_case_insensitive(name)
|
653
|
+
upcase_name = name.upcase
|
654
|
+
country = ActiveUtils::Country::COUNTRIES.detect { |c| c[:name].upcase == upcase_name }
|
655
|
+
raise ActiveShipping::Error, "No country found for #{name}" unless country
|
656
|
+
country[:alpha2]
|
657
|
+
end
|
658
|
+
|
645
659
|
def commit(action, request, test = false)
|
646
660
|
ssl_get(request_url(action, request, test))
|
647
661
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<IntlRateV2Response>
|
3
|
+
<Package ID="0">
|
4
|
+
<!-- Other successful Services, Prohibitions, etc were here -->
|
5
|
+
<Service ID="15">
|
6
|
+
<Pounds>0</Pounds>
|
7
|
+
<Ounces>9</Ounces>
|
8
|
+
<MailType>Package</MailType>
|
9
|
+
<Container>RECTANGULAR</Container>
|
10
|
+
<Size>REGULAR</Size>
|
11
|
+
<Width>5.51</Width>
|
12
|
+
<Length>7.48</Length>
|
13
|
+
<Height>0.79</Height>
|
14
|
+
<Girth>12.60</Girth>
|
15
|
+
<Country>CANADA</Country>
|
16
|
+
<Postage>10.30</Postage>
|
17
|
+
<ExtraServices/>
|
18
|
+
<ValueOfContents>0.00</ValueOfContents>
|
19
|
+
<InsComment>SERVICE</InsComment>
|
20
|
+
<SvcCommitments>Varies by destination</SvcCommitments>
|
21
|
+
<SvcDescription>First-Class Package International Service&lt;sup&gt;&#8482;&lt;/sup&gt;</SvcDescription>
|
22
|
+
<MaxDimensions>Other than rolls: Max. length 24", max length, height and depth (thickness) combined 36"<br>Rolls: Max. length 36". Max length and twice the diameter combined 42"</MaxDimensions>
|
23
|
+
<MaxWeight>4</MaxWeight>
|
24
|
+
</Service>
|
25
|
+
<Service ID="2">
|
26
|
+
<Pounds>0</Pounds>
|
27
|
+
<Ounces>9</Ounces>
|
28
|
+
<MailType>Package</MailType>
|
29
|
+
<Container>RECTANGULAR</Container>
|
30
|
+
<Size>REGULAR</Size>
|
31
|
+
<Width>5.51</Width>
|
32
|
+
<Length>7.48</Length>
|
33
|
+
<Height>0.79</Height>
|
34
|
+
<Girth>12.60</Girth>
|
35
|
+
<Country>CANADA</Country>
|
36
|
+
<Postage>0.00</Postage>
|
37
|
+
<ExtraServices>
|
38
|
+
<ExtraService>
|
39
|
+
<ServiceID/>
|
40
|
+
<ServiceName/>
|
41
|
+
<Available>False</Available>
|
42
|
+
<Price/>
|
43
|
+
</ExtraService>
|
44
|
+
</ExtraServices>
|
45
|
+
<ServiceErrors>
|
46
|
+
<ServiceError>
|
47
|
+
<Id>50050</Id>
|
48
|
+
<Description>This is a test response with the format of a real error.</Description>
|
49
|
+
</ServiceError>
|
50
|
+
</ServiceErrors>
|
51
|
+
</Service>
|
52
|
+
</Package>
|
53
|
+
</IntlRateV2Response>
|
@@ -31,7 +31,7 @@
|
|
31
31
|
<Event>Out for Delivery, in truck</Event>
|
32
32
|
<EventState>ON</EventState>
|
33
33
|
<EventZIPCode>61536</EventZIPCode>
|
34
|
-
<EventCountry>
|
34
|
+
<EventCountry>CANADA</EventCountry>
|
35
35
|
<FirmName/>
|
36
36
|
<Name/>
|
37
37
|
<AuthorizedAgent>false</AuthorizedAgent>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<RateV4Request USERID="login">
|
3
|
+
<Package ID="0">
|
4
|
+
<Service>ALL</Service>
|
5
|
+
<FirstClassMailType/>
|
6
|
+
<ZipOrigination>90210</ZipOrigination>
|
7
|
+
<ZipDestination>10017</ZipDestination>
|
8
|
+
<Pounds>0</Pounds>
|
9
|
+
<Ounces>800.0</Ounces>
|
10
|
+
<Container>RECTANGULAR</Container>
|
11
|
+
<Size>LARGE</Size>
|
12
|
+
<Width>24.00</Width>
|
13
|
+
<Length>36.00</Length>
|
14
|
+
<Height>24.00</Height>
|
15
|
+
<Girth>96.00</Girth>
|
16
|
+
<Machinable>FALSE</Machinable>
|
17
|
+
</Package>
|
18
|
+
</RateV4Request>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<IntlRateV2Request USERID="login">
|
3
|
+
<Revision>2</Revision>
|
4
|
+
<Package ID="0">
|
5
|
+
<Pounds>0</Pounds>
|
6
|
+
<Ounces>120</Ounces>
|
7
|
+
<MailType>Package</MailType>
|
8
|
+
<GXG>
|
9
|
+
<POBoxFlag>N</POBoxFlag>
|
10
|
+
<GiftFlag>N</GiftFlag>
|
11
|
+
</GXG>
|
12
|
+
<ValueOfContents>269.99</ValueOfContents>
|
13
|
+
<Country>Czech Republic</Country>
|
14
|
+
<Container>RECTANGULAR</Container>
|
15
|
+
<Size>LARGE</Size>
|
16
|
+
<Width>10.00</Width>
|
17
|
+
<Length>15.00</Length>
|
18
|
+
<Height>4.50</Height>
|
19
|
+
<Girth>29.00</Girth>
|
20
|
+
<OriginZip>90210</OriginZip>
|
21
|
+
</Package>
|
22
|
+
</IntlRateV2Request>
|
data/test/remote/usps_test.rb
CHANGED
@@ -12,10 +12,11 @@ class RemoteUSPSTest < Minitest::Test
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def test_tracking
|
15
|
-
|
16
|
-
|
17
|
-
@carrier.find_tracking_info('EJ958083578US', :test => true)
|
15
|
+
response = @carrier.find_tracking_info('LN284529912US', :test => true)
|
18
16
|
assert response.success?, response.message
|
17
|
+
assert_equal 9,response.shipment_events.size
|
18
|
+
assert_equal 'DELIVERED', response.shipment_events.last.message
|
19
|
+
assert_equal Time.parse('2015-06-01 13:36:00 UTC'), response.actual_delivery_date
|
19
20
|
end
|
20
21
|
|
21
22
|
def test_tracking_with_bad_number
|
@@ -214,6 +214,7 @@ class USPSTest < Minitest::Test
|
|
214
214
|
|
215
215
|
def test_build_us_rate_request_uses_proper_container
|
216
216
|
expected_request = xml_fixture('usps/us_rate_request')
|
217
|
+
expected_request.gsub!('<Container/>','<Container>RECTANGULAR</Container>')
|
217
218
|
@carrier.expects(:commit).with(:us_rates, expected_request, false).returns(expected_request)
|
218
219
|
@carrier.expects(:parse_rate_response)
|
219
220
|
package = package_fixtures[:book]
|
@@ -221,7 +222,7 @@ class USPSTest < Minitest::Test
|
|
221
222
|
@carrier.find_rates(location_fixtures[:beverly_hills], location_fixtures[:new_york], package, :test => true, :container => :rectangular)
|
222
223
|
end
|
223
224
|
|
224
|
-
def
|
225
|
+
def test_build_us_rate_request_uses_no_container_on_small_packages
|
225
226
|
expected_request = xml_fixture('usps/us_rate_request')
|
226
227
|
@carrier.expects(:commit).with(:us_rates, expected_request, false).returns(expected_request)
|
227
228
|
@carrier.expects(:parse_rate_response)
|
@@ -229,6 +230,14 @@ class USPSTest < Minitest::Test
|
|
229
230
|
@carrier.find_rates(location_fixtures[:beverly_hills], location_fixtures[:new_york], package, :test => true)
|
230
231
|
end
|
231
232
|
|
233
|
+
def test_build_us_rate_request_uses_proper_container_when_none_is_specified
|
234
|
+
expected_request = xml_fixture('usps/us_rate_request_large')
|
235
|
+
@carrier.expects(:commit).with(:us_rates, expected_request, false).returns(expected_request)
|
236
|
+
@carrier.expects(:parse_rate_response)
|
237
|
+
package = package_fixtures[:big_half_pound]
|
238
|
+
@carrier.find_rates(location_fixtures[:beverly_hills], location_fixtures[:new_york], package, :test => true)
|
239
|
+
end
|
240
|
+
|
232
241
|
def test_build_world_rate_request
|
233
242
|
expected_request = xml_fixture('usps/world_rate_request_without_value')
|
234
243
|
@carrier.expects(:commit).with(:world_rates, expected_request, false).returns(expected_request)
|
@@ -243,6 +252,13 @@ class USPSTest < Minitest::Test
|
|
243
252
|
@carrier.find_rates(location_fixtures[:beverly_hills], location_fixtures[:ottawa], package_fixtures[:american_wii], :test => true, :acceptance_time => Time.parse("2015-06-01T20:34:29Z"))
|
244
253
|
end
|
245
254
|
|
255
|
+
def test_build_world_rate_request_only_country
|
256
|
+
expected_request = xml_fixture('usps/world_rate_request_only_country')
|
257
|
+
@carrier.expects(:commit).with(:world_rates, expected_request, false).returns(expected_request)
|
258
|
+
@carrier.expects(:parse_rate_response)
|
259
|
+
@carrier.find_rates(location_fixtures[:beverly_hills], Location.new(:country => 'CZ'), package_fixtures[:american_wii], :test => true)
|
260
|
+
end
|
261
|
+
|
246
262
|
def test_initialize_options_requirements
|
247
263
|
assert_raises(ArgumentError) { USPS.new }
|
248
264
|
assert USPS.new(:login => 'blah')
|
@@ -281,6 +297,21 @@ class USPSTest < Minitest::Test
|
|
281
297
|
assert_equal ordered_service_names, response.rates.map(&:service_name).sort
|
282
298
|
end
|
283
299
|
|
300
|
+
def test_parse_international_rate_response_errors
|
301
|
+
fixture_xml = xml_fixture('usps/api_error_rate_response')
|
302
|
+
@carrier.expects(:commit).returns(fixture_xml)
|
303
|
+
|
304
|
+
error = assert_raises(ResponseError) do
|
305
|
+
@carrier.find_rates(
|
306
|
+
location_fixtures[:beverly_hills], # imperial (U.S. origin)
|
307
|
+
location_fixtures[:ottawa],
|
308
|
+
package_fixtures[:american_wii],
|
309
|
+
:test => true
|
310
|
+
)
|
311
|
+
end
|
312
|
+
assert_equal 'This is a test response with the format of a real error.', error.message
|
313
|
+
end
|
314
|
+
|
284
315
|
def test_parse_max_dimension_sentences
|
285
316
|
limits = {
|
286
317
|
"Max. length 46\", width 35\", height 46\" and max. length plus girth 108\"" =>
|
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.2.
|
4
|
+
version: 1.2.2
|
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: 2015-06-
|
14
|
+
date: 2015-06-08 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: quantified
|
@@ -312,6 +312,7 @@ files:
|
|
312
312
|
- test/fixtures/xml/ups/tracking_request.xml
|
313
313
|
- test/fixtures/xml/ups/triple_accept_response.xml
|
314
314
|
- test/fixtures/xml/ups/triple_confirm_response.xml
|
315
|
+
- test/fixtures/xml/usps/api_error_rate_response.xml
|
315
316
|
- test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_base_rate_response.xml
|
316
317
|
- test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_plus_rate_response.xml
|
317
318
|
- test/fixtures/xml/usps/beverly_hills_to_new_york_book_rate_response.xml
|
@@ -331,6 +332,8 @@ files:
|
|
331
332
|
- test/fixtures/xml/usps/tracking_response_not_available.xml
|
332
333
|
- test/fixtures/xml/usps/tracking_response_test_error.xml
|
333
334
|
- test/fixtures/xml/usps/us_rate_request.xml
|
335
|
+
- test/fixtures/xml/usps/us_rate_request_large.xml
|
336
|
+
- test/fixtures/xml/usps/world_rate_request_only_country.xml
|
334
337
|
- test/fixtures/xml/usps/world_rate_request_with_value.xml
|
335
338
|
- test/fixtures/xml/usps/world_rate_request_without_value.xml
|
336
339
|
- test/remote/canada_post_pws_platform_test.rb
|
@@ -502,6 +505,7 @@ test_files:
|
|
502
505
|
- test/fixtures/xml/ups/tracking_request.xml
|
503
506
|
- test/fixtures/xml/ups/triple_accept_response.xml
|
504
507
|
- test/fixtures/xml/ups/triple_confirm_response.xml
|
508
|
+
- test/fixtures/xml/usps/api_error_rate_response.xml
|
505
509
|
- test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_base_rate_response.xml
|
506
510
|
- test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_plus_rate_response.xml
|
507
511
|
- test/fixtures/xml/usps/beverly_hills_to_new_york_book_rate_response.xml
|
@@ -521,6 +525,8 @@ test_files:
|
|
521
525
|
- test/fixtures/xml/usps/tracking_response_not_available.xml
|
522
526
|
- test/fixtures/xml/usps/tracking_response_test_error.xml
|
523
527
|
- test/fixtures/xml/usps/us_rate_request.xml
|
528
|
+
- test/fixtures/xml/usps/us_rate_request_large.xml
|
529
|
+
- test/fixtures/xml/usps/world_rate_request_only_country.xml
|
524
530
|
- test/fixtures/xml/usps/world_rate_request_with_value.xml
|
525
531
|
- test/fixtures/xml/usps/world_rate_request_without_value.xml
|
526
532
|
- test/remote/canada_post_pws_platform_test.rb
|