faker 2.22.0 → 3.0.0

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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +88 -7
  3. data/History.md +1 -1
  4. data/README.md +11 -5
  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 +8 -14
  17. data/lib/faker/default/code.rb +10 -23
  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 +6 -14
  21. data/lib/faker/default/crypto_coin.rb +3 -15
  22. data/lib/faker/default/date.rb +5 -38
  23. data/lib/faker/default/demographic.rb +1 -5
  24. data/lib/faker/default/driving_licence.rb +1 -11
  25. data/lib/faker/default/file.rb +5 -24
  26. data/lib/faker/default/fillmurray.rb +1 -10
  27. data/lib/faker/default/finance.rb +17 -7
  28. data/lib/faker/default/hipster.rb +6 -45
  29. data/lib/faker/default/id_number.rb +108 -11
  30. data/lib/faker/default/internet.rb +17 -71
  31. data/lib/faker/default/invoice.rb +3 -16
  32. data/lib/faker/default/json.rb +2 -20
  33. data/lib/faker/default/lorem.rb +9 -66
  34. data/lib/faker/default/lorem_flickr.rb +4 -32
  35. data/lib/faker/default/lorem_pixel.rb +4 -10
  36. data/lib/faker/default/markdown.rb +4 -9
  37. data/lib/faker/default/measurement.rb +8 -40
  38. data/lib/faker/default/name.rb +1 -5
  39. data/lib/faker/default/nhs.rb +2 -6
  40. data/lib/faker/default/number.rb +10 -55
  41. data/lib/faker/default/omniauth.rb +5 -39
  42. data/lib/faker/default/phone_number.rb +1 -5
  43. data/lib/faker/default/placeholdit.rb +1 -12
  44. data/lib/faker/default/relationship.rb +1 -5
  45. data/lib/faker/default/source.rb +3 -16
  46. data/lib/faker/default/string.rb +1 -5
  47. data/lib/faker/default/stripe.rb +4 -20
  48. data/lib/faker/default/time.rb +4 -32
  49. data/lib/faker/default/twitter.rb +3 -17
  50. data/lib/faker/default/types.rb +5 -27
  51. data/lib/faker/default/vehicle.rb +21 -21
  52. data/lib/faker/default/vulnerability_identifier.rb +23 -0
  53. data/lib/faker/default/world_cup.rb +2 -11
  54. data/lib/faker/games/dota.rb +1 -5
  55. data/lib/faker/games/tarkov.rb +205 -0
  56. data/lib/faker/japanese_media/kamen_rider.rb +2 -2
  57. data/lib/faker/japanese_media/one_piece.rb +1 -1
  58. data/lib/faker/movies/hackers.rb +48 -0
  59. data/lib/faker/movies/star_wars.rb +1 -5
  60. data/lib/faker/sports/sport.rb +110 -0
  61. data/lib/faker/version.rb +1 -1
  62. data/lib/faker.rb +15 -63
  63. data/lib/helpers/base58.rb +1 -1
  64. data/lib/helpers/unique_generator.rb +13 -11
  65. data/lib/locales/en/computer.yml +23 -4
  66. data/lib/locales/en/file.yml +9 -1
  67. data/lib/locales/en/finance.yml +3 -1
  68. data/lib/locales/en/hackers.yml +53 -0
  69. data/lib/locales/en/heroes.yml +2 -2
  70. data/lib/locales/en/one_piece.yml +1 -1
  71. data/lib/locales/en/opera.yml +1 -1
  72. data/lib/locales/en/overwatch.yml +5 -7
  73. data/lib/locales/en/source.yml +5 -0
  74. data/lib/locales/en/sport.yml +130 -0
  75. data/lib/locales/en/tarkov.yml +593 -0
  76. data/lib/locales/en/vehicle.yml +2809 -75
  77. data/lib/locales/en-CA.yml +1 -0
  78. data/lib/locales/es-AR.yml +2 -2
  79. data/lib/locales/fi-FI.yml +2 -1
  80. data/lib/locales/fr/ancient.yml +141 -0
  81. data/lib/locales/hy.yml +1 -1
  82. data/lib/locales/th.yml +76 -76
  83. metadata +50 -19
@@ -0,0 +1,205 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Games
5
+ class Tarkov < Base
6
+ class << self
7
+ ##
8
+ # Produces a random location from Escape from Tarkov.
9
+ #
10
+ # @return [String]
11
+ #
12
+ # @example
13
+ # Faker::Games::Tarkov.location #=> "Customs"
14
+ #
15
+ # @faker.version next
16
+ def location
17
+ fetch('tarkov.locations')
18
+ end
19
+
20
+ ##
21
+ # Produces a random trader from Escape from Tarkov.
22
+ #
23
+ # @return [String]
24
+ #
25
+ # @example
26
+ # Faker::Games::Tarkov.trader #=> "Prapor"
27
+ #
28
+ # @faker.version next
29
+ def trader
30
+ fetch('tarkov.traders')
31
+ end
32
+
33
+ ##
34
+ # Produces a random item from Escape from Tarkov.
35
+ #
36
+ # @return [String]
37
+ #
38
+ # @example
39
+ # Faker::Games::Tarkov.item #=> "Diary"
40
+ #
41
+ # @faker.version next
42
+ def item
43
+ fetch('tarkov.items')
44
+ end
45
+
46
+ ##
47
+ # Produces a random weapon from Escape from Tarkov.
48
+ #
49
+ # @return [String]
50
+ #
51
+ # @example
52
+ # Faker::Games::Tarkov.weapon #=> "AK-74N"
53
+ #
54
+ # @faker.version next
55
+ def weapon
56
+ fetch('tarkov.weapons')
57
+ end
58
+
59
+ ##
60
+ # Produces a random boss from Escape from Tarkov.
61
+ #
62
+ # @return [String]
63
+ #
64
+ # @example
65
+ # Faker::Games::Tarkov.boss #=> "Tagilla"
66
+ #
67
+ # @faker.version next
68
+ def boss
69
+ fetch('tarkov.bosses')
70
+ end
71
+
72
+ ##
73
+ # Produces a random faction from Escape from Tarkov.
74
+ #
75
+ # @return [String]
76
+ #
77
+ # @example
78
+ # Faker::Games::Tarkov.faction #=> "USEC"
79
+ #
80
+ # @faker.version next
81
+ def faction
82
+ fetch('tarkov.factions')
83
+ end
84
+
85
+ ##
86
+ # Produces a random quest from a random trader from Escape from Tarkov.
87
+ #
88
+ # @return [String]
89
+ #
90
+ # @example
91
+ # Faker::Games::Tarkov.quest #=> "The Key to Success"
92
+ #
93
+ # @faker.version next
94
+ def quest
95
+ @traders = %w[prapor therapist skier peacekeeper mechanic ragman jaeger fence]
96
+ fetch("tarkov.quests.#{@traders.sample}")
97
+ end
98
+
99
+ ##
100
+ # Produces a random quest from Prapor from Escape from Tarkov.
101
+ #
102
+ # @return [String]
103
+ #
104
+ # @example
105
+ # Faker::Games::Tarkov.prapor_quest #=> "Easy Job - Part 2
106
+ #
107
+ # @faker.version next
108
+ def prapor_quest
109
+ fetch('tarkov.quests.prapor')
110
+ end
111
+
112
+ ##
113
+ # Produces a random quest from Therapist from Escape from Tarkov.
114
+ #
115
+ # @return [String]
116
+ #
117
+ # @example
118
+ # Faker::Games::Tarkov.therapist_quest #=> "Supply Plans"
119
+ #
120
+ # @faker.version next
121
+ def therapist_quest
122
+ fetch('tarkov.quests.therapist')
123
+ end
124
+
125
+ ##
126
+ # Produces a random quest from Skier from Escape from Tarkov.
127
+ #
128
+ # @return [String]
129
+ #
130
+ # @example
131
+ # Faker::Games::Tarkov.skier_quest #=> "Safe Corridor"
132
+ #
133
+ # @faker.version next
134
+ def skier_quest
135
+ fetch('tarkov.quests.skier')
136
+ end
137
+
138
+ ##
139
+ # Produces a random quest from Peacekeeper from Escape from Tarkov.
140
+ #
141
+ # @return [String]
142
+ #
143
+ # @example
144
+ # Faker::Games::Tarkov.peacekeeper_quest #=> "Overpopulation"
145
+ #
146
+ # @faker.version next
147
+ def peacekeeper_quest
148
+ fetch('tarkov.quests.peacekeeper')
149
+ end
150
+
151
+ ##
152
+ # Produces a random quest from Mechanic from Escape from Tarkov.
153
+ #
154
+ # @return [String]
155
+ #
156
+ # @example
157
+ # Faker::Games::Tarkov.mechanic_quest #=> "Signal - Part 4"
158
+ #
159
+ # @faker.version next
160
+ def mechanic_quest
161
+ fetch('tarkov.quests.mechanic')
162
+ end
163
+
164
+ ##
165
+ # Produces a random quest from Ragman from Escape from Tarkov.
166
+ #
167
+ # @return [String]
168
+ #
169
+ # @example
170
+ # Faker::Games::Tarkov.ragman_quest #=> "Hot Delivery"
171
+ #
172
+ # @faker.version next
173
+ def ragman_quest
174
+ fetch('tarkov.quests.ragman')
175
+ end
176
+
177
+ ##
178
+ # Produces a random quest from Jaeger from Escape from Tarkov.
179
+ #
180
+ # @return [String]
181
+ #
182
+ # @example
183
+ # Faker::Games::Tarkov.jaeger_quest #=> "The Tarkov Shooter - Part 1"
184
+ #
185
+ # @faker.version next
186
+ def jaeger_quest
187
+ fetch('tarkov.quests.jaeger')
188
+ end
189
+
190
+ ##
191
+ # Produces a random quest from Fence from Escape from Tarkov.
192
+ #
193
+ # @return [String]
194
+ #
195
+ # @example
196
+ # Faker::Games::Tarkov.fence_quest #=> "Compensation for Damage - Wager"
197
+ #
198
+ # @faker.version next
199
+ def fence_quest
200
+ fetch('tarkov.quests.fence')
201
+ end
202
+ end
203
+ end
204
+ end
205
+ end
@@ -83,14 +83,14 @@ module Faker
83
83
  end
84
84
 
85
85
  def from_eras(*input_eras, field:)
86
- selected_eras = (ERAS & input_eras).yield_self do |selected|
86
+ selected_eras = (ERAS & input_eras).then do |selected|
87
87
  selected.empty? ? eras : selected
88
88
  end.dup
89
89
  yield(selected_eras) if block_given?
90
90
 
91
91
  raise UnavailableInEra, "#{field} is unavailable in the selected eras." if selected_eras.empty?
92
92
 
93
- selected_eras.sample.yield_self do |era|
93
+ selected_eras.sample.then do |era|
94
94
  fetch("kamen_rider.#{era}.#{field}")
95
95
  end
96
96
  end
@@ -79,7 +79,7 @@ module Faker
79
79
  #
80
80
  # @faker.version 1.8.5
81
81
  def akuma_no_mi
82
- fetch('one_piece.akumas_no_mi')
82
+ fetch('one_piece.akuma_no_mi')
83
83
  end
84
84
  end
85
85
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Movies
5
+ class Hackers < Base
6
+ class << self
7
+ ##
8
+ # Produces a real character name from Hackers.
9
+ #
10
+ # @return [String]
11
+ #
12
+ # @example
13
+ # Faker::Movies::Hackers.character #=> "Dade Murphy"
14
+ #
15
+ # @faker.version next
16
+ def character
17
+ fetch('hackers.characters')
18
+ end
19
+
20
+ ##
21
+ # Produces a character hacker "handle" from Hackers.
22
+ #
23
+ # @return [String]
24
+ #
25
+ # @example
26
+ # Faker::Movies::Hackers.handle #=> "Zero Cool"
27
+ #
28
+ # @faker.version next
29
+ def handle
30
+ fetch('hackers.handles')
31
+ end
32
+
33
+ ##
34
+ # Produces a quote from Hackers.
35
+ #
36
+ # @return [String]
37
+ #
38
+ # @example
39
+ # Faker::Movies::Hackers.quote #=> "Hack the Planet!"
40
+ #
41
+ # @faker.version next
42
+ def quote
43
+ fetch('hackers.quotes')
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -138,11 +138,7 @@ module Faker
138
138
  # #=> "Aren't you a little short for a Stormtrooper?"
139
139
  #
140
140
  # @faker.version 1.6.2
141
- def quote(legacy_character = NOT_GIVEN, character: nil)
142
- warn_for_deprecated_arguments do |keywords|
143
- keywords << :character if legacy_character != NOT_GIVEN
144
- end
145
-
141
+ def quote(character: nil)
146
142
  quoted_characters = translate('faker.star_wars.quotes')
147
143
 
148
144
  if character.nil?
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Sport < Base
5
+ class << self
6
+ ##
7
+ # Produces a sport from the modern olympics or paralympics, summer or winter.
8
+ #
9
+ # @param include_ancient [Boolean] If true, may produce a sport from the ancient olympics
10
+ # @param include_unusual [Boolean] If true, may produce an unusual (definitely not olympic) sport
11
+ #
12
+ # @return [String]
13
+ #
14
+ # @example
15
+ # Faker::Sport.sport #=> "Football"
16
+ # @example
17
+ # Faker::Sport.sport(include_ancient: true) #=> "Chariot racing"
18
+ # @example
19
+ # Faker::Sport.sport(include_unsual: true) #=> "Flugtag/Birdman"
20
+ # @example
21
+ # Faker::Sport.sport(include_ancient:true, include_unusual: true) #=> "Water polo"
22
+ #
23
+ # @faker.version next
24
+ def sport(include_ancient: false, include_unusual: false)
25
+ sports = fetch_all('sport.summer_olympics') + fetch_all('sport.winter_olympics') + fetch_all('sport.summer_paralympics') + fetch_all('sport.winter_paralympics')
26
+ sports << fetch_all('sport.ancient_olympics') if include_ancient
27
+ sports << fetch_all('sport.unusual') if include_unusual
28
+ sample(sports)
29
+ end
30
+
31
+ ##
32
+ # Produces a sport from the summer olympics.
33
+ #
34
+ # @return [String]
35
+ #
36
+ # @example
37
+ # Faker::Sport.summer_olympics_sport #=> "Archery"
38
+ #
39
+ # @faker.version next
40
+ def summer_olympics_sport
41
+ fetch('sport.summer_olympics')
42
+ end
43
+
44
+ ##
45
+ # Produces a sport from the winter olympics.
46
+ #
47
+ # @return [String]
48
+ #
49
+ # @example
50
+ # Faker::Sport.winter_olympics_sport #=> "Bobsleigh"
51
+ #
52
+ # @faker.version next
53
+ def winter_olympics_sport
54
+ fetch('sport.winter_olympics')
55
+ end
56
+
57
+ ##
58
+ # Produces a sport from the summer paralympics.
59
+ #
60
+ # @return [String]
61
+ #
62
+ # @example
63
+ # Faker::Sport.summer_paralympics_sport #=> "Wheelchair Basketball"
64
+ #
65
+ # @faker.version next
66
+ def summer_paralympics_sport
67
+ fetch('sport.summer_paralympics')
68
+ end
69
+
70
+ ##
71
+ # Produces a sport from the winter paralympics.
72
+ #
73
+ # @return [String]
74
+ #
75
+ # @example
76
+ # Faker::Sport.winter_paralympics_sport #=> "Para Ice Hockey"
77
+ #
78
+ # @faker.version next
79
+ def winter_paralympics_sport
80
+ fetch('sport.winter_paralympics')
81
+ end
82
+
83
+ ##
84
+ # Produces an unusual sport.
85
+ #
86
+ # @return [String]
87
+ #
88
+ # @example
89
+ # Faker::Sport.unusual_sport #=> "Camel Jumping"
90
+ #
91
+ # @faker.version next
92
+ def unusual_sport
93
+ fetch('sport.unusual')
94
+ end
95
+
96
+ ##
97
+ # Produces a sport from the ancient olympics.
98
+ #
99
+ # @return [String]
100
+ #
101
+ # @example
102
+ # Faker::Sport.ancient_olympics_sport #=> "Pankration"
103
+ #
104
+ # @faker.version next
105
+ def ancient_olympics_sport
106
+ fetch('sport.ancient_olympics')
107
+ end
108
+ end
109
+ end
110
+ 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 = '2.22.0'
4
+ VERSION = '3.0.0'
5
5
  end
data/lib/faker.rb CHANGED
@@ -4,7 +4,6 @@ mydir = __dir__
4
4
 
5
5
  require 'psych'
6
6
  require 'i18n'
7
- require 'set' # Fixes a bug in i18n 0.6.11
8
7
 
9
8
  Dir.glob(File.join(mydir, 'helpers', '*.rb')).sort.each { |file| require file }
10
9
 
@@ -13,23 +12,26 @@ I18n.reload! if I18n.backend.initialized?
13
12
 
14
13
  module Faker
15
14
  module Config
16
- @locale = nil
17
- @random = nil
18
-
19
15
  class << self
20
- attr_writer :locale, :random
16
+ def locale=(new_locale)
17
+ Thread.current[:faker_config_locale] = new_locale
18
+ end
21
19
 
22
20
  def locale
23
21
  # Because I18n.locale defaults to :en, if we don't have :en in our available_locales, errors will happen
24
- @locale || (I18n.available_locales.include?(I18n.locale) ? I18n.locale : I18n.available_locales.first)
22
+ Thread.current[:faker_config_locale] || (I18n.available_locales.include?(I18n.locale) ? I18n.locale : I18n.available_locales.first)
25
23
  end
26
24
 
27
25
  def own_locale
28
- @locale
26
+ Thread.current[:faker_config_locale]
27
+ end
28
+
29
+ def random=(new_random)
30
+ Thread.current[:faker_config_random] = new_random
29
31
  end
30
32
 
31
33
  def random
32
- @random || Random
34
+ Thread.current[:faker_config_random] || Random
33
35
  end
34
36
  end
35
37
  end
@@ -41,6 +43,8 @@ module Faker
41
43
  Letters = ULetters + LLetters
42
44
 
43
45
  class << self
46
+ attr_reader :flexible_key
47
+
44
48
  NOT_GIVEN = Object.new
45
49
 
46
50
  ## by default numerify results do not start with a zero
@@ -87,7 +91,7 @@ module Faker
87
91
  .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
88
92
  .gsub(/\((.*?)\)/) { |match| sample(match.gsub(/[()]/, '').split('|')) } # (this|that) becomes 'this' or 'that'
89
93
  .gsub(/\[([^\]]+)\]/) { |match| match.gsub(/(\w-\w)/) { |range| sample(Array(Range.new(*range.split('-')))) } } # All A-Z inside of [] become C (or X, or whatever)
90
- .gsub(/\[([^\]]+)\]/) { |_match| sample(Regexp.last_match(1).split('')) } # All [ABC] become B (or A or C)
94
+ .gsub(/\[([^\]]+)\]/) { |_match| sample(Regexp.last_match(1).chars) } # All [ABC] become B (or A or C)
91
95
  .gsub('\d') { |_match| sample(Numbers) }
92
96
  .gsub('\w') { |_match| sample(Letters) }
93
97
  end
@@ -185,9 +189,9 @@ module Faker
185
189
  # girls_name: ["Alice", "Cheryl", "Tatiana"]
186
190
  # Then you can call Faker::Name.girls_name and it will act like #first_name
187
191
  def method_missing(mth, *args, &block)
188
- super unless @flexible_key
192
+ super unless flexible_key
189
193
 
190
- if (translation = translate("faker.#{@flexible_key}.#{mth}"))
194
+ if (translation = translate("faker.#{flexible_key}.#{mth}"))
191
195
  sample(translation)
192
196
  else
193
197
  super
@@ -255,58 +259,6 @@ module Faker
255
259
  ensure
256
260
  I18n.enforce_available_locales = old_enforce_available_locales
257
261
  end
258
-
259
- private
260
-
261
- def warn_for_deprecated_arguments
262
- keywords = []
263
- yield(keywords)
264
-
265
- return if keywords.empty?
266
-
267
- method_name = caller.first.match(/`(?<method_name>.*)'/)[:method_name]
268
-
269
- keywords.each.with_index(1) do |keyword, index|
270
- i = case index
271
- when 1 then '1st'
272
- when 2 then '2nd'
273
- when 3 then '3rd'
274
- else "#{index}th"
275
- end
276
-
277
- warn_with_uplevel(<<~MSG, uplevel: 5)
278
- Passing `#{keyword}` with the #{i} argument of `#{method_name}` is deprecated. Use keyword argument like `#{method_name}(#{keyword}: ...)` instead.
279
- MSG
280
- end
281
-
282
- warn(<<~MSG)
283
-
284
- To automatically update from positional arguments to keyword arguments,
285
- install rubocop-faker and run:
286
-
287
- rubocop \\
288
- --require rubocop-faker \\
289
- --only Faker/DeprecatedArguments \\
290
- --auto-correct
291
-
292
- MSG
293
- end
294
-
295
- # Workaround for emulating `warn '...', uplevel: 1` in Ruby 2.4 or lower.
296
- def warn_with_uplevel(message, uplevel: 1)
297
- at = parse_caller(caller[uplevel]).join(':')
298
- warn "#{at}: #{message}"
299
- end
300
-
301
- def parse_caller(at)
302
- # rubocop:disable Style/GuardClause
303
- if /^(.+?):(\d+)(?::in `.*')?/ =~ at
304
- file = Regexp.last_match(1)
305
- line = Regexp.last_match(2).to_i
306
- [file, line]
307
- end
308
- # rubocop:enable Style/GuardClause
309
- end
310
262
  end
311
263
  end
312
264
  end
@@ -7,7 +7,7 @@ module Faker
7
7
  base = alphabet.size
8
8
 
9
9
  lv = 0
10
- str.split('').reverse.each_with_index { |v, i| lv += v.unpack1('C') * 256**i }
10
+ str.chars.reverse.each_with_index { |v, i| lv += v.unpack1('C') * 256**i }
11
11
 
12
12
  ret = +''
13
13
  while lv.positive?
@@ -2,16 +2,9 @@
2
2
 
3
3
  module Faker
4
4
  class UniqueGenerator
5
- @marked_unique = Set.new # Holds names of generators with unique values
6
-
7
- class << self
8
- attr_reader :marked_unique
9
- end
10
-
11
5
  def initialize(generator, max_retries)
12
6
  @generator = generator
13
7
  @max_retries = max_retries
14
- @previous_results = Hash.new { |hash, key| hash[key] = Set.new }
15
8
  end
16
9
 
17
10
  def method_missing(name, *arguments)
@@ -20,9 +13,9 @@ module Faker
20
13
  @max_retries.times do
21
14
  result = @generator.public_send(name, *arguments)
22
15
 
23
- next if @previous_results[[name, arguments]].include?(result)
16
+ next if previous_results[[name, arguments]].include?(result)
24
17
 
25
- @previous_results[[name, arguments]] << result
18
+ previous_results[[name, arguments]] << result
26
19
  return result
27
20
  end
28
21
 
@@ -39,8 +32,17 @@ module Faker
39
32
 
40
33
  RetryLimitExceeded = Class.new(StandardError)
41
34
 
35
+ def previous_results
36
+ Thread.current[:faker_unique_generator_previous_results] ||= {}
37
+ Thread.current[:faker_unique_generator_previous_results][@generator] ||= Hash.new { |hash, key| hash[key] = Set.new }
38
+ end
39
+
42
40
  def clear
43
- @previous_results.clear
41
+ previous_results.clear
42
+ end
43
+
44
+ def self.marked_unique
45
+ Thread.current[:faker_unique_generator_marked_unique] ||= Set.new
44
46
  end
45
47
 
46
48
  def self.clear
@@ -51,7 +53,7 @@ module Faker
51
53
  def exclude(name, arguments, values)
52
54
  values ||= []
53
55
  values.each do |value|
54
- @previous_results[[name, arguments]] << value
56
+ previous_results[[name, arguments]] << value
55
57
  end
56
58
  end
57
59
  end
@@ -4,30 +4,49 @@ en:
4
4
  type:
5
5
  - server
6
6
  - workstation
7
- platform:
7
+ platform:
8
8
  - Linux
9
9
  - macOS
10
10
  - Windows
11
+ - OpenBSD
12
+ - TempleOS
13
+ - Plan 9
11
14
  os:
12
15
  linux:
13
- - RHEL 6.10
16
+ - RHEL 9.0
14
17
  - RHEL 7.7
15
- - CentOS 8
18
+ - RHEL 6.10
19
+ - CentOS 8.5
16
20
  - CentOS 7
17
21
  - CentOS 6
22
+ - Debian 11.4.0
18
23
  - Debian 10.10.3
19
24
  - Debian 9.9.10
20
- - Ubuntu Server 18.04
25
+ - Ubuntu Server 22.04
26
+ - Ubuntu Server 20.04
21
27
  - Ubuntu Server 19.10
28
+ - Ubuntu Server 18.04
29
+ - ArchLinux 2022.08.05
22
30
  - ArchLinux 2020.02.01
31
+ - openSUSE Leap 15.4
23
32
  - openSUSE Leap 15.1
33
+ - Ubuntu Desktop 22.04
34
+ - Ubuntu Desktop 20.04
24
35
  - Ubuntu Desktop 18.04
25
36
  - Ubuntu Desktop 19.10
37
+ openbsd:
38
+ - OpenBSD 7.1
39
+ - OpenBSD 6
40
+ templeos:
41
+ - TempleOS 5.03
42
+ plan 9:
43
+ - Plan 9 Fourth Edition
26
44
  macos:
27
45
  - Catalina (10.15)
28
46
  - Mojave (10.14)
29
47
  - High Sierra (10.13)
30
48
  windows:
49
+ - Windows 11
31
50
  - Windows 10
32
51
  - Windows 8.1
33
52
  - Windows 7
@@ -2,4 +2,12 @@ en:
2
2
  faker:
3
3
  file:
4
4
  extension: ["flac", "mp3", "wav", "bmp", "gif", "jpeg", "jpg", "png", "tiff", "css", "csv", "html", "js", "json", "txt", "mp4", "avi", "mov", "webm", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "odt", "ods", "odp", "pages", "numbers", "key", "pdf"]
5
- mime_type: ["application/atom+xml", "application/ecmascript", "application/EDI-X12", "application/EDIFACT", "application/json", "application/javascript", "application/ogg", "application/pdf", "application/postscript", "application/rdf+xml", "application/rss+xml", "application/soap+xml", "application/font-woff", "application/xhtml+xml", "application/xml-dtd", "application/xop+xml", "application/zip", "application/gzip", "audio/basic", "audio/L24", "audio/mp4", "audio/mpeg", "audio/ogg", "audio/vorbis", "audio/vnd.rn-realaudio", "audio/vnd.wave", "audio/webm", "image/gif", "image/jpeg", "image/pjpeg", "image/png", "image/svg+xml", "image/tiff", "image/vnd.microsoft.icon", "message/http", "message/imdn+xml", "message/partial", "message/rfc822", "model/example", "model/iges", "model/mesh", "model/vrml", "model/x3d+binary", "model/x3d+vrml", "model/x3d+xml", "multipart/mixed", "multipart/alternative", "multipart/related", "multipart/form-data", "multipart/signed", "multipart/encrypted", "text/cmd", "text/css", "text/csv", "text/html", "text/javascript", "text/plain", "text/vcard", "text/xml", "video/mpeg", "video/mp4", "video/ogg", "video/quicktime", "video/webm", "video/x-matroska", "video/x-ms-wmv", "video/x-flv"]
5
+ mime_type:
6
+ application: ["application/atom+xml", "application/ecmascript", "application/EDI-X12", "application/EDIFACT", "application/json", "application/javascript", "application/ogg", "application/pdf", "application/postscript", "application/rdf+xml", "application/rss+xml", "application/soap+xml", "application/font-woff", "application/xhtml+xml", "application/xml-dtd", "application/xop+xml", "application/zip", "application/gzip"]
7
+ audio: ["audio/basic", "audio/L24", "audio/mp4", "audio/mpeg", "audio/ogg", "audio/vorbis", "audio/vnd.rn-realaudio", "audio/vnd.wave", "audio/webm"]
8
+ image: ["image/gif", "image/jpeg", "image/pjpeg", "image/png", "image/svg+xml", "image/tiff", "image/vnd.microsoft.icon"]
9
+ message: ["message/http", "message/imdn+xml", "message/partial", "message/rfc822"]
10
+ model: ["model/example", "model/iges", "model/mesh", "model/vrml", "model/x3d+binary", "model/x3d+vrml", "model/x3d+xml"]
11
+ multipart: ["multipart/mixed", "multipart/alternative", "multipart/related", "multipart/form-data", "multipart/signed", "multipart/encrypted"]
12
+ text: ["text/cmd", "text/css", "text/csv", "text/html", "text/javascript", "text/plain", "text/vcard", "text/xml"]
13
+ video: ["video/mpeg", "video/mp4", "video/ogg", "video/quicktime", "video/webm", "video/x-matroska", "video/x-ms-wmv", "video/x-flv"]