faker 1.8.7 → 2.22.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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +1612 -6
- data/History.md +4 -4
- data/License.txt +2 -2
- data/README.md +323 -132
- data/bin/faker +5 -0
- data/lib/faker/blockchain/aeternity.rb +70 -0
- data/lib/faker/blockchain/bitcoin.rb +60 -0
- data/lib/faker/blockchain/ethereum.rb +26 -0
- data/lib/faker/blockchain/tezos.rb +135 -0
- data/lib/faker/books/book.rb +61 -0
- data/lib/faker/books/culture_series.rb +83 -0
- data/lib/faker/books/dune.rb +132 -0
- data/lib/faker/books/lovecraft.rb +280 -0
- data/lib/faker/books/the_kingkiller_chronicle.rb +61 -0
- data/lib/faker/creature/animal.rb +22 -0
- data/lib/faker/creature/bird.rb +203 -0
- data/lib/faker/creature/cat.rb +50 -0
- data/lib/faker/creature/dog.rb +115 -0
- data/lib/faker/creature/horse.rb +37 -0
- data/lib/faker/default/address.rb +368 -0
- data/lib/faker/default/adjective.rb +35 -0
- data/lib/faker/default/alphanumeric.rb +73 -0
- data/lib/faker/default/ancient.rb +59 -0
- data/lib/faker/default/app.rb +77 -0
- data/lib/faker/default/appliance.rb +33 -0
- data/lib/faker/default/artist.rb +20 -0
- data/lib/faker/default/avatar.rb +60 -0
- data/lib/faker/default/bank.rb +207 -0
- data/lib/faker/default/barcode.rb +165 -0
- data/lib/faker/default/beer.rb +113 -0
- data/lib/faker/default/blood.rb +48 -0
- data/lib/faker/default/boolean.rb +26 -0
- data/lib/faker/default/bossa_nova.rb +33 -0
- data/lib/faker/default/business.rb +50 -0
- data/lib/faker/default/camera.rb +46 -0
- data/lib/faker/default/cannabis.rb +135 -0
- data/lib/faker/default/chile_rut.rb +98 -0
- data/lib/faker/default/chuck_norris.rb +25 -0
- data/lib/faker/default/code.rb +282 -0
- data/lib/faker/default/coffee.rb +82 -0
- data/lib/faker/default/coin.rb +33 -0
- data/lib/faker/default/color.rb +79 -0
- data/lib/faker/default/commerce.rb +171 -0
- data/lib/faker/default/company.rb +579 -0
- data/lib/faker/default/compass.rb +202 -0
- data/lib/faker/default/computer.rb +63 -0
- data/lib/faker/default/construction.rb +83 -0
- data/lib/faker/default/cosmere.rb +138 -0
- data/lib/faker/default/crypto.rb +61 -0
- data/lib/faker/default/crypto_coin.rb +94 -0
- data/lib/faker/default/currency.rb +46 -0
- data/lib/faker/default/date.rb +186 -0
- data/lib/faker/default/dc_comics.rb +70 -0
- data/lib/faker/default/demographic.rb +98 -0
- data/lib/faker/default/dessert.rb +48 -0
- data/lib/faker/default/device.rb +85 -0
- data/lib/faker/default/driving_licence.rb +131 -0
- data/lib/faker/default/drone.rb +332 -0
- data/lib/faker/default/educator.rb +102 -0
- data/lib/faker/default/electrical_components.rb +48 -0
- data/lib/faker/default/emotion.rb +33 -0
- data/lib/faker/default/esport.rb +72 -0
- data/lib/faker/default/file.rb +100 -0
- data/lib/faker/default/fillmurray.rb +45 -0
- data/lib/faker/default/finance.rb +102 -0
- data/lib/faker/default/food.rb +126 -0
- data/lib/faker/default/funny_name.rb +90 -0
- data/lib/faker/default/gender.rb +46 -0
- data/lib/faker/default/greek_philosophers.rb +33 -0
- data/lib/faker/default/hacker.rb +103 -0
- data/lib/faker/default/hipster.rb +194 -0
- data/lib/faker/default/hobby.rb +22 -0
- data/lib/faker/default/house.rb +33 -0
- data/lib/faker/default/id_number.rb +313 -0
- data/lib/faker/default/industry_segments.rb +61 -0
- data/lib/faker/default/internet.rb +625 -0
- data/lib/faker/default/internet_http.rb +48 -0
- data/lib/faker/default/invoice.rb +136 -0
- data/lib/faker/default/job.rb +61 -0
- data/lib/faker/default/json.rb +143 -0
- data/lib/faker/default/kpop.rb +85 -0
- data/lib/faker/default/lorem.rb +302 -0
- data/lib/faker/default/lorem_flickr.rb +138 -0
- data/lib/faker/default/lorem_pixel.rb +70 -0
- data/lib/faker/default/markdown.rb +175 -0
- data/lib/faker/default/marketing.rb +22 -0
- data/lib/faker/default/measurement.rb +207 -0
- data/lib/faker/default/military.rb +98 -0
- data/lib/faker/default/mountain.rb +33 -0
- data/lib/faker/default/name.rb +156 -0
- data/lib/faker/default/nation.rb +73 -0
- data/lib/faker/default/nato_phonetic_alphabet.rb +20 -0
- data/lib/faker/default/nhs.rb +57 -0
- data/lib/faker/default/number.rb +289 -0
- data/lib/faker/default/omniauth.rb +505 -0
- data/lib/faker/default/phone_number.rb +137 -0
- data/lib/faker/default/placeholdit.rb +63 -0
- data/lib/faker/default/programming_language.rb +33 -0
- data/lib/faker/default/relationship.rb +91 -0
- data/lib/faker/default/religion.rb +6 -0
- data/lib/faker/default/restaurant.rb +63 -0
- data/lib/faker/default/science.rb +154 -0
- data/lib/faker/default/slack_emoji.rb +124 -0
- data/lib/faker/default/source.rb +76 -0
- data/lib/faker/default/south_africa.rb +141 -0
- data/lib/faker/default/space.rb +191 -0
- data/lib/faker/default/string.rb +63 -0
- data/lib/faker/default/stripe.rb +142 -0
- data/lib/faker/default/subscription.rb +70 -0
- data/lib/faker/default/superhero.rb +72 -0
- data/lib/faker/default/tea.rb +41 -0
- data/lib/faker/default/team.rb +74 -0
- data/lib/faker/default/time.rb +177 -0
- data/lib/faker/default/twitter.rb +223 -0
- data/lib/faker/default/types.rb +182 -0
- data/lib/faker/default/university.rb +75 -0
- data/lib/faker/default/vehicle.rb +342 -0
- data/lib/faker/default/verb.rb +72 -0
- data/lib/faker/default/world_cup.rb +86 -0
- data/lib/faker/fantasy/tolkien.rb +67 -0
- data/lib/faker/games/clash_of_clans.rb +48 -0
- data/lib/faker/games/control.rb +113 -0
- data/lib/faker/games/dnd.rb +136 -0
- data/lib/faker/games/dota.rb +93 -0
- data/lib/faker/games/elder_scrolls.rb +139 -0
- data/lib/faker/games/fallout.rb +62 -0
- data/lib/faker/games/game.rb +48 -0
- data/lib/faker/games/half_life.rb +48 -0
- data/lib/faker/games/heroes.rb +61 -0
- data/lib/faker/games/heroes_of_the_storm.rb +72 -0
- data/lib/faker/games/league_of_legends.rb +87 -0
- data/lib/faker/games/minecraft.rb +113 -0
- data/lib/faker/games/myst.rb +74 -0
- data/lib/faker/games/overwatch.rb +48 -0
- data/lib/faker/games/pokemon.rb +48 -0
- data/lib/faker/games/sonic_the_hedgehog.rb +48 -0
- data/lib/faker/games/street_fighter.rb +61 -0
- data/lib/faker/games/super_mario.rb +48 -0
- data/lib/faker/games/super_smash_bros.rb +35 -0
- data/lib/faker/games/touhou.rb +75 -0
- data/lib/faker/games/warhammer_fantasy.rb +74 -0
- data/lib/faker/games/witcher.rb +126 -0
- data/lib/faker/games/world_of_warcraft.rb +60 -0
- data/lib/faker/games/zelda.rb +62 -0
- data/lib/faker/japanese_media/conan.rb +48 -0
- data/lib/faker/japanese_media/doraemon.rb +48 -0
- data/lib/faker/japanese_media/dragon_ball.rb +48 -0
- data/lib/faker/japanese_media/fullmetal_alchemist_brotherhood.rb +48 -0
- data/lib/faker/japanese_media/kamen_rider.rb +102 -0
- data/lib/faker/japanese_media/naruto.rb +61 -0
- data/lib/faker/japanese_media/one_piece.rb +87 -0
- data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
- data/lib/faker/japanese_media/sword_art_online.rb +61 -0
- data/lib/faker/locations/australia.rb +47 -0
- data/lib/faker/movies/back_to_the_future.rb +49 -0
- data/lib/faker/movies/departed.rb +49 -0
- data/lib/faker/movies/ghostbusters.rb +49 -0
- data/lib/faker/movies/harry_potter.rb +87 -0
- data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +106 -0
- data/lib/faker/movies/hobbit.rb +62 -0
- data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
- data/lib/faker/movies/lebowski.rb +48 -0
- data/lib/faker/movies/lord_of_the_rings.rb +49 -0
- data/lib/faker/movies/movie.rb +33 -0
- data/lib/faker/movies/princess_bride.rb +36 -0
- data/lib/faker/movies/room.rb +63 -0
- data/lib/faker/movies/star_wars.rb +273 -0
- data/lib/faker/movies/tron.rb +161 -0
- data/lib/faker/movies/v_for_vendetta.rb +50 -0
- data/lib/faker/music/grateful_dead.rb +37 -0
- data/lib/faker/music/hiphop.rb +48 -0
- data/lib/faker/music/music.rb +145 -0
- data/lib/faker/music/opera.rb +298 -0
- data/lib/faker/music/pearl_jam.rb +50 -0
- data/lib/faker/music/phish.rb +48 -0
- data/lib/faker/music/prince.rb +64 -0
- data/lib/faker/music/rock_band.rb +34 -0
- data/lib/faker/music/rush.rb +37 -0
- data/lib/faker/music/show.rb +49 -0
- data/lib/faker/music/umphreys_mcgee.rb +22 -0
- data/lib/faker/quotes/chiquito.rb +80 -0
- data/lib/faker/quotes/quote.rb +111 -0
- data/lib/faker/quotes/rajnikanth.rb +27 -0
- data/lib/faker/quotes/shakespeare.rb +111 -0
- data/lib/faker/religion/bible.rb +50 -0
- data/lib/faker/sports/basketball.rb +61 -0
- data/lib/faker/sports/football.rb +74 -0
- data/lib/faker/sports/mountaineering.rb +22 -0
- data/lib/faker/sports/volleyball.rb +74 -0
- data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +37 -0
- data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
- data/lib/faker/tv_shows/bojack_horseman.rb +51 -0
- data/lib/faker/tv_shows/breaking_bad.rb +37 -0
- data/lib/faker/tv_shows/brooklyn_nine_nine.rb +38 -0
- data/lib/faker/tv_shows/buffy.rb +89 -0
- data/lib/faker/tv_shows/community.rb +38 -0
- data/lib/faker/tv_shows/dr_who.rb +115 -0
- data/lib/faker/tv_shows/dumb_and_dumber.rb +51 -0
- data/lib/faker/tv_shows/family_guy.rb +51 -0
- data/lib/faker/tv_shows/final_space.rb +51 -0
- data/lib/faker/tv_shows/friends.rb +50 -0
- data/lib/faker/tv_shows/futurama.rb +65 -0
- data/lib/faker/tv_shows/game_of_thrones.rb +77 -0
- data/lib/faker/tv_shows/hey_arnold.rb +50 -0
- data/lib/faker/tv_shows/how_i_met_your_mother.rb +64 -0
- data/lib/faker/tv_shows/michael_scott.rb +23 -0
- data/lib/faker/tv_shows/new_girl.rb +38 -0
- data/lib/faker/tv_shows/parks_and_rec.rb +37 -0
- data/lib/faker/tv_shows/rick_and_morty.rb +51 -0
- data/lib/faker/tv_shows/ru_paul.rb +37 -0
- data/lib/faker/tv_shows/seinfeld.rb +51 -0
- data/lib/faker/tv_shows/silicon_valley.rb +118 -0
- data/lib/faker/tv_shows/simpsons.rb +65 -0
- data/lib/faker/tv_shows/south_park.rb +38 -0
- data/lib/faker/tv_shows/star_trek.rb +63 -0
- data/lib/faker/tv_shows/stargate.rb +51 -0
- data/lib/faker/tv_shows/stranger_things.rb +38 -0
- data/lib/faker/tv_shows/suits.rb +37 -0
- data/lib/faker/tv_shows/supernatural.rb +48 -0
- data/lib/faker/tv_shows/the_expanse.rb +63 -0
- data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +64 -0
- data/lib/faker/tv_shows/the_it_crowd.rb +64 -0
- data/lib/faker/tv_shows/the_office.rb +37 -0
- data/lib/faker/tv_shows/the_thick_of_it.rb +51 -0
- data/lib/faker/tv_shows/twin_peaks.rb +51 -0
- data/lib/faker/tv_shows/venture_bros.rb +65 -0
- data/lib/faker/version.rb +4 -2
- data/lib/faker.rb +150 -61
- data/lib/helpers/base58.rb +22 -0
- data/lib/helpers/char.rb +31 -35
- data/lib/helpers/unique_generator.rb +28 -2
- data/lib/locales/README.md +8 -9
- data/lib/locales/ar.yml +106 -0
- data/lib/locales/bg.yml +5 -2
- data/lib/locales/ca-CAT.yml +1 -1
- data/lib/locales/ca.yml +2 -4
- data/lib/locales/da-DK.yml +10 -6
- data/lib/locales/de-AT.yml +14 -5
- data/lib/locales/de-CH.yml +1696 -1
- data/lib/locales/de.yml +26 -12
- data/lib/locales/ee.yml +61 -0
- data/lib/locales/en/address.yml +500 -3
- data/lib/locales/en/adjective.yml +179 -0
- data/lib/locales/en/animal.yml +6 -0
- data/lib/locales/en/appliance.yml +5 -0
- data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
- data/lib/locales/en/australia.yml +107 -0
- data/lib/locales/en/bank.yml +275 -60
- data/lib/locales/en/barcode.yml +24 -0
- data/lib/locales/en/basketball.yml +99 -0
- data/lib/locales/en/beer.yml +2 -1
- data/lib/locales/en/bible.yml +90 -0
- data/lib/locales/en/big_bang_theory.yml +38 -0
- data/lib/locales/en/bird.yml +1281 -0
- data/lib/locales/en/blood.yml +13 -0
- data/lib/locales/en/bojack_horseman.yml +6 -0
- data/lib/locales/en/book.yml +487 -3
- data/lib/locales/en/brooklyn_nine_nine.yml +35 -0
- data/lib/locales/en/buffy.yml +260 -0
- data/lib/locales/en/camera.yml +611 -0
- data/lib/locales/en/cannabis.yml +13 -0
- data/lib/locales/en/cat.yml +5 -4
- data/lib/locales/en/chiquito.yml +64 -0
- data/lib/locales/en/clash_of_clan.yml +101 -0
- data/lib/locales/en/coffee.yml +1 -1
- data/lib/locales/en/coin.yml +6 -0
- data/lib/locales/en/color.yml +1 -1
- data/lib/locales/en/commerce.yml +17 -0
- data/lib/locales/en/community.yml +33 -0
- data/lib/locales/en/company.yml +3 -2
- data/lib/locales/en/computer.yml +36 -0
- data/lib/locales/en/conan.yml +171 -0
- data/lib/locales/en/construction.yml +425 -0
- data/lib/locales/en/control.yml +247 -0
- data/lib/locales/en/cosmere.yml +57 -0
- data/lib/locales/en/crypto_coin.yml +25 -0
- data/lib/locales/en/culture_series.yml +307 -0
- data/lib/locales/en/currency.yml +6 -0
- data/lib/locales/en/dc_comics.yml +52 -0
- data/lib/locales/en/demographic.yml +218 -5
- data/lib/locales/en/departed.yml +50 -0
- data/lib/locales/en/dessert.yml +3 -3
- data/lib/locales/en/device.yml +115 -0
- data/lib/locales/en/dnd.yml +451 -0
- data/lib/locales/en/dog.yml +9 -9
- data/lib/locales/en/doraemon.yml +286 -0
- data/lib/locales/en/dota.yml +693 -0
- data/lib/locales/en/dr_who.yml +6 -2
- data/lib/locales/en/dragon_ball.yml +243 -1
- data/lib/locales/en/driving_license.yml +181 -0
- data/lib/locales/en/drone.yml +95 -0
- data/lib/locales/en/dumb_and_dumber.yml +1 -1
- data/lib/locales/en/dune.yml +270 -131
- data/lib/locales/en/educator.yml +76 -6
- data/lib/locales/en/elder_scrolls.yml +583 -5
- data/lib/locales/en/electrical_components.yml +6 -0
- data/lib/locales/en/emotion.yml +480 -0
- data/lib/locales/en/esport.yml +5 -5
- data/lib/locales/en/fallout.yml +313 -134
- data/lib/locales/en/final_space.yml +37 -0
- data/lib/locales/en/finance.yml +137 -0
- data/lib/locales/en/fma_brotherhood.yml +78 -0
- data/lib/locales/en/food.yml +1054 -6
- data/lib/locales/en/football.yml +8 -0
- data/lib/locales/en/fresh_prince_of_bel_air.yml +1 -1
- data/lib/locales/en/friends.yml +3 -3
- data/lib/locales/en/futurama.yml +344 -0
- data/lib/locales/en/game.yml +294 -0
- data/lib/locales/en/gender.yml +6 -0
- data/lib/locales/en/ghostbusters.yml +91 -0
- data/lib/locales/en/grateful_dead.yml +48 -0
- data/lib/locales/en/greek_philosophers.yml +26 -0
- data/lib/locales/en/half_life.yml +88 -0
- data/lib/locales/en/harry_potter.yml +2 -1
- data/lib/locales/en/heroes.yml +411 -0
- data/lib/locales/en/heroes_of_the_storm.yml +134 -0
- data/lib/locales/en/hobby.yml +171 -0
- data/lib/locales/en/horse.yml +6 -0
- data/lib/locales/en/house.yml +5 -0
- data/lib/locales/en/how_to_train_your_dragon.yml +174 -0
- data/lib/locales/en/industry_segments.yml +7 -0
- data/lib/locales/en/internet.yml +137 -3
- data/lib/locales/en/invoice.yml +6 -0
- data/lib/locales/en/jack_handey.yml +54 -0
- data/lib/locales/en/job.yml +2 -2
- data/lib/locales/en/kamen_rider.yml +452 -0
- data/lib/locales/en/kpop.yml +8 -8
- data/lib/locales/en/league_of_legends.yml +287 -7
- data/lib/locales/en/lebowski.yml +1 -1
- data/lib/locales/en/lorem.yml +6 -0
- data/lib/locales/en/lovecraft.yml +76 -6
- data/lib/locales/en/marketing.yml +4 -0
- data/lib/locales/en/michael_scott.yml +45 -0
- data/lib/locales/en/military.yml +182 -0
- data/lib/locales/en/minecraft.yml +663 -0
- data/lib/locales/en/mountain.yml +171 -0
- data/lib/locales/en/mountaineering.yml +14 -0
- data/lib/locales/en/movie.yml +194 -2
- data/lib/locales/en/music.yml +461 -1
- data/lib/locales/en/myst.yml +104 -0
- data/lib/locales/en/name.yml +15 -14
- data/lib/locales/en/naruto.yml +230 -0
- data/lib/locales/en/nation.yml +11 -0
- data/lib/locales/en/nato_phonetic_alphabet.yml +4 -0
- data/lib/locales/en/new_girl.yml +40 -0
- data/lib/locales/en/one_piece.yml +2 -2
- data/lib/locales/en/opera.yml +340 -0
- data/lib/locales/en/overwatch.yml +2652 -33
- data/lib/locales/en/parks_and_rec.yml +7 -0
- data/lib/locales/en/pearl_jam.yml +213 -0
- data/lib/locales/en/phish.yml +395 -0
- data/lib/locales/en/phone_number.yml +2 -1
- data/lib/locales/en/pokemon.yml +419 -5
- data/lib/locales/en/prince.yml +227 -0
- data/lib/locales/en/princess_bride.yml +5 -0
- data/lib/locales/en/programming_language.yml +2 -1
- data/lib/locales/en/quote.yml +695 -0
- data/lib/locales/en/rajnikanth.yml +77 -0
- data/lib/locales/en/relationship.yml +10 -0
- data/lib/locales/en/restaurant.yml +129 -0
- data/lib/locales/en/rock_band.yml +1 -0
- data/lib/locales/en/room.yml +68 -0
- data/lib/locales/en/rupaul.yml +51 -21
- data/lib/locales/en/rush.yml +32 -0
- data/lib/locales/en/science.yml +481 -2
- data/lib/locales/en/seinfeld.yml +2 -1
- data/lib/locales/en/shakespeare.yml +23 -26
- data/lib/locales/en/show.yml +597 -0
- data/lib/locales/en/silicon_valley.yml +1 -0
- data/lib/locales/en/simpsons.yml +668 -0
- data/lib/locales/en/sonic_the_hedgehog.yml +410 -0
- data/lib/locales/en/source.yml +46 -0
- data/lib/locales/en/south_park.yml +5 -0
- data/lib/locales/en/space.yml +3 -2
- data/lib/locales/en/star_trek.yml +1 -1
- data/lib/locales/en/star_wars.yml +568 -210
- data/lib/locales/en/stargate.yml +1 -2
- data/lib/locales/en/stranger_thing.yml +36 -0
- data/lib/locales/en/street_fighter.yml +1524 -0
- data/lib/locales/en/stripe.yml +42 -0
- data/lib/locales/en/studio_ghibli.yml +107 -0
- data/lib/locales/en/subscription.yml +8 -0
- data/lib/locales/en/suits.yml +45 -0
- data/lib/locales/en/super_mario.yml +58 -0
- data/lib/locales/en/super_smash_bros.yml +223 -0
- data/lib/locales/en/supernatural.yml +141 -0
- data/lib/locales/en/sword_art_online.yml +334 -0
- data/lib/locales/en/tea.yml +172 -0
- data/lib/locales/en/team.yml +1 -1
- data/lib/locales/en/the_expanse.yml +7 -0
- data/lib/locales/en/the_it_crowd.yml +155 -0
- data/lib/locales/en/the_kingkiller_chronicle.yml +56 -0
- data/lib/locales/en/the_office.yml +86 -0
- data/lib/locales/en/tolkien.yml +2453 -0
- data/lib/locales/en/touhou.yml +839 -0
- data/lib/locales/en/tron.yml +227 -0
- data/lib/locales/en/vehicle.yml +77 -49
- data/lib/locales/en/verbs.yml +8 -0
- data/lib/locales/en/volleyball.yml +501 -0
- data/lib/locales/en/warhammer_fantasy.yml +582 -0
- data/lib/locales/en/witcher.yml +428 -8
- data/lib/locales/en/world_cup.yml +271 -0
- data/lib/locales/en/world_of_warcraft.yml +124 -5
- data/lib/locales/en/zelda.yml +964 -5
- data/lib/locales/en-AU.yml +50 -8
- data/lib/locales/en-CA.yml +27 -2
- data/lib/locales/en-GB.yml +2 -1
- data/lib/locales/en-IND.yml +5 -2
- data/lib/locales/en-MS.yml +8 -1
- data/lib/locales/en-NEP.yml +6 -3
- data/lib/locales/en-NG.yml +2 -0
- data/lib/locales/en-NZ.yml +140 -17
- data/lib/locales/en-PAK.yml +4 -2
- data/lib/locales/en-SG.yml +6 -1
- data/lib/locales/en-TH.yml +360 -0
- data/lib/locales/en-US.yml +38 -10
- data/lib/locales/en-ZA.yml +114 -17
- data/lib/locales/en-au-ocker.yml +2 -1
- data/lib/locales/en.yml +0 -1
- data/lib/locales/es-AR.yml +4600 -0
- data/lib/locales/es-MX.yml +17 -1
- data/lib/locales/es.yml +75 -1
- data/lib/locales/fa.yml +6 -0
- data/lib/locales/fi-FI.yml +12 -6
- data/lib/locales/fr/address.yml +21 -0
- data/lib/locales/fr/adjective.yml +266 -0
- data/lib/locales/fr/animal.yml +5 -0
- data/lib/locales/fr/appliance.yml +4 -0
- data/lib/locales/fr/book.yml +7 -0
- data/lib/locales/fr/color.yml +4 -0
- data/lib/locales/fr/company.yml +17 -0
- data/lib/locales/fr/compass.yml +23 -0
- data/lib/locales/fr/demographic.yml +4 -0
- data/lib/locales/fr/gender.yml +6 -0
- data/lib/locales/fr/internet.yml +5 -0
- data/lib/locales/fr/lorem.yml +5 -0
- data/lib/locales/fr/measurement.yml +7 -0
- data/lib/locales/fr/name.yml +21 -0
- data/lib/locales/fr/phone_number.yml +7 -0
- data/lib/locales/fr/pokemon.yml +7 -0
- data/lib/locales/fr-CA.yml +107 -0
- data/lib/locales/fr-CH.yml +78 -0
- data/lib/locales/fr.yml +1 -66
- data/lib/locales/he.yml +2 -0
- data/lib/locales/hy.yml +411 -0
- data/lib/locales/id.yml +7 -2
- data/lib/locales/it.yml +15 -3
- data/lib/locales/ja/README.md +13 -0
- data/lib/locales/ja/address.yml +120539 -0
- data/lib/locales/ja/adjective.yml +148 -0
- data/lib/locales/ja/ancient.yml +4 -0
- data/lib/locales/ja/animal.yml +5 -0
- data/lib/locales/ja/bank.yml +4 -0
- data/lib/locales/ja/book.yml +7 -0
- data/lib/locales/ja/cat.yml +5 -0
- data/lib/locales/ja/coffee.yml +4 -0
- data/lib/locales/ja/color.yml +4 -0
- data/lib/locales/ja/commerce.yml +11 -0
- data/lib/locales/ja/company.yml +8 -0
- data/lib/locales/ja/dog.yml +6 -0
- data/lib/locales/ja/emotion.yml +51 -0
- data/lib/locales/ja/food.yml +4 -0
- data/lib/locales/ja/gender.yml +4 -0
- data/lib/locales/ja/lorem.yml +9 -0
- data/lib/locales/ja/name.yml +13 -0
- data/lib/locales/ja/naruto.yml +230 -0
- data/lib/locales/ja/overwatch.yml +5 -0
- data/lib/locales/ja/phone_number.yml +7 -0
- data/lib/locales/ja/pokemon.yml +7 -0
- data/lib/locales/ja/relationship.yml +10 -0
- data/lib/locales/ja/restaurant.yml +11 -0
- data/lib/locales/ja/space.yml +5 -0
- data/lib/locales/ja/studio_ghibli.yml +112 -0
- data/lib/locales/ja/subscription.yml +8 -0
- data/lib/locales/ja/super_mario.yml +9 -0
- data/lib/locales/ja/super_smash_bros.yml +8 -0
- data/lib/locales/ja/university.yml +9 -0
- data/lib/locales/ja/zelda.yml +5 -0
- data/lib/locales/ko.yml +96 -2
- data/lib/locales/lt.yml +35 -0
- data/lib/locales/lv.yml +55 -0
- data/lib/locales/mi-NZ.yml +281 -0
- data/lib/locales/nb-NO.yml +15 -6
- data/lib/locales/nl.yml +13 -4
- data/lib/locales/no.yml +7 -0
- data/lib/locales/pl.yml +13 -2
- data/lib/locales/pt-BR.yml +631 -18
- data/lib/locales/pt.yml +16 -6
- data/lib/locales/ru.yml +45 -2
- data/lib/locales/sk.yml +21 -13
- data/lib/locales/sv.yml +15 -7
- data/lib/locales/th.yml +380 -0
- data/lib/locales/tr.yml +14 -0
- data/lib/locales/uk.yml +17 -4
- data/lib/locales/vi.yml +7 -2
- data/lib/locales/zh-CN.yml +4 -4
- data/lib/locales/zh-TW.yml +3 -1
- metadata +532 -128
- data/lib/extensions/array.rb +0 -22
- data/lib/extensions/symbol.rb +0 -9
- data/lib/faker/address.rb +0 -67
- data/lib/faker/ancient.rb +0 -21
- data/lib/faker/app.rb +0 -23
- data/lib/faker/aqua_teen_hunger_force.rb +0 -9
- data/lib/faker/artist.rb +0 -9
- data/lib/faker/avatar.rb +0 -15
- data/lib/faker/back_to_the_future.rb +0 -17
- data/lib/faker/bank.rb +0 -37
- data/lib/faker/beer.rb +0 -40
- data/lib/faker/bitcoin.rb +0 -48
- data/lib/faker/book.rb +0 -23
- data/lib/faker/boolean.rb +0 -9
- data/lib/faker/bossa_nova.rb +0 -13
- data/lib/faker/breaking_bad.rb +0 -16
- data/lib/faker/business.rb +0 -22
- data/lib/faker/cat.rb +0 -19
- data/lib/faker/chuck_norris.rb +0 -11
- data/lib/faker/code.rb +0 -147
- data/lib/faker/coffee.rb +0 -29
- data/lib/faker/color.rb +0 -30
- data/lib/faker/commerce.rb +0 -64
- data/lib/faker/company.rb +0 -162
- data/lib/faker/compass.rb +0 -65
- data/lib/faker/crypto.rb +0 -19
- data/lib/faker/date.rb +0 -80
- data/lib/faker/demographic.rb +0 -35
- data/lib/faker/dessert.rb +0 -19
- data/lib/faker/dog.rb +0 -39
- data/lib/faker/dr_who.rb +0 -34
- data/lib/faker/dragon_ball.rb +0 -9
- data/lib/faker/dumb_and_dumber.rb +0 -17
- data/lib/faker/dune.rb +0 -54
- data/lib/faker/educator.rb +0 -23
- data/lib/faker/elder_scrolls.rb +0 -21
- data/lib/faker/esport.rb +0 -25
- data/lib/faker/fallout.rb +0 -21
- data/lib/faker/family_guy.rb +0 -17
- data/lib/faker/file.rb +0 -24
- data/lib/faker/fillmurray.rb +0 -14
- data/lib/faker/finance.rb +0 -28
- data/lib/faker/food.rb +0 -25
- data/lib/faker/friends.rb +0 -17
- data/lib/faker/funny_name.rb +0 -43
- data/lib/faker/game_of_thrones.rb +0 -25
- data/lib/faker/hacker.rb +0 -45
- data/lib/faker/harry_potter.rb +0 -25
- data/lib/faker/hey_arnold.rb +0 -17
- data/lib/faker/hipster.rb +0 -59
- data/lib/faker/hitchhikers_guide_to_the_galaxy.rb +0 -33
- data/lib/faker/hobbit.rb +0 -21
- data/lib/faker/how_i_met_your_mother.rb +0 -21
- data/lib/faker/id_number.rb +0 -36
- data/lib/faker/internet.rb +0 -178
- data/lib/faker/job.rb +0 -16
- data/lib/faker/kpop.rb +0 -29
- data/lib/faker/league_of_legends.rb +0 -29
- data/lib/faker/lebowski.rb +0 -17
- data/lib/faker/lord_of_the_rings.rb +0 -13
- data/lib/faker/lorem.rb +0 -68
- data/lib/faker/lorem_pixel.rb +0 -21
- data/lib/faker/lovecraft.rb +0 -73
- data/lib/faker/markdown.rb +0 -67
- data/lib/faker/matz.rb +0 -9
- data/lib/faker/measurement.rb +0 -127
- data/lib/faker/most_interesting_man_in_the_world.rb +0 -9
- data/lib/faker/movie.rb +0 -9
- data/lib/faker/music.rb +0 -33
- data/lib/faker/name.rb +0 -46
- data/lib/faker/number.rb +0 -86
- data/lib/faker/omniauth.rb +0 -340
- data/lib/faker/one_piece.rb +0 -29
- data/lib/faker/overwatch.rb +0 -17
- data/lib/faker/phone_number.rb +0 -44
- data/lib/faker/placeholdit.rb +0 -20
- data/lib/faker/pokemon.rb +0 -17
- data/lib/faker/programming_language.rb +0 -13
- data/lib/faker/rick_and_morty.rb +0 -17
- data/lib/faker/robin.rb +0 -9
- data/lib/faker/rock_band.rb +0 -9
- data/lib/faker/rupaul.rb +0 -15
- data/lib/faker/science.rb +0 -15
- data/lib/faker/seinfeld.rb +0 -13
- data/lib/faker/shakespeare.rb +0 -40
- data/lib/faker/silicon_valley.rb +0 -33
- data/lib/faker/simpsons.rb +0 -22
- data/lib/faker/slack_emoji.rb +0 -43
- data/lib/faker/space.rb +0 -58
- data/lib/faker/star_trek.rb +0 -21
- data/lib/faker/star_wars.rb +0 -102
- data/lib/faker/stargate.rb +0 -17
- data/lib/faker/superhero.rb +0 -25
- data/lib/faker/team.rb +0 -24
- data/lib/faker/the_fresh_prince_of_bel_air.rb +0 -17
- data/lib/faker/the_thick_of_it.rb +0 -17
- data/lib/faker/time.rb +0 -51
- data/lib/faker/twin_peaks.rb +0 -17
- data/lib/faker/twitter.rb +0 -172
- data/lib/faker/types.rb +0 -93
- data/lib/faker/umphreys_mcgee.rb +0 -9
- data/lib/faker/university.rb +0 -28
- data/lib/faker/v_for_vendetta.rb +0 -17
- data/lib/faker/vehicle.rb +0 -39
- data/lib/faker/venture_bros.rb +0 -21
- data/lib/faker/witcher.rb +0 -29
- data/lib/faker/world_of_warcraft.rb +0 -13
- data/lib/faker/yoda.rb +0 -10
- data/lib/faker/zelda.rb +0 -22
- data/lib/locales/en/hobbit.yml +0 -19
- data/lib/locales/en/lord_of_the_rings.yml +0 -5
- data/lib/locales/en/matz.yml +0 -28
- data/lib/locales/en/most_interesting_man_in_the_world.yml +0 -106
- data/lib/locales/en/robin.yml +0 -4
- data/lib/locales/ja.yml +0 -47
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class TvShows
|
|
5
|
+
class VentureBros < Base
|
|
6
|
+
flexible :venture_bros
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
##
|
|
10
|
+
# Produces a character from The Venture Bros.
|
|
11
|
+
#
|
|
12
|
+
# @return [String]
|
|
13
|
+
#
|
|
14
|
+
# @example
|
|
15
|
+
# Faker::TvShows::VentureBros.character #=> "Scaramantula"
|
|
16
|
+
#
|
|
17
|
+
# @faker.version 1.8.3
|
|
18
|
+
def character
|
|
19
|
+
fetch('venture_bros.character')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
##
|
|
23
|
+
# Produces an organization from The Venture Bros.
|
|
24
|
+
#
|
|
25
|
+
# @return [String]
|
|
26
|
+
#
|
|
27
|
+
# @example
|
|
28
|
+
# Faker::TvShows::VentureBros.organization
|
|
29
|
+
# #=> "Guild of Calamitous Intent"
|
|
30
|
+
#
|
|
31
|
+
# @faker.version 1.8.3
|
|
32
|
+
def organization
|
|
33
|
+
fetch('venture_bros.organization')
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
##
|
|
37
|
+
# Produces a vehicle from The Venture Bros.
|
|
38
|
+
#
|
|
39
|
+
# @return [String]
|
|
40
|
+
#
|
|
41
|
+
# @example
|
|
42
|
+
# Faker::TvShows::VentureBros.vehicle #=> "Monarchmobile"
|
|
43
|
+
#
|
|
44
|
+
# @faker.version 1.8.3
|
|
45
|
+
def vehicle
|
|
46
|
+
fetch('venture_bros.vehicle')
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
##
|
|
50
|
+
# Produces a quote from The Venture Bros.
|
|
51
|
+
#
|
|
52
|
+
# @return [String]
|
|
53
|
+
#
|
|
54
|
+
# @example
|
|
55
|
+
# Faker::TvShows::VentureBros.quote
|
|
56
|
+
# #=> "Revenge, like gazpacho soup, is best served cold, precise, and merciless."
|
|
57
|
+
#
|
|
58
|
+
# @faker.version 1.8.3
|
|
59
|
+
def quote
|
|
60
|
+
fetch('venture_bros.quote')
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
data/lib/faker/version.rb
CHANGED
data/lib/faker.rb
CHANGED
|
@@ -1,32 +1,27 @@
|
|
|
1
|
-
#
|
|
2
|
-
mydir = File.expand_path(File.dirname(__FILE__))
|
|
1
|
+
# frozen_string_literal: true
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
require 'psych'
|
|
6
|
-
rescue LoadError
|
|
7
|
-
end
|
|
3
|
+
mydir = __dir__
|
|
8
4
|
|
|
5
|
+
require 'psych'
|
|
9
6
|
require 'i18n'
|
|
10
7
|
require 'set' # Fixes a bug in i18n 0.6.11
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
end
|
|
9
|
+
Dir.glob(File.join(mydir, 'helpers', '*.rb')).sort.each { |file| require file }
|
|
10
|
+
|
|
15
11
|
I18n.load_path += Dir[File.join(mydir, 'locales', '**/*.yml')]
|
|
16
12
|
I18n.reload! if I18n.backend.initialized?
|
|
17
13
|
|
|
18
|
-
|
|
19
14
|
module Faker
|
|
20
|
-
|
|
15
|
+
module Config
|
|
21
16
|
@locale = nil
|
|
22
17
|
@random = nil
|
|
23
18
|
|
|
24
19
|
class << self
|
|
25
|
-
attr_writer :locale
|
|
26
|
-
attr_writer :random
|
|
20
|
+
attr_writer :locale, :random
|
|
27
21
|
|
|
28
22
|
def locale
|
|
29
|
-
|
|
23
|
+
# Because I18n.locale defaults to :en, if we don't have :en in our available_locales, errors will happen
|
|
24
|
+
@locale || (I18n.available_locales.include?(I18n.locale) ? I18n.locale : I18n.available_locales.first)
|
|
30
25
|
end
|
|
31
26
|
|
|
32
27
|
def own_locale
|
|
@@ -34,7 +29,7 @@ module Faker
|
|
|
34
29
|
end
|
|
35
30
|
|
|
36
31
|
def random
|
|
37
|
-
@random || Random
|
|
32
|
+
@random || Random
|
|
38
33
|
end
|
|
39
34
|
end
|
|
40
35
|
end
|
|
@@ -42,12 +37,17 @@ module Faker
|
|
|
42
37
|
class Base
|
|
43
38
|
Numbers = Array(0..9)
|
|
44
39
|
ULetters = Array('A'..'Z')
|
|
45
|
-
|
|
40
|
+
LLetters = Array('a'..'z')
|
|
41
|
+
Letters = ULetters + LLetters
|
|
46
42
|
|
|
47
43
|
class << self
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
NOT_GIVEN = Object.new
|
|
45
|
+
|
|
46
|
+
## by default numerify results do not start with a zero
|
|
47
|
+
def numerify(number_string, leading_zero: false)
|
|
48
|
+
return number_string.gsub(/#/) { rand(10).to_s } if leading_zero
|
|
49
|
+
|
|
50
|
+
number_string.sub(/#/) { rand(1..9).to_s }.gsub(/#/) { rand(10).to_s }
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
def letterify(letter_string)
|
|
@@ -77,26 +77,26 @@ module Faker
|
|
|
77
77
|
#
|
|
78
78
|
# "U3V 3TP"
|
|
79
79
|
#
|
|
80
|
-
def regexify(
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
gsub(
|
|
84
|
-
gsub(/\{(\d+)\}/, '{\1,\1}').gsub(/\?/, '{0,1}')
|
|
85
|
-
gsub(/(\[[^\]]+\])\{(\d+),(\d+)\}/) {|
|
|
86
|
-
gsub(/(\([
|
|
87
|
-
gsub(/(\\?.)\{(\d+),(\d+)\}/) {|
|
|
88
|
-
gsub(/\((.*?)\)/) {|match| sample(match.gsub(/[
|
|
89
|
-
gsub(/\[([^\]]+)\]/) {|match| match.gsub(/(\w
|
|
90
|
-
gsub(/\[([^\]]+)\]/) {|
|
|
91
|
-
gsub('\d') {|
|
|
92
|
-
gsub('\w') {|
|
|
80
|
+
def regexify(reg)
|
|
81
|
+
reg = reg.source if reg.respond_to?(:source) # Handle either a Regexp or a String that looks like a Regexp
|
|
82
|
+
reg
|
|
83
|
+
.gsub(%r{^/?\^?}, '').gsub(%r{\$?/?$}, '') # Ditch the anchors
|
|
84
|
+
.gsub(/\{(\d+)\}/, '{\1,\1}').gsub(/\?/, '{0,1}') # All {2} become {2,2} and ? become {0,1}
|
|
85
|
+
.gsub(/(\[[^\]]+\])\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # [12]{1,2} becomes [12] or [12][12]
|
|
86
|
+
.gsub(/(\([^)]+\))\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # (12|34){1,2} becomes (12|34) or (12|34)(12|34)
|
|
87
|
+
.gsub(/(\\?.)\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # A{1,2} becomes A or AA or \d{3} becomes \d\d\d
|
|
88
|
+
.gsub(/\((.*?)\)/) { |match| sample(match.gsub(/[()]/, '').split('|')) } # (this|that) becomes 'this' or 'that'
|
|
89
|
+
.gsub(/\[([^\]]+)\]/) { |match| match.gsub(/(\w-\w)/) { |range| sample(Array(Range.new(*range.split('-')))) } } # All A-Z inside of [] become C (or X, or whatever)
|
|
90
|
+
.gsub(/\[([^\]]+)\]/) { |_match| sample(Regexp.last_match(1).split('')) } # All [ABC] become B (or A or C)
|
|
91
|
+
.gsub('\d') { |_match| sample(Numbers) }
|
|
92
|
+
.gsub('\w') { |_match| sample(Letters) }
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
# Helper for the common approach of grabbing a translation
|
|
96
96
|
# with an array of values and selecting one of them.
|
|
97
97
|
def fetch(key)
|
|
98
98
|
fetched = sample(translate("faker.#{key}"))
|
|
99
|
-
if fetched
|
|
99
|
+
if fetched&.match(%r{^/}) && fetched&.match(%r{/$}) # A regex
|
|
100
100
|
regexify(fetched)
|
|
101
101
|
else
|
|
102
102
|
fetched
|
|
@@ -108,7 +108,7 @@ module Faker
|
|
|
108
108
|
def fetch_all(key)
|
|
109
109
|
fetched = translate("faker.#{key}")
|
|
110
110
|
fetched = fetched.last if fetched.size <= 1
|
|
111
|
-
if !fetched.respond_to?(:sample) && fetched.match(
|
|
111
|
+
if !fetched.respond_to?(:sample) && fetched.match(%r{^/}) && fetched.match(%r{/$}) # A regex
|
|
112
112
|
regexify(fetched)
|
|
113
113
|
else
|
|
114
114
|
fetched
|
|
@@ -120,7 +120,7 @@ module Faker
|
|
|
120
120
|
# formatted translation: e.g., "#{first_name} #{last_name}".
|
|
121
121
|
def parse(key)
|
|
122
122
|
fetched = fetch(key)
|
|
123
|
-
parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([
|
|
123
|
+
parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^}]+)\}([^#]+)?/).map do |prefix, kls, meth, etc|
|
|
124
124
|
# If the token had a class Prefix (e.g., Name.first_name)
|
|
125
125
|
# grab the constant, otherwise use self
|
|
126
126
|
cls = kls ? Faker.const_get(kls.chop) : self
|
|
@@ -129,39 +129,48 @@ module Faker
|
|
|
129
129
|
# In either case the information will be retained for reconstruction of the string.
|
|
130
130
|
text = prefix
|
|
131
131
|
|
|
132
|
-
# If the class has the method, call it, otherwise
|
|
133
|
-
#
|
|
134
|
-
text += cls.respond_to?(meth)
|
|
132
|
+
# If the class has the method, call it, otherwise fetch the translation
|
|
133
|
+
# (e.g., faker.phone_number.area_code)
|
|
134
|
+
text += if cls.respond_to?(meth)
|
|
135
|
+
cls.send(meth)
|
|
136
|
+
else
|
|
137
|
+
# Do just enough snake casing to convert PhoneNumber to phone_number
|
|
138
|
+
key_path = cls.to_s.split('::').last.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
|
|
139
|
+
fetch("#{key_path}.#{meth.downcase}")
|
|
140
|
+
end
|
|
135
141
|
|
|
136
142
|
# And tack on spaces, commas, etc. left over in the string
|
|
137
|
-
text
|
|
138
|
-
|
|
143
|
+
text + etc.to_s
|
|
144
|
+
end
|
|
139
145
|
# If the fetched key couldn't be parsed, then fallback to numerify
|
|
140
146
|
parts.any? ? parts.join : numerify(fetched)
|
|
141
147
|
end
|
|
142
148
|
|
|
143
149
|
# Call I18n.translate with our configured locale if no
|
|
144
150
|
# locale is specified
|
|
145
|
-
def translate(*args)
|
|
146
|
-
opts = args.last.is_a?(Hash) ? args.pop : {}
|
|
151
|
+
def translate(*args, **opts)
|
|
147
152
|
opts[:locale] ||= Faker::Config.locale
|
|
148
153
|
opts[:raise] = true
|
|
149
|
-
I18n.translate(*
|
|
154
|
+
I18n.translate(*args, **opts)
|
|
150
155
|
rescue I18n::MissingTranslationData
|
|
151
|
-
opts = args.last.is_a?(Hash) ? args.pop : {}
|
|
152
156
|
opts[:locale] = :en
|
|
153
157
|
|
|
154
158
|
# Super-simple fallback -- fallback to en if the
|
|
155
159
|
# translation was missing. If the translation isn't
|
|
156
160
|
# in en either, then it will raise again.
|
|
157
|
-
|
|
161
|
+
disable_enforce_available_locales do
|
|
162
|
+
I18n.translate(*args, **opts)
|
|
163
|
+
end
|
|
158
164
|
end
|
|
159
165
|
|
|
160
166
|
# Executes block with given locale set.
|
|
161
|
-
def with_locale(tmp_locale = nil)
|
|
167
|
+
def with_locale(tmp_locale = nil, &block)
|
|
162
168
|
current_locale = Faker::Config.own_locale
|
|
163
169
|
Faker::Config.locale = tmp_locale
|
|
164
|
-
|
|
170
|
+
|
|
171
|
+
disable_enforce_available_locales do
|
|
172
|
+
I18n.with_locale(tmp_locale, &block)
|
|
173
|
+
end
|
|
165
174
|
ensure
|
|
166
175
|
Faker::Config.locale = current_locale
|
|
167
176
|
end
|
|
@@ -175,29 +184,54 @@ module Faker
|
|
|
175
184
|
# name:
|
|
176
185
|
# girls_name: ["Alice", "Cheryl", "Tatiana"]
|
|
177
186
|
# Then you can call Faker::Name.girls_name and it will act like #first_name
|
|
178
|
-
def method_missing(
|
|
187
|
+
def method_missing(mth, *args, &block)
|
|
179
188
|
super unless @flexible_key
|
|
180
189
|
|
|
181
|
-
|
|
182
|
-
if translation = translate(:faker)[@flexible_key][m]
|
|
190
|
+
if (translation = translate("faker.#{@flexible_key}.#{mth}"))
|
|
183
191
|
sample(translation)
|
|
184
192
|
else
|
|
185
193
|
super
|
|
186
194
|
end
|
|
187
195
|
end
|
|
188
196
|
|
|
197
|
+
def respond_to_missing?(method_name, include_private = false)
|
|
198
|
+
super
|
|
199
|
+
end
|
|
200
|
+
|
|
189
201
|
# Generates a random value between the interval
|
|
190
202
|
def rand_in_range(from, to)
|
|
191
203
|
from, to = to, from if to < from
|
|
192
204
|
rand(from..to)
|
|
193
205
|
end
|
|
194
206
|
|
|
207
|
+
# If an array or range is passed, a random value will be selected.
|
|
208
|
+
# All other values are simply returned.
|
|
209
|
+
def resolve(value)
|
|
210
|
+
case value
|
|
211
|
+
when Array then sample(value)
|
|
212
|
+
when Range then rand value
|
|
213
|
+
else value
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Return unique values from the generator every time.
|
|
218
|
+
#
|
|
219
|
+
# @param max_retries [Integer] The max number of retries that should be done before giving up.
|
|
220
|
+
# @return [self]
|
|
195
221
|
def unique(max_retries = 10_000)
|
|
196
|
-
@
|
|
222
|
+
@unique ||= UniqueGenerator.new(self, max_retries)
|
|
197
223
|
end
|
|
198
224
|
|
|
199
|
-
def sample(list)
|
|
200
|
-
list.respond_to?(:sample)
|
|
225
|
+
def sample(list, num = nil)
|
|
226
|
+
if list.respond_to?(:sample)
|
|
227
|
+
if num
|
|
228
|
+
list.sample(num, random: Faker::Config.random)
|
|
229
|
+
else
|
|
230
|
+
list.sample(random: Faker::Config.random)
|
|
231
|
+
end
|
|
232
|
+
else
|
|
233
|
+
list
|
|
234
|
+
end
|
|
201
235
|
end
|
|
202
236
|
|
|
203
237
|
def shuffle(list)
|
|
@@ -207,20 +241,75 @@ module Faker
|
|
|
207
241
|
def rand(max = nil)
|
|
208
242
|
if max.nil?
|
|
209
243
|
Faker::Config.random.rand
|
|
210
|
-
elsif max.is_a?(Range) || max.to_i
|
|
244
|
+
elsif max.is_a?(Range) || max.to_i.positive?
|
|
211
245
|
Faker::Config.random.rand(max)
|
|
212
246
|
else
|
|
213
247
|
0
|
|
214
248
|
end
|
|
215
249
|
end
|
|
250
|
+
|
|
251
|
+
def disable_enforce_available_locales
|
|
252
|
+
old_enforce_available_locales = I18n.enforce_available_locales
|
|
253
|
+
I18n.enforce_available_locales = false
|
|
254
|
+
yield
|
|
255
|
+
ensure
|
|
256
|
+
I18n.enforce_available_locales = old_enforce_available_locales
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
private
|
|
260
|
+
|
|
261
|
+
def warn_for_deprecated_arguments
|
|
262
|
+
keywords = []
|
|
263
|
+
yield(keywords)
|
|
264
|
+
|
|
265
|
+
return if keywords.empty?
|
|
266
|
+
|
|
267
|
+
method_name = caller.first.match(/`(?<method_name>.*)'/)[:method_name]
|
|
268
|
+
|
|
269
|
+
keywords.each.with_index(1) do |keyword, index|
|
|
270
|
+
i = case index
|
|
271
|
+
when 1 then '1st'
|
|
272
|
+
when 2 then '2nd'
|
|
273
|
+
when 3 then '3rd'
|
|
274
|
+
else "#{index}th"
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
warn_with_uplevel(<<~MSG, uplevel: 5)
|
|
278
|
+
Passing `#{keyword}` with the #{i} argument of `#{method_name}` is deprecated. Use keyword argument like `#{method_name}(#{keyword}: ...)` instead.
|
|
279
|
+
MSG
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
warn(<<~MSG)
|
|
283
|
+
|
|
284
|
+
To automatically update from positional arguments to keyword arguments,
|
|
285
|
+
install rubocop-faker and run:
|
|
286
|
+
|
|
287
|
+
rubocop \\
|
|
288
|
+
--require rubocop-faker \\
|
|
289
|
+
--only Faker/DeprecatedArguments \\
|
|
290
|
+
--auto-correct
|
|
291
|
+
|
|
292
|
+
MSG
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
# Workaround for emulating `warn '...', uplevel: 1` in Ruby 2.4 or lower.
|
|
296
|
+
def warn_with_uplevel(message, uplevel: 1)
|
|
297
|
+
at = parse_caller(caller[uplevel]).join(':')
|
|
298
|
+
warn "#{at}: #{message}"
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
def parse_caller(at)
|
|
302
|
+
# rubocop:disable Style/GuardClause
|
|
303
|
+
if /^(.+?):(\d+)(?::in `.*')?/ =~ at
|
|
304
|
+
file = Regexp.last_match(1)
|
|
305
|
+
line = Regexp.last_match(2).to_i
|
|
306
|
+
[file, line]
|
|
307
|
+
end
|
|
308
|
+
# rubocop:enable Style/GuardClause
|
|
309
|
+
end
|
|
216
310
|
end
|
|
217
311
|
end
|
|
218
312
|
end
|
|
219
313
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
require 'extensions/array'
|
|
223
|
-
require 'extensions/symbol'
|
|
224
|
-
|
|
225
|
-
require 'helpers/char'
|
|
226
|
-
require 'helpers/unique_generator'
|
|
314
|
+
# require faker objects
|
|
315
|
+
Dir.glob(File.join(mydir, 'faker', '/**/*.rb')).sort.each { |file| require file }
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
module Base58
|
|
5
|
+
def self.encode(str)
|
|
6
|
+
alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
|
7
|
+
base = alphabet.size
|
|
8
|
+
|
|
9
|
+
lv = 0
|
|
10
|
+
str.split('').reverse.each_with_index { |v, i| lv += v.unpack1('C') * 256**i }
|
|
11
|
+
|
|
12
|
+
ret = +''
|
|
13
|
+
while lv.positive?
|
|
14
|
+
lv, mod = lv.divmod(base)
|
|
15
|
+
ret << alphabet[mod]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
npad = str.match(/^#{0.chr}*/)[0].to_s.size
|
|
19
|
+
'1' * npad + ret.reverse
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/helpers/char.rb
CHANGED
|
@@ -1,64 +1,60 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Faker
|
|
3
4
|
module Char
|
|
4
5
|
def self.prepare(string)
|
|
5
6
|
result = romanize_cyrillic string
|
|
6
7
|
result = fix_umlauts result
|
|
7
|
-
result.gsub(
|
|
8
|
+
result.gsub(/[^\w-]/, '').downcase
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
def self.fix_umlauts(string)
|
|
11
12
|
string.gsub(/[äöüß]/i) do |match|
|
|
12
13
|
case match.downcase
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
when 'ä' then 'ae'
|
|
15
|
+
when 'ö' then 'oe'
|
|
16
|
+
when 'ü' then 'ue'
|
|
17
|
+
when 'ß' then 'ss'
|
|
18
|
+
else match.downcase
|
|
17
19
|
end
|
|
18
20
|
end
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
def self.romanize_cyrillic(string)
|
|
22
|
-
if Faker::Config.locale ==
|
|
24
|
+
if Faker::Config.locale == 'uk'
|
|
23
25
|
# Based on conventions abopted by BGN/PCGN for Ukrainian
|
|
24
26
|
uk_chars = {
|
|
25
|
-
'а' => 'a',
|
|
26
|
-
'
|
|
27
|
-
'
|
|
28
|
-
'
|
|
29
|
-
'
|
|
30
|
-
'
|
|
31
|
-
'
|
|
32
|
-
'
|
|
33
|
-
'
|
|
34
|
-
'
|
|
35
|
-
'Ф' => 'f', 'Х' => 'kh', 'Ц' => 'ts', 'Ч' => 'ch', 'Ш' => 'sh', 'Щ' => 'shch',
|
|
36
|
-
'Ю' => 'yu', 'Я' => 'ya',
|
|
37
|
-
'ь' => '' # Ignore symbol, because its standard presentation is not allowed in URLs
|
|
27
|
+
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'h', 'ґ' => 'g', 'д' => 'd', 'е' => 'e',
|
|
28
|
+
'є' => 'ye', 'ж' => 'zh', 'з' => 'z', 'и' => 'y', 'і' => 'i', 'ї' => 'yi', 'й' => 'y',
|
|
29
|
+
'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r',
|
|
30
|
+
'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'kh', 'ц' => 'ts', 'ч' => 'ch',
|
|
31
|
+
'ш' => 'sh', 'щ' => 'shch', 'ю' => 'yu', 'я' => 'ya', 'А' => 'a', 'Б' => 'b', 'В' => 'v',
|
|
32
|
+
'Г' => 'h', 'Ґ' => 'g', 'Д' => 'd', 'Е' => 'e', 'Є' => 'ye', 'Ж' => 'zh', 'З' => 'z',
|
|
33
|
+
'И' => 'y', 'І' => 'i', 'Ї' => 'yi', 'Й' => 'y', 'К' => 'k', 'Л' => 'l', 'М' => 'm',
|
|
34
|
+
'Н' => 'n', 'О' => 'o', 'П' => 'p', 'Р' => 'r', 'С' => 's', 'Т' => 't', 'У' => 'u',
|
|
35
|
+
'Ф' => 'f', 'Х' => 'kh', 'Ц' => 'ts', 'Ч' => 'ch', 'Ш' => 'sh', 'Щ' => 'shch', 'Ю' => 'yu',
|
|
36
|
+
'Я' => 'ya', 'ь' => '' # Ignore symbol, because its standard presentation is not allowed in URLs
|
|
38
37
|
}
|
|
39
38
|
return string.gsub(/[а-яА-ЯіїєґІЇЄҐ]/, uk_chars)
|
|
40
39
|
end
|
|
41
40
|
|
|
42
|
-
if Faker::Config.locale ==
|
|
41
|
+
if Faker::Config.locale == 'ru'
|
|
43
42
|
# Based on conventions abopted by BGN/PCGN for Russian
|
|
44
43
|
ru_chars = {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
'Я' => 'ya',
|
|
57
|
-
'ь' => '', 'ъ' => '' # Ignore symbols, because its standard presentation is not allowed in URLs
|
|
44
|
+
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'h', 'д' => 'd', 'е' => 'e',
|
|
45
|
+
'ё' => 'ye', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k',
|
|
46
|
+
'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r',
|
|
47
|
+
'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'kh', 'ц' => 'ts',
|
|
48
|
+
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch', 'ы' => 'у', 'э' => 'e', 'ю' => 'yu',
|
|
49
|
+
'я' => 'ya', 'А' => 'a', 'Б' => 'b', 'В' => 'v', 'Г' => 'h', 'Д' => 'd',
|
|
50
|
+
'Е' => 'e', 'Ё' => 'ye', 'Ж' => 'zh', 'З' => 'z', 'И' => 'i', 'Й' => 'y',
|
|
51
|
+
'К' => 'k', 'Л' => 'l', 'М' => 'm', 'Н' => 'n', 'О' => 'o', 'П' => 'p', 'Р' => 'r',
|
|
52
|
+
'С' => 's', 'Т' => 't', 'У' => 'u', 'Ф' => 'f', 'Х' => 'kh', 'Ц' => 'ts',
|
|
53
|
+
'Ч' => 'ch', 'Ш' => 'sh', 'Щ' => 'shch', 'Ы' => 'у', 'Э' => 'e', 'Ю' => 'yu',
|
|
54
|
+
'Я' => 'ya', 'ь' => '', 'ъ' => '' # Ignore symbols, because its standard presentation is not allowed in URLs
|
|
58
55
|
}
|
|
59
56
|
return string.gsub(/[а-яА-Я]/, ru_chars)
|
|
60
57
|
end
|
|
61
|
-
|
|
62
58
|
string
|
|
63
59
|
end
|
|
64
60
|
end
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Faker
|
|
2
4
|
class UniqueGenerator
|
|
5
|
+
@marked_unique = Set.new # Holds names of generators with unique values
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
attr_reader :marked_unique
|
|
9
|
+
end
|
|
10
|
+
|
|
3
11
|
def initialize(generator, max_retries)
|
|
4
12
|
@generator = generator
|
|
5
13
|
@max_retries = max_retries
|
|
@@ -7,6 +15,8 @@ module Faker
|
|
|
7
15
|
end
|
|
8
16
|
|
|
9
17
|
def method_missing(name, *arguments)
|
|
18
|
+
self.class.marked_unique.add(self)
|
|
19
|
+
|
|
10
20
|
@max_retries.times do
|
|
11
21
|
result = @generator.public_send(name, *arguments)
|
|
12
22
|
|
|
@@ -16,7 +26,15 @@ module Faker
|
|
|
16
26
|
return result
|
|
17
27
|
end
|
|
18
28
|
|
|
19
|
-
raise RetryLimitExceeded
|
|
29
|
+
raise RetryLimitExceeded, "Retry limit exceeded for #{name}"
|
|
30
|
+
end
|
|
31
|
+
# Have method_missing use ruby 2.x keywords if the method exists.
|
|
32
|
+
# This is necessary because the syntax for passing arguments (`...`)
|
|
33
|
+
# is invalid on versions before Ruby 2.7, so it can't be used.
|
|
34
|
+
ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
|
|
35
|
+
|
|
36
|
+
def respond_to_missing?(method_name, include_private = false)
|
|
37
|
+
method_name.to_s.start_with?('faker_') || super
|
|
20
38
|
end
|
|
21
39
|
|
|
22
40
|
RetryLimitExceeded = Class.new(StandardError)
|
|
@@ -26,7 +44,15 @@ module Faker
|
|
|
26
44
|
end
|
|
27
45
|
|
|
28
46
|
def self.clear
|
|
29
|
-
|
|
47
|
+
marked_unique.each(&:clear)
|
|
48
|
+
marked_unique.clear
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def exclude(name, arguments, values)
|
|
52
|
+
values ||= []
|
|
53
|
+
values.each do |value|
|
|
54
|
+
@previous_results[[name, arguments]] << value
|
|
55
|
+
end
|
|
30
56
|
end
|
|
31
57
|
end
|
|
32
58
|
end
|
data/lib/locales/README.md
CHANGED
|
@@ -4,9 +4,8 @@ The default locale is English. You can see how it is implemented in the "transla
|
|
|
4
4
|
|
|
5
5
|
Here's how to set it:
|
|
6
6
|
|
|
7
|
-
```
|
|
7
|
+
```ruby
|
|
8
8
|
# Sets the locale to "Simplified Chinese":
|
|
9
|
-
|
|
10
9
|
Faker::Config.locale = 'zh-CN'
|
|
11
10
|
```
|
|
12
11
|
|
|
@@ -14,21 +13,21 @@ It works so that once the Faker locale is set to a different location, the trans
|
|
|
14
13
|
|
|
15
14
|
Using Chinese as an example, when the locale is set to Chinese and you attempt to call for hipster ipsem (which doesn't exist at the time of this writing), you will get English back. It checks the "zh-CH.yml" file, does not find "hipster" and then checks the "en.yml" file and returns a word from that array.
|
|
16
15
|
|
|
17
|
-
```
|
|
16
|
+
```ruby
|
|
18
17
|
Faker::Config.locale = 'zh-CN'
|
|
19
|
-
|
|
20
18
|
Faker::Hipster.word #=> "kogi"
|
|
21
19
|
```
|
|
22
20
|
|
|
23
21
|
In order to update a locale with more translation features, simply add a new field to the .yml file that corresponds to an existing piece of functionality in the "en.yml" file. In this example, that would mean providing Chinese hipster words.
|
|
24
22
|
|
|
25
|
-
```
|
|
23
|
+
```yaml
|
|
26
24
|
# /lib/locales/zh-CN.yml
|
|
25
|
+
hipster:
|
|
26
|
+
- "屌丝"
|
|
27
|
+
```
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
```ruby
|
|
30
30
|
# Now this should work:
|
|
31
|
-
|
|
32
31
|
Faker::Hipster.word #=> "屌丝"
|
|
33
32
|
```
|
|
34
33
|
|
|
@@ -36,6 +35,6 @@ After you've done that, find or create a test file for the locale you've updated
|
|
|
36
35
|
|
|
37
36
|
In our hypothetical example here, one would add something like this to the "test-zh-locale.rb" file in the "test_ch_methods" method:
|
|
38
37
|
|
|
39
|
-
```
|
|
38
|
+
```ruby
|
|
40
39
|
assert Faker::Hipster.word.is_a? String
|
|
41
40
|
```
|