class Faker::Vehicle
def calculate_vin_check_digit(vin)
def calculate_vin_check_digit(vin) sum = 0 vin.each_char.with_index do |c, i| n = vin_char_to_number(c).to_i weight = VIN_WEIGHTS[i].to_i sum += weight * n end mod = sum % 11 mod == 10 ? 'X' : mod end
def car_options
def car_options Array.new(rand(5...10)) { fetch('vehicle.car_options') } end
def car_type
def car_type fetch('vehicle.car_types') end
def color
def color fetch('vehicle.colors') end
def doors
def doors sample(fetch_all('vehicle.doors')) end
def drive_type
def drive_type fetch('vehicle.drive_types') end
def engine
def engine "#{sample(fetch_all('vehicle.doors'))} #{fetch('vehicle.cylinder_engine')}" end
def first_eight(number)
def first_eight(number) return number[0...8] unless number.nil? regexify(VIN_REGEX) end
def fuel_type
def fuel_type fetch('vehicle.fuel_types') end
def license_plate(legacy_state_abreviation = NOT_GIVEN, state_abreviation: '')
def license_plate(legacy_state_abreviation = NOT_GIVEN, state_abreviation: '') warn_for_deprecated_arguments do |keywords| keywords << :state_abreviation if legacy_state_abreviation != NOT_GIVEN end return regexify(bothify(fetch('vehicle.license_plate'))) if state_abreviation.empty? key = 'vehicle.license_plate_by_state.' + state_abreviation regexify(bothify(fetch(key))) end
def make
def make fetch('vehicle.makes') end
def make_and_model
def make_and_model m = make "#{m} #{model(make_of_model: m)}" end
def manufacture
def manufacture fetch('vehicle.manufacture') end
def mileage(legacy_min = NOT_GIVEN, legacy_max = NOT_GIVEN, min: MILEAGE_MIN, max: MILEAGE_MAX)
def mileage(legacy_min = NOT_GIVEN, legacy_max = NOT_GIVEN, min: MILEAGE_MIN, max: MILEAGE_MAX) warn_for_deprecated_arguments do |keywords| keywords << :min if legacy_min != NOT_GIVEN keywords << :max if legacy_max != NOT_GIVEN end rand_in_range(min, max) end
def model(legacy_make_of_model = NOT_GIVEN, make_of_model: '')
def model(legacy_make_of_model = NOT_GIVEN, make_of_model: '') warn_for_deprecated_arguments do |keywords| keywords << :make_of_model if legacy_make_of_model != NOT_GIVEN end return fetch("vehicle.models_by_make.#{make}") if make_of_model.empty? fetch("vehicle.models_by_make.#{make_of_model}") end
def singapore_checksum(plate_number)
def singapore_checksum(plate_number) padded_alphabets = format('%3s', plate_number[/^[A-Z]+/]).tr(' ', '-').split('') padded_digits = format('%04d', plate_number[/\d+/]).split('').map(&:to_i) sum = [*padded_alphabets, *padded_digits].each_with_index.reduce(0) do |memo, (char, i)| value = char.is_a?(Integer) ? char : char.ord - 64 memo + (SG_CHECKSUM_WEIGHTS[i] * value) end SG_CHECKSUM_CHARS.split('')[sum % 19] end
def singapore_license_plate
def singapore_license_plate key = 'vehicle.license_plate' plate_number = regexify(bothify(fetch(key))) "#{plate_number}#{singapore_checksum(plate_number)}" end
def standard_specs
def standard_specs Array.new(rand(5...10)) { fetch('vehicle.standard_specs') } end
def style
def style fetch('vehicle.styles') end
def transmission
def transmission fetch('vehicle.transmissions') end
def vin
def vin regexify(VIN_REGEX) end
def vin_char_to_number(char)
def vin_char_to_number(char) index = VIN_LETTERS.split('').index(char) return char.to_i if index.nil? VIN_MAP[index] end
def year
def year Faker::Time.backward(days: rand_in_range(365, 5475), period: :all, format: '%Y').to_i end