faker 2.20.0 → 3.2.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 (178) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +346 -7
  3. data/History.md +1 -1
  4. data/README.md +193 -107
  5. data/lib/faker/blockchain/aeternity.rb +1 -1
  6. data/lib/faker/blockchain/ethereum.rb +1 -1
  7. data/lib/faker/blockchain/tezos.rb +1 -1
  8. data/lib/faker/books/dune.rb +2 -10
  9. data/lib/faker/books/lovecraft.rb +7 -38
  10. data/lib/faker/default/address.rb +5 -25
  11. data/lib/faker/default/alphanumeric.rb +2 -8
  12. data/lib/faker/default/app.rb +1 -10
  13. data/lib/faker/default/avatar.rb +1 -12
  14. data/lib/faker/default/bank.rb +9 -17
  15. data/lib/faker/default/boolean.rb +1 -4
  16. data/lib/faker/default/chile_rut.rb +25 -25
  17. data/lib/faker/default/code.rb +68 -39
  18. data/lib/faker/default/color.rb +77 -6
  19. data/lib/faker/default/commerce.rb +3 -17
  20. data/lib/faker/default/company.rb +50 -19
  21. data/lib/faker/default/crypto_coin.rb +3 -15
  22. data/lib/faker/default/date.rb +65 -42
  23. data/lib/faker/default/demographic.rb +1 -5
  24. data/lib/faker/default/driving_licence.rb +20 -19
  25. data/lib/faker/default/drone.rb +1 -1
  26. data/lib/faker/default/file.rb +5 -24
  27. data/lib/faker/default/finance.rb +17 -7
  28. data/lib/faker/default/food.rb +14 -1
  29. data/lib/faker/default/hipster.rb +6 -45
  30. data/lib/faker/default/html.rb +230 -0
  31. data/lib/faker/default/id_number.rb +125 -14
  32. data/lib/faker/default/internet.rb +116 -111
  33. data/lib/faker/default/invoice.rb +4 -17
  34. data/lib/faker/default/json.rb +2 -20
  35. data/lib/faker/default/lorem.rb +25 -74
  36. data/lib/faker/default/lorem_flickr.rb +4 -32
  37. data/lib/faker/default/markdown.rb +6 -11
  38. data/lib/faker/default/marketing.rb +1 -1
  39. data/lib/faker/default/measurement.rb +16 -48
  40. data/lib/faker/default/name.rb +1 -5
  41. data/lib/faker/default/nhs.rb +2 -6
  42. data/lib/faker/default/number.rb +10 -55
  43. data/lib/faker/default/omniauth.rb +6 -40
  44. data/lib/faker/default/phone_number.rb +2 -6
  45. data/lib/faker/default/placeholdit.rb +1 -12
  46. data/lib/faker/default/relationship.rb +1 -5
  47. data/lib/faker/default/release notes.md +59 -0
  48. data/lib/faker/default/source.rb +3 -16
  49. data/lib/faker/default/string.rb +1 -5
  50. data/lib/faker/default/stripe.rb +4 -20
  51. data/lib/faker/default/time.rb +4 -32
  52. data/lib/faker/default/twitter.rb +7 -23
  53. data/lib/faker/default/types.rb +7 -28
  54. data/lib/faker/default/vehicle.rb +40 -51
  55. data/lib/faker/default/vulnerability_identifier.rb +23 -0
  56. data/lib/faker/default/world_cup.rb +2 -11
  57. data/lib/faker/games/clash_of_clans.rb +1 -1
  58. data/lib/faker/games/dnd.rb +49 -7
  59. data/lib/faker/games/dota.rb +1 -5
  60. data/lib/faker/games/final_fantasy_xiv.rb +73 -0
  61. data/lib/faker/games/minecraft.rb +1 -1
  62. data/lib/faker/games/myst.rb +1 -1
  63. data/lib/faker/games/tarkov.rb +205 -0
  64. data/lib/faker/japanese_media/cowboy_bebop.rb +61 -0
  65. data/lib/faker/japanese_media/kamen_rider.rb +2 -2
  66. data/lib/faker/japanese_media/one_piece.rb +1 -1
  67. data/lib/faker/movies/avatar.rb +49 -0
  68. data/lib/faker/movies/hackers.rb +48 -0
  69. data/lib/faker/movies/star_wars.rb +1 -5
  70. data/lib/faker/movies/tron.rb +161 -0
  71. data/lib/faker/quotes/quote.rb +13 -0
  72. data/lib/faker/sports/chess.rb +90 -0
  73. data/lib/faker/sports/mountaineering.rb +22 -0
  74. data/lib/faker/sports/sport.rb +116 -0
  75. data/lib/faker/travel/airport.rb +43 -0
  76. data/lib/faker/travel/train_station.rb +54 -0
  77. data/lib/faker/tv_shows/archer.rb +51 -0
  78. data/lib/faker/tv_shows/south_park.rb +15 -0
  79. data/lib/faker/tv_shows/spongebob.rb +50 -0
  80. data/lib/faker/version.rb +1 -1
  81. data/lib/faker.rb +26 -67
  82. data/lib/helpers/base58.rb +1 -1
  83. data/lib/helpers/positional_generator.rb +480 -0
  84. data/lib/helpers/unique_generator.rb +13 -11
  85. data/lib/locales/README.md +18 -2
  86. data/lib/locales/ar.yml +1 -0
  87. data/lib/locales/bg.yml +1 -1
  88. data/lib/locales/da-DK.yml +1 -1
  89. data/lib/locales/de-AT.yml +1 -2
  90. data/lib/locales/de-CH.yml +4336 -12
  91. data/lib/locales/de.yml +1 -1
  92. data/lib/locales/en/airport.yml +381 -0
  93. data/lib/locales/en/archer.yml +75 -0
  94. data/lib/locales/en/australia.yml +3 -4
  95. data/lib/locales/en/avatar.yml +31 -0
  96. data/lib/locales/en/chess.yml +103 -0
  97. data/lib/locales/en/company.yml +1 -0
  98. data/lib/locales/en/computer.yml +23 -4
  99. data/lib/locales/en/cowboy_bebop.yml +163 -0
  100. data/lib/locales/en/dnd.yml +186 -1
  101. data/lib/locales/en/dota.yml +113 -0
  102. data/lib/locales/en/file.yml +9 -1
  103. data/lib/locales/en/final_fantasy_xiv.yml +754 -0
  104. data/lib/locales/en/finance.yml +3 -1
  105. data/lib/locales/en/food.yml +12 -0
  106. data/lib/locales/en/game.yml +0 -1
  107. data/lib/locales/en/hackers.yml +53 -0
  108. data/lib/locales/en/heroes.yml +2 -2
  109. data/lib/locales/en/internet.yml +32 -0
  110. data/lib/locales/en/minecraft.yml +4 -4
  111. data/lib/locales/en/mitch_hedberg.yml +46 -0
  112. data/lib/locales/en/mountaineering.yml +14 -0
  113. data/lib/locales/en/movie.yml +2 -1
  114. data/lib/locales/en/naruto.yml +2 -3
  115. data/lib/locales/en/one_piece.yml +1 -1
  116. data/lib/locales/en/opera.yml +2 -2
  117. data/lib/locales/en/overwatch.yml +5 -7
  118. data/lib/locales/en/source.yml +5 -0
  119. data/lib/locales/en/south_park.yml +360 -2
  120. data/lib/locales/en/spongebob.yml +489 -0
  121. data/lib/locales/en/sport.yml +130 -0
  122. data/lib/locales/en/star_wars.yml +1 -1
  123. data/lib/locales/en/tarkov.yml +593 -0
  124. data/lib/locales/en/train_station.yml +280 -0
  125. data/lib/locales/en/tron.yml +227 -0
  126. data/lib/locales/en/vehicle.yml +2809 -75
  127. data/lib/locales/en-AU.yml +2 -2
  128. data/lib/locales/en-CA.yml +2 -1
  129. data/lib/locales/en-GB.yml +2 -1
  130. data/lib/locales/en-MS.yml +1 -0
  131. data/lib/locales/en-NG.yml +1 -0
  132. data/lib/locales/en-NZ.yml +1 -0
  133. data/lib/locales/en-PAK.yml +1 -0
  134. data/lib/locales/en-SG.yml +1 -0
  135. data/lib/locales/en-UG.yml +1 -0
  136. data/lib/locales/en-US.yml +1 -1
  137. data/lib/locales/en-ZA.yml +1 -1
  138. data/lib/locales/en-au-ocker.yml +2 -0
  139. data/lib/locales/es-AR.yml +3 -2
  140. data/lib/locales/es-MX.yml +1 -1
  141. data/lib/locales/es.yml +2 -2
  142. data/lib/locales/fi-FI.yml +3 -1
  143. data/lib/locales/fr/address.yml +0 -1
  144. data/lib/locales/fr/adjective.yml +266 -0
  145. data/lib/locales/fr/ancient.yml +141 -0
  146. data/lib/locales/fr/name.yml +2 -1
  147. data/lib/locales/fr-CA.yml +1 -1
  148. data/lib/locales/fr-CH.yml +1 -1
  149. data/lib/locales/hy.yml +2 -1
  150. data/lib/locales/it.yml +1 -0
  151. data/lib/locales/ja/adjective.yml +148 -0
  152. data/lib/locales/ja/dog.yml +1 -0
  153. data/lib/locales/ja/emotion.yml +51 -0
  154. data/lib/locales/ja/naruto.yml +230 -0
  155. data/lib/locales/ja/relationship.yml +10 -0
  156. data/lib/locales/ja/sport.yml +130 -0
  157. data/lib/locales/ja/super_mario.yml +1 -1
  158. data/lib/locales/ko.yml +1 -0
  159. data/lib/locales/lt.yml +0 -1
  160. data/lib/locales/mi-NZ.yml +2 -0
  161. data/lib/locales/nb-NO.yml +1 -0
  162. data/lib/locales/nl.yml +1 -0
  163. data/lib/locales/pl.yml +2 -2
  164. data/lib/locales/pt-BR.yml +1 -0
  165. data/lib/locales/pt.yml +1 -1
  166. data/lib/locales/ru.yml +1 -0
  167. data/lib/locales/sk.yml +1 -0
  168. data/lib/locales/sv.yml +1 -0
  169. data/lib/locales/th.yml +76 -76
  170. data/lib/locales/tr.yml +1 -0
  171. data/lib/locales/uk.yml +3 -0
  172. data/lib/locales/vi.yml +1 -0
  173. data/lib/locales/zh-CN.yml +1 -0
  174. data/lib/locales/zh-TW.yml +1 -0
  175. metadata +46 -127
  176. data/lib/faker/default/fillmurray.rb +0 -45
  177. data/lib/faker/default/lorem_pixel.rb +0 -70
  178. /data/lib/faker/default/{faker_adjective.rb → adjective.rb} +0 -0
@@ -15,6 +15,8 @@ module Faker
15
15
  ].each(&:freeze).freeze
16
16
 
17
17
  class << self
18
+ extend Gem::Deprecate
19
+
18
20
  ##
19
21
  # Returns the email address
20
22
  #
@@ -25,16 +27,12 @@ module Faker
25
27
  # @param domain [String]
26
28
  #
27
29
  # @example
28
- # Faker::Internet.email #=> "samsmith@faker.com"
29
- # Faker::Internet.email(name: 'smith') #=> "smith@faker.com"
30
- # Faker::Internet.email(name: 'sam smith', separators: ['-']) #=> "sam-smith@faker.com"
31
- # Faker::Internet.email(name: 'sam smith', separators: ['-'], domain: 'gmail') #=> "sam-smith@gmail.com"
32
- def email(legacy_name = NOT_GIVEN, legacy_separators = NOT_GIVEN, name: nil, separators: nil, domain: nil)
33
- warn_for_deprecated_arguments do |keywords|
34
- keywords << :name if legacy_name != NOT_GIVEN
35
- keywords << :separators if legacy_separators != NOT_GIVEN
36
- end
37
-
30
+ # Faker::Internet.email #=> "renee@zieme.test"
31
+ # Faker::Internet.email(name: 'smith') #=> "smith@bergnaum.test"
32
+ # Faker::Internet.email(name: 'sam smith', separators: ['-']) #=> "smith-sam@tromp.example"
33
+ # Faker::Internet.email(name: 'sam smith', separators: ['-'], domain: 'test') #=> "sam-smith@test.example"
34
+ # Faker::Internet.email(domain: 'gmail.com') #=> "foo@gmail.com"
35
+ def email(name: nil, separators: nil, domain: nil)
38
36
  local_part = if separators
39
37
  username(specifier: name, separators: separators)
40
38
  else
@@ -42,7 +40,14 @@ module Faker
42
40
  end
43
41
 
44
42
  sanitized_local_part = sanitize_email_local_part(local_part)
45
- construct_email(sanitized_local_part, domain_name(domain: domain))
43
+
44
+ generate_domain = if domain.nil?
45
+ domain_name
46
+ else
47
+ domain_name(domain: domain)
48
+ end
49
+
50
+ construct_email(sanitized_local_part, generate_domain)
46
51
  end
47
52
 
48
53
  ##
@@ -55,16 +60,13 @@ module Faker
55
60
  # @example
56
61
  # Faker::Internet.free_email #=> "samsmith@gmail.com"
57
62
  # Faker::Internet.free_email(name: 'smith') #=> "smith@yahoo.com"
58
- def free_email(legacy_name = NOT_GIVEN, name: nil)
59
- warn_for_deprecated_arguments do |keywords|
60
- keywords << :name if legacy_name != NOT_GIVEN
61
- end
62
-
63
+ def free_email(name: nil)
63
64
  construct_email(
64
65
  sanitize_email_local_part(username(specifier: name)),
65
66
  fetch('internet.free_email')
66
67
  )
67
68
  end
69
+ deprecate :free_email, :email, 2023, 10
68
70
 
69
71
  ##
70
72
  # Returns the email address with fixed domain name as 'example'
@@ -76,16 +78,13 @@ module Faker
76
78
  # @example
77
79
  # Faker::Internet.safe_email #=> "samsmith@example.com"
78
80
  # Faker::Internet.safe_email(name: 'smith') #=> "smith@example.net"
79
- def safe_email(legacy_name = NOT_GIVEN, name: nil)
80
- warn_for_deprecated_arguments do |keywords|
81
- keywords << :name if legacy_name != NOT_GIVEN
82
- end
83
-
81
+ def safe_email(name: nil)
84
82
  construct_email(
85
83
  sanitize_email_local_part(username(specifier: name)),
86
84
  "example.#{sample(%w[org com net])}"
87
85
  )
88
86
  end
87
+ deprecate :safe_email, :email, 2023, 10
89
88
 
90
89
  ##
91
90
  # Returns the username
@@ -100,12 +99,7 @@ module Faker
100
99
  # Faker::Internet.username(specifier: 5..10) #=> "morris"
101
100
  # Faker::Internet.username(specifier: 5..10) #=> "berryberry"
102
101
  # Faker::Internet.username(specifier: 20, separators: ['-']) #=> "nikki_sawaynnikki_saway"
103
- def username(legacy_specifier = NOT_GIVEN, legacy_separators = NOT_GIVEN, specifier: nil, separators: %w[. _])
104
- warn_for_deprecated_arguments do |keywords|
105
- keywords << :specifier if legacy_specifier != NOT_GIVEN
106
- keywords << :separators if legacy_separators != NOT_GIVEN
107
- end
108
-
102
+ def username(specifier: nil, separators: %w[. _])
109
103
  with_locale(:en) do
110
104
  return shuffle(specifier.scan(/[[:word:]]+/)).join(sample(separators)).downcase if specifier.respond_to?(:scan)
111
105
 
@@ -142,8 +136,6 @@ module Faker
142
136
  end
143
137
  end
144
138
 
145
- # rubocop:disable Metrics/ParameterLists
146
-
147
139
  ##
148
140
  # Produces a randomized string of characters suitable for passwords
149
141
  #
@@ -166,43 +158,55 @@ module Faker
166
158
  # Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true, special_characters: true) #=> "*%NkOnJsH4"
167
159
  #
168
160
  # @faker.version 2.1.3
169
- def password(legacy_min_length = NOT_GIVEN, legacy_max_length = NOT_GIVEN, legacy_mix_case = NOT_GIVEN, legacy_special_characters = NOT_GIVEN, min_length: 8, max_length: 16, mix_case: true, special_characters: false)
170
- warn_for_deprecated_arguments do |keywords|
171
- keywords << :min_length if legacy_min_length != NOT_GIVEN
172
- keywords << :max_length if legacy_max_length != NOT_GIVEN
173
- keywords << :mix_case if legacy_mix_case != NOT_GIVEN
174
- keywords << :special_characters if legacy_special_characters != NOT_GIVEN
175
- end
161
+ def password(min_length: 8, max_length: 16, mix_case: true, special_characters: false)
162
+ raise ArgumentError, 'min_length and max_length must be greater than or equal to one' if min_length < 1 || max_length < 1
163
+ raise ArgumentError, 'min_length must be smaller than or equal to max_length' unless min_length <= max_length
176
164
 
177
- min_alpha = mix_case && min_length > 1 ? 2 : 0
178
- temp = Lorem.characters(number: min_length, min_alpha: min_alpha)
179
- diff_length = max_length - min_length
165
+ character_types = []
166
+ required_min_length = 0
180
167
 
181
- if diff_length.positive?
182
- diff_rand = rand(diff_length + 1)
183
- temp += Lorem.characters(number: diff_rand)
168
+ if mix_case
169
+ character_types << :mix_case
170
+ required_min_length += 2
171
+ end
172
+
173
+ if special_characters
174
+ character_types << :special_characters
175
+ required_min_length += 1
184
176
  end
185
177
 
178
+ raise ArgumentError, "min_length should be at least #{required_min_length} to enable #{character_types.join(', ')} configuration" if min_length < required_min_length
179
+
180
+ target_length = rand(min_length..max_length)
181
+
182
+ password = []
183
+ character_bag = []
184
+
185
+ # use lower_chars by default and add upper_chars if mix_case
186
+ lower_chars = self::LLetters
187
+ password << sample(lower_chars)
188
+ character_bag += lower_chars
189
+
190
+ digits = ('0'..'9').to_a
191
+ password << sample(digits)
192
+ character_bag += digits
193
+
186
194
  if mix_case
187
- alpha_count = 0
188
- temp.chars.each_with_index do |char, index|
189
- if char =~ /[[:alpha:]]/
190
- temp[index] = char.upcase if alpha_count.even?
191
- alpha_count += 1
192
- end
193
- end
195
+ upper_chars = self::ULetters
196
+ password << sample(upper_chars)
197
+ character_bag += upper_chars
194
198
  end
195
199
 
196
200
  if special_characters
197
- chars = %w[! @ # $ % ^ & *]
198
- rand(1..min_length).times do |i|
199
- temp[i] = chars[rand(chars.length)]
200
- end
201
+ special_chars = %w[! @ # $ % ^ & *]
202
+ password << sample(special_chars)
203
+ character_bag += special_chars
201
204
  end
202
205
 
203
- temp
206
+ password << sample(character_bag) while password.length < target_length
207
+
208
+ shuffle(password).join
204
209
  end
205
- # rubocop:enable Metrics/ParameterLists
206
210
 
207
211
  ##
208
212
  # Returns the domain name
@@ -213,27 +217,31 @@ module Faker
213
217
  # @param domain [String]
214
218
  #
215
219
  # @example
216
- # Faker::Internet.domain_name #=> "test.net"
217
- # Faker::Internet.domain_name(subdomain: true) #=> "test.faker.io"
218
- # Faker::Internet.domain_name(subdomain: true, domain: 'example') #=> "faker.example.com"
219
- # Faker::Internet.domain_name(domain: 'faker') #=> "faker.org"
220
- def domain_name(legacy_subdomain = NOT_GIVEN, subdomain: false, domain: nil)
221
- warn_for_deprecated_arguments do |keywords|
222
- keywords << :subdomain if legacy_subdomain != NOT_GIVEN
223
- end
224
-
220
+ # Faker::Internet.domain_name #=> "altenwerth-gerhold.example"
221
+ # Faker::Internet.domain_name(subdomain: true) #=> "metz.mclaughlin-brekke.test"
222
+ # Faker::Internet.domain_name(subdomain: true, domain: 'faker') #=> "foo.faker.test"
223
+ # Faker::Internet.domain_name(domain: 'faker-ruby.org') #=> "faker-ruby.org"
224
+ # Faker::Internet.domain_name(subdomain: true, domain: 'faker-ruby.org') #=> "foo.faker-ruby.org"
225
+ # Faker::Internet.domain_name(subdomain: true, domain: 'faker.faker-ruby.org') #=> "faker.faker-ruby.org"
226
+ def domain_name(subdomain: false, domain: nil)
225
227
  with_locale(:en) do
226
228
  if domain
227
229
  domain
228
230
  .split('.')
229
231
  .map { |domain_part| Char.prepare(domain_part) }
230
232
  .tap do |domain_elements|
231
- domain_elements << domain_suffix if domain_elements.length < 2
232
- domain_elements.unshift(Char.prepare(domain_word)) if subdomain && domain_elements.length < 3
233
+ if domain_elements.length < 2
234
+ domain_elements << domain_suffix(safe: true)
235
+ end
236
+ if subdomain && domain_elements.length < 3
237
+ domain_elements.unshift(Char.prepare(domain_word))
238
+ end
233
239
  end.join('.')
234
240
  else
235
- [domain_word, domain_suffix].tap do |domain_elements|
236
- domain_elements.unshift(Char.prepare(domain_word)) if subdomain
241
+ [domain_word, domain_suffix(safe: true)].tap do |domain_elements|
242
+ if subdomain
243
+ domain_elements.unshift(Char.prepare(domain_word))
244
+ end
237
245
  end.join('.')
238
246
  end
239
247
  end
@@ -250,11 +258,7 @@ module Faker
250
258
  # Faker::Internet.fix_umlauts #=> ""
251
259
  # Faker::Internet.fix_umlauts(string: 'faker') #=> "faker"
252
260
  # Faker::Internet.fix_umlauts(string: 'faküer') #=> "fakueer"
253
- def fix_umlauts(legacy_string = NOT_GIVEN, string: '')
254
- warn_for_deprecated_arguments do |keywords|
255
- keywords << :string if legacy_string != NOT_GIVEN
256
- end
257
-
261
+ def fix_umlauts(string: '')
258
262
  Char.fix_umlauts(string)
259
263
  end
260
264
 
@@ -266,7 +270,7 @@ module Faker
266
270
  # @example
267
271
  # Faker::Internet.domain_word #=> "senger"
268
272
  def domain_word
269
- with_locale(:en) { Char.prepare(Company.name.split(' ').first) }
273
+ with_locale(:en) { Char.prepare(Company.name.split.first) }
270
274
  end
271
275
 
272
276
  ## Returns the domain suffix e.g. com, org, co, biz, info etc.
@@ -274,10 +278,16 @@ module Faker
274
278
  # @return [String]
275
279
  #
276
280
  # @example
277
- # Faker::Internet.domain_suffix #=> "com"
278
- # Faker::Internet.domain_suffix #=> "biz"
279
- def domain_suffix
280
- fetch('internet.domain_suffix')
281
+ # Faker::Internet.domain_suffix #=> "com"
282
+ # Faker::Internet.domain_suffix #=> "biz"
283
+ # Faker::Internet.domain_suffix(safe: true) #=> "example"
284
+ # Faker::Internet.domain_suffix(safe: true) #=> "test"
285
+ def domain_suffix(safe: nil)
286
+ if safe
287
+ fetch('internet.safe_domain_suffix')
288
+ else
289
+ fetch('internet.domain_suffix')
290
+ end
281
291
  end
282
292
 
283
293
  ##
@@ -290,11 +300,7 @@ module Faker
290
300
  # Faker::Internet.mac_address(prefix: 'a') #=> "0a:91:ce:24:89:3b"
291
301
  # Faker::Internet.mac_address(prefix: 'aa') #=> "aa:38:a0:3e:e8:41"
292
302
  # Faker::Internet.mac_address(prefix: 'aa:44') #=> "aa:44:30:88:6e:95"
293
- def mac_address(legacy_prefix = NOT_GIVEN, prefix: '')
294
- warn_for_deprecated_arguments do |keywords|
295
- keywords << :prefix if legacy_prefix != NOT_GIVEN
296
- end
297
-
303
+ def mac_address(prefix: '')
298
304
  prefix_digits = prefix.split(':').map { |d| d.to_i(16) }
299
305
  address_digits = Array.new((6 - prefix_digits.size)) { rand(256) }
300
306
  (prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
@@ -436,8 +442,6 @@ module Faker
436
442
  "#{ip_v6_address}/#{rand(1..127)}"
437
443
  end
438
444
 
439
- # rubocop:disable Metrics/ParameterLists
440
-
441
445
  ##
442
446
  # Returns URL
443
447
  #
@@ -448,20 +452,13 @@ module Faker
448
452
  # @param scheme [String]
449
453
  #
450
454
  # @example
451
- # Faker::Internet.url #=> "http://sipes-okon.com/hung.macejkovic"
455
+ # Faker::Internet.url #=> "http://treutel.test/demarcus"
452
456
  # Faker::Internet.url(host: 'faker') #=> "http://faker/shad"
453
- # Faker::Internet.url(host: 'faker', path: '/fake_test_path') #=> "http://faker/fake_test_path"
454
- # Faker::Internet.url(host: 'faker', path: '/fake_test_path', scheme: 'https') #=> "https://faker/fake_test_path"
455
- def url(legacy_host = NOT_GIVEN, legacy_path = NOT_GIVEN, legacy_scheme = NOT_GIVEN, host: domain_name, path: "/#{username}", scheme: 'http')
456
- warn_for_deprecated_arguments do |keywords|
457
- keywords << :host if legacy_host != NOT_GIVEN
458
- keywords << :path if legacy_path != NOT_GIVEN
459
- keywords << :scheme if legacy_scheme != NOT_GIVEN
460
- end
461
-
457
+ # Faker::Internet.url(host: 'faker', path: '/docs') #=> "http://faker/docs"
458
+ # Faker::Internet.url(host: 'faker', path: '/docs', scheme: 'https') #=> "https://faker/docs"
459
+ def url(host: domain_name, path: "/#{username}", scheme: 'http')
462
460
  "#{scheme}://#{host}#{path}"
463
461
  end
464
- # rubocop:enable Metrics/ParameterLists
465
462
 
466
463
  ##
467
464
  # Returns unique string in URL
@@ -476,12 +473,7 @@ module Faker
476
473
  # Faker::Internet.slug(words: 'test, faker') #=> "test-faker"
477
474
  # Faker::Internet.slug(words: 'test. faker') #=> "test-faker"
478
475
  # Faker::Internet.slug(words: 'test. faker', glue: '$') #=> "test$faker"
479
- def slug(legacy_words = NOT_GIVEN, legacy_glue = NOT_GIVEN, words: nil, glue: nil)
480
- warn_for_deprecated_arguments do |keywords|
481
- keywords << :words if legacy_words != NOT_GIVEN
482
- keywords << :glue if legacy_glue != NOT_GIVEN
483
- end
484
-
476
+ def slug(words: nil, glue: nil)
485
477
  glue ||= sample(%w[- _])
486
478
  return words.delete(',.').gsub(' ', glue).downcase unless words.nil?
487
479
 
@@ -511,16 +503,29 @@ module Faker
511
503
  # Faker::Internet.user_agent(vendor: 'chrome') #=> "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
512
504
  # Faker::Internet.user_agent(vendor: 'safari') #=> "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"
513
505
  # Faker::Internet.user_agent(vendor: 'faker') #=> "Mozilla/5.0 (Windows; U; Win 9x 4.90; SG; rv:1.9.2.4) Gecko/20101104 Netscape/9.1.0285"
514
- def user_agent(legacy_vendor = NOT_GIVEN, vendor: nil)
515
- warn_for_deprecated_arguments do |keywords|
516
- keywords << :vendor if legacy_vendor != NOT_GIVEN
517
- end
518
-
506
+ def user_agent(vendor: nil)
519
507
  agent_hash = translate('faker.internet.user_agent')
520
508
  agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
521
509
  sample(agents)
522
510
  end
523
511
 
512
+ ##
513
+ # Generate Web Crawler's user agents
514
+ #
515
+ # @return [String]
516
+ #
517
+ # @param vendor [String] Name of vendor, supported vendors are googlebot, bingbot, duckduckbot, baiduspider, yandexbot
518
+ #
519
+ # @example
520
+ # Faker::Internet.bot_user_agent #=> "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
521
+ # Faker::Internet.bot_user_agent(vendor: 'googlebot') #=> "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/99.0.4844.84 Safari/537.36"
522
+ # Faker::Internet.bot_user_agent(vendor: 'bingbot') #=> "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/86.0.4240.68 Safari/537.36 Edg/86.0.622.31"
523
+ def bot_user_agent(vendor: nil)
524
+ agent_hash = translate('faker.internet.bot_user_agent')
525
+ agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
526
+ sample(agents)
527
+ end
528
+
524
529
  ##
525
530
  # Generated universally unique identifier
526
531
  #
@@ -568,10 +573,10 @@ module Faker
568
573
  ##
569
574
  # Produces a randomized hash of internet user details
570
575
  # @example
571
- # Faker::Internet.user #=> { username: 'alexie', email: 'alexie@example.net' }
576
+ # Faker::Internet.user #=> { username: 'alexie', email: 'trudie@grant.test' }
572
577
  #
573
578
  # @example
574
- # Faker::Internet.user('username', 'email', 'password') #=> { username: 'alexie', email: 'alexie@example.net', password: 'DtEf9P8wS31iMyC' }
579
+ # Faker::Internet.user('username', 'email', 'password') #=> { username: 'alexie', email: 'gayle@kohler.test', password: 'DtEf9P8wS31iMyC' }
575
580
  #
576
581
  # @return [hash]
577
582
  #
@@ -592,10 +597,10 @@ module Faker
592
597
  Array('0'..'9'),
593
598
  Array('A'..'Z'),
594
599
  Array('a'..'z'),
595
- "!#$%&'*+-/=?^_`{|}~.".split(//)
600
+ "!#$%&'*+-/=?^_`{|}~.".chars
596
601
  ].flatten
597
602
 
598
- local_part.split(//).map do |char|
603
+ local_part.chars.map do |char|
599
604
  char_range.include?(char) ? char : '#'
600
605
  end.join
601
606
  end
@@ -17,12 +17,7 @@ module Faker
17
17
  # Faker::Finance.amount_between(0, 10) #=> 4.33
18
18
  #
19
19
  # @faker.version 1.9.0
20
- def amount_between(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from: 0, to: 0)
21
- warn_for_deprecated_arguments do |keywords|
22
- keywords << :from if legacy_from != NOT_GIVEN
23
- keywords << :to if legacy_to != NOT_GIVEN
24
- end
25
-
20
+ def amount_between(from: 0, to: 0)
26
21
  Faker::Base.rand_in_range(from, to).round(2)
27
22
  end
28
23
 
@@ -36,11 +31,7 @@ module Faker
36
31
  # Faker::Invoice.creditor_reference #=> "RF34118592570724925498"
37
32
  #
38
33
  # @faker.version 1.9.0
39
- def creditor_reference(legacy_ref = NOT_GIVEN, ref: '')
40
- warn_for_deprecated_arguments do |keywords|
41
- keywords << :ref if legacy_ref != NOT_GIVEN
42
- end
43
-
34
+ def creditor_reference(ref: '')
44
35
  ref = reference if ref.empty?
45
36
 
46
37
  "RF#{iban_checksum('RF', ref)}#{ref}"
@@ -56,11 +47,7 @@ module Faker
56
47
  # Faker::Invoice.reference #=> "45656646957845"
57
48
  #
58
49
  # @faker.version 1.9.0
59
- def reference(legacy_ref = NOT_GIVEN, ref: '')
60
- warn_for_deprecated_arguments do |keywords|
61
- keywords << :ref if legacy_ref != NOT_GIVEN
62
- end
63
-
50
+ def reference(ref: '')
64
51
  pattern = fetch('invoice.reference.pattern')
65
52
 
66
53
  ref = Base.regexify(/#{pattern}/) if ref.empty?
@@ -115,7 +102,7 @@ module Faker
115
102
  mod10_remainder(weighted_sum)
116
103
  end
117
104
 
118
- # Calculates weigthed sum
105
+ # Calculates weighted sum
119
106
  #
120
107
  # For example with 12345678, [1,2]
121
108
  # Ref.num. 1 2 3 4 5 6 7 8
@@ -20,12 +20,7 @@ module Faker
20
20
  # something to eat - it's all been wrong."}
21
21
  #
22
22
  # @faker.version 1.9.2
23
- def shallow_json(legacy_width = NOT_GIVEN, legacy_options = NOT_GIVEN, width: 3, options: { key: 'Name.first_name', value: 'Name.first_name' })
24
- warn_for_deprecated_arguments do |keywords|
25
- keywords << :width if legacy_width != NOT_GIVEN
26
- keywords << :options if legacy_options != NOT_GIVEN
27
- end
28
-
23
+ def shallow_json(width: 3, options: { key: 'Name.first_name', value: 'Name.first_name' })
29
24
  options[:key] = "Faker::#{options[:key]}"
30
25
  options[:value] = "Faker::#{options[:value]}"
31
26
 
@@ -33,8 +28,6 @@ module Faker
33
28
  JSON.generate(hash)
34
29
  end
35
30
 
36
- # rubocop:disable Metrics/ParameterLists
37
-
38
31
  ##
39
32
  # Produces a random nested JSON formatted string that can take JSON as an additional argument.
40
33
  #
@@ -73,17 +66,7 @@ module Faker
73
66
  # {"Rick":"Wiza","Bonita":"Bayer","Gardner":"Auer","Felicity":"Abbott"}}}
74
67
  #
75
68
  # @faker.version 1.9.2
76
- def add_depth_to_json(legacy_json = NOT_GIVEN, legacy_width = NOT_GIVEN, legacy_options = NOT_GIVEN, json: shallow_json, width: 3, options: { key: 'Name.first_name', value: 'Name.first_name' })
77
- warn_for_deprecated_arguments do |keywords|
78
- keywords << :json if legacy_json != NOT_GIVEN
79
- end
80
- warn_for_deprecated_arguments do |keywords|
81
- keywords << :width if legacy_width != NOT_GIVEN
82
- end
83
- warn_for_deprecated_arguments do |keywords|
84
- keywords << :options if legacy_options != NOT_GIVEN
85
- end
86
-
69
+ def add_depth_to_json(json: shallow_json, width: 3, options: { key: 'Name.first_name', value: 'Name.first_name' })
87
70
  options[:key] = "Faker::#{options[:key]}"
88
71
  options[:value] = "Faker::#{options[:value]}"
89
72
 
@@ -93,7 +76,6 @@ module Faker
93
76
  end
94
77
  JSON.generate(hash)
95
78
  end
96
- # rubocop:enable Metrics/ParameterLists
97
79
 
98
80
  private
99
81