vindetta 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +0 -1
- data/.rubocop.yml +3 -0
- data/Gemfile +1 -1
- data/Guardfile +1 -1
- data/Rakefile +2 -2
- data/bin/console +3 -3
- data/exe/vindetta +1 -1
- data/lib/vindetta/cli.rb +17 -9
- data/lib/vindetta/data/vis.yaml +93 -0
- data/lib/vindetta/data/wmi.yaml +461 -0
- data/lib/vindetta/decoder.rb +9 -0
- data/lib/vindetta/generator.rb +2 -2
- data/lib/vindetta/locale/en.yml +2 -0
- data/lib/vindetta/transliterator.rb +1 -1
- data/lib/vindetta/validator.rb +4 -4
- data/lib/vindetta/version.rb +1 -1
- data/lib/vindetta/vin/vds.rb +21 -0
- data/lib/vindetta/vin/vis.rb +47 -0
- data/lib/vindetta/vin/wmi.rb +29 -0
- data/lib/vindetta/vin.rb +60 -3
- data/lib/vindetta.rb +11 -7
- data/vindetta.gemspec +23 -21
- metadata +40 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 056cbe8322369ee845c9cd121e97d581e2f5f364
|
4
|
+
data.tar.gz: 584d4c70620eb9f855d9ff6ee65e6814a778c103
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1136fa7046ba29e3cbf80f8aaeb5c2472cb4ff7b39c3b0d878a80f9b6bcba295890f0f9f8d87e8b241fde5456ae22367b2a2306cc46115de6f7724d63c800656
|
7
|
+
data.tar.gz: caf48c6aee89da3a836831663a5551ecba75853b3b9f60d9ba672bf39e48982bf1bd3411734d0b1d2418d8606347ec8785c7c9bdbac5cbaaf5d3ba5376902f07
|
data/.rspec
CHANGED
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/Guardfile
CHANGED
@@ -41,7 +41,7 @@ guard :rspec, cmd: "bundle exec rspec" do
|
|
41
41
|
dsl.watch_spec_files_for(ruby.lib_files)
|
42
42
|
|
43
43
|
# Rails files
|
44
|
-
rails = dsl.rails(view_extensions: %w
|
44
|
+
rails = dsl.rails(view_extensions: %w[erb haml slim])
|
45
45
|
dsl.watch_spec_files_for(rails.app_files)
|
46
46
|
dsl.watch_spec_files_for(rails.views)
|
47
47
|
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
data/exe/vindetta
CHANGED
data/lib/vindetta/cli.rb
CHANGED
@@ -1,28 +1,36 @@
|
|
1
|
-
require
|
1
|
+
require "gli"
|
2
2
|
|
3
3
|
module Vindetta
|
4
4
|
class CLI
|
5
5
|
extend GLI::App
|
6
6
|
|
7
|
-
program_desc
|
7
|
+
program_desc "Vehicle Identification Number (VIN) CLI"
|
8
8
|
|
9
|
-
desc
|
10
|
-
arg_name
|
11
|
-
command [
|
9
|
+
desc "Transliterates a VIN character"
|
10
|
+
arg_name "character"
|
11
|
+
command %i[transliterate t] do |c|
|
12
12
|
c.action do |_global, _options, args|
|
13
13
|
puts Vindetta::Transliterator.run(args.first)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
desc
|
18
|
-
command [
|
17
|
+
desc "Validates a VIN"
|
18
|
+
command %i[validate v] do |c|
|
19
19
|
c.action do |_global, _options, args|
|
20
20
|
puts Vindetta::Validator.run(args.first)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
desc
|
25
|
-
command [
|
24
|
+
desc "Decodes a VIN"
|
25
|
+
command %i[decode d] do |c|
|
26
|
+
c.action do |_global, _options, _args|
|
27
|
+
vin = Vindetta::Vin.new(_args.first)
|
28
|
+
puts Vindetta::Decoder.decode(vin)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Generates a random VIN"
|
33
|
+
command %i[generate g] do |c|
|
26
34
|
c.action do |_global, _options, _args|
|
27
35
|
puts Vindetta::Generator.generate
|
28
36
|
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
---
|
2
|
+
|
3
|
+
year:
|
4
|
+
A:
|
5
|
+
- 1980
|
6
|
+
- 2010
|
7
|
+
B:
|
8
|
+
- 1981
|
9
|
+
- 2011
|
10
|
+
C:
|
11
|
+
- 1982
|
12
|
+
- 2012
|
13
|
+
D:
|
14
|
+
- 1983
|
15
|
+
- 2013
|
16
|
+
E:
|
17
|
+
- 1984
|
18
|
+
- 2014
|
19
|
+
F:
|
20
|
+
- 1985
|
21
|
+
- 2015
|
22
|
+
G:
|
23
|
+
- 1986
|
24
|
+
- 2016
|
25
|
+
H:
|
26
|
+
- 1987
|
27
|
+
- 2017
|
28
|
+
J:
|
29
|
+
- 1988
|
30
|
+
- 2018
|
31
|
+
K:
|
32
|
+
- 1989
|
33
|
+
- 2019
|
34
|
+
L:
|
35
|
+
- 1990
|
36
|
+
- 2020
|
37
|
+
M:
|
38
|
+
- 1991
|
39
|
+
- 2021
|
40
|
+
N:
|
41
|
+
- 1992
|
42
|
+
- 2022
|
43
|
+
P:
|
44
|
+
- 1993
|
45
|
+
- 2023
|
46
|
+
R:
|
47
|
+
- 1994
|
48
|
+
- 2024
|
49
|
+
S:
|
50
|
+
- 1995
|
51
|
+
- 2025
|
52
|
+
T:
|
53
|
+
- 1996
|
54
|
+
- 2026
|
55
|
+
V:
|
56
|
+
- 1997
|
57
|
+
- 2027
|
58
|
+
W:
|
59
|
+
- 1998
|
60
|
+
- 2028
|
61
|
+
X:
|
62
|
+
- 1999
|
63
|
+
- 2029
|
64
|
+
Y:
|
65
|
+
- 2000
|
66
|
+
- 2030
|
67
|
+
"1":
|
68
|
+
- 2001
|
69
|
+
- 2031
|
70
|
+
"2":
|
71
|
+
- 2002
|
72
|
+
- 2032
|
73
|
+
"3":
|
74
|
+
- 2003
|
75
|
+
- 2033
|
76
|
+
"4":
|
77
|
+
- 2004
|
78
|
+
- 2034
|
79
|
+
"5":
|
80
|
+
- 2005
|
81
|
+
- 2035
|
82
|
+
"6":
|
83
|
+
- 2006
|
84
|
+
- 2036
|
85
|
+
"7":
|
86
|
+
- 2007
|
87
|
+
- 2037
|
88
|
+
"8":
|
89
|
+
- 2008
|
90
|
+
- 2038
|
91
|
+
"9":
|
92
|
+
- 2009
|
93
|
+
- 2039
|
@@ -0,0 +1,461 @@
|
|
1
|
+
---
|
2
|
+
|
3
|
+
AAV: Volkswagen South Africa
|
4
|
+
AC5: Hyundai South Africa
|
5
|
+
ADD: Hyundai South Africa
|
6
|
+
AFA: Ford South Africa
|
7
|
+
AHT: Toyota South Africa
|
8
|
+
JA3: Mitsubishi
|
9
|
+
JA4: Mitsubishi
|
10
|
+
JA: Isuzu
|
11
|
+
JD: Daihatsu
|
12
|
+
JF: Fuji Heavy Industries (Subaru)
|
13
|
+
JH: Honda
|
14
|
+
JK: Kawasaki (motorcycles)
|
15
|
+
JL5: Mitsubishi Fuso
|
16
|
+
JMB: Mitsubishi Motors
|
17
|
+
JMY: Mitsubishi Motors
|
18
|
+
JMZ: Mazda
|
19
|
+
JN: Nissan
|
20
|
+
JS: Suzuki
|
21
|
+
JT: Toyota
|
22
|
+
JY: Yamaha (motorcycles)
|
23
|
+
KL: Daewoo General Motors South Korea
|
24
|
+
KM: Hyundai
|
25
|
+
KMY: Daelim (motorcycles)
|
26
|
+
KM1: Hyosung (motorcycles)
|
27
|
+
KN: Kia
|
28
|
+
KNM: Renault Samsung
|
29
|
+
KPA: SsangYong
|
30
|
+
KPT: SsangYong
|
31
|
+
LAN: Changzhou Yamasaki Motorcycle
|
32
|
+
LBB: Zhejiang Qianjiang Motorcycle (Keeway/Generic)
|
33
|
+
LBE: Beijing Hyundai
|
34
|
+
LBM: Zongshen Piaggio
|
35
|
+
LBP: Chongqing Jainshe Yamaha (motorcycles)
|
36
|
+
LB2: Geely Motorcycles
|
37
|
+
LCE: Hangzhou Chunfeng Motorcycles (CFMOTO)
|
38
|
+
LDC: Dong Feng Peugeot Citroen (DPCA), China
|
39
|
+
LDD: Dandong Huanghai Automobile
|
40
|
+
LDN: SouEast Motor
|
41
|
+
LDY: Zhongtong Coach, China
|
42
|
+
LET: Jiangling-Isuzu Motors, China
|
43
|
+
LE4: Beijing Benz, China
|
44
|
+
LFB: FAW, China (busses)
|
45
|
+
LFG: Taizhou Chuanl Motorcycle Manufacturing
|
46
|
+
LFP: FAW, China (passenger vehicles)
|
47
|
+
LFT: FAW, China (trailers)
|
48
|
+
LFV: FAW-Volkswagen, China
|
49
|
+
LFW: FAW JieFang, China
|
50
|
+
LFY: Changshu Light Motorcycle Factory
|
51
|
+
LGB: Dong Feng (DFM), China
|
52
|
+
LGH: Qoros (formerly Dong Feng (DFM)), China
|
53
|
+
LGX: BYD Auto, China
|
54
|
+
LHB: Beijing Automotive Industry Holding
|
55
|
+
LH1: FAW-Haima, China
|
56
|
+
LJC: JAC, China
|
57
|
+
LJ1: JAC, China
|
58
|
+
LKL: Suzhou King Long, China
|
59
|
+
LL6: Hunan Changfeng Manufacture Joint-Stock
|
60
|
+
LL8: Linhai (ATV)
|
61
|
+
LMC: Suzuki Hong Kong (motorcycles)
|
62
|
+
LPR: Yamaha Hong Kong (motorcycles)
|
63
|
+
LSG: Shanghai General Motors, China
|
64
|
+
LSJ: MG Motor UK Limited - SAIC Motor, Shanghai, China
|
65
|
+
LSV: Shanghai Volkswagen, China
|
66
|
+
LSY: Brilliance Zhonghua
|
67
|
+
LTV: Toyota Tian Jin
|
68
|
+
LUC: Guangqi Honda, China
|
69
|
+
LVS: Ford Chang An
|
70
|
+
LVV: Chery, China
|
71
|
+
LVZ: Dong Feng Sokon Motor Company (DFSK)
|
72
|
+
LZM: MAN China
|
73
|
+
LZE: Isuzu Guangzhou, China
|
74
|
+
LZG: Shaanxi Automobile Group, China
|
75
|
+
LZP: Zhongshan Guochi Motorcycle (Baotian)
|
76
|
+
LZY: Yutong Zhengzhou, China
|
77
|
+
LZZ: Chongqing Shuangzing Mech & Elec (Howo)
|
78
|
+
L4B: Xingyue Group (motorcycles)
|
79
|
+
L5C: KangDi (ATV)
|
80
|
+
L5K: Zhejiang Yongkang Easy Vehicle
|
81
|
+
L5N: Zhejiang Taotao, China (ATV & motorcycles)
|
82
|
+
L5Y: Merato Motorcycle Taizhou Zhongneng
|
83
|
+
L85: Zhejiang Yongkang Huabao Electric Appliance
|
84
|
+
L8X: Zhejiang Summit Huawin Motorcycle
|
85
|
+
MAB: Mahindra & Mahindra
|
86
|
+
MAC: Mahindra & Mahindra
|
87
|
+
MAJ: Ford India
|
88
|
+
MAK: Honda Siel Cars India
|
89
|
+
MAL: Hyundai
|
90
|
+
MAT: Tata Motors
|
91
|
+
MA1: Mahindra & Mahindra
|
92
|
+
MA3: Suzuki India (Maruti)
|
93
|
+
MA6: GM India
|
94
|
+
MA7: Mitsubishi India (formerly Honda)
|
95
|
+
MBH: Suzuki India (Maruti)
|
96
|
+
MBJ: Toyota India
|
97
|
+
MBR: Mercedes-Benz India
|
98
|
+
MB1: Ashok Leyland
|
99
|
+
MCA: Fiat India
|
100
|
+
MCB: GM India
|
101
|
+
MC2: Volvo Eicher commercial vehicles limited.
|
102
|
+
MDH: Nissan India
|
103
|
+
MD2: Bajaj Auto
|
104
|
+
MEE: Renault India
|
105
|
+
MEX: Volkswagen India
|
106
|
+
MHF: Toyota Indonesia
|
107
|
+
MHR: Honda Indonesia
|
108
|
+
MLC: Suzuki Thailand
|
109
|
+
MLH: Honda Thailand
|
110
|
+
MMB: Mitsubishi Thailand
|
111
|
+
MMC: Mitsubishi Thailand
|
112
|
+
MMM: Chevrolet Thailand
|
113
|
+
MMT: Mitsubishi Thailand
|
114
|
+
MM8: Mazda Thailand
|
115
|
+
MNB: Ford Thailand
|
116
|
+
MNT: Nissan Thailand
|
117
|
+
MPA: Isuzu Thailand
|
118
|
+
MP1: Isuzu Thailand
|
119
|
+
MRH: Honda Thailand
|
120
|
+
MR0: Toyota Thailand
|
121
|
+
NLA: Honda Türkiye
|
122
|
+
NLE: Mercedes-Benz Türk Truck
|
123
|
+
NLH: Hyundai Assan
|
124
|
+
NLT: TEMSA
|
125
|
+
NMB: Mercedes-Benz Türk Buses
|
126
|
+
NMC: BMC
|
127
|
+
NM0: Ford Turkey
|
128
|
+
NM4: Tofaş Türk
|
129
|
+
NMT: Toyota Türkiye
|
130
|
+
NNA: Isuzu Turkey
|
131
|
+
PE1: Ford Phillipines
|
132
|
+
PE3: Mazda Phillipines
|
133
|
+
PL1: Proton, Malaysia
|
134
|
+
PNA: NAZA, Malaysia (Peugeot)
|
135
|
+
RA1: Steyr Trucks International FZE, UAE
|
136
|
+
RFB: Kymco, Taiwan
|
137
|
+
RFG: Sanyang SYM, Taiwan
|
138
|
+
RFL: Adly, Taiwan
|
139
|
+
RFT: CPI, Taiwan
|
140
|
+
RF3: Aeon Motor, Taiwan
|
141
|
+
SAL: Land Rover
|
142
|
+
SAJ: Jaguar
|
143
|
+
SAR: Rover
|
144
|
+
SB1: Toyota UK
|
145
|
+
SBM: McLaren
|
146
|
+
SCA: Rolls Royce
|
147
|
+
SCB: Bentley
|
148
|
+
SCC: Lotus Cars
|
149
|
+
SCE: DeLorean Motor Cars N. Ireland (UK)
|
150
|
+
SCF: Aston
|
151
|
+
SDB: Peugeot UK (formerly Talbot)
|
152
|
+
SED: General Motors Luton Plant
|
153
|
+
SEY: LDV
|
154
|
+
SFA: Ford UK
|
155
|
+
SFD: Alexander Dennis UK
|
156
|
+
SHH: Honda UK
|
157
|
+
SHS: Honda UK
|
158
|
+
SJN: Nissan UK
|
159
|
+
SKF: Vauxhall
|
160
|
+
SLP: JCB Research UK
|
161
|
+
SMT: Triumph Motorcycles
|
162
|
+
SUF: Fiat Auto Poland
|
163
|
+
SUL: FSC (Poland)
|
164
|
+
SUP: FSO-Daewoo (Poland)
|
165
|
+
SUU: Solaris Bus & Coach (Poland)
|
166
|
+
TCC: Micro Compact Car AG (smart 1998-1999)
|
167
|
+
TDM: QUANTYA Swiss Electric Movement (Switzerland)
|
168
|
+
TK9: SOR buses (Czech Republic)
|
169
|
+
TMA: Hyundai Motor Manufacturing Czech
|
170
|
+
TMB: Škoda (Czech Republic)
|
171
|
+
TMK: Karosa (Czech Republic)
|
172
|
+
TMP: Škoda trolleybuses (Czech Republic)
|
173
|
+
TMT: Tatra (Czech Republic)
|
174
|
+
TM9: Škoda trolleybuses (Czech Republic)
|
175
|
+
TNE: TAZ
|
176
|
+
TN9: Karosa (Czech Republic)
|
177
|
+
TRA: Ikarus Bus
|
178
|
+
TRU: Audi Hungary
|
179
|
+
TSE: Ikarus Egyedi Autobuszgyar, (Hungary)
|
180
|
+
TSM: Suzuki Hungary
|
181
|
+
TW1: Toyota Caetano Portugal
|
182
|
+
TYA: Mitsubishi Trucks Portugal
|
183
|
+
TYB: Mitsubishi Trucks Portugal
|
184
|
+
UU1: Renault Dacia, (Romania)
|
185
|
+
UU3: ARO
|
186
|
+
UU6: Daewoo Romania
|
187
|
+
U5Y: Kia Motors Slovakia
|
188
|
+
U6Y: Kia Motors Slovakia
|
189
|
+
VAG: Magna Steyr Puch
|
190
|
+
VAN: MAN Austria
|
191
|
+
VBK: KTM (Motorcycles)
|
192
|
+
VF1: Renault
|
193
|
+
VF2: Renault
|
194
|
+
VF3: Peugeot
|
195
|
+
VF4: Talbot
|
196
|
+
VF6: Renault (Trucks & Buses)
|
197
|
+
VF7: Citroën
|
198
|
+
VF8: Matra
|
199
|
+
VF9/795: Bugatti
|
200
|
+
VG5: MBK (motorcycles)
|
201
|
+
VLU: Scania France
|
202
|
+
VN1: SOVAB (France)
|
203
|
+
VNE: Irisbus (France)
|
204
|
+
VNK: Toyota France
|
205
|
+
VNV: Renault-Nissan
|
206
|
+
VSA: Mercedes-Benz Spain
|
207
|
+
VSE: Suzuki Spain (Santana Motors)
|
208
|
+
VSK: Nissan Spain
|
209
|
+
VSS: SEAT
|
210
|
+
VSX: Opel Spain
|
211
|
+
VS6: Ford Spain
|
212
|
+
VS7: Citroën Spain
|
213
|
+
VS9: Carrocerias Ayats (Spain)
|
214
|
+
VTH: Derbi (motorcycles)
|
215
|
+
VTL: Yamaha Spain (motorcycles)
|
216
|
+
VTT: Suzuki Spain (motorcycles)
|
217
|
+
VV9: TAURO Spain
|
218
|
+
VWA: Nissan Spain
|
219
|
+
VWV: Volkswagen Spain
|
220
|
+
VX1: Zastava / Yugo Serbia
|
221
|
+
WAG: Neoplan
|
222
|
+
WAU: Audi
|
223
|
+
WA1: Audi SUV
|
224
|
+
WBA: BMW
|
225
|
+
WBS: BMW M
|
226
|
+
WBY: BMW
|
227
|
+
WDA: Daimler
|
228
|
+
WDB: Mercedes-Benz
|
229
|
+
WDC: DaimlerChrysler
|
230
|
+
WDD: Mercedes-Benz
|
231
|
+
WDF: Mercedes-Benz (commercial vehicles)
|
232
|
+
WEB: Evobus GmbH (Mercedes-Bus)
|
233
|
+
WJM: Iveco Magirus
|
234
|
+
WF0: Ford Germany
|
235
|
+
WKK: Kässbohrer/Setra
|
236
|
+
WMA: MAN Germany
|
237
|
+
WME: smart
|
238
|
+
WMW: MINI
|
239
|
+
WMX: Mercedes-AMG
|
240
|
+
WP0: Porsche
|
241
|
+
WP1: Porsche SUV
|
242
|
+
W0L: Opel
|
243
|
+
W0V: Opel
|
244
|
+
WUA: quattro GmbH
|
245
|
+
WVG: Volkswagen MPV/SUV
|
246
|
+
WVW: Volkswagen
|
247
|
+
WV1: Volkswagen Commercial Vehicles
|
248
|
+
WV2: Volkswagen Bus/Van
|
249
|
+
WV3: Volkswagen Trucks
|
250
|
+
XLB: Volvo (NedCar)
|
251
|
+
XLE: Scania Netherlands
|
252
|
+
XLR: DAF (trucks)
|
253
|
+
XL9/363: Spyker
|
254
|
+
XMC: Mitsubishi (NedCar)
|
255
|
+
XTA: Lada/AvtoVAZ (Russia)
|
256
|
+
XTC: KAMAZ (Russia)
|
257
|
+
XTH: GAZ (Russia)
|
258
|
+
XTT: UAZ/Sollers (Russia)
|
259
|
+
XTY: LiAZ (Russia)
|
260
|
+
XUF: General Motors Russia
|
261
|
+
XUU: AvtoTor (Russia, General Motors SKD)
|
262
|
+
XW8: Volkswagen Group Russia
|
263
|
+
XWB: UZ-Daewoo (Uzbekistan)
|
264
|
+
XWE: AvtoTor (Russia, Hyundai-Kia SKD)
|
265
|
+
X1M: PAZ (Russia)
|
266
|
+
X4X: AvtoTor (Russia, BMW SKD)
|
267
|
+
X7L: Renault AvtoFramos (Russia)
|
268
|
+
X7M: Hyundai TagAZ (Russia)
|
269
|
+
YBW: Volkswagen Belgium
|
270
|
+
YB1: Volvo Trucks Belgium
|
271
|
+
YCM: Mazda Belgium
|
272
|
+
YE2: Van Hool (buses)
|
273
|
+
YH2: BRP Finland (Lynx snowmobiles)
|
274
|
+
YK1: Saab-Valmet Finland
|
275
|
+
YS2: Scania AB
|
276
|
+
YS3: Saab
|
277
|
+
YS4: Scania Bus
|
278
|
+
YTN: Saab NEVS
|
279
|
+
YT9/007: Koenigsegg
|
280
|
+
YT9/034: Carvia
|
281
|
+
YU7: Husaberg (motorcycles)
|
282
|
+
YV1: Volvo Cars
|
283
|
+
YV4: Volvo Cars
|
284
|
+
YV2: Volvo Trucks
|
285
|
+
YV3: Volvo Buses
|
286
|
+
Y3M: MAZ (Belarus)
|
287
|
+
Y6D: Zaporozhets/AvtoZAZ (Ukraine)
|
288
|
+
ZAA: Autobianchi
|
289
|
+
ZAM: Maserati
|
290
|
+
ZAP: Piaggio/Vespa/Gilera
|
291
|
+
ZAR: Alfa Romeo
|
292
|
+
ZBN: Benelli
|
293
|
+
ZCG: Cagiva SpA / MV Agusta
|
294
|
+
ZCF: Iveco
|
295
|
+
ZDM: Ducati Motor Holdings SpA
|
296
|
+
ZDF: Ferrari Dino
|
297
|
+
ZD0: Yamaha Italy
|
298
|
+
ZD3: Beta Motor
|
299
|
+
ZD4: Aprilia
|
300
|
+
ZFA: Fiat
|
301
|
+
ZFC: Fiat V.I.
|
302
|
+
ZFF: Ferrari
|
303
|
+
ZGU: Moto Guzzi
|
304
|
+
ZHW: Lamborghini
|
305
|
+
ZJM: Malaguti
|
306
|
+
ZJN: Innocenti
|
307
|
+
ZKH: Husqvarna Motorcycles Italy
|
308
|
+
ZLA: Lancia
|
309
|
+
ZOM: OM
|
310
|
+
Z8M: Marussia (Russia)
|
311
|
+
1B3: Dodge
|
312
|
+
1C3: Chrysler
|
313
|
+
1C6: Chrysler
|
314
|
+
1D3: Dodge
|
315
|
+
1FA: Ford Motor Company
|
316
|
+
1FB: Ford Motor Company
|
317
|
+
1FC: Ford Motor Company
|
318
|
+
1FD: Ford Motor Company
|
319
|
+
1FM: Ford Motor Company
|
320
|
+
1FT: Ford Motor Company
|
321
|
+
1FU: Freightliner
|
322
|
+
1FV: Freightliner
|
323
|
+
1F9: FWD Corp.
|
324
|
+
1G: General Motors USA
|
325
|
+
1GC: Chevrolet Truck USA
|
326
|
+
1GT: GMC Truck USA
|
327
|
+
1G1: Chevrolet USA
|
328
|
+
1G2: Pontiac USA
|
329
|
+
1G3: Oldsmobile USA
|
330
|
+
1G4: Buick USA
|
331
|
+
1G6: Cadillac USA
|
332
|
+
1G8: Saturn USA
|
333
|
+
1GM: Pontiac USA
|
334
|
+
1GY: Cadillac USA
|
335
|
+
1H: Honda USA
|
336
|
+
1HD: Harley-Davidson
|
337
|
+
1J4: Jeep
|
338
|
+
1L: Lincoln USA
|
339
|
+
1ME: Mercury USA
|
340
|
+
1M1: Mack Truck USA
|
341
|
+
1M2: Mack Truck USA
|
342
|
+
1M3: Mack Truck USA
|
343
|
+
1M4: Mack Truck USA
|
344
|
+
1M9: Mynatt Truck & Equipment
|
345
|
+
1N: Nissan USA
|
346
|
+
1NX: NUMMI USA
|
347
|
+
1P3: Plymouth USA
|
348
|
+
1R9: Roadrunner Hay Squeeze USA
|
349
|
+
1VW: Volkswagen USA
|
350
|
+
1XK: Kenworth USA
|
351
|
+
1XP: Peterbilt USA
|
352
|
+
1YV: Mazda USA (AutoAlliance International)
|
353
|
+
1ZV: Ford (AutoAlliance International)
|
354
|
+
2A4: Chrysler Canada
|
355
|
+
2BP: Bombardier Recreational Products
|
356
|
+
2B3: Dodge Canada
|
357
|
+
2B7: Dodge Canada
|
358
|
+
2C3: Chrysler Canada
|
359
|
+
2CN: CAMI
|
360
|
+
2D3: Dodge Canada
|
361
|
+
2FA: Ford Motor Company Canada
|
362
|
+
2FB: Ford Motor Company Canada
|
363
|
+
2FC: Ford Motor Company Canada
|
364
|
+
2FM: Ford Motor Company Canada
|
365
|
+
2FT: Ford Motor Company Canada
|
366
|
+
2FU: Freightliner
|
367
|
+
2FV: Freightliner
|
368
|
+
2FZ: Sterling
|
369
|
+
2G: General Motors Canada
|
370
|
+
2G1: Chevrolet Canada
|
371
|
+
2G2: Pontiac Canada
|
372
|
+
2G3: Oldsmobile Canada
|
373
|
+
2G4: Buick Canada
|
374
|
+
2HG: Honda Canada
|
375
|
+
2HK: Honda Canada
|
376
|
+
2HJ: Honda Canada
|
377
|
+
2HM: Hyundai Canada
|
378
|
+
2M: Mercury
|
379
|
+
2NV: Nova Bus Canada
|
380
|
+
2P3: Plymouth Canada
|
381
|
+
2T: Toyota Canada
|
382
|
+
2V4: Volkswagen Canada
|
383
|
+
2V8: Volkswagen Canada
|
384
|
+
2WK: Western Star
|
385
|
+
2WL: Western Star
|
386
|
+
2WM: Western Star
|
387
|
+
3C4: Chrysler Mexico
|
388
|
+
3D3: Dodge Mexico
|
389
|
+
3FA: Ford Motor Company Mexico
|
390
|
+
3FE: Ford Motor Company Mexico
|
391
|
+
3G: General Motors Mexico
|
392
|
+
3H: Honda Mexico
|
393
|
+
3JB: BRP Mexico (all-terrain vehicles)
|
394
|
+
3MD: Mazda Mexico
|
395
|
+
3MZ: Mazda Mexico
|
396
|
+
3N: Nissan Mexico
|
397
|
+
3P3: Plymouth Mexico
|
398
|
+
3VW: Volkswagen Mexico
|
399
|
+
4F: Mazda USA
|
400
|
+
4JG: Mercedes-Benz USA
|
401
|
+
4M: Mercury
|
402
|
+
4RK: Nova Bus USA
|
403
|
+
4S: Subaru-Isuzu Automotive
|
404
|
+
4T: Toyota
|
405
|
+
4T9: Lumen Motors
|
406
|
+
4UF: Arctic Cat Inc.
|
407
|
+
4US: BMW USA
|
408
|
+
4UZ: Frt-Thomas Bus
|
409
|
+
4V1: Volvo
|
410
|
+
4V2: Volvo
|
411
|
+
4V3: Volvo
|
412
|
+
4V4: Volvo
|
413
|
+
4V5: Volvo
|
414
|
+
4V6: Volvo
|
415
|
+
4VL: Volvo
|
416
|
+
4VM: Volvo
|
417
|
+
4VZ: Volvo
|
418
|
+
538: Zero Motorcycles (USA)
|
419
|
+
5F: Honda USA-Alabama
|
420
|
+
5L: Lincoln
|
421
|
+
5N1: Nissan USA
|
422
|
+
5NP: Hyundai USA
|
423
|
+
5T: Toyota USA - trucks
|
424
|
+
5YJ: Tesla Motors
|
425
|
+
6AB: MAN Australia
|
426
|
+
6F4: Nissan Motor Company Australia
|
427
|
+
6F5: Kenworth Australia
|
428
|
+
6FP: Ford Motor Company Australia
|
429
|
+
6G1: General Motors-Holden (post Nov 2002)
|
430
|
+
6G2: Pontiac Australia (GTO & G8)
|
431
|
+
6H8: General Motors-Holden (pre Nov 2002)
|
432
|
+
6MM: Mitsubishi Motors Australia
|
433
|
+
6T1: Toyota Motor Corporation Australia
|
434
|
+
6U9: Privately Imported car in Australia
|
435
|
+
8AD: Peugeot Argentina
|
436
|
+
8AF: Ford Motor Company Argentina
|
437
|
+
8AG: Chevrolet Argentina
|
438
|
+
8AJ: Toyota Argentina
|
439
|
+
8AK: Suzuki Argentina
|
440
|
+
8AP: Fiat Argentina
|
441
|
+
8AW: Volkswagen Argentina
|
442
|
+
8A1: Renault Argentina
|
443
|
+
8GD: Peugeot Chile
|
444
|
+
8GG: Chevrolet Chile
|
445
|
+
935: Citroën Brazil
|
446
|
+
936: Peugeot Brazil
|
447
|
+
93H: Honda Brazil
|
448
|
+
93R: Toyota Brazil
|
449
|
+
93U: Audi Brazil
|
450
|
+
93V: Audi Brazil
|
451
|
+
93X: Mitsubishi Motors Brazil
|
452
|
+
93Y: Renault Brazil
|
453
|
+
94D: Nissan Brazil
|
454
|
+
9BD: Fiat Brazil
|
455
|
+
9BF: Ford Motor Company Brazil
|
456
|
+
9BG: Chevrolet Brazil
|
457
|
+
9BM: Mercedes-Benz Brazil
|
458
|
+
9BR: Toyota Brazil
|
459
|
+
9BS: Scania Brazil
|
460
|
+
9BW: Volkswagen Brazil
|
461
|
+
9FB: Renault Colombia
|
data/lib/vindetta/generator.rb
CHANGED
data/lib/vindetta/validator.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_model"
|
2
2
|
|
3
3
|
module Vindetta
|
4
4
|
class Validator < ActiveModel::Validator
|
@@ -9,9 +9,9 @@ module Vindetta
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def validate(record)
|
12
|
-
if record.value.length != LENGTH
|
13
|
-
|
14
|
-
|
12
|
+
record.errors.add(:value, I18n.t("invalid_length")) if record.value.length != LENGTH
|
13
|
+
|
14
|
+
# TODO: Check format
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/vindetta/version.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Vindetta
|
2
|
+
class Vin
|
3
|
+
class Vds
|
4
|
+
attr_reader :value
|
5
|
+
|
6
|
+
def initialize(vin)
|
7
|
+
@vin = vin
|
8
|
+
end
|
9
|
+
|
10
|
+
def value
|
11
|
+
@vin[3..7].join("")
|
12
|
+
end
|
13
|
+
|
14
|
+
alias eql? ==
|
15
|
+
|
16
|
+
def ==(other)
|
17
|
+
self.class == other.class && value == other.value
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Vindetta
|
2
|
+
class Vin
|
3
|
+
class Vis
|
4
|
+
DATA_PATH = File.expand_path("../../data/vis.yaml", __FILE__)
|
5
|
+
|
6
|
+
attr_reader :value
|
7
|
+
|
8
|
+
def initialize(vin)
|
9
|
+
@vin = vin
|
10
|
+
end
|
11
|
+
|
12
|
+
alias eql? ==
|
13
|
+
|
14
|
+
def ==(other)
|
15
|
+
self.class == other.class && value == other.value
|
16
|
+
end
|
17
|
+
|
18
|
+
def seventh
|
19
|
+
@vin[6]
|
20
|
+
end
|
21
|
+
|
22
|
+
def value
|
23
|
+
@vin[9..16].join("")
|
24
|
+
end
|
25
|
+
|
26
|
+
def year
|
27
|
+
@year ||= begin
|
28
|
+
years = self.class.data.dig("year", value[0])
|
29
|
+
|
30
|
+
# TODO: Replace this w/ a constant of alpha characters and check against that
|
31
|
+
begin
|
32
|
+
Integer(seventh)
|
33
|
+
years[0]
|
34
|
+
rescue ArgumentError
|
35
|
+
years[1]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def self.data
|
43
|
+
@data ||= YAML.load_file(DATA_PATH).stringify_keys
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Vindetta
|
2
|
+
class Vin
|
3
|
+
class Wmi
|
4
|
+
DATA_PATH = File.expand_path("../../data/wmi.yaml", __FILE__)
|
5
|
+
|
6
|
+
def initialize(vin)
|
7
|
+
@vin = vin
|
8
|
+
end
|
9
|
+
|
10
|
+
def name
|
11
|
+
@name ||= self.class.data[value]
|
12
|
+
end
|
13
|
+
|
14
|
+
alias eql? ==
|
15
|
+
|
16
|
+
def value
|
17
|
+
@vin[0..2].join("")
|
18
|
+
end
|
19
|
+
|
20
|
+
def ==(other)
|
21
|
+
self.class == other.class && value == other.value
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.data
|
25
|
+
@data ||= YAML.load_file(DATA_PATH)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/vindetta/vin.rb
CHANGED
@@ -1,15 +1,72 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "active_support"
|
2
|
+
require "active_model"
|
3
3
|
|
4
4
|
module Vindetta
|
5
5
|
class Vin
|
6
|
-
attr_reader :value
|
7
6
|
include ActiveModel::Validations
|
7
|
+
include Enumerable
|
8
|
+
|
9
|
+
def each(&block)
|
10
|
+
@value.chars(&block)
|
11
|
+
end
|
12
|
+
|
13
|
+
def [](index)
|
14
|
+
each[index]
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :value
|
8
18
|
|
9
19
|
validates_with Validator
|
10
20
|
|
11
21
|
def initialize(value)
|
12
22
|
@value = value
|
13
23
|
end
|
24
|
+
|
25
|
+
alias eql? ==
|
26
|
+
|
27
|
+
def ==(other)
|
28
|
+
self.class == other.class && value == other.value
|
29
|
+
end
|
30
|
+
|
31
|
+
def check_digit
|
32
|
+
value[8]
|
33
|
+
end
|
34
|
+
|
35
|
+
def year
|
36
|
+
vis.year
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# World Manufacturer Identity
|
41
|
+
#
|
42
|
+
def wmi
|
43
|
+
@wmi ||= Wmi.new(self)
|
44
|
+
end
|
45
|
+
|
46
|
+
# #
|
47
|
+
# Vehicle Descriptor Section
|
48
|
+
#
|
49
|
+
def vds
|
50
|
+
@vds ||= Vds.new(self)
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# Vehicle Identifier Section
|
55
|
+
#
|
56
|
+
def vis
|
57
|
+
@vis ||= Vis.new(self)
|
58
|
+
end
|
59
|
+
|
60
|
+
def model_year
|
61
|
+
value[9]
|
62
|
+
end
|
63
|
+
|
64
|
+
def manufacturing_plant
|
65
|
+
value[10]
|
66
|
+
end
|
67
|
+
|
68
|
+
def serial_number
|
69
|
+
value[11..16]
|
70
|
+
end
|
14
71
|
end
|
15
72
|
end
|
data/lib/vindetta.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
1
|
+
require "vindetta/cli"
|
2
|
+
require "vindetta/errors"
|
3
|
+
require "vindetta/generator"
|
4
|
+
require "vindetta/transliterator"
|
5
|
+
require "vindetta/validator"
|
6
|
+
require "vindetta/decoder"
|
7
|
+
require "vindetta/version"
|
8
|
+
require "vindetta/vin"
|
9
|
+
require "vindetta/vin/wmi"
|
10
|
+
require "vindetta/vin/vds"
|
11
|
+
require "vindetta/vin/vis"
|
8
12
|
|
9
13
|
module Vindetta
|
10
14
|
def self.generate(options = {})
|
data/vindetta.gemspec
CHANGED
@@ -1,36 +1,38 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
lib = File.expand_path(
|
3
|
+
lib = File.expand_path("../lib", __FILE__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require
|
5
|
+
require "vindetta/version"
|
6
6
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
|
-
spec.name =
|
8
|
+
spec.name = "vindetta"
|
9
9
|
spec.version = Vindetta::VERSION
|
10
|
-
spec.authors = [
|
11
|
-
spec.email = [
|
10
|
+
spec.authors = ["Kyle Decot"]
|
11
|
+
spec.email = ["kyle@joinroot.com"]
|
12
12
|
|
13
|
-
spec.summary =
|
14
|
-
spec.description =
|
15
|
-
spec.homepage =
|
16
|
-
spec.license =
|
13
|
+
spec.summary = "Ruby gem for generating VINs"
|
14
|
+
spec.description = "Ruby gem for generating VINs"
|
15
|
+
spec.homepage = "https://github.com/kyledecot/vindetta"
|
16
|
+
spec.license = "MIT"
|
17
17
|
|
18
18
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
19
|
f.match(%r{^(test|spec|features)/})
|
20
20
|
end
|
21
|
-
spec.bindir =
|
21
|
+
spec.bindir = "exe"
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
|
-
spec.require_paths = [
|
23
|
+
spec.require_paths = ["lib"]
|
24
24
|
|
25
|
-
spec.add_dependency
|
26
|
-
spec.add_dependency
|
27
|
-
spec.add_dependency
|
25
|
+
spec.add_dependency "activemodel", "~> 5.1"
|
26
|
+
spec.add_dependency "activesupport", "~> 5.1"
|
27
|
+
spec.add_dependency "gli", "~> 2.16"
|
28
|
+
spec.add_dependency "i18n", "~> 0.8.6"
|
28
29
|
|
29
|
-
spec.add_development_dependency
|
30
|
-
spec.add_development_dependency
|
31
|
-
spec.add_development_dependency
|
32
|
-
spec.add_development_dependency
|
33
|
-
spec.add_development_dependency
|
34
|
-
spec.add_development_dependency
|
35
|
-
spec.add_development_dependency
|
30
|
+
spec.add_development_dependency "bundler", "~> 1.14"
|
31
|
+
spec.add_development_dependency "factory_girl", "~> 4.8.0"
|
32
|
+
spec.add_development_dependency "guard-rspec", "~> 4.7.3"
|
33
|
+
spec.add_development_dependency "pry", "~> 0.10"
|
34
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
35
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
36
|
+
spec.add_development_dependency "rubocop", "~> 0.49"
|
37
|
+
spec.add_development_dependency "webmock", "~> 3.0.1"
|
36
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vindetta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kyle Decot
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.16'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: i18n
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.8.6
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.8.6
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,19 +95,19 @@ dependencies:
|
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: 4.8.0
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name: guard
|
98
|
+
name: guard-rspec
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
103
|
+
version: 4.7.3
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
110
|
+
version: 4.7.3
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: pry
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,6 +164,20 @@ dependencies:
|
|
150
164
|
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: '0.49'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: webmock
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 3.0.1
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 3.0.1
|
153
181
|
description: Ruby gem for generating VINs
|
154
182
|
email:
|
155
183
|
- kyle@joinroot.com
|
@@ -172,12 +200,19 @@ files:
|
|
172
200
|
- exe/vindetta
|
173
201
|
- lib/vindetta.rb
|
174
202
|
- lib/vindetta/cli.rb
|
203
|
+
- lib/vindetta/data/vis.yaml
|
204
|
+
- lib/vindetta/data/wmi.yaml
|
205
|
+
- lib/vindetta/decoder.rb
|
175
206
|
- lib/vindetta/errors.rb
|
176
207
|
- lib/vindetta/generator.rb
|
208
|
+
- lib/vindetta/locale/en.yml
|
177
209
|
- lib/vindetta/transliterator.rb
|
178
210
|
- lib/vindetta/validator.rb
|
179
211
|
- lib/vindetta/version.rb
|
180
212
|
- lib/vindetta/vin.rb
|
213
|
+
- lib/vindetta/vin/vds.rb
|
214
|
+
- lib/vindetta/vin/vis.rb
|
215
|
+
- lib/vindetta/vin/wmi.rb
|
181
216
|
- vindetta.gemspec
|
182
217
|
homepage: https://github.com/kyledecot/vindetta
|
183
218
|
licenses:
|