lib/vindetta/decoder.rb in vindetta-0.25.0 vs lib/vindetta/decoder.rb in vindetta-0.26.0

- old
+ new

@@ -1,28 +1,43 @@ +# frozen_string_literal: true + module Vindetta class Decoder + attr_reader :standard + BASE_MODEL_YEAR = 1980 - ALPHA = ('A'..'Z').to_a + ALPHA = ("A".."Z").to_a NUMERIC = ("0".."9").to_a def initialize(standard) @standard = standard end def vin(vin) - { - :plant_code => vin[PLANT_CODE_INDEX], - :wmi => vin[WMI_RANGE], - :check_digit => vin[CHECK_DIGIT_INDEX], - :production_number => vin[PRODUCTION_NUMBER_RANGE], - :model_year => model_year(vin), + { + plant_code: vin[PLANT_CODE_INDEX], + wmi: vin[WMI_RANGE], + check_digit: vin[CHECK_DIGIT_INDEX], + production_number: vin[PRODUCTION_NUMBER_RANGE], + model_year: model_year(vin), + region: region(vin) } end private + def region(vin) + character = vin[0] + position = standard.wmi.detect { |p| p["name"] == "region" } + + position["mapping"][character] + end + def model_year(vin) - index = ((ALPHA - %w[I O Q U Z]) + (NUMERIC - %w[0])).find_index { |c| c == vin[9] } + position = standard.vis.detect { |p| p["name"] === "model_year" } + characters = position["characters"] + + index = characters.find_index { |c| c == vin[9] } if ALPHA.include?(vin[6]) BASE_MODEL_YEAR + index + 30 else BASE_MODEL_YEAR + index