active_shipping 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|