faker 2.11.0 → 3.4.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 +1131 -19
- data/README.md +249 -105
- data/lib/faker/blockchain/aeternity.rb +5 -5
- data/lib/faker/blockchain/bitcoin.rb +2 -2
- data/lib/faker/blockchain/ethereum.rb +1 -1
- data/lib/faker/blockchain/tezos.rb +31 -3
- data/lib/faker/books/dune.rb +17 -12
- data/lib/faker/books/lovecraft.rb +16 -44
- data/lib/faker/books/the_kingkiller_chronicle.rb +61 -0
- data/lib/faker/creature/bird.rb +203 -0
- data/lib/faker/default/address.rb +42 -32
- data/lib/faker/default/adjective.rb +35 -0
- data/lib/faker/default/alphanumeric.rb +2 -8
- data/lib/faker/default/app.rb +1 -10
- data/lib/faker/default/avatar.rb +1 -12
- data/lib/faker/default/bank.rb +104 -19
- data/lib/faker/default/barcode.rb +165 -0
- data/lib/faker/default/beer.rb +3 -3
- data/lib/faker/default/blood.rb +48 -0
- data/lib/faker/default/boolean.rb +1 -4
- data/lib/faker/default/business.rb +1 -1
- data/lib/faker/default/camera.rb +46 -0
- data/lib/faker/default/cannabis.rb +10 -0
- data/lib/faker/default/chile_rut.rb +62 -18
- data/lib/faker/default/chuck_norris.rb +1 -0
- data/lib/faker/default/code.rb +162 -52
- data/lib/faker/default/color.rb +77 -6
- data/lib/faker/default/commerce.rb +105 -28
- data/lib/faker/default/company.rb +210 -28
- 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 +26 -4
- data/lib/faker/default/crypto_coin.rb +48 -15
- data/lib/faker/default/date.rb +81 -54
- data/lib/faker/default/demographic.rb +1 -5
- data/lib/faker/default/driving_licence.rb +85 -18
- data/lib/faker/default/drone.rb +332 -0
- data/lib/faker/default/educator.rb +13 -0
- data/lib/faker/default/emotion.rb +33 -0
- data/lib/faker/default/file.rb +53 -21
- data/lib/faker/default/finance.rb +75 -7
- data/lib/faker/default/food.rb +28 -2
- data/lib/faker/default/gender.rb +1 -1
- data/lib/faker/default/hipster.rb +108 -51
- data/lib/faker/default/hobby.rb +22 -0
- data/lib/faker/default/html.rb +230 -0
- data/lib/faker/default/id_number.rb +251 -17
- data/lib/faker/default/internet.rb +361 -113
- data/lib/faker/default/internet_http.rb +48 -0
- data/lib/faker/default/invoice.rb +37 -23
- data/lib/faker/default/json.rb +63 -25
- data/lib/faker/default/lorem.rb +177 -75
- data/lib/faker/default/lorem_flickr.rb +69 -37
- data/lib/faker/default/markdown.rb +97 -11
- data/lib/faker/default/marketing.rb +1 -1
- data/lib/faker/default/measurement.rb +101 -42
- data/lib/faker/default/military.rb +26 -0
- data/lib/faker/default/mountain.rb +33 -0
- data/lib/faker/default/name.rb +99 -5
- data/lib/faker/default/nation.rb +0 -3
- data/lib/faker/default/{nhs.rb → national_health_service.rb} +26 -6
- data/lib/faker/default/number.rb +39 -69
- data/lib/faker/default/omniauth.rb +115 -57
- data/lib/faker/default/phone_number.rb +112 -14
- data/lib/faker/default/placeholdit.rb +23 -12
- data/lib/faker/default/relationship.rb +2 -6
- data/lib/faker/default/religion.rb +6 -0
- data/lib/faker/default/science.rb +108 -0
- data/lib/faker/default/slack_emoji.rb +81 -0
- data/lib/faker/default/source.rb +3 -16
- data/lib/faker/default/south_africa.rb +93 -3
- data/lib/faker/default/space.rb +1 -1
- data/lib/faker/default/string.rb +18 -8
- data/lib/faker/default/stripe.rb +68 -23
- data/lib/faker/default/tea.rb +41 -0
- data/lib/faker/default/theater.rb +52 -0
- data/lib/faker/default/time.rb +4 -34
- data/lib/faker/default/twitter.rb +42 -23
- data/lib/faker/default/types.rb +92 -34
- data/lib/faker/default/university.rb +45 -0
- data/lib/faker/default/vehicle.rb +227 -57
- data/lib/faker/default/verb.rb +45 -0
- data/lib/faker/default/vulnerability_identifier.rb +23 -0
- data/lib/faker/default/world_cup.rb +6 -15
- 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 +14 -5
- data/lib/faker/games/elder_scrolls.rb +26 -0
- data/lib/faker/games/final_fantasy_xiv.rb +73 -0
- data/lib/faker/games/heroes.rb +13 -0
- data/lib/faker/games/heroes_of_the_storm.rb +16 -5
- data/lib/faker/games/minecraft.rb +113 -0
- data/lib/faker/games/myst.rb +1 -1
- data/lib/faker/games/street_fighter.rb +61 -0
- data/lib/faker/games/super_mario.rb +48 -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 +39 -0
- data/lib/faker/games/world_of_warcraft.rb +26 -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 +26 -0
- data/lib/faker/japanese_media/fullmetal_alchemist_brotherhood.rb +51 -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 +1 -1
- data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
- data/lib/faker/locations/australia.rb +52 -0
- data/lib/faker/movies/avatar.rb +49 -0
- data/lib/faker/movies/departed.rb +49 -0
- data/lib/faker/movies/hackers.rb +48 -0
- data/lib/faker/movies/hobbit.rb +4 -4
- data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
- data/lib/faker/movies/lord_of_the_rings.rb +3 -3
- data/lib/faker/movies/movie.rb +13 -0
- data/lib/faker/movies/star_wars.rb +75 -7
- data/lib/faker/movies/the_room.rb +63 -0
- data/lib/faker/movies/tron.rb +161 -0
- data/lib/faker/music/hiphop.rb +48 -0
- data/lib/faker/music/music.rb +12 -0
- data/lib/faker/music/opera.rb +237 -1
- data/lib/faker/music/pearl_jam.rb +50 -0
- data/lib/faker/music/phish.rb +27 -1
- data/lib/faker/music/prince.rb +64 -0
- data/lib/faker/music/rock_band.rb +12 -0
- data/lib/faker/music/rush.rb +37 -0
- data/lib/faker/music/smashing_pumpkins.rb +64 -0
- data/lib/faker/quotes/quote.rb +93 -1
- data/lib/faker/quotes/rajnikanth.rb +1 -0
- data/lib/faker/quotes/shakespeare.rb +70 -0
- data/lib/faker/religion/bible.rb +50 -0
- data/lib/faker/sports/chess.rb +90 -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 +13 -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/brooklyn_nine_nine.rb +38 -0
- data/lib/faker/tv_shows/buffy.rb +17 -4
- data/lib/faker/tv_shows/dr_who.rb +1 -1
- data/lib/faker/tv_shows/final_space.rb +51 -0
- data/lib/faker/tv_shows/futurama.rb +65 -0
- data/lib/faker/tv_shows/michael_scott.rb +0 -3
- data/lib/faker/tv_shows/simpsons.rb +14 -0
- data/lib/faker/tv_shows/south_park.rb +15 -0
- data/lib/faker/tv_shows/spongebob.rb +50 -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_fresh_prince_of_bel_air.rb +17 -4
- data/lib/faker/tv_shows/the_office.rb +37 -0
- data/lib/faker/version.rb +2 -2
- data/lib/faker.rb +51 -87
- data/lib/helpers/base58.rb +1 -1
- data/lib/helpers/char.rb +22 -27
- data/lib/helpers/deprecator.rb +53 -0
- data/lib/helpers/positional_generator.rb +480 -0
- data/lib/helpers/unique_generator.rb +13 -13
- data/lib/locales/README.md +18 -2
- data/lib/locales/ar.yml +6 -1
- data/lib/locales/bg.yml +1 -2
- data/lib/locales/da-DK.yml +529 -35
- data/lib/locales/de-AT.yml +3487 -25
- data/lib/locales/de-CH.yml +6020 -9
- data/lib/locales/de.yml +7185 -97
- data/lib/locales/ee.yml +0 -1
- data/lib/locales/en/address.yml +1828 -562
- 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 +108 -0
- data/lib/locales/en/avatar.yml +31 -0
- data/lib/locales/en/bank.yml +2 -2
- 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/clash_of_clan.yml +101 -0
- data/lib/locales/en/coffee.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/dog.yml +262 -7
- data/lib/locales/en/doraemon.yml +286 -0
- data/lib/locales/en/dota.yml +704 -63
- 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 +6 -0
- 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 +80 -4
- data/lib/locales/en/food.yml +1067 -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/fullmetal_alchemist_brotherhood.yml +78 -0
- data/lib/locales/en/futurama.yml +344 -0
- data/lib/locales/en/game.yml +11 -0
- data/lib/locales/en/hackers.yml +53 -0
- data/lib/locales/en/half_life.yml +84 -3
- data/lib/locales/en/harry_potter.yml +1 -1
- 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/id_number.yml +1 -1
- data/lib/locales/en/internet.yml +136 -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 +5 -4
- 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 -2622
- data/lib/locales/en/pearl_jam.yml +213 -0
- data/lib/locales/en/phish.yml +392 -1
- data/lib/locales/en/phone_number.yml +78 -3
- 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/rock_band.yml +1 -0
- data/lib/locales/en/rush.yml +32 -0
- data/lib/locales/en/science.yml +481 -3
- data/lib/locales/en/shakespeare.yml +21 -24
- 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/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 -6
- 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/the_room.yml +68 -0
- data/lib/locales/en/theater.yml +597 -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 +728 -17
- data/lib/locales/en-CA.yml +373 -16
- data/lib/locales/en-GB.yml +116 -8
- data/lib/locales/en-IND.yml +1259 -16
- data/lib/locales/en-KE.yml +212 -0
- data/lib/locales/en-MS.yml +364 -16
- data/lib/locales/en-NEP.yml +212 -35
- data/lib/locales/en-NG.yml +1 -0
- data/lib/locales/en-NZ.yml +1153 -121
- data/lib/locales/en-PAK.yml +369 -9
- data/lib/locales/en-SG.yml +581 -15
- data/lib/locales/en-UG.yml +1 -0
- data/lib/locales/en-US.yml +6937 -71
- data/lib/locales/en-ZA.yml +1 -1
- data/lib/locales/en-au-ocker.yml +266 -21
- data/lib/locales/en.yml +0 -3
- data/lib/locales/es-AR.yml +4570 -0
- data/lib/locales/es-MX.yml +1 -2
- data/lib/locales/es.yml +58 -3
- 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 +4 -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 +2748 -43
- data/lib/locales/fr-CH.yml +3 -4
- data/lib/locales/fr.yml +2 -112
- data/lib/locales/hy.yml +3624 -119
- data/lib/locales/id.yml +839 -10
- data/lib/locales/it.yml +1304 -31
- 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/football.yml +115 -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 +1450 -17
- data/lib/locales/lt.yml +315 -0
- data/lib/locales/lv.yml +1 -2
- data/lib/locales/mi-NZ.yml +283 -0
- data/lib/locales/nb-NO.yml +518 -27
- data/lib/locales/nl.yml +1 -1
- data/lib/locales/pl.yml +1 -2
- data/lib/locales/pt-BR.yml +8157 -659
- data/lib/locales/pt.yml +844 -43
- data/lib/locales/ru.yml +1355 -30
- data/lib/locales/sk.yml +4410 -41
- data/lib/locales/sv.yml +100 -0
- data/lib/locales/th.yml +76 -76
- data/lib/locales/tr.yml +1 -2
- data/lib/locales/uk.yml +1810 -44
- data/lib/locales/vi.yml +1 -0
- data/lib/locales/zh-CN/bank.yml +17 -0
- data/lib/locales/zh-CN.yml +1 -0
- data/lib/locales/zh-TW.yml +1 -0
- metadata +192 -127
- data/History.md +0 -176
- data/lib/faker/default/fillmurray.rb +0 -45
- data/lib/faker/default/lorem_pixel.rb +0 -47
- 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 -101
|
@@ -2,46 +2,74 @@
|
|
|
2
2
|
|
|
3
3
|
module Faker
|
|
4
4
|
class Internet < Base
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def free_email(legacy_name = NOT_GIVEN, name: nil)
|
|
20
|
-
warn_for_deprecated_arguments do |keywords|
|
|
21
|
-
keywords << :name if legacy_name != NOT_GIVEN
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
[username(specifier: name), fetch('internet.free_email')].join('@')
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def safe_email(legacy_name = NOT_GIVEN, name: nil)
|
|
28
|
-
warn_for_deprecated_arguments do |keywords|
|
|
29
|
-
keywords << :name if legacy_name != NOT_GIVEN
|
|
30
|
-
end
|
|
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
|
|
31
16
|
|
|
32
|
-
|
|
17
|
+
class << self
|
|
18
|
+
##
|
|
19
|
+
# Returns the email address
|
|
20
|
+
#
|
|
21
|
+
# @return [String]
|
|
22
|
+
#
|
|
23
|
+
# @param name [String]
|
|
24
|
+
# @param separators [Array]
|
|
25
|
+
# @param domain [String]
|
|
26
|
+
#
|
|
27
|
+
# @example
|
|
28
|
+
# Faker::Internet.email #=> "renee@zieme.test"
|
|
29
|
+
# Faker::Internet.email(name: 'smith') #=> "smith@bergnaum.test"
|
|
30
|
+
# Faker::Internet.email(name: 'sam smith', separators: ['-']) #=> "smith-sam@tromp.example"
|
|
31
|
+
# Faker::Internet.email(name: 'sam smith', separators: ['-'], domain: 'test') #=> "sam-smith@test.example"
|
|
32
|
+
# Faker::Internet.email(domain: 'gmail.com') #=> "foo@gmail.com"
|
|
33
|
+
def email(name: nil, separators: nil, domain: nil)
|
|
34
|
+
local_part = if separators
|
|
35
|
+
username(specifier: name, separators: separators)
|
|
36
|
+
else
|
|
37
|
+
username(specifier: name)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
sanitized_local_part = sanitize_email_local_part(local_part)
|
|
41
|
+
|
|
42
|
+
generate_domain = if domain.nil?
|
|
43
|
+
domain_name
|
|
44
|
+
else
|
|
45
|
+
domain_name(domain: domain)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
construct_email(sanitized_local_part, generate_domain)
|
|
33
49
|
end
|
|
34
50
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
51
|
+
##
|
|
52
|
+
# Returns the username
|
|
53
|
+
#
|
|
54
|
+
# @return [String]
|
|
55
|
+
#
|
|
56
|
+
# @param specifier [Integer, Range, String] When int value passed it returns the username longer than specifier. Max value can be 10^6
|
|
57
|
+
# @param separators [Array]
|
|
58
|
+
#
|
|
59
|
+
# @example
|
|
60
|
+
# Faker::Internet.username(specifier: 10) #=> "lulu.goodwin"
|
|
61
|
+
# Faker::Internet.username(specifier: 5..10) #=> "morris"
|
|
62
|
+
# Faker::Internet.username(specifier: 5..10) #=> "berryberry"
|
|
63
|
+
# Faker::Internet.username(specifier: 20, separators: ['_']) #=> "nikki_sawaynnikki_saway"
|
|
64
|
+
def username(specifier: nil, separators: %w[. _])
|
|
41
65
|
with_locale(:en) do
|
|
42
|
-
|
|
66
|
+
case specifier
|
|
67
|
+
when ::String
|
|
68
|
+
names = specifier.gsub("'", '').scan(/[[:word:]]+/)
|
|
69
|
+
shuffled_names = shuffle(names)
|
|
43
70
|
|
|
44
|
-
|
|
71
|
+
return shuffled_names.join(sample(separators)).downcase
|
|
72
|
+
when Integer
|
|
45
73
|
# If specifier is Integer and has large value, Argument error exception is raised to overcome memory full error
|
|
46
74
|
raise ArgumentError, 'Given argument is too large' if specifier > 10**6
|
|
47
75
|
|
|
@@ -53,7 +81,7 @@ module Faker
|
|
|
53
81
|
break unless result.length < specifier && tries < 7
|
|
54
82
|
end
|
|
55
83
|
return result * (specifier / result.length + 1) if specifier.positive?
|
|
56
|
-
|
|
84
|
+
when Range
|
|
57
85
|
tries = 0
|
|
58
86
|
result = nil
|
|
59
87
|
loop do
|
|
@@ -73,8 +101,6 @@ module Faker
|
|
|
73
101
|
end
|
|
74
102
|
end
|
|
75
103
|
|
|
76
|
-
# rubocop:disable Metrics/ParameterLists
|
|
77
|
-
|
|
78
104
|
##
|
|
79
105
|
# Produces a randomized string of characters suitable for passwords
|
|
80
106
|
#
|
|
@@ -97,106 +123,184 @@ module Faker
|
|
|
97
123
|
# Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true, special_characters: true) #=> "*%NkOnJsH4"
|
|
98
124
|
#
|
|
99
125
|
# @faker.version 2.1.3
|
|
100
|
-
def password(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
keywords << :special_characters if legacy_special_characters != NOT_GIVEN
|
|
107
|
-
end
|
|
126
|
+
def password(min_length: 8, max_length: 16, mix_case: true, special_characters: false)
|
|
127
|
+
raise ArgumentError, 'min_length and max_length must be greater than or equal to one' if min_length < 1 || max_length < 1
|
|
128
|
+
raise ArgumentError, 'min_length must be smaller than or equal to max_length' unless min_length <= max_length
|
|
129
|
+
|
|
130
|
+
character_types = []
|
|
131
|
+
required_min_length = 0
|
|
108
132
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
133
|
+
if mix_case
|
|
134
|
+
character_types << :mix_case
|
|
135
|
+
required_min_length += 2
|
|
136
|
+
end
|
|
112
137
|
|
|
113
|
-
if
|
|
114
|
-
|
|
115
|
-
|
|
138
|
+
if special_characters
|
|
139
|
+
character_types << :special_characters
|
|
140
|
+
required_min_length += 1
|
|
116
141
|
end
|
|
117
142
|
|
|
143
|
+
raise ArgumentError, "min_length should be at least #{required_min_length} to enable #{character_types.join(', ')} configuration" if min_length < required_min_length
|
|
144
|
+
|
|
145
|
+
target_length = rand(min_length..max_length)
|
|
146
|
+
|
|
147
|
+
password = []
|
|
148
|
+
character_bag = []
|
|
149
|
+
|
|
150
|
+
# use lower_chars by default and add upper_chars if mix_case
|
|
151
|
+
lower_chars = self::LLetters
|
|
152
|
+
password << sample(lower_chars)
|
|
153
|
+
character_bag += lower_chars
|
|
154
|
+
|
|
155
|
+
digits = ('0'..'9').to_a
|
|
156
|
+
password << sample(digits)
|
|
157
|
+
character_bag += digits
|
|
158
|
+
|
|
118
159
|
if mix_case
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
temp[index] = char.upcase if alpha_count.even?
|
|
123
|
-
alpha_count += 1
|
|
124
|
-
end
|
|
125
|
-
end
|
|
160
|
+
upper_chars = self::ULetters
|
|
161
|
+
password << sample(upper_chars)
|
|
162
|
+
character_bag += upper_chars
|
|
126
163
|
end
|
|
127
164
|
|
|
128
165
|
if special_characters
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
end
|
|
166
|
+
special_chars = %w[! @ # $ % ^ & *]
|
|
167
|
+
password << sample(special_chars)
|
|
168
|
+
character_bag += special_chars
|
|
133
169
|
end
|
|
134
170
|
|
|
135
|
-
|
|
136
|
-
end
|
|
171
|
+
password << sample(character_bag) while password.length < target_length
|
|
137
172
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
keywords << :subdomain if legacy_subdomain != NOT_GIVEN
|
|
141
|
-
end
|
|
173
|
+
shuffle(password).join
|
|
174
|
+
end
|
|
142
175
|
|
|
176
|
+
##
|
|
177
|
+
# Returns the domain name
|
|
178
|
+
#
|
|
179
|
+
# @return [String]
|
|
180
|
+
#
|
|
181
|
+
# @param subdomain [Bool] If true passed adds a subdomain in response
|
|
182
|
+
# @param domain [String]
|
|
183
|
+
#
|
|
184
|
+
# @example
|
|
185
|
+
# Faker::Internet.domain_name #=> "altenwerth-gerhold.example"
|
|
186
|
+
# Faker::Internet.domain_name(subdomain: true) #=> "metz.mclaughlin-brekke.test"
|
|
187
|
+
# Faker::Internet.domain_name(subdomain: true, domain: 'faker') #=> "foo.faker.test"
|
|
188
|
+
# Faker::Internet.domain_name(domain: 'faker-ruby.org') #=> "faker-ruby.org"
|
|
189
|
+
# Faker::Internet.domain_name(subdomain: true, domain: 'faker-ruby.org') #=> "foo.faker-ruby.org"
|
|
190
|
+
# Faker::Internet.domain_name(subdomain: true, domain: 'faker.faker-ruby.org') #=> "faker.faker-ruby.org"
|
|
191
|
+
def domain_name(subdomain: false, domain: nil)
|
|
143
192
|
with_locale(:en) do
|
|
144
193
|
if domain
|
|
145
194
|
domain
|
|
146
195
|
.split('.')
|
|
147
196
|
.map { |domain_part| Char.prepare(domain_part) }
|
|
148
197
|
.tap do |domain_elements|
|
|
149
|
-
|
|
150
|
-
|
|
198
|
+
if domain_elements.length < 2
|
|
199
|
+
domain_elements << domain_suffix(safe: true)
|
|
200
|
+
end
|
|
201
|
+
if subdomain && domain_elements.length < 3
|
|
202
|
+
domain_elements.unshift(Char.prepare(domain_word))
|
|
203
|
+
end
|
|
151
204
|
end.join('.')
|
|
152
205
|
else
|
|
153
|
-
[domain_word, domain_suffix].tap do |domain_elements|
|
|
154
|
-
|
|
206
|
+
[domain_word, domain_suffix(safe: true)].tap do |domain_elements|
|
|
207
|
+
if subdomain
|
|
208
|
+
domain_elements.unshift(Char.prepare(domain_word))
|
|
209
|
+
end
|
|
155
210
|
end.join('.')
|
|
156
211
|
end
|
|
157
212
|
end
|
|
158
213
|
end
|
|
159
214
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
215
|
+
##
|
|
216
|
+
# Fixes ä, ö, ü, ß characters in string passed with ae, oe, ue, ss resp.
|
|
217
|
+
#
|
|
218
|
+
# @return [String]
|
|
219
|
+
#
|
|
220
|
+
# @param string [String]
|
|
221
|
+
#
|
|
222
|
+
# @example
|
|
223
|
+
# Faker::Internet.fix_umlauts #=> ""
|
|
224
|
+
# Faker::Internet.fix_umlauts(string: 'faker') #=> "faker"
|
|
225
|
+
# Faker::Internet.fix_umlauts(string: 'faküer') #=> "fakueer"
|
|
226
|
+
def fix_umlauts(string: '')
|
|
165
227
|
Char.fix_umlauts(string)
|
|
166
228
|
end
|
|
167
229
|
|
|
230
|
+
##
|
|
231
|
+
# Returns the domain word for internet
|
|
232
|
+
#
|
|
233
|
+
# @return [String]
|
|
234
|
+
#
|
|
235
|
+
# @example
|
|
236
|
+
# Faker::Internet.domain_word #=> "senger"
|
|
168
237
|
def domain_word
|
|
169
|
-
with_locale(:en) { Char.prepare(Company.name.split
|
|
238
|
+
with_locale(:en) { Char.prepare(Company.name.split.first) }
|
|
170
239
|
end
|
|
171
240
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
241
|
+
## Returns the domain suffix e.g. com, org, co, biz, info etc.
|
|
242
|
+
#
|
|
243
|
+
# @return [String]
|
|
244
|
+
#
|
|
245
|
+
# @example
|
|
246
|
+
# Faker::Internet.domain_suffix #=> "com"
|
|
247
|
+
# Faker::Internet.domain_suffix #=> "biz"
|
|
248
|
+
# Faker::Internet.domain_suffix(safe: true) #=> "example"
|
|
249
|
+
# Faker::Internet.domain_suffix(safe: true) #=> "test"
|
|
250
|
+
def domain_suffix(safe: nil)
|
|
251
|
+
if safe
|
|
252
|
+
fetch('internet.safe_domain_suffix')
|
|
253
|
+
else
|
|
254
|
+
fetch('internet.domain_suffix')
|
|
179
255
|
end
|
|
256
|
+
end
|
|
180
257
|
|
|
258
|
+
##
|
|
259
|
+
# Returns the MAC address
|
|
260
|
+
#
|
|
261
|
+
# @return [String]
|
|
262
|
+
#
|
|
263
|
+
# @example
|
|
264
|
+
# Faker::Internet.mac_address #=> "74:d0:c9:22:95:12"
|
|
265
|
+
# Faker::Internet.mac_address(prefix: 'a') #=> "0a:91:ce:24:89:3b"
|
|
266
|
+
# Faker::Internet.mac_address(prefix: 'aa') #=> "aa:38:a0:3e:e8:41"
|
|
267
|
+
# Faker::Internet.mac_address(prefix: 'aa:44') #=> "aa:44:30:88:6e:95"
|
|
268
|
+
def mac_address(prefix: '')
|
|
181
269
|
prefix_digits = prefix.split(':').map { |d| d.to_i(16) }
|
|
182
270
|
address_digits = Array.new((6 - prefix_digits.size)) { rand(256) }
|
|
183
271
|
(prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
|
|
184
272
|
end
|
|
185
273
|
|
|
274
|
+
##
|
|
275
|
+
# Returns the IPv4 address
|
|
276
|
+
#
|
|
277
|
+
# @return [String]
|
|
278
|
+
#
|
|
279
|
+
# @example
|
|
280
|
+
# Faker::Internet.ip_v4_address #=> "97.117.128.93"
|
|
186
281
|
def ip_v4_address
|
|
187
282
|
[rand_in_range(0, 255), rand_in_range(0, 255),
|
|
188
283
|
rand_in_range(0, 255), rand_in_range(0, 255)].join('.')
|
|
189
284
|
end
|
|
190
285
|
|
|
286
|
+
##
|
|
287
|
+
# Returns the private IPv4 address
|
|
288
|
+
#
|
|
289
|
+
# @return [String]
|
|
290
|
+
#
|
|
291
|
+
# @example
|
|
292
|
+
# Faker::Internet.private_ip_v4_address #=> "127.120.80.42"
|
|
191
293
|
def private_ip_v4_address
|
|
192
|
-
|
|
193
|
-
loop do
|
|
194
|
-
addr = ip_v4_address
|
|
195
|
-
break if private_net_checker[addr]
|
|
196
|
-
end
|
|
197
|
-
addr
|
|
294
|
+
sample(PRIVATE_IPV4_ADDRESS_RANGES).map { |range| rand(range) }.join('.')
|
|
198
295
|
end
|
|
199
296
|
|
|
297
|
+
##
|
|
298
|
+
# Returns the public IPv4 address
|
|
299
|
+
#
|
|
300
|
+
# @return [String]
|
|
301
|
+
#
|
|
302
|
+
# @example
|
|
303
|
+
# Faker::Internet.public_ip_v4_address #=> "127.120.80.42"
|
|
200
304
|
def public_ip_v4_address
|
|
201
305
|
addr = nil
|
|
202
306
|
loop do
|
|
@@ -206,6 +310,13 @@ module Faker
|
|
|
206
310
|
addr
|
|
207
311
|
end
|
|
208
312
|
|
|
313
|
+
##
|
|
314
|
+
# Returns the private network regular expressions
|
|
315
|
+
#
|
|
316
|
+
# @return [Array]
|
|
317
|
+
#
|
|
318
|
+
# @example
|
|
319
|
+
# 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])\./]
|
|
209
320
|
def private_nets_regex
|
|
210
321
|
[
|
|
211
322
|
/^10\./, # 10.0.0.0 - 10.255.255.255
|
|
@@ -219,10 +330,25 @@ module Faker
|
|
|
219
330
|
]
|
|
220
331
|
end
|
|
221
332
|
|
|
333
|
+
##
|
|
334
|
+
# Returns lambda to check if address passed is private or not
|
|
335
|
+
#
|
|
336
|
+
# @return [Lambda]
|
|
337
|
+
#
|
|
338
|
+
# @example
|
|
339
|
+
# Faker::Internet.private_net_checker.call("127.120.80.42") #=> true
|
|
340
|
+
# Faker::Internet.private_net_checker.call("148.120.80.42") #=> false
|
|
222
341
|
def private_net_checker
|
|
223
342
|
->(addr) { private_nets_regex.any? { |net| net =~ addr } }
|
|
224
343
|
end
|
|
225
344
|
|
|
345
|
+
##
|
|
346
|
+
# Returns the reserved network regular expressions
|
|
347
|
+
#
|
|
348
|
+
# @return [Array]
|
|
349
|
+
#
|
|
350
|
+
# @example
|
|
351
|
+
# 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])\./]
|
|
226
352
|
def reserved_nets_regex
|
|
227
353
|
[
|
|
228
354
|
/^0\./, # 0.0.0.0 - 0.255.255.255
|
|
@@ -235,58 +361,143 @@ module Faker
|
|
|
235
361
|
]
|
|
236
362
|
end
|
|
237
363
|
|
|
364
|
+
##
|
|
365
|
+
# Returns lambda function to check address passed is reserved or not
|
|
366
|
+
#
|
|
367
|
+
# @return [Lambda]
|
|
368
|
+
#
|
|
369
|
+
# @example
|
|
370
|
+
# Faker::Internet.reserved_net_checker.call('192.88.99.255') #=> true
|
|
371
|
+
# Faker::Internet.reserved_net_checker.call('192.88.199.255') #=> false
|
|
238
372
|
def reserved_net_checker
|
|
239
373
|
->(addr) { (private_nets_regex + reserved_nets_regex).any? { |net| net =~ addr } }
|
|
240
374
|
end
|
|
241
375
|
|
|
376
|
+
##
|
|
377
|
+
# Returns Ipv4 address with CIDR, range from 1 to 31
|
|
378
|
+
#
|
|
379
|
+
# @return [String]
|
|
380
|
+
#
|
|
381
|
+
# @example
|
|
382
|
+
# Faker::Internet.ip_v4_cidr #=> "129.162.99.74/16"
|
|
383
|
+
# Faker::Internet.ip_v4_cidr #=> "129.162.99.74/24"
|
|
242
384
|
def ip_v4_cidr
|
|
243
385
|
"#{ip_v4_address}/#{rand(1..31)}"
|
|
244
386
|
end
|
|
245
387
|
|
|
388
|
+
##
|
|
389
|
+
# Returns Ipv6 address
|
|
390
|
+
#
|
|
391
|
+
# @return [String]
|
|
392
|
+
#
|
|
393
|
+
# @example
|
|
394
|
+
# Faker::Internet.ip_v6_address #=> "7754:76d4:c7aa:7646:ea68:1abb:4055:4343"
|
|
246
395
|
def ip_v6_address
|
|
247
396
|
(1..8).map { rand(65_536).to_s(16) }.join(':')
|
|
248
397
|
end
|
|
249
398
|
|
|
399
|
+
##
|
|
400
|
+
# Returns Ipv6 address with CIDR, range between 1 to 127
|
|
401
|
+
#
|
|
402
|
+
# @return [String]
|
|
403
|
+
#
|
|
404
|
+
# @example
|
|
405
|
+
# Faker::Internet.ip_v6_cidr #=> "beca:9b99:4bb6:9712:af2f:516f:8507:96e1/99"
|
|
250
406
|
def ip_v6_cidr
|
|
251
407
|
"#{ip_v6_address}/#{rand(1..127)}"
|
|
252
408
|
end
|
|
253
409
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
410
|
+
##
|
|
411
|
+
# Returns URL
|
|
412
|
+
#
|
|
413
|
+
# @return [String]
|
|
414
|
+
#
|
|
415
|
+
# @param host [String]
|
|
416
|
+
# @param path [String]
|
|
417
|
+
# @param scheme [String]
|
|
418
|
+
#
|
|
419
|
+
# @example
|
|
420
|
+
# Faker::Internet.url #=> "http://treutel.test/demarcus"
|
|
421
|
+
# Faker::Internet.url(host: 'faker') #=> "http://faker/shad"
|
|
422
|
+
# Faker::Internet.url(host: 'faker', path: '/docs') #=> "http://faker/docs"
|
|
423
|
+
# Faker::Internet.url(host: 'faker', path: '/docs', scheme: 'https') #=> "https://faker/docs"
|
|
424
|
+
def url(host: domain_name, path: "/#{username}", scheme: 'http')
|
|
263
425
|
"#{scheme}://#{host}#{path}"
|
|
264
426
|
end
|
|
265
427
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
428
|
+
##
|
|
429
|
+
# Returns unique string in URL
|
|
430
|
+
#
|
|
431
|
+
# @return [String]
|
|
432
|
+
#
|
|
433
|
+
# @param words [String] Comma or period separated words list
|
|
434
|
+
# @param glue [String] Separator to add between words passed, default used are '-' or '_'
|
|
435
|
+
#
|
|
436
|
+
# @example
|
|
437
|
+
# Faker::Internet.slug #=> "repudiandae-sed"
|
|
438
|
+
# Faker::Internet.slug(words: 'test, faker') #=> "test-faker"
|
|
439
|
+
# Faker::Internet.slug(words: 'test. faker') #=> "test-faker"
|
|
440
|
+
# Faker::Internet.slug(words: 'test. faker', glue: '$') #=> "test$faker"
|
|
441
|
+
def slug(words: nil, glue: nil)
|
|
272
442
|
glue ||= sample(%w[- _])
|
|
273
|
-
|
|
443
|
+
return words.delete(',.').gsub(' ', glue).downcase unless words.nil?
|
|
444
|
+
|
|
445
|
+
sample(translate('faker.internet.slug'), 2).join(glue)
|
|
274
446
|
end
|
|
275
447
|
|
|
448
|
+
##
|
|
449
|
+
# Generates random token
|
|
450
|
+
#
|
|
451
|
+
# @return[String]
|
|
452
|
+
#
|
|
453
|
+
# @example
|
|
454
|
+
# Faker::Internet.device_token #=> "749f535671cf6b34d8e794d212d00c703b96274e07161b18b082d0d70ef1052f"
|
|
276
455
|
def device_token
|
|
277
456
|
shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join
|
|
278
457
|
end
|
|
279
458
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
459
|
+
##
|
|
460
|
+
# Generates the random browser identifier
|
|
461
|
+
#
|
|
462
|
+
# @return [String]
|
|
463
|
+
#
|
|
464
|
+
# @param vendor [String] Name of vendor, supported vendors are aol, chrome, firefox, internet_explorer, netscape, opera, safari
|
|
465
|
+
#
|
|
466
|
+
# @example
|
|
467
|
+
# 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"
|
|
468
|
+
# 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"
|
|
469
|
+
# 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"
|
|
470
|
+
# 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"
|
|
471
|
+
def user_agent(vendor: nil)
|
|
285
472
|
agent_hash = translate('faker.internet.user_agent')
|
|
286
473
|
agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
|
|
287
474
|
sample(agents)
|
|
288
475
|
end
|
|
289
476
|
|
|
477
|
+
##
|
|
478
|
+
# Generate Web Crawler's user agents
|
|
479
|
+
#
|
|
480
|
+
# @return [String]
|
|
481
|
+
#
|
|
482
|
+
# @param vendor [String] Name of vendor, supported vendors are googlebot, bingbot, duckduckbot, baiduspider, yandexbot
|
|
483
|
+
#
|
|
484
|
+
# @example
|
|
485
|
+
# Faker::Internet.bot_user_agent #=> "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
|
|
486
|
+
# 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"
|
|
487
|
+
# 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"
|
|
488
|
+
def bot_user_agent(vendor: nil)
|
|
489
|
+
agent_hash = translate('faker.internet.bot_user_agent')
|
|
490
|
+
agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
|
|
491
|
+
sample(agents)
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
##
|
|
495
|
+
# Generated universally unique identifier
|
|
496
|
+
#
|
|
497
|
+
# @return [String]
|
|
498
|
+
#
|
|
499
|
+
# @example
|
|
500
|
+
# Faker::Internet.uuid #=> "8a6cdd40-6d78-4fdb-912b-190e3057197f"
|
|
290
501
|
def uuid
|
|
291
502
|
# borrowed from: https://github.com/ruby/ruby/blob/d48783bb0236db505fe1205d1d9822309de53a36/lib/securerandom.rb#L250
|
|
292
503
|
ary = Faker::Config.random.bytes(16).unpack('NnnnnN')
|
|
@@ -324,7 +535,44 @@ module Faker
|
|
|
324
535
|
s
|
|
325
536
|
end
|
|
326
537
|
|
|
538
|
+
##
|
|
539
|
+
# Produces a randomized hash of internet user details
|
|
540
|
+
# @example
|
|
541
|
+
# Faker::Internet.user #=> { username: 'alexie', email: 'trudie@grant.test' }
|
|
542
|
+
#
|
|
543
|
+
# @example
|
|
544
|
+
# Faker::Internet.user('username', 'email', 'password') #=> { username: 'alexie', email: 'gayle@kohler.test', password: 'DtEf9P8wS31iMyC' }
|
|
545
|
+
#
|
|
546
|
+
# @return [hash]
|
|
547
|
+
#
|
|
548
|
+
# @faker.version next
|
|
549
|
+
def user(*args)
|
|
550
|
+
user_hash = {}
|
|
551
|
+
args = %w[username email] if args.empty?
|
|
552
|
+
args.each { |arg| user_hash[:"#{arg}"] = send(arg) }
|
|
553
|
+
user_hash
|
|
554
|
+
end
|
|
555
|
+
|
|
327
556
|
alias user_name username
|
|
557
|
+
|
|
558
|
+
private
|
|
559
|
+
|
|
560
|
+
def sanitize_email_local_part(local_part)
|
|
561
|
+
char_range = [
|
|
562
|
+
Array('0'..'9'),
|
|
563
|
+
Array('A'..'Z'),
|
|
564
|
+
Array('a'..'z'),
|
|
565
|
+
"!#$%&'*+-/=?^_`{|}~.".chars
|
|
566
|
+
].flatten
|
|
567
|
+
|
|
568
|
+
local_part.chars.map do |char|
|
|
569
|
+
char_range.include?(char) ? char : '#'
|
|
570
|
+
end.join
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
def construct_email(local_part, domain_name)
|
|
574
|
+
[local_part, domain_name].join('@')
|
|
575
|
+
end
|
|
328
576
|
end
|
|
329
577
|
end
|
|
330
578
|
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class Internet
|
|
5
|
+
class HTTP < Base
|
|
6
|
+
STATUS_CODES = {
|
|
7
|
+
information: [100, 101, 102, 103],
|
|
8
|
+
successful: [200, 201, 202, 203, 204, 205, 206, 207, 208, 226],
|
|
9
|
+
redirect: [300, 301, 302, 303, 304, 305, 306, 307, 308],
|
|
10
|
+
client_error: [400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412,
|
|
11
|
+
413, 414, 415, 416, 417, 418, 421, 422, 423, 424, 425, 426, 428,
|
|
12
|
+
429, 431, 451],
|
|
13
|
+
server_error: [500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 511]
|
|
14
|
+
}.freeze
|
|
15
|
+
|
|
16
|
+
STATUS_CODES_GROUPS = STATUS_CODES.keys.freeze
|
|
17
|
+
|
|
18
|
+
class << self
|
|
19
|
+
##
|
|
20
|
+
# Produces an HTTP status code
|
|
21
|
+
#
|
|
22
|
+
# @return [Integer]
|
|
23
|
+
#
|
|
24
|
+
# @example
|
|
25
|
+
# Faker::Internet::HTTP.status_code #=> 418
|
|
26
|
+
# @example
|
|
27
|
+
# Faker::Internet::HTTP.status_code(group: :information) #=> 102
|
|
28
|
+
# @example
|
|
29
|
+
# Faker::Internet::HTTP.status_code(group: :successful) #=> 200
|
|
30
|
+
# @example
|
|
31
|
+
# Faker::Internet::HTTP.status_code(group: :redirect) #=> 306
|
|
32
|
+
# @example
|
|
33
|
+
# Faker::Internet::HTTP.status_code(group: :client_error) #=> 451
|
|
34
|
+
# @example
|
|
35
|
+
# Faker::Internet::HTTP.status_code(group: :server_error) #=> 502
|
|
36
|
+
#
|
|
37
|
+
# @faker.version 2.13.0
|
|
38
|
+
def status_code(group: nil)
|
|
39
|
+
return STATUS_CODES[STATUS_CODES_GROUPS.sample].sample unless group
|
|
40
|
+
|
|
41
|
+
raise ArgumentError, 'Invalid HTTP status code group' unless STATUS_CODES_GROUPS.include?(group)
|
|
42
|
+
|
|
43
|
+
STATUS_CODES[group].sample
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|