vindetta 0.24.0 → 0.25.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 +4 -4
- data/lib/vindetta.rb +1 -7
- data/lib/vindetta/cli.rb +13 -4
- data/lib/vindetta/decoder.rb +7 -3
- data/lib/vindetta/generator.rb +17 -10
- data/lib/vindetta/standard.rb +6 -0
- data/lib/vindetta/standard/iso3779.rb +65 -0
- data/lib/vindetta/validator.rb +15 -9
- data/lib/vindetta/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3dbbe61deb1b5f0e99e9008cf72c6245fd4dbd0c
|
4
|
+
data.tar.gz: fcd8b4049b037d0f9b6d3014982ebe5f6be94b10
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fed19a59cae3e7a4ccafbeeac0b723efc82671ddef1b391a9d80af0d2ed5d03578ee4a27a6dad7200b3cd2b9cd9c2820e927037174dc859aae1db62703a75244
|
7
|
+
data.tar.gz: 64b175741142d7f8f1ff645fab7e573a4677e777cce29731585e69a69b2c687f7a670491e689acd2cf5e2c1793eb922ba557b232537bf4ced7ecbd0c0e1d7b7f
|
data/lib/vindetta.rb
CHANGED
@@ -2,20 +2,14 @@ require "vindetta/calculator"
|
|
2
2
|
require "vindetta/cli"
|
3
3
|
require "vindetta/decoder"
|
4
4
|
require "vindetta/generator"
|
5
|
+
require "vindetta/standard"
|
5
6
|
require "vindetta/validator"
|
6
7
|
require "vindetta/version"
|
7
8
|
|
8
9
|
module Vindetta
|
9
|
-
VIN_LENGTH = 17
|
10
|
-
WMI_LENGTH = 3
|
11
|
-
VDS_LENGTH = 6
|
12
|
-
VIS_LENGTH = 8
|
13
|
-
|
14
10
|
CHECK_DIGIT_INDEX = 8
|
15
11
|
PLANT_CODE_INDEX = 10
|
16
12
|
|
17
|
-
WMI_CHARACTERS = "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
18
|
-
VDS_CHARACTERS = "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
19
13
|
VIS_CHARACTERS = "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
20
14
|
MODEL_YEAR_CHARACTERS = VIS_CHARACTERS - "UZ".chars
|
21
15
|
|
data/lib/vindetta/cli.rb
CHANGED
@@ -13,14 +13,17 @@ module Vindetta
|
|
13
13
|
version Vindetta::VERSION
|
14
14
|
|
15
15
|
desc "Validates a VIN"
|
16
|
-
|
16
|
+
|
17
17
|
command %i[validate v] do |c|
|
18
18
|
c.action do |_global, _options, args|
|
19
19
|
vin = args.first
|
20
20
|
|
21
21
|
exit_now!(I18n.t("required"), 1) if vin.nil?
|
22
22
|
|
23
|
-
|
23
|
+
standard = Vindetta::Standard::ISO3779
|
24
|
+
validator = Vindetta::Validator.new(standard)
|
25
|
+
|
26
|
+
puts validator.vin(vin)
|
24
27
|
end
|
25
28
|
end
|
26
29
|
|
@@ -32,7 +35,10 @@ module Vindetta
|
|
32
35
|
|
33
36
|
exit_now!(I18n.t("required"), 1) if vin.nil?
|
34
37
|
|
35
|
-
|
38
|
+
standard = Vindetta::Standard::ISO3779
|
39
|
+
decoder = Vindetta::Decoder.new(standard)
|
40
|
+
|
41
|
+
puts decoder.vin(vin)
|
36
42
|
end
|
37
43
|
end
|
38
44
|
|
@@ -40,7 +46,10 @@ module Vindetta
|
|
40
46
|
|
41
47
|
command %i[generate g] do |c|
|
42
48
|
c.action do |_global, _options, _args|
|
43
|
-
|
49
|
+
standard = Vindetta::Standard::ISO3779
|
50
|
+
generator = Vindetta::Generator.new(standard)
|
51
|
+
|
52
|
+
puts generator.vin
|
44
53
|
end
|
45
54
|
end
|
46
55
|
end
|
data/lib/vindetta/decoder.rb
CHANGED
@@ -4,8 +4,12 @@ module Vindetta
|
|
4
4
|
ALPHA = ('A'..'Z').to_a
|
5
5
|
NUMERIC = ("0".."9").to_a
|
6
6
|
|
7
|
-
def
|
8
|
-
|
7
|
+
def initialize(standard)
|
8
|
+
@standard = standard
|
9
|
+
end
|
10
|
+
|
11
|
+
def vin(vin)
|
12
|
+
{
|
9
13
|
:plant_code => vin[PLANT_CODE_INDEX],
|
10
14
|
:wmi => vin[WMI_RANGE],
|
11
15
|
:check_digit => vin[CHECK_DIGIT_INDEX],
|
@@ -16,7 +20,7 @@ module Vindetta
|
|
16
20
|
|
17
21
|
private
|
18
22
|
|
19
|
-
def
|
23
|
+
def model_year(vin)
|
20
24
|
index = ((ALPHA - %w[I O Q U Z]) + (NUMERIC - %w[0])).find_index { |c| c == vin[9] }
|
21
25
|
|
22
26
|
if ALPHA.include?(vin[6])
|
data/lib/vindetta/generator.rb
CHANGED
@@ -1,29 +1,36 @@
|
|
1
1
|
module Vindetta
|
2
2
|
class Generator
|
3
|
-
|
3
|
+
attr_reader :standard
|
4
|
+
|
5
|
+
def initialize(standard)
|
6
|
+
@standard = standard
|
7
|
+
end
|
8
|
+
|
9
|
+
def vin(options = {})
|
4
10
|
"#{wmi}#{vds}#{vis}".tap do |vin|
|
5
11
|
vin[CHECK_DIGIT_INDEX] = Calculator.check_digit(vin)
|
6
12
|
end
|
7
13
|
end
|
8
14
|
|
9
|
-
def
|
15
|
+
def wmi(_options = {})
|
10
16
|
@wmis ||= begin
|
11
17
|
path = File.expand_path("../data/wmi.yaml", __FILE__)
|
12
18
|
YAML.load_file(path)["wmi"].keys
|
13
19
|
end
|
14
20
|
|
15
|
-
"#{@wmis.sample}".rjust(
|
21
|
+
"#{@wmis.sample}".rjust(standard.wmi.length, "9")
|
16
22
|
end
|
17
23
|
|
18
|
-
def
|
19
|
-
|
24
|
+
def vds(_options = {})
|
25
|
+
characters = standard.vds.map(&:characters)
|
26
|
+
|
27
|
+
characters.map(&:sample).join
|
20
28
|
end
|
21
29
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
].flatten.join("")
|
30
|
+
def vis(_options = {})
|
31
|
+
characters = standard.vis.map(&:characters)
|
32
|
+
|
33
|
+
characters.map(&:sample).join
|
27
34
|
end
|
28
35
|
end
|
29
36
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Vindetta
|
2
|
+
module Standard
|
3
|
+
class ISO3779
|
4
|
+
LENGTH = 17
|
5
|
+
|
6
|
+
def self.wmi
|
7
|
+
OpenStruct.new(
|
8
|
+
:length => 3
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.vds
|
13
|
+
@vds ||= [
|
14
|
+
OpenStruct.new({
|
15
|
+
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
16
|
+
}),
|
17
|
+
OpenStruct.new({
|
18
|
+
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
19
|
+
}),
|
20
|
+
OpenStruct.new({
|
21
|
+
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
22
|
+
}),
|
23
|
+
OpenStruct.new({
|
24
|
+
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
25
|
+
}),
|
26
|
+
OpenStruct.new({
|
27
|
+
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
28
|
+
}),
|
29
|
+
OpenStruct.new({
|
30
|
+
:characters => "0123456789ABCDEFGHJKLMNPRSTUVWXYZ".chars
|
31
|
+
})
|
32
|
+
]
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.vis
|
36
|
+
@vis ||= [
|
37
|
+
OpenStruct.new({
|
38
|
+
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "V", "W", "X", "Y"]
|
39
|
+
}),
|
40
|
+
OpenStruct.new({
|
41
|
+
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
42
|
+
}),
|
43
|
+
OpenStruct.new({
|
44
|
+
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
45
|
+
}),
|
46
|
+
OpenStruct.new({
|
47
|
+
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
48
|
+
}),
|
49
|
+
OpenStruct.new({
|
50
|
+
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
51
|
+
}),
|
52
|
+
OpenStruct.new({
|
53
|
+
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
54
|
+
}),
|
55
|
+
OpenStruct.new({
|
56
|
+
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
57
|
+
}),
|
58
|
+
OpenStruct.new({
|
59
|
+
:characters => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
|
60
|
+
})
|
61
|
+
]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/vindetta/validator.rb
CHANGED
@@ -1,27 +1,33 @@
|
|
1
1
|
module Vindetta
|
2
2
|
class Validator
|
3
|
-
|
4
|
-
return false unless vin.length == Vindetta::VIN_LENGTH
|
3
|
+
attr_reader :standard
|
5
4
|
|
6
|
-
|
5
|
+
def initialize(standard)
|
6
|
+
@standard = standard
|
7
|
+
end
|
8
|
+
|
9
|
+
def vin(vin)
|
10
|
+
return false unless vin.length == standard::LENGTH
|
11
|
+
|
12
|
+
Calculator.check_digit(vin) == Decoder.new(Vindetta::Standard::ISO3779).vin(vin)[:check_digit]
|
7
13
|
rescue Calculator::InvalidCharacterError
|
8
14
|
false
|
9
15
|
end
|
10
16
|
|
11
|
-
def
|
12
|
-
return false unless wmi.length ==
|
17
|
+
def wmi(wmi)
|
18
|
+
return false unless wmi.length == standard.wmi.length
|
13
19
|
|
14
20
|
true
|
15
21
|
end
|
16
22
|
|
17
|
-
def
|
18
|
-
return false unless vds.length ==
|
23
|
+
def vds(vds)
|
24
|
+
return false unless vds.length == standard.vds.length
|
19
25
|
|
20
26
|
true
|
21
27
|
end
|
22
28
|
|
23
|
-
def
|
24
|
-
return false unless vis.length ==
|
29
|
+
def vis(vis)
|
30
|
+
return false unless vis.length == standard.vis.length
|
25
31
|
|
26
32
|
true
|
27
33
|
end
|
data/lib/vindetta/version.rb
CHANGED
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.
|
4
|
+
version: 0.25.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: 2018-07-
|
11
|
+
date: 2018-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gli
|
@@ -165,6 +165,8 @@ files:
|
|
165
165
|
- lib/vindetta/decoder.rb
|
166
166
|
- lib/vindetta/generator.rb
|
167
167
|
- lib/vindetta/locale/en.yml
|
168
|
+
- lib/vindetta/standard.rb
|
169
|
+
- lib/vindetta/standard/iso3779.rb
|
168
170
|
- lib/vindetta/validator.rb
|
169
171
|
- lib/vindetta/version.rb
|
170
172
|
- vindetta.gemspec
|