diff --git a/Gemfile.lock b/Gemfile.lock index c80c4b3..cc9c00d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - trackerific (0.7.5) + trackerific (0.7.6) activesupport builder httparty (>= 0.12.0) @@ -10,7 +10,7 @@ PATH GEM remote: https://rubygems.org/ specs: - activesupport (4.0.0) + activesupport (4.0.1) i18n (~> 0.6, >= 0.6.4) minitest (~> 4.2) multi_json (~> 1.3) @@ -21,13 +21,24 @@ GEM nokogiri (>= 1.4.0) atomic (1.1.14) builder (3.2.2) + byebug (2.3.1) + columnize (~> 0.3.6) + debugger-linecache (~> 1.2.0) + columnize (0.3.6) coveralls (0.7.0) multi_json (~> 1.3) rest-client simplecov (>= 0.7) term-ansicolor thor + debugger (1.6.2) + columnize (>= 0.3.1) + debugger-linecache (~> 1.2.0) + debugger-ruby_core_source (~> 1.2.3) + debugger-linecache (1.2.0) + debugger-ruby_core_source (1.2.4) diff-lcs (1.1.3) + docile (1.1.0) fakeweb (1.3.0) gyoku (1.1.0) builder (>= 2.1.2) @@ -38,8 +49,8 @@ GEM rack rubyntlm (~> 0.3.2) i18n (0.6.5) - json (1.8.0) - mime-types (1.25) + json (1.8.1) + mime-types (2.0) minitest (4.7.5) multi_json (1.8.2) multi_xml (0.5.5) @@ -66,16 +77,17 @@ GEM nokogiri (>= 1.4.0, < 1.6) nori (~> 2.3.0) wasabi (~> 3.2.0) - simplecov (0.7.1) - multi_json (~> 1.0) - simplecov-html (~> 0.7.1) - simplecov-html (0.7.1) + simplecov (0.8.2) + docile (~> 1.1.0) + multi_json + simplecov-html (~> 0.8.0) + simplecov-html (0.8.0) term-ansicolor (1.2.2) tins (~> 0.8) thor (0.18.1) thread_safe (0.1.3) atomic - tins (0.12.0) + tins (0.13.1) tzinfo (0.3.38) wasabi (3.2.0) httpi (~> 2.0) @@ -86,7 +98,9 @@ PLATFORMS DEPENDENCIES bundler (>= 1.3.5) + byebug coveralls (~> 0.7.0) + debugger fakeweb (~> 1.3.0) rake rspec (~> 2.6.0) diff --git a/lib/trackerific/parsers/ups.rb b/lib/trackerific/parsers/ups.rb index 218af06..d1f6c33 100644 --- a/lib/trackerific/parsers/ups.rb +++ b/lib/trackerific/parsers/ups.rb @@ -50,7 +50,11 @@ def description(a) end def location(a) - a['ActivityLocation']['Address'].map {|k,v| v}.join(" ") + if a['ActivityLocation']['Address'].nil? + "" + else + a['ActivityLocation']['Address'].map {|k,v| v}.join(" ") + end end def activity diff --git a/lib/trackerific/parsers/usps.rb b/lib/trackerific/parsers/usps.rb index 146d877..9df84a5 100644 --- a/lib/trackerific/parsers/usps.rb +++ b/lib/trackerific/parsers/usps.rb @@ -29,19 +29,55 @@ def tracking_info @response['TrackResponse']['TrackInfo'] end - def date(event) +def date(event) + months = { "January" => 0, "Feburary" => 1, "March" => 2, "April" => 3, "May" => 4, "June" => 5, "July" => 6, "August" => 7, "September" => 8, "October" => 9, "November" => 10, "December" => 11 } + d = event.split(" ") - DateTime.parse(d[0..3].join(" ")) + event_hash = Hash[d.map.with_index.to_a] + + month_name = d.find { |element| months[element] } + start_value = event_hash[month_name] + + if d[start_value + 4].present? # set end of range based on am/pm presence + if d[start_value + 4].include?("am") || d[start_value + 4].include?("pm") + + end_value = start_value + 4 + else + end_value = start_value + 2 + end + else + end_value = start_value + 2 + end + + g = DateTime.parse(d[start_value..end_value].join(" ")) end def description(event) - d = event.split(" ") - d[4..d.length-4].join(" ") + # description is always the first thing, separated by a comma from the date + d = event.split(",").first end def location(event) d = event.gsub(".", "").split(" ") - city, state, zip = d.last(3) - "#{city}, #{state} #{zip}" + + if d.last.include?("201") #detecting year 2013/2014/etc., no location present + city, state, zip = ["", "", ""] + else + event_hash = Hash[d.map.with_index.to_a] + + starting_index = event_hash["2013,"] if event_hash["2013,"].present? + starting_index = event_hash["2014,"] if event_hash["2014,"].present? + starting_index = event_hash["am,"] if event_hash["am,"].present? + starting_index = event_hash["pm,"] if event_hash["pm,"].present? + + package_location_array = d[starting_index + 1..d.length] + + zip = package_location_array.last + state = package_location_array[package_location_array.length - 2] + city = package_location_array - [state, zip] + city = city.join(" ") + end + + "#{city} #{state} #{zip}" end end diff --git a/lib/trackerific/version.rb b/lib/trackerific/version.rb index 5cbe7bf..bbf1337 100644 --- a/lib/trackerific/version.rb +++ b/lib/trackerific/version.rb @@ -1,3 +1,3 @@ module Trackerific - VERSION = "0.7.5" + VERSION = "0.7.6" end diff --git a/spec/lib/trackerific/version_spec.rb b/spec/lib/trackerific/version_spec.rb index 4dfcbcc..f254225 100644 --- a/spec/lib/trackerific/version_spec.rb +++ b/spec/lib/trackerific/version_spec.rb @@ -1,5 +1,5 @@ require 'spec_helper' describe Trackerific::VERSION do - it { should eq "0.7.5" } + it { should eq "0.7.6" } end diff --git a/trackerific-0.7.6.gem b/trackerific-0.7.6.gem new file mode 100644 index 0000000..b5328fd Binary files /dev/null and b/trackerific-0.7.6.gem differ diff --git a/trackerific.gemspec b/trackerific.gemspec index 12487ff..f764e98 100644 --- a/trackerific.gemspec +++ b/trackerific.gemspec @@ -25,6 +25,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'bundler', '>= 1.3.5' spec.add_development_dependency 'rake' + spec.add_development_dependency 'debugger' spec.add_development_dependency 'rspec', '~> 2.6.0' spec.add_development_dependency 'fakeweb', '~> 1.3.0' spec.add_development_dependency 'coveralls', '~> 0.7.0'