class Faker::Vehicle
def car_options
-
(Array
-)
def car_options Array.new(rand(5...10)) { fetch('vehicle.car_options') } end
def car_type
-
(String)
-
def car_type fetch('vehicle.car_types') end
def color
-
(String)
-
def color fetch('vehicle.colors') end
def doors
-
(Integer)
-
def doors sample(fetch_all('vehicle.doors')) end
def drive_type
-
(String)
-
def drive_type fetch('vehicle.drive_types') end
def engine
-
(String)
-
def engine "#{sample(fetch_all('vehicle.doors'))} #{fetch('vehicle.cylinder_engine')}" end
def fuel_type
-
(String)
-
def fuel_type fetch('vehicle.fuel_types') end
def license_plate(state_abbreviation: '')
-
(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
-
(String)
-
def make fetch('vehicle.makes') end
def make_and_model
-
(String)
-
def make_and_model m = make "#{m} #{model(make_of_model: m)}" end
def manufacture
-
(String)
-
def manufacture fetch('vehicle.manufacture') end
def mileage(min: MILEAGE_MIN, max: MILEAGE_MAX)
-
(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: '')
-
(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
-
(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
-
(Array
-)
def standard_specs Array.new(rand(5...10)) { fetch('vehicle.standard_specs') } end
def style
-
(String)
-
def style fetch('vehicle.styles') end
def transmission
-
(String)
-
def transmission fetch('vehicle.transmissions') end
def version
-
(String)
-
def version fetch('vehicle.version') end
def vin
-
(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
-
(Integer)
-
def year Faker::Time.backward(days: rand_in_range(365, 5475), period: :all, format: '%Y').to_i end