nhtsa_vin 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 229a1d9a1796b76010ca429bfbb4bb8c81231f84
4
+ data.tar.gz: fa8190298f3a7c40c60c37cb56888f9423c18cb3
5
+ SHA512:
6
+ metadata.gz: 0d44d9bb2df77c7abc880d378a48e72700a8b75546ed454dee0bc06d17e35f2022459530ecca71ba46694a1bfcdb909ec230030e9da27623804c17ca64b38ac3
7
+ data.tar.gz: 852880cac552c1fa041811fd15caea7a495bb5cdd0fc38826247b99a375cbd58c1bc7283d84609c7213bca6b251905b6d04e386402dbd80a8e6971e0e80f49e4
@@ -0,0 +1,6 @@
1
+ .DS_Store
2
+ pkg/*
3
+ rdoc/*
4
+ *.gem
5
+ .bundle
6
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format documentation
File without changes
@@ -0,0 +1,9 @@
1
+ ## Contributing
2
+
3
+ 1. Fork the nhtsa_vin project
4
+ 2. Create your feature branch (`git checkout -b my-new-awesome-feature`)
5
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
6
+ 4. Push to the branch (`git push origin my-new-feature`)
7
+ 5. Create new Pull Request
8
+
9
+ All incoming PRs are expected to be well documented, and have supporting tests.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 Deliv
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,44 @@
1
+ # NHTSA Vin
2
+ ----
3
+
4
+ A ruby gem for fetching and parsing vehicle identification via the vehicle identification number (VIN) from the [NHTSA webservice](https://vpic.nhtsa.dot.gov/api/Home). Note, this gem is not officially affiliated with the NHTSA.
5
+
6
+ Please note, this gem is currently in early development.
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'nhsta_vin'
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ gem install nhsta_vin
23
+
24
+ ## Usage
25
+
26
+ Usage is fairly simple. Provide a VIN, and the gem will return a struct of vehicle data.
27
+
28
+ ```ruby
29
+ query = NhtsaVin.get('1J4BA5H11AL143811')
30
+ query.valid? # => true
31
+ query.response # => <Struct::NhtsaResponse make="Jeep", model="Grand Cherokee", trim="Laredo/Rocky Mountain Edition", type="SUV", year="2008", size=nil, ... doors=4>
32
+ ```
33
+
34
+ In the result no match is found, the result will be `nil`, and `#valid?` will return `false`.
35
+
36
+ Vehicle Types
37
+ ----
38
+
39
+ For brievity, we're reducing the `Vehicle Type` response to an enumerated set of `["Car", "Truck", "Van", "SUV", "Minivan"]`. We're doing a rough parse of the type and body style to achieve this. It's probably not perfect.
40
+
41
+
42
+ ## License
43
+
44
+ Licensed under the MIT License.
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
@@ -0,0 +1,13 @@
1
+ require 'nhtsa_vin/version'
2
+ require 'nhtsa_vin/query'
3
+
4
+ module NhtsaVin
5
+ extend self
6
+
7
+ def get(vin, options={})
8
+ query = NhtsaVin::Query.new(vin, options)
9
+ query.get
10
+
11
+ return query
12
+ end
13
+ end
@@ -0,0 +1,96 @@
1
+ require 'net/http'
2
+ require 'json'
3
+
4
+ module NhtsaVin
5
+ class Query
6
+
7
+ NHTSA_URL = 'https://vpic.nhtsa.dot.gov/api/vehicles/decodevin/'.freeze
8
+
9
+ attr_reader :vin, :url, :response, :raw_response
10
+
11
+ def initialize(vin, options={})
12
+ @vin = vin
13
+ build_url
14
+ end
15
+
16
+ def get
17
+ @raw_response = fetch
18
+ parse(JSON.parse(@raw_response))
19
+ end
20
+
21
+ def valid?
22
+ @valid
23
+ end
24
+
25
+ def parse(json)
26
+ @data = json['Results']
27
+
28
+ # 0 - Good
29
+ # 1 - VIN decoded clean. Check Digit (9th position) does not calculate properly.
30
+ # 3 - VIN corrected, error in one position (assuming Check Digit is correct).
31
+ # 5 - VIN has errors in few positions.
32
+ # 6 - Incomplete VIN.
33
+ # 8 - No detailed data available currently.
34
+ # 11- Incorrect Model Year, decoded data may not be accurate!
35
+ @valid = (value_id_for('Error Code').to_i < 4) ? true : false
36
+ return unless valid?
37
+
38
+ make = value_for('Make').capitalize
39
+ model = value_for('Model')
40
+ trim = value_for('Trim')
41
+ year = value_for('Model Year')
42
+ style = value_for('Body Class')
43
+ type = vehicle_type(style, value_for('Vehicle Type'))
44
+ doors = value_for('Doors')&.to_i
45
+
46
+ @response = Struct::NhtsaResponse.new(@vin, make, model, trim, type, year,
47
+ style, value_for('Vehicle Type'), doors)
48
+ end
49
+
50
+ def vehicle_type(body_class, type)
51
+ return case type
52
+ when 'PASSENGER CAR'
53
+ 'Car'
54
+ when 'TRUCK'
55
+ if body_class =~ /van/i
56
+ 'Van'
57
+ else
58
+ 'Truck'
59
+ end
60
+ when 'MULTIPURPOSE PASSENGER VEHICLE (MPV)'
61
+ if body_class =~ /Sport Utility/i
62
+ 'SUV'
63
+ else
64
+ 'Minivan'
65
+ end
66
+ end
67
+ end
68
+
69
+ private
70
+
71
+ def get_row(attr_name)
72
+ @data.select { |r| r['Variable'] == attr_name }.first
73
+ end
74
+
75
+ def value_for(attr_name)
76
+ get_row(attr_name)['Value']
77
+ end
78
+
79
+ def value_id_for(attr_name)
80
+ get_row(attr_name)['ValueId']
81
+ end
82
+
83
+ def build_url
84
+ @url = "#{NHTSA_URL}#{@vin}?format=json"
85
+ end
86
+
87
+ def fetch
88
+ Net::HTTP.get(URI.parse(@url))
89
+ end
90
+
91
+ end
92
+
93
+ Struct.new('NhtsaResponse', :vin, :make, :model, :trim, :type, :year,
94
+ :body_style, :vehicle_class, :doors)
95
+ end
96
+
@@ -0,0 +1,3 @@
1
+ module NhtsaVin
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,24 @@
1
+ require File.expand_path('../lib/nhtsa_vin/version', __FILE__)
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.name = 'nhtsa_vin'
5
+ gem.version = NhtsaVin::VERSION
6
+ gem.platform = Gem::Platform::RUBY
7
+
8
+ gem.summary = 'A ruby library for accessing vin records from the NHTSA'
9
+ gem.description = IO.read(File.join(File.dirname(__FILE__), 'README.md'))
10
+ gem.homepage = 'https://github.com/deliv/nhtsa_vin'
11
+ gem.licenses = ['MIT']
12
+ gem.authors = ['Barclay Loftus']
13
+ gem.email = ['barclay@deliv.co']
14
+
15
+ gem.files = `git ls-files`.split($\)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ['lib']
19
+
20
+ gem.required_ruby_version = '>= 2.3.0'
21
+ gem.add_development_dependency 'rake'
22
+ gem.add_development_dependency 'bundler'
23
+ gem.add_development_dependency 'rspec'
24
+ end
@@ -0,0 +1,586 @@
1
+ {
2
+ "Count": 116,
3
+ "Message": "Results returned successfully",
4
+ "SearchCriteria": "VIN:tacos",
5
+ "Results": [{
6
+ "Value": "",
7
+ "ValueId": "",
8
+ "Variable": "Suggested VIN",
9
+ "VariableId": 142
10
+ }, {
11
+ "Value": "11- Incorrect Model Year, decoded data may not be accurate!",
12
+ "ValueId": "11",
13
+ "Variable": "Error Code",
14
+ "VariableId": 143
15
+ }, {
16
+ "Value": "",
17
+ "ValueId": "",
18
+ "Variable": "Possible Values",
19
+ "VariableId": 144
20
+ }, {
21
+ "Value": "",
22
+ "ValueId": "",
23
+ "Variable": "Additional Error Text",
24
+ "VariableId": 156
25
+ }, {
26
+ "Value": null,
27
+ "ValueId": null,
28
+ "Variable": "Destination Market",
29
+ "VariableId": 10
30
+ }, {
31
+ "Value": null,
32
+ "ValueId": null,
33
+ "Variable": "Make",
34
+ "VariableId": 26
35
+ }, {
36
+ "Value": null,
37
+ "ValueId": null,
38
+ "Variable": "Manufacturer Name",
39
+ "VariableId": 27
40
+ }, {
41
+ "Value": null,
42
+ "ValueId": null,
43
+ "Variable": "Model",
44
+ "VariableId": 28
45
+ }, {
46
+ "Value": null,
47
+ "ValueId": "",
48
+ "Variable": "Model Year",
49
+ "VariableId": 29
50
+ }, {
51
+ "Value": null,
52
+ "ValueId": "",
53
+ "Variable": "Plant City",
54
+ "VariableId": 31
55
+ }, {
56
+ "Value": null,
57
+ "ValueId": "",
58
+ "Variable": "Series",
59
+ "VariableId": 34
60
+ }, {
61
+ "Value": null,
62
+ "ValueId": "",
63
+ "Variable": "Trim",
64
+ "VariableId": 38
65
+ }, {
66
+ "Value": null,
67
+ "ValueId": null,
68
+ "Variable": "Vehicle Type",
69
+ "VariableId": 39
70
+ }, {
71
+ "Value": null,
72
+ "ValueId": null,
73
+ "Variable": "Plant Country",
74
+ "VariableId": 75
75
+ }, {
76
+ "Value": null,
77
+ "ValueId": "",
78
+ "Variable": "Plant Company Name",
79
+ "VariableId": 76
80
+ }, {
81
+ "Value": null,
82
+ "ValueId": "",
83
+ "Variable": "Plant State",
84
+ "VariableId": 77
85
+ }, {
86
+ "Value": null,
87
+ "ValueId": "",
88
+ "Variable": "Trim2",
89
+ "VariableId": 109
90
+ }, {
91
+ "Value": null,
92
+ "ValueId": "",
93
+ "Variable": "Series2",
94
+ "VariableId": 110
95
+ }, {
96
+ "Value": null,
97
+ "ValueId": "",
98
+ "Variable": "Note",
99
+ "VariableId": 114
100
+ }, {
101
+ "Value": null,
102
+ "ValueId": "",
103
+ "Variable": "Base Price ($)",
104
+ "VariableId": 136
105
+ }, {
106
+ "Value": null,
107
+ "ValueId": "",
108
+ "Variable": "Manufacturer Id",
109
+ "VariableId": 157
110
+ }, {
111
+ "Value": null,
112
+ "ValueId": "",
113
+ "Variable": "Cash For Clunkers",
114
+ "VariableId": 158
115
+ }, {
116
+ "Value": null,
117
+ "ValueId": null,
118
+ "Variable": "Body Class",
119
+ "VariableId": 5
120
+ }, {
121
+ "Value": null,
122
+ "ValueId": "",
123
+ "Variable": "Doors",
124
+ "VariableId": 14
125
+ }, {
126
+ "Value": null,
127
+ "ValueId": "",
128
+ "Variable": "Windows",
129
+ "VariableId": 40
130
+ }, {
131
+ "Value": null,
132
+ "ValueId": null,
133
+ "Variable": "Wheel Base Type",
134
+ "VariableId": 60
135
+ }, {
136
+ "Value": null,
137
+ "ValueId": "",
138
+ "Variable": "Track Width",
139
+ "VariableId": 159
140
+ }, {
141
+ "Value": null,
142
+ "ValueId": null,
143
+ "Variable": "Gross Vehicle Weight Rating",
144
+ "VariableId": 25
145
+ }, {
146
+ "Value": null,
147
+ "ValueId": "",
148
+ "Variable": "Bed Length (inches)",
149
+ "VariableId": 49
150
+ }, {
151
+ "Value": null,
152
+ "ValueId": "",
153
+ "Variable": "Curb Weight (pounds)",
154
+ "VariableId": 54
155
+ }, {
156
+ "Value": null,
157
+ "ValueId": "",
158
+ "Variable": "Wheel Base (inches)",
159
+ "VariableId": 111
160
+ }, {
161
+ "Value": null,
162
+ "ValueId": "",
163
+ "Variable": "Wheel Base (inches) up to",
164
+ "VariableId": 112
165
+ }, {
166
+ "Value": null,
167
+ "ValueId": null,
168
+ "Variable": "Bed Type",
169
+ "VariableId": 3
170
+ }, {
171
+ "Value": null,
172
+ "ValueId": null,
173
+ "Variable": "Cab Type",
174
+ "VariableId": 4
175
+ }, {
176
+ "Value": null,
177
+ "ValueId": null,
178
+ "Variable": "Trailer Type Connection",
179
+ "VariableId": 116
180
+ }, {
181
+ "Value": null,
182
+ "ValueId": null,
183
+ "Variable": "Trailer Body Type",
184
+ "VariableId": 117
185
+ }, {
186
+ "Value": null,
187
+ "ValueId": "",
188
+ "Variable": "Trailer Length (feet)",
189
+ "VariableId": 118
190
+ }, {
191
+ "Value": null,
192
+ "ValueId": "",
193
+ "Variable": "Other Trailer Info",
194
+ "VariableId": 155
195
+ }, {
196
+ "Value": null,
197
+ "ValueId": "",
198
+ "Variable": "Number of Wheels",
199
+ "VariableId": 115
200
+ }, {
201
+ "Value": null,
202
+ "ValueId": "",
203
+ "Variable": "Wheel Size Front (inches)",
204
+ "VariableId": 119
205
+ }, {
206
+ "Value": null,
207
+ "ValueId": "",
208
+ "Variable": "Wheel Size Rear (inches)",
209
+ "VariableId": 120
210
+ }, {
211
+ "Value": null,
212
+ "ValueId": null,
213
+ "Variable": "Entertainment System",
214
+ "VariableId": 23
215
+ }, {
216
+ "Value": null,
217
+ "ValueId": null,
218
+ "Variable": "Steering Location",
219
+ "VariableId": 36
220
+ }, {
221
+ "Value": null,
222
+ "ValueId": "",
223
+ "Variable": "Number of Seats",
224
+ "VariableId": 33
225
+ }, {
226
+ "Value": null,
227
+ "ValueId": "",
228
+ "Variable": "Number of Seat Rows",
229
+ "VariableId": 61
230
+ }, {
231
+ "Value": null,
232
+ "ValueId": null,
233
+ "Variable": "Transmission Style",
234
+ "VariableId": 37
235
+ }, {
236
+ "Value": null,
237
+ "ValueId": "",
238
+ "Variable": "Transmission Speeds",
239
+ "VariableId": 63
240
+ }, {
241
+ "Value": null,
242
+ "ValueId": null,
243
+ "Variable": "Drive Type",
244
+ "VariableId": 15
245
+ }, {
246
+ "Value": null,
247
+ "ValueId": "",
248
+ "Variable": "Axles",
249
+ "VariableId": 41
250
+ }, {
251
+ "Value": null,
252
+ "ValueId": null,
253
+ "Variable": "Axle Configuration",
254
+ "VariableId": 145
255
+ }, {
256
+ "Value": null,
257
+ "ValueId": null,
258
+ "Variable": "Brake System Type",
259
+ "VariableId": 42
260
+ }, {
261
+ "Value": null,
262
+ "ValueId": "",
263
+ "Variable": "Brake System Description",
264
+ "VariableId": 52
265
+ }, {
266
+ "Value": null,
267
+ "ValueId": "",
268
+ "Variable": "Battery Info",
269
+ "VariableId": 1
270
+ }, {
271
+ "Value": null,
272
+ "ValueId": null,
273
+ "Variable": "Battery Type",
274
+ "VariableId": 2
275
+ }, {
276
+ "Value": null,
277
+ "ValueId": "",
278
+ "Variable": "Number of Battery Cells per Module",
279
+ "VariableId": 48
280
+ }, {
281
+ "Value": null,
282
+ "ValueId": "",
283
+ "Variable": "Battery Current (Amps)",
284
+ "VariableId": 57
285
+ }, {
286
+ "Value": null,
287
+ "ValueId": "",
288
+ "Variable": "Battery Voltage (Volts)",
289
+ "VariableId": 58
290
+ }, {
291
+ "Value": null,
292
+ "ValueId": "",
293
+ "Variable": "Battery Energy (KWh)",
294
+ "VariableId": 59
295
+ }, {
296
+ "Value": null,
297
+ "ValueId": null,
298
+ "Variable": "EV Drive Unit",
299
+ "VariableId": 72
300
+ }, {
301
+ "Value": null,
302
+ "ValueId": "",
303
+ "Variable": "Battery Current (Amps) up to",
304
+ "VariableId": 132
305
+ }, {
306
+ "Value": null,
307
+ "ValueId": "",
308
+ "Variable": "Battery Voltage (Volts) up to",
309
+ "VariableId": 133
310
+ }, {
311
+ "Value": null,
312
+ "ValueId": "",
313
+ "Variable": "Battery Energy (KWh) up to",
314
+ "VariableId": 134
315
+ }, {
316
+ "Value": null,
317
+ "ValueId": "",
318
+ "Variable": "Number of Battery Modules per Pack",
319
+ "VariableId": 137
320
+ }, {
321
+ "Value": null,
322
+ "ValueId": "",
323
+ "Variable": "Number of Battery Packs per Vehicle",
324
+ "VariableId": 138
325
+ }, {
326
+ "Value": null,
327
+ "ValueId": null,
328
+ "Variable": "Charger Level",
329
+ "VariableId": 127
330
+ }, {
331
+ "Value": null,
332
+ "ValueId": "",
333
+ "Variable": "Charger Power (KW)",
334
+ "VariableId": 128
335
+ }, {
336
+ "Value": null,
337
+ "ValueId": "",
338
+ "Variable": "Engine Number of Cylinders",
339
+ "VariableId": 9
340
+ }, {
341
+ "Value": null,
342
+ "ValueId": "",
343
+ "Variable": "Displacement (CC)",
344
+ "VariableId": 11
345
+ }, {
346
+ "Value": null,
347
+ "ValueId": "",
348
+ "Variable": "Displacement (CI)",
349
+ "VariableId": 12
350
+ }, {
351
+ "Value": null,
352
+ "ValueId": "",
353
+ "Variable": "Displacement (L)",
354
+ "VariableId": 13
355
+ }, {
356
+ "Value": null,
357
+ "ValueId": "",
358
+ "Variable": "Engine Stroke Cycles",
359
+ "VariableId": 17
360
+ }, {
361
+ "Value": null,
362
+ "ValueId": "",
363
+ "Variable": "Engine Model",
364
+ "VariableId": 18
365
+ }, {
366
+ "Value": null,
367
+ "ValueId": "",
368
+ "Variable": "Engine Power (KW)",
369
+ "VariableId": 21
370
+ }, {
371
+ "Value": null,
372
+ "ValueId": null,
373
+ "Variable": "Fuel Type - Primary",
374
+ "VariableId": 24
375
+ }, {
376
+ "Value": null,
377
+ "ValueId": null,
378
+ "Variable": "Valve Train Design",
379
+ "VariableId": 62
380
+ }, {
381
+ "Value": null,
382
+ "ValueId": null,
383
+ "Variable": "Engine Configuration",
384
+ "VariableId": 64
385
+ }, {
386
+ "Value": null,
387
+ "ValueId": null,
388
+ "Variable": "Fuel Type - Secondary",
389
+ "VariableId": 66
390
+ }, {
391
+ "Value": null,
392
+ "ValueId": null,
393
+ "Variable": "Fuel Delivery \/ Fuel Injection Type",
394
+ "VariableId": 67
395
+ }, {
396
+ "Value": null,
397
+ "ValueId": "",
398
+ "Variable": "Engine Brake (hp)",
399
+ "VariableId": 71
400
+ }, {
401
+ "Value": null,
402
+ "ValueId": null,
403
+ "Variable": "Cooling Type",
404
+ "VariableId": 122
405
+ }, {
406
+ "Value": null,
407
+ "ValueId": "",
408
+ "Variable": "Engine Brake (hp) up to",
409
+ "VariableId": 125
410
+ }, {
411
+ "Value": null,
412
+ "ValueId": null,
413
+ "Variable": "Electrification Level",
414
+ "VariableId": 126
415
+ }, {
416
+ "Value": null,
417
+ "ValueId": "",
418
+ "Variable": "Other Engine Info",
419
+ "VariableId": 129
420
+ }, {
421
+ "Value": null,
422
+ "ValueId": null,
423
+ "Variable": "Turbo",
424
+ "VariableId": 135
425
+ }, {
426
+ "Value": null,
427
+ "ValueId": "",
428
+ "Variable": "Top Speed (MPH)",
429
+ "VariableId": 139
430
+ }, {
431
+ "Value": null,
432
+ "ValueId": "",
433
+ "Variable": "Engine Manufacturer",
434
+ "VariableId": 146
435
+ }, {
436
+ "Value": null,
437
+ "ValueId": null,
438
+ "Variable": "Pretensioner",
439
+ "VariableId": 78
440
+ }, {
441
+ "Value": null,
442
+ "ValueId": null,
443
+ "Variable": "Seat Belts Type",
444
+ "VariableId": 79
445
+ }, {
446
+ "Value": null,
447
+ "ValueId": "",
448
+ "Variable": "Other Restraint System Info",
449
+ "VariableId": 121
450
+ }, {
451
+ "Value": null,
452
+ "ValueId": null,
453
+ "Variable": "Curtain Air Bag Locations",
454
+ "VariableId": 55
455
+ }, {
456
+ "Value": null,
457
+ "ValueId": null,
458
+ "Variable": "Seat Cushion Air Bag Locations",
459
+ "VariableId": 56
460
+ }, {
461
+ "Value": null,
462
+ "ValueId": null,
463
+ "Variable": "Front Air Bag Locations",
464
+ "VariableId": 65
465
+ }, {
466
+ "Value": null,
467
+ "ValueId": null,
468
+ "Variable": "Knee Air Bag Locations",
469
+ "VariableId": 69
470
+ }, {
471
+ "Value": null,
472
+ "ValueId": null,
473
+ "Variable": "Side Air Bag Locations",
474
+ "VariableId": 107
475
+ }, {
476
+ "Value": null,
477
+ "ValueId": null,
478
+ "Variable": "Driver Assist",
479
+ "VariableId": 16
480
+ }, {
481
+ "Value": null,
482
+ "ValueId": null,
483
+ "Variable": "Adaptive Cruise Control",
484
+ "VariableId": 81
485
+ }, {
486
+ "Value": null,
487
+ "ValueId": null,
488
+ "Variable": "Adaptive Headlights",
489
+ "VariableId": 82
490
+ }, {
491
+ "Value": null,
492
+ "ValueId": null,
493
+ "Variable": "Anti-lock Braking System (ABS)",
494
+ "VariableId": 86
495
+ }, {
496
+ "Value": null,
497
+ "ValueId": null,
498
+ "Variable": "Auto Brake \/ Auto Emergency Braking",
499
+ "VariableId": 87
500
+ }, {
501
+ "Value": null,
502
+ "ValueId": null,
503
+ "Variable": "Blind Spot Monitoring \/ Detection",
504
+ "VariableId": 88
505
+ }, {
506
+ "Value": null,
507
+ "ValueId": null,
508
+ "Variable": "Electronic Stability Control (ESC)",
509
+ "VariableId": 99
510
+ }, {
511
+ "Value": null,
512
+ "ValueId": null,
513
+ "Variable": "Traction Control",
514
+ "VariableId": 100
515
+ }, {
516
+ "Value": null,
517
+ "ValueId": null,
518
+ "Variable": "Forward Collision Warning",
519
+ "VariableId": 101
520
+ }, {
521
+ "Value": null,
522
+ "ValueId": null,
523
+ "Variable": "Lane Departure Warning",
524
+ "VariableId": 102
525
+ }, {
526
+ "Value": null,
527
+ "ValueId": null,
528
+ "Variable": "Lane Keep System",
529
+ "VariableId": 103
530
+ }, {
531
+ "Value": null,
532
+ "ValueId": null,
533
+ "Variable": "Rear Visibility Camera",
534
+ "VariableId": 104
535
+ }, {
536
+ "Value": null,
537
+ "ValueId": null,
538
+ "Variable": "Park Assist",
539
+ "VariableId": 105
540
+ }, {
541
+ "Value": null,
542
+ "ValueId": null,
543
+ "Variable": "TPMS",
544
+ "VariableId": 168
545
+ }, {
546
+ "Value": null,
547
+ "ValueId": "",
548
+ "Variable": "Bus Length (feet)",
549
+ "VariableId": 147
550
+ }, {
551
+ "Value": null,
552
+ "ValueId": null,
553
+ "Variable": "Bus Floor Configuration Type",
554
+ "VariableId": 148
555
+ }, {
556
+ "Value": null,
557
+ "ValueId": null,
558
+ "Variable": "Bus Type",
559
+ "VariableId": 149
560
+ }, {
561
+ "Value": null,
562
+ "ValueId": "",
563
+ "Variable": "Other Bus Info",
564
+ "VariableId": 150
565
+ }, {
566
+ "Value": null,
567
+ "ValueId": null,
568
+ "Variable": "Custom Motorcycle Type",
569
+ "VariableId": 151
570
+ }, {
571
+ "Value": null,
572
+ "ValueId": null,
573
+ "Variable": "Motorcycle Suspension Type",
574
+ "VariableId": 152
575
+ }, {
576
+ "Value": null,
577
+ "ValueId": null,
578
+ "Variable": "Motorcycle Chassis Type",
579
+ "VariableId": 153
580
+ }, {
581
+ "Value": null,
582
+ "ValueId": "",
583
+ "Variable": "Other Motorcycle Info",
584
+ "VariableId": 154
585
+ }]
586
+ }