faker 2.11.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +810 -19
- data/History.md +5 -5
- data/README.md +232 -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 +14 -41
- data/lib/faker/books/the_kingkiller_chronicle.rb +61 -0
- data/lib/faker/creature/bird.rb +203 -0
- data/lib/faker/default/address.rb +40 -30
- 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 +54 -16
- data/lib/faker/default/chuck_norris.rb +1 -0
- data/lib/faker/default/code.rb +106 -38
- data/lib/faker/default/color.rb +77 -6
- data/lib/faker/default/commerce.rb +105 -28
- data/lib/faker/default/company.rb +116 -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 +17 -4
- data/lib/faker/default/crypto_coin.rb +48 -15
- data/lib/faker/default/date.rb +21 -50
- data/lib/faker/default/demographic.rb +1 -5
- data/lib/faker/default/driving_licence.rb +66 -10
- 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 +106 -48
- data/lib/faker/default/hobby.rb +22 -0
- data/lib/faker/default/id_number.rb +230 -13
- data/lib/faker/default/internet.rb +390 -108
- data/lib/faker/default/internet_http.rb +48 -0
- data/lib/faker/default/invoice.rb +37 -23
- data/lib/faker/default/json.rb +61 -23
- data/lib/faker/default/lorem.rb +171 -72
- 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 +21 -6
- data/lib/faker/default/number.rb +38 -68
- data/lib/faker/default/omniauth.rb +111 -53
- data/lib/faker/default/phone_number.rb +89 -10
- 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 +90 -0
- 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/time.rb +4 -34
- data/lib/faker/default/twitter.rb +42 -23
- data/lib/faker/default/types.rb +88 -29
- data/lib/faker/default/university.rb +45 -0
- data/lib/faker/default/vehicle.rb +212 -54
- 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/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 +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 +1 -1
- data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
- data/lib/faker/locations/australia.rb +47 -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/room.rb +63 -0
- data/lib/faker/movies/star_wars.rb +75 -7
- 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/show.rb +49 -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/tv_shows/aqua_teen_hunger_force.rb +13 -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/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 +40 -84
- data/lib/helpers/base58.rb +1 -1
- data/lib/helpers/char.rb +22 -27
- data/lib/helpers/unique_generator.rb +13 -13
- data/lib/locales/ar.yml +6 -1
- data/lib/locales/bg.yml +1 -1
- data/lib/locales/da-DK.yml +1 -1
- data/lib/locales/de-AT.yml +7 -6
- data/lib/locales/de-CH.yml +1697 -2
- data/lib/locales/de.yml +12 -6
- data/lib/locales/en/address.yml +4 -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/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/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/doraemon.yml +286 -0
- data/lib/locales/en/dota.yml +651 -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_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/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 +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/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/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 +21 -24
- data/lib/locales/en/show.yml +597 -0
- data/lib/locales/en/simpsons.yml +668 -0
- data/lib/locales/en/source.yml +35 -0
- 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/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 +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 +4 -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 +4 -1
- data/lib/locales/en-NG.yml +1 -0
- data/lib/locales/en-NZ.yml +4 -1
- data/lib/locales/en-PAK.yml +3 -1
- data/lib/locales/en-SG.yml +3 -1
- data/lib/locales/en-UG.yml +1 -0
- data/lib/locales/en-US.yml +38 -12
- data/lib/locales/en-ZA.yml +1 -1
- 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 +1 -1
- data/lib/locales/es.yml +58 -2
- 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 +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 +22 -6
- data/lib/locales/fr-CH.yml +3 -3
- data/lib/locales/fr.yml +1 -113
- data/lib/locales/hy.yml +2 -1
- data/lib/locales/id.yml +3 -1
- 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/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 +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 +10 -2
- data/lib/locales/pt.yml +4 -2
- 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 +76 -76
- data/lib/locales/tr.yml +1 -0
- data/lib/locales/uk.yml +3 -0
- data/lib/locales/vi.yml +1 -0
- data/lib/locales/zh-CN.yml +1 -0
- data/lib/locales/zh-TW.yml +1 -0
- metadata +219 -29
- 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,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
|
-
warn_for_deprecated_arguments do |keywords|
|
|
8
|
-
keywords << :name if legacy_name != NOT_GIVEN
|
|
9
|
-
keywords << :separators if legacy_separators != NOT_GIVEN
|
|
10
|
-
end
|
|
18
|
+
extend Gem::Deprecate
|
|
11
19
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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)
|
|
17
51
|
end
|
|
18
52
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
+
)
|
|
25
68
|
end
|
|
69
|
+
deprecate :free_email, :email, 2023, 10
|
|
26
70
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
+
)
|
|
33
86
|
end
|
|
87
|
+
deprecate :safe_email, :email, 2023, 10
|
|
34
88
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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[. _])
|
|
41
103
|
with_locale(:en) do
|
|
42
104
|
return shuffle(specifier.scan(/[[:word:]]+/)).join(sample(separators)).downcase if specifier.respond_to?(:scan)
|
|
43
105
|
|
|
44
|
-
|
|
106
|
+
case specifier
|
|
107
|
+
when Integer
|
|
45
108
|
# If specifier is Integer and has large value, Argument error exception is raised to overcome memory full error
|
|
46
109
|
raise ArgumentError, 'Given argument is too large' if specifier > 10**6
|
|
47
110
|
|
|
@@ -53,7 +116,7 @@ module Faker
|
|
|
53
116
|
break unless result.length < specifier && tries < 7
|
|
54
117
|
end
|
|
55
118
|
return result * (specifier / result.length + 1) if specifier.positive?
|
|
56
|
-
|
|
119
|
+
when Range
|
|
57
120
|
tries = 0
|
|
58
121
|
result = nil
|
|
59
122
|
loop do
|
|
@@ -73,8 +136,6 @@ module Faker
|
|
|
73
136
|
end
|
|
74
137
|
end
|
|
75
138
|
|
|
76
|
-
# rubocop:disable Metrics/ParameterLists
|
|
77
|
-
|
|
78
139
|
##
|
|
79
140
|
# Produces a randomized string of characters suitable for passwords
|
|
80
141
|
#
|
|
@@ -97,106 +158,183 @@ module Faker
|
|
|
97
158
|
# Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true, special_characters: true) #=> "*%NkOnJsH4"
|
|
98
159
|
#
|
|
99
160
|
# @faker.version 2.1.3
|
|
100
|
-
def password(
|
|
101
|
-
|
|
102
|
-
warn_for_deprecated_arguments do |keywords|
|
|
103
|
-
keywords << :min_length if legacy_min_length != NOT_GIVEN
|
|
104
|
-
keywords << :max_length if legacy_max_length != NOT_GIVEN
|
|
105
|
-
keywords << :mix_case if legacy_mix_case != NOT_GIVEN
|
|
106
|
-
keywords << :special_characters if legacy_special_characters != NOT_GIVEN
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
min_alpha = mix_case ? 2 : 0
|
|
110
|
-
temp = Lorem.characters(number: min_length, min_alpha: min_alpha)
|
|
111
|
-
diff_length = max_length - min_length
|
|
161
|
+
def password(min_length: 8, max_length: 16, mix_case: true, special_characters: false)
|
|
162
|
+
raise ArgumentError, 'max_length must be more than min_length' if max_length < min_length
|
|
112
163
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
temp += Lorem.characters(number: diff_rand)
|
|
116
|
-
end
|
|
164
|
+
character_types = []
|
|
165
|
+
required_min_length = 0
|
|
117
166
|
|
|
118
167
|
if mix_case
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
if char =~ /[[:alpha:]]/
|
|
122
|
-
temp[index] = char.upcase if alpha_count.even?
|
|
123
|
-
alpha_count += 1
|
|
124
|
-
end
|
|
125
|
-
end
|
|
168
|
+
character_types << :mix_case
|
|
169
|
+
required_min_length += 2
|
|
126
170
|
end
|
|
127
171
|
|
|
128
172
|
if special_characters
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
temp[i] = chars[rand(chars.length)]
|
|
132
|
-
end
|
|
173
|
+
character_types << :special_characters
|
|
174
|
+
required_min_length += 1
|
|
133
175
|
end
|
|
134
176
|
|
|
135
|
-
|
|
136
|
-
|
|
177
|
+
raise ArgumentError, "min_length should be at least #{required_min_length} to enable #{character_types.join(', ')} configuration" if min_length < required_min_length
|
|
178
|
+
|
|
179
|
+
target_length = rand(min_length..max_length)
|
|
180
|
+
|
|
181
|
+
password = []
|
|
182
|
+
character_bag = []
|
|
137
183
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
184
|
+
# use lower_chars by default and add upper_chars if mix_case
|
|
185
|
+
lower_chars = ('a'..'z').to_a
|
|
186
|
+
password << lower_chars[rand(lower_chars.count - 1)]
|
|
187
|
+
character_bag += lower_chars
|
|
188
|
+
|
|
189
|
+
digits = ('1'..'9').to_a
|
|
190
|
+
password << digits[rand(digits.count - 1)]
|
|
191
|
+
character_bag += digits
|
|
192
|
+
|
|
193
|
+
if character_types.include?(:mix_case)
|
|
194
|
+
upper_chars = ('A'..'Z').to_a
|
|
195
|
+
password << upper_chars[rand(upper_chars.count - 1)]
|
|
196
|
+
character_bag += upper_chars
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
if character_types.include?(:special_characters)
|
|
200
|
+
special_chars = %w[! @ # $ % ^ & *]
|
|
201
|
+
password << special_chars[rand(special_chars.count - 1)]
|
|
202
|
+
character_bag += special_chars
|
|
141
203
|
end
|
|
142
204
|
|
|
205
|
+
password << character_bag[rand(character_bag.count - 1)] while password.length < target_length
|
|
206
|
+
|
|
207
|
+
shuffle(password).join
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
##
|
|
211
|
+
# Returns the domain name
|
|
212
|
+
#
|
|
213
|
+
# @return [String]
|
|
214
|
+
#
|
|
215
|
+
# @param subdomain [Bool] If true passed adds a subdomain in response
|
|
216
|
+
# @param domain [String]
|
|
217
|
+
#
|
|
218
|
+
# @example
|
|
219
|
+
# Faker::Internet.domain_name #=> "altenwerth-gerhold.example"
|
|
220
|
+
# Faker::Internet.domain_name(subdomain: true) #=> "metz.mclaughlin-brekke.test"
|
|
221
|
+
# Faker::Internet.domain_name(subdomain: true, domain: 'faker') #=> "foo.faker.test"
|
|
222
|
+
# Faker::Internet.domain_name(domain: 'faker-ruby.org') #=> "faker-ruby.org"
|
|
223
|
+
# Faker::Internet.domain_name(subdomain: true, domain: 'faker-ruby.org') #=> "foo.faker-ruby.org"
|
|
224
|
+
# Faker::Internet.domain_name(subdomain: true, domain: 'faker.faker-ruby.org') #=> "faker.faker-ruby.org"
|
|
225
|
+
def domain_name(subdomain: false, domain: nil)
|
|
143
226
|
with_locale(:en) do
|
|
144
227
|
if domain
|
|
145
228
|
domain
|
|
146
229
|
.split('.')
|
|
147
230
|
.map { |domain_part| Char.prepare(domain_part) }
|
|
148
231
|
.tap do |domain_elements|
|
|
149
|
-
|
|
150
|
-
|
|
232
|
+
if domain_elements.length < 2
|
|
233
|
+
domain_elements << domain_suffix(safe: true)
|
|
234
|
+
end
|
|
235
|
+
if subdomain && domain_elements.length < 3
|
|
236
|
+
domain_elements.unshift(Char.prepare(domain_word))
|
|
237
|
+
end
|
|
151
238
|
end.join('.')
|
|
152
239
|
else
|
|
153
|
-
[domain_word, domain_suffix].tap do |domain_elements|
|
|
154
|
-
|
|
240
|
+
[domain_word, domain_suffix(safe: true)].tap do |domain_elements|
|
|
241
|
+
if subdomain
|
|
242
|
+
domain_elements.unshift(Char.prepare(domain_word))
|
|
243
|
+
end
|
|
155
244
|
end.join('.')
|
|
156
245
|
end
|
|
157
246
|
end
|
|
158
247
|
end
|
|
159
248
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
249
|
+
##
|
|
250
|
+
# Fixes ä, ö, ü, ß characters in string passed with ae, oe, ue, ss resp.
|
|
251
|
+
#
|
|
252
|
+
# @return [String]
|
|
253
|
+
#
|
|
254
|
+
# @param string [String]
|
|
255
|
+
#
|
|
256
|
+
# @example
|
|
257
|
+
# Faker::Internet.fix_umlauts #=> ""
|
|
258
|
+
# Faker::Internet.fix_umlauts(string: 'faker') #=> "faker"
|
|
259
|
+
# Faker::Internet.fix_umlauts(string: 'faküer') #=> "fakueer"
|
|
260
|
+
def fix_umlauts(string: '')
|
|
165
261
|
Char.fix_umlauts(string)
|
|
166
262
|
end
|
|
167
263
|
|
|
264
|
+
##
|
|
265
|
+
# Returns the domain word for internet
|
|
266
|
+
#
|
|
267
|
+
# @return [String]
|
|
268
|
+
#
|
|
269
|
+
# @example
|
|
270
|
+
# Faker::Internet.domain_word #=> "senger"
|
|
168
271
|
def domain_word
|
|
169
|
-
with_locale(:en) { Char.prepare(Company.name.split
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
def domain_suffix
|
|
173
|
-
fetch('internet.domain_suffix')
|
|
272
|
+
with_locale(:en) { Char.prepare(Company.name.split.first) }
|
|
174
273
|
end
|
|
175
274
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
275
|
+
## Returns the domain suffix e.g. com, org, co, biz, info etc.
|
|
276
|
+
#
|
|
277
|
+
# @return [String]
|
|
278
|
+
#
|
|
279
|
+
# @example
|
|
280
|
+
# Faker::Internet.domain_suffix #=> "com"
|
|
281
|
+
# Faker::Internet.domain_suffix #=> "biz"
|
|
282
|
+
# Faker::Internet.domain_suffix(safe: true) #=> "example"
|
|
283
|
+
# Faker::Internet.domain_suffix(safe: true) #=> "test"
|
|
284
|
+
def domain_suffix(safe: nil)
|
|
285
|
+
if safe
|
|
286
|
+
fetch('internet.safe_domain_suffix')
|
|
287
|
+
else
|
|
288
|
+
fetch('internet.domain_suffix')
|
|
179
289
|
end
|
|
290
|
+
end
|
|
180
291
|
|
|
292
|
+
##
|
|
293
|
+
# Returns the MAC address
|
|
294
|
+
#
|
|
295
|
+
# @return [String]
|
|
296
|
+
#
|
|
297
|
+
# @example
|
|
298
|
+
# Faker::Internet.mac_address #=> "74:d0:c9:22:95:12"
|
|
299
|
+
# Faker::Internet.mac_address(prefix: 'a') #=> "0a:91:ce:24:89:3b"
|
|
300
|
+
# Faker::Internet.mac_address(prefix: 'aa') #=> "aa:38:a0:3e:e8:41"
|
|
301
|
+
# Faker::Internet.mac_address(prefix: 'aa:44') #=> "aa:44:30:88:6e:95"
|
|
302
|
+
def mac_address(prefix: '')
|
|
181
303
|
prefix_digits = prefix.split(':').map { |d| d.to_i(16) }
|
|
182
304
|
address_digits = Array.new((6 - prefix_digits.size)) { rand(256) }
|
|
183
305
|
(prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
|
|
184
306
|
end
|
|
185
307
|
|
|
308
|
+
##
|
|
309
|
+
# Returns the IPv4 address
|
|
310
|
+
#
|
|
311
|
+
# @return [String]
|
|
312
|
+
#
|
|
313
|
+
# @example
|
|
314
|
+
# Faker::Internet.ip_v4_address #=> "97.117.128.93"
|
|
186
315
|
def ip_v4_address
|
|
187
316
|
[rand_in_range(0, 255), rand_in_range(0, 255),
|
|
188
317
|
rand_in_range(0, 255), rand_in_range(0, 255)].join('.')
|
|
189
318
|
end
|
|
190
319
|
|
|
320
|
+
##
|
|
321
|
+
# Returns the private IPv4 address
|
|
322
|
+
#
|
|
323
|
+
# @return [String]
|
|
324
|
+
#
|
|
325
|
+
# @example
|
|
326
|
+
# Faker::Internet.private_ip_v4_address #=> "127.120.80.42"
|
|
191
327
|
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
|
|
328
|
+
sample(PRIVATE_IPV4_ADDRESS_RANGES).map { |range| rand(range) }.join('.')
|
|
198
329
|
end
|
|
199
330
|
|
|
331
|
+
##
|
|
332
|
+
# Returns the public IPv4 address
|
|
333
|
+
#
|
|
334
|
+
# @return [String]
|
|
335
|
+
#
|
|
336
|
+
# @example
|
|
337
|
+
# Faker::Internet.public_ip_v4_address #=> "127.120.80.42"
|
|
200
338
|
def public_ip_v4_address
|
|
201
339
|
addr = nil
|
|
202
340
|
loop do
|
|
@@ -206,6 +344,13 @@ module Faker
|
|
|
206
344
|
addr
|
|
207
345
|
end
|
|
208
346
|
|
|
347
|
+
##
|
|
348
|
+
# Returns the private network regular expressions
|
|
349
|
+
#
|
|
350
|
+
# @return [Array]
|
|
351
|
+
#
|
|
352
|
+
# @example
|
|
353
|
+
# 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
354
|
def private_nets_regex
|
|
210
355
|
[
|
|
211
356
|
/^10\./, # 10.0.0.0 - 10.255.255.255
|
|
@@ -219,10 +364,25 @@ module Faker
|
|
|
219
364
|
]
|
|
220
365
|
end
|
|
221
366
|
|
|
367
|
+
##
|
|
368
|
+
# Returns lambda to check if address passed is private or not
|
|
369
|
+
#
|
|
370
|
+
# @return [Lambda]
|
|
371
|
+
#
|
|
372
|
+
# @example
|
|
373
|
+
# Faker::Internet.private_net_checker.call("127.120.80.42") #=> true
|
|
374
|
+
# Faker::Internet.private_net_checker.call("148.120.80.42") #=> false
|
|
222
375
|
def private_net_checker
|
|
223
376
|
->(addr) { private_nets_regex.any? { |net| net =~ addr } }
|
|
224
377
|
end
|
|
225
378
|
|
|
379
|
+
##
|
|
380
|
+
# Returns the reserved network regular expressions
|
|
381
|
+
#
|
|
382
|
+
# @return [Array]
|
|
383
|
+
#
|
|
384
|
+
# @example
|
|
385
|
+
# 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
386
|
def reserved_nets_regex
|
|
227
387
|
[
|
|
228
388
|
/^0\./, # 0.0.0.0 - 0.255.255.255
|
|
@@ -235,58 +395,143 @@ module Faker
|
|
|
235
395
|
]
|
|
236
396
|
end
|
|
237
397
|
|
|
398
|
+
##
|
|
399
|
+
# Returns lambda function to check address passed is reserved or not
|
|
400
|
+
#
|
|
401
|
+
# @return [Lambda]
|
|
402
|
+
#
|
|
403
|
+
# @example
|
|
404
|
+
# Faker::Internet.reserved_net_checker.call('192.88.99.255') #=> true
|
|
405
|
+
# Faker::Internet.reserved_net_checker.call('192.88.199.255') #=> false
|
|
238
406
|
def reserved_net_checker
|
|
239
407
|
->(addr) { (private_nets_regex + reserved_nets_regex).any? { |net| net =~ addr } }
|
|
240
408
|
end
|
|
241
409
|
|
|
410
|
+
##
|
|
411
|
+
# Returns Ipv4 address with CIDR, range from 1 to 31
|
|
412
|
+
#
|
|
413
|
+
# @return [String]
|
|
414
|
+
#
|
|
415
|
+
# @example
|
|
416
|
+
# Faker::Internet.ip_v4_cidr #=> "129.162.99.74/16"
|
|
417
|
+
# Faker::Internet.ip_v4_cidr #=> "129.162.99.74/24"
|
|
242
418
|
def ip_v4_cidr
|
|
243
419
|
"#{ip_v4_address}/#{rand(1..31)}"
|
|
244
420
|
end
|
|
245
421
|
|
|
422
|
+
##
|
|
423
|
+
# Returns Ipv6 address
|
|
424
|
+
#
|
|
425
|
+
# @return [String]
|
|
426
|
+
#
|
|
427
|
+
# @example
|
|
428
|
+
# Faker::Internet.ip_v6_address #=> "7754:76d4:c7aa:7646:ea68:1abb:4055:4343"
|
|
246
429
|
def ip_v6_address
|
|
247
430
|
(1..8).map { rand(65_536).to_s(16) }.join(':')
|
|
248
431
|
end
|
|
249
432
|
|
|
433
|
+
##
|
|
434
|
+
# Returns Ipv6 address with CIDR, range between 1 to 127
|
|
435
|
+
#
|
|
436
|
+
# @return [String]
|
|
437
|
+
#
|
|
438
|
+
# @example
|
|
439
|
+
# Faker::Internet.ip_v6_cidr #=> "beca:9b99:4bb6:9712:af2f:516f:8507:96e1/99"
|
|
250
440
|
def ip_v6_cidr
|
|
251
441
|
"#{ip_v6_address}/#{rand(1..127)}"
|
|
252
442
|
end
|
|
253
443
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
444
|
+
##
|
|
445
|
+
# Returns URL
|
|
446
|
+
#
|
|
447
|
+
# @return [String]
|
|
448
|
+
#
|
|
449
|
+
# @param host [String]
|
|
450
|
+
# @param path [String]
|
|
451
|
+
# @param scheme [String]
|
|
452
|
+
#
|
|
453
|
+
# @example
|
|
454
|
+
# Faker::Internet.url #=> "http://treutel.test/demarcus"
|
|
455
|
+
# Faker::Internet.url(host: 'faker') #=> "http://faker/shad"
|
|
456
|
+
# Faker::Internet.url(host: 'faker', path: '/docs') #=> "http://faker/docs"
|
|
457
|
+
# Faker::Internet.url(host: 'faker', path: '/docs', scheme: 'https') #=> "https://faker/docs"
|
|
458
|
+
def url(host: domain_name, path: "/#{username}", scheme: 'http')
|
|
263
459
|
"#{scheme}://#{host}#{path}"
|
|
264
460
|
end
|
|
265
461
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
462
|
+
##
|
|
463
|
+
# Returns unique string in URL
|
|
464
|
+
#
|
|
465
|
+
# @return [String]
|
|
466
|
+
#
|
|
467
|
+
# @param words [String] Comma or period separated words list
|
|
468
|
+
# @param glue [String] Separator to add between words passed, default used are '-' or '_'
|
|
469
|
+
#
|
|
470
|
+
# @example
|
|
471
|
+
# Faker::Internet.slug #=> "repudiandae-sed"
|
|
472
|
+
# Faker::Internet.slug(words: 'test, faker') #=> "test-faker"
|
|
473
|
+
# Faker::Internet.slug(words: 'test. faker') #=> "test-faker"
|
|
474
|
+
# Faker::Internet.slug(words: 'test. faker', glue: '$') #=> "test$faker"
|
|
475
|
+
def slug(words: nil, glue: nil)
|
|
272
476
|
glue ||= sample(%w[- _])
|
|
273
|
-
|
|
477
|
+
return words.delete(',.').gsub(' ', glue).downcase unless words.nil?
|
|
478
|
+
|
|
479
|
+
sample(translate('faker.internet.slug'), 2).join(glue)
|
|
274
480
|
end
|
|
275
481
|
|
|
482
|
+
##
|
|
483
|
+
# Generates random token
|
|
484
|
+
#
|
|
485
|
+
# @return[String]
|
|
486
|
+
#
|
|
487
|
+
# @example
|
|
488
|
+
# Faker::Internet.device_token #=> "749f535671cf6b34d8e794d212d00c703b96274e07161b18b082d0d70ef1052f"
|
|
276
489
|
def device_token
|
|
277
490
|
shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join
|
|
278
491
|
end
|
|
279
492
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
493
|
+
##
|
|
494
|
+
# Generates the random browser identifier
|
|
495
|
+
#
|
|
496
|
+
# @return [String]
|
|
497
|
+
#
|
|
498
|
+
# @param vendor [String] Name of vendor, supported vendors are aol, chrome, firefox, internet_explorer, netscape, opera, safari
|
|
499
|
+
#
|
|
500
|
+
# @example
|
|
501
|
+
# 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"
|
|
502
|
+
# 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"
|
|
503
|
+
# 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"
|
|
504
|
+
# 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"
|
|
505
|
+
def user_agent(vendor: nil)
|
|
285
506
|
agent_hash = translate('faker.internet.user_agent')
|
|
286
507
|
agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
|
|
287
508
|
sample(agents)
|
|
288
509
|
end
|
|
289
510
|
|
|
511
|
+
##
|
|
512
|
+
# Generate Web Crawler's user agents
|
|
513
|
+
#
|
|
514
|
+
# @return [String]
|
|
515
|
+
#
|
|
516
|
+
# @param vendor [String] Name of vendor, supported vendors are googlebot, bingbot, duckduckbot, baiduspider, yandexbot
|
|
517
|
+
#
|
|
518
|
+
# @example
|
|
519
|
+
# Faker::Internet.bot_user_agent #=> "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
|
|
520
|
+
# 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"
|
|
521
|
+
# 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"
|
|
522
|
+
def bot_user_agent(vendor: nil)
|
|
523
|
+
agent_hash = translate('faker.internet.bot_user_agent')
|
|
524
|
+
agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
|
|
525
|
+
sample(agents)
|
|
526
|
+
end
|
|
527
|
+
|
|
528
|
+
##
|
|
529
|
+
# Generated universally unique identifier
|
|
530
|
+
#
|
|
531
|
+
# @return [String]
|
|
532
|
+
#
|
|
533
|
+
# @example
|
|
534
|
+
# Faker::Internet.uuid #=> "8a6cdd40-6d78-4fdb-912b-190e3057197f"
|
|
290
535
|
def uuid
|
|
291
536
|
# borrowed from: https://github.com/ruby/ruby/blob/d48783bb0236db505fe1205d1d9822309de53a36/lib/securerandom.rb#L250
|
|
292
537
|
ary = Faker::Config.random.bytes(16).unpack('NnnnnN')
|
|
@@ -324,7 +569,44 @@ module Faker
|
|
|
324
569
|
s
|
|
325
570
|
end
|
|
326
571
|
|
|
572
|
+
##
|
|
573
|
+
# Produces a randomized hash of internet user details
|
|
574
|
+
# @example
|
|
575
|
+
# Faker::Internet.user #=> { username: 'alexie', email: 'trudie@grant.test' }
|
|
576
|
+
#
|
|
577
|
+
# @example
|
|
578
|
+
# Faker::Internet.user('username', 'email', 'password') #=> { username: 'alexie', email: 'gayle@kohler.test', password: 'DtEf9P8wS31iMyC' }
|
|
579
|
+
#
|
|
580
|
+
# @return [hash]
|
|
581
|
+
#
|
|
582
|
+
# @faker.version next
|
|
583
|
+
def user(*args)
|
|
584
|
+
user_hash = {}
|
|
585
|
+
args = %w[username email] if args.empty?
|
|
586
|
+
args.each { |arg| user_hash[:"#{arg}"] = send(arg) }
|
|
587
|
+
user_hash
|
|
588
|
+
end
|
|
589
|
+
|
|
327
590
|
alias user_name username
|
|
591
|
+
|
|
592
|
+
private
|
|
593
|
+
|
|
594
|
+
def sanitize_email_local_part(local_part)
|
|
595
|
+
char_range = [
|
|
596
|
+
Array('0'..'9'),
|
|
597
|
+
Array('A'..'Z'),
|
|
598
|
+
Array('a'..'z'),
|
|
599
|
+
"!#$%&'*+-/=?^_`{|}~.".chars
|
|
600
|
+
].flatten
|
|
601
|
+
|
|
602
|
+
local_part.chars.map do |char|
|
|
603
|
+
char_range.include?(char) ? char : '#'
|
|
604
|
+
end.join
|
|
605
|
+
end
|
|
606
|
+
|
|
607
|
+
def construct_email(local_part, domain_name)
|
|
608
|
+
[local_part, domain_name].join('@')
|
|
609
|
+
end
|
|
328
610
|
end
|
|
329
611
|
end
|
|
330
612
|
end
|