Class: NameBank

Inherits:
Object
  • Object
show all
Defined in:
lib/name_bank.rb,
lib/name_bank/errors.rb,
lib/name_bank/version.rb,
lib/name_bank/pool_store.rb,
lib/name_bank/pool_schema.rb

Overview

Declared as a class, not a module: NameBank itself is one (see lib/name_bank.rb).

Defined Under Namespace

Modules: Error, PoolSchema Classes: EmptyPool, MalformedPool, UnknownCountry, UnknownGender, UnknownScript, UnknownVariant

Constant Summary collapse

DATA_DIR =
File.expand_path("../data", __dir__)
VERSION =
"0.2.0"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data_dir: DATA_DIR) ⇒ NameBank

Returns a new instance of NameBank.



37
38
39
# File 'lib/name_bank.rb', line 37

def initialize(data_dir: DATA_DIR)
  @store = PoolStore.new(data_dir)
end

Class Method Details

.countriesObject



32
# File 'lib/name_bank.rb', line 32

def countries(...) = default.countries(...)

.defaultObject



23
24
25
# File 'lib/name_bank.rb', line 23

def default
  @default ||= new
end

.first_nameObject



27
# File 'lib/name_bank.rb', line 27

def first_name(...) = default.first_name(...)

.first_namesObject



30
# File 'lib/name_bank.rb', line 30

def first_names(...) = default.first_names(...)

.full_nameObject



29
# File 'lib/name_bank.rb', line 29

def full_name(...) = default.full_name(...)

.last_nameObject



28
# File 'lib/name_bank.rb', line 28

def last_name(...) = default.last_name(...)

.last_namesObject



31
# File 'lib/name_bank.rb', line 31

def last_names(...) = default.last_names(...)

.scriptsObject



34
# File 'lib/name_bank.rb', line 34

def scripts(...) = default.scripts(...)

.variantsObject



33
# File 'lib/name_bank.rb', line 33

def variants(...) = default.variants(...)

Instance Method Details

#countriesObject



65
66
67
# File 'lib/name_bank.rb', line 65

def countries
  @store.countries
end

#first_name(country:, gender:, rng:, variant: nil, script: :latin) ⇒ Object



41
42
43
# File 'lib/name_bank.rb', line 41

def first_name(country:, gender:, rng:, variant: nil, script: :latin)
  first_names(country: country, gender: gender, variant: variant, script: script).sample(random: rng)
end

#first_names(country:, gender:, variant: nil, script: :latin) ⇒ Object

The whole frequency-ordered pool, frozen. The name strings stay mutable.



57
58
59
# File 'lib/name_bank.rb', line 57

def first_names(country:, gender:, variant: nil, script: :latin)
  pool(country, variant, PoolSchema.gender_key(gender), script)
end

#full_name(country:, gender:, rng:, variant: nil, script: :latin) ⇒ Object



49
50
51
52
53
54
# File 'lib/name_bank.rb', line 49

def full_name(country:, gender:, rng:, variant: nil, script: :latin)
  {
    firstname: first_name(country: country, gender: gender, rng: rng, variant: variant, script: script),
    lastname: last_name(country: country, rng: rng, variant: variant, script: script)
  }
end

#last_name(country:, rng:, variant: nil, script: :latin) ⇒ Object



45
46
47
# File 'lib/name_bank.rb', line 45

def last_name(country:, rng:, variant: nil, script: :latin)
  last_names(country: country, variant: variant, script: script).sample(random: rng)
end

#last_names(country:, variant: nil, script: :latin) ⇒ Object



61
62
63
# File 'lib/name_bank.rb', line 61

def last_names(country:, variant: nil, script: :latin)
  pool(country, variant, PoolSchema::SURNAMES, script)
end

#scripts(country:) ⇒ Object

The script forms this country offers, not writing systems — see CONTEXT.md.



74
75
76
77
# File 'lib/name_bank.rb', line 74

def scripts(country:)
  data = @store.pools(country, nil)
  PoolSchema::KEYS.any? { |k| data[PoolSchema.native_key(k)]&.any? } ? %i[latin native] : %i[latin]
end

#variants(country:) ⇒ Object



69
70
71
# File 'lib/name_bank.rb', line 69

def variants(country:)
  @store.variants(country)
end