class Faker::Vehicle

def car_options

Returns:
  • (Array) -
def car_options
  Array.new(rand(5...10)) { fetch('vehicle.car_options') }
end

def car_type

Returns:
  • (String) -
def car_type
  fetch('vehicle.car_types')
end

def color

Returns:
  • (String) -
def color
  fetch('vehicle.colors')
end

def doors

Returns:
  • (Integer) -
def doors
  sample(fetch_all('vehicle.doors'))
end

def drive_type

Returns:
  • (String) -
def drive_type
  fetch('vehicle.drive_types')
end

def engine

Returns:
  • (String) -
def engine
  "#{sample(fetch_all('vehicle.doors'))} #{fetch('vehicle.cylinder_engine')}"
end

def fuel_type

Returns:
  • (String) -
def fuel_type
  fetch('vehicle.fuel_types')
end

def license_plate(state_abbreviation: '')

Returns:
  • (String) -

Parameters:
  • state_abbreviation (String) -- Two letter state abbreviation for license plate generation.
def license_plate(state_abbreviation: '')
  return regexify(bothify(fetch('vehicle.license_plate'))) if state_abbreviation.empty?
  key = "vehicle.license_plate_by_state.#{state_abbreviation}"
  regexify(bothify(fetch(key)))
end

def make

Returns:
  • (String) -
def make
  fetch('vehicle.makes')
end

def make_and_model

Returns:
  • (String) -
def make_and_model
  m = make
  "#{m} #{model(make_of_model: m)}"
end

def manufacture

Returns:
  • (String) -
def manufacture
  fetch('vehicle.manufacture')
end

def mileage(min: MILEAGE_MIN, max: MILEAGE_MAX)

Returns:
  • (Integer) -

Parameters:
  • max (Integer) -- Specific maximum limit for mileage generation.
  • min (Integer) -- Specific minimum limit for mileage generation.
def mileage(min: MILEAGE_MIN, max: MILEAGE_MAX)
  rand_in_range(min, max)
end

def model(make_of_model: '')

Returns:
  • (String) -

Parameters:
  • make_of_model (String) -- Specific valid vehicle make.
def model(make_of_model: '')
  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(' ', '-').chars
  padded_digits = format('%04d', plate_number[/\d+/]).chars.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.chars[sum % 19]
end

def singapore_license_plate

Returns:
  • (String) -
def singapore_license_plate
  key = 'vehicle.license_plate'
  plate_number = regexify(bothify(fetch(key)))
  "#{plate_number}#{singapore_checksum(plate_number)}"
end

def standard_specs

Returns:
  • (Array) -
def standard_specs
  Array.new(rand(5...10)) { fetch('vehicle.standard_specs') }
end

def style

Returns:
  • (String) -
def style
  fetch('vehicle.styles')
end

def transmission

Returns:
  • (String) -
def transmission
  fetch('vehicle.transmissions')
end

def version

Returns:
  • (String) -
def version
  fetch('vehicle.version')
end

def vin

Returns:
  • (String) -
def vin
  generate(:string) do |g|
    g.letter(name: :wmi, ranges: ['100'..'199', '400'..'499', '500'..'599', '700'..'799', '7A0'..'7F9'])
    g.letter(name: :vds, length: 5, ranges: [VIN_KEYSPACE])
    g.computed(name: :checksum, deps: %i[wmi vds model_year plant_code vis]) do |wmi, vds, model_year, plant_code, vis|
      checksum = "#{wmi}#{vds}0#{model_year}#{plant_code}#{vis}".chars.each_with_index.map do |char, i|
        value = (char =~ /\A\d\z/ ? char.to_i : VIN_TRANSLITERATION[char.to_sym])
        value * VIN_WEIGHT[i]
      end.inject(:+) % 11
      if checksum == 10
        'X'
      else
        checksum
      end
    end
    g.letter(name: :model_year, length: 1, ranges: [VIN_KEYSPACE - %w[U Z 0]])
    g.letter(name: :plant_code, length: 1, ranges: [VIN_KEYSPACE])
    g.int(name: :vis, length: 6)
  end
end

def year

Returns:
  • (Integer) -
def year
  Faker::Time.backward(days: rand_in_range(365, 5475), period: :all, format: '%Y').to_i
end