tracking_number 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.3.2
data/lib/base.rb CHANGED
@@ -3,7 +3,7 @@ class TrackingNumber
3
3
  attr_accessor :tracking_number
4
4
  def initialize(tracking_number)
5
5
  @original_number = tracking_number
6
- @tracking_number = tracking_number.gsub(" ", "").upcase
6
+ @tracking_number = tracking_number.strip.gsub(" ", "").upcase
7
7
  end
8
8
 
9
9
  def self.search(body)
data/lib/ups.rb CHANGED
@@ -42,49 +42,49 @@ class TrackingNumber
42
42
 
43
43
  def service_type
44
44
  case decode[:service_type]
45
- when "01":
45
+ when "01"
46
46
  "UPS United States Next Day Air (Red)"
47
- when "02":
47
+ when "02"
48
48
  "UPS United States Second Day Air (Blue)"
49
- when "03":
49
+ when "03"
50
50
  "UPS United States Ground"
51
- when "12":
51
+ when "12"
52
52
  "UPS United States Third Day Select"
53
- when "13":
53
+ when "13"
54
54
  "UPS United States Next Day Air Saver (Red Saver)"
55
- when "15":
55
+ when "15"
56
56
  "UPS United States Next Day Air Early A.M."
57
- when "22":
57
+ when "22"
58
58
  "UPS United States Ground - Returns Plus - Three Pickup Attempts"
59
- when "32":
59
+ when "32"
60
60
  "UPS United States Next Day Air Early A.M. - COD"
61
- when "33":
61
+ when "33"
62
62
  "UPS United States Next Day Air Early A.M. - Saturday Delivery, COD"
63
- when "41":
63
+ when "41"
64
64
  "UPS United States Next Day Air Early A.M. - Saturday Delivery"
65
- when "42":
65
+ when "42"
66
66
  "UPS United States Ground - Signature Required"
67
- when "44":
67
+ when "44"
68
68
  "UPS United States Next Day Air - Saturday Delivery"
69
- when "66":
69
+ when "66"
70
70
  "UPS United States Worldwide Express"
71
- when "72":
71
+ when "72"
72
72
  "UPS United States Ground - Collect on Delivery"
73
- when "78":
73
+ when "78"
74
74
  "UPS United States Ground - Returns Plus - One Pickup Attempt"
75
- when "90":
75
+ when "90"
76
76
  "UPS United States Ground - Returns - UPS Prints and Mails Label"
77
- when "A0":
77
+ when "A0"
78
78
  "UPS United States Next Day Air Early A.M. - Adult Signature Required"
79
- when "A1":
79
+ when "A1"
80
80
  "UPS United States Next Day Air Early A.M. - Saturday Delivery, Adult Signature Required"
81
- when "A2":
81
+ when "A2"
82
82
  "UPS United States Next Day Air - Adult Signature Required"
83
- when "A8":
83
+ when "A8"
84
84
  "UPS United States Ground - Adult Signature Required"
85
- when "A9":
85
+ when "A9"
86
86
  "UPS United States Next Day Air Early A.M. - Adult Signature Required, COD"
87
- when "AA":
87
+ when "AA"
88
88
  "UPS United States Next Day Air Early A.M. - Saturday Delivery, Adult Signature Required, COD"
89
89
  end
90
90
  end
data/lib/usps.rb CHANGED
@@ -124,7 +124,7 @@ class TrackingNumber
124
124
  end
125
125
 
126
126
  def valid_checksum?
127
- sequence = tracking_number.scan(/[0-9]+/).flatten.to_s
127
+ sequence = tracking_number.scan(/[0-9]+/).flatten.join
128
128
  chars = sequence.chars.to_a
129
129
  check_digit = chars.pop.to_i
130
130
 
@@ -4,9 +4,7 @@ class DHLTrackingNumberTest < Test::Unit::TestCase
4
4
  context "a DHL tracking number" do
5
5
  ["73891051146"].each do |valid_number|
6
6
  should "return dhl for #{valid_number}" do
7
- t = TrackingNumber.new(valid_number)
8
- assert_equal :dhl, t.carrier
9
- assert t.valid?
7
+ should_be_valid_number(valid_number, TrackingNumber::DHL, :dhl)
10
8
  end
11
9
 
12
10
  should "detect #{valid_number} regardless of spacing" do
@@ -4,10 +4,7 @@ class FedExTrackingNumberTest < Test::Unit::TestCase
4
4
  context "a FedEx tracking number" do
5
5
  ["986578788855", "477179081230", "799531274483", "790535312317"].each do |valid_number|
6
6
  should "return fedex express for #{valid_number}" do
7
- t = TrackingNumber.new(valid_number)
8
- assert_equal TrackingNumber::FedExExpress, t.class
9
- assert_equal :fedex, t.carrier
10
- assert t.valid?
7
+ should_be_valid_number(valid_number, TrackingNumber::FedExExpress, :fedex)
11
8
  end
12
9
 
13
10
  should "detect #{valid_number} regardless of spacing" do
@@ -17,10 +14,7 @@ class FedExTrackingNumberTest < Test::Unit::TestCase
17
14
 
18
15
  ["9611020987654312345672"].each do |valid_number|
19
16
  should "return fedex 96 for #{valid_number}" do
20
- t = TrackingNumber.new(valid_number)
21
- assert_equal TrackingNumber::FedExGround96, t.class
22
- assert_equal :fedex, t.carrier
23
- assert t.valid?
17
+ should_be_valid_number(valid_number, TrackingNumber::FedExGround96, :fedex)
24
18
  end
25
19
 
26
20
  should "detect #{valid_number} regardless of spacing" do
@@ -30,10 +24,7 @@ class FedExTrackingNumberTest < Test::Unit::TestCase
30
24
 
31
25
  ["0414 4176 0228 964", "5682 8361 0012 000", "5682 8361 0012 734"].each do |valid_number|
32
26
  should "return fedex ground for #{valid_number}" do
33
- t = TrackingNumber.new(valid_number)
34
- assert_equal TrackingNumber::FedExGround, t.class
35
- assert_equal :fedex, t.carrier
36
- assert t.valid?
27
+ should_be_valid_number(valid_number, TrackingNumber::FedExGround, :fedex)
37
28
  end
38
29
 
39
30
  should "detect #{valid_number} regardless of spacing" do
@@ -43,10 +34,7 @@ class FedExTrackingNumberTest < Test::Unit::TestCase
43
34
 
44
35
  ["00 0123 4500 0000 0027"].each do |valid_number|
45
36
  should "return fedex sscc18 for #{valid_number}" do
46
- t = TrackingNumber.new(valid_number)
47
- assert_equal TrackingNumber::FedExGround18, t.class
48
- assert_equal :fedex, t.carrier
49
- assert t.valid?
37
+ should_be_valid_number(valid_number, TrackingNumber::FedExGround18, :fedex)
50
38
  end
51
39
 
52
40
  should "detect #{valid_number} regardless of spacing" do
data/test/test_helper.rb CHANGED
@@ -41,4 +41,11 @@ class Test::Unit::TestCase
41
41
  assert_equal 1, results.size, "could not find #{type} #{valid_number} in #{string}"
42
42
  end
43
43
  end
44
+
45
+ def should_be_valid_number(valid_number, type, carrier)
46
+ t = TrackingNumber.new(valid_number)
47
+ assert_equal type, t.class
48
+ assert_equal carrier, t.carrier
49
+ assert t.valid?
50
+ end
44
51
  end
@@ -13,6 +13,11 @@ class TrackingNumberTest < Test::Unit::TestCase
13
13
  t = TrackingNumber.new("abc 123 def")
14
14
  assert_equal "ABC123DEF", t.tracking_number
15
15
  end
16
+
17
+ should "remove leading and trailing whitespace from tracking number" do
18
+ t = TrackingNumber.new(" ABC123 \n")
19
+ assert_equal "ABC123", t.tracking_number
20
+ end
16
21
  end
17
22
 
18
23
  context "tracking number search" do
@@ -20,5 +25,11 @@ class TrackingNumberTest < Test::Unit::TestCase
20
25
  s = TrackingNumber.search("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 1Z879E930346834440 nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute 9611020987654312345672 dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")
21
26
  assert_equal 2, s.size
22
27
  end
28
+
29
+ should "return tracking numbers without trailing whitespace" do
30
+ s = TrackingNumber.search("hello 1Z879E930346834440\nbye")
31
+ assert_equal 1, s.size
32
+ assert_equal "1Z879E930346834440", s.first.tracking_number
33
+ end
23
34
  end
24
35
  end
@@ -4,9 +4,7 @@ class UPSTrackingNumberTest < Test::Unit::TestCase
4
4
  context "a UPS tracking number" do
5
5
  ["1Z5R89390357567127", "1Z879E930346834440", "1Z410E7W0392751591", "1Z8V92A70367203024"].each do |valid_number|
6
6
  should "return ups with valid number #{valid_number}" do
7
- t = TrackingNumber.new(valid_number)
8
- assert_equal TrackingNumber::UPS, t.class
9
- assert_equal :ups, t.carrier
7
+ should_be_valid_number(valid_number, TrackingNumber::UPS, :ups)
10
8
  end
11
9
 
12
10
  should "detect #{valid_number} regardless of spacing" do
@@ -4,10 +4,7 @@ class USPSTrackingNumberTest < Test::Unit::TestCase
4
4
  context "a USPS tracking number" do
5
5
  ["9101 1234 5678 9000 0000 13", "7196 9010 7560 0307 7385"].each do |valid_number|
6
6
  should "return usps with valid 22 digit number: #{valid_number}" do
7
- t = TrackingNumber.new("9101 1234 5678 9000 0000 13")
8
- assert_equal TrackingNumber::USPS91, t.class
9
- assert_equal :usps, t.carrier
10
- assert t.valid?
7
+ should_be_valid_number(valid_number, TrackingNumber::USPS91, :usps)
11
8
  end
12
9
 
13
10
  should "detect #{valid_number} regardless of spacing" do
@@ -16,24 +13,18 @@ class USPSTrackingNumberTest < Test::Unit::TestCase
16
13
  end
17
14
 
18
15
  ["0307 1790 0005 2348 3741"].each do |valid_number|
19
- should "detect #{valid_number} regardless of spacing" do
20
- should_detect_number_variants(valid_number, TrackingNumber::USPS20)
16
+ should "return usps with valid 20 digit number: #{valid_number}" do
17
+ should_be_valid_number(valid_number, TrackingNumber::USPS20, :usps)
21
18
  end
22
19
 
23
- should "return usps with valid 20 digit number: #{valid_number}" do
24
- t = TrackingNumber.new(valid_number)
25
- assert_equal TrackingNumber::USPS20, t.class
26
- assert_equal :usps, t.carrier
27
- assert t.valid?
20
+ should "detect #{valid_number} regardless of spacing" do
21
+ should_detect_number_variants(valid_number, TrackingNumber::USPS20)
28
22
  end
29
23
  end
30
24
 
31
25
  ["RB123456785US"].each do |valid_number|
32
26
  should "return usps with valid 13 character number #{valid_number}" do
33
- t = TrackingNumber.new(valid_number)
34
- assert_equal TrackingNumber::USPS13, t.class
35
- assert_equal :usps, t.carrier
36
- assert t.valid?
27
+ should_be_valid_number(valid_number, TrackingNumber::USPS13, :usps)
37
28
  end
38
29
 
39
30
  should "detect #{valid_number} regardless of spacing" do
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{tracking_number}
8
- s.version = "0.3.1"
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 = ["Jeff Keen"]
12
- s.date = %q{2011-02-22}
12
+ s.date = %q{2011-04-23}
13
13
  s.description = %q{Match tracking numbers to a service, and search blocks of text and pull out valid tracking numbers.}
14
14
  s.email = %q{jeff@keen.me}
15
15
  s.extra_rdoc_files = [
@@ -41,7 +41,7 @@ Gem::Specification.new do |s|
41
41
  s.homepage = %q{http://github.com/jkeen/tracking_number}
42
42
  s.licenses = ["MIT"]
43
43
  s.require_paths = ["lib"]
44
- s.rubygems_version = %q{1.4.1}
44
+ s.rubygems_version = %q{1.6.2}
45
45
  s.summary = %q{Identifies valid tracking numbers}
46
46
  s.test_files = [
47
47
  "test/test_dhl_tracking_number.rb",
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tracking_number
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 1
10
- version: 0.3.1
5
+ version: 0.3.2
11
6
  platform: ruby
12
7
  authors:
13
8
  - Jeff Keen
@@ -15,69 +10,53 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-02-22 00:00:00 -06:00
13
+ date: 2011-04-23 00:00:00 -05:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
17
+ name: shoulda
18
+ requirement: &id001 !ruby/object:Gem::Requirement
23
19
  none: false
24
20
  requirements:
25
21
  - - ">="
26
22
  - !ruby/object:Gem::Version
27
- hash: 3
28
- segments:
29
- - 0
30
23
  version: "0"
31
- requirement: *id001
32
- prerelease: false
33
- name: shoulda
34
24
  type: :development
25
+ prerelease: false
26
+ version_requirements: *id001
35
27
  - !ruby/object:Gem::Dependency
36
- version_requirements: &id002 !ruby/object:Gem::Requirement
28
+ name: bundler
29
+ requirement: &id002 !ruby/object:Gem::Requirement
37
30
  none: false
38
31
  requirements:
39
32
  - - ~>
40
33
  - !ruby/object:Gem::Version
41
- hash: 23
42
- segments:
43
- - 1
44
- - 0
45
- - 0
46
34
  version: 1.0.0
47
- requirement: *id002
48
- prerelease: false
49
- name: bundler
50
35
  type: :development
36
+ prerelease: false
37
+ version_requirements: *id002
51
38
  - !ruby/object:Gem::Dependency
52
- version_requirements: &id003 !ruby/object:Gem::Requirement
39
+ name: jeweler
40
+ requirement: &id003 !ruby/object:Gem::Requirement
53
41
  none: false
54
42
  requirements:
55
43
  - - ~>
56
44
  - !ruby/object:Gem::Version
57
- hash: 7
58
- segments:
59
- - 1
60
- - 5
61
- - 2
62
45
  version: 1.5.2
63
- requirement: *id003
64
- prerelease: false
65
- name: jeweler
66
46
  type: :development
47
+ prerelease: false
48
+ version_requirements: *id003
67
49
  - !ruby/object:Gem::Dependency
68
- version_requirements: &id004 !ruby/object:Gem::Requirement
50
+ name: rcov
51
+ requirement: &id004 !ruby/object:Gem::Requirement
69
52
  none: false
70
53
  requirements:
71
54
  - - ">="
72
55
  - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
56
  version: "0"
77
- requirement: *id004
78
- prerelease: false
79
- name: rcov
80
57
  type: :development
58
+ prerelease: false
59
+ version_requirements: *id004
81
60
  description: Match tracking numbers to a service, and search blocks of text and pull out valid tracking numbers.
82
61
  email: jeff@keen.me
83
62
  executables: []
@@ -122,7 +101,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
101
  requirements:
123
102
  - - ">="
124
103
  - !ruby/object:Gem::Version
125
- hash: 3
104
+ hash: 885733641048498209
126
105
  segments:
127
106
  - 0
128
107
  version: "0"
@@ -131,14 +110,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
110
  requirements:
132
111
  - - ">="
133
112
  - !ruby/object:Gem::Version
134
- hash: 3
135
- segments:
136
- - 0
137
113
  version: "0"
138
114
  requirements: []
139
115
 
140
116
  rubyforge_project:
141
- rubygems_version: 1.4.1
117
+ rubygems_version: 1.6.2
142
118
  signing_key:
143
119
  specification_version: 3
144
120
  summary: Identifies valid tracking numbers