tracking_number 0.3.2 → 0.4.0

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.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