vin-validator 0.0.3 → 1.0.0.pre.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vin-validator.rb +1 -1
- data/lib/vin_validator/api.rb +4 -1
- data/lib/vin_validator/knowledge.rb +16 -17
- data/lib/vin_validator/maker.rb +11 -5
- data/lib/vin_validator/version.rb +1 -1
- data/lib/vin_validator/wmi.rb +19 -1
- metadata +6 -6
- /data/{makers.json → lib/vin_validator/makers.json} +0 -0
- /data/{wmis.json → lib/vin_validator/wmis.json} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09b6a9a66a5d7d95da1f899f47c76dfce32dfe3c64b0ab9da1430c111ed9f41a'
|
4
|
+
data.tar.gz: 1b6ab1b90068a41859ece6ce59a63441f519bf7fc9a0d52279a357a39c071927
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7dc4990ca5ef305e80aa301ac7e563e65873e2e96c5384768583e320bb27abfa030c3b3c6a7b09caa8ea850251f49b022a64ef7008631a237192a27b100a411
|
7
|
+
data.tar.gz: d40e46f343c2cf9fbd1ead1daa5220fabe319ff8ca4352ed7556a9d5df028a81d9e539355a47e5984637f16c81b2c0656c02745396c9a6cc4c5ffd340cca9419
|
data/lib/vin-validator.rb
CHANGED
data/lib/vin_validator/api.rb
CHANGED
@@ -14,7 +14,10 @@ module VinValidator
|
|
14
14
|
check_nhtsa = block_given? ? yield : true
|
15
15
|
return {} unless check_nhtsa
|
16
16
|
|
17
|
-
vins_to_check = [vins]
|
17
|
+
vins_to_check = [vins]
|
18
|
+
vins_to_check.flatten!
|
19
|
+
vins_to_check.compact!
|
20
|
+
vins_to_check.uniq!
|
18
21
|
|
19
22
|
api_results =
|
20
23
|
if vins_to_check.size == 1
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative './
|
3
|
+
require_relative './api'
|
4
4
|
require_relative './maker'
|
5
|
+
require_relative './result'
|
5
6
|
require_relative './wmi'
|
6
|
-
require_relative './api'
|
7
7
|
|
8
8
|
module VinValidator
|
9
9
|
class Knowledge
|
@@ -39,42 +39,42 @@ module VinValidator
|
|
39
39
|
if vin.is_a?(Array)
|
40
40
|
vin.map(&:upcase)
|
41
41
|
else
|
42
|
-
vin.upcase.
|
42
|
+
vin.upcase.chars
|
43
43
|
end
|
44
44
|
|
45
45
|
vin_errors = []
|
46
46
|
|
47
|
-
|
47
|
+
unless vin.join('').match?(/^[a-z0-9]{17}$/i)
|
48
48
|
vin_errors << 'Only numbers and letters are allowed in VINs'
|
49
49
|
end
|
50
50
|
|
51
|
-
|
52
|
-
(0..7).each do |slot|
|
53
|
-
# rubocop:enable Style/EachForSimpleLoop
|
51
|
+
8.times do |slot|
|
54
52
|
# For 1-8, can't have 'I', 'O', or 'Q'
|
55
|
-
if /[ioq]/i
|
53
|
+
if vin[slot].to_s.match?(/[ioq]/i)
|
56
54
|
vin_errors << "'I', 'O', and 'Q' are not allowed in slot #{slot + 1}."
|
57
55
|
end
|
58
56
|
end
|
59
57
|
|
60
|
-
|
58
|
+
# For 9, only 0-9 and 'X' are allowed
|
59
|
+
unless vin[8].to_s.match?(/[0-9x]/i)
|
61
60
|
vin_errors << "Only 0-9 and 'X' are allowed in slot 9."
|
62
61
|
end
|
63
62
|
|
64
|
-
|
63
|
+
# For 10, can't have 'I', 'O', 'Q', 'U', 'Z', '0'
|
64
|
+
if vin[9].to_s.match?(/[iquz0]/i)
|
65
65
|
vin_errors << "'I', 'O', 'Q', 'U', 'Z', and 0 are not allowed in slot 10."
|
66
66
|
end
|
67
67
|
|
68
68
|
(10..13).each do |slot|
|
69
69
|
# For 11-14, can't have 'I', 'O', 'Q'
|
70
|
-
if /[ioq]/i
|
70
|
+
if vin[slot].to_s.match?(/[ioq]/i)
|
71
71
|
vin_errors << "'I', 'O', or 'Q' not allowed in slot #{slot + 1}."
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
75
|
# For 15-17, only 0-9
|
76
76
|
(14..16).each do |slot|
|
77
|
-
unless /[0-9]/i
|
77
|
+
unless vin[slot].to_s.match?(/[0-9]/i)
|
78
78
|
vin_errors << "Only 0-9 allowed in slot #{slot + 1}."
|
79
79
|
end
|
80
80
|
end
|
@@ -103,7 +103,7 @@ module VinValidator
|
|
103
103
|
map = '0123456789X'
|
104
104
|
weights = '8765432X098765432'
|
105
105
|
sum = 0
|
106
|
-
|
106
|
+
17.times do |i|
|
107
107
|
value_weight = transliterate(vin[i])
|
108
108
|
return nil if value_weight.nil?
|
109
109
|
|
@@ -143,10 +143,9 @@ module VinValidator
|
|
143
143
|
reset_make ||= vin_results.dig(:make, 0).value.empty?
|
144
144
|
|
145
145
|
if reset_make
|
146
|
-
vin_results[:make] =
|
147
|
-
VinValidator::
|
148
|
-
|
149
|
-
end
|
146
|
+
vin_results[:make] = VinValidator::Wmi.where(wmi: vin.strip[0..2]).map do |wmi|
|
147
|
+
VinValidator::Result.new(vin: vin, type: :make, value: wmi.maker.name)
|
148
|
+
end
|
150
149
|
end
|
151
150
|
|
152
151
|
return vin_results
|
data/lib/vin_validator/maker.rb
CHANGED
@@ -3,19 +3,25 @@
|
|
3
3
|
module VinValidator
|
4
4
|
class Maker
|
5
5
|
class << self
|
6
|
+
# Loads all makers
|
7
|
+
#
|
8
|
+
# @return [Hash]
|
9
|
+
#
|
6
10
|
def all
|
7
11
|
return @all if defined?(@all)
|
8
12
|
|
9
|
-
@all = JSON.parse(File.read('makers.json'), { symbolize_names: true }).to_h
|
13
|
+
@all = JSON.parse(File.read(File.join(__dir__, 'makers.json')), { symbolize_names: true }).to_h do |id, v|
|
14
|
+
[id.to_s, new(**v)]
|
15
|
+
end
|
10
16
|
end
|
11
17
|
|
18
|
+
# Finds the maker with the given `id`
|
19
|
+
#
|
20
|
+
# @return [VinValidator::Maker]
|
21
|
+
#
|
12
22
|
def find(id)
|
13
23
|
all.fetch(id.to_s)
|
14
24
|
end
|
15
|
-
|
16
|
-
def where(wmi:)
|
17
|
-
|
18
|
-
end
|
19
25
|
end
|
20
26
|
|
21
27
|
# @return [Integer]
|
data/lib/vin_validator/wmi.rb
CHANGED
@@ -3,16 +3,30 @@
|
|
3
3
|
module VinValidator
|
4
4
|
class Wmi
|
5
5
|
class << self
|
6
|
+
# Loads all wmis
|
7
|
+
#
|
8
|
+
# @return [Hash]
|
9
|
+
#
|
6
10
|
def all
|
7
11
|
return @all if defined?(@all)
|
8
12
|
|
9
|
-
@all = JSON.parse(File.read('wmis.json'), { symbolize_names: true }).to_h
|
13
|
+
@all = JSON.parse(File.read(File.join(__dir__, 'wmis.json')), { symbolize_names: true }).to_h do |id, v|
|
14
|
+
[id.to_s, new(**v)]
|
15
|
+
end
|
10
16
|
end
|
11
17
|
|
18
|
+
# Finds the wmi with the given `id`
|
19
|
+
#
|
20
|
+
# @return [VinValidator::Wmi]
|
21
|
+
#
|
12
22
|
def find(id)
|
13
23
|
all.fetch(id.to_s)
|
14
24
|
end
|
15
25
|
|
26
|
+
# Finds the wmi(s) with the given `wmi`
|
27
|
+
#
|
28
|
+
# @return [Array<VinValidator::Wmi>]
|
29
|
+
#
|
16
30
|
def where(wmi:)
|
17
31
|
all.values.select { |w| w.wmi == wmi }
|
18
32
|
end
|
@@ -35,6 +49,10 @@ module VinValidator
|
|
35
49
|
@wmi_suffix = wmi_suffix
|
36
50
|
end
|
37
51
|
|
52
|
+
# Finds the corresponding maker
|
53
|
+
#
|
54
|
+
# @return [VinValidator::Maker]
|
55
|
+
#
|
38
56
|
def maker
|
39
57
|
@maker ||= VinValidator::Maker.find(maker_id)
|
40
58
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vin-validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 1.0.0.pre.rc.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brands Insurance
|
@@ -38,11 +38,11 @@ files:
|
|
38
38
|
- lib/vin_validator/api.rb
|
39
39
|
- lib/vin_validator/knowledge.rb
|
40
40
|
- lib/vin_validator/maker.rb
|
41
|
+
- lib/vin_validator/makers.json
|
41
42
|
- lib/vin_validator/result.rb
|
42
43
|
- lib/vin_validator/version.rb
|
43
44
|
- lib/vin_validator/wmi.rb
|
44
|
-
-
|
45
|
-
- wmis.json
|
45
|
+
- lib/vin_validator/wmis.json
|
46
46
|
homepage: https://github.com/BrandsInsurance/vin-validator/
|
47
47
|
licenses:
|
48
48
|
- MIT
|
@@ -59,12 +59,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
59
59
|
requirements:
|
60
60
|
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
62
|
+
version: 2.5.3
|
63
63
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- - "
|
65
|
+
- - ">"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
67
|
+
version: 1.3.1
|
68
68
|
requirements: []
|
69
69
|
rubygems_version: 3.4.10
|
70
70
|
signing_key:
|
File without changes
|
File without changes
|