faker 2.0.0 → 3.8.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 (584) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1896 -11
  3. data/README.md +140 -307
  4. data/lib/faker/blockchain/aeternity.rb +70 -0
  5. data/lib/faker/blockchain/bitcoin.rb +27 -2
  6. data/lib/faker/blockchain/ethereum.rb +11 -1
  7. data/lib/faker/blockchain/tezos.rb +92 -9
  8. data/lib/faker/blockchain.rb +9 -0
  9. data/lib/faker/books/culture_series.rb +49 -0
  10. data/lib/faker/books/dune.rb +71 -5
  11. data/lib/faker/books/lovecraft.rb +182 -7
  12. data/lib/faker/books/the_kingkiller_chronicle.rb +61 -0
  13. data/lib/faker/books.rb +9 -0
  14. data/lib/faker/creature/animal.rb +9 -0
  15. data/lib/faker/creature/bird.rb +203 -0
  16. data/lib/faker/creature/cat.rb +27 -0
  17. data/lib/faker/creature/dog.rb +72 -0
  18. data/lib/faker/creature/horse.rb +18 -0
  19. data/lib/faker/creature.rb +9 -0
  20. data/lib/faker/default/address.rb +251 -6
  21. data/lib/faker/default/adjective.rb +35 -0
  22. data/lib/faker/default/alphanumeric.rb +49 -6
  23. data/lib/faker/default/ancient.rb +36 -0
  24. data/lib/faker/default/app.rb +45 -0
  25. data/lib/faker/default/appliance.rb +18 -0
  26. data/lib/faker/default/artist.rb +9 -0
  27. data/lib/faker/default/avatar.rb +32 -1
  28. data/lib/faker/default/bank.rb +117 -22
  29. data/lib/faker/default/barcode.rb +165 -0
  30. data/lib/faker/default/beer.rb +75 -3
  31. data/lib/faker/default/blood.rb +48 -0
  32. data/lib/faker/default/book.rb +61 -0
  33. data/lib/faker/default/boolean.rb +14 -1
  34. data/lib/faker/default/business.rb +27 -0
  35. data/lib/faker/default/camera.rb +46 -0
  36. data/lib/faker/default/cannabis.rb +90 -0
  37. data/lib/faker/default/chile_rut.rb +62 -8
  38. data/lib/faker/default/chuck_norris.rb +13 -2
  39. data/lib/faker/default/code.rb +165 -38
  40. data/lib/faker/default/coffee.rb +45 -0
  41. data/lib/faker/default/coin.rb +18 -0
  42. data/lib/faker/default/color.rb +123 -5
  43. data/lib/faker/default/commerce.rb +102 -11
  44. data/lib/faker/default/company.rb +445 -23
  45. data/lib/faker/default/compass.rb +135 -0
  46. data/lib/faker/default/computer.rb +63 -0
  47. data/lib/faker/default/construction.rb +54 -0
  48. data/lib/faker/default/cosmere.rb +90 -0
  49. data/lib/faker/default/crypto.rb +52 -5
  50. data/lib/faker/default/crypto_coin.rb +45 -0
  51. data/lib/faker/default/currency.rb +27 -0
  52. data/lib/faker/default/date.rb +145 -5
  53. data/lib/faker/default/dc_comics.rb +45 -0
  54. data/lib/faker/default/demographic.rb +57 -0
  55. data/lib/faker/default/dessert.rb +27 -0
  56. data/lib/faker/default/device.rb +54 -0
  57. data/lib/faker/default/driving_licence.rb +87 -14
  58. data/lib/faker/default/drone.rb +332 -0
  59. data/lib/faker/default/educator.rb +73 -6
  60. data/lib/faker/default/electrical_components.rb +27 -0
  61. data/lib/faker/default/emotion.rb +33 -0
  62. data/lib/faker/default/esport.rb +45 -0
  63. data/lib/faker/default/file.rb +53 -4
  64. data/lib/faker/default/finance.rb +74 -2
  65. data/lib/faker/default/food.rb +93 -3
  66. data/lib/faker/default/funny_name.rb +45 -0
  67. data/lib/faker/default/game.rb +48 -0
  68. data/lib/faker/default/gender.rb +31 -0
  69. data/lib/faker/default/greek_philosophers.rb +18 -0
  70. data/lib/faker/default/hacker.rb +59 -1
  71. data/lib/faker/default/hipster.rb +103 -7
  72. data/lib/faker/default/hobby.rb +22 -0
  73. data/lib/faker/default/house.rb +18 -0
  74. data/lib/faker/default/html.rb +230 -0
  75. data/lib/faker/default/id_number.rb +313 -8
  76. data/lib/faker/default/industry_segments.rb +36 -0
  77. data/lib/faker/default/invoice.rb +34 -7
  78. data/lib/faker/default/job.rb +36 -0
  79. data/lib/faker/default/json.rb +68 -8
  80. data/lib/faker/default/kpop.rb +54 -0
  81. data/lib/faker/default/lorem.rb +194 -21
  82. data/lib/faker/default/lorem_flickr.rb +67 -2
  83. data/lib/faker/default/markdown.rb +100 -9
  84. data/lib/faker/default/marketing.rb +9 -0
  85. data/lib/faker/default/measurement.rb +93 -2
  86. data/lib/faker/default/military.rb +71 -0
  87. data/lib/faker/default/mountain.rb +33 -0
  88. data/lib/faker/default/movie.rb +33 -0
  89. data/lib/faker/default/name.rb +98 -0
  90. data/lib/faker/default/nation.rb +45 -5
  91. data/lib/faker/default/{nhs.rb → national_health_service.rb} +27 -4
  92. data/lib/faker/default/nato_phonetic_alphabet.rb +9 -0
  93. data/lib/faker/default/number.rb +151 -12
  94. data/lib/faker/default/omniauth.rb +233 -92
  95. data/lib/faker/default/phone_number.rb +113 -11
  96. data/lib/faker/default/placeholdit.rb +24 -3
  97. data/lib/faker/default/programming_language.rb +18 -0
  98. data/lib/faker/default/quote.rb +124 -0
  99. data/lib/faker/default/relationship.rb +46 -1
  100. data/lib/faker/default/restaurant.rb +54 -2
  101. data/lib/faker/default/science.rb +135 -0
  102. data/lib/faker/default/slack_emoji.rb +81 -0
  103. data/lib/faker/default/source.rb +43 -0
  104. data/lib/faker/default/south_africa.rb +93 -3
  105. data/lib/faker/default/space.rb +128 -1
  106. data/lib/faker/default/sport.rb +116 -0
  107. data/lib/faker/default/string.rb +18 -4
  108. data/lib/faker/default/stripe.rb +64 -3
  109. data/lib/faker/default/subscription.rb +45 -0
  110. data/lib/faker/default/superhero.rb +45 -0
  111. data/lib/faker/default/tea.rb +41 -0
  112. data/lib/faker/default/team.rb +45 -0
  113. data/lib/faker/default/theater.rb +49 -0
  114. data/lib/faker/default/time.rb +80 -0
  115. data/lib/faker/default/types.rb +91 -11
  116. data/lib/faker/default/university.rb +45 -0
  117. data/lib/faker/default/vehicle.rb +225 -42
  118. data/lib/faker/default/verb.rb +45 -0
  119. data/lib/faker/default/vulnerability_identifier.rb +23 -0
  120. data/lib/faker/default/world_cup.rb +50 -0
  121. data/lib/faker/default/x.rb +189 -0
  122. data/lib/faker/default.rb +9 -0
  123. data/lib/faker/fantasy/tolkien.rb +67 -0
  124. data/lib/faker/fantasy.rb +9 -0
  125. data/lib/faker/games/clash_of_clans.rb +48 -0
  126. data/lib/faker/games/control.rb +113 -0
  127. data/lib/faker/games/dnd.rb +178 -0
  128. data/lib/faker/games/dota.rb +60 -0
  129. data/lib/faker/games/elder_scrolls.rb +98 -0
  130. data/lib/faker/games/fallout.rb +37 -0
  131. data/lib/faker/games/final_fantasy_xiv.rb +73 -0
  132. data/lib/faker/games/half_life.rb +27 -0
  133. data/lib/faker/games/heroes.rb +40 -0
  134. data/lib/faker/games/heroes_of_the_storm.rb +38 -2
  135. data/lib/faker/games/league_of_legends.rb +54 -0
  136. data/lib/faker/games/minecraft.rb +113 -0
  137. data/lib/faker/games/myst.rb +45 -0
  138. data/lib/faker/games/overwatch.rb +27 -0
  139. data/lib/faker/games/pokemon.rb +27 -0
  140. data/lib/faker/games/sonic_the_hedgehog.rb +27 -0
  141. data/lib/faker/games/street_fighter.rb +61 -0
  142. data/lib/faker/games/super_mario.rb +48 -0
  143. data/lib/faker/games/super_smash_bros.rb +18 -0
  144. data/lib/faker/games/tarkov.rb +205 -0
  145. data/lib/faker/games/touhou.rb +75 -0
  146. data/lib/faker/games/warhammer_fantasy.rb +74 -0
  147. data/lib/faker/games/witcher.rb +93 -0
  148. data/lib/faker/games/world_of_warcraft.rb +44 -1
  149. data/lib/faker/games/zelda.rb +37 -1
  150. data/lib/faker/games.rb +9 -0
  151. data/lib/faker/internet/http.rb +48 -0
  152. data/lib/faker/internet.rb +582 -0
  153. data/lib/faker/japanese_media/conan.rb +48 -0
  154. data/lib/faker/japanese_media/cowboy_bebop.rb +61 -0
  155. data/lib/faker/japanese_media/doraemon.rb +48 -0
  156. data/lib/faker/japanese_media/dragon_ball.rb +35 -0
  157. data/lib/faker/japanese_media/fullmetal_alchemist_brotherhood.rb +48 -0
  158. data/lib/faker/japanese_media/kamen_rider.rb +102 -0
  159. data/lib/faker/japanese_media/naruto.rb +61 -0
  160. data/lib/faker/japanese_media/one_piece.rb +55 -1
  161. data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
  162. data/lib/faker/japanese_media/sword_art_online.rb +36 -0
  163. data/lib/faker/japanese_media.rb +9 -0
  164. data/lib/faker/locations/australia.rb +49 -0
  165. data/lib/faker/locations.rb +9 -0
  166. data/lib/faker/movies/avatar.rb +49 -0
  167. data/lib/faker/movies/back_to_the_future.rb +28 -0
  168. data/lib/faker/movies/departed.rb +49 -0
  169. data/lib/faker/movies/ghostbusters.rb +28 -0
  170. data/lib/faker/movies/hackers.rb +48 -0
  171. data/lib/faker/movies/harry_potter.rb +54 -0
  172. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +69 -0
  173. data/lib/faker/movies/hobbit.rb +41 -4
  174. data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
  175. data/lib/faker/movies/lebowski.rb +27 -0
  176. data/lib/faker/movies/lord_of_the_rings.rb +31 -3
  177. data/lib/faker/movies/princess_bride.rb +19 -0
  178. data/lib/faker/movies/star_wars.rb +169 -5
  179. data/lib/faker/movies/the_room.rb +63 -0
  180. data/lib/faker/movies/tron.rb +161 -0
  181. data/lib/faker/movies/v_for_vendetta.rb +29 -0
  182. data/lib/faker/movies.rb +9 -0
  183. data/lib/faker/music/bossa_nova.rb +35 -0
  184. data/lib/faker/music/grateful_dead.rb +18 -2
  185. data/lib/faker/music/hiphop.rb +48 -0
  186. data/lib/faker/music/opera.rb +273 -1
  187. data/lib/faker/music/pearl_jam.rb +48 -0
  188. data/lib/faker/music/phish.rb +36 -1
  189. data/lib/faker/music/prince.rb +64 -0
  190. data/lib/faker/music/rock_band.rb +21 -0
  191. data/lib/faker/music/rush.rb +35 -0
  192. data/lib/faker/music/smashing_pumpkins.rb +62 -0
  193. data/lib/faker/music/umphreys_mcgee.rb +9 -0
  194. data/lib/faker/music.rb +149 -0
  195. data/lib/faker/quotes/chiquito.rb +80 -0
  196. data/lib/faker/quotes/rajnikanth.rb +27 -0
  197. data/lib/faker/quotes/shakespeare.rb +70 -0
  198. data/lib/faker/quotes.rb +9 -0
  199. data/lib/faker/religion/bible.rb +50 -0
  200. data/lib/faker/religion.rb +9 -0
  201. data/lib/faker/sports/basketball.rb +36 -0
  202. data/lib/faker/sports/chess.rb +90 -0
  203. data/lib/faker/sports/football.rb +45 -0
  204. data/lib/faker/sports/mountaineering.rb +22 -0
  205. data/lib/faker/sports/volleyball.rb +74 -0
  206. data/lib/faker/sports.rb +9 -0
  207. data/lib/faker/travel/airport.rb +43 -0
  208. data/lib/faker/travel/train_station.rb +54 -0
  209. data/lib/faker/travel.rb +9 -0
  210. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +22 -0
  211. data/lib/faker/tv_shows/archer.rb +51 -0
  212. data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
  213. data/lib/faker/tv_shows/bojack_horseman.rb +28 -0
  214. data/lib/faker/tv_shows/breaking_bad.rb +18 -0
  215. data/lib/faker/tv_shows/brooklyn_nine_nine.rb +38 -0
  216. data/lib/faker/tv_shows/buffy.rb +47 -2
  217. data/lib/faker/tv_shows/community.rb +19 -0
  218. data/lib/faker/tv_shows/dr_who.rb +65 -2
  219. data/lib/faker/tv_shows/dumb_and_dumber.rb +28 -0
  220. data/lib/faker/tv_shows/family_guy.rb +28 -0
  221. data/lib/faker/tv_shows/final_space.rb +51 -0
  222. data/lib/faker/tv_shows/friends.rb +27 -0
  223. data/lib/faker/tv_shows/futurama.rb +65 -0
  224. data/lib/faker/tv_shows/game_of_thrones.rb +46 -0
  225. data/lib/faker/tv_shows/hey_arnold.rb +27 -0
  226. data/lib/faker/tv_shows/how_i_met_your_mother.rb +37 -0
  227. data/lib/faker/tv_shows/michael_scott.rb +10 -0
  228. data/lib/faker/tv_shows/new_girl.rb +19 -0
  229. data/lib/faker/tv_shows/parks_and_rec.rb +18 -0
  230. data/lib/faker/tv_shows/rick_and_morty.rb +28 -0
  231. data/lib/faker/tv_shows/ru_paul.rb +18 -0
  232. data/lib/faker/tv_shows/seinfeld.rb +28 -0
  233. data/lib/faker/tv_shows/silicon_valley.rb +75 -0
  234. data/lib/faker/tv_shows/simpsons.rb +42 -0
  235. data/lib/faker/tv_shows/south_park.rb +34 -0
  236. data/lib/faker/tv_shows/spongebob.rb +50 -0
  237. data/lib/faker/tv_shows/star_trek.rb +36 -0
  238. data/lib/faker/tv_shows/stargate.rb +28 -0
  239. data/lib/faker/tv_shows/stranger_things.rb +19 -0
  240. data/lib/faker/tv_shows/suits.rb +37 -0
  241. data/lib/faker/tv_shows/supernatural.rb +48 -0
  242. data/lib/faker/tv_shows/the_expanse.rb +36 -0
  243. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +30 -2
  244. data/lib/faker/tv_shows/the_it_crowd.rb +37 -0
  245. data/lib/faker/tv_shows/the_office.rb +37 -0
  246. data/lib/faker/tv_shows/the_thick_of_it.rb +28 -0
  247. data/lib/faker/tv_shows/twin_peaks.rb +28 -0
  248. data/lib/faker/tv_shows/venture_bros.rb +38 -0
  249. data/lib/faker/tv_shows.rb +9 -0
  250. data/lib/faker/version.rb +2 -2
  251. data/lib/faker.rb +125 -45
  252. data/lib/helpers/base58.rb +1 -1
  253. data/lib/helpers/char.rb +22 -27
  254. data/lib/helpers/deprecator.rb +118 -0
  255. data/lib/helpers/positional_generator.rb +478 -0
  256. data/lib/helpers/unique_generator.rb +18 -14
  257. data/lib/locales/README.md +18 -2
  258. data/lib/locales/ar.yml +1608 -46
  259. data/lib/locales/bg.yml +937 -21
  260. data/lib/locales/ca-CAT.yml +347 -12
  261. data/lib/locales/ca.yml +580 -15
  262. data/lib/locales/da-DK.yml +530 -36
  263. data/lib/locales/de-AT.yml +3487 -25
  264. data/lib/locales/de-CH.yml +6051 -9
  265. data/lib/locales/de.yml +7185 -97
  266. data/lib/locales/ee.yml +1185 -27
  267. data/lib/locales/en/address.yml +1829 -559
  268. data/lib/locales/en/adjective.yml +179 -0
  269. data/lib/locales/en/airport.yml +381 -0
  270. data/lib/locales/en/ancient.yml +128 -4
  271. data/lib/locales/en/animal.yml +141 -2
  272. data/lib/locales/en/app.yml +89 -2
  273. data/lib/locales/en/appliance.yml +81 -2
  274. data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
  275. data/lib/locales/en/archer.yml +75 -0
  276. data/lib/locales/en/artist.yml +43 -1
  277. data/lib/locales/en/australia.yml +108 -0
  278. data/lib/locales/en/avatar.yml +57 -0
  279. data/lib/locales/en/back_to_the_future.yml +145 -117
  280. data/lib/locales/en/bank.yml +92 -3
  281. data/lib/locales/en/barcode.yml +24 -0
  282. data/lib/locales/en/beer.yml +232 -6
  283. data/lib/locales/en/bible.yml +87 -0
  284. data/lib/locales/en/big_bang_theory.yml +37 -0
  285. data/lib/locales/en/bird.yml +1280 -0
  286. data/lib/locales/en/blood.yml +13 -0
  287. data/lib/locales/en/bojack_horseman.yml +63 -3
  288. data/lib/locales/en/book.yml +486 -3
  289. data/lib/locales/en/bossa_nova.yml +110 -3
  290. data/lib/locales/en/breaking_bad.yml +110 -25
  291. data/lib/locales/en/brooklyn_nine_nine.yml +34 -0
  292. data/lib/locales/en/buffy.yml +239 -257
  293. data/lib/locales/en/business.yml +18 -2
  294. data/lib/locales/en/camera.yml +611 -0
  295. data/lib/locales/en/cannabis.yml +344 -10
  296. data/lib/locales/en/cat.yml +155 -3
  297. data/lib/locales/en/chess.yml +102 -0
  298. data/lib/locales/en/chiquito.yml +63 -0
  299. data/lib/locales/en/chuck_norris.yml +78 -79
  300. data/lib/locales/en/clash_of_clan.yml +99 -0
  301. data/lib/locales/en/code.yml +501 -1
  302. data/lib/locales/en/coffee.yml +450 -25
  303. data/lib/locales/en/color.yml +73 -1
  304. data/lib/locales/en/commerce.yml +117 -6
  305. data/lib/locales/en/community.yml +55 -30
  306. data/lib/locales/en/company.yml +1756 -13
  307. data/lib/locales/en/compass.yml +108 -12
  308. data/lib/locales/en/computer.yml +55 -0
  309. data/lib/locales/en/conan.yml +169 -0
  310. data/lib/locales/en/construction.yml +416 -422
  311. data/lib/locales/en/control.yml +247 -0
  312. data/lib/locales/en/cosmere.yml +219 -54
  313. data/lib/locales/en/cowboy_bebop.yml +160 -0
  314. data/lib/locales/en/culture_series.yml +298 -298
  315. data/lib/locales/en/currency.yml +358 -3
  316. data/lib/locales/en/dc_comics.yml +178 -49
  317. data/lib/locales/en/demographic.yml +218 -5
  318. data/lib/locales/en/departed.yml +46 -0
  319. data/lib/locales/en/dessert.yml +78 -3
  320. data/lib/locales/en/device.yml +112 -4
  321. data/lib/locales/en/dnd.yml +636 -0
  322. data/lib/locales/en/dog.yml +262 -7
  323. data/lib/locales/en/doraemon.yml +284 -0
  324. data/lib/locales/en/dota.yml +704 -63
  325. data/lib/locales/en/dr_who.yml +468 -93
  326. data/lib/locales/en/dragon_ball.yml +243 -1
  327. data/lib/locales/en/driving_license.yml +181 -0
  328. data/lib/locales/en/drone.yml +95 -0
  329. data/lib/locales/en/dumb_and_dumber.yml +72 -56
  330. data/lib/locales/en/dune.yml +270 -131
  331. data/lib/locales/en/educator.yml +75 -6
  332. data/lib/locales/en/elder_scrolls.yml +582 -9
  333. data/lib/locales/en/electrical_components.yml +49 -3
  334. data/lib/locales/en/emotion.yml +480 -0
  335. data/lib/locales/en/esport.yml +58 -5
  336. data/lib/locales/en/fallout.yml +311 -133
  337. data/lib/locales/en/family_guy.yml +54 -4
  338. data/lib/locales/en/file.yml +109 -2
  339. data/lib/locales/en/final_fantasy_xiv.yml +754 -0
  340. data/lib/locales/en/final_space.yml +35 -0
  341. data/lib/locales/en/finance.yml +80 -4
  342. data/lib/locales/en/food.yml +1067 -10
  343. data/lib/locales/en/football.yml +121 -5
  344. data/lib/locales/en/fresh_prince_of_bel_air.yml +119 -70
  345. data/lib/locales/en/friends.yml +162 -3
  346. data/lib/locales/en/fullmetal_alchemist_brotherhood.yml +78 -0
  347. data/lib/locales/en/funny_name.yml +752 -1
  348. data/lib/locales/en/futurama.yml +336 -0
  349. data/lib/locales/en/game.yml +11 -0
  350. data/lib/locales/en/game_of_thrones.yml +2487 -5
  351. data/lib/locales/en/gender.yml +15 -2
  352. data/lib/locales/en/ghostbusters.yml +101 -88
  353. data/lib/locales/en/grateful_dead.yml +47 -45
  354. data/lib/locales/en/greek_philosophers.yml +44 -23
  355. data/lib/locales/en/hacker.yml +110 -5
  356. data/lib/locales/en/hackers.yml +53 -0
  357. data/lib/locales/en/half_life.yml +84 -3
  358. data/lib/locales/en/harry_potter.yml +323 -6
  359. data/lib/locales/en/heroes.yml +408 -3
  360. data/lib/locales/en/heroes_of_the_storm.yml +131 -4
  361. data/lib/locales/en/hey_arnold.yml +104 -21
  362. data/lib/locales/en/hipster.yml +203 -1
  363. data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +243 -42
  364. data/lib/locales/en/hobby.yml +170 -0
  365. data/lib/locales/en/horse.yml +446 -2
  366. data/lib/locales/en/house.yml +34 -2
  367. data/lib/locales/en/how_i_met_your_mother.yml +97 -25
  368. data/lib/locales/en/how_to_train_your_dragon.yml +173 -0
  369. data/lib/locales/en/id_number.yml +7 -2
  370. data/lib/locales/en/industry_segments.yml +188 -4
  371. data/lib/locales/en/internet.yml +136 -3
  372. data/lib/locales/en/jack_handey.yml +54 -0
  373. data/lib/locales/en/job.yml +98 -7
  374. data/lib/locales/en/kamen_rider.yml +718 -0
  375. data/lib/locales/en/kpop.yml +954 -80
  376. data/lib/locales/en/league_of_legends.yml +285 -6
  377. data/lib/locales/en/lebowski.yml +58 -40
  378. data/lib/locales/en/lorem.yml +1095 -6
  379. data/lib/locales/en/lovecraft.yml +76 -6
  380. data/lib/locales/en/markdown.yml +12 -2
  381. data/lib/locales/en/marketing.yml +54 -1
  382. data/lib/locales/en/measurement.yml +42 -8
  383. data/lib/locales/en/michael_scott.yml +41 -42
  384. data/lib/locales/en/military.yml +179 -5
  385. data/lib/locales/en/minecraft.yml +663 -0
  386. data/lib/locales/en/mitch_hedberg.yml +46 -0
  387. data/lib/locales/en/mountain.yml +171 -0
  388. data/lib/locales/en/mountaineering.yml +14 -0
  389. data/lib/locales/en/movie.yml +206 -2
  390. data/lib/locales/en/music.yml +461 -29
  391. data/lib/locales/en/myst.yml +87 -31
  392. data/lib/locales/en/name.yml +6068 -5
  393. data/lib/locales/en/naruto.yml +230 -0
  394. data/lib/locales/en/nato_phonetic_alphabet.yml +27 -1
  395. data/lib/locales/en/new_girl.yml +35 -37
  396. data/lib/locales/en/one_piece.yml +359 -6
  397. data/lib/locales/en/opera.yml +169 -1
  398. data/lib/locales/en/overwatch.yml +2648 -37
  399. data/lib/locales/en/parks_and_rec.yml +33 -4
  400. data/lib/locales/en/pearl_jam.yml +213 -0
  401. data/lib/locales/en/phish.yml +391 -1
  402. data/lib/locales/en/phone_number.yml +78 -3
  403. data/lib/locales/en/pokemon.yml +417 -4
  404. data/lib/locales/en/prince.yml +227 -0
  405. data/lib/locales/en/princess_bride.yml +48 -2
  406. data/lib/locales/en/programming_language.yml +753 -3
  407. data/lib/locales/en/quote.yml +606 -163
  408. data/lib/locales/en/rajnikanth.yml +77 -0
  409. data/lib/locales/en/relationship.yml +29 -6
  410. data/lib/locales/en/restaurant.yml +31 -31
  411. data/lib/locales/en/rick_and_morty.yml +116 -3
  412. data/lib/locales/en/rock_band.yml +228 -1
  413. data/lib/locales/en/rupaul.yml +120 -122
  414. data/lib/locales/en/rush.yml +32 -0
  415. data/lib/locales/en/science.yml +481 -3
  416. data/lib/locales/en/seinfeld.yml +110 -3
  417. data/lib/locales/en/shakespeare.yml +46 -53
  418. data/lib/locales/en/silicon_valley.yml +122 -50
  419. data/lib/locales/en/simpsons.yml +897 -23
  420. data/lib/locales/en/slack_emoji.yml +874 -8
  421. data/lib/locales/en/smashing_pumpkins.yml +382 -0
  422. data/lib/locales/en/source.yml +35 -0
  423. data/lib/locales/en/south_park.yml +360 -2
  424. data/lib/locales/en/space.yml +373 -14
  425. data/lib/locales/en/spongebob.yml +489 -0
  426. data/lib/locales/en/sport.yml +130 -0
  427. data/lib/locales/en/star_trek.yml +105 -4
  428. data/lib/locales/en/star_wars.yml +564 -219
  429. data/lib/locales/en/stargate.yml +65 -18
  430. data/lib/locales/en/stranger_thing.yml +31 -33
  431. data/lib/locales/en/street_fighter.yml +1524 -0
  432. data/lib/locales/en/stripe.yml +3 -3
  433. data/lib/locales/en/studio_ghibli.yml +107 -0
  434. data/lib/locales/en/subscription.yml +47 -5
  435. data/lib/locales/en/suits.yml +45 -0
  436. data/lib/locales/en/super_mario.yml +58 -0
  437. data/lib/locales/en/super_smash_bros.yml +23 -5
  438. data/lib/locales/en/superhero.yml +574 -4
  439. data/lib/locales/en/supernatural.yml +141 -0
  440. data/lib/locales/en/sword_art_online.yml +327 -331
  441. data/lib/locales/en/tarkov.yml +593 -0
  442. data/lib/locales/en/tea.yml +172 -0
  443. data/lib/locales/en/team.yml +125 -3
  444. data/lib/locales/en/the_expanse.yml +92 -4
  445. data/lib/locales/en/the_it_crowd.yml +148 -152
  446. data/lib/locales/en/the_kingkiller_chronicle.yml +56 -0
  447. data/lib/locales/en/the_office.yml +82 -0
  448. data/lib/locales/en/the_room.yml +68 -0
  449. data/lib/locales/en/the_thick_of_it.yml +83 -3
  450. data/lib/locales/en/theater.yml +597 -0
  451. data/lib/locales/en/tolkien.yml +2453 -0
  452. data/lib/locales/en/touhou.yml +839 -0
  453. data/lib/locales/en/train_station.yml +280 -0
  454. data/lib/locales/en/tron.yml +227 -0
  455. data/lib/locales/en/twin_peaks.yml +130 -3
  456. data/lib/locales/en/umphreys_mcgee.yml +266 -1
  457. data/lib/locales/en/university.yml +15 -2
  458. data/lib/locales/en/v_for_vendetta.yml +157 -160
  459. data/lib/locales/en/vehicle.yml +2809 -75
  460. data/lib/locales/en/venture_bros.yml +225 -4
  461. data/lib/locales/en/verbs.yml +3785 -5
  462. data/lib/locales/en/volleyball.yml +501 -0
  463. data/lib/locales/en/warhammer_fantasy.yml +549 -0
  464. data/lib/locales/en/witcher.yml +426 -7
  465. data/lib/locales/en/world_cup.yml +1132 -235
  466. data/lib/locales/en/world_of_warcraft.yml +122 -4
  467. data/lib/locales/en/yoda.yml +38 -1
  468. data/lib/locales/en/zelda.yml +962 -4
  469. data/lib/locales/en-AU.yml +728 -17
  470. data/lib/locales/en-BORK.yml +104 -1
  471. data/lib/locales/en-CA.yml +373 -15
  472. data/lib/locales/en-GB.yml +118 -8
  473. data/lib/locales/en-IND.yml +1259 -16
  474. data/lib/locales/en-KE.yml +212 -0
  475. data/lib/locales/en-MS.yml +364 -16
  476. data/lib/locales/en-NEP.yml +213 -36
  477. data/lib/locales/en-NG.yml +737 -65
  478. data/lib/locales/en-NZ.yml +1183 -27
  479. data/lib/locales/en-PAK.yml +392 -9
  480. data/lib/locales/en-SG.yml +581 -15
  481. data/lib/locales/en-TH.yml +360 -0
  482. data/lib/locales/en-UG.yml +374 -75
  483. data/lib/locales/en-US.yml +6937 -71
  484. data/lib/locales/en-ZA.yml +1394 -13
  485. data/lib/locales/en-au-ocker.yml +266 -21
  486. data/lib/locales/en.yml +0 -50
  487. data/lib/locales/es-AR.yml +4570 -0
  488. data/lib/locales/es-MX.yml +1910 -41
  489. data/lib/locales/es.yml +2172 -52
  490. data/lib/locales/fa.yml +1624 -3
  491. data/lib/locales/fi-FI.yml +316 -16
  492. data/lib/locales/fr/address.yml +773 -0
  493. data/lib/locales/fr/adjective.yml +266 -0
  494. data/lib/locales/fr/ancient.yml +141 -0
  495. data/lib/locales/fr/animal.yml +122 -0
  496. data/lib/locales/fr/appliance.yml +69 -0
  497. data/lib/locales/fr/book.yml +31 -0
  498. data/lib/locales/fr/color.yml +34 -0
  499. data/lib/locales/fr/company.yml +497 -0
  500. data/lib/locales/fr/compass.yml +71 -0
  501. data/lib/locales/fr/demographic.yml +6 -0
  502. data/lib/locales/fr/gender.yml +21 -0
  503. data/lib/locales/fr/internet.yml +15 -0
  504. data/lib/locales/fr/lorem.yml +1094 -0
  505. data/lib/locales/fr/measurement.yml +34 -0
  506. data/lib/locales/fr/name.yml +1193 -0
  507. data/lib/locales/fr/phone_number.yml +38 -0
  508. data/lib/locales/fr/pokemon.yml +421 -0
  509. data/lib/locales/fr-CA.yml +2756 -44
  510. data/lib/locales/fr-CH.yml +2455 -42
  511. data/lib/locales/fr.yml +2 -111
  512. data/lib/locales/he.yml +255 -9
  513. data/lib/locales/hy.yml +3630 -124
  514. data/lib/locales/id.yml +840 -10
  515. data/lib/locales/it.yml +1310 -31
  516. data/lib/locales/ja/README.md +13 -0
  517. data/lib/locales/ja/address.yml +363 -0
  518. data/lib/locales/ja/adjective.yml +148 -0
  519. data/lib/locales/ja/ancient.yml +18 -0
  520. data/lib/locales/ja/animal.yml +87 -0
  521. data/lib/locales/ja/artist.yml +46 -0
  522. data/lib/locales/ja/bank.yml +139 -0
  523. data/lib/locales/ja/book.yml +496 -0
  524. data/lib/locales/ja/cat.yml +79 -0
  525. data/lib/locales/ja/coffee.yml +22 -0
  526. data/lib/locales/ja/color.yml +35 -0
  527. data/lib/locales/ja/commerce.yml +103 -0
  528. data/lib/locales/ja/company.yml +26 -0
  529. data/lib/locales/ja/dog.yml +339 -0
  530. data/lib/locales/ja/emotion.yml +49 -0
  531. data/lib/locales/ja/food.yml +41 -0
  532. data/lib/locales/ja/football.yml +115 -0
  533. data/lib/locales/ja/gender.yml +6 -0
  534. data/lib/locales/ja/lorem.yml +1020 -0
  535. data/lib/locales/ja/name.yml +213 -0
  536. data/lib/locales/ja/naruto.yml +230 -0
  537. data/lib/locales/ja/overwatch.yml +37 -0
  538. data/lib/locales/ja/phone_number.yml +13 -0
  539. data/lib/locales/ja/pokemon.yml +441 -0
  540. data/lib/locales/ja/relationship.yml +33 -0
  541. data/lib/locales/ja/restaurant.yml +82 -0
  542. data/lib/locales/ja/space.yml +23 -0
  543. data/lib/locales/ja/sport.yml +130 -0
  544. data/lib/locales/ja/studio_ghibli.yml +112 -0
  545. data/lib/locales/ja/subscription.yml +50 -0
  546. data/lib/locales/ja/super_mario.yml +73 -0
  547. data/lib/locales/ja/super_smash_bros.yml +8 -0
  548. data/lib/locales/ja/touhou.yml +466 -0
  549. data/lib/locales/ja/university.yml +22 -0
  550. data/lib/locales/ja/zelda.yml +19 -0
  551. data/lib/locales/ko.yml +1450 -17
  552. data/lib/locales/lt.yml +315 -0
  553. data/lib/locales/lv.yml +1221 -27
  554. data/lib/locales/mi-NZ.yml +283 -0
  555. data/lib/locales/nb-NO.yml +518 -27
  556. data/lib/locales/nl.yml +33514 -55
  557. data/lib/locales/pl.yml +4008 -38
  558. data/lib/locales/pt-BR.yml +8210 -641
  559. data/lib/locales/pt.yml +846 -45
  560. data/lib/locales/ru.yml +1355 -30
  561. data/lib/locales/sk.yml +4416 -41
  562. data/lib/locales/sv.yml +731 -41
  563. data/lib/locales/th.yml +380 -0
  564. data/lib/locales/tr.yml +77 -19
  565. data/lib/locales/uk.yml +1814 -48
  566. data/lib/locales/vi.yml +392 -48
  567. data/lib/locales/zh-CN/bank.yml +17 -0
  568. data/lib/locales/zh-CN.yml +541 -19
  569. data/lib/locales/zh-TW.yml +1031 -15
  570. metadata +230 -125
  571. data/History.md +0 -176
  572. data/lib/faker/books/book.rb +0 -25
  573. data/lib/faker/default/bossa_nova.rb +0 -15
  574. data/lib/faker/default/fillmurray.rb +0 -15
  575. data/lib/faker/default/internet.rb +0 -207
  576. data/lib/faker/default/lorem_pixel.rb +0 -38
  577. data/lib/faker/default/twitter.rb +0 -174
  578. data/lib/faker/games/game.rb +0 -21
  579. data/lib/faker/movies/movie.rb +0 -11
  580. data/lib/faker/music/music.rb +0 -47
  581. data/lib/faker/quotes/quote.rb +0 -32
  582. data/lib/locales/en/hobbit.yml +0 -19
  583. data/lib/locales/en/lord_of_the_rings.yml +0 -6
  584. data/lib/locales/ja.yml +0 -98
@@ -0,0 +1,582 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Internet < Base
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+
9
+ # Private, Host, and Link-Local network address blocks as defined in https://en.wikipedia.org/wiki/IPv4#Special-use_addresses
10
+ PRIVATE_IPV4_ADDRESS_RANGES = [
11
+ [10..10, 0..255, 0..255, 1..255], # 10.0.0.0/8 - Used for local communications within a private network
12
+ [100..100, 64..127, 0..255, 1..255], # 100.64.0.0/10 - Shared address space for communications between an ISP and its subscribers
13
+ [127..127, 0..255, 0..255, 1..255], # 127.0.0.0/8 - Used for loopback addresses to the local host
14
+ [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
15
+ [172..172, 16..31, 0..255, 1..255], # 172.16.0.0/12 - Used for local communications within a private network
16
+ [192..192, 0..0, 0..0, 1..255], # 192.0.0.0/24 - IETF Protocol Assignments
17
+ [192..192, 168..168, 0..255, 1..255], # 192.168.0.0/16 - Used for local communications within a private network
18
+ [198..198, 18..19, 0..255, 1..255] # 198.18.0.0/15 - Used for benchmark testing of inter-network communications between subnets
19
+ ].each(&:freeze).freeze
20
+
21
+ class << self
22
+ ##
23
+ # Returns the email address
24
+ #
25
+ # @return [String]
26
+ #
27
+ # @param name [String]
28
+ # @param separators [Array]
29
+ # @param domain [String]
30
+ #
31
+ # @example
32
+ # Faker::Internet.email #=> "renee@zieme.test"
33
+ # Faker::Internet.email(name: 'smith') #=> "smith@bergnaum.test"
34
+ # Faker::Internet.email(name: 'sam smith', separators: ['-']) #=> "smith-sam@tromp.example"
35
+ # Faker::Internet.email(name: 'sam smith', separators: ['-'], domain: 'test') #=> "sam-smith@test.example"
36
+ # Faker::Internet.email(domain: 'gmail.com') #=> "foo@gmail.com"
37
+ def email(name: nil, separators: nil, domain: nil)
38
+ local_part = if separators
39
+ username(specifier: name, separators: separators)
40
+ else
41
+ username(specifier: name)
42
+ end
43
+
44
+ sanitized_local_part = sanitize_email_local_part(local_part)
45
+
46
+ generate_domain = if domain.nil?
47
+ domain_name
48
+ else
49
+ domain_name(domain: domain)
50
+ end
51
+
52
+ construct_email(sanitized_local_part, generate_domain)
53
+ end
54
+
55
+ ##
56
+ # Returns the username
57
+ #
58
+ # @return [String]
59
+ #
60
+ # @param specifier [Integer, Range, String] When int value passed it returns the username longer than specifier. Max value can be 10^6
61
+ # @param separators [Array]
62
+ #
63
+ # @example
64
+ # Faker::Internet.username(specifier: 10) #=> "lulu.goodwin"
65
+ # Faker::Internet.username(specifier: 5..10) #=> "morris"
66
+ # Faker::Internet.username(specifier: 5..10) #=> "berryberry"
67
+ # Faker::Internet.username(specifier: 20, separators: ['_']) #=> "nikki_sawaynnikki_saway"
68
+ def username(specifier: nil, separators: %w[. _])
69
+ with_locale(:en) do
70
+ case specifier
71
+ when ::String
72
+ names = specifier.gsub("'", '').scan(/[[:word:]]+/)
73
+ shuffled_names = shuffle(names)
74
+
75
+ return shuffled_names.join(sample(separators)).downcase
76
+ when Integer
77
+ # If specifier is Integer and has large value, Argument error exception is raised to overcome memory full error
78
+ raise ArgumentError, 'Given argument is too large' if specifier > 10**6
79
+
80
+ tries = 0 # Don't try forever in case we get something like 1_000_000.
81
+ result = nil
82
+ loop do
83
+ result = username(specifier: nil, separators: separators)
84
+ tries += 1
85
+ break unless result.length < specifier && tries < 7
86
+ end
87
+ return result * (specifier / result.length + 1) if specifier.positive?
88
+ when Range
89
+ tries = 0
90
+ result = nil
91
+ loop do
92
+ result = username(specifier: specifier.min, separators: separators)
93
+ tries += 1
94
+ break unless !specifier.include?(result.length) && tries < 7
95
+ end
96
+ return result[0...specifier.max]
97
+ end
98
+
99
+ sample([
100
+ Char.prepare(Faker::Name.first_name),
101
+ [Faker::Name.first_name, Faker::Name.last_name].map do |name|
102
+ Char.prepare(name)
103
+ end.join(sample(separators))
104
+ ])
105
+ end
106
+ end
107
+
108
+ ##
109
+ # Produces a randomized string of characters suitable for passwords
110
+ #
111
+ # @param min_length [Integer] The minimum length of the password
112
+ # @param max_length [Integer] The maximum length of the password
113
+ # @param mix_case [Boolean] Toggles if uppercased letters are allowed. If true, at least one will be added.
114
+ # @param special_characters [Boolean] Toggles if special characters are allowed. If true, at least one will be added.
115
+ #
116
+ # @return [String]
117
+ #
118
+ # @example
119
+ # Faker::Internet.password #=> "Vg5mSvY1UeRg7"
120
+ # @example
121
+ # Faker::Internet.password(min_length: 8) #=> "YfGjIk0hGzDqS0"
122
+ # @example
123
+ # Faker::Internet.password(min_length: 10, max_length: 20) #=> "EoC9ShWd1hWq4vBgFw"
124
+ # @example
125
+ # Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true) #=> "3k5qS15aNmG"
126
+ # @example
127
+ # Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true, special_characters: true) #=> "*%NkOnJsH4"
128
+ #
129
+ # @faker.version 2.1.3
130
+ def password(min_length: 8, max_length: 16, mix_case: true, special_characters: false)
131
+ raise ArgumentError, 'min_length and max_length must be greater than or equal to one' if min_length < 1 || max_length < 1
132
+ raise ArgumentError, 'min_length must be smaller than or equal to max_length' unless min_length <= max_length
133
+
134
+ character_types = []
135
+ required_min_length = 0
136
+
137
+ if mix_case
138
+ character_types << :mix_case
139
+ required_min_length += 2
140
+ end
141
+
142
+ if special_characters
143
+ character_types << :special_characters
144
+ required_min_length += 1
145
+ end
146
+
147
+ raise ArgumentError, "min_length should be at least #{required_min_length} to enable #{character_types.join(', ')} configuration" if min_length < required_min_length
148
+
149
+ target_length = rand(min_length..max_length)
150
+
151
+ password = []
152
+ character_bag = []
153
+
154
+ # use lower_chars by default and add upper_chars if mix_case
155
+ lower_chars = self::LLetters
156
+ password << sample(lower_chars)
157
+ character_bag += lower_chars
158
+
159
+ digits = ('0'..'9').to_a
160
+ password << sample(digits)
161
+ character_bag += digits
162
+
163
+ if mix_case
164
+ upper_chars = self::ULetters
165
+ password << sample(upper_chars)
166
+ character_bag += upper_chars
167
+ end
168
+
169
+ if special_characters
170
+ special_chars = %w[! @ # $ % ^ & *]
171
+ password << sample(special_chars)
172
+ character_bag += special_chars
173
+ end
174
+
175
+ password << sample(character_bag) while password.length < target_length
176
+
177
+ shuffle(password).join
178
+ end
179
+
180
+ ##
181
+ # Returns the domain name
182
+ #
183
+ # @return [String]
184
+ #
185
+ # @param subdomain [Bool] If true passed adds a subdomain in response
186
+ # @param domain [String]
187
+ #
188
+ # @example
189
+ # Faker::Internet.domain_name #=> "altenwerth-gerhold.example"
190
+ # Faker::Internet.domain_name(subdomain: true) #=> "metz.mclaughlin-brekke.test"
191
+ # Faker::Internet.domain_name(subdomain: true, domain: 'faker') #=> "foo.faker.test"
192
+ # Faker::Internet.domain_name(domain: 'faker-ruby.org') #=> "faker-ruby.org"
193
+ # Faker::Internet.domain_name(subdomain: true, domain: 'faker-ruby.org') #=> "foo.faker-ruby.org"
194
+ # Faker::Internet.domain_name(subdomain: true, domain: 'faker.faker-ruby.org') #=> "faker.faker-ruby.org"
195
+ def domain_name(subdomain: false, domain: nil)
196
+ with_locale(:en) do
197
+ if domain
198
+ domain
199
+ .split('.')
200
+ .map { |domain_part| Char.prepare(domain_part) }
201
+ .tap do |domain_elements|
202
+ if domain_elements.length < 2
203
+ domain_elements << domain_suffix(safe: true)
204
+ end
205
+ if subdomain && domain_elements.length < 3
206
+ domain_elements.unshift(Char.prepare(domain_word))
207
+ end
208
+ end.join('.')
209
+ else
210
+ [domain_word, domain_suffix(safe: true)].tap do |domain_elements|
211
+ if subdomain
212
+ domain_elements.unshift(Char.prepare(domain_word))
213
+ end
214
+ end.join('.')
215
+ end
216
+ end
217
+ end
218
+
219
+ ##
220
+ # Fixes ä, ö, ü, ß characters in string passed with ae, oe, ue, ss resp.
221
+ #
222
+ # @return [String]
223
+ #
224
+ # @param string [String]
225
+ #
226
+ # @example
227
+ # Faker::Internet.fix_umlauts #=> ""
228
+ # Faker::Internet.fix_umlauts(string: 'faker') #=> "faker"
229
+ # Faker::Internet.fix_umlauts(string: 'faküer') #=> "fakueer"
230
+ def fix_umlauts(string: '')
231
+ Char.fix_umlauts(string)
232
+ end
233
+
234
+ ##
235
+ # Returns the domain word for internet
236
+ #
237
+ # @return [String]
238
+ #
239
+ # @example
240
+ # Faker::Internet.domain_word #=> "senger"
241
+ def domain_word
242
+ with_locale(:en) { Char.prepare(Faker::Company.name.split.first) }
243
+ end
244
+
245
+ ## Returns the domain suffix e.g. com, org, co, biz, info etc.
246
+ #
247
+ # @return [String]
248
+ #
249
+ # @example
250
+ # Faker::Internet.domain_suffix #=> "com"
251
+ # Faker::Internet.domain_suffix #=> "biz"
252
+ # Faker::Internet.domain_suffix(safe: true) #=> "example"
253
+ # Faker::Internet.domain_suffix(safe: true) #=> "test"
254
+ def domain_suffix(safe: nil)
255
+ if safe
256
+ fetch('internet.safe_domain_suffix')
257
+ else
258
+ fetch('internet.domain_suffix')
259
+ end
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://treutel.test/demarcus"
425
+ # Faker::Internet.url(host: 'faker') #=> "http://faker/shad"
426
+ # Faker::Internet.url(host: 'faker', path: '/docs') #=> "http://faker/docs"
427
+ # Faker::Internet.url(host: 'faker', path: '/docs', scheme: 'https') #=> "https://faker/docs"
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: 'trudie@grant.test' }
546
+ #
547
+ # @example
548
+ # Faker::Internet.user('username', 'email', 'password') #=> { username: 'alexie', email: 'gayle@kohler.test', 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 JapaneseMedia
5
+ class Conan < Base
6
+ class << self
7
+ ##
8
+ # Produces a character from Conan.
9
+ #
10
+ # @return [String]
11
+ #
12
+ # @example
13
+ # Faker::JapaneseMedia::Conan.character #=> "Conan Edogawa"
14
+ #
15
+ # @faker.version next
16
+ def character
17
+ fetch('conan.characters')
18
+ end
19
+
20
+ ##
21
+ # Produces a gadget from Conan.
22
+ #
23
+ # @return [String]
24
+ #
25
+ # @example
26
+ # Faker::JapaneseMedia::Conan.gadget #=> "Voice-Changing Bowtie"
27
+ #
28
+ # @faker.version next
29
+ def gadget
30
+ fetch('conan.gadgets')
31
+ end
32
+
33
+ ##
34
+ # Produces a vehicle from Conan.
35
+ #
36
+ # @return [String]
37
+ #
38
+ # @example
39
+ # Faker::JapaneseMedia::Conan.vehicle #=> "Agasa's Volkswagen Beetle"
40
+ #
41
+ # @faker.version next
42
+ def vehicle
43
+ fetch('conan.vehicles')
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class JapaneseMedia
5
+ class CowboyBebop < Base
6
+ class << self
7
+ ##
8
+ # Produces a character from Cowboy Bebop.
9
+ #
10
+ # @return [String]
11
+ #
12
+ # @example
13
+ # Faker::JapaneseMedia::CowboyBebop.character #=> "Spike Spiegel"
14
+ #
15
+ # @faker.version next
16
+ def character
17
+ fetch('cowboy_bebop.character')
18
+ end
19
+
20
+ ##
21
+ # Produces an episode from Cowboy Bebop.
22
+ #
23
+ # @return [String]
24
+ #
25
+ # @example
26
+ # Faker::JapaneseMedia::CowboyBebop.episode #=> "Honky Tonk Women"
27
+ #
28
+ # @faker.version next
29
+ def episode
30
+ fetch('cowboy_bebop.episode')
31
+ end
32
+
33
+ ##
34
+ # Produces a song title from Cowboy Bebop.
35
+ #
36
+ # @return [String]
37
+ #
38
+ # @example
39
+ # Faker::JapaneseMedia::CowboyBebop.songs #=> "Live in Baghdad"
40
+ #
41
+ # @faker.version next
42
+ def song
43
+ fetch('cowboy_bebop.song')
44
+ end
45
+
46
+ ##
47
+ # Produces a quote from Cowboy Bebop.
48
+ #
49
+ # @return [String]
50
+ #
51
+ # @example
52
+ # Faker::JapaneseMedia::CowboyBebop.quote #=> "Bang!!!"
53
+ #
54
+ # @faker.version next
55
+ def quote
56
+ fetch('cowboy_bebop.quote')
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end