faker 2.13.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1277 -24
  3. data/README.md +138 -320
  4. data/lib/faker/blockchain/aeternity.rb +5 -5
  5. data/lib/faker/blockchain/bitcoin.rb +1 -2
  6. data/lib/faker/blockchain/ethereum.rb +1 -1
  7. data/lib/faker/blockchain/tezos.rb +30 -3
  8. data/lib/faker/blockchain.rb +9 -0
  9. data/lib/faker/books/dune.rb +17 -12
  10. data/lib/faker/books/lovecraft.rb +16 -44
  11. data/lib/faker/books/the_kingkiller_chronicle.rb +61 -0
  12. data/lib/faker/books.rb +9 -0
  13. data/lib/faker/creature/bird.rb +203 -0
  14. data/lib/faker/creature.rb +9 -0
  15. data/lib/faker/default/address.rb +11 -31
  16. data/lib/faker/default/adjective.rb +35 -0
  17. data/lib/faker/default/alphanumeric.rb +3 -9
  18. data/lib/faker/default/app.rb +1 -10
  19. data/lib/faker/default/avatar.rb +2 -13
  20. data/lib/faker/default/bank.rb +28 -26
  21. data/lib/faker/default/barcode.rb +165 -0
  22. data/lib/faker/default/beer.rb +3 -3
  23. data/lib/faker/default/boolean.rb +2 -4
  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 +28 -27
  27. data/lib/faker/default/chuck_norris.rb +1 -0
  28. data/lib/faker/default/code.rb +166 -52
  29. data/lib/faker/default/color.rb +77 -6
  30. data/lib/faker/default/commerce.rb +32 -18
  31. data/lib/faker/default/company.rb +175 -30
  32. data/lib/faker/default/crypto.rb +25 -5
  33. data/lib/faker/default/crypto_coin.rb +3 -15
  34. data/lib/faker/default/date.rb +65 -42
  35. data/lib/faker/default/demographic.rb +1 -5
  36. data/lib/faker/default/driving_licence.rb +45 -20
  37. data/lib/faker/default/drone.rb +332 -0
  38. data/lib/faker/default/educator.rb +13 -0
  39. data/lib/faker/default/emotion.rb +33 -0
  40. data/lib/faker/default/file.rb +5 -22
  41. data/lib/faker/default/finance.rb +51 -7
  42. data/lib/faker/default/food.rb +28 -2
  43. data/lib/faker/default/hipster.rb +15 -52
  44. data/lib/faker/default/hobby.rb +22 -0
  45. data/lib/faker/default/html.rb +230 -0
  46. data/lib/faker/default/id_number.rb +176 -31
  47. data/lib/faker/default/invoice.rb +8 -21
  48. data/lib/faker/default/json.rb +15 -27
  49. data/lib/faker/default/lorem.rb +179 -77
  50. data/lib/faker/default/lorem_flickr.rb +5 -38
  51. data/lib/faker/default/markdown.rb +14 -17
  52. data/lib/faker/default/marketing.rb +1 -1
  53. data/lib/faker/default/measurement.rb +19 -50
  54. data/lib/faker/default/military.rb +26 -0
  55. data/lib/faker/default/mountain.rb +33 -0
  56. data/lib/faker/default/name.rb +1 -5
  57. data/lib/faker/default/nation.rb +0 -3
  58. data/lib/faker/default/{nhs.rb → national_health_service.rb} +10 -10
  59. data/lib/faker/default/number.rb +34 -62
  60. data/lib/faker/default/omniauth.rb +102 -97
  61. data/lib/faker/default/phone_number.rb +36 -21
  62. data/lib/faker/default/placeholdit.rb +12 -22
  63. data/lib/faker/{quotes → default}/quote.rb +39 -0
  64. data/lib/faker/default/relationship.rb +2 -6
  65. data/lib/faker/default/science.rb +108 -0
  66. data/lib/faker/default/source.rb +3 -16
  67. data/lib/faker/default/south_africa.rb +3 -3
  68. data/lib/faker/default/space.rb +1 -1
  69. data/lib/faker/default/sport.rb +116 -0
  70. data/lib/faker/default/string.rb +2 -8
  71. data/lib/faker/default/stripe.rb +7 -23
  72. data/lib/faker/default/tea.rb +41 -0
  73. data/lib/faker/{music/show.rb → default/theater.rb} +8 -8
  74. data/lib/faker/default/time.rb +4 -34
  75. data/lib/faker/default/types.rb +14 -36
  76. data/lib/faker/default/vehicle.rb +45 -55
  77. data/lib/faker/default/vulnerability_identifier.rb +23 -0
  78. data/lib/faker/default/world_cup.rb +2 -11
  79. data/lib/faker/default/x.rb +189 -0
  80. data/lib/faker/default.rb +9 -0
  81. data/lib/faker/fantasy/tolkien.rb +67 -0
  82. data/lib/faker/fantasy.rb +9 -0
  83. data/lib/faker/games/clash_of_clans.rb +48 -0
  84. data/lib/faker/games/control.rb +1 -1
  85. data/lib/faker/games/dnd.rb +131 -14
  86. data/lib/faker/games/dota.rb +14 -5
  87. data/lib/faker/games/elder_scrolls.rb +26 -0
  88. data/lib/faker/games/final_fantasy_xiv.rb +73 -0
  89. data/lib/faker/games/heroes.rb +13 -0
  90. data/lib/faker/games/heroes_of_the_storm.rb +0 -11
  91. data/lib/faker/games/minecraft.rb +66 -1
  92. data/lib/faker/games/myst.rb +1 -1
  93. data/lib/faker/games/street_fighter.rb +61 -0
  94. data/lib/faker/games/super_mario.rb +48 -0
  95. data/lib/faker/games/tarkov.rb +205 -0
  96. data/lib/faker/games/touhou.rb +75 -0
  97. data/lib/faker/games/witcher.rb +39 -0
  98. data/lib/faker/games/world_of_warcraft.rb +26 -1
  99. data/lib/faker/games.rb +9 -0
  100. data/lib/faker/internet.rb +582 -0
  101. data/lib/faker/japanese_media/conan.rb +48 -0
  102. data/lib/faker/japanese_media/cowboy_bebop.rb +61 -0
  103. data/lib/faker/japanese_media/doraemon.rb +48 -0
  104. data/lib/faker/japanese_media/dragon_ball.rb +26 -0
  105. data/lib/faker/japanese_media/fullmetal_alchemist_brotherhood.rb +48 -0
  106. data/lib/faker/japanese_media/kamen_rider.rb +102 -0
  107. data/lib/faker/japanese_media/naruto.rb +61 -0
  108. data/lib/faker/japanese_media/one_piece.rb +1 -1
  109. data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
  110. data/lib/faker/japanese_media.rb +9 -0
  111. data/lib/faker/locations/australia.rb +49 -0
  112. data/lib/faker/locations.rb +9 -0
  113. data/lib/faker/movies/avatar.rb +49 -0
  114. data/lib/faker/movies/hackers.rb +48 -0
  115. data/lib/faker/movies/hobbit.rb +4 -4
  116. data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
  117. data/lib/faker/movies/lord_of_the_rings.rb +3 -3
  118. data/lib/faker/movies/star_wars.rb +75 -7
  119. data/lib/faker/movies/the_room.rb +63 -0
  120. data/lib/faker/movies/tron.rb +161 -0
  121. data/lib/faker/movies.rb +9 -0
  122. data/lib/faker/music/bossa_nova.rb +35 -0
  123. data/lib/faker/music/grateful_dead.rb +0 -2
  124. data/lib/faker/music/hiphop.rb +48 -0
  125. data/lib/faker/music/opera.rb +237 -1
  126. data/lib/faker/music/pearl_jam.rb +0 -2
  127. data/lib/faker/music/rock_band.rb +12 -0
  128. data/lib/faker/music/rush.rb +0 -2
  129. data/lib/faker/music/smashing_pumpkins.rb +62 -0
  130. data/lib/faker/{music/music.rb → music.rb} +16 -0
  131. data/lib/faker/quotes/rajnikanth.rb +1 -0
  132. data/lib/faker/quotes/shakespeare.rb +34 -0
  133. data/lib/faker/quotes.rb +9 -0
  134. data/lib/faker/religion/bible.rb +50 -0
  135. data/lib/faker/religion.rb +9 -0
  136. data/lib/faker/sports/chess.rb +90 -0
  137. data/lib/faker/sports/mountaineering.rb +22 -0
  138. data/lib/faker/sports/volleyball.rb +74 -0
  139. data/lib/faker/sports.rb +9 -0
  140. data/lib/faker/travel/airport.rb +43 -0
  141. data/lib/faker/travel/train_station.rb +54 -0
  142. data/lib/faker/travel.rb +9 -0
  143. data/lib/faker/tv_shows/archer.rb +51 -0
  144. data/lib/faker/tv_shows/big_bang_theory.rb +1 -1
  145. data/lib/faker/tv_shows/brooklyn_nine_nine.rb +38 -0
  146. data/lib/faker/tv_shows/buffy.rb +5 -5
  147. data/lib/faker/tv_shows/dr_who.rb +0 -13
  148. data/lib/faker/tv_shows/final_space.rb +51 -0
  149. data/lib/faker/tv_shows/michael_scott.rb +0 -3
  150. data/lib/faker/tv_shows/south_park.rb +15 -0
  151. data/lib/faker/tv_shows/spongebob.rb +50 -0
  152. data/lib/faker/tv_shows/suits.rb +1 -1
  153. data/lib/faker/tv_shows/supernatural.rb +48 -0
  154. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +5 -5
  155. data/lib/faker/tv_shows/the_office.rb +37 -0
  156. data/lib/faker/tv_shows.rb +9 -0
  157. data/lib/faker/version.rb +2 -2
  158. data/lib/faker.rb +96 -79
  159. data/lib/helpers/base58.rb +1 -1
  160. data/lib/helpers/deprecator.rb +118 -0
  161. data/lib/helpers/positional_generator.rb +478 -0
  162. data/lib/helpers/unique_generator.rb +14 -14
  163. data/lib/locales/README.md +18 -2
  164. data/lib/locales/ar.yml +1608 -46
  165. data/lib/locales/bg.yml +935 -19
  166. data/lib/locales/ca-CAT.yml +347 -12
  167. data/lib/locales/ca.yml +580 -7
  168. data/lib/locales/da-DK.yml +529 -35
  169. data/lib/locales/de-AT.yml +3487 -25
  170. data/lib/locales/de-CH.yml +4359 -10
  171. data/lib/locales/de.yml +7185 -97
  172. data/lib/locales/ee.yml +1185 -27
  173. data/lib/locales/en/address.yml +1826 -562
  174. data/lib/locales/en/adjective.yml +179 -0
  175. data/lib/locales/en/airport.yml +381 -0
  176. data/lib/locales/en/ancient.yml +128 -4
  177. data/lib/locales/en/animal.yml +141 -2
  178. data/lib/locales/en/app.yml +89 -2
  179. data/lib/locales/en/appliance.yml +81 -2
  180. data/lib/locales/en/aqua_teen_hunger_force.yml +31 -31
  181. data/lib/locales/en/archer.yml +75 -0
  182. data/lib/locales/en/artist.yml +43 -1
  183. data/lib/locales/en/australia.yml +108 -0
  184. data/lib/locales/en/avatar.yml +57 -0
  185. data/lib/locales/en/back_to_the_future.yml +145 -117
  186. data/lib/locales/en/bank.yml +92 -3
  187. data/lib/locales/en/barcode.yml +24 -0
  188. data/lib/locales/en/beer.yml +232 -6
  189. data/lib/locales/en/bible.yml +87 -0
  190. data/lib/locales/en/big_bang_theory.yml +34 -35
  191. data/lib/locales/en/bird.yml +1280 -0
  192. data/lib/locales/en/bojack_horseman.yml +63 -3
  193. data/lib/locales/en/book.yml +486 -3
  194. data/lib/locales/en/bossa_nova.yml +110 -3
  195. data/lib/locales/en/breaking_bad.yml +110 -25
  196. data/lib/locales/en/brooklyn_nine_nine.yml +34 -0
  197. data/lib/locales/en/buffy.yml +239 -257
  198. data/lib/locales/en/business.yml +18 -2
  199. data/lib/locales/en/camera.yml +611 -0
  200. data/lib/locales/en/cannabis.yml +344 -10
  201. data/lib/locales/en/cat.yml +155 -3
  202. data/lib/locales/en/chess.yml +102 -0
  203. data/lib/locales/en/chiquito.yml +60 -61
  204. data/lib/locales/en/chuck_norris.yml +78 -79
  205. data/lib/locales/en/clash_of_clan.yml +99 -0
  206. data/lib/locales/en/code.yml +501 -1
  207. data/lib/locales/en/coffee.yml +450 -25
  208. data/lib/locales/en/color.yml +73 -1
  209. data/lib/locales/en/commerce.yml +117 -6
  210. data/lib/locales/en/community.yml +55 -30
  211. data/lib/locales/en/company.yml +1756 -13
  212. data/lib/locales/en/compass.yml +108 -12
  213. data/lib/locales/en/computer.yml +23 -4
  214. data/lib/locales/en/conan.yml +169 -0
  215. data/lib/locales/en/construction.yml +416 -422
  216. data/lib/locales/en/cosmere.yml +219 -54
  217. data/lib/locales/en/cowboy_bebop.yml +160 -0
  218. data/lib/locales/en/culture_series.yml +298 -298
  219. data/lib/locales/en/currency.yml +358 -3
  220. data/lib/locales/en/dc_comics.yml +178 -49
  221. data/lib/locales/en/demographic.yml +218 -5
  222. data/lib/locales/en/departed.yml +40 -44
  223. data/lib/locales/en/dessert.yml +78 -3
  224. data/lib/locales/en/device.yml +112 -4
  225. data/lib/locales/en/dnd.yml +615 -33
  226. data/lib/locales/en/dog.yml +262 -7
  227. data/lib/locales/en/doraemon.yml +284 -0
  228. data/lib/locales/en/dota.yml +704 -63
  229. data/lib/locales/en/dr_who.yml +468 -93
  230. data/lib/locales/en/dragon_ball.yml +243 -1
  231. data/lib/locales/en/driving_license.yml +181 -0
  232. data/lib/locales/en/drone.yml +95 -0
  233. data/lib/locales/en/dumb_and_dumber.yml +72 -56
  234. data/lib/locales/en/dune.yml +270 -131
  235. data/lib/locales/en/educator.yml +6 -0
  236. data/lib/locales/en/elder_scrolls.yml +582 -9
  237. data/lib/locales/en/electrical_components.yml +49 -3
  238. data/lib/locales/en/emotion.yml +480 -0
  239. data/lib/locales/en/esport.yml +58 -5
  240. data/lib/locales/en/fallout.yml +311 -133
  241. data/lib/locales/en/family_guy.yml +54 -4
  242. data/lib/locales/en/file.yml +109 -2
  243. data/lib/locales/en/final_fantasy_xiv.yml +754 -0
  244. data/lib/locales/en/final_space.yml +35 -0
  245. data/lib/locales/en/finance.yml +80 -4
  246. data/lib/locales/en/food.yml +1067 -10
  247. data/lib/locales/en/football.yml +121 -5
  248. data/lib/locales/en/fresh_prince_of_bel_air.yml +119 -70
  249. data/lib/locales/en/friends.yml +162 -3
  250. data/lib/locales/en/fullmetal_alchemist_brotherhood.yml +78 -0
  251. data/lib/locales/en/funny_name.yml +752 -1
  252. data/lib/locales/en/futurama.yml +7 -15
  253. data/lib/locales/en/game.yml +11 -0
  254. data/lib/locales/en/game_of_thrones.yml +2487 -5
  255. data/lib/locales/en/gender.yml +15 -3
  256. data/lib/locales/en/ghostbusters.yml +101 -88
  257. data/lib/locales/en/grateful_dead.yml +47 -45
  258. data/lib/locales/en/greek_philosophers.yml +44 -23
  259. data/lib/locales/en/hacker.yml +110 -5
  260. data/lib/locales/en/hackers.yml +53 -0
  261. data/lib/locales/en/half_life.yml +84 -3
  262. data/lib/locales/en/harry_potter.yml +323 -6
  263. data/lib/locales/en/heroes.yml +408 -3
  264. data/lib/locales/en/heroes_of_the_storm.yml +131 -4
  265. data/lib/locales/en/hey_arnold.yml +104 -21
  266. data/lib/locales/en/hipster.yml +203 -1
  267. data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +243 -42
  268. data/lib/locales/en/hobby.yml +170 -0
  269. data/lib/locales/en/horse.yml +446 -2
  270. data/lib/locales/en/house.yml +34 -2
  271. data/lib/locales/en/how_i_met_your_mother.yml +97 -25
  272. data/lib/locales/en/how_to_train_your_dragon.yml +173 -0
  273. data/lib/locales/en/id_number.yml +7 -2
  274. data/lib/locales/en/industry_segments.yml +188 -4
  275. data/lib/locales/en/internet.yml +136 -3
  276. data/lib/locales/en/jack_handey.yml +54 -0
  277. data/lib/locales/en/job.yml +98 -7
  278. data/lib/locales/en/kamen_rider.yml +718 -0
  279. data/lib/locales/en/kpop.yml +954 -80
  280. data/lib/locales/en/league_of_legends.yml +285 -6
  281. data/lib/locales/en/lebowski.yml +58 -40
  282. data/lib/locales/en/lorem.yml +1095 -6
  283. data/lib/locales/en/lovecraft.yml +76 -6
  284. data/lib/locales/en/markdown.yml +12 -2
  285. data/lib/locales/en/marketing.yml +54 -1
  286. data/lib/locales/en/measurement.yml +42 -8
  287. data/lib/locales/en/michael_scott.yml +41 -42
  288. data/lib/locales/en/military.yml +179 -5
  289. data/lib/locales/en/minecraft.yml +273 -0
  290. data/lib/locales/en/mitch_hedberg.yml +46 -0
  291. data/lib/locales/en/mountain.yml +171 -0
  292. data/lib/locales/en/mountaineering.yml +14 -0
  293. data/lib/locales/en/movie.yml +188 -175
  294. data/lib/locales/en/music.yml +461 -29
  295. data/lib/locales/en/myst.yml +87 -31
  296. data/lib/locales/en/name.yml +6068 -6
  297. data/lib/locales/en/naruto.yml +230 -0
  298. data/lib/locales/en/nato_phonetic_alphabet.yml +27 -1
  299. data/lib/locales/en/new_girl.yml +35 -37
  300. data/lib/locales/en/one_piece.yml +359 -6
  301. data/lib/locales/en/opera.yml +169 -1
  302. data/lib/locales/en/overwatch.yml +2648 -2622
  303. data/lib/locales/en/parks_and_rec.yml +33 -4
  304. data/lib/locales/en/pearl_jam.yml +207 -207
  305. data/lib/locales/en/phish.yml +388 -389
  306. data/lib/locales/en/phone_number.yml +78 -3
  307. data/lib/locales/en/pokemon.yml +417 -4
  308. data/lib/locales/en/prince.yml +219 -219
  309. data/lib/locales/en/princess_bride.yml +48 -2
  310. data/lib/locales/en/programming_language.yml +753 -3
  311. data/lib/locales/en/quote.yml +606 -163
  312. data/lib/locales/en/rajnikanth.yml +74 -74
  313. data/lib/locales/en/relationship.yml +29 -6
  314. data/lib/locales/en/restaurant.yml +31 -31
  315. data/lib/locales/en/rick_and_morty.yml +116 -3
  316. data/lib/locales/en/rock_band.yml +228 -1
  317. data/lib/locales/en/rupaul.yml +120 -122
  318. data/lib/locales/en/science.yml +481 -3
  319. data/lib/locales/en/seinfeld.yml +110 -3
  320. data/lib/locales/en/shakespeare.yml +46 -53
  321. data/lib/locales/en/silicon_valley.yml +122 -50
  322. data/lib/locales/en/simpsons.yml +897 -691
  323. data/lib/locales/en/slack_emoji.yml +874 -8
  324. data/lib/locales/en/smashing_pumpkins.yml +382 -0
  325. data/lib/locales/en/source.yml +35 -0
  326. data/lib/locales/en/south_park.yml +360 -2
  327. data/lib/locales/en/space.yml +373 -14
  328. data/lib/locales/en/spongebob.yml +489 -0
  329. data/lib/locales/en/sport.yml +130 -0
  330. data/lib/locales/en/star_trek.yml +105 -4
  331. data/lib/locales/en/star_wars.yml +525 -528
  332. data/lib/locales/en/stargate.yml +65 -18
  333. data/lib/locales/en/stranger_thing.yml +31 -33
  334. data/lib/locales/en/street_fighter.yml +1524 -0
  335. data/lib/locales/en/studio_ghibli.yml +107 -0
  336. data/lib/locales/en/subscription.yml +47 -5
  337. data/lib/locales/en/super_mario.yml +58 -0
  338. data/lib/locales/en/super_smash_bros.yml +23 -6
  339. data/lib/locales/en/superhero.yml +574 -4
  340. data/lib/locales/en/supernatural.yml +141 -0
  341. data/lib/locales/en/sword_art_online.yml +327 -331
  342. data/lib/locales/en/tarkov.yml +593 -0
  343. data/lib/locales/en/tea.yml +172 -0
  344. data/lib/locales/en/team.yml +125 -3
  345. data/lib/locales/en/the_expanse.yml +92 -4
  346. data/lib/locales/en/the_it_crowd.yml +148 -152
  347. data/lib/locales/en/the_kingkiller_chronicle.yml +56 -0
  348. data/lib/locales/en/the_office.yml +82 -0
  349. data/lib/locales/en/the_room.yml +68 -0
  350. data/lib/locales/en/the_thick_of_it.yml +83 -3
  351. data/lib/locales/en/theater.yml +597 -0
  352. data/lib/locales/en/tolkien.yml +2453 -0
  353. data/lib/locales/en/touhou.yml +839 -0
  354. data/lib/locales/en/train_station.yml +280 -0
  355. data/lib/locales/en/tron.yml +227 -0
  356. data/lib/locales/en/twin_peaks.yml +130 -3
  357. data/lib/locales/en/umphreys_mcgee.yml +266 -1
  358. data/lib/locales/en/university.yml +15 -2
  359. data/lib/locales/en/v_for_vendetta.yml +157 -160
  360. data/lib/locales/en/vehicle.yml +2809 -75
  361. data/lib/locales/en/venture_bros.yml +225 -4
  362. data/lib/locales/en/verbs.yml +3785 -5
  363. data/lib/locales/en/volleyball.yml +501 -0
  364. data/lib/locales/en/warhammer_fantasy.yml +540 -573
  365. data/lib/locales/en/witcher.yml +426 -7
  366. data/lib/locales/en/world_cup.yml +1132 -235
  367. data/lib/locales/en/world_of_warcraft.yml +122 -4
  368. data/lib/locales/en/yoda.yml +38 -1
  369. data/lib/locales/en/zelda.yml +962 -4
  370. data/lib/locales/en-AU.yml +725 -48
  371. data/lib/locales/en-BORK.yml +104 -1
  372. data/lib/locales/en-CA.yml +373 -18
  373. data/lib/locales/en-GB.yml +118 -8
  374. data/lib/locales/en-IND.yml +1259 -16
  375. data/lib/locales/en-KE.yml +212 -0
  376. data/lib/locales/en-MS.yml +364 -16
  377. data/lib/locales/en-NEP.yml +212 -35
  378. data/lib/locales/en-NG.yml +737 -65
  379. data/lib/locales/en-NZ.yml +1153 -121
  380. data/lib/locales/en-PAK.yml +392 -9
  381. data/lib/locales/en-SG.yml +581 -15
  382. data/lib/locales/en-TH.yml +1 -1
  383. data/lib/locales/en-UG.yml +374 -75
  384. data/lib/locales/en-US.yml +6921 -81
  385. data/lib/locales/en-ZA.yml +1394 -13
  386. data/lib/locales/en-au-ocker.yml +266 -21
  387. data/lib/locales/en.yml +0 -3
  388. data/lib/locales/es-AR.yml +4570 -0
  389. data/lib/locales/es-MX.yml +1907 -41
  390. data/lib/locales/es.yml +2172 -52
  391. data/lib/locales/fa.yml +1624 -5
  392. data/lib/locales/fi-FI.yml +316 -16
  393. data/lib/locales/fr/address.yml +773 -0
  394. data/lib/locales/fr/adjective.yml +266 -0
  395. data/lib/locales/fr/ancient.yml +141 -0
  396. data/lib/locales/fr/animal.yml +122 -0
  397. data/lib/locales/fr/appliance.yml +69 -0
  398. data/lib/locales/fr/book.yml +31 -0
  399. data/lib/locales/fr/color.yml +34 -0
  400. data/lib/locales/fr/company.yml +497 -0
  401. data/lib/locales/fr/compass.yml +71 -0
  402. data/lib/locales/fr/demographic.yml +6 -0
  403. data/lib/locales/fr/gender.yml +21 -0
  404. data/lib/locales/fr/internet.yml +15 -0
  405. data/lib/locales/fr/lorem.yml +1094 -0
  406. data/lib/locales/fr/measurement.yml +34 -0
  407. data/lib/locales/fr/name.yml +1193 -0
  408. data/lib/locales/fr/phone_number.yml +38 -0
  409. data/lib/locales/fr/pokemon.yml +421 -0
  410. data/lib/locales/fr-CA.yml +2754 -45
  411. data/lib/locales/fr-CH.yml +2455 -42
  412. data/lib/locales/fr.yml +2 -112
  413. data/lib/locales/he.yml +255 -9
  414. data/lib/locales/hy.yml +3630 -119
  415. data/lib/locales/id.yml +839 -10
  416. data/lib/locales/it.yml +1310 -31
  417. data/lib/locales/ja/README.md +13 -0
  418. data/lib/locales/ja/address.yml +363 -0
  419. data/lib/locales/ja/adjective.yml +148 -0
  420. data/lib/locales/ja/ancient.yml +18 -0
  421. data/lib/locales/ja/animal.yml +87 -0
  422. data/lib/locales/ja/artist.yml +46 -0
  423. data/lib/locales/ja/bank.yml +139 -0
  424. data/lib/locales/ja/book.yml +496 -0
  425. data/lib/locales/ja/cat.yml +79 -0
  426. data/lib/locales/ja/coffee.yml +22 -0
  427. data/lib/locales/ja/color.yml +35 -0
  428. data/lib/locales/ja/commerce.yml +103 -0
  429. data/lib/locales/ja/company.yml +26 -0
  430. data/lib/locales/ja/dog.yml +339 -0
  431. data/lib/locales/ja/emotion.yml +49 -0
  432. data/lib/locales/ja/food.yml +41 -0
  433. data/lib/locales/ja/football.yml +115 -0
  434. data/lib/locales/ja/gender.yml +6 -0
  435. data/lib/locales/ja/lorem.yml +1020 -0
  436. data/lib/locales/ja/name.yml +213 -0
  437. data/lib/locales/ja/naruto.yml +230 -0
  438. data/lib/locales/ja/overwatch.yml +37 -0
  439. data/lib/locales/ja/phone_number.yml +13 -0
  440. data/lib/locales/ja/pokemon.yml +441 -0
  441. data/lib/locales/ja/relationship.yml +33 -0
  442. data/lib/locales/ja/restaurant.yml +82 -0
  443. data/lib/locales/ja/space.yml +23 -0
  444. data/lib/locales/ja/sport.yml +130 -0
  445. data/lib/locales/ja/studio_ghibli.yml +112 -0
  446. data/lib/locales/ja/subscription.yml +50 -0
  447. data/lib/locales/ja/super_mario.yml +73 -0
  448. data/lib/locales/ja/super_smash_bros.yml +8 -0
  449. data/lib/locales/ja/touhou.yml +466 -0
  450. data/lib/locales/ja/university.yml +22 -0
  451. data/lib/locales/ja/zelda.yml +19 -0
  452. data/lib/locales/ko.yml +1380 -29
  453. data/lib/locales/lt.yml +315 -0
  454. data/lib/locales/lv.yml +1221 -27
  455. data/lib/locales/mi-NZ.yml +283 -0
  456. data/lib/locales/nb-NO.yml +518 -27
  457. data/lib/locales/nl.yml +33514 -55
  458. data/lib/locales/pl.yml +4008 -38
  459. data/lib/locales/pt-BR.yml +8207 -660
  460. data/lib/locales/pt.yml +844 -43
  461. data/lib/locales/ru.yml +1355 -30
  462. data/lib/locales/sk.yml +4416 -41
  463. data/lib/locales/sv.yml +731 -41
  464. data/lib/locales/th.yml +375 -375
  465. data/lib/locales/tr.yml +77 -19
  466. data/lib/locales/uk.yml +1810 -44
  467. data/lib/locales/vi.yml +392 -48
  468. data/lib/locales/zh-CN/bank.yml +17 -0
  469. data/lib/locales/zh-CN.yml +540 -18
  470. data/lib/locales/zh-TW.yml +1030 -14
  471. metadata +188 -141
  472. data/History.md +0 -176
  473. data/lib/faker/default/bossa_nova.rb +0 -33
  474. data/lib/faker/default/fillmurray.rb +0 -45
  475. data/lib/faker/default/internet.rb +0 -358
  476. data/lib/faker/default/lorem_pixel.rb +0 -69
  477. data/lib/faker/default/twitter.rb +0 -223
  478. data/lib/locales/en/hobbit.yml +0 -19
  479. data/lib/locales/en/lord_of_the_rings.yml +0 -6
  480. data/lib/locales/en/show.yml +0 -597
  481. data/lib/locales/ja.yml +0 -101
  482. /data/lib/faker/{books → default}/book.rb +0 -0
  483. /data/lib/faker/{games → default}/game.rb +0 -0
  484. /data/lib/faker/{movies → default}/movie.rb +0 -0
  485. /data/lib/faker/{default/internet_http.rb → internet/http.rb} +0 -0
@@ -16,17 +16,11 @@ module Faker
16
16
  # Faker::Types.rb_string #=> "foobar"
17
17
  #
18
18
  # @faker.version 1.8.6
19
- def rb_string(legacy_words = NOT_GIVEN, words: 1)
20
- warn_for_deprecated_arguments do |keywords|
21
- keywords << :words if legacy_words != NOT_GIVEN
22
- end
23
-
19
+ def rb_string(words: 1)
24
20
  resolved_num = resolve(words)
25
- word_list =
26
- translate('faker.lorem.words')
27
-
21
+ word_list = translate('faker.lorem.words')
28
22
  word_list *= ((resolved_num / word_list.length) + 1)
29
- shuffle(word_list)[0, resolved_num].join(' ')
23
+ sample(word_list, resolved_num).join(' ')
30
24
  end
31
25
 
32
26
  ##
@@ -51,12 +45,7 @@ module Faker
51
45
  # Faker::Types.rb_integer #=> 1
52
46
  #
53
47
  # @faker.version 1.8.6
54
- def rb_integer(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from: 0, to: 100)
55
- warn_for_deprecated_arguments do |keywords|
56
- keywords << :from if legacy_from != NOT_GIVEN
57
- keywords << :to if legacy_to != NOT_GIVEN
58
- end
59
-
48
+ def rb_integer(from: 0, to: 100)
60
49
  rand(from..to).to_i
61
50
  end
62
51
 
@@ -72,15 +61,11 @@ module Faker
72
61
  # Faker::Types.rb_hash(number: 2) #=> {name: "bob", last: "marley"}
73
62
  #
74
63
  # @faker.version 1.8.6
75
- def rb_hash(legacy_number = NOT_GIVEN, legacy_type = NOT_GIVEN, number: 1, type: random_type)
76
- warn_for_deprecated_arguments do |keywords|
77
- keywords << :number if legacy_number != NOT_GIVEN
78
- keywords << :type if legacy_type != NOT_GIVEN
79
- end
80
-
64
+ def rb_hash(number: 1, type: -> { random_type })
81
65
  {}.tap do |hsh|
82
66
  Lorem.words(number: number * 2).uniq.first(number).each do |s|
83
- hsh.merge!(s.to_sym => type)
67
+ value = type.is_a?(Proc) ? type.call : type
68
+ hsh.merge!(s.to_sym => value)
84
69
  end
85
70
  end
86
71
  end
@@ -97,12 +82,8 @@ module Faker
97
82
  # Faker::Types.complex_rb_hash(number: 2) #=> {user: {first: "bob", last: "marley"}, son: ["damien", "marley"]}
98
83
  #
99
84
  # @faker.version 1.8.6
100
- def complex_rb_hash(legacy_number = NOT_GIVEN, number: 1)
101
- warn_for_deprecated_arguments do |keywords|
102
- keywords << :number if legacy_number != NOT_GIVEN
103
- end
104
-
105
- rb_hash(number: number, type: random_complex_type)
85
+ def complex_rb_hash(number: 1)
86
+ rb_hash(number: number, type: -> { random_complex_type })
106
87
  end
107
88
 
108
89
  ##
@@ -114,16 +95,13 @@ module Faker
114
95
  # @example
115
96
  # Faker::Types.rb_array #=> ["a"]
116
97
  # Faker::Types.rb_array(len: 4) #=> ["a", 1, 2, "bob"]
98
+ # Faker::Types.rb_array(len: 2, type: -> { Faker::Types.rb_string }) #=> ["cat", "foo"]
117
99
  #
118
100
  # @faker.version 1.8.6
119
- def rb_array(legacy_len = NOT_GIVEN, len: 1)
120
- warn_for_deprecated_arguments do |keywords|
121
- keywords << :len if legacy_len != NOT_GIVEN
122
- end
123
-
101
+ def rb_array(len: 1, type: -> { random_type })
124
102
  [].tap do |ar|
125
103
  len.times do
126
- ar.push random_type
104
+ ar.push type.is_a?(Proc) ? type.call : type
127
105
  end
128
106
  end
129
107
  end
@@ -138,7 +116,7 @@ module Faker
138
116
  #
139
117
  # @faker.version 1.8.6
140
118
  def random_type
141
- type_to_use = SIMPLE_TYPES[rand(0..SIMPLE_TYPES.length - 1)]
119
+ type_to_use = SIMPLE_TYPES[rand(0..(SIMPLE_TYPES.length - 1))]
142
120
  case type_to_use
143
121
  when :string
144
122
  rb_string
@@ -158,7 +136,7 @@ module Faker
158
136
  # @faker.version 1.8.6
159
137
  def random_complex_type
160
138
  types = SIMPLE_TYPES + COMPLEX_TYPES
161
- type_to_use = types[rand(0..types.length - 1)]
139
+ type_to_use = types[rand(0..(types.length - 1))]
162
140
  case type_to_use
163
141
  when :string
164
142
  rb_string
@@ -6,10 +6,9 @@ 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
 
@@ -23,7 +22,25 @@ module Faker
23
22
  #
24
23
  # @faker.version 1.6.4
25
24
  def vin
26
- regexify(VIN_REGEX)
25
+ generate(:string) do |g|
26
+ g.letter(name: :wmi, ranges: ['100'..'199', '400'..'499', '500'..'599', '700'..'799', '7A0'..'7F9'])
27
+ g.letter(name: :vds, length: 5, ranges: [VIN_KEYSPACE])
28
+ g.computed(name: :checksum, deps: %i[wmi vds model_year plant_code vis]) do |wmi, vds, model_year, plant_code, vis|
29
+ checksum = "#{wmi}#{vds}0#{model_year}#{plant_code}#{vis}".chars.each_with_index.map do |char, i|
30
+ value = (char =~ /\A\d\z/ ? char.to_i : VIN_TRANSLITERATION[char.to_sym])
31
+ value * VIN_WEIGHT[i]
32
+ end.inject(:+) % 11
33
+
34
+ if checksum == 10
35
+ 'X'
36
+ else
37
+ checksum
38
+ end
39
+ end
40
+ g.letter(name: :model_year, length: 1, ranges: [VIN_KEYSPACE - %w[U Z 0]])
41
+ g.letter(name: :plant_code, length: 1, ranges: [VIN_KEYSPACE])
42
+ g.int(name: :vis, length: 6)
43
+ end
27
44
  end
28
45
 
29
46
  # Produces a random vehicle manufacturer.
@@ -31,12 +48,13 @@ module Faker
31
48
  # @return [String]
32
49
  #
33
50
  # @example
34
- # Faker::Vehicle.manufacture #=> "Lamborghini"
51
+ # Faker::Vehicle.manufacturer #=> "Lamborghini"
35
52
  #
36
53
  # @faker.version 1.6.4
37
- def manufacture
38
- fetch('vehicle.manufacture')
54
+ def manufacturer
55
+ fetch('vehicle.manufacturer')
39
56
  end
57
+ alias manufacture manufacturer
40
58
 
41
59
  ##
42
60
  # Produces a random vehicle make.
@@ -62,11 +80,7 @@ module Faker
62
80
  # Faker::Vehicle.model(make_of_model: 'Toyota') #=> "Prius"
63
81
  #
64
82
  # @faker.version 1.6.4
65
- def model(legacy_make_of_model = NOT_GIVEN, make_of_model: '')
66
- warn_for_deprecated_arguments do |keywords|
67
- keywords << :make_of_model if legacy_make_of_model != NOT_GIVEN
68
- end
69
-
83
+ def model(make_of_model: '')
70
84
  return fetch("vehicle.models_by_make.#{make}") if make_of_model.empty?
71
85
 
72
86
  fetch("vehicle.models_by_make.#{make_of_model}")
@@ -249,12 +263,7 @@ module Faker
249
263
  # Faker::Vehicle.kilometrage #=> 35378
250
264
  #
251
265
  # @faker.version 1.6.4
252
- def mileage(legacy_min = NOT_GIVEN, legacy_max = NOT_GIVEN, min: MILEAGE_MIN, max: MILEAGE_MAX)
253
- warn_for_deprecated_arguments do |keywords|
254
- keywords << :min if legacy_min != NOT_GIVEN
255
- keywords << :max if legacy_max != NOT_GIVEN
256
- end
257
-
266
+ def mileage(min: MILEAGE_MIN, max: MILEAGE_MAX)
258
267
  rand_in_range(min, max)
259
268
  end
260
269
 
@@ -271,14 +280,10 @@ module Faker
271
280
  # Faker::Vehicle.license_plate(state_abbreviation: 'FL') #=> "977 UNU"
272
281
  #
273
282
  # @faker.version 1.6.4
274
- def license_plate(legacy_state_abreviation = NOT_GIVEN, state_abbreviation: '')
275
- warn_for_deprecated_arguments do |keywords|
276
- keywords << :state_abbreviation if legacy_state_abreviation != NOT_GIVEN
277
- end
278
-
283
+ def license_plate(state_abbreviation: '')
279
284
  return regexify(bothify(fetch('vehicle.license_plate'))) if state_abbreviation.empty?
280
285
 
281
- key = 'vehicle.license_plate_by_state.' + state_abbreviation
286
+ key = "vehicle.license_plate_by_state.#{state_abbreviation}"
282
287
  regexify(bothify(fetch(key)))
283
288
  end
284
289
 
@@ -297,45 +302,30 @@ module Faker
297
302
  "#{plate_number}#{singapore_checksum(plate_number)}"
298
303
  end
299
304
 
300
- private
301
-
302
- def first_eight(number)
303
- return number[0...8] unless number.nil?
304
-
305
- regexify(VIN_REGEX)
306
- end
307
- alias last_eight first_eight
308
-
309
- def calculate_vin_check_digit(vin)
310
- sum = 0
311
-
312
- vin.each_char.with_index do |c, i|
313
- n = vin_char_to_number(c).to_i
314
- weight = VIN_WEIGHTS[i].to_i
315
- sum += weight * n
316
- end
317
-
318
- mod = sum % 11
319
- mod == 10 ? 'X' : mod
305
+ ##
306
+ # Produces a car version
307
+ #
308
+ # @return [String]
309
+ #
310
+ # @example
311
+ # Faker::Vehicle.version #=> "40 TFSI Premium"
312
+ #
313
+ # @faker.version next
314
+ def version
315
+ fetch('vehicle.version')
320
316
  end
321
317
 
322
- def vin_char_to_number(char)
323
- index = VIN_LETTERS.split('').index(char)
324
-
325
- return char.to_i if index.nil?
326
-
327
- VIN_MAP[index]
328
- end
318
+ private
329
319
 
330
320
  def singapore_checksum(plate_number)
331
- padded_alphabets = format('%3s', plate_number[/^[A-Z]+/]).tr(' ', '-').split('')
332
- padded_digits = format('%04d', plate_number[/\d+/]).split('').map(&:to_i)
321
+ padded_alphabets = format('%3s', plate_number[/^[A-Z]+/]).tr(' ', '-').chars
322
+ padded_digits = format('%04d', plate_number[/\d+/]).chars.map(&:to_i)
333
323
  sum = [*padded_alphabets, *padded_digits].each_with_index.reduce(0) do |memo, (char, i)|
334
324
  value = char.is_a?(Integer) ? char : char.ord - 64
335
325
  memo + (SG_CHECKSUM_WEIGHTS[i] * value)
336
326
  end
337
327
 
338
- SG_CHECKSUM_CHARS.split('')[sum % 19]
328
+ SG_CHECKSUM_CHARS.chars[sum % 19]
339
329
  end
340
330
  end
341
331
  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
@@ -53,11 +53,7 @@ module Faker
53
53
  # Faker::WorldCup.group #=> "Russia"
54
54
  #
55
55
  # @faker.version 2.13.0
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
-
56
+ def group(group: 'group_A')
61
57
  fetch("world_cup.groups.#{group}")
62
58
  end
63
59
 
@@ -73,12 +69,7 @@ module Faker
73
69
  # Faker::WorldCup.roster(country: 'Spain', type: 'forwards') #=> "Diego Costa"
74
70
  #
75
71
  # @faker.version 2.13.0
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
-
72
+ def roster(country: 'Egypt', type: 'coach')
82
73
  fetch("world_cup.rosters.#{country}.#{type}")
83
74
  end
84
75
  end
@@ -0,0 +1,189 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class X < Base
5
+ class << self
6
+ ##
7
+ # Produces a random X user based on X's v2 API.
8
+ #
9
+ # @return [Hash]
10
+ #
11
+ # @example
12
+ # Faker::X.user #=> { data: [{:id=>"8821452687517076614", :name=>"Lincoln Paucek", :screen_name=>"cody"...
13
+ #
14
+ # @faker.version 1.7.3
15
+ def user
16
+ author_id = Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807)
17
+
18
+ {
19
+ data: [
20
+ {
21
+ author_id: author_id.to_s,
22
+ id: id.to_s,
23
+ text: Faker::Lorem.sentence
24
+ }
25
+ ],
26
+ includes: {
27
+ users: [
28
+ {
29
+ public_metrics: {
30
+ followers_count: Faker::Number.between(to: 1, from: 1_000),
31
+ following_count: Faker::Number.between(to: 1, from: 200),
32
+ tweet_count: Faker::Number.between(to: 1, from: 10_000),
33
+ listed_count: Faker::Number.between(to: 1, from: 1_000)
34
+ },
35
+ username: screen_name,
36
+ pinned_tweet_id: Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807).to_s,
37
+ entities: user_entities,
38
+ description: Faker::Lorem.sentence,
39
+ name: Faker::Name.name,
40
+ verified: Faker::Boolean.boolean(true_ratio: 0.1),
41
+ location: Faker::Internet.public_ip_v4_address,
42
+ id: author_id.to_s,
43
+ protected: Faker::Boolean.boolean(true_ratio: 0.1),
44
+ url: url,
45
+ profile_image_url: Faker::Avatar.image(slug: id, size: '48x48'),
46
+ created_at: created_at
47
+ }
48
+ ]
49
+ }
50
+ }
51
+ end
52
+
53
+ ##
54
+ # Produces a random X tweet with default attributes.
55
+ #
56
+ # @param include_user [Boolean] Include user details
57
+ # @param include_media [Boolean] Include user media (photo) details
58
+ # @return [Hash]
59
+ #
60
+ # @example
61
+ # Faker::X.tweet #=> { data: [{:id=>"8821452687517076614", :text=>"Ea et laboriosam vel non."...
62
+ # Faker::X.tweet(include_media: true) # Get a tweet object with a photo media attachment
63
+ # Faker::X.tweet(include_user: true) # Get a tweet object with an user details
64
+ #
65
+ # @faker.version 1.7.3
66
+ def tweet(include_media: false, include_user: false)
67
+ tweet = {}
68
+ tweet_object = tweet_item
69
+ includes = {}
70
+
71
+ if include_media
72
+ media_key = Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807).to_s
73
+
74
+ includes[:media] = media(media_key)
75
+ tweet_object[:attachments] = { media_keys: [media_key] }
76
+ end
77
+
78
+ includes[:users] = user[:includes][:users] if include_user
79
+
80
+ tweet[:data] = [
81
+ tweet_object
82
+ ]
83
+
84
+ unless includes.empty?
85
+ tweet[:includes] = includes
86
+ end
87
+
88
+ tweet
89
+ end
90
+
91
+ ##
92
+ # Produces a random screen_name.
93
+ #
94
+ # @return [String]
95
+ #
96
+ # @example
97
+ # Faker::X.screen_name #=> "audreanne_hackett"
98
+ #
99
+ # @faker.version 1.7.3
100
+ def screen_name
101
+ Faker::Internet.username(specifier: nil, separators: ['_'])[0...20]
102
+ end
103
+
104
+ private
105
+
106
+ def id
107
+ Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807)
108
+ end
109
+
110
+ def created_at
111
+ Faker::Date.between(from: '2006-03-21', to: ::Date.today).to_time.utc.iso8601(3)
112
+ end
113
+
114
+ def url
115
+ "https://t.co/#{Faker::Lorem.characters(number: 10)}"
116
+ end
117
+
118
+ def user_entities
119
+ entities = tweet_entities
120
+
121
+ {
122
+ url: {
123
+ urls: entities[:urls]
124
+ },
125
+ description: {
126
+ hashtags: entities[:hashtags]
127
+ }
128
+ }
129
+ end
130
+
131
+ def tweet_entities
132
+ display_url = Faker::Internet.url(host: 'example.com')
133
+
134
+ {
135
+ urls: [
136
+ {
137
+ start: 0,
138
+ end: 5,
139
+ url: url,
140
+ expanded_url: display_url,
141
+ display_url: display_url.sub('http://', '')
142
+ }
143
+ ],
144
+ hashtags: [
145
+ {
146
+ start: 0,
147
+ end: 5,
148
+ tag: Faker::Lorem.word.capitalize
149
+ }
150
+ ]
151
+ }
152
+ end
153
+
154
+ def media(media_key)
155
+ expanded_url = Faker::LoremFlickr.image(size: '1064x600')
156
+
157
+ [{
158
+ height: Faker::Number.between(to: 1, from: 1000),
159
+ media_key: media_key,
160
+ type: 'photo',
161
+ preview_image_url: expanded_url,
162
+ width: Faker::Number.between(to: 1, from: 2000),
163
+ alt_text: Faker::Lorem.sentence
164
+ }]
165
+ end
166
+
167
+ def tweet_item
168
+ conversation_id = id.to_s
169
+
170
+ {
171
+ id: conversation_id,
172
+ text: Faker::Lorem.sentence,
173
+ lang: sample(%w[en fr es pt it ja]),
174
+ conversation_id: conversation_id,
175
+ created_at: created_at,
176
+ author_id: Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807).to_s,
177
+ public_metrics: {
178
+ retweet_count: Faker::Number.between(to: 1, from: 100),
179
+ reply_count: Faker::Number.between(to: 1, from: 20),
180
+ like_count: Faker::Number.between(to: 1, from: 25),
181
+ quote_count: Faker::Number.between(to: 1, from: 10)
182
+ },
183
+ possibly_sensitive: Faker::Boolean.boolean(true_ratio: 0.1),
184
+ entities: tweet_entities
185
+ }
186
+ end
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Default
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ 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,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Fantasy
5
+ if Faker::Config.lazy_loading?
6
+ Faker.lazy_load(self)
7
+ end
8
+ end
9
+ 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
@@ -23,7 +23,7 @@ module Faker
23
23
  # @return [String]
24
24
  #
25
25
  # @example
26
- # Faker::Games::Control.character #=> "Dimensional Research"
26
+ # Faker::Games::Control.location #=> "Dimensional Research"
27
27
  #
28
28
  # @faker.version 2.13.0
29
29
  def location