trackerific 0.3.5 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. data/Gemfile +1 -1
  2. data/README.rdoc +37 -13
  3. data/VERSION +1 -1
  4. data/doc/OptionsHelper.html +287 -0
  5. data/doc/Trackerific.html +588 -35
  6. data/doc/Trackerific/Configuration.html +354 -0
  7. data/doc/Trackerific/Details.html +1 -1
  8. data/doc/Trackerific/Error.html +1 -1
  9. data/doc/Trackerific/Event.html +1 -1
  10. data/doc/Trackerific/FedEx.html +52 -35
  11. data/doc/Trackerific/{Base.html → Service.html} +54 -49
  12. data/doc/Trackerific/UPS.html +48 -31
  13. data/doc/Trackerific/USPS.html +51 -34
  14. data/doc/_index.html +35 -4
  15. data/doc/class_list.html +1 -1
  16. data/doc/file.README.html +42 -15
  17. data/doc/index.html +42 -15
  18. data/doc/method_list.html +83 -19
  19. data/doc/top-level-namespace.html +2 -2
  20. data/lib/helpers/options_helper.rb +20 -0
  21. data/lib/trackerific.rb +52 -18
  22. data/lib/trackerific/configuration.rb +49 -0
  23. data/lib/trackerific/service.rb +68 -0
  24. data/lib/trackerific/services/fedex.rb +18 -16
  25. data/lib/trackerific/services/ups.rb +16 -14
  26. data/lib/trackerific/services/usps.rb +17 -15
  27. data/spec/lib/trackerific/configuration_spec.rb +9 -0
  28. data/spec/lib/trackerific/details_spec.rb +12 -9
  29. data/spec/lib/trackerific/error_spec.rb +6 -2
  30. data/spec/lib/trackerific/event_spec.rb +21 -8
  31. data/spec/lib/trackerific/service_spec.rb +34 -0
  32. data/spec/lib/trackerific/services/fedex_spec.rb +23 -9
  33. data/spec/lib/trackerific/services/ups_spec.rb +23 -8
  34. data/spec/lib/trackerific/services/usps_spec.rb +22 -8
  35. data/spec/lib/trackerific_spec.rb +29 -7
  36. data/spec/spec_helper.rb +1 -0
  37. data/spec/support/fixtures.rb +16 -10
  38. data/spec/support/trackerific.rb +2 -2
  39. data/trackerific.gemspec +13 -8
  40. metadata +30 -25
  41. data/lib/trackerific/base.rb +0 -70
  42. 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
- before(:all) do
4
+
5
+ before do
5
6
  @date = Time.now
6
- @event = Trackerific::Event.new(Time.new, String.new, String.new)
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 "date" do
10
- specify { @event.date.should be_a Time }
17
+ describe :description do
18
+ subject { @event.description }
19
+ it { should be @description }
11
20
  end
12
21
 
13
- describe "description" do
14
- specify { @event.description.should be_a String }
22
+ describe :location do
23
+ subject { @event.location }
24
+ it { should be @location }
15
25
  end
16
26
 
17
- describe "location" do
18
- specify { @event.location.should be_a String }
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
- it "should be an Array of Regexp" do
17
- Trackerific::FedEx.package_id_matchers.should each { |m| m.should be_a Regexp }
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
- before(:each) do
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
- specify { @tracking.should be_a Trackerific::Details }
33
- it "should have at least one event" do
34
- @tracking.events.length.should >= 1
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
- it "should have a summary" do
37
- @tracking.summary.should_not be_empty
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
- it "should be an Array of Regexp" do
18
- Trackerific::UPS.package_id_matchers.should each { |m| m.should be_a Regexp }
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
- specify { @tracking.should be_a Trackerific::Details }
34
- it "should have at least one event" do
35
- @tracking.events.length.should >= 1
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
- it "should have a summary" do
38
- @tracking.summary.should_not be_empty
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
- it "should be an Array of Regexp" do
16
- Trackerific::UPS.package_id_matchers.should each { |m| m.should be_a Regexp }
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
- specify { @tracking.should be_a Trackerific::Details }
32
- it "should have at least one event" do
33
- @tracking.events.length.should >= 1
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
- it "should have a summary" do
36
- @tracking.summary.should_not be_empty
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 "Trackerific" do
3
+ describe Trackerific do
4
4
  include Trackerific
5
5
 
6
- describe "tracking_service" do
7
- include Trackerific
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
- specify { tracking_service("1Z12345E0291980793").should eq Trackerific::UPS }
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
- specify { tracking_service("EJ958083578US").should eq Trackerific::USPS }
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
- specify { tracking_service("183689015000001").should eq Trackerific::FedEx }
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
- specify { tracking_service("invalid tracking number").should be_nil }
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
@@ -1,3 +1,4 @@
1
+ # Code coverage
1
2
  require 'simplecov'
2
3
  SimpleCov.start
3
4
 
@@ -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
- file_name = File.join("spec/fixtures/", "#{name.to_s}.#{ext.to_s}")
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
@@ -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.3.5"
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-14}
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/Base.html",
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/base.rb",
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/base_spec.rb",
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