faker 2.2.0 → 3.2.2
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 +4 -4
- data/CHANGELOG.md +1298 -24
- data/History.md +5 -5
- data/README.md +239 -104
- data/lib/faker/blockchain/aeternity.rb +70 -0
- data/lib/faker/blockchain/bitcoin.rb +28 -2
- data/lib/faker/blockchain/ethereum.rb +11 -1
- data/lib/faker/blockchain/tezos.rb +93 -9
- data/lib/faker/books/book.rb +36 -0
- data/lib/faker/books/culture_series.rb +49 -0
- data/lib/faker/books/dune.rb +73 -17
- data/lib/faker/books/lovecraft.rb +186 -57
- data/lib/faker/books/the_kingkiller_chronicle.rb +61 -0
- data/lib/faker/creature/animal.rb +9 -0
- data/lib/faker/creature/bird.rb +203 -0
- data/lib/faker/creature/cat.rb +27 -0
- data/lib/faker/creature/dog.rb +72 -0
- data/lib/faker/creature/horse.rb +18 -0
- data/lib/faker/default/address.rb +253 -33
- data/lib/faker/default/adjective.rb +35 -0
- data/lib/faker/default/alphanumeric.rb +27 -22
- data/lib/faker/default/ancient.rb +36 -0
- data/lib/faker/default/app.rb +46 -16
- data/lib/faker/default/appliance.rb +18 -0
- data/lib/faker/default/artist.rb +9 -0
- data/lib/faker/default/avatar.rb +32 -24
- data/lib/faker/default/bank.rb +118 -29
- data/lib/faker/default/barcode.rb +165 -0
- data/lib/faker/default/beer.rb +75 -3
- data/lib/faker/default/blood.rb +48 -0
- data/lib/faker/default/boolean.rb +13 -6
- data/lib/faker/default/bossa_nova.rb +18 -0
- data/lib/faker/default/business.rb +27 -0
- data/lib/faker/default/camera.rb +46 -0
- data/lib/faker/default/cannabis.rb +90 -0
- data/lib/faker/default/chile_rut.rb +62 -26
- data/lib/faker/default/chuck_norris.rb +13 -2
- data/lib/faker/default/code.rb +162 -58
- data/lib/faker/default/coffee.rb +45 -0
- data/lib/faker/default/coin.rb +18 -0
- data/lib/faker/default/color.rb +123 -5
- data/lib/faker/default/commerce.rb +105 -37
- data/lib/faker/default/company.rb +446 -34
- data/lib/faker/default/compass.rb +135 -0
- data/lib/faker/default/computer.rb +63 -0
- data/lib/faker/default/construction.rb +54 -0
- data/lib/faker/default/cosmere.rb +90 -0
- data/lib/faker/default/crypto.rb +44 -4
- data/lib/faker/default/crypto_coin.rb +48 -18
- data/lib/faker/default/currency.rb +27 -0
- data/lib/faker/default/date.rb +149 -52
- data/lib/faker/default/dc_comics.rb +45 -0
- data/lib/faker/default/demographic.rb +58 -6
- data/lib/faker/default/dessert.rb +27 -0
- data/lib/faker/default/device.rb +54 -0
- data/lib/faker/default/driving_licence.rb +85 -28
- data/lib/faker/default/drone.rb +332 -0
- data/lib/faker/default/educator.rb +73 -6
- data/lib/faker/default/electrical_components.rb +27 -0
- data/lib/faker/default/emotion.rb +33 -0
- data/lib/faker/default/esport.rb +45 -0
- data/lib/faker/default/file.rb +53 -38
- data/lib/faker/default/finance.rb +75 -8
- data/lib/faker/default/food.rb +93 -3
- data/lib/faker/default/funny_name.rb +45 -0
- data/lib/faker/default/gender.rb +31 -0
- data/lib/faker/default/greek_philosophers.rb +18 -0
- data/lib/faker/default/hacker.rb +59 -1
- data/lib/faker/default/hipster.rb +106 -81
- data/lib/faker/default/hobby.rb +22 -0
- data/lib/faker/default/house.rb +18 -0
- data/lib/faker/default/html.rb +230 -0
- data/lib/faker/default/id_number.rb +276 -18
- data/lib/faker/default/industry_segments.rb +36 -0
- data/lib/faker/default/internet.rb +442 -147
- data/lib/faker/default/internet_http.rb +48 -0
- data/lib/faker/default/invoice.rb +37 -29
- data/lib/faker/default/job.rb +36 -0
- data/lib/faker/default/json.rb +61 -30
- data/lib/faker/default/kpop.rb +54 -0
- data/lib/faker/default/lorem.rb +184 -121
- data/lib/faker/default/lorem_flickr.rb +69 -68
- data/lib/faker/default/markdown.rb +97 -15
- data/lib/faker/default/marketing.rb +9 -0
- data/lib/faker/default/measurement.rb +101 -50
- data/lib/faker/default/military.rb +71 -0
- data/lib/faker/default/mountain.rb +33 -0
- data/lib/faker/default/name.rb +99 -6
- data/lib/faker/default/nation.rb +45 -5
- data/lib/faker/default/nato_phonetic_alphabet.rb +9 -0
- data/lib/faker/default/nhs.rb +21 -7
- data/lib/faker/default/number.rb +160 -91
- data/lib/faker/default/omniauth.rb +199 -137
- data/lib/faker/default/phone_number.rb +89 -11
- data/lib/faker/default/placeholdit.rb +23 -25
- data/lib/faker/default/programming_language.rb +18 -0
- data/lib/faker/default/relationship.rb +47 -7
- data/lib/faker/default/religion.rb +6 -0
- data/lib/faker/default/restaurant.rb +54 -2
- data/lib/faker/default/science.rb +135 -0
- data/lib/faker/default/slack_emoji.rb +81 -0
- data/lib/faker/default/source.rb +46 -22
- data/lib/faker/default/south_africa.rb +90 -0
- data/lib/faker/default/space.rb +128 -1
- data/lib/faker/default/string.rb +18 -9
- data/lib/faker/default/stripe.rb +68 -27
- data/lib/faker/default/subscription.rb +45 -0
- data/lib/faker/default/superhero.rb +45 -0
- data/lib/faker/default/tea.rb +41 -0
- data/lib/faker/default/team.rb +45 -0
- data/lib/faker/default/time.rb +84 -68
- data/lib/faker/default/twitter.rb +57 -47
- data/lib/faker/default/types.rb +90 -41
- data/lib/faker/default/university.rb +45 -0
- data/lib/faker/default/vehicle.rb +223 -60
- data/lib/faker/default/verb.rb +45 -0
- data/lib/faker/default/vulnerability_identifier.rb +23 -0
- data/lib/faker/default/world_cup.rb +52 -16
- 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 +178 -0
- data/lib/faker/games/dota.rb +61 -6
- data/lib/faker/games/elder_scrolls.rb +98 -0
- data/lib/faker/games/fallout.rb +37 -0
- data/lib/faker/games/final_fantasy_xiv.rb +73 -0
- data/lib/faker/games/game.rb +27 -0
- data/lib/faker/games/half_life.rb +27 -0
- data/lib/faker/games/heroes.rb +40 -0
- data/lib/faker/games/heroes_of_the_storm.rb +48 -1
- data/lib/faker/games/league_of_legends.rb +54 -0
- data/lib/faker/games/minecraft.rb +113 -0
- data/lib/faker/games/myst.rb +45 -0
- data/lib/faker/games/overwatch.rb +27 -0
- data/lib/faker/games/pokemon.rb +27 -0
- data/lib/faker/games/sonic_the_hedgehog.rb +27 -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 +18 -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 +93 -0
- data/lib/faker/games/world_of_warcraft.rb +44 -1
- data/lib/faker/games/zelda.rb +37 -1
- 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 +35 -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 +55 -1
- data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
- data/lib/faker/japanese_media/sword_art_online.rb +36 -0
- data/lib/faker/locations/australia.rb +47 -0
- data/lib/faker/movies/avatar.rb +49 -0
- data/lib/faker/movies/back_to_the_future.rb +28 -0
- data/lib/faker/movies/departed.rb +49 -0
- data/lib/faker/movies/ghostbusters.rb +28 -0
- data/lib/faker/movies/hackers.rb +48 -0
- data/lib/faker/movies/harry_potter.rb +54 -0
- data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +69 -0
- data/lib/faker/movies/hobbit.rb +41 -4
- data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
- data/lib/faker/movies/lebowski.rb +27 -0
- data/lib/faker/movies/lord_of_the_rings.rb +31 -3
- data/lib/faker/movies/movie.rb +22 -0
- data/lib/faker/movies/princess_bride.rb +19 -0
- data/lib/faker/movies/room.rb +63 -0
- data/lib/faker/movies/star_wars.rb +170 -11
- data/lib/faker/movies/tron.rb +161 -0
- data/lib/faker/movies/v_for_vendetta.rb +29 -0
- data/lib/faker/music/grateful_dead.rb +18 -0
- data/lib/faker/music/hiphop.rb +48 -0
- data/lib/faker/music/music.rb +102 -4
- data/lib/faker/music/opera.rb +273 -1
- data/lib/faker/music/pearl_jam.rb +50 -0
- data/lib/faker/music/phish.rb +36 -1
- data/lib/faker/music/prince.rb +64 -0
- data/lib/faker/music/rock_band.rb +21 -0
- data/lib/faker/music/rush.rb +37 -0
- data/lib/faker/music/show.rb +49 -0
- data/lib/faker/music/smashing_pumpkins.rb +64 -0
- data/lib/faker/music/umphreys_mcgee.rb +9 -0
- data/lib/faker/quotes/chiquito.rb +80 -0
- data/lib/faker/quotes/quote.rb +93 -1
- data/lib/faker/quotes/rajnikanth.rb +27 -0
- data/lib/faker/quotes/shakespeare.rb +70 -0
- data/lib/faker/religion/bible.rb +50 -0
- data/lib/faker/sports/basketball.rb +36 -0
- data/lib/faker/sports/chess.rb +90 -0
- data/lib/faker/sports/football.rb +45 -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 +43 -0
- data/lib/faker/travel/train_station.rb +54 -0
- data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +22 -0
- data/lib/faker/tv_shows/archer.rb +51 -0
- data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
- data/lib/faker/tv_shows/bojack_horseman.rb +28 -0
- data/lib/faker/tv_shows/breaking_bad.rb +18 -0
- data/lib/faker/tv_shows/brooklyn_nine_nine.rb +38 -0
- data/lib/faker/tv_shows/buffy.rb +60 -2
- data/lib/faker/tv_shows/community.rb +19 -0
- data/lib/faker/tv_shows/dr_who.rb +78 -2
- data/lib/faker/tv_shows/dumb_and_dumber.rb +28 -0
- data/lib/faker/tv_shows/family_guy.rb +28 -0
- data/lib/faker/tv_shows/final_space.rb +51 -0
- data/lib/faker/tv_shows/friends.rb +27 -0
- data/lib/faker/tv_shows/futurama.rb +65 -0
- data/lib/faker/tv_shows/game_of_thrones.rb +46 -0
- data/lib/faker/tv_shows/hey_arnold.rb +27 -0
- data/lib/faker/tv_shows/how_i_met_your_mother.rb +37 -0
- data/lib/faker/tv_shows/michael_scott.rb +10 -0
- data/lib/faker/tv_shows/new_girl.rb +19 -0
- data/lib/faker/tv_shows/parks_and_rec.rb +18 -0
- data/lib/faker/tv_shows/rick_and_morty.rb +28 -0
- data/lib/faker/tv_shows/ru_paul.rb +18 -0
- data/lib/faker/tv_shows/seinfeld.rb +28 -0
- data/lib/faker/tv_shows/silicon_valley.rb +75 -0
- data/lib/faker/tv_shows/simpsons.rb +42 -0
- data/lib/faker/tv_shows/south_park.rb +34 -0
- data/lib/faker/tv_shows/spongebob.rb +50 -0
- data/lib/faker/tv_shows/star_trek.rb +36 -0
- data/lib/faker/tv_shows/stargate.rb +28 -0
- data/lib/faker/tv_shows/stranger_things.rb +19 -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 +36 -0
- data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +43 -2
- data/lib/faker/tv_shows/the_it_crowd.rb +37 -0
- data/lib/faker/tv_shows/the_office.rb +37 -0
- data/lib/faker/tv_shows/the_thick_of_it.rb +28 -0
- data/lib/faker/tv_shows/twin_peaks.rb +28 -0
- data/lib/faker/tv_shows/venture_bros.rb +38 -0
- data/lib/faker/version.rb +2 -2
- data/lib/faker.rb +58 -58
- data/lib/helpers/base58.rb +1 -1
- data/lib/helpers/char.rb +22 -27
- data/lib/helpers/positional_generator.rb +480 -0
- data/lib/helpers/unique_generator.rb +17 -13
- data/lib/locales/README.md +18 -2
- data/lib/locales/ar.yml +6 -1
- data/lib/locales/bg.yml +3 -3
- data/lib/locales/ca.yml +0 -8
- data/lib/locales/da-DK.yml +6 -4
- data/lib/locales/de-AT.yml +7 -6
- data/lib/locales/de-CH.yml +6028 -9
- data/lib/locales/de.yml +12 -6
- data/lib/locales/en/address.yml +8 -3
- data/lib/locales/en/adjective.yml +179 -0
- data/lib/locales/en/airport.yml +381 -0
- data/lib/locales/en/animal.yml +1 -1
- data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
- data/lib/locales/en/archer.yml +75 -0
- data/lib/locales/en/australia.yml +107 -0
- data/lib/locales/en/avatar.yml +31 -0
- data/lib/locales/en/bank.yml +1 -1
- data/lib/locales/en/barcode.yml +24 -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/book.yml +487 -3
- data/lib/locales/en/brooklyn_nine_nine.yml +35 -0
- data/lib/locales/en/buffy.yml +1 -1
- data/lib/locales/en/camera.yml +611 -0
- data/lib/locales/en/cat.yml +1 -1
- data/lib/locales/en/chess.yml +103 -0
- 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/color.yml +1 -1
- data/lib/locales/en/commerce.yml +17 -0
- data/lib/locales/en/community.yml +17 -17
- data/lib/locales/en/company.yml +3 -2
- data/lib/locales/en/computer.yml +55 -0
- data/lib/locales/en/conan.yml +171 -0
- data/lib/locales/en/control.yml +247 -0
- data/lib/locales/en/cowboy_bebop.yml +163 -0
- data/lib/locales/en/demographic.yml +218 -5
- data/lib/locales/en/departed.yml +50 -0
- data/lib/locales/en/device.yml +112 -4
- data/lib/locales/en/dnd.yml +636 -0
- data/lib/locales/en/doraemon.yml +286 -0
- data/lib/locales/en/dota.yml +651 -63
- data/lib/locales/en/dr_who.yml +1 -1
- 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/dune.yml +270 -131
- data/lib/locales/en/educator.yml +75 -6
- data/lib/locales/en/elder_scrolls.yml +583 -9
- data/lib/locales/en/emotion.yml +480 -0
- data/lib/locales/en/fallout.yml +311 -133
- data/lib/locales/en/file.yml +9 -1
- data/lib/locales/en/final_fantasy_xiv.yml +754 -0
- data/lib/locales/en/final_space.yml +37 -0
- data/lib/locales/en/finance.yml +77 -1
- data/lib/locales/en/fma_brotherhood.yml +78 -0
- data/lib/locales/en/food.yml +1066 -10
- data/lib/locales/en/football.yml +3 -3
- data/lib/locales/en/fresh_prince_of_bel_air.yml +1 -1
- data/lib/locales/en/futurama.yml +344 -0
- data/lib/locales/en/game.yml +11 -0
- data/lib/locales/en/gender.yml +1 -0
- data/lib/locales/en/hackers.yml +53 -0
- data/lib/locales/en/half_life.yml +84 -3
- data/lib/locales/en/heroes.yml +408 -3
- data/lib/locales/en/heroes_of_the_storm.yml +131 -4
- data/lib/locales/en/hobby.yml +171 -0
- data/lib/locales/en/horse.yml +2 -2
- data/lib/locales/en/house.yml +1 -1
- data/lib/locales/en/how_to_train_your_dragon.yml +174 -0
- data/lib/locales/en/internet.yml +140 -3
- data/lib/locales/en/jack_handey.yml +54 -0
- data/lib/locales/en/kamen_rider.yml +452 -0
- data/lib/locales/en/kpop.yml +7 -7
- data/lib/locales/en/league_of_legends.yml +285 -6
- data/lib/locales/en/lebowski.yml +1 -1
- data/lib/locales/en/lovecraft.yml +76 -6
- data/lib/locales/en/military.yml +179 -5
- data/lib/locales/en/minecraft.yml +663 -0
- data/lib/locales/en/mitch_hedberg.yml +46 -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 -29
- data/lib/locales/en/myst.yml +87 -31
- data/lib/locales/en/name.yml +6 -5
- data/lib/locales/en/naruto.yml +230 -0
- data/lib/locales/en/one_piece.yml +2 -2
- data/lib/locales/en/opera.yml +169 -1
- data/lib/locales/en/overwatch.yml +2648 -37
- data/lib/locales/en/pearl_jam.yml +213 -0
- data/lib/locales/en/phish.yml +392 -1
- data/lib/locales/en/phone_number.yml +1 -1
- data/lib/locales/en/pokemon.yml +417 -4
- data/lib/locales/en/prince.yml +227 -0
- data/lib/locales/en/quote.yml +692 -163
- data/lib/locales/en/rajnikanth.yml +77 -0
- data/lib/locales/en/rock_band.yml +1 -0
- data/lib/locales/en/room.yml +68 -0
- data/lib/locales/en/rush.yml +32 -0
- data/lib/locales/en/science.yml +481 -3
- data/lib/locales/en/shakespeare.yml +23 -26
- data/lib/locales/en/show.yml +597 -0
- data/lib/locales/en/simpsons.yml +668 -0
- data/lib/locales/en/smashing_pumpkins.yml +382 -0
- data/lib/locales/en/source.yml +35 -0
- data/lib/locales/en/south_park.yml +360 -2
- data/lib/locales/en/space.yml +1 -1
- data/lib/locales/en/spongebob.yml +489 -0
- 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 -220
- data/lib/locales/en/stranger_thing.yml +1 -1
- data/lib/locales/en/street_fighter.yml +1524 -0
- data/lib/locales/en/stripe.yml +3 -3
- data/lib/locales/en/studio_ghibli.yml +107 -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 +23 -5
- data/lib/locales/en/supernatural.yml +141 -0
- data/lib/locales/en/tarkov.yml +593 -0
- data/lib/locales/en/tea.yml +172 -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/train_station.yml +280 -0
- data/lib/locales/en/tron.yml +227 -0
- data/lib/locales/en/vehicle.yml +2809 -75
- data/lib/locales/en/volleyball.yml +501 -0
- data/lib/locales/en/warhammer_fantasy.yml +582 -0
- data/lib/locales/en/witcher.yml +426 -7
- data/lib/locales/en/world_of_warcraft.yml +122 -4
- data/lib/locales/en/zelda.yml +962 -4
- data/lib/locales/en-AU.yml +50 -10
- data/lib/locales/en-CA.yml +5 -1
- data/lib/locales/en-GB.yml +3 -2
- data/lib/locales/en-IND.yml +2 -1
- data/lib/locales/en-MS.yml +3 -1
- data/lib/locales/en-NEP.yml +5 -2
- data/lib/locales/en-NG.yml +1 -0
- data/lib/locales/en-NZ.yml +135 -8
- data/lib/locales/en-PAK.yml +3 -1
- data/lib/locales/en-SG.yml +3 -1
- data/lib/locales/en-TH.yml +360 -0
- data/lib/locales/en-UG.yml +1 -0
- data/lib/locales/en-US.yml +38 -12
- data/lib/locales/en-ZA.yml +2 -2
- data/lib/locales/en-au-ocker.yml +4 -1
- data/lib/locales/en.yml +0 -3
- data/lib/locales/es-AR.yml +4601 -0
- data/lib/locales/es-MX.yml +4 -1
- data/lib/locales/es.yml +58 -2
- data/lib/locales/fa.yml +2 -0
- data/lib/locales/fi-FI.yml +4 -2
- 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 +22 -0
- data/lib/locales/fr/phone_number.yml +7 -0
- data/lib/locales/fr/pokemon.yml +7 -0
- data/lib/locales/fr-CA.yml +28 -11
- data/lib/locales/fr-CH.yml +3 -3
- data/lib/locales/fr.yml +1 -112
- data/lib/locales/hy.yml +3 -7
- data/lib/locales/id.yml +5 -2
- data/lib/locales/it.yml +3 -1
- 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/sport.yml +130 -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/touhou.yml +466 -0
- data/lib/locales/ja/university.yml +9 -0
- data/lib/locales/ja/zelda.yml +5 -0
- data/lib/locales/ko.yml +95 -2
- data/lib/locales/lt.yml +34 -0
- data/lib/locales/lv.yml +1 -1
- data/lib/locales/mi-NZ.yml +283 -0
- data/lib/locales/nb-NO.yml +5 -2
- data/lib/locales/nl.yml +1 -0
- data/lib/locales/pl.yml +2 -2
- data/lib/locales/pt-BR.yml +33 -4
- data/lib/locales/pt.yml +6 -4
- data/lib/locales/ru.yml +43 -1
- data/lib/locales/sk.yml +5 -2
- data/lib/locales/sv.yml +1 -0
- data/lib/locales/th.yml +380 -0
- data/lib/locales/tr.yml +1 -0
- data/lib/locales/uk.yml +10 -5
- data/lib/locales/vi.yml +1 -0
- data/lib/locales/zh-CN/bank.yml +17 -0
- data/lib/locales/zh-CN.yml +2 -1
- data/lib/locales/zh-TW.yml +2 -1
- metadata +201 -109
- data/lib/faker/default/fillmurray.rb +0 -30
- data/lib/faker/default/lorem_pixel.rb +0 -63
- data/lib/locales/en/hobbit.yml +0 -19
- data/lib/locales/en/lord_of_the_rings.yml +0 -6
- data/lib/locales/ja.yml +0 -98
|
@@ -2,56 +2,109 @@
|
|
|
2
2
|
|
|
3
3
|
module Faker
|
|
4
4
|
class Internet < Base
|
|
5
|
+
# Private, Host, and Link-Local network address blocks as defined in https://en.wikipedia.org/wiki/IPv4#Special-use_addresses
|
|
6
|
+
PRIVATE_IPV4_ADDRESS_RANGES = [
|
|
7
|
+
[10..10, 0..255, 0..255, 1..255], # 10.0.0.0/8 - Used for local communications within a private network
|
|
8
|
+
[100..100, 64..127, 0..255, 1..255], # 100.64.0.0/10 - Shared address space for communications between an ISP and its subscribers
|
|
9
|
+
[127..127, 0..255, 0..255, 1..255], # 127.0.0.0/8 - Used for loopback addresses to the local host
|
|
10
|
+
[169..169, 254..254, 0..255, 1..255], # 169.254.0.0/16 - Used for link-local addresses between two hosts on a single link when
|
|
11
|
+
[172..172, 16..31, 0..255, 1..255], # 172.16.0.0/12 - Used for local communications within a private network
|
|
12
|
+
[192..192, 0..0, 0..0, 1..255], # 192.0.0.0/24 - IETF Protocol Assignments
|
|
13
|
+
[192..192, 168..168, 0..255, 1..255], # 192.168.0.0/16 - Used for local communications within a private network
|
|
14
|
+
[198..198, 18..19, 0..255, 1..255] # 198.18.0.0/15 - Used for benchmark testing of inter-network communications between subnets
|
|
15
|
+
].each(&:freeze).freeze
|
|
16
|
+
|
|
5
17
|
class << self
|
|
6
|
-
|
|
7
|
-
if legacy_name != NOT_GIVEN
|
|
8
|
-
warn_with_uplevel 'Passing `name` with the 1st argument of `Internet.email` is deprecated. Use keyword argument like `Internet.email(name: ...)` instead.', uplevel: 1
|
|
9
|
-
name = legacy_name
|
|
10
|
-
end
|
|
11
|
-
if legacy_separators != NOT_GIVEN
|
|
12
|
-
warn_with_uplevel 'Passing `separators` with the 2nd argument of `Internet.email` is deprecated. Use keyword argument like `Internet.email(separators: ...)` instead.', uplevel: 1
|
|
13
|
-
separators = legacy_separators
|
|
14
|
-
end
|
|
18
|
+
extend Gem::Deprecate
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
##
|
|
21
|
+
# Returns the email address
|
|
22
|
+
#
|
|
23
|
+
# @return [String]
|
|
24
|
+
#
|
|
25
|
+
# @param name [String]
|
|
26
|
+
# @param separators [Array]
|
|
27
|
+
# @param domain [String]
|
|
28
|
+
#
|
|
29
|
+
# @example
|
|
30
|
+
# Faker::Internet.email #=> "renee@zieme.test"
|
|
31
|
+
# Faker::Internet.email(name: 'smith') #=> "smith@bergnaum.test"
|
|
32
|
+
# Faker::Internet.email(name: 'sam smith', separators: ['-']) #=> "smith-sam@tromp.example"
|
|
33
|
+
# Faker::Internet.email(name: 'sam smith', separators: ['-'], domain: 'test') #=> "sam-smith@test.example"
|
|
34
|
+
# Faker::Internet.email(domain: 'gmail.com') #=> "foo@gmail.com"
|
|
35
|
+
def email(name: nil, separators: nil, domain: nil)
|
|
36
|
+
local_part = if separators
|
|
37
|
+
username(specifier: name, separators: separators)
|
|
38
|
+
else
|
|
39
|
+
username(specifier: name)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
sanitized_local_part = sanitize_email_local_part(local_part)
|
|
43
|
+
|
|
44
|
+
generate_domain = if domain.nil?
|
|
45
|
+
domain_name
|
|
46
|
+
else
|
|
47
|
+
domain_name(domain: domain)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
construct_email(sanitized_local_part, generate_domain)
|
|
21
51
|
end
|
|
22
52
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
53
|
+
##
|
|
54
|
+
# Returns the email address with domain either gmail.com, yahoo.com or hotmail.com
|
|
55
|
+
#
|
|
56
|
+
# @return [String]
|
|
57
|
+
#
|
|
58
|
+
# @param name [String]
|
|
59
|
+
#
|
|
60
|
+
# @example
|
|
61
|
+
# Faker::Internet.free_email #=> "samsmith@gmail.com"
|
|
62
|
+
# Faker::Internet.free_email(name: 'smith') #=> "smith@yahoo.com"
|
|
63
|
+
def free_email(name: nil)
|
|
64
|
+
construct_email(
|
|
65
|
+
sanitize_email_local_part(username(specifier: name)),
|
|
66
|
+
fetch('internet.free_email')
|
|
67
|
+
)
|
|
30
68
|
end
|
|
69
|
+
deprecate :free_email, :email, 2023, 10
|
|
31
70
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
71
|
+
##
|
|
72
|
+
# Returns the email address with fixed domain name as 'example'
|
|
73
|
+
#
|
|
74
|
+
# @return [String]
|
|
75
|
+
#
|
|
76
|
+
# @param name [String]
|
|
77
|
+
#
|
|
78
|
+
# @example
|
|
79
|
+
# Faker::Internet.safe_email #=> "samsmith@example.com"
|
|
80
|
+
# Faker::Internet.safe_email(name: 'smith') #=> "smith@example.net"
|
|
81
|
+
def safe_email(name: nil)
|
|
82
|
+
construct_email(
|
|
83
|
+
sanitize_email_local_part(username(specifier: name)),
|
|
84
|
+
"example.#{sample(%w[org com net])}"
|
|
85
|
+
)
|
|
39
86
|
end
|
|
87
|
+
deprecate :safe_email, :email, 2023, 10
|
|
40
88
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
89
|
+
##
|
|
90
|
+
# Returns the username
|
|
91
|
+
#
|
|
92
|
+
# @return [String]
|
|
93
|
+
#
|
|
94
|
+
# @param specifier [Integer, Range, String] When int value passed it returns the username longer than specifier. Max value can be 10^6
|
|
95
|
+
# @param separators [Array]
|
|
96
|
+
#
|
|
97
|
+
# @example
|
|
98
|
+
# Faker::Internet.username(specifier: 10) #=> "lulu.goodwin"
|
|
99
|
+
# Faker::Internet.username(specifier: 5..10) #=> "morris"
|
|
100
|
+
# Faker::Internet.username(specifier: 5..10) #=> "berryberry"
|
|
101
|
+
# Faker::Internet.username(specifier: 20, separators: ['-']) #=> "nikki_sawaynnikki_saway"
|
|
102
|
+
def username(specifier: nil, separators: %w[. _])
|
|
51
103
|
with_locale(:en) do
|
|
52
104
|
return shuffle(specifier.scan(/[[:word:]]+/)).join(sample(separators)).downcase if specifier.respond_to?(:scan)
|
|
53
105
|
|
|
54
|
-
|
|
106
|
+
case specifier
|
|
107
|
+
when Integer
|
|
55
108
|
# If specifier is Integer and has large value, Argument error exception is raised to overcome memory full error
|
|
56
109
|
raise ArgumentError, 'Given argument is too large' if specifier > 10**6
|
|
57
110
|
|
|
@@ -63,7 +116,7 @@ module Faker
|
|
|
63
116
|
break unless result.length < specifier && tries < 7
|
|
64
117
|
end
|
|
65
118
|
return result * (specifier / result.length + 1) if specifier.positive?
|
|
66
|
-
|
|
119
|
+
when Range
|
|
67
120
|
tries = 0
|
|
68
121
|
result = nil
|
|
69
122
|
loop do
|
|
@@ -84,125 +137,205 @@ module Faker
|
|
|
84
137
|
end
|
|
85
138
|
|
|
86
139
|
##
|
|
87
|
-
# Produces a randomized string of characters
|
|
140
|
+
# Produces a randomized string of characters suitable for passwords
|
|
88
141
|
#
|
|
89
|
-
# @param [Integer]
|
|
90
|
-
# @param [Integer]
|
|
91
|
-
# @param [Boolean]
|
|
92
|
-
# @param [Boolean]
|
|
142
|
+
# @param min_length [Integer] The minimum length of the password
|
|
143
|
+
# @param max_length [Integer] The maximum length of the password
|
|
144
|
+
# @param mix_case [Boolean] Toggles if uppercased letters are allowed. If true, at least one will be added.
|
|
145
|
+
# @param special_characters [Boolean] Toggles if special characters are allowed. If true, at least one will be added.
|
|
93
146
|
#
|
|
94
147
|
# @return [String]
|
|
95
148
|
#
|
|
96
|
-
# @example
|
|
97
|
-
#
|
|
98
|
-
# @example
|
|
99
|
-
#
|
|
100
|
-
# @example
|
|
149
|
+
# @example
|
|
150
|
+
# Faker::Internet.password #=> "Vg5mSvY1UeRg7"
|
|
151
|
+
# @example
|
|
152
|
+
# Faker::Internet.password(min_length: 8) #=> "YfGjIk0hGzDqS0"
|
|
153
|
+
# @example
|
|
154
|
+
# Faker::Internet.password(min_length: 10, max_length: 20) #=> "EoC9ShWd1hWq4vBgFw"
|
|
155
|
+
# @example
|
|
156
|
+
# Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true) #=> "3k5qS15aNmG"
|
|
157
|
+
# @example
|
|
158
|
+
# Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true, special_characters: true) #=> "*%NkOnJsH4"
|
|
101
159
|
#
|
|
102
160
|
# @faker.version 2.1.3
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if legacy_mix_case != NOT_GIVEN
|
|
114
|
-
warn_with_uplevel 'Passing `mix_case` with the 3rd argument of `Internet.password` is deprecated. Use keyword argument like `Internet.password(mix_case: ...)` instead.', uplevel: 1
|
|
115
|
-
mix_case = legacy_mix_case
|
|
161
|
+
def password(min_length: 8, max_length: 16, mix_case: true, special_characters: false)
|
|
162
|
+
raise ArgumentError, 'min_length and max_length must be greater than or equal to one' if min_length < 1 || max_length < 1
|
|
163
|
+
raise ArgumentError, 'min_length must be smaller than or equal to max_length' unless min_length <= max_length
|
|
164
|
+
|
|
165
|
+
character_types = []
|
|
166
|
+
required_min_length = 0
|
|
167
|
+
|
|
168
|
+
if mix_case
|
|
169
|
+
character_types << :mix_case
|
|
170
|
+
required_min_length += 2
|
|
116
171
|
end
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
172
|
+
|
|
173
|
+
if special_characters
|
|
174
|
+
character_types << :special_characters
|
|
175
|
+
required_min_length += 1
|
|
120
176
|
end
|
|
121
177
|
|
|
122
|
-
|
|
123
|
-
temp = Lorem.characters(number: min_length, min_alpha: min_alpha)
|
|
124
|
-
diff_length = max_length - min_length
|
|
178
|
+
raise ArgumentError, "min_length should be at least #{required_min_length} to enable #{character_types.join(', ')} configuration" if min_length < required_min_length
|
|
125
179
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
180
|
+
target_length = rand(min_length..max_length)
|
|
181
|
+
|
|
182
|
+
password = []
|
|
183
|
+
character_bag = []
|
|
184
|
+
|
|
185
|
+
# use lower_chars by default and add upper_chars if mix_case
|
|
186
|
+
lower_chars = self::LLetters
|
|
187
|
+
password << sample(lower_chars)
|
|
188
|
+
character_bag += lower_chars
|
|
189
|
+
|
|
190
|
+
digits = ('0'..'9').to_a
|
|
191
|
+
password << sample(digits)
|
|
192
|
+
character_bag += digits
|
|
130
193
|
|
|
131
194
|
if mix_case
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
temp[index] = char.upcase if alpha_count.even?
|
|
136
|
-
alpha_count += 1
|
|
137
|
-
end
|
|
138
|
-
end
|
|
195
|
+
upper_chars = self::ULetters
|
|
196
|
+
password << sample(upper_chars)
|
|
197
|
+
character_bag += upper_chars
|
|
139
198
|
end
|
|
140
199
|
|
|
141
200
|
if special_characters
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
end
|
|
201
|
+
special_chars = %w[! @ # $ % ^ & *]
|
|
202
|
+
password << sample(special_chars)
|
|
203
|
+
character_bag += special_chars
|
|
146
204
|
end
|
|
147
205
|
|
|
148
|
-
|
|
149
|
-
end
|
|
206
|
+
password << sample(character_bag) while password.length < target_length
|
|
150
207
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
warn_with_uplevel 'Passing `subdomain` with the 1st argument of `Internet.domain_name` is deprecated. Use keyword argument like `Internet.domain_name(subdomain: ...)` instead.', uplevel: 1
|
|
154
|
-
subdomain = legacy_subdomain
|
|
155
|
-
end
|
|
208
|
+
shuffle(password).join
|
|
209
|
+
end
|
|
156
210
|
|
|
211
|
+
##
|
|
212
|
+
# Returns the domain name
|
|
213
|
+
#
|
|
214
|
+
# @return [String]
|
|
215
|
+
#
|
|
216
|
+
# @param subdomain [Bool] If true passed adds a subdomain in response
|
|
217
|
+
# @param domain [String]
|
|
218
|
+
#
|
|
219
|
+
# @example
|
|
220
|
+
# Faker::Internet.domain_name #=> "altenwerth-gerhold.example"
|
|
221
|
+
# Faker::Internet.domain_name(subdomain: true) #=> "metz.mclaughlin-brekke.test"
|
|
222
|
+
# Faker::Internet.domain_name(subdomain: true, domain: 'faker') #=> "foo.faker.test"
|
|
223
|
+
# Faker::Internet.domain_name(domain: 'faker-ruby.org') #=> "faker-ruby.org"
|
|
224
|
+
# Faker::Internet.domain_name(subdomain: true, domain: 'faker-ruby.org') #=> "foo.faker-ruby.org"
|
|
225
|
+
# Faker::Internet.domain_name(subdomain: true, domain: 'faker.faker-ruby.org') #=> "faker.faker-ruby.org"
|
|
226
|
+
def domain_name(subdomain: false, domain: nil)
|
|
157
227
|
with_locale(:en) do
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
228
|
+
if domain
|
|
229
|
+
domain
|
|
230
|
+
.split('.')
|
|
231
|
+
.map { |domain_part| Char.prepare(domain_part) }
|
|
232
|
+
.tap do |domain_elements|
|
|
233
|
+
if domain_elements.length < 2
|
|
234
|
+
domain_elements << domain_suffix(safe: true)
|
|
235
|
+
end
|
|
236
|
+
if subdomain && domain_elements.length < 3
|
|
237
|
+
domain_elements.unshift(Char.prepare(domain_word))
|
|
238
|
+
end
|
|
239
|
+
end.join('.')
|
|
240
|
+
else
|
|
241
|
+
[domain_word, domain_suffix(safe: true)].tap do |domain_elements|
|
|
242
|
+
if subdomain
|
|
243
|
+
domain_elements.unshift(Char.prepare(domain_word))
|
|
244
|
+
end
|
|
245
|
+
end.join('.')
|
|
246
|
+
end
|
|
161
247
|
end
|
|
162
248
|
end
|
|
163
249
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
250
|
+
##
|
|
251
|
+
# Fixes ä, ö, ü, ß characters in string passed with ae, oe, ue, ss resp.
|
|
252
|
+
#
|
|
253
|
+
# @return [String]
|
|
254
|
+
#
|
|
255
|
+
# @param string [String]
|
|
256
|
+
#
|
|
257
|
+
# @example
|
|
258
|
+
# Faker::Internet.fix_umlauts #=> ""
|
|
259
|
+
# Faker::Internet.fix_umlauts(string: 'faker') #=> "faker"
|
|
260
|
+
# Faker::Internet.fix_umlauts(string: 'faküer') #=> "fakueer"
|
|
261
|
+
def fix_umlauts(string: '')
|
|
170
262
|
Char.fix_umlauts(string)
|
|
171
263
|
end
|
|
172
264
|
|
|
265
|
+
##
|
|
266
|
+
# Returns the domain word for internet
|
|
267
|
+
#
|
|
268
|
+
# @return [String]
|
|
269
|
+
#
|
|
270
|
+
# @example
|
|
271
|
+
# Faker::Internet.domain_word #=> "senger"
|
|
173
272
|
def domain_word
|
|
174
|
-
with_locale(:en) { Char.prepare(Company.name.split
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
def domain_suffix
|
|
178
|
-
fetch('internet.domain_suffix')
|
|
273
|
+
with_locale(:en) { Char.prepare(Company.name.split.first) }
|
|
179
274
|
end
|
|
180
275
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
276
|
+
## Returns the domain suffix e.g. com, org, co, biz, info etc.
|
|
277
|
+
#
|
|
278
|
+
# @return [String]
|
|
279
|
+
#
|
|
280
|
+
# @example
|
|
281
|
+
# Faker::Internet.domain_suffix #=> "com"
|
|
282
|
+
# Faker::Internet.domain_suffix #=> "biz"
|
|
283
|
+
# Faker::Internet.domain_suffix(safe: true) #=> "example"
|
|
284
|
+
# Faker::Internet.domain_suffix(safe: true) #=> "test"
|
|
285
|
+
def domain_suffix(safe: nil)
|
|
286
|
+
if safe
|
|
287
|
+
fetch('internet.safe_domain_suffix')
|
|
288
|
+
else
|
|
289
|
+
fetch('internet.domain_suffix')
|
|
185
290
|
end
|
|
291
|
+
end
|
|
186
292
|
|
|
293
|
+
##
|
|
294
|
+
# Returns the MAC address
|
|
295
|
+
#
|
|
296
|
+
# @return [String]
|
|
297
|
+
#
|
|
298
|
+
# @example
|
|
299
|
+
# Faker::Internet.mac_address #=> "74:d0:c9:22:95:12"
|
|
300
|
+
# Faker::Internet.mac_address(prefix: 'a') #=> "0a:91:ce:24:89:3b"
|
|
301
|
+
# Faker::Internet.mac_address(prefix: 'aa') #=> "aa:38:a0:3e:e8:41"
|
|
302
|
+
# Faker::Internet.mac_address(prefix: 'aa:44') #=> "aa:44:30:88:6e:95"
|
|
303
|
+
def mac_address(prefix: '')
|
|
187
304
|
prefix_digits = prefix.split(':').map { |d| d.to_i(16) }
|
|
188
305
|
address_digits = Array.new((6 - prefix_digits.size)) { rand(256) }
|
|
189
306
|
(prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
|
|
190
307
|
end
|
|
191
308
|
|
|
309
|
+
##
|
|
310
|
+
# Returns the IPv4 address
|
|
311
|
+
#
|
|
312
|
+
# @return [String]
|
|
313
|
+
#
|
|
314
|
+
# @example
|
|
315
|
+
# Faker::Internet.ip_v4_address #=> "97.117.128.93"
|
|
192
316
|
def ip_v4_address
|
|
193
317
|
[rand_in_range(0, 255), rand_in_range(0, 255),
|
|
194
318
|
rand_in_range(0, 255), rand_in_range(0, 255)].join('.')
|
|
195
319
|
end
|
|
196
320
|
|
|
321
|
+
##
|
|
322
|
+
# Returns the private IPv4 address
|
|
323
|
+
#
|
|
324
|
+
# @return [String]
|
|
325
|
+
#
|
|
326
|
+
# @example
|
|
327
|
+
# Faker::Internet.private_ip_v4_address #=> "127.120.80.42"
|
|
197
328
|
def private_ip_v4_address
|
|
198
|
-
|
|
199
|
-
loop do
|
|
200
|
-
addr = ip_v4_address
|
|
201
|
-
break if private_net_checker[addr]
|
|
202
|
-
end
|
|
203
|
-
addr
|
|
329
|
+
sample(PRIVATE_IPV4_ADDRESS_RANGES).map { |range| rand(range) }.join('.')
|
|
204
330
|
end
|
|
205
331
|
|
|
332
|
+
##
|
|
333
|
+
# Returns the public IPv4 address
|
|
334
|
+
#
|
|
335
|
+
# @return [String]
|
|
336
|
+
#
|
|
337
|
+
# @example
|
|
338
|
+
# Faker::Internet.public_ip_v4_address #=> "127.120.80.42"
|
|
206
339
|
def public_ip_v4_address
|
|
207
340
|
addr = nil
|
|
208
341
|
loop do
|
|
@@ -212,6 +345,13 @@ module Faker
|
|
|
212
345
|
addr
|
|
213
346
|
end
|
|
214
347
|
|
|
348
|
+
##
|
|
349
|
+
# Returns the private network regular expressions
|
|
350
|
+
#
|
|
351
|
+
# @return [Array]
|
|
352
|
+
#
|
|
353
|
+
# @example
|
|
354
|
+
# Faker::Internet.private_nets_regex #=> [/^10\./, /^100\.(6[4-9]|[7-9]\d|1[0-1]\d|12[0-7])\./, /^127\./, /^169\.254\./, /^172\.(1[6-9]|2\d|3[0-1])\./, /^192\.0\.0\./, /^192\.168\./, /^198\.(1[8-9])\./]
|
|
215
355
|
def private_nets_regex
|
|
216
356
|
[
|
|
217
357
|
/^10\./, # 10.0.0.0 - 10.255.255.255
|
|
@@ -225,10 +365,25 @@ module Faker
|
|
|
225
365
|
]
|
|
226
366
|
end
|
|
227
367
|
|
|
368
|
+
##
|
|
369
|
+
# Returns lambda to check if address passed is private or not
|
|
370
|
+
#
|
|
371
|
+
# @return [Lambda]
|
|
372
|
+
#
|
|
373
|
+
# @example
|
|
374
|
+
# Faker::Internet.private_net_checker.call("127.120.80.42") #=> true
|
|
375
|
+
# Faker::Internet.private_net_checker.call("148.120.80.42") #=> false
|
|
228
376
|
def private_net_checker
|
|
229
377
|
->(addr) { private_nets_regex.any? { |net| net =~ addr } }
|
|
230
378
|
end
|
|
231
379
|
|
|
380
|
+
##
|
|
381
|
+
# Returns the reserved network regular expressions
|
|
382
|
+
#
|
|
383
|
+
# @return [Array]
|
|
384
|
+
#
|
|
385
|
+
# @example
|
|
386
|
+
# Faker::Internet.reserved_nets_regex #=> [/^0\./, /^192\.0\.2\./, /^192\.88\.99\./, /^198\.51\.100\./, /^203\.0\.113\./, /^(22[4-9]|23\d)\./, /^(24\d|25[0-5])\./]
|
|
232
387
|
def reserved_nets_regex
|
|
233
388
|
[
|
|
234
389
|
/^0\./, # 0.0.0.0 - 0.255.255.255
|
|
@@ -241,69 +396,143 @@ module Faker
|
|
|
241
396
|
]
|
|
242
397
|
end
|
|
243
398
|
|
|
399
|
+
##
|
|
400
|
+
# Returns lambda function to check address passed is reserved or not
|
|
401
|
+
#
|
|
402
|
+
# @return [Lambda]
|
|
403
|
+
#
|
|
404
|
+
# @example
|
|
405
|
+
# Faker::Internet.reserved_net_checker.call('192.88.99.255') #=> true
|
|
406
|
+
# Faker::Internet.reserved_net_checker.call('192.88.199.255') #=> false
|
|
244
407
|
def reserved_net_checker
|
|
245
408
|
->(addr) { (private_nets_regex + reserved_nets_regex).any? { |net| net =~ addr } }
|
|
246
409
|
end
|
|
247
410
|
|
|
411
|
+
##
|
|
412
|
+
# Returns Ipv4 address with CIDR, range from 1 to 31
|
|
413
|
+
#
|
|
414
|
+
# @return [String]
|
|
415
|
+
#
|
|
416
|
+
# @example
|
|
417
|
+
# Faker::Internet.ip_v4_cidr #=> "129.162.99.74/16"
|
|
418
|
+
# Faker::Internet.ip_v4_cidr #=> "129.162.99.74/24"
|
|
248
419
|
def ip_v4_cidr
|
|
249
420
|
"#{ip_v4_address}/#{rand(1..31)}"
|
|
250
421
|
end
|
|
251
422
|
|
|
423
|
+
##
|
|
424
|
+
# Returns Ipv6 address
|
|
425
|
+
#
|
|
426
|
+
# @return [String]
|
|
427
|
+
#
|
|
428
|
+
# @example
|
|
429
|
+
# Faker::Internet.ip_v6_address #=> "7754:76d4:c7aa:7646:ea68:1abb:4055:4343"
|
|
252
430
|
def ip_v6_address
|
|
253
431
|
(1..8).map { rand(65_536).to_s(16) }.join(':')
|
|
254
432
|
end
|
|
255
433
|
|
|
434
|
+
##
|
|
435
|
+
# Returns Ipv6 address with CIDR, range between 1 to 127
|
|
436
|
+
#
|
|
437
|
+
# @return [String]
|
|
438
|
+
#
|
|
439
|
+
# @example
|
|
440
|
+
# Faker::Internet.ip_v6_cidr #=> "beca:9b99:4bb6:9712:af2f:516f:8507:96e1/99"
|
|
256
441
|
def ip_v6_cidr
|
|
257
442
|
"#{ip_v6_address}/#{rand(1..127)}"
|
|
258
443
|
end
|
|
259
444
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
445
|
+
##
|
|
446
|
+
# Returns URL
|
|
447
|
+
#
|
|
448
|
+
# @return [String]
|
|
449
|
+
#
|
|
450
|
+
# @param host [String]
|
|
451
|
+
# @param path [String]
|
|
452
|
+
# @param scheme [String]
|
|
453
|
+
#
|
|
454
|
+
# @example
|
|
455
|
+
# Faker::Internet.url #=> "http://treutel.test/demarcus"
|
|
456
|
+
# Faker::Internet.url(host: 'faker') #=> "http://faker/shad"
|
|
457
|
+
# Faker::Internet.url(host: 'faker', path: '/docs') #=> "http://faker/docs"
|
|
458
|
+
# Faker::Internet.url(host: 'faker', path: '/docs', scheme: 'https') #=> "https://faker/docs"
|
|
459
|
+
def url(host: domain_name, path: "/#{username}", scheme: 'http')
|
|
275
460
|
"#{scheme}://#{host}#{path}"
|
|
276
461
|
end
|
|
277
462
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
463
|
+
##
|
|
464
|
+
# Returns unique string in URL
|
|
465
|
+
#
|
|
466
|
+
# @return [String]
|
|
467
|
+
#
|
|
468
|
+
# @param words [String] Comma or period separated words list
|
|
469
|
+
# @param glue [String] Separator to add between words passed, default used are '-' or '_'
|
|
470
|
+
#
|
|
471
|
+
# @example
|
|
472
|
+
# Faker::Internet.slug #=> "repudiandae-sed"
|
|
473
|
+
# Faker::Internet.slug(words: 'test, faker') #=> "test-faker"
|
|
474
|
+
# Faker::Internet.slug(words: 'test. faker') #=> "test-faker"
|
|
475
|
+
# Faker::Internet.slug(words: 'test. faker', glue: '$') #=> "test$faker"
|
|
476
|
+
def slug(words: nil, glue: nil)
|
|
288
477
|
glue ||= sample(%w[- _])
|
|
289
|
-
|
|
478
|
+
return words.delete(',.').gsub(' ', glue).downcase unless words.nil?
|
|
479
|
+
|
|
480
|
+
sample(translate('faker.internet.slug'), 2).join(glue)
|
|
290
481
|
end
|
|
291
482
|
|
|
483
|
+
##
|
|
484
|
+
# Generates random token
|
|
485
|
+
#
|
|
486
|
+
# @return[String]
|
|
487
|
+
#
|
|
488
|
+
# @example
|
|
489
|
+
# Faker::Internet.device_token #=> "749f535671cf6b34d8e794d212d00c703b96274e07161b18b082d0d70ef1052f"
|
|
292
490
|
def device_token
|
|
293
491
|
shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join
|
|
294
492
|
end
|
|
295
493
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
494
|
+
##
|
|
495
|
+
# Generates the random browser identifier
|
|
496
|
+
#
|
|
497
|
+
# @return [String]
|
|
498
|
+
#
|
|
499
|
+
# @param vendor [String] Name of vendor, supported vendors are aol, chrome, firefox, internet_explorer, netscape, opera, safari
|
|
500
|
+
#
|
|
501
|
+
# @example
|
|
502
|
+
# Faker::Internet.user_agent #=> "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
|
|
503
|
+
# Faker::Internet.user_agent(vendor: 'chrome') #=> "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
|
|
504
|
+
# Faker::Internet.user_agent(vendor: 'safari') #=> "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"
|
|
505
|
+
# Faker::Internet.user_agent(vendor: 'faker') #=> "Mozilla/5.0 (Windows; U; Win 9x 4.90; SG; rv:1.9.2.4) Gecko/20101104 Netscape/9.1.0285"
|
|
506
|
+
def user_agent(vendor: nil)
|
|
302
507
|
agent_hash = translate('faker.internet.user_agent')
|
|
303
508
|
agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
|
|
304
509
|
sample(agents)
|
|
305
510
|
end
|
|
306
511
|
|
|
512
|
+
##
|
|
513
|
+
# Generate Web Crawler's user agents
|
|
514
|
+
#
|
|
515
|
+
# @return [String]
|
|
516
|
+
#
|
|
517
|
+
# @param vendor [String] Name of vendor, supported vendors are googlebot, bingbot, duckduckbot, baiduspider, yandexbot
|
|
518
|
+
#
|
|
519
|
+
# @example
|
|
520
|
+
# Faker::Internet.bot_user_agent #=> "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
|
|
521
|
+
# Faker::Internet.bot_user_agent(vendor: 'googlebot') #=> "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/99.0.4844.84 Safari/537.36"
|
|
522
|
+
# Faker::Internet.bot_user_agent(vendor: 'bingbot') #=> "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/86.0.4240.68 Safari/537.36 Edg/86.0.622.31"
|
|
523
|
+
def bot_user_agent(vendor: nil)
|
|
524
|
+
agent_hash = translate('faker.internet.bot_user_agent')
|
|
525
|
+
agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
|
|
526
|
+
sample(agents)
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
##
|
|
530
|
+
# Generated universally unique identifier
|
|
531
|
+
#
|
|
532
|
+
# @return [String]
|
|
533
|
+
#
|
|
534
|
+
# @example
|
|
535
|
+
# Faker::Internet.uuid #=> "8a6cdd40-6d78-4fdb-912b-190e3057197f"
|
|
307
536
|
def uuid
|
|
308
537
|
# borrowed from: https://github.com/ruby/ruby/blob/d48783bb0236db505fe1205d1d9822309de53a36/lib/securerandom.rb#L250
|
|
309
538
|
ary = Faker::Config.random.bytes(16).unpack('NnnnnN')
|
|
@@ -312,7 +541,73 @@ module Faker
|
|
|
312
541
|
'%08x-%04x-%04x-%04x-%04x%08x' % ary # rubocop:disable Style/FormatString
|
|
313
542
|
end
|
|
314
543
|
|
|
544
|
+
##
|
|
545
|
+
# Produces a random string of alphabetic characters, (no digits)
|
|
546
|
+
#
|
|
547
|
+
# @param length [Integer] The length of the string to generate
|
|
548
|
+
# @param padding [Boolean] Toggles if a final equal '=' will be added.
|
|
549
|
+
# @param urlsafe [Boolean] Toggles charset to '-' and '_' instead of '+' and '/'.
|
|
550
|
+
#
|
|
551
|
+
# @return [String]
|
|
552
|
+
#
|
|
553
|
+
# @example
|
|
554
|
+
# Faker::Internet.base64
|
|
555
|
+
# #=> "r_hbZ2DSD-ZACzZT"
|
|
556
|
+
# @example
|
|
557
|
+
# Faker::Internet.base64(length: 4, padding: true, urlsafe: false)
|
|
558
|
+
# #=> "x1/R="
|
|
559
|
+
#
|
|
560
|
+
# @faker.version 2.11.0
|
|
561
|
+
def base64(length: 16, padding: false, urlsafe: true)
|
|
562
|
+
char_range = [
|
|
563
|
+
Array('0'..'9'),
|
|
564
|
+
Array('A'..'Z'),
|
|
565
|
+
Array('a'..'z'),
|
|
566
|
+
urlsafe ? %w[- _] : %w[+ /]
|
|
567
|
+
].flatten
|
|
568
|
+
s = Array.new(length) { sample(char_range) }.join
|
|
569
|
+
s += '=' if padding
|
|
570
|
+
s
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
##
|
|
574
|
+
# Produces a randomized hash of internet user details
|
|
575
|
+
# @example
|
|
576
|
+
# Faker::Internet.user #=> { username: 'alexie', email: 'trudie@grant.test' }
|
|
577
|
+
#
|
|
578
|
+
# @example
|
|
579
|
+
# Faker::Internet.user('username', 'email', 'password') #=> { username: 'alexie', email: 'gayle@kohler.test', password: 'DtEf9P8wS31iMyC' }
|
|
580
|
+
#
|
|
581
|
+
# @return [hash]
|
|
582
|
+
#
|
|
583
|
+
# @faker.version next
|
|
584
|
+
def user(*args)
|
|
585
|
+
user_hash = {}
|
|
586
|
+
args = %w[username email] if args.empty?
|
|
587
|
+
args.each { |arg| user_hash[:"#{arg}"] = send(arg) }
|
|
588
|
+
user_hash
|
|
589
|
+
end
|
|
590
|
+
|
|
315
591
|
alias user_name username
|
|
592
|
+
|
|
593
|
+
private
|
|
594
|
+
|
|
595
|
+
def sanitize_email_local_part(local_part)
|
|
596
|
+
char_range = [
|
|
597
|
+
Array('0'..'9'),
|
|
598
|
+
Array('A'..'Z'),
|
|
599
|
+
Array('a'..'z'),
|
|
600
|
+
"!#$%&'*+-/=?^_`{|}~.".chars
|
|
601
|
+
].flatten
|
|
602
|
+
|
|
603
|
+
local_part.chars.map do |char|
|
|
604
|
+
char_range.include?(char) ? char : '#'
|
|
605
|
+
end.join
|
|
606
|
+
end
|
|
607
|
+
|
|
608
|
+
def construct_email(local_part, domain_name)
|
|
609
|
+
[local_part, domain_name].join('@')
|
|
610
|
+
end
|
|
316
611
|
end
|
|
317
612
|
end
|
|
318
613
|
end
|