faker 1.8.2 → 2.23.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 (615) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1756 -10
  3. data/History.md +4 -4
  4. data/License.txt +2 -2
  5. data/README.md +328 -111
  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 +102 -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 +116 -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 +418 -0
  76. data/lib/faker/default/industry_segments.rb +61 -0
  77. data/lib/faker/default/internet.rb +629 -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 +355 -0
  119. data/lib/faker/default/verb.rb +72 -0
  120. data/lib/faker/default/vulnerability_identifier.rb +23 -0
  121. data/lib/faker/default/world_cup.rb +86 -0
  122. data/lib/faker/fantasy/tolkien.rb +67 -0
  123. data/lib/faker/games/clash_of_clans.rb +48 -0
  124. data/lib/faker/games/control.rb +113 -0
  125. data/lib/faker/games/dnd.rb +136 -0
  126. data/lib/faker/games/dota.rb +93 -0
  127. data/lib/faker/games/elder_scrolls.rb +139 -0
  128. data/lib/faker/games/fallout.rb +62 -0
  129. data/lib/faker/games/game.rb +48 -0
  130. data/lib/faker/games/half_life.rb +48 -0
  131. data/lib/faker/games/heroes.rb +61 -0
  132. data/lib/faker/games/heroes_of_the_storm.rb +72 -0
  133. data/lib/faker/games/league_of_legends.rb +87 -0
  134. data/lib/faker/games/minecraft.rb +113 -0
  135. data/lib/faker/games/myst.rb +74 -0
  136. data/lib/faker/games/overwatch.rb +48 -0
  137. data/lib/faker/games/pokemon.rb +48 -0
  138. data/lib/faker/games/sonic_the_hedgehog.rb +48 -0
  139. data/lib/faker/games/street_fighter.rb +61 -0
  140. data/lib/faker/games/super_mario.rb +48 -0
  141. data/lib/faker/games/super_smash_bros.rb +35 -0
  142. data/lib/faker/games/touhou.rb +75 -0
  143. data/lib/faker/games/warhammer_fantasy.rb +74 -0
  144. data/lib/faker/games/witcher.rb +126 -0
  145. data/lib/faker/games/world_of_warcraft.rb +60 -0
  146. data/lib/faker/games/zelda.rb +62 -0
  147. data/lib/faker/japanese_media/conan.rb +48 -0
  148. data/lib/faker/japanese_media/doraemon.rb +48 -0
  149. data/lib/faker/japanese_media/dragon_ball.rb +48 -0
  150. data/lib/faker/japanese_media/fullmetal_alchemist_brotherhood.rb +48 -0
  151. data/lib/faker/japanese_media/kamen_rider.rb +102 -0
  152. data/lib/faker/japanese_media/naruto.rb +61 -0
  153. data/lib/faker/japanese_media/one_piece.rb +87 -0
  154. data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
  155. data/lib/faker/japanese_media/sword_art_online.rb +61 -0
  156. data/lib/faker/locations/australia.rb +47 -0
  157. data/lib/faker/movies/back_to_the_future.rb +49 -0
  158. data/lib/faker/movies/departed.rb +49 -0
  159. data/lib/faker/movies/ghostbusters.rb +49 -0
  160. data/lib/faker/movies/harry_potter.rb +87 -0
  161. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +106 -0
  162. data/lib/faker/movies/hobbit.rb +62 -0
  163. data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
  164. data/lib/faker/movies/lebowski.rb +48 -0
  165. data/lib/faker/movies/lord_of_the_rings.rb +49 -0
  166. data/lib/faker/movies/movie.rb +33 -0
  167. data/lib/faker/movies/princess_bride.rb +36 -0
  168. data/lib/faker/movies/room.rb +63 -0
  169. data/lib/faker/movies/star_wars.rb +273 -0
  170. data/lib/faker/movies/tron.rb +161 -0
  171. data/lib/faker/movies/v_for_vendetta.rb +50 -0
  172. data/lib/faker/music/grateful_dead.rb +37 -0
  173. data/lib/faker/music/hiphop.rb +48 -0
  174. data/lib/faker/music/music.rb +145 -0
  175. data/lib/faker/music/opera.rb +298 -0
  176. data/lib/faker/music/pearl_jam.rb +50 -0
  177. data/lib/faker/music/phish.rb +48 -0
  178. data/lib/faker/music/prince.rb +64 -0
  179. data/lib/faker/music/rock_band.rb +34 -0
  180. data/lib/faker/music/rush.rb +37 -0
  181. data/lib/faker/music/show.rb +49 -0
  182. data/lib/faker/music/umphreys_mcgee.rb +22 -0
  183. data/lib/faker/quotes/chiquito.rb +80 -0
  184. data/lib/faker/quotes/quote.rb +111 -0
  185. data/lib/faker/quotes/rajnikanth.rb +27 -0
  186. data/lib/faker/quotes/shakespeare.rb +111 -0
  187. data/lib/faker/religion/bible.rb +50 -0
  188. data/lib/faker/sports/basketball.rb +61 -0
  189. data/lib/faker/sports/football.rb +74 -0
  190. data/lib/faker/sports/mountaineering.rb +22 -0
  191. data/lib/faker/sports/sport.rb +110 -0
  192. data/lib/faker/sports/volleyball.rb +74 -0
  193. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +37 -0
  194. data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
  195. data/lib/faker/tv_shows/bojack_horseman.rb +51 -0
  196. data/lib/faker/tv_shows/breaking_bad.rb +37 -0
  197. data/lib/faker/tv_shows/brooklyn_nine_nine.rb +38 -0
  198. data/lib/faker/tv_shows/buffy.rb +89 -0
  199. data/lib/faker/tv_shows/community.rb +38 -0
  200. data/lib/faker/tv_shows/dr_who.rb +115 -0
  201. data/lib/faker/tv_shows/dumb_and_dumber.rb +51 -0
  202. data/lib/faker/tv_shows/family_guy.rb +51 -0
  203. data/lib/faker/tv_shows/final_space.rb +51 -0
  204. data/lib/faker/tv_shows/friends.rb +50 -0
  205. data/lib/faker/tv_shows/futurama.rb +65 -0
  206. data/lib/faker/tv_shows/game_of_thrones.rb +77 -0
  207. data/lib/faker/tv_shows/hey_arnold.rb +50 -0
  208. data/lib/faker/tv_shows/how_i_met_your_mother.rb +64 -0
  209. data/lib/faker/tv_shows/michael_scott.rb +23 -0
  210. data/lib/faker/tv_shows/new_girl.rb +38 -0
  211. data/lib/faker/tv_shows/parks_and_rec.rb +37 -0
  212. data/lib/faker/tv_shows/rick_and_morty.rb +51 -0
  213. data/lib/faker/tv_shows/ru_paul.rb +37 -0
  214. data/lib/faker/tv_shows/seinfeld.rb +51 -0
  215. data/lib/faker/tv_shows/silicon_valley.rb +118 -0
  216. data/lib/faker/tv_shows/simpsons.rb +65 -0
  217. data/lib/faker/tv_shows/south_park.rb +38 -0
  218. data/lib/faker/tv_shows/star_trek.rb +63 -0
  219. data/lib/faker/tv_shows/stargate.rb +51 -0
  220. data/lib/faker/tv_shows/stranger_things.rb +38 -0
  221. data/lib/faker/tv_shows/suits.rb +37 -0
  222. data/lib/faker/tv_shows/supernatural.rb +48 -0
  223. data/lib/faker/tv_shows/the_expanse.rb +63 -0
  224. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +64 -0
  225. data/lib/faker/tv_shows/the_it_crowd.rb +64 -0
  226. data/lib/faker/tv_shows/the_office.rb +37 -0
  227. data/lib/faker/tv_shows/the_thick_of_it.rb +51 -0
  228. data/lib/faker/tv_shows/twin_peaks.rb +51 -0
  229. data/lib/faker/tv_shows/venture_bros.rb +65 -0
  230. data/lib/faker/version.rb +4 -2
  231. data/lib/faker.rb +166 -66
  232. data/lib/helpers/base58.rb +22 -0
  233. data/lib/helpers/char.rb +37 -20
  234. data/lib/helpers/unique_generator.rb +34 -6
  235. data/lib/locales/README.md +40 -0
  236. data/lib/locales/ar.yml +106 -0
  237. data/lib/locales/bg.yml +5 -2
  238. data/lib/locales/ca-CAT.yml +1 -1
  239. data/lib/locales/ca.yml +2 -4
  240. data/lib/locales/da-DK.yml +10 -6
  241. data/lib/locales/de-AT.yml +14 -5
  242. data/lib/locales/de-CH.yml +1696 -1
  243. data/lib/locales/de.yml +27 -13
  244. data/lib/locales/ee.yml +61 -0
  245. data/lib/locales/en/address.yml +553 -4
  246. data/lib/locales/en/adjective.yml +179 -0
  247. data/lib/locales/en/ancient.yml +7 -0
  248. data/lib/locales/en/animal.yml +6 -0
  249. data/lib/locales/en/app.yml +8 -0
  250. data/lib/locales/en/appliance.yml +5 -0
  251. data/lib/locales/en/aqua_teen_hunger_force.yml +36 -0
  252. data/lib/locales/en/artist.yml +4 -0
  253. data/lib/locales/en/australia.yml +107 -0
  254. data/lib/locales/en/back_to_the_future.yml +120 -0
  255. data/lib/locales/en/bank.yml +302 -0
  256. data/lib/locales/en/barcode.yml +24 -0
  257. data/lib/locales/en/basketball.yml +99 -0
  258. data/lib/locales/en/beer.yml +9 -0
  259. data/lib/locales/en/bible.yml +90 -0
  260. data/lib/locales/en/big_bang_theory.yml +38 -0
  261. data/lib/locales/en/bird.yml +1281 -0
  262. data/lib/locales/en/blood.yml +13 -0
  263. data/lib/locales/en/bojack_horseman.yml +6 -0
  264. data/lib/locales/en/book.yml +491 -0
  265. data/lib/locales/en/bossa_nova.yml +6 -0
  266. data/lib/locales/en/breaking_bad.yml +28 -0
  267. data/lib/locales/en/brooklyn_nine_nine.yml +35 -0
  268. data/lib/locales/en/buffy.yml +260 -0
  269. data/lib/locales/en/business.yml +5 -0
  270. data/lib/locales/en/camera.yml +611 -0
  271. data/lib/locales/en/cannabis.yml +13 -0
  272. data/lib/locales/en/cat.yml +7 -0
  273. data/lib/locales/en/chiquito.yml +64 -0
  274. data/lib/locales/en/chuck_norris.yml +82 -0
  275. data/lib/locales/en/clash_of_clan.yml +101 -0
  276. data/lib/locales/en/code.yml +4 -0
  277. data/lib/locales/en/coffee.yml +31 -0
  278. data/lib/locales/en/coin.yml +6 -0
  279. data/lib/locales/en/color.yml +4 -0
  280. data/lib/locales/en/commerce.yml +28 -0
  281. data/lib/locales/en/community.yml +33 -0
  282. data/lib/locales/en/company.yml +22 -0
  283. data/lib/locales/en/compass.yml +34 -0
  284. data/lib/locales/en/computer.yml +55 -0
  285. data/lib/locales/en/conan.yml +171 -0
  286. data/lib/locales/en/construction.yml +425 -0
  287. data/lib/locales/en/control.yml +247 -0
  288. data/lib/locales/en/cosmere.yml +57 -0
  289. data/lib/locales/en/crypto_coin.yml +25 -0
  290. data/lib/locales/en/culture_series.yml +307 -0
  291. data/lib/locales/en/currency.yml +6 -0
  292. data/lib/locales/en/dc_comics.yml +52 -0
  293. data/lib/locales/en/demographic.yml +221 -0
  294. data/lib/locales/en/departed.yml +50 -0
  295. data/lib/locales/en/dessert.yml +6 -0
  296. data/lib/locales/en/device.yml +115 -0
  297. data/lib/locales/en/dnd.yml +451 -0
  298. data/lib/locales/en/dog.yml +11 -0
  299. data/lib/locales/en/doraemon.yml +286 -0
  300. data/lib/locales/en/dota.yml +693 -0
  301. data/lib/locales/en/dr_who.yml +31 -9
  302. data/lib/locales/en/dragon_ball.yml +246 -0
  303. data/lib/locales/en/driving_license.yml +181 -0
  304. data/lib/locales/en/drone.yml +95 -0
  305. data/lib/locales/en/dumb_and_dumber.yml +59 -0
  306. data/lib/locales/en/dune.yml +298 -0
  307. data/lib/locales/en/educator.yml +80 -0
  308. data/lib/locales/en/elder_scrolls.yml +585 -0
  309. data/lib/locales/en/electrical_components.yml +6 -0
  310. data/lib/locales/en/emotion.yml +480 -0
  311. data/lib/locales/en/esport.yml +8 -0
  312. data/lib/locales/en/fallout.yml +315 -0
  313. data/lib/locales/en/file.yml +13 -0
  314. data/lib/locales/en/final_space.yml +37 -0
  315. data/lib/locales/en/finance.yml +189 -0
  316. data/lib/locales/en/fma_brotherhood.yml +78 -0
  317. data/lib/locales/en/food.yml +1057 -0
  318. data/lib/locales/en/football.yml +8 -0
  319. data/lib/locales/en/fresh_prince_of_bel_air.yml +73 -0
  320. data/lib/locales/en/friends.yml +6 -0
  321. data/lib/locales/en/funny_name.yml +4 -0
  322. data/lib/locales/en/futurama.yml +344 -0
  323. data/lib/locales/en/game.yml +294 -0
  324. data/lib/locales/en/game_of_thrones.yml +8 -0
  325. data/lib/locales/en/gender.yml +6 -0
  326. data/lib/locales/en/ghostbusters.yml +91 -0
  327. data/lib/locales/en/grateful_dead.yml +48 -0
  328. data/lib/locales/en/greek_philosophers.yml +26 -0
  329. data/lib/locales/en/hacker.yml +8 -0
  330. data/lib/locales/en/half_life.yml +88 -0
  331. data/lib/locales/en/harry_potter.yml +9 -0
  332. data/lib/locales/en/heroes.yml +411 -0
  333. data/lib/locales/en/heroes_of_the_storm.yml +134 -0
  334. data/lib/locales/en/hey_arnold.yml +24 -0
  335. data/lib/locales/en/hipster.yml +4 -0
  336. data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +45 -0
  337. data/lib/locales/en/hobby.yml +171 -0
  338. data/lib/locales/en/horse.yml +6 -0
  339. data/lib/locales/en/house.yml +5 -0
  340. data/lib/locales/en/how_i_met_your_mother.yml +28 -0
  341. data/lib/locales/en/how_to_train_your_dragon.yml +174 -0
  342. data/lib/locales/en/id_number.yml +5 -0
  343. data/lib/locales/en/industry_segments.yml +7 -0
  344. data/lib/locales/en/internet.yml +137 -3
  345. data/lib/locales/en/invoice.yml +6 -0
  346. data/lib/locales/en/jack_handey.yml +54 -0
  347. data/lib/locales/en/job.yml +15 -0
  348. data/lib/locales/en/kamen_rider.yml +452 -0
  349. data/lib/locales/en/kpop.yml +83 -0
  350. data/lib/locales/en/league_of_legends.yml +289 -0
  351. data/lib/locales/en/lebowski.yml +43 -0
  352. data/lib/locales/en/lorem.yml +11 -0
  353. data/lib/locales/en/lovecraft.yml +76 -6
  354. data/lib/locales/en/markdown.yml +5 -0
  355. data/lib/locales/en/marketing.yml +4 -0
  356. data/lib/locales/en/measurement.yml +11 -0
  357. data/lib/locales/en/michael_scott.yml +45 -0
  358. data/lib/locales/en/military.yml +182 -0
  359. data/lib/locales/en/minecraft.yml +663 -0
  360. data/lib/locales/en/mountain.yml +171 -0
  361. data/lib/locales/en/mountaineering.yml +14 -0
  362. data/lib/locales/en/movie.yml +194 -2
  363. data/lib/locales/en/music.yml +464 -0
  364. data/lib/locales/en/myst.yml +104 -0
  365. data/lib/locales/en/name.yml +26 -0
  366. data/lib/locales/en/naruto.yml +230 -0
  367. data/lib/locales/en/nation.yml +11 -0
  368. data/lib/locales/en/nato_phonetic_alphabet.yml +4 -0
  369. data/lib/locales/en/new_girl.yml +40 -0
  370. data/lib/locales/en/one_piece.yml +9 -0
  371. data/lib/locales/en/opera.yml +340 -0
  372. data/lib/locales/en/overwatch.yml +2654 -0
  373. data/lib/locales/en/parks_and_rec.yml +7 -0
  374. data/lib/locales/en/pearl_jam.yml +213 -0
  375. data/lib/locales/en/phish.yml +395 -0
  376. data/lib/locales/en/phone_number.yml +7 -0
  377. data/lib/locales/en/pokemon.yml +421 -0
  378. data/lib/locales/en/prince.yml +227 -0
  379. data/lib/locales/en/princess_bride.yml +5 -0
  380. data/lib/locales/en/programming_language.yml +6 -0
  381. data/lib/locales/en/quote.yml +695 -0
  382. data/lib/locales/en/rajnikanth.yml +77 -0
  383. data/lib/locales/en/relationship.yml +10 -0
  384. data/lib/locales/en/restaurant.yml +129 -0
  385. data/lib/locales/en/rock_band.yml +5 -0
  386. data/lib/locales/en/room.yml +68 -0
  387. data/lib/locales/en/rupaul.yml +125 -0
  388. data/lib/locales/en/rush.yml +32 -0
  389. data/lib/locales/en/science.yml +484 -0
  390. data/lib/locales/en/seinfeld.yml +6 -0
  391. data/lib/locales/en/shakespeare.yml +53 -0
  392. data/lib/locales/en/show.yml +597 -0
  393. data/lib/locales/en/silicon_valley.yml +53 -0
  394. data/lib/locales/en/simpsons.yml +694 -0
  395. data/lib/locales/en/slack_emoji.yml +20 -0
  396. data/lib/locales/en/sonic_the_hedgehog.yml +410 -0
  397. data/lib/locales/en/source.yml +46 -0
  398. data/lib/locales/en/south_park.yml +5 -0
  399. data/lib/locales/en/space.yml +17 -0
  400. data/lib/locales/en/sport.yml +121 -0
  401. data/lib/locales/en/star_trek.yml +7 -0
  402. data/lib/locales/en/star_wars.yml +606 -0
  403. data/lib/locales/en/stargate.yml +21 -0
  404. data/lib/locales/en/stranger_thing.yml +36 -0
  405. data/lib/locales/en/street_fighter.yml +1524 -0
  406. data/lib/locales/en/stripe.yml +42 -0
  407. data/lib/locales/en/studio_ghibli.yml +107 -0
  408. data/lib/locales/en/subscription.yml +8 -0
  409. data/lib/locales/en/suits.yml +45 -0
  410. data/lib/locales/en/super_mario.yml +58 -0
  411. data/lib/locales/en/super_smash_bros.yml +223 -0
  412. data/lib/locales/en/superhero.yml +12 -0
  413. data/lib/locales/en/supernatural.yml +141 -0
  414. data/lib/locales/en/sword_art_online.yml +334 -0
  415. data/lib/locales/en/tea.yml +172 -0
  416. data/lib/locales/en/team.yml +8 -0
  417. data/lib/locales/en/the_expanse.yml +7 -0
  418. data/lib/locales/en/the_it_crowd.yml +155 -0
  419. data/lib/locales/en/the_kingkiller_chronicle.yml +56 -0
  420. data/lib/locales/en/the_office.yml +86 -0
  421. data/lib/locales/en/the_thick_of_it.yml +6 -0
  422. data/lib/locales/en/tolkien.yml +2453 -0
  423. data/lib/locales/en/touhou.yml +839 -0
  424. data/lib/locales/en/tron.yml +227 -0
  425. data/lib/locales/en/twin_peaks.yml +6 -0
  426. data/lib/locales/en/umphreys_mcgee.yml +4 -0
  427. data/lib/locales/en/university.yml +10 -0
  428. data/lib/locales/en/v_for_vendetta.yml +163 -0
  429. data/lib/locales/en/vehicle.yml +2814 -0
  430. data/lib/locales/en/venture_bros.yml +7 -0
  431. data/lib/locales/en/verbs.yml +8 -0
  432. data/lib/locales/en/volleyball.yml +501 -0
  433. data/lib/locales/en/warhammer_fantasy.yml +582 -0
  434. data/lib/locales/en/witcher.yml +430 -0
  435. data/lib/locales/en/world_cup.yml +271 -0
  436. data/lib/locales/en/world_of_warcraft.yml +126 -0
  437. data/lib/locales/en/yoda.yml +4 -0
  438. data/lib/locales/en/zelda.yml +966 -0
  439. data/lib/locales/en-AU.yml +50 -8
  440. data/lib/locales/en-CA.yml +27 -2
  441. data/lib/locales/en-GB.yml +2 -1
  442. data/lib/locales/en-IND.yml +5 -2
  443. data/lib/locales/en-MS.yml +10 -1
  444. data/lib/locales/en-NEP.yml +6 -3
  445. data/lib/locales/en-NG.yml +2 -0
  446. data/lib/locales/en-NZ.yml +140 -17
  447. data/lib/locales/en-PAK.yml +4 -2
  448. data/lib/locales/en-SG.yml +6 -1
  449. data/lib/locales/en-TH.yml +360 -0
  450. data/lib/locales/en-US.yml +38 -10
  451. data/lib/locales/en-ZA.yml +114 -17
  452. data/lib/locales/en-au-ocker.yml +2 -1
  453. data/lib/locales/en.yml +0 -746
  454. data/lib/locales/es-AR.yml +4600 -0
  455. data/lib/locales/es-MX.yml +17 -1
  456. data/lib/locales/es.yml +75 -1
  457. data/lib/locales/fa.yml +6 -0
  458. data/lib/locales/fi-FI.yml +12 -6
  459. data/lib/locales/fr/address.yml +21 -0
  460. data/lib/locales/fr/adjective.yml +266 -0
  461. data/lib/locales/fr/animal.yml +5 -0
  462. data/lib/locales/fr/appliance.yml +4 -0
  463. data/lib/locales/fr/book.yml +7 -0
  464. data/lib/locales/fr/color.yml +4 -0
  465. data/lib/locales/fr/company.yml +17 -0
  466. data/lib/locales/fr/compass.yml +23 -0
  467. data/lib/locales/fr/demographic.yml +4 -0
  468. data/lib/locales/fr/gender.yml +6 -0
  469. data/lib/locales/fr/internet.yml +5 -0
  470. data/lib/locales/fr/lorem.yml +5 -0
  471. data/lib/locales/fr/measurement.yml +7 -0
  472. data/lib/locales/fr/name.yml +21 -0
  473. data/lib/locales/fr/phone_number.yml +7 -0
  474. data/lib/locales/fr/pokemon.yml +7 -0
  475. data/lib/locales/fr-CA.yml +107 -0
  476. data/lib/locales/fr-CH.yml +78 -0
  477. data/lib/locales/fr.yml +1 -65
  478. data/lib/locales/he.yml +2 -0
  479. data/lib/locales/hy.yml +411 -0
  480. data/lib/locales/id.yml +7 -2
  481. data/lib/locales/it.yml +15 -3
  482. data/lib/locales/ja/README.md +13 -0
  483. data/lib/locales/ja/address.yml +120539 -0
  484. data/lib/locales/ja/adjective.yml +148 -0
  485. data/lib/locales/ja/ancient.yml +4 -0
  486. data/lib/locales/ja/animal.yml +5 -0
  487. data/lib/locales/ja/bank.yml +4 -0
  488. data/lib/locales/ja/book.yml +7 -0
  489. data/lib/locales/ja/cat.yml +5 -0
  490. data/lib/locales/ja/coffee.yml +4 -0
  491. data/lib/locales/ja/color.yml +4 -0
  492. data/lib/locales/ja/commerce.yml +11 -0
  493. data/lib/locales/ja/company.yml +8 -0
  494. data/lib/locales/ja/dog.yml +6 -0
  495. data/lib/locales/ja/emotion.yml +51 -0
  496. data/lib/locales/ja/food.yml +4 -0
  497. data/lib/locales/ja/gender.yml +4 -0
  498. data/lib/locales/ja/lorem.yml +9 -0
  499. data/lib/locales/ja/name.yml +13 -0
  500. data/lib/locales/ja/naruto.yml +230 -0
  501. data/lib/locales/ja/overwatch.yml +5 -0
  502. data/lib/locales/ja/phone_number.yml +7 -0
  503. data/lib/locales/ja/pokemon.yml +7 -0
  504. data/lib/locales/ja/relationship.yml +10 -0
  505. data/lib/locales/ja/restaurant.yml +11 -0
  506. data/lib/locales/ja/space.yml +5 -0
  507. data/lib/locales/ja/studio_ghibli.yml +112 -0
  508. data/lib/locales/ja/subscription.yml +8 -0
  509. data/lib/locales/ja/super_mario.yml +9 -0
  510. data/lib/locales/ja/super_smash_bros.yml +8 -0
  511. data/lib/locales/ja/university.yml +9 -0
  512. data/lib/locales/ja/zelda.yml +5 -0
  513. data/lib/locales/ko.yml +98 -3
  514. data/lib/locales/lt.yml +35 -0
  515. data/lib/locales/lv.yml +55 -0
  516. data/lib/locales/mi-NZ.yml +281 -0
  517. data/lib/locales/nb-NO.yml +15 -6
  518. data/lib/locales/nl.yml +13 -4
  519. data/lib/locales/no.yml +7 -0
  520. data/lib/locales/pl.yml +13 -2
  521. data/lib/locales/pt-BR.yml +657 -17
  522. data/lib/locales/pt.yml +16 -6
  523. data/lib/locales/ru.yml +54 -5
  524. data/lib/locales/sk.yml +21 -13
  525. data/lib/locales/sv.yml +15 -7
  526. data/lib/locales/th.yml +380 -0
  527. data/lib/locales/tr.yml +14 -0
  528. data/lib/locales/uk.yml +17 -4
  529. data/lib/locales/vi.yml +7 -2
  530. data/lib/locales/zh-CN.yml +10 -4
  531. data/lib/locales/zh-TW.yml +3 -1
  532. metadata +620 -98
  533. data/lib/extensions/array.rb +0 -22
  534. data/lib/extensions/symbol.rb +0 -9
  535. data/lib/faker/address.rb +0 -67
  536. data/lib/faker/ancient.rb +0 -21
  537. data/lib/faker/app.rb +0 -18
  538. data/lib/faker/artist.rb +0 -9
  539. data/lib/faker/avatar.rb +0 -15
  540. data/lib/faker/bank.rb +0 -31
  541. data/lib/faker/beer.rb +0 -40
  542. data/lib/faker/bitcoin.rb +0 -48
  543. data/lib/faker/book.rb +0 -23
  544. data/lib/faker/boolean.rb +0 -9
  545. data/lib/faker/business.rb +0 -22
  546. data/lib/faker/cat.rb +0 -19
  547. data/lib/faker/chuck_norris.rb +0 -11
  548. data/lib/faker/code.rb +0 -147
  549. data/lib/faker/coffee.rb +0 -29
  550. data/lib/faker/color.rb +0 -30
  551. data/lib/faker/commerce.rb +0 -64
  552. data/lib/faker/company.rb +0 -141
  553. data/lib/faker/compass.rb +0 -65
  554. data/lib/faker/crypto.rb +0 -19
  555. data/lib/faker/date.rb +0 -78
  556. data/lib/faker/demographic.rb +0 -35
  557. data/lib/faker/dessert.rb +0 -19
  558. data/lib/faker/dr_who.rb +0 -34
  559. data/lib/faker/dragon_ball.rb +0 -9
  560. data/lib/faker/educator.rb +0 -23
  561. data/lib/faker/esport.rb +0 -25
  562. data/lib/faker/family_guy.rb +0 -17
  563. data/lib/faker/file.rb +0 -24
  564. data/lib/faker/fillmurray.rb +0 -14
  565. data/lib/faker/finance.rb +0 -28
  566. data/lib/faker/food.rb +0 -21
  567. data/lib/faker/friends.rb +0 -17
  568. data/lib/faker/funny_name.rb +0 -43
  569. data/lib/faker/game_of_thrones.rb +0 -25
  570. data/lib/faker/hacker.rb +0 -45
  571. data/lib/faker/harry_potter.rb +0 -21
  572. data/lib/faker/hey_arnold.rb +0 -17
  573. data/lib/faker/hipster.rb +0 -59
  574. data/lib/faker/hitchhikers_guide_to_the_galaxy.rb +0 -33
  575. data/lib/faker/hobbit.rb +0 -21
  576. data/lib/faker/how_i_met_your_mother.rb +0 -21
  577. data/lib/faker/id_number.rb +0 -36
  578. data/lib/faker/internet.rb +0 -178
  579. data/lib/faker/job.rb +0 -16
  580. data/lib/faker/league_of_legends.rb +0 -29
  581. data/lib/faker/lord_of_the_rings.rb +0 -13
  582. data/lib/faker/lorem.rb +0 -68
  583. data/lib/faker/lorem_pixel.rb +0 -21
  584. data/lib/faker/lovecraft.rb +0 -73
  585. data/lib/faker/markdown.rb +0 -66
  586. data/lib/faker/matz.rb +0 -9
  587. data/lib/faker/movie.rb +0 -9
  588. data/lib/faker/music.rb +0 -33
  589. data/lib/faker/name.rb +0 -42
  590. data/lib/faker/number.rb +0 -86
  591. data/lib/faker/omniauth.rb +0 -340
  592. data/lib/faker/overwatch.rb +0 -17
  593. data/lib/faker/phone_number.rb +0 -44
  594. data/lib/faker/placeholdit.rb +0 -20
  595. data/lib/faker/pokemon.rb +0 -17
  596. data/lib/faker/rick_and_morty.rb +0 -17
  597. data/lib/faker/robin.rb +0 -9
  598. data/lib/faker/rock_band.rb +0 -9
  599. data/lib/faker/rupaul.rb +0 -11
  600. data/lib/faker/shakespeare.rb +0 -83
  601. data/lib/faker/simpsons.rb +0 -22
  602. data/lib/faker/slack_emoji.rb +0 -43
  603. data/lib/faker/space.rb +0 -58
  604. data/lib/faker/star_trek.rb +0 -21
  605. data/lib/faker/star_wars.rb +0 -80
  606. data/lib/faker/superhero.rb +0 -25
  607. data/lib/faker/team.rb +0 -24
  608. data/lib/faker/time.rb +0 -51
  609. data/lib/faker/twin_peaks.rb +0 -17
  610. data/lib/faker/twitter.rb +0 -172
  611. data/lib/faker/university.rb +0 -20
  612. data/lib/faker/vehicle.rb +0 -37
  613. data/lib/faker/yoda.rb +0 -10
  614. data/lib/faker/zelda.rb +0 -18
  615. data/lib/locales/ja.yml +0 -46
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class IndustrySegments < Base
5
+ flexible :industry_segments
6
+
7
+ class << self
8
+ ##
9
+ # Produces the name of an industry.
10
+ #
11
+ # @return [String]
12
+ #
13
+ # @example
14
+ # Faker::IndustrySegments.industry #=> "Basic Materials"
15
+ #
16
+ # @faker.version 1.9.2
17
+ def industry
18
+ fetch('industry_segments.industry')
19
+ end
20
+
21
+ ##
22
+ # Produces the name of a super-sector of an industry.
23
+ #
24
+ # @return [String]
25
+ #
26
+ # @example
27
+ # Faker::IndustrySegments.super_sector #=> "Basic Resources"
28
+ #
29
+ # @faker.version 1.9.2
30
+ def super_sector
31
+ fetch('industry_segments.super_sector')
32
+ end
33
+
34
+ ##
35
+ # Produces the name of a sector of an industry.
36
+ #
37
+ # @return [String]
38
+ #
39
+ # @example
40
+ # Faker::IndustrySegments.sector #=> "Industrial Metals & Mining"
41
+ #
42
+ # @faker.version 1.9.2
43
+ def sector
44
+ fetch('industry_segments.sector')
45
+ end
46
+
47
+ ##
48
+ # Produces the name of a subsector of an industry.
49
+ #
50
+ # @return [String]
51
+ #
52
+ # @example
53
+ # Faker::IndustrySegments.industry #=> "Basic Materials"
54
+ #
55
+ # @faker.version 1.9.2
56
+ def sub_sector
57
+ fetch('industry_segments.sub_sector')
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,629 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Internet < Base
5
+ # Private, Host, and Link-Local network address blocks as defined in https://en.wikipedia.org/wiki/IPv4#Special-use_addresses
6
+ PRIVATE_IPV4_ADDRESS_RANGES = [
7
+ [10..10, 0..255, 0..255, 1..255], # 10.0.0.0/8 - Used for local communications within a private network
8
+ [100..100, 64..127, 0..255, 1..255], # 100.64.0.0/10 - Shared address space for communications between an ISP and its subscribers
9
+ [127..127, 0..255, 0..255, 1..255], # 127.0.0.0/8 - Used for loopback addresses to the local host
10
+ [169..169, 254..254, 0..255, 1..255], # 169.254.0.0/16 - Used for link-local addresses between two hosts on a single link when
11
+ [172..172, 16..31, 0..255, 1..255], # 172.16.0.0/12 - Used for local communications within a private network
12
+ [192..192, 0..0, 0..0, 1..255], # 192.0.0.0/24 - IETF Protocol Assignments
13
+ [192..192, 168..168, 0..255, 1..255], # 192.168.0.0/16 - Used for local communications within a private network
14
+ [198..198, 18..19, 0..255, 1..255] # 198.18.0.0/15 - Used for benchmark testing of inter-network communications between subnets
15
+ ].each(&:freeze).freeze
16
+
17
+ class << self
18
+ ##
19
+ # Returns the email address
20
+ #
21
+ # @return [String]
22
+ #
23
+ # @param name [String]
24
+ # @param separators [Array]
25
+ # @param domain [String]
26
+ #
27
+ # @example
28
+ # Faker::Internet.email #=> "samsmith@faker.com"
29
+ # Faker::Internet.email(name: 'smith') #=> "smith@faker.com"
30
+ # Faker::Internet.email(name: 'sam smith', separators: ['-']) #=> "sam-smith@faker.com"
31
+ # Faker::Internet.email(name: 'sam smith', separators: ['-'], domain: 'gmail') #=> "sam-smith@gmail.com"
32
+ def email(legacy_name = NOT_GIVEN, legacy_separators = NOT_GIVEN, name: nil, separators: nil, domain: nil)
33
+ warn_for_deprecated_arguments do |keywords|
34
+ keywords << :name if legacy_name != NOT_GIVEN
35
+ keywords << :separators if legacy_separators != NOT_GIVEN
36
+ end
37
+
38
+ local_part = if separators
39
+ username(specifier: name, separators: separators)
40
+ else
41
+ username(specifier: name)
42
+ end
43
+
44
+ sanitized_local_part = sanitize_email_local_part(local_part)
45
+ construct_email(sanitized_local_part, domain_name(domain: domain))
46
+ end
47
+
48
+ ##
49
+ # Returns the email address with domain either gmail.com, yahoo.com or hotmail.com
50
+ #
51
+ # @return [String]
52
+ #
53
+ # @param name [String]
54
+ #
55
+ # @example
56
+ # Faker::Internet.free_email #=> "samsmith@gmail.com"
57
+ # Faker::Internet.free_email(name: 'smith') #=> "smith@yahoo.com"
58
+ def free_email(legacy_name = NOT_GIVEN, name: nil)
59
+ warn_for_deprecated_arguments do |keywords|
60
+ keywords << :name if legacy_name != NOT_GIVEN
61
+ end
62
+
63
+ construct_email(
64
+ sanitize_email_local_part(username(specifier: name)),
65
+ fetch('internet.free_email')
66
+ )
67
+ end
68
+
69
+ ##
70
+ # Returns the email address with fixed domain name as 'example'
71
+ #
72
+ # @return [String]
73
+ #
74
+ # @param name [String]
75
+ #
76
+ # @example
77
+ # Faker::Internet.safe_email #=> "samsmith@example.com"
78
+ # Faker::Internet.safe_email(name: 'smith') #=> "smith@example.net"
79
+ def safe_email(legacy_name = NOT_GIVEN, name: nil)
80
+ warn_for_deprecated_arguments do |keywords|
81
+ keywords << :name if legacy_name != NOT_GIVEN
82
+ end
83
+
84
+ construct_email(
85
+ sanitize_email_local_part(username(specifier: name)),
86
+ "example.#{sample(%w[org com net])}"
87
+ )
88
+ end
89
+
90
+ ##
91
+ # Returns the username
92
+ #
93
+ # @return [String]
94
+ #
95
+ # @param specifier [Integer, Range, String] When int value passed it returns the username longer than specifier. Max value can be 10^6
96
+ # @param separators [Array]
97
+ #
98
+ # @example
99
+ # Faker::Internet.username(specifier: 10) #=> "lulu.goodwin"
100
+ # Faker::Internet.username(specifier: 5..10) #=> "morris"
101
+ # Faker::Internet.username(specifier: 5..10) #=> "berryberry"
102
+ # Faker::Internet.username(specifier: 20, separators: ['-']) #=> "nikki_sawaynnikki_saway"
103
+ def username(legacy_specifier = NOT_GIVEN, legacy_separators = NOT_GIVEN, specifier: nil, separators: %w[. _])
104
+ warn_for_deprecated_arguments do |keywords|
105
+ keywords << :specifier if legacy_specifier != NOT_GIVEN
106
+ keywords << :separators if legacy_separators != NOT_GIVEN
107
+ end
108
+
109
+ with_locale(:en) do
110
+ return shuffle(specifier.scan(/[[:word:]]+/)).join(sample(separators)).downcase if specifier.respond_to?(:scan)
111
+
112
+ case specifier
113
+ when Integer
114
+ # If specifier is Integer and has large value, Argument error exception is raised to overcome memory full error
115
+ raise ArgumentError, 'Given argument is too large' if specifier > 10**6
116
+
117
+ tries = 0 # Don't try forever in case we get something like 1_000_000.
118
+ result = nil
119
+ loop do
120
+ result = username(specifier: nil, separators: separators)
121
+ tries += 1
122
+ break unless result.length < specifier && tries < 7
123
+ end
124
+ return result * (specifier / result.length + 1) if specifier.positive?
125
+ when Range
126
+ tries = 0
127
+ result = nil
128
+ loop do
129
+ result = username(specifier: specifier.min, separators: separators)
130
+ tries += 1
131
+ break unless !specifier.include?(result.length) && tries < 7
132
+ end
133
+ return result[0...specifier.max]
134
+ end
135
+
136
+ sample([
137
+ Char.prepare(Name.first_name),
138
+ [Name.first_name, Name.last_name].map do |name|
139
+ Char.prepare(name)
140
+ end.join(sample(separators))
141
+ ])
142
+ end
143
+ end
144
+
145
+ # rubocop:disable Metrics/ParameterLists
146
+
147
+ ##
148
+ # Produces a randomized string of characters suitable for passwords
149
+ #
150
+ # @param min_length [Integer] The minimum length of the password
151
+ # @param max_length [Integer] The maximum length of the password
152
+ # @param mix_case [Boolean] Toggles if uppercased letters are allowed. If true, at least one will be added.
153
+ # @param special_characters [Boolean] Toggles if special characters are allowed. If true, at least one will be added.
154
+ #
155
+ # @return [String]
156
+ #
157
+ # @example
158
+ # Faker::Internet.password #=> "Vg5mSvY1UeRg7"
159
+ # @example
160
+ # Faker::Internet.password(min_length: 8) #=> "YfGjIk0hGzDqS0"
161
+ # @example
162
+ # Faker::Internet.password(min_length: 10, max_length: 20) #=> "EoC9ShWd1hWq4vBgFw"
163
+ # @example
164
+ # Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true) #=> "3k5qS15aNmG"
165
+ # @example
166
+ # Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true, special_characters: true) #=> "*%NkOnJsH4"
167
+ #
168
+ # @faker.version 2.1.3
169
+ def password(legacy_min_length = NOT_GIVEN, legacy_max_length = NOT_GIVEN, legacy_mix_case = NOT_GIVEN, legacy_special_characters = NOT_GIVEN, min_length: 8, max_length: 16, mix_case: true, special_characters: false)
170
+ warn_for_deprecated_arguments do |keywords|
171
+ keywords << :min_length if legacy_min_length != NOT_GIVEN
172
+ keywords << :max_length if legacy_max_length != NOT_GIVEN
173
+ keywords << :mix_case if legacy_mix_case != NOT_GIVEN
174
+ keywords << :special_characters if legacy_special_characters != NOT_GIVEN
175
+ end
176
+
177
+ raise ArgumentError, 'Password of length 1 can not have both mixed case and special characters' if min_length <= 1 && mix_case && special_characters
178
+
179
+ min_alpha = mix_case && min_length > 1 ? 2 : 0
180
+ temp = Lorem.characters(number: min_length, min_alpha: min_alpha)
181
+ diff_length = max_length - min_length
182
+
183
+ if diff_length.positive?
184
+ diff_rand = rand(diff_length + 1)
185
+ temp += Lorem.characters(number: diff_rand)
186
+ end
187
+
188
+ if mix_case
189
+ alpha_count = 0
190
+ temp.chars.each_with_index do |char, index|
191
+ if char =~ /[[:alpha:]]/
192
+ temp[index] = char.upcase if alpha_count.even?
193
+ alpha_count += 1
194
+ end
195
+ end
196
+ end
197
+
198
+ if special_characters
199
+ chars = %w[! @ # $ % ^ & *]
200
+ rand(1..min_length).times do |i|
201
+ temp[i] = chars[rand(chars.length)]
202
+ end
203
+ end
204
+
205
+ temp[rand(temp.size - 1)] = Lorem.characters(number: 1, min_alpha: 1).upcase if mix_case && special_characters && !temp.match(/[A-z]+/)
206
+
207
+ temp
208
+ end
209
+ # rubocop:enable Metrics/ParameterLists
210
+
211
+ ##
212
+ # Returns the domain name
213
+ #
214
+ # @return [String]
215
+ #
216
+ # @param subdomain [Bool] If true passed adds a subdomain in response
217
+ # @param domain [String]
218
+ #
219
+ # @example
220
+ # Faker::Internet.domain_name #=> "test.net"
221
+ # Faker::Internet.domain_name(subdomain: true) #=> "test.faker.io"
222
+ # Faker::Internet.domain_name(subdomain: true, domain: 'example') #=> "faker.example.com"
223
+ # Faker::Internet.domain_name(domain: 'faker') #=> "faker.org"
224
+ def domain_name(legacy_subdomain = NOT_GIVEN, subdomain: false, domain: nil)
225
+ warn_for_deprecated_arguments do |keywords|
226
+ keywords << :subdomain if legacy_subdomain != NOT_GIVEN
227
+ end
228
+
229
+ with_locale(:en) do
230
+ if domain
231
+ domain
232
+ .split('.')
233
+ .map { |domain_part| Char.prepare(domain_part) }
234
+ .tap do |domain_elements|
235
+ domain_elements << domain_suffix if domain_elements.length < 2
236
+ domain_elements.unshift(Char.prepare(domain_word)) if subdomain && domain_elements.length < 3
237
+ end.join('.')
238
+ else
239
+ [domain_word, domain_suffix].tap do |domain_elements|
240
+ domain_elements.unshift(Char.prepare(domain_word)) if subdomain
241
+ end.join('.')
242
+ end
243
+ end
244
+ end
245
+
246
+ ##
247
+ # Fixes ä, ö, ü, ß characters in string passed with ae, oe, ue, ss resp.
248
+ #
249
+ # @return [String]
250
+ #
251
+ # @param string [String]
252
+ #
253
+ # @example
254
+ # Faker::Internet.fix_umlauts #=> ""
255
+ # Faker::Internet.fix_umlauts(string: 'faker') #=> "faker"
256
+ # Faker::Internet.fix_umlauts(string: 'faküer') #=> "fakueer"
257
+ def fix_umlauts(legacy_string = NOT_GIVEN, string: '')
258
+ warn_for_deprecated_arguments do |keywords|
259
+ keywords << :string if legacy_string != NOT_GIVEN
260
+ end
261
+
262
+ Char.fix_umlauts(string)
263
+ end
264
+
265
+ ##
266
+ # Returns the domain word for internet
267
+ #
268
+ # @return [String]
269
+ #
270
+ # @example
271
+ # Faker::Internet.domain_word #=> "senger"
272
+ def domain_word
273
+ with_locale(:en) { Char.prepare(Company.name.split.first) }
274
+ end
275
+
276
+ ## Returns the domain suffix e.g. com, org, co, biz, info etc.
277
+ #
278
+ # @return [String]
279
+ #
280
+ # @example
281
+ # Faker::Internet.domain_suffix #=> "com"
282
+ # Faker::Internet.domain_suffix #=> "biz"
283
+ def domain_suffix
284
+ fetch('internet.domain_suffix')
285
+ end
286
+
287
+ ##
288
+ # Returns the MAC address
289
+ #
290
+ # @return [String]
291
+ #
292
+ # @example
293
+ # Faker::Internet.mac_address #=> "74:d0:c9:22:95:12"
294
+ # Faker::Internet.mac_address(prefix: 'a') #=> "0a:91:ce:24:89:3b"
295
+ # Faker::Internet.mac_address(prefix: 'aa') #=> "aa:38:a0:3e:e8:41"
296
+ # Faker::Internet.mac_address(prefix: 'aa:44') #=> "aa:44:30:88:6e:95"
297
+ def mac_address(legacy_prefix = NOT_GIVEN, prefix: '')
298
+ warn_for_deprecated_arguments do |keywords|
299
+ keywords << :prefix if legacy_prefix != NOT_GIVEN
300
+ end
301
+
302
+ prefix_digits = prefix.split(':').map { |d| d.to_i(16) }
303
+ address_digits = Array.new((6 - prefix_digits.size)) { rand(256) }
304
+ (prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
305
+ end
306
+
307
+ ##
308
+ # Returns the IPv4 address
309
+ #
310
+ # @return [String]
311
+ #
312
+ # @example
313
+ # Faker::Internet.ip_v4_address #=> "97.117.128.93"
314
+ def ip_v4_address
315
+ [rand_in_range(0, 255), rand_in_range(0, 255),
316
+ rand_in_range(0, 255), rand_in_range(0, 255)].join('.')
317
+ end
318
+
319
+ ##
320
+ # Returns the private IPv4 address
321
+ #
322
+ # @return [String]
323
+ #
324
+ # @example
325
+ # Faker::Internet.private_ip_v4_address #=> "127.120.80.42"
326
+ def private_ip_v4_address
327
+ sample(PRIVATE_IPV4_ADDRESS_RANGES).map { |range| rand(range) }.join('.')
328
+ end
329
+
330
+ ##
331
+ # Returns the public IPv4 address
332
+ #
333
+ # @return [String]
334
+ #
335
+ # @example
336
+ # Faker::Internet.public_ip_v4_address #=> "127.120.80.42"
337
+ def public_ip_v4_address
338
+ addr = nil
339
+ loop do
340
+ addr = ip_v4_address
341
+ break unless reserved_net_checker[addr]
342
+ end
343
+ addr
344
+ end
345
+
346
+ ##
347
+ # Returns the private network regular expressions
348
+ #
349
+ # @return [Array]
350
+ #
351
+ # @example
352
+ # Faker::Internet.private_nets_regex #=> [/^10\./, /^100\.(6[4-9]|[7-9]\d|1[0-1]\d|12[0-7])\./, /^127\./, /^169\.254\./, /^172\.(1[6-9]|2\d|3[0-1])\./, /^192\.0\.0\./, /^192\.168\./, /^198\.(1[8-9])\./]
353
+ def private_nets_regex
354
+ [
355
+ /^10\./, # 10.0.0.0 - 10.255.255.255
356
+ /^100\.(6[4-9]|[7-9]\d|1[0-1]\d|12[0-7])\./, # 100.64.0.0 - 100.127.255.255
357
+ /^127\./, # 127.0.0.0 - 127.255.255.255
358
+ /^169\.254\./, # 169.254.0.0 - 169.254.255.255
359
+ /^172\.(1[6-9]|2\d|3[0-1])\./, # 172.16.0.0 - 172.31.255.255
360
+ /^192\.0\.0\./, # 192.0.0.0 - 192.0.0.255
361
+ /^192\.168\./, # 192.168.0.0 - 192.168.255.255
362
+ /^198\.(1[8-9])\./ # 198.18.0.0 - 198.19.255.255
363
+ ]
364
+ end
365
+
366
+ ##
367
+ # Returns lambda to check if address passed is private or not
368
+ #
369
+ # @return [Lambda]
370
+ #
371
+ # @example
372
+ # Faker::Internet.private_net_checker.call("127.120.80.42") #=> true
373
+ # Faker::Internet.private_net_checker.call("148.120.80.42") #=> false
374
+ def private_net_checker
375
+ ->(addr) { private_nets_regex.any? { |net| net =~ addr } }
376
+ end
377
+
378
+ ##
379
+ # Returns the reserved network regular expressions
380
+ #
381
+ # @return [Array]
382
+ #
383
+ # @example
384
+ # Faker::Internet.reserved_nets_regex #=> [/^0\./, /^192\.0\.2\./, /^192\.88\.99\./, /^198\.51\.100\./, /^203\.0\.113\./, /^(22[4-9]|23\d)\./, /^(24\d|25[0-5])\./]
385
+ def reserved_nets_regex
386
+ [
387
+ /^0\./, # 0.0.0.0 - 0.255.255.255
388
+ /^192\.0\.2\./, # 192.0.2.0 - 192.0.2.255
389
+ /^192\.88\.99\./, # 192.88.99.0 - 192.88.99.255
390
+ /^198\.51\.100\./, # 198.51.100.0 - 198.51.100.255
391
+ /^203\.0\.113\./, # 203.0.113.0 - 203.0.113.255
392
+ /^(22[4-9]|23\d)\./, # 224.0.0.0 - 239.255.255.255
393
+ /^(24\d|25[0-5])\./ # 240.0.0.0 - 255.255.255.254 and 255.255.255.255
394
+ ]
395
+ end
396
+
397
+ ##
398
+ # Returns lambda function to check address passed is reserved or not
399
+ #
400
+ # @return [Lambda]
401
+ #
402
+ # @example
403
+ # Faker::Internet.reserved_net_checker.call('192.88.99.255') #=> true
404
+ # Faker::Internet.reserved_net_checker.call('192.88.199.255') #=> false
405
+ def reserved_net_checker
406
+ ->(addr) { (private_nets_regex + reserved_nets_regex).any? { |net| net =~ addr } }
407
+ end
408
+
409
+ ##
410
+ # Returns Ipv4 address with CIDR, range from 1 to 31
411
+ #
412
+ # @return [String]
413
+ #
414
+ # @example
415
+ # Faker::Internet.ip_v4_cidr #=> "129.162.99.74/16"
416
+ # Faker::Internet.ip_v4_cidr #=> "129.162.99.74/24"
417
+ def ip_v4_cidr
418
+ "#{ip_v4_address}/#{rand(1..31)}"
419
+ end
420
+
421
+ ##
422
+ # Returns Ipv6 address
423
+ #
424
+ # @return [String]
425
+ #
426
+ # @example
427
+ # Faker::Internet.ip_v6_address #=> "7754:76d4:c7aa:7646:ea68:1abb:4055:4343"
428
+ def ip_v6_address
429
+ (1..8).map { rand(65_536).to_s(16) }.join(':')
430
+ end
431
+
432
+ ##
433
+ # Returns Ipv6 address with CIDR, range between 1 to 127
434
+ #
435
+ # @return [String]
436
+ #
437
+ # @example
438
+ # Faker::Internet.ip_v6_cidr #=> "beca:9b99:4bb6:9712:af2f:516f:8507:96e1/99"
439
+ def ip_v6_cidr
440
+ "#{ip_v6_address}/#{rand(1..127)}"
441
+ end
442
+
443
+ # rubocop:disable Metrics/ParameterLists
444
+
445
+ ##
446
+ # Returns URL
447
+ #
448
+ # @return [String]
449
+ #
450
+ # @param host [String]
451
+ # @param path [String]
452
+ # @param scheme [String]
453
+ #
454
+ # @example
455
+ # Faker::Internet.url #=> "http://sipes-okon.com/hung.macejkovic"
456
+ # Faker::Internet.url(host: 'faker') #=> "http://faker/shad"
457
+ # Faker::Internet.url(host: 'faker', path: '/fake_test_path') #=> "http://faker/fake_test_path"
458
+ # Faker::Internet.url(host: 'faker', path: '/fake_test_path', scheme: 'https') #=> "https://faker/fake_test_path"
459
+ def url(legacy_host = NOT_GIVEN, legacy_path = NOT_GIVEN, legacy_scheme = NOT_GIVEN, host: domain_name, path: "/#{username}", scheme: 'http')
460
+ warn_for_deprecated_arguments do |keywords|
461
+ keywords << :host if legacy_host != NOT_GIVEN
462
+ keywords << :path if legacy_path != NOT_GIVEN
463
+ keywords << :scheme if legacy_scheme != NOT_GIVEN
464
+ end
465
+
466
+ "#{scheme}://#{host}#{path}"
467
+ end
468
+ # rubocop:enable Metrics/ParameterLists
469
+
470
+ ##
471
+ # Returns unique string in URL
472
+ #
473
+ # @return [String]
474
+ #
475
+ # @param words [String] Comma or period separated words list
476
+ # @param glue [String] Separator to add between words passed, default used are '-' or '_'
477
+ #
478
+ # @example
479
+ # Faker::Internet.slug #=> "repudiandae-sed"
480
+ # Faker::Internet.slug(words: 'test, faker') #=> "test-faker"
481
+ # Faker::Internet.slug(words: 'test. faker') #=> "test-faker"
482
+ # Faker::Internet.slug(words: 'test. faker', glue: '$') #=> "test$faker"
483
+ def slug(legacy_words = NOT_GIVEN, legacy_glue = NOT_GIVEN, words: nil, glue: nil)
484
+ warn_for_deprecated_arguments do |keywords|
485
+ keywords << :words if legacy_words != NOT_GIVEN
486
+ keywords << :glue if legacy_glue != NOT_GIVEN
487
+ end
488
+
489
+ glue ||= sample(%w[- _])
490
+ return words.delete(',.').gsub(' ', glue).downcase unless words.nil?
491
+
492
+ sample(translate('faker.internet.slug'), 2).join(glue)
493
+ end
494
+
495
+ ##
496
+ # Generates random token
497
+ #
498
+ # @return[String]
499
+ #
500
+ # @example
501
+ # Faker::Internet.device_token #=> "749f535671cf6b34d8e794d212d00c703b96274e07161b18b082d0d70ef1052f"
502
+ def device_token
503
+ shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join
504
+ end
505
+
506
+ ##
507
+ # Generates the random browser identifier
508
+ #
509
+ # @return [String]
510
+ #
511
+ # @param vendor [String] Name of vendor, supported vendors are aol, chrome, firefox, internet_explorer, netscape, opera, safari
512
+ #
513
+ # @example
514
+ # Faker::Internet.user_agent #=> "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
515
+ # Faker::Internet.user_agent(vendor: 'chrome') #=> "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
516
+ # Faker::Internet.user_agent(vendor: 'safari') #=> "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"
517
+ # Faker::Internet.user_agent(vendor: 'faker') #=> "Mozilla/5.0 (Windows; U; Win 9x 4.90; SG; rv:1.9.2.4) Gecko/20101104 Netscape/9.1.0285"
518
+ def user_agent(legacy_vendor = NOT_GIVEN, vendor: nil)
519
+ warn_for_deprecated_arguments do |keywords|
520
+ keywords << :vendor if legacy_vendor != NOT_GIVEN
521
+ end
522
+
523
+ agent_hash = translate('faker.internet.user_agent')
524
+ agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
525
+ sample(agents)
526
+ end
527
+
528
+ ##
529
+ # Generate Web Crawler's user agents
530
+ #
531
+ # @return [String]
532
+ #
533
+ # @param vendor [String] Name of vendor, supported vendors are googlebot, bingbot, duckduckbot, baiduspider, yandexbot
534
+ #
535
+ # @example
536
+ # Faker::Internet.bot_user_agent #=> "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
537
+ # Faker::Internet.bot_user_agent(vendor: 'googlebot') #=> "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/99.0.4844.84 Safari/537.36"
538
+ # Faker::Internet.bot_user_agent(vendor: 'bingbot') #=> "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/86.0.4240.68 Safari/537.36 Edg/86.0.622.31"
539
+ def bot_user_agent(vendor: nil)
540
+ agent_hash = translate('faker.internet.bot_user_agent')
541
+ agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
542
+ sample(agents)
543
+ end
544
+
545
+ ##
546
+ # Generated universally unique identifier
547
+ #
548
+ # @return [String]
549
+ #
550
+ # @example
551
+ # Faker::Internet.uuid #=> "8a6cdd40-6d78-4fdb-912b-190e3057197f"
552
+ def uuid
553
+ # borrowed from: https://github.com/ruby/ruby/blob/d48783bb0236db505fe1205d1d9822309de53a36/lib/securerandom.rb#L250
554
+ ary = Faker::Config.random.bytes(16).unpack('NnnnnN')
555
+ ary[2] = (ary[2] & 0x0fff) | 0x4000
556
+ ary[3] = (ary[3] & 0x3fff) | 0x8000
557
+ '%08x-%04x-%04x-%04x-%04x%08x' % ary # rubocop:disable Style/FormatString
558
+ end
559
+
560
+ ##
561
+ # Produces a random string of alphabetic characters, (no digits)
562
+ #
563
+ # @param length [Integer] The length of the string to generate
564
+ # @param padding [Boolean] Toggles if a final equal '=' will be added.
565
+ # @param urlsafe [Boolean] Toggles charset to '-' and '_' instead of '+' and '/'.
566
+ #
567
+ # @return [String]
568
+ #
569
+ # @example
570
+ # Faker::Internet.base64
571
+ # #=> "r_hbZ2DSD-ZACzZT"
572
+ # @example
573
+ # Faker::Internet.base64(length: 4, padding: true, urlsafe: false)
574
+ # #=> "x1/R="
575
+ #
576
+ # @faker.version 2.11.0
577
+ def base64(length: 16, padding: false, urlsafe: true)
578
+ char_range = [
579
+ Array('0'..'9'),
580
+ Array('A'..'Z'),
581
+ Array('a'..'z'),
582
+ urlsafe ? %w[- _] : %w[+ /]
583
+ ].flatten
584
+ s = Array.new(length) { sample(char_range) }.join
585
+ s += '=' if padding
586
+ s
587
+ end
588
+
589
+ ##
590
+ # Produces a randomized hash of internet user details
591
+ # @example
592
+ # Faker::Internet.user #=> { username: 'alexie', email: 'alexie@example.net' }
593
+ #
594
+ # @example
595
+ # Faker::Internet.user('username', 'email', 'password') #=> { username: 'alexie', email: 'alexie@example.net', password: 'DtEf9P8wS31iMyC' }
596
+ #
597
+ # @return [hash]
598
+ #
599
+ # @faker.version next
600
+ def user(*args)
601
+ user_hash = {}
602
+ args = %w[username email] if args.empty?
603
+ args.each { |arg| user_hash[:"#{arg}"] = send(arg) }
604
+ user_hash
605
+ end
606
+
607
+ alias user_name username
608
+
609
+ private
610
+
611
+ def sanitize_email_local_part(local_part)
612
+ char_range = [
613
+ Array('0'..'9'),
614
+ Array('A'..'Z'),
615
+ Array('a'..'z'),
616
+ "!#$%&'*+-/=?^_`{|}~.".chars
617
+ ].flatten
618
+
619
+ local_part.chars.map do |char|
620
+ char_range.include?(char) ? char : '#'
621
+ end.join
622
+ end
623
+
624
+ def construct_email(local_part, domain_name)
625
+ [local_part, domain_name].join('@')
626
+ end
627
+ end
628
+ end
629
+ end