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 +1 -1
- data/lib/ontrac.rb +34 -0
- data/lib/tracking_number.rb +2 -1
- data/lib/ups.rb +1 -1
- data/test/test_ontrac_tracking_number.rb +20 -0
- data/tracking_number.gemspec +6 -3
- metadata +47 -22
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
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
|
data/lib/tracking_number.rb
CHANGED
@@ -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
@@ -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
|
data/tracking_number.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{tracking_number}
|
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 = ["Jeff Keen"]
|
12
|
-
s.date = %q{2011-04-
|
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.
|
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
|
-
|
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-
|
14
|
-
default_executable:
|
18
|
+
date: 2011-04-26 00:00:00 Z
|
15
19
|
dependencies:
|
16
20
|
- !ruby/object:Gem::Dependency
|
17
|
-
|
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
|
-
|
30
|
+
name: shoulda
|
25
31
|
prerelease: false
|
26
|
-
|
32
|
+
type: :development
|
33
|
+
requirement: *id001
|
27
34
|
- !ruby/object:Gem::Dependency
|
28
|
-
|
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
|
-
|
46
|
+
name: bundler
|
36
47
|
prerelease: false
|
37
|
-
|
48
|
+
type: :development
|
49
|
+
requirement: *id002
|
38
50
|
- !ruby/object:Gem::Dependency
|
39
|
-
|
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
|
-
|
62
|
+
name: jeweler
|
47
63
|
prerelease: false
|
48
|
-
|
64
|
+
type: :development
|
65
|
+
requirement: *id003
|
49
66
|
- !ruby/object:Gem::Dependency
|
50
|
-
|
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
|
-
|
76
|
+
name: rcov
|
58
77
|
prerelease: false
|
59
|
-
|
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:
|
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.
|
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
|