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