faker 2.2.0 → 3.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 (482) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1298 -24
  3. data/History.md +5 -5
  4. data/README.md +239 -104
  5. data/lib/faker/blockchain/aeternity.rb +70 -0
  6. data/lib/faker/blockchain/bitcoin.rb +28 -2
  7. data/lib/faker/blockchain/ethereum.rb +11 -1
  8. data/lib/faker/blockchain/tezos.rb +93 -9
  9. data/lib/faker/books/book.rb +36 -0
  10. data/lib/faker/books/culture_series.rb +49 -0
  11. data/lib/faker/books/dune.rb +73 -17
  12. data/lib/faker/books/lovecraft.rb +186 -57
  13. data/lib/faker/books/the_kingkiller_chronicle.rb +61 -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/default/address.rb +253 -33
  20. data/lib/faker/default/adjective.rb +35 -0
  21. data/lib/faker/default/alphanumeric.rb +27 -22
  22. data/lib/faker/default/ancient.rb +36 -0
  23. data/lib/faker/default/app.rb +46 -16
  24. data/lib/faker/default/appliance.rb +18 -0
  25. data/lib/faker/default/artist.rb +9 -0
  26. data/lib/faker/default/avatar.rb +32 -24
  27. data/lib/faker/default/bank.rb +118 -29
  28. data/lib/faker/default/barcode.rb +165 -0
  29. data/lib/faker/default/beer.rb +75 -3
  30. data/lib/faker/default/blood.rb +48 -0
  31. data/lib/faker/default/boolean.rb +13 -6
  32. data/lib/faker/default/bossa_nova.rb +18 -0
  33. data/lib/faker/default/business.rb +27 -0
  34. data/lib/faker/default/camera.rb +46 -0
  35. data/lib/faker/default/cannabis.rb +90 -0
  36. data/lib/faker/default/chile_rut.rb +62 -26
  37. data/lib/faker/default/chuck_norris.rb +13 -2
  38. data/lib/faker/default/code.rb +162 -58
  39. data/lib/faker/default/coffee.rb +45 -0
  40. data/lib/faker/default/coin.rb +18 -0
  41. data/lib/faker/default/color.rb +123 -5
  42. data/lib/faker/default/commerce.rb +105 -37
  43. data/lib/faker/default/company.rb +446 -34
  44. data/lib/faker/default/compass.rb +135 -0
  45. data/lib/faker/default/computer.rb +63 -0
  46. data/lib/faker/default/construction.rb +54 -0
  47. data/lib/faker/default/cosmere.rb +90 -0
  48. data/lib/faker/default/crypto.rb +44 -4
  49. data/lib/faker/default/crypto_coin.rb +48 -18
  50. data/lib/faker/default/currency.rb +27 -0
  51. data/lib/faker/default/date.rb +149 -52
  52. data/lib/faker/default/dc_comics.rb +45 -0
  53. data/lib/faker/default/demographic.rb +58 -6
  54. data/lib/faker/default/dessert.rb +27 -0
  55. data/lib/faker/default/device.rb +54 -0
  56. data/lib/faker/default/driving_licence.rb +85 -28
  57. data/lib/faker/default/drone.rb +332 -0
  58. data/lib/faker/default/educator.rb +73 -6
  59. data/lib/faker/default/electrical_components.rb +27 -0
  60. data/lib/faker/default/emotion.rb +33 -0
  61. data/lib/faker/default/esport.rb +45 -0
  62. data/lib/faker/default/file.rb +53 -38
  63. data/lib/faker/default/finance.rb +75 -8
  64. data/lib/faker/default/food.rb +93 -3
  65. data/lib/faker/default/funny_name.rb +45 -0
  66. data/lib/faker/default/gender.rb +31 -0
  67. data/lib/faker/default/greek_philosophers.rb +18 -0
  68. data/lib/faker/default/hacker.rb +59 -1
  69. data/lib/faker/default/hipster.rb +106 -81
  70. data/lib/faker/default/hobby.rb +22 -0
  71. data/lib/faker/default/house.rb +18 -0
  72. data/lib/faker/default/html.rb +230 -0
  73. data/lib/faker/default/id_number.rb +276 -18
  74. data/lib/faker/default/industry_segments.rb +36 -0
  75. data/lib/faker/default/internet.rb +442 -147
  76. data/lib/faker/default/internet_http.rb +48 -0
  77. data/lib/faker/default/invoice.rb +37 -29
  78. data/lib/faker/default/job.rb +36 -0
  79. data/lib/faker/default/json.rb +61 -30
  80. data/lib/faker/default/kpop.rb +54 -0
  81. data/lib/faker/default/lorem.rb +184 -121
  82. data/lib/faker/default/lorem_flickr.rb +69 -68
  83. data/lib/faker/default/markdown.rb +97 -15
  84. data/lib/faker/default/marketing.rb +9 -0
  85. data/lib/faker/default/measurement.rb +101 -50
  86. data/lib/faker/default/military.rb +71 -0
  87. data/lib/faker/default/mountain.rb +33 -0
  88. data/lib/faker/default/name.rb +99 -6
  89. data/lib/faker/default/nation.rb +45 -5
  90. data/lib/faker/default/nato_phonetic_alphabet.rb +9 -0
  91. data/lib/faker/default/nhs.rb +21 -7
  92. data/lib/faker/default/number.rb +160 -91
  93. data/lib/faker/default/omniauth.rb +199 -137
  94. data/lib/faker/default/phone_number.rb +89 -11
  95. data/lib/faker/default/placeholdit.rb +23 -25
  96. data/lib/faker/default/programming_language.rb +18 -0
  97. data/lib/faker/default/relationship.rb +47 -7
  98. data/lib/faker/default/religion.rb +6 -0
  99. data/lib/faker/default/restaurant.rb +54 -2
  100. data/lib/faker/default/science.rb +135 -0
  101. data/lib/faker/default/slack_emoji.rb +81 -0
  102. data/lib/faker/default/source.rb +46 -22
  103. data/lib/faker/default/south_africa.rb +90 -0
  104. data/lib/faker/default/space.rb +128 -1
  105. data/lib/faker/default/string.rb +18 -9
  106. data/lib/faker/default/stripe.rb +68 -27
  107. data/lib/faker/default/subscription.rb +45 -0
  108. data/lib/faker/default/superhero.rb +45 -0
  109. data/lib/faker/default/tea.rb +41 -0
  110. data/lib/faker/default/team.rb +45 -0
  111. data/lib/faker/default/time.rb +84 -68
  112. data/lib/faker/default/twitter.rb +57 -47
  113. data/lib/faker/default/types.rb +90 -41
  114. data/lib/faker/default/university.rb +45 -0
  115. data/lib/faker/default/vehicle.rb +223 -60
  116. data/lib/faker/default/verb.rb +45 -0
  117. data/lib/faker/default/vulnerability_identifier.rb +23 -0
  118. data/lib/faker/default/world_cup.rb +52 -16
  119. data/lib/faker/fantasy/tolkien.rb +67 -0
  120. data/lib/faker/games/clash_of_clans.rb +48 -0
  121. data/lib/faker/games/control.rb +113 -0
  122. data/lib/faker/games/dnd.rb +178 -0
  123. data/lib/faker/games/dota.rb +61 -6
  124. data/lib/faker/games/elder_scrolls.rb +98 -0
  125. data/lib/faker/games/fallout.rb +37 -0
  126. data/lib/faker/games/final_fantasy_xiv.rb +73 -0
  127. data/lib/faker/games/game.rb +27 -0
  128. data/lib/faker/games/half_life.rb +27 -0
  129. data/lib/faker/games/heroes.rb +40 -0
  130. data/lib/faker/games/heroes_of_the_storm.rb +48 -1
  131. data/lib/faker/games/league_of_legends.rb +54 -0
  132. data/lib/faker/games/minecraft.rb +113 -0
  133. data/lib/faker/games/myst.rb +45 -0
  134. data/lib/faker/games/overwatch.rb +27 -0
  135. data/lib/faker/games/pokemon.rb +27 -0
  136. data/lib/faker/games/sonic_the_hedgehog.rb +27 -0
  137. data/lib/faker/games/street_fighter.rb +61 -0
  138. data/lib/faker/games/super_mario.rb +48 -0
  139. data/lib/faker/games/super_smash_bros.rb +18 -0
  140. data/lib/faker/games/tarkov.rb +205 -0
  141. data/lib/faker/games/touhou.rb +75 -0
  142. data/lib/faker/games/warhammer_fantasy.rb +74 -0
  143. data/lib/faker/games/witcher.rb +93 -0
  144. data/lib/faker/games/world_of_warcraft.rb +44 -1
  145. data/lib/faker/games/zelda.rb +37 -1
  146. data/lib/faker/japanese_media/conan.rb +48 -0
  147. data/lib/faker/japanese_media/cowboy_bebop.rb +61 -0
  148. data/lib/faker/japanese_media/doraemon.rb +48 -0
  149. data/lib/faker/japanese_media/dragon_ball.rb +35 -0
  150. data/lib/faker/japanese_media/fullmetal_alchemist_brotherhood.rb +48 -0
  151. data/lib/faker/japanese_media/kamen_rider.rb +102 -0
  152. data/lib/faker/japanese_media/naruto.rb +61 -0
  153. data/lib/faker/japanese_media/one_piece.rb +55 -1
  154. data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
  155. data/lib/faker/japanese_media/sword_art_online.rb +36 -0
  156. data/lib/faker/locations/australia.rb +47 -0
  157. data/lib/faker/movies/avatar.rb +49 -0
  158. data/lib/faker/movies/back_to_the_future.rb +28 -0
  159. data/lib/faker/movies/departed.rb +49 -0
  160. data/lib/faker/movies/ghostbusters.rb +28 -0
  161. data/lib/faker/movies/hackers.rb +48 -0
  162. data/lib/faker/movies/harry_potter.rb +54 -0
  163. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +69 -0
  164. data/lib/faker/movies/hobbit.rb +41 -4
  165. data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
  166. data/lib/faker/movies/lebowski.rb +27 -0
  167. data/lib/faker/movies/lord_of_the_rings.rb +31 -3
  168. data/lib/faker/movies/movie.rb +22 -0
  169. data/lib/faker/movies/princess_bride.rb +19 -0
  170. data/lib/faker/movies/room.rb +63 -0
  171. data/lib/faker/movies/star_wars.rb +170 -11
  172. data/lib/faker/movies/tron.rb +161 -0
  173. data/lib/faker/movies/v_for_vendetta.rb +29 -0
  174. data/lib/faker/music/grateful_dead.rb +18 -0
  175. data/lib/faker/music/hiphop.rb +48 -0
  176. data/lib/faker/music/music.rb +102 -4
  177. data/lib/faker/music/opera.rb +273 -1
  178. data/lib/faker/music/pearl_jam.rb +50 -0
  179. data/lib/faker/music/phish.rb +36 -1
  180. data/lib/faker/music/prince.rb +64 -0
  181. data/lib/faker/music/rock_band.rb +21 -0
  182. data/lib/faker/music/rush.rb +37 -0
  183. data/lib/faker/music/show.rb +49 -0
  184. data/lib/faker/music/smashing_pumpkins.rb +64 -0
  185. data/lib/faker/music/umphreys_mcgee.rb +9 -0
  186. data/lib/faker/quotes/chiquito.rb +80 -0
  187. data/lib/faker/quotes/quote.rb +93 -1
  188. data/lib/faker/quotes/rajnikanth.rb +27 -0
  189. data/lib/faker/quotes/shakespeare.rb +70 -0
  190. data/lib/faker/religion/bible.rb +50 -0
  191. data/lib/faker/sports/basketball.rb +36 -0
  192. data/lib/faker/sports/chess.rb +90 -0
  193. data/lib/faker/sports/football.rb +45 -0
  194. data/lib/faker/sports/mountaineering.rb +22 -0
  195. data/lib/faker/sports/sport.rb +116 -0
  196. data/lib/faker/sports/volleyball.rb +74 -0
  197. data/lib/faker/travel/airport.rb +43 -0
  198. data/lib/faker/travel/train_station.rb +54 -0
  199. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +22 -0
  200. data/lib/faker/tv_shows/archer.rb +51 -0
  201. data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
  202. data/lib/faker/tv_shows/bojack_horseman.rb +28 -0
  203. data/lib/faker/tv_shows/breaking_bad.rb +18 -0
  204. data/lib/faker/tv_shows/brooklyn_nine_nine.rb +38 -0
  205. data/lib/faker/tv_shows/buffy.rb +60 -2
  206. data/lib/faker/tv_shows/community.rb +19 -0
  207. data/lib/faker/tv_shows/dr_who.rb +78 -2
  208. data/lib/faker/tv_shows/dumb_and_dumber.rb +28 -0
  209. data/lib/faker/tv_shows/family_guy.rb +28 -0
  210. data/lib/faker/tv_shows/final_space.rb +51 -0
  211. data/lib/faker/tv_shows/friends.rb +27 -0
  212. data/lib/faker/tv_shows/futurama.rb +65 -0
  213. data/lib/faker/tv_shows/game_of_thrones.rb +46 -0
  214. data/lib/faker/tv_shows/hey_arnold.rb +27 -0
  215. data/lib/faker/tv_shows/how_i_met_your_mother.rb +37 -0
  216. data/lib/faker/tv_shows/michael_scott.rb +10 -0
  217. data/lib/faker/tv_shows/new_girl.rb +19 -0
  218. data/lib/faker/tv_shows/parks_and_rec.rb +18 -0
  219. data/lib/faker/tv_shows/rick_and_morty.rb +28 -0
  220. data/lib/faker/tv_shows/ru_paul.rb +18 -0
  221. data/lib/faker/tv_shows/seinfeld.rb +28 -0
  222. data/lib/faker/tv_shows/silicon_valley.rb +75 -0
  223. data/lib/faker/tv_shows/simpsons.rb +42 -0
  224. data/lib/faker/tv_shows/south_park.rb +34 -0
  225. data/lib/faker/tv_shows/spongebob.rb +50 -0
  226. data/lib/faker/tv_shows/star_trek.rb +36 -0
  227. data/lib/faker/tv_shows/stargate.rb +28 -0
  228. data/lib/faker/tv_shows/stranger_things.rb +19 -0
  229. data/lib/faker/tv_shows/suits.rb +37 -0
  230. data/lib/faker/tv_shows/supernatural.rb +48 -0
  231. data/lib/faker/tv_shows/the_expanse.rb +36 -0
  232. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +43 -2
  233. data/lib/faker/tv_shows/the_it_crowd.rb +37 -0
  234. data/lib/faker/tv_shows/the_office.rb +37 -0
  235. data/lib/faker/tv_shows/the_thick_of_it.rb +28 -0
  236. data/lib/faker/tv_shows/twin_peaks.rb +28 -0
  237. data/lib/faker/tv_shows/venture_bros.rb +38 -0
  238. data/lib/faker/version.rb +2 -2
  239. data/lib/faker.rb +58 -58
  240. data/lib/helpers/base58.rb +1 -1
  241. data/lib/helpers/char.rb +22 -27
  242. data/lib/helpers/positional_generator.rb +480 -0
  243. data/lib/helpers/unique_generator.rb +17 -13
  244. data/lib/locales/README.md +18 -2
  245. data/lib/locales/ar.yml +6 -1
  246. data/lib/locales/bg.yml +3 -3
  247. data/lib/locales/ca.yml +0 -8
  248. data/lib/locales/da-DK.yml +6 -4
  249. data/lib/locales/de-AT.yml +7 -6
  250. data/lib/locales/de-CH.yml +6028 -9
  251. data/lib/locales/de.yml +12 -6
  252. data/lib/locales/en/address.yml +8 -3
  253. data/lib/locales/en/adjective.yml +179 -0
  254. data/lib/locales/en/airport.yml +381 -0
  255. data/lib/locales/en/animal.yml +1 -1
  256. data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
  257. data/lib/locales/en/archer.yml +75 -0
  258. data/lib/locales/en/australia.yml +107 -0
  259. data/lib/locales/en/avatar.yml +31 -0
  260. data/lib/locales/en/bank.yml +1 -1
  261. data/lib/locales/en/barcode.yml +24 -0
  262. data/lib/locales/en/bible.yml +90 -0
  263. data/lib/locales/en/big_bang_theory.yml +38 -0
  264. data/lib/locales/en/bird.yml +1281 -0
  265. data/lib/locales/en/blood.yml +13 -0
  266. data/lib/locales/en/book.yml +487 -3
  267. data/lib/locales/en/brooklyn_nine_nine.yml +35 -0
  268. data/lib/locales/en/buffy.yml +1 -1
  269. data/lib/locales/en/camera.yml +611 -0
  270. data/lib/locales/en/cat.yml +1 -1
  271. data/lib/locales/en/chess.yml +103 -0
  272. data/lib/locales/en/chiquito.yml +64 -0
  273. data/lib/locales/en/clash_of_clan.yml +101 -0
  274. data/lib/locales/en/coffee.yml +1 -1
  275. data/lib/locales/en/color.yml +1 -1
  276. data/lib/locales/en/commerce.yml +17 -0
  277. data/lib/locales/en/community.yml +17 -17
  278. data/lib/locales/en/company.yml +3 -2
  279. data/lib/locales/en/computer.yml +55 -0
  280. data/lib/locales/en/conan.yml +171 -0
  281. data/lib/locales/en/control.yml +247 -0
  282. data/lib/locales/en/cowboy_bebop.yml +163 -0
  283. data/lib/locales/en/demographic.yml +218 -5
  284. data/lib/locales/en/departed.yml +50 -0
  285. data/lib/locales/en/device.yml +112 -4
  286. data/lib/locales/en/dnd.yml +636 -0
  287. data/lib/locales/en/doraemon.yml +286 -0
  288. data/lib/locales/en/dota.yml +651 -63
  289. data/lib/locales/en/dr_who.yml +1 -1
  290. data/lib/locales/en/dragon_ball.yml +243 -1
  291. data/lib/locales/en/driving_license.yml +181 -0
  292. data/lib/locales/en/drone.yml +95 -0
  293. data/lib/locales/en/dune.yml +270 -131
  294. data/lib/locales/en/educator.yml +75 -6
  295. data/lib/locales/en/elder_scrolls.yml +583 -9
  296. data/lib/locales/en/emotion.yml +480 -0
  297. data/lib/locales/en/fallout.yml +311 -133
  298. data/lib/locales/en/file.yml +9 -1
  299. data/lib/locales/en/final_fantasy_xiv.yml +754 -0
  300. data/lib/locales/en/final_space.yml +37 -0
  301. data/lib/locales/en/finance.yml +77 -1
  302. data/lib/locales/en/fma_brotherhood.yml +78 -0
  303. data/lib/locales/en/food.yml +1066 -10
  304. data/lib/locales/en/football.yml +3 -3
  305. data/lib/locales/en/fresh_prince_of_bel_air.yml +1 -1
  306. data/lib/locales/en/futurama.yml +344 -0
  307. data/lib/locales/en/game.yml +11 -0
  308. data/lib/locales/en/gender.yml +1 -0
  309. data/lib/locales/en/hackers.yml +53 -0
  310. data/lib/locales/en/half_life.yml +84 -3
  311. data/lib/locales/en/heroes.yml +408 -3
  312. data/lib/locales/en/heroes_of_the_storm.yml +131 -4
  313. data/lib/locales/en/hobby.yml +171 -0
  314. data/lib/locales/en/horse.yml +2 -2
  315. data/lib/locales/en/house.yml +1 -1
  316. data/lib/locales/en/how_to_train_your_dragon.yml +174 -0
  317. data/lib/locales/en/internet.yml +140 -3
  318. data/lib/locales/en/jack_handey.yml +54 -0
  319. data/lib/locales/en/kamen_rider.yml +452 -0
  320. data/lib/locales/en/kpop.yml +7 -7
  321. data/lib/locales/en/league_of_legends.yml +285 -6
  322. data/lib/locales/en/lebowski.yml +1 -1
  323. data/lib/locales/en/lovecraft.yml +76 -6
  324. data/lib/locales/en/military.yml +179 -5
  325. data/lib/locales/en/minecraft.yml +663 -0
  326. data/lib/locales/en/mitch_hedberg.yml +46 -0
  327. data/lib/locales/en/mountain.yml +171 -0
  328. data/lib/locales/en/mountaineering.yml +14 -0
  329. data/lib/locales/en/movie.yml +194 -2
  330. data/lib/locales/en/music.yml +461 -29
  331. data/lib/locales/en/myst.yml +87 -31
  332. data/lib/locales/en/name.yml +6 -5
  333. data/lib/locales/en/naruto.yml +230 -0
  334. data/lib/locales/en/one_piece.yml +2 -2
  335. data/lib/locales/en/opera.yml +169 -1
  336. data/lib/locales/en/overwatch.yml +2648 -37
  337. data/lib/locales/en/pearl_jam.yml +213 -0
  338. data/lib/locales/en/phish.yml +392 -1
  339. data/lib/locales/en/phone_number.yml +1 -1
  340. data/lib/locales/en/pokemon.yml +417 -4
  341. data/lib/locales/en/prince.yml +227 -0
  342. data/lib/locales/en/quote.yml +692 -163
  343. data/lib/locales/en/rajnikanth.yml +77 -0
  344. data/lib/locales/en/rock_band.yml +1 -0
  345. data/lib/locales/en/room.yml +68 -0
  346. data/lib/locales/en/rush.yml +32 -0
  347. data/lib/locales/en/science.yml +481 -3
  348. data/lib/locales/en/shakespeare.yml +23 -26
  349. data/lib/locales/en/show.yml +597 -0
  350. data/lib/locales/en/simpsons.yml +668 -0
  351. data/lib/locales/en/smashing_pumpkins.yml +382 -0
  352. data/lib/locales/en/source.yml +35 -0
  353. data/lib/locales/en/south_park.yml +360 -2
  354. data/lib/locales/en/space.yml +1 -1
  355. data/lib/locales/en/spongebob.yml +489 -0
  356. data/lib/locales/en/sport.yml +130 -0
  357. data/lib/locales/en/star_trek.yml +1 -1
  358. data/lib/locales/en/star_wars.yml +568 -220
  359. data/lib/locales/en/stranger_thing.yml +1 -1
  360. data/lib/locales/en/street_fighter.yml +1524 -0
  361. data/lib/locales/en/stripe.yml +3 -3
  362. data/lib/locales/en/studio_ghibli.yml +107 -0
  363. data/lib/locales/en/suits.yml +45 -0
  364. data/lib/locales/en/super_mario.yml +58 -0
  365. data/lib/locales/en/super_smash_bros.yml +23 -5
  366. data/lib/locales/en/supernatural.yml +141 -0
  367. data/lib/locales/en/tarkov.yml +593 -0
  368. data/lib/locales/en/tea.yml +172 -0
  369. data/lib/locales/en/the_kingkiller_chronicle.yml +56 -0
  370. data/lib/locales/en/the_office.yml +86 -0
  371. data/lib/locales/en/tolkien.yml +2453 -0
  372. data/lib/locales/en/touhou.yml +839 -0
  373. data/lib/locales/en/train_station.yml +280 -0
  374. data/lib/locales/en/tron.yml +227 -0
  375. data/lib/locales/en/vehicle.yml +2809 -75
  376. data/lib/locales/en/volleyball.yml +501 -0
  377. data/lib/locales/en/warhammer_fantasy.yml +582 -0
  378. data/lib/locales/en/witcher.yml +426 -7
  379. data/lib/locales/en/world_of_warcraft.yml +122 -4
  380. data/lib/locales/en/zelda.yml +962 -4
  381. data/lib/locales/en-AU.yml +50 -10
  382. data/lib/locales/en-CA.yml +5 -1
  383. data/lib/locales/en-GB.yml +3 -2
  384. data/lib/locales/en-IND.yml +2 -1
  385. data/lib/locales/en-MS.yml +3 -1
  386. data/lib/locales/en-NEP.yml +5 -2
  387. data/lib/locales/en-NG.yml +1 -0
  388. data/lib/locales/en-NZ.yml +135 -8
  389. data/lib/locales/en-PAK.yml +3 -1
  390. data/lib/locales/en-SG.yml +3 -1
  391. data/lib/locales/en-TH.yml +360 -0
  392. data/lib/locales/en-UG.yml +1 -0
  393. data/lib/locales/en-US.yml +38 -12
  394. data/lib/locales/en-ZA.yml +2 -2
  395. data/lib/locales/en-au-ocker.yml +4 -1
  396. data/lib/locales/en.yml +0 -3
  397. data/lib/locales/es-AR.yml +4601 -0
  398. data/lib/locales/es-MX.yml +4 -1
  399. data/lib/locales/es.yml +58 -2
  400. data/lib/locales/fa.yml +2 -0
  401. data/lib/locales/fi-FI.yml +4 -2
  402. data/lib/locales/fr/address.yml +20 -0
  403. data/lib/locales/fr/adjective.yml +266 -0
  404. data/lib/locales/fr/ancient.yml +141 -0
  405. data/lib/locales/fr/animal.yml +5 -0
  406. data/lib/locales/fr/appliance.yml +4 -0
  407. data/lib/locales/fr/book.yml +7 -0
  408. data/lib/locales/fr/color.yml +4 -0
  409. data/lib/locales/fr/company.yml +17 -0
  410. data/lib/locales/fr/compass.yml +23 -0
  411. data/lib/locales/fr/demographic.yml +4 -0
  412. data/lib/locales/fr/gender.yml +6 -0
  413. data/lib/locales/fr/internet.yml +5 -0
  414. data/lib/locales/fr/lorem.yml +5 -0
  415. data/lib/locales/fr/measurement.yml +7 -0
  416. data/lib/locales/fr/name.yml +22 -0
  417. data/lib/locales/fr/phone_number.yml +7 -0
  418. data/lib/locales/fr/pokemon.yml +7 -0
  419. data/lib/locales/fr-CA.yml +28 -11
  420. data/lib/locales/fr-CH.yml +3 -3
  421. data/lib/locales/fr.yml +1 -112
  422. data/lib/locales/hy.yml +3 -7
  423. data/lib/locales/id.yml +5 -2
  424. data/lib/locales/it.yml +3 -1
  425. data/lib/locales/ja/README.md +13 -0
  426. data/lib/locales/ja/address.yml +120539 -0
  427. data/lib/locales/ja/adjective.yml +148 -0
  428. data/lib/locales/ja/ancient.yml +4 -0
  429. data/lib/locales/ja/animal.yml +5 -0
  430. data/lib/locales/ja/bank.yml +4 -0
  431. data/lib/locales/ja/book.yml +7 -0
  432. data/lib/locales/ja/cat.yml +5 -0
  433. data/lib/locales/ja/coffee.yml +4 -0
  434. data/lib/locales/ja/color.yml +4 -0
  435. data/lib/locales/ja/commerce.yml +11 -0
  436. data/lib/locales/ja/company.yml +8 -0
  437. data/lib/locales/ja/dog.yml +6 -0
  438. data/lib/locales/ja/emotion.yml +51 -0
  439. data/lib/locales/ja/food.yml +4 -0
  440. data/lib/locales/ja/gender.yml +4 -0
  441. data/lib/locales/ja/lorem.yml +9 -0
  442. data/lib/locales/ja/name.yml +13 -0
  443. data/lib/locales/ja/naruto.yml +230 -0
  444. data/lib/locales/ja/overwatch.yml +5 -0
  445. data/lib/locales/ja/phone_number.yml +7 -0
  446. data/lib/locales/ja/pokemon.yml +7 -0
  447. data/lib/locales/ja/relationship.yml +10 -0
  448. data/lib/locales/ja/restaurant.yml +11 -0
  449. data/lib/locales/ja/space.yml +5 -0
  450. data/lib/locales/ja/sport.yml +130 -0
  451. data/lib/locales/ja/studio_ghibli.yml +112 -0
  452. data/lib/locales/ja/subscription.yml +8 -0
  453. data/lib/locales/ja/super_mario.yml +9 -0
  454. data/lib/locales/ja/super_smash_bros.yml +8 -0
  455. data/lib/locales/ja/touhou.yml +466 -0
  456. data/lib/locales/ja/university.yml +9 -0
  457. data/lib/locales/ja/zelda.yml +5 -0
  458. data/lib/locales/ko.yml +95 -2
  459. data/lib/locales/lt.yml +34 -0
  460. data/lib/locales/lv.yml +1 -1
  461. data/lib/locales/mi-NZ.yml +283 -0
  462. data/lib/locales/nb-NO.yml +5 -2
  463. data/lib/locales/nl.yml +1 -0
  464. data/lib/locales/pl.yml +2 -2
  465. data/lib/locales/pt-BR.yml +33 -4
  466. data/lib/locales/pt.yml +6 -4
  467. data/lib/locales/ru.yml +43 -1
  468. data/lib/locales/sk.yml +5 -2
  469. data/lib/locales/sv.yml +1 -0
  470. data/lib/locales/th.yml +380 -0
  471. data/lib/locales/tr.yml +1 -0
  472. data/lib/locales/uk.yml +10 -5
  473. data/lib/locales/vi.yml +1 -0
  474. data/lib/locales/zh-CN/bank.yml +17 -0
  475. data/lib/locales/zh-CN.yml +2 -1
  476. data/lib/locales/zh-TW.yml +2 -1
  477. metadata +201 -109
  478. data/lib/faker/default/fillmurray.rb +0 -30
  479. data/lib/faker/default/lorem_pixel.rb +0 -63
  480. data/lib/locales/en/hobbit.yml +0 -19
  481. data/lib/locales/en/lord_of_the_rings.yml +0 -6
  482. data/lib/locales/ja.yml +0 -98
@@ -3,34 +3,64 @@
3
3
  module Faker
4
4
  class App < Base
5
5
  class << self
6
+ ##
7
+ # Produces an app name.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::App.name #=> "Treeflex"
13
+ #
14
+ # @faker.version 1.4.3
6
15
  def name
7
16
  fetch('app.name')
8
17
  end
9
18
 
19
+ ##
20
+ # Produces a version string.
21
+ #
22
+ # @return [String]
23
+ #
24
+ # @example
25
+ # Faker::App.version #=> "1.85"
26
+ #
27
+ # @faker.version 1.4.3
10
28
  def version
11
29
  parse('app.version')
12
30
  end
13
31
 
32
+ ##
33
+ # Produces the name of an app's author.
34
+ #
35
+ # @return [String]
36
+ #
37
+ # @example
38
+ # Faker::App.author #=> "Daphne Swift"
39
+ #
40
+ # @faker.version 1.4.3
14
41
  def author
15
42
  parse('app.author')
16
43
  end
17
44
 
18
- # rubocop:disable Metrics/ParameterLists
19
- def semantic_version(legacy_major = NOT_GIVEN, legacy_minor = NOT_GIVEN, legacy_patch = NOT_GIVEN, major: 0..9, minor: 0..9, patch: 1..9)
20
- # rubocop:enable Metrics/ParameterLists
21
- if legacy_major != NOT_GIVEN
22
- warn_with_uplevel 'Passing `major` with the 1st argument of `App.semantic_version` is deprecated. Use keyword argument like `App.semantic_version(major: ...)` instead.', uplevel: 1
23
- major = legacy_major
24
- end
25
- if legacy_minor != NOT_GIVEN
26
- warn_with_uplevel 'Passing `minor` with the 2nd argument of `App.semantic_version` is deprecated. Use keyword argument like `App.semantic_version(minor: ...)` instead.', uplevel: 1
27
- minor = legacy_minor
28
- end
29
- if legacy_patch != NOT_GIVEN
30
- warn_with_uplevel 'Passing `patch` with the 3rd argument of `App.semantic_version` is deprecated. Use keyword argument like `App.semantic_version(patch: ...)` instead.', uplevel: 1
31
- patch = legacy_patch
32
- end
33
-
45
+ ##
46
+ # Produces a String representing a semantic version identifier.
47
+ #
48
+ # @param major [Integer, Range] An integer to use or a range to pick the integer from.
49
+ # @param minor [Integer, Range] An integer to use or a range to pick the integer from.
50
+ # @param patch [Integer, Range] An integer to use or a range to pick the integer from.
51
+ # @return [String]
52
+ #
53
+ # @example
54
+ # Faker::App.semantic_version #=> "3.2.5"
55
+ # @example
56
+ # Faker::App.semantic_version(major: 42) #=> "42.5.2"
57
+ # @example
58
+ # Faker::App.semantic_version(minor: 100..101) #=> "42.100.4"
59
+ # @example
60
+ # Faker::App.semantic_version(patch: 5..6) #=> "7.2.6"
61
+ #
62
+ # @faker.version 1.4.3
63
+ def semantic_version(major: 0..9, minor: 0..9, patch: 1..9)
34
64
  [major, minor, patch].map { |chunk| sample(Array(chunk)) }.join('.')
35
65
  end
36
66
  end
@@ -3,10 +3,28 @@
3
3
  module Faker
4
4
  class Appliance < Base
5
5
  class << self
6
+ ##
7
+ # Produces the name of an appliance brand.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::Appliance.brand #=> "Bosch"
13
+ #
14
+ # @faker.version 1.9.0
6
15
  def brand
7
16
  fetch('appliance.brand')
8
17
  end
9
18
 
19
+ ##
20
+ # Produces the name of a type of appliance equipment.
21
+ #
22
+ # @return [String]
23
+ #
24
+ # @example
25
+ # Faker::Appliance.equipment #=> "Appliance plug"
26
+ #
27
+ # @faker.version 1.9.0
10
28
  def equipment
11
29
  fetch('appliance.equipment')
12
30
  end
@@ -3,6 +3,15 @@
3
3
  module Faker
4
4
  class Artist < Base
5
5
  class << self
6
+ ##
7
+ # Produces the name of an artist.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::Artist.name #=> "Michelangelo"
13
+ #
14
+ # @faker.version 1.8.8
6
15
  def name
7
16
  fetch('artist.names')
8
17
  end
@@ -3,32 +3,40 @@
3
3
  module Faker
4
4
  class Avatar < Base
5
5
  class << self
6
+ # @private
6
7
  SUPPORTED_FORMATS = %w[png jpg bmp].freeze
7
8
 
8
- # rubocop:disable Metrics/ParameterLists
9
- def image(legacy_slug = NOT_GIVEN, legacy_size = NOT_GIVEN, legacy_format = NOT_GIVEN, legacy_set = NOT_GIVEN, legacy_bgset = NOT_GIVEN, slug: nil, size: '300x300', format: 'png', set: 'set1', bgset: nil)
10
- # rubocop:enable Metrics/ParameterLists
11
- if legacy_slug != NOT_GIVEN
12
- warn_with_uplevel 'Passing `slug` with the 1st argument of `Avatar.image` is deprecated. Use keyword argument like `Avatar.image(slug: ...)` instead.', uplevel: 1
13
- slug = legacy_slug
14
- end
15
- if legacy_size != NOT_GIVEN
16
- warn_with_uplevel 'Passing `size` with the 2nd argument of `Avatar.image` is deprecated. Use keyword argument like `Avatar.image(size: ...)` instead.', uplevel: 1
17
- size = legacy_size
18
- end
19
- if legacy_format != NOT_GIVEN
20
- warn_with_uplevel 'Passing `format` with the 3rd argument of `Avatar.image` is deprecated. Use keyword argument like `Avatar.image(format: ...)` instead.', uplevel: 1
21
- format = legacy_format
22
- end
23
- if legacy_set != NOT_GIVEN
24
- warn_with_uplevel 'Passing `set` with the 4th argument of `Avatar.image` is deprecated. Use keyword argument like `Avatar.image(set: ...)` instead.', uplevel: 1
25
- set = legacy_set
26
- end
27
- if legacy_bgset != NOT_GIVEN
28
- warn_with_uplevel 'Passing `bgset` with the 5th argument of `Avatar.image` is deprecated. Use keyword argument like `Avatar.image(bgset: ...)` instead.', uplevel: 1
29
- bgset = legacy_bgset
30
- end
31
-
9
+ ##
10
+ # Produces a URL for an avatar from robohash.org
11
+ #
12
+ # @param slug [String, nil]
13
+ # @param size [String] image size in pixels, in the format of 'AxB'
14
+ # @param format [String] The image file format
15
+ # @param set [String] The avatar set to use
16
+ # @param bgset [String, nil] The background set to use
17
+ # @return [String] A robohash.org URL
18
+ #
19
+ # @example
20
+ # Faker::Avatar.image
21
+ # #=> "https://robohash.org/sitsequiquia.png?size=300x300&set=set1"
22
+ # @example
23
+ # Faker::Avatar.image(slug: "my-own-slug")
24
+ # #=> "https://robohash.org/my-own-slug.png?size=300x300&set=set1"
25
+ # @example
26
+ # Faker::Avatar.image(slug: "my-own-slug", size: "50x50")
27
+ # #=> "https://robohash.org/my-own-slug.png?size=50x50&set=set1"
28
+ # @example
29
+ # Faker::Avatar.image(slug: "my-own-slug", size: "50x50", format: "jpg")
30
+ # #=> "https://robohash.org/my-own-slug.jpg?size=50x50&set=set1"
31
+ # @example
32
+ # Faker::Avatar.image(slug: "my-own-slug", size: "50x50", format: "bmp")
33
+ # #=> "https://robohash.org/my-own-slug.bmp?size=50x50&set=set1"
34
+ # @example
35
+ # Faker::Avatar.image(slug: "my-own-slug", size: "50x50", format: "bmp", set: "set1", bgset: "bg1")
36
+ # #=> "https://robohash.org/my-own-slug.bmp?size=50x50&set=set1&bgset=bg1"
37
+ #
38
+ # @faker.version 1.4.3
39
+ def image(slug: nil, size: '300x300', format: 'png', set: 'set1', bgset: nil)
32
40
  raise ArgumentError, 'Size should be specified in format 300x300' unless size =~ /^[0-9]+x[0-9]+$/
33
41
  raise ArgumentError, "Supported formats are #{SUPPORTED_FORMATS.join(', ')}" unless SUPPORTED_FORMATS.include?(format)
34
42
 
@@ -5,27 +5,42 @@ module Faker
5
5
  flexible :bank
6
6
 
7
7
  class << self
8
- def account_number(legacy_digits = NOT_GIVEN, digits: 10)
9
- if legacy_digits != NOT_GIVEN
10
- warn_with_uplevel 'Passing `digits` with the 1st argument of `Bank.account_number` is deprecated. Use keyword argument like `Bank.account_number(digits: ...)` instead.', uplevel: 1
11
- digits = legacy_digits
12
- end
13
-
8
+ ##
9
+ # Produces a bank account number.
10
+ #
11
+ # @param digits [Integer] Number of digits that the generated account number should have.
12
+ # @return [String]
13
+ #
14
+ # @example
15
+ # Faker::Bank.account_number #=> 6738582379
16
+ # Faker::Bank.account_number(digits: 13) #=> 673858237902
17
+ #
18
+ # @faker.version 1.9.1
19
+ def account_number(digits: 10)
14
20
  output = ''
15
21
 
16
- output += rand.to_s[2..-1] while output.length < digits
22
+ output += rand.to_s[2..] while output.length < digits
17
23
 
18
24
  output[0...digits]
19
25
  end
20
26
 
21
- def iban(legacy_country_code = NOT_GIVEN, country_code: 'GB')
22
- # Each country has it's own format for bank accounts
27
+ ##
28
+ # Produces a bank iban number.
29
+ #
30
+ # @param country_code [String, nil] Specifies what country prefix is used to generate the iban code. Providing `nil` will use a random country.
31
+ # @return [String]
32
+ #
33
+ # @example
34
+ # Faker::Bank.iban #=> "GB76DZJM33188515981979"
35
+ # Faker::Bank.iban(country_code: "be") #=> "BE6375388567752043"
36
+ # Faker::Bank.iban(country_code: nil) #=> "DE45186738071857270067"
37
+ #
38
+ # @faker.version 1.7.0
39
+ def iban(country_code: 'GB')
40
+ # Each country has its own format for bank accounts
23
41
  # Many of them use letters in certain parts of the account
24
42
  # Using regex patterns we can create virtually any type of bank account
25
- if legacy_country_code != NOT_GIVEN
26
- warn_with_uplevel 'Passing `country_code` with the 1st argument of `Bank.iban` is deprecated. Use keyword argument like `Bank.iban(country_code: ...)` instead.', uplevel: 1
27
- country_code = legacy_country_code
28
- end
43
+ country_code ||= iban_country_code
29
44
 
30
45
  begin
31
46
  pattern = fetch("bank.iban_details.#{country_code.downcase}.bban_pattern")
@@ -40,66 +55,140 @@ module Faker
40
55
  country_code.upcase + iban_checksum(country_code, account) + account
41
56
  end
42
57
 
58
+ ##
59
+ # Produces the ISO 3166 code of a country that uses the IBAN system.
60
+ #
61
+ # @return [String]
62
+ #
63
+ # @example
64
+ # Faker::Bank.iban_country_code #=> "CH"
65
+ #
66
+ # @faker.version next
67
+ def iban_country_code
68
+ sample(translate('faker.bank.iban_details').keys).to_s.upcase
69
+ end
70
+
71
+ ##
72
+ # Produces a bank name.
73
+ #
74
+ # @return [String]
75
+ #
76
+ # @example
77
+ # Faker::Bank.name #=> "ABN AMRO CORPORATE FINANCE LIMITED"
78
+ #
79
+ # @faker.version 1.7.0
43
80
  def name
44
81
  fetch('bank.name')
45
82
  end
46
83
 
84
+ ##
85
+ # Produces a routing number.
86
+ #
87
+ # @return [String]
88
+ #
89
+ # @example
90
+ # Faker::Bank.routing_number #=> "729343831"
91
+ #
92
+ # @faker.version 1.9.1
47
93
  def routing_number
48
94
  valid_routing_number
49
95
  end
50
96
 
97
+ ##
98
+ # Produces a valid routing number.
99
+ #
100
+ # @return [String]
101
+ #
102
+ # @example
103
+ # Faker::Bank.routing_number #=> "729343831"
104
+ #
105
+ # @faker.version 1.9.1
51
106
  def routing_number_with_format
52
107
  compile_fraction(valid_routing_number)
53
108
  end
54
109
 
110
+ ##
111
+ # Produces a swift / bic number.
112
+ #
113
+ # @return [String]
114
+ #
115
+ # @example
116
+ # Faker::Bank.swift_bic #=> "AAFMGB21"
117
+ #
118
+ # @faker.version 1.7.0
55
119
  def swift_bic
56
120
  fetch('bank.swift_bic')
57
121
  end
58
122
 
123
+ ##
124
+ # Produces an Australian BSB (Bank-State-Branch) number
125
+ #
126
+ # @return [String]
127
+ #
128
+ # @example
129
+ # Faker::Bank.bsb_number
130
+ # #=> "036616"
131
+ #
132
+ # @faker.version 2.13.0
133
+ def bsb_number
134
+ compile_bsb_number
135
+ end
136
+
59
137
  private
60
138
 
61
139
  def checksum(num_string)
62
- num_array = num_string.split('').map(&:to_i)
63
- digit = (7 * (num_array[0] + num_array[3] + num_array[6]) + 3 * (num_array[1] + num_array[4] + num_array[7]) + 9 * (num_array[2] + num_array[5])) % 10
64
- digit == num_array[8]
140
+ num_array = num_string.chars.map(&:to_i)
141
+ (
142
+ 7 * (num_array[0] + num_array[3] + num_array[6]) +
143
+ 3 * (num_array[1] + num_array[4] + num_array[7]) +
144
+ 9 * (num_array[2] + num_array[5])
145
+ ) % 10
65
146
  end
66
147
 
67
148
  def compile_routing_number
68
149
  digit_one_two = %w[00 01 02 03 04 05 06 07 08 09 10 11 12]
69
150
  ((21..32).to_a + (61..72).to_a + [80]).each { |x| digit_one_two << x.to_s }
70
- routing_num = digit_one_two.sample + rand_numstring + rand_numstring + rand_numstring + rand_numstring + rand_numstring + rand_numstring + rand_numstring
71
- routing_num
151
+ digit_one_two.sample + rand_numstring + rand_numstring + rand_numstring + rand_numstring + rand_numstring + rand_numstring + rand_numstring
152
+ end
153
+
154
+ def compile_bsb_number
155
+ digit_one_two = %w[01 03 06 08 11 12 73 76 78 30]
156
+ state = (2..7).to_a.map(&:to_s).sample
157
+ digit_one_two.sample + state + rand_numstring + rand_numstring + rand_numstring
72
158
  end
73
159
 
74
160
  # Calculates the mandatory checksum in 3rd and 4th characters in IBAN format
75
- # source: https://en.wikipedia.org/wiki/International_Bank_Account_Number#Validating_the_IBAN
161
+ # source: https://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
76
162
  def iban_checksum(country_code, account)
77
163
  # Converts letters to numbers according the iban rules, A=10..Z=35
78
164
  account_to_number = "#{account}#{country_code}00".upcase.chars.map do |d|
79
165
  d =~ /[A-Z]/ ? (d.ord - 55).to_s : d
80
166
  end.join.to_i
81
167
 
82
- # This is answer to (iban_to_num + checksum) % 97 == 1
83
- checksum = (1 - account_to_number) % 97
168
+ # This is the correct answer to (iban_to_num + checksum) % 97 == 1
169
+ checksum = 98 - (account_to_number % 97)
84
170
 
85
171
  # Use leftpad to make the size always to 2
86
172
  checksum.to_s.rjust(2, '0')
87
173
  end
88
174
 
89
175
  def valid_routing_number
90
- for _ in 0..50
91
- micr = compile_routing_number
176
+ routing_number = compile_routing_number
177
+ checksum = checksum(routing_number)
178
+ return routing_number if valid_checksum?(routing_number, checksum)
92
179
 
93
- break if checksum(micr)
94
- end
95
- micr
180
+ routing_number[0..7] + checksum.to_s
181
+ end
182
+
183
+ def valid_checksum?(routing_number, checksum)
184
+ routing_number[8].to_i == checksum
96
185
  end
97
186
 
98
187
  def compile_fraction(routing_num)
99
188
  prefix = (1..50).to_a.map(&:to_s).sample
100
- numerator = routing_num.split('')[5..8].join.to_i.to_s
101
- denominator = routing_num.split('')[0..4].join.to_i.to_s
102
- prefix + '-' + numerator + '/' + denominator
189
+ numerator = routing_num.chars[5..8].join.to_i.to_s
190
+ denominator = routing_num.chars[0..4].join.to_i.to_s
191
+ "#{prefix}-#{numerator}/#{denominator}"
103
192
  end
104
193
 
105
194
  def rand_numstring
@@ -0,0 +1,165 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Barcode < Base
5
+ class << self
6
+ ##
7
+ # Returns a EAN 8 or 13 digit format barcode number with check digit
8
+ # @return [String]
9
+ #
10
+ # @example
11
+ # Faker::Barcode.ean => "85657526"
12
+ # Faker::Barcode.ean(8) => "30152700"
13
+ # Faker::Barcode.ean(13) => "2115190480285"
14
+ #
15
+ # @faker.version 2.14.0
16
+ def ean(length = 8)
17
+ generate_barcode("barcode.ean_#{Integer(length)}")
18
+ end
19
+
20
+ ##
21
+ # Returns a EAN 8 or 13 digit format barcode number with composite string attached with check digit
22
+ # @return [String]
23
+ #
24
+ # @example
25
+ # Faker::Barcode.ean_with_composite_sumbology => "41007624|JHOC6649"
26
+ # Faker::Barcode.ean_with_composite_sumbology(8) => "38357961|XUYJ3266"
27
+ # Faker::Barcode.ean_with_composite_sumbology(13) => "9530722443911|CKHWQHID"
28
+ #
29
+ # @faker.version 2.14.0
30
+ def ean_with_composite_symbology(length = 8)
31
+ "#{ean(length)}|#{bothify(parse('barcode.composite_symbol'))}"
32
+ end
33
+
34
+ ##
35
+ # Returns a UPC_A format barcode number with check digit
36
+ # @return [String]
37
+ #
38
+ # @example
39
+ # Faker::Barcode.upc_a => "766807541831"
40
+ #
41
+ # @faker.version 2.14.0
42
+ def upc_a
43
+ generate_barcode('barcode.upc_a')
44
+ end
45
+
46
+ ##
47
+ # Returns a UPC_E format barcode number with check digit
48
+ # @return [String]
49
+ #
50
+ # @example
51
+ # Faker::Barcode.upc_e => "03746820"
52
+ #
53
+ # @faker.version 2.14.0
54
+ def upc_e
55
+ generate_barcode('barcode.upc_e')
56
+ end
57
+
58
+ ##
59
+ # Returns a UPC_A format barcode number with composite string attached with check digit
60
+ # @return [String]
61
+ #
62
+ # @example
63
+ # Faker::Barcode.upc_a_with_composite_symbology => "790670155765|JOVG6208"
64
+ #
65
+ # @faker.version 2.14.0
66
+ def upc_a_with_composite_symbology
67
+ "#{upc_a}|#{bothify(parse('barcode.composite_symbol'))}"
68
+ end
69
+
70
+ ##
71
+ # Returns a UPC_E format barcode number with composite string attached with check digit
72
+ # @return [String]
73
+ #
74
+ # @example
75
+ # Faker::Barcode.upc_e_with_composite_symbology => "05149247|BKZX9722"
76
+ #
77
+ # @faker.version 2.14.0
78
+ def upc_e_with_composite_symbology
79
+ "#{upc_e}|#{bothify(parse('barcode.composite_symbol'))}"
80
+ end
81
+
82
+ ##
83
+ # Returns a ISBN format barcode number with check digit
84
+ # @return [String]
85
+ #
86
+ # @example
87
+ # Faker::Barcode.isbn => "9798363807732"
88
+ #
89
+ # @faker.version 2.14.0
90
+ def isbn
91
+ generate_barcode('barcode.isbn')
92
+ end
93
+
94
+ ##
95
+ # Returns a ISMN format barcode number with check digit
96
+ # @return [String]
97
+ #
98
+ # @example
99
+ # Faker::Barcode.ismn => "9790527672897"
100
+ #
101
+ # @faker.version 2.14.0
102
+ def ismn
103
+ generate_barcode('barcode.ismn')
104
+ end
105
+
106
+ ##
107
+ # Returns a ISSN format barcode number with check digit
108
+ # @return [String]
109
+ #
110
+ # @example
111
+ # Faker::Barcode.issn => "9775541703338"
112
+ #
113
+ # @faker.version 2.14.0
114
+ def issn
115
+ generate_barcode('barcode.issn')
116
+ end
117
+
118
+ private
119
+
120
+ def generate_barcode(key)
121
+ barcode = parse(key)
122
+ check_digit = generate_check_digit(*sum_even_odd(barcode))
123
+ "#{barcode}#{check_digit}"
124
+ end
125
+
126
+ ##
127
+ # Returns the sum of even and odd numbers from value passed
128
+ #
129
+ # @return [Array]
130
+ #
131
+ # @example
132
+ # Faker::Barcode.send(:sum_even_odd, 12345) => [9, 5]
133
+ # Faker::Barcode.send(:sum_even_odd, 87465) => [17, 13]
134
+ #
135
+ # @faker.version 2.14.0
136
+ def sum_even_odd(fake_num)
137
+ number = fake_num.to_i
138
+ sum_even, sum_odd = 0, 0, index = 1
139
+
140
+ while number != 0
141
+ index.even? ? sum_even += number % 10 : sum_odd += number % 10
142
+
143
+ number /= 10
144
+ index += 1
145
+ end
146
+
147
+ [sum_odd, sum_even]
148
+ end
149
+
150
+ ##
151
+ # Generates the check digits from sum passed
152
+ #
153
+ # @return [Integer]
154
+ #
155
+ # @example
156
+ # Faker::Barcode.send(:generate_check_digit, 12, 4) => 0
157
+ # Faker::Barcode.send(:generate_check_digit, 23, 5) => 6
158
+ #
159
+ # @faker.version 2.14.0
160
+ def generate_check_digit(odd_sum, even_sum)
161
+ (10 - (odd_sum * 3 + even_sum) % 10) % 10
162
+ end
163
+ end
164
+ end
165
+ end
@@ -5,36 +5,108 @@ module Faker
5
5
  flexible :beer
6
6
 
7
7
  class << self
8
+ ##
9
+ # Produces a random beer name.
10
+ #
11
+ # @return [String]
12
+ #
13
+ # @example
14
+ # Faker::Beer.name #=> "Pliny The Elder"
15
+ #
16
+ # @faker.version 1.6.2
8
17
  def name
9
18
  fetch('beer.name')
10
19
  end
11
20
 
21
+ ##
22
+ # Produces a random beer style.
23
+ #
24
+ # @return [String]
25
+ #
26
+ # @example
27
+ # Faker::Beer.style #=> "Wood-aged Beer"
28
+ #
29
+ # @faker.version 1.6.2
12
30
  def style
13
31
  fetch('beer.style')
14
32
  end
15
33
 
34
+ ##
35
+ # Produces a random beer hops.
36
+ #
37
+ # @return [String]
38
+ #
39
+ # @example
40
+ # Faker::Beer.hop #=> "Sterling"
41
+ #
42
+ # @faker.version 1.6.2
16
43
  def hop
17
44
  fetch('beer.hop')
18
45
  end
19
46
 
47
+ ##
48
+ # Produces a random beer yeast.
49
+ #
50
+ # @return [String]
51
+ #
52
+ # @example
53
+ # Faker::Beer.yeast #=> "5335 - Lactobacillus"
54
+ #
55
+ # @faker.version 1.6.2
20
56
  def yeast
21
57
  fetch('beer.yeast')
22
58
  end
23
59
 
60
+ ##
61
+ # Produces a random beer malt.
62
+ #
63
+ # @return [String]
64
+ #
65
+ # @example
66
+ # Faker::Beer.malts #=> "Munich"
67
+ #
68
+ # @faker.version 1.6.2
24
69
  def malts
25
70
  fetch('beer.malt')
26
71
  end
27
72
 
73
+ ##
74
+ # Produces a random beer IBU.
75
+ #
76
+ # @return [String]
77
+ #
78
+ # @example
79
+ # Faker::Beer.ibu #=> "87 IBU"
80
+ #
81
+ # @faker.version 1.6.2
28
82
  def ibu
29
- rand(10..100).to_s + ' IBU'
83
+ "#{rand(10..100)} IBU"
30
84
  end
31
85
 
86
+ ##
87
+ # Produces a random beer alcohol percentage.
88
+ #
89
+ # @return [String]
90
+ #
91
+ # @example
92
+ # Faker::Beer.alcohol #=> "5.4%"
93
+ #
94
+ # @faker.version 1.6.2
32
95
  def alcohol
33
- rand(2.0..10.0).round(1).to_s + '%'
96
+ "#{rand(2.0..10.0).round(1)}%"
34
97
  end
35
98
 
99
+ ##
100
+ # Produces a random beer blg level.
101
+ #
102
+ # @return [String]
103
+ #
104
+ # @example
105
+ # Faker::Beer.blg #=> "5.1Blg"
106
+ #
107
+ # @faker.version 1.6.2
36
108
  def blg
37
- rand(5.0..20.0).round(1).to_s + '°Blg'
109
+ "#{rand(5.0..20.0).round(1)}°Blg"
38
110
  end
39
111
  end
40
112
  end