tracking_number 1.4.1 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/lib/data/couriers/dhl.json +19 -3
- data/lib/data/couriers/fedex.json +6 -4
- data/lib/data/couriers/ontrac.json +2 -2
- data/lib/data/couriers/usps.json +1 -0
- data/lib/tracking_number/base.rb +21 -1
- data/lib/tracking_number/unknown.rb +12 -0
- data/lib/tracking_number/version.rb +1 -1
- data/lib/tracking_number.rb +7 -11
- data/test/test_helper.rb +2 -2
- data/test/tracking_number_test.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8412feee78aa93b95544c4f550f6c2fe7f85c579075d92257065ee51c8cfbffe
|
4
|
+
data.tar.gz: f9f54c5bc1f7067f6e50660b0f449ce8e22dd25c886d032018641c39e415e640
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c48b442b251efd962401eb9599bf847e0af8e1cee033793825f7c621f42986e2098014310506e12034774b93da51e0a9a81854cdede6bc5a85deccdd194d7f31
|
7
|
+
data.tar.gz: 74576dc9b858b73717c70d878402c0af022e6272444b806ea8f52376f54df2ed0f5a26834a2fc22350d098d2e1842368dc6ae161332413b8cc7624a2a58c8281
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
tracking_number changelog
|
2
2
|
|
3
|
+
# [1.6.0](https://github.com/jkeen/tracking_number/compare/v1.5.0...v1.6.0) (2023-11-14)
|
4
|
+
|
5
|
+
|
6
|
+
### Bug Fixes
|
7
|
+
|
8
|
+
* resolve error with active support deprecator ([8b97160](https://github.com/jkeen/tracking_number/commit/8b97160a2178b771b340f8459bfa77db5791aeb2))
|
9
|
+
|
10
|
+
|
11
|
+
### Features
|
12
|
+
|
13
|
+
* update to tracking_number_data 1.6.1 ([811a07b](https://github.com/jkeen/tracking_number/commit/811a07bf10d171b56069c927d84266e8a931e073))
|
14
|
+
|
15
|
+
# [1.5.0](https://github.com/jkeen/tracking_number/compare/v1.4.1...v1.5.0) (2023-08-14)
|
16
|
+
|
17
|
+
|
18
|
+
### Features
|
19
|
+
|
20
|
+
* include partnership indicator in inspect ([834a8c4](https://github.com/jkeen/tracking_number/commit/834a8c461ef7c58bff9e1e3ea43e65f6d11c3897))
|
21
|
+
* update to tracking_number_data 1.6.0 ([6c6293e](https://github.com/jkeen/tracking_number/commit/6c6293edc31de905163d0cee2a76e5b0e27c5f62))
|
22
|
+
|
3
23
|
## [1.4.1](https://github.com/jkeen/tracking_number/compare/v1.4.0...v1.4.1) (2023-05-19)
|
4
24
|
|
5
25
|
# [1.4.0](https://github.com/jkeen/tracking_number/compare/v1.3.5...v1.4.0) (2023-05-15)
|
data/lib/data/couriers/dhl.json
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
{
|
6
6
|
"name": "DHL Express",
|
7
7
|
"id": "dhl_express",
|
8
|
-
"regex": "\\s*(?<SerialNumber>(
|
8
|
+
"regex": "\\s*(?<SerialNumber>([0-9]\\s*){9,10})(?<CheckDigit>([0-9]\\s*))",
|
9
9
|
"validation": {
|
10
10
|
"checksum": {
|
11
11
|
"name": "mod7"
|
@@ -14,21 +14,37 @@
|
|
14
14
|
"tracking_url": "http://www.dhl.com/en/express/tracking.html?brand=DHL&AWB=%s",
|
15
15
|
"test_numbers": {
|
16
16
|
"valid": [
|
17
|
-
"JVGL0999999990",
|
18
17
|
"3318810025",
|
19
18
|
"73891051146",
|
20
19
|
"8487135506",
|
20
|
+
"1099255990",
|
21
|
+
"3821724944",
|
21
22
|
"3318810036",
|
22
23
|
"3318810014"
|
23
24
|
],
|
24
25
|
"invalid": [
|
25
26
|
"3318810010",
|
26
27
|
"3318810034",
|
27
|
-
"JVGL3099999999",
|
28
28
|
"3318810011"
|
29
29
|
]
|
30
30
|
}
|
31
31
|
},
|
32
|
+
{
|
33
|
+
"name": "DHL Express (Piece ID)",
|
34
|
+
"id": "dhl_express_piece_id",
|
35
|
+
"regex": "\\s*(J[A-Z]{2,3})(?<SerialNumber>([0-9]\\s*){9,10})",
|
36
|
+
"validation": {},
|
37
|
+
"tracking_url": "http://www.dhl.com/en/express/tracking.html?brand=DHL&AWB=%s",
|
38
|
+
"test_numbers": {
|
39
|
+
"valid": [
|
40
|
+
"JJD0099999999",
|
41
|
+
"JVGL0999999990"
|
42
|
+
],
|
43
|
+
"invalid": [
|
44
|
+
"XJD0099999998"
|
45
|
+
]
|
46
|
+
}
|
47
|
+
},
|
32
48
|
{
|
33
49
|
"name": "DHL E-Commerce",
|
34
50
|
"id": "dhl_ecommerce",
|
@@ -99,7 +99,7 @@
|
|
99
99
|
")?",
|
100
100
|
"(?<SerialNumber>",
|
101
101
|
"(?<SCNC>([0-9]\\s*){2})",
|
102
|
-
"(?<ServiceType>
|
102
|
+
"(?<ServiceType>2\\s*9\\s*)",
|
103
103
|
"(?<ShipperId>([0-9]\\s*){8})",
|
104
104
|
"(?<PackageId>([0-9]\\s*){11}|([0-9]\\s*){7})",
|
105
105
|
")",
|
@@ -146,9 +146,11 @@
|
|
146
146
|
],
|
147
147
|
"invalid": [
|
148
148
|
"9261292700768711948020",
|
149
|
-
"
|
150
|
-
"420
|
151
|
-
"
|
149
|
+
"92001903060085300042901077",
|
150
|
+
"420 11213 61290983497923666231",
|
151
|
+
"92 6129098349792366623 5",
|
152
|
+
"9400 1112 0108 0805 4830 16",
|
153
|
+
"9361 2898 7870 0317 6337 95"
|
152
154
|
]
|
153
155
|
}
|
154
156
|
},
|
@@ -19,7 +19,7 @@
|
|
19
19
|
}
|
20
20
|
}
|
21
21
|
},
|
22
|
-
"tracking_url": "http://www.ontrac.com/
|
22
|
+
"tracking_url": "http://www.ontrac.com/tracking/?number=%s",
|
23
23
|
"test_numbers": {
|
24
24
|
"valid": [
|
25
25
|
"C11031500001879",
|
@@ -52,7 +52,7 @@
|
|
52
52
|
}
|
53
53
|
}
|
54
54
|
},
|
55
|
-
"tracking_url": "http://www.ontrac.com/
|
55
|
+
"tracking_url": "http://www.ontrac.com/tracking/?number=%s",
|
56
56
|
"test_numbers": {
|
57
57
|
"valid": [
|
58
58
|
"D10011354453707",
|
data/lib/data/couriers/usps.json
CHANGED
data/lib/tracking_number/base.rb
CHANGED
@@ -97,12 +97,31 @@ module TrackingNumber
|
|
97
97
|
TrackingNumber::ChecksumValidations.send(method_name, serial_number, check_digit, checksum_info)
|
98
98
|
end
|
99
99
|
|
100
|
+
def checksum?
|
101
|
+
!!self.class.const_get(:VALIDATION)[:checksum]
|
102
|
+
end
|
103
|
+
|
104
|
+
LENGTH_WEIGHT = 0.1
|
105
|
+
CHECKSUM_WEIGHT = 5.0
|
106
|
+
|
107
|
+
def confidence
|
108
|
+
(checksum? ? CHECKSUM_WEIGHT : 0) + tracking_number.length * LENGTH_WEIGHT
|
109
|
+
end
|
110
|
+
|
100
111
|
def to_s
|
101
112
|
tracking_number
|
102
113
|
end
|
103
114
|
|
104
115
|
def inspect
|
105
|
-
format('#<%s:%#0x %s>', self.class.to_s, object_id, tracking_number)
|
116
|
+
format('#<%s:%#0x %s%s>', self.class.to_s, object_id, tracking_number, partnership_inspect)
|
117
|
+
end
|
118
|
+
|
119
|
+
def partnership_inspect
|
120
|
+
if shipper? ^ carrier?
|
121
|
+
' (partnership)'
|
122
|
+
else
|
123
|
+
''
|
124
|
+
end
|
106
125
|
end
|
107
126
|
|
108
127
|
def info
|
@@ -169,6 +188,7 @@ module TrackingNumber
|
|
169
188
|
return unless (partner_tn = find_matching_partner)
|
170
189
|
|
171
190
|
possible_twin = partner_tn.send(:find_matching_partner)
|
191
|
+
|
172
192
|
if possible_twin.instance_of?(self.class) && possible_twin.tracking_number == tracking_number
|
173
193
|
partner_hash[partner_data[:partner_type].to_sym] = partner_tn
|
174
194
|
partner_hash[partner_tn.partner_data[:partner_type].to_sym] = self
|
data/lib/tracking_number.rb
CHANGED
@@ -7,8 +7,7 @@ require 'tracking_number/base'
|
|
7
7
|
require 'tracking_number/info'
|
8
8
|
require 'tracking_number/partnership'
|
9
9
|
require 'tracking_number/unknown'
|
10
|
-
require 'active_support/
|
11
|
-
require 'active_support/core_ext/hash'
|
10
|
+
require 'active_support/all'
|
12
11
|
|
13
12
|
if defined?(ActiveModel::EachValidator)
|
14
13
|
require 'tracking_number/active_model_validator'
|
@@ -39,16 +38,13 @@ module TrackingNumber
|
|
39
38
|
end
|
40
39
|
|
41
40
|
def self.detect(tracking_number, match: :carrier)
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
break
|
49
|
-
end
|
41
|
+
all_matches = search(tracking_number, match: match)
|
42
|
+
|
43
|
+
if all_matches.empty?
|
44
|
+
Unknown.new(tracking_number)
|
45
|
+
else
|
46
|
+
all_matches.max_by(&:confidence)
|
50
47
|
end
|
51
|
-
tn
|
52
48
|
end
|
53
49
|
|
54
50
|
def self.detect_all(tracking_number)
|
data/test/test_helper.rb
CHANGED
@@ -51,9 +51,9 @@ class Minitest::Test
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def should_fail_on_check_digit_changes(valid_number)
|
54
|
-
digits = valid_number.gsub(/\s/, "").chars.to_a
|
54
|
+
digits = valid_number.gsub(/\s/, "").chars.compact.to_a
|
55
55
|
last = digits.pop.to_i
|
56
|
-
digits << (last
|
56
|
+
digits << (last <= 2 ? last + 3 : last - 3).to_s
|
57
57
|
invalid_number = digits.join
|
58
58
|
t = TrackingNumber.new(invalid_number)
|
59
59
|
assert !t.valid?, "#{invalid_number} reported as a valid #{t.class}, and it shouldn't be"
|
@@ -200,7 +200,7 @@ class TrackingNumberTest < Minitest::Test
|
|
200
200
|
|
201
201
|
context "searching numbers that have partners" do
|
202
202
|
partnership_number = "420 11213 92 6129098349792366623 8"
|
203
|
-
single_number = "
|
203
|
+
single_number = "92001903060085300042901077"
|
204
204
|
|
205
205
|
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
206
|
|
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: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Keen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|