faker 2.1.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 (383) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1192 -0
  3. data/History.md +176 -0
  4. data/License.txt +20 -0
  5. data/README.md +364 -0
  6. data/bin/faker +5 -0
  7. data/lib/faker.rb +253 -0
  8. data/lib/faker/blockchain/bitcoin.rb +34 -0
  9. data/lib/faker/blockchain/ethereum.rb +16 -0
  10. data/lib/faker/blockchain/tezos.rb +51 -0
  11. data/lib/faker/books/book.rb +25 -0
  12. data/lib/faker/books/culture_series.rb +34 -0
  13. data/lib/faker/books/dune.rb +58 -0
  14. data/lib/faker/books/lovecraft.rb +73 -0
  15. data/lib/faker/creature/animal.rb +13 -0
  16. data/lib/faker/creature/cat.rb +23 -0
  17. data/lib/faker/creature/dog.rb +43 -0
  18. data/lib/faker/creature/horse.rb +19 -0
  19. data/lib/faker/default/address.rb +103 -0
  20. data/lib/faker/default/alphanumeric.rb +24 -0
  21. data/lib/faker/default/ancient.rb +23 -0
  22. data/lib/faker/default/app.rb +23 -0
  23. data/lib/faker/default/appliance.rb +15 -0
  24. data/lib/faker/default/artist.rb +11 -0
  25. data/lib/faker/default/avatar.rb +18 -0
  26. data/lib/faker/default/bank.rb +100 -0
  27. data/lib/faker/default/beer.rb +41 -0
  28. data/lib/faker/default/boolean.rb +11 -0
  29. data/lib/faker/default/bossa_nova.rb +15 -0
  30. data/lib/faker/default/business.rb +23 -0
  31. data/lib/faker/default/cannabis.rb +45 -0
  32. data/lib/faker/default/chile_rut.rb +44 -0
  33. data/lib/faker/default/chuck_norris.rb +14 -0
  34. data/lib/faker/default/code.rb +188 -0
  35. data/lib/faker/default/coffee.rb +37 -0
  36. data/lib/faker/default/coin.rb +15 -0
  37. data/lib/faker/default/color.rb +32 -0
  38. data/lib/faker/default/commerce.rb +66 -0
  39. data/lib/faker/default/company.rb +256 -0
  40. data/lib/faker/default/compass.rb +67 -0
  41. data/lib/faker/default/construction.rb +29 -0
  42. data/lib/faker/default/cosmere.rb +48 -0
  43. data/lib/faker/default/crypto.rb +21 -0
  44. data/lib/faker/default/crypto_coin.rb +37 -0
  45. data/lib/faker/default/currency.rb +19 -0
  46. data/lib/faker/default/date.rb +69 -0
  47. data/lib/faker/default/dc_comics.rb +25 -0
  48. data/lib/faker/default/demographic.rb +37 -0
  49. data/lib/faker/default/dessert.rb +21 -0
  50. data/lib/faker/default/device.rb +31 -0
  51. data/lib/faker/default/driving_licence.rb +59 -0
  52. data/lib/faker/default/educator.rb +35 -0
  53. data/lib/faker/default/electrical_components.rb +21 -0
  54. data/lib/faker/default/esport.rb +27 -0
  55. data/lib/faker/default/file.rb +32 -0
  56. data/lib/faker/default/fillmurray.rb +15 -0
  57. data/lib/faker/default/finance.rb +40 -0
  58. data/lib/faker/default/food.rb +49 -0
  59. data/lib/faker/default/funny_name.rb +45 -0
  60. data/lib/faker/default/gender.rb +15 -0
  61. data/lib/faker/default/greek_philosophers.rb +15 -0
  62. data/lib/faker/default/hacker.rb +45 -0
  63. data/lib/faker/default/hipster.rb +58 -0
  64. data/lib/faker/default/house.rb +15 -0
  65. data/lib/faker/default/id_number.rb +119 -0
  66. data/lib/faker/default/industry_segments.rb +25 -0
  67. data/lib/faker/default/internet.rb +207 -0
  68. data/lib/faker/default/invoice.rb +96 -0
  69. data/lib/faker/default/job.rb +25 -0
  70. data/lib/faker/default/json.rb +70 -0
  71. data/lib/faker/default/kpop.rb +31 -0
  72. data/lib/faker/default/lorem.rb +80 -0
  73. data/lib/faker/default/lorem_flickr.rb +45 -0
  74. data/lib/faker/default/lorem_pixel.rb +38 -0
  75. data/lib/faker/default/markdown.rb +79 -0
  76. data/lib/faker/default/marketing.rb +13 -0
  77. data/lib/faker/default/measurement.rb +84 -0
  78. data/lib/faker/default/military.rb +27 -0
  79. data/lib/faker/default/name.rb +54 -0
  80. data/lib/faker/default/nation.rb +33 -0
  81. data/lib/faker/default/nato_phonetic_alphabet.rb +11 -0
  82. data/lib/faker/default/nhs.rb +34 -0
  83. data/lib/faker/default/number.rb +105 -0
  84. data/lib/faker/default/omniauth.rb +330 -0
  85. data/lib/faker/default/phone_number.rb +50 -0
  86. data/lib/faker/default/placeholdit.rb +31 -0
  87. data/lib/faker/default/programming_language.rb +15 -0
  88. data/lib/faker/default/relationship.rb +42 -0
  89. data/lib/faker/default/restaurant.rb +11 -0
  90. data/lib/faker/default/science.rb +19 -0
  91. data/lib/faker/default/slack_emoji.rb +43 -0
  92. data/lib/faker/default/source.rb +20 -0
  93. data/lib/faker/default/south_africa.rb +51 -0
  94. data/lib/faker/default/space.rb +64 -0
  95. data/lib/faker/default/string.rb +45 -0
  96. data/lib/faker/default/stripe.rb +65 -0
  97. data/lib/faker/default/subscription.rb +25 -0
  98. data/lib/faker/default/superhero.rb +27 -0
  99. data/lib/faker/default/team.rb +29 -0
  100. data/lib/faker/default/time.rb +69 -0
  101. data/lib/faker/default/twitter.rb +174 -0
  102. data/lib/faker/default/types.rb +79 -0
  103. data/lib/faker/default/university.rb +30 -0
  104. data/lib/faker/default/vehicle.rb +149 -0
  105. data/lib/faker/default/verb.rb +27 -0
  106. data/lib/faker/default/world_cup.rb +27 -0
  107. data/lib/faker/games/dota.rb +29 -0
  108. data/lib/faker/games/elder_scrolls.rb +41 -0
  109. data/lib/faker/games/fallout.rb +25 -0
  110. data/lib/faker/games/game.rb +21 -0
  111. data/lib/faker/games/half_life.rb +21 -0
  112. data/lib/faker/games/heroes.rb +21 -0
  113. data/lib/faker/games/heroes_of_the_storm.rb +25 -0
  114. data/lib/faker/games/league_of_legends.rb +33 -0
  115. data/lib/faker/games/myst.rb +29 -0
  116. data/lib/faker/games/overwatch.rb +21 -0
  117. data/lib/faker/games/pokemon.rb +21 -0
  118. data/lib/faker/games/sonic_the_hedgehog.rb +21 -0
  119. data/lib/faker/games/super_smash_bros.rb +17 -0
  120. data/lib/faker/games/witcher.rb +33 -0
  121. data/lib/faker/games/world_of_warcraft.rb +17 -0
  122. data/lib/faker/games/zelda.rb +26 -0
  123. data/lib/faker/japanese_media/dragon_ball.rb +13 -0
  124. data/lib/faker/japanese_media/one_piece.rb +33 -0
  125. data/lib/faker/japanese_media/sword_art_online.rb +25 -0
  126. data/lib/faker/movies/back_to_the_future.rb +21 -0
  127. data/lib/faker/movies/ghostbusters.rb +21 -0
  128. data/lib/faker/movies/harry_potter.rb +33 -0
  129. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +37 -0
  130. data/lib/faker/movies/hobbit.rb +25 -0
  131. data/lib/faker/movies/lebowski.rb +21 -0
  132. data/lib/faker/movies/lord_of_the_rings.rb +21 -0
  133. data/lib/faker/movies/movie.rb +11 -0
  134. data/lib/faker/movies/princess_bride.rb +17 -0
  135. data/lib/faker/movies/star_wars.rb +105 -0
  136. data/lib/faker/movies/v_for_vendetta.rb +21 -0
  137. data/lib/faker/music/grateful_dead.rb +19 -0
  138. data/lib/faker/music/music.rb +47 -0
  139. data/lib/faker/music/opera.rb +26 -0
  140. data/lib/faker/music/phish.rb +13 -0
  141. data/lib/faker/music/rock_band.rb +13 -0
  142. data/lib/faker/music/umphreys_mcgee.rb +13 -0
  143. data/lib/faker/quotes/quote.rb +32 -0
  144. data/lib/faker/quotes/shakespeare.rb +41 -0
  145. data/lib/faker/sports/basketball.rb +25 -0
  146. data/lib/faker/sports/football.rb +29 -0
  147. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +15 -0
  148. data/lib/faker/tv_shows/bojack_horseman.rb +23 -0
  149. data/lib/faker/tv_shows/breaking_bad.rb +19 -0
  150. data/lib/faker/tv_shows/buffy.rb +31 -0
  151. data/lib/faker/tv_shows/community.rb +19 -0
  152. data/lib/faker/tv_shows/dr_who.rb +39 -0
  153. data/lib/faker/tv_shows/dumb_and_dumber.rb +23 -0
  154. data/lib/faker/tv_shows/family_guy.rb +23 -0
  155. data/lib/faker/tv_shows/friends.rb +23 -0
  156. data/lib/faker/tv_shows/game_of_thrones.rb +31 -0
  157. data/lib/faker/tv_shows/hey_arnold.rb +23 -0
  158. data/lib/faker/tv_shows/how_i_met_your_mother.rb +27 -0
  159. data/lib/faker/tv_shows/michael_scott.rb +13 -0
  160. data/lib/faker/tv_shows/new_girl.rb +19 -0
  161. data/lib/faker/tv_shows/parks_and_rec.rb +19 -0
  162. data/lib/faker/tv_shows/rick_and_morty.rb +23 -0
  163. data/lib/faker/tv_shows/ru_paul.rb +19 -0
  164. data/lib/faker/tv_shows/seinfeld.rb +23 -0
  165. data/lib/faker/tv_shows/silicon_valley.rb +43 -0
  166. data/lib/faker/tv_shows/simpsons.rb +23 -0
  167. data/lib/faker/tv_shows/south_park.rb +19 -0
  168. data/lib/faker/tv_shows/star_trek.rb +27 -0
  169. data/lib/faker/tv_shows/stargate.rb +23 -0
  170. data/lib/faker/tv_shows/stranger_things.rb +19 -0
  171. data/lib/faker/tv_shows/the_expanse.rb +27 -0
  172. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +23 -0
  173. data/lib/faker/tv_shows/the_it_crowd.rb +27 -0
  174. data/lib/faker/tv_shows/the_thick_of_it.rb +23 -0
  175. data/lib/faker/tv_shows/twin_peaks.rb +23 -0
  176. data/lib/faker/tv_shows/venture_bros.rb +27 -0
  177. data/lib/faker/version.rb +5 -0
  178. data/lib/helpers/base58.rb +22 -0
  179. data/lib/helpers/char.rb +66 -0
  180. data/lib/helpers/unique_generator.rb +56 -0
  181. data/lib/locales/README.md +40 -0
  182. data/lib/locales/ar.yml +102 -0
  183. data/lib/locales/bg.yml +44 -0
  184. data/lib/locales/ca-CAT.yml +24 -0
  185. data/lib/locales/ca.yml +31 -0
  186. data/lib/locales/da-DK.yml +73 -0
  187. data/lib/locales/de-AT.yml +56 -0
  188. data/lib/locales/de-CH.yml +19 -0
  189. data/lib/locales/de.yml +174 -0
  190. data/lib/locales/ee.yml +61 -0
  191. data/lib/locales/en-AU.yml +28 -0
  192. data/lib/locales/en-BORK.yml +4 -0
  193. data/lib/locales/en-CA.yml +36 -0
  194. data/lib/locales/en-GB.yml +14 -0
  195. data/lib/locales/en-IND.yml +25 -0
  196. data/lib/locales/en-MS.yml +47 -0
  197. data/lib/locales/en-NEP.yml +49 -0
  198. data/lib/locales/en-NG.yml +77 -0
  199. data/lib/locales/en-NZ.yml +39 -0
  200. data/lib/locales/en-PAK.yml +18 -0
  201. data/lib/locales/en-SG.yml +35 -0
  202. data/lib/locales/en-UG.yml +128 -0
  203. data/lib/locales/en-US.yml +103 -0
  204. data/lib/locales/en-ZA.yml +148 -0
  205. data/lib/locales/en-au-ocker.yml +33 -0
  206. data/lib/locales/en.yml +60 -0
  207. data/lib/locales/en/README.md +13 -0
  208. data/lib/locales/en/address.yml +581 -0
  209. data/lib/locales/en/ancient.yml +7 -0
  210. data/lib/locales/en/animal.yml +6 -0
  211. data/lib/locales/en/app.yml +8 -0
  212. data/lib/locales/en/appliance.yml +5 -0
  213. data/lib/locales/en/aqua_teen_hunger_force.yml +4 -0
  214. data/lib/locales/en/artist.yml +4 -0
  215. data/lib/locales/en/back_to_the_future.yml +120 -0
  216. data/lib/locales/en/bank.yml +302 -0
  217. data/lib/locales/en/basketball.yml +99 -0
  218. data/lib/locales/en/beer.yml +9 -0
  219. data/lib/locales/en/bojack_horseman.yml +6 -0
  220. data/lib/locales/en/book.yml +7 -0
  221. data/lib/locales/en/bossa_nova.yml +6 -0
  222. data/lib/locales/en/breaking_bad.yml +28 -0
  223. data/lib/locales/en/buffy.yml +260 -0
  224. data/lib/locales/en/business.yml +5 -0
  225. data/lib/locales/en/cannabis.yml +13 -0
  226. data/lib/locales/en/cat.yml +7 -0
  227. data/lib/locales/en/chuck_norris.yml +82 -0
  228. data/lib/locales/en/code.yml +4 -0
  229. data/lib/locales/en/coffee.yml +31 -0
  230. data/lib/locales/en/coin.yml +6 -0
  231. data/lib/locales/en/color.yml +4 -0
  232. data/lib/locales/en/commerce.yml +11 -0
  233. data/lib/locales/en/community.yml +33 -0
  234. data/lib/locales/en/company.yml +22 -0
  235. data/lib/locales/en/compass.yml +34 -0
  236. data/lib/locales/en/construction.yml +425 -0
  237. data/lib/locales/en/cosmere.yml +57 -0
  238. data/lib/locales/en/crypto_coin.yml +25 -0
  239. data/lib/locales/en/culture_series.yml +307 -0
  240. data/lib/locales/en/currency.yml +6 -0
  241. data/lib/locales/en/dc_comics.yml +52 -0
  242. data/lib/locales/en/demographic.yml +8 -0
  243. data/lib/locales/en/dessert.yml +6 -0
  244. data/lib/locales/en/device.yml +7 -0
  245. data/lib/locales/en/dog.yml +11 -0
  246. data/lib/locales/en/dota.yml +105 -0
  247. data/lib/locales/en/dr_who.yml +96 -0
  248. data/lib/locales/en/dragon_ball.yml +4 -0
  249. data/lib/locales/en/dumb_and_dumber.yml +59 -0
  250. data/lib/locales/en/dune.yml +159 -0
  251. data/lib/locales/en/educator.yml +11 -0
  252. data/lib/locales/en/elder_scrolls.yml +11 -0
  253. data/lib/locales/en/electrical_components.yml +6 -0
  254. data/lib/locales/en/esport.yml +8 -0
  255. data/lib/locales/en/fallout.yml +137 -0
  256. data/lib/locales/en/family_guy.yml +7 -0
  257. data/lib/locales/en/file.yml +5 -0
  258. data/lib/locales/en/finance.yml +113 -0
  259. data/lib/locales/en/food.yml +13 -0
  260. data/lib/locales/en/football.yml +8 -0
  261. data/lib/locales/en/fresh_prince_of_bel_air.yml +73 -0
  262. data/lib/locales/en/friends.yml +6 -0
  263. data/lib/locales/en/funny_name.yml +4 -0
  264. data/lib/locales/en/game.yml +283 -0
  265. data/lib/locales/en/game_of_thrones.yml +8 -0
  266. data/lib/locales/en/gender.yml +5 -0
  267. data/lib/locales/en/ghostbusters.yml +91 -0
  268. data/lib/locales/en/grateful_dead.yml +48 -0
  269. data/lib/locales/en/greek_philosophers.yml +26 -0
  270. data/lib/locales/en/hacker.yml +8 -0
  271. data/lib/locales/en/half_life.yml +7 -0
  272. data/lib/locales/en/harry_potter.yml +9 -0
  273. data/lib/locales/en/heroes.yml +6 -0
  274. data/lib/locales/en/heroes_of_the_storm.yml +7 -0
  275. data/lib/locales/en/hey_arnold.yml +24 -0
  276. data/lib/locales/en/hipster.yml +4 -0
  277. data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +45 -0
  278. data/lib/locales/en/hobbit.yml +19 -0
  279. data/lib/locales/en/horse.yml +6 -0
  280. data/lib/locales/en/house.yml +5 -0
  281. data/lib/locales/en/how_i_met_your_mother.yml +28 -0
  282. data/lib/locales/en/id_number.yml +5 -0
  283. data/lib/locales/en/industry_segments.yml +7 -0
  284. data/lib/locales/en/internet.yml +21 -0
  285. data/lib/locales/en/invoice.yml +6 -0
  286. data/lib/locales/en/job.yml +15 -0
  287. data/lib/locales/en/kpop.yml +83 -0
  288. data/lib/locales/en/league_of_legends.yml +10 -0
  289. data/lib/locales/en/lebowski.yml +43 -0
  290. data/lib/locales/en/lord_of_the_rings.yml +6 -0
  291. data/lib/locales/en/lorem.yml +11 -0
  292. data/lib/locales/en/lovecraft.yml +9 -0
  293. data/lib/locales/en/markdown.yml +5 -0
  294. data/lib/locales/en/marketing.yml +4 -0
  295. data/lib/locales/en/measurement.yml +11 -0
  296. data/lib/locales/en/michael_scott.yml +45 -0
  297. data/lib/locales/en/military.yml +8 -0
  298. data/lib/locales/en/movie.yml +5 -0
  299. data/lib/locales/en/music.yml +32 -0
  300. data/lib/locales/en/myst.yml +48 -0
  301. data/lib/locales/en/name.yml +25 -0
  302. data/lib/locales/en/nation.yml +11 -0
  303. data/lib/locales/en/nato_phonetic_alphabet.yml +4 -0
  304. data/lib/locales/en/new_girl.yml +40 -0
  305. data/lib/locales/en/one_piece.yml +9 -0
  306. data/lib/locales/en/opera.yml +172 -0
  307. data/lib/locales/en/overwatch.yml +41 -0
  308. data/lib/locales/en/parks_and_rec.yml +7 -0
  309. data/lib/locales/en/phish.yml +4 -0
  310. data/lib/locales/en/phone_number.yml +7 -0
  311. data/lib/locales/en/pokemon.yml +8 -0
  312. data/lib/locales/en/princess_bride.yml +5 -0
  313. data/lib/locales/en/programming_language.yml +6 -0
  314. data/lib/locales/en/quote.yml +166 -0
  315. data/lib/locales/en/relationship.yml +10 -0
  316. data/lib/locales/en/restaurant.yml +129 -0
  317. data/lib/locales/en/rick_and_morty.yml +6 -0
  318. data/lib/locales/en/rock_band.yml +4 -0
  319. data/lib/locales/en/rupaul.yml +125 -0
  320. data/lib/locales/en/science.yml +6 -0
  321. data/lib/locales/en/seinfeld.yml +6 -0
  322. data/lib/locales/en/shakespeare.yml +56 -0
  323. data/lib/locales/en/silicon_valley.yml +53 -0
  324. data/lib/locales/en/simpsons.yml +26 -0
  325. data/lib/locales/en/slack_emoji.yml +20 -0
  326. data/lib/locales/en/sonic_the_hedgehog.yml +410 -0
  327. data/lib/locales/en/source.yml +16 -0
  328. data/lib/locales/en/south_park.yml +5 -0
  329. data/lib/locales/en/space.yml +17 -0
  330. data/lib/locales/en/star_trek.yml +7 -0
  331. data/lib/locales/en/star_wars.yml +258 -0
  332. data/lib/locales/en/stargate.yml +21 -0
  333. data/lib/locales/en/stranger_thing.yml +36 -0
  334. data/lib/locales/en/stripe.yml +42 -0
  335. data/lib/locales/en/subscription.yml +8 -0
  336. data/lib/locales/en/super_smash_bros.yml +205 -0
  337. data/lib/locales/en/superhero.yml +12 -0
  338. data/lib/locales/en/sword_art_online.yml +334 -0
  339. data/lib/locales/en/team.yml +8 -0
  340. data/lib/locales/en/the_expanse.yml +7 -0
  341. data/lib/locales/en/the_it_crowd.yml +155 -0
  342. data/lib/locales/en/the_thick_of_it.yml +6 -0
  343. data/lib/locales/en/twin_peaks.yml +6 -0
  344. data/lib/locales/en/umphreys_mcgee.yml +4 -0
  345. data/lib/locales/en/university.yml +10 -0
  346. data/lib/locales/en/v_for_vendetta.yml +163 -0
  347. data/lib/locales/en/vehicle.yml +80 -0
  348. data/lib/locales/en/venture_bros.yml +7 -0
  349. data/lib/locales/en/verbs.yml +8 -0
  350. data/lib/locales/en/witcher.yml +11 -0
  351. data/lib/locales/en/world_cup.yml +271 -0
  352. data/lib/locales/en/world_of_warcraft.yml +8 -0
  353. data/lib/locales/en/yoda.yml +4 -0
  354. data/lib/locales/en/zelda.yml +8 -0
  355. data/lib/locales/es-MX.yml +102 -0
  356. data/lib/locales/es.yml +94 -0
  357. data/lib/locales/fa.yml +10 -0
  358. data/lib/locales/fi-FI.yml +35 -0
  359. data/lib/locales/fr-CA.yml +90 -0
  360. data/lib/locales/fr-CH.yml +78 -0
  361. data/lib/locales/fr.yml +114 -0
  362. data/lib/locales/he.yml +27 -0
  363. data/lib/locales/hy.yml +416 -0
  364. data/lib/locales/id.yml +23 -0
  365. data/lib/locales/it.yml +70 -0
  366. data/lib/locales/ja.yml +98 -0
  367. data/lib/locales/ko.yml +40 -0
  368. data/lib/locales/lv.yml +55 -0
  369. data/lib/locales/nb-NO.yml +62 -0
  370. data/lib/locales/nl.yml +92 -0
  371. data/lib/locales/no.yml +7 -0
  372. data/lib/locales/pl.yml +77 -0
  373. data/lib/locales/pt-BR.yml +697 -0
  374. data/lib/locales/pt.yml +66 -0
  375. data/lib/locales/ru.yml +76 -0
  376. data/lib/locales/sk.yml +78 -0
  377. data/lib/locales/sv.yml +81 -0
  378. data/lib/locales/tr.yml +40 -0
  379. data/lib/locales/uk.yml +86 -0
  380. data/lib/locales/vi.yml +68 -0
  381. data/lib/locales/zh-CN.yml +56 -0
  382. data/lib/locales/zh-TW.yml +29 -0
  383. metadata +543 -0
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ lib_path = File.expand_path('../lib', __dir__)
5
+ $LOAD_PATH.unshift(lib_path) unless $LOAD_PATH.include?(lib_path)
@@ -0,0 +1,253 @@
1
+ # frozen_string_literal: true
2
+
3
+ mydir = __dir__
4
+
5
+ begin
6
+ require 'psych'
7
+ end
8
+
9
+ require 'i18n'
10
+ require 'set' # Fixes a bug in i18n 0.6.11
11
+
12
+ Dir.glob(File.join(File.dirname(__FILE__), 'helpers', '*.rb')).sort.each { |file| require file }
13
+
14
+ I18n.load_path += Dir[File.join(mydir, 'locales', '**/*.yml')]
15
+ I18n.reload! if I18n.backend.initialized?
16
+
17
+ module Faker
18
+ class Config
19
+ @locale = nil
20
+ @random = nil
21
+
22
+ class << self
23
+ attr_writer :locale
24
+ attr_writer :random
25
+
26
+ def locale
27
+ @locale || I18n.locale
28
+ end
29
+
30
+ def own_locale
31
+ @locale
32
+ end
33
+
34
+ def random
35
+ @random || Random::DEFAULT
36
+ end
37
+ end
38
+ end
39
+
40
+ class Base
41
+ Numbers = Array(0..9)
42
+ ULetters = Array('A'..'Z')
43
+ Letters = ULetters + Array('a'..'z')
44
+
45
+ class << self
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
+ end
52
+
53
+ def letterify(letter_string)
54
+ letter_string.gsub(/\?/) { sample(ULetters) }
55
+ end
56
+
57
+ def bothify(string)
58
+ letterify(numerify(string))
59
+ end
60
+
61
+ # Given a regular expression, attempt to generate a string
62
+ # that would match it. This is a rather simple implementation,
63
+ # so don't be shocked if it blows up on you in a spectacular fashion.
64
+ #
65
+ # It does not handle ., *, unbounded ranges such as {1,},
66
+ # extensions such as (?=), character classes, some abbreviations
67
+ # for character classes, and nested parentheses.
68
+ #
69
+ # I told you it was simple. :) It's also probably dog-slow,
70
+ # so you shouldn't use it.
71
+ #
72
+ # It will take a regex like this:
73
+ #
74
+ # /^[A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}$/
75
+ #
76
+ # and generate a string like this:
77
+ #
78
+ # "U3V 3TP"
79
+ #
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
+ end
94
+
95
+ # Helper for the common approach of grabbing a translation
96
+ # with an array of values and selecting one of them.
97
+ def fetch(key)
98
+ fetched = sample(translate("faker.#{key}"))
99
+ if fetched&.match(%r{^\/}) && fetched&.match(%r{\/$}) # A regex
100
+ regexify(fetched)
101
+ else
102
+ fetched
103
+ end
104
+ end
105
+
106
+ # Helper for the common approach of grabbing a translation
107
+ # with an array of values and returning all of them.
108
+ def fetch_all(key)
109
+ fetched = translate("faker.#{key}")
110
+ fetched = fetched.last if fetched.size <= 1
111
+ if !fetched.respond_to?(:sample) && fetched.match(%r{^\/}) && fetched.match(%r{\/$}) # A regex
112
+ regexify(fetched)
113
+ else
114
+ fetched
115
+ end
116
+ end
117
+
118
+ # Load formatted strings from the locale, "parsing" them
119
+ # into method calls that can be used to generate a
120
+ # formatted translation: e.g., "#{first_name} #{last_name}".
121
+ def parse(key)
122
+ fetched = fetch(key)
123
+ parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^\}]+)\}([^#]+)?/).map do |prefix, kls, meth, etc|
124
+ # If the token had a class Prefix (e.g., Name.first_name)
125
+ # grab the constant, otherwise use self
126
+ cls = kls ? Faker.const_get(kls.chop) : self
127
+
128
+ # If an optional leading parentheses is not present, prefix.should == "", otherwise prefix.should == "("
129
+ # In either case the information will be retained for reconstruction of the string.
130
+ text = prefix
131
+
132
+ # If the class has the method, call it, otherwise fetch the transation
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
141
+
142
+ # And tack on spaces, commas, etc. left over in the string
143
+ text + etc.to_s
144
+ end
145
+ # If the fetched key couldn't be parsed, then fallback to numerify
146
+ parts.any? ? parts.join : numerify(fetched)
147
+ end
148
+
149
+ # Call I18n.translate with our configured locale if no
150
+ # locale is specified
151
+ def translate(*args)
152
+ opts = args.last.is_a?(Hash) ? args.pop : {}
153
+ opts[:locale] ||= Faker::Config.locale
154
+ opts[:raise] = true
155
+ I18n.translate(*args.push(opts))
156
+ rescue I18n::MissingTranslationData
157
+ opts = args.last.is_a?(Hash) ? args.pop : {}
158
+ opts[:locale] = :en
159
+
160
+ # Super-simple fallback -- fallback to en if the
161
+ # translation was missing. If the translation isn't
162
+ # in en either, then it will raise again.
163
+ disable_enforce_available_locales do
164
+ I18n.translate(*args.push(opts))
165
+ end
166
+ end
167
+
168
+ # Executes block with given locale set.
169
+ def with_locale(tmp_locale = nil)
170
+ current_locale = Faker::Config.own_locale
171
+ Faker::Config.locale = tmp_locale
172
+
173
+ disable_enforce_available_locales do
174
+ I18n.with_locale(tmp_locale) { yield }
175
+ end
176
+ ensure
177
+ Faker::Config.locale = current_locale
178
+ end
179
+
180
+ def flexible(key)
181
+ @flexible_key = key
182
+ end
183
+
184
+ # You can add whatever you want to the locale file, and it will get caught here.
185
+ # E.g., in your locale file, create a
186
+ # name:
187
+ # girls_name: ["Alice", "Cheryl", "Tatiana"]
188
+ # Then you can call Faker::Name.girls_name and it will act like #first_name
189
+ def method_missing(mth, *args, &block)
190
+ super unless @flexible_key
191
+
192
+ if (translation = translate("faker.#{@flexible_key}.#{mth}"))
193
+ sample(translation)
194
+ else
195
+ super
196
+ end
197
+ end
198
+
199
+ def respond_to_missing?(method_name, include_private = false)
200
+ super
201
+ end
202
+
203
+ # Generates a random value between the interval
204
+ def rand_in_range(from, to)
205
+ from, to = to, from if to < from
206
+ rand(from..to)
207
+ end
208
+
209
+ # If an array or range is passed, a random value will be selected.
210
+ # All other values are simply returned.
211
+ def resolve(value)
212
+ case value
213
+ when Array then sample(value)
214
+ when Range then rand value
215
+ else value
216
+ end
217
+ end
218
+
219
+ def unique(max_retries = 10_000)
220
+ @unique ||= UniqueGenerator.new(self, max_retries)
221
+ end
222
+
223
+ def sample(list)
224
+ list.respond_to?(:sample) ? list.sample(random: Faker::Config.random) : list
225
+ end
226
+
227
+ def shuffle(list)
228
+ list.shuffle(random: Faker::Config.random)
229
+ end
230
+
231
+ def rand(max = nil)
232
+ if max.nil?
233
+ Faker::Config.random.rand
234
+ elsif max.is_a?(Range) || max.to_i.positive?
235
+ Faker::Config.random.rand(max)
236
+ else
237
+ 0
238
+ end
239
+ end
240
+
241
+ def disable_enforce_available_locales
242
+ old_enforce_available_locales = I18n.enforce_available_locales
243
+ I18n.enforce_available_locales = false
244
+ yield
245
+ ensure
246
+ I18n.enforce_available_locales = old_enforce_available_locales
247
+ end
248
+ end
249
+ end
250
+ end
251
+
252
+ # require faker objects
253
+ Dir.glob(File.join(File.dirname(__FILE__), 'faker', '/**/*.rb')).sort.each { |file| require file }
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest'
4
+ require 'securerandom'
5
+
6
+ module Faker
7
+ class Blockchain
8
+ class Bitcoin < Base
9
+ class << self
10
+ PROTOCOL_VERSIONS = {
11
+ main: 0,
12
+ testnet: 111
13
+ }.freeze
14
+
15
+ def address
16
+ address_for(:main)
17
+ end
18
+
19
+ def testnet_address
20
+ address_for(:testnet)
21
+ end
22
+
23
+ protected
24
+
25
+ def address_for(network)
26
+ version = PROTOCOL_VERSIONS.fetch(network)
27
+ packed = version.chr + Faker::Config.random.bytes(20)
28
+ checksum = Digest::SHA2.digest(Digest::SHA2.digest(packed))[0..3]
29
+ Faker::Base58.encode(packed + checksum)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Blockchain
5
+ class Ethereum < Base
6
+ class << self
7
+ def address
8
+ hex_alphabet = '0123456789abcdef'
9
+ var = +'0x'
10
+ 40.times { var << sample(shuffle(hex_alphabet.split(''))) }
11
+ var
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest'
4
+ require 'securerandom'
5
+
6
+ module Faker
7
+ class Blockchain
8
+ class Tezos < Base
9
+ class << self
10
+ PREFIXES = {
11
+ tz1: [6, 161, 159],
12
+ KT1: [2, 90, 121],
13
+ edpk: [13, 15, 37, 217],
14
+ edsk: [13, 15, 58, 7],
15
+ edsig: [9, 245, 205, 134, 18],
16
+ B: [1, 52],
17
+ o: [5, 116]
18
+ }.freeze
19
+
20
+ def account
21
+ encode_tz(:tz1, 20)
22
+ end
23
+
24
+ def contract
25
+ encode_tz(:KT1, 20)
26
+ end
27
+
28
+ def operation
29
+ encode_tz(:o, 32)
30
+ end
31
+
32
+ def block
33
+ encode_tz(:B, 32)
34
+ end
35
+
36
+ def signature
37
+ encode_tz(:edsig, 64)
38
+ end
39
+
40
+ protected
41
+
42
+ def encode_tz(prefix, payload_size)
43
+ prefix = PREFIXES.fetch(prefix)
44
+ packed = prefix.map(&:chr).join('') + Faker::Config.random.bytes(payload_size)
45
+ checksum = Digest::SHA2.digest(Digest::SHA2.digest(packed))[0..3]
46
+ Faker::Base58.encode(packed + checksum)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Book < Base
5
+ flexible :book
6
+
7
+ class << self
8
+ def title
9
+ fetch('book.title')
10
+ end
11
+
12
+ def author
13
+ parse('book.author')
14
+ end
15
+
16
+ def publisher
17
+ fetch('book.publisher')
18
+ end
19
+
20
+ def genre
21
+ fetch('book.genre')
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Books
5
+ class CultureSeries < Base
6
+ flexible :culture_series
7
+ class << self
8
+ def book
9
+ fetch('culture_series.books')
10
+ end
11
+
12
+ def culture_ship
13
+ fetch('culture_series.culture_ships')
14
+ end
15
+
16
+ def culture_ship_class
17
+ fetch('culture_series.culture_ship_classes')
18
+ end
19
+
20
+ def culture_ship_class_abv
21
+ fetch('culture_series.culture_ship_class_abvs')
22
+ end
23
+
24
+ def civ
25
+ fetch('culture_series.civs')
26
+ end
27
+
28
+ def planet
29
+ fetch('culture_series.planets')
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Books
5
+ class Dune < Base
6
+ class << self
7
+ # QUOTED_CHARACTERS = fetch("dune.quotes")
8
+ # SAYING_SOURCES = %w(translate("faker.dune.sources"))
9
+
10
+ def character
11
+ fetch('dune.characters')
12
+ end
13
+
14
+ def title
15
+ fetch('dune.titles')
16
+ end
17
+
18
+ def planet
19
+ fetch('dune.planets')
20
+ end
21
+
22
+ def quote(character: nil)
23
+ quoted_characters = translate('faker.dune.quotes').keys
24
+
25
+ if character.nil?
26
+ character = sample(quoted_characters).to_s
27
+ else
28
+ character = character.to_s.downcase
29
+
30
+ unless quoted_characters.include?(character.to_sym)
31
+ raise ArgumentError,
32
+ "Characters quoted can be left blank or #{quoted_characters.join(', ')}"
33
+ end
34
+ end
35
+
36
+ fetch('dune.quotes.' + character)
37
+ end
38
+
39
+ def saying(source: nil)
40
+ sourced_sayings = translate('faker.dune.sayings').keys
41
+
42
+ if source.nil?
43
+ source = sample(sourced_sayings).to_s
44
+ else
45
+ source = source.to_s.downcase
46
+
47
+ unless sourced_sayings.include?(source.to_sym)
48
+ raise ArgumentError,
49
+ "Sources quoted in sayings can be left blank or #{sourced_sayings.join(', ')}"
50
+ end
51
+ end
52
+
53
+ fetch('dune.sayings.' + source)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end