trackerific 0.3.5 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/README.rdoc +37 -13
- data/VERSION +1 -1
- data/doc/OptionsHelper.html +287 -0
- data/doc/Trackerific.html +588 -35
- data/doc/Trackerific/Configuration.html +354 -0
- data/doc/Trackerific/Details.html +1 -1
- data/doc/Trackerific/Error.html +1 -1
- data/doc/Trackerific/Event.html +1 -1
- data/doc/Trackerific/FedEx.html +52 -35
- data/doc/Trackerific/{Base.html → Service.html} +54 -49
- data/doc/Trackerific/UPS.html +48 -31
- data/doc/Trackerific/USPS.html +51 -34
- data/doc/_index.html +35 -4
- data/doc/class_list.html +1 -1
- data/doc/file.README.html +42 -15
- data/doc/index.html +42 -15
- data/doc/method_list.html +83 -19
- data/doc/top-level-namespace.html +2 -2
- data/lib/helpers/options_helper.rb +20 -0
- data/lib/trackerific.rb +52 -18
- data/lib/trackerific/configuration.rb +49 -0
- data/lib/trackerific/service.rb +68 -0
- data/lib/trackerific/services/fedex.rb +18 -16
- data/lib/trackerific/services/ups.rb +16 -14
- data/lib/trackerific/services/usps.rb +17 -15
- data/spec/lib/trackerific/configuration_spec.rb +9 -0
- data/spec/lib/trackerific/details_spec.rb +12 -9
- data/spec/lib/trackerific/error_spec.rb +6 -2
- data/spec/lib/trackerific/event_spec.rb +21 -8
- data/spec/lib/trackerific/service_spec.rb +34 -0
- data/spec/lib/trackerific/services/fedex_spec.rb +23 -9
- data/spec/lib/trackerific/services/ups_spec.rb +23 -8
- data/spec/lib/trackerific/services/usps_spec.rb +22 -8
- data/spec/lib/trackerific_spec.rb +29 -7
- data/spec/spec_helper.rb +1 -0
- data/spec/support/fixtures.rb +16 -10
- data/spec/support/trackerific.rb +2 -2
- data/trackerific.gemspec +13 -8
- metadata +30 -25
- data/lib/trackerific/base.rb +0 -70
- data/spec/lib/trackerific/base_spec.rb +0 -34
@@ -1,20 +1,33 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Trackerific::Event do
|
4
|
-
|
4
|
+
|
5
|
+
before do
|
5
6
|
@date = Time.now
|
6
|
-
@
|
7
|
+
@description = "description"
|
8
|
+
@location = "location"
|
9
|
+
@event = Trackerific::Event.new(@date, @description, @location)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe :date do
|
13
|
+
subject { @event.date }
|
14
|
+
it { should be @date }
|
7
15
|
end
|
8
16
|
|
9
|
-
describe
|
10
|
-
|
17
|
+
describe :description do
|
18
|
+
subject { @event.description }
|
19
|
+
it { should be @description }
|
11
20
|
end
|
12
21
|
|
13
|
-
describe
|
14
|
-
|
22
|
+
describe :location do
|
23
|
+
subject { @event.location }
|
24
|
+
it { should be @location }
|
15
25
|
end
|
16
26
|
|
17
|
-
describe
|
18
|
-
|
27
|
+
describe :to_s do
|
28
|
+
before { @regex = /(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (0[1-9]|[1-2][0-9]|3[01]) \d{2}:\d{2} (am|pm).*/ }
|
29
|
+
subject { @event.to_s }
|
30
|
+
it("should be in format mmm dd hh:mm am/pm.*") { should =~ @regex }
|
19
31
|
end
|
32
|
+
|
20
33
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class TestServiceClass < Trackerific::Service
|
4
|
+
def self.required_options
|
5
|
+
[:required, :also_required]
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe Trackerific::Service do
|
10
|
+
|
11
|
+
context "with a new Trackerific::Service class that has required options" do
|
12
|
+
|
13
|
+
context "has all the required options" do
|
14
|
+
it "should be able to create a new instance" do
|
15
|
+
t = TestServiceClass.new(:required => true, :also_required => :yup)
|
16
|
+
t.should be_a TestServiceClass
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "is missing some required options" do
|
21
|
+
it "should raise an ArgumentError" do
|
22
|
+
lambda { TestServiceClass.new() }.should raise_error(ArgumentError)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "has an invalid option" do
|
27
|
+
it "should raise an ArgumentError" do
|
28
|
+
lambda { TestServiceClass.new(:unknown => :argument ) }.should raise_error(ArgumentError)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -13,9 +13,8 @@ describe "Trackerific::FedEx" do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
describe :package_id_matchers do
|
16
|
-
|
17
|
-
|
18
|
-
end
|
16
|
+
subject { Trackerific::FedEx.package_id_matchers }
|
17
|
+
it("should be an Array of Regexp") { should each { |m| m.should be_a Regexp } }
|
19
18
|
end
|
20
19
|
|
21
20
|
describe :track_package do
|
@@ -25,25 +24,40 @@ describe "Trackerific::FedEx" do
|
|
25
24
|
end
|
26
25
|
|
27
26
|
context "with a successful response from the server" do
|
28
|
-
|
27
|
+
|
28
|
+
before(:all) do
|
29
29
|
FakeWeb.register_uri(:post, FEDEX_TRACK_URL, :body => load_fixture(:fedex_success_response))
|
30
|
+
end
|
31
|
+
|
32
|
+
before(:each) do
|
30
33
|
@tracking = @fedex.track_package(@package_id)
|
31
34
|
end
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
+
|
36
|
+
subject { @tracking }
|
37
|
+
it("should return a Trackerific::Details") { should be_a Trackerific::Details }
|
38
|
+
|
39
|
+
describe "events.length" do
|
40
|
+
subject { @tracking.events.length }
|
41
|
+
it { should >= 1}
|
35
42
|
end
|
36
|
-
|
37
|
-
|
43
|
+
|
44
|
+
describe :summary do
|
45
|
+
subject { @tracking.summary }
|
46
|
+
it { should_not be_empty }
|
38
47
|
end
|
48
|
+
|
39
49
|
end
|
40
50
|
|
41
51
|
context "with an error response from the server" do
|
52
|
+
|
42
53
|
before(:all) do
|
43
54
|
FakeWeb.register_uri(:post, FEDEX_TRACK_URL, :body => load_fixture(:fedex_error_response))
|
44
55
|
end
|
56
|
+
|
45
57
|
specify { lambda { @fedex.track_package("invalid package id") }.should raise_error(Trackerific::Error) }
|
58
|
+
|
46
59
|
end
|
60
|
+
|
47
61
|
end
|
48
62
|
|
49
63
|
end
|
@@ -14,9 +14,8 @@ describe "Trackerific::UPS" do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
describe :package_id_matchers do
|
17
|
-
|
18
|
-
|
19
|
-
end
|
17
|
+
subject { Trackerific::UPS.package_id_matchers }
|
18
|
+
it("should be an Array of Regexp") { should each { |m| m.should be_a Regexp } }
|
20
19
|
end
|
21
20
|
|
22
21
|
describe :track_package do
|
@@ -26,24 +25,40 @@ describe "Trackerific::UPS" do
|
|
26
25
|
end
|
27
26
|
|
28
27
|
context "with a successful response from the server" do
|
28
|
+
|
29
29
|
before(:all) do
|
30
30
|
FakeWeb.register_uri(:post, UPS_TRACK_URL, :body => load_fixture(:ups_success_response))
|
31
|
+
end
|
32
|
+
|
33
|
+
before(:each) do
|
31
34
|
@tracking = @ups.track_package(@package_id)
|
32
35
|
end
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
+
|
37
|
+
subject { @tracking }
|
38
|
+
it("should return a Trackerific::Details") { should be_a Trackerific::Details }
|
39
|
+
|
40
|
+
describe "events.length" do
|
41
|
+
subject { @tracking.events.length }
|
42
|
+
it { should >= 1 }
|
36
43
|
end
|
37
|
-
|
38
|
-
|
44
|
+
|
45
|
+
describe :summary do
|
46
|
+
subject { @tracking.summary }
|
47
|
+
it { should_not be_empty }
|
39
48
|
end
|
49
|
+
|
40
50
|
end
|
41
51
|
|
42
52
|
context "with an error response from the server" do
|
53
|
+
|
43
54
|
before(:all) do
|
44
55
|
FakeWeb.register_uri(:post, UPS_TRACK_URL, :body => load_fixture(:ups_error_response))
|
45
56
|
end
|
57
|
+
|
46
58
|
specify { lambda { @ups.track_package("invalid package id") }.should raise_error(Trackerific::Error) }
|
59
|
+
|
47
60
|
end
|
61
|
+
|
48
62
|
end
|
63
|
+
|
49
64
|
end
|
@@ -12,36 +12,50 @@ describe Trackerific::USPS do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
describe :package_id_matchers do
|
15
|
-
|
16
|
-
|
17
|
-
end
|
15
|
+
subject { Trackerific::UPS.package_id_matchers }
|
16
|
+
it("should be an Array of Regexp") { should each { |m| m.should be_a Regexp } }
|
18
17
|
end
|
19
18
|
|
20
19
|
describe :track_package do
|
20
|
+
|
21
21
|
before(:all) do
|
22
22
|
@package_id = 'EJ958083578US'
|
23
23
|
@usps = Trackerific::USPS.new :user_id => '123USERID4567'
|
24
24
|
end
|
25
25
|
|
26
26
|
context "with a successful response from the server" do
|
27
|
+
|
27
28
|
before(:all) do
|
28
29
|
FakeWeb.register_uri(:get, USPS_TRACK_URL, :body => load_fixture(:usps_success_response))
|
30
|
+
end
|
31
|
+
|
32
|
+
before(:each) do
|
29
33
|
@tracking = @usps.track_package(@package_id)
|
30
34
|
end
|
31
|
-
|
32
|
-
|
33
|
-
|
35
|
+
|
36
|
+
subject { @tracking }
|
37
|
+
it("should return a Trackerific::Details") { should be_a Trackerific::Details }
|
38
|
+
|
39
|
+
describe "events.length" do
|
40
|
+
subject { @tracking.events.length }
|
41
|
+
it { should >= 1 }
|
34
42
|
end
|
35
|
-
|
36
|
-
|
43
|
+
|
44
|
+
describe :summary do
|
45
|
+
subject { @tracking.summary }
|
46
|
+
it { should_not be_empty }
|
37
47
|
end
|
48
|
+
|
38
49
|
end
|
39
50
|
|
40
51
|
context "with an error response from the server" do
|
52
|
+
|
41
53
|
before(:all) do
|
42
54
|
FakeWeb.register_uri(:get, USPS_TRACK_URL, :body => load_fixture(:usps_error_response))
|
43
55
|
end
|
56
|
+
|
44
57
|
specify { lambda { @usps.track_package(@package_id) }.should raise_error(Trackerific::Error) }
|
58
|
+
|
45
59
|
end
|
46
60
|
end
|
47
61
|
|
@@ -1,25 +1,47 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe Trackerific do
|
4
4
|
include Trackerific
|
5
5
|
|
6
|
-
describe
|
7
|
-
|
6
|
+
describe :services do
|
7
|
+
subject { Trackerific.services }
|
8
|
+
it("should be an Array of Symbols") { should each { |m| m.should be_a Symbol } }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe :service_get do
|
12
|
+
|
13
|
+
context "with a valid service symbol" do
|
14
|
+
subject { Trackerific.service_get(:fedex).superclass }
|
15
|
+
it("should be a descendant of Trackerific::Service "){ should be Trackerific::Service }
|
16
|
+
end
|
17
|
+
|
18
|
+
context "with an invalid service symbol" do
|
19
|
+
subject { Trackerific.service_get :ksjdfklsjdf }
|
20
|
+
it { should be_nil }
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
describe :tracking_service do
|
8
26
|
|
9
27
|
context "when given a UPS tracking number" do
|
10
|
-
|
28
|
+
subject { tracking_service "1Z12345E0291980793" }
|
29
|
+
it { should be Trackerific::UPS}
|
11
30
|
end
|
12
31
|
|
13
32
|
context "when given a USPS tracking number" do
|
14
|
-
|
33
|
+
subject { tracking_service "EJ958083578US" }
|
34
|
+
it { should be Trackerific::USPS }
|
15
35
|
end
|
16
36
|
|
17
37
|
context "when given a FedEx tracking number" do
|
18
|
-
|
38
|
+
subject { tracking_service "183689015000001" }
|
39
|
+
it { should be Trackerific::FedEx }
|
19
40
|
end
|
20
41
|
|
21
42
|
context "when given an invalid tracking number" do
|
22
|
-
|
43
|
+
subject { tracking_service "invalid tracking number" }
|
44
|
+
it { should be_nil }
|
23
45
|
end
|
24
46
|
|
25
47
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/fixtures.rb
CHANGED
@@ -1,14 +1,20 @@
|
|
1
|
+
# Provides easy access to XML fixtures
|
1
2
|
module Fixtures
|
2
|
-
|
3
|
+
# Gets the path to the fixtures
|
4
|
+
# @return [String]
|
5
|
+
# @api private
|
6
|
+
def fixture_path
|
7
|
+
File.join(File.dirname(__FILE__), "..", "fixtures")
|
8
|
+
end
|
9
|
+
# Loads a fixture
|
10
|
+
# @param [Symbol] name the fixture to load
|
11
|
+
# @param [Symbol] ext the exention of the fixture. defaults to :xml
|
12
|
+
# @example Load ups_success_response.xml
|
13
|
+
# response = load_fixture :ups_success_response
|
14
|
+
# @return [String] the contents of the file
|
15
|
+
# @api private
|
3
16
|
def load_fixture(name, ext = :xml)
|
4
|
-
|
5
|
-
|
6
|
-
f = File.open(file_name, 'r')
|
7
|
-
data = "";
|
8
|
-
f.lines.each { |line| data += line }
|
9
|
-
f.close
|
10
|
-
return data
|
11
|
-
|
17
|
+
file_name = File.join(fixture_path, "#{name.to_s}.#{ext.to_s}")
|
18
|
+
File.read(file_name)
|
12
19
|
end
|
13
|
-
|
14
20
|
end
|
data/spec/support/trackerific.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# Provides a Rails application environment to use when running the specs.
|
2
|
-
|
3
1
|
require 'rails'
|
4
2
|
|
5
3
|
require "action_controller/railtie"
|
@@ -7,12 +5,14 @@ require "action_mailer/railtie"
|
|
7
5
|
require "active_resource/railtie"
|
8
6
|
|
9
7
|
module Trackerific
|
8
|
+
# Provides a Rails application environment to use when running the specs
|
10
9
|
class Application < Rails::Application
|
11
10
|
config.encoding = 'utf-8'
|
12
11
|
end
|
13
12
|
|
14
13
|
Application.configure do
|
15
14
|
config.active_support.deprecation = :stderr
|
15
|
+
config.logger = Logger.new(STDOUT)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
data/trackerific.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{trackerific}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
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"]
|
12
|
-
s.date = %q{2011-06-
|
12
|
+
s.date = %q{2011-06-15}
|
13
13
|
s.description = %q{Trackerific provides USPS, FedEx and UPS package tracking to Rails.}
|
14
14
|
s.email = %q{travis.j.haynes@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,12 +24,14 @@ Gem::Specification.new do |s|
|
|
24
24
|
"README.rdoc",
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
|
+
"doc/OptionsHelper.html",
|
27
28
|
"doc/Trackerific.html",
|
28
|
-
"doc/Trackerific/
|
29
|
+
"doc/Trackerific/Configuration.html",
|
29
30
|
"doc/Trackerific/Details.html",
|
30
31
|
"doc/Trackerific/Error.html",
|
31
32
|
"doc/Trackerific/Event.html",
|
32
33
|
"doc/Trackerific/FedEx.html",
|
34
|
+
"doc/Trackerific/Service.html",
|
33
35
|
"doc/Trackerific/UPS.html",
|
34
36
|
"doc/Trackerific/USPS.html",
|
35
37
|
"doc/_index.html",
|
@@ -46,11 +48,13 @@ Gem::Specification.new do |s|
|
|
46
48
|
"doc/js/jquery.js",
|
47
49
|
"doc/method_list.html",
|
48
50
|
"doc/top-level-namespace.html",
|
51
|
+
"lib/helpers/options_helper.rb",
|
49
52
|
"lib/trackerific.rb",
|
50
|
-
"lib/trackerific/
|
53
|
+
"lib/trackerific/configuration.rb",
|
51
54
|
"lib/trackerific/details.rb",
|
52
55
|
"lib/trackerific/error.rb",
|
53
56
|
"lib/trackerific/event.rb",
|
57
|
+
"lib/trackerific/service.rb",
|
54
58
|
"lib/trackerific/services/fedex.rb",
|
55
59
|
"lib/trackerific/services/ups.rb",
|
56
60
|
"lib/trackerific/services/usps.rb",
|
@@ -60,10 +64,11 @@ Gem::Specification.new do |s|
|
|
60
64
|
"spec/fixtures/ups_success_response.xml",
|
61
65
|
"spec/fixtures/usps_error_response.xml",
|
62
66
|
"spec/fixtures/usps_success_response.xml",
|
63
|
-
"spec/lib/trackerific/
|
67
|
+
"spec/lib/trackerific/configuration_spec.rb",
|
64
68
|
"spec/lib/trackerific/details_spec.rb",
|
65
69
|
"spec/lib/trackerific/error_spec.rb",
|
66
70
|
"spec/lib/trackerific/event_spec.rb",
|
71
|
+
"spec/lib/trackerific/service_spec.rb",
|
67
72
|
"spec/lib/trackerific/services/fedex_spec.rb",
|
68
73
|
"spec/lib/trackerific/services/ups_spec.rb",
|
69
74
|
"spec/lib/trackerific/services/usps_spec.rb",
|
@@ -89,20 +94,20 @@ Gem::Specification.new do |s|
|
|
89
94
|
s.add_runtime_dependency(%q<builder>, [">= 2.1.2"])
|
90
95
|
s.add_development_dependency(%q<bundler>, [">= 1.0.13"])
|
91
96
|
s.add_development_dependency(%q<jeweler>, [">= 1.5.2"])
|
97
|
+
s.add_development_dependency(%q<yardstick>, [">= 0.4.0"])
|
92
98
|
s.add_development_dependency(%q<rspec-rails>, [">= 2.6.1"])
|
93
99
|
s.add_development_dependency(%q<rspec_multi_matchers>, [">= 1.1.0"])
|
94
100
|
s.add_development_dependency(%q<ruby-debug19>, [">= 0.11.6"])
|
95
|
-
s.add_development_dependency(%q<yardstick>, [">= 0.4.0"])
|
96
101
|
else
|
97
102
|
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
98
103
|
s.add_dependency(%q<httparty>, [">= 0.7.7"])
|
99
104
|
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
100
105
|
s.add_dependency(%q<bundler>, [">= 1.0.13"])
|
101
106
|
s.add_dependency(%q<jeweler>, [">= 1.5.2"])
|
107
|
+
s.add_dependency(%q<yardstick>, [">= 0.4.0"])
|
102
108
|
s.add_dependency(%q<rspec-rails>, [">= 2.6.1"])
|
103
109
|
s.add_dependency(%q<rspec_multi_matchers>, [">= 1.1.0"])
|
104
110
|
s.add_dependency(%q<ruby-debug19>, [">= 0.11.6"])
|
105
|
-
s.add_dependency(%q<yardstick>, [">= 0.4.0"])
|
106
111
|
end
|
107
112
|
else
|
108
113
|
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
@@ -110,10 +115,10 @@ Gem::Specification.new do |s|
|
|
110
115
|
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
111
116
|
s.add_dependency(%q<bundler>, [">= 1.0.13"])
|
112
117
|
s.add_dependency(%q<jeweler>, [">= 1.5.2"])
|
118
|
+
s.add_dependency(%q<yardstick>, [">= 0.4.0"])
|
113
119
|
s.add_dependency(%q<rspec-rails>, [">= 2.6.1"])
|
114
120
|
s.add_dependency(%q<rspec_multi_matchers>, [">= 1.1.0"])
|
115
121
|
s.add_dependency(%q<ruby-debug19>, [">= 0.11.6"])
|
116
|
-
s.add_dependency(%q<yardstick>, [">= 0.4.0"])
|
117
122
|
end
|
118
123
|
end
|
119
124
|
|