trackerific 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -1
- data/Gemfile.lock +5 -1
- data/Rakefile +16 -0
- data/VERSION +1 -1
- data/doc/Trackerific.html +30 -20
- data/doc/Trackerific/Base.html +56 -89
- data/doc/Trackerific/Details.html +84 -33
- data/doc/Trackerific/Error.html +1 -1
- data/doc/Trackerific/Event.html +97 -59
- data/doc/Trackerific/FedEx.html +48 -89
- data/doc/Trackerific/UPS.html +46 -78
- data/doc/Trackerific/USPS.html +56 -145
- data/doc/_index.html +1 -1
- data/doc/file.README.html +1 -1
- data/doc/index.html +1 -1
- data/doc/method_list.html +13 -53
- data/doc/top-level-namespace.html +1 -1
- data/lib/fedex.rb +32 -17
- data/lib/trackerific.rb +41 -10
- data/lib/trackerific_details.rb +22 -3
- data/lib/trackerific_event.rb +27 -7
- data/lib/ups.rb +21 -12
- data/lib/usps.rb +32 -19
- data/spec/lib/trackerific_spec.rb +1 -7
- data/trackerific.gemspec +7 -7
- metadata +21 -7
- data/.yardoc/checksums +0 -6
- data/.yardoc/objects/root.dat +0 -0
- data/.yardoc/proxy_types +0 -0
data/lib/ups.rb
CHANGED
@@ -5,24 +5,23 @@ module Trackerific
|
|
5
5
|
|
6
6
|
# Provides package tracking support for UPS.
|
7
7
|
class UPS < Base
|
8
|
+
# setup HTTParty
|
8
9
|
include ::HTTParty
|
9
10
|
format :xml
|
11
|
+
# use the test site for Rails development, production for everything else
|
10
12
|
base_uri defined?(Rails) ? case Rails.env
|
11
13
|
when 'test','development' then 'https://wwwcie.ups.com/ups.app/xml'
|
12
14
|
when 'production' then 'https://www.ups.com/ups.app/xml'
|
13
15
|
end : 'https://www.ups.com/ups.app/xml'
|
14
16
|
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
# @return [Array] the required options for tracking a UPS package.
|
19
|
-
def required_options
|
20
|
-
[:key, :user_id, :password]
|
21
|
-
end
|
22
|
-
|
23
|
-
# Tracks a UPS package.
|
24
|
-
# A Trackerific::Error is raised when a package cannot be tracked.
|
17
|
+
# Tracks a UPS package
|
18
|
+
# @param [String] package_id the package identifier
|
25
19
|
# @return [Trackerific::Details] the tracking details
|
20
|
+
# @raise [Trackerific::Error] raised when the server returns an error (invalid credentials, tracking package, etc.)
|
21
|
+
# @example Track a package
|
22
|
+
# ups = Trackerific::UPS.new key: 'api key', user_id: 'user', password: 'secret'
|
23
|
+
# details = ups.track_package("1Z12345E0291980793")
|
24
|
+
# @api public
|
26
25
|
def track_package(package_id)
|
27
26
|
super
|
28
27
|
# connect to UPS via HTTParty
|
@@ -40,8 +39,16 @@ module Trackerific
|
|
40
39
|
|
41
40
|
protected
|
42
41
|
|
42
|
+
# The required options for tracking a UPS package
|
43
|
+
# @return [Array] the required options for tracking a UPS package.
|
44
|
+
# @api private
|
45
|
+
def required_options
|
46
|
+
[:key, :user_id, :password]
|
47
|
+
end
|
48
|
+
|
43
49
|
# Parses the response from UPS
|
44
50
|
# @return [Trackerific::Details]
|
51
|
+
# @api private
|
45
52
|
def parse_success_response(http_response)
|
46
53
|
# get the activity from the UPS response
|
47
54
|
activity = http_response['TrackResponse']['Shipment']['Package']['Activity']
|
@@ -70,14 +77,16 @@ module Trackerific
|
|
70
77
|
)
|
71
78
|
end
|
72
79
|
|
73
|
-
# Parses a UPS tracking response, and returns any errors
|
80
|
+
# Parses a UPS tracking response, and returns any errors
|
74
81
|
# @return [String] the UPS tracking error
|
82
|
+
# @api private
|
75
83
|
def parse_error_response(http_response)
|
76
84
|
http_response['TrackResponse']['Response']['Error']['ErrorDescription']
|
77
85
|
end
|
78
86
|
|
79
|
-
# Builds the XML request to send to UPS for tracking a package
|
87
|
+
# Builds the XML request to send to UPS for tracking a package
|
80
88
|
# @return [String] the XML request
|
89
|
+
# @api private
|
81
90
|
def build_xml_request
|
82
91
|
xml = ""
|
83
92
|
builder = ::Builder::XmlMarkup.new(:target => xml)
|
data/lib/usps.rb
CHANGED
@@ -6,34 +6,35 @@ module Trackerific
|
|
6
6
|
|
7
7
|
# Provides package tracking support for USPS.
|
8
8
|
class USPS < Base
|
9
|
+
# setup HTTParty
|
9
10
|
include HTTParty
|
10
11
|
format :xml
|
12
|
+
# use the test site for Rails development, production for everything else
|
11
13
|
base_uri defined?(Rails) ? case Rails.env
|
12
14
|
when 'test', 'development' then 'http://testing.shippingapis.com'
|
13
15
|
when 'production' then 'https://secure.shippingapis.com'
|
14
16
|
end : 'https://secure.shippingapis.com'
|
15
17
|
|
16
|
-
|
17
|
-
|
18
|
-
@options = options
|
19
|
-
end
|
20
|
-
|
21
|
-
# The required option for tracking a UPS package is :user_id
|
22
|
-
#
|
23
|
-
# @return [Array] the required options for tracking a UPS package.
|
24
|
-
def required_options
|
25
|
-
[:user_id]
|
26
|
-
end
|
27
|
-
|
28
|
-
# Tracks a USPS package.
|
29
|
-
# A Trackerific::Error is raised when a package cannot be tracked.
|
18
|
+
# Tracks a USPS package
|
19
|
+
# @param [String] package_id the package identifier
|
30
20
|
# @return [Trackerific::Details] the tracking details
|
21
|
+
# @raise [Trackerific::Error] raised when the server returns an error (invalid credentials, tracking package, etc.)
|
22
|
+
# @example Track a package
|
23
|
+
# usps = Trackerific::USPS.new user_id: 'user'
|
24
|
+
# details = ups.track_package("EJ958083578US")
|
25
|
+
# @api public
|
31
26
|
def track_package(package_id)
|
32
27
|
super
|
28
|
+
# connect to the USPS shipping API via HTTParty
|
33
29
|
response = self.class.get('/ShippingAPITest.dll', :query => {:API => 'TrackV2', :XML => build_xml_request}.to_query)
|
30
|
+
# throw any HTTP errors
|
34
31
|
response.error! unless response.code == 200
|
32
|
+
# raise a Trackerific::Error if there is an error in the response, or if the
|
33
|
+
# tracking response is malformed
|
35
34
|
raise Trackerific::Error, response['Error']['Description'] unless response['Error'].nil?
|
36
35
|
raise Trackerific::Error, "Tracking information not found in response from server." if response['TrackResponse'].nil?
|
36
|
+
# get the tracking information from the response, and convert into a
|
37
|
+
# Trackerific::Details
|
37
38
|
tracking_info = response['TrackResponse']['TrackInfo']
|
38
39
|
details = []
|
39
40
|
tracking_info['TrackDetail'].each do |d|
|
@@ -47,6 +48,7 @@ module Trackerific
|
|
47
48
|
desc = d[4..d.length].join(" ")
|
48
49
|
details << Trackerific::Event.new(date, desc, "")
|
49
50
|
end
|
51
|
+
# return the details
|
50
52
|
Trackerific::Details.new(
|
51
53
|
tracking_info['ID'],
|
52
54
|
tracking_info['TrackSummary'],
|
@@ -56,15 +58,26 @@ module Trackerific
|
|
56
58
|
|
57
59
|
protected
|
58
60
|
|
59
|
-
#
|
60
|
-
# @return [
|
61
|
+
# The required options for tracking a UPS package
|
62
|
+
# @return [Array] the required options for tracking a UPS package.
|
63
|
+
# @api private
|
64
|
+
def required_options
|
65
|
+
[:user_id]
|
66
|
+
end
|
67
|
+
|
68
|
+
# Builds an XML request to send to USPS
|
69
|
+
# @return [String] the xml request
|
70
|
+
# @api private
|
61
71
|
def build_xml_request
|
62
|
-
|
63
|
-
|
72
|
+
xml = ""
|
73
|
+
# set up the Builder
|
74
|
+
builder = ::Builder::XmlMarkup.new(:target => xml)
|
75
|
+
# build the request
|
64
76
|
builder.TrackRequest(:USERID => @options[:user_id]) do |t|
|
65
77
|
t.TrackID(:ID => @package_id)
|
66
78
|
end
|
67
|
-
return
|
79
|
+
# return the XML
|
80
|
+
xml
|
68
81
|
end
|
69
82
|
|
70
83
|
end
|
@@ -11,13 +11,7 @@ describe 'Trackerific::Base' do
|
|
11
11
|
before(:all) do
|
12
12
|
@base = Trackerific::Base.new
|
13
13
|
end
|
14
|
-
|
15
|
-
describe :required_options do
|
16
|
-
it "should return an Array" do
|
17
|
-
@base.required_options().should be_kind_of Array
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
14
|
+
|
21
15
|
describe "tracking_service" do
|
22
16
|
include Trackerific
|
23
17
|
context "when given a UPS tracking number" do
|
data/trackerific.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{trackerific}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Travis Haynes"]
|
@@ -18,9 +18,6 @@ Gem::Specification.new do |s|
|
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".rspec",
|
21
|
-
".yardoc/checksums",
|
22
|
-
".yardoc/objects/root.dat",
|
23
|
-
".yardoc/proxy_types",
|
24
21
|
"Gemfile",
|
25
22
|
"Gemfile.lock",
|
26
23
|
"LICENSE.txt",
|
@@ -100,7 +97,8 @@ Gem::Specification.new do |s|
|
|
100
97
|
s.add_development_dependency(%q<bundler>, [">= 1.0.13"])
|
101
98
|
s.add_development_dependency(%q<jeweler>, [">= 1.5.2"])
|
102
99
|
s.add_development_dependency(%q<rspec-rails>, [">= 2.6.1"])
|
103
|
-
s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
|
100
|
+
s.add_development_dependency(%q<ruby-debug19>, [">= 0.11.6"])
|
101
|
+
s.add_development_dependency(%q<yardstick>, [">= 0.4.0"])
|
104
102
|
else
|
105
103
|
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
106
104
|
s.add_dependency(%q<httparty>, [">= 0.7.7"])
|
@@ -108,7 +106,8 @@ Gem::Specification.new do |s|
|
|
108
106
|
s.add_dependency(%q<bundler>, [">= 1.0.13"])
|
109
107
|
s.add_dependency(%q<jeweler>, [">= 1.5.2"])
|
110
108
|
s.add_dependency(%q<rspec-rails>, [">= 2.6.1"])
|
111
|
-
s.add_dependency(%q<ruby-debug19>, [">= 0"])
|
109
|
+
s.add_dependency(%q<ruby-debug19>, [">= 0.11.6"])
|
110
|
+
s.add_dependency(%q<yardstick>, [">= 0.4.0"])
|
112
111
|
end
|
113
112
|
else
|
114
113
|
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
@@ -117,7 +116,8 @@ Gem::Specification.new do |s|
|
|
117
116
|
s.add_dependency(%q<bundler>, [">= 1.0.13"])
|
118
117
|
s.add_dependency(%q<jeweler>, [">= 1.5.2"])
|
119
118
|
s.add_dependency(%q<rspec-rails>, [">= 2.6.1"])
|
120
|
-
s.add_dependency(%q<ruby-debug19>, [">= 0"])
|
119
|
+
s.add_dependency(%q<ruby-debug19>, [">= 0.11.6"])
|
120
|
+
s.add_dependency(%q<yardstick>, [">= 0.4.0"])
|
121
121
|
end
|
122
122
|
end
|
123
123
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 2
|
9
|
+
version: 0.3.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Travis Haynes
|
@@ -116,10 +116,27 @@ dependencies:
|
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
segments:
|
118
118
|
- 0
|
119
|
-
|
119
|
+
- 11
|
120
|
+
- 6
|
121
|
+
version: 0.11.6
|
120
122
|
type: :development
|
121
123
|
prerelease: false
|
122
124
|
version_requirements: *id007
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: yardstick
|
127
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
segments:
|
133
|
+
- 0
|
134
|
+
- 4
|
135
|
+
- 0
|
136
|
+
version: 0.4.0
|
137
|
+
type: :development
|
138
|
+
prerelease: false
|
139
|
+
version_requirements: *id008
|
123
140
|
description: Trackerific provides USPS, FedEx and UPS package tracking to Rails.
|
124
141
|
email: travis.j.haynes@gmail.com
|
125
142
|
executables: []
|
@@ -131,9 +148,6 @@ extra_rdoc_files:
|
|
131
148
|
- README.rdoc
|
132
149
|
files:
|
133
150
|
- .rspec
|
134
|
-
- .yardoc/checksums
|
135
|
-
- .yardoc/objects/root.dat
|
136
|
-
- .yardoc/proxy_types
|
137
151
|
- Gemfile
|
138
152
|
- Gemfile.lock
|
139
153
|
- LICENSE.txt
|
@@ -198,7 +212,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
198
212
|
requirements:
|
199
213
|
- - ">="
|
200
214
|
- !ruby/object:Gem::Version
|
201
|
-
hash:
|
215
|
+
hash: 154150799
|
202
216
|
segments:
|
203
217
|
- 0
|
204
218
|
version: "0"
|
data/.yardoc/checksums
DELETED
@@ -1,6 +0,0 @@
|
|
1
|
-
lib/ups.rb 2b98972c48bd4032d5a6cd2017549ce394e8ea0d
|
2
|
-
lib/usps.rb b6e83100cd5225341ce5a61f0ff843440309e063
|
3
|
-
lib/fedex.rb ba42d502349530fe2518303c23d2b8babecd5f2d
|
4
|
-
lib/trackerific.rb 78b145e898c315d3e80aaef686877cb674621fed
|
5
|
-
lib/trackerific_event.rb 21e48404ba7b8b90114ce0d74d38248a637a0452
|
6
|
-
lib/trackerific_details.rb d3c5cc1844259f2889b4d82920b12ad57fe4d412
|
data/.yardoc/objects/root.dat
DELETED
Binary file
|
data/.yardoc/proxy_types
DELETED
Binary file
|