faker 1.8.7 → 2.22.0

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