lib/fedex/request/rate.rb in fedex-3.1.0 vs lib/fedex/request/rate.rb in fedex-3.3.0
- old
+ new
@@ -7,12 +7,18 @@
def process_request
api_response = self.class.post(api_url, :body => build_xml)
puts api_response if @debug
response = parse_response(api_response)
if success?(response)
- rate_details = [response[:rate_reply][:rate_reply_details][:rated_shipment_details]].flatten.first[:shipment_rate_detail]
- Fedex::Rate.new(rate_details)
+ rate_reply_details = response[:rate_reply][:rate_reply_details] || []
+ rate_reply_details = [rate_reply_details] if rate_reply_details.is_a?(Hash)
+
+ rate_reply_details.map do |rate_reply|
+ rate_details = [rate_reply[:rated_shipment_details]].flatten.first[:shipment_rate_detail]
+ rate_details.merge!(service_type: rate_reply[:service_type])
+ Fedex::Rate.new(rate_details)
+ end
else
error_message = if response[:rate_reply]
[response[:rate_reply][:notifications]].flatten.first[:message]
else
"#{api_response["Fault"]["detail"]["fault"]["reason"]}\n--#{api_response["Fault"]["detail"]["fault"]["details"]["ValidationFailureDetail"]["message"].join("\n--")}"
@@ -25,10 +31,10 @@
# Add information for shipments
def add_requested_shipment(xml)
xml.RequestedShipment{
xml.DropoffType @shipping_options[:drop_off_type] ||= "REGULAR_PICKUP"
- xml.ServiceType service_type
+ xml.ServiceType service_type if service_type
xml.PackagingType @shipping_options[:packaging_type] ||= "YOUR_PACKAGING"
add_shipper(xml)
add_recipient(xml)
add_shipping_charges_payment(xml)
add_customs_clearance(xml) if @customs_clearance