Sha256: b78190c36ebc24a19b60671478895eaea102a6e42a0e869d95a91a510dad4382

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

module Trackerific
  module Parsers
    class USPS < Parsers::Base
      protected

      def response_error
        @response_error ||= if @response.code != 200
          Trackerific::Error.new("HTTP returned status #{@response.code}")
        elsif @response['Error']
          Trackerific::Error.new(@response['Error']['Description'])
        elsif @response['TrackResponse'].nil? && @response['CityStateLookupResponse'].nil?
          Trackerific::Error.new("Invalid response from server.")
        else
          false
        end
      end

      def summary
        tracking_info['TrackSummary']
      end

      def events
        tracking_info.fetch('TrackDetail', []).map do |e|
          Trackerific::Event.new(date(e), description(e), location(e))
        end
      end

      private

      def tracking_info
        @response['TrackResponse']['TrackInfo']
      end

      def date(event)
        d = event.split(" ")
        DateTime.parse(d[0..3].join(" "))
      end

      def description(event)
        d = event.split(" ")
        d[4..d.length-4].join(" ")
      end

      def location(event)
        d = event.gsub(".", "").split(" ")
        city, state, zip = d.last(3)
        "#{city}, #{state} #{zip}"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
trackerific-0.7.2 lib/trackerific/parsers/usps.rb