tracking_number 2.0.0 → 2.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e06e5887cc3a0316fe5a91cbcd544ff96e11cf39034926bd196acee9eca7d716
4
- data.tar.gz: 221fff9ec8207d17ef36072ee3d7313e1a30acdf2791ef6aa98a8cf243b734c1
3
+ metadata.gz: 77e857acd9dad322c9fd97d0a4039d2fbcc137bd7cf3134762b0564733f1494c
4
+ data.tar.gz: ba678d0e8694ff834fef640491099c44729796e242a50ba9c030088ac3664894
5
5
  SHA512:
6
- metadata.gz: 7152bb607cc2e19bafa3b0e9efb7b903787cbbf307d2f4e9ecb3b7944b98c352c34b22c7aaf8950b91ea8d9f0127278523d841732ca67cf2c54a029eba442f51
7
- data.tar.gz: c201d4823c212014c499f36170071ec126208401d3aa7eab8d75edc98b820bd2a9a793e5cdaa75e12a0fe81c20a29c8711b6aeae7408180f8101f80d69921318
6
+ metadata.gz: f420e4b0e156711c86960888f1c05e34495510bf409dafece5030071d988256cd1b1d82a74cfc355855c9a1c66159d00ff38ca246ada35870b6a4ecb26d647cf
7
+ data.tar.gz: e1639a36e8c68508576d456b9f4bc4d69aa67d2a2595f16ea91e6b1e09ca82b6fb69b5c2875c61caabbb8be363cd2dded572ff75eb2d0cb1640958a1544e7e37
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  tracking_number changelog
2
2
 
3
+ # [2.1.0](https://github.com/jkeen/tracking_number/compare/v2.0.1...v2.1.0) (2025-04-07)
4
+
5
+
6
+ ### Features
7
+
8
+ * update tracking_number_data adding support for Old Dominion ([f209148](https://github.com/jkeen/tracking_number/commit/f209148187e08111078c88bd74e011e375e05056))
9
+
10
+ ## [2.0.1](https://github.com/jkeen/tracking_number/compare/v2.0.0...v2.0.1) (2024-08-20)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * upcase body before searching to find lowercase tracking numbers ([#85](https://github.com/jkeen/tracking_number/issues/85)) ([e07c754](https://github.com/jkeen/tracking_number/commit/e07c754ba3647ae4e587b30a5c51bfa23a4589e5))
16
+
3
17
  # [2.0.0](https://github.com/jkeen/tracking_number/compare/v1.6.0...v2.0.0) (2024-08-18)
4
18
 
5
19
  # [1.6.0](https://github.com/jkeen/tracking_number/compare/v1.5.0...v1.6.0) (2023-11-14)
@@ -6,15 +6,15 @@
6
6
  "name": "Amazon Logistics",
7
7
  "id": "amazon_logistics",
8
8
  "regex": [
9
- "\\s*T\\s*B\\s*A\\s*(?<SerialNumber>([0-9]\\s*){12,12})\\s*"
9
+ "\\s*T\\s*B\\s*[ACM]\\s*(?<SerialNumber>([0-9]\\s*){12,12})\\s*"
10
10
  ],
11
11
  "validation": {},
12
12
  "test_numbers": {
13
13
  "valid": [
14
14
  "TBA000000000000",
15
15
  "TBA010000000000",
16
- "TBA 000000000000",
17
- "TBA502887274000"
16
+ "TBC 000000000000",
17
+ "TBM502887274000"
18
18
  ],
19
19
  "invalid": [
20
20
  "TBA50288727400A",
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "Old Dominion Freight Line",
3
+ "courier_code": "old_dominion",
4
+ "tracking_numbers": [
5
+ {
6
+ "name": "Old Dominion",
7
+ "regex": [
8
+ "\\s*(?<SerialNumber>",
9
+ "(7\\s*7\\s*[78]\\s*|0\\s*7\\s*2\\s*|7\\s*8\\s*0\\s*)",
10
+ "([0-9]\\s*){7}",
11
+ ")",
12
+ "(?<CheckDigit>[0-9]\\s*)"
13
+ ],
14
+ "validation": {
15
+ "checksum": {
16
+ "name": "luhn"
17
+ }
18
+ },
19
+ "tracking_url": "https://www.odfl.com/us/en/tools/trace-track-ltl-freight/trace.html?proNumbers=%s",
20
+ "test_numbers": {
21
+ "valid": [
22
+ "07209562763",
23
+ " 0 7 2 0 9 5 6 2 7 6 3 ",
24
+ "77767553207",
25
+ "77806528897",
26
+ "78045768393"
27
+ ],
28
+ "invalid": [
29
+ "07209562773",
30
+ "79927398713",
31
+ "10000000000"
32
+ ]
33
+ }
34
+ },
35
+ {
36
+ "name": "Old Dominion Guaranteed Shipment",
37
+ "regex": [
38
+ "\\s*(?<SerialNumber>",
39
+ "8\\s*0\\s*",
40
+ "([0-9]\\s*){8}",
41
+ ")",
42
+ "(?<CheckDigit>[0-9]\\s*)"
43
+ ],
44
+ "validation": {
45
+ "checksum": {
46
+ "name": "luhn"
47
+ }
48
+ },
49
+ "tracking_url": "https://www.odfl.com/us/en/tools/trace-track-ltl-freight/trace.html?proNumbers=%s",
50
+ "test_numbers": {
51
+ "valid": [
52
+ "80003280379",
53
+ " 8 0 0 0 3 2 8 0 3 7 9 ",
54
+ "80993847369"
55
+ ],
56
+ "invalid": [
57
+ "80003280389",
58
+ "10000000000"
59
+ ]
60
+ }
61
+ }
62
+ ]
63
+ }
@@ -24,7 +24,7 @@ module TrackingNumber
24
24
  # matches with match groups within the match data
25
25
  matches = []
26
26
 
27
- body.scan(const_get(:SEARCH_PATTERN)) do
27
+ body.upcase.scan(const_get(:SEARCH_PATTERN)) do
28
28
  # get the match data instead, which is needed with these types of regexes
29
29
  matches << $~
30
30
  end
@@ -86,6 +86,28 @@ module TrackingNumber
86
86
 
87
87
  computed == check_digit
88
88
  end
89
+
90
+ def validates_luhn?(sequence, check_digit, extras = {})
91
+ total = 0
92
+ sequence.chars.reverse.each_with_index do |c, i|
93
+ x = c.to_i
94
+
95
+ if i.even?
96
+ x *= 2
97
+ end
98
+
99
+ if x > 9
100
+ x -= 9
101
+ end
102
+
103
+ total += x
104
+ end
105
+
106
+ check = (total % 10)
107
+ check = (10 - check) unless (check.zero?)
108
+
109
+ return (check.to_i == check_digit.to_i)
110
+ end
89
111
  end
90
112
  end
91
113
  end
@@ -1,3 +1,3 @@
1
1
  module TrackingNumber
2
- VERSION = "2.0.0"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -40,6 +40,12 @@ class TrackingNumberTest < Minitest::Test
40
40
  assert_equal 1, s.size
41
41
  assert_equal "1Z879E930346834440", s.first.tracking_number
42
42
  end
43
+
44
+ should "return tracking numbers entered as lowercase" do
45
+ s = TrackingNumber.search("hello 1z879E930346834440 bye")
46
+ assert_equal 1, s.size
47
+ assert_equal "1Z879E930346834440", s.first.tracking_number
48
+ end
43
49
  end
44
50
 
45
51
  context "tracking number additional data for ups" do
@@ -201,7 +207,7 @@ class TrackingNumberTest < Minitest::Test
201
207
  context "searching numbers that have partners" do
202
208
  partnership_number = "420 11213 92 6129098349792366623 8"
203
209
  single_number = "92001903060085300042901077"
204
-
210
+
205
211
  search_string = ["number that matches two services", partnership_number, " number that matches only one: ", single_number, "let's see if that does it"].join(' ')
206
212
 
207
213
  should "match only carriers by default" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tracking_number
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Keen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-18 00:00:00.000000000 Z
11
+ date: 2025-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -166,6 +166,7 @@ files:
166
166
  - lib/data/couriers/fedex.json
167
167
  - lib/data/couriers/landmark.json
168
168
  - lib/data/couriers/lasership.json
169
+ - lib/data/couriers/old_dominion.json
169
170
  - lib/data/couriers/ontrac.json
170
171
  - lib/data/couriers/s10.json
171
172
  - lib/data/couriers/ups.json
@@ -190,7 +191,7 @@ homepage: http://github.com/jkeen/tracking_number
190
191
  licenses:
191
192
  - MIT
192
193
  metadata: {}
193
- post_install_message:
194
+ post_install_message:
194
195
  rdoc_options: []
195
196
  require_paths:
196
197
  - lib
@@ -206,7 +207,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
207
  version: '0'
207
208
  requirements: []
208
209
  rubygems_version: 3.2.32
209
- signing_key:
210
+ signing_key:
210
211
  specification_version: 4
211
212
  summary: Identifies valid tracking numbers
212
213
  test_files: []