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