vindsl 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vindsl/alphabet.rb +7 -3
- data/lib/vindsl/dsl.rb +28 -0
- data/lib/vindsl/version.rb +1 -1
- data/lib/vindsl/vin.rb +1 -1
- data/lib/vindsl/wmi.rb +518 -162
- data/spec/dsl_spec.rb +23 -0
- data/spec/vin_spec.rb +17 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cc312880a05dd0cdfd8a5402dfe5dc303b2fe28
|
4
|
+
data.tar.gz: 55e899decae068421aae38eaa5b8c0977c36edaf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a04cbd00686bd821517240d2ff744508903551888837d70ab3af76b917abb99d017a85fec699519b61162fab658f48a1574292e61b4cf095c1a97dde0caa80c2
|
7
|
+
data.tar.gz: 477c2edcc57f5f30e48798fa5f57266cd0848b4efed1927b770ee1cd97a7a51726adc2f41f58ca759e6cbff7ca4b33dc599ea6fd0f1d226661c5ffd3eb3be3b6
|
data/lib/vindsl/alphabet.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
module Vindsl
|
2
2
|
module Alphabet
|
3
|
-
ALPHABET = %w{A B C D E F G H J K L M N P R S T V W X Y }
|
3
|
+
ALPHABET = %w{A B C D E F G H J K L M N P R S T V W X Y Z}
|
4
4
|
|
5
|
-
|
5
|
+
NUMBERS = %w{0 1 2 3 4 5 6 7 8 9}
|
6
|
+
|
7
|
+
ALPHABET_WITH_NUMBERS = ALPHABET + NUMBERS
|
8
|
+
|
9
|
+
ALPHABET_FOR_YEARS = %w{A B C D E F G H J K L M N P R S T V W X Y 1 2 3 4 5 6 7 8 9 }
|
6
10
|
end
|
7
|
-
end
|
11
|
+
end
|
data/lib/vindsl/dsl.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'vindsl/alphabet'
|
2
|
+
require 'vindsl/wmi'
|
3
|
+
|
4
|
+
module Vindsl
|
5
|
+
class DSL
|
6
|
+
attr_accessor :country, :manufacturer, :model_year
|
7
|
+
def initialize
|
8
|
+
yield self
|
9
|
+
end
|
10
|
+
|
11
|
+
def regexp
|
12
|
+
Regexp.new "^#{ wmi_regexp }[#{Alphabet::ALPHABET_WITH_NUMBERS.join}]{14}$"
|
13
|
+
end
|
14
|
+
|
15
|
+
def wmi_regexp
|
16
|
+
country_prefixes = WMI.country_prefixes_for country
|
17
|
+
manufacturer_prefixes = WMI.manufacturer_prefixes_for manufacturer
|
18
|
+
prefix_pairs = country_prefixes.product manufacturer_prefixes
|
19
|
+
ok_prefixes = prefix_pairs.select { |(c, m)| Regexp.new(c).match m}
|
20
|
+
chunks = ok_prefixes.map do |(_c, pfx)|
|
21
|
+
need_dots = 3 - pfx.length
|
22
|
+
pfx + ('.' * need_dots)
|
23
|
+
end
|
24
|
+
|
25
|
+
"(#{chunks.join '|'})"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/vindsl/version.rb
CHANGED
data/lib/vindsl/vin.rb
CHANGED
data/lib/vindsl/wmi.rb
CHANGED
@@ -4,170 +4,526 @@ require 'vindsl/prefix_matcher'
|
|
4
4
|
module Vindsl
|
5
5
|
# World Manufacturer Number
|
6
6
|
module WMI
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
7
|
+
COUNTRIES = {
|
8
|
+
'A' => 'South Africa',
|
9
|
+
'CL9' => 'Tunisia',
|
10
|
+
'J' => 'Japan',
|
11
|
+
'K' => 'South Korea',
|
12
|
+
'SA' => 'United Kingdom',
|
13
|
+
'SCC' => 'United Kingdom',
|
14
|
+
'SCE' => 'Ireland',
|
15
|
+
'TM' => 'Czech Republic',
|
16
|
+
'TR' => 'Hungary',
|
17
|
+
'U' => 'Romania',
|
18
|
+
'VA' => 'Austria',
|
19
|
+
'VF' => 'France',
|
20
|
+
'VS' => 'Spain',
|
21
|
+
'VV' => 'Spain',
|
22
|
+
'W' => 'Germany',
|
23
|
+
'YK' => 'Finland',
|
24
|
+
'YS3' => 'Sweden',
|
25
|
+
'YTN' => 'Sweden',
|
26
|
+
'YV1' => 'Sweden',
|
27
|
+
'Z' => 'Italy',
|
28
|
+
'1' => 'United States',
|
29
|
+
'2' => 'Canada',
|
30
|
+
'3' => 'Mexico',
|
31
|
+
'4' => 'United States',
|
32
|
+
'5' => 'United States',
|
33
|
+
'6' => 'Australia',
|
34
|
+
'8' => 'Argentina',
|
35
|
+
'9' => 'Brazil',
|
36
|
+
}
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
38
|
+
MANUFACTURERS = {
|
39
|
+
'10T' => 'Oshkosh',
|
40
|
+
'11V' => 'Ottawa',
|
41
|
+
'137' => 'AM General, Hummer',
|
42
|
+
'15G' => 'Gillig',
|
43
|
+
'17N' => 'John Deere',
|
44
|
+
'18X' => 'WRV',
|
45
|
+
'19U' => 'Acura',
|
46
|
+
'1A4' => 'Chrysler',
|
47
|
+
'1A8' => 'Chrysler',
|
48
|
+
'1AC' => 'AMC',
|
49
|
+
'1AM' => 'AMC',
|
50
|
+
'1B3' => 'Dodge',
|
51
|
+
'1B4' => 'Dodge',
|
52
|
+
'1B6' => 'Dodge',
|
53
|
+
'1B7' => 'Dodge',
|
54
|
+
'1B7' => 'Dodge',
|
55
|
+
'1BA' => 'Blue Bird',
|
56
|
+
'1BB' => 'Blue Bird',
|
57
|
+
'1BD' => 'Blue Bird',
|
58
|
+
'1C3' => 'Chrysler',
|
59
|
+
'1C4' => 'Chrysler',
|
60
|
+
'1C8' => 'Chrysler',
|
61
|
+
'1C9' => 'Chance',
|
62
|
+
'1CY' => 'Crane Carrier',
|
63
|
+
'1D3' => 'Dodge',
|
64
|
+
'1D4' => 'Dodge',
|
65
|
+
'1D5' => 'Dodge',
|
66
|
+
'1D7' => 'Dodge',
|
67
|
+
'1D8' => 'Dodge',
|
68
|
+
'1EC' => 'Fleetwood',
|
69
|
+
'1F1' => 'Ford',
|
70
|
+
'1F6' => 'Ford',
|
71
|
+
'1FA' => 'Ford',
|
72
|
+
'1FB' => 'Ford',
|
73
|
+
'1FC' => 'Ford',
|
74
|
+
'1FD' => 'Ford',
|
75
|
+
'1FE' => 'Ford',
|
76
|
+
'1FM' => 'Ford',
|
77
|
+
'1FT' => 'Ford',
|
78
|
+
'1FU' => 'Freightliner',
|
79
|
+
'1FV' => 'Freightliner',
|
80
|
+
'1G1' => 'Chevrolet',
|
81
|
+
'1G2' => 'Pontiac',
|
82
|
+
'1G3' => 'Oldsmobile',
|
83
|
+
'1G4' => 'Buick',
|
84
|
+
'1G5' => 'GMC, Pontiac',
|
85
|
+
'1G6' => 'Cadillac',
|
86
|
+
'1G8' => 'Chevrolet, Saturn',
|
87
|
+
'1GA' => 'Chevrolet',
|
88
|
+
'1GB' => 'Chevrolet',
|
89
|
+
'1GC' => 'Chevrolet',
|
90
|
+
'1GD' => 'GMC',
|
91
|
+
'1GE' => 'Cadillac',
|
92
|
+
'1GF' => 'Flexible',
|
93
|
+
'1GG' => 'Isuzu',
|
94
|
+
'1GH' => 'GMC, Oldsmobile',
|
95
|
+
'1GJ' => 'GMC',
|
96
|
+
'1GK' => 'GMC',
|
97
|
+
'1GM' => 'Pontiac',
|
98
|
+
'1GN' => 'Chevrolet',
|
99
|
+
'1GT' => 'GMC',
|
100
|
+
'1GY' => 'Cadillac',
|
101
|
+
'1HG' => 'Honda',
|
102
|
+
'1HS' => 'International',
|
103
|
+
'1HT' => 'International',
|
104
|
+
'1HV' => 'International',
|
105
|
+
'1J4' => 'Jeep',
|
106
|
+
'1J7' => 'Jeep',
|
107
|
+
'1J8' => 'Jeep',
|
108
|
+
'1JC' => 'AMC, Jeep',
|
109
|
+
'1JD' => 'AMC',
|
110
|
+
'1JT' => 'AMC, Jeep',
|
111
|
+
'1L1' => 'Lincoln',
|
112
|
+
'1LN' => 'Lincoln',
|
113
|
+
'1M1' => 'Mack',
|
114
|
+
'1M2' => 'Mack',
|
115
|
+
'1M3' => 'Mack',
|
116
|
+
'1M8' => 'MCI',
|
117
|
+
'1ME' => 'Mercury',
|
118
|
+
'1MR' => 'Lincoln',
|
119
|
+
'1N4' => 'Nissan',
|
120
|
+
'1N6' => 'Datsun, Nissan',
|
121
|
+
'1N9' => 'Neoplan',
|
122
|
+
'1NK' => 'Kenworth',
|
123
|
+
'1NP' => 'Peterbilt',
|
124
|
+
'1NX' => 'Toyota',
|
125
|
+
'1P3' => 'Plymouth',
|
126
|
+
'1P4' => 'Plymouth',
|
127
|
+
'1P7' => 'Plymouth',
|
128
|
+
'1P9' => 'Panoz',
|
129
|
+
'1RF' => 'Roadmaster',
|
130
|
+
'1S9' => 'Saleen',
|
131
|
+
'177' => 'Thomas',
|
132
|
+
'1T8' => 'Thomas',
|
133
|
+
'1TU' => 'TMC',
|
134
|
+
'1V1' => 'Volkswagen',
|
135
|
+
'1VW' => 'Volkswagen',
|
136
|
+
'1WA' => 'Autostar',
|
137
|
+
'1WB' => 'Autostar',
|
138
|
+
'1WU' => 'White Volvo',
|
139
|
+
'1WV' => 'Winnebago',
|
140
|
+
'1XK' => 'Kenworth',
|
141
|
+
'1XM' => 'AMC',
|
142
|
+
'1XP' => 'Peterbilt',
|
143
|
+
'1Y1' => 'Chevrolet, Geo',
|
144
|
+
'1YV' => 'Mazda',
|
145
|
+
'1Z3' => 'Mitsubishi',
|
146
|
+
'1Z5' => 'Mitsubishi',
|
147
|
+
'1Z7' => 'Mitsubishi',
|
148
|
+
'1ZV' => 'Ford',
|
149
|
+
'1ZW' => 'Mercury',
|
150
|
+
'2A3' => 'Chrysler',
|
151
|
+
'2A4' => 'Chrysler',
|
152
|
+
'2A8' => 'Chrysler',
|
153
|
+
'2B1' => 'Orion',
|
154
|
+
'2B3' => 'Dodge',
|
155
|
+
'2B4' => 'Dodge',
|
156
|
+
'2B5' => 'Dodge',
|
157
|
+
'2B6' => 'Dodge',
|
158
|
+
'2B7' => 'Dodge',
|
159
|
+
'2B8' => 'Dodge',
|
160
|
+
'2BC' => 'AMC, Jeep',
|
161
|
+
'2C1' => 'Chevrolet, Geo',
|
162
|
+
'2C3' => 'Chrysler',
|
163
|
+
'2C4' => 'Chrysler',
|
164
|
+
'2C7' => 'Pontiac',
|
165
|
+
'2C8' => 'Chrysler',
|
166
|
+
'2CC' => 'AMC, Eagle',
|
167
|
+
'2CK' => 'Geo, Pontiac',
|
168
|
+
'2CM' => 'AMC',
|
169
|
+
'2CN' => 'Chevrolet, Geo',
|
170
|
+
'2D4' => 'Dodge',
|
171
|
+
'2D6' => 'Dodge',
|
172
|
+
'2D7' => 'Dodge',
|
173
|
+
'2D8' => 'Dodge',
|
174
|
+
'2E3' => 'Eagle',
|
175
|
+
'2FA' => 'Ford',
|
176
|
+
'2FD' => 'Ford',
|
177
|
+
'2FM' => 'Ford',
|
178
|
+
'2FT' => 'Ford',
|
179
|
+
'2FU' => 'Freightliner',
|
180
|
+
'2FV' => 'Freightliner',
|
181
|
+
'2FW' => 'Sterling',
|
182
|
+
'2FZ' => 'Sterling',
|
183
|
+
'2G0' => 'GMC',
|
184
|
+
'2G1' => 'Chevrolet',
|
185
|
+
'2G2' => 'Pontiac',
|
186
|
+
'2G3' => 'Oldsmobile',
|
187
|
+
'2G4' => 'BuickX',
|
188
|
+
'2G5' => 'GMC',
|
189
|
+
'2G7' => 'Pontiac',
|
190
|
+
'2G8' => 'Chevrolet',
|
191
|
+
'2GA' => 'Chevrolet',
|
192
|
+
'2GB' => 'Chevrolet',
|
193
|
+
'2GD' => 'GMC',
|
194
|
+
'2GJ' => 'GMC',
|
195
|
+
'2GK' => 'GMC',
|
196
|
+
'2GN' => 'Chevrolet',
|
197
|
+
'2GT' => 'GMC',
|
198
|
+
'2HG' => 'Honda',
|
199
|
+
'2HH' => 'Acura',
|
200
|
+
'2HJ' => 'Honda',
|
201
|
+
'2HK' => 'Honda',
|
202
|
+
'2HM' => 'Hyundai',
|
203
|
+
'2HN' => 'Acura',
|
204
|
+
'2HS' => 'International',
|
205
|
+
'2HT' => 'International',
|
206
|
+
'2J4' => 'Jeep',
|
207
|
+
'2LM' => 'Lincoln',
|
208
|
+
'2M2' => 'Mack',
|
209
|
+
'2ME' => 'Mercury',
|
210
|
+
'2MH' => 'Mercury',
|
211
|
+
'2MR' => 'Mercury',
|
212
|
+
'2NK' => 'Kenworth',
|
213
|
+
'2NP' => 'Peterbilt',
|
214
|
+
'2P3' => 'Plymouth',
|
215
|
+
'2P4' => 'Plymouth',
|
216
|
+
'2P5' => 'Plymouth',
|
217
|
+
'2P9' => 'Prevost',
|
218
|
+
'2PC' => 'Prevost',
|
219
|
+
'2S2' => 'Suzuki',
|
220
|
+
'2S3' => 'Suzuki',
|
221
|
+
'2T1' => 'Toyota',
|
222
|
+
'2T2' => 'Lexus',
|
223
|
+
'2WK' => 'Western Star Trucks',
|
224
|
+
'2WL' => 'Western Star Trucks',
|
225
|
+
'2XK' => 'Kenworth',
|
226
|
+
'2XM' => 'Eagle',
|
227
|
+
'2XP' => 'Peterbilt',
|
228
|
+
'3A4' => 'Chrysler',
|
229
|
+
'3A8' => 'Chrysler',
|
230
|
+
'3AB' => 'Dina',
|
231
|
+
'3AL' => 'Freightliner',
|
232
|
+
'3B3' => 'Dodge',
|
233
|
+
'3B4' => 'Dodge',
|
234
|
+
'3B6' => 'Dodge',
|
235
|
+
'3B7' => 'Dodge',
|
236
|
+
'3BK' => 'Kenworth',
|
237
|
+
'3BP' => 'Peterbilt',
|
238
|
+
'3C3' => 'Chrysler',
|
239
|
+
'3C4' => 'Chrysler',
|
240
|
+
'3C8' => 'Chrysler',
|
241
|
+
'3CA' => 'Chrysler',
|
242
|
+
'3D3' => 'Dodge',
|
243
|
+
'3D5' => 'Dodge',
|
244
|
+
'3D6' => 'Dodge',
|
245
|
+
'3D7' => 'Dodge',
|
246
|
+
'3FA' => 'Ford',
|
247
|
+
'3FC' => 'Ford',
|
248
|
+
'3FD' => 'Ford',
|
249
|
+
'3FE' => 'Ford, Freightliner',
|
250
|
+
'3FR' => 'Ford',
|
251
|
+
'3FT' => 'Ford',
|
252
|
+
'3G1' => 'Chevrolet',
|
253
|
+
'3G2' => 'Pontiac',
|
254
|
+
'3G4' => 'Buick',
|
255
|
+
'3G5' => 'Buick',
|
256
|
+
'3G7' => 'Pontiac',
|
257
|
+
'3GB' => 'Chevrolet',
|
258
|
+
'3GC' => 'Chevrolet',
|
259
|
+
'3GD' => 'GMC',
|
260
|
+
'3GE' => 'Chevrolet',
|
261
|
+
'3GK' => 'GMC',
|
262
|
+
'3GN' => 'Chevrolet',
|
263
|
+
'3GT' => 'GMC',
|
264
|
+
'3GY' => 'Cadillac',
|
265
|
+
'3HA' => 'International',
|
266
|
+
'3HG' => 'Honda',
|
267
|
+
'3HM' => 'Honda',
|
268
|
+
'3HS' => 'International',
|
269
|
+
'3HT' => 'International',
|
270
|
+
'3LN' => 'Lincoln',
|
271
|
+
'3MA' => 'Mercury',
|
272
|
+
'3ME' => 'Mercury',
|
273
|
+
'3N1' => 'Nissan',
|
274
|
+
'3NK' => 'Kenworth',
|
275
|
+
'3NM' => 'Peterbilt',
|
276
|
+
'3P3' => 'Plymouth',
|
277
|
+
'3TM' => 'Toyota',
|
278
|
+
'3VW' => 'Volkswagen',
|
279
|
+
'3WK' => 'Kenworth',
|
280
|
+
'45V' => 'Utilimaster',
|
281
|
+
'46G' => 'Gillig',
|
282
|
+
'49H' => 'Sterling',
|
283
|
+
'4A3' => 'Mitsubishi',
|
284
|
+
'4A4' => 'Mitsubishi',
|
285
|
+
'4B3' => 'Dodge',
|
286
|
+
'4C3' => 'Chrysler',
|
287
|
+
'4CD' => 'Oshkosh',
|
288
|
+
'4DR' => 'Genesis, International',
|
289
|
+
'4E3' => 'Eagle',
|
290
|
+
'4F2' => 'Mazda',
|
291
|
+
'4F4' => 'Mazda',
|
292
|
+
'4G1' => 'Chevrolet',
|
293
|
+
'4G2' => 'Pontiac',
|
294
|
+
'4GD' => 'GMC',
|
295
|
+
'4GT' => 'Isuzu, WhiteGMC',
|
296
|
+
'4JG' => 'Mercedes-Benz',
|
297
|
+
'4KB' => 'Chevrolet',
|
298
|
+
'4KD' => 'GMC',
|
299
|
+
'4KL' => 'Isuzu',
|
300
|
+
'4M2' => 'Mercury',
|
301
|
+
'4N1' => 'Nissan',
|
302
|
+
'4N2' => 'Nissan',
|
303
|
+
'4NU' => 'Isuzu',
|
304
|
+
'4P3' => 'Plymouth',
|
305
|
+
'4S1' => 'Isuzu',
|
306
|
+
'4S2' => 'Isuzu',
|
307
|
+
'4S3' => 'Subaru',
|
308
|
+
'4S4' => 'Subaru',
|
309
|
+
'4S6' => 'Honda',
|
310
|
+
'4S7' => 'Spartan',
|
311
|
+
'4SL' => 'Magnum',
|
312
|
+
'4T1' => 'Toyota',
|
313
|
+
'4T3' => 'Toyota',
|
314
|
+
'4TA' => 'Toyota',
|
315
|
+
'4US' => 'BMW',
|
316
|
+
'4UZ' => 'Freightliner',
|
317
|
+
'4V1' => 'Volvo, WhiteGMC',
|
318
|
+
'4V2' => 'Volvo, WhiteGMC',
|
319
|
+
'4V4' => 'Volvo, WhiteGMC',
|
320
|
+
'4V5' => 'Volvo, WhiteGMC',
|
321
|
+
'4VA' => 'Volvo',
|
322
|
+
'4VG' => 'Volvo, WhiteGMC',
|
323
|
+
'4VH' => 'Volvo',
|
324
|
+
'4VL' => 'Volvo',
|
325
|
+
'4VM' => 'Volvo',
|
326
|
+
'4VZ' => 'Spartan',
|
327
|
+
'5AS' => 'GEM',
|
328
|
+
'5B4' => 'Workhorse',
|
329
|
+
'5CK' => 'Western Star Trucks',
|
330
|
+
'5FN' => 'Honda',
|
331
|
+
'5FY' => 'New Flyer',
|
332
|
+
'5GA' => 'Buick',
|
333
|
+
'5GR' => 'Hummer',
|
334
|
+
'5GT' => 'Hummer',
|
335
|
+
'5GZ' => 'Saturn',
|
336
|
+
'5J6' => 'Honda',
|
337
|
+
'5J8' => 'Acura',
|
338
|
+
'5KJ' => 'Western Star Trucks',
|
339
|
+
'5KK' => 'Western Star Trucks',
|
340
|
+
'5LM' => 'Lincoln',
|
341
|
+
'5LT' => 'Lincoln',
|
342
|
+
'5N1' => 'Nissan',
|
343
|
+
'5N3' => 'Infiniti',
|
344
|
+
'5NM' => 'Hyundai',
|
345
|
+
'5NP' => 'Hyundai',
|
346
|
+
'5PV' => 'Hino',
|
347
|
+
'5S3' => 'Saab',
|
348
|
+
'5SX' => 'Amercian LeFrance',
|
349
|
+
'5T4' => 'Workhorse',
|
350
|
+
'5TB' => 'Toyota',
|
351
|
+
'5TD' => 'Toyota',
|
352
|
+
'5TE' => 'Toyota',
|
353
|
+
'5TF' => 'Toyota',
|
354
|
+
'5UM' => 'BMW',
|
355
|
+
'5UX' => 'BMW',
|
356
|
+
'5Y2' => 'Pontiac',
|
357
|
+
'6G2' => 'Pontiac',
|
358
|
+
'6MM' => 'Mitsubishi',
|
359
|
+
'6MP' => 'Mercury',
|
360
|
+
'9BF' => 'Ford',
|
361
|
+
'9BW' => 'Volkswagen',
|
362
|
+
'9DW' => 'Volkswagen',
|
363
|
+
'J81' => 'Chevrolet,Geo',
|
364
|
+
'J87' => 'Isuzu',
|
365
|
+
'J8B' => 'Chevrolet',
|
366
|
+
'J8D' => 'GMC',
|
367
|
+
'J8Z' => 'Chevrolet',
|
368
|
+
'JA3' => 'Mitsubishi',
|
369
|
+
'JA4' => 'Mitsubishi',
|
370
|
+
'JA7' => 'Mitsubishi',
|
371
|
+
'JAA' => 'Isuzu',
|
372
|
+
'JAB' => 'Isuzu',
|
373
|
+
'JAC' => 'Isuzu',
|
374
|
+
'JAE' => 'Acura',
|
375
|
+
'JAL' => 'Isuzu',
|
376
|
+
'JB3' => 'Dodge',
|
377
|
+
'JB4' => 'Dodge',
|
378
|
+
'JB7' => 'Dodge',
|
379
|
+
'JC2' => 'Ford',
|
380
|
+
'JD1' => 'Daihatsu',
|
381
|
+
'JD2' => 'Daihatsu',
|
382
|
+
'JE3' => 'Eagle',
|
383
|
+
'JF1' => 'Subaru',
|
384
|
+
'JF2' => 'Subaru',
|
385
|
+
'JF3' => 'Subaru',
|
386
|
+
'JF4' => 'Saab',
|
387
|
+
'JG1' => 'Chevrolet, Geo',
|
388
|
+
'JG7' => 'Pontiac',
|
389
|
+
'JGC' => 'Geo',
|
390
|
+
'JH4' => 'Acura',
|
391
|
+
'JHB' => 'Hino',
|
392
|
+
'JHL' => 'Honda',
|
393
|
+
'JHM' => 'Honda',
|
394
|
+
'JJ3' => 'Chrysler',
|
395
|
+
'JL6' => 'Mitsubishi',
|
396
|
+
'JLS' => 'Sterling',
|
397
|
+
'JM1' => 'Mazda',
|
398
|
+
'JM2' => 'Mazda',
|
399
|
+
'JM3' => 'Mazda',
|
400
|
+
'JN1' => 'Datsun, Nissan',
|
401
|
+
'JN3' => 'Nissan',
|
402
|
+
'JN4' => 'Nissan',
|
403
|
+
'JN6' => 'Datsun, Nissan',
|
404
|
+
'JN8' => 'Nissan',
|
405
|
+
'JNA' => 'Nissan',
|
406
|
+
'JNK' => 'Infiniti',
|
407
|
+
'JNR' => 'Infiniti',
|
408
|
+
'JNX' => 'Infiniti',
|
409
|
+
'JP3' => 'Plymouth',
|
410
|
+
'JP4' => 'Plymouth',
|
411
|
+
'JP7' => 'Plymouth',
|
412
|
+
'JR2X' => 'Isuzu',
|
413
|
+
'JS2' => 'Suzuki',
|
414
|
+
'JS3' => 'Suzuki',
|
415
|
+
'JS4' => 'Suzuki',
|
416
|
+
'JT2' => 'Toyota',
|
417
|
+
'JT3' => 'Toyota',
|
418
|
+
'JT4' => 'Toyota',
|
419
|
+
'JT5' => 'Toyota',
|
420
|
+
'JT6' => 'Lexus',
|
421
|
+
'JT8' => 'Lexus',
|
422
|
+
'JTD' => 'Toyota',
|
423
|
+
'JTE' => 'Toyota',
|
424
|
+
'JTH' => 'Lexus',
|
425
|
+
'JTJ' => 'Lexus',
|
426
|
+
'JTK' => 'Scion',
|
427
|
+
'JTL' => 'Scion',
|
428
|
+
'JTM' => 'Toyota',
|
429
|
+
'JTN' => 'Toyota',
|
430
|
+
'JW6' => 'Mitsubishi',
|
431
|
+
'JW7' => 'Mitsubishi',
|
432
|
+
'KL1' => 'Chevrolet',
|
433
|
+
'KL2' => 'Pontiac',
|
434
|
+
'KL5' => 'Suzuki',
|
435
|
+
'KL7' => 'Asuna',
|
436
|
+
'KLA' => 'Daewoo',
|
437
|
+
'KM8' => 'Hyundai',
|
438
|
+
'KMF' => 'Hyundai',
|
439
|
+
'KMH' => 'Hyundai',
|
440
|
+
'KNA' => 'Kia',
|
441
|
+
'KND' => 'Hyundai, Kia',
|
442
|
+
'KNJ' => 'Ford',
|
443
|
+
'KPH' => 'Mitsubishi',
|
444
|
+
'LES' => 'Isuzu',
|
445
|
+
'LM5' => 'Isuzu',
|
446
|
+
'ML3' => 'Dodge',
|
447
|
+
'SA9' => 'Morgan',
|
448
|
+
'SAJ' => 'Jaguar',
|
449
|
+
'SAL' => 'Land Rover',
|
450
|
+
'SAT' => 'Triumph',
|
451
|
+
'SAX' => 'Sterling',
|
452
|
+
'SCA' => 'Rolls-Royce',
|
453
|
+
'SCB' => 'Bentley',
|
454
|
+
'SCC' => 'Lotus',
|
455
|
+
'SCF' => 'Aston Martin',
|
456
|
+
'SDL' => 'TVR Engineering',
|
457
|
+
'SHH' => 'Honda',
|
458
|
+
'SHS' => 'Honda',
|
459
|
+
'SJN' => 'Nissan UK',
|
460
|
+
'TRU' => 'Audi',
|
461
|
+
'VF1' => 'Renault',
|
462
|
+
'VF7' => 'Citroën',
|
463
|
+
'VF3' => 'Peugeot',
|
464
|
+
'VG6' => 'Mack',
|
465
|
+
'VSS' => 'Seat',
|
466
|
+
'W06' => 'Cadillac',
|
467
|
+
'WA1' => 'Audi',
|
468
|
+
'WAU' => 'Audi',
|
469
|
+
'WBA' => 'BMW',
|
470
|
+
'WBS' => 'BMW',
|
471
|
+
'WBX' => 'BMW',
|
472
|
+
'WD0' => 'Dodge',
|
473
|
+
'WD1' => 'Dodge',
|
474
|
+
'WD2' => 'Dodge',
|
475
|
+
'WD5' => 'Dodge',
|
476
|
+
'WD8' => 'Dodge',
|
477
|
+
'WDB' => 'Maybach, Mercedes-Benz',
|
478
|
+
'WDC' => 'Mercedes-Benz',
|
479
|
+
'WDD' => 'Mercedes-Benz',
|
480
|
+
'WDP' => 'Dodge',
|
481
|
+
'WDX' => 'Dodge',
|
482
|
+
'WDY' => 'Dodge',
|
483
|
+
'WF1' => 'Merkur',
|
484
|
+
'WKK' => 'Fahrzeugwerke',
|
485
|
+
'WME' => 'Mercedes-Benz',
|
486
|
+
'WMW' => 'Mini',
|
487
|
+
'WP0' => 'Porsche',
|
488
|
+
'WP1' => 'Porsche',
|
489
|
+
'WUA' => 'Audi',
|
490
|
+
'WV2' => 'Volkswagen',
|
491
|
+
'WV3' => 'Volkswagen',
|
492
|
+
'WVG' => 'Volkswagen',
|
493
|
+
'WVW' => 'Volkswagen',
|
494
|
+
'XTA' => 'Lada',
|
495
|
+
'YB3' => 'Volvo',
|
496
|
+
'YS3' => 'Saab',
|
497
|
+
'YV1' => 'Volvo',
|
498
|
+
'YV2' => 'Volvo',
|
499
|
+
'YV4' => 'Volvo',
|
500
|
+
'YV5' => 'Volvo',
|
501
|
+
'ZA9' => 'Lamborghini',
|
502
|
+
'ZAM' => 'Maserati',
|
503
|
+
'ZAR' => 'Alfa Romeo',
|
504
|
+
'ZC2' => 'Chrysler',
|
505
|
+
'ZFA' => 'Fiat',
|
506
|
+
'ZFF' => 'Ferrari',
|
507
|
+
'ZHWX' => 'Lamborghini',
|
508
|
+
}
|
161
509
|
|
162
|
-
|
163
|
-
|
510
|
+
COUNTRY_MATCHER = PrefixMatcher.new COUNTRIES
|
511
|
+
MANUFACTURER_MATCHER = PrefixMatcher.new MANUFACTURERS
|
164
512
|
|
165
|
-
|
166
|
-
|
167
|
-
|
513
|
+
def self.country_for(vin)
|
514
|
+
COUNTRY_MATCHER.find vin
|
515
|
+
end
|
168
516
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
517
|
+
def self.country_prefixes_for(country_name)
|
518
|
+
COUNTRIES.select{ |k, name| name == country_name }.keys
|
519
|
+
end
|
520
|
+
|
521
|
+
def self.manufacturer_for(vin)
|
522
|
+
MANUFACTURER_MATCHER.find vin
|
523
|
+
end
|
524
|
+
|
525
|
+
def self.manufacturer_prefixes_for(manufacturer_name)
|
526
|
+
MANUFACTURERS.select{ |k, name| name == manufacturer_name }.keys
|
527
|
+
end
|
528
|
+
end
|
173
529
|
end
|
data/spec/dsl_spec.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'vindsl/dsl'
|
2
|
+
|
3
|
+
describe Vindsl::DSL do
|
4
|
+
let(:scarlet){ '1ZVBP8AM7C5280000' }
|
5
|
+
let(:yellow){ 'JA3AY11A2VU000000' }
|
6
|
+
subject do
|
7
|
+
Vindsl::DSL.new do |vin|
|
8
|
+
vin.country = 'United States'
|
9
|
+
vin.manufacturer = 'Ford'
|
10
|
+
vin.model_year = 2012
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'provides a VIN regexp' do
|
15
|
+
expect(scarlet).to match subject.regexp
|
16
|
+
expect(yellow).to_not match subject.regexp
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'provides a WMI regexp' do
|
20
|
+
expect(scarlet[0..3]).to match subject.wmi_regexp
|
21
|
+
expect(yellow[0..3]).to_not match subject.wmi_regexp
|
22
|
+
end
|
23
|
+
end
|
data/spec/vin_spec.rb
CHANGED
@@ -18,4 +18,21 @@ describe Vindsl::VIN do
|
|
18
18
|
expect(subject.model_year).to eq 2012
|
19
19
|
end
|
20
20
|
end
|
21
|
+
|
22
|
+
describe "The old yellow car" do
|
23
|
+
let(:yellow){ 'JA3AY11A2VU000000' }
|
24
|
+
subject{ described_class.new yellow }
|
25
|
+
|
26
|
+
it 'looks up the correct country of origin' do
|
27
|
+
expect(subject.country).to eq 'Japan'
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'looks up the correct manufacturer' do
|
31
|
+
expect(subject.manufacturer).to eq 'Mitsubishi'
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'looks up the correct model year' do
|
35
|
+
expect(subject.model_year).to eq 1997
|
36
|
+
end
|
37
|
+
end
|
21
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vindsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryce Kerley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,10 +67,12 @@ files:
|
|
67
67
|
- Rakefile
|
68
68
|
- lib/vindsl.rb
|
69
69
|
- lib/vindsl/alphabet.rb
|
70
|
+
- lib/vindsl/dsl.rb
|
70
71
|
- lib/vindsl/prefix_matcher.rb
|
71
72
|
- lib/vindsl/version.rb
|
72
73
|
- lib/vindsl/vin.rb
|
73
74
|
- lib/vindsl/wmi.rb
|
75
|
+
- spec/dsl_spec.rb
|
74
76
|
- spec/prefix_matcher_spec.rb
|
75
77
|
- spec/spec_helper.rb
|
76
78
|
- spec/vin_spec.rb
|
@@ -100,6 +102,7 @@ signing_key:
|
|
100
102
|
specification_version: 4
|
101
103
|
summary: Vehicle Information Number gem
|
102
104
|
test_files:
|
105
|
+
- spec/dsl_spec.rb
|
103
106
|
- spec/prefix_matcher_spec.rb
|
104
107
|
- spec/spec_helper.rb
|
105
108
|
- spec/vin_spec.rb
|