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.
Files changed (245) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +133 -0
  3. data/README.md +78 -393
  4. data/lib/faker/blockchain/bitcoin.rb +0 -1
  5. data/lib/faker/blockchain/tezos.rb +0 -1
  6. data/lib/faker/books/lovecraft.rb +1 -1
  7. data/lib/faker/default/avatar.rb +1 -1
  8. data/lib/faker/default/bank.rb +1 -5
  9. data/lib/faker/default/boolean.rb +2 -1
  10. data/lib/faker/default/company.rb +1 -1
  11. data/lib/faker/default/crypto.rb +0 -2
  12. data/lib/faker/default/hipster.rb +1 -1
  13. data/lib/faker/default/html.rb +1 -1
  14. data/lib/faker/default/id_number.rb +1 -1
  15. data/lib/faker/default/lorem.rb +1 -1
  16. data/lib/faker/default/lorem_flickr.rb +1 -1
  17. data/lib/faker/default/markdown.rb +2 -2
  18. data/lib/faker/default/placeholdit.rb +1 -1
  19. data/lib/faker/default/string.rb +1 -1
  20. data/lib/faker/default/types.rb +2 -2
  21. data/lib/faker/default/x.rb +189 -0
  22. data/lib/faker/music/bossa_nova.rb +37 -0
  23. data/lib/faker/version.rb +1 -1
  24. data/lib/faker.rb +13 -10
  25. data/lib/helpers/unique_generator.rb +1 -1
  26. data/lib/locales/README.md +2 -2
  27. data/lib/locales/ar.yml +1606 -49
  28. data/lib/locales/bg.yml +935 -18
  29. data/lib/locales/ca-CAT.yml +347 -12
  30. data/lib/locales/ca.yml +580 -7
  31. data/lib/locales/ee.yml +1185 -26
  32. data/lib/locales/en/adjective.yml +174 -174
  33. data/lib/locales/en/airport.yml +374 -374
  34. data/lib/locales/en/ancient.yml +128 -4
  35. data/lib/locales/en/animal.yml +141 -2
  36. data/lib/locales/en/app.yml +89 -2
  37. data/lib/locales/en/appliance.yml +81 -2
  38. data/lib/locales/en/aqua_teen_hunger_force.yml +31 -31
  39. data/lib/locales/en/artist.yml +43 -1
  40. data/lib/locales/en/avatar.yml +54 -28
  41. data/lib/locales/en/back_to_the_future.yml +145 -117
  42. data/lib/locales/en/bank.yml +91 -2
  43. data/lib/locales/en/beer.yml +232 -6
  44. data/lib/locales/en/bible.yml +3 -6
  45. data/lib/locales/en/big_bang_theory.yml +34 -35
  46. data/lib/locales/en/bird.yml +1225 -1226
  47. data/lib/locales/en/bojack_horseman.yml +63 -3
  48. data/lib/locales/en/bossa_nova.yml +110 -3
  49. data/lib/locales/en/breaking_bad.yml +110 -25
  50. data/lib/locales/en/brooklyn_nine_nine.yml +0 -1
  51. data/lib/locales/en/buffy.yml +239 -257
  52. data/lib/locales/en/business.yml +18 -2
  53. data/lib/locales/en/cannabis.yml +344 -10
  54. data/lib/locales/en/cat.yml +155 -3
  55. data/lib/locales/en/chess.yml +2 -3
  56. data/lib/locales/en/chiquito.yml +60 -61
  57. data/lib/locales/en/chuck_norris.yml +78 -79
  58. data/lib/locales/en/clash_of_clan.yml +0 -2
  59. data/lib/locales/en/code.yml +501 -1
  60. data/lib/locales/en/coffee.yml +450 -25
  61. data/lib/locales/en/color.yml +73 -1
  62. data/lib/locales/en/commerce.yml +117 -23
  63. data/lib/locales/en/community.yml +55 -30
  64. data/lib/locales/en/company.yml +1756 -14
  65. data/lib/locales/en/compass.yml +108 -12
  66. data/lib/locales/en/conan.yml +0 -2
  67. data/lib/locales/en/construction.yml +416 -422
  68. data/lib/locales/en/cosmere.yml +219 -54
  69. data/lib/locales/en/cowboy_bebop.yml +56 -59
  70. data/lib/locales/en/culture_series.yml +298 -298
  71. data/lib/locales/en/currency.yml +358 -3
  72. data/lib/locales/en/dc_comics.yml +178 -49
  73. data/lib/locales/en/demographic.yml +215 -215
  74. data/lib/locales/en/departed.yml +40 -44
  75. data/lib/locales/en/dessert.yml +78 -3
  76. data/lib/locales/en/doraemon.yml +278 -280
  77. data/lib/locales/en/dr_who.yml +468 -93
  78. data/lib/locales/en/dragon_ball.yml +240 -240
  79. data/lib/locales/en/dumb_and_dumber.yml +72 -56
  80. data/lib/locales/en/elder_scrolls.yml +52 -53
  81. data/lib/locales/en/electrical_components.yml +49 -3
  82. data/lib/locales/en/esport.yml +58 -5
  83. data/lib/locales/en/family_guy.yml +54 -4
  84. data/lib/locales/en/file.yml +108 -9
  85. data/lib/locales/en/final_space.yml +1 -3
  86. data/lib/locales/en/food.yml +1 -1
  87. data/lib/locales/en/football.yml +112 -5
  88. data/lib/locales/en/fresh_prince_of_bel_air.yml +119 -70
  89. data/lib/locales/en/friends.yml +162 -3
  90. data/lib/locales/en/funny_name.yml +752 -1
  91. data/lib/locales/en/futurama.yml +7 -15
  92. data/lib/locales/en/game_of_thrones.yml +2487 -5
  93. data/lib/locales/en/gender.yml +15 -3
  94. data/lib/locales/en/ghostbusters.yml +101 -88
  95. data/lib/locales/en/grateful_dead.yml +47 -45
  96. data/lib/locales/en/greek_philosophers.yml +44 -23
  97. data/lib/locales/en/hacker.yml +110 -5
  98. data/lib/locales/en/hackers.yml +1 -1
  99. data/lib/locales/en/harry_potter.yml +323 -6
  100. data/lib/locales/en/hey_arnold.yml +104 -21
  101. data/lib/locales/en/hipster.yml +203 -1
  102. data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +243 -42
  103. data/lib/locales/en/hobby.yml +0 -1
  104. data/lib/locales/en/horse.yml +446 -2
  105. data/lib/locales/en/house.yml +34 -2
  106. data/lib/locales/en/how_i_met_your_mother.yml +97 -25
  107. data/lib/locales/en/how_to_train_your_dragon.yml +0 -1
  108. data/lib/locales/en/id_number.yml +6 -1
  109. data/lib/locales/en/industry_segments.yml +188 -4
  110. data/lib/locales/en/job.yml +98 -7
  111. data/lib/locales/en/kamen_rider.yml +272 -6
  112. data/lib/locales/en/kpop.yml +954 -80
  113. data/lib/locales/en/lebowski.yml +58 -40
  114. data/lib/locales/en/lorem.yml +1095 -6
  115. data/lib/locales/en/markdown.yml +12 -2
  116. data/lib/locales/en/marketing.yml +54 -1
  117. data/lib/locales/en/measurement.yml +42 -8
  118. data/lib/locales/en/michael_scott.yml +41 -42
  119. data/lib/locales/en/movie.yml +188 -176
  120. data/lib/locales/en/name.yml +6068 -6
  121. data/lib/locales/en/nato_phonetic_alphabet.yml +27 -1
  122. data/lib/locales/en/new_girl.yml +35 -37
  123. data/lib/locales/en/one_piece.yml +359 -6
  124. data/lib/locales/en/opera.yml +1 -1
  125. data/lib/locales/en/overwatch.yml +1 -1
  126. data/lib/locales/en/parks_and_rec.yml +33 -4
  127. data/lib/locales/en/pearl_jam.yml +207 -207
  128. data/lib/locales/en/phish.yml +388 -389
  129. data/lib/locales/en/prince.yml +219 -219
  130. data/lib/locales/en/princess_bride.yml +48 -2
  131. data/lib/locales/en/programming_language.yml +753 -3
  132. data/lib/locales/en/quote.yml +599 -685
  133. data/lib/locales/en/rajnikanth.yml +74 -74
  134. data/lib/locales/en/relationship.yml +29 -6
  135. data/lib/locales/en/restaurant.yml +31 -31
  136. data/lib/locales/en/rick_and_morty.yml +116 -3
  137. data/lib/locales/en/rock_band.yml +228 -2
  138. data/lib/locales/en/rupaul.yml +120 -122
  139. data/lib/locales/en/seinfeld.yml +110 -3
  140. data/lib/locales/en/shakespeare.yml +46 -50
  141. data/lib/locales/en/silicon_valley.yml +122 -50
  142. data/lib/locales/en/simpsons.yml +897 -691
  143. data/lib/locales/en/slack_emoji.yml +874 -8
  144. data/lib/locales/en/space.yml +373 -14
  145. data/lib/locales/en/star_trek.yml +105 -4
  146. data/lib/locales/en/star_wars.yml +525 -528
  147. data/lib/locales/en/stargate.yml +65 -18
  148. data/lib/locales/en/stranger_thing.yml +31 -33
  149. data/lib/locales/en/street_fighter.yml +1 -1
  150. data/lib/locales/en/subscription.yml +47 -5
  151. data/lib/locales/en/superhero.yml +574 -4
  152. data/lib/locales/en/sword_art_online.yml +327 -331
  153. data/lib/locales/en/team.yml +125 -3
  154. data/lib/locales/en/the_expanse.yml +92 -4
  155. data/lib/locales/en/the_it_crowd.yml +148 -152
  156. data/lib/locales/en/the_office.yml +77 -81
  157. data/lib/locales/en/the_room.yml +35 -35
  158. data/lib/locales/en/the_thick_of_it.yml +83 -3
  159. data/lib/locales/en/theater.yml +593 -593
  160. data/lib/locales/en/tolkien.yml +2 -2
  161. data/lib/locales/en/touhou.yml +54 -54
  162. data/lib/locales/en/tron.yml +191 -191
  163. data/lib/locales/en/twin_peaks.yml +130 -3
  164. data/lib/locales/en/umphreys_mcgee.yml +266 -1
  165. data/lib/locales/en/university.yml +15 -2
  166. data/lib/locales/en/v_for_vendetta.yml +157 -160
  167. data/lib/locales/en/venture_bros.yml +225 -4
  168. data/lib/locales/en/verbs.yml +3785 -5
  169. data/lib/locales/en/volleyball.yml +493 -493
  170. data/lib/locales/en/warhammer_fantasy.yml +540 -573
  171. data/lib/locales/en/world_cup.yml +1132 -235
  172. data/lib/locales/en/yoda.yml +38 -1
  173. data/lib/locales/en-BORK.yml +104 -1
  174. data/lib/locales/en-GB.yml +9 -7
  175. data/lib/locales/en-NG.yml +737 -66
  176. data/lib/locales/en-TH.yml +1 -1
  177. data/lib/locales/en-UG.yml +374 -76
  178. data/lib/locales/en-ZA.yml +1394 -13
  179. data/lib/locales/es-AR.yml +1 -1
  180. data/lib/locales/es-MX.yml +1907 -40
  181. data/lib/locales/es.yml +2117 -52
  182. data/lib/locales/fa.yml +1624 -5
  183. data/lib/locales/fi-FI.yml +315 -17
  184. data/lib/locales/fr/adjective.yml +261 -261
  185. data/lib/locales/fr/ancient.yml +134 -134
  186. data/lib/locales/fr/animal.yml +118 -1
  187. data/lib/locales/fr/appliance.yml +66 -1
  188. data/lib/locales/fr/book.yml +27 -3
  189. data/lib/locales/fr/color.yml +31 -1
  190. data/lib/locales/fr/company.yml +490 -10
  191. data/lib/locales/fr/compass.yml +58 -10
  192. data/lib/locales/fr/demographic.yml +3 -1
  193. data/lib/locales/fr/gender.yml +18 -3
  194. data/lib/locales/fr/internet.yml +12 -1
  195. data/lib/locales/fr/lorem.yml +1091 -2
  196. data/lib/locales/fr/measurement.yml +31 -4
  197. data/lib/locales/fr/name.yml +1176 -5
  198. data/lib/locales/fr/phone_number.yml +34 -3
  199. data/lib/locales/fr/pokemon.yml +417 -3
  200. data/lib/locales/fr-CA.yml +12 -6
  201. data/lib/locales/fr-CH.yml +2455 -41
  202. data/lib/locales/he.yml +255 -9
  203. data/lib/locales/hy.yml +12 -6
  204. data/lib/locales/it.yml +12 -6
  205. data/lib/locales/ja/address.yml +350 -120526
  206. data/lib/locales/ja/ancient.yml +15 -1
  207. data/lib/locales/ja/animal.yml +83 -1
  208. data/lib/locales/ja/artist.yml +46 -0
  209. data/lib/locales/ja/bank.yml +136 -1
  210. data/lib/locales/ja/cat.yml +75 -1
  211. data/lib/locales/ja/coffee.yml +19 -1
  212. data/lib/locales/ja/color.yml +32 -1
  213. data/lib/locales/ja/commerce.yml +98 -6
  214. data/lib/locales/ja/company.yml +20 -2
  215. data/lib/locales/ja/dog.yml +335 -2
  216. data/lib/locales/ja/emotion.yml +1 -3
  217. data/lib/locales/ja/food.yml +38 -1
  218. data/lib/locales/ja/gender.yml +3 -1
  219. data/lib/locales/ja/lorem.yml +1014 -3
  220. data/lib/locales/ja/name.yml +203 -3
  221. data/lib/locales/ja/overwatch.yml +33 -1
  222. data/lib/locales/ja/phone_number.yml +9 -3
  223. data/lib/locales/ja/pokemon.yml +437 -3
  224. data/lib/locales/ja/relationship.yml +29 -6
  225. data/lib/locales/ja/restaurant.yml +74 -3
  226. data/lib/locales/ja/space.yml +20 -2
  227. data/lib/locales/ja/subscription.yml +47 -5
  228. data/lib/locales/ja/super_mario.yml +68 -4
  229. data/lib/locales/ja/university.yml +15 -2
  230. data/lib/locales/ja/zelda.yml +15 -1
  231. data/lib/locales/ko.yml +1 -1
  232. data/lib/locales/lv.yml +1221 -26
  233. data/lib/locales/nl.yml +33507 -56
  234. data/lib/locales/pl.yml +4008 -37
  235. data/lib/locales/sk.yml +12 -6
  236. data/lib/locales/sv.yml +639 -49
  237. data/lib/locales/th.yml +375 -375
  238. data/lib/locales/tr.yml +77 -18
  239. data/lib/locales/uk.yml +7 -7
  240. data/lib/locales/vi.yml +392 -49
  241. data/lib/locales/zh-CN.yml +540 -19
  242. data/lib/locales/zh-TW.yml +1030 -15
  243. metadata +7 -6
  244. data/lib/faker/default/bossa_nova.rb +0 -33
  245. data/lib/faker/default/twitter.rb +0 -207
@@ -194,7 +194,7 @@ module Faker
194
194
 
195
195
  paragraph += " #{paragraph(sentence_count: 3, supplemental: supplemental)}" while paragraph.length < number
196
196
 
197
- "#{paragraph[0...number - 1]}."
197
+ "#{paragraph[0...(number - 1)]}."
198
198
  end
199
199
 
200
200
  ##
@@ -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 =~ /^[0-9]+x[0-9]+$/
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 =~ /^[0-9]+x[0-9]+$/
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)/
@@ -24,7 +24,7 @@ module Faker
24
24
  private
25
25
 
26
26
  def select_a(length)
27
- if length.class.included_modules.include? Enumerable
27
+ if length.class.include?(Enumerable)
28
28
  select_a sample(length.to_enum.to_a)
29
29
  else
30
30
  length # recursive base case
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Faker # :nodoc:
4
- VERSION = '3.5.2'
4
+ VERSION = '3.6.1'
5
5
  end
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, &block)
69
- PositionalGenerator.new(as_type, &block).generate
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(/(\[[^\]]+\])\{(\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]
97
- .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)
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))) } # A{1,2} becomes A or AA or \d{3} becomes \d\d\d
99
- .gsub(/\((.*?)\)/) { |match| sample(match.gsub(/[()]/, '').split('|')) } # (this|that) becomes 'this' or 'that'
100
- .gsub(/\[([^\]]+)\]/) { |match| match.gsub(/(\w-\w)/) { |range| sample(Array(Range.new(*range.split('-')))) } } # All A-Z inside of [] become C (or X, or whatever)
101
- .gsub(/\[([^\]]+)\]/) { |_match| sample(Regexp.last_match(1).chars) } # All [ABC] become B (or A or C)
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
- parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^}]+)\}([^#]+)?/).map do |prefix, kls, meth, etc|
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, &block)
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 = Class.new(StandardError)
33
+ class RetryLimitExceeded < StandardError; end
34
34
 
35
35
  def previous_results
36
36
  Thread.current[:faker_unique_generator_previous_results] ||= {}
@@ -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 .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.
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
- Faker::Config.locale = :es
55
+ Faker::Config.locale = :es
56
56
  ```