name_bank 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +202 -0
  3. data/NOTICE +12 -0
  4. data/README.md +60 -0
  5. data/data/countries/AE.yml +4504 -0
  6. data/data/countries/AF.yml +4504 -0
  7. data/data/countries/AL.yml +4504 -0
  8. data/data/countries/AO.yml +4504 -0
  9. data/data/countries/AR.yml +4504 -0
  10. data/data/countries/AT.yml +4504 -0
  11. data/data/countries/AZ.yml +4504 -0
  12. data/data/countries/BD.yml +4504 -0
  13. data/data/countries/BE.yml +4504 -0
  14. data/data/countries/BF.yml +2956 -0
  15. data/data/countries/BG.yml +4504 -0
  16. data/data/countries/BH.yml +4504 -0
  17. data/data/countries/BI.yml +4504 -0
  18. data/data/countries/BN.yml +4504 -0
  19. data/data/countries/BO.yml +4504 -0
  20. data/data/countries/BR.yml +4504 -0
  21. data/data/countries/BW.yml +4504 -0
  22. data/data/countries/CA.yml +4504 -0
  23. data/data/countries/CH.yml +4504 -0
  24. data/data/countries/CL.yml +4504 -0
  25. data/data/countries/CM.yml +4504 -0
  26. data/data/countries/CN.yml +94 -0
  27. data/data/countries/CO.yml +4504 -0
  28. data/data/countries/CR.yml +4504 -0
  29. data/data/countries/CY.yml +4504 -0
  30. data/data/countries/CZ.yml +4504 -0
  31. data/data/countries/DE.yml +4504 -0
  32. data/data/countries/DJ.yml +4504 -0
  33. data/data/countries/DK.yml +4504 -0
  34. data/data/countries/DZ.yml +4504 -0
  35. data/data/countries/EC.yml +4504 -0
  36. data/data/countries/EE.yml +4504 -0
  37. data/data/countries/EG.yml +4504 -0
  38. data/data/countries/ES.yml +4504 -0
  39. data/data/countries/ET.yml +4206 -0
  40. data/data/countries/FI.yml +4504 -0
  41. data/data/countries/FJ.yml +2919 -0
  42. data/data/countries/FR.yml +4504 -0
  43. data/data/countries/GB.yml +4504 -0
  44. data/data/countries/GE.yml +4504 -0
  45. data/data/countries/GH.yml +4504 -0
  46. data/data/countries/GR.yml +4504 -0
  47. data/data/countries/GT.yml +4504 -0
  48. data/data/countries/HK.yml +4504 -0
  49. data/data/countries/HN.yml +3592 -0
  50. data/data/countries/HR.yml +4504 -0
  51. data/data/countries/HT.yml +4504 -0
  52. data/data/countries/HU.yml +4504 -0
  53. data/data/countries/ID.yml +4504 -0
  54. data/data/countries/IE.yml +4504 -0
  55. data/data/countries/IL.yml +4504 -0
  56. data/data/countries/IN.yml +4504 -0
  57. data/data/countries/IQ.yml +4504 -0
  58. data/data/countries/IR.yml +4504 -0
  59. data/data/countries/IS.yml +4504 -0
  60. data/data/countries/IT.yml +4504 -0
  61. data/data/countries/JM.yml +4504 -0
  62. data/data/countries/JO.yml +4504 -0
  63. data/data/countries/JP.yml +4504 -0
  64. data/data/countries/KH.yml +2225 -0
  65. data/data/countries/KR.yml +4504 -0
  66. data/data/countries/KW.yml +4504 -0
  67. data/data/countries/KZ.yml +4504 -0
  68. data/data/countries/LB.yml +4504 -0
  69. data/data/countries/LT.yml +4504 -0
  70. data/data/countries/LU.yml +4504 -0
  71. data/data/countries/LY.yml +4504 -0
  72. data/data/countries/MA.yml +4504 -0
  73. data/data/countries/MD.yml +4504 -0
  74. data/data/countries/MO.yml +4504 -0
  75. data/data/countries/MT.yml +4504 -0
  76. data/data/countries/MU.yml +4504 -0
  77. data/data/countries/MV.yml +4504 -0
  78. data/data/countries/MX.yml +4504 -0
  79. data/data/countries/MY.yml +4504 -0
  80. data/data/countries/NA.yml +4504 -0
  81. data/data/countries/NG.yml +4504 -0
  82. data/data/countries/NL.yml +4504 -0
  83. data/data/countries/NO.yml +4504 -0
  84. data/data/countries/OM.yml +4504 -0
  85. data/data/countries/PA.yml +4504 -0
  86. data/data/countries/PE.yml +4504 -0
  87. data/data/countries/PH.yml +4504 -0
  88. data/data/countries/PL.yml +4504 -0
  89. data/data/countries/PR.yml +4504 -0
  90. data/data/countries/PS.yml +4504 -0
  91. data/data/countries/PT.yml +4504 -0
  92. data/data/countries/QA.yml +4504 -0
  93. data/data/countries/RS.yml +4504 -0
  94. data/data/countries/RU.yml +4504 -0
  95. data/data/countries/SA.yml +4504 -0
  96. data/data/countries/SD.yml +4504 -0
  97. data/data/countries/SE.yml +4504 -0
  98. data/data/countries/SG.yml +4504 -0
  99. data/data/countries/SI.yml +4504 -0
  100. data/data/countries/SV.yml +964 -0
  101. data/data/countries/SY.yml +4504 -0
  102. data/data/countries/TM.yml +4344 -0
  103. data/data/countries/TN.yml +4504 -0
  104. data/data/countries/TR.yml +4504 -0
  105. data/data/countries/TW.yml +4504 -0
  106. data/data/countries/UA.yml +94 -0
  107. data/data/countries/US.yml +4504 -0
  108. data/data/countries/UY.yml +4504 -0
  109. data/data/countries/YE.yml +4504 -0
  110. data/data/countries/ZA.yml +4504 -0
  111. data/data/variants/US/african_american.yml +93 -0
  112. data/lib/name_bank/repository.rb +69 -0
  113. data/lib/name_bank/version.rb +5 -0
  114. data/lib/name_bank.rb +41 -0
  115. metadata +181 -0
@@ -0,0 +1,93 @@
1
+ firstnames_male:
2
+ - DeShawn
3
+ - Marcus
4
+ - Jamal
5
+ - Malik
6
+ - Terrell
7
+ - Darnell
8
+ - Andre
9
+ - Xavier
10
+ - Isaiah
11
+ - Jerome
12
+ - Tyrone
13
+ - DeAndre
14
+ - Rashad
15
+ - Demetrius
16
+ - Jaylen
17
+ - Kwame
18
+ - Darius
19
+ - Elijah
20
+ - Trevon
21
+ - Lamar
22
+ - Cedric
23
+ - Reggie
24
+ - Deon
25
+ - Maurice
26
+ - Devonte
27
+ - Roosevelt
28
+ - Amari
29
+ - Jabari
30
+ - Keshawn
31
+ - Tremaine
32
+ firstnames_female:
33
+ - Aaliyah
34
+ - Tanisha
35
+ - Keisha
36
+ - Latasha
37
+ - Ebony
38
+ - Jasmine
39
+ - Destiny
40
+ - Imani
41
+ - Ayana
42
+ - Shanice
43
+ - Latoya
44
+ - Nia
45
+ - Kiara
46
+ - Aisha
47
+ - Chantel
48
+ - Deja
49
+ - Precious
50
+ - Tamika
51
+ - Kenya
52
+ - Latrice
53
+ - Ericka
54
+ - Monique
55
+ - Raven
56
+ - Essence
57
+ - Amara
58
+ - Zaria
59
+ - Tiana
60
+ - Jada
61
+ - Makayla
62
+ - Nyla
63
+ lastnames:
64
+ - Jackson
65
+ - Washington
66
+ - Jefferson
67
+ - Robinson
68
+ - Coleman
69
+ - Freeman
70
+ - Brooks
71
+ - Dixon
72
+ - Banks
73
+ - Greene
74
+ - Mosley
75
+ - Rhodes
76
+ - Bryant
77
+ - Gaines
78
+ - Hampton
79
+ - Ellison
80
+ - Winters
81
+ - Boyd
82
+ - Simmons
83
+ - Charles
84
+ - Prince
85
+ - Sutton
86
+ - Carver
87
+ - Diggs
88
+ - Fields
89
+ - Vance
90
+ - Overton
91
+ - Dupree
92
+ - Toussaint
93
+ - Beaumont
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
4
+
5
+ module NameBank
6
+ # Lazy, memoized loader of per-country name pools stored as YAML in data_dir.
7
+ class Repository
8
+ def initialize(data_dir:)
9
+ @data_dir = data_dir
10
+ @countries_cache = {}
11
+ @variants_cache = {}
12
+ end
13
+
14
+ def firstnames(country:, gender:, variant: nil)
15
+ load(country, variant).fetch(gender_key(gender))
16
+ end
17
+
18
+ def lastnames(country:, variant: nil)
19
+ load(country, variant).fetch("lastnames")
20
+ end
21
+
22
+ def countries
23
+ @countries ||= yml_basenames(File.join(@data_dir, "countries"))
24
+ end
25
+
26
+ def variants(country:)
27
+ yml_basenames(File.join(@data_dir, "variants", country))
28
+ end
29
+
30
+ private
31
+
32
+ def gender_key(gender)
33
+ case gender
34
+ when :male then "firstnames_male"
35
+ when :female then "firstnames_female"
36
+ else raise ArgumentError, "gender must be :male or :female, got #{gender.inspect}"
37
+ end
38
+ end
39
+
40
+ def load(country, variant)
41
+ variant ? load_variant(country, variant) : load_country(country)
42
+ end
43
+
44
+ def load_country(country)
45
+ @countries_cache[country] ||= begin
46
+ path = File.join(@data_dir, "countries", "#{country}.yml")
47
+ raise UnknownCountry, country unless File.exist?(path)
48
+
49
+ YAML.safe_load_file(path)
50
+ end
51
+ end
52
+
53
+ def load_variant(country, variant)
54
+ @variants_cache[[country, variant]] ||= begin
55
+ path = File.join(@data_dir, "variants", country, "#{variant}.yml")
56
+ raise UnknownVariant, "#{country}/#{variant}" unless File.exist?(path)
57
+
58
+ YAML.safe_load_file(path)
59
+ end
60
+ end
61
+
62
+ def yml_basenames(dir)
63
+ return [] unless Dir.exist?(dir)
64
+
65
+ Dir.children(dir).select { |f| f.end_with?(".yml") }
66
+ .map { |f| File.basename(f, ".yml") }.sort
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NameBank
4
+ VERSION = "0.1.2"
5
+ end
data/lib/name_bank.rb ADDED
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "name_bank/version"
4
+ require_relative "name_bank/repository"
5
+
6
+ module NameBank
7
+ Error = Class.new(StandardError)
8
+ UnknownCountry = Class.new(Error)
9
+ UnknownVariant = Class.new(Error)
10
+
11
+ DATA_DIR = File.expand_path("../data", __dir__)
12
+
13
+ module_function
14
+
15
+ def first_name(country:, gender:, rng:, variant: nil)
16
+ repository.firstnames(country: country, gender: gender, variant: variant).sample(random: rng)
17
+ end
18
+
19
+ def last_name(country:, rng:, variant: nil)
20
+ repository.lastnames(country: country, variant: variant).sample(random: rng)
21
+ end
22
+
23
+ def full_name(country:, gender:, rng:, variant: nil)
24
+ {
25
+ firstname: first_name(country: country, gender: gender, rng: rng, variant: variant),
26
+ lastname: last_name(country: country, rng: rng, variant: variant)
27
+ }
28
+ end
29
+
30
+ def countries
31
+ repository.countries
32
+ end
33
+
34
+ def variants(country:)
35
+ repository.variants(country: country)
36
+ end
37
+
38
+ def repository
39
+ @repository ||= Repository.new(data_dir: DATA_DIR)
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: name_bank
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Patrick Bartels
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rspec
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '3.13'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '3.13'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '13.0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '13.0'
40
+ description: A fast, dependency-free generator of authentic, gender-matched given
41
+ names and surnames for 105+ countries, plus hand-curated pools and cultural variants.
42
+ Uniform, deterministic sampling from a caller-supplied RNG.
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - LICENSE
48
+ - NOTICE
49
+ - README.md
50
+ - data/countries/AE.yml
51
+ - data/countries/AF.yml
52
+ - data/countries/AL.yml
53
+ - data/countries/AO.yml
54
+ - data/countries/AR.yml
55
+ - data/countries/AT.yml
56
+ - data/countries/AZ.yml
57
+ - data/countries/BD.yml
58
+ - data/countries/BE.yml
59
+ - data/countries/BF.yml
60
+ - data/countries/BG.yml
61
+ - data/countries/BH.yml
62
+ - data/countries/BI.yml
63
+ - data/countries/BN.yml
64
+ - data/countries/BO.yml
65
+ - data/countries/BR.yml
66
+ - data/countries/BW.yml
67
+ - data/countries/CA.yml
68
+ - data/countries/CH.yml
69
+ - data/countries/CL.yml
70
+ - data/countries/CM.yml
71
+ - data/countries/CN.yml
72
+ - data/countries/CO.yml
73
+ - data/countries/CR.yml
74
+ - data/countries/CY.yml
75
+ - data/countries/CZ.yml
76
+ - data/countries/DE.yml
77
+ - data/countries/DJ.yml
78
+ - data/countries/DK.yml
79
+ - data/countries/DZ.yml
80
+ - data/countries/EC.yml
81
+ - data/countries/EE.yml
82
+ - data/countries/EG.yml
83
+ - data/countries/ES.yml
84
+ - data/countries/ET.yml
85
+ - data/countries/FI.yml
86
+ - data/countries/FJ.yml
87
+ - data/countries/FR.yml
88
+ - data/countries/GB.yml
89
+ - data/countries/GE.yml
90
+ - data/countries/GH.yml
91
+ - data/countries/GR.yml
92
+ - data/countries/GT.yml
93
+ - data/countries/HK.yml
94
+ - data/countries/HN.yml
95
+ - data/countries/HR.yml
96
+ - data/countries/HT.yml
97
+ - data/countries/HU.yml
98
+ - data/countries/ID.yml
99
+ - data/countries/IE.yml
100
+ - data/countries/IL.yml
101
+ - data/countries/IN.yml
102
+ - data/countries/IQ.yml
103
+ - data/countries/IR.yml
104
+ - data/countries/IS.yml
105
+ - data/countries/IT.yml
106
+ - data/countries/JM.yml
107
+ - data/countries/JO.yml
108
+ - data/countries/JP.yml
109
+ - data/countries/KH.yml
110
+ - data/countries/KR.yml
111
+ - data/countries/KW.yml
112
+ - data/countries/KZ.yml
113
+ - data/countries/LB.yml
114
+ - data/countries/LT.yml
115
+ - data/countries/LU.yml
116
+ - data/countries/LY.yml
117
+ - data/countries/MA.yml
118
+ - data/countries/MD.yml
119
+ - data/countries/MO.yml
120
+ - data/countries/MT.yml
121
+ - data/countries/MU.yml
122
+ - data/countries/MV.yml
123
+ - data/countries/MX.yml
124
+ - data/countries/MY.yml
125
+ - data/countries/NA.yml
126
+ - data/countries/NG.yml
127
+ - data/countries/NL.yml
128
+ - data/countries/NO.yml
129
+ - data/countries/OM.yml
130
+ - data/countries/PA.yml
131
+ - data/countries/PE.yml
132
+ - data/countries/PH.yml
133
+ - data/countries/PL.yml
134
+ - data/countries/PR.yml
135
+ - data/countries/PS.yml
136
+ - data/countries/PT.yml
137
+ - data/countries/QA.yml
138
+ - data/countries/RS.yml
139
+ - data/countries/RU.yml
140
+ - data/countries/SA.yml
141
+ - data/countries/SD.yml
142
+ - data/countries/SE.yml
143
+ - data/countries/SG.yml
144
+ - data/countries/SI.yml
145
+ - data/countries/SV.yml
146
+ - data/countries/SY.yml
147
+ - data/countries/TM.yml
148
+ - data/countries/TN.yml
149
+ - data/countries/TR.yml
150
+ - data/countries/TW.yml
151
+ - data/countries/UA.yml
152
+ - data/countries/US.yml
153
+ - data/countries/UY.yml
154
+ - data/countries/YE.yml
155
+ - data/countries/ZA.yml
156
+ - data/variants/US/african_american.yml
157
+ - lib/name_bank.rb
158
+ - lib/name_bank/repository.rb
159
+ - lib/name_bank/version.rb
160
+ homepage: https://github.com/roughneck/name_bank
161
+ licenses:
162
+ - Apache-2.0
163
+ metadata: {}
164
+ rdoc_options: []
165
+ require_paths:
166
+ - lib
167
+ required_ruby_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '3.1'
172
+ required_rubygems_version: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ requirements: []
178
+ rubygems_version: 3.6.9
179
+ specification_version: 4
180
+ summary: Authentic, gender-matched given and family names for 105+ countries.
181
+ test_files: []