faker 1.8.7 → 2.22.0

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 (614) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1612 -6
  3. data/History.md +4 -4
  4. data/License.txt +2 -2
  5. data/README.md +323 -132
  6. data/bin/faker +5 -0
  7. data/lib/faker/blockchain/aeternity.rb +70 -0
  8. data/lib/faker/blockchain/bitcoin.rb +60 -0
  9. data/lib/faker/blockchain/ethereum.rb +26 -0
  10. data/lib/faker/blockchain/tezos.rb +135 -0
  11. data/lib/faker/books/book.rb +61 -0
  12. data/lib/faker/books/culture_series.rb +83 -0
  13. data/lib/faker/books/dune.rb +132 -0
  14. data/lib/faker/books/lovecraft.rb +280 -0
  15. data/lib/faker/books/the_kingkiller_chronicle.rb +61 -0
  16. data/lib/faker/creature/animal.rb +22 -0
  17. data/lib/faker/creature/bird.rb +203 -0
  18. data/lib/faker/creature/cat.rb +50 -0
  19. data/lib/faker/creature/dog.rb +115 -0
  20. data/lib/faker/creature/horse.rb +37 -0
  21. data/lib/faker/default/address.rb +368 -0
  22. data/lib/faker/default/adjective.rb +35 -0
  23. data/lib/faker/default/alphanumeric.rb +73 -0
  24. data/lib/faker/default/ancient.rb +59 -0
  25. data/lib/faker/default/app.rb +77 -0
  26. data/lib/faker/default/appliance.rb +33 -0
  27. data/lib/faker/default/artist.rb +20 -0
  28. data/lib/faker/default/avatar.rb +60 -0
  29. data/lib/faker/default/bank.rb +207 -0
  30. data/lib/faker/default/barcode.rb +165 -0
  31. data/lib/faker/default/beer.rb +113 -0
  32. data/lib/faker/default/blood.rb +48 -0
  33. data/lib/faker/default/boolean.rb +26 -0
  34. data/lib/faker/default/bossa_nova.rb +33 -0
  35. data/lib/faker/default/business.rb +50 -0
  36. data/lib/faker/default/camera.rb +46 -0
  37. data/lib/faker/default/cannabis.rb +135 -0
  38. data/lib/faker/default/chile_rut.rb +98 -0
  39. data/lib/faker/default/chuck_norris.rb +25 -0
  40. data/lib/faker/default/code.rb +282 -0
  41. data/lib/faker/default/coffee.rb +82 -0
  42. data/lib/faker/default/coin.rb +33 -0
  43. data/lib/faker/default/color.rb +79 -0
  44. data/lib/faker/default/commerce.rb +171 -0
  45. data/lib/faker/default/company.rb +579 -0
  46. data/lib/faker/default/compass.rb +202 -0
  47. data/lib/faker/default/computer.rb +63 -0
  48. data/lib/faker/default/construction.rb +83 -0
  49. data/lib/faker/default/cosmere.rb +138 -0
  50. data/lib/faker/default/crypto.rb +61 -0
  51. data/lib/faker/default/crypto_coin.rb +94 -0
  52. data/lib/faker/default/currency.rb +46 -0
  53. data/lib/faker/default/date.rb +186 -0
  54. data/lib/faker/default/dc_comics.rb +70 -0
  55. data/lib/faker/default/demographic.rb +98 -0
  56. data/lib/faker/default/dessert.rb +48 -0
  57. data/lib/faker/default/device.rb +85 -0
  58. data/lib/faker/default/driving_licence.rb +131 -0
  59. data/lib/faker/default/drone.rb +332 -0
  60. data/lib/faker/default/educator.rb +102 -0
  61. data/lib/faker/default/electrical_components.rb +48 -0
  62. data/lib/faker/default/emotion.rb +33 -0
  63. data/lib/faker/default/esport.rb +72 -0
  64. data/lib/faker/default/file.rb +100 -0
  65. data/lib/faker/default/fillmurray.rb +45 -0
  66. data/lib/faker/default/finance.rb +102 -0
  67. data/lib/faker/default/food.rb +126 -0
  68. data/lib/faker/default/funny_name.rb +90 -0
  69. data/lib/faker/default/gender.rb +46 -0
  70. data/lib/faker/default/greek_philosophers.rb +33 -0
  71. data/lib/faker/default/hacker.rb +103 -0
  72. data/lib/faker/default/hipster.rb +194 -0
  73. data/lib/faker/default/hobby.rb +22 -0
  74. data/lib/faker/default/house.rb +33 -0
  75. data/lib/faker/default/id_number.rb +313 -0
  76. data/lib/faker/default/industry_segments.rb +61 -0
  77. data/lib/faker/default/internet.rb +625 -0
  78. data/lib/faker/default/internet_http.rb +48 -0
  79. data/lib/faker/default/invoice.rb +136 -0
  80. data/lib/faker/default/job.rb +61 -0
  81. data/lib/faker/default/json.rb +143 -0
  82. data/lib/faker/default/kpop.rb +85 -0
  83. data/lib/faker/default/lorem.rb +302 -0
  84. data/lib/faker/default/lorem_flickr.rb +138 -0
  85. data/lib/faker/default/lorem_pixel.rb +70 -0
  86. data/lib/faker/default/markdown.rb +175 -0
  87. data/lib/faker/default/marketing.rb +22 -0
  88. data/lib/faker/default/measurement.rb +207 -0
  89. data/lib/faker/default/military.rb +98 -0
  90. data/lib/faker/default/mountain.rb +33 -0
  91. data/lib/faker/default/name.rb +156 -0
  92. data/lib/faker/default/nation.rb +73 -0
  93. data/lib/faker/default/nato_phonetic_alphabet.rb +20 -0
  94. data/lib/faker/default/nhs.rb +57 -0
  95. data/lib/faker/default/number.rb +289 -0
  96. data/lib/faker/default/omniauth.rb +505 -0
  97. data/lib/faker/default/phone_number.rb +137 -0
  98. data/lib/faker/default/placeholdit.rb +63 -0
  99. data/lib/faker/default/programming_language.rb +33 -0
  100. data/lib/faker/default/relationship.rb +91 -0
  101. data/lib/faker/default/religion.rb +6 -0
  102. data/lib/faker/default/restaurant.rb +63 -0
  103. data/lib/faker/default/science.rb +154 -0
  104. data/lib/faker/default/slack_emoji.rb +124 -0
  105. data/lib/faker/default/source.rb +76 -0
  106. data/lib/faker/default/south_africa.rb +141 -0
  107. data/lib/faker/default/space.rb +191 -0
  108. data/lib/faker/default/string.rb +63 -0
  109. data/lib/faker/default/stripe.rb +142 -0
  110. data/lib/faker/default/subscription.rb +70 -0
  111. data/lib/faker/default/superhero.rb +72 -0
  112. data/lib/faker/default/tea.rb +41 -0
  113. data/lib/faker/default/team.rb +74 -0
  114. data/lib/faker/default/time.rb +177 -0
  115. data/lib/faker/default/twitter.rb +223 -0
  116. data/lib/faker/default/types.rb +182 -0
  117. data/lib/faker/default/university.rb +75 -0
  118. data/lib/faker/default/vehicle.rb +342 -0
  119. data/lib/faker/default/verb.rb +72 -0
  120. data/lib/faker/default/world_cup.rb +86 -0
  121. data/lib/faker/fantasy/tolkien.rb +67 -0
  122. data/lib/faker/games/clash_of_clans.rb +48 -0
  123. data/lib/faker/games/control.rb +113 -0
  124. data/lib/faker/games/dnd.rb +136 -0
  125. data/lib/faker/games/dota.rb +93 -0
  126. data/lib/faker/games/elder_scrolls.rb +139 -0
  127. data/lib/faker/games/fallout.rb +62 -0
  128. data/lib/faker/games/game.rb +48 -0
  129. data/lib/faker/games/half_life.rb +48 -0
  130. data/lib/faker/games/heroes.rb +61 -0
  131. data/lib/faker/games/heroes_of_the_storm.rb +72 -0
  132. data/lib/faker/games/league_of_legends.rb +87 -0
  133. data/lib/faker/games/minecraft.rb +113 -0
  134. data/lib/faker/games/myst.rb +74 -0
  135. data/lib/faker/games/overwatch.rb +48 -0
  136. data/lib/faker/games/pokemon.rb +48 -0
  137. data/lib/faker/games/sonic_the_hedgehog.rb +48 -0
  138. data/lib/faker/games/street_fighter.rb +61 -0
  139. data/lib/faker/games/super_mario.rb +48 -0
  140. data/lib/faker/games/super_smash_bros.rb +35 -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 +126 -0
  144. data/lib/faker/games/world_of_warcraft.rb +60 -0
  145. data/lib/faker/games/zelda.rb +62 -0
  146. data/lib/faker/japanese_media/conan.rb +48 -0
  147. data/lib/faker/japanese_media/doraemon.rb +48 -0
  148. data/lib/faker/japanese_media/dragon_ball.rb +48 -0
  149. data/lib/faker/japanese_media/fullmetal_alchemist_brotherhood.rb +48 -0
  150. data/lib/faker/japanese_media/kamen_rider.rb +102 -0
  151. data/lib/faker/japanese_media/naruto.rb +61 -0
  152. data/lib/faker/japanese_media/one_piece.rb +87 -0
  153. data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
  154. data/lib/faker/japanese_media/sword_art_online.rb +61 -0
  155. data/lib/faker/locations/australia.rb +47 -0
  156. data/lib/faker/movies/back_to_the_future.rb +49 -0
  157. data/lib/faker/movies/departed.rb +49 -0
  158. data/lib/faker/movies/ghostbusters.rb +49 -0
  159. data/lib/faker/movies/harry_potter.rb +87 -0
  160. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +106 -0
  161. data/lib/faker/movies/hobbit.rb +62 -0
  162. data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
  163. data/lib/faker/movies/lebowski.rb +48 -0
  164. data/lib/faker/movies/lord_of_the_rings.rb +49 -0
  165. data/lib/faker/movies/movie.rb +33 -0
  166. data/lib/faker/movies/princess_bride.rb +36 -0
  167. data/lib/faker/movies/room.rb +63 -0
  168. data/lib/faker/movies/star_wars.rb +273 -0
  169. data/lib/faker/movies/tron.rb +161 -0
  170. data/lib/faker/movies/v_for_vendetta.rb +50 -0
  171. data/lib/faker/music/grateful_dead.rb +37 -0
  172. data/lib/faker/music/hiphop.rb +48 -0
  173. data/lib/faker/music/music.rb +145 -0
  174. data/lib/faker/music/opera.rb +298 -0
  175. data/lib/faker/music/pearl_jam.rb +50 -0
  176. data/lib/faker/music/phish.rb +48 -0
  177. data/lib/faker/music/prince.rb +64 -0
  178. data/lib/faker/music/rock_band.rb +34 -0
  179. data/lib/faker/music/rush.rb +37 -0
  180. data/lib/faker/music/show.rb +49 -0
  181. data/lib/faker/music/umphreys_mcgee.rb +22 -0
  182. data/lib/faker/quotes/chiquito.rb +80 -0
  183. data/lib/faker/quotes/quote.rb +111 -0
  184. data/lib/faker/quotes/rajnikanth.rb +27 -0
  185. data/lib/faker/quotes/shakespeare.rb +111 -0
  186. data/lib/faker/religion/bible.rb +50 -0
  187. data/lib/faker/sports/basketball.rb +61 -0
  188. data/lib/faker/sports/football.rb +74 -0
  189. data/lib/faker/sports/mountaineering.rb +22 -0
  190. data/lib/faker/sports/volleyball.rb +74 -0
  191. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +37 -0
  192. data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
  193. data/lib/faker/tv_shows/bojack_horseman.rb +51 -0
  194. data/lib/faker/tv_shows/breaking_bad.rb +37 -0
  195. data/lib/faker/tv_shows/brooklyn_nine_nine.rb +38 -0
  196. data/lib/faker/tv_shows/buffy.rb +89 -0
  197. data/lib/faker/tv_shows/community.rb +38 -0
  198. data/lib/faker/tv_shows/dr_who.rb +115 -0
  199. data/lib/faker/tv_shows/dumb_and_dumber.rb +51 -0
  200. data/lib/faker/tv_shows/family_guy.rb +51 -0
  201. data/lib/faker/tv_shows/final_space.rb +51 -0
  202. data/lib/faker/tv_shows/friends.rb +50 -0
  203. data/lib/faker/tv_shows/futurama.rb +65 -0
  204. data/lib/faker/tv_shows/game_of_thrones.rb +77 -0
  205. data/lib/faker/tv_shows/hey_arnold.rb +50 -0
  206. data/lib/faker/tv_shows/how_i_met_your_mother.rb +64 -0
  207. data/lib/faker/tv_shows/michael_scott.rb +23 -0
  208. data/lib/faker/tv_shows/new_girl.rb +38 -0
  209. data/lib/faker/tv_shows/parks_and_rec.rb +37 -0
  210. data/lib/faker/tv_shows/rick_and_morty.rb +51 -0
  211. data/lib/faker/tv_shows/ru_paul.rb +37 -0
  212. data/lib/faker/tv_shows/seinfeld.rb +51 -0
  213. data/lib/faker/tv_shows/silicon_valley.rb +118 -0
  214. data/lib/faker/tv_shows/simpsons.rb +65 -0
  215. data/lib/faker/tv_shows/south_park.rb +38 -0
  216. data/lib/faker/tv_shows/star_trek.rb +63 -0
  217. data/lib/faker/tv_shows/stargate.rb +51 -0
  218. data/lib/faker/tv_shows/stranger_things.rb +38 -0
  219. data/lib/faker/tv_shows/suits.rb +37 -0
  220. data/lib/faker/tv_shows/supernatural.rb +48 -0
  221. data/lib/faker/tv_shows/the_expanse.rb +63 -0
  222. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +64 -0
  223. data/lib/faker/tv_shows/the_it_crowd.rb +64 -0
  224. data/lib/faker/tv_shows/the_office.rb +37 -0
  225. data/lib/faker/tv_shows/the_thick_of_it.rb +51 -0
  226. data/lib/faker/tv_shows/twin_peaks.rb +51 -0
  227. data/lib/faker/tv_shows/venture_bros.rb +65 -0
  228. data/lib/faker/version.rb +4 -2
  229. data/lib/faker.rb +150 -61
  230. data/lib/helpers/base58.rb +22 -0
  231. data/lib/helpers/char.rb +31 -35
  232. data/lib/helpers/unique_generator.rb +28 -2
  233. data/lib/locales/README.md +8 -9
  234. data/lib/locales/ar.yml +106 -0
  235. data/lib/locales/bg.yml +5 -2
  236. data/lib/locales/ca-CAT.yml +1 -1
  237. data/lib/locales/ca.yml +2 -4
  238. data/lib/locales/da-DK.yml +10 -6
  239. data/lib/locales/de-AT.yml +14 -5
  240. data/lib/locales/de-CH.yml +1696 -1
  241. data/lib/locales/de.yml +26 -12
  242. data/lib/locales/ee.yml +61 -0
  243. data/lib/locales/en/address.yml +500 -3
  244. data/lib/locales/en/adjective.yml +179 -0
  245. data/lib/locales/en/animal.yml +6 -0
  246. data/lib/locales/en/appliance.yml +5 -0
  247. data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
  248. data/lib/locales/en/australia.yml +107 -0
  249. data/lib/locales/en/bank.yml +275 -60
  250. data/lib/locales/en/barcode.yml +24 -0
  251. data/lib/locales/en/basketball.yml +99 -0
  252. data/lib/locales/en/beer.yml +2 -1
  253. data/lib/locales/en/bible.yml +90 -0
  254. data/lib/locales/en/big_bang_theory.yml +38 -0
  255. data/lib/locales/en/bird.yml +1281 -0
  256. data/lib/locales/en/blood.yml +13 -0
  257. data/lib/locales/en/bojack_horseman.yml +6 -0
  258. data/lib/locales/en/book.yml +487 -3
  259. data/lib/locales/en/brooklyn_nine_nine.yml +35 -0
  260. data/lib/locales/en/buffy.yml +260 -0
  261. data/lib/locales/en/camera.yml +611 -0
  262. data/lib/locales/en/cannabis.yml +13 -0
  263. data/lib/locales/en/cat.yml +5 -4
  264. data/lib/locales/en/chiquito.yml +64 -0
  265. data/lib/locales/en/clash_of_clan.yml +101 -0
  266. data/lib/locales/en/coffee.yml +1 -1
  267. data/lib/locales/en/coin.yml +6 -0
  268. data/lib/locales/en/color.yml +1 -1
  269. data/lib/locales/en/commerce.yml +17 -0
  270. data/lib/locales/en/community.yml +33 -0
  271. data/lib/locales/en/company.yml +3 -2
  272. data/lib/locales/en/computer.yml +36 -0
  273. data/lib/locales/en/conan.yml +171 -0
  274. data/lib/locales/en/construction.yml +425 -0
  275. data/lib/locales/en/control.yml +247 -0
  276. data/lib/locales/en/cosmere.yml +57 -0
  277. data/lib/locales/en/crypto_coin.yml +25 -0
  278. data/lib/locales/en/culture_series.yml +307 -0
  279. data/lib/locales/en/currency.yml +6 -0
  280. data/lib/locales/en/dc_comics.yml +52 -0
  281. data/lib/locales/en/demographic.yml +218 -5
  282. data/lib/locales/en/departed.yml +50 -0
  283. data/lib/locales/en/dessert.yml +3 -3
  284. data/lib/locales/en/device.yml +115 -0
  285. data/lib/locales/en/dnd.yml +451 -0
  286. data/lib/locales/en/dog.yml +9 -9
  287. data/lib/locales/en/doraemon.yml +286 -0
  288. data/lib/locales/en/dota.yml +693 -0
  289. data/lib/locales/en/dr_who.yml +6 -2
  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/dumb_and_dumber.yml +1 -1
  294. data/lib/locales/en/dune.yml +270 -131
  295. data/lib/locales/en/educator.yml +76 -6
  296. data/lib/locales/en/elder_scrolls.yml +583 -5
  297. data/lib/locales/en/electrical_components.yml +6 -0
  298. data/lib/locales/en/emotion.yml +480 -0
  299. data/lib/locales/en/esport.yml +5 -5
  300. data/lib/locales/en/fallout.yml +313 -134
  301. data/lib/locales/en/final_space.yml +37 -0
  302. data/lib/locales/en/finance.yml +137 -0
  303. data/lib/locales/en/fma_brotherhood.yml +78 -0
  304. data/lib/locales/en/food.yml +1054 -6
  305. data/lib/locales/en/football.yml +8 -0
  306. data/lib/locales/en/fresh_prince_of_bel_air.yml +1 -1
  307. data/lib/locales/en/friends.yml +3 -3
  308. data/lib/locales/en/futurama.yml +344 -0
  309. data/lib/locales/en/game.yml +294 -0
  310. data/lib/locales/en/gender.yml +6 -0
  311. data/lib/locales/en/ghostbusters.yml +91 -0
  312. data/lib/locales/en/grateful_dead.yml +48 -0
  313. data/lib/locales/en/greek_philosophers.yml +26 -0
  314. data/lib/locales/en/half_life.yml +88 -0
  315. data/lib/locales/en/harry_potter.yml +2 -1
  316. data/lib/locales/en/heroes.yml +411 -0
  317. data/lib/locales/en/heroes_of_the_storm.yml +134 -0
  318. data/lib/locales/en/hobby.yml +171 -0
  319. data/lib/locales/en/horse.yml +6 -0
  320. data/lib/locales/en/house.yml +5 -0
  321. data/lib/locales/en/how_to_train_your_dragon.yml +174 -0
  322. data/lib/locales/en/industry_segments.yml +7 -0
  323. data/lib/locales/en/internet.yml +137 -3
  324. data/lib/locales/en/invoice.yml +6 -0
  325. data/lib/locales/en/jack_handey.yml +54 -0
  326. data/lib/locales/en/job.yml +2 -2
  327. data/lib/locales/en/kamen_rider.yml +452 -0
  328. data/lib/locales/en/kpop.yml +8 -8
  329. data/lib/locales/en/league_of_legends.yml +287 -7
  330. data/lib/locales/en/lebowski.yml +1 -1
  331. data/lib/locales/en/lorem.yml +6 -0
  332. data/lib/locales/en/lovecraft.yml +76 -6
  333. data/lib/locales/en/marketing.yml +4 -0
  334. data/lib/locales/en/michael_scott.yml +45 -0
  335. data/lib/locales/en/military.yml +182 -0
  336. data/lib/locales/en/minecraft.yml +663 -0
  337. data/lib/locales/en/mountain.yml +171 -0
  338. data/lib/locales/en/mountaineering.yml +14 -0
  339. data/lib/locales/en/movie.yml +194 -2
  340. data/lib/locales/en/music.yml +461 -1
  341. data/lib/locales/en/myst.yml +104 -0
  342. data/lib/locales/en/name.yml +15 -14
  343. data/lib/locales/en/naruto.yml +230 -0
  344. data/lib/locales/en/nation.yml +11 -0
  345. data/lib/locales/en/nato_phonetic_alphabet.yml +4 -0
  346. data/lib/locales/en/new_girl.yml +40 -0
  347. data/lib/locales/en/one_piece.yml +2 -2
  348. data/lib/locales/en/opera.yml +340 -0
  349. data/lib/locales/en/overwatch.yml +2652 -33
  350. data/lib/locales/en/parks_and_rec.yml +7 -0
  351. data/lib/locales/en/pearl_jam.yml +213 -0
  352. data/lib/locales/en/phish.yml +395 -0
  353. data/lib/locales/en/phone_number.yml +2 -1
  354. data/lib/locales/en/pokemon.yml +419 -5
  355. data/lib/locales/en/prince.yml +227 -0
  356. data/lib/locales/en/princess_bride.yml +5 -0
  357. data/lib/locales/en/programming_language.yml +2 -1
  358. data/lib/locales/en/quote.yml +695 -0
  359. data/lib/locales/en/rajnikanth.yml +77 -0
  360. data/lib/locales/en/relationship.yml +10 -0
  361. data/lib/locales/en/restaurant.yml +129 -0
  362. data/lib/locales/en/rock_band.yml +1 -0
  363. data/lib/locales/en/room.yml +68 -0
  364. data/lib/locales/en/rupaul.yml +51 -21
  365. data/lib/locales/en/rush.yml +32 -0
  366. data/lib/locales/en/science.yml +481 -2
  367. data/lib/locales/en/seinfeld.yml +2 -1
  368. data/lib/locales/en/shakespeare.yml +23 -26
  369. data/lib/locales/en/show.yml +597 -0
  370. data/lib/locales/en/silicon_valley.yml +1 -0
  371. data/lib/locales/en/simpsons.yml +668 -0
  372. data/lib/locales/en/sonic_the_hedgehog.yml +410 -0
  373. data/lib/locales/en/source.yml +46 -0
  374. data/lib/locales/en/south_park.yml +5 -0
  375. data/lib/locales/en/space.yml +3 -2
  376. data/lib/locales/en/star_trek.yml +1 -1
  377. data/lib/locales/en/star_wars.yml +568 -210
  378. data/lib/locales/en/stargate.yml +1 -2
  379. data/lib/locales/en/stranger_thing.yml +36 -0
  380. data/lib/locales/en/street_fighter.yml +1524 -0
  381. data/lib/locales/en/stripe.yml +42 -0
  382. data/lib/locales/en/studio_ghibli.yml +107 -0
  383. data/lib/locales/en/subscription.yml +8 -0
  384. data/lib/locales/en/suits.yml +45 -0
  385. data/lib/locales/en/super_mario.yml +58 -0
  386. data/lib/locales/en/super_smash_bros.yml +223 -0
  387. data/lib/locales/en/supernatural.yml +141 -0
  388. data/lib/locales/en/sword_art_online.yml +334 -0
  389. data/lib/locales/en/tea.yml +172 -0
  390. data/lib/locales/en/team.yml +1 -1
  391. data/lib/locales/en/the_expanse.yml +7 -0
  392. data/lib/locales/en/the_it_crowd.yml +155 -0
  393. data/lib/locales/en/the_kingkiller_chronicle.yml +56 -0
  394. data/lib/locales/en/the_office.yml +86 -0
  395. data/lib/locales/en/tolkien.yml +2453 -0
  396. data/lib/locales/en/touhou.yml +839 -0
  397. data/lib/locales/en/tron.yml +227 -0
  398. data/lib/locales/en/vehicle.yml +77 -49
  399. data/lib/locales/en/verbs.yml +8 -0
  400. data/lib/locales/en/volleyball.yml +501 -0
  401. data/lib/locales/en/warhammer_fantasy.yml +582 -0
  402. data/lib/locales/en/witcher.yml +428 -8
  403. data/lib/locales/en/world_cup.yml +271 -0
  404. data/lib/locales/en/world_of_warcraft.yml +124 -5
  405. data/lib/locales/en/zelda.yml +964 -5
  406. data/lib/locales/en-AU.yml +50 -8
  407. data/lib/locales/en-CA.yml +27 -2
  408. data/lib/locales/en-GB.yml +2 -1
  409. data/lib/locales/en-IND.yml +5 -2
  410. data/lib/locales/en-MS.yml +8 -1
  411. data/lib/locales/en-NEP.yml +6 -3
  412. data/lib/locales/en-NG.yml +2 -0
  413. data/lib/locales/en-NZ.yml +140 -17
  414. data/lib/locales/en-PAK.yml +4 -2
  415. data/lib/locales/en-SG.yml +6 -1
  416. data/lib/locales/en-TH.yml +360 -0
  417. data/lib/locales/en-US.yml +38 -10
  418. data/lib/locales/en-ZA.yml +114 -17
  419. data/lib/locales/en-au-ocker.yml +2 -1
  420. data/lib/locales/en.yml +0 -1
  421. data/lib/locales/es-AR.yml +4600 -0
  422. data/lib/locales/es-MX.yml +17 -1
  423. data/lib/locales/es.yml +75 -1
  424. data/lib/locales/fa.yml +6 -0
  425. data/lib/locales/fi-FI.yml +12 -6
  426. data/lib/locales/fr/address.yml +21 -0
  427. data/lib/locales/fr/adjective.yml +266 -0
  428. data/lib/locales/fr/animal.yml +5 -0
  429. data/lib/locales/fr/appliance.yml +4 -0
  430. data/lib/locales/fr/book.yml +7 -0
  431. data/lib/locales/fr/color.yml +4 -0
  432. data/lib/locales/fr/company.yml +17 -0
  433. data/lib/locales/fr/compass.yml +23 -0
  434. data/lib/locales/fr/demographic.yml +4 -0
  435. data/lib/locales/fr/gender.yml +6 -0
  436. data/lib/locales/fr/internet.yml +5 -0
  437. data/lib/locales/fr/lorem.yml +5 -0
  438. data/lib/locales/fr/measurement.yml +7 -0
  439. data/lib/locales/fr/name.yml +21 -0
  440. data/lib/locales/fr/phone_number.yml +7 -0
  441. data/lib/locales/fr/pokemon.yml +7 -0
  442. data/lib/locales/fr-CA.yml +107 -0
  443. data/lib/locales/fr-CH.yml +78 -0
  444. data/lib/locales/fr.yml +1 -66
  445. data/lib/locales/he.yml +2 -0
  446. data/lib/locales/hy.yml +411 -0
  447. data/lib/locales/id.yml +7 -2
  448. data/lib/locales/it.yml +15 -3
  449. data/lib/locales/ja/README.md +13 -0
  450. data/lib/locales/ja/address.yml +120539 -0
  451. data/lib/locales/ja/adjective.yml +148 -0
  452. data/lib/locales/ja/ancient.yml +4 -0
  453. data/lib/locales/ja/animal.yml +5 -0
  454. data/lib/locales/ja/bank.yml +4 -0
  455. data/lib/locales/ja/book.yml +7 -0
  456. data/lib/locales/ja/cat.yml +5 -0
  457. data/lib/locales/ja/coffee.yml +4 -0
  458. data/lib/locales/ja/color.yml +4 -0
  459. data/lib/locales/ja/commerce.yml +11 -0
  460. data/lib/locales/ja/company.yml +8 -0
  461. data/lib/locales/ja/dog.yml +6 -0
  462. data/lib/locales/ja/emotion.yml +51 -0
  463. data/lib/locales/ja/food.yml +4 -0
  464. data/lib/locales/ja/gender.yml +4 -0
  465. data/lib/locales/ja/lorem.yml +9 -0
  466. data/lib/locales/ja/name.yml +13 -0
  467. data/lib/locales/ja/naruto.yml +230 -0
  468. data/lib/locales/ja/overwatch.yml +5 -0
  469. data/lib/locales/ja/phone_number.yml +7 -0
  470. data/lib/locales/ja/pokemon.yml +7 -0
  471. data/lib/locales/ja/relationship.yml +10 -0
  472. data/lib/locales/ja/restaurant.yml +11 -0
  473. data/lib/locales/ja/space.yml +5 -0
  474. data/lib/locales/ja/studio_ghibli.yml +112 -0
  475. data/lib/locales/ja/subscription.yml +8 -0
  476. data/lib/locales/ja/super_mario.yml +9 -0
  477. data/lib/locales/ja/super_smash_bros.yml +8 -0
  478. data/lib/locales/ja/university.yml +9 -0
  479. data/lib/locales/ja/zelda.yml +5 -0
  480. data/lib/locales/ko.yml +96 -2
  481. data/lib/locales/lt.yml +35 -0
  482. data/lib/locales/lv.yml +55 -0
  483. data/lib/locales/mi-NZ.yml +281 -0
  484. data/lib/locales/nb-NO.yml +15 -6
  485. data/lib/locales/nl.yml +13 -4
  486. data/lib/locales/no.yml +7 -0
  487. data/lib/locales/pl.yml +13 -2
  488. data/lib/locales/pt-BR.yml +631 -18
  489. data/lib/locales/pt.yml +16 -6
  490. data/lib/locales/ru.yml +45 -2
  491. data/lib/locales/sk.yml +21 -13
  492. data/lib/locales/sv.yml +15 -7
  493. data/lib/locales/th.yml +380 -0
  494. data/lib/locales/tr.yml +14 -0
  495. data/lib/locales/uk.yml +17 -4
  496. data/lib/locales/vi.yml +7 -2
  497. data/lib/locales/zh-CN.yml +4 -4
  498. data/lib/locales/zh-TW.yml +3 -1
  499. metadata +532 -128
  500. data/lib/extensions/array.rb +0 -22
  501. data/lib/extensions/symbol.rb +0 -9
  502. data/lib/faker/address.rb +0 -67
  503. data/lib/faker/ancient.rb +0 -21
  504. data/lib/faker/app.rb +0 -23
  505. data/lib/faker/aqua_teen_hunger_force.rb +0 -9
  506. data/lib/faker/artist.rb +0 -9
  507. data/lib/faker/avatar.rb +0 -15
  508. data/lib/faker/back_to_the_future.rb +0 -17
  509. data/lib/faker/bank.rb +0 -37
  510. data/lib/faker/beer.rb +0 -40
  511. data/lib/faker/bitcoin.rb +0 -48
  512. data/lib/faker/book.rb +0 -23
  513. data/lib/faker/boolean.rb +0 -9
  514. data/lib/faker/bossa_nova.rb +0 -13
  515. data/lib/faker/breaking_bad.rb +0 -16
  516. data/lib/faker/business.rb +0 -22
  517. data/lib/faker/cat.rb +0 -19
  518. data/lib/faker/chuck_norris.rb +0 -11
  519. data/lib/faker/code.rb +0 -147
  520. data/lib/faker/coffee.rb +0 -29
  521. data/lib/faker/color.rb +0 -30
  522. data/lib/faker/commerce.rb +0 -64
  523. data/lib/faker/company.rb +0 -162
  524. data/lib/faker/compass.rb +0 -65
  525. data/lib/faker/crypto.rb +0 -19
  526. data/lib/faker/date.rb +0 -80
  527. data/lib/faker/demographic.rb +0 -35
  528. data/lib/faker/dessert.rb +0 -19
  529. data/lib/faker/dog.rb +0 -39
  530. data/lib/faker/dr_who.rb +0 -34
  531. data/lib/faker/dragon_ball.rb +0 -9
  532. data/lib/faker/dumb_and_dumber.rb +0 -17
  533. data/lib/faker/dune.rb +0 -54
  534. data/lib/faker/educator.rb +0 -23
  535. data/lib/faker/elder_scrolls.rb +0 -21
  536. data/lib/faker/esport.rb +0 -25
  537. data/lib/faker/fallout.rb +0 -21
  538. data/lib/faker/family_guy.rb +0 -17
  539. data/lib/faker/file.rb +0 -24
  540. data/lib/faker/fillmurray.rb +0 -14
  541. data/lib/faker/finance.rb +0 -28
  542. data/lib/faker/food.rb +0 -25
  543. data/lib/faker/friends.rb +0 -17
  544. data/lib/faker/funny_name.rb +0 -43
  545. data/lib/faker/game_of_thrones.rb +0 -25
  546. data/lib/faker/hacker.rb +0 -45
  547. data/lib/faker/harry_potter.rb +0 -25
  548. data/lib/faker/hey_arnold.rb +0 -17
  549. data/lib/faker/hipster.rb +0 -59
  550. data/lib/faker/hitchhikers_guide_to_the_galaxy.rb +0 -33
  551. data/lib/faker/hobbit.rb +0 -21
  552. data/lib/faker/how_i_met_your_mother.rb +0 -21
  553. data/lib/faker/id_number.rb +0 -36
  554. data/lib/faker/internet.rb +0 -178
  555. data/lib/faker/job.rb +0 -16
  556. data/lib/faker/kpop.rb +0 -29
  557. data/lib/faker/league_of_legends.rb +0 -29
  558. data/lib/faker/lebowski.rb +0 -17
  559. data/lib/faker/lord_of_the_rings.rb +0 -13
  560. data/lib/faker/lorem.rb +0 -68
  561. data/lib/faker/lorem_pixel.rb +0 -21
  562. data/lib/faker/lovecraft.rb +0 -73
  563. data/lib/faker/markdown.rb +0 -67
  564. data/lib/faker/matz.rb +0 -9
  565. data/lib/faker/measurement.rb +0 -127
  566. data/lib/faker/most_interesting_man_in_the_world.rb +0 -9
  567. data/lib/faker/movie.rb +0 -9
  568. data/lib/faker/music.rb +0 -33
  569. data/lib/faker/name.rb +0 -46
  570. data/lib/faker/number.rb +0 -86
  571. data/lib/faker/omniauth.rb +0 -340
  572. data/lib/faker/one_piece.rb +0 -29
  573. data/lib/faker/overwatch.rb +0 -17
  574. data/lib/faker/phone_number.rb +0 -44
  575. data/lib/faker/placeholdit.rb +0 -20
  576. data/lib/faker/pokemon.rb +0 -17
  577. data/lib/faker/programming_language.rb +0 -13
  578. data/lib/faker/rick_and_morty.rb +0 -17
  579. data/lib/faker/robin.rb +0 -9
  580. data/lib/faker/rock_band.rb +0 -9
  581. data/lib/faker/rupaul.rb +0 -15
  582. data/lib/faker/science.rb +0 -15
  583. data/lib/faker/seinfeld.rb +0 -13
  584. data/lib/faker/shakespeare.rb +0 -40
  585. data/lib/faker/silicon_valley.rb +0 -33
  586. data/lib/faker/simpsons.rb +0 -22
  587. data/lib/faker/slack_emoji.rb +0 -43
  588. data/lib/faker/space.rb +0 -58
  589. data/lib/faker/star_trek.rb +0 -21
  590. data/lib/faker/star_wars.rb +0 -102
  591. data/lib/faker/stargate.rb +0 -17
  592. data/lib/faker/superhero.rb +0 -25
  593. data/lib/faker/team.rb +0 -24
  594. data/lib/faker/the_fresh_prince_of_bel_air.rb +0 -17
  595. data/lib/faker/the_thick_of_it.rb +0 -17
  596. data/lib/faker/time.rb +0 -51
  597. data/lib/faker/twin_peaks.rb +0 -17
  598. data/lib/faker/twitter.rb +0 -172
  599. data/lib/faker/types.rb +0 -93
  600. data/lib/faker/umphreys_mcgee.rb +0 -9
  601. data/lib/faker/university.rb +0 -28
  602. data/lib/faker/v_for_vendetta.rb +0 -17
  603. data/lib/faker/vehicle.rb +0 -39
  604. data/lib/faker/venture_bros.rb +0 -21
  605. data/lib/faker/witcher.rb +0 -29
  606. data/lib/faker/world_of_warcraft.rb +0 -13
  607. data/lib/faker/yoda.rb +0 -10
  608. data/lib/faker/zelda.rb +0 -22
  609. data/lib/locales/en/hobbit.yml +0 -19
  610. data/lib/locales/en/lord_of_the_rings.yml +0 -5
  611. data/lib/locales/en/matz.yml +0 -28
  612. data/lib/locales/en/most_interesting_man_in_the_world.yml +0 -106
  613. data/lib/locales/en/robin.yml +0 -4
  614. data/lib/locales/ja.yml +0 -47
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class TvShows
5
+ class VentureBros < Base
6
+ flexible :venture_bros
7
+
8
+ class << self
9
+ ##
10
+ # Produces a character from The Venture Bros.
11
+ #
12
+ # @return [String]
13
+ #
14
+ # @example
15
+ # Faker::TvShows::VentureBros.character #=> "Scaramantula"
16
+ #
17
+ # @faker.version 1.8.3
18
+ def character
19
+ fetch('venture_bros.character')
20
+ end
21
+
22
+ ##
23
+ # Produces an organization from The Venture Bros.
24
+ #
25
+ # @return [String]
26
+ #
27
+ # @example
28
+ # Faker::TvShows::VentureBros.organization
29
+ # #=> "Guild of Calamitous Intent"
30
+ #
31
+ # @faker.version 1.8.3
32
+ def organization
33
+ fetch('venture_bros.organization')
34
+ end
35
+
36
+ ##
37
+ # Produces a vehicle from The Venture Bros.
38
+ #
39
+ # @return [String]
40
+ #
41
+ # @example
42
+ # Faker::TvShows::VentureBros.vehicle #=> "Monarchmobile"
43
+ #
44
+ # @faker.version 1.8.3
45
+ def vehicle
46
+ fetch('venture_bros.vehicle')
47
+ end
48
+
49
+ ##
50
+ # Produces a quote from The Venture Bros.
51
+ #
52
+ # @return [String]
53
+ #
54
+ # @example
55
+ # Faker::TvShows::VentureBros.quote
56
+ # #=> "Revenge, like gazpacho soup, is best served cold, precise, and merciless."
57
+ #
58
+ # @faker.version 1.8.3
59
+ def quote
60
+ fetch('venture_bros.quote')
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
data/lib/faker/version.rb CHANGED
@@ -1,3 +1,5 @@
1
- module Faker #:nodoc:
2
- VERSION = "1.8.7"
1
+ # frozen_string_literal: true
2
+
3
+ module Faker # :nodoc:
4
+ VERSION = '2.22.0'
3
5
  end
data/lib/faker.rb CHANGED
@@ -1,32 +1,27 @@
1
- # -*- coding: utf-8 -*-
2
- mydir = File.expand_path(File.dirname(__FILE__))
1
+ # frozen_string_literal: true
3
2
 
4
- begin
5
- require 'psych'
6
- rescue LoadError
7
- end
3
+ mydir = __dir__
8
4
 
5
+ require 'psych'
9
6
  require 'i18n'
10
7
  require 'set' # Fixes a bug in i18n 0.6.11
11
8
 
12
- if I18n.respond_to?(:enforce_available_locales=)
13
- I18n.enforce_available_locales = true
14
- end
9
+ Dir.glob(File.join(mydir, 'helpers', '*.rb')).sort.each { |file| require file }
10
+
15
11
  I18n.load_path += Dir[File.join(mydir, 'locales', '**/*.yml')]
16
12
  I18n.reload! if I18n.backend.initialized?
17
13
 
18
-
19
14
  module Faker
20
- class Config
15
+ module Config
21
16
  @locale = nil
22
17
  @random = nil
23
18
 
24
19
  class << self
25
- attr_writer :locale
26
- attr_writer :random
20
+ attr_writer :locale, :random
27
21
 
28
22
  def locale
29
- @locale || I18n.locale
23
+ # Because I18n.locale defaults to :en, if we don't have :en in our available_locales, errors will happen
24
+ @locale || (I18n.available_locales.include?(I18n.locale) ? I18n.locale : I18n.available_locales.first)
30
25
  end
31
26
 
32
27
  def own_locale
@@ -34,7 +29,7 @@ module Faker
34
29
  end
35
30
 
36
31
  def random
37
- @random || Random::DEFAULT
32
+ @random || Random
38
33
  end
39
34
  end
40
35
  end
@@ -42,12 +37,17 @@ module Faker
42
37
  class Base
43
38
  Numbers = Array(0..9)
44
39
  ULetters = Array('A'..'Z')
45
- Letters = ULetters + Array('a'..'z')
40
+ LLetters = Array('a'..'z')
41
+ Letters = ULetters + LLetters
46
42
 
47
43
  class << self
48
- ## make sure numerify results doesn’t start with a zero
49
- def numerify(number_string)
50
- number_string.sub(/#/) { (rand(9)+1).to_s }.gsub(/#/) { rand(10).to_s }
44
+ NOT_GIVEN = Object.new
45
+
46
+ ## by default numerify results do not start with a zero
47
+ def numerify(number_string, leading_zero: false)
48
+ return number_string.gsub(/#/) { rand(10).to_s } if leading_zero
49
+
50
+ number_string.sub(/#/) { rand(1..9).to_s }.gsub(/#/) { rand(10).to_s }
51
51
  end
52
52
 
53
53
  def letterify(letter_string)
@@ -77,26 +77,26 @@ module Faker
77
77
  #
78
78
  # "U3V 3TP"
79
79
  #
80
- def regexify(re)
81
- re = re.source if re.respond_to?(:source) # Handle either a Regexp or a String that looks like a Regexp
82
- re.
83
- gsub(/^\/?\^?/, '').gsub(/\$?\/?$/, ''). # Ditch the anchors
84
- gsub(/\{(\d+)\}/, '{\1,\1}').gsub(/\?/, '{0,1}'). # All {2} become {2,2} and ? become {0,1}
85
- gsub(/(\[[^\]]+\])\{(\d+),(\d+)\}/) {|match| $1 * sample(Array(Range.new($2.to_i, $3.to_i))) }. # [12]{1,2} becomes [12] or [12][12]
86
- gsub(/(\([^\)]+\))\{(\d+),(\d+)\}/) {|match| $1 * sample(Array(Range.new($2.to_i, $3.to_i))) }. # (12|34){1,2} becomes (12|34) or (12|34)(12|34)
87
- gsub(/(\\?.)\{(\d+),(\d+)\}/) {|match| $1 * sample(Array(Range.new($2.to_i, $3.to_i))) }. # A{1,2} becomes A or AA or \d{3} becomes \d\d\d
88
- gsub(/\((.*?)\)/) {|match| sample(match.gsub(/[\(\)]/, '').split('|')) }. # (this|that) becomes 'this' or 'that'
89
- gsub(/\[([^\]]+)\]/) {|match| match.gsub(/(\w\-\w)/) {|range| sample(Array(Range.new(*range.split('-')))) } }. # All A-Z inside of [] become C (or X, or whatever)
90
- gsub(/\[([^\]]+)\]/) {|match| sample($1.split('')) }. # All [ABC] become B (or A or C)
91
- gsub('\d') {|match| sample(Numbers) }.
92
- gsub('\w') {|match| sample(Letters) }
80
+ def regexify(reg)
81
+ reg = reg.source if reg.respond_to?(:source) # Handle either a Regexp or a String that looks like a Regexp
82
+ reg
83
+ .gsub(%r{^/?\^?}, '').gsub(%r{\$?/?$}, '') # Ditch the anchors
84
+ .gsub(/\{(\d+)\}/, '{\1,\1}').gsub(/\?/, '{0,1}') # All {2} become {2,2} and ? become {0,1}
85
+ .gsub(/(\[[^\]]+\])\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # [12]{1,2} becomes [12] or [12][12]
86
+ .gsub(/(\([^)]+\))\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # (12|34){1,2} becomes (12|34) or (12|34)(12|34)
87
+ .gsub(/(\\?.)\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # A{1,2} becomes A or AA or \d{3} becomes \d\d\d
88
+ .gsub(/\((.*?)\)/) { |match| sample(match.gsub(/[()]/, '').split('|')) } # (this|that) becomes 'this' or 'that'
89
+ .gsub(/\[([^\]]+)\]/) { |match| match.gsub(/(\w-\w)/) { |range| sample(Array(Range.new(*range.split('-')))) } } # All A-Z inside of [] become C (or X, or whatever)
90
+ .gsub(/\[([^\]]+)\]/) { |_match| sample(Regexp.last_match(1).split('')) } # All [ABC] become B (or A or C)
91
+ .gsub('\d') { |_match| sample(Numbers) }
92
+ .gsub('\w') { |_match| sample(Letters) }
93
93
  end
94
94
 
95
95
  # Helper for the common approach of grabbing a translation
96
96
  # with an array of values and selecting one of them.
97
97
  def fetch(key)
98
98
  fetched = sample(translate("faker.#{key}"))
99
- if fetched && fetched.match(/^\//) and fetched.match(/\/$/) # A regex
99
+ if fetched&.match(%r{^/}) && fetched&.match(%r{/$}) # A regex
100
100
  regexify(fetched)
101
101
  else
102
102
  fetched
@@ -108,7 +108,7 @@ module Faker
108
108
  def fetch_all(key)
109
109
  fetched = translate("faker.#{key}")
110
110
  fetched = fetched.last if fetched.size <= 1
111
- if !fetched.respond_to?(:sample) && fetched.match(/^\//) and fetched.match(/\/$/) # A regex
111
+ if !fetched.respond_to?(:sample) && fetched.match(%r{^/}) && fetched.match(%r{/$}) # A regex
112
112
  regexify(fetched)
113
113
  else
114
114
  fetched
@@ -120,7 +120,7 @@ module Faker
120
120
  # formatted translation: e.g., "#{first_name} #{last_name}".
121
121
  def parse(key)
122
122
  fetched = fetch(key)
123
- parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^\}]+)\}([^#]+)?/).map {|prefix, kls, meth, etc|
123
+ parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^}]+)\}([^#]+)?/).map do |prefix, kls, meth, etc|
124
124
  # If the token had a class Prefix (e.g., Name.first_name)
125
125
  # grab the constant, otherwise use self
126
126
  cls = kls ? Faker.const_get(kls.chop) : self
@@ -129,39 +129,48 @@ module Faker
129
129
  # In either case the information will be retained for reconstruction of the string.
130
130
  text = prefix
131
131
 
132
- # If the class has the method, call it, otherwise
133
- # fetch the transation (i.e., faker.name.first_name)
134
- text += cls.respond_to?(meth) ? cls.send(meth) : fetch("#{(kls || self).to_s.split('::').last.downcase}.#{meth.downcase}")
132
+ # If the class has the method, call it, otherwise fetch the translation
133
+ # (e.g., faker.phone_number.area_code)
134
+ text += if cls.respond_to?(meth)
135
+ cls.send(meth)
136
+ else
137
+ # Do just enough snake casing to convert PhoneNumber to phone_number
138
+ key_path = cls.to_s.split('::').last.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
139
+ fetch("#{key_path}.#{meth.downcase}")
140
+ end
135
141
 
136
142
  # And tack on spaces, commas, etc. left over in the string
137
- text += etc.to_s
138
- }
143
+ text + etc.to_s
144
+ end
139
145
  # If the fetched key couldn't be parsed, then fallback to numerify
140
146
  parts.any? ? parts.join : numerify(fetched)
141
147
  end
142
148
 
143
149
  # Call I18n.translate with our configured locale if no
144
150
  # locale is specified
145
- def translate(*args)
146
- opts = args.last.is_a?(Hash) ? args.pop : {}
151
+ def translate(*args, **opts)
147
152
  opts[:locale] ||= Faker::Config.locale
148
153
  opts[:raise] = true
149
- I18n.translate(*(args.push(opts)))
154
+ I18n.translate(*args, **opts)
150
155
  rescue I18n::MissingTranslationData
151
- opts = args.last.is_a?(Hash) ? args.pop : {}
152
156
  opts[:locale] = :en
153
157
 
154
158
  # Super-simple fallback -- fallback to en if the
155
159
  # translation was missing. If the translation isn't
156
160
  # in en either, then it will raise again.
157
- I18n.translate(*(args.push(opts)))
161
+ disable_enforce_available_locales do
162
+ I18n.translate(*args, **opts)
163
+ end
158
164
  end
159
165
 
160
166
  # Executes block with given locale set.
161
- def with_locale(tmp_locale = nil)
167
+ def with_locale(tmp_locale = nil, &block)
162
168
  current_locale = Faker::Config.own_locale
163
169
  Faker::Config.locale = tmp_locale
164
- I18n.with_locale(tmp_locale) { yield }
170
+
171
+ disable_enforce_available_locales do
172
+ I18n.with_locale(tmp_locale, &block)
173
+ end
165
174
  ensure
166
175
  Faker::Config.locale = current_locale
167
176
  end
@@ -175,29 +184,54 @@ module Faker
175
184
  # name:
176
185
  # girls_name: ["Alice", "Cheryl", "Tatiana"]
177
186
  # Then you can call Faker::Name.girls_name and it will act like #first_name
178
- def method_missing(m, *args, &block)
187
+ def method_missing(mth, *args, &block)
179
188
  super unless @flexible_key
180
189
 
181
- # Use the alternate form of translate to get a nil rather than a "missing translation" string
182
- if translation = translate(:faker)[@flexible_key][m]
190
+ if (translation = translate("faker.#{@flexible_key}.#{mth}"))
183
191
  sample(translation)
184
192
  else
185
193
  super
186
194
  end
187
195
  end
188
196
 
197
+ def respond_to_missing?(method_name, include_private = false)
198
+ super
199
+ end
200
+
189
201
  # Generates a random value between the interval
190
202
  def rand_in_range(from, to)
191
203
  from, to = to, from if to < from
192
204
  rand(from..to)
193
205
  end
194
206
 
207
+ # If an array or range is passed, a random value will be selected.
208
+ # All other values are simply returned.
209
+ def resolve(value)
210
+ case value
211
+ when Array then sample(value)
212
+ when Range then rand value
213
+ else value
214
+ end
215
+ end
216
+
217
+ # Return unique values from the generator every time.
218
+ #
219
+ # @param max_retries [Integer] The max number of retries that should be done before giving up.
220
+ # @return [self]
195
221
  def unique(max_retries = 10_000)
196
- @unique_generator ||= UniqueGenerator.new(self, max_retries)
222
+ @unique ||= UniqueGenerator.new(self, max_retries)
197
223
  end
198
224
 
199
- def sample(list)
200
- list.respond_to?(:sample) ? list.sample(random: Faker::Config.random) : list
225
+ def sample(list, num = nil)
226
+ if list.respond_to?(:sample)
227
+ if num
228
+ list.sample(num, random: Faker::Config.random)
229
+ else
230
+ list.sample(random: Faker::Config.random)
231
+ end
232
+ else
233
+ list
234
+ end
201
235
  end
202
236
 
203
237
  def shuffle(list)
@@ -207,20 +241,75 @@ module Faker
207
241
  def rand(max = nil)
208
242
  if max.nil?
209
243
  Faker::Config.random.rand
210
- elsif max.is_a?(Range) || max.to_i > 0
244
+ elsif max.is_a?(Range) || max.to_i.positive?
211
245
  Faker::Config.random.rand(max)
212
246
  else
213
247
  0
214
248
  end
215
249
  end
250
+
251
+ def disable_enforce_available_locales
252
+ old_enforce_available_locales = I18n.enforce_available_locales
253
+ I18n.enforce_available_locales = false
254
+ yield
255
+ ensure
256
+ I18n.enforce_available_locales = old_enforce_available_locales
257
+ end
258
+
259
+ private
260
+
261
+ def warn_for_deprecated_arguments
262
+ keywords = []
263
+ yield(keywords)
264
+
265
+ return if keywords.empty?
266
+
267
+ method_name = caller.first.match(/`(?<method_name>.*)'/)[:method_name]
268
+
269
+ keywords.each.with_index(1) do |keyword, index|
270
+ i = case index
271
+ when 1 then '1st'
272
+ when 2 then '2nd'
273
+ when 3 then '3rd'
274
+ else "#{index}th"
275
+ end
276
+
277
+ warn_with_uplevel(<<~MSG, uplevel: 5)
278
+ Passing `#{keyword}` with the #{i} argument of `#{method_name}` is deprecated. Use keyword argument like `#{method_name}(#{keyword}: ...)` instead.
279
+ MSG
280
+ end
281
+
282
+ warn(<<~MSG)
283
+
284
+ To automatically update from positional arguments to keyword arguments,
285
+ install rubocop-faker and run:
286
+
287
+ rubocop \\
288
+ --require rubocop-faker \\
289
+ --only Faker/DeprecatedArguments \\
290
+ --auto-correct
291
+
292
+ MSG
293
+ end
294
+
295
+ # Workaround for emulating `warn '...', uplevel: 1` in Ruby 2.4 or lower.
296
+ def warn_with_uplevel(message, uplevel: 1)
297
+ at = parse_caller(caller[uplevel]).join(':')
298
+ warn "#{at}: #{message}"
299
+ end
300
+
301
+ def parse_caller(at)
302
+ # rubocop:disable Style/GuardClause
303
+ if /^(.+?):(\d+)(?::in `.*')?/ =~ at
304
+ file = Regexp.last_match(1)
305
+ line = Regexp.last_match(2).to_i
306
+ [file, line]
307
+ end
308
+ # rubocop:enable Style/GuardClause
309
+ end
216
310
  end
217
311
  end
218
312
  end
219
313
 
220
- Dir.glob(File.join(File.dirname(__FILE__), 'faker','*.rb')).sort.each {|f| require f }
221
-
222
- require 'extensions/array'
223
- require 'extensions/symbol'
224
-
225
- require 'helpers/char'
226
- require 'helpers/unique_generator'
314
+ # require faker objects
315
+ Dir.glob(File.join(mydir, 'faker', '/**/*.rb')).sort.each { |file| require file }
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ module Base58
5
+ def self.encode(str)
6
+ alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7
+ base = alphabet.size
8
+
9
+ lv = 0
10
+ str.split('').reverse.each_with_index { |v, i| lv += v.unpack1('C') * 256**i }
11
+
12
+ ret = +''
13
+ while lv.positive?
14
+ lv, mod = lv.divmod(base)
15
+ ret << alphabet[mod]
16
+ end
17
+
18
+ npad = str.match(/^#{0.chr}*/)[0].to_s.size
19
+ '1' * npad + ret.reverse
20
+ end
21
+ end
22
+ end
data/lib/helpers/char.rb CHANGED
@@ -1,64 +1,60 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Faker
3
4
  module Char
4
5
  def self.prepare(string)
5
6
  result = romanize_cyrillic string
6
7
  result = fix_umlauts result
7
- result.gsub(/\W/, '').downcase
8
+ result.gsub(/[^\w-]/, '').downcase
8
9
  end
9
10
 
10
11
  def self.fix_umlauts(string)
11
12
  string.gsub(/[äöüß]/i) do |match|
12
13
  case match.downcase
13
- when "ä" 'ae'
14
- when "ö" 'oe'
15
- when "ü" 'ue'
16
- when "ß" 'ss'
14
+ when 'ä' then 'ae'
15
+ when 'ö' then 'oe'
16
+ when 'ü' then 'ue'
17
+ when 'ß' then 'ss'
18
+ else match.downcase
17
19
  end
18
20
  end
19
21
  end
20
22
 
21
23
  def self.romanize_cyrillic(string)
22
- if Faker::Config.locale == "uk"
24
+ if Faker::Config.locale == 'uk'
23
25
  # Based on conventions abopted by BGN/PCGN for Ukrainian
24
26
  uk_chars = {
25
- 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'h', 'ґ' => 'g', 'д' => 'd',
26
- 'е' => 'e', 'є' => 'ye', 'ж' => 'zh', 'з' => 'z', 'и' => 'y', 'і' => 'i',
27
- 'ї' => 'yi', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n',
28
- 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u',
29
- 'ф' => 'f', 'х' => 'kh', 'ц' => 'ts', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch',
30
- 'ю' => 'yu', 'я' => 'ya',
31
- 'А' => 'a', 'Б' => 'b', 'В' => 'v', 'Г' => 'h', 'Ґ' => 'g', 'Д' => 'd',
32
- 'Е' => 'e', 'Є' => 'ye', 'Ж' => 'zh', 'З' => 'z', 'И' => 'y', 'І' => 'i',
33
- 'Ї' => 'yi', 'Й' => 'y', 'К' => 'k', 'Л' => 'l', 'М' => 'm', 'Н' => 'n',
34
- 'О' => 'o', 'П' => 'p', 'Р' => 'r', 'С' => 's', 'Т' => 't', 'У' => 'u',
35
- 'Ф' => 'f', 'Х' => 'kh', 'Ц' => 'ts', 'Ч' => 'ch', 'Ш' => 'sh', 'Щ' => 'shch',
36
- 'Ю' => 'yu', 'Я' => 'ya',
37
- 'ь' => '' # Ignore symbol, because its standard presentation is not allowed in URLs
27
+ 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'h', 'ґ' => 'g', 'д' => 'd', 'е' => 'e',
28
+ 'є' => 'ye', 'ж' => 'zh', 'з' => 'z', 'и' => 'y', 'і' => 'i', 'ї' => 'yi', 'й' => 'y',
29
+ 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r',
30
+ 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'kh', 'ц' => 'ts', 'ч' => 'ch',
31
+ 'ш' => 'sh', 'щ' => 'shch', 'ю' => 'yu', 'я' => 'ya', 'А' => 'a', 'Б' => 'b', 'В' => 'v',
32
+ 'Г' => 'h', 'Ґ' => 'g', 'Д' => 'd', 'Е' => 'e', 'Є' => 'ye', 'Ж' => 'zh', 'З' => 'z',
33
+ 'И' => 'y', 'І' => 'i', 'Ї' => 'yi', 'Й' => 'y', 'К' => 'k', 'Л' => 'l', 'М' => 'm',
34
+ 'Н' => 'n', 'О' => 'o', 'П' => 'p', 'Р' => 'r', 'С' => 's', 'Т' => 't', 'У' => 'u',
35
+ 'Ф' => 'f', 'Х' => 'kh', 'Ц' => 'ts', 'Ч' => 'ch', 'Ш' => 'sh', 'Щ' => 'shch', 'Ю' => 'yu',
36
+ 'Я' => 'ya', 'ь' => '' # Ignore symbol, because its standard presentation is not allowed in URLs
38
37
  }
39
38
  return string.gsub(/[а-яА-ЯіїєґІЇЄҐ]/, uk_chars)
40
39
  end
41
40
 
42
- if Faker::Config.locale == "ru"
41
+ if Faker::Config.locale == 'ru'
43
42
  # Based on conventions abopted by BGN/PCGN for Russian
44
43
  ru_chars = {
45
- 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'h', 'д' => 'd', 'е' => 'e',
46
- 'ё' => 'ye', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k',
47
- 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r',
48
- 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'kh', 'ц' => 'ts',
49
- 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch', 'ы' => 'у', 'э' => 'e', 'ю' => 'yu',
50
- 'я' => 'ya',
51
- 'А' => 'a', 'Б' => 'b', 'В' => 'v', 'Г' => 'h', 'Д' => 'd', 'Е' => 'e',
52
- 'Ё' => 'ye', 'Ж' => 'zh', 'З' => 'z', 'И' => 'i', 'Й' => 'y', 'К' => 'k',
53
- 'Л' => 'l', 'М' => 'm', 'Н' => 'n', 'О' => 'o', 'П' => 'p', 'Р' => 'r',
54
- 'С' => 's', 'Т' => 't', 'У' => 'u', 'Ф' => 'f', 'Х' => 'kh', 'Ц' => 'ts',
55
- 'Ч' => 'ch', 'Ш' => 'sh', 'Щ' => 'shch', 'Ы' => 'у', 'Э' => 'e', 'Ю' => 'yu',
56
- 'Я' => 'ya',
57
- 'ь' => '', 'ъ' => '' # Ignore symbols, because its standard presentation is not allowed in URLs
44
+ 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'h', 'д' => 'd', 'е' => 'e',
45
+ 'ё' => 'ye', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k',
46
+ 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r',
47
+ 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'kh', 'ц' => 'ts',
48
+ 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch', 'ы' => 'у', 'э' => 'e', 'ю' => 'yu',
49
+ 'я' => 'ya', 'А' => 'a', 'Б' => 'b', 'В' => 'v', 'Г' => 'h', 'Д' => 'd',
50
+ 'Е' => 'e', 'Ё' => 'ye', 'Ж' => 'zh', 'З' => 'z', 'И' => 'i', 'Й' => 'y',
51
+ 'К' => 'k', 'Л' => 'l', 'М' => 'm', 'Н' => 'n', 'О' => 'o', 'П' => 'p', 'Р' => 'r',
52
+ 'С' => 's', 'Т' => 't', 'У' => 'u', 'Ф' => 'f', 'Х' => 'kh', 'Ц' => 'ts',
53
+ 'Ч' => 'ch', 'Ш' => 'sh', 'Щ' => 'shch', 'Ы' => 'у', 'Э' => 'e', 'Ю' => 'yu',
54
+ 'Я' => 'ya', 'ь' => '', 'ъ' => '' # Ignore symbols, because its standard presentation is not allowed in URLs
58
55
  }
59
56
  return string.gsub(/[а-яА-Я]/, ru_chars)
60
57
  end
61
-
62
58
  string
63
59
  end
64
60
  end
@@ -1,5 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Faker
2
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
+
3
11
  def initialize(generator, max_retries)
4
12
  @generator = generator
5
13
  @max_retries = max_retries
@@ -7,6 +15,8 @@ module Faker
7
15
  end
8
16
 
9
17
  def method_missing(name, *arguments)
18
+ self.class.marked_unique.add(self)
19
+
10
20
  @max_retries.times do
11
21
  result = @generator.public_send(name, *arguments)
12
22
 
@@ -16,7 +26,15 @@ module Faker
16
26
  return result
17
27
  end
18
28
 
19
- raise RetryLimitExceeded
29
+ raise RetryLimitExceeded, "Retry limit exceeded for #{name}"
30
+ end
31
+ # Have method_missing use ruby 2.x keywords if the method exists.
32
+ # This is necessary because the syntax for passing arguments (`...`)
33
+ # is invalid on versions before Ruby 2.7, so it can't be used.
34
+ ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
35
+
36
+ def respond_to_missing?(method_name, include_private = false)
37
+ method_name.to_s.start_with?('faker_') || super
20
38
  end
21
39
 
22
40
  RetryLimitExceeded = Class.new(StandardError)
@@ -26,7 +44,15 @@ module Faker
26
44
  end
27
45
 
28
46
  def self.clear
29
- ObjectSpace.each_object(self, &:clear)
47
+ marked_unique.each(&:clear)
48
+ marked_unique.clear
49
+ end
50
+
51
+ def exclude(name, arguments, values)
52
+ values ||= []
53
+ values.each do |value|
54
+ @previous_results[[name, arguments]] << value
55
+ end
30
56
  end
31
57
  end
32
58
  end
@@ -4,9 +4,8 @@ The default locale is English. You can see how it is implemented in the "transla
4
4
 
5
5
  Here's how to set it:
6
6
 
7
- ```
7
+ ```ruby
8
8
  # Sets the locale to "Simplified Chinese":
9
-
10
9
  Faker::Config.locale = 'zh-CN'
11
10
  ```
12
11
 
@@ -14,21 +13,21 @@ It works so that once the Faker locale is set to a different location, the trans
14
13
 
15
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.
16
15
 
17
- ```
16
+ ```ruby
18
17
  Faker::Config.locale = 'zh-CN'
19
-
20
18
  Faker::Hipster.word #=> "kogi"
21
19
  ```
22
20
 
23
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.
24
22
 
25
- ```
23
+ ```yaml
26
24
  # /lib/locales/zh-CN.yml
25
+ hipster:
26
+ - "屌丝"
27
+ ```
27
28
 
28
- hipster: ["屌丝"]
29
-
29
+ ```ruby
30
30
  # Now this should work:
31
-
32
31
  Faker::Hipster.word #=> "屌丝"
33
32
  ```
34
33
 
@@ -36,6 +35,6 @@ After you've done that, find or create a test file for the locale you've updated
36
35
 
37
36
  In our hypothetical example here, one would add something like this to the "test-zh-locale.rb" file in the "test_ch_methods" method:
38
37
 
39
- ```
38
+ ```ruby
40
39
  assert Faker::Hipster.word.is_a? String
41
40
  ```