lib/ffaker/name_cs.rb
# frozen_string_literal: true module FFaker module NameCS include FFaker::Name extend ModuleUtils extend self FIRST_NAMES = { female: FEMALE_FIRST_NAMES, male: MALE_FIRST_NAMES }.freeze LAST_NAMES = { female: FEMALE_LAST_NAMES, male: MALE_LAST_NAMES }.freeze SUFFIXES = %w[Ph.D. Th.D. DSc.].freeze GENDERS = %i[male female random].freeze # :nodoc: # All names generated inside the block will have the same sex. # Can be called with explicit sex which will affect # all calls inside thee block: # # FFaker::NameCS.with_same_sex(:female) # person.last_name = FFaker::NameCS.last_name # person.first_name = FFaker::NameCS.first_name # end # # person.last_name # => "Nováková" # person.first_name # => "Jana" def with_same_sex(sex = :random) @fixed_sex = sex == :random ? GENDERS[rand(0..1)] : sex yield ensure @fixed_sex = nil end # Generates random full name which can contain prefix and suffix # Can be called with explicit sex (:male, :female), like: # # FFaker::NameCS.name(:male) # # for_sex defaults to :random. def name(for_sex = :random) with_same_sex(for_sex) do case rand(0..9) when 0 then "#{prefix} #{first_name} #{last_name} #{suffix}" when 1..2 then "#{prefix} #{first_name} #{last_name}" else "#{first_name} #{last_name}" end end end # Generates random last name # for_sex can be :male, :female. Defaults to :random def last_name(for_sex = :random) fetch_sample(LAST_NAMES[select_sex(for_sex)]) end # Generates random first name # for_sex can be :male, :female. Defaults to :random def first_name(for_sex = :random) fetch_sample(FIRST_NAMES[select_sex(for_sex)]) end # Generates random name prefix, an academic degree def prefix fetch_sample(PREFIXES) end # Generates random name suffix, an academic degree def suffix fetch_sample(SUFFIXES) end private def select_sex(sex) # :nodoc: @fixed_sex ||= nil given_sex = @fixed_sex || sex raise ArgumentError, "Unknown sex #{given_sex}" unless GENDERS.include?(given_sex) given_sex == :random ? GENDERS[rand(0..1)] : given_sex end end end