faker 2.11.0 → 3.2.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 (380) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +810 -19
  3. data/History.md +5 -5
  4. data/README.md +232 -105
  5. data/lib/faker/blockchain/aeternity.rb +5 -5
  6. data/lib/faker/blockchain/bitcoin.rb +2 -2
  7. data/lib/faker/blockchain/ethereum.rb +1 -1
  8. data/lib/faker/blockchain/tezos.rb +31 -3
  9. data/lib/faker/books/dune.rb +17 -12
  10. data/lib/faker/books/lovecraft.rb +14 -41
  11. data/lib/faker/books/the_kingkiller_chronicle.rb +61 -0
  12. data/lib/faker/creature/bird.rb +203 -0
  13. data/lib/faker/default/address.rb +40 -30
  14. data/lib/faker/default/adjective.rb +35 -0
  15. data/lib/faker/default/alphanumeric.rb +2 -8
  16. data/lib/faker/default/app.rb +1 -10
  17. data/lib/faker/default/avatar.rb +1 -12
  18. data/lib/faker/default/bank.rb +104 -19
  19. data/lib/faker/default/barcode.rb +165 -0
  20. data/lib/faker/default/beer.rb +3 -3
  21. data/lib/faker/default/blood.rb +48 -0
  22. data/lib/faker/default/boolean.rb +1 -4
  23. data/lib/faker/default/business.rb +1 -1
  24. data/lib/faker/default/camera.rb +46 -0
  25. data/lib/faker/default/cannabis.rb +10 -0
  26. data/lib/faker/default/chile_rut.rb +54 -16
  27. data/lib/faker/default/chuck_norris.rb +1 -0
  28. data/lib/faker/default/code.rb +106 -38
  29. data/lib/faker/default/color.rb +77 -6
  30. data/lib/faker/default/commerce.rb +105 -28
  31. data/lib/faker/default/company.rb +116 -28
  32. data/lib/faker/default/compass.rb +135 -0
  33. data/lib/faker/default/computer.rb +63 -0
  34. data/lib/faker/default/construction.rb +54 -0
  35. data/lib/faker/default/cosmere.rb +90 -0
  36. data/lib/faker/default/crypto.rb +17 -4
  37. data/lib/faker/default/crypto_coin.rb +48 -15
  38. data/lib/faker/default/date.rb +21 -50
  39. data/lib/faker/default/demographic.rb +1 -5
  40. data/lib/faker/default/driving_licence.rb +66 -10
  41. data/lib/faker/default/drone.rb +332 -0
  42. data/lib/faker/default/educator.rb +13 -0
  43. data/lib/faker/default/emotion.rb +33 -0
  44. data/lib/faker/default/file.rb +53 -21
  45. data/lib/faker/default/finance.rb +75 -7
  46. data/lib/faker/default/food.rb +28 -2
  47. data/lib/faker/default/gender.rb +1 -1
  48. data/lib/faker/default/hipster.rb +106 -48
  49. data/lib/faker/default/hobby.rb +22 -0
  50. data/lib/faker/default/id_number.rb +230 -13
  51. data/lib/faker/default/internet.rb +390 -108
  52. data/lib/faker/default/internet_http.rb +48 -0
  53. data/lib/faker/default/invoice.rb +37 -23
  54. data/lib/faker/default/json.rb +61 -23
  55. data/lib/faker/default/lorem.rb +171 -72
  56. data/lib/faker/default/lorem_flickr.rb +69 -37
  57. data/lib/faker/default/markdown.rb +97 -11
  58. data/lib/faker/default/marketing.rb +1 -1
  59. data/lib/faker/default/measurement.rb +101 -42
  60. data/lib/faker/default/military.rb +26 -0
  61. data/lib/faker/default/mountain.rb +33 -0
  62. data/lib/faker/default/name.rb +99 -5
  63. data/lib/faker/default/nation.rb +0 -3
  64. data/lib/faker/default/nhs.rb +21 -6
  65. data/lib/faker/default/number.rb +38 -68
  66. data/lib/faker/default/omniauth.rb +111 -53
  67. data/lib/faker/default/phone_number.rb +89 -10
  68. data/lib/faker/default/placeholdit.rb +23 -12
  69. data/lib/faker/default/relationship.rb +2 -6
  70. data/lib/faker/default/religion.rb +6 -0
  71. data/lib/faker/default/science.rb +108 -0
  72. data/lib/faker/default/slack_emoji.rb +81 -0
  73. data/lib/faker/default/source.rb +3 -16
  74. data/lib/faker/default/south_africa.rb +90 -0
  75. data/lib/faker/default/space.rb +1 -1
  76. data/lib/faker/default/string.rb +18 -8
  77. data/lib/faker/default/stripe.rb +68 -23
  78. data/lib/faker/default/tea.rb +41 -0
  79. data/lib/faker/default/time.rb +4 -34
  80. data/lib/faker/default/twitter.rb +42 -23
  81. data/lib/faker/default/types.rb +88 -29
  82. data/lib/faker/default/university.rb +45 -0
  83. data/lib/faker/default/vehicle.rb +212 -54
  84. data/lib/faker/default/verb.rb +45 -0
  85. data/lib/faker/default/vulnerability_identifier.rb +23 -0
  86. data/lib/faker/default/world_cup.rb +6 -15
  87. data/lib/faker/fantasy/tolkien.rb +67 -0
  88. data/lib/faker/games/clash_of_clans.rb +48 -0
  89. data/lib/faker/games/control.rb +113 -0
  90. data/lib/faker/games/dnd.rb +178 -0
  91. data/lib/faker/games/dota.rb +14 -5
  92. data/lib/faker/games/elder_scrolls.rb +26 -0
  93. data/lib/faker/games/heroes.rb +13 -0
  94. data/lib/faker/games/heroes_of_the_storm.rb +16 -5
  95. data/lib/faker/games/minecraft.rb +113 -0
  96. data/lib/faker/games/myst.rb +1 -1
  97. data/lib/faker/games/street_fighter.rb +61 -0
  98. data/lib/faker/games/super_mario.rb +48 -0
  99. data/lib/faker/games/tarkov.rb +205 -0
  100. data/lib/faker/games/touhou.rb +75 -0
  101. data/lib/faker/games/warhammer_fantasy.rb +74 -0
  102. data/lib/faker/games/witcher.rb +39 -0
  103. data/lib/faker/games/world_of_warcraft.rb +26 -1
  104. data/lib/faker/japanese_media/conan.rb +48 -0
  105. data/lib/faker/japanese_media/cowboy_bebop.rb +61 -0
  106. data/lib/faker/japanese_media/doraemon.rb +48 -0
  107. data/lib/faker/japanese_media/dragon_ball.rb +26 -0
  108. data/lib/faker/japanese_media/fullmetal_alchemist_brotherhood.rb +48 -0
  109. data/lib/faker/japanese_media/kamen_rider.rb +102 -0
  110. data/lib/faker/japanese_media/naruto.rb +61 -0
  111. data/lib/faker/japanese_media/one_piece.rb +1 -1
  112. data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
  113. data/lib/faker/locations/australia.rb +47 -0
  114. data/lib/faker/movies/avatar.rb +49 -0
  115. data/lib/faker/movies/departed.rb +49 -0
  116. data/lib/faker/movies/hackers.rb +48 -0
  117. data/lib/faker/movies/hobbit.rb +4 -4
  118. data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
  119. data/lib/faker/movies/lord_of_the_rings.rb +3 -3
  120. data/lib/faker/movies/movie.rb +13 -0
  121. data/lib/faker/movies/room.rb +63 -0
  122. data/lib/faker/movies/star_wars.rb +75 -7
  123. data/lib/faker/movies/tron.rb +161 -0
  124. data/lib/faker/music/hiphop.rb +48 -0
  125. data/lib/faker/music/music.rb +12 -0
  126. data/lib/faker/music/opera.rb +237 -1
  127. data/lib/faker/music/pearl_jam.rb +50 -0
  128. data/lib/faker/music/phish.rb +27 -1
  129. data/lib/faker/music/prince.rb +64 -0
  130. data/lib/faker/music/rock_band.rb +12 -0
  131. data/lib/faker/music/rush.rb +37 -0
  132. data/lib/faker/music/show.rb +49 -0
  133. data/lib/faker/quotes/quote.rb +93 -1
  134. data/lib/faker/quotes/rajnikanth.rb +1 -0
  135. data/lib/faker/quotes/shakespeare.rb +70 -0
  136. data/lib/faker/religion/bible.rb +50 -0
  137. data/lib/faker/sports/chess.rb +90 -0
  138. data/lib/faker/sports/mountaineering.rb +22 -0
  139. data/lib/faker/sports/sport.rb +116 -0
  140. data/lib/faker/sports/volleyball.rb +74 -0
  141. data/lib/faker/travel/airport.rb +43 -0
  142. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +13 -0
  143. data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
  144. data/lib/faker/tv_shows/brooklyn_nine_nine.rb +38 -0
  145. data/lib/faker/tv_shows/buffy.rb +17 -4
  146. data/lib/faker/tv_shows/dr_who.rb +1 -1
  147. data/lib/faker/tv_shows/final_space.rb +51 -0
  148. data/lib/faker/tv_shows/futurama.rb +65 -0
  149. data/lib/faker/tv_shows/michael_scott.rb +0 -3
  150. data/lib/faker/tv_shows/simpsons.rb +14 -0
  151. data/lib/faker/tv_shows/spongebob.rb +50 -0
  152. data/lib/faker/tv_shows/suits.rb +37 -0
  153. data/lib/faker/tv_shows/supernatural.rb +48 -0
  154. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +17 -4
  155. data/lib/faker/tv_shows/the_office.rb +37 -0
  156. data/lib/faker/version.rb +2 -2
  157. data/lib/faker.rb +40 -84
  158. data/lib/helpers/base58.rb +1 -1
  159. data/lib/helpers/char.rb +22 -27
  160. data/lib/helpers/unique_generator.rb +13 -13
  161. data/lib/locales/ar.yml +6 -1
  162. data/lib/locales/bg.yml +1 -1
  163. data/lib/locales/da-DK.yml +1 -1
  164. data/lib/locales/de-AT.yml +7 -6
  165. data/lib/locales/de-CH.yml +1697 -2
  166. data/lib/locales/de.yml +12 -6
  167. data/lib/locales/en/address.yml +4 -3
  168. data/lib/locales/en/adjective.yml +179 -0
  169. data/lib/locales/en/airport.yml +381 -0
  170. data/lib/locales/en/animal.yml +1 -1
  171. data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
  172. data/lib/locales/en/australia.yml +107 -0
  173. data/lib/locales/en/avatar.yml +31 -0
  174. data/lib/locales/en/bank.yml +1 -1
  175. data/lib/locales/en/barcode.yml +24 -0
  176. data/lib/locales/en/bible.yml +90 -0
  177. data/lib/locales/en/big_bang_theory.yml +38 -0
  178. data/lib/locales/en/bird.yml +1281 -0
  179. data/lib/locales/en/blood.yml +13 -0
  180. data/lib/locales/en/book.yml +487 -3
  181. data/lib/locales/en/brooklyn_nine_nine.yml +35 -0
  182. data/lib/locales/en/buffy.yml +1 -1
  183. data/lib/locales/en/camera.yml +611 -0
  184. data/lib/locales/en/cat.yml +1 -1
  185. data/lib/locales/en/chess.yml +103 -0
  186. data/lib/locales/en/clash_of_clan.yml +101 -0
  187. data/lib/locales/en/coffee.yml +1 -1
  188. data/lib/locales/en/commerce.yml +17 -0
  189. data/lib/locales/en/community.yml +17 -17
  190. data/lib/locales/en/company.yml +3 -2
  191. data/lib/locales/en/computer.yml +55 -0
  192. data/lib/locales/en/conan.yml +171 -0
  193. data/lib/locales/en/control.yml +247 -0
  194. data/lib/locales/en/cowboy_bebop.yml +163 -0
  195. data/lib/locales/en/demographic.yml +218 -5
  196. data/lib/locales/en/departed.yml +50 -0
  197. data/lib/locales/en/device.yml +112 -4
  198. data/lib/locales/en/dnd.yml +636 -0
  199. data/lib/locales/en/doraemon.yml +286 -0
  200. data/lib/locales/en/dota.yml +651 -63
  201. data/lib/locales/en/dragon_ball.yml +243 -1
  202. data/lib/locales/en/driving_license.yml +181 -0
  203. data/lib/locales/en/drone.yml +95 -0
  204. data/lib/locales/en/dune.yml +270 -131
  205. data/lib/locales/en/educator.yml +6 -0
  206. data/lib/locales/en/elder_scrolls.yml +583 -9
  207. data/lib/locales/en/emotion.yml +480 -0
  208. data/lib/locales/en/fallout.yml +311 -133
  209. data/lib/locales/en/file.yml +9 -1
  210. data/lib/locales/en/final_space.yml +37 -0
  211. data/lib/locales/en/finance.yml +77 -1
  212. data/lib/locales/en/fma_brotherhood.yml +78 -0
  213. data/lib/locales/en/food.yml +1066 -10
  214. data/lib/locales/en/football.yml +3 -3
  215. data/lib/locales/en/fresh_prince_of_bel_air.yml +1 -1
  216. data/lib/locales/en/futurama.yml +344 -0
  217. data/lib/locales/en/game.yml +11 -0
  218. data/lib/locales/en/hackers.yml +53 -0
  219. data/lib/locales/en/half_life.yml +84 -3
  220. data/lib/locales/en/heroes.yml +408 -3
  221. data/lib/locales/en/heroes_of_the_storm.yml +131 -4
  222. data/lib/locales/en/hobby.yml +171 -0
  223. data/lib/locales/en/horse.yml +2 -2
  224. data/lib/locales/en/house.yml +1 -1
  225. data/lib/locales/en/how_to_train_your_dragon.yml +174 -0
  226. data/lib/locales/en/internet.yml +140 -3
  227. data/lib/locales/en/jack_handey.yml +54 -0
  228. data/lib/locales/en/kamen_rider.yml +452 -0
  229. data/lib/locales/en/kpop.yml +7 -7
  230. data/lib/locales/en/league_of_legends.yml +285 -6
  231. data/lib/locales/en/lebowski.yml +1 -1
  232. data/lib/locales/en/lovecraft.yml +76 -6
  233. data/lib/locales/en/military.yml +179 -5
  234. data/lib/locales/en/minecraft.yml +663 -0
  235. data/lib/locales/en/mitch_hedberg.yml +46 -0
  236. data/lib/locales/en/mountain.yml +171 -0
  237. data/lib/locales/en/mountaineering.yml +14 -0
  238. data/lib/locales/en/movie.yml +194 -2
  239. data/lib/locales/en/music.yml +461 -29
  240. data/lib/locales/en/myst.yml +87 -31
  241. data/lib/locales/en/name.yml +5 -4
  242. data/lib/locales/en/naruto.yml +230 -0
  243. data/lib/locales/en/one_piece.yml +2 -2
  244. data/lib/locales/en/opera.yml +169 -1
  245. data/lib/locales/en/overwatch.yml +2648 -2622
  246. data/lib/locales/en/pearl_jam.yml +213 -0
  247. data/lib/locales/en/phish.yml +392 -1
  248. data/lib/locales/en/pokemon.yml +417 -4
  249. data/lib/locales/en/prince.yml +227 -0
  250. data/lib/locales/en/quote.yml +692 -163
  251. data/lib/locales/en/rock_band.yml +1 -0
  252. data/lib/locales/en/room.yml +68 -0
  253. data/lib/locales/en/rush.yml +32 -0
  254. data/lib/locales/en/science.yml +481 -3
  255. data/lib/locales/en/shakespeare.yml +21 -24
  256. data/lib/locales/en/show.yml +597 -0
  257. data/lib/locales/en/simpsons.yml +668 -0
  258. data/lib/locales/en/source.yml +35 -0
  259. data/lib/locales/en/space.yml +1 -1
  260. data/lib/locales/en/spongebob.yml +489 -0
  261. data/lib/locales/en/sport.yml +130 -0
  262. data/lib/locales/en/star_trek.yml +1 -1
  263. data/lib/locales/en/star_wars.yml +568 -220
  264. data/lib/locales/en/stranger_thing.yml +1 -1
  265. data/lib/locales/en/street_fighter.yml +1524 -0
  266. data/lib/locales/en/studio_ghibli.yml +107 -0
  267. data/lib/locales/en/suits.yml +45 -0
  268. data/lib/locales/en/super_mario.yml +58 -0
  269. data/lib/locales/en/super_smash_bros.yml +23 -6
  270. data/lib/locales/en/supernatural.yml +141 -0
  271. data/lib/locales/en/tarkov.yml +593 -0
  272. data/lib/locales/en/tea.yml +172 -0
  273. data/lib/locales/en/the_kingkiller_chronicle.yml +56 -0
  274. data/lib/locales/en/the_office.yml +86 -0
  275. data/lib/locales/en/tolkien.yml +2453 -0
  276. data/lib/locales/en/touhou.yml +839 -0
  277. data/lib/locales/en/tron.yml +227 -0
  278. data/lib/locales/en/vehicle.yml +2809 -75
  279. data/lib/locales/en/volleyball.yml +501 -0
  280. data/lib/locales/en/warhammer_fantasy.yml +582 -0
  281. data/lib/locales/en/witcher.yml +426 -7
  282. data/lib/locales/en/world_of_warcraft.yml +122 -4
  283. data/lib/locales/en/zelda.yml +962 -4
  284. data/lib/locales/en-AU.yml +50 -10
  285. data/lib/locales/en-CA.yml +4 -1
  286. data/lib/locales/en-GB.yml +3 -2
  287. data/lib/locales/en-IND.yml +2 -1
  288. data/lib/locales/en-MS.yml +3 -1
  289. data/lib/locales/en-NEP.yml +4 -1
  290. data/lib/locales/en-NG.yml +1 -0
  291. data/lib/locales/en-NZ.yml +4 -1
  292. data/lib/locales/en-PAK.yml +3 -1
  293. data/lib/locales/en-SG.yml +3 -1
  294. data/lib/locales/en-UG.yml +1 -0
  295. data/lib/locales/en-US.yml +38 -12
  296. data/lib/locales/en-ZA.yml +1 -1
  297. data/lib/locales/en-au-ocker.yml +4 -1
  298. data/lib/locales/en.yml +0 -3
  299. data/lib/locales/es-AR.yml +4601 -0
  300. data/lib/locales/es-MX.yml +1 -1
  301. data/lib/locales/es.yml +58 -2
  302. data/lib/locales/fi-FI.yml +4 -2
  303. data/lib/locales/fr/address.yml +20 -0
  304. data/lib/locales/fr/adjective.yml +266 -0
  305. data/lib/locales/fr/ancient.yml +141 -0
  306. data/lib/locales/fr/animal.yml +5 -0
  307. data/lib/locales/fr/appliance.yml +4 -0
  308. data/lib/locales/fr/book.yml +7 -0
  309. data/lib/locales/fr/color.yml +4 -0
  310. data/lib/locales/fr/company.yml +17 -0
  311. data/lib/locales/fr/compass.yml +23 -0
  312. data/lib/locales/fr/demographic.yml +4 -0
  313. data/lib/locales/fr/gender.yml +6 -0
  314. data/lib/locales/fr/internet.yml +5 -0
  315. data/lib/locales/fr/lorem.yml +5 -0
  316. data/lib/locales/fr/measurement.yml +7 -0
  317. data/lib/locales/fr/name.yml +21 -0
  318. data/lib/locales/fr/phone_number.yml +7 -0
  319. data/lib/locales/fr/pokemon.yml +7 -0
  320. data/lib/locales/fr-CA.yml +22 -6
  321. data/lib/locales/fr-CH.yml +3 -3
  322. data/lib/locales/fr.yml +1 -113
  323. data/lib/locales/hy.yml +2 -1
  324. data/lib/locales/id.yml +3 -1
  325. data/lib/locales/it.yml +3 -1
  326. data/lib/locales/ja/README.md +13 -0
  327. data/lib/locales/ja/address.yml +120539 -0
  328. data/lib/locales/ja/adjective.yml +148 -0
  329. data/lib/locales/ja/ancient.yml +4 -0
  330. data/lib/locales/ja/animal.yml +5 -0
  331. data/lib/locales/ja/bank.yml +4 -0
  332. data/lib/locales/ja/book.yml +7 -0
  333. data/lib/locales/ja/cat.yml +5 -0
  334. data/lib/locales/ja/coffee.yml +4 -0
  335. data/lib/locales/ja/color.yml +4 -0
  336. data/lib/locales/ja/commerce.yml +11 -0
  337. data/lib/locales/ja/company.yml +8 -0
  338. data/lib/locales/ja/dog.yml +6 -0
  339. data/lib/locales/ja/emotion.yml +51 -0
  340. data/lib/locales/ja/food.yml +4 -0
  341. data/lib/locales/ja/gender.yml +4 -0
  342. data/lib/locales/ja/lorem.yml +9 -0
  343. data/lib/locales/ja/name.yml +13 -0
  344. data/lib/locales/ja/naruto.yml +230 -0
  345. data/lib/locales/ja/overwatch.yml +5 -0
  346. data/lib/locales/ja/phone_number.yml +7 -0
  347. data/lib/locales/ja/pokemon.yml +7 -0
  348. data/lib/locales/ja/relationship.yml +10 -0
  349. data/lib/locales/ja/restaurant.yml +11 -0
  350. data/lib/locales/ja/space.yml +5 -0
  351. data/lib/locales/ja/studio_ghibli.yml +112 -0
  352. data/lib/locales/ja/subscription.yml +8 -0
  353. data/lib/locales/ja/super_mario.yml +9 -0
  354. data/lib/locales/ja/super_smash_bros.yml +8 -0
  355. data/lib/locales/ja/university.yml +9 -0
  356. data/lib/locales/ja/zelda.yml +5 -0
  357. data/lib/locales/ko.yml +95 -2
  358. data/lib/locales/lt.yml +34 -0
  359. data/lib/locales/lv.yml +1 -1
  360. data/lib/locales/mi-NZ.yml +283 -0
  361. data/lib/locales/nb-NO.yml +5 -2
  362. data/lib/locales/nl.yml +1 -0
  363. data/lib/locales/pl.yml +2 -2
  364. data/lib/locales/pt-BR.yml +10 -2
  365. data/lib/locales/pt.yml +4 -2
  366. data/lib/locales/ru.yml +43 -1
  367. data/lib/locales/sk.yml +5 -2
  368. data/lib/locales/sv.yml +1 -0
  369. data/lib/locales/th.yml +76 -76
  370. data/lib/locales/tr.yml +1 -0
  371. data/lib/locales/uk.yml +3 -0
  372. data/lib/locales/vi.yml +1 -0
  373. data/lib/locales/zh-CN.yml +1 -0
  374. data/lib/locales/zh-TW.yml +1 -0
  375. metadata +219 -29
  376. data/lib/faker/default/fillmurray.rb +0 -45
  377. data/lib/faker/default/lorem_pixel.rb +0 -47
  378. data/lib/locales/en/hobbit.yml +0 -19
  379. data/lib/locales/en/lord_of_the_rings.yml +0 -6
  380. data/lib/locales/ja.yml +0 -101
@@ -6,156 +6,314 @@ module Faker
6
6
 
7
7
  MILEAGE_MIN = 10_000
8
8
  MILEAGE_MAX = 90_000
9
- VIN_LETTERS = 'ABCDEFGHJKLMNPRSTUVWXYZ'
10
- VIN_MAP = '0123456789X'
11
- VIN_WEIGHTS = '8765432X098765432'
12
- VIN_REGEX = /^[A-Z0-9]{3}[A-Z0-9]{5}[A-Z0-9]{1}[A-Z0-9]{1}[A-Z0-0]{1}[A-Z0-9]{1}\d{5}$/.freeze
9
+ VIN_KEYSPACE = %w[A B C D E F G H J K L M N P R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9].freeze
10
+ VIN_TRANSLITERATION = { A: 1, B: 2, C: 3, D: 4, E: 5, F: 6, G: 7, H: 8, J: 1, K: 2, L: 3, M: 4, N: 5, P: 7, R: 9, S: 2, T: 3, U: 4, V: 5, W: 6, X: 7, Y: 8, Z: 9 }.freeze
11
+ VIN_WEIGHT = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2].freeze
13
12
  SG_CHECKSUM_WEIGHTS = [3, 14, 2, 12, 2, 11, 1].freeze
14
13
  SG_CHECKSUM_CHARS = 'AYUSPLJGDBZXTRMKHEC'
15
14
 
16
15
  class << self
16
+ # Produces a random vehicle VIN number.
17
+ #
18
+ # @return [String]
19
+ #
20
+ # @example
21
+ # Faker::Vehicle.vin #=> "LLDWXZLG77VK2LUUF"
22
+ #
23
+ # @faker.version 1.6.4
17
24
  def vin
18
- regexify(VIN_REGEX)
25
+ front = 8.times.map { VIN_KEYSPACE.sample(random: Faker::Config.random) }.join
26
+ back = 8.times.map { VIN_KEYSPACE.sample(random: Faker::Config.random) }.join
27
+ checksum = "#{front}A#{back}".chars.each_with_index.map do |char, i|
28
+ value = (char =~ /\A\d\z/ ? char.to_i : VIN_TRANSLITERATION[char.to_sym])
29
+ value * VIN_WEIGHT[i]
30
+ end.inject(:+) % 11
31
+ checksum = 'X' if checksum == 10
32
+ "#{front}#{checksum}#{back}"
19
33
  end
20
34
 
35
+ # Produces a random vehicle manufacturer.
36
+ #
37
+ # @return [String]
38
+ #
39
+ # @example
40
+ # Faker::Vehicle.manufacture #=> "Lamborghini"
41
+ #
42
+ # @faker.version 1.6.4
21
43
  def manufacture
22
44
  fetch('vehicle.manufacture')
23
45
  end
24
46
 
47
+ ##
48
+ # Produces a random vehicle make.
49
+ #
50
+ # @return [String]
51
+ #
52
+ # @example
53
+ # Faker::Vehicle.make #=> "Honda"
54
+ #
55
+ # @faker.version 1.6.4
25
56
  def make
26
57
  fetch('vehicle.makes')
27
58
  end
28
59
 
29
- def model(legacy_make_of_model = NOT_GIVEN, make_of_model: '')
30
- warn_for_deprecated_arguments do |keywords|
31
- keywords << :make_of_model if legacy_make_of_model != NOT_GIVEN
32
- end
33
-
60
+ ##
61
+ # Produces a random vehicle model.
62
+ #
63
+ # @param make_of_model [String] Specific valid vehicle make.
64
+ # @return [String]
65
+ #
66
+ # @example
67
+ # Faker::Vehicle.model #=> "A8"
68
+ # Faker::Vehicle.model(make_of_model: 'Toyota') #=> "Prius"
69
+ #
70
+ # @faker.version 1.6.4
71
+ def model(make_of_model: '')
34
72
  return fetch("vehicle.models_by_make.#{make}") if make_of_model.empty?
35
73
 
36
74
  fetch("vehicle.models_by_make.#{make_of_model}")
37
75
  end
38
76
 
77
+ ##
78
+ # Produces a random vehicle make and model.
79
+ #
80
+ # @return [String]
81
+ #
82
+ # @example
83
+ # Faker::Vehicle.make_and_model #=> "Dodge Charger"
84
+ #
85
+ # @faker.version 1.6.4
39
86
  def make_and_model
40
87
  m = make
41
88
 
42
89
  "#{m} #{model(make_of_model: m)}"
43
90
  end
44
91
 
92
+ ##
93
+ # Produces a random vehicle style.
94
+ #
95
+ # @return [String]
96
+ #
97
+ # @example
98
+ # Faker::Vehicle.style #=> "ESi"
99
+ #
100
+ # @faker.version 1.6.4
45
101
  def style
46
102
  fetch('vehicle.styles')
47
103
  end
48
104
 
105
+ ##
106
+ # Produces a random vehicle color.
107
+ #
108
+ # @return [String]
109
+ #
110
+ # @example
111
+ # Faker::Vehicle.color #=> "Red"
112
+ #
113
+ # @faker.version 1.6.4
49
114
  def color
50
115
  fetch('vehicle.colors')
51
116
  end
52
117
 
118
+ ##
119
+ # Produces a random vehicle transmission.
120
+ #
121
+ # @return [String]
122
+ #
123
+ # @example
124
+ # Faker::Vehicle.transmission #=> "Automanual"
125
+ #
126
+ # @faker.version 1.6.4
53
127
  def transmission
54
128
  fetch('vehicle.transmissions')
55
129
  end
56
130
 
131
+ ##
132
+ # Produces a random vehicle drive type.
133
+ #
134
+ # @return [String]
135
+ #
136
+ # @example
137
+ # Faker::Vehicle.drive_type #=> "4x2/2-wheel drive"
138
+ #
139
+ # @faker.version 1.6.4
57
140
  def drive_type
58
141
  fetch('vehicle.drive_types')
59
142
  end
60
143
 
144
+ ##
145
+ # Produces a random vehicle fuel type.
146
+ #
147
+ # @return [String]
148
+ #
149
+ # @example
150
+ # Faker::Vehicle.fuel_type #=> "Diesel"
151
+ #
152
+ # @faker.version 1.6.4
61
153
  def fuel_type
62
154
  fetch('vehicle.fuel_types')
63
155
  end
64
156
 
157
+ ##
158
+ # Produces a random car type.
159
+ #
160
+ # @return [String]
161
+ #
162
+ # @example
163
+ # Faker::Vehicle.car_type #=> "Sedan"
164
+ #
165
+ # @faker.version 1.6.4
65
166
  def car_type
66
167
  fetch('vehicle.car_types')
67
168
  end
68
169
 
170
+ ##
171
+ # Produces a random engine cylinder count.
172
+ #
173
+ # @return [String]
174
+ #
175
+ # @example
176
+ # Faker::Vehicle.engine_size #=> 6
177
+ # Faker::Vehicle.engine #=> 4
178
+ #
179
+ # @faker.version 1.6.4
69
180
  def engine
70
181
  "#{sample(fetch_all('vehicle.doors'))} #{fetch('vehicle.cylinder_engine')}"
71
182
  end
72
183
 
73
184
  alias engine_size engine
74
185
 
186
+ ##
187
+ # Produces a random list of car options.
188
+ #
189
+ # @return [Array<String>]
190
+ #
191
+ # @example
192
+ # Faker::Vehicle.car_options #=> ["DVD System", "MP3 (Single Disc)", "Tow Package", "CD (Multi Disc)", "Cassette Player", "Bucket Seats", "Cassette Player", "Leather Interior", "AM/FM Stereo", "Third Row Seats"]
193
+ #
194
+ # @faker.version 1.6.4
75
195
  def car_options
76
196
  Array.new(rand(5...10)) { fetch('vehicle.car_options') }
77
197
  end
78
198
 
199
+ ##
200
+ # Produces a random list of standard specs.
201
+ #
202
+ # @return [Array<String>]
203
+ #
204
+ # @example
205
+ # Faker::Vehicle.standard_specs #=> ["Full-size spare tire w/aluminum alloy wheel", "Back-up camera", "Carpeted cargo area", "Silver accent IP trim finisher -inc: silver shifter finisher", "Back-up camera", "Water-repellent windshield & front door glass", "Floor carpeting"]
206
+ #
207
+ # @faker.version 1.6.4
79
208
  def standard_specs
80
209
  Array.new(rand(5...10)) { fetch('vehicle.standard_specs') }
81
210
  end
82
211
 
212
+ ##
213
+ # Produces a random vehicle door count.
214
+ #
215
+ # @return [Integer]
216
+ #
217
+ # @example
218
+ # Faker::Vehicle.doors #=> 1
219
+ # Faker::Vehicle.door_count #=> 3
220
+ #
221
+ # @faker.version 1.6.4
83
222
  def doors
84
223
  sample(fetch_all('vehicle.doors'))
85
224
  end
86
225
  alias door_count doors
87
226
 
227
+ ##
228
+ # Produces a random car year between 1 and 15 years ago.
229
+ #
230
+ # @return [Integer]
231
+ #
232
+ # @example
233
+ # Faker::Vehicle.year #=> 2008
234
+ #
235
+ # @faker.version 1.6.4
88
236
  def year
89
237
  Faker::Time.backward(days: rand_in_range(365, 5475), period: :all, format: '%Y').to_i
90
238
  end
91
239
 
92
- def mileage(legacy_min = NOT_GIVEN, legacy_max = NOT_GIVEN, min: MILEAGE_MIN, max: MILEAGE_MAX)
93
- warn_for_deprecated_arguments do |keywords|
94
- keywords << :min if legacy_min != NOT_GIVEN
95
- keywords << :max if legacy_max != NOT_GIVEN
96
- end
97
-
240
+ ##
241
+ # Produces a random mileage/kilometrage for a vehicle.
242
+ #
243
+ # @param min [Integer] Specific minimum limit for mileage generation.
244
+ # @param max [Integer] Specific maximum limit for mileage generation.
245
+ # @return [Integer]
246
+ #
247
+ # @example
248
+ # Faker::Vehicle.mileage #=> 26961
249
+ # Faker::Vehicle.mileage(min: 50_000) #=> 81557
250
+ # Faker::Vehicle.mileage(min: 50_000, max: 250_000) #=> 117503
251
+ # Faker::Vehicle.kilometrage #=> 35378
252
+ #
253
+ # @faker.version 1.6.4
254
+ def mileage(min: MILEAGE_MIN, max: MILEAGE_MAX)
98
255
  rand_in_range(min, max)
99
256
  end
100
257
 
101
258
  alias kilometrage mileage
102
259
 
103
- def license_plate(legacy_state_abreviation = NOT_GIVEN, state_abreviation: '')
104
- warn_for_deprecated_arguments do |keywords|
105
- keywords << :state_abreviation if legacy_state_abreviation != NOT_GIVEN
106
- end
107
-
108
- return regexify(bothify(fetch('vehicle.license_plate'))) if state_abreviation.empty?
109
-
110
- key = 'vehicle.license_plate_by_state.' + state_abreviation
260
+ ##
261
+ # Produces a random license plate number.
262
+ #
263
+ # @param state_abbreviation [String] Two letter state abbreviation for license plate generation.
264
+ # @return [String]
265
+ #
266
+ # @example
267
+ # Faker::Vehicle.license_plate #=> "DEP-2483"
268
+ # Faker::Vehicle.license_plate(state_abbreviation: 'FL') #=> "977 UNU"
269
+ #
270
+ # @faker.version 1.6.4
271
+ def license_plate(state_abbreviation: '')
272
+ return regexify(bothify(fetch('vehicle.license_plate'))) if state_abbreviation.empty?
273
+
274
+ key = "vehicle.license_plate_by_state.#{state_abbreviation}"
111
275
  regexify(bothify(fetch(key)))
112
276
  end
113
277
 
278
+ ##
279
+ # Produces a random license plate number for Singapore.
280
+ #
281
+ # @return [String]
282
+ #
283
+ # @example
284
+ # Faker::Vehicle.singapore_license_plate #=> "SLV1854M"
285
+ #
286
+ # @faker.version 1.6.4
114
287
  def singapore_license_plate
115
288
  key = 'vehicle.license_plate'
116
289
  plate_number = regexify(bothify(fetch(key)))
117
290
  "#{plate_number}#{singapore_checksum(plate_number)}"
118
291
  end
119
292
 
120
- private
121
-
122
- def first_eight(number)
123
- return number[0...8] unless number.nil?
124
-
125
- regexify(VIN_REGEX)
293
+ ##
294
+ # Produces a car version
295
+ #
296
+ # @return [String]
297
+ #
298
+ # @example
299
+ # Faker::Vehicle.version #=> "40 TFSI Premium"
300
+ #
301
+ # @faker.version next
302
+ def version
303
+ fetch('vehicle.version')
126
304
  end
127
- alias last_eight first_eight
128
305
 
129
- def calculate_vin_check_digit(vin)
130
- sum = 0
131
-
132
- vin.each_char.with_index do |c, i|
133
- n = vin_char_to_number(c).to_i
134
- weight = VIN_WEIGHTS[i].to_i
135
- sum += weight * n
136
- end
137
-
138
- mod = sum % 11
139
- mod == 10 ? 'X' : mod
140
- end
141
-
142
- def vin_char_to_number(char)
143
- index = VIN_LETTERS.split('').index(char)
144
-
145
- return char.to_i if index.nil?
146
-
147
- VIN_MAP[index]
148
- end
306
+ private
149
307
 
150
308
  def singapore_checksum(plate_number)
151
- padded_alphabets = format('%3s', plate_number[/^[A-Z]+/]).tr(' ', '-').split('')
152
- padded_digits = format('%04d', plate_number[/\d+/]).split('').map(&:to_i)
309
+ padded_alphabets = format('%3s', plate_number[/^[A-Z]+/]).tr(' ', '-').chars
310
+ padded_digits = format('%04d', plate_number[/\d+/]).chars.map(&:to_i)
153
311
  sum = [*padded_alphabets, *padded_digits].each_with_index.reduce(0) do |memo, (char, i)|
154
312
  value = char.is_a?(Integer) ? char : char.ord - 64
155
313
  memo + (SG_CHECKSUM_WEIGHTS[i] * value)
156
314
  end
157
315
 
158
- SG_CHECKSUM_CHARS.split('')[sum % 19]
316
+ SG_CHECKSUM_CHARS.chars[sum % 19]
159
317
  end
160
318
  end
161
319
  end
@@ -3,22 +3,67 @@
3
3
  module Faker
4
4
  class Verb < Base
5
5
  class << self
6
+ ##
7
+ # Produces the base form of a random verb.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::Verb.base #=> "hurt"
13
+ #
14
+ # @faker.version 1.9.0
6
15
  def base
7
16
  fetch('verbs.base')
8
17
  end
9
18
 
19
+ ##
20
+ # Produces a random verb in past tense.
21
+ #
22
+ # @return [String]
23
+ #
24
+ # @example
25
+ # Faker::Verb.past #=> "completed"
26
+ #
27
+ # @faker.version 1.9.0
10
28
  def past
11
29
  fetch('verbs.past')
12
30
  end
13
31
 
32
+ ##
33
+ # Produces a random verb in past participle.
34
+ #
35
+ # @return [String]
36
+ #
37
+ # @example
38
+ # Faker::Verb.past_participle #=> "digested"
39
+ #
40
+ # @faker.version 1.9.0
14
41
  def past_participle
15
42
  fetch('verbs.past_participle')
16
43
  end
17
44
 
45
+ ##
46
+ # Produces a random verb in simple present.
47
+ #
48
+ # @return [String]
49
+ #
50
+ # @example
51
+ # Faker::Verb.simple_present #=> "climbs"
52
+ #
53
+ # @faker.version 1.9.0
18
54
  def simple_present
19
55
  fetch('verbs.simple_present')
20
56
  end
21
57
 
58
+ ##
59
+ # Produces a random verb in the .ing form.
60
+ #
61
+ # @return [String]
62
+ #
63
+ # @example
64
+ # Faker::Verb.ing_form #=> "causing"
65
+ #
66
+ # @faker.version 1.9.0
22
67
  def ing_form
23
68
  fetch('verbs.ing_form')
24
69
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class VulnerabilityIdentifier < Base
5
+ class << self
6
+ ##
7
+ # Produces a Common Vulnerabilities and Exposures (CVE) identifier.
8
+ #
9
+ # @param year [Integer] The year-part of the CVE identifier (defaults to the current year)
10
+ # @return [String]
11
+ #
12
+ # @example
13
+ # Faker::VulnerabilityIdentifier.cve #=> "CVE-2021-1337"
14
+ # Faker::VulnerabilityIdentifier.cve(year: 1999) #=> "CVE-1999-0523"
15
+ #
16
+ # @faker.version next
17
+ def cve(year: ::Date.today.year)
18
+ index = rand_in_range(1, 99_999).to_s.rjust(4, '0')
19
+ "CVE-#{year}-#{index}"
20
+ end
21
+ end
22
+ end
23
+ end
@@ -24,7 +24,7 @@ module Faker
24
24
  # @example
25
25
  # Faker::WorldCup.city #=> "Moscow"
26
26
  #
27
- # @faker.version next
27
+ # @faker.version 2.13.0
28
28
  def city
29
29
  fetch('world_cup.cities')
30
30
  end
@@ -37,7 +37,7 @@ module Faker
37
37
  # @example
38
38
  # Faker::WorldCup.stadium #=> "Rostov Arena"
39
39
  #
40
- # @faker.version next
40
+ # @faker.version 2.13.0
41
41
  def stadium
42
42
  fetch('world_cup.stadiums')
43
43
  end
@@ -52,12 +52,8 @@ module Faker
52
52
  # @example
53
53
  # Faker::WorldCup.group #=> "Russia"
54
54
  #
55
- # @faker.version next
56
- def group(legacy_group = NOT_GIVEN, group: 'group_A')
57
- warn_for_deprecated_arguments do |keywords|
58
- keywords << :group if legacy_group != NOT_GIVEN
59
- end
60
-
55
+ # @faker.version 2.13.0
56
+ def group(group: 'group_A')
61
57
  fetch("world_cup.groups.#{group}")
62
58
  end
63
59
 
@@ -72,13 +68,8 @@ module Faker
72
68
  # @example
73
69
  # Faker::WorldCup.roster(country: 'Spain', type: 'forwards') #=> "Diego Costa"
74
70
  #
75
- # @faker.version next
76
- def roster(legacy_country = NOT_GIVEN, legacy_type = NOT_GIVEN, country: 'Egypt', type: 'coach')
77
- warn_for_deprecated_arguments do |keywords|
78
- keywords << :country if legacy_country != NOT_GIVEN
79
- keywords << :type if legacy_type != NOT_GIVEN
80
- end
81
-
71
+ # @faker.version 2.13.0
72
+ def roster(country: 'Egypt', type: 'coach')
82
73
  fetch("world_cup.rosters.#{country}.#{type}")
83
74
  end
84
75
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Fantasy
5
+ class Tolkien < Base
6
+ flexible :tolkien
7
+
8
+ class << self
9
+ ##
10
+ # Produces a character from Tolkien's legendarium
11
+ #
12
+ # @return [String]
13
+ #
14
+ # @example
15
+ # Faker::Fantasy::Tolkien.character
16
+ # #=> "Goldberry"
17
+ #
18
+ # @faker.version next
19
+ def character
20
+ fetch('tolkien.characters')
21
+ end
22
+
23
+ ##
24
+ # Produces a location from Tolkien's legendarium
25
+ #
26
+ # @return [String]
27
+ #
28
+ # @example
29
+ # Faker::Fantasy::Tolkien.location
30
+ # #=> "Helm's Deep"
31
+ #
32
+ # @faker.version next
33
+ def location
34
+ fetch('tolkien.locations')
35
+ end
36
+
37
+ ##
38
+ # Produces a race from Tolkien's legendarium
39
+ #
40
+ # @return [String]
41
+ #
42
+ # @example
43
+ # Faker::Fantasy::Tolkien.race
44
+ # #=> "Uruk-hai"
45
+ #
46
+ # @faker.version next
47
+ def race
48
+ fetch('tolkien.races')
49
+ end
50
+
51
+ ##
52
+ # Produces the name of a poem from Tolkien's legendarium
53
+ #
54
+ # @return [String]
55
+ #
56
+ # @example
57
+ # Faker::Fantasy::Tolkien.poem
58
+ # #=> "Chip the glasses and crack the plates"
59
+ #
60
+ # @faker.version next
61
+ def poem
62
+ fetch('tolkien.poems')
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Games
5
+ class ClashOfClans < Base
6
+ class << self
7
+ ##
8
+ # Produces the name of a troop from Clash of Clans.
9
+ #
10
+ # @return [String]
11
+ #
12
+ # @example
13
+ # Faker::Games::ClashOfClans.troop #=> "Barbarian"
14
+ #
15
+ # @faker.version next
16
+ def troop
17
+ fetch('games.clash_of_clans.troops')
18
+ end
19
+
20
+ ##
21
+ # Produces the name of a rank from Clash Of Clans.
22
+ #
23
+ # @return [String]
24
+ #
25
+ # @example
26
+ # Faker::Games::ClashOfClans.rank #=> "Legend"
27
+ #
28
+ # @faker.version next
29
+ def rank
30
+ fetch('games.clash_of_clans.ranks')
31
+ end
32
+
33
+ ##
34
+ # Produces the name of a defensive building from Clash Of Clans.
35
+ #
36
+ # @return [String]
37
+ #
38
+ # @example
39
+ # Faker::Games::ClashOfClans.defensive_building #=> "Cannon"
40
+ #
41
+ # @faker.version next
42
+ def defensive_building
43
+ fetch('games.clash_of_clans.defensive_buildings')
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end