class Fedex::Request::TrackingInformation
Attributes
package_id[R]
package_type[R]
Public Class Methods
new(credentials, options={})
click to toggle source
# File lib/fedex/request/tracking_information.rb, line 10 def initialize(credentials, options={}) requires!(options, :package_type, :package_id) unless options.has_key?(:tracking_number) @package_id = options[:package_id] || options.delete(:tracking_number) @package_type = options[:package_type] || "TRACKING_NUMBER_OR_DOORTAG" @credentials = credentials # Optional @include_detailed_scans = options[:include_detailed_scans] || true @uuid = options[:uuid] @paging_token = options[:paging_token] unless package_type_valid? raise "Unknown package type '#{package_type}'" end end
Public Instance Methods
process_request()
click to toggle source
# File lib/fedex/request/tracking_information.rb, line 27 def process_request api_response = self.class.post(api_url, :body => build_xml) puts api_response if @debug == true response = parse_response(api_response) if success?(response) options = response[:track_reply][:track_details] if response[:track_reply][:duplicate_waybill].downcase == 'true' shipments = [] [options].flatten.map do |details| options = {:tracking_number => @package_id, :uuid => details[:tracking_number_unique_identifier]} shipments << Request::TrackingInformation.new(@credentials, options).process_request end shipments.flatten else [options].flatten.map do |details| Fedex::TrackingInformation.new(details) end end else error_message = if response[:track_reply] response[:track_reply][:notifications][:message] else "#{api_response["Fault"]["detail"]["fault"]["reason"]}\n--#{api_response["Fault"]["detail"]["fault"]["details"]["ValidationFailureDetail"]["message"].join("\n--")}" end rescue $1 raise RateError, error_message end end
Private Instance Methods
add_package_identifier(xml)
click to toggle source
# File lib/fedex/request/tracking_information.rb, line 79 def add_package_identifier(xml) xml.PackageIdentifier{ xml.Value package_id xml.Type package_type } end
build_xml()
click to toggle source
Build xml Fedex
Web Service request
# File lib/fedex/request/tracking_information.rb, line 60 def build_xml builder = Nokogiri::XML::Builder.new do |xml| xml.TrackRequest(:xmlns => "http://fedex.com/ws/track/v#{service[:version]}"){ add_web_authentication_detail(xml) add_client_detail(xml) add_version(xml) add_package_identifier(xml) xml.TrackingNumberUniqueIdentifier @uuid if @uuid xml.IncludeDetailedScans @include_detailed_scans xml.PagingToken @paging_token if @paging_token } end builder.doc.root.to_xml end
package_type_valid?()
click to toggle source
# File lib/fedex/request/tracking_information.rb, line 92 def package_type_valid? Fedex::TrackingInformation::PACKAGE_IDENTIFIER_TYPES.include? package_type end
service()
click to toggle source
# File lib/fedex/request/tracking_information.rb, line 75 def service { :id => 'trck', :version => 6 } end
success?(response)
click to toggle source
Successful request
# File lib/fedex/request/tracking_information.rb, line 87 def success?(response) response[:track_reply] && %w{SUCCESS WARNING NOTE}.include?(response[:track_reply][:highest_severity]) end