tracking_number 0.10.5 → 3.0.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 +5 -5
- data/.github/FUNDING.yml +2 -0
- data/.github/dependabot.yml +22 -0
- data/.github/workflows/release.yml +36 -0
- data/.github/workflows/ruby.yml +35 -0
- data/.gitmodules +3 -0
- data/.tool-versions +1 -0
- data/CHANGELOG.md +318 -0
- data/Gemfile +4 -2
- data/README.md +112 -15
- data/Rakefile +4 -1
- data/bin/console +14 -0
- data/lib/data/couriers/amazon.json +45 -0
- data/lib/data/couriers/canadapost.json +33 -0
- data/lib/data/couriers/canpar.json +29 -0
- data/lib/data/couriers/dhl.json +97 -0
- data/lib/data/couriers/dpd.json +345 -0
- data/lib/data/couriers/fedex.json +291 -0
- data/lib/data/couriers/gofo.json +24 -0
- data/lib/data/couriers/landmark.json +26 -0
- data/lib/data/couriers/lasership.json +105 -0
- data/lib/data/couriers/old_dominion.json +65 -0
- data/lib/data/couriers/ontrac.json +74 -0
- data/lib/data/couriers/purolator.json +50 -0
- data/lib/data/couriers/s10.json +1443 -0
- data/lib/data/couriers/speedee.json +26 -0
- data/lib/data/couriers/ups.json +197 -0
- data/lib/data/couriers/usps.json +272 -0
- data/lib/data/couriers/yodel.json +29 -0
- data/lib/data/couriers/yunexpress.json +25 -0
- data/lib/tracking_number/active_model_validator.rb +1 -1
- data/lib/tracking_number/base.rb +291 -22
- data/lib/tracking_number/checksum_validations.rb +119 -0
- data/lib/tracking_number/info.rb +26 -0
- data/lib/tracking_number/loader.rb +82 -0
- data/lib/tracking_number/partnership.rb +7 -0
- data/lib/tracking_number/unknown.rb +45 -0
- data/lib/tracking_number/version.rb +1 -1
- data/lib/tracking_number.rb +69 -17
- data/package.json +77 -0
- data/test/partnership_test.rb +71 -0
- data/test/renamed_types_test.rb +44 -0
- data/test/test_helper.rb +14 -7
- data/test/tracking_number_meta_test.rb +145 -0
- data/test/tracking_number_test.rb +191 -0
- data/tracking_number.gemspec +53 -22
- data/yarn.lock +3425 -0
- metadata +131 -46
- data/.travis.yml +0 -12
- data/VERSION +0 -1
- data/lib/tracking_number/dhl.rb +0 -34
- data/lib/tracking_number/fedex.rb +0 -156
- data/lib/tracking_number/ontrac.rb +0 -34
- data/lib/tracking_number/ups.rb +0 -108
- data/lib/tracking_number/usps.rb +0 -166
- data/test/dhl_tracking_number_test.rb +0 -35
- data/test/fedex_tracking_number_test.rb +0 -75
- data/test/ontrac_tracking_number_test.rb +0 -24
- data/test/ups_tracking_number_test.rb +0 -36
- data/test/usps_tracking_number_test.rb +0 -73
|
@@ -6,6 +6,9 @@ class TrackingNumberTest < Minitest::Test
|
|
|
6
6
|
t = TrackingNumber.new("101")
|
|
7
7
|
assert_equal TrackingNumber::Unknown, t.class
|
|
8
8
|
assert_equal :unknown, t.carrier
|
|
9
|
+
assert_equal :unknown, t.courier_code
|
|
10
|
+
assert_equal "Unknown", t.courier_name
|
|
11
|
+
|
|
9
12
|
assert !t.valid?
|
|
10
13
|
end
|
|
11
14
|
|
|
@@ -26,10 +29,198 @@ class TrackingNumberTest < Minitest::Test
|
|
|
26
29
|
assert_equal 2, s.size
|
|
27
30
|
end
|
|
28
31
|
|
|
32
|
+
should "return two ups tracking numbers when given string with two ups tracking numbers" do
|
|
33
|
+
s = TrackingNumber.search("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 1Z5R89390357567127 nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute 1Z879E930346834440 dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")
|
|
34
|
+
assert_equal 2, s.size
|
|
35
|
+
assert_equal [TrackingNumber::UPS, TrackingNumber::UPS], s.collect { |t| t.class }
|
|
36
|
+
end
|
|
37
|
+
|
|
29
38
|
should "return tracking numbers without trailing whitespace" do
|
|
30
39
|
s = TrackingNumber.search("hello 1Z879E930346834440\nbye")
|
|
31
40
|
assert_equal 1, s.size
|
|
32
41
|
assert_equal "1Z879E930346834440", s.first.tracking_number
|
|
33
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
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context "tracking number additional data for ups" do
|
|
52
|
+
tracking_number = TrackingNumber.new("1Z5R89390357567127")
|
|
53
|
+
|
|
54
|
+
should "report correct courier name" do
|
|
55
|
+
assert_equal "UPS", tracking_number.courier_name
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
should "report correct service" do
|
|
59
|
+
assert_equal "UPS United States Ground", tracking_number.service_type
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
should "report correct shipper_id" do
|
|
63
|
+
assert_equal "5R8939", tracking_number.shipper_id
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
should "report correct no destination" do
|
|
67
|
+
assert_nil tracking_number.destination_zip
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
should "report correct no package info" do
|
|
71
|
+
assert_nil tracking_number.package_type
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
should "have valid tracking url" do
|
|
75
|
+
assert tracking_number.tracking_url, "Tracking url should not be blank"
|
|
76
|
+
assert tracking_number.tracking_url.include?(tracking_number.tracking_number), "Should include tracking number in the url"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context "tracking number additional data for s10" do
|
|
81
|
+
tracking_number = TrackingNumber.new("RB123456785GB")
|
|
82
|
+
|
|
83
|
+
should "report correct courier name" do
|
|
84
|
+
assert_equal "Royal Mail Group plc", tracking_number.courier_name
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
should "report correct service" do
|
|
88
|
+
assert_equal "Letter Post Registered", tracking_number.service_type
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
should "report correct shipper_id" do
|
|
92
|
+
assert_nil tracking_number.shipper_id
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
should "report correct no destination" do
|
|
96
|
+
assert_nil tracking_number.destination_zip
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
should "report correct no package info" do
|
|
100
|
+
assert_nil tracking_number.package_type
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
context "tracking number additional data for USPS 20" do
|
|
105
|
+
tracking_number = TrackingNumber.new("0307 1790 0005 2348 3741")
|
|
106
|
+
|
|
107
|
+
should "report correct courier name" do
|
|
108
|
+
assert_equal "United States Postal Service", tracking_number.courier_name
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
should "report correct service" do
|
|
112
|
+
assert_equal "Delivery Confirmation", tracking_number.service_type
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
should "report correct shipper_id" do
|
|
116
|
+
assert_equal "071790000", tracking_number.shipper_id
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
should "report correct no destination" do
|
|
120
|
+
assert_nil tracking_number.destination_zip
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
should "report correct no package info" do
|
|
124
|
+
assert_nil tracking_number.package_type
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
should "have valid tracking url" do
|
|
128
|
+
assert tracking_number.tracking_url, "Tracking url should not be blank"
|
|
129
|
+
assert tracking_number.tracking_url.include?(tracking_number.tracking_number), "Should include tracking number in the url"
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
context "tracking number additional data for USPS 34v2" do
|
|
134
|
+
tracking_number = TrackingNumber.new("4201002334249200190132607600833457")
|
|
135
|
+
|
|
136
|
+
should "report correct courier name" do
|
|
137
|
+
assert_equal "United States Postal Service", tracking_number.courier_name
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
should "report correct service" do
|
|
141
|
+
assert_nil tracking_number.service_type
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
should "report correct shipper_id" do
|
|
145
|
+
assert_equal "901326076", tracking_number.shipper_id
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
should "report correct no destination" do
|
|
149
|
+
assert_equal "10023", tracking_number.destination_zip
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
should "report correct no package info" do
|
|
153
|
+
assert_nil tracking_number.package_type
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
should "report no partnership" do
|
|
157
|
+
assert_equal false, tracking_number.partnership?
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
should "report no partners" do
|
|
161
|
+
assert_nil tracking_number.partners
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
should "report as shipper and carrier" do
|
|
165
|
+
assert_equal true, tracking_number.shipper?
|
|
166
|
+
assert_equal true, tracking_number.carrier?
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
should "have valid tracking url" do
|
|
170
|
+
assert tracking_number.tracking_url, "Tracking url should not be blank"
|
|
171
|
+
assert tracking_number.tracking_url.include?(tracking_number.tracking_number), "Should include tracking number in the url"
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
context "tracking number additional data for USPS Parcel Select" do
|
|
176
|
+
tracking_number = TrackingNumber.new("420 11213 92 6129098349792366623 8")
|
|
177
|
+
|
|
178
|
+
should "report correct courier name" do
|
|
179
|
+
assert_equal "United States Postal Service", tracking_number.courier_name
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
should "report correct courier code" do
|
|
183
|
+
assert_equal :usps, tracking_number.courier_code
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
should "report correct service type" do
|
|
187
|
+
assert_equal "Parcel Select", tracking_number.service_type
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
should "report no partnership" do
|
|
191
|
+
assert_equal false, tracking_number.partnership?
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
should "report as shipper and carrier" do
|
|
195
|
+
assert_equal true, tracking_number.shipper?
|
|
196
|
+
assert_equal true, tracking_number.carrier?
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
should "report no partners" do
|
|
200
|
+
assert_nil tracking_number.partners
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
context "searching for numbers" do
|
|
205
|
+
parcel_select_number = "420 11213 92 6129098349792366623 8"
|
|
206
|
+
single_number = "92001903060085300042901077"
|
|
207
|
+
|
|
208
|
+
search_string = ["number that matches two services", parcel_select_number, " number that matches only one: ", single_number, "let's see if that does it"].join(' ')
|
|
209
|
+
|
|
210
|
+
should "match only carriers by default" do
|
|
211
|
+
matches = TrackingNumber.search(search_string)
|
|
212
|
+
assert_equal 2, matches.size
|
|
213
|
+
assert_equal [true, true], matches.collect { |t| t.carrier? }
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
should "match all if specified" do
|
|
217
|
+
matches = TrackingNumber.search(search_string, match: :all)
|
|
218
|
+
assert_equal 2, matches.size
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
should "match only shippers if specified" do
|
|
222
|
+
matches = TrackingNumber.search(search_string, match: :shipper)
|
|
223
|
+
assert_equal 2, matches.size
|
|
224
|
+
end
|
|
34
225
|
end
|
|
35
226
|
end
|
data/tracking_number.gemspec
CHANGED
|
@@ -1,32 +1,63 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
+
require 'tracking_number/version'
|
|
4
6
|
|
|
5
7
|
Gem::Specification.new do |s|
|
|
6
|
-
s.name =
|
|
8
|
+
s.name = 'tracking_number'
|
|
7
9
|
s.version = TrackingNumber::VERSION
|
|
8
10
|
s.platform = Gem::Platform::RUBY
|
|
9
|
-
|
|
10
|
-
s.
|
|
11
|
-
s.authors = [
|
|
12
|
-
s.
|
|
13
|
-
s.
|
|
14
|
-
s.email = %q{jeff@keen.me}
|
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
|
|
12
|
+
s.required_ruby_version = Gem::Requirement.new('>= 3.0.0')
|
|
13
|
+
s.authors = ['Jeff Keen']
|
|
14
|
+
s.description = "This gem identifies valid tracking numbers and the service they're associated with. It can also tell you a little bit about the package purely from the number—there's quite a bit of info tucked away into those numbers, it turns out."
|
|
15
|
+
s.email = 'jeff@keen.me'
|
|
15
16
|
s.extra_rdoc_files = [
|
|
16
|
-
|
|
17
|
+
'LICENSE.txt'
|
|
17
18
|
]
|
|
18
|
-
|
|
19
|
+
|
|
20
|
+
s.files = `git ls-files`.split("\n")
|
|
21
|
+
|
|
22
|
+
gem_dir = "#{File.expand_path(File.join(__FILE__, '..'))}/"
|
|
23
|
+
`git submodule --quiet foreach pwd`.split($OUTPUT_RECORD_SEPARATOR).each do |submodule_path|
|
|
24
|
+
Dir.chdir(submodule_path.chomp) do
|
|
25
|
+
submodule_relative_path = submodule_path.sub gem_dir, ''
|
|
26
|
+
|
|
27
|
+
# issue git ls-files in submodule's directory
|
|
28
|
+
submodule_files = `git ls-files -- couriers/*`.split($OUTPUT_RECORD_SEPARATOR)
|
|
29
|
+
|
|
30
|
+
# prepend the submodule path to create absolute file paths
|
|
31
|
+
submodule_files_fullpaths = submodule_files.map do |filename|
|
|
32
|
+
"#{submodule_path}/#{filename}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# remove leading path parts to get paths relative to the gem's root dir
|
|
36
|
+
# (this assumes, that the gemspec resides in the gem's root dir)
|
|
37
|
+
submodule_files_paths = submodule_files_fullpaths.map do |filename|
|
|
38
|
+
filename.gsub gem_dir, ''
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# add relative paths to gem.files
|
|
42
|
+
s.files += submodule_files_paths
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
19
46
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
20
|
-
|
|
21
|
-
s.require_paths = [
|
|
22
|
-
s.homepage =
|
|
23
|
-
s.licenses = [
|
|
24
|
-
s.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
s.
|
|
47
|
+
|
|
48
|
+
s.require_paths = ['lib']
|
|
49
|
+
s.homepage = 'http://github.com/jkeen/tracking_number'
|
|
50
|
+
s.licenses = ['MIT']
|
|
51
|
+
s.summary = 'Identifies valid tracking numbers'
|
|
52
|
+
|
|
53
|
+
s.add_runtime_dependency('activesupport', '>= 4.2.5')
|
|
54
|
+
s.add_runtime_dependency('json', '>= 1.8.3')
|
|
55
|
+
s.add_development_dependency('activemodel', '> 4.2.5.1')
|
|
56
|
+
s.add_development_dependency('irb')
|
|
57
|
+
s.add_development_dependency('minitest', '~> 5.5')
|
|
58
|
+
s.add_development_dependency('minitest-reporters', '~> 1.1')
|
|
59
|
+
s.add_development_dependency('rake', '~> 13.0')
|
|
28
60
|
s.add_development_dependency('shoulda')
|
|
29
61
|
s.add_development_dependency('simplecov')
|
|
30
|
-
s.add_development_dependency('
|
|
31
|
-
s.add_development_dependency('minitest','~> 5.5')
|
|
62
|
+
s.add_development_dependency('terminal-table')
|
|
32
63
|
end
|