faker 2.10.0 → 2.13.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 (132) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +265 -0
  3. data/README.md +14 -2
  4. data/lib/faker.rb +20 -10
  5. data/lib/faker/default/address.rb +31 -1
  6. data/lib/faker/default/bank.rb +79 -0
  7. data/lib/faker/default/blood.rb +48 -0
  8. data/lib/faker/default/business.rb +1 -1
  9. data/lib/faker/default/cannabis.rb +80 -0
  10. data/lib/faker/default/chile_rut.rb +44 -1
  11. data/lib/faker/default/commerce.rb +73 -10
  12. data/lib/faker/default/company.rb +276 -7
  13. data/lib/faker/default/compass.rb +135 -0
  14. data/lib/faker/default/computer.rb +63 -0
  15. data/lib/faker/default/construction.rb +54 -0
  16. data/lib/faker/default/cosmere.rb +90 -0
  17. data/lib/faker/default/crypto_coin.rb +45 -0
  18. data/lib/faker/default/date.rb +16 -12
  19. data/lib/faker/default/dc_comics.rb +45 -0
  20. data/lib/faker/default/driving_licence.rb +42 -0
  21. data/lib/faker/default/file.rb +51 -2
  22. data/lib/faker/default/finance.rb +24 -0
  23. data/lib/faker/default/funny_name.rb +45 -0
  24. data/lib/faker/default/gender.rb +1 -1
  25. data/lib/faker/default/hipster.rb +94 -0
  26. data/lib/faker/default/id_number.rb +86 -0
  27. data/lib/faker/default/internet.rb +64 -7
  28. data/lib/faker/default/internet_http.rb +48 -0
  29. data/lib/faker/default/invoice.rb +32 -5
  30. data/lib/faker/default/json.rb +55 -0
  31. data/lib/faker/default/lorem.rb +1 -1
  32. data/lib/faker/default/lorem_flickr.rb +65 -0
  33. data/lib/faker/default/lorem_pixel.rb +22 -0
  34. data/lib/faker/default/markdown.rb +89 -0
  35. data/lib/faker/default/measurement.rb +90 -0
  36. data/lib/faker/default/name.rb +98 -0
  37. data/lib/faker/default/nhs.rb +19 -0
  38. data/lib/faker/default/number.rb +5 -7
  39. data/lib/faker/default/omniauth.rb +105 -52
  40. data/lib/faker/default/phone_number.rb +88 -5
  41. data/lib/faker/default/placeholdit.rb +21 -0
  42. data/lib/faker/default/slack_emoji.rb +81 -0
  43. data/lib/faker/default/south_africa.rb +90 -0
  44. data/lib/faker/default/string.rb +19 -3
  45. data/lib/faker/default/stripe.rb +61 -0
  46. data/lib/faker/default/twitter.rb +35 -0
  47. data/lib/faker/default/types.rb +80 -0
  48. data/lib/faker/default/university.rb +45 -0
  49. data/lib/faker/default/vehicle.rb +184 -4
  50. data/lib/faker/default/verb.rb +45 -0
  51. data/lib/faker/default/world_cup.rb +4 -4
  52. data/lib/faker/games/control.rb +113 -0
  53. data/lib/faker/games/dnd.rb +61 -0
  54. data/lib/faker/games/heroes_of_the_storm.rb +16 -5
  55. data/lib/faker/games/minecraft.rb +48 -0
  56. data/lib/faker/games/warhammer_fantasy.rb +74 -0
  57. data/lib/faker/movies/departed.rb +49 -0
  58. data/lib/faker/movies/movie.rb +13 -0
  59. data/lib/faker/music/pearl_jam.rb +50 -0
  60. data/lib/faker/music/phish.rb +27 -1
  61. data/lib/faker/music/prince.rb +64 -0
  62. data/lib/faker/music/rush.rb +37 -0
  63. data/lib/faker/music/show.rb +49 -0
  64. data/lib/faker/quotes/chiquito.rb +80 -0
  65. data/lib/faker/quotes/quote.rb +54 -1
  66. data/lib/faker/quotes/rajnikanth.rb +26 -0
  67. data/lib/faker/quotes/shakespeare.rb +36 -0
  68. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +13 -0
  69. data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
  70. data/lib/faker/tv_shows/dr_who.rb +1 -1
  71. data/lib/faker/tv_shows/futurama.rb +65 -0
  72. data/lib/faker/tv_shows/simpsons.rb +14 -0
  73. data/lib/faker/tv_shows/suits.rb +37 -0
  74. data/lib/faker/version.rb +1 -1
  75. data/lib/helpers/base58.rb +1 -1
  76. data/lib/helpers/char.rb +22 -27
  77. data/lib/helpers/unique_generator.rb +4 -0
  78. data/lib/locales/bg.yml +2 -2
  79. data/lib/locales/ca.yml +0 -8
  80. data/lib/locales/da-DK.yml +3 -3
  81. data/lib/locales/de-CH.yml +1693 -0
  82. data/lib/locales/en-AU.yml +44 -10
  83. data/lib/locales/en-CA.yml +2 -0
  84. data/lib/locales/en-GB.yml +1 -1
  85. data/lib/locales/en-NEP.yml +1 -1
  86. data/lib/locales/en-NZ.yml +2 -0
  87. data/lib/locales/en-US.yml +29 -3
  88. data/lib/locales/en-ZA.yml +1 -1
  89. data/lib/locales/en/address.yml +2 -0
  90. data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
  91. data/lib/locales/en/bank.yml +1 -1
  92. data/lib/locales/en/big_bang_theory.yml +38 -0
  93. data/lib/locales/en/blood.yml +13 -0
  94. data/lib/locales/en/chiquito.yml +64 -0
  95. data/lib/locales/en/color.yml +1 -1
  96. data/lib/locales/en/computer.yml +36 -0
  97. data/lib/locales/en/control.yml +247 -0
  98. data/lib/locales/en/departed.yml +50 -0
  99. data/lib/locales/en/dnd.yml +54 -0
  100. data/lib/locales/en/futurama.yml +344 -0
  101. data/lib/locales/en/heroes_of_the_storm.yml +2 -2
  102. data/lib/locales/en/house.yml +1 -1
  103. data/lib/locales/en/minecraft.yml +390 -0
  104. data/lib/locales/en/movie.yml +192 -1
  105. data/lib/locales/en/name.yml +4 -3
  106. data/lib/locales/en/one_piece.yml +2 -2
  107. data/lib/locales/en/pearl_jam.yml +213 -0
  108. data/lib/locales/en/phish.yml +392 -1
  109. data/lib/locales/en/prince.yml +227 -0
  110. data/lib/locales/en/rajnikanth.yml +77 -0
  111. data/lib/locales/en/rush.yml +32 -0
  112. data/lib/locales/en/shakespeare.yml +3 -3
  113. data/lib/locales/en/show.yml +597 -0
  114. data/lib/locales/en/simpsons.yml +668 -0
  115. data/lib/locales/en/star_wars.yml +568 -220
  116. data/lib/locales/en/stripe.yml +3 -3
  117. data/lib/locales/en/suits.yml +45 -0
  118. data/lib/locales/en/warhammer_fantasy.yml +582 -0
  119. data/lib/locales/es-MX.yml +3 -0
  120. data/lib/locales/fr-CA.yml +7 -4
  121. data/lib/locales/fr-CH.yml +1 -1
  122. data/lib/locales/fr.yml +5 -4
  123. data/lib/locales/hy.yml +1 -6
  124. data/lib/locales/id.yml +2 -1
  125. data/lib/locales/ja.yml +1 -1
  126. data/lib/locales/ko.yml +82 -0
  127. data/lib/locales/pt-BR.yml +1 -0
  128. data/lib/locales/pt.yml +2 -2
  129. data/lib/locales/uk.yml +5 -5
  130. data/lib/locales/zh-CN.yml +1 -1
  131. data/lib/locales/zh-TW.yml +1 -1
  132. metadata +52 -19
@@ -5,6 +5,17 @@ module Faker
5
5
  flexible :bank
6
6
 
7
7
  class << self
8
+ ##
9
+ # Produces a bank account number.
10
+ #
11
+ # @param digits [Integer] Number of digits that the generated account number should have.
12
+ # @return [String]
13
+ #
14
+ # @example
15
+ # Faker::Bank.account_number #=> 6738582379
16
+ # Faker::Bank.account_number(digits: 13) #=> 673858237902
17
+ #
18
+ # @faker.version 1.9.1
8
19
  def account_number(legacy_digits = NOT_GIVEN, digits: 10)
9
20
  warn_for_deprecated_arguments do |keywords|
10
21
  keywords << :digits if legacy_digits != NOT_GIVEN
@@ -17,6 +28,17 @@ module Faker
17
28
  output[0...digits]
18
29
  end
19
30
 
31
+ ##
32
+ # Produces a bank iban number.
33
+ #
34
+ # @param country_code [String] Specifies what country prefix is used to generate the iban code.
35
+ # @return [String]
36
+ #
37
+ # @example
38
+ # Faker::Bank.iban #=> "GB76DZJM33188515981979"
39
+ # Faker::Bank.iban(country_code: "be") #=> "BE6375388567752043"
40
+ #
41
+ # @faker.version 1.7.0
20
42
  def iban(legacy_country_code = NOT_GIVEN, country_code: 'GB')
21
43
  # Each country has its own format for bank accounts
22
44
  # Many of them use letters in certain parts of the account
@@ -38,22 +60,72 @@ module Faker
38
60
  country_code.upcase + iban_checksum(country_code, account) + account
39
61
  end
40
62
 
63
+ ##
64
+ # Produces a bank name.
65
+ #
66
+ # @return [String]
67
+ #
68
+ # @example
69
+ # Faker::Bank.name #=> "ABN AMRO CORPORATE FINANCE LIMITED"
70
+ #
71
+ # @faker.version 1.7.0
41
72
  def name
42
73
  fetch('bank.name')
43
74
  end
44
75
 
76
+ ##
77
+ # Produces a routing number.
78
+ #
79
+ # @return [String]
80
+ #
81
+ # @example
82
+ # Faker::Bank.routing_number #=> "729343831"
83
+ #
84
+ # @faker.version 1.9.1
45
85
  def routing_number
46
86
  valid_routing_number
47
87
  end
48
88
 
89
+ ##
90
+ # Produces a valid routing number.
91
+ #
92
+ # @return [String]
93
+ #
94
+ # @example
95
+ # Faker::Bank.routing_number #=> "729343831"
96
+ #
97
+ # @faker.version 1.9.1
49
98
  def routing_number_with_format
50
99
  compile_fraction(valid_routing_number)
51
100
  end
52
101
 
102
+ ##
103
+ # Produces a swift / bic number.
104
+ #
105
+ # @return [String]
106
+ #
107
+ # @example
108
+ # Faker::Bank.swift_bic #=> "AAFMGB21"
109
+ #
110
+ # @faker.version 1.7.0
53
111
  def swift_bic
54
112
  fetch('bank.swift_bic')
55
113
  end
56
114
 
115
+ ##
116
+ # Produces an Australian BSB (Bank-State-Branch) number
117
+ #
118
+ # @return [String]
119
+ #
120
+ # @example
121
+ # Faker::Bank.bsb_number
122
+ # #=> "036616"
123
+ #
124
+ # @faker.version 2.13.0
125
+ def bsb_number
126
+ compile_bsb_number
127
+ end
128
+
57
129
  private
58
130
 
59
131
  def checksum(num_string)
@@ -72,6 +144,13 @@ module Faker
72
144
  routing_num
73
145
  end
74
146
 
147
+ def compile_bsb_number
148
+ digit_one_two = %w[01 03 06 08 11 12 73 76 78 30]
149
+ state = (2..7).to_a.map(&:to_s).sample
150
+ bsb_num = digit_one_two.sample + state + rand_numstring + rand_numstring + rand_numstring
151
+ bsb_num
152
+ end
153
+
75
154
  # Calculates the mandatory checksum in 3rd and 4th characters in IBAN format
76
155
  # source: https://en.wikipedia.org/wiki/International_Bank_Account_Number#Validating_the_IBAN
77
156
  def iban_checksum(country_code, account)
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Blood < Base
5
+ flexible :blood
6
+
7
+ class << self
8
+ ##
9
+ # Produces a random blood type.
10
+ #
11
+ # @return [String]
12
+ #
13
+ # @example
14
+ # Faker::Blood.type #=> "AB"
15
+ #
16
+ # @faker.version 2.13.0
17
+ def type
18
+ fetch('blood.type')
19
+ end
20
+
21
+ ##
22
+ # Produces a random blood RH-Factor.
23
+ #
24
+ # @return [String]
25
+ #
26
+ # @example
27
+ # Faker::Blood.rh_factor #=> "-"
28
+ #
29
+ # @faker.version 2.13.0
30
+ def rh_factor
31
+ fetch('blood.rh_factor')
32
+ end
33
+
34
+ ##
35
+ # Produces a random blood group name.
36
+ #
37
+ # @return [String]
38
+ #
39
+ # @example
40
+ # Faker::Blood.group #=> "AB-"
41
+ #
42
+ # @faker.version 2.13.0
43
+ def group
44
+ parse('blood.group')
45
+ end
46
+ end
47
+ end
48
+ end
@@ -26,7 +26,7 @@ module Faker
26
26
  # @return [Date]
27
27
  #
28
28
  # @example
29
- # Faker::Business.credit_card_number #=> <Date: 2015-11-11 ((2457338j,0s,0n),+0s,2299161j)>
29
+ # Faker::Business.credit_card_expiry_date #=> <Date: 2015-11-11 ((2457338j,0s,0n),+0s,2299161j)>
30
30
  #
31
31
  # @faker.version 1.2.0
32
32
  def credit_card_expiry_date
@@ -2,42 +2,122 @@
2
2
 
3
3
  module Faker
4
4
  class Cannabis < Base
5
+ # Produces a random strain.
6
+ #
7
+ # @return [String]
8
+ #
9
+ # @example
10
+ # Faker::Cannabis.strain #=> "Super Glue"
11
+ #
12
+ # @faker.version 1.9.1
5
13
  def self.strain
6
14
  fetch('cannabis.strains')
7
15
  end
8
16
 
17
+ # Produces a random abbreviation.
18
+ #
19
+ # @return [String]
20
+ #
21
+ # @example
22
+ # Faker::Cannabis.cannabinoid_abbreviation #=> "CBGa"
23
+ #
24
+ # @faker.version 1.9.1
9
25
  def self.cannabinoid_abbreviation
10
26
  fetch('cannabis.cannabinoid_abbreviations')
11
27
  end
12
28
 
29
+ # Produces a random cannabinoid type.
30
+ #
31
+ # @return [String]
32
+ #
33
+ # @example
34
+ # Faker::Cannabis.cannabinoid #=> "Cannabinolic Acid"
35
+ #
36
+ # @faker.version 1.9.1
13
37
  def self.cannabinoid
14
38
  fetch('cannabis.cannabinoids')
15
39
  end
16
40
 
41
+ # Produces a random terpene type.
42
+ #
43
+ # @return [String]
44
+ #
45
+ # @example
46
+ # Faker::Cannabis.terpene #=> "Terpinene"
47
+ #
48
+ # @faker.version 1.9.1
17
49
  def self.terpene
18
50
  fetch('cannabis.terpenes')
19
51
  end
20
52
 
53
+ # Produces a random kind of medical use.
54
+ #
55
+ # @return [String]
56
+ #
57
+ # @example
58
+ # Faker::Cannabis.medical_use #=> "anti-cancer"
59
+ #
60
+ # @faker.version 1.9.1
21
61
  def self.medical_use
22
62
  fetch('cannabis.medical_uses')
23
63
  end
24
64
 
65
+ # Produces a random health benefit.
66
+ #
67
+ # @return [String]
68
+ #
69
+ # @example
70
+ # Faker::Cannabis.health_benefit #=> "prevents infection"
71
+ #
72
+ # @faker.version 1.9.1
25
73
  def self.health_benefit
26
74
  fetch('cannabis.health_benefits')
27
75
  end
28
76
 
77
+ # Produces a random category.
78
+ #
79
+ # @return [String]
80
+ #
81
+ # @example
82
+ # Faker::Cannabis.category #=> "crystalline"
83
+ #
84
+ # @faker.version 1.9.1
29
85
  def self.category
30
86
  fetch('cannabis.categories')
31
87
  end
32
88
 
89
+ # Produces a random type.
90
+ #
91
+ # @return [String]
92
+ #
93
+ # @example
94
+ # Faker::Cannabis.type #=> "indica"
95
+ #
96
+ # @faker.version 1.9.1
33
97
  def self.type
34
98
  fetch('cannabis.types')
35
99
  end
36
100
 
101
+ # Produces a random buzzword.
102
+ #
103
+ # @return [String]
104
+ #
105
+ # @example
106
+ # Faker::Cannabis.buzzword #=> "high"
107
+ #
108
+ # @faker.version 1.9.1
37
109
  def self.buzzword
38
110
  fetch('cannabis.buzzwords')
39
111
  end
40
112
 
113
+ # Produces a random brand.
114
+ #
115
+ # @return [String]
116
+ #
117
+ # @example
118
+ # Faker::Cannabis.brand #=> "Cannavore Confections"
119
+ #
120
+ # @faker.version 1.9.1
41
121
  def self.brand
42
122
  fetch('cannabis.brands')
43
123
  end
@@ -5,7 +5,19 @@ module Faker
5
5
  class << self
6
6
  @last_rut = nil
7
7
 
8
- # Fixed param added for testing a specific RUT and check digit combination.
8
+ ##
9
+ # Produces a random Chilean RUT (Rol Unico Tributario, ID with 8 digits).
10
+ #
11
+ # @param min_rut [Integer] Specifies the minimum value of the rut.
12
+ # @param fixed [Boolean] Determines if the rut is fixed (returns the min_rut value).
13
+ # @return [Number]
14
+ #
15
+ # @example
16
+ # Faker::ChileRut.rut #=> 11235813
17
+ # Faker::ChileRut.rut(min_rut: 20890156) #=> 31853211
18
+ # Faker::ChileRut.rut(min_rut: 20890156, fixed: true) #=> 20890156
19
+ #
20
+ # @faker.version 1.9.2
9
21
  def rut(legacy_min_rut = NOT_GIVEN, legacy_fixed = NOT_GIVEN, min_rut: 1, fixed: false)
10
22
  warn_for_deprecated_arguments do |keywords|
11
23
  keywords << :min_rut if legacy_min_rut != NOT_GIVEN
@@ -15,6 +27,15 @@ module Faker
15
27
  @last_rut = fixed ? min_rut : rand_in_range(min_rut, 99_999_999)
16
28
  end
17
29
 
30
+ ##
31
+ # Produces a random Chilean digito verificador (check-digit).
32
+ #
33
+ # @return [String]
34
+ #
35
+ # @example
36
+ # Faker::ChileRut.dv #=> "k"
37
+ #
38
+ # @faker.version 1.9.2
18
39
  def dv
19
40
  split_reversed_rut = @last_rut.to_s.reverse.split('')
20
41
  seq = [2, 3, 4, 5, 6, 7]
@@ -34,11 +55,33 @@ module Faker
34
55
  end
35
56
  end
36
57
 
58
+ ##
59
+ # Produces a random Chilean digito verificador (check-digit).
37
60
  # Alias for english speaking devs.
61
+ #
62
+ # @return [String]
63
+ #
64
+ # @example
65
+ # Faker::ChileRut.check_digit #=> "5"
66
+ #
67
+ # @faker.version 1.9.2
38
68
  def check_digit
39
69
  dv
40
70
  end
41
71
 
72
+ ##
73
+ # Produces a random Chilean RUT (Rol Unico Tributario, ID with 8 digits) with a dv (digito verificador, check-digit).
74
+ #
75
+ # @param min_rut [Integer] Specifies the minimum value of the rut.
76
+ # @param fixed [Boolean] Determines if the rut is fixed (returns the min_rut value).
77
+ # @return [String]
78
+ #
79
+ # @example
80
+ # Faker::ChileRut.full_rut #=> "30686957-4"
81
+ # Faker::ChileRut.full_rut(min_rut: 20890156) #=> "30686957-4"
82
+ # Faker::ChileRut.full_rut(min_rut: 30686957, fixed: true) #=> "30686957-4"
83
+ #
84
+ # @faker.version 1.9.2
42
85
  def full_rut(legacy_min_rut = NOT_GIVEN, legacy_fixed = NOT_GIVEN, min_rut: 0, fixed: false)
43
86
  warn_for_deprecated_arguments do |keywords|
44
87
  keywords << :min_rut if legacy_min_rut != NOT_GIVEN
@@ -3,10 +3,30 @@
3
3
  module Faker
4
4
  class Commerce < Base
5
5
  class << self
6
+ ##
7
+ # Produces a random color.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::Commerce.color #=> "lavender"
13
+ #
14
+ # @faker.version 1.2.0
6
15
  def color
7
16
  fetch('color.name')
8
17
  end
9
18
 
19
+ ##
20
+ # Produces a random promotion code.
21
+ #
22
+ # @param digits [Integer] Updates the number of numerical digits used to generate the promotion code.
23
+ # @return [String]
24
+ #
25
+ # @example
26
+ # Faker::Commerce.promotion_code #=> "AmazingDeal829102"
27
+ # Faker::Commerce.promotion_code(digits: 2) #=> "AmazingPrice57"
28
+ #
29
+ # @faker.version 1.7.0
10
30
  def promotion_code(legacy_digits = NOT_GIVEN, digits: 6)
11
31
  warn_for_deprecated_arguments do |keywords|
12
32
  keywords << :digits if legacy_digits != NOT_GIVEN
@@ -19,6 +39,19 @@ module Faker
19
39
  ].join
20
40
  end
21
41
 
42
+ ##
43
+ # Produces a random department.
44
+ #
45
+ # @param max [Integer] Updates the maximum number of names used to generate the department name.
46
+ # @param fixed_amount [Boolean] Fixes the amount of departments to use instead of using a range.
47
+ # @return [String]
48
+ #
49
+ # @example
50
+ # Faker::Commerce.department #=> "Grocery, Health & Beauty"
51
+ # Faker::Commerce.department(max: 5) #=> "Grocery, Books, Health & Beauty"
52
+ # Faker::Commerce.department(max: 2, fixed_amount: true) #=> "Books & Tools"
53
+ #
54
+ # @faker.version 1.2.0
22
55
  def department(legacy_max = NOT_GIVEN, legacy_fixed_amount = NOT_GIVEN, max: 3, fixed_amount: false)
23
56
  warn_for_deprecated_arguments do |keywords|
24
57
  keywords << :max if legacy_max != NOT_GIVEN
@@ -30,19 +63,55 @@ module Faker
30
63
 
31
64
  categories = categories(num)
32
65
 
33
- return merge_categories(categories) if num > 1
34
-
35
- categories[0]
66
+ if categories.is_a?(Array)
67
+ if categories.length > 1
68
+ merge_categories(categories)
69
+ else
70
+ categories[0]
71
+ end
72
+ else
73
+ categories
74
+ end
36
75
  end
37
76
 
77
+ ##
78
+ # Produces a random product name.
79
+ #
80
+ # @return [String]
81
+ #
82
+ # @example
83
+ # Faker::Commerce.product_name #=> "Practical Granite Shirt"
84
+ #
85
+ # @faker.version 1.2.0
38
86
  def product_name
39
87
  "#{fetch('commerce.product_name.adjective')} #{fetch('commerce.product_name.material')} #{fetch('commerce.product_name.product')}"
40
88
  end
41
89
 
90
+ ##
91
+ # Produces a random material.
92
+ #
93
+ # @return [String]
94
+ #
95
+ # @example
96
+ # Faker::Commerce.material #=> "Plastic"
97
+ #
98
+ # @faker.version 1.5.0
42
99
  def material
43
100
  fetch('commerce.product_name.material')
44
101
  end
45
102
 
103
+ ##
104
+ # Produces a random product price.
105
+ #
106
+ # @param range [Range] A range to generate the random number within.
107
+ # @param as_string [Boolean] Changes the return value to [String].
108
+ # @return [Float]
109
+ #
110
+ # @example
111
+ # Faker::Commerce.price #=> 44.6
112
+ # Faker::Commerce.price(range: 0..10.0, as_string: true) #=> "2.18"
113
+ #
114
+ # @faker.version 1.2.0
46
115
  def price(legacy_range = NOT_GIVEN, legacy_as_string = NOT_GIVEN, range: 0..100.0, as_string: false)
47
116
  warn_for_deprecated_arguments do |keywords|
48
117
  keywords << :range if legacy_range != NOT_GIVEN
@@ -60,13 +129,7 @@ module Faker
60
129
  private
61
130
 
62
131
  def categories(num)
63
- categories = []
64
- while categories.length < num
65
- category = fetch('commerce.department')
66
- categories << category unless categories.include?(category)
67
- end
68
-
69
- categories
132
+ sample(fetch_all('commerce.department'), num)
70
133
  end
71
134
 
72
135
  def merge_categories(categories)