module PackageTracker::Carriers::UPS
Constants
- LIVE_URL
- PATH
- TEST_URL
Public Instance Methods
delivered_status()
click to toggle source
# File lib/package_tracker/carriers/ups.rb, line 21 def delivered_status "DELIVERED" end
match(tracking_number)
click to toggle source
# File lib/package_tracker/carriers/ups.rb, line 17 def match(tracking_number) tracking_number =~ /^1Z\d*/ end
track(tracking_number, options)
click to toggle source
# File lib/package_tracker/carriers/ups.rb, line 11 def track(tracking_number, options) validate_credentials!(options[:credentials]) repsonse = Request.post(request_url(options[:testing]), PATH, request_data(tracking_number, options[:credentials])) parse_response(tracking_number, repsonse) end
Private Instance Methods
handle_errors(response)
click to toggle source
# File lib/package_tracker/carriers/ups.rb, line 75 def handle_errors(response) case Nokogiri::XML(response.body).css("Error ErrorCode").text when "250003" then raise InvalidCredentialsError when "151018" then raise InvalidTrackingNumberError end end
parse_response(tracking_number, response)
click to toggle source
# File lib/package_tracker/carriers/ups.rb, line 56 def parse_response(tracking_number, response) handle_errors(response) tracking_response = Response.new(tracking_number, self) Nokogiri::XML(response.body).css("Package Activity").each do |activity| location = "" location += "#{activity.css("City").text}, " unless activity.css("City").empty? location += "#{activity.css("StateProvinceCode").text}, " unless activity.css("StateProvinceCode").empty? location += "#{activity.css("CountryCode").text}" tracking_response.add_status( activity.css("Status Description").text, Time.parse(activity.css("Date").text + activity.css("Time").text), location ) end tracking_response end
request_data(tracking_number, credentials)
click to toggle source
# File lib/package_tracker/carriers/ups.rb, line 35 def request_data(tracking_number, credentials) "<?xml version='1.0'?> <AccessRequest xml:lang='en-US'> <AccessLicenseNumber>#{credentials[:key]}</AccessLicenseNumber> <UserId>#{credentials[:user_id]}</UserId> <Password>#{credentials[:password]}</Password> </AccessRequest> <?xml version='1.0'?> <TrackRequest xml:lang='en-US'> <Request> <TransactionReference> <XpciVersion>1.0</XpciVersion> </TransactionReference> <RequestAction>Track</RequestAction> <RequestOption>activity</RequestOption> </Request> <TrackingNumber>#{tracking_number}</TrackingNumber> </TrackRequest> " end
request_url(testing)
click to toggle source
# File lib/package_tracker/carriers/ups.rb, line 27 def request_url(testing) TEST_URL # apparently we don't need the live url for tracking end
required_credentials()
click to toggle source
# File lib/package_tracker/carriers/ups.rb, line 31 def required_credentials [:user_id, :key, :password] end