faker 2.2.2

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 (383) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1282 -0
  3. data/History.md +176 -0
  4. data/License.txt +20 -0
  5. data/README.md +364 -0
  6. data/bin/faker +5 -0
  7. data/lib/faker.rb +308 -0
  8. data/lib/faker/blockchain/bitcoin.rb +34 -0
  9. data/lib/faker/blockchain/ethereum.rb +16 -0
  10. data/lib/faker/blockchain/tezos.rb +51 -0
  11. data/lib/faker/books/book.rb +25 -0
  12. data/lib/faker/books/culture_series.rb +34 -0
  13. data/lib/faker/books/dune.rb +66 -0
  14. data/lib/faker/books/lovecraft.rb +104 -0
  15. data/lib/faker/creature/animal.rb +13 -0
  16. data/lib/faker/creature/cat.rb +23 -0
  17. data/lib/faker/creature/dog.rb +43 -0
  18. data/lib/faker/creature/horse.rb +19 -0
  19. data/lib/faker/default/address.rb +123 -0
  20. data/lib/faker/default/alphanumeric.rb +56 -0
  21. data/lib/faker/default/ancient.rb +23 -0
  22. data/lib/faker/default/app.rb +31 -0
  23. data/lib/faker/default/appliance.rb +15 -0
  24. data/lib/faker/default/artist.rb +11 -0
  25. data/lib/faker/default/avatar.rb +28 -0
  26. data/lib/faker/default/bank.rb +108 -0
  27. data/lib/faker/default/beer.rb +41 -0
  28. data/lib/faker/default/boolean.rb +15 -0
  29. data/lib/faker/default/bossa_nova.rb +15 -0
  30. data/lib/faker/default/business.rb +23 -0
  31. data/lib/faker/default/cannabis.rb +45 -0
  32. data/lib/faker/default/chile_rut.rb +54 -0
  33. data/lib/faker/default/chuck_norris.rb +14 -0
  34. data/lib/faker/default/code.rb +201 -0
  35. data/lib/faker/default/coffee.rb +37 -0
  36. data/lib/faker/default/coin.rb +15 -0
  37. data/lib/faker/default/color.rb +32 -0
  38. data/lib/faker/default/commerce.rb +80 -0
  39. data/lib/faker/default/company.rb +264 -0
  40. data/lib/faker/default/compass.rb +67 -0
  41. data/lib/faker/default/construction.rb +29 -0
  42. data/lib/faker/default/cosmere.rb +48 -0
  43. data/lib/faker/default/crypto.rb +21 -0
  44. data/lib/faker/default/crypto_coin.rb +49 -0
  45. data/lib/faker/default/currency.rb +19 -0
  46. data/lib/faker/default/date.rb +101 -0
  47. data/lib/faker/default/dc_comics.rb +25 -0
  48. data/lib/faker/default/demographic.rb +41 -0
  49. data/lib/faker/default/dessert.rb +21 -0
  50. data/lib/faker/default/device.rb +31 -0
  51. data/lib/faker/default/driving_licence.rb +65 -0
  52. data/lib/faker/default/educator.rb +35 -0
  53. data/lib/faker/default/electrical_components.rb +21 -0
  54. data/lib/faker/default/esport.rb +27 -0
  55. data/lib/faker/default/file.rb +49 -0
  56. data/lib/faker/default/fillmurray.rb +23 -0
  57. data/lib/faker/default/finance.rb +44 -0
  58. data/lib/faker/default/food.rb +49 -0
  59. data/lib/faker/default/funny_name.rb +45 -0
  60. data/lib/faker/default/gender.rb +15 -0
  61. data/lib/faker/default/greek_philosophers.rb +15 -0
  62. data/lib/faker/default/hacker.rb +45 -0
  63. data/lib/faker/default/hipster.rb +97 -0
  64. data/lib/faker/default/house.rb +15 -0
  65. data/lib/faker/default/id_number.rb +164 -0
  66. data/lib/faker/default/industry_segments.rb +25 -0
  67. data/lib/faker/default/internet.rb +283 -0
  68. data/lib/faker/default/invoice.rb +109 -0
  69. data/lib/faker/default/job.rb +25 -0
  70. data/lib/faker/default/json.rb +87 -0
  71. data/lib/faker/default/kpop.rb +31 -0
  72. data/lib/faker/default/lorem.rb +150 -0
  73. data/lib/faker/default/lorem_flickr.rb +78 -0
  74. data/lib/faker/default/lorem_pixel.rb +47 -0
  75. data/lib/faker/default/markdown.rb +84 -0
  76. data/lib/faker/default/marketing.rb +13 -0
  77. data/lib/faker/default/measurement.rb +116 -0
  78. data/lib/faker/default/military.rb +27 -0
  79. data/lib/faker/default/name.rb +58 -0
  80. data/lib/faker/default/nation.rb +33 -0
  81. data/lib/faker/default/nato_phonetic_alphabet.rb +11 -0
  82. data/lib/faker/default/nhs.rb +38 -0
  83. data/lib/faker/default/number.rb +150 -0
  84. data/lib/faker/default/omniauth.rb +371 -0
  85. data/lib/faker/default/phone_number.rb +54 -0
  86. data/lib/faker/default/placeholdit.rb +41 -0
  87. data/lib/faker/default/programming_language.rb +15 -0
  88. data/lib/faker/default/relationship.rb +46 -0
  89. data/lib/faker/default/restaurant.rb +11 -0
  90. data/lib/faker/default/science.rb +19 -0
  91. data/lib/faker/default/slack_emoji.rb +43 -0
  92. data/lib/faker/default/source.rb +35 -0
  93. data/lib/faker/default/south_africa.rb +51 -0
  94. data/lib/faker/default/space.rb +64 -0
  95. data/lib/faker/default/string.rb +49 -0
  96. data/lib/faker/default/stripe.rb +81 -0
  97. data/lib/faker/default/subscription.rb +25 -0
  98. data/lib/faker/default/superhero.rb +27 -0
  99. data/lib/faker/default/team.rb +29 -0
  100. data/lib/faker/default/time.rb +102 -0
  101. data/lib/faker/default/twitter.rb +188 -0
  102. data/lib/faker/default/types.rb +101 -0
  103. data/lib/faker/default/university.rb +30 -0
  104. data/lib/faker/default/vehicle.rb +162 -0
  105. data/lib/faker/default/verb.rb +27 -0
  106. data/lib/faker/default/world_cup.rb +36 -0
  107. data/lib/faker/games/dota.rb +33 -0
  108. data/lib/faker/games/elder_scrolls.rb +41 -0
  109. data/lib/faker/games/fallout.rb +25 -0
  110. data/lib/faker/games/game.rb +21 -0
  111. data/lib/faker/games/half_life.rb +21 -0
  112. data/lib/faker/games/heroes.rb +21 -0
  113. data/lib/faker/games/heroes_of_the_storm.rb +25 -0
  114. data/lib/faker/games/league_of_legends.rb +33 -0
  115. data/lib/faker/games/myst.rb +29 -0
  116. data/lib/faker/games/overwatch.rb +21 -0
  117. data/lib/faker/games/pokemon.rb +21 -0
  118. data/lib/faker/games/sonic_the_hedgehog.rb +21 -0
  119. data/lib/faker/games/super_smash_bros.rb +17 -0
  120. data/lib/faker/games/witcher.rb +33 -0
  121. data/lib/faker/games/world_of_warcraft.rb +17 -0
  122. data/lib/faker/games/zelda.rb +26 -0
  123. data/lib/faker/japanese_media/dragon_ball.rb +13 -0
  124. data/lib/faker/japanese_media/one_piece.rb +33 -0
  125. data/lib/faker/japanese_media/sword_art_online.rb +25 -0
  126. data/lib/faker/movies/back_to_the_future.rb +21 -0
  127. data/lib/faker/movies/ghostbusters.rb +21 -0
  128. data/lib/faker/movies/harry_potter.rb +33 -0
  129. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +37 -0
  130. data/lib/faker/movies/hobbit.rb +25 -0
  131. data/lib/faker/movies/lebowski.rb +21 -0
  132. data/lib/faker/movies/lord_of_the_rings.rb +21 -0
  133. data/lib/faker/movies/movie.rb +11 -0
  134. data/lib/faker/movies/princess_bride.rb +17 -0
  135. data/lib/faker/movies/star_wars.rb +107 -0
  136. data/lib/faker/movies/v_for_vendetta.rb +21 -0
  137. data/lib/faker/music/grateful_dead.rb +19 -0
  138. data/lib/faker/music/music.rb +47 -0
  139. data/lib/faker/music/opera.rb +26 -0
  140. data/lib/faker/music/phish.rb +13 -0
  141. data/lib/faker/music/rock_band.rb +13 -0
  142. data/lib/faker/music/umphreys_mcgee.rb +13 -0
  143. data/lib/faker/quotes/quote.rb +32 -0
  144. data/lib/faker/quotes/shakespeare.rb +41 -0
  145. data/lib/faker/sports/basketball.rb +25 -0
  146. data/lib/faker/sports/football.rb +29 -0
  147. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +15 -0
  148. data/lib/faker/tv_shows/bojack_horseman.rb +23 -0
  149. data/lib/faker/tv_shows/breaking_bad.rb +19 -0
  150. data/lib/faker/tv_shows/buffy.rb +31 -0
  151. data/lib/faker/tv_shows/community.rb +19 -0
  152. data/lib/faker/tv_shows/dr_who.rb +39 -0
  153. data/lib/faker/tv_shows/dumb_and_dumber.rb +23 -0
  154. data/lib/faker/tv_shows/family_guy.rb +23 -0
  155. data/lib/faker/tv_shows/friends.rb +23 -0
  156. data/lib/faker/tv_shows/game_of_thrones.rb +31 -0
  157. data/lib/faker/tv_shows/hey_arnold.rb +23 -0
  158. data/lib/faker/tv_shows/how_i_met_your_mother.rb +27 -0
  159. data/lib/faker/tv_shows/michael_scott.rb +13 -0
  160. data/lib/faker/tv_shows/new_girl.rb +19 -0
  161. data/lib/faker/tv_shows/parks_and_rec.rb +19 -0
  162. data/lib/faker/tv_shows/rick_and_morty.rb +23 -0
  163. data/lib/faker/tv_shows/ru_paul.rb +19 -0
  164. data/lib/faker/tv_shows/seinfeld.rb +23 -0
  165. data/lib/faker/tv_shows/silicon_valley.rb +43 -0
  166. data/lib/faker/tv_shows/simpsons.rb +23 -0
  167. data/lib/faker/tv_shows/south_park.rb +19 -0
  168. data/lib/faker/tv_shows/star_trek.rb +27 -0
  169. data/lib/faker/tv_shows/stargate.rb +23 -0
  170. data/lib/faker/tv_shows/stranger_things.rb +19 -0
  171. data/lib/faker/tv_shows/the_expanse.rb +27 -0
  172. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +23 -0
  173. data/lib/faker/tv_shows/the_it_crowd.rb +27 -0
  174. data/lib/faker/tv_shows/the_thick_of_it.rb +23 -0
  175. data/lib/faker/tv_shows/twin_peaks.rb +23 -0
  176. data/lib/faker/tv_shows/venture_bros.rb +27 -0
  177. data/lib/faker/version.rb +5 -0
  178. data/lib/helpers/base58.rb +22 -0
  179. data/lib/helpers/char.rb +66 -0
  180. data/lib/helpers/unique_generator.rb +56 -0
  181. data/lib/locales/README.md +40 -0
  182. data/lib/locales/ar.yml +102 -0
  183. data/lib/locales/bg.yml +44 -0
  184. data/lib/locales/ca-CAT.yml +24 -0
  185. data/lib/locales/ca.yml +31 -0
  186. data/lib/locales/da-DK.yml +73 -0
  187. data/lib/locales/de-AT.yml +56 -0
  188. data/lib/locales/de-CH.yml +19 -0
  189. data/lib/locales/de.yml +174 -0
  190. data/lib/locales/ee.yml +61 -0
  191. data/lib/locales/en-AU.yml +28 -0
  192. data/lib/locales/en-BORK.yml +4 -0
  193. data/lib/locales/en-CA.yml +36 -0
  194. data/lib/locales/en-GB.yml +14 -0
  195. data/lib/locales/en-IND.yml +25 -0
  196. data/lib/locales/en-MS.yml +47 -0
  197. data/lib/locales/en-NEP.yml +49 -0
  198. data/lib/locales/en-NG.yml +77 -0
  199. data/lib/locales/en-NZ.yml +39 -0
  200. data/lib/locales/en-PAK.yml +18 -0
  201. data/lib/locales/en-SG.yml +35 -0
  202. data/lib/locales/en-UG.yml +128 -0
  203. data/lib/locales/en-US.yml +103 -0
  204. data/lib/locales/en-ZA.yml +148 -0
  205. data/lib/locales/en-au-ocker.yml +33 -0
  206. data/lib/locales/en.yml +11 -0
  207. data/lib/locales/en/README.md +13 -0
  208. data/lib/locales/en/address.yml +581 -0
  209. data/lib/locales/en/ancient.yml +7 -0
  210. data/lib/locales/en/animal.yml +6 -0
  211. data/lib/locales/en/app.yml +8 -0
  212. data/lib/locales/en/appliance.yml +5 -0
  213. data/lib/locales/en/aqua_teen_hunger_force.yml +4 -0
  214. data/lib/locales/en/artist.yml +4 -0
  215. data/lib/locales/en/back_to_the_future.yml +120 -0
  216. data/lib/locales/en/bank.yml +302 -0
  217. data/lib/locales/en/basketball.yml +99 -0
  218. data/lib/locales/en/beer.yml +9 -0
  219. data/lib/locales/en/bojack_horseman.yml +6 -0
  220. data/lib/locales/en/book.yml +7 -0
  221. data/lib/locales/en/bossa_nova.yml +6 -0
  222. data/lib/locales/en/breaking_bad.yml +28 -0
  223. data/lib/locales/en/buffy.yml +260 -0
  224. data/lib/locales/en/business.yml +5 -0
  225. data/lib/locales/en/cannabis.yml +13 -0
  226. data/lib/locales/en/cat.yml +7 -0
  227. data/lib/locales/en/chuck_norris.yml +82 -0
  228. data/lib/locales/en/code.yml +4 -0
  229. data/lib/locales/en/coffee.yml +31 -0
  230. data/lib/locales/en/coin.yml +6 -0
  231. data/lib/locales/en/color.yml +4 -0
  232. data/lib/locales/en/commerce.yml +11 -0
  233. data/lib/locales/en/community.yml +33 -0
  234. data/lib/locales/en/company.yml +22 -0
  235. data/lib/locales/en/compass.yml +34 -0
  236. data/lib/locales/en/construction.yml +425 -0
  237. data/lib/locales/en/cosmere.yml +57 -0
  238. data/lib/locales/en/crypto_coin.yml +25 -0
  239. data/lib/locales/en/culture_series.yml +307 -0
  240. data/lib/locales/en/currency.yml +6 -0
  241. data/lib/locales/en/dc_comics.yml +52 -0
  242. data/lib/locales/en/demographic.yml +8 -0
  243. data/lib/locales/en/dessert.yml +6 -0
  244. data/lib/locales/en/device.yml +7 -0
  245. data/lib/locales/en/dog.yml +11 -0
  246. data/lib/locales/en/dota.yml +105 -0
  247. data/lib/locales/en/dr_who.yml +96 -0
  248. data/lib/locales/en/dragon_ball.yml +4 -0
  249. data/lib/locales/en/dumb_and_dumber.yml +59 -0
  250. data/lib/locales/en/dune.yml +159 -0
  251. data/lib/locales/en/educator.yml +11 -0
  252. data/lib/locales/en/elder_scrolls.yml +11 -0
  253. data/lib/locales/en/electrical_components.yml +6 -0
  254. data/lib/locales/en/esport.yml +8 -0
  255. data/lib/locales/en/fallout.yml +137 -0
  256. data/lib/locales/en/family_guy.yml +7 -0
  257. data/lib/locales/en/file.yml +5 -0
  258. data/lib/locales/en/finance.yml +113 -0
  259. data/lib/locales/en/food.yml +13 -0
  260. data/lib/locales/en/football.yml +8 -0
  261. data/lib/locales/en/fresh_prince_of_bel_air.yml +73 -0
  262. data/lib/locales/en/friends.yml +6 -0
  263. data/lib/locales/en/funny_name.yml +4 -0
  264. data/lib/locales/en/game.yml +283 -0
  265. data/lib/locales/en/game_of_thrones.yml +8 -0
  266. data/lib/locales/en/gender.yml +5 -0
  267. data/lib/locales/en/ghostbusters.yml +91 -0
  268. data/lib/locales/en/grateful_dead.yml +48 -0
  269. data/lib/locales/en/greek_philosophers.yml +26 -0
  270. data/lib/locales/en/hacker.yml +8 -0
  271. data/lib/locales/en/half_life.yml +7 -0
  272. data/lib/locales/en/harry_potter.yml +9 -0
  273. data/lib/locales/en/heroes.yml +6 -0
  274. data/lib/locales/en/heroes_of_the_storm.yml +7 -0
  275. data/lib/locales/en/hey_arnold.yml +24 -0
  276. data/lib/locales/en/hipster.yml +4 -0
  277. data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +45 -0
  278. data/lib/locales/en/hobbit.yml +19 -0
  279. data/lib/locales/en/horse.yml +6 -0
  280. data/lib/locales/en/house.yml +5 -0
  281. data/lib/locales/en/how_i_met_your_mother.yml +28 -0
  282. data/lib/locales/en/id_number.yml +5 -0
  283. data/lib/locales/en/industry_segments.yml +7 -0
  284. data/lib/locales/en/internet.yml +21 -0
  285. data/lib/locales/en/invoice.yml +6 -0
  286. data/lib/locales/en/job.yml +15 -0
  287. data/lib/locales/en/kpop.yml +83 -0
  288. data/lib/locales/en/league_of_legends.yml +10 -0
  289. data/lib/locales/en/lebowski.yml +43 -0
  290. data/lib/locales/en/lord_of_the_rings.yml +6 -0
  291. data/lib/locales/en/lorem.yml +11 -0
  292. data/lib/locales/en/lovecraft.yml +9 -0
  293. data/lib/locales/en/markdown.yml +5 -0
  294. data/lib/locales/en/marketing.yml +4 -0
  295. data/lib/locales/en/measurement.yml +11 -0
  296. data/lib/locales/en/michael_scott.yml +45 -0
  297. data/lib/locales/en/military.yml +8 -0
  298. data/lib/locales/en/movie.yml +5 -0
  299. data/lib/locales/en/music.yml +32 -0
  300. data/lib/locales/en/myst.yml +48 -0
  301. data/lib/locales/en/name.yml +25 -0
  302. data/lib/locales/en/nation.yml +11 -0
  303. data/lib/locales/en/nato_phonetic_alphabet.yml +4 -0
  304. data/lib/locales/en/new_girl.yml +40 -0
  305. data/lib/locales/en/one_piece.yml +9 -0
  306. data/lib/locales/en/opera.yml +172 -0
  307. data/lib/locales/en/overwatch.yml +41 -0
  308. data/lib/locales/en/parks_and_rec.yml +7 -0
  309. data/lib/locales/en/phish.yml +4 -0
  310. data/lib/locales/en/phone_number.yml +7 -0
  311. data/lib/locales/en/pokemon.yml +8 -0
  312. data/lib/locales/en/princess_bride.yml +5 -0
  313. data/lib/locales/en/programming_language.yml +6 -0
  314. data/lib/locales/en/quote.yml +166 -0
  315. data/lib/locales/en/relationship.yml +10 -0
  316. data/lib/locales/en/restaurant.yml +129 -0
  317. data/lib/locales/en/rick_and_morty.yml +6 -0
  318. data/lib/locales/en/rock_band.yml +4 -0
  319. data/lib/locales/en/rupaul.yml +125 -0
  320. data/lib/locales/en/science.yml +6 -0
  321. data/lib/locales/en/seinfeld.yml +6 -0
  322. data/lib/locales/en/shakespeare.yml +56 -0
  323. data/lib/locales/en/silicon_valley.yml +53 -0
  324. data/lib/locales/en/simpsons.yml +26 -0
  325. data/lib/locales/en/slack_emoji.yml +20 -0
  326. data/lib/locales/en/sonic_the_hedgehog.yml +410 -0
  327. data/lib/locales/en/source.yml +16 -0
  328. data/lib/locales/en/south_park.yml +5 -0
  329. data/lib/locales/en/space.yml +17 -0
  330. data/lib/locales/en/star_trek.yml +7 -0
  331. data/lib/locales/en/star_wars.yml +258 -0
  332. data/lib/locales/en/stargate.yml +21 -0
  333. data/lib/locales/en/stranger_thing.yml +36 -0
  334. data/lib/locales/en/stripe.yml +42 -0
  335. data/lib/locales/en/subscription.yml +8 -0
  336. data/lib/locales/en/super_smash_bros.yml +205 -0
  337. data/lib/locales/en/superhero.yml +12 -0
  338. data/lib/locales/en/sword_art_online.yml +334 -0
  339. data/lib/locales/en/team.yml +8 -0
  340. data/lib/locales/en/the_expanse.yml +7 -0
  341. data/lib/locales/en/the_it_crowd.yml +155 -0
  342. data/lib/locales/en/the_thick_of_it.yml +6 -0
  343. data/lib/locales/en/twin_peaks.yml +6 -0
  344. data/lib/locales/en/umphreys_mcgee.yml +4 -0
  345. data/lib/locales/en/university.yml +10 -0
  346. data/lib/locales/en/v_for_vendetta.yml +163 -0
  347. data/lib/locales/en/vehicle.yml +80 -0
  348. data/lib/locales/en/venture_bros.yml +7 -0
  349. data/lib/locales/en/verbs.yml +8 -0
  350. data/lib/locales/en/witcher.yml +11 -0
  351. data/lib/locales/en/world_cup.yml +271 -0
  352. data/lib/locales/en/world_of_warcraft.yml +8 -0
  353. data/lib/locales/en/yoda.yml +4 -0
  354. data/lib/locales/en/zelda.yml +8 -0
  355. data/lib/locales/es-MX.yml +102 -0
  356. data/lib/locales/es.yml +94 -0
  357. data/lib/locales/fa.yml +10 -0
  358. data/lib/locales/fi-FI.yml +35 -0
  359. data/lib/locales/fr-CA.yml +90 -0
  360. data/lib/locales/fr-CH.yml +78 -0
  361. data/lib/locales/fr.yml +114 -0
  362. data/lib/locales/he.yml +27 -0
  363. data/lib/locales/hy.yml +416 -0
  364. data/lib/locales/id.yml +23 -0
  365. data/lib/locales/it.yml +70 -0
  366. data/lib/locales/ja.yml +98 -0
  367. data/lib/locales/ko.yml +40 -0
  368. data/lib/locales/lv.yml +55 -0
  369. data/lib/locales/nb-NO.yml +62 -0
  370. data/lib/locales/nl.yml +92 -0
  371. data/lib/locales/no.yml +7 -0
  372. data/lib/locales/pl.yml +77 -0
  373. data/lib/locales/pt-BR.yml +697 -0
  374. data/lib/locales/pt.yml +66 -0
  375. data/lib/locales/ru.yml +76 -0
  376. data/lib/locales/sk.yml +78 -0
  377. data/lib/locales/sv.yml +81 -0
  378. data/lib/locales/tr.yml +40 -0
  379. data/lib/locales/uk.yml +86 -0
  380. data/lib/locales/vi.yml +68 -0
  381. data/lib/locales/zh-CN.yml +56 -0
  382. data/lib/locales/zh-TW.yml +29 -0
  383. metadata +543 -0
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class House < Base
5
+ class << self
6
+ def furniture
7
+ fetch('house.furniture')
8
+ end
9
+
10
+ def room
11
+ fetch('house.rooms')
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,164 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class IDNumber < Base
5
+ CHECKS = 'TRWAGMYFPDXBNJZSQVHLCKE'
6
+ INVALID_SSN = [
7
+ /0{3}-\d{2}-\d{4}/,
8
+ /\d{3}-0{2}-\d{4}/,
9
+ /\d{3}-\d{2}-0{4}/,
10
+ /666-\d{2}-\d{4}/,
11
+ /9\d{2}-\d{2}-\d{4}/
12
+ ].freeze
13
+ ZA_RACE_DIGIT = '8'
14
+ ZA_CITIZENSHIP_DIGITS = %w[0 1].freeze
15
+ BRAZILIAN_ID_FORMAT = /(\d{1,2})(\d{3})(\d{3})([\dX])/.freeze
16
+ BRAZILIAN_ID_FROM = 10_000_000
17
+ BRAZILIAN_ID_TO = 99_999_999
18
+
19
+ class << self
20
+ def valid
21
+ _translate('valid')
22
+ end
23
+
24
+ def invalid
25
+ _translate('invalid')
26
+ end
27
+
28
+ def ssn_valid
29
+ ssn = regexify(/[0-8]\d{2}-\d{2}-\d{4}/)
30
+ # We could still have all 0s in one segment or another
31
+ INVALID_SSN.any? { |regex| regex =~ ssn } ? ssn_valid : ssn
32
+ end
33
+
34
+ def spanish_citizen_number
35
+ num = Faker::Number.number(digits: 8)
36
+ mod = num.to_i % 23
37
+ check = CHECKS[mod]
38
+ "#{num}-#{check}"
39
+ end
40
+
41
+ def spanish_foreign_citizen_number
42
+ code = 'XYZ'
43
+ digits = Faker::Number.number(digits: 7)
44
+ prefix = code[rand(code.length)]
45
+ prefix_val = 'XYZ'.index(prefix).to_s
46
+ mod = "#{prefix_val}#{digits}".to_i % 23
47
+ check = CHECKS[mod]
48
+ "#{prefix}-#{digits}-#{check}"
49
+ end
50
+
51
+ def valid_south_african_id_number
52
+ id_number = [
53
+ Faker::Date.birthday.strftime('%y%m%d'),
54
+ Faker::Number.number(digits: 4),
55
+ ZA_CITIZENSHIP_DIGITS.sample(random: Faker::Config.random),
56
+ ZA_RACE_DIGIT
57
+ ].join
58
+
59
+ [id_number, south_african_id_checksum_digit(id_number)].join
60
+ end
61
+
62
+ alias south_african_id_number valid_south_african_id_number
63
+
64
+ def invalid_south_african_id_number
65
+ invalid_date_of_birth = [
66
+ Faker::Number.number(digits: 2),
67
+ Faker::Number.between(from: 13, to: 99),
68
+ Faker::Number.between(from: 32, to: 99)
69
+ ].map(&:to_s).join
70
+
71
+ id_number = [
72
+ invalid_date_of_birth,
73
+ Faker::Number.number(digits: 4),
74
+ ZA_CITIZENSHIP_DIGITS.sample(random: Faker::Config.random),
75
+ ZA_RACE_DIGIT
76
+ ].join
77
+
78
+ [id_number, south_african_id_checksum_digit(id_number)].join
79
+ end
80
+
81
+ def brazilian_citizen_number(legacy_formatted = NOT_GIVEN, formatted: false)
82
+ warn_for_deprecated_arguments do |keywords|
83
+ keywords << :formatted if legacy_formatted != NOT_GIVEN
84
+ end
85
+
86
+ digits = Faker::Number.leading_zero_number(digits: 9) until digits&.match(/(\d)((?!\1)\d)+/)
87
+ first_digit = brazilian_citizen_number_checksum_digit(digits)
88
+ second_digit = brazilian_citizen_number_checksum_digit(digits + first_digit)
89
+ number = [digits, first_digit, second_digit].join
90
+ formatted ? format('%s.%s.%s-%s', *number.scan(/\d{2,3}/).flatten) : number
91
+ end
92
+
93
+ alias brazilian_cpf brazilian_citizen_number
94
+
95
+ def brazilian_id(legacy_formatted = NOT_GIVEN, formatted: false)
96
+ warn_for_deprecated_arguments do |keywords|
97
+ keywords << :formatted if legacy_formatted != NOT_GIVEN
98
+ end
99
+
100
+ digits = Faker::Number.between(to: BRAZILIAN_ID_FROM, from: BRAZILIAN_ID_TO).to_s
101
+ check_digit = brazilian_id_checksum_digit(digits)
102
+ number = [digits, check_digit].join
103
+ formatted ? format('%s.%s.%s-%s', *number.scan(BRAZILIAN_ID_FORMAT).flatten) : number
104
+ end
105
+
106
+ alias brazilian_rg brazilian_id
107
+
108
+ private
109
+
110
+ def south_african_id_checksum_digit(id_number)
111
+ value_parts = id_number.chars
112
+ even_digits = value_parts
113
+ .select
114
+ .with_index { |_, i| (i + 1).even? }
115
+ odd_digits_without_last_character = value_parts[0...-1]
116
+ .select
117
+ .with_index { |_, i| (i + 1).odd? }
118
+
119
+ sum_of_odd_digits = odd_digits_without_last_character.map(&:to_i).reduce(:+)
120
+ even_digits_times_two = (even_digits.join('').to_i * 2).to_s
121
+ sum_of_even_digits = even_digits_times_two.chars.map(&:to_i).reduce(:+)
122
+
123
+ total_sum = sum_of_odd_digits + sum_of_even_digits
124
+
125
+ ((10 - (total_sum % 10)) % 10).to_s
126
+ end
127
+
128
+ def brazilian_citizen_number_checksum_digit(digits)
129
+ checksum = brazilian_document_checksum(digits)
130
+ brazilian_document_digit(checksum)
131
+ end
132
+
133
+ def brazilian_id_checksum_digit(digits)
134
+ checksum = brazilian_document_checksum(digits)
135
+ brazilian_document_digit(checksum, id: true)
136
+ end
137
+
138
+ def brazilian_document_checksum(digits)
139
+ digits.chars.each_with_index.inject(0) do |acc, (digit, i)|
140
+ acc + digit.to_i * (digits.size + 1 - i)
141
+ end * 10
142
+ end
143
+
144
+ def brazilian_document_digit(checksum, id = false)
145
+ remainder = checksum % 11
146
+ id ? brazilian_id_digit(remainder) : brazilian_citizen_number_digit(remainder)
147
+ end
148
+
149
+ def brazilian_citizen_number_digit(remainder)
150
+ remainder == 10 ? '0' : remainder.to_s
151
+ end
152
+
153
+ def brazilian_id_digit(remainder)
154
+ subtraction = 11 - remainder.to_i
155
+ digits = { 10 => 'X', 11 => '0' }
156
+ digits.include?(subtraction) ? digits[subtraction] : subtraction.to_s
157
+ end
158
+
159
+ def _translate(key)
160
+ parse("id_number.#{key}")
161
+ end
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class IndustrySegments < Base
5
+ flexible :industry_segments
6
+
7
+ class << self
8
+ def industry
9
+ fetch('industry_segments.industry')
10
+ end
11
+
12
+ def super_sector
13
+ fetch('industry_segments.super_sector')
14
+ end
15
+
16
+ def sector
17
+ fetch('industry_segments.sector')
18
+ end
19
+
20
+ def sub_sector
21
+ fetch('industry_segments.sub_sector')
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,283 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Internet < Base
5
+ class << self
6
+ def email(legacy_name = NOT_GIVEN, legacy_separators = NOT_GIVEN, name: nil, separators: nil)
7
+ warn_for_deprecated_arguments do |keywords|
8
+ keywords << :name if legacy_name != NOT_GIVEN
9
+ keywords << :separators if legacy_separators != NOT_GIVEN
10
+ end
11
+
12
+ if separators
13
+ [username(specifier: name, separators: separators), domain_name].join('@')
14
+ else
15
+ [username(specifier: name), domain_name].join('@')
16
+ end
17
+ end
18
+
19
+ def free_email(legacy_name = NOT_GIVEN, name: nil)
20
+ warn_for_deprecated_arguments do |keywords|
21
+ keywords << :name if legacy_name != NOT_GIVEN
22
+ end
23
+
24
+ [username(specifier: name), fetch('internet.free_email')].join('@')
25
+ end
26
+
27
+ def safe_email(legacy_name = NOT_GIVEN, name: nil)
28
+ warn_for_deprecated_arguments do |keywords|
29
+ keywords << :name if legacy_name != NOT_GIVEN
30
+ end
31
+
32
+ [username(specifier: name), 'example.' + sample(%w[org com net])].join('@')
33
+ end
34
+
35
+ def username(legacy_specifier = NOT_GIVEN, legacy_separators = NOT_GIVEN, specifier: nil, separators: %w[. _])
36
+ warn_for_deprecated_arguments do |keywords|
37
+ keywords << :specifier if legacy_specifier != NOT_GIVEN
38
+ keywords << :separators if legacy_separators != NOT_GIVEN
39
+ end
40
+
41
+ with_locale(:en) do
42
+ return shuffle(specifier.scan(/[[:word:]]+/)).join(sample(separators)).downcase if specifier.respond_to?(:scan)
43
+
44
+ if specifier.is_a?(Integer)
45
+ # If specifier is Integer and has large value, Argument error exception is raised to overcome memory full error
46
+ raise ArgumentError, 'Given argument is too large' if specifier > 10**6
47
+
48
+ tries = 0 # Don't try forever in case we get something like 1_000_000.
49
+ result = nil
50
+ loop do
51
+ result = username(specifier: nil, separators: separators)
52
+ tries += 1
53
+ break unless result.length < specifier && tries < 7
54
+ end
55
+ return result * (specifier / result.length + 1) if specifier.positive?
56
+ elsif specifier.is_a?(Range)
57
+ tries = 0
58
+ result = nil
59
+ loop do
60
+ result = username(specifier: specifier.min, separators: separators)
61
+ tries += 1
62
+ break unless !specifier.include?(result.length) && tries < 7
63
+ end
64
+ return result[0...specifier.max]
65
+ end
66
+
67
+ sample([
68
+ Char.prepare(Name.first_name),
69
+ [Name.first_name, Name.last_name].map do |name|
70
+ Char.prepare(name)
71
+ end.join(sample(separators))
72
+ ])
73
+ end
74
+ end
75
+
76
+ ##
77
+ # Produces a randomized string of characters
78
+ #
79
+ # @param [Integer] min_length
80
+ # @param [Integer] max_length
81
+ # @param [Boolean] mix_case
82
+ # @param [Boolean] special_characters
83
+ #
84
+ # @return [String]
85
+ #
86
+ # @example Faker::Internet.password #=> "Vg5mSvY1UeRg7"
87
+ # @example Faker::Internet.password(min_length: 8) #=> "YfGjIk0hGzDqS0"
88
+ # @example Faker::Internet.password(min_length: 10, max_length: 20) #=> "EoC9ShWd1hWq4vBgFw"
89
+ # @example Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true) #=> "3k5qS15aNmG"
90
+ # @example Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true, special_characters: true) #=> "*%NkOnJsH4"
91
+ #
92
+ # @faker.version 2.1.3
93
+ # rubocop:disable Metrics/ParameterLists
94
+ def password(legacy_min_length = NOT_GIVEN, legacy_max_length = NOT_GIVEN, legacy_mix_case = NOT_GIVEN, legacy_special_characters = NOT_GIVEN, min_length: 8, max_length: 16, mix_case: true, special_characters: false)
95
+ warn_for_deprecated_arguments do |keywords|
96
+ keywords << :min_length if legacy_min_length != NOT_GIVEN
97
+ keywords << :max_length if legacy_max_length != NOT_GIVEN
98
+ keywords << :mix_case if legacy_mix_case != NOT_GIVEN
99
+ keywords << :special_characters if legacy_special_characters != NOT_GIVEN
100
+ end
101
+
102
+ min_alpha = mix_case ? 2 : 0
103
+ temp = Lorem.characters(number: min_length, min_alpha: min_alpha)
104
+ diff_length = max_length - min_length
105
+
106
+ if diff_length.positive?
107
+ diff_rand = rand(diff_length + 1)
108
+ temp += Lorem.characters(number: diff_rand)
109
+ end
110
+
111
+ if mix_case
112
+ alpha_count = 0
113
+ temp.chars.each_with_index do |char, index|
114
+ if char =~ /[[:alpha:]]/
115
+ temp[index] = char.upcase if alpha_count.even?
116
+ alpha_count += 1
117
+ end
118
+ end
119
+ end
120
+
121
+ if special_characters
122
+ chars = %w[! @ # $ % ^ & *]
123
+ rand(1..min_length).times do |i|
124
+ temp[i] = chars[rand(chars.length)]
125
+ end
126
+ end
127
+
128
+ temp
129
+ end
130
+
131
+ def domain_name(legacy_subdomain = NOT_GIVEN, subdomain: false)
132
+ warn_for_deprecated_arguments do |keywords|
133
+ keywords << :subdomain if legacy_subdomain != NOT_GIVEN
134
+ end
135
+
136
+ with_locale(:en) do
137
+ domain_elements = [Char.prepare(domain_word), domain_suffix]
138
+ domain_elements.unshift(Char.prepare(domain_word)) if subdomain
139
+ domain_elements.join('.')
140
+ end
141
+ end
142
+
143
+ def fix_umlauts(legacy_string = NOT_GIVEN, string: '')
144
+ warn_for_deprecated_arguments do |keywords|
145
+ keywords << :string if legacy_string != NOT_GIVEN
146
+ end
147
+
148
+ Char.fix_umlauts(string)
149
+ end
150
+
151
+ def domain_word
152
+ with_locale(:en) { Char.prepare(Company.name.split(' ').first) }
153
+ end
154
+
155
+ def domain_suffix
156
+ fetch('internet.domain_suffix')
157
+ end
158
+
159
+ def mac_address(legacy_prefix = NOT_GIVEN, prefix: '')
160
+ warn_for_deprecated_arguments do |keywords|
161
+ keywords << :prefix if legacy_prefix != NOT_GIVEN
162
+ end
163
+
164
+ prefix_digits = prefix.split(':').map { |d| d.to_i(16) }
165
+ address_digits = Array.new((6 - prefix_digits.size)) { rand(256) }
166
+ (prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
167
+ end
168
+
169
+ def ip_v4_address
170
+ [rand_in_range(0, 255), rand_in_range(0, 255),
171
+ rand_in_range(0, 255), rand_in_range(0, 255)].join('.')
172
+ end
173
+
174
+ def private_ip_v4_address
175
+ addr = nil
176
+ loop do
177
+ addr = ip_v4_address
178
+ break if private_net_checker[addr]
179
+ end
180
+ addr
181
+ end
182
+
183
+ def public_ip_v4_address
184
+ addr = nil
185
+ loop do
186
+ addr = ip_v4_address
187
+ break unless reserved_net_checker[addr]
188
+ end
189
+ addr
190
+ end
191
+
192
+ def private_nets_regex
193
+ [
194
+ /^10\./, # 10.0.0.0 - 10.255.255.255
195
+ /^100\.(6[4-9]|[7-9]\d|1[0-1]\d|12[0-7])\./, # 100.64.0.0 - 100.127.255.255
196
+ /^127\./, # 127.0.0.0 - 127.255.255.255
197
+ /^169\.254\./, # 169.254.0.0 - 169.254.255.255
198
+ /^172\.(1[6-9]|2\d|3[0-1])\./, # 172.16.0.0 - 172.31.255.255
199
+ /^192\.0\.0\./, # 192.0.0.0 - 192.0.0.255
200
+ /^192\.168\./, # 192.168.0.0 - 192.168.255.255
201
+ /^198\.(1[8-9])\./ # 198.18.0.0 - 198.19.255.255
202
+ ]
203
+ end
204
+
205
+ def private_net_checker
206
+ ->(addr) { private_nets_regex.any? { |net| net =~ addr } }
207
+ end
208
+
209
+ def reserved_nets_regex
210
+ [
211
+ /^0\./, # 0.0.0.0 - 0.255.255.255
212
+ /^192\.0\.2\./, # 192.0.2.0 - 192.0.2.255
213
+ /^192\.88\.99\./, # 192.88.99.0 - 192.88.99.255
214
+ /^198\.51\.100\./, # 198.51.100.0 - 198.51.100.255
215
+ /^203\.0\.113\./, # 203.0.113.0 - 203.0.113.255
216
+ /^(22[4-9]|23\d)\./, # 224.0.0.0 - 239.255.255.255
217
+ /^(24\d|25[0-5])\./ # 240.0.0.0 - 255.255.255.254 and 255.255.255.255
218
+ ]
219
+ end
220
+
221
+ def reserved_net_checker
222
+ ->(addr) { (private_nets_regex + reserved_nets_regex).any? { |net| net =~ addr } }
223
+ end
224
+
225
+ def ip_v4_cidr
226
+ "#{ip_v4_address}/#{rand(1..31)}"
227
+ end
228
+
229
+ def ip_v6_address
230
+ (1..8).map { rand(65_536).to_s(16) }.join(':')
231
+ end
232
+
233
+ def ip_v6_cidr
234
+ "#{ip_v6_address}/#{rand(1..127)}"
235
+ end
236
+
237
+ def url(legacy_host = NOT_GIVEN, legacy_path = NOT_GIVEN, legacy_scheme = NOT_GIVEN, host: domain_name, path: "/#{username}", scheme: 'http')
238
+ # rubocop:enable Metrics/ParameterLists
239
+ warn_for_deprecated_arguments do |keywords|
240
+ keywords << :host if legacy_host != NOT_GIVEN
241
+ keywords << :path if legacy_path != NOT_GIVEN
242
+ keywords << :scheme if legacy_scheme != NOT_GIVEN
243
+ end
244
+
245
+ "#{scheme}://#{host}#{path}"
246
+ end
247
+
248
+ def slug(legacy_words = NOT_GIVEN, legacy_glue = NOT_GIVEN, words: nil, glue: nil)
249
+ warn_for_deprecated_arguments do |keywords|
250
+ keywords << :words if legacy_words != NOT_GIVEN
251
+ keywords << :glue if legacy_glue != NOT_GIVEN
252
+ end
253
+
254
+ glue ||= sample(%w[- _])
255
+ (words || Faker::Lorem.words(number: 2).join(' ')).delete(',.').gsub(' ', glue).downcase
256
+ end
257
+
258
+ def device_token
259
+ shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join
260
+ end
261
+
262
+ def user_agent(legacy_vendor = NOT_GIVEN, vendor: nil)
263
+ warn_for_deprecated_arguments do |keywords|
264
+ keywords << :vendor if legacy_vendor != NOT_GIVEN
265
+ end
266
+
267
+ agent_hash = translate('faker.internet.user_agent')
268
+ agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
269
+ sample(agents)
270
+ end
271
+
272
+ def uuid
273
+ # borrowed from: https://github.com/ruby/ruby/blob/d48783bb0236db505fe1205d1d9822309de53a36/lib/securerandom.rb#L250
274
+ ary = Faker::Config.random.bytes(16).unpack('NnnnnN')
275
+ ary[2] = (ary[2] & 0x0fff) | 0x4000
276
+ ary[3] = (ary[3] & 0x3fff) | 0x8000
277
+ '%08x-%04x-%04x-%04x-%04x%08x' % ary # rubocop:disable Style/FormatString
278
+ end
279
+
280
+ alias user_name username
281
+ end
282
+ end
283
+ end