faker 2.1.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 +7 -0
- data/CHANGELOG.md +1192 -0
- data/History.md +176 -0
- data/License.txt +20 -0
- data/README.md +364 -0
- data/bin/faker +5 -0
- data/lib/faker.rb +253 -0
- data/lib/faker/blockchain/bitcoin.rb +34 -0
- data/lib/faker/blockchain/ethereum.rb +16 -0
- data/lib/faker/blockchain/tezos.rb +51 -0
- data/lib/faker/books/book.rb +25 -0
- data/lib/faker/books/culture_series.rb +34 -0
- data/lib/faker/books/dune.rb +58 -0
- data/lib/faker/books/lovecraft.rb +73 -0
- data/lib/faker/creature/animal.rb +13 -0
- data/lib/faker/creature/cat.rb +23 -0
- data/lib/faker/creature/dog.rb +43 -0
- data/lib/faker/creature/horse.rb +19 -0
- data/lib/faker/default/address.rb +103 -0
- data/lib/faker/default/alphanumeric.rb +24 -0
- data/lib/faker/default/ancient.rb +23 -0
- data/lib/faker/default/app.rb +23 -0
- data/lib/faker/default/appliance.rb +15 -0
- data/lib/faker/default/artist.rb +11 -0
- data/lib/faker/default/avatar.rb +18 -0
- data/lib/faker/default/bank.rb +100 -0
- data/lib/faker/default/beer.rb +41 -0
- data/lib/faker/default/boolean.rb +11 -0
- data/lib/faker/default/bossa_nova.rb +15 -0
- data/lib/faker/default/business.rb +23 -0
- data/lib/faker/default/cannabis.rb +45 -0
- data/lib/faker/default/chile_rut.rb +44 -0
- data/lib/faker/default/chuck_norris.rb +14 -0
- data/lib/faker/default/code.rb +188 -0
- data/lib/faker/default/coffee.rb +37 -0
- data/lib/faker/default/coin.rb +15 -0
- data/lib/faker/default/color.rb +32 -0
- data/lib/faker/default/commerce.rb +66 -0
- data/lib/faker/default/company.rb +256 -0
- data/lib/faker/default/compass.rb +67 -0
- data/lib/faker/default/construction.rb +29 -0
- data/lib/faker/default/cosmere.rb +48 -0
- data/lib/faker/default/crypto.rb +21 -0
- data/lib/faker/default/crypto_coin.rb +37 -0
- data/lib/faker/default/currency.rb +19 -0
- data/lib/faker/default/date.rb +69 -0
- data/lib/faker/default/dc_comics.rb +25 -0
- data/lib/faker/default/demographic.rb +37 -0
- data/lib/faker/default/dessert.rb +21 -0
- data/lib/faker/default/device.rb +31 -0
- data/lib/faker/default/driving_licence.rb +59 -0
- data/lib/faker/default/educator.rb +35 -0
- data/lib/faker/default/electrical_components.rb +21 -0
- data/lib/faker/default/esport.rb +27 -0
- data/lib/faker/default/file.rb +32 -0
- data/lib/faker/default/fillmurray.rb +15 -0
- data/lib/faker/default/finance.rb +40 -0
- data/lib/faker/default/food.rb +49 -0
- data/lib/faker/default/funny_name.rb +45 -0
- data/lib/faker/default/gender.rb +15 -0
- data/lib/faker/default/greek_philosophers.rb +15 -0
- data/lib/faker/default/hacker.rb +45 -0
- data/lib/faker/default/hipster.rb +58 -0
- data/lib/faker/default/house.rb +15 -0
- data/lib/faker/default/id_number.rb +119 -0
- data/lib/faker/default/industry_segments.rb +25 -0
- data/lib/faker/default/internet.rb +207 -0
- data/lib/faker/default/invoice.rb +96 -0
- data/lib/faker/default/job.rb +25 -0
- data/lib/faker/default/json.rb +70 -0
- data/lib/faker/default/kpop.rb +31 -0
- data/lib/faker/default/lorem.rb +80 -0
- data/lib/faker/default/lorem_flickr.rb +45 -0
- data/lib/faker/default/lorem_pixel.rb +38 -0
- data/lib/faker/default/markdown.rb +79 -0
- data/lib/faker/default/marketing.rb +13 -0
- data/lib/faker/default/measurement.rb +84 -0
- data/lib/faker/default/military.rb +27 -0
- data/lib/faker/default/name.rb +54 -0
- data/lib/faker/default/nation.rb +33 -0
- data/lib/faker/default/nato_phonetic_alphabet.rb +11 -0
- data/lib/faker/default/nhs.rb +34 -0
- data/lib/faker/default/number.rb +105 -0
- data/lib/faker/default/omniauth.rb +330 -0
- data/lib/faker/default/phone_number.rb +50 -0
- data/lib/faker/default/placeholdit.rb +31 -0
- data/lib/faker/default/programming_language.rb +15 -0
- data/lib/faker/default/relationship.rb +42 -0
- data/lib/faker/default/restaurant.rb +11 -0
- data/lib/faker/default/science.rb +19 -0
- data/lib/faker/default/slack_emoji.rb +43 -0
- data/lib/faker/default/source.rb +20 -0
- data/lib/faker/default/south_africa.rb +51 -0
- data/lib/faker/default/space.rb +64 -0
- data/lib/faker/default/string.rb +45 -0
- data/lib/faker/default/stripe.rb +65 -0
- data/lib/faker/default/subscription.rb +25 -0
- data/lib/faker/default/superhero.rb +27 -0
- data/lib/faker/default/team.rb +29 -0
- data/lib/faker/default/time.rb +69 -0
- data/lib/faker/default/twitter.rb +174 -0
- data/lib/faker/default/types.rb +79 -0
- data/lib/faker/default/university.rb +30 -0
- data/lib/faker/default/vehicle.rb +149 -0
- data/lib/faker/default/verb.rb +27 -0
- data/lib/faker/default/world_cup.rb +27 -0
- data/lib/faker/games/dota.rb +29 -0
- data/lib/faker/games/elder_scrolls.rb +41 -0
- data/lib/faker/games/fallout.rb +25 -0
- data/lib/faker/games/game.rb +21 -0
- data/lib/faker/games/half_life.rb +21 -0
- data/lib/faker/games/heroes.rb +21 -0
- data/lib/faker/games/heroes_of_the_storm.rb +25 -0
- data/lib/faker/games/league_of_legends.rb +33 -0
- data/lib/faker/games/myst.rb +29 -0
- data/lib/faker/games/overwatch.rb +21 -0
- data/lib/faker/games/pokemon.rb +21 -0
- data/lib/faker/games/sonic_the_hedgehog.rb +21 -0
- data/lib/faker/games/super_smash_bros.rb +17 -0
- data/lib/faker/games/witcher.rb +33 -0
- data/lib/faker/games/world_of_warcraft.rb +17 -0
- data/lib/faker/games/zelda.rb +26 -0
- data/lib/faker/japanese_media/dragon_ball.rb +13 -0
- data/lib/faker/japanese_media/one_piece.rb +33 -0
- data/lib/faker/japanese_media/sword_art_online.rb +25 -0
- data/lib/faker/movies/back_to_the_future.rb +21 -0
- data/lib/faker/movies/ghostbusters.rb +21 -0
- data/lib/faker/movies/harry_potter.rb +33 -0
- data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +37 -0
- data/lib/faker/movies/hobbit.rb +25 -0
- data/lib/faker/movies/lebowski.rb +21 -0
- data/lib/faker/movies/lord_of_the_rings.rb +21 -0
- data/lib/faker/movies/movie.rb +11 -0
- data/lib/faker/movies/princess_bride.rb +17 -0
- data/lib/faker/movies/star_wars.rb +105 -0
- data/lib/faker/movies/v_for_vendetta.rb +21 -0
- data/lib/faker/music/grateful_dead.rb +19 -0
- data/lib/faker/music/music.rb +47 -0
- data/lib/faker/music/opera.rb +26 -0
- data/lib/faker/music/phish.rb +13 -0
- data/lib/faker/music/rock_band.rb +13 -0
- data/lib/faker/music/umphreys_mcgee.rb +13 -0
- data/lib/faker/quotes/quote.rb +32 -0
- data/lib/faker/quotes/shakespeare.rb +41 -0
- data/lib/faker/sports/basketball.rb +25 -0
- data/lib/faker/sports/football.rb +29 -0
- data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +15 -0
- data/lib/faker/tv_shows/bojack_horseman.rb +23 -0
- data/lib/faker/tv_shows/breaking_bad.rb +19 -0
- data/lib/faker/tv_shows/buffy.rb +31 -0
- data/lib/faker/tv_shows/community.rb +19 -0
- data/lib/faker/tv_shows/dr_who.rb +39 -0
- data/lib/faker/tv_shows/dumb_and_dumber.rb +23 -0
- data/lib/faker/tv_shows/family_guy.rb +23 -0
- data/lib/faker/tv_shows/friends.rb +23 -0
- data/lib/faker/tv_shows/game_of_thrones.rb +31 -0
- data/lib/faker/tv_shows/hey_arnold.rb +23 -0
- data/lib/faker/tv_shows/how_i_met_your_mother.rb +27 -0
- data/lib/faker/tv_shows/michael_scott.rb +13 -0
- data/lib/faker/tv_shows/new_girl.rb +19 -0
- data/lib/faker/tv_shows/parks_and_rec.rb +19 -0
- data/lib/faker/tv_shows/rick_and_morty.rb +23 -0
- data/lib/faker/tv_shows/ru_paul.rb +19 -0
- data/lib/faker/tv_shows/seinfeld.rb +23 -0
- data/lib/faker/tv_shows/silicon_valley.rb +43 -0
- data/lib/faker/tv_shows/simpsons.rb +23 -0
- data/lib/faker/tv_shows/south_park.rb +19 -0
- data/lib/faker/tv_shows/star_trek.rb +27 -0
- data/lib/faker/tv_shows/stargate.rb +23 -0
- data/lib/faker/tv_shows/stranger_things.rb +19 -0
- data/lib/faker/tv_shows/the_expanse.rb +27 -0
- data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +23 -0
- data/lib/faker/tv_shows/the_it_crowd.rb +27 -0
- data/lib/faker/tv_shows/the_thick_of_it.rb +23 -0
- data/lib/faker/tv_shows/twin_peaks.rb +23 -0
- data/lib/faker/tv_shows/venture_bros.rb +27 -0
- data/lib/faker/version.rb +5 -0
- data/lib/helpers/base58.rb +22 -0
- data/lib/helpers/char.rb +66 -0
- data/lib/helpers/unique_generator.rb +56 -0
- data/lib/locales/README.md +40 -0
- data/lib/locales/ar.yml +102 -0
- data/lib/locales/bg.yml +44 -0
- data/lib/locales/ca-CAT.yml +24 -0
- data/lib/locales/ca.yml +31 -0
- data/lib/locales/da-DK.yml +73 -0
- data/lib/locales/de-AT.yml +56 -0
- data/lib/locales/de-CH.yml +19 -0
- data/lib/locales/de.yml +174 -0
- data/lib/locales/ee.yml +61 -0
- data/lib/locales/en-AU.yml +28 -0
- data/lib/locales/en-BORK.yml +4 -0
- data/lib/locales/en-CA.yml +36 -0
- data/lib/locales/en-GB.yml +14 -0
- data/lib/locales/en-IND.yml +25 -0
- data/lib/locales/en-MS.yml +47 -0
- data/lib/locales/en-NEP.yml +49 -0
- data/lib/locales/en-NG.yml +77 -0
- data/lib/locales/en-NZ.yml +39 -0
- data/lib/locales/en-PAK.yml +18 -0
- data/lib/locales/en-SG.yml +35 -0
- data/lib/locales/en-UG.yml +128 -0
- data/lib/locales/en-US.yml +103 -0
- data/lib/locales/en-ZA.yml +148 -0
- data/lib/locales/en-au-ocker.yml +33 -0
- data/lib/locales/en.yml +60 -0
- data/lib/locales/en/README.md +13 -0
- data/lib/locales/en/address.yml +581 -0
- data/lib/locales/en/ancient.yml +7 -0
- data/lib/locales/en/animal.yml +6 -0
- data/lib/locales/en/app.yml +8 -0
- data/lib/locales/en/appliance.yml +5 -0
- data/lib/locales/en/aqua_teen_hunger_force.yml +4 -0
- data/lib/locales/en/artist.yml +4 -0
- data/lib/locales/en/back_to_the_future.yml +120 -0
- data/lib/locales/en/bank.yml +302 -0
- data/lib/locales/en/basketball.yml +99 -0
- data/lib/locales/en/beer.yml +9 -0
- data/lib/locales/en/bojack_horseman.yml +6 -0
- data/lib/locales/en/book.yml +7 -0
- data/lib/locales/en/bossa_nova.yml +6 -0
- data/lib/locales/en/breaking_bad.yml +28 -0
- data/lib/locales/en/buffy.yml +260 -0
- data/lib/locales/en/business.yml +5 -0
- data/lib/locales/en/cannabis.yml +13 -0
- data/lib/locales/en/cat.yml +7 -0
- data/lib/locales/en/chuck_norris.yml +82 -0
- data/lib/locales/en/code.yml +4 -0
- data/lib/locales/en/coffee.yml +31 -0
- data/lib/locales/en/coin.yml +6 -0
- data/lib/locales/en/color.yml +4 -0
- data/lib/locales/en/commerce.yml +11 -0
- data/lib/locales/en/community.yml +33 -0
- data/lib/locales/en/company.yml +22 -0
- data/lib/locales/en/compass.yml +34 -0
- data/lib/locales/en/construction.yml +425 -0
- data/lib/locales/en/cosmere.yml +57 -0
- data/lib/locales/en/crypto_coin.yml +25 -0
- data/lib/locales/en/culture_series.yml +307 -0
- data/lib/locales/en/currency.yml +6 -0
- data/lib/locales/en/dc_comics.yml +52 -0
- data/lib/locales/en/demographic.yml +8 -0
- data/lib/locales/en/dessert.yml +6 -0
- data/lib/locales/en/device.yml +7 -0
- data/lib/locales/en/dog.yml +11 -0
- data/lib/locales/en/dota.yml +105 -0
- data/lib/locales/en/dr_who.yml +96 -0
- data/lib/locales/en/dragon_ball.yml +4 -0
- data/lib/locales/en/dumb_and_dumber.yml +59 -0
- data/lib/locales/en/dune.yml +159 -0
- data/lib/locales/en/educator.yml +11 -0
- data/lib/locales/en/elder_scrolls.yml +11 -0
- data/lib/locales/en/electrical_components.yml +6 -0
- data/lib/locales/en/esport.yml +8 -0
- data/lib/locales/en/fallout.yml +137 -0
- data/lib/locales/en/family_guy.yml +7 -0
- data/lib/locales/en/file.yml +5 -0
- data/lib/locales/en/finance.yml +113 -0
- data/lib/locales/en/food.yml +13 -0
- data/lib/locales/en/football.yml +8 -0
- data/lib/locales/en/fresh_prince_of_bel_air.yml +73 -0
- data/lib/locales/en/friends.yml +6 -0
- data/lib/locales/en/funny_name.yml +4 -0
- data/lib/locales/en/game.yml +283 -0
- data/lib/locales/en/game_of_thrones.yml +8 -0
- data/lib/locales/en/gender.yml +5 -0
- data/lib/locales/en/ghostbusters.yml +91 -0
- data/lib/locales/en/grateful_dead.yml +48 -0
- data/lib/locales/en/greek_philosophers.yml +26 -0
- data/lib/locales/en/hacker.yml +8 -0
- data/lib/locales/en/half_life.yml +7 -0
- data/lib/locales/en/harry_potter.yml +9 -0
- data/lib/locales/en/heroes.yml +6 -0
- data/lib/locales/en/heroes_of_the_storm.yml +7 -0
- data/lib/locales/en/hey_arnold.yml +24 -0
- data/lib/locales/en/hipster.yml +4 -0
- data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +45 -0
- data/lib/locales/en/hobbit.yml +19 -0
- data/lib/locales/en/horse.yml +6 -0
- data/lib/locales/en/house.yml +5 -0
- data/lib/locales/en/how_i_met_your_mother.yml +28 -0
- data/lib/locales/en/id_number.yml +5 -0
- data/lib/locales/en/industry_segments.yml +7 -0
- data/lib/locales/en/internet.yml +21 -0
- data/lib/locales/en/invoice.yml +6 -0
- data/lib/locales/en/job.yml +15 -0
- data/lib/locales/en/kpop.yml +83 -0
- data/lib/locales/en/league_of_legends.yml +10 -0
- data/lib/locales/en/lebowski.yml +43 -0
- data/lib/locales/en/lord_of_the_rings.yml +6 -0
- data/lib/locales/en/lorem.yml +11 -0
- data/lib/locales/en/lovecraft.yml +9 -0
- data/lib/locales/en/markdown.yml +5 -0
- data/lib/locales/en/marketing.yml +4 -0
- data/lib/locales/en/measurement.yml +11 -0
- data/lib/locales/en/michael_scott.yml +45 -0
- data/lib/locales/en/military.yml +8 -0
- data/lib/locales/en/movie.yml +5 -0
- data/lib/locales/en/music.yml +32 -0
- data/lib/locales/en/myst.yml +48 -0
- data/lib/locales/en/name.yml +25 -0
- data/lib/locales/en/nation.yml +11 -0
- data/lib/locales/en/nato_phonetic_alphabet.yml +4 -0
- data/lib/locales/en/new_girl.yml +40 -0
- data/lib/locales/en/one_piece.yml +9 -0
- data/lib/locales/en/opera.yml +172 -0
- data/lib/locales/en/overwatch.yml +41 -0
- data/lib/locales/en/parks_and_rec.yml +7 -0
- data/lib/locales/en/phish.yml +4 -0
- data/lib/locales/en/phone_number.yml +7 -0
- data/lib/locales/en/pokemon.yml +8 -0
- data/lib/locales/en/princess_bride.yml +5 -0
- data/lib/locales/en/programming_language.yml +6 -0
- data/lib/locales/en/quote.yml +166 -0
- data/lib/locales/en/relationship.yml +10 -0
- data/lib/locales/en/restaurant.yml +129 -0
- data/lib/locales/en/rick_and_morty.yml +6 -0
- data/lib/locales/en/rock_band.yml +4 -0
- data/lib/locales/en/rupaul.yml +125 -0
- data/lib/locales/en/science.yml +6 -0
- data/lib/locales/en/seinfeld.yml +6 -0
- data/lib/locales/en/shakespeare.yml +56 -0
- data/lib/locales/en/silicon_valley.yml +53 -0
- data/lib/locales/en/simpsons.yml +26 -0
- data/lib/locales/en/slack_emoji.yml +20 -0
- data/lib/locales/en/sonic_the_hedgehog.yml +410 -0
- data/lib/locales/en/source.yml +16 -0
- data/lib/locales/en/south_park.yml +5 -0
- data/lib/locales/en/space.yml +17 -0
- data/lib/locales/en/star_trek.yml +7 -0
- data/lib/locales/en/star_wars.yml +258 -0
- data/lib/locales/en/stargate.yml +21 -0
- data/lib/locales/en/stranger_thing.yml +36 -0
- data/lib/locales/en/stripe.yml +42 -0
- data/lib/locales/en/subscription.yml +8 -0
- data/lib/locales/en/super_smash_bros.yml +205 -0
- data/lib/locales/en/superhero.yml +12 -0
- data/lib/locales/en/sword_art_online.yml +334 -0
- data/lib/locales/en/team.yml +8 -0
- data/lib/locales/en/the_expanse.yml +7 -0
- data/lib/locales/en/the_it_crowd.yml +155 -0
- data/lib/locales/en/the_thick_of_it.yml +6 -0
- data/lib/locales/en/twin_peaks.yml +6 -0
- data/lib/locales/en/umphreys_mcgee.yml +4 -0
- data/lib/locales/en/university.yml +10 -0
- data/lib/locales/en/v_for_vendetta.yml +163 -0
- data/lib/locales/en/vehicle.yml +80 -0
- data/lib/locales/en/venture_bros.yml +7 -0
- data/lib/locales/en/verbs.yml +8 -0
- data/lib/locales/en/witcher.yml +11 -0
- data/lib/locales/en/world_cup.yml +271 -0
- data/lib/locales/en/world_of_warcraft.yml +8 -0
- data/lib/locales/en/yoda.yml +4 -0
- data/lib/locales/en/zelda.yml +8 -0
- data/lib/locales/es-MX.yml +102 -0
- data/lib/locales/es.yml +94 -0
- data/lib/locales/fa.yml +10 -0
- data/lib/locales/fi-FI.yml +35 -0
- data/lib/locales/fr-CA.yml +90 -0
- data/lib/locales/fr-CH.yml +78 -0
- data/lib/locales/fr.yml +114 -0
- data/lib/locales/he.yml +27 -0
- data/lib/locales/hy.yml +416 -0
- data/lib/locales/id.yml +23 -0
- data/lib/locales/it.yml +70 -0
- data/lib/locales/ja.yml +98 -0
- data/lib/locales/ko.yml +40 -0
- data/lib/locales/lv.yml +55 -0
- data/lib/locales/nb-NO.yml +62 -0
- data/lib/locales/nl.yml +92 -0
- data/lib/locales/no.yml +7 -0
- data/lib/locales/pl.yml +77 -0
- data/lib/locales/pt-BR.yml +697 -0
- data/lib/locales/pt.yml +66 -0
- data/lib/locales/ru.yml +76 -0
- data/lib/locales/sk.yml +78 -0
- data/lib/locales/sv.yml +81 -0
- data/lib/locales/tr.yml +40 -0
- data/lib/locales/uk.yml +86 -0
- data/lib/locales/vi.yml +68 -0
- data/lib/locales/zh-CN.yml +56 -0
- data/lib/locales/zh-TW.yml +29 -0
- metadata +543 -0
data/bin/faker
ADDED
data/lib/faker.rb
ADDED
@@ -0,0 +1,253 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
mydir = __dir__
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'psych'
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'i18n'
|
10
|
+
require 'set' # Fixes a bug in i18n 0.6.11
|
11
|
+
|
12
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'helpers', '*.rb')).sort.each { |file| require file }
|
13
|
+
|
14
|
+
I18n.load_path += Dir[File.join(mydir, 'locales', '**/*.yml')]
|
15
|
+
I18n.reload! if I18n.backend.initialized?
|
16
|
+
|
17
|
+
module Faker
|
18
|
+
class Config
|
19
|
+
@locale = nil
|
20
|
+
@random = nil
|
21
|
+
|
22
|
+
class << self
|
23
|
+
attr_writer :locale
|
24
|
+
attr_writer :random
|
25
|
+
|
26
|
+
def locale
|
27
|
+
@locale || I18n.locale
|
28
|
+
end
|
29
|
+
|
30
|
+
def own_locale
|
31
|
+
@locale
|
32
|
+
end
|
33
|
+
|
34
|
+
def random
|
35
|
+
@random || Random::DEFAULT
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Base
|
41
|
+
Numbers = Array(0..9)
|
42
|
+
ULetters = Array('A'..'Z')
|
43
|
+
Letters = ULetters + Array('a'..'z')
|
44
|
+
|
45
|
+
class << self
|
46
|
+
## by default numerify results do not start with a zero
|
47
|
+
def numerify(number_string, leading_zero: false)
|
48
|
+
return number_string.gsub(/#/) { rand(10).to_s } if leading_zero
|
49
|
+
|
50
|
+
number_string.sub(/#/) { rand(1..9).to_s }.gsub(/#/) { rand(10).to_s }
|
51
|
+
end
|
52
|
+
|
53
|
+
def letterify(letter_string)
|
54
|
+
letter_string.gsub(/\?/) { sample(ULetters) }
|
55
|
+
end
|
56
|
+
|
57
|
+
def bothify(string)
|
58
|
+
letterify(numerify(string))
|
59
|
+
end
|
60
|
+
|
61
|
+
# Given a regular expression, attempt to generate a string
|
62
|
+
# that would match it. This is a rather simple implementation,
|
63
|
+
# so don't be shocked if it blows up on you in a spectacular fashion.
|
64
|
+
#
|
65
|
+
# It does not handle ., *, unbounded ranges such as {1,},
|
66
|
+
# extensions such as (?=), character classes, some abbreviations
|
67
|
+
# for character classes, and nested parentheses.
|
68
|
+
#
|
69
|
+
# I told you it was simple. :) It's also probably dog-slow,
|
70
|
+
# so you shouldn't use it.
|
71
|
+
#
|
72
|
+
# It will take a regex like this:
|
73
|
+
#
|
74
|
+
# /^[A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}$/
|
75
|
+
#
|
76
|
+
# and generate a string like this:
|
77
|
+
#
|
78
|
+
# "U3V 3TP"
|
79
|
+
#
|
80
|
+
def regexify(reg)
|
81
|
+
reg = reg.source if reg.respond_to?(:source) # Handle either a Regexp or a String that looks like a Regexp
|
82
|
+
reg
|
83
|
+
.gsub(%r{^\/?\^?}, '').gsub(%r{\$?\/?$}, '') # Ditch the anchors
|
84
|
+
.gsub(/\{(\d+)\}/, '{\1,\1}').gsub(/\?/, '{0,1}') # All {2} become {2,2} and ? become {0,1}
|
85
|
+
.gsub(/(\[[^\]]+\])\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # [12]{1,2} becomes [12] or [12][12]
|
86
|
+
.gsub(/(\([^\)]+\))\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # (12|34){1,2} becomes (12|34) or (12|34)(12|34)
|
87
|
+
.gsub(/(\\?.)\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) } # A{1,2} becomes A or AA or \d{3} becomes \d\d\d
|
88
|
+
.gsub(/\((.*?)\)/) { |match| sample(match.gsub(/[\(\)]/, '').split('|')) } # (this|that) becomes 'this' or 'that'
|
89
|
+
.gsub(/\[([^\]]+)\]/) { |match| match.gsub(/(\w\-\w)/) { |range| sample(Array(Range.new(*range.split('-')))) } } # All A-Z inside of [] become C (or X, or whatever)
|
90
|
+
.gsub(/\[([^\]]+)\]/) { |_match| sample(Regexp.last_match(1).split('')) } # All [ABC] become B (or A or C)
|
91
|
+
.gsub('\d') { |_match| sample(Numbers) }
|
92
|
+
.gsub('\w') { |_match| sample(Letters) }
|
93
|
+
end
|
94
|
+
|
95
|
+
# Helper for the common approach of grabbing a translation
|
96
|
+
# with an array of values and selecting one of them.
|
97
|
+
def fetch(key)
|
98
|
+
fetched = sample(translate("faker.#{key}"))
|
99
|
+
if fetched&.match(%r{^\/}) && fetched&.match(%r{\/$}) # A regex
|
100
|
+
regexify(fetched)
|
101
|
+
else
|
102
|
+
fetched
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Helper for the common approach of grabbing a translation
|
107
|
+
# with an array of values and returning all of them.
|
108
|
+
def fetch_all(key)
|
109
|
+
fetched = translate("faker.#{key}")
|
110
|
+
fetched = fetched.last if fetched.size <= 1
|
111
|
+
if !fetched.respond_to?(:sample) && fetched.match(%r{^\/}) && fetched.match(%r{\/$}) # A regex
|
112
|
+
regexify(fetched)
|
113
|
+
else
|
114
|
+
fetched
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# Load formatted strings from the locale, "parsing" them
|
119
|
+
# into method calls that can be used to generate a
|
120
|
+
# formatted translation: e.g., "#{first_name} #{last_name}".
|
121
|
+
def parse(key)
|
122
|
+
fetched = fetch(key)
|
123
|
+
parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^\}]+)\}([^#]+)?/).map do |prefix, kls, meth, etc|
|
124
|
+
# If the token had a class Prefix (e.g., Name.first_name)
|
125
|
+
# grab the constant, otherwise use self
|
126
|
+
cls = kls ? Faker.const_get(kls.chop) : self
|
127
|
+
|
128
|
+
# If an optional leading parentheses is not present, prefix.should == "", otherwise prefix.should == "("
|
129
|
+
# In either case the information will be retained for reconstruction of the string.
|
130
|
+
text = prefix
|
131
|
+
|
132
|
+
# If the class has the method, call it, otherwise fetch the transation
|
133
|
+
# (e.g., faker.phone_number.area_code)
|
134
|
+
text += if cls.respond_to?(meth)
|
135
|
+
cls.send(meth)
|
136
|
+
else
|
137
|
+
# Do just enough snake casing to convert PhoneNumber to phone_number
|
138
|
+
key_path = cls.to_s.split('::').last.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
|
139
|
+
fetch("#{key_path}.#{meth.downcase}")
|
140
|
+
end
|
141
|
+
|
142
|
+
# And tack on spaces, commas, etc. left over in the string
|
143
|
+
text + etc.to_s
|
144
|
+
end
|
145
|
+
# If the fetched key couldn't be parsed, then fallback to numerify
|
146
|
+
parts.any? ? parts.join : numerify(fetched)
|
147
|
+
end
|
148
|
+
|
149
|
+
# Call I18n.translate with our configured locale if no
|
150
|
+
# locale is specified
|
151
|
+
def translate(*args)
|
152
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
153
|
+
opts[:locale] ||= Faker::Config.locale
|
154
|
+
opts[:raise] = true
|
155
|
+
I18n.translate(*args.push(opts))
|
156
|
+
rescue I18n::MissingTranslationData
|
157
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
158
|
+
opts[:locale] = :en
|
159
|
+
|
160
|
+
# Super-simple fallback -- fallback to en if the
|
161
|
+
# translation was missing. If the translation isn't
|
162
|
+
# in en either, then it will raise again.
|
163
|
+
disable_enforce_available_locales do
|
164
|
+
I18n.translate(*args.push(opts))
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
# Executes block with given locale set.
|
169
|
+
def with_locale(tmp_locale = nil)
|
170
|
+
current_locale = Faker::Config.own_locale
|
171
|
+
Faker::Config.locale = tmp_locale
|
172
|
+
|
173
|
+
disable_enforce_available_locales do
|
174
|
+
I18n.with_locale(tmp_locale) { yield }
|
175
|
+
end
|
176
|
+
ensure
|
177
|
+
Faker::Config.locale = current_locale
|
178
|
+
end
|
179
|
+
|
180
|
+
def flexible(key)
|
181
|
+
@flexible_key = key
|
182
|
+
end
|
183
|
+
|
184
|
+
# You can add whatever you want to the locale file, and it will get caught here.
|
185
|
+
# E.g., in your locale file, create a
|
186
|
+
# name:
|
187
|
+
# girls_name: ["Alice", "Cheryl", "Tatiana"]
|
188
|
+
# Then you can call Faker::Name.girls_name and it will act like #first_name
|
189
|
+
def method_missing(mth, *args, &block)
|
190
|
+
super unless @flexible_key
|
191
|
+
|
192
|
+
if (translation = translate("faker.#{@flexible_key}.#{mth}"))
|
193
|
+
sample(translation)
|
194
|
+
else
|
195
|
+
super
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
def respond_to_missing?(method_name, include_private = false)
|
200
|
+
super
|
201
|
+
end
|
202
|
+
|
203
|
+
# Generates a random value between the interval
|
204
|
+
def rand_in_range(from, to)
|
205
|
+
from, to = to, from if to < from
|
206
|
+
rand(from..to)
|
207
|
+
end
|
208
|
+
|
209
|
+
# If an array or range is passed, a random value will be selected.
|
210
|
+
# All other values are simply returned.
|
211
|
+
def resolve(value)
|
212
|
+
case value
|
213
|
+
when Array then sample(value)
|
214
|
+
when Range then rand value
|
215
|
+
else value
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def unique(max_retries = 10_000)
|
220
|
+
@unique ||= UniqueGenerator.new(self, max_retries)
|
221
|
+
end
|
222
|
+
|
223
|
+
def sample(list)
|
224
|
+
list.respond_to?(:sample) ? list.sample(random: Faker::Config.random) : list
|
225
|
+
end
|
226
|
+
|
227
|
+
def shuffle(list)
|
228
|
+
list.shuffle(random: Faker::Config.random)
|
229
|
+
end
|
230
|
+
|
231
|
+
def rand(max = nil)
|
232
|
+
if max.nil?
|
233
|
+
Faker::Config.random.rand
|
234
|
+
elsif max.is_a?(Range) || max.to_i.positive?
|
235
|
+
Faker::Config.random.rand(max)
|
236
|
+
else
|
237
|
+
0
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def disable_enforce_available_locales
|
242
|
+
old_enforce_available_locales = I18n.enforce_available_locales
|
243
|
+
I18n.enforce_available_locales = false
|
244
|
+
yield
|
245
|
+
ensure
|
246
|
+
I18n.enforce_available_locales = old_enforce_available_locales
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
# require faker objects
|
253
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'faker', '/**/*.rb')).sort.each { |file| require file }
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'digest'
|
4
|
+
require 'securerandom'
|
5
|
+
|
6
|
+
module Faker
|
7
|
+
class Blockchain
|
8
|
+
class Bitcoin < Base
|
9
|
+
class << self
|
10
|
+
PROTOCOL_VERSIONS = {
|
11
|
+
main: 0,
|
12
|
+
testnet: 111
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
def address
|
16
|
+
address_for(:main)
|
17
|
+
end
|
18
|
+
|
19
|
+
def testnet_address
|
20
|
+
address_for(:testnet)
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def address_for(network)
|
26
|
+
version = PROTOCOL_VERSIONS.fetch(network)
|
27
|
+
packed = version.chr + Faker::Config.random.bytes(20)
|
28
|
+
checksum = Digest::SHA2.digest(Digest::SHA2.digest(packed))[0..3]
|
29
|
+
Faker::Base58.encode(packed + checksum)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
class Blockchain
|
5
|
+
class Ethereum < Base
|
6
|
+
class << self
|
7
|
+
def address
|
8
|
+
hex_alphabet = '0123456789abcdef'
|
9
|
+
var = +'0x'
|
10
|
+
40.times { var << sample(shuffle(hex_alphabet.split(''))) }
|
11
|
+
var
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'digest'
|
4
|
+
require 'securerandom'
|
5
|
+
|
6
|
+
module Faker
|
7
|
+
class Blockchain
|
8
|
+
class Tezos < Base
|
9
|
+
class << self
|
10
|
+
PREFIXES = {
|
11
|
+
tz1: [6, 161, 159],
|
12
|
+
KT1: [2, 90, 121],
|
13
|
+
edpk: [13, 15, 37, 217],
|
14
|
+
edsk: [13, 15, 58, 7],
|
15
|
+
edsig: [9, 245, 205, 134, 18],
|
16
|
+
B: [1, 52],
|
17
|
+
o: [5, 116]
|
18
|
+
}.freeze
|
19
|
+
|
20
|
+
def account
|
21
|
+
encode_tz(:tz1, 20)
|
22
|
+
end
|
23
|
+
|
24
|
+
def contract
|
25
|
+
encode_tz(:KT1, 20)
|
26
|
+
end
|
27
|
+
|
28
|
+
def operation
|
29
|
+
encode_tz(:o, 32)
|
30
|
+
end
|
31
|
+
|
32
|
+
def block
|
33
|
+
encode_tz(:B, 32)
|
34
|
+
end
|
35
|
+
|
36
|
+
def signature
|
37
|
+
encode_tz(:edsig, 64)
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
def encode_tz(prefix, payload_size)
|
43
|
+
prefix = PREFIXES.fetch(prefix)
|
44
|
+
packed = prefix.map(&:chr).join('') + Faker::Config.random.bytes(payload_size)
|
45
|
+
checksum = Digest::SHA2.digest(Digest::SHA2.digest(packed))[0..3]
|
46
|
+
Faker::Base58.encode(packed + checksum)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
class Book < Base
|
5
|
+
flexible :book
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def title
|
9
|
+
fetch('book.title')
|
10
|
+
end
|
11
|
+
|
12
|
+
def author
|
13
|
+
parse('book.author')
|
14
|
+
end
|
15
|
+
|
16
|
+
def publisher
|
17
|
+
fetch('book.publisher')
|
18
|
+
end
|
19
|
+
|
20
|
+
def genre
|
21
|
+
fetch('book.genre')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
class Books
|
5
|
+
class CultureSeries < Base
|
6
|
+
flexible :culture_series
|
7
|
+
class << self
|
8
|
+
def book
|
9
|
+
fetch('culture_series.books')
|
10
|
+
end
|
11
|
+
|
12
|
+
def culture_ship
|
13
|
+
fetch('culture_series.culture_ships')
|
14
|
+
end
|
15
|
+
|
16
|
+
def culture_ship_class
|
17
|
+
fetch('culture_series.culture_ship_classes')
|
18
|
+
end
|
19
|
+
|
20
|
+
def culture_ship_class_abv
|
21
|
+
fetch('culture_series.culture_ship_class_abvs')
|
22
|
+
end
|
23
|
+
|
24
|
+
def civ
|
25
|
+
fetch('culture_series.civs')
|
26
|
+
end
|
27
|
+
|
28
|
+
def planet
|
29
|
+
fetch('culture_series.planets')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Faker
|
4
|
+
class Books
|
5
|
+
class Dune < Base
|
6
|
+
class << self
|
7
|
+
# QUOTED_CHARACTERS = fetch("dune.quotes")
|
8
|
+
# SAYING_SOURCES = %w(translate("faker.dune.sources"))
|
9
|
+
|
10
|
+
def character
|
11
|
+
fetch('dune.characters')
|
12
|
+
end
|
13
|
+
|
14
|
+
def title
|
15
|
+
fetch('dune.titles')
|
16
|
+
end
|
17
|
+
|
18
|
+
def planet
|
19
|
+
fetch('dune.planets')
|
20
|
+
end
|
21
|
+
|
22
|
+
def quote(character: nil)
|
23
|
+
quoted_characters = translate('faker.dune.quotes').keys
|
24
|
+
|
25
|
+
if character.nil?
|
26
|
+
character = sample(quoted_characters).to_s
|
27
|
+
else
|
28
|
+
character = character.to_s.downcase
|
29
|
+
|
30
|
+
unless quoted_characters.include?(character.to_sym)
|
31
|
+
raise ArgumentError,
|
32
|
+
"Characters quoted can be left blank or #{quoted_characters.join(', ')}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
fetch('dune.quotes.' + character)
|
37
|
+
end
|
38
|
+
|
39
|
+
def saying(source: nil)
|
40
|
+
sourced_sayings = translate('faker.dune.sayings').keys
|
41
|
+
|
42
|
+
if source.nil?
|
43
|
+
source = sample(sourced_sayings).to_s
|
44
|
+
else
|
45
|
+
source = source.to_s.downcase
|
46
|
+
|
47
|
+
unless sourced_sayings.include?(source.to_sym)
|
48
|
+
raise ArgumentError,
|
49
|
+
"Sources quoted in sayings can be left blank or #{sourced_sayings.join(', ')}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
fetch('dune.sayings.' + source)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|