active_shipping 1.6.3 → 1.6.4
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/lib/active_shipping/carriers/fedex.rb +34 -19
- data/lib/active_shipping/carriers/ups.rb +18 -0
- data/lib/active_shipping/version.rb +1 -1
- data/test/remote/ups_test.rb +13 -0
- data/test/test_helper.rb +1 -0
- data/test/unit/carriers/fedex_test.rb +26 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf492f5f78fa92510f0f17837a59225eca7a8230
|
4
|
+
data.tar.gz: d8609c76e64bb66b7ca522eab646f944b4684c90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e31884ad4afb2e2948f6f1558f174b7ca4c09b6428818ad555e3798b02e61321ea9a1de6664d4acc6969f4756c3e5c79e932773ef603b5b412a53e91fe776d5
|
7
|
+
data.tar.gz: ebe8569df5061fa69e3a4fd36f281ce83c907dd5f8bc5c76a9b06c60c2d07050d21c2e925fd69d7637360edf8de80ee1b931a8df7ebcc9b1ccfbcd18b20e7a1c
|
@@ -474,31 +474,46 @@ module ActiveShipping
|
|
474
474
|
message = response_message(xml)
|
475
475
|
|
476
476
|
if success
|
477
|
+
missing_xml_field = false
|
477
478
|
rate_estimates = xml.root.css('> RateReplyDetails').map do |rated_shipment|
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
479
|
+
begin
|
480
|
+
service_code = rated_shipment.at('ServiceType').text
|
481
|
+
is_saturday_delivery = rated_shipment.at('AppliedOptions').try(:text) == 'SATURDAY_DELIVERY'
|
482
|
+
service_type = is_saturday_delivery ? "#{service_code}_SATURDAY_DELIVERY" : service_code
|
483
|
+
|
484
|
+
transit_time = rated_shipment.at('TransitTime').text if ["FEDEX_GROUND", "GROUND_HOME_DELIVERY"].include?(service_code)
|
485
|
+
max_transit_time = rated_shipment.at('MaximumTransitTime').try(:text) if service_code == "FEDEX_GROUND"
|
486
|
+
|
487
|
+
delivery_timestamp = rated_shipment.at('DeliveryTimestamp').try(:text)
|
488
|
+
delivery_range = delivery_range_from(transit_time, max_transit_time, delivery_timestamp, (service_code == "GROUND_HOME_DELIVERY"), options)
|
489
|
+
|
490
|
+
currency = rated_shipment.at('RatedShipmentDetails/ShipmentRateDetail/TotalNetCharge/Currency').text
|
491
|
+
|
492
|
+
RateEstimate.new(origin, destination, @@name,
|
493
|
+
self.class.service_name_for_code(service_type),
|
494
|
+
:service_code => service_code,
|
495
|
+
:total_price => rated_shipment.at('RatedShipmentDetails/ShipmentRateDetail/TotalNetCharge/Amount').text.to_f,
|
496
|
+
:currency => currency,
|
497
|
+
:packages => packages,
|
498
|
+
:delivery_range => delivery_range)
|
499
|
+
rescue NoMethodError
|
500
|
+
missing_xml_field = true
|
501
|
+
nil
|
502
|
+
end
|
496
503
|
end
|
497
504
|
|
505
|
+
rate_estimates = rate_estimates.compact
|
506
|
+
logger.warn("[FedexParseRateError] Some fields where missing in the response: #{response}") if logger && missing_xml_field
|
507
|
+
|
498
508
|
if rate_estimates.empty?
|
499
509
|
success = false
|
500
|
-
|
510
|
+
if missing_xml_field
|
511
|
+
message = "The response from the carrier contained errors and could not be treated"
|
512
|
+
else
|
513
|
+
message = "No shipping rates could be found for the destination address" if message.blank?
|
514
|
+
end
|
501
515
|
end
|
516
|
+
|
502
517
|
else
|
503
518
|
rate_estimates = []
|
504
519
|
end
|
@@ -727,6 +727,24 @@ module ActiveShipping
|
|
727
727
|
xml.DCISType(PACKAGE_DELIVERY_CONFIRMATION_CODES[delivery_confirmation])
|
728
728
|
end
|
729
729
|
end
|
730
|
+
|
731
|
+
if dry_ice = package.options[:dry_ice]
|
732
|
+
xml.DryIce do
|
733
|
+
xml.RegulationSet(dry_ice[:regulation_set] || 'CFR')
|
734
|
+
xml.DryIceWeight do
|
735
|
+
xml.UnitOfMeasurement do
|
736
|
+
xml.Code(options[:imperial] ? 'LBS' : 'KGS')
|
737
|
+
end
|
738
|
+
# Cannot be more than package weight.
|
739
|
+
# Should be more than 0.0.
|
740
|
+
# Valid characters are 0-9 and .(Decimal point).
|
741
|
+
# Limit to 1 digit after the decimal. The maximum length
|
742
|
+
# of the field is 5 including . and can hold up
|
743
|
+
# to 1 decimal place.
|
744
|
+
xml.Weight(dry_ice[:weight])
|
745
|
+
end
|
746
|
+
end
|
747
|
+
end
|
730
748
|
end
|
731
749
|
|
732
750
|
# not implemented: * Shipment/Package/LargePackageIndicator element
|
data/test/remote/ups_test.rb
CHANGED
@@ -426,4 +426,17 @@ class RemoteUPSTest < Minitest::Test
|
|
426
426
|
assert_instance_of ActiveShipping::LabelResponse, response
|
427
427
|
assert_equal "GIF", response.params['ShipmentResults']['PackageResults']['LabelImage']['LabelImageFormat']['Code']
|
428
428
|
end
|
429
|
+
|
430
|
+
def test_create_shipment_with_dry_ice_options
|
431
|
+
response = @carrier.create_shipment(
|
432
|
+
location_fixtures[:beverly_hills_with_name],
|
433
|
+
location_fixtures[:new_york_with_name],
|
434
|
+
package_fixtures.values_at(:frozen_stuff),
|
435
|
+
:service_code => '01',
|
436
|
+
:test => true
|
437
|
+
)
|
438
|
+
|
439
|
+
assert response.success?
|
440
|
+
assert_instance_of ActiveShipping::LabelResponse, response
|
441
|
+
end
|
429
442
|
end
|
data/test/test_helper.rb
CHANGED
@@ -85,6 +85,7 @@ module ActiveShipping::Test
|
|
85
85
|
:small_half_pound => Package.new(8, [1, 1, 1], :units => :imperial),
|
86
86
|
:big_half_pound => Package.new((16 * 50), [24, 24, 36], :units => :imperial),
|
87
87
|
:chocolate_stuff => Package.new(80, [2, 6, 12], :units => :imperial),
|
88
|
+
:frozen_stuff => Package.new(80, [2, 6, 12], :units => :imperial, :dry_ice => {weight: 1.4}),
|
88
89
|
:declared_value => Package.new(80, [2, 6, 12], :units => :imperial, :currency => 'USD', :value => 999.99),
|
89
90
|
:tshirts => Package.new(10 * 16, nil, :units => :imperial),
|
90
91
|
:shipping_container => Package.new(2200000, [2440, 2600, 6058], :description => '20 ft Standard Container', :units => :metric),
|
@@ -205,6 +205,32 @@ class FedExTest < Minitest::Test
|
|
205
205
|
assert_equal message, exception.message
|
206
206
|
end
|
207
207
|
|
208
|
+
def test_parsing_response_with_no_system_code_for_one_rate_does_not_crash
|
209
|
+
mock_response = xml_fixture('fedex/freight_rate_response').gsub('<v13:ServiceType>FEDEX_FREIGHT_ECONOMY</v13:ServiceType>','')
|
210
|
+
|
211
|
+
@carrier.expects(:commit).returns(mock_response)
|
212
|
+
@carrier.logger = Logger.new(StringIO.new)
|
213
|
+
@carrier.logger.expects(:warn).once.with("[FedexParseRateError] Some fields where missing in the response: #{mock_response}")
|
214
|
+
|
215
|
+
rates = @carrier.find_rates( location_fixtures[:ottawa], location_fixtures[:beverly_hills], package_fixtures.values_at(:book, :wii), :test => true)
|
216
|
+
assert rates.rates.length == 1
|
217
|
+
assert_equal rates.rates[0].service_code, 'FEDEX_FREIGHT_PRIORITY'
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_parsing_response_with_no_system_code_on_any_shipping_rate
|
221
|
+
mock_response = xml_fixture('fedex/freight_rate_response').gsub('<v13:ServiceType>FEDEX_FREIGHT_ECONOMY</v13:ServiceType>','').gsub('<v13:ServiceType>FEDEX_FREIGHT_PRIORITY</v13:ServiceType>','')
|
222
|
+
|
223
|
+
@carrier.expects(:commit).returns(mock_response)
|
224
|
+
@carrier.logger = Logger.new(StringIO.new)
|
225
|
+
@carrier.logger.expects(:warn).once.with("[FedexParseRateError] Some fields where missing in the response: #{mock_response}")
|
226
|
+
|
227
|
+
exception = assert_raises(ActiveShipping::ResponseError) do
|
228
|
+
@carrier.find_rates( location_fixtures[:ottawa], location_fixtures[:beverly_hills], package_fixtures.values_at(:book, :wii), :test => true)
|
229
|
+
end
|
230
|
+
message = "The response from the carrier contained errors and could not be treated"
|
231
|
+
assert_equal exception.message, message
|
232
|
+
end
|
233
|
+
|
208
234
|
def test_service_name_for_code
|
209
235
|
FedEx::SERVICE_TYPES.each do |capitalized_name, readable_name|
|
210
236
|
assert_equal readable_name, FedEx.service_name_for_code(capitalized_name)
|
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.
|
4
|
+
version: 1.6.4
|
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-12-
|
14
|
+
date: 2015-12-21 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: quantified
|