faker 3.5.1 → 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 +197 -7
- 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/code.rb +4 -0
- data/lib/faker/default/company.rb +2 -2
- data/lib/faker/default/crypto.rb +0 -2
- data/lib/faker/default/driving_licence.rb +1 -1
- data/lib/faker/default/finance.rb +2 -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/internet.rb +1 -1
- data/lib/faker/default/invoice.rb +2 -2
- data/lib/faker/default/json.rb +7 -2
- 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/national_health_service.rb +1 -2
- data/lib/faker/default/placeholdit.rb +2 -2
- 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/deprecator.rb +1 -1
- 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/de-CH.yml +31 -0
- 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/finance.yml +1 -1
- 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-PAK.yml +24 -1
- 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/address.yml +761 -8
- 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/book.yml +492 -3
- 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 +33514 -55
- 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 -9
- data/lib/faker/default/bossa_nova.rb +0 -33
- data/lib/faker/default/twitter.rb +0 -207
|
@@ -97,11 +97,11 @@ module Faker
|
|
|
97
97
|
##
|
|
98
98
|
# Returns a random condominium fiscal code.
|
|
99
99
|
#
|
|
100
|
-
# @param country [String] Two capital letter country code to use for the
|
|
100
|
+
# @param country [String] Two capital letter country code to use for the condominium fiscal code number.
|
|
101
101
|
# @return [String]
|
|
102
102
|
#
|
|
103
103
|
# @example
|
|
104
|
-
# Faker::Finance.condominium_fiscal_code #=> "
|
|
104
|
+
# Faker::Finance.condominium_fiscal_code #=> "01234567890"
|
|
105
105
|
#
|
|
106
106
|
# @faker.version next
|
|
107
107
|
def condominium_fiscal_code(country: 'IT')
|
data/lib/faker/default/html.rb
CHANGED
|
@@ -187,7 +187,7 @@ module Faker
|
|
|
187
187
|
def random(exclude: [])
|
|
188
188
|
method_list = available_methods
|
|
189
189
|
exclude.each { |ex| method_list.delete_if { |meth| meth == ex.to_sym } }
|
|
190
|
-
send(method_list[Faker::Config.random.rand(0..method_list.length - 1)])
|
|
190
|
+
send(method_list[Faker::Config.random.rand(0..(method_list.length - 1))])
|
|
191
191
|
end
|
|
192
192
|
|
|
193
193
|
##
|
|
@@ -267,7 +267,7 @@ module Faker
|
|
|
267
267
|
# Faker::Internet.mac_address(prefix: 'aa:44') #=> "aa:44:30:88:6e:95"
|
|
268
268
|
def mac_address(prefix: '')
|
|
269
269
|
prefix_digits = prefix.split(':').map { |d| d.to_i(16) }
|
|
270
|
-
address_digits = Array.new(
|
|
270
|
+
address_digits = Array.new(6 - prefix_digits.size) { rand(256) }
|
|
271
271
|
(prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
|
|
272
272
|
end
|
|
273
273
|
|
|
@@ -13,8 +13,8 @@ module Faker
|
|
|
13
13
|
# @return [Integer]
|
|
14
14
|
#
|
|
15
15
|
# @example
|
|
16
|
-
# Faker::
|
|
17
|
-
# Faker::
|
|
16
|
+
# Faker::Invoice.amount_between #=> 0
|
|
17
|
+
# Faker::Invoice.amount_between(from: 0, to: 10) #=> 4.33
|
|
18
18
|
#
|
|
19
19
|
# @faker.version 1.9.0
|
|
20
20
|
def amount_between(from: 0, to: 0)
|
data/lib/faker/default/json.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Faker
|
|
2
4
|
class Json < Base
|
|
3
5
|
require 'json'
|
|
@@ -104,17 +106,20 @@ module Faker
|
|
|
104
106
|
end
|
|
105
107
|
|
|
106
108
|
def add_hash(key_array, hash, width, options)
|
|
107
|
-
string_to_eval = 'hash'
|
|
109
|
+
string_to_eval = 'hash'.dup
|
|
110
|
+
|
|
108
111
|
key_array.length.times do |index|
|
|
109
112
|
string_to_eval << "['#{key_array[index]}']"
|
|
110
113
|
end
|
|
111
114
|
string_to_eval << " = #{build_shallow_hash(width, options)}"
|
|
112
115
|
eval(string_to_eval)
|
|
116
|
+
|
|
113
117
|
hash
|
|
114
118
|
end
|
|
115
119
|
|
|
116
120
|
def build_keys_from_array(key_array)
|
|
117
|
-
key_string = ''
|
|
121
|
+
key_string = ''.dup
|
|
122
|
+
|
|
118
123
|
key_array.each do |value|
|
|
119
124
|
key_string << "['#{value}']"
|
|
120
125
|
end
|
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
|
##
|
|
@@ -20,8 +20,7 @@ module Faker
|
|
|
20
20
|
# If the check digit is equivalent to 10, the number is invalid.
|
|
21
21
|
# See https://en.wikipedia.org/wiki/NHS_number
|
|
22
22
|
base_number -= 1 if check_digit(number: base_number) == 10
|
|
23
|
-
"#{base_number}#{check_digit(number: base_number)}".
|
|
24
|
-
.chars
|
|
23
|
+
"#{base_number}#{check_digit(number: base_number)}".chars
|
|
25
24
|
.insert(3, ' ')
|
|
26
25
|
.insert(7, ' ')
|
|
27
26
|
.join
|
|
@@ -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)/
|
|
@@ -45,7 +45,7 @@ module Faker
|
|
|
45
45
|
private
|
|
46
46
|
|
|
47
47
|
def generate_color
|
|
48
|
-
format('%06x',
|
|
48
|
+
format('%06x', rand * 0xffffff)
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
end
|
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}"))
|
data/lib/helpers/deprecator.rb
CHANGED
|
@@ -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
|
```
|