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,207 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Internet < Base
5
+ class << self
6
+ def email(name: nil, separators: nil)
7
+ if separators
8
+ [username(specifier: name, separators: separators), domain_name].join('@')
9
+ else
10
+ [username(specifier: name), domain_name].join('@')
11
+ end
12
+ end
13
+
14
+ def free_email(name: nil)
15
+ [username(specifier: name), fetch('internet.free_email')].join('@')
16
+ end
17
+
18
+ def safe_email(name: nil)
19
+ [username(specifier: name), 'example.' + sample(%w[org com net])].join('@')
20
+ end
21
+
22
+ def username(specifier: nil, separators: %w[. _])
23
+ with_locale(:en) do
24
+ return shuffle(specifier.scan(/[[:word:]]+/)).join(sample(separators)).downcase if specifier.respond_to?(:scan)
25
+
26
+ if specifier.is_a?(Integer)
27
+ # If specifier is Integer and has large value, Argument error exception is raised to overcome memory full error
28
+ raise ArgumentError, 'Given argument is too large' if specifier > 10**6
29
+
30
+ tries = 0 # Don't try forever in case we get something like 1_000_000.
31
+ result = nil
32
+ loop do
33
+ result = username(specifier: nil, separators: separators)
34
+ tries += 1
35
+ break unless result.length < specifier && tries < 7
36
+ end
37
+ return result * (specifier / result.length + 1) if specifier.positive?
38
+ elsif specifier.is_a?(Range)
39
+ tries = 0
40
+ result = nil
41
+ loop do
42
+ result = username(specifier: specifier.min, separators: separators)
43
+ tries += 1
44
+ break unless !specifier.include?(result.length) && tries < 7
45
+ end
46
+ return result[0...specifier.max]
47
+ end
48
+
49
+ sample([
50
+ Char.prepare(Name.first_name),
51
+ [Name.first_name, Name.last_name].map do |name|
52
+ Char.prepare(name)
53
+ end.join(sample(separators))
54
+ ])
55
+ end
56
+ end
57
+
58
+ def password(min_length: 8, max_length: 16, mix_case: true, special_characters: false)
59
+ temp = Lorem.characters(number: min_length)
60
+ diff_length = max_length - min_length
61
+
62
+ if diff_length.positive?
63
+ diff_rand = rand(diff_length + 1)
64
+ temp += Lorem.characters(number: diff_rand)
65
+ end
66
+
67
+ if mix_case
68
+ temp.chars.each_with_index do |char, index|
69
+ temp[index] = char.upcase if index.even?
70
+ end
71
+ end
72
+
73
+ if special_characters
74
+ chars = %w[! @ # $ % ^ & *]
75
+ rand(1..min_length).times do |i|
76
+ temp[i] = chars[rand(chars.length)]
77
+ end
78
+ end
79
+
80
+ temp
81
+ end
82
+
83
+ def domain_name(subdomain: false)
84
+ with_locale(:en) do
85
+ domain_elements = [Char.prepare(domain_word), domain_suffix]
86
+ domain_elements.unshift(Char.prepare(domain_word)) if subdomain
87
+ domain_elements.join('.')
88
+ end
89
+ end
90
+
91
+ def fix_umlauts(string: '')
92
+ Char.fix_umlauts(string)
93
+ end
94
+
95
+ def domain_word
96
+ with_locale(:en) { Char.prepare(Company.name.split(' ').first) }
97
+ end
98
+
99
+ def domain_suffix
100
+ fetch('internet.domain_suffix')
101
+ end
102
+
103
+ def mac_address(prefix: '')
104
+ prefix_digits = prefix.split(':').map { |d| d.to_i(16) }
105
+ address_digits = Array.new((6 - prefix_digits.size)) { rand(256) }
106
+ (prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
107
+ end
108
+
109
+ def ip_v4_address
110
+ [rand_in_range(0, 255), rand_in_range(0, 255),
111
+ rand_in_range(0, 255), rand_in_range(0, 255)].join('.')
112
+ end
113
+
114
+ def private_ip_v4_address
115
+ addr = nil
116
+ loop do
117
+ addr = ip_v4_address
118
+ break if private_net_checker[addr]
119
+ end
120
+ addr
121
+ end
122
+
123
+ def public_ip_v4_address
124
+ addr = nil
125
+ loop do
126
+ addr = ip_v4_address
127
+ break unless reserved_net_checker[addr]
128
+ end
129
+ addr
130
+ end
131
+
132
+ def private_nets_regex
133
+ [
134
+ /^10\./, # 10.0.0.0 - 10.255.255.255
135
+ /^100\.(6[4-9]|[7-9]\d|1[0-1]\d|12[0-7])\./, # 100.64.0.0 - 100.127.255.255
136
+ /^127\./, # 127.0.0.0 - 127.255.255.255
137
+ /^169\.254\./, # 169.254.0.0 - 169.254.255.255
138
+ /^172\.(1[6-9]|2\d|3[0-1])\./, # 172.16.0.0 - 172.31.255.255
139
+ /^192\.0\.0\./, # 192.0.0.0 - 192.0.0.255
140
+ /^192\.168\./, # 192.168.0.0 - 192.168.255.255
141
+ /^198\.(1[8-9])\./ # 198.18.0.0 - 198.19.255.255
142
+ ]
143
+ end
144
+
145
+ def private_net_checker
146
+ ->(addr) { private_nets_regex.any? { |net| net =~ addr } }
147
+ end
148
+
149
+ def reserved_nets_regex
150
+ [
151
+ /^0\./, # 0.0.0.0 - 0.255.255.255
152
+ /^192\.0\.2\./, # 192.0.2.0 - 192.0.2.255
153
+ /^192\.88\.99\./, # 192.88.99.0 - 192.88.99.255
154
+ /^198\.51\.100\./, # 198.51.100.0 - 198.51.100.255
155
+ /^203\.0\.113\./, # 203.0.113.0 - 203.0.113.255
156
+ /^(22[4-9]|23\d)\./, # 224.0.0.0 - 239.255.255.255
157
+ /^(24\d|25[0-5])\./ # 240.0.0.0 - 255.255.255.254 and 255.255.255.255
158
+ ]
159
+ end
160
+
161
+ def reserved_net_checker
162
+ ->(addr) { (private_nets_regex + reserved_nets_regex).any? { |net| net =~ addr } }
163
+ end
164
+
165
+ def ip_v4_cidr
166
+ "#{ip_v4_address}/#{rand(1..31)}"
167
+ end
168
+
169
+ def ip_v6_address
170
+ (1..8).map { rand(65_536).to_s(16) }.join(':')
171
+ end
172
+
173
+ def ip_v6_cidr
174
+ "#{ip_v6_address}/#{rand(1..127)}"
175
+ end
176
+
177
+ def url(host: domain_name, path: "/#{username}", scheme: 'http')
178
+ "#{scheme}://#{host}#{path}"
179
+ end
180
+
181
+ def slug(words: nil, glue: nil)
182
+ glue ||= sample(%w[- _])
183
+ (words || Faker::Lorem.words(number: 2).join(' ')).delete(',.').gsub(' ', glue).downcase
184
+ end
185
+
186
+ def device_token
187
+ shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join
188
+ end
189
+
190
+ def user_agent(vendor: nil)
191
+ agent_hash = translate('faker.internet.user_agent')
192
+ agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
193
+ sample(agents)
194
+ end
195
+
196
+ def uuid
197
+ # borrowed from: https://github.com/ruby/ruby/blob/d48783bb0236db505fe1205d1d9822309de53a36/lib/securerandom.rb#L250
198
+ ary = Faker::Config.random.bytes(16).unpack('NnnnnN')
199
+ ary[2] = (ary[2] & 0x0fff) | 0x4000
200
+ ary[3] = (ary[3] & 0x3fff) | 0x8000
201
+ '%08x-%04x-%04x-%04x-%04x%08x' % ary # rubocop:disable Style/FormatString
202
+ end
203
+
204
+ alias user_name username
205
+ end
206
+ end
207
+ end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Invoice < Base
5
+ flexible :invoice
6
+
7
+ class << self
8
+ # Generate random amount between values with 2 decimals
9
+ def amount_between(from: 0, to: 0)
10
+ Faker::Base.rand_in_range(from, to).round(2)
11
+ end
12
+
13
+ # International bank slip reference https://en.wikipedia.org/wiki/Creditor_Reference
14
+ # ref is optional so that we can create unit tests
15
+ def creditor_reference(ref: '')
16
+ ref = reference if ref.empty?
17
+
18
+ 'RF' + iban_checksum('RF', ref) + ref
19
+ end
20
+
21
+ # Payment references have some rules in certain countries
22
+ # ref is optional so that we can create unit tests
23
+ def reference(ref: '')
24
+ pattern = fetch('invoice.reference.pattern')
25
+
26
+ ref = Base.regexify(/#{pattern}/) if ref.empty?
27
+
28
+ # If reference contains reserved '#' characters we need to calculate check_digits as well
29
+ check_digit_match = ref.match(/#+/)
30
+ if check_digit_match
31
+ # Get the method for selected language
32
+ check_digit_method = fetch('invoice.reference.check_digit_method')
33
+
34
+ # Calculate the check digit with matching method name
35
+ # Trim all '#' from the reference before calculating that
36
+ check_digit = send(check_digit_method, ref.tr('#', ''))
37
+
38
+ # Make sure that our check digit is as long as all of the '###' we found
39
+ check_digit = check_digit.to_s.rjust(check_digit_match[0].length, '0')
40
+
41
+ # Replace all of the
42
+ ref = ref.sub(check_digit_match[0], check_digit)
43
+ end
44
+
45
+ ref
46
+ end
47
+
48
+ private
49
+
50
+ # Calculates the mandatory checksum in 3rd and 4th characters in IBAN format
51
+ # source: https://en.wikipedia.org/wiki/International_Bank_Account_Number#Validating_the_IBAN
52
+ def iban_checksum(country_code, account)
53
+ # Converts letters to numbers according the iban rules, A=10..Z=35
54
+ account_to_number = "#{account}#{country_code}00".upcase.chars.map do |d|
55
+ d =~ /[A-Z]/ ? (d.ord - 55).to_s : d
56
+ end.join.to_i
57
+
58
+ # This is answer to (iban_to_num + checksum) % 97 == 1
59
+ checksum = (1 - account_to_number) % 97
60
+
61
+ # Use leftpad to make the size always to 2
62
+ checksum.to_s.rjust(2, '0')
63
+ end
64
+
65
+ # 731 Method
66
+ # Source: https://wiki.xmldation.com/support/fk/finnish_reference_number
67
+ def method_731(base)
68
+ weighted_sum = calculate_weighted_sum(base, [7, 3, 1])
69
+ mod10_remainder(weighted_sum)
70
+ end
71
+
72
+ # Norsk Modulus 10 - KIDMOD10
73
+ def kidmod10(base)
74
+ weighted_sum = calculate_weighted_sum(base, [1, 2])
75
+ mod10_remainder(weighted_sum)
76
+ end
77
+
78
+ # Calculates weigthed sum
79
+ #
80
+ # For example with 12345678, [1,2]
81
+ # Ref.num. 1 2 3 4 5 6 7 8
82
+ # Multipl. 1 2 1 2 1 2 1 2
83
+ # Total 1+ 4+ 3+ 8+ 5+1+2+ 7+1+6 = 38
84
+ def calculate_weighted_sum(base, weight_factors)
85
+ base.to_s.reverse.each_char.with_index.map do |digit, index|
86
+ digit.to_i * weight_factors.at(index % weight_factors.length)
87
+ end.reduce(:+) # reduce(:+) = sum() but with better ruby version support
88
+ end
89
+
90
+ # MOD-10 - remainder
91
+ def mod10_remainder(number)
92
+ -number % 10
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Job < Base
5
+ flexible :job
6
+
7
+ class << self
8
+ def title
9
+ parse('job.title')
10
+ end
11
+
12
+ def position
13
+ fetch('job.position')
14
+ end
15
+
16
+ def field
17
+ fetch('job.field')
18
+ end
19
+
20
+ def key_skill
21
+ fetch('job.key_skills')
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,70 @@
1
+ module Faker
2
+ class Json < Base
3
+ require 'json'
4
+
5
+ class << self
6
+ def shallow_json(width: 3, options: { key: 'Name.first_name', value: 'Name.first_name' })
7
+ options[:key] = 'Faker::' + options[:key]
8
+ options[:value] = 'Faker::' + options[:value]
9
+
10
+ hash = build_shallow_hash(width, options)
11
+ JSON.generate(hash)
12
+ end
13
+
14
+ def add_depth_to_json(json: shallow_json, width: 3, options: { key: 'Name.first_name', value: 'Name.first_name' })
15
+ options[:key] = 'Faker::' + options[:key]
16
+ options[:value] = 'Faker::' + options[:value]
17
+
18
+ hash = JSON.parse(json)
19
+ hash.each do |key, _|
20
+ add_hash_to_bottom(hash, [key], width, options)
21
+ end
22
+ JSON.generate(hash)
23
+ end
24
+
25
+ private
26
+
27
+ def build_shallow_hash(width, options)
28
+ key = options[:key]
29
+ value = options[:value]
30
+
31
+ hash = {}
32
+ width.times do
33
+ hash[eval(key)] = eval(value)
34
+ end
35
+ hash
36
+ end
37
+
38
+ def add_hash_to_bottom(hash, key_array, width, options)
39
+ key_string = build_keys_from_array(key_array)
40
+ if eval("hash#{key_string}").is_a?(::Hash)
41
+ eval("hash#{key_string}").each do |key, _|
42
+ key_array << key
43
+ add_hash_to_bottom(hash, key_array, width, options)
44
+ end
45
+ else
46
+ add_hash(key_array, hash, width, options)
47
+ key_array.pop
48
+ end
49
+ end
50
+
51
+ def add_hash(key_array, hash, width, options)
52
+ string_to_eval = 'hash'
53
+ key_array.length.times do |index|
54
+ string_to_eval << "['#{key_array[index]}']"
55
+ end
56
+ string_to_eval << " = #{build_shallow_hash(width, options)}"
57
+ eval(string_to_eval)
58
+ hash
59
+ end
60
+
61
+ def build_keys_from_array(key_array)
62
+ key_string = ''
63
+ key_array.each do |value|
64
+ key_string << "['#{value}']"
65
+ end
66
+ key_string
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Kpop < Base
5
+ class << self
6
+ def i_groups
7
+ fetch('kpop.i_groups')
8
+ end
9
+
10
+ def ii_groups
11
+ fetch('kpop.ii_groups')
12
+ end
13
+
14
+ def iii_groups
15
+ fetch('kpop.iii_groups')
16
+ end
17
+
18
+ def girl_groups
19
+ fetch('kpop.girl_groups')
20
+ end
21
+
22
+ def boy_bands
23
+ fetch('kpop.boy_bands')
24
+ end
25
+
26
+ def solo
27
+ fetch('kpop.solo')
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ # Based on Perl's Text::Lorem
5
+ class Lorem < Base
6
+ class << self
7
+ def word
8
+ sample(translate('faker.lorem.words'))
9
+ end
10
+
11
+ def words(number: 3, supplemental: false)
12
+ resolved_num = resolve(number)
13
+ word_list = (
14
+ translate('faker.lorem.words') +
15
+ (supplemental ? translate('faker.lorem.supplemental') : [])
16
+ )
17
+ word_list *= ((resolved_num / word_list.length) + 1)
18
+ shuffle(word_list)[0, resolved_num]
19
+ end
20
+
21
+ def character
22
+ sample(Types::CHARACTERS)
23
+ end
24
+
25
+ def characters(number: 255)
26
+ Alphanumeric.alphanumeric(number: number)
27
+ end
28
+
29
+ def multibyte
30
+ sample(translate('faker.lorem.multibyte')).pack('C*').force_encoding('utf-8')
31
+ end
32
+
33
+ def sentence(word_count: 4, supplemental: false, random_words_to_add: 0)
34
+ words(number: word_count + rand(random_words_to_add.to_i), supplemental: supplemental).join(' ').capitalize + locale_period
35
+ end
36
+
37
+ def sentences(number: 3, supplemental: false)
38
+ 1.upto(resolve(number)).collect { sentence(word_count: 3, supplemental: supplemental) }
39
+ end
40
+
41
+ def paragraph(sentence_count: 3, supplemental: false, random_sentences_to_add: 0)
42
+ sentences(number: resolve(sentence_count) + rand(random_sentences_to_add.to_i), supplemental: supplemental).join(locale_space)
43
+ end
44
+
45
+ def paragraphs(number: 3, supplemental: false)
46
+ 1.upto(resolve(number)).collect { paragraph(sentence_count: 3, supplemental: supplemental) }
47
+ end
48
+
49
+ def paragraph_by_chars(number: 256, supplemental: false)
50
+ paragraph = paragraph(sentence_count: 3, supplemental: supplemental)
51
+
52
+ paragraph += ' ' + paragraph(sentence_count: 3, supplemental: supplemental) while paragraph.length < number
53
+
54
+ paragraph[0...number - 1] + '.'
55
+ end
56
+
57
+ def question(word_count: 4, supplemental: false, random_words_to_add: 0)
58
+ words(number: word_count + rand(random_words_to_add), supplemental: supplemental).join(' ').capitalize + locale_question_mark
59
+ end
60
+
61
+ def questions(number: 3, supplemental: false)
62
+ 1.upto(resolve(number)).collect { question(word_count: 3, supplemental: supplemental) }
63
+ end
64
+
65
+ private
66
+
67
+ def locale_period
68
+ translate('faker.lorem.punctuation.period') || '.'
69
+ end
70
+
71
+ def locale_space
72
+ translate('faker.lorem.punctuation.space') || ' '
73
+ end
74
+
75
+ def locale_question_mark
76
+ translate('faker.lorem.punctuation.question_mark') || '?'
77
+ end
78
+ end
79
+ end
80
+ end