vindetta 0.7.0 → 0.8.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
  SHA1:
3
- metadata.gz: f2396851ea95b9d4316fdfd6264415f569cd4031
4
- data.tar.gz: e2fafae216be76b8ff1fef39dc7d2efbfbc969f5
3
+ metadata.gz: 056cbe8322369ee845c9cd121e97d581e2f5f364
4
+ data.tar.gz: 584d4c70620eb9f855d9ff6ee65e6814a778c103
5
5
  SHA512:
6
- metadata.gz: c2cce9e236fff4b20f2a0ff138d53769acc842b2ac735b112f8fe7b91f925892f72f3287c747ae92916c0d22adcf21f5972db70106c3ab8887b70c88cd71474c
7
- data.tar.gz: ff995b0a3646ccbedc48e4c37edf824e89e1389a47ac86fafae169003f0a9ad70738d67356abd5b0608195d91352e1744def5aceda85d88c298b7be4880105f9
6
+ metadata.gz: 1136fa7046ba29e3cbf80f8aaeb5c2472cb4ff7b39c3b0d878a80f9b6bcba295890f0f9f8d87e8b241fde5456ae22367b2a2306cc46115de6f7724d63c800656
7
+ data.tar.gz: caf48c6aee89da3a836831663a5551ecba75853b3b9f60d9ba672bf39e48982bf1bd3411734d0b1d2418d8606347ec8785c7c9bdbac5cbaaf5d3ba5376902f07
data/.rspec CHANGED
@@ -1,2 +1 @@
1
- --format documentation
2
1
  --color
data/.rubocop.yml CHANGED
@@ -1,2 +1,5 @@
1
1
  Style/Documentation:
2
2
  Enabled: false
3
+
4
+ Style/StringLiterals:
5
+ EnforcedStyle: double_quotes
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  gemspec
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(erb haml slim))
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
@@ -1,5 +1,5 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'pry'
4
- require 'bundler/setup'
5
- require 'vindetta'
3
+ require "pry"
4
+ require "bundler/setup"
5
+ require "vindetta"
6
6
 
7
7
  Pry.start
data/exe/vindetta CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'vindetta'
3
+ require "vindetta"
4
4
 
5
5
  Vindetta::CLI.run(ARGV)
data/lib/vindetta/cli.rb CHANGED
@@ -1,28 +1,36 @@
1
- require 'gli'
1
+ require "gli"
2
2
 
3
3
  module Vindetta
4
4
  class CLI
5
5
  extend GLI::App
6
6
 
7
- program_desc 'Vehicle Identification Number (VIN) CLI'
7
+ program_desc "Vehicle Identification Number (VIN) CLI"
8
8
 
9
- desc 'Transliterates a VIN character'
10
- arg_name 'character'
11
- command [:transliterate, :t] do |c|
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 'Validates a VIN'
18
- command [:validate, :v] do |c|
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 'Generates a random VIN'
25
- command [:generate, :g] do |c|
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
@@ -0,0 +1,9 @@
1
+ module Vindetta
2
+ class Decoder
3
+ def self.decode(vin)
4
+ {
5
+ :year => vin.year
6
+ }
7
+ end
8
+ end
9
+ end
@@ -1,9 +1,9 @@
1
- require 'net/http'
1
+ require "net/http"
2
2
 
3
3
  module Vindetta
4
4
  class Generator
5
5
  def self.generate
6
- Net::HTTP.get('randomvin.com', '/getvin.php')
6
+ Net::HTTP.get("randomvin.com", "/getvin.php")
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1,2 @@
1
+ en:
2
+ invalid_length: "Invalid Length"
@@ -1,6 +1,6 @@
1
1
  module Vindetta
2
2
  class Transliterator
3
- MAPPING = '0123456789.ABCDEFGH..JKLMN.P.R..STUVWXYZ'.split('').freeze
3
+ MAPPING = "0123456789.ABCDEFGH..JKLMN.P.R..STUVWXYZ".split("").freeze
4
4
 
5
5
  def self.run(character)
6
6
  index = MAPPING.find_index(character)
@@ -1,4 +1,4 @@
1
- require 'active_model'
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
- record.errors.add(:value, "Invalid Length") # TODO: Move to I18n
14
- end
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
@@ -1,3 +1,3 @@
1
1
  module Vindetta
2
- VERSION = '0.7.0'.freeze
2
+ VERSION = "0.8.0".freeze
3
3
  end
@@ -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 'active_support'
2
- require 'active_model'
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 'vindetta/cli'
2
- require 'vindetta/errors'
3
- require 'vindetta/generator'
4
- require 'vindetta/transliterator'
5
- require 'vindetta/validator'
6
- require 'vindetta/version'
7
- require 'vindetta/vin'
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('../lib', __FILE__)
3
+ lib = File.expand_path("../lib", __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'vindetta/version'
5
+ require "vindetta/version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = 'vindetta'
8
+ spec.name = "vindetta"
9
9
  spec.version = Vindetta::VERSION
10
- spec.authors = ['Kyle Decot']
11
- spec.email = ['kyle@joinroot.com']
10
+ spec.authors = ["Kyle Decot"]
11
+ spec.email = ["kyle@joinroot.com"]
12
12
 
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'
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 = 'exe'
21
+ spec.bindir = "exe"
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
- spec.require_paths = ['lib']
23
+ spec.require_paths = ["lib"]
24
24
 
25
- spec.add_dependency 'activemodel', '~> 5.1'
26
- spec.add_dependency 'activesupport', '~> 5.1'
27
- spec.add_dependency 'gli', '~> 2.16'
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 'bundler', '~> 1.14'
30
- spec.add_development_dependency 'factory_girl', '~> 4.8.0'
31
- spec.add_development_dependency 'guard', '~> 2.14.1'
32
- spec.add_development_dependency 'pry', '~> 0.10'
33
- spec.add_development_dependency 'rake', '~> 10.0'
34
- spec.add_development_dependency 'rspec', '~> 3.0'
35
- spec.add_development_dependency 'rubocop', '~> 0.49'
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.7.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-09-29 00:00:00.000000000 Z
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: 2.14.1
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: 2.14.1
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: