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 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: