tracking_number 0.3.2 → 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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.4.0
data/lib/ontrac.rb ADDED
@@ -0,0 +1,34 @@
1
+ class TrackingNumber
2
+ class OnTrac < Base
3
+ SEARCH_PATTERN = /(\b(C\s*)([0-9]\s*){14,14}\b)/
4
+ VERIFY_PATTERN = /^(C[0-9]{13,13})([0-9])$/
5
+ def carrier
6
+ :ontrac
7
+ end
8
+
9
+ def matches
10
+ self.tracking_number.scan(VERIFY_PATTERN).flatten
11
+ end
12
+
13
+ def valid_checksum?
14
+ # checksum calculation is the same as UPS
15
+ sequence, check_digit = matches
16
+
17
+ total = 0
18
+ sequence.chars.each_with_index do |c, i|
19
+ x = if c[/[0-9]/] # numeric
20
+ c.to_i
21
+ else
22
+ (c[0].ord - 3) % 10
23
+ end
24
+ x *= 2 if i.odd?
25
+ total += x
26
+ end
27
+
28
+ check = (total % 10)
29
+ check = (10 - check) unless (check.zero?)
30
+
31
+ return (check.to_i == check_digit.to_i)
32
+ end
33
+ end
34
+ end
@@ -8,9 +8,10 @@ require 'usps'
8
8
  require 'fedex'
9
9
  require 'ups'
10
10
  require 'dhl'
11
+ require 'ontrac'
11
12
 
12
13
  class TrackingNumber
13
- TYPES = [UPS, FedExExpress, FedExGround, FedExGround18, FedExGround96, USPS91, USPS20, USPS13, DHL]
14
+ TYPES = [UPS, FedExExpress, FedExGround, FedExGround18, FedExGround96, USPS91, USPS20, USPS13, DHL, OnTrac]
14
15
 
15
16
  def self.search(body)
16
17
  TYPES.collect { |type| type.search(body) }.flatten
data/lib/ups.rb CHANGED
@@ -86,7 +86,7 @@ class TrackingNumber
86
86
  "UPS United States Next Day Air Early A.M. - Adult Signature Required, COD"
87
87
  when "AA"
88
88
  "UPS United States Next Day Air Early A.M. - Saturday Delivery, Adult Signature Required, COD"
89
- end
89
+ end
90
90
  end
91
91
  end
92
92
  end
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+
3
+ class OnTracTrackingNumberTest < Test::Unit::TestCase
4
+ context "an OnTrac tracking number" do
5
+ ["C11031500001879", "C10999911320231"].each do |valid_number|
6
+ should "return ontrac for #{valid_number}" do
7
+ should_be_valid_number(valid_number, TrackingNumber::OnTrac, :ontrac)
8
+ end
9
+
10
+ should "detect #{valid_number} regardless of spacing" do
11
+ should_detect_number_variants(valid_number, TrackingNumber::OnTrac)
12
+ end
13
+ end
14
+
15
+ should "not detect an invalid number" do
16
+ results = TrackingNumber::OnTrac.search("C10999911320230")
17
+ assert_equal 0, results.size
18
+ end
19
+ end
20
+ end
@@ -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.2"
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 = ["Jeff Keen"]
12
- s.date = %q{2011-04-23}
12
+ s.date = %q{2011-04-26}
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 = [
@@ -27,12 +27,14 @@ Gem::Specification.new do |s|
27
27
  "lib/base.rb",
28
28
  "lib/dhl.rb",
29
29
  "lib/fedex.rb",
30
+ "lib/ontrac.rb",
30
31
  "lib/tracking_number.rb",
31
32
  "lib/ups.rb",
32
33
  "lib/usps.rb",
33
34
  "test/test_dhl_tracking_number.rb",
34
35
  "test/test_fedex_tracking_number.rb",
35
36
  "test/test_helper.rb",
37
+ "test/test_ontrac_tracking_number.rb",
36
38
  "test/test_tracking_number.rb",
37
39
  "test/test_ups_tracking_number.rb",
38
40
  "test/test_usps_tracking_number.rb",
@@ -41,12 +43,13 @@ Gem::Specification.new do |s|
41
43
  s.homepage = %q{http://github.com/jkeen/tracking_number}
42
44
  s.licenses = ["MIT"]
43
45
  s.require_paths = ["lib"]
44
- s.rubygems_version = %q{1.6.2}
46
+ s.rubygems_version = %q{1.7.2}
45
47
  s.summary = %q{Identifies valid tracking numbers}
46
48
  s.test_files = [
47
49
  "test/test_dhl_tracking_number.rb",
48
50
  "test/test_fedex_tracking_number.rb",
49
51
  "test/test_helper.rb",
52
+ "test/test_ontrac_tracking_number.rb",
50
53
  "test/test_tracking_number.rb",
51
54
  "test/test_ups_tracking_number.rb",
52
55
  "test/test_usps_tracking_number.rb"
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tracking_number
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 15
4
5
  prerelease:
5
- version: 0.3.2
6
+ segments:
7
+ - 0
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
6
11
  platform: ruby
7
12
  authors:
8
13
  - Jeff Keen
@@ -10,53 +15,68 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2011-04-23 00:00:00 -05:00
14
- default_executable:
18
+ date: 2011-04-26 00:00:00 Z
15
19
  dependencies:
16
20
  - !ruby/object:Gem::Dependency
17
- name: shoulda
18
- requirement: &id001 !ruby/object:Gem::Requirement
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
19
22
  none: false
20
23
  requirements:
21
24
  - - ">="
22
25
  - !ruby/object:Gem::Version
26
+ hash: 3
27
+ segments:
28
+ - 0
23
29
  version: "0"
24
- type: :development
30
+ name: shoulda
25
31
  prerelease: false
26
- version_requirements: *id001
32
+ type: :development
33
+ requirement: *id001
27
34
  - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: &id002 !ruby/object:Gem::Requirement
35
+ version_requirements: &id002 !ruby/object:Gem::Requirement
30
36
  none: false
31
37
  requirements:
32
38
  - - ~>
33
39
  - !ruby/object:Gem::Version
40
+ hash: 23
41
+ segments:
42
+ - 1
43
+ - 0
44
+ - 0
34
45
  version: 1.0.0
35
- type: :development
46
+ name: bundler
36
47
  prerelease: false
37
- version_requirements: *id002
48
+ type: :development
49
+ requirement: *id002
38
50
  - !ruby/object:Gem::Dependency
39
- name: jeweler
40
- requirement: &id003 !ruby/object:Gem::Requirement
51
+ version_requirements: &id003 !ruby/object:Gem::Requirement
41
52
  none: false
42
53
  requirements:
43
54
  - - ~>
44
55
  - !ruby/object:Gem::Version
56
+ hash: 7
57
+ segments:
58
+ - 1
59
+ - 5
60
+ - 2
45
61
  version: 1.5.2
46
- type: :development
62
+ name: jeweler
47
63
  prerelease: false
48
- version_requirements: *id003
64
+ type: :development
65
+ requirement: *id003
49
66
  - !ruby/object:Gem::Dependency
50
- name: rcov
51
- requirement: &id004 !ruby/object:Gem::Requirement
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
52
68
  none: false
53
69
  requirements:
54
70
  - - ">="
55
71
  - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
56
75
  version: "0"
57
- type: :development
76
+ name: rcov
58
77
  prerelease: false
59
- version_requirements: *id004
78
+ type: :development
79
+ requirement: *id004
60
80
  description: Match tracking numbers to a service, and search blocks of text and pull out valid tracking numbers.
61
81
  email: jeff@keen.me
62
82
  executables: []
@@ -77,17 +97,18 @@ files:
77
97
  - lib/base.rb
78
98
  - lib/dhl.rb
79
99
  - lib/fedex.rb
100
+ - lib/ontrac.rb
80
101
  - lib/tracking_number.rb
81
102
  - lib/ups.rb
82
103
  - lib/usps.rb
83
104
  - test/test_dhl_tracking_number.rb
84
105
  - test/test_fedex_tracking_number.rb
85
106
  - test/test_helper.rb
107
+ - test/test_ontrac_tracking_number.rb
86
108
  - test/test_tracking_number.rb
87
109
  - test/test_ups_tracking_number.rb
88
110
  - test/test_usps_tracking_number.rb
89
111
  - tracking_number.gemspec
90
- has_rdoc: true
91
112
  homepage: http://github.com/jkeen/tracking_number
92
113
  licenses:
93
114
  - MIT
@@ -101,7 +122,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
122
  requirements:
102
123
  - - ">="
103
124
  - !ruby/object:Gem::Version
104
- hash: 885733641048498209
125
+ hash: 3
105
126
  segments:
106
127
  - 0
107
128
  version: "0"
@@ -110,11 +131,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
131
  requirements:
111
132
  - - ">="
112
133
  - !ruby/object:Gem::Version
134
+ hash: 3
135
+ segments:
136
+ - 0
113
137
  version: "0"
114
138
  requirements: []
115
139
 
116
140
  rubyforge_project:
117
- rubygems_version: 1.6.2
141
+ rubygems_version: 1.7.2
118
142
  signing_key:
119
143
  specification_version: 3
120
144
  summary: Identifies valid tracking numbers
@@ -122,6 +146,7 @@ test_files:
122
146
  - test/test_dhl_tracking_number.rb
123
147
  - test/test_fedex_tracking_number.rb
124
148
  - test/test_helper.rb
149
+ - test/test_ontrac_tracking_number.rb
125
150
  - test/test_tracking_number.rb
126
151
  - test/test_ups_tracking_number.rb
127
152
  - test/test_usps_tracking_number.rb