faker 3.5.2 → 3.6.1
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 +133 -0
- data/README.md +78 -393
- data/lib/faker/blockchain/bitcoin.rb +0 -1
- data/lib/faker/blockchain/tezos.rb +0 -1
- data/lib/faker/books/lovecraft.rb +1 -1
- data/lib/faker/default/avatar.rb +1 -1
- data/lib/faker/default/bank.rb +1 -5
- data/lib/faker/default/boolean.rb +2 -1
- data/lib/faker/default/company.rb +1 -1
- data/lib/faker/default/crypto.rb +0 -2
- data/lib/faker/default/hipster.rb +1 -1
- data/lib/faker/default/html.rb +1 -1
- data/lib/faker/default/id_number.rb +1 -1
- data/lib/faker/default/lorem.rb +1 -1
- data/lib/faker/default/lorem_flickr.rb +1 -1
- data/lib/faker/default/markdown.rb +2 -2
- data/lib/faker/default/placeholdit.rb +1 -1
- data/lib/faker/default/string.rb +1 -1
- data/lib/faker/default/types.rb +2 -2
- data/lib/faker/default/x.rb +189 -0
- data/lib/faker/music/bossa_nova.rb +37 -0
- data/lib/faker/version.rb +1 -1
- data/lib/faker.rb +13 -10
- data/lib/helpers/unique_generator.rb +1 -1
- data/lib/locales/README.md +2 -2
- data/lib/locales/ar.yml +1606 -49
- data/lib/locales/bg.yml +935 -18
- data/lib/locales/ca-CAT.yml +347 -12
- data/lib/locales/ca.yml +580 -7
- data/lib/locales/ee.yml +1185 -26
- data/lib/locales/en/adjective.yml +174 -174
- data/lib/locales/en/airport.yml +374 -374
- data/lib/locales/en/ancient.yml +128 -4
- data/lib/locales/en/animal.yml +141 -2
- data/lib/locales/en/app.yml +89 -2
- data/lib/locales/en/appliance.yml +81 -2
- data/lib/locales/en/aqua_teen_hunger_force.yml +31 -31
- data/lib/locales/en/artist.yml +43 -1
- data/lib/locales/en/avatar.yml +54 -28
- data/lib/locales/en/back_to_the_future.yml +145 -117
- data/lib/locales/en/bank.yml +91 -2
- data/lib/locales/en/beer.yml +232 -6
- data/lib/locales/en/bible.yml +3 -6
- data/lib/locales/en/big_bang_theory.yml +34 -35
- data/lib/locales/en/bird.yml +1225 -1226
- data/lib/locales/en/bojack_horseman.yml +63 -3
- data/lib/locales/en/bossa_nova.yml +110 -3
- data/lib/locales/en/breaking_bad.yml +110 -25
- data/lib/locales/en/brooklyn_nine_nine.yml +0 -1
- data/lib/locales/en/buffy.yml +239 -257
- data/lib/locales/en/business.yml +18 -2
- data/lib/locales/en/cannabis.yml +344 -10
- data/lib/locales/en/cat.yml +155 -3
- data/lib/locales/en/chess.yml +2 -3
- data/lib/locales/en/chiquito.yml +60 -61
- data/lib/locales/en/chuck_norris.yml +78 -79
- data/lib/locales/en/clash_of_clan.yml +0 -2
- data/lib/locales/en/code.yml +501 -1
- data/lib/locales/en/coffee.yml +450 -25
- data/lib/locales/en/color.yml +73 -1
- data/lib/locales/en/commerce.yml +117 -23
- data/lib/locales/en/community.yml +55 -30
- data/lib/locales/en/company.yml +1756 -14
- data/lib/locales/en/compass.yml +108 -12
- data/lib/locales/en/conan.yml +0 -2
- data/lib/locales/en/construction.yml +416 -422
- data/lib/locales/en/cosmere.yml +219 -54
- data/lib/locales/en/cowboy_bebop.yml +56 -59
- data/lib/locales/en/culture_series.yml +298 -298
- data/lib/locales/en/currency.yml +358 -3
- data/lib/locales/en/dc_comics.yml +178 -49
- data/lib/locales/en/demographic.yml +215 -215
- data/lib/locales/en/departed.yml +40 -44
- data/lib/locales/en/dessert.yml +78 -3
- data/lib/locales/en/doraemon.yml +278 -280
- data/lib/locales/en/dr_who.yml +468 -93
- data/lib/locales/en/dragon_ball.yml +240 -240
- data/lib/locales/en/dumb_and_dumber.yml +72 -56
- data/lib/locales/en/elder_scrolls.yml +52 -53
- data/lib/locales/en/electrical_components.yml +49 -3
- data/lib/locales/en/esport.yml +58 -5
- data/lib/locales/en/family_guy.yml +54 -4
- data/lib/locales/en/file.yml +108 -9
- data/lib/locales/en/final_space.yml +1 -3
- data/lib/locales/en/food.yml +1 -1
- data/lib/locales/en/football.yml +112 -5
- data/lib/locales/en/fresh_prince_of_bel_air.yml +119 -70
- data/lib/locales/en/friends.yml +162 -3
- data/lib/locales/en/funny_name.yml +752 -1
- data/lib/locales/en/futurama.yml +7 -15
- data/lib/locales/en/game_of_thrones.yml +2487 -5
- data/lib/locales/en/gender.yml +15 -3
- data/lib/locales/en/ghostbusters.yml +101 -88
- data/lib/locales/en/grateful_dead.yml +47 -45
- data/lib/locales/en/greek_philosophers.yml +44 -23
- data/lib/locales/en/hacker.yml +110 -5
- data/lib/locales/en/hackers.yml +1 -1
- data/lib/locales/en/harry_potter.yml +323 -6
- data/lib/locales/en/hey_arnold.yml +104 -21
- data/lib/locales/en/hipster.yml +203 -1
- data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +243 -42
- data/lib/locales/en/hobby.yml +0 -1
- data/lib/locales/en/horse.yml +446 -2
- data/lib/locales/en/house.yml +34 -2
- data/lib/locales/en/how_i_met_your_mother.yml +97 -25
- data/lib/locales/en/how_to_train_your_dragon.yml +0 -1
- data/lib/locales/en/id_number.yml +6 -1
- data/lib/locales/en/industry_segments.yml +188 -4
- data/lib/locales/en/job.yml +98 -7
- data/lib/locales/en/kamen_rider.yml +272 -6
- data/lib/locales/en/kpop.yml +954 -80
- data/lib/locales/en/lebowski.yml +58 -40
- data/lib/locales/en/lorem.yml +1095 -6
- data/lib/locales/en/markdown.yml +12 -2
- data/lib/locales/en/marketing.yml +54 -1
- data/lib/locales/en/measurement.yml +42 -8
- data/lib/locales/en/michael_scott.yml +41 -42
- data/lib/locales/en/movie.yml +188 -176
- data/lib/locales/en/name.yml +6068 -6
- data/lib/locales/en/nato_phonetic_alphabet.yml +27 -1
- data/lib/locales/en/new_girl.yml +35 -37
- data/lib/locales/en/one_piece.yml +359 -6
- data/lib/locales/en/opera.yml +1 -1
- data/lib/locales/en/overwatch.yml +1 -1
- data/lib/locales/en/parks_and_rec.yml +33 -4
- data/lib/locales/en/pearl_jam.yml +207 -207
- data/lib/locales/en/phish.yml +388 -389
- data/lib/locales/en/prince.yml +219 -219
- data/lib/locales/en/princess_bride.yml +48 -2
- data/lib/locales/en/programming_language.yml +753 -3
- data/lib/locales/en/quote.yml +599 -685
- data/lib/locales/en/rajnikanth.yml +74 -74
- data/lib/locales/en/relationship.yml +29 -6
- data/lib/locales/en/restaurant.yml +31 -31
- data/lib/locales/en/rick_and_morty.yml +116 -3
- data/lib/locales/en/rock_band.yml +228 -2
- data/lib/locales/en/rupaul.yml +120 -122
- data/lib/locales/en/seinfeld.yml +110 -3
- data/lib/locales/en/shakespeare.yml +46 -50
- data/lib/locales/en/silicon_valley.yml +122 -50
- data/lib/locales/en/simpsons.yml +897 -691
- data/lib/locales/en/slack_emoji.yml +874 -8
- data/lib/locales/en/space.yml +373 -14
- data/lib/locales/en/star_trek.yml +105 -4
- data/lib/locales/en/star_wars.yml +525 -528
- data/lib/locales/en/stargate.yml +65 -18
- data/lib/locales/en/stranger_thing.yml +31 -33
- data/lib/locales/en/street_fighter.yml +1 -1
- data/lib/locales/en/subscription.yml +47 -5
- data/lib/locales/en/superhero.yml +574 -4
- data/lib/locales/en/sword_art_online.yml +327 -331
- data/lib/locales/en/team.yml +125 -3
- data/lib/locales/en/the_expanse.yml +92 -4
- data/lib/locales/en/the_it_crowd.yml +148 -152
- data/lib/locales/en/the_office.yml +77 -81
- data/lib/locales/en/the_room.yml +35 -35
- data/lib/locales/en/the_thick_of_it.yml +83 -3
- data/lib/locales/en/theater.yml +593 -593
- data/lib/locales/en/tolkien.yml +2 -2
- data/lib/locales/en/touhou.yml +54 -54
- data/lib/locales/en/tron.yml +191 -191
- data/lib/locales/en/twin_peaks.yml +130 -3
- data/lib/locales/en/umphreys_mcgee.yml +266 -1
- data/lib/locales/en/university.yml +15 -2
- data/lib/locales/en/v_for_vendetta.yml +157 -160
- data/lib/locales/en/venture_bros.yml +225 -4
- data/lib/locales/en/verbs.yml +3785 -5
- data/lib/locales/en/volleyball.yml +493 -493
- data/lib/locales/en/warhammer_fantasy.yml +540 -573
- data/lib/locales/en/world_cup.yml +1132 -235
- data/lib/locales/en/yoda.yml +38 -1
- data/lib/locales/en-BORK.yml +104 -1
- data/lib/locales/en-GB.yml +9 -7
- data/lib/locales/en-NG.yml +737 -66
- data/lib/locales/en-TH.yml +1 -1
- data/lib/locales/en-UG.yml +374 -76
- data/lib/locales/en-ZA.yml +1394 -13
- data/lib/locales/es-AR.yml +1 -1
- data/lib/locales/es-MX.yml +1907 -40
- data/lib/locales/es.yml +2117 -52
- data/lib/locales/fa.yml +1624 -5
- data/lib/locales/fi-FI.yml +315 -17
- data/lib/locales/fr/adjective.yml +261 -261
- data/lib/locales/fr/ancient.yml +134 -134
- data/lib/locales/fr/animal.yml +118 -1
- data/lib/locales/fr/appliance.yml +66 -1
- data/lib/locales/fr/book.yml +27 -3
- data/lib/locales/fr/color.yml +31 -1
- data/lib/locales/fr/company.yml +490 -10
- data/lib/locales/fr/compass.yml +58 -10
- data/lib/locales/fr/demographic.yml +3 -1
- data/lib/locales/fr/gender.yml +18 -3
- data/lib/locales/fr/internet.yml +12 -1
- data/lib/locales/fr/lorem.yml +1091 -2
- data/lib/locales/fr/measurement.yml +31 -4
- data/lib/locales/fr/name.yml +1176 -5
- data/lib/locales/fr/phone_number.yml +34 -3
- data/lib/locales/fr/pokemon.yml +417 -3
- data/lib/locales/fr-CA.yml +12 -6
- data/lib/locales/fr-CH.yml +2455 -41
- data/lib/locales/he.yml +255 -9
- data/lib/locales/hy.yml +12 -6
- data/lib/locales/it.yml +12 -6
- data/lib/locales/ja/address.yml +350 -120526
- data/lib/locales/ja/ancient.yml +15 -1
- data/lib/locales/ja/animal.yml +83 -1
- data/lib/locales/ja/artist.yml +46 -0
- data/lib/locales/ja/bank.yml +136 -1
- data/lib/locales/ja/cat.yml +75 -1
- data/lib/locales/ja/coffee.yml +19 -1
- data/lib/locales/ja/color.yml +32 -1
- data/lib/locales/ja/commerce.yml +98 -6
- data/lib/locales/ja/company.yml +20 -2
- data/lib/locales/ja/dog.yml +335 -2
- data/lib/locales/ja/emotion.yml +1 -3
- data/lib/locales/ja/food.yml +38 -1
- data/lib/locales/ja/gender.yml +3 -1
- data/lib/locales/ja/lorem.yml +1014 -3
- data/lib/locales/ja/name.yml +203 -3
- data/lib/locales/ja/overwatch.yml +33 -1
- data/lib/locales/ja/phone_number.yml +9 -3
- data/lib/locales/ja/pokemon.yml +437 -3
- data/lib/locales/ja/relationship.yml +29 -6
- data/lib/locales/ja/restaurant.yml +74 -3
- data/lib/locales/ja/space.yml +20 -2
- data/lib/locales/ja/subscription.yml +47 -5
- data/lib/locales/ja/super_mario.yml +68 -4
- data/lib/locales/ja/university.yml +15 -2
- data/lib/locales/ja/zelda.yml +15 -1
- data/lib/locales/ko.yml +1 -1
- data/lib/locales/lv.yml +1221 -26
- data/lib/locales/nl.yml +33507 -56
- data/lib/locales/pl.yml +4008 -37
- data/lib/locales/sk.yml +12 -6
- data/lib/locales/sv.yml +639 -49
- data/lib/locales/th.yml +375 -375
- data/lib/locales/tr.yml +77 -18
- data/lib/locales/uk.yml +7 -7
- data/lib/locales/vi.yml +392 -49
- data/lib/locales/zh-CN.yml +540 -19
- data/lib/locales/zh-TW.yml +1030 -15
- metadata +7 -6
- data/lib/faker/default/bossa_nova.rb +0 -33
- data/lib/faker/default/twitter.rb +0 -207
data/lib/faker/default/lorem.rb
CHANGED
|
@@ -96,7 +96,7 @@ module Faker
|
|
|
96
96
|
private
|
|
97
97
|
|
|
98
98
|
def build_url(size, format, search_terms, match_all)
|
|
99
|
-
raise ArgumentError, 'Size should be specified in format 300x300' unless size =~
|
|
99
|
+
raise ArgumentError, 'Size should be specified in format 300x300' unless size =~ /\A[0-9]+x[0-9]+\z/
|
|
100
100
|
|
|
101
101
|
url_parts = ['https://loremflickr.com']
|
|
102
102
|
url_parts << format
|
|
@@ -28,7 +28,7 @@ module Faker
|
|
|
28
28
|
def emphasis
|
|
29
29
|
paragraph = Faker::Lorem.paragraph(sentence_count: 3)
|
|
30
30
|
words = paragraph.split
|
|
31
|
-
position = rand(0..words.length - 1)
|
|
31
|
+
position = rand(0..(words.length - 1))
|
|
32
32
|
formatting = fetch('markdown.emphasis')
|
|
33
33
|
words[position] = "#{formatting}#{words[position]}#{formatting}"
|
|
34
34
|
words.join(' ')
|
|
@@ -133,7 +133,7 @@ module Faker
|
|
|
133
133
|
def random(*args)
|
|
134
134
|
method_list = available_methods
|
|
135
135
|
args&.each { |ex| method_list.delete_if { |meth| meth == ex.to_sym } }
|
|
136
|
-
send(method_list[Faker::Config.random.rand(0..method_list.length - 1)])
|
|
136
|
+
send(method_list[Faker::Config.random.rand(0..(method_list.length - 1))])
|
|
137
137
|
end
|
|
138
138
|
|
|
139
139
|
##
|
|
@@ -30,7 +30,7 @@ module Faker
|
|
|
30
30
|
background_color = generate_color if background_color == :random
|
|
31
31
|
text_color = generate_color if text_color == :random
|
|
32
32
|
|
|
33
|
-
raise ArgumentError, 'Size should be specified in format 300x300' unless size =~
|
|
33
|
+
raise ArgumentError, 'Size should be specified in format 300x300' unless size =~ /\A[0-9]+x[0-9]+\z$/
|
|
34
34
|
raise ArgumentError, "Supported formats are #{SUPPORTED_FORMATS.join(', ')}" unless SUPPORTED_FORMATS.include?(format)
|
|
35
35
|
raise ArgumentError, "background_color must be a hex value without '#'" unless background_color.nil? || background_color =~ /((?:^\h{3}$)|(?:^\h{6}$)){1}(?!.*\H)/
|
|
36
36
|
raise ArgumentError, "text_color must be a hex value without '#'" unless text_color.nil? || text_color =~ /((?:^\h{3}$)|(?:^\h{6}$)){1}(?!.*\H)/
|
data/lib/faker/default/string.rb
CHANGED
data/lib/faker/default/types.rb
CHANGED
|
@@ -116,7 +116,7 @@ module Faker
|
|
|
116
116
|
#
|
|
117
117
|
# @faker.version 1.8.6
|
|
118
118
|
def random_type
|
|
119
|
-
type_to_use = SIMPLE_TYPES[rand(0..SIMPLE_TYPES.length - 1)]
|
|
119
|
+
type_to_use = SIMPLE_TYPES[rand(0..(SIMPLE_TYPES.length - 1))]
|
|
120
120
|
case type_to_use
|
|
121
121
|
when :string
|
|
122
122
|
rb_string
|
|
@@ -136,7 +136,7 @@ module Faker
|
|
|
136
136
|
# @faker.version 1.8.6
|
|
137
137
|
def random_complex_type
|
|
138
138
|
types = SIMPLE_TYPES + COMPLEX_TYPES
|
|
139
|
-
type_to_use = types[rand(0..types.length - 1)]
|
|
139
|
+
type_to_use = types[rand(0..(types.length - 1))]
|
|
140
140
|
case type_to_use
|
|
141
141
|
when :string
|
|
142
142
|
rb_string
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class X < Base
|
|
5
|
+
class << self
|
|
6
|
+
##
|
|
7
|
+
# Produces a random X user based on X's v2 API.
|
|
8
|
+
#
|
|
9
|
+
# @return [Hash]
|
|
10
|
+
#
|
|
11
|
+
# @example
|
|
12
|
+
# Faker::X.user #=> { data: [{:id=>"8821452687517076614", :name=>"Lincoln Paucek", :screen_name=>"cody"...
|
|
13
|
+
#
|
|
14
|
+
# @faker.version 1.7.3
|
|
15
|
+
def user
|
|
16
|
+
author_id = Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807)
|
|
17
|
+
|
|
18
|
+
{
|
|
19
|
+
data: [
|
|
20
|
+
{
|
|
21
|
+
author_id: author_id.to_s,
|
|
22
|
+
id: id.to_s,
|
|
23
|
+
text: Faker::Lorem.sentence
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
includes: {
|
|
27
|
+
users: [
|
|
28
|
+
{
|
|
29
|
+
public_metrics: {
|
|
30
|
+
followers_count: Faker::Number.between(to: 1, from: 1_000),
|
|
31
|
+
following_count: Faker::Number.between(to: 1, from: 200),
|
|
32
|
+
tweet_count: Faker::Number.between(to: 1, from: 10_000),
|
|
33
|
+
listed_count: Faker::Number.between(to: 1, from: 1_000)
|
|
34
|
+
},
|
|
35
|
+
username: screen_name,
|
|
36
|
+
pinned_tweet_id: Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807).to_s,
|
|
37
|
+
entities: user_entities,
|
|
38
|
+
description: Faker::Lorem.sentence,
|
|
39
|
+
name: Faker::Name.name,
|
|
40
|
+
verified: Faker::Boolean.boolean(true_ratio: 0.1),
|
|
41
|
+
location: Faker::Internet.public_ip_v4_address,
|
|
42
|
+
id: author_id.to_s,
|
|
43
|
+
protected: Faker::Boolean.boolean(true_ratio: 0.1),
|
|
44
|
+
url: url,
|
|
45
|
+
profile_image_url: Faker::Avatar.image(slug: id, size: '48x48'),
|
|
46
|
+
created_at: created_at
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
##
|
|
54
|
+
# Produces a random X tweet with default attributes.
|
|
55
|
+
#
|
|
56
|
+
# @param include_user [Boolean] Include user details
|
|
57
|
+
# @param include_media [Boolean] Include user media (photo) details
|
|
58
|
+
# @return [Hash]
|
|
59
|
+
#
|
|
60
|
+
# @example
|
|
61
|
+
# Faker::X.tweet #=> { data: [{:id=>"8821452687517076614", :text=>"Ea et laboriosam vel non."...
|
|
62
|
+
# Faker::X.tweet(include_media: true) # Get a tweet object with a photo media attachment
|
|
63
|
+
# Faker::X.tweet(include_user: true) # Get a tweet object with an user details
|
|
64
|
+
#
|
|
65
|
+
# @faker.version 1.7.3
|
|
66
|
+
def tweet(include_media: false, include_user: false)
|
|
67
|
+
tweet = {}
|
|
68
|
+
tweet_object = tweet_item
|
|
69
|
+
includes = {}
|
|
70
|
+
|
|
71
|
+
if include_media
|
|
72
|
+
media_key = Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807).to_s
|
|
73
|
+
|
|
74
|
+
includes[:media] = media(media_key)
|
|
75
|
+
tweet_object[:attachments] = { media_keys: [media_key] }
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
includes[:users] = user[:includes][:users] if include_user
|
|
79
|
+
|
|
80
|
+
tweet[:data] = [
|
|
81
|
+
tweet_object
|
|
82
|
+
]
|
|
83
|
+
|
|
84
|
+
unless includes.empty?
|
|
85
|
+
tweet[:includes] = includes
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
tweet
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
##
|
|
92
|
+
# Produces a random screen_name.
|
|
93
|
+
#
|
|
94
|
+
# @return [String]
|
|
95
|
+
#
|
|
96
|
+
# @example
|
|
97
|
+
# Faker::X.screen_name #=> "audreanne_hackett"
|
|
98
|
+
#
|
|
99
|
+
# @faker.version 1.7.3
|
|
100
|
+
def screen_name
|
|
101
|
+
Faker::Internet.username(specifier: nil, separators: ['_'])[0...20]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
private
|
|
105
|
+
|
|
106
|
+
def id
|
|
107
|
+
Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def created_at
|
|
111
|
+
Faker::Date.between(from: '2006-03-21', to: ::Date.today).to_time.utc.iso8601(3)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def url
|
|
115
|
+
"https://t.co/#{Faker::Lorem.characters(number: 10)}"
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def user_entities
|
|
119
|
+
entities = tweet_entities
|
|
120
|
+
|
|
121
|
+
{
|
|
122
|
+
url: {
|
|
123
|
+
urls: entities[:urls]
|
|
124
|
+
},
|
|
125
|
+
description: {
|
|
126
|
+
hashtags: entities[:hashtags]
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def tweet_entities
|
|
132
|
+
display_url = Faker::Internet.url(host: 'example.com')
|
|
133
|
+
|
|
134
|
+
{
|
|
135
|
+
urls: [
|
|
136
|
+
{
|
|
137
|
+
start: 0,
|
|
138
|
+
end: 5,
|
|
139
|
+
url: url,
|
|
140
|
+
expanded_url: display_url,
|
|
141
|
+
display_url: display_url.sub('http://', '')
|
|
142
|
+
}
|
|
143
|
+
],
|
|
144
|
+
hashtags: [
|
|
145
|
+
{
|
|
146
|
+
start: 0,
|
|
147
|
+
end: 5,
|
|
148
|
+
tag: Faker::Lorem.word.capitalize
|
|
149
|
+
}
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def media(media_key)
|
|
155
|
+
expanded_url = Faker::LoremFlickr.image(size: '1064x600')
|
|
156
|
+
|
|
157
|
+
[{
|
|
158
|
+
height: Faker::Number.between(to: 1, from: 1000),
|
|
159
|
+
media_key: media_key,
|
|
160
|
+
type: 'photo',
|
|
161
|
+
preview_image_url: expanded_url,
|
|
162
|
+
width: Faker::Number.between(to: 1, from: 2000),
|
|
163
|
+
alt_text: Faker::Lorem.sentence
|
|
164
|
+
}]
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def tweet_item
|
|
168
|
+
conversation_id = id.to_s
|
|
169
|
+
|
|
170
|
+
{
|
|
171
|
+
id: conversation_id,
|
|
172
|
+
text: Faker::Lorem.sentence,
|
|
173
|
+
lang: sample(%w[en fr es pt it ja]),
|
|
174
|
+
conversation_id: conversation_id,
|
|
175
|
+
created_at: created_at,
|
|
176
|
+
author_id: Faker::Number.between(from: 1, to: 9_223_372_036_854_775_807).to_s,
|
|
177
|
+
public_metrics: {
|
|
178
|
+
retweet_count: Faker::Number.between(to: 1, from: 100),
|
|
179
|
+
reply_count: Faker::Number.between(to: 1, from: 20),
|
|
180
|
+
like_count: Faker::Number.between(to: 1, from: 25),
|
|
181
|
+
quote_count: Faker::Number.between(to: 1, from: 10)
|
|
182
|
+
},
|
|
183
|
+
possibly_sensitive: Faker::Boolean.boolean(true_ratio: 0.1),
|
|
184
|
+
entities: tweet_entities
|
|
185
|
+
}
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'music'
|
|
4
|
+
|
|
5
|
+
module Faker
|
|
6
|
+
class Music
|
|
7
|
+
class BossaNova < Base
|
|
8
|
+
class << self
|
|
9
|
+
##
|
|
10
|
+
# Produces the name of a bossa nova artist.
|
|
11
|
+
#
|
|
12
|
+
# @return [String]
|
|
13
|
+
#
|
|
14
|
+
# @example
|
|
15
|
+
# Faker::Music::BossaNova.artist #=> "Tom Jobin"
|
|
16
|
+
#
|
|
17
|
+
# @faker.version 1.8.3
|
|
18
|
+
def artist
|
|
19
|
+
fetch('bossa_nova.artists')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
##
|
|
23
|
+
# Produces a bossa nova song.
|
|
24
|
+
#
|
|
25
|
+
# @return [String]
|
|
26
|
+
#
|
|
27
|
+
# @example
|
|
28
|
+
# Faker::Music::BossaNova.song #=> "Chega de Saudade"
|
|
29
|
+
#
|
|
30
|
+
# @faker.version 1.8.3
|
|
31
|
+
def song
|
|
32
|
+
fetch('bossa_nova.songs')
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
data/lib/faker/version.rb
CHANGED
data/lib/faker.rb
CHANGED
|
@@ -5,6 +5,8 @@ mydir = __dir__
|
|
|
5
5
|
require 'psych'
|
|
6
6
|
require 'i18n'
|
|
7
7
|
|
|
8
|
+
autoload(:OpenSSL, 'openssl')
|
|
9
|
+
|
|
8
10
|
Dir.glob(File.join(mydir, 'helpers', '*.rb')).each { |file| require file }
|
|
9
11
|
|
|
10
12
|
I18n.load_path += Dir[File.join(mydir, 'locales', '**/*.yml')]
|
|
@@ -65,8 +67,8 @@ module Faker
|
|
|
65
67
|
letterify(numerify(string))
|
|
66
68
|
end
|
|
67
69
|
|
|
68
|
-
def generate(as_type, &
|
|
69
|
-
PositionalGenerator.new(as_type, &
|
|
70
|
+
def generate(as_type, &)
|
|
71
|
+
PositionalGenerator.new(as_type, &).generate
|
|
70
72
|
end
|
|
71
73
|
|
|
72
74
|
# Given a regular expression, attempt to generate a string
|
|
@@ -93,12 +95,12 @@ module Faker
|
|
|
93
95
|
reg
|
|
94
96
|
.gsub(%r{^/?\^?}, '').gsub(%r{\$?/?$}, '') # Ditch the anchors
|
|
95
97
|
.gsub(/\{(\d+)\}/, '{\1,\1}').gsub('?', '{0,1}') # All {2} become {2,2} and ? become {0,1}
|
|
96
|
-
.gsub(/(\[[^\]]
|
|
97
|
-
.gsub(/(\([^)]
|
|
98
|
-
.gsub(/(\\?.)\{(\d+),(\d+)\}/) { |_match| Regexp.last_match(1) * sample(Array(Range.new(Regexp.last_match(2).to_i, Regexp.last_match(3).to_i))) }
|
|
99
|
-
.gsub(/\((.*?)\)/) { |match| sample(match.gsub(/[()]/, '').split('|')) }
|
|
100
|
-
.gsub(/\[([^\]]
|
|
101
|
-
.gsub(/\[([^\]]
|
|
98
|
+
.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]
|
|
99
|
+
.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)
|
|
100
|
+
.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
|
|
101
|
+
.gsub(/\((.*?)\)/) { |match| sample(match.gsub(/[()]/, '').split('|')) } # (this|that) becomes 'this' or 'that'
|
|
102
|
+
.gsub(/\[([^\]]++)\]/) { |match| match.gsub(/(\w-\w)/) { |range| sample(Array(Range.new(*range.split('-')))) } } # All A-Z inside of [] become C (or X, or whatever)
|
|
103
|
+
.gsub(/\[([^\]]++)\]/) { |_match| sample(Regexp.last_match(1).chars) } # All [ABC] become B (or A or C)
|
|
102
104
|
.gsub('\d') { |_match| sample(Numbers) }
|
|
103
105
|
.gsub('\w') { |_match| sample(Letters) }
|
|
104
106
|
end
|
|
@@ -131,7 +133,8 @@ module Faker
|
|
|
131
133
|
# formatted translation: e.g., "#{first_name} #{last_name}".
|
|
132
134
|
def parse(key)
|
|
133
135
|
fetched = fetch(key)
|
|
134
|
-
|
|
136
|
+
|
|
137
|
+
parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^}]+)\}([^#]++)?/).map do |prefix, kls, meth, etc|
|
|
135
138
|
# If the token had a class Prefix (e.g., Name.first_name)
|
|
136
139
|
# grab the constant, otherwise use self
|
|
137
140
|
cls = kls ? Faker.const_get(kls.chop) : self
|
|
@@ -195,7 +198,7 @@ module Faker
|
|
|
195
198
|
# name:
|
|
196
199
|
# girls_name: ["Alice", "Cheryl", "Tatiana"]
|
|
197
200
|
# Then you can call Faker::Name.girls_name and it will act like #first_name
|
|
198
|
-
def method_missing(mth, *args, &
|
|
201
|
+
def method_missing(mth, *args, &)
|
|
199
202
|
super unless flexible_key
|
|
200
203
|
|
|
201
204
|
if (translation = translate("faker.#{flexible_key}.#{mth}"))
|
|
@@ -30,7 +30,7 @@ module Faker
|
|
|
30
30
|
method_name.to_s.start_with?('faker_') || super
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
RetryLimitExceeded
|
|
33
|
+
class RetryLimitExceeded < StandardError; end
|
|
34
34
|
|
|
35
35
|
def previous_results
|
|
36
36
|
Thread.current[:faker_unique_generator_previous_results] ||= {}
|
data/lib/locales/README.md
CHANGED
|
@@ -20,7 +20,7 @@ Faker::Hipster.word #=> "kogi"
|
|
|
20
20
|
|
|
21
21
|
## How to update a locale with more translations
|
|
22
22
|
|
|
23
|
-
To update a locale with more translation features, simply add a new field to the
|
|
23
|
+
To update a locale with more translation features, simply add a new field to the `.yml` file that corresponds to an existing piece of functionality in the "en.yml" file. In this example, that would mean providing Chinese hipster words.
|
|
24
24
|
|
|
25
25
|
```yaml
|
|
26
26
|
# /lib/locales/zh-CN.yml
|
|
@@ -52,5 +52,5 @@ Faker::Config.default_locale = :pt
|
|
|
52
52
|
In threaded server environments, e.g., Puma, locale per thread can be set as the following:
|
|
53
53
|
|
|
54
54
|
```ruby
|
|
55
|
-
|
|
55
|
+
Faker::Config.locale = :es
|
|
56
56
|
```
|