faker 2.6.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 (386) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1384 -0
  3. data/History.md +176 -0
  4. data/License.txt +20 -0
  5. data/README.md +364 -0
  6. data/bin/faker +5 -0
  7. data/lib/faker.rb +308 -0
  8. data/lib/faker/blockchain/aeternity.rb +70 -0
  9. data/lib/faker/blockchain/bitcoin.rb +60 -0
  10. data/lib/faker/blockchain/ethereum.rb +26 -0
  11. data/lib/faker/blockchain/tezos.rb +107 -0
  12. data/lib/faker/books/book.rb +61 -0
  13. data/lib/faker/books/culture_series.rb +83 -0
  14. data/lib/faker/books/dune.rb +119 -0
  15. data/lib/faker/books/lovecraft.rb +276 -0
  16. data/lib/faker/creature/animal.rb +22 -0
  17. data/lib/faker/creature/cat.rb +50 -0
  18. data/lib/faker/creature/dog.rb +115 -0
  19. data/lib/faker/creature/horse.rb +37 -0
  20. data/lib/faker/default/address.rb +123 -0
  21. data/lib/faker/default/alphanumeric.rb +73 -0
  22. data/lib/faker/default/ancient.rb +23 -0
  23. data/lib/faker/default/app.rb +77 -0
  24. data/lib/faker/default/appliance.rb +33 -0
  25. data/lib/faker/default/artist.rb +20 -0
  26. data/lib/faker/default/avatar.rb +60 -0
  27. data/lib/faker/default/bank.rb +108 -0
  28. data/lib/faker/default/beer.rb +41 -0
  29. data/lib/faker/default/boolean.rb +26 -0
  30. data/lib/faker/default/bossa_nova.rb +15 -0
  31. data/lib/faker/default/business.rb +23 -0
  32. data/lib/faker/default/cannabis.rb +45 -0
  33. data/lib/faker/default/chile_rut.rb +54 -0
  34. data/lib/faker/default/chuck_norris.rb +14 -0
  35. data/lib/faker/default/code.rb +201 -0
  36. data/lib/faker/default/coffee.rb +37 -0
  37. data/lib/faker/default/coin.rb +15 -0
  38. data/lib/faker/default/color.rb +32 -0
  39. data/lib/faker/default/commerce.rb +80 -0
  40. data/lib/faker/default/company.rb +264 -0
  41. data/lib/faker/default/compass.rb +67 -0
  42. data/lib/faker/default/construction.rb +29 -0
  43. data/lib/faker/default/cosmere.rb +48 -0
  44. data/lib/faker/default/crypto.rb +21 -0
  45. data/lib/faker/default/crypto_coin.rb +49 -0
  46. data/lib/faker/default/currency.rb +19 -0
  47. data/lib/faker/default/date.rb +182 -0
  48. data/lib/faker/default/dc_comics.rb +25 -0
  49. data/lib/faker/default/demographic.rb +41 -0
  50. data/lib/faker/default/dessert.rb +48 -0
  51. data/lib/faker/default/device.rb +85 -0
  52. data/lib/faker/default/driving_licence.rb +65 -0
  53. data/lib/faker/default/educator.rb +35 -0
  54. data/lib/faker/default/electrical_components.rb +48 -0
  55. data/lib/faker/default/esport.rb +27 -0
  56. data/lib/faker/default/file.rb +49 -0
  57. data/lib/faker/default/fillmurray.rb +23 -0
  58. data/lib/faker/default/finance.rb +44 -0
  59. data/lib/faker/default/food.rb +49 -0
  60. data/lib/faker/default/funny_name.rb +45 -0
  61. data/lib/faker/default/gender.rb +33 -0
  62. data/lib/faker/default/greek_philosophers.rb +33 -0
  63. data/lib/faker/default/hacker.rb +103 -0
  64. data/lib/faker/default/hipster.rb +97 -0
  65. data/lib/faker/default/house.rb +33 -0
  66. data/lib/faker/default/id_number.rb +164 -0
  67. data/lib/faker/default/industry_segments.rb +61 -0
  68. data/lib/faker/default/internet.rb +291 -0
  69. data/lib/faker/default/invoice.rb +109 -0
  70. data/lib/faker/default/job.rb +25 -0
  71. data/lib/faker/default/json.rb +87 -0
  72. data/lib/faker/default/kpop.rb +31 -0
  73. data/lib/faker/default/lorem.rb +151 -0
  74. data/lib/faker/default/lorem_flickr.rb +78 -0
  75. data/lib/faker/default/lorem_pixel.rb +47 -0
  76. data/lib/faker/default/markdown.rb +84 -0
  77. data/lib/faker/default/marketing.rb +22 -0
  78. data/lib/faker/default/measurement.rb +116 -0
  79. data/lib/faker/default/military.rb +72 -0
  80. data/lib/faker/default/name.rb +58 -0
  81. data/lib/faker/default/nation.rb +76 -0
  82. data/lib/faker/default/nato_phonetic_alphabet.rb +20 -0
  83. data/lib/faker/default/nhs.rb +38 -0
  84. data/lib/faker/default/number.rb +274 -0
  85. data/lib/faker/default/omniauth.rb +413 -0
  86. data/lib/faker/default/phone_number.rb +54 -0
  87. data/lib/faker/default/placeholdit.rb +41 -0
  88. data/lib/faker/default/programming_language.rb +33 -0
  89. data/lib/faker/default/relationship.rb +46 -0
  90. data/lib/faker/default/restaurant.rb +63 -0
  91. data/lib/faker/default/science.rb +46 -0
  92. data/lib/faker/default/slack_emoji.rb +43 -0
  93. data/lib/faker/default/source.rb +76 -0
  94. data/lib/faker/default/south_africa.rb +51 -0
  95. data/lib/faker/default/space.rb +64 -0
  96. data/lib/faker/default/string.rb +49 -0
  97. data/lib/faker/default/stripe.rb +81 -0
  98. data/lib/faker/default/subscription.rb +70 -0
  99. data/lib/faker/default/superhero.rb +72 -0
  100. data/lib/faker/default/team.rb +29 -0
  101. data/lib/faker/default/time.rb +179 -0
  102. data/lib/faker/default/twitter.rb +188 -0
  103. data/lib/faker/default/types.rb +101 -0
  104. data/lib/faker/default/university.rb +30 -0
  105. data/lib/faker/default/vehicle.rb +162 -0
  106. data/lib/faker/default/verb.rb +27 -0
  107. data/lib/faker/default/world_cup.rb +86 -0
  108. data/lib/faker/games/dota.rb +80 -0
  109. data/lib/faker/games/elder_scrolls.rb +113 -0
  110. data/lib/faker/games/fallout.rb +62 -0
  111. data/lib/faker/games/game.rb +48 -0
  112. data/lib/faker/games/half_life.rb +48 -0
  113. data/lib/faker/games/heroes.rb +48 -0
  114. data/lib/faker/games/heroes_of_the_storm.rb +61 -0
  115. data/lib/faker/games/league_of_legends.rb +87 -0
  116. data/lib/faker/games/myst.rb +74 -0
  117. data/lib/faker/games/overwatch.rb +48 -0
  118. data/lib/faker/games/pokemon.rb +48 -0
  119. data/lib/faker/games/sonic_the_hedgehog.rb +48 -0
  120. data/lib/faker/games/super_smash_bros.rb +35 -0
  121. data/lib/faker/games/witcher.rb +87 -0
  122. data/lib/faker/games/world_of_warcraft.rb +35 -0
  123. data/lib/faker/games/zelda.rb +62 -0
  124. data/lib/faker/japanese_media/dragon_ball.rb +22 -0
  125. data/lib/faker/japanese_media/one_piece.rb +87 -0
  126. data/lib/faker/japanese_media/sword_art_online.rb +61 -0
  127. data/lib/faker/movies/back_to_the_future.rb +49 -0
  128. data/lib/faker/movies/ghostbusters.rb +49 -0
  129. data/lib/faker/movies/harry_potter.rb +87 -0
  130. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +106 -0
  131. data/lib/faker/movies/hobbit.rb +62 -0
  132. data/lib/faker/movies/lebowski.rb +48 -0
  133. data/lib/faker/movies/lord_of_the_rings.rb +49 -0
  134. data/lib/faker/movies/movie.rb +20 -0
  135. data/lib/faker/movies/princess_bride.rb +36 -0
  136. data/lib/faker/movies/star_wars.rb +201 -0
  137. data/lib/faker/movies/v_for_vendetta.rb +50 -0
  138. data/lib/faker/music/grateful_dead.rb +37 -0
  139. data/lib/faker/music/music.rb +47 -0
  140. data/lib/faker/music/opera.rb +26 -0
  141. data/lib/faker/music/phish.rb +22 -0
  142. data/lib/faker/music/rock_band.rb +22 -0
  143. data/lib/faker/music/umphreys_mcgee.rb +22 -0
  144. data/lib/faker/quotes/quote.rb +32 -0
  145. data/lib/faker/quotes/shakespeare.rb +41 -0
  146. data/lib/faker/sports/basketball.rb +61 -0
  147. data/lib/faker/sports/football.rb +74 -0
  148. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +24 -0
  149. data/lib/faker/tv_shows/bojack_horseman.rb +51 -0
  150. data/lib/faker/tv_shows/breaking_bad.rb +37 -0
  151. data/lib/faker/tv_shows/buffy.rb +76 -0
  152. data/lib/faker/tv_shows/community.rb +38 -0
  153. data/lib/faker/tv_shows/dr_who.rb +115 -0
  154. data/lib/faker/tv_shows/dumb_and_dumber.rb +51 -0
  155. data/lib/faker/tv_shows/family_guy.rb +51 -0
  156. data/lib/faker/tv_shows/friends.rb +50 -0
  157. data/lib/faker/tv_shows/game_of_thrones.rb +77 -0
  158. data/lib/faker/tv_shows/hey_arnold.rb +50 -0
  159. data/lib/faker/tv_shows/how_i_met_your_mother.rb +64 -0
  160. data/lib/faker/tv_shows/michael_scott.rb +26 -0
  161. data/lib/faker/tv_shows/new_girl.rb +38 -0
  162. data/lib/faker/tv_shows/parks_and_rec.rb +37 -0
  163. data/lib/faker/tv_shows/rick_and_morty.rb +51 -0
  164. data/lib/faker/tv_shows/ru_paul.rb +37 -0
  165. data/lib/faker/tv_shows/seinfeld.rb +51 -0
  166. data/lib/faker/tv_shows/silicon_valley.rb +118 -0
  167. data/lib/faker/tv_shows/simpsons.rb +51 -0
  168. data/lib/faker/tv_shows/south_park.rb +38 -0
  169. data/lib/faker/tv_shows/star_trek.rb +63 -0
  170. data/lib/faker/tv_shows/stargate.rb +51 -0
  171. data/lib/faker/tv_shows/stranger_things.rb +38 -0
  172. data/lib/faker/tv_shows/the_expanse.rb +63 -0
  173. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +51 -0
  174. data/lib/faker/tv_shows/the_it_crowd.rb +64 -0
  175. data/lib/faker/tv_shows/the_thick_of_it.rb +51 -0
  176. data/lib/faker/tv_shows/twin_peaks.rb +51 -0
  177. data/lib/faker/tv_shows/venture_bros.rb +65 -0
  178. data/lib/faker/version.rb +5 -0
  179. data/lib/helpers/base58.rb +22 -0
  180. data/lib/helpers/char.rb +66 -0
  181. data/lib/helpers/unique_generator.rb +56 -0
  182. data/lib/locales/README.md +40 -0
  183. data/lib/locales/ar.yml +102 -0
  184. data/lib/locales/bg.yml +44 -0
  185. data/lib/locales/ca-CAT.yml +24 -0
  186. data/lib/locales/ca.yml +31 -0
  187. data/lib/locales/da-DK.yml +73 -0
  188. data/lib/locales/de-AT.yml +56 -0
  189. data/lib/locales/de-CH.yml +19 -0
  190. data/lib/locales/de.yml +174 -0
  191. data/lib/locales/ee.yml +61 -0
  192. data/lib/locales/en-AU.yml +28 -0
  193. data/lib/locales/en-BORK.yml +4 -0
  194. data/lib/locales/en-CA.yml +36 -0
  195. data/lib/locales/en-GB.yml +14 -0
  196. data/lib/locales/en-IND.yml +25 -0
  197. data/lib/locales/en-MS.yml +47 -0
  198. data/lib/locales/en-NEP.yml +49 -0
  199. data/lib/locales/en-NG.yml +77 -0
  200. data/lib/locales/en-NZ.yml +39 -0
  201. data/lib/locales/en-PAK.yml +18 -0
  202. data/lib/locales/en-SG.yml +35 -0
  203. data/lib/locales/en-TH.yml +360 -0
  204. data/lib/locales/en-UG.yml +128 -0
  205. data/lib/locales/en-US.yml +103 -0
  206. data/lib/locales/en-ZA.yml +148 -0
  207. data/lib/locales/en-au-ocker.yml +33 -0
  208. data/lib/locales/en.yml +11 -0
  209. data/lib/locales/en/README.md +13 -0
  210. data/lib/locales/en/address.yml +581 -0
  211. data/lib/locales/en/ancient.yml +7 -0
  212. data/lib/locales/en/animal.yml +6 -0
  213. data/lib/locales/en/app.yml +8 -0
  214. data/lib/locales/en/appliance.yml +5 -0
  215. data/lib/locales/en/aqua_teen_hunger_force.yml +4 -0
  216. data/lib/locales/en/artist.yml +4 -0
  217. data/lib/locales/en/back_to_the_future.yml +120 -0
  218. data/lib/locales/en/bank.yml +302 -0
  219. data/lib/locales/en/basketball.yml +99 -0
  220. data/lib/locales/en/beer.yml +9 -0
  221. data/lib/locales/en/bojack_horseman.yml +6 -0
  222. data/lib/locales/en/book.yml +7 -0
  223. data/lib/locales/en/bossa_nova.yml +6 -0
  224. data/lib/locales/en/breaking_bad.yml +28 -0
  225. data/lib/locales/en/buffy.yml +260 -0
  226. data/lib/locales/en/business.yml +5 -0
  227. data/lib/locales/en/cannabis.yml +13 -0
  228. data/lib/locales/en/cat.yml +7 -0
  229. data/lib/locales/en/chuck_norris.yml +82 -0
  230. data/lib/locales/en/code.yml +4 -0
  231. data/lib/locales/en/coffee.yml +31 -0
  232. data/lib/locales/en/coin.yml +6 -0
  233. data/lib/locales/en/color.yml +4 -0
  234. data/lib/locales/en/commerce.yml +11 -0
  235. data/lib/locales/en/community.yml +33 -0
  236. data/lib/locales/en/company.yml +22 -0
  237. data/lib/locales/en/compass.yml +34 -0
  238. data/lib/locales/en/construction.yml +425 -0
  239. data/lib/locales/en/cosmere.yml +57 -0
  240. data/lib/locales/en/crypto_coin.yml +25 -0
  241. data/lib/locales/en/culture_series.yml +307 -0
  242. data/lib/locales/en/currency.yml +6 -0
  243. data/lib/locales/en/dc_comics.yml +52 -0
  244. data/lib/locales/en/demographic.yml +8 -0
  245. data/lib/locales/en/dessert.yml +6 -0
  246. data/lib/locales/en/device.yml +7 -0
  247. data/lib/locales/en/dog.yml +11 -0
  248. data/lib/locales/en/dota.yml +105 -0
  249. data/lib/locales/en/dr_who.yml +96 -0
  250. data/lib/locales/en/dragon_ball.yml +4 -0
  251. data/lib/locales/en/dumb_and_dumber.yml +59 -0
  252. data/lib/locales/en/dune.yml +159 -0
  253. data/lib/locales/en/educator.yml +11 -0
  254. data/lib/locales/en/elder_scrolls.yml +11 -0
  255. data/lib/locales/en/electrical_components.yml +6 -0
  256. data/lib/locales/en/esport.yml +8 -0
  257. data/lib/locales/en/fallout.yml +137 -0
  258. data/lib/locales/en/family_guy.yml +7 -0
  259. data/lib/locales/en/file.yml +5 -0
  260. data/lib/locales/en/finance.yml +113 -0
  261. data/lib/locales/en/food.yml +13 -0
  262. data/lib/locales/en/football.yml +8 -0
  263. data/lib/locales/en/fresh_prince_of_bel_air.yml +73 -0
  264. data/lib/locales/en/friends.yml +6 -0
  265. data/lib/locales/en/funny_name.yml +4 -0
  266. data/lib/locales/en/game.yml +283 -0
  267. data/lib/locales/en/game_of_thrones.yml +8 -0
  268. data/lib/locales/en/gender.yml +5 -0
  269. data/lib/locales/en/ghostbusters.yml +91 -0
  270. data/lib/locales/en/grateful_dead.yml +48 -0
  271. data/lib/locales/en/greek_philosophers.yml +26 -0
  272. data/lib/locales/en/hacker.yml +8 -0
  273. data/lib/locales/en/half_life.yml +7 -0
  274. data/lib/locales/en/harry_potter.yml +9 -0
  275. data/lib/locales/en/heroes.yml +6 -0
  276. data/lib/locales/en/heroes_of_the_storm.yml +7 -0
  277. data/lib/locales/en/hey_arnold.yml +24 -0
  278. data/lib/locales/en/hipster.yml +4 -0
  279. data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +45 -0
  280. data/lib/locales/en/hobbit.yml +19 -0
  281. data/lib/locales/en/horse.yml +6 -0
  282. data/lib/locales/en/house.yml +5 -0
  283. data/lib/locales/en/how_i_met_your_mother.yml +28 -0
  284. data/lib/locales/en/id_number.yml +5 -0
  285. data/lib/locales/en/industry_segments.yml +7 -0
  286. data/lib/locales/en/internet.yml +21 -0
  287. data/lib/locales/en/invoice.yml +6 -0
  288. data/lib/locales/en/job.yml +15 -0
  289. data/lib/locales/en/kpop.yml +83 -0
  290. data/lib/locales/en/league_of_legends.yml +10 -0
  291. data/lib/locales/en/lebowski.yml +43 -0
  292. data/lib/locales/en/lord_of_the_rings.yml +6 -0
  293. data/lib/locales/en/lorem.yml +11 -0
  294. data/lib/locales/en/lovecraft.yml +9 -0
  295. data/lib/locales/en/markdown.yml +5 -0
  296. data/lib/locales/en/marketing.yml +4 -0
  297. data/lib/locales/en/measurement.yml +11 -0
  298. data/lib/locales/en/michael_scott.yml +45 -0
  299. data/lib/locales/en/military.yml +8 -0
  300. data/lib/locales/en/movie.yml +5 -0
  301. data/lib/locales/en/music.yml +32 -0
  302. data/lib/locales/en/myst.yml +48 -0
  303. data/lib/locales/en/name.yml +25 -0
  304. data/lib/locales/en/nation.yml +11 -0
  305. data/lib/locales/en/nato_phonetic_alphabet.yml +4 -0
  306. data/lib/locales/en/new_girl.yml +40 -0
  307. data/lib/locales/en/one_piece.yml +9 -0
  308. data/lib/locales/en/opera.yml +172 -0
  309. data/lib/locales/en/overwatch.yml +41 -0
  310. data/lib/locales/en/parks_and_rec.yml +7 -0
  311. data/lib/locales/en/phish.yml +4 -0
  312. data/lib/locales/en/phone_number.yml +7 -0
  313. data/lib/locales/en/pokemon.yml +8 -0
  314. data/lib/locales/en/princess_bride.yml +5 -0
  315. data/lib/locales/en/programming_language.yml +6 -0
  316. data/lib/locales/en/quote.yml +166 -0
  317. data/lib/locales/en/relationship.yml +10 -0
  318. data/lib/locales/en/restaurant.yml +129 -0
  319. data/lib/locales/en/rick_and_morty.yml +6 -0
  320. data/lib/locales/en/rock_band.yml +4 -0
  321. data/lib/locales/en/rupaul.yml +125 -0
  322. data/lib/locales/en/science.yml +6 -0
  323. data/lib/locales/en/seinfeld.yml +6 -0
  324. data/lib/locales/en/shakespeare.yml +56 -0
  325. data/lib/locales/en/silicon_valley.yml +53 -0
  326. data/lib/locales/en/simpsons.yml +26 -0
  327. data/lib/locales/en/slack_emoji.yml +20 -0
  328. data/lib/locales/en/sonic_the_hedgehog.yml +410 -0
  329. data/lib/locales/en/source.yml +16 -0
  330. data/lib/locales/en/south_park.yml +5 -0
  331. data/lib/locales/en/space.yml +17 -0
  332. data/lib/locales/en/star_trek.yml +7 -0
  333. data/lib/locales/en/star_wars.yml +258 -0
  334. data/lib/locales/en/stargate.yml +21 -0
  335. data/lib/locales/en/stranger_thing.yml +36 -0
  336. data/lib/locales/en/stripe.yml +42 -0
  337. data/lib/locales/en/subscription.yml +8 -0
  338. data/lib/locales/en/super_smash_bros.yml +205 -0
  339. data/lib/locales/en/superhero.yml +12 -0
  340. data/lib/locales/en/sword_art_online.yml +334 -0
  341. data/lib/locales/en/team.yml +8 -0
  342. data/lib/locales/en/the_expanse.yml +7 -0
  343. data/lib/locales/en/the_it_crowd.yml +155 -0
  344. data/lib/locales/en/the_thick_of_it.yml +6 -0
  345. data/lib/locales/en/twin_peaks.yml +6 -0
  346. data/lib/locales/en/umphreys_mcgee.yml +4 -0
  347. data/lib/locales/en/university.yml +10 -0
  348. data/lib/locales/en/v_for_vendetta.yml +163 -0
  349. data/lib/locales/en/vehicle.yml +80 -0
  350. data/lib/locales/en/venture_bros.yml +7 -0
  351. data/lib/locales/en/verbs.yml +8 -0
  352. data/lib/locales/en/witcher.yml +11 -0
  353. data/lib/locales/en/world_cup.yml +271 -0
  354. data/lib/locales/en/world_of_warcraft.yml +8 -0
  355. data/lib/locales/en/yoda.yml +4 -0
  356. data/lib/locales/en/zelda.yml +8 -0
  357. data/lib/locales/es-MX.yml +102 -0
  358. data/lib/locales/es.yml +94 -0
  359. data/lib/locales/fa.yml +10 -0
  360. data/lib/locales/fi-FI.yml +35 -0
  361. data/lib/locales/fr-CA.yml +90 -0
  362. data/lib/locales/fr-CH.yml +78 -0
  363. data/lib/locales/fr.yml +114 -0
  364. data/lib/locales/he.yml +27 -0
  365. data/lib/locales/hy.yml +416 -0
  366. data/lib/locales/id.yml +23 -0
  367. data/lib/locales/it.yml +70 -0
  368. data/lib/locales/ja.yml +97 -0
  369. data/lib/locales/ko.yml +40 -0
  370. data/lib/locales/lv.yml +55 -0
  371. data/lib/locales/nb-NO.yml +62 -0
  372. data/lib/locales/nl.yml +92 -0
  373. data/lib/locales/no.yml +7 -0
  374. data/lib/locales/pl.yml +77 -0
  375. data/lib/locales/pt-BR.yml +697 -0
  376. data/lib/locales/pt.yml +66 -0
  377. data/lib/locales/ru.yml +76 -0
  378. data/lib/locales/sk.yml +78 -0
  379. data/lib/locales/sv.yml +81 -0
  380. data/lib/locales/th.yml +380 -0
  381. data/lib/locales/tr.yml +40 -0
  382. data/lib/locales/uk.yml +86 -0
  383. data/lib/locales/vi.yml +68 -0
  384. data/lib/locales/zh-CN.yml +56 -0
  385. data/lib/locales/zh-TW.yml +29 -0
  386. metadata +568 -0
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class ChileRut < Base
5
+ class << self
6
+ @last_rut = nil
7
+
8
+ # Fixed param added for testing a specific RUT and check digit combination.
9
+ def rut(legacy_min_rut = NOT_GIVEN, legacy_fixed = NOT_GIVEN, min_rut: 1, fixed: false)
10
+ warn_for_deprecated_arguments do |keywords|
11
+ keywords << :min_rut if legacy_min_rut != NOT_GIVEN
12
+ keywords << :fixed if legacy_fixed != NOT_GIVEN
13
+ end
14
+
15
+ @last_rut = fixed ? min_rut : rand_in_range(min_rut, 99_999_999)
16
+ end
17
+
18
+ def dv
19
+ split_reversed_rut = @last_rut.to_s.reverse.split('')
20
+ seq = [2, 3, 4, 5, 6, 7]
21
+ i = 0
22
+ digit_sum = split_reversed_rut.reduce(0) do |sum, n|
23
+ partial_result = sum.to_i + (n.to_i * seq[i])
24
+ i = i == 5 ? 0 : i + 1
25
+ partial_result
26
+ end
27
+ partial_check_digit = 11 - (digit_sum % 11)
28
+ if partial_check_digit == 11
29
+ '0'
30
+ elsif partial_check_digit == 10
31
+ 'k'
32
+ else
33
+ partial_check_digit.to_s
34
+ end
35
+ end
36
+
37
+ # Alias for english speaking devs.
38
+ def check_digit
39
+ dv
40
+ end
41
+
42
+ def full_rut(legacy_min_rut = NOT_GIVEN, legacy_fixed = NOT_GIVEN, min_rut: 0, fixed: false)
43
+ warn_for_deprecated_arguments do |keywords|
44
+ keywords << :min_rut if legacy_min_rut != NOT_GIVEN
45
+ keywords << :fixed if legacy_fixed != NOT_GIVEN
46
+ end
47
+
48
+ "#{rut(min_rut: min_rut, fixed: fixed)}-#{dv}"
49
+ end
50
+
51
+ attr_reader :last_rut
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class ChuckNorris < Base
5
+ flexible :chuck_norris
6
+
7
+ class << self
8
+ # from: https://github.com/jenkinsci/chucknorris-plugin/blob/master/src/main/java/hudson/plugins/chucknorris/FactGenerator.java
9
+ def fact
10
+ fetch('chuck_norris.fact')
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,201 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Code < Base
5
+ flexible :code
6
+ class << self
7
+ # Generates a 10 digit NPI (National Provider Identifier
8
+ # issued to health care providers in the United States)
9
+ def npi
10
+ rand(10**10).to_s.rjust(10, '0')
11
+ end
12
+
13
+ # By default generates 10 sign isbn code in format 123456789-X
14
+ # You can pass 13 to generate new 13 sign code
15
+ def isbn(legacy_base = NOT_GIVEN, base: 10)
16
+ warn_for_deprecated_arguments do |keywords|
17
+ keywords << :base if legacy_base != NOT_GIVEN
18
+ end
19
+
20
+ base == 13 ? generate_base13_isbn : generate_base10_isbn
21
+ end
22
+
23
+ # By default generates 13 sign ean code in format 1234567890123
24
+ # You can pass 8 to generate ean8 code
25
+ def ean(legacy_base = NOT_GIVEN, base: 13)
26
+ warn_for_deprecated_arguments do |keywords|
27
+ keywords << :base if legacy_base != NOT_GIVEN
28
+ end
29
+
30
+ base == 8 ? generate_base8_ean : generate_base13_ean
31
+ end
32
+
33
+ def rut
34
+ value = Number.number(digits: 8).to_s
35
+ vd = rut_verificator_digit(value)
36
+ value << "-#{vd}"
37
+ end
38
+
39
+ # By default generates a Singaporean NRIC ID for someone
40
+ # who is born between the age of 18 and 65.
41
+ def nric(legacy_min_age = NOT_GIVEN, legacy_max_age = NOT_GIVEN, min_age: 18, max_age: 65)
42
+ warn_for_deprecated_arguments do |keywords|
43
+ keywords << :min_age if legacy_min_age != NOT_GIVEN
44
+ keywords << :max_age if legacy_max_age != NOT_GIVEN
45
+ end
46
+
47
+ birthyear = Date.birthday(min_age: min_age, max_age: max_age).year
48
+ prefix = birthyear < 2000 ? 'S' : 'T'
49
+ values = birthyear.to_s[-2..-1]
50
+ values << regexify(/\d{5}/)
51
+ check_alpha = generate_nric_check_alphabet(values, prefix)
52
+ "#{prefix}#{values}#{check_alpha}"
53
+ end
54
+
55
+ # Generate GSM modem, device or mobile phone 15 digit IMEI number.
56
+ def imei
57
+ generate_imei
58
+ end
59
+
60
+ # Retrieves a real Amazon ASIN code list taken from
61
+ # https://archive.org/details/asin_listing
62
+ def asin
63
+ fetch('code.asin')
64
+ end
65
+
66
+ # Generates Social Insurance Number issued in Canada
67
+ # https://en.wikipedia.org/wiki/Social_Insurance_Number
68
+ def sin
69
+ # 1 - province or temporary resident
70
+ # 2-8 - random numbers
71
+ # 9 - checksum
72
+
73
+ # 1st digit. 8,0 are not used
74
+ registry = Faker::Base.sample([1, 2, 3, 4, 5, 6, 7, 9]).to_s
75
+
76
+ # generate 2nd to 8th
77
+ partial = Array.new(7) { Faker::Config.random.rand(0..9) }.join
78
+
79
+ # Generate 9th digit
80
+ check_digit = generate_sin_check_digit(registry + partial + '0').to_s
81
+
82
+ registry + partial + check_digit
83
+ end
84
+
85
+ private
86
+
87
+ # Reporting body identifier
88
+ RBI = %w[01 10 30 33 35 44 45 49 50 51 52 53 54 86 91 98 99].freeze
89
+
90
+ def generate_imei
91
+ str = Array.new(15, 0)
92
+ sum = 0
93
+ t = 0
94
+ len_offset = 0
95
+ len = 15
96
+
97
+ # Fill in the first two values of the string based with the specified prefix.
98
+ # Reporting Body Identifier list: http://en.wikipedia.org/wiki/Reporting_Body_Identifier
99
+ arr = sample(RBI)
100
+ str[0] = arr[0].to_i
101
+ str[1] = arr[1].to_i
102
+ pos = 2
103
+
104
+ # Fill all the remaining numbers except for the last one with random values.
105
+ while pos < (len - 1)
106
+ str[pos] = rand(0..9)
107
+ pos += 1
108
+ end
109
+
110
+ # Calculate the Luhn checksum of the values thus far
111
+ len_offset = (len + 1) % 2
112
+ (0..(len - 1)).each do |position|
113
+ if (position + len_offset).odd?
114
+ t = str[position] * 2
115
+
116
+ t -= 9 if t > 9
117
+
118
+ sum += t
119
+ else
120
+ sum += str[position]
121
+ end
122
+ end
123
+
124
+ # Choose the last digit so that it causes the entire string to pass the checksum.
125
+ str[len - 1] = (10 - (sum % 10)) % 10
126
+
127
+ # Output the IMEI value.
128
+ str.join('')
129
+ end
130
+
131
+ def generate_base10_isbn
132
+ values = regexify(/\d{9}/)
133
+ remainder = sum(values) { |value, index| (index + 1) * value.to_i } % 11
134
+ values << "-#{remainder == 10 ? 'X' : remainder}"
135
+ end
136
+
137
+ def generate_base13_isbn
138
+ values = regexify(/\d{12}/)
139
+ remainder = sum(values) { |value, index| index.even? ? value.to_i : value.to_i * 3 } % 10
140
+ values << "-#{((10 - remainder) % 10)}"
141
+ end
142
+
143
+ def sum(values)
144
+ values.split(//).each_with_index.inject(0) do |sum, (value, index)|
145
+ sum + yield(value, index)
146
+ end
147
+ end
148
+
149
+ def generate_base8_ean
150
+ values = regexify(/\d{7}/)
151
+ check_digit = 10 - values.split(//).each_with_index.inject(0) { |s, (v, i)| s + v.to_i * EAN_CHECK_DIGIT8[i] } % 10
152
+ values << (check_digit == 10 ? 0 : check_digit).to_s
153
+ end
154
+
155
+ def generate_base13_ean
156
+ values = regexify(/\d{12}/)
157
+ check_digit = 10 - values.split(//).each_with_index.inject(0) { |s, (v, i)| s + v.to_i * EAN_CHECK_DIGIT13[i] } % 10
158
+ values << (check_digit == 10 ? 0 : check_digit).to_s
159
+ end
160
+
161
+ EAN_CHECK_DIGIT8 = [3, 1, 3, 1, 3, 1, 3].freeze
162
+ EAN_CHECK_DIGIT13 = [1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3].freeze
163
+
164
+ def rut_verificator_digit(rut)
165
+ total = rut.to_s.rjust(8, '0').split(//).zip(%w[3 2 7 6 5 4 3 2]).collect { |a, b| a.to_i * b.to_i }.inject(:+)
166
+ (11 - total % 11).to_s.gsub(/10/, 'k').gsub(/11/, '0')
167
+ end
168
+
169
+ def generate_nric_check_alphabet(values, prefix)
170
+ weight = %w[2 7 6 5 4 3 2]
171
+ total = values.split(//).zip(weight).collect { |a, b| a.to_i * b.to_i }.inject(:+)
172
+ total += 4 if prefix == 'T'
173
+ %w[A B C D E F G H I Z J][10 - total % 11]
174
+ end
175
+
176
+ def generate_sin_check_digit(digits)
177
+ # Fast Luhn checksum code from luhn.js:
178
+ # https://gist.github.com/ShirtlessKirk/2134376
179
+
180
+ len = 9
181
+ mul = 0
182
+
183
+ luhn_arr = [
184
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
185
+ [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
186
+ ]
187
+ sum = 0
188
+
189
+ while len.positive?
190
+ len -= 1
191
+ num = digits[len].to_i
192
+ sum += luhn_arr[mul][num]
193
+ mul ^= 1
194
+ end
195
+
196
+ checksum = sum % 10
197
+ checksum.zero? ? checksum : (10 - checksum)
198
+ end
199
+ end
200
+ end
201
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Coffee < Base
5
+ flexible :coffee
6
+
7
+ class << self
8
+ def blend_name
9
+ parse('coffee.blend_name')
10
+ end
11
+
12
+ def origin
13
+ country = fetch('coffee.country')
14
+ region = fetch("coffee.regions.#{search_format(country)}")
15
+ "#{region}, #{country}"
16
+ end
17
+
18
+ def variety
19
+ fetch('coffee.variety')
20
+ end
21
+
22
+ def notes
23
+ parse('coffee.notes')
24
+ end
25
+
26
+ def intensifier
27
+ fetch('coffee.intensifier')
28
+ end
29
+
30
+ private
31
+
32
+ def search_format(key)
33
+ key.split.length > 1 ? key.split.join('_').downcase : key.downcase
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Coin < Base
5
+ class << self
6
+ def name
7
+ fetch('currency.name')
8
+ end
9
+
10
+ def flip
11
+ fetch('coin.flip')
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Color < Base
5
+ class << self
6
+ def hex_color
7
+ format('#%06x', (rand * 0xffffff))
8
+ end
9
+
10
+ def color_name
11
+ fetch('color.name')
12
+ end
13
+
14
+ def single_rgb_color
15
+ sample((0..255).to_a)
16
+ end
17
+
18
+ def rgb_color
19
+ Array.new(3) { single_rgb_color }
20
+ end
21
+
22
+ # returns [hue, saturation, lightness]
23
+ def hsl_color
24
+ [sample((0..360).to_a), rand.round(2), rand.round(2)]
25
+ end
26
+
27
+ def hsla_color
28
+ hsl_color << rand.round(1)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Commerce < Base
5
+ class << self
6
+ def color
7
+ fetch('color.name')
8
+ end
9
+
10
+ def promotion_code(legacy_digits = NOT_GIVEN, digits: 6)
11
+ warn_for_deprecated_arguments do |keywords|
12
+ keywords << :digits if legacy_digits != NOT_GIVEN
13
+ end
14
+
15
+ [
16
+ fetch('commerce.promotion_code.adjective'),
17
+ fetch('commerce.promotion_code.noun'),
18
+ Faker::Number.number(digits: digits)
19
+ ].join
20
+ end
21
+
22
+ def department(legacy_max = NOT_GIVEN, legacy_fixed_amount = NOT_GIVEN, max: 3, fixed_amount: false)
23
+ warn_for_deprecated_arguments do |keywords|
24
+ keywords << :max if legacy_max != NOT_GIVEN
25
+ keywords << :fixed_amount if legacy_fixed_amount != NOT_GIVEN
26
+ end
27
+
28
+ num = max if fixed_amount
29
+ num ||= 1 + rand(max)
30
+
31
+ categories = categories(num)
32
+
33
+ return merge_categories(categories) if num > 1
34
+
35
+ categories[0]
36
+ end
37
+
38
+ def product_name
39
+ "#{fetch('commerce.product_name.adjective')} #{fetch('commerce.product_name.material')} #{fetch('commerce.product_name.product')}"
40
+ end
41
+
42
+ def material
43
+ fetch('commerce.product_name.material')
44
+ end
45
+
46
+ def price(legacy_range = NOT_GIVEN, legacy_as_string = NOT_GIVEN, range: 0..100.0, as_string: false)
47
+ warn_for_deprecated_arguments do |keywords|
48
+ keywords << :range if legacy_range != NOT_GIVEN
49
+ keywords << :as_string if legacy_as_string != NOT_GIVEN
50
+ end
51
+
52
+ price = (rand(range) * 100).floor / 100.0
53
+ if as_string
54
+ price_parts = price.to_s.split('.')
55
+ price = price_parts[0] + '.' + price_parts[-1].ljust(2, '0')
56
+ end
57
+ price
58
+ end
59
+
60
+ private
61
+
62
+ def categories(num)
63
+ categories = []
64
+ while categories.length < num
65
+ category = fetch('commerce.department')
66
+ categories << category unless categories.include?(category)
67
+ end
68
+
69
+ categories
70
+ end
71
+
72
+ def merge_categories(categories)
73
+ separator = fetch('separator')
74
+ comma_separated = categories.slice!(0...-1).join(', ')
75
+
76
+ [comma_separated, categories[0]].join(separator)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,264 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Company < Base
5
+ flexible :company
6
+
7
+ class << self
8
+ def name
9
+ parse('company.name')
10
+ end
11
+
12
+ def suffix
13
+ fetch('company.suffix')
14
+ end
15
+
16
+ def industry
17
+ fetch('company.industry')
18
+ end
19
+
20
+ # Generate a buzzword-laden catch phrase.
21
+ def catch_phrase
22
+ translate('faker.company.buzzwords').collect { |list| sample(list) }.join(' ')
23
+ end
24
+
25
+ def buzzword
26
+ sample(translate('faker.company.buzzwords').flatten)
27
+ end
28
+
29
+ # When a straight answer won't do, BS to the rescue!
30
+ def bs
31
+ translate('faker.company.bs').collect { |list| sample(list) }.join(' ')
32
+ end
33
+
34
+ def ein
35
+ format('%09d', rand(10**9)).gsub(/(\d{2})(\d{7})/, '\\1-\\2')
36
+ end
37
+
38
+ def duns_number
39
+ format('%09d', rand(10**9)).gsub(/(\d{2})(\d{3})(\d{4})/, '\\1-\\2-\\3')
40
+ end
41
+
42
+ # Get a random company logo url in PNG format.
43
+ def logo
44
+ rand_num = rand(1..13)
45
+ "https://pigment.github.io/fake-logos/logos/medium/color/#{rand_num}.png"
46
+ end
47
+
48
+ def type
49
+ fetch('company.type')
50
+ end
51
+
52
+ def profession
53
+ fetch('company.profession')
54
+ end
55
+
56
+ # rubocop:disable Style/AsciiComments
57
+ # Get a random Spanish organization number. See more here https://es.wikipedia.org/wiki/Número_de_identificación_fiscal
58
+ # rubocop:enable Style/AsciiComments
59
+ def spanish_organisation_number
60
+ # Valid leading character: A, B, C, D, E, F, G, H, J, N, P, Q, R, S, U, V, W
61
+ # 7 digit numbers
62
+ letters = %w[A B C D E F G H J N P Q R S U V W]
63
+ base = [sample(letters), format('%07d', rand(10**7))].join
64
+ base
65
+ end
66
+
67
+ # Get a random Swedish organization number. See more here https://sv.wikipedia.org/wiki/Organisationsnummer
68
+ def swedish_organisation_number
69
+ # Valid leading digit: 1, 2, 3, 5, 6, 7, 8, 9
70
+ # Valid third digit: >= 2
71
+ # Last digit is a control digit
72
+ base = [sample([1, 2, 3, 5, 6, 7, 8, 9]), sample((0..9).to_a), sample((2..9).to_a), format('%06d', rand(10**6))].join
73
+ base + luhn_algorithm(base).to_s
74
+ end
75
+
76
+ def czech_organisation_number
77
+ sum = 0
78
+ base = []
79
+ [8, 7, 6, 5, 4, 3, 2].each do |weight|
80
+ base << sample((0..9).to_a)
81
+ sum += (weight * base.last)
82
+ end
83
+ base << (11 - (sum % 11)) % 10
84
+ base.join
85
+ end
86
+
87
+ # Get a random French SIREN number. See more here https://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27identification_du_r%C3%A9pertoire_des_entreprises
88
+ def french_siren_number
89
+ base = (1..8).map { rand(10) }.join
90
+ base + luhn_algorithm(base).to_s
91
+ end
92
+
93
+ def french_siret_number
94
+ location = rand(100).to_s.rjust(4, '0')
95
+ org_no = french_siren_number + location
96
+ org_no + luhn_algorithm(org_no).to_s
97
+ end
98
+
99
+ # Get a random Norwegian organization number. Info: https://www.brreg.no/om-oss/samfunnsoppdraget-vart/registera-vare/einingsregisteret/organisasjonsnummeret/
100
+ def norwegian_organisation_number
101
+ # Valid leading digit: 8, 9
102
+ mod11_check = nil
103
+ while mod11_check.nil?
104
+ base = [sample([8, 9]), format('%07d', rand(10**7))].join
105
+ mod11_check = mod11(base)
106
+ end
107
+ base + mod11_check.to_s
108
+ end
109
+
110
+ def australian_business_number
111
+ base = format('%09d', rand(10**9))
112
+ abn = "00#{base}"
113
+
114
+ (99 - (abn_checksum(abn) % 89)).to_s + base
115
+ end
116
+
117
+ # Get a random Polish taxpayer identification number More info https://pl.wikipedia.org/wiki/NIP
118
+ def polish_taxpayer_identification_number
119
+ result = []
120
+ weights = [6, 5, 7, 2, 3, 4, 5, 6, 7]
121
+ loop do
122
+ result = Array.new(3) { rand(1..9) } + Array.new(7) { rand(10) }
123
+ break if (weight_sum(result, weights) % 11) == result[9]
124
+ end
125
+ result.join('')
126
+ end
127
+
128
+ # Get a random Polish register of national economy number. More info https://pl.wikipedia.org/wiki/REGON
129
+ def polish_register_of_national_economy(legacy_length = NOT_GIVEN, length: 9)
130
+ warn_for_deprecated_arguments do |keywords|
131
+ keywords << :length if legacy_length != NOT_GIVEN
132
+ end
133
+
134
+ raise ArgumentError, 'Length should be 9 or 14' unless [9, 14].include? length
135
+
136
+ random_digits = []
137
+ loop do
138
+ random_digits = Array.new(length) { rand(10) }
139
+ break if collect_regon_sum(random_digits) == random_digits.last
140
+ end
141
+ random_digits.join('')
142
+ end
143
+
144
+ def south_african_pty_ltd_registration_number
145
+ regexify(/\d{4}\/\d{4,10}\/07/)
146
+ end
147
+
148
+ def south_african_close_corporation_registration_number
149
+ regexify(/(CK\d{2}|\d{4})\/\d{4,10}\/23/)
150
+ end
151
+
152
+ def south_african_listed_company_registration_number
153
+ regexify(/\d{4}\/\d{4,10}\/06/)
154
+ end
155
+
156
+ def south_african_trust_registration_number
157
+ regexify(/IT\d{2,4}\/\d{2,10}/)
158
+ end
159
+
160
+ def brazilian_company_number(legacy_formatted = NOT_GIVEN, formatted: false)
161
+ warn_for_deprecated_arguments do |keywords|
162
+ keywords << :formatted if legacy_formatted != NOT_GIVEN
163
+ end
164
+
165
+ digits = Array.new(8) { Faker::Number.digit.to_i } + [0, 0, 0, Faker::Number.non_zero_digit.to_i]
166
+
167
+ factors = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 6].cycle
168
+
169
+ 2.times do
170
+ checksum = digits.inject(0) { |acc, digit| acc + digit * factors.next } % 11
171
+ digits << (checksum < 2 ? 0 : 11 - checksum)
172
+ end
173
+
174
+ number = digits.join
175
+
176
+ formatted ? format('%s.%s.%s/%s-%s', *number.scan(/(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})/).flatten) : number
177
+ end
178
+
179
+ def sic_code
180
+ fetch('company.sic_code')
181
+ end
182
+
183
+ private
184
+
185
+ # Mod11 functionality from https://github.com/badmanski/mod11/blob/master/lib/mod11.rb
186
+ def mod11(number)
187
+ weight = [2, 3, 4, 5, 6, 7,
188
+ 2, 3, 4, 5, 6, 7,
189
+ 2, 3, 4, 5, 6, 7]
190
+
191
+ sum = 0
192
+
193
+ number.to_s.reverse.chars.each_with_index do |char, i|
194
+ sum += char.to_i * weight[i]
195
+ end
196
+
197
+ remainder = sum % 11
198
+
199
+ case remainder
200
+ when 0 then remainder
201
+ when 1 then nil
202
+ else 11 - remainder
203
+ end
204
+ end
205
+
206
+ def luhn_algorithm(number)
207
+ multiplications = []
208
+
209
+ number.to_s.reverse.split(//).each_with_index do |digit, i|
210
+ multiplications << if i.even?
211
+ digit.to_i * 2
212
+ else
213
+ digit.to_i
214
+ end
215
+ end
216
+
217
+ sum = 0
218
+
219
+ multiplications.each do |num|
220
+ num.to_s.each_byte do |character|
221
+ sum += character.chr.to_i
222
+ end
223
+ end
224
+
225
+ control_digit = if (sum % 10).zero?
226
+ 0
227
+ else
228
+ (sum / 10 + 1) * 10 - sum
229
+ end
230
+
231
+ control_digit
232
+ end
233
+
234
+ def abn_checksum(abn)
235
+ abn_weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
236
+ sum = 0
237
+
238
+ abn_weights.each_with_index do |weight, i|
239
+ sum += weight * abn[i].to_i
240
+ end
241
+
242
+ sum
243
+ end
244
+
245
+ def collect_regon_sum(array)
246
+ weights = if array.size == 9
247
+ [8, 9, 2, 3, 4, 5, 6, 7]
248
+ else
249
+ [2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8]
250
+ end
251
+ sum = weight_sum(array, weights) % 11
252
+ sum == 10 ? 0 : sum
253
+ end
254
+
255
+ def weight_sum(array, weights)
256
+ sum = 0
257
+ (0..weights.size - 1).each do |index|
258
+ sum += (array[index] * weights[index])
259
+ end
260
+ sum
261
+ end
262
+ end
263
+ end
264
+ end