trackerific 0.3.5 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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