Sha256: ce069cf6744b70f40f30e283114398e5572bbc268ec2a3f937f340f47093caf2
Contents?: true
Size: 1.61 KB
Versions: 1
Compression:
Stored size: 1.61 KB
Contents
module Trackerific module Parsers class UPS < Parsers::Base protected def response_error @response_error ||= if @response.code != 200 Trackerific::Error.new("HTTP returned status #{@response.code}") elsif response_status_code == :error Trackerific::Error.new(error_response) elsif response_status_code == :success false else Trackerific::Error.new("Unknown status code from server.") end end def summary description(activity.first) end def events activity.map do |a| date = parse_ups_date_time(a['Date'], a['Time']) Trackerific::Event.new(date, description(a), location(a)) end end private def track_response @response['TrackResponse'] end def response_status_code { "0" => :error, "1" => :success }[track_response['Response']['ResponseStatusCode']] end def error_response track_response['Response']['Error']['ErrorDescription'] end def parse_ups_date_time(date, time) hours, minutes, seconds = time.scan(/.{2}/) DateTime.parse("#{Date.parse(date)} #{hours}:#{minutes}:#{seconds}") end def description(a) a['Status']['StatusType']['Description'] end def location(a) a['ActivityLocation']['Address'].map {|k,v| v}.join(" ") end def activity @activity ||= begin a = track_response['Shipment']['Package']['Activity'] a.is_a?(Array) ? a : [a] end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
trackerific-0.7.2 | lib/trackerific/parsers/ups.rb |