faker 1.1.2 → 3.1.1

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