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