faker 1.1.2 → 3.1.1
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 +7 -0
- data/CHANGELOG.md +2383 -0
- data/History.md +176 -0
- data/License.txt +2 -2
- data/README.md +487 -47
- 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 +124 -0
- data/lib/faker/books/lovecraft.rb +249 -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 +348 -0
- data/lib/faker/default/adjective.rb +35 -0
- data/lib/faker/default/alphanumeric.rb +67 -0
- data/lib/faker/default/ancient.rb +59 -0
- data/lib/faker/default/app.rb +68 -0
- data/lib/faker/default/appliance.rb +33 -0
- data/lib/faker/default/artist.rb +20 -0
- data/lib/faker/default/avatar.rb +49 -0
- data/lib/faker/default/bank.rb +199 -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 +23 -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 +92 -0
- data/lib/faker/default/chuck_norris.rb +25 -0
- data/lib/faker/default/code.rb +269 -0
- data/lib/faker/default/coffee.rb +82 -0
- data/lib/faker/default/coin.rb +33 -0
- data/lib/faker/default/color.rb +150 -0
- data/lib/faker/default/commerce.rb +157 -0
- data/lib/faker/default/company.rb +571 -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 +82 -0
- data/lib/faker/default/currency.rb +46 -0
- data/lib/faker/default/date.rb +153 -0
- data/lib/faker/default/dc_comics.rb +70 -0
- data/lib/faker/default/demographic.rb +94 -0
- data/lib/faker/default/dessert.rb +48 -0
- data/lib/faker/default/device.rb +85 -0
- data/lib/faker/default/driving_licence.rb +121 -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 +81 -0
- data/lib/faker/default/fillmurray.rb +38 -0
- data/lib/faker/default/finance.rb +112 -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 +155 -0
- data/lib/faker/default/hobby.rb +22 -0
- data/lib/faker/default/house.rb +33 -0
- data/lib/faker/default/id_number.rb +410 -0
- data/lib/faker/default/industry_segments.rb +61 -0
- data/lib/faker/default/internet.rb +582 -0
- data/lib/faker/default/internet_http.rb +48 -0
- data/lib/faker/default/invoice.rb +123 -0
- data/lib/faker/default/job.rb +61 -0
- data/lib/faker/default/json.rb +125 -0
- data/lib/faker/default/kpop.rb +85 -0
- data/lib/faker/default/lorem.rb +250 -0
- data/lib/faker/default/lorem_flickr.rb +110 -0
- data/lib/faker/default/markdown.rb +170 -0
- data/lib/faker/default/marketing.rb +22 -0
- data/lib/faker/default/measurement.rb +175 -0
- data/lib/faker/default/military.rb +98 -0
- data/lib/faker/default/mountain.rb +33 -0
- data/lib/faker/default/name.rb +152 -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 +53 -0
- data/lib/faker/default/number.rb +244 -0
- data/lib/faker/default/omniauth.rb +471 -0
- data/lib/faker/default/phone_number.rb +133 -0
- data/lib/faker/default/placeholdit.rb +52 -0
- data/lib/faker/default/programming_language.rb +33 -0
- data/lib/faker/default/relationship.rb +87 -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 +63 -0
- data/lib/faker/default/south_africa.rb +141 -0
- data/lib/faker/default/space.rb +191 -0
- data/lib/faker/default/string.rb +59 -0
- data/lib/faker/default/stripe.rb +126 -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 +149 -0
- data/lib/faker/default/twitter.rb +207 -0
- data/lib/faker/default/types.rb +160 -0
- data/lib/faker/default/university.rb +75 -0
- data/lib/faker/default/vehicle.rb +320 -0
- data/lib/faker/default/verb.rb +72 -0
- data/lib/faker/default/vulnerability_identifier.rb +23 -0
- data/lib/faker/default/world_cup.rb +77 -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 +89 -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/tarkov.rb +205 -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/cowboy_bebop.rb +61 -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/hackers.rb +48 -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 +269 -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/sport.rb +116 -0
- data/lib/faker/sports/volleyball.rb +74 -0
- data/lib/faker/travel/airport.rb +47 -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/spongebob.rb +50 -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 +170 -58
- data/lib/helpers/base58.rb +22 -0
- data/lib/helpers/char.rb +61 -0
- data/lib/helpers/unique_generator.rb +60 -0
- data/lib/locales/README.md +40 -0
- data/lib/locales/ar.yml +106 -0
- data/lib/locales/bg.yml +44 -0
- data/lib/locales/ca-CAT.yml +24 -0
- data/lib/locales/ca.yml +23 -0
- data/lib/locales/da-DK.yml +72 -0
- data/lib/locales/de-AT.yml +57 -0
- data/lib/locales/de-CH.yml +1713 -0
- data/lib/locales/de.yml +131 -9
- data/lib/locales/ee.yml +61 -0
- data/lib/locales/en/README.md +13 -0
- data/lib/locales/en/address.yml +586 -0
- data/lib/locales/en/adjective.yml +179 -0
- data/lib/locales/en/airport.yml +381 -0
- data/lib/locales/en/ancient.yml +7 -0
- data/lib/locales/en/animal.yml +6 -0
- data/lib/locales/en/app.yml +8 -0
- data/lib/locales/en/appliance.yml +5 -0
- data/lib/locales/en/aqua_teen_hunger_force.yml +36 -0
- data/lib/locales/en/artist.yml +4 -0
- data/lib/locales/en/australia.yml +107 -0
- data/lib/locales/en/back_to_the_future.yml +120 -0
- data/lib/locales/en/bank.yml +302 -0
- data/lib/locales/en/barcode.yml +24 -0
- data/lib/locales/en/basketball.yml +99 -0
- data/lib/locales/en/beer.yml +9 -0
- 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 +491 -0
- data/lib/locales/en/bossa_nova.yml +6 -0
- data/lib/locales/en/breaking_bad.yml +28 -0
- data/lib/locales/en/brooklyn_nine_nine.yml +35 -0
- data/lib/locales/en/buffy.yml +260 -0
- data/lib/locales/en/business.yml +5 -0
- data/lib/locales/en/camera.yml +611 -0
- data/lib/locales/en/cannabis.yml +13 -0
- data/lib/locales/en/cat.yml +7 -0
- data/lib/locales/en/chiquito.yml +64 -0
- data/lib/locales/en/chuck_norris.yml +82 -0
- data/lib/locales/en/clash_of_clan.yml +101 -0
- data/lib/locales/en/code.yml +4 -0
- data/lib/locales/en/coffee.yml +31 -0
- data/lib/locales/en/coin.yml +6 -0
- data/lib/locales/en/color.yml +4 -0
- data/lib/locales/en/commerce.yml +28 -0
- data/lib/locales/en/community.yml +33 -0
- data/lib/locales/en/company.yml +22 -0
- data/lib/locales/en/compass.yml +34 -0
- data/lib/locales/en/computer.yml +55 -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/cowboy_bebop.yml +163 -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 +221 -0
- data/lib/locales/en/departed.yml +50 -0
- data/lib/locales/en/dessert.yml +6 -0
- data/lib/locales/en/device.yml +115 -0
- data/lib/locales/en/dnd.yml +451 -0
- data/lib/locales/en/dog.yml +11 -0
- data/lib/locales/en/doraemon.yml +286 -0
- data/lib/locales/en/dota.yml +693 -0
- data/lib/locales/en/dr_who.yml +96 -0
- data/lib/locales/en/dragon_ball.yml +246 -0
- 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 +59 -0
- data/lib/locales/en/dune.yml +298 -0
- data/lib/locales/en/educator.yml +80 -0
- data/lib/locales/en/elder_scrolls.yml +585 -0
- data/lib/locales/en/electrical_components.yml +6 -0
- data/lib/locales/en/emotion.yml +480 -0
- data/lib/locales/en/esport.yml +8 -0
- data/lib/locales/en/fallout.yml +315 -0
- data/lib/locales/en/family_guy.yml +7 -0
- data/lib/locales/en/file.yml +13 -0
- data/lib/locales/en/final_space.yml +37 -0
- data/lib/locales/en/finance.yml +189 -0
- data/lib/locales/en/fma_brotherhood.yml +78 -0
- data/lib/locales/en/food.yml +1057 -0
- data/lib/locales/en/football.yml +8 -0
- data/lib/locales/en/fresh_prince_of_bel_air.yml +73 -0
- data/lib/locales/en/friends.yml +6 -0
- data/lib/locales/en/funny_name.yml +4 -0
- data/lib/locales/en/futurama.yml +344 -0
- data/lib/locales/en/game.yml +294 -0
- data/lib/locales/en/game_of_thrones.yml +8 -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/hacker.yml +8 -0
- data/lib/locales/en/hackers.yml +53 -0
- data/lib/locales/en/half_life.yml +88 -0
- data/lib/locales/en/harry_potter.yml +9 -0
- data/lib/locales/en/heroes.yml +411 -0
- data/lib/locales/en/heroes_of_the_storm.yml +134 -0
- data/lib/locales/en/hey_arnold.yml +24 -0
- data/lib/locales/en/hipster.yml +4 -0
- data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +45 -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_i_met_your_mother.yml +28 -0
- data/lib/locales/en/how_to_train_your_dragon.yml +174 -0
- data/lib/locales/en/id_number.yml +5 -0
- data/lib/locales/en/industry_segments.yml +7 -0
- data/lib/locales/en/internet.yml +155 -0
- data/lib/locales/en/invoice.yml +6 -0
- data/lib/locales/en/jack_handey.yml +54 -0
- data/lib/locales/en/job.yml +15 -0
- data/lib/locales/en/kamen_rider.yml +452 -0
- data/lib/locales/en/kpop.yml +83 -0
- data/lib/locales/en/league_of_legends.yml +289 -0
- data/lib/locales/en/lebowski.yml +43 -0
- data/lib/locales/en/lorem.yml +11 -0
- data/lib/locales/en/lovecraft.yml +79 -0
- data/lib/locales/en/markdown.yml +5 -0
- data/lib/locales/en/marketing.yml +4 -0
- data/lib/locales/en/measurement.yml +11 -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 +197 -0
- data/lib/locales/en/music.yml +464 -0
- data/lib/locales/en/myst.yml +104 -0
- data/lib/locales/en/name.yml +26 -0
- 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 +9 -0
- data/lib/locales/en/opera.yml +340 -0
- data/lib/locales/en/overwatch.yml +2652 -0
- 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 +7 -0
- data/lib/locales/en/pokemon.yml +421 -0
- data/lib/locales/en/prince.yml +227 -0
- data/lib/locales/en/princess_bride.yml +5 -0
- data/lib/locales/en/programming_language.yml +6 -0
- 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/rick_and_morty.yml +6 -0
- data/lib/locales/en/rock_band.yml +5 -0
- data/lib/locales/en/room.yml +68 -0
- data/lib/locales/en/rupaul.yml +125 -0
- data/lib/locales/en/rush.yml +32 -0
- data/lib/locales/en/science.yml +484 -0
- data/lib/locales/en/seinfeld.yml +6 -0
- data/lib/locales/en/shakespeare.yml +53 -0
- data/lib/locales/en/show.yml +597 -0
- data/lib/locales/en/silicon_valley.yml +53 -0
- data/lib/locales/en/simpsons.yml +694 -0
- data/lib/locales/en/slack_emoji.yml +20 -0
- data/lib/locales/en/sonic_the_hedgehog.yml +410 -0
- data/lib/locales/en/source.yml +51 -0
- data/lib/locales/en/south_park.yml +5 -0
- data/lib/locales/en/space.yml +17 -0
- data/lib/locales/en/spongebob.yml +489 -0
- data/lib/locales/en/sport.yml +130 -0
- data/lib/locales/en/star_trek.yml +7 -0
- data/lib/locales/en/star_wars.yml +606 -0
- data/lib/locales/en/stargate.yml +21 -0
- 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/superhero.yml +12 -0
- data/lib/locales/en/supernatural.yml +141 -0
- data/lib/locales/en/sword_art_online.yml +334 -0
- data/lib/locales/en/tarkov.yml +593 -0
- data/lib/locales/en/tea.yml +172 -0
- data/lib/locales/en/team.yml +8 -0
- 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/the_thick_of_it.yml +6 -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/twin_peaks.yml +6 -0
- data/lib/locales/en/umphreys_mcgee.yml +4 -0
- data/lib/locales/en/university.yml +10 -0
- data/lib/locales/en/v_for_vendetta.yml +163 -0
- data/lib/locales/en/vehicle.yml +2814 -0
- data/lib/locales/en/venture_bros.yml +7 -0
- 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 +430 -0
- data/lib/locales/en/world_cup.yml +271 -0
- data/lib/locales/en/world_of_warcraft.yml +126 -0
- data/lib/locales/en/yoda.yml +4 -0
- data/lib/locales/en/zelda.yml +966 -0
- data/lib/locales/en-AU.yml +67 -0
- data/lib/locales/{en-bork.yml → en-BORK.yml} +1 -1
- data/lib/locales/en-CA.yml +39 -0
- data/lib/locales/{en-gb.yml → en-GB.yml} +3 -3
- data/lib/locales/{en-ind.yml → en-IND.yml} +10 -4
- data/lib/locales/en-MS.yml +48 -0
- data/lib/locales/en-NEP.yml +52 -0
- data/lib/locales/en-NG.yml +77 -0
- data/lib/locales/en-NZ.yml +165 -0
- data/lib/locales/en-PAK.yml +19 -0
- data/lib/locales/en-SG.yml +36 -0
- data/lib/locales/en-TH.yml +360 -0
- data/lib/locales/en-UG.yml +128 -0
- data/lib/locales/en-US.yml +128 -0
- data/lib/locales/en-ZA.yml +147 -0
- data/lib/locales/en-au-ocker.yml +34 -0
- data/lib/locales/en.yml +6 -67
- data/lib/locales/es-AR.yml +4600 -0
- data/lib/locales/es-MX.yml +104 -0
- data/lib/locales/es.yml +149 -0
- data/lib/locales/fa.yml +12 -0
- data/lib/locales/fi-FI.yml +36 -0
- data/lib/locales/fr/address.yml +20 -0
- data/lib/locales/fr/adjective.yml +266 -0
- data/lib/locales/fr/ancient.yml +141 -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 +106 -0
- data/lib/locales/fr-CH.yml +77 -0
- data/lib/locales/fr.yml +1 -51
- data/lib/locales/he.yml +27 -0
- data/lib/locales/hy.yml +411 -0
- data/lib/locales/id.yml +26 -0
- data/lib/locales/it.yml +71 -0
- 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 +132 -0
- data/lib/locales/lt.yml +34 -0
- data/lib/locales/lv.yml +55 -0
- data/lib/locales/mi-NZ.yml +281 -0
- data/lib/locales/{no-nb.yml → nb-NO.yml} +20 -8
- data/lib/locales/nl.yml +45 -30
- data/lib/locales/no.yml +7 -0
- data/lib/locales/pl.yml +20 -10
- data/lib/locales/pt-BR.yml +725 -0
- data/lib/locales/{pt-br.yml → pt.yml} +25 -15
- data/lib/locales/ru.yml +117 -0
- data/lib/locales/sk.yml +80 -0
- data/lib/locales/sv.yml +81 -0
- data/lib/locales/th.yml +380 -0
- data/lib/locales/tr.yml +40 -0
- data/lib/locales/uk.yml +88 -0
- data/lib/locales/vi.yml +8 -3
- data/lib/locales/zh-CN.yml +56 -0
- data/lib/locales/zh-TW.yml +29 -0
- metadata +731 -97
- data/History.txt +0 -103
- data/lib/extensions/array.rb +0 -7
- data/lib/extensions/symbol.rb +0 -9
- data/lib/faker/address.rb +0 -49
- data/lib/faker/company.rb +0 -26
- data/lib/faker/internet.rb +0 -71
- data/lib/faker/lorem.rb +0 -59
- data/lib/faker/name.rb +0 -22
- data/lib/faker/phone_number.rb +0 -17
- data/lib/locales/de-ch.yml +0 -19
- data/lib/locales/en-au.yml +0 -22
- data/lib/locales/en-ca.yml +0 -14
- data/lib/locales/en-us.yml +0 -6
- data/test/test_faker.rb +0 -29
- data/test/test_faker_city.rb +0 -45
- data/test/test_faker_internet.rb +0 -56
- data/test/test_faker_lorem.rb +0 -69
- data/test/test_faker_name.rb +0 -20
- data/test/test_faker_street.rb +0 -44
- data/test/test_flexible.rb +0 -56
- data/test/test_helper.rb +0 -5
- data/test/test_locale.rb +0 -41
@@ -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,23 +1,37 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require 'psych'
|
5
|
-
rescue LoadError
|
6
|
-
end
|
3
|
+
mydir = __dir__
|
7
4
|
|
5
|
+
require 'psych'
|
8
6
|
require 'i18n'
|
9
|
-
I18n.load_path += Dir[File.join(mydir, 'locales', '*.yml')]
|
10
|
-
I18n.reload!
|
11
7
|
|
8
|
+
Dir.glob(File.join(mydir, 'helpers', '*.rb')).sort.each { |file| require file }
|
12
9
|
|
13
|
-
|
14
|
-
|
15
|
-
@locale = nil
|
10
|
+
I18n.load_path += Dir[File.join(mydir, 'locales', '**/*.yml')]
|
11
|
+
I18n.reload! if I18n.backend.initialized?
|
16
12
|
|
13
|
+
module Faker
|
14
|
+
module Config
|
17
15
|
class << self
|
18
|
-
|
16
|
+
def locale=(new_locale)
|
17
|
+
Thread.current[:faker_config_locale] = new_locale
|
18
|
+
end
|
19
|
+
|
19
20
|
def locale
|
20
|
-
|
21
|
+
# Because I18n.locale defaults to :en, if we don't have :en in our available_locales, errors will happen
|
22
|
+
Thread.current[:faker_config_locale] || (I18n.available_locales.include?(I18n.locale) ? I18n.locale : I18n.available_locales.first)
|
23
|
+
end
|
24
|
+
|
25
|
+
def own_locale
|
26
|
+
Thread.current[:faker_config_locale]
|
27
|
+
end
|
28
|
+
|
29
|
+
def random=(new_random)
|
30
|
+
Thread.current[:faker_config_random] = new_random
|
31
|
+
end
|
32
|
+
|
33
|
+
def random
|
34
|
+
Thread.current[:faker_config_random] || Random
|
21
35
|
end
|
22
36
|
end
|
23
37
|
end
|
@@ -25,16 +39,23 @@ module Faker
|
|
25
39
|
class Base
|
26
40
|
Numbers = Array(0..9)
|
27
41
|
ULetters = Array('A'..'Z')
|
28
|
-
|
42
|
+
LLetters = Array('a'..'z')
|
43
|
+
Letters = ULetters + LLetters
|
29
44
|
|
30
45
|
class << self
|
31
|
-
|
32
|
-
|
33
|
-
|
46
|
+
attr_reader :flexible_key
|
47
|
+
|
48
|
+
NOT_GIVEN = Object.new
|
49
|
+
|
50
|
+
## by default numerify results do not start with a zero
|
51
|
+
def numerify(number_string, leading_zero: false)
|
52
|
+
return number_string.gsub(/#/) { rand(10).to_s } if leading_zero
|
53
|
+
|
54
|
+
number_string.sub(/#/) { rand(1..9).to_s }.gsub(/#/) { rand(10).to_s }
|
34
55
|
end
|
35
56
|
|
36
57
|
def letterify(letter_string)
|
37
|
-
letter_string.gsub(/\?/) { ULetters
|
58
|
+
letter_string.gsub(/\?/) { sample(ULetters) }
|
38
59
|
end
|
39
60
|
|
40
61
|
def bothify(string)
|
@@ -60,27 +81,38 @@ module Faker
|
|
60
81
|
#
|
61
82
|
# "U3V 3TP"
|
62
83
|
#
|
63
|
-
def regexify(
|
64
|
-
|
65
|
-
|
66
|
-
gsub(
|
67
|
-
gsub(/\{(\d+)\}/, '{\1,\1}').gsub(/\?/, '{0,1}')
|
68
|
-
gsub(/(\[[^\]]+\])\{(\d+),(\d+)\}/) {|
|
69
|
-
gsub(/(\([
|
70
|
-
gsub(/(\\?.)\{(\d+),(\d+)\}/) {|
|
71
|
-
gsub(/\((.*?)\)/) {|match| match.gsub(/[
|
72
|
-
gsub(/\[([^\]]+)\]/) {|match| match.gsub(/(\w
|
73
|
-
gsub(/\[([^\]]+)\]/) {|
|
74
|
-
gsub('\d') {|
|
75
|
-
gsub('\w') {|
|
84
|
+
def regexify(reg)
|
85
|
+
reg = reg.source if reg.respond_to?(:source) # Handle either a Regexp or a String that looks like a Regexp
|
86
|
+
reg
|
87
|
+
.gsub(%r{^/?\^?}, '').gsub(%r{\$?/?$}, '') # Ditch the anchors
|
88
|
+
.gsub(/\{(\d+)\}/, '{\1,\1}').gsub(/\?/, '{0,1}') # All {2} become {2,2} and ? become {0,1}
|
89
|
+
.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]
|
90
|
+
.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)
|
91
|
+
.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
|
92
|
+
.gsub(/\((.*?)\)/) { |match| sample(match.gsub(/[()]/, '').split('|')) } # (this|that) becomes 'this' or 'that'
|
93
|
+
.gsub(/\[([^\]]+)\]/) { |match| match.gsub(/(\w-\w)/) { |range| sample(Array(Range.new(*range.split('-')))) } } # All A-Z inside of [] become C (or X, or whatever)
|
94
|
+
.gsub(/\[([^\]]+)\]/) { |_match| sample(Regexp.last_match(1).chars) } # All [ABC] become B (or A or C)
|
95
|
+
.gsub('\d') { |_match| sample(Numbers) }
|
96
|
+
.gsub('\w') { |_match| sample(Letters) }
|
76
97
|
end
|
77
98
|
|
78
99
|
# Helper for the common approach of grabbing a translation
|
79
100
|
# with an array of values and selecting one of them.
|
80
101
|
def fetch(key)
|
102
|
+
fetched = sample(translate("faker.#{key}"))
|
103
|
+
if fetched&.match(%r{^/}) && fetched&.match(%r{/$}) # A regex
|
104
|
+
regexify(fetched)
|
105
|
+
else
|
106
|
+
fetched
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Helper for the common approach of grabbing a translation
|
111
|
+
# with an array of values and returning all of them.
|
112
|
+
def fetch_all(key)
|
81
113
|
fetched = translate("faker.#{key}")
|
82
|
-
fetched = fetched.
|
83
|
-
if fetched.match(
|
114
|
+
fetched = fetched.last if fetched.size <= 1
|
115
|
+
if !fetched.respond_to?(:sample) && fetched.match(%r{^/}) && fetched.match(%r{/$}) # A regex
|
84
116
|
regexify(fetched)
|
85
117
|
else
|
86
118
|
fetched
|
@@ -91,32 +123,60 @@ module Faker
|
|
91
123
|
# into method calls that can be used to generate a
|
92
124
|
# formatted translation: e.g., "#{first_name} #{last_name}".
|
93
125
|
def parse(key)
|
94
|
-
fetch(key)
|
126
|
+
fetched = fetch(key)
|
127
|
+
parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^}]+)\}([^#]+)?/).map do |prefix, kls, meth, etc|
|
95
128
|
# If the token had a class Prefix (e.g., Name.first_name)
|
96
129
|
# grab the constant, otherwise use self
|
97
130
|
cls = kls ? Faker.const_get(kls.chop) : self
|
98
131
|
|
99
|
-
# If
|
100
|
-
#
|
101
|
-
text =
|
132
|
+
# If an optional leading parentheses is not present, prefix.should == "", otherwise prefix.should == "("
|
133
|
+
# In either case the information will be retained for reconstruction of the string.
|
134
|
+
text = prefix
|
135
|
+
|
136
|
+
# If the class has the method, call it, otherwise fetch the translation
|
137
|
+
# (e.g., faker.phone_number.area_code)
|
138
|
+
text += if cls.respond_to?(meth)
|
139
|
+
cls.send(meth)
|
140
|
+
else
|
141
|
+
# Do just enough snake casing to convert PhoneNumber to phone_number
|
142
|
+
key_path = cls.to_s.split('::').last.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
|
143
|
+
fetch("#{key_path}.#{meth.downcase}")
|
144
|
+
end
|
102
145
|
|
103
146
|
# And tack on spaces, commas, etc. left over in the string
|
104
|
-
text
|
105
|
-
|
147
|
+
text + etc.to_s
|
148
|
+
end
|
149
|
+
# If the fetched key couldn't be parsed, then fallback to numerify
|
150
|
+
parts.any? ? parts.join : numerify(fetched)
|
106
151
|
end
|
107
152
|
|
108
153
|
# Call I18n.translate with our configured locale if no
|
109
154
|
# locale is specified
|
110
|
-
def translate(*args)
|
111
|
-
opts = args.last.is_a?(Hash) ? args.pop : {}
|
155
|
+
def translate(*args, **opts)
|
112
156
|
opts[:locale] ||= Faker::Config.locale
|
113
157
|
opts[:raise] = true
|
114
|
-
I18n.translate(*
|
115
|
-
rescue I18n::MissingTranslationData
|
158
|
+
I18n.translate(*args, **opts)
|
159
|
+
rescue I18n::MissingTranslationData
|
160
|
+
opts[:locale] = :en
|
161
|
+
|
116
162
|
# Super-simple fallback -- fallback to en if the
|
117
163
|
# translation was missing. If the translation isn't
|
118
164
|
# in en either, then it will raise again.
|
119
|
-
|
165
|
+
disable_enforce_available_locales do
|
166
|
+
I18n.translate(*args, **opts)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
# Executes block with given locale set.
|
171
|
+
def with_locale(tmp_locale = nil, &block)
|
172
|
+
current_locale = Faker::Config.own_locale
|
173
|
+
Faker::Config.locale = tmp_locale
|
174
|
+
|
175
|
+
disable_enforce_available_locales do
|
176
|
+
I18n.with_locale(tmp_locale, &block)
|
177
|
+
end
|
178
|
+
ensure
|
179
|
+
Faker::Config.locale = current_locale
|
120
180
|
end
|
121
181
|
|
122
182
|
def flexible(key)
|
@@ -128,28 +188,80 @@ module Faker
|
|
128
188
|
# name:
|
129
189
|
# girls_name: ["Alice", "Cheryl", "Tatiana"]
|
130
190
|
# Then you can call Faker::Name.girls_name and it will act like #first_name
|
131
|
-
def method_missing(
|
132
|
-
super unless
|
191
|
+
def method_missing(mth, *args, &block)
|
192
|
+
super unless flexible_key
|
133
193
|
|
134
|
-
|
135
|
-
|
136
|
-
translation.respond_to?(:sample) ? translation.sample : translation
|
194
|
+
if (translation = translate("faker.#{flexible_key}.#{mth}"))
|
195
|
+
sample(translation)
|
137
196
|
else
|
138
197
|
super
|
139
198
|
end
|
140
199
|
end
|
141
200
|
|
201
|
+
def respond_to_missing?(method_name, include_private = false)
|
202
|
+
super
|
203
|
+
end
|
204
|
+
|
205
|
+
# Generates a random value between the interval
|
206
|
+
def rand_in_range(from, to)
|
207
|
+
from, to = to, from if to < from
|
208
|
+
rand(from..to)
|
209
|
+
end
|
210
|
+
|
211
|
+
# If an array or range is passed, a random value will be selected.
|
212
|
+
# All other values are simply returned.
|
213
|
+
def resolve(value)
|
214
|
+
case value
|
215
|
+
when Array then sample(value)
|
216
|
+
when Range then rand value
|
217
|
+
else value
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
# Return unique values from the generator every time.
|
222
|
+
#
|
223
|
+
# @param max_retries [Integer] The max number of retries that should be done before giving up.
|
224
|
+
# @return [self]
|
225
|
+
def unique(max_retries = 10_000)
|
226
|
+
@unique ||= UniqueGenerator.new(self, max_retries)
|
227
|
+
end
|
228
|
+
|
229
|
+
def sample(list, num = nil)
|
230
|
+
if list.respond_to?(:sample)
|
231
|
+
if num
|
232
|
+
list.sample(num, random: Faker::Config.random)
|
233
|
+
else
|
234
|
+
list.sample(random: Faker::Config.random)
|
235
|
+
end
|
236
|
+
else
|
237
|
+
list
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def shuffle(list)
|
242
|
+
list.shuffle(random: Faker::Config.random)
|
243
|
+
end
|
244
|
+
|
245
|
+
def rand(max = nil)
|
246
|
+
if max.nil?
|
247
|
+
Faker::Config.random.rand
|
248
|
+
elsif max.is_a?(Range) || max.to_i.positive?
|
249
|
+
Faker::Config.random.rand(max)
|
250
|
+
else
|
251
|
+
0
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
def disable_enforce_available_locales
|
256
|
+
old_enforce_available_locales = I18n.enforce_available_locales
|
257
|
+
I18n.enforce_available_locales = false
|
258
|
+
yield
|
259
|
+
ensure
|
260
|
+
I18n.enforce_available_locales = old_enforce_available_locales
|
261
|
+
end
|
142
262
|
end
|
143
263
|
end
|
144
264
|
end
|
145
265
|
|
146
|
-
require
|
147
|
-
|
148
|
-
require 'faker/internet'
|
149
|
-
require 'faker/lorem'
|
150
|
-
require 'faker/name'
|
151
|
-
require 'faker/phone_number'
|
152
|
-
require 'faker/version'
|
153
|
-
|
154
|
-
require 'extensions/array'
|
155
|
-
require 'extensions/symbol'
|
266
|
+
# require faker objects
|
267
|
+
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.chars.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
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
module Char
|
5
|
+
def self.prepare(string)
|
6
|
+
result = romanize_cyrillic string
|
7
|
+
result = fix_umlauts result
|
8
|
+
result.gsub(/[^\w-]/, '').downcase
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.fix_umlauts(string)
|
12
|
+
string.gsub(/[äöüß]/i) do |match|
|
13
|
+
case match.downcase
|
14
|
+
when 'ä' then 'ae'
|
15
|
+
when 'ö' then 'oe'
|
16
|
+
when 'ü' then 'ue'
|
17
|
+
when 'ß' then 'ss'
|
18
|
+
else match.downcase
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.romanize_cyrillic(string)
|
24
|
+
if Faker::Config.locale == 'uk'
|
25
|
+
# Based on conventions abopted by BGN/PCGN for Ukrainian
|
26
|
+
uk_chars = {
|
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
|
37
|
+
}
|
38
|
+
return string.gsub(/[а-яА-ЯіїєґІЇЄҐ]/, uk_chars)
|
39
|
+
end
|
40
|
+
|
41
|
+
if Faker::Config.locale == 'ru'
|
42
|
+
# Based on conventions abopted by BGN/PCGN for Russian
|
43
|
+
ru_chars = {
|
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
|
55
|
+
}
|
56
|
+
return string.gsub(/[а-яА-Я]/, ru_chars)
|
57
|
+
end
|
58
|
+
string
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
class UniqueGenerator
|
5
|
+
def initialize(generator, max_retries)
|
6
|
+
@generator = generator
|
7
|
+
@max_retries = max_retries
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(name, *arguments)
|
11
|
+
self.class.marked_unique.add(self)
|
12
|
+
|
13
|
+
@max_retries.times do
|
14
|
+
result = @generator.public_send(name, *arguments)
|
15
|
+
|
16
|
+
next if previous_results[[name, arguments]].include?(result)
|
17
|
+
|
18
|
+
previous_results[[name, arguments]] << result
|
19
|
+
return result
|
20
|
+
end
|
21
|
+
|
22
|
+
raise RetryLimitExceeded, "Retry limit exceeded for #{name}"
|
23
|
+
end
|
24
|
+
# Have method_missing use ruby 2.x keywords if the method exists.
|
25
|
+
# This is necessary because the syntax for passing arguments (`...`)
|
26
|
+
# is invalid on versions before Ruby 2.7, so it can't be used.
|
27
|
+
ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
|
28
|
+
|
29
|
+
def respond_to_missing?(method_name, include_private = false)
|
30
|
+
method_name.to_s.start_with?('faker_') || super
|
31
|
+
end
|
32
|
+
|
33
|
+
RetryLimitExceeded = Class.new(StandardError)
|
34
|
+
|
35
|
+
def previous_results
|
36
|
+
Thread.current[:faker_unique_generator_previous_results] ||= {}
|
37
|
+
Thread.current[:faker_unique_generator_previous_results][@generator] ||= Hash.new { |hash, key| hash[key] = Set.new }
|
38
|
+
end
|
39
|
+
|
40
|
+
def clear
|
41
|
+
previous_results.clear
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.marked_unique
|
45
|
+
Thread.current[:faker_unique_generator_marked_unique] ||= Set.new
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.clear
|
49
|
+
marked_unique.each(&:clear)
|
50
|
+
marked_unique.clear
|
51
|
+
end
|
52
|
+
|
53
|
+
def exclude(name, arguments, values)
|
54
|
+
values ||= []
|
55
|
+
values.each do |value|
|
56
|
+
previous_results[[name, arguments]] << value
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# How Locales Work
|
2
|
+
|
3
|
+
The default locale is English. You can see how it is implemented in the "translate" method in [Faker.rb](/lib/faker.rb).
|
4
|
+
|
5
|
+
Here's how to set it:
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
# Sets the locale to "Simplified Chinese":
|
9
|
+
Faker::Config.locale = 'zh-CN'
|
10
|
+
```
|
11
|
+
|
12
|
+
It works so that once the Faker locale is set to a different location, the translate method will check that .yml file for an equivalent and use that data. If it doesn't exist, it defaults back to English. It uses the "i18n" gem to do this.
|
13
|
+
|
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.
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
Faker::Config.locale = 'zh-CN'
|
18
|
+
Faker::Hipster.word #=> "kogi"
|
19
|
+
```
|
20
|
+
|
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.
|
22
|
+
|
23
|
+
```yaml
|
24
|
+
# /lib/locales/zh-CN.yml
|
25
|
+
hipster:
|
26
|
+
- "屌丝"
|
27
|
+
```
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
# Now this should work:
|
31
|
+
Faker::Hipster.word #=> "屌丝"
|
32
|
+
```
|
33
|
+
|
34
|
+
After you've done that, find or create a test file for the locale you've updated and test the functionality for that language.
|
35
|
+
|
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:
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
assert Faker::Hipster.word.is_a? String
|
40
|
+
```
|