faker 1.8.6 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +1710 -9
- data/History.md +5 -5
- data/License.txt +2 -2
- data/README.md +331 -134
- 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 +36 -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 +571 -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 +245 -0
- data/lib/faker/default/lorem_flickr.rb +110 -0
- data/lib/faker/default/lorem_pixel.rb +64 -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 +209 -0
- data/lib/faker/default/types.rb +160 -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/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/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 +110 -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 +108 -67
- data/lib/helpers/base58.rb +22 -0
- data/lib/helpers/char.rb +31 -35
- data/lib/helpers/unique_generator.rb +34 -6
- 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 +4 -2
- 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/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/file.yml +9 -1
- data/lib/locales/en/final_space.yml +37 -0
- data/lib/locales/en/finance.yml +139 -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/hackers.yml +53 -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 +4 -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 +2650 -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 +3 -2
- 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 +51 -0
- data/lib/locales/en/south_park.yml +5 -0
- data/lib/locales/en/space.yml +3 -2
- data/lib/locales/en/sport.yml +130 -0
- 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/tarkov.yml +593 -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 +2810 -48
- 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 +28 -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 +14 -7
- data/lib/locales/fr/address.yml +21 -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 +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 +563 -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 -78
- 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
data/lib/faker.rb
CHANGED
@@ -1,40 +1,37 @@
|
|
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
|
-
require 'set' # Fixes a bug in i18n 0.6.11
|
11
7
|
|
12
|
-
|
13
|
-
|
14
|
-
end
|
8
|
+
Dir.glob(File.join(mydir, 'helpers', '*.rb')).sort.each { |file| require file }
|
9
|
+
|
15
10
|
I18n.load_path += Dir[File.join(mydir, 'locales', '**/*.yml')]
|
16
11
|
I18n.reload! if I18n.backend.initialized?
|
17
12
|
|
18
|
-
|
19
13
|
module Faker
|
20
|
-
|
21
|
-
@locale = nil
|
22
|
-
@random = nil
|
23
|
-
|
14
|
+
module Config
|
24
15
|
class << self
|
25
|
-
|
26
|
-
|
16
|
+
def locale=(new_locale)
|
17
|
+
Thread.current[:faker_config_locale] = new_locale
|
18
|
+
end
|
27
19
|
|
28
20
|
def locale
|
29
|
-
|
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)
|
30
23
|
end
|
31
24
|
|
32
25
|
def own_locale
|
33
|
-
|
26
|
+
Thread.current[:faker_config_locale]
|
27
|
+
end
|
28
|
+
|
29
|
+
def random=(new_random)
|
30
|
+
Thread.current[:faker_config_random] = new_random
|
34
31
|
end
|
35
32
|
|
36
33
|
def random
|
37
|
-
|
34
|
+
Thread.current[:faker_config_random] || Random
|
38
35
|
end
|
39
36
|
end
|
40
37
|
end
|
@@ -42,12 +39,19 @@ module Faker
|
|
42
39
|
class Base
|
43
40
|
Numbers = Array(0..9)
|
44
41
|
ULetters = Array('A'..'Z')
|
45
|
-
|
42
|
+
LLetters = Array('a'..'z')
|
43
|
+
Letters = ULetters + LLetters
|
46
44
|
|
47
45
|
class << self
|
48
|
-
|
49
|
-
|
50
|
-
|
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 }
|
51
55
|
end
|
52
56
|
|
53
57
|
def letterify(letter_string)
|
@@ -77,26 +81,26 @@ module Faker
|
|
77
81
|
#
|
78
82
|
# "U3V 3TP"
|
79
83
|
#
|
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') {|
|
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) }
|
93
97
|
end
|
94
98
|
|
95
99
|
# Helper for the common approach of grabbing a translation
|
96
100
|
# with an array of values and selecting one of them.
|
97
101
|
def fetch(key)
|
98
102
|
fetched = sample(translate("faker.#{key}"))
|
99
|
-
if fetched
|
103
|
+
if fetched&.match(%r{^/}) && fetched&.match(%r{/$}) # A regex
|
100
104
|
regexify(fetched)
|
101
105
|
else
|
102
106
|
fetched
|
@@ -108,7 +112,7 @@ module Faker
|
|
108
112
|
def fetch_all(key)
|
109
113
|
fetched = translate("faker.#{key}")
|
110
114
|
fetched = fetched.last if fetched.size <= 1
|
111
|
-
if !fetched.respond_to?(:sample) && fetched.match(
|
115
|
+
if !fetched.respond_to?(:sample) && fetched.match(%r{^/}) && fetched.match(%r{/$}) # A regex
|
112
116
|
regexify(fetched)
|
113
117
|
else
|
114
118
|
fetched
|
@@ -120,7 +124,7 @@ module Faker
|
|
120
124
|
# formatted translation: e.g., "#{first_name} #{last_name}".
|
121
125
|
def parse(key)
|
122
126
|
fetched = fetch(key)
|
123
|
-
parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([
|
127
|
+
parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^}]+)\}([^#]+)?/).map do |prefix, kls, meth, etc|
|
124
128
|
# If the token had a class Prefix (e.g., Name.first_name)
|
125
129
|
# grab the constant, otherwise use self
|
126
130
|
cls = kls ? Faker.const_get(kls.chop) : self
|
@@ -129,39 +133,48 @@ module Faker
|
|
129
133
|
# In either case the information will be retained for reconstruction of the string.
|
130
134
|
text = prefix
|
131
135
|
|
132
|
-
# If the class has the method, call it, otherwise
|
133
|
-
#
|
134
|
-
text += cls.respond_to?(meth)
|
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
|
135
145
|
|
136
146
|
# And tack on spaces, commas, etc. left over in the string
|
137
|
-
text
|
138
|
-
|
147
|
+
text + etc.to_s
|
148
|
+
end
|
139
149
|
# If the fetched key couldn't be parsed, then fallback to numerify
|
140
150
|
parts.any? ? parts.join : numerify(fetched)
|
141
151
|
end
|
142
152
|
|
143
153
|
# Call I18n.translate with our configured locale if no
|
144
154
|
# locale is specified
|
145
|
-
def translate(*args)
|
146
|
-
opts = args.last.is_a?(Hash) ? args.pop : {}
|
155
|
+
def translate(*args, **opts)
|
147
156
|
opts[:locale] ||= Faker::Config.locale
|
148
157
|
opts[:raise] = true
|
149
|
-
I18n.translate(*
|
158
|
+
I18n.translate(*args, **opts)
|
150
159
|
rescue I18n::MissingTranslationData
|
151
|
-
opts = args.last.is_a?(Hash) ? args.pop : {}
|
152
160
|
opts[:locale] = :en
|
153
161
|
|
154
162
|
# Super-simple fallback -- fallback to en if the
|
155
163
|
# translation was missing. If the translation isn't
|
156
164
|
# in en either, then it will raise again.
|
157
|
-
|
165
|
+
disable_enforce_available_locales do
|
166
|
+
I18n.translate(*args, **opts)
|
167
|
+
end
|
158
168
|
end
|
159
169
|
|
160
170
|
# Executes block with given locale set.
|
161
|
-
def with_locale(tmp_locale = nil)
|
171
|
+
def with_locale(tmp_locale = nil, &block)
|
162
172
|
current_locale = Faker::Config.own_locale
|
163
173
|
Faker::Config.locale = tmp_locale
|
164
|
-
|
174
|
+
|
175
|
+
disable_enforce_available_locales do
|
176
|
+
I18n.with_locale(tmp_locale, &block)
|
177
|
+
end
|
165
178
|
ensure
|
166
179
|
Faker::Config.locale = current_locale
|
167
180
|
end
|
@@ -175,29 +188,54 @@ module Faker
|
|
175
188
|
# name:
|
176
189
|
# girls_name: ["Alice", "Cheryl", "Tatiana"]
|
177
190
|
# Then you can call Faker::Name.girls_name and it will act like #first_name
|
178
|
-
def method_missing(
|
179
|
-
super unless
|
191
|
+
def method_missing(mth, *args, &block)
|
192
|
+
super unless flexible_key
|
180
193
|
|
181
|
-
|
182
|
-
if translation = translate(:faker)[@flexible_key][m]
|
194
|
+
if (translation = translate("faker.#{flexible_key}.#{mth}"))
|
183
195
|
sample(translation)
|
184
196
|
else
|
185
197
|
super
|
186
198
|
end
|
187
199
|
end
|
188
200
|
|
201
|
+
def respond_to_missing?(method_name, include_private = false)
|
202
|
+
super
|
203
|
+
end
|
204
|
+
|
189
205
|
# Generates a random value between the interval
|
190
206
|
def rand_in_range(from, to)
|
191
207
|
from, to = to, from if to < from
|
192
208
|
rand(from..to)
|
193
209
|
end
|
194
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]
|
195
225
|
def unique(max_retries = 10_000)
|
196
|
-
@
|
226
|
+
@unique ||= UniqueGenerator.new(self, max_retries)
|
197
227
|
end
|
198
228
|
|
199
|
-
def sample(list)
|
200
|
-
list.respond_to?(:sample)
|
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
|
201
239
|
end
|
202
240
|
|
203
241
|
def shuffle(list)
|
@@ -207,20 +245,23 @@ module Faker
|
|
207
245
|
def rand(max = nil)
|
208
246
|
if max.nil?
|
209
247
|
Faker::Config.random.rand
|
210
|
-
elsif max.is_a?(Range) || max.to_i
|
248
|
+
elsif max.is_a?(Range) || max.to_i.positive?
|
211
249
|
Faker::Config.random.rand(max)
|
212
250
|
else
|
213
251
|
0
|
214
252
|
end
|
215
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
|
216
262
|
end
|
217
263
|
end
|
218
264
|
end
|
219
265
|
|
220
|
-
|
221
|
-
|
222
|
-
require 'extensions/array'
|
223
|
-
require 'extensions/symbol'
|
224
|
-
|
225
|
-
require 'helpers/char'
|
226
|
-
require 'helpers/unique_generator'
|
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
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,32 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Faker
|
2
4
|
class UniqueGenerator
|
3
5
|
def initialize(generator, max_retries)
|
4
6
|
@generator = generator
|
5
7
|
@max_retries = max_retries
|
6
|
-
@previous_results = Hash.new { |hash, key| hash[key] = Set.new }
|
7
8
|
end
|
8
9
|
|
9
10
|
def method_missing(name, *arguments)
|
11
|
+
self.class.marked_unique.add(self)
|
12
|
+
|
10
13
|
@max_retries.times do
|
11
14
|
result = @generator.public_send(name, *arguments)
|
12
15
|
|
13
|
-
next if
|
16
|
+
next if previous_results[[name, arguments]].include?(result)
|
14
17
|
|
15
|
-
|
18
|
+
previous_results[[name, arguments]] << result
|
16
19
|
return result
|
17
20
|
end
|
18
21
|
|
19
|
-
raise RetryLimitExceeded
|
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
|
20
31
|
end
|
21
32
|
|
22
33
|
RetryLimitExceeded = Class.new(StandardError)
|
23
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
|
+
|
24
40
|
def clear
|
25
|
-
|
41
|
+
previous_results.clear
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.marked_unique
|
45
|
+
Thread.current[:faker_unique_generator_marked_unique] ||= Set.new
|
26
46
|
end
|
27
47
|
|
28
48
|
def self.clear
|
29
|
-
|
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
|
30
58
|
end
|
31
59
|
end
|
32
60
|
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
|
```
|