faker 2.2.0 → 3.2.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 (482) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1298 -24
  3. data/History.md +5 -5
  4. data/README.md +239 -104
  5. data/lib/faker/blockchain/aeternity.rb +70 -0
  6. data/lib/faker/blockchain/bitcoin.rb +28 -2
  7. data/lib/faker/blockchain/ethereum.rb +11 -1
  8. data/lib/faker/blockchain/tezos.rb +93 -9
  9. data/lib/faker/books/book.rb +36 -0
  10. data/lib/faker/books/culture_series.rb +49 -0
  11. data/lib/faker/books/dune.rb +73 -17
  12. data/lib/faker/books/lovecraft.rb +186 -57
  13. data/lib/faker/books/the_kingkiller_chronicle.rb +61 -0
  14. data/lib/faker/creature/animal.rb +9 -0
  15. data/lib/faker/creature/bird.rb +203 -0
  16. data/lib/faker/creature/cat.rb +27 -0
  17. data/lib/faker/creature/dog.rb +72 -0
  18. data/lib/faker/creature/horse.rb +18 -0
  19. data/lib/faker/default/address.rb +253 -33
  20. data/lib/faker/default/adjective.rb +35 -0
  21. data/lib/faker/default/alphanumeric.rb +27 -22
  22. data/lib/faker/default/ancient.rb +36 -0
  23. data/lib/faker/default/app.rb +46 -16
  24. data/lib/faker/default/appliance.rb +18 -0
  25. data/lib/faker/default/artist.rb +9 -0
  26. data/lib/faker/default/avatar.rb +32 -24
  27. data/lib/faker/default/bank.rb +118 -29
  28. data/lib/faker/default/barcode.rb +165 -0
  29. data/lib/faker/default/beer.rb +75 -3
  30. data/lib/faker/default/blood.rb +48 -0
  31. data/lib/faker/default/boolean.rb +13 -6
  32. data/lib/faker/default/bossa_nova.rb +18 -0
  33. data/lib/faker/default/business.rb +27 -0
  34. data/lib/faker/default/camera.rb +46 -0
  35. data/lib/faker/default/cannabis.rb +90 -0
  36. data/lib/faker/default/chile_rut.rb +62 -26
  37. data/lib/faker/default/chuck_norris.rb +13 -2
  38. data/lib/faker/default/code.rb +162 -58
  39. data/lib/faker/default/coffee.rb +45 -0
  40. data/lib/faker/default/coin.rb +18 -0
  41. data/lib/faker/default/color.rb +123 -5
  42. data/lib/faker/default/commerce.rb +105 -37
  43. data/lib/faker/default/company.rb +446 -34
  44. data/lib/faker/default/compass.rb +135 -0
  45. data/lib/faker/default/computer.rb +63 -0
  46. data/lib/faker/default/construction.rb +54 -0
  47. data/lib/faker/default/cosmere.rb +90 -0
  48. data/lib/faker/default/crypto.rb +44 -4
  49. data/lib/faker/default/crypto_coin.rb +48 -18
  50. data/lib/faker/default/currency.rb +27 -0
  51. data/lib/faker/default/date.rb +149 -52
  52. data/lib/faker/default/dc_comics.rb +45 -0
  53. data/lib/faker/default/demographic.rb +58 -6
  54. data/lib/faker/default/dessert.rb +27 -0
  55. data/lib/faker/default/device.rb +54 -0
  56. data/lib/faker/default/driving_licence.rb +85 -28
  57. data/lib/faker/default/drone.rb +332 -0
  58. data/lib/faker/default/educator.rb +73 -6
  59. data/lib/faker/default/electrical_components.rb +27 -0
  60. data/lib/faker/default/emotion.rb +33 -0
  61. data/lib/faker/default/esport.rb +45 -0
  62. data/lib/faker/default/file.rb +53 -38
  63. data/lib/faker/default/finance.rb +75 -8
  64. data/lib/faker/default/food.rb +93 -3
  65. data/lib/faker/default/funny_name.rb +45 -0
  66. data/lib/faker/default/gender.rb +31 -0
  67. data/lib/faker/default/greek_philosophers.rb +18 -0
  68. data/lib/faker/default/hacker.rb +59 -1
  69. data/lib/faker/default/hipster.rb +106 -81
  70. data/lib/faker/default/hobby.rb +22 -0
  71. data/lib/faker/default/house.rb +18 -0
  72. data/lib/faker/default/html.rb +230 -0
  73. data/lib/faker/default/id_number.rb +276 -18
  74. data/lib/faker/default/industry_segments.rb +36 -0
  75. data/lib/faker/default/internet.rb +442 -147
  76. data/lib/faker/default/internet_http.rb +48 -0
  77. data/lib/faker/default/invoice.rb +37 -29
  78. data/lib/faker/default/job.rb +36 -0
  79. data/lib/faker/default/json.rb +61 -30
  80. data/lib/faker/default/kpop.rb +54 -0
  81. data/lib/faker/default/lorem.rb +184 -121
  82. data/lib/faker/default/lorem_flickr.rb +69 -68
  83. data/lib/faker/default/markdown.rb +97 -15
  84. data/lib/faker/default/marketing.rb +9 -0
  85. data/lib/faker/default/measurement.rb +101 -50
  86. data/lib/faker/default/military.rb +71 -0
  87. data/lib/faker/default/mountain.rb +33 -0
  88. data/lib/faker/default/name.rb +99 -6
  89. data/lib/faker/default/nation.rb +45 -5
  90. data/lib/faker/default/nato_phonetic_alphabet.rb +9 -0
  91. data/lib/faker/default/nhs.rb +21 -7
  92. data/lib/faker/default/number.rb +160 -91
  93. data/lib/faker/default/omniauth.rb +199 -137
  94. data/lib/faker/default/phone_number.rb +89 -11
  95. data/lib/faker/default/placeholdit.rb +23 -25
  96. data/lib/faker/default/programming_language.rb +18 -0
  97. data/lib/faker/default/relationship.rb +47 -7
  98. data/lib/faker/default/religion.rb +6 -0
  99. data/lib/faker/default/restaurant.rb +54 -2
  100. data/lib/faker/default/science.rb +135 -0
  101. data/lib/faker/default/slack_emoji.rb +81 -0
  102. data/lib/faker/default/source.rb +46 -22
  103. data/lib/faker/default/south_africa.rb +90 -0
  104. data/lib/faker/default/space.rb +128 -1
  105. data/lib/faker/default/string.rb +18 -9
  106. data/lib/faker/default/stripe.rb +68 -27
  107. data/lib/faker/default/subscription.rb +45 -0
  108. data/lib/faker/default/superhero.rb +45 -0
  109. data/lib/faker/default/tea.rb +41 -0
  110. data/lib/faker/default/team.rb +45 -0
  111. data/lib/faker/default/time.rb +84 -68
  112. data/lib/faker/default/twitter.rb +57 -47
  113. data/lib/faker/default/types.rb +90 -41
  114. data/lib/faker/default/university.rb +45 -0
  115. data/lib/faker/default/vehicle.rb +223 -60
  116. data/lib/faker/default/verb.rb +45 -0
  117. data/lib/faker/default/vulnerability_identifier.rb +23 -0
  118. data/lib/faker/default/world_cup.rb +52 -16
  119. data/lib/faker/fantasy/tolkien.rb +67 -0
  120. data/lib/faker/games/clash_of_clans.rb +48 -0
  121. data/lib/faker/games/control.rb +113 -0
  122. data/lib/faker/games/dnd.rb +178 -0
  123. data/lib/faker/games/dota.rb +61 -6
  124. data/lib/faker/games/elder_scrolls.rb +98 -0
  125. data/lib/faker/games/fallout.rb +37 -0
  126. data/lib/faker/games/final_fantasy_xiv.rb +73 -0
  127. data/lib/faker/games/game.rb +27 -0
  128. data/lib/faker/games/half_life.rb +27 -0
  129. data/lib/faker/games/heroes.rb +40 -0
  130. data/lib/faker/games/heroes_of_the_storm.rb +48 -1
  131. data/lib/faker/games/league_of_legends.rb +54 -0
  132. data/lib/faker/games/minecraft.rb +113 -0
  133. data/lib/faker/games/myst.rb +45 -0
  134. data/lib/faker/games/overwatch.rb +27 -0
  135. data/lib/faker/games/pokemon.rb +27 -0
  136. data/lib/faker/games/sonic_the_hedgehog.rb +27 -0
  137. data/lib/faker/games/street_fighter.rb +61 -0
  138. data/lib/faker/games/super_mario.rb +48 -0
  139. data/lib/faker/games/super_smash_bros.rb +18 -0
  140. data/lib/faker/games/tarkov.rb +205 -0
  141. data/lib/faker/games/touhou.rb +75 -0
  142. data/lib/faker/games/warhammer_fantasy.rb +74 -0
  143. data/lib/faker/games/witcher.rb +93 -0
  144. data/lib/faker/games/world_of_warcraft.rb +44 -1
  145. data/lib/faker/games/zelda.rb +37 -1
  146. data/lib/faker/japanese_media/conan.rb +48 -0
  147. data/lib/faker/japanese_media/cowboy_bebop.rb +61 -0
  148. data/lib/faker/japanese_media/doraemon.rb +48 -0
  149. data/lib/faker/japanese_media/dragon_ball.rb +35 -0
  150. data/lib/faker/japanese_media/fullmetal_alchemist_brotherhood.rb +48 -0
  151. data/lib/faker/japanese_media/kamen_rider.rb +102 -0
  152. data/lib/faker/japanese_media/naruto.rb +61 -0
  153. data/lib/faker/japanese_media/one_piece.rb +55 -1
  154. data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
  155. data/lib/faker/japanese_media/sword_art_online.rb +36 -0
  156. data/lib/faker/locations/australia.rb +47 -0
  157. data/lib/faker/movies/avatar.rb +49 -0
  158. data/lib/faker/movies/back_to_the_future.rb +28 -0
  159. data/lib/faker/movies/departed.rb +49 -0
  160. data/lib/faker/movies/ghostbusters.rb +28 -0
  161. data/lib/faker/movies/hackers.rb +48 -0
  162. data/lib/faker/movies/harry_potter.rb +54 -0
  163. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +69 -0
  164. data/lib/faker/movies/hobbit.rb +41 -4
  165. data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
  166. data/lib/faker/movies/lebowski.rb +27 -0
  167. data/lib/faker/movies/lord_of_the_rings.rb +31 -3
  168. data/lib/faker/movies/movie.rb +22 -0
  169. data/lib/faker/movies/princess_bride.rb +19 -0
  170. data/lib/faker/movies/room.rb +63 -0
  171. data/lib/faker/movies/star_wars.rb +170 -11
  172. data/lib/faker/movies/tron.rb +161 -0
  173. data/lib/faker/movies/v_for_vendetta.rb +29 -0
  174. data/lib/faker/music/grateful_dead.rb +18 -0
  175. data/lib/faker/music/hiphop.rb +48 -0
  176. data/lib/faker/music/music.rb +102 -4
  177. data/lib/faker/music/opera.rb +273 -1
  178. data/lib/faker/music/pearl_jam.rb +50 -0
  179. data/lib/faker/music/phish.rb +36 -1
  180. data/lib/faker/music/prince.rb +64 -0
  181. data/lib/faker/music/rock_band.rb +21 -0
  182. data/lib/faker/music/rush.rb +37 -0
  183. data/lib/faker/music/show.rb +49 -0
  184. data/lib/faker/music/smashing_pumpkins.rb +64 -0
  185. data/lib/faker/music/umphreys_mcgee.rb +9 -0
  186. data/lib/faker/quotes/chiquito.rb +80 -0
  187. data/lib/faker/quotes/quote.rb +93 -1
  188. data/lib/faker/quotes/rajnikanth.rb +27 -0
  189. data/lib/faker/quotes/shakespeare.rb +70 -0
  190. data/lib/faker/religion/bible.rb +50 -0
  191. data/lib/faker/sports/basketball.rb +36 -0
  192. data/lib/faker/sports/chess.rb +90 -0
  193. data/lib/faker/sports/football.rb +45 -0
  194. data/lib/faker/sports/mountaineering.rb +22 -0
  195. data/lib/faker/sports/sport.rb +116 -0
  196. data/lib/faker/sports/volleyball.rb +74 -0
  197. data/lib/faker/travel/airport.rb +43 -0
  198. data/lib/faker/travel/train_station.rb +54 -0
  199. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +22 -0
  200. data/lib/faker/tv_shows/archer.rb +51 -0
  201. data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
  202. data/lib/faker/tv_shows/bojack_horseman.rb +28 -0
  203. data/lib/faker/tv_shows/breaking_bad.rb +18 -0
  204. data/lib/faker/tv_shows/brooklyn_nine_nine.rb +38 -0
  205. data/lib/faker/tv_shows/buffy.rb +60 -2
  206. data/lib/faker/tv_shows/community.rb +19 -0
  207. data/lib/faker/tv_shows/dr_who.rb +78 -2
  208. data/lib/faker/tv_shows/dumb_and_dumber.rb +28 -0
  209. data/lib/faker/tv_shows/family_guy.rb +28 -0
  210. data/lib/faker/tv_shows/final_space.rb +51 -0
  211. data/lib/faker/tv_shows/friends.rb +27 -0
  212. data/lib/faker/tv_shows/futurama.rb +65 -0
  213. data/lib/faker/tv_shows/game_of_thrones.rb +46 -0
  214. data/lib/faker/tv_shows/hey_arnold.rb +27 -0
  215. data/lib/faker/tv_shows/how_i_met_your_mother.rb +37 -0
  216. data/lib/faker/tv_shows/michael_scott.rb +10 -0
  217. data/lib/faker/tv_shows/new_girl.rb +19 -0
  218. data/lib/faker/tv_shows/parks_and_rec.rb +18 -0
  219. data/lib/faker/tv_shows/rick_and_morty.rb +28 -0
  220. data/lib/faker/tv_shows/ru_paul.rb +18 -0
  221. data/lib/faker/tv_shows/seinfeld.rb +28 -0
  222. data/lib/faker/tv_shows/silicon_valley.rb +75 -0
  223. data/lib/faker/tv_shows/simpsons.rb +42 -0
  224. data/lib/faker/tv_shows/south_park.rb +34 -0
  225. data/lib/faker/tv_shows/spongebob.rb +50 -0
  226. data/lib/faker/tv_shows/star_trek.rb +36 -0
  227. data/lib/faker/tv_shows/stargate.rb +28 -0
  228. data/lib/faker/tv_shows/stranger_things.rb +19 -0
  229. data/lib/faker/tv_shows/suits.rb +37 -0
  230. data/lib/faker/tv_shows/supernatural.rb +48 -0
  231. data/lib/faker/tv_shows/the_expanse.rb +36 -0
  232. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +43 -2
  233. data/lib/faker/tv_shows/the_it_crowd.rb +37 -0
  234. data/lib/faker/tv_shows/the_office.rb +37 -0
  235. data/lib/faker/tv_shows/the_thick_of_it.rb +28 -0
  236. data/lib/faker/tv_shows/twin_peaks.rb +28 -0
  237. data/lib/faker/tv_shows/venture_bros.rb +38 -0
  238. data/lib/faker/version.rb +2 -2
  239. data/lib/faker.rb +58 -58
  240. data/lib/helpers/base58.rb +1 -1
  241. data/lib/helpers/char.rb +22 -27
  242. data/lib/helpers/positional_generator.rb +480 -0
  243. data/lib/helpers/unique_generator.rb +17 -13
  244. data/lib/locales/README.md +18 -2
  245. data/lib/locales/ar.yml +6 -1
  246. data/lib/locales/bg.yml +3 -3
  247. data/lib/locales/ca.yml +0 -8
  248. data/lib/locales/da-DK.yml +6 -4
  249. data/lib/locales/de-AT.yml +7 -6
  250. data/lib/locales/de-CH.yml +6028 -9
  251. data/lib/locales/de.yml +12 -6
  252. data/lib/locales/en/address.yml +8 -3
  253. data/lib/locales/en/adjective.yml +179 -0
  254. data/lib/locales/en/airport.yml +381 -0
  255. data/lib/locales/en/animal.yml +1 -1
  256. data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
  257. data/lib/locales/en/archer.yml +75 -0
  258. data/lib/locales/en/australia.yml +107 -0
  259. data/lib/locales/en/avatar.yml +31 -0
  260. data/lib/locales/en/bank.yml +1 -1
  261. data/lib/locales/en/barcode.yml +24 -0
  262. data/lib/locales/en/bible.yml +90 -0
  263. data/lib/locales/en/big_bang_theory.yml +38 -0
  264. data/lib/locales/en/bird.yml +1281 -0
  265. data/lib/locales/en/blood.yml +13 -0
  266. data/lib/locales/en/book.yml +487 -3
  267. data/lib/locales/en/brooklyn_nine_nine.yml +35 -0
  268. data/lib/locales/en/buffy.yml +1 -1
  269. data/lib/locales/en/camera.yml +611 -0
  270. data/lib/locales/en/cat.yml +1 -1
  271. data/lib/locales/en/chess.yml +103 -0
  272. data/lib/locales/en/chiquito.yml +64 -0
  273. data/lib/locales/en/clash_of_clan.yml +101 -0
  274. data/lib/locales/en/coffee.yml +1 -1
  275. data/lib/locales/en/color.yml +1 -1
  276. data/lib/locales/en/commerce.yml +17 -0
  277. data/lib/locales/en/community.yml +17 -17
  278. data/lib/locales/en/company.yml +3 -2
  279. data/lib/locales/en/computer.yml +55 -0
  280. data/lib/locales/en/conan.yml +171 -0
  281. data/lib/locales/en/control.yml +247 -0
  282. data/lib/locales/en/cowboy_bebop.yml +163 -0
  283. data/lib/locales/en/demographic.yml +218 -5
  284. data/lib/locales/en/departed.yml +50 -0
  285. data/lib/locales/en/device.yml +112 -4
  286. data/lib/locales/en/dnd.yml +636 -0
  287. data/lib/locales/en/doraemon.yml +286 -0
  288. data/lib/locales/en/dota.yml +651 -63
  289. data/lib/locales/en/dr_who.yml +1 -1
  290. data/lib/locales/en/dragon_ball.yml +243 -1
  291. data/lib/locales/en/driving_license.yml +181 -0
  292. data/lib/locales/en/drone.yml +95 -0
  293. data/lib/locales/en/dune.yml +270 -131
  294. data/lib/locales/en/educator.yml +75 -6
  295. data/lib/locales/en/elder_scrolls.yml +583 -9
  296. data/lib/locales/en/emotion.yml +480 -0
  297. data/lib/locales/en/fallout.yml +311 -133
  298. data/lib/locales/en/file.yml +9 -1
  299. data/lib/locales/en/final_fantasy_xiv.yml +754 -0
  300. data/lib/locales/en/final_space.yml +37 -0
  301. data/lib/locales/en/finance.yml +77 -1
  302. data/lib/locales/en/fma_brotherhood.yml +78 -0
  303. data/lib/locales/en/food.yml +1066 -10
  304. data/lib/locales/en/football.yml +3 -3
  305. data/lib/locales/en/fresh_prince_of_bel_air.yml +1 -1
  306. data/lib/locales/en/futurama.yml +344 -0
  307. data/lib/locales/en/game.yml +11 -0
  308. data/lib/locales/en/gender.yml +1 -0
  309. data/lib/locales/en/hackers.yml +53 -0
  310. data/lib/locales/en/half_life.yml +84 -3
  311. data/lib/locales/en/heroes.yml +408 -3
  312. data/lib/locales/en/heroes_of_the_storm.yml +131 -4
  313. data/lib/locales/en/hobby.yml +171 -0
  314. data/lib/locales/en/horse.yml +2 -2
  315. data/lib/locales/en/house.yml +1 -1
  316. data/lib/locales/en/how_to_train_your_dragon.yml +174 -0
  317. data/lib/locales/en/internet.yml +140 -3
  318. data/lib/locales/en/jack_handey.yml +54 -0
  319. data/lib/locales/en/kamen_rider.yml +452 -0
  320. data/lib/locales/en/kpop.yml +7 -7
  321. data/lib/locales/en/league_of_legends.yml +285 -6
  322. data/lib/locales/en/lebowski.yml +1 -1
  323. data/lib/locales/en/lovecraft.yml +76 -6
  324. data/lib/locales/en/military.yml +179 -5
  325. data/lib/locales/en/minecraft.yml +663 -0
  326. data/lib/locales/en/mitch_hedberg.yml +46 -0
  327. data/lib/locales/en/mountain.yml +171 -0
  328. data/lib/locales/en/mountaineering.yml +14 -0
  329. data/lib/locales/en/movie.yml +194 -2
  330. data/lib/locales/en/music.yml +461 -29
  331. data/lib/locales/en/myst.yml +87 -31
  332. data/lib/locales/en/name.yml +6 -5
  333. data/lib/locales/en/naruto.yml +230 -0
  334. data/lib/locales/en/one_piece.yml +2 -2
  335. data/lib/locales/en/opera.yml +169 -1
  336. data/lib/locales/en/overwatch.yml +2648 -37
  337. data/lib/locales/en/pearl_jam.yml +213 -0
  338. data/lib/locales/en/phish.yml +392 -1
  339. data/lib/locales/en/phone_number.yml +1 -1
  340. data/lib/locales/en/pokemon.yml +417 -4
  341. data/lib/locales/en/prince.yml +227 -0
  342. data/lib/locales/en/quote.yml +692 -163
  343. data/lib/locales/en/rajnikanth.yml +77 -0
  344. data/lib/locales/en/rock_band.yml +1 -0
  345. data/lib/locales/en/room.yml +68 -0
  346. data/lib/locales/en/rush.yml +32 -0
  347. data/lib/locales/en/science.yml +481 -3
  348. data/lib/locales/en/shakespeare.yml +23 -26
  349. data/lib/locales/en/show.yml +597 -0
  350. data/lib/locales/en/simpsons.yml +668 -0
  351. data/lib/locales/en/smashing_pumpkins.yml +382 -0
  352. data/lib/locales/en/source.yml +35 -0
  353. data/lib/locales/en/south_park.yml +360 -2
  354. data/lib/locales/en/space.yml +1 -1
  355. data/lib/locales/en/spongebob.yml +489 -0
  356. data/lib/locales/en/sport.yml +130 -0
  357. data/lib/locales/en/star_trek.yml +1 -1
  358. data/lib/locales/en/star_wars.yml +568 -220
  359. data/lib/locales/en/stranger_thing.yml +1 -1
  360. data/lib/locales/en/street_fighter.yml +1524 -0
  361. data/lib/locales/en/stripe.yml +3 -3
  362. data/lib/locales/en/studio_ghibli.yml +107 -0
  363. data/lib/locales/en/suits.yml +45 -0
  364. data/lib/locales/en/super_mario.yml +58 -0
  365. data/lib/locales/en/super_smash_bros.yml +23 -5
  366. data/lib/locales/en/supernatural.yml +141 -0
  367. data/lib/locales/en/tarkov.yml +593 -0
  368. data/lib/locales/en/tea.yml +172 -0
  369. data/lib/locales/en/the_kingkiller_chronicle.yml +56 -0
  370. data/lib/locales/en/the_office.yml +86 -0
  371. data/lib/locales/en/tolkien.yml +2453 -0
  372. data/lib/locales/en/touhou.yml +839 -0
  373. data/lib/locales/en/train_station.yml +280 -0
  374. data/lib/locales/en/tron.yml +227 -0
  375. data/lib/locales/en/vehicle.yml +2809 -75
  376. data/lib/locales/en/volleyball.yml +501 -0
  377. data/lib/locales/en/warhammer_fantasy.yml +582 -0
  378. data/lib/locales/en/witcher.yml +426 -7
  379. data/lib/locales/en/world_of_warcraft.yml +122 -4
  380. data/lib/locales/en/zelda.yml +962 -4
  381. data/lib/locales/en-AU.yml +50 -10
  382. data/lib/locales/en-CA.yml +5 -1
  383. data/lib/locales/en-GB.yml +3 -2
  384. data/lib/locales/en-IND.yml +2 -1
  385. data/lib/locales/en-MS.yml +3 -1
  386. data/lib/locales/en-NEP.yml +5 -2
  387. data/lib/locales/en-NG.yml +1 -0
  388. data/lib/locales/en-NZ.yml +135 -8
  389. data/lib/locales/en-PAK.yml +3 -1
  390. data/lib/locales/en-SG.yml +3 -1
  391. data/lib/locales/en-TH.yml +360 -0
  392. data/lib/locales/en-UG.yml +1 -0
  393. data/lib/locales/en-US.yml +38 -12
  394. data/lib/locales/en-ZA.yml +2 -2
  395. data/lib/locales/en-au-ocker.yml +4 -1
  396. data/lib/locales/en.yml +0 -3
  397. data/lib/locales/es-AR.yml +4601 -0
  398. data/lib/locales/es-MX.yml +4 -1
  399. data/lib/locales/es.yml +58 -2
  400. data/lib/locales/fa.yml +2 -0
  401. data/lib/locales/fi-FI.yml +4 -2
  402. data/lib/locales/fr/address.yml +20 -0
  403. data/lib/locales/fr/adjective.yml +266 -0
  404. data/lib/locales/fr/ancient.yml +141 -0
  405. data/lib/locales/fr/animal.yml +5 -0
  406. data/lib/locales/fr/appliance.yml +4 -0
  407. data/lib/locales/fr/book.yml +7 -0
  408. data/lib/locales/fr/color.yml +4 -0
  409. data/lib/locales/fr/company.yml +17 -0
  410. data/lib/locales/fr/compass.yml +23 -0
  411. data/lib/locales/fr/demographic.yml +4 -0
  412. data/lib/locales/fr/gender.yml +6 -0
  413. data/lib/locales/fr/internet.yml +5 -0
  414. data/lib/locales/fr/lorem.yml +5 -0
  415. data/lib/locales/fr/measurement.yml +7 -0
  416. data/lib/locales/fr/name.yml +22 -0
  417. data/lib/locales/fr/phone_number.yml +7 -0
  418. data/lib/locales/fr/pokemon.yml +7 -0
  419. data/lib/locales/fr-CA.yml +28 -11
  420. data/lib/locales/fr-CH.yml +3 -3
  421. data/lib/locales/fr.yml +1 -112
  422. data/lib/locales/hy.yml +3 -7
  423. data/lib/locales/id.yml +5 -2
  424. data/lib/locales/it.yml +3 -1
  425. data/lib/locales/ja/README.md +13 -0
  426. data/lib/locales/ja/address.yml +120539 -0
  427. data/lib/locales/ja/adjective.yml +148 -0
  428. data/lib/locales/ja/ancient.yml +4 -0
  429. data/lib/locales/ja/animal.yml +5 -0
  430. data/lib/locales/ja/bank.yml +4 -0
  431. data/lib/locales/ja/book.yml +7 -0
  432. data/lib/locales/ja/cat.yml +5 -0
  433. data/lib/locales/ja/coffee.yml +4 -0
  434. data/lib/locales/ja/color.yml +4 -0
  435. data/lib/locales/ja/commerce.yml +11 -0
  436. data/lib/locales/ja/company.yml +8 -0
  437. data/lib/locales/ja/dog.yml +6 -0
  438. data/lib/locales/ja/emotion.yml +51 -0
  439. data/lib/locales/ja/food.yml +4 -0
  440. data/lib/locales/ja/gender.yml +4 -0
  441. data/lib/locales/ja/lorem.yml +9 -0
  442. data/lib/locales/ja/name.yml +13 -0
  443. data/lib/locales/ja/naruto.yml +230 -0
  444. data/lib/locales/ja/overwatch.yml +5 -0
  445. data/lib/locales/ja/phone_number.yml +7 -0
  446. data/lib/locales/ja/pokemon.yml +7 -0
  447. data/lib/locales/ja/relationship.yml +10 -0
  448. data/lib/locales/ja/restaurant.yml +11 -0
  449. data/lib/locales/ja/space.yml +5 -0
  450. data/lib/locales/ja/sport.yml +130 -0
  451. data/lib/locales/ja/studio_ghibli.yml +112 -0
  452. data/lib/locales/ja/subscription.yml +8 -0
  453. data/lib/locales/ja/super_mario.yml +9 -0
  454. data/lib/locales/ja/super_smash_bros.yml +8 -0
  455. data/lib/locales/ja/touhou.yml +466 -0
  456. data/lib/locales/ja/university.yml +9 -0
  457. data/lib/locales/ja/zelda.yml +5 -0
  458. data/lib/locales/ko.yml +95 -2
  459. data/lib/locales/lt.yml +34 -0
  460. data/lib/locales/lv.yml +1 -1
  461. data/lib/locales/mi-NZ.yml +283 -0
  462. data/lib/locales/nb-NO.yml +5 -2
  463. data/lib/locales/nl.yml +1 -0
  464. data/lib/locales/pl.yml +2 -2
  465. data/lib/locales/pt-BR.yml +33 -4
  466. data/lib/locales/pt.yml +6 -4
  467. data/lib/locales/ru.yml +43 -1
  468. data/lib/locales/sk.yml +5 -2
  469. data/lib/locales/sv.yml +1 -0
  470. data/lib/locales/th.yml +380 -0
  471. data/lib/locales/tr.yml +1 -0
  472. data/lib/locales/uk.yml +10 -5
  473. data/lib/locales/vi.yml +1 -0
  474. data/lib/locales/zh-CN/bank.yml +17 -0
  475. data/lib/locales/zh-CN.yml +2 -1
  476. data/lib/locales/zh-TW.yml +2 -1
  477. metadata +201 -109
  478. data/lib/faker/default/fillmurray.rb +0 -30
  479. data/lib/faker/default/lorem_pixel.rb +0 -63
  480. data/lib/locales/en/hobbit.yml +0 -19
  481. data/lib/locales/en/lord_of_the_rings.yml +0 -6
  482. data/lib/locales/ja.yml +0 -98
@@ -0,0 +1,480 @@
1
+ # frozen_string_literal: true
2
+
3
+ ##
4
+ # A high level way to generate a list of generated values that fit a specific
5
+ # format, such as an ID, postal code, or phone number.
6
+ #
7
+ # It provides generators for random digits and letters, hardcoded literal
8
+ # strings, computed values based on previously-generated values, union (one-of)
9
+ # selectors, and grouped generators.
10
+ #
11
+ # The generation allows for dependencies on previously generated values -- most
12
+ # useful for computations -- and this object knows how to build that dependency
13
+ # graph.
14
+ #
15
+ # See {PositionalGenerator::Builder} for more.
16
+ class PositionalGenerator
17
+ ##
18
+ # @param as_type [Symbol] +:string+ to generate a String
19
+ # @param block [Method] a function that interacts with the {Builder}
20
+ def initialize(as_type, &block)
21
+ @block = block
22
+ @generator_builder = Builder.new(as_type)
23
+ end
24
+
25
+ ##
26
+ # @return [String] if +as_type+ is +:string+
27
+ def generate
28
+ @block.call(@generator_builder)
29
+ @generator_builder.build
30
+ end
31
+
32
+ Component = Struct.new(:position, :name, :deps, :generator)
33
+
34
+ class Builder
35
+ attr_reader :as_type
36
+
37
+ def initialize(as_type)
38
+ @components = []
39
+ @as_type = as_type
40
+ end
41
+
42
+ ##
43
+ # Generate a value in the range of 0..9.
44
+ #
45
+ # @param name [Symbol] the name for this node in the group
46
+ # @param length [Integer] how many digits to generate
47
+ # @param ranges [Array<Range, Array, Set>] an array of limitations on the
48
+ # generation. Elements can be a Range to select from within that range,
49
+ # or an Array or Set to select an element from within the list.
50
+ # @return [void]
51
+ #
52
+ # @example a digit
53
+ # int
54
+ #
55
+ # @example five digits named :a
56
+ # int(name: :a, length: 5)
57
+ #
58
+ # @example digits of any length between 4 to 10
59
+ # int(ranges: [1_000 .. 9_999_999_999)
60
+ def int(name: nil, length: 1, ranges: nil)
61
+ @components << Component.new(@components.count, name, [], Int.new(length, ranges))
62
+ end
63
+
64
+ ##
65
+ # Generate a value in the range of 'a'..'Z'.
66
+ #
67
+ # @param name [Symbol] the name for this node in the group
68
+ # @param length [Integer, Range] how many letters to generate
69
+ # @param ranges [Array<Range, Array, Set>] an array of limitations on the
70
+ # generation. Elements can be a Range to select from within that range,
71
+ # or an Array or Set to select an element from within the list.
72
+ # @return [void]
73
+ #
74
+ # @example Generate a letter
75
+ # letter
76
+ #
77
+ # @example Generate five uppercase letters named :b
78
+ # letter(name: :b, length: 5, ranges: ['A'..'Z'])
79
+ #
80
+ # @example Generate three-letter strings from within specific values
81
+ # letter(ranges: ['700'..'799', '7A0'..'7F9'])
82
+ def letter(name: nil, length: 1, ranges: ['a'..'z', 'A'..'Z'])
83
+ @components << Component.new(@components.count, name, [], Letter.new(length, ranges))
84
+ end
85
+
86
+ ##
87
+ # Generate a literal String
88
+ #
89
+ # @param value [String]
90
+ # @param name [Symbol] the name for this node in the group
91
+ # @return [void]
92
+ # @example
93
+ # lit("-")
94
+ def lit(value, name: nil)
95
+ @components << Component.new(@components.count, name, [], Literal.new(value))
96
+ end
97
+
98
+ ##
99
+ # Fill the position with an arbitrary value.
100
+ #
101
+ # @param name [Symbol] the name for this node in the group
102
+ # @param deps [Array<Symbol>] the name of other fields that this one depends on
103
+ # @param block [Method] the block that yields the arbitrary value. Its
104
+ # arguments are the deps.
105
+ # @return [void]
106
+ #
107
+ # @example Today's date
108
+ # computed do
109
+ # Date.today
110
+ # end
111
+ #
112
+ # @example A check digit
113
+ # int(name: :a, length: 5)
114
+ # computed(deps: [:a]) do |a|
115
+ # a.to_s.bytes.sum % 10
116
+ # end
117
+ def computed(name: nil, deps: [], &block)
118
+ @components << Component.new(@components.count, name, deps, Computed.new(block))
119
+ end
120
+
121
+ ##
122
+ # Fill the position with one of the results from the given generators.
123
+ #
124
+ # @param name [Symbol] the name for this node in the group
125
+ # @param block [Method] subgenerator block
126
+ # @return [void]
127
+ #
128
+ # @example Either five digits, or two letters
129
+ # oneof do |or_else|
130
+ # or_else.int(length: 5)
131
+ # or_else.letter(length: 2)
132
+ # end
133
+ #
134
+ # @example Either one letter; or a slash, five digits, then a slash.
135
+ # oneof do |or_else|
136
+ # or_else.letter
137
+ # or_else.group do |g_|
138
+ # g_.lit("/")
139
+ # g_.digit(length: 5)
140
+ # g_.lit("/")
141
+ # end
142
+ # end
143
+ def oneof(name: nil, &block)
144
+ @components << Component.new(@components.count, name, [], Oneof.new(self, block))
145
+ end
146
+
147
+ ##
148
+ # A group of generators. Useful for {#oneof}.
149
+ #
150
+ # @param name [Symbol] the name for this node in the group
151
+ # @param block [Method] a subgenerator block
152
+ # @return [void]
153
+ def group(name: nil, &block)
154
+ @components << Component.new(@components.count, name, [], Group.new(@as_type, block))
155
+ end
156
+
157
+ ##
158
+ # Generate the value.
159
+ #
160
+ # @return [String] if +as_type+ is +:string+
161
+ def build
162
+ graph = build_graph
163
+ stack = build_stack(graph)
164
+ values = generate_values(stack)
165
+ convert(values)
166
+ end
167
+
168
+ private
169
+
170
+ ##
171
+ # Turn the components into a graph following dependencies.
172
+ #
173
+ # @return [Array<(Integer, Integer)>]
174
+ #
175
+ # Components can have dependencies. Here's one where a computation (b)
176
+ # depends on a value generated after it (c):
177
+ #
178
+ # @components = [
179
+ # Int.new(0, :a, 1, nil),
180
+ # Computed.new(1, :b, [:c]) { |c| c + 1 },
181
+ # Int.new(2, :c, 1, nil),
182
+ # ]
183
+ #
184
+ # We can think of a graph like so:
185
+ #
186
+ # (a) (c)
187
+ # | |
188
+ # | (b)
189
+ # \ /
190
+ # end
191
+ #
192
+ # Or in Mermaid:
193
+ #
194
+ # ```mermaid
195
+ # stateDiagram-v2
196
+ # a --> [*]
197
+ # c --> b
198
+ # b --> [*]
199
+ # ```
200
+ #
201
+ # This method builds that graph, using their positional locations as the
202
+ # ID. The end state is represented as +nil+. So continuing the example
203
+ # above, it will give this output:
204
+ #
205
+ # [
206
+ # [0, nil],
207
+ # [2, 1],
208
+ # [1, nil],
209
+ # ]
210
+ #
211
+ # Later we can look up the appropriate component by indexing into the
212
+ # +@components+ array.
213
+ def build_graph
214
+ graph = []
215
+
216
+ # rubocop:disable Style/CombinableLoops
217
+ @components.each do |component|
218
+ component.deps.each do |dep|
219
+ dep_component = @components.detect { |c| c.name == dep }
220
+ raise if dep_component.nil?
221
+
222
+ graph.push([dep_component.position, component.position])
223
+ end
224
+ end
225
+
226
+ @components.each do |component|
227
+ graph.push([component.position, nil]) if graph.none? { |(from, _to)| from == component.position }
228
+ end
229
+ # rubocop:enable Style/CombinableLoops
230
+
231
+ graph
232
+ end
233
+
234
+ ##
235
+ # Produce a stack of components to evaluate in sequence.
236
+ #
237
+ # @param graph [Array<(Integer, Integer)>]
238
+ # @return [Array<Array<Int>>]
239
+ #
240
+ # Now that we have a graph, we know enough to determine how to traverse the
241
+ # generators such that all dependencies are met.
242
+ #
243
+ # The initial stack is an array of all the free traversals to the goal
244
+ # (where the +to+ is +nil+).
245
+ #
246
+ # Loop over the top of the stack:
247
+ # - The next array is all the nodes that lead into the nodes atop the
248
+ # stack.
249
+ # - If the next array has values, push that onto the top of the stack.
250
+ # - If the next array is empty, we are done.
251
+ #
252
+ # For example, given the graph:
253
+ #
254
+ # [
255
+ # [0, nil],
256
+ # [2, 1],
257
+ # [1, nil],
258
+ # ]
259
+ #
260
+ # The initial stack is:
261
+ #
262
+ # [
263
+ # [0, 1]
264
+ # ]
265
+ #
266
+ # We loop over the top of the stack, +[0, 1]+, and find all the nodes of
267
+ # the graph that lead there. Nothing leads to +0+, and +2+ leads to +1+.
268
+ #
269
+ # Therefore, push +[2]+ to the top of the stack.
270
+ #
271
+ # Repeat for +[2]+. Nothing leads to +2+, so our new goal is +[]+. This is
272
+ # empty, so don't push it onto the stack. We are done.
273
+ #
274
+ # The final stack is:
275
+ #
276
+ # [
277
+ # [0, 1],
278
+ # [2]
279
+ # ]
280
+ def build_stack(graph)
281
+ require 'set'
282
+
283
+ terminals = graph.filter_map { |(from, to)| to.nil? && from }
284
+ stack = [terminals]
285
+ seen = Set.new(terminals)
286
+ deps = []
287
+
288
+ loop do
289
+ stack[-1].each do |e|
290
+ deps = graph.select { |(from, to)| to == e && !seen.include?(from) }.map do |from, _to|
291
+ seen << from
292
+ from
293
+ end
294
+ stack << deps if deps.any?
295
+ end
296
+
297
+ break if deps.empty?
298
+ end
299
+
300
+ stack
301
+ end
302
+
303
+ ##
304
+ # Turn a stack into a list of generated values.
305
+ #
306
+ # @param stack [Array<Array<Int>>]
307
+ # @return [Array<Object>] values sorted by desired order
308
+ #
309
+ # We start with a stack of components we need evaluated. We have been
310
+ # tracking these components by position, so first we need to look up the
311
+ # component in our list.
312
+ #
313
+ # From there we can get a list of all the dependencies for the component.
314
+ # These have already been evaluated, since +stack+ is sorted, so we fetch
315
+ # them.
316
+ #
317
+ # Since the stack was sorted by computation order, we must re-sort them
318
+ # into positional order at the end.
319
+ def generate_values(stack)
320
+ result = []
321
+
322
+ while (top = stack.pop)
323
+ top.each do |component_id|
324
+ component = @components[component_id]
325
+ raise if component.nil?
326
+
327
+ values = result.filter_map do |(_id, name, value)|
328
+ value if component.deps.include?(name)
329
+ end
330
+
331
+ result << [component.position, component.name, component.generator.generate(values)]
332
+ end
333
+ end
334
+
335
+ result.sort_by do |component_position, _, _|
336
+ component_position
337
+ end
338
+ end
339
+
340
+ ##
341
+ # @param values [Array<Object>]
342
+ # @return [String] if +@as_type+ is +:string+
343
+ # @raise [ArgumentError] if +@as_type+ is unsupported
344
+ def convert(values)
345
+ case @as_type
346
+ when :string
347
+ values.inject('') do |acc, (_, _, v)|
348
+ "#{acc}#{v}"
349
+ end
350
+ else
351
+ raise ArgumentError, "unknown return type: #{@as_type}"
352
+ end
353
+ end
354
+
355
+ class Group
356
+ def initialize(as_type, block)
357
+ @as_type = as_type
358
+ @block = block
359
+ end
360
+
361
+ def generate(_)
362
+ builder = Builder.new(@as_type)
363
+ @block.call(builder)
364
+ builder.build
365
+ end
366
+ end
367
+
368
+ class Oneof
369
+ def initialize(builder, block)
370
+ @block = block
371
+ @builder = builder
372
+ end
373
+
374
+ def generate(...)
375
+ subgens = OneofSelector.new(@builder)
376
+ @block.call(subgens)
377
+ subgens.sample
378
+ subgens.generate(...)
379
+ end
380
+
381
+ class OneofSelector
382
+ def initialize(builder)
383
+ @subgens = []
384
+ @builder = Builder.new(builder.as_type)
385
+ end
386
+
387
+ def method_missing(meth, *args, **kwargs, &block)
388
+ @subgens << [meth, args, kwargs, block]
389
+ end
390
+
391
+ def respond_to_missing?(method_name, include_private = false)
392
+ @builder.respond_to?(method_name, include_private)
393
+ end
394
+
395
+ def sample
396
+ (meth, args, kwargs, block) = Faker::Base.sample(@subgens)
397
+ @builder.send(meth, *args, **kwargs, &block)
398
+ end
399
+
400
+ def generate(...)
401
+ @builder.build
402
+ end
403
+ end
404
+ end
405
+
406
+ class Int
407
+ def initialize(length, ranges)
408
+ # Internally we store only an Enumerable of Range values. So if we are
409
+ # not given any Ranges but are given a length, we need to convert the
410
+ # length to a Range.
411
+ #
412
+ # If the length is `5`, that means we should compute the Range `10000..99999`.
413
+ # We can compute the lower end with a simple exponent: 10^4 = 10000.
414
+ # The upper end is one less than an exponent: 10^5 - 1 = 99999.
415
+ if ranges.nil?
416
+ lower = 10**(length - 1)
417
+ upper = (10**length) - 1
418
+ ranges = [lower..upper]
419
+ end
420
+
421
+ @ranges = ranges
422
+ end
423
+
424
+ def generate(_)
425
+ Faker::Base.rand(@ranges.sample(random: Faker::Config.random))
426
+ end
427
+ end
428
+
429
+ class Letter
430
+ def initialize(length, ranges)
431
+ @length = length
432
+ @ranges = ranges
433
+ end
434
+
435
+ def generate(_)
436
+ @length.times.inject('') do |acc, _index|
437
+ generated_character = char
438
+ "#{acc}#{generated_character}"
439
+ end
440
+ end
441
+
442
+ private
443
+
444
+ def char
445
+ if @ranges
446
+ case s = @ranges.sample(random: Faker::Config.random)
447
+ when Range
448
+ s.to_a.sample(random: Faker::Config.random)
449
+ when Array, Set
450
+ s.sample(random: Faker::Config.random)
451
+ else
452
+ raise ArgumentError, "unsupported range type: #{s.inspect}"
453
+ end
454
+ else
455
+ Faker::Base.sample(Faker::Base::Letters)
456
+ end
457
+ end
458
+ end
459
+
460
+ class Literal
461
+ def initialize(value)
462
+ @value = value
463
+ end
464
+
465
+ def generate(_)
466
+ @value
467
+ end
468
+ end
469
+
470
+ class Computed
471
+ def initialize(block)
472
+ @block = block
473
+ end
474
+
475
+ def generate(args)
476
+ @block.call(*args)
477
+ end
478
+ end
479
+ end
480
+ end
@@ -2,34 +2,29 @@
2
2
 
3
3
  module Faker
4
4
  class UniqueGenerator
5
- @marked_unique = Set.new # Holds names of generators with unique values
6
-
7
- class << self
8
- attr_reader :marked_unique
9
- end
10
-
11
5
  def initialize(generator, max_retries)
12
6
  @generator = generator
13
7
  @max_retries = max_retries
14
- @previous_results = Hash.new { |hash, key| hash[key] = Set.new }
15
8
  end
16
9
 
17
- # rubocop:disable Style/MethodMissingSuper
18
10
  def method_missing(name, *arguments)
19
11
  self.class.marked_unique.add(self)
20
12
 
21
13
  @max_retries.times do
22
14
  result = @generator.public_send(name, *arguments)
23
15
 
24
- next if @previous_results[[name, arguments]].include?(result)
16
+ next if previous_results[[name, arguments]].include?(result)
25
17
 
26
- @previous_results[[name, arguments]] << result
18
+ previous_results[[name, arguments]] << result
27
19
  return result
28
20
  end
29
21
 
30
22
  raise RetryLimitExceeded, "Retry limit exceeded for #{name}"
31
23
  end
32
- # rubocop:enable Style/MethodMissingSuper
24
+ # Have method_missing use ruby 2.x keywords if the method exists.
25
+ # This is necessary because the syntax for passing arguments (`...`)
26
+ # is invalid on versions before Ruby 2.7, so it can't be used.
27
+ ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
33
28
 
34
29
  def respond_to_missing?(method_name, include_private = false)
35
30
  method_name.to_s.start_with?('faker_') || super
@@ -37,8 +32,17 @@ module Faker
37
32
 
38
33
  RetryLimitExceeded = Class.new(StandardError)
39
34
 
35
+ def previous_results
36
+ Thread.current[:faker_unique_generator_previous_results] ||= {}
37
+ Thread.current[:faker_unique_generator_previous_results][@generator] ||= Hash.new { |hash, key| hash[key] = Set.new }
38
+ end
39
+
40
40
  def clear
41
- @previous_results.clear
41
+ previous_results.clear
42
+ end
43
+
44
+ def self.marked_unique
45
+ Thread.current[:faker_unique_generator_marked_unique] ||= Set.new
42
46
  end
43
47
 
44
48
  def self.clear
@@ -49,7 +53,7 @@ module Faker
49
53
  def exclude(name, arguments, values)
50
54
  values ||= []
51
55
  values.each do |value|
52
- @previous_results[[name, arguments]] << value
56
+ previous_results[[name, arguments]] << value
53
57
  end
54
58
  end
55
59
  end
@@ -9,7 +9,7 @@ Here's how to set it:
9
9
  Faker::Config.locale = 'zh-CN'
10
10
  ```
11
11
 
12
- It works so that once the Faker locale is set to a different location, the translate method will check that .yml file for an equivalent and use that data. If it doesn't exist, it defaults back to English. It uses the "i18n" gem to do this.
12
+ It works so that once the Faker locale is set to a different location, the translate method will check that `.yml` file for an equivalent and use that data. If it doesn't exist, it defaults back to English. It uses the [I18n](https://github.com/ruby-i18n/i18n) gem to do this.
13
13
 
14
14
  Using Chinese as an example, when the locale is set to Chinese and you attempt to call for hipster ipsem (which doesn't exist at the time of this writing), you will get English back. It checks the "zh-CH.yml" file, does not find "hipster" and then checks the "en.yml" file and returns a word from that array.
15
15
 
@@ -18,7 +18,9 @@ Faker::Config.locale = 'zh-CN'
18
18
  Faker::Hipster.word #=> "kogi"
19
19
  ```
20
20
 
21
- In order to update a locale with more translation features, simply add a new field to the .yml file that corresponds to an existing piece of functionality in the "en.yml" file. In this example, that would mean providing Chinese hipster words.
21
+ ## How to update a locale with more translations
22
+
23
+ To update a locale with more translation features, simply add a new field to the .yml file that corresponds to an existing piece of functionality in the "en.yml" file. In this example, that would mean providing Chinese hipster words.
22
24
 
23
25
  ```yaml
24
26
  # /lib/locales/zh-CN.yml
@@ -38,3 +40,17 @@ In our hypothetical example here, one would add something like this to the "test
38
40
  ```ruby
39
41
  assert Faker::Hipster.word.is_a? String
40
42
  ```
43
+
44
+ ## How to set the default locale for in threaded server environments
45
+
46
+ If you want to modify the default locale that will be used in new threads, set it in your configuration:
47
+
48
+ ```ruby
49
+ Faker::Config.default_locale = :pt
50
+ ```
51
+
52
+ In threaded server environments, e.g., Puma, locale per thread can be set as the following:
53
+
54
+ ```ruby
55
+ Faker::Config.locale = :es
56
+ ```
data/lib/locales/ar.yml CHANGED
@@ -25,6 +25,7 @@ ar:
25
25
  - "#{street_address}, #{city}"
26
26
  - "#{secondary_address} #{street_address}, #{city}"
27
27
  default_country: [المملكة العربية السعودية]
28
+ default_country_code: ["SA"]
28
29
  company:
29
30
  suffix: [شركة, وأبناؤه, المحدودة]
30
31
  buzzwords:
@@ -51,7 +52,11 @@ ar:
51
52
  - "#{University.prefix} #{Address.state} #{University.suffix}"
52
53
 
53
54
  name:
54
- first_name: [عمر, محمّد, أحمد, عبدالله, عبدالرحمن, عبدالرزّاق, عبدالصّمد, نوّاف , خالد, البراء, إسراء, فاطمة, مريم, سميّة, فوز, فوزية, خديجة, الخنساء, حنان, عبير, أنس, مالك, أبيّ, وائل, مشعل, وائل, أبو بكر, عمرو, عمّار, غدير, غادة, إيمان, نوف, خديجة, عائشة, عاتكة, شمس, دانة, ألهام, فهد, نايف, عبدالعزيز, عبدالمحسن, مهنّد, مصعب, حاتم, عبدالوهّاب, همّام, حمزة, خولة, خلود, ابتهال, أمة الله, صفية, خالدة, رابعة, بدوية, رؤية, سندس]
55
+ male_first_name: [حمزة, خالد, نوّاف, عبدالصّمد, عبدالرزّاق, عبدالرحمن, عبدالله, أحمد, محمّد, عمر, نايف, فهد, عمّار, عمرو, أبو بكر, وائل, وائل, مالك, عبدالوهّاب, حاتم, مصعب, مهنّد, عبدالمحسن, عبدالعزيز]
56
+ female_first_name: [عبير, حنان, الخنساء, خديجة, فوزية, فوز, سميّة, مريم, فاطمة, إسراء, ألهام, دانة, شمس, عائشة, خديجة, نوف, إيمان, غادة, غدير, سندس, رؤية, بدوية, رابعة, خالدة, صفية, ابتهال, خلود, خولة]
57
+ first_name:
58
+ - "#{female_first_name}"
59
+ - "#{male_first_name}"
55
60
  last_name: [الخالدي, العمريّ, القادريّ, التميمي, القحطاني, الأسمري, الأخضر, الزهراني, الغامدي, المالكيّ, مجدي, أبو ياسين, أبو خالد, إمام, نصريّ, الحكيم, الأمير, حسني, زكي, الجزايرلي, القلعاوي, الشريف, حلمي, الجريتلي, رشدي, شلبي, عيد, شاهين, المهندس, زايد, المهنّا, شوكت, سعيد, الصعيدي, فتحي, الصنعاني, العديني, بامحمّد, بامحفوظ, باسهل, العمودي, باصهيب, الدوعني, السقّاف, العطّاس, فاروق, خيّاط, كوسة, اللاحم, النابلسي, الغزاوي]
56
61
  prefix: [السيّد, السيّدة, الآنسة, الدكتور]
57
62
  name:
data/lib/locales/bg.yml CHANGED
@@ -9,13 +9,13 @@ bg:
9
9
  street_title: ['България', 'Демокрация', 'Патриарх Евтимий', 'Опълченска', 'Княз Борис', 'Народно събрание', 'Симеон Велики', 'Лъчезар Станчев', 'Г.М Димитров', 'Мария Габровска', 'Оборище', 'Иван Вазов', 'Бъднина', 'Орлинска', 'Николавеска', 'Цар Петър', 'Будапеща', 'Чехов', 'Три Уши', 'Вила', 'Първи Май', 'Тотлебен', 'Симеоновско Шосе', 'Васил Левски', 'Черни Връх', 'Йерусалим', 'Акация', 'Самодива', 'Георги Аспарухов', 'Иван Шишман', 'Славейков', 'Македония', 'Христо Ботев', 'Руски Паметник', 'Обзор', 'Свети Климент Охридски', 'Дъбница', 'Айдемир', 'Професор Марко Семов', 'Баку', 'Никола Габровски', '8 декември', 'Джон Ленън', 'Професор Кирил Попов', 'Петър Попов', 'Чавдар Мутафов', 'Могилата', 'Филип Кутев', 'Сребърна', 'Козяк', 'Емилиян Станев', 'Хенрик Ибсен', 'Бадемова Гора', 'Петко Тодоров', 'Тодор Каблешков', 'Пирин', 'Казбек', 'Света Марина', 'Приррода', 'Люляк', 'Лелинска Чука', 'Пчела', 'Белмекен', 'Мусала', 'Вихрен', 'Будилник', 'Горица', 'Европа', 'Любляна', 'Брюксел', 'Ливада', 'Букет', 'Нов Век', 'Чуката', 'Кустут', 'Овча Купел', 'Войводина Могила', 'Народно хоро', 'Камелия', 'Маестро Кънев', 'Петя Дубарова', 'Промишлена', 'Джеймс Баучер', 'Гайтанци']
10
10
  city_name: ['Айтос', 'Аксаково', 'Алфатар', 'Антоново', 'Априлци', 'Ардино', 'Асеновград', 'Ахелой', 'Ахтопол', 'Балчик', 'Банкя', 'Банско', 'Баня', 'Батак', 'Батановци', 'Белене', 'Белица', 'Белово', 'Белоградчик', 'Белослав', 'Берковица', 'Благоевград', 'Бобов Дол', 'Бобошево', 'Божурище', 'Бойчиновци', 'Болярово', 'Борово', 'Ботевград', 'Брацигово', 'Брегово', 'Брезник', 'Брезово', 'Брусарци', 'Бургас', 'Бухово', 'Българово', 'Бяла', 'Бяла', 'Бяла Слатина', 'Бяла Черква', 'Варна', 'Велики Преслав', 'Велико Търново', 'Велинград', 'Ветово', 'Ветрен', 'Видин', 'Враца', 'Вълчедръм', 'Вълчи Дол', 'Върбица', 'Вършец', 'Габрово', 'Генерал Тошево', 'Главиница', 'Глоджево', 'Годеч', 'Горна Оряховица', 'Гоце Делчев', 'Грамада', 'Гулянци', 'Гурково', 'Гълъбово', 'Две Могили', 'Дебелец', 'Девин', 'Девня', 'Джебел', 'Димитровград', 'Димово', 'Добринище', 'Добрич', 'Долна Баня', 'Долна Митрополия', 'Долна Оряховица', 'Долни Дъбник', 'Долни Чифлик', 'Доспат', 'Драгоман', 'Дряново', 'Дулово', 'Дунавци', 'Дупница', 'Дългопол', 'Елена', 'Елин Пелин', 'Елхово', 'Етрополе', 'Завет', 'Земен', 'Златарица', 'Златица', 'Златоград', 'Ивайловград', 'Игнатиево', 'Искър', 'Исперих', 'Ихтиман', 'Каблешково', 'Каварна', 'Казанлък', 'Калофер', 'Камено', 'Каолиново', 'Карлово', 'Карнобат', 'Каспичан', 'Кермен', 'Килифарево', 'Китен', 'Клисура', 'Кнежа', 'Козлодуй', 'Койнаре', 'Копривщица', 'Костандово', 'Костенец', 'Костинброд', 'Котел', 'Кочериново', 'Кресна', 'Криводол', 'Кричим', 'Крумовград', 'Крън', 'Кубрат', 'Куклен', 'Кула', 'Кърджали', 'Кюстендил', 'Левски', 'Летница', 'Ловеч', 'Лозница', 'Лом', 'Луковит', 'Лъки', 'Любимец', 'Лясковец', 'Мадан', 'Маджарово', 'Малко Търново', 'Мартен', 'Мездра', 'Мелник', 'Меричлери', 'Мизия', 'Момин Проход', 'Момчилград', 'Монтана', 'Мъглиж', 'Неделино', 'Несебър', 'Николаево', 'Никопол', 'Нова Загора', 'Нови Искър', 'Нови Пазар', 'Обзор', 'Омуртаг', 'Опака', 'Оряхово', 'Павел Баня', 'Павликени', 'Пазарджик', 'Панагюрище', 'Перник', 'Перущица', 'Петрич', 'Пещера', 'Пирдоп', 'Плачковци', 'Плевен', 'Плиска', 'Пловдив', 'Полски Тръмбеш', 'Поморие', 'Попово', 'Пордим', 'Правец', 'Приморско', 'Провадия', 'Първомай', 'Раднево', 'Радомир', 'Разград', 'Разлог', 'Ракитово', 'Раковски', 'Рила', 'Роман', 'Рудозем', 'Русе', 'Садово', 'Самоков', 'Сандански', 'Сапарева Баня', 'Свети Влас', 'Свиленград', 'Свищов', 'Своге', 'Севлиево', 'Сеново', 'Септември', 'Силистра', 'Симеоновград', 'Симитли', 'Славяново', 'Сливен', 'Сливница', 'Сливо Поле', 'Смолян', 'Смядово', 'Созопол', 'Сопот', 'София', 'Средец', 'Стамболийски', 'Стара Загора', 'Стражица', 'Стралджа', 'Стрелча', 'Суворово', 'Сунгурларе', 'Сухиндол', 'Съединение', 'Сърница', 'Твърдица', 'Тервел', 'Тетевен', 'Тополовград', 'Троян', 'Трън', 'Тръстеник', 'Трявна', 'Тутракан', 'Търговище', 'Угърчин', 'Хаджидимово', 'Харманли', 'Хасково', 'Хисаря', 'Цар Калоян', 'Царево', 'Чепеларе', 'Червен Бряг', 'Черноморец', 'Чипровци', 'Чирпан', 'Шабла', 'Шивачево', 'Шипка', 'Шумен', 'Ябланица', 'Якоруда', 'Ямбол']
11
11
  city:
12
- - "#{Address.city_name}"
12
+ - "#{city_name}"
13
13
  street_name:
14
- - "#{street_suffix} #{Address.street_title}"
14
+ - "#{street_suffix} #{street_title}"
15
15
  street_address:
16
16
  - "#{street_name}, #{building_number}"
17
17
  default_country: [България]
18
-
18
+ default_country_code: ["BG"]
19
19
  internet:
20
20
  free_email: [abv.bg, mail.bg, dir.bg, gmail.com, yahoo.com, hotmail.com]
21
21
  domain_suffix: [com, bg, info, бг, net, org]
data/lib/locales/ca.yml CHANGED
@@ -14,18 +14,10 @@ ca:
14
14
  - "#{female_prefix} #{female_first_name} #{last_name} #{last_name}"
15
15
  - "#{female_first_name} #{last_name} i #{last_name}"
16
16
  - "#{female_first_name} #{last_name} #{last_name}"
17
- - "#{female_first_name} #{last_name} #{last_name}"
18
- - "#{female_first_name} #{last_name} #{last_name}"
19
17
  - "#{male_prefix} #{male_first_name} #{last_name} #{last_name}"
20
18
  - "#{male_first_name} #{last_name} i #{last_name}"
21
19
  - "#{male_first_name} #{last_name} #{last_name}"
22
- - "#{male_first_name} #{last_name} #{last_name}"
23
- - "#{male_first_name} #{last_name} #{last_name}"
24
20
  name_with_middle:
25
- - "#{prefix} #{first_name} #{last_name} #{last_name}"
26
- - "#{first_name} #{last_name} #{last_name}"
27
- - "#{first_name} #{last_name} #{last_name}"
28
- - "#{first_name} #{last_name} #{last_name}"
29
21
  - "#{first_name} #{last_name} #{last_name}"
30
22
  color:
31
23
  name: [aiguamarina, albercoc, amarant, ambre, ametista, atzur, beix, bistre, blanc, blat, blau, blau cel, blau fosc, blau marí, blau reial, blauet, bronze, camussa, canyella, caqui, cardenal, carmesí, carmí, carnació, castany rogenc, celadont, ceruli, chartreuse, cian, cirera, corall, coure, crema, escarlata, granat, gris, gris fosc, groc, lavanda, lila, llima, magenta, malva, marró, morat, ocre, or, orquídia, panotxa, plata, porpra, préssec, pruna, verd, verd maragda, verd oliva, verd veronès, vermell, vermell fosc, vermelló, vinca, violat, vori]