faker 2.19.0 → 3.2.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 (185) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +346 -7
  3. data/History.md +1 -1
  4. data/README.md +198 -104
  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/books/the_kingkiller_chronicle.rb +61 -0
  11. data/lib/faker/default/address.rb +5 -25
  12. data/lib/faker/default/alphanumeric.rb +2 -8
  13. data/lib/faker/default/app.rb +1 -10
  14. data/lib/faker/default/avatar.rb +1 -12
  15. data/lib/faker/default/bank.rb +9 -17
  16. data/lib/faker/default/boolean.rb +1 -4
  17. data/lib/faker/default/chile_rut.rb +8 -14
  18. data/lib/faker/default/code.rb +11 -24
  19. data/lib/faker/default/color.rb +77 -6
  20. data/lib/faker/default/commerce.rb +3 -17
  21. data/lib/faker/default/company.rb +23 -20
  22. data/lib/faker/default/crypto_coin.rb +3 -15
  23. data/lib/faker/default/date.rb +5 -38
  24. data/lib/faker/default/demographic.rb +1 -5
  25. data/lib/faker/default/driving_licence.rb +1 -11
  26. data/lib/faker/default/drone.rb +1 -1
  27. data/lib/faker/default/file.rb +5 -24
  28. data/lib/faker/default/finance.rb +17 -7
  29. data/lib/faker/default/food.rb +14 -1
  30. data/lib/faker/default/hipster.rb +6 -45
  31. data/lib/faker/default/id_number.rb +108 -11
  32. data/lib/faker/default/internet.rb +168 -129
  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 +20 -76
  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/nation.rb +0 -3
  42. data/lib/faker/default/nhs.rb +2 -6
  43. data/lib/faker/default/number.rb +10 -55
  44. data/lib/faker/default/omniauth.rb +51 -41
  45. data/lib/faker/default/phone_number.rb +2 -6
  46. data/lib/faker/default/placeholdit.rb +1 -12
  47. data/lib/faker/default/relationship.rb +1 -5
  48. data/lib/faker/default/religion.rb +6 -0
  49. data/lib/faker/default/source.rb +3 -16
  50. data/lib/faker/default/string.rb +1 -8
  51. data/lib/faker/default/stripe.rb +4 -20
  52. data/lib/faker/default/time.rb +4 -34
  53. data/lib/faker/default/twitter.rb +7 -23
  54. data/lib/faker/default/types.rb +5 -27
  55. data/lib/faker/default/vehicle.rb +29 -51
  56. data/lib/faker/default/vulnerability_identifier.rb +23 -0
  57. data/lib/faker/default/world_cup.rb +2 -11
  58. data/lib/faker/games/clash_of_clans.rb +1 -1
  59. data/lib/faker/games/dnd.rb +49 -7
  60. data/lib/faker/games/dota.rb +1 -5
  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/fullmetal_alchemist_brotherhood.rb +48 -0
  66. data/lib/faker/japanese_media/kamen_rider.rb +102 -0
  67. data/lib/faker/japanese_media/one_piece.rb +1 -1
  68. data/lib/faker/movies/avatar.rb +49 -0
  69. data/lib/faker/movies/hackers.rb +48 -0
  70. data/lib/faker/movies/star_wars.rb +1 -5
  71. data/lib/faker/movies/tron.rb +161 -0
  72. data/lib/faker/quotes/quote.rb +13 -0
  73. data/lib/faker/religion/bible.rb +50 -0
  74. data/lib/faker/sports/chess.rb +90 -0
  75. data/lib/faker/sports/mountaineering.rb +22 -0
  76. data/lib/faker/sports/sport.rb +116 -0
  77. data/lib/faker/travel/airport.rb +43 -0
  78. data/lib/faker/tv_shows/brooklyn_nine_nine.rb +38 -0
  79. data/lib/faker/tv_shows/michael_scott.rb +0 -3
  80. data/lib/faker/tv_shows/spongebob.rb +50 -0
  81. data/lib/faker/version.rb +1 -1
  82. data/lib/faker.rb +15 -64
  83. data/lib/helpers/base58.rb +1 -1
  84. data/lib/helpers/unique_generator.rb +13 -11
  85. data/lib/locales/ar.yml +6 -1
  86. data/lib/locales/bg.yml +1 -1
  87. data/lib/locales/da-DK.yml +1 -1
  88. data/lib/locales/de-AT.yml +3 -4
  89. data/lib/locales/de-CH.yml +1 -1
  90. data/lib/locales/de.yml +1 -1
  91. data/lib/locales/en/address.yml +2 -3
  92. data/lib/locales/en/airport.yml +381 -0
  93. data/lib/locales/en/australia.yml +3 -4
  94. data/lib/locales/en/avatar.yml +31 -0
  95. data/lib/locales/en/bible.yml +90 -0
  96. data/lib/locales/en/brooklyn_nine_nine.yml +35 -0
  97. data/lib/locales/en/cat.yml +1 -1
  98. data/lib/locales/en/chess.yml +103 -0
  99. data/lib/locales/en/coffee.yml +1 -1
  100. data/lib/locales/en/company.yml +1 -0
  101. data/lib/locales/en/computer.yml +23 -4
  102. data/lib/locales/en/cowboy_bebop.yml +163 -0
  103. data/lib/locales/en/dnd.yml +186 -1
  104. data/lib/locales/en/dota.yml +113 -0
  105. data/lib/locales/en/file.yml +9 -1
  106. data/lib/locales/en/finance.yml +3 -1
  107. data/lib/locales/en/fma_brotherhood.yml +78 -0
  108. data/lib/locales/en/food.yml +12 -0
  109. data/lib/locales/en/game.yml +11 -0
  110. data/lib/locales/en/hackers.yml +53 -0
  111. data/lib/locales/en/heroes.yml +2 -2
  112. data/lib/locales/en/internet.yml +140 -3
  113. data/lib/locales/en/kamen_rider.yml +452 -0
  114. data/lib/locales/en/mitch_hedberg.yml +46 -0
  115. data/lib/locales/en/mountain.yml +14 -1
  116. data/lib/locales/en/mountaineering.yml +14 -0
  117. data/lib/locales/en/movie.yml +2 -1
  118. data/lib/locales/en/naruto.yml +2 -3
  119. data/lib/locales/en/one_piece.yml +1 -1
  120. data/lib/locales/en/opera.yml +1 -1
  121. data/lib/locales/en/overwatch.yml +5 -7
  122. data/lib/locales/en/source.yml +5 -0
  123. data/lib/locales/en/spongebob.yml +489 -0
  124. data/lib/locales/en/sport.yml +130 -0
  125. data/lib/locales/en/star_wars.yml +1 -1
  126. data/lib/locales/en/stranger_thing.yml +1 -1
  127. data/lib/locales/en/super_smash_bros.yml +2 -0
  128. data/lib/locales/en/tarkov.yml +593 -0
  129. data/lib/locales/en/the_kingkiller_chronicle.yml +56 -0
  130. data/lib/locales/en/tron.yml +227 -0
  131. data/lib/locales/en/vehicle.yml +2809 -75
  132. data/lib/locales/en-AU.yml +2 -2
  133. data/lib/locales/en-CA.yml +2 -1
  134. data/lib/locales/en-GB.yml +2 -1
  135. data/lib/locales/en-MS.yml +1 -0
  136. data/lib/locales/en-NG.yml +1 -0
  137. data/lib/locales/en-NZ.yml +1 -0
  138. data/lib/locales/en-PAK.yml +1 -0
  139. data/lib/locales/en-SG.yml +1 -0
  140. data/lib/locales/en-UG.yml +1 -0
  141. data/lib/locales/en-US.yml +2 -2
  142. data/lib/locales/en-ZA.yml +1 -1
  143. data/lib/locales/en-au-ocker.yml +2 -0
  144. data/lib/locales/es-AR.yml +3 -2
  145. data/lib/locales/es-MX.yml +1 -1
  146. data/lib/locales/es.yml +2 -2
  147. data/lib/locales/fi-FI.yml +3 -1
  148. data/lib/locales/fr/address.yml +0 -1
  149. data/lib/locales/fr/adjective.yml +266 -0
  150. data/lib/locales/fr/ancient.yml +141 -0
  151. data/lib/locales/fr-CA.yml +1 -1
  152. data/lib/locales/fr-CH.yml +1 -1
  153. data/lib/locales/hy.yml +2 -1
  154. data/lib/locales/it.yml +1 -0
  155. data/lib/locales/ja/address.yml +258 -4169
  156. data/lib/locales/ja/adjective.yml +148 -0
  157. data/lib/locales/ja/dog.yml +1 -0
  158. data/lib/locales/ja/emotion.yml +51 -0
  159. data/lib/locales/ja/lorem.yml +2 -2
  160. data/lib/locales/ja/naruto.yml +230 -0
  161. data/lib/locales/ja/relationship.yml +10 -0
  162. data/lib/locales/ja/super_mario.yml +1 -1
  163. data/lib/locales/ja/super_smash_bros.yml +8 -0
  164. data/lib/locales/ko.yml +1 -0
  165. data/lib/locales/lt.yml +34 -0
  166. data/lib/locales/lv.yml +1 -1
  167. data/lib/locales/mi-NZ.yml +283 -0
  168. data/lib/locales/nb-NO.yml +1 -0
  169. data/lib/locales/nl.yml +1 -0
  170. data/lib/locales/pl.yml +2 -2
  171. data/lib/locales/pt-BR.yml +5 -0
  172. data/lib/locales/pt.yml +1 -1
  173. data/lib/locales/ru.yml +1 -0
  174. data/lib/locales/sk.yml +1 -0
  175. data/lib/locales/sv.yml +1 -0
  176. data/lib/locales/th.yml +76 -76
  177. data/lib/locales/tr.yml +1 -0
  178. data/lib/locales/uk.yml +1 -0
  179. data/lib/locales/vi.yml +1 -0
  180. data/lib/locales/zh-CN.yml +1 -0
  181. data/lib/locales/zh-TW.yml +1 -0
  182. metadata +96 -33
  183. data/lib/faker/default/fillmurray.rb +0 -45
  184. data/lib/faker/default/lorem_pixel.rb +0 -70
  185. /data/lib/faker/default/{faker_adjective.rb → adjective.rb} +0 -0
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faker
4
+ class Books
5
+ class TheKingkillerChronicle < Base
6
+ class << self
7
+ ##
8
+ # Produces the name of a The Kingkiller Chronicle book.
9
+ #
10
+ # @return [String]
11
+ #
12
+ # @example
13
+ # Faker::Books::TheKingkillerChronicle.book #=> "The Name of the Wind"
14
+ #
15
+ # @faker.version next
16
+ def book
17
+ fetch('books.the_kingkiller_chronicle.books')
18
+ end
19
+
20
+ ##
21
+ # Produces the name of a The Kingkiller Chronicle character.
22
+ #
23
+ # @return [String]
24
+ #
25
+ # @example
26
+ # Faker::Books::TheKingkillerChronicle.character #=> "Kvothe"
27
+ #
28
+ # @faker.version next
29
+ def character
30
+ fetch('books.the_kingkiller_chronicle.characters')
31
+ end
32
+
33
+ ##
34
+ # Produces the name of a The Kingkiller Chronicle creature.
35
+ #
36
+ # @return [String]
37
+ #
38
+ # @example
39
+ # Faker::Books::TheKingkillerChronicle.creature #=> "Scrael"
40
+ #
41
+ # @faker.version next
42
+ def creature
43
+ fetch('books.the_kingkiller_chronicle.creatures')
44
+ end
45
+
46
+ ##
47
+ # Produces the name of a The Kingkiller Chronicle location.
48
+ #
49
+ # @return [String]
50
+ #
51
+ # @example
52
+ # Faker::Books::TheKingkillerChronicle.location #=> "Tarbean"
53
+ #
54
+ # @faker.version next
55
+ def location
56
+ fetch('books.the_kingkiller_chronicle.locations')
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -18,11 +18,7 @@ module Faker
18
18
  # #=> "Northfort, California"
19
19
  #
20
20
  # @faker.version 0.3.0
21
- def city(legacy_options = NOT_GIVEN, options: {})
22
- warn_for_deprecated_arguments do |keywords|
23
- keywords << :options if legacy_options != NOT_GIVEN
24
- end
25
-
21
+ def city(options: {})
26
22
  parse(options[:with_state] ? 'address.city_with_state' : 'address.city')
27
23
  end
28
24
 
@@ -49,11 +45,7 @@ module Faker
49
45
  # Faker::Address.street_address #=> "282 Kevin Brook"
50
46
  #
51
47
  # @faker.version 0.3.0
52
- def street_address(legacy_include_secondary = NOT_GIVEN, include_secondary: false)
53
- warn_for_deprecated_arguments do |keywords|
54
- keywords << :include_secondary if legacy_include_secondary != NOT_GIVEN
55
- end
56
-
48
+ def street_address(include_secondary: false)
57
49
  numerify(parse('address.street_address') + (include_secondary ? " #{secondary_address}" : ''))
58
50
  end
59
51
 
@@ -121,11 +113,7 @@ module Faker
121
113
  # Faker::Address.zip_code(state_abbreviation: 'CO') #=> "80011"
122
114
  #
123
115
  # @faker.version 0.3.0
124
- def zip_code(legacy_state_abbreviation = NOT_GIVEN, state_abbreviation: '')
125
- warn_for_deprecated_arguments do |keywords|
126
- keywords << :state_abbreviation if legacy_state_abbreviation != NOT_GIVEN
127
- end
128
-
116
+ def zip_code(state_abbreviation: '')
129
117
  if state_abbreviation.empty?
130
118
  letterified_string = letterify(fetch('address.postcode'))
131
119
  return numerify(letterified_string, leading_zero: true)
@@ -242,11 +230,7 @@ module Faker
242
230
  # Faker::Address.country_by_code(code: 'NL') #=> "Netherlands"
243
231
  #
244
232
  # @faker.version 1.9.2
245
- def country_by_code(legacy_code = NOT_GIVEN, code: 'US')
246
- warn_for_deprecated_arguments do |keywords|
247
- keywords << :code if legacy_code != NOT_GIVEN
248
- end
249
-
233
+ def country_by_code(code: 'US')
250
234
  fetch("address.country_by_code.#{code}")
251
235
  end
252
236
 
@@ -260,11 +244,7 @@ module Faker
260
244
  # Faker::Address.country_name_to_code(name: 'united_states') #=> "US"
261
245
  #
262
246
  # @faker.version 1.9.2
263
- def country_name_to_code(legacy_name = NOT_GIVEN, name: 'united_states')
264
- warn_for_deprecated_arguments do |keywords|
265
- keywords << :name if legacy_name != NOT_GIVEN
266
- end
267
-
247
+ def country_name_to_code(name: 'united_states')
268
248
  fetch("address.country_by_name.#{name}")
269
249
  end
270
250
 
@@ -19,10 +19,7 @@ module Faker
19
19
  # Faker::Alphanumeric.alpha(number: 10) #=> "zlvubkrwga"
20
20
  #
21
21
  # @faker.version 1.9.2
22
- def alpha(legacy_number = NOT_GIVEN, number: 32)
23
- warn_for_deprecated_arguments do |keywords|
24
- keywords << :number if legacy_number != NOT_GIVEN
25
- end
22
+ def alpha(number: 32)
26
23
  char_count = resolve(number)
27
24
  return '' if char_count.to_i < 1
28
25
 
@@ -46,10 +43,7 @@ module Faker
46
43
  # Faker::Alphanumeric.alphanumeric(number: 10, min_alpha: 3, min_numeric: 3) #=> "3yfq2phx8b"
47
44
  #
48
45
  # @faker.version 2.1.3
49
- def alphanumeric(legacy_number = NOT_GIVEN, number: 32, min_alpha: 0, min_numeric: 0)
50
- warn_for_deprecated_arguments do |keywords|
51
- keywords << :number if legacy_number != NOT_GIVEN
52
- end
46
+ def alphanumeric(number: 32, min_alpha: 0, min_numeric: 0)
53
47
  char_count = resolve(number)
54
48
  return '' if char_count.to_i < 1
55
49
  raise ArgumentError, 'min_alpha must be greater than or equal to 0' if min_alpha&.negative?
@@ -42,8 +42,6 @@ module Faker
42
42
  parse('app.author')
43
43
  end
44
44
 
45
- # rubocop:disable Metrics/ParameterLists
46
-
47
45
  ##
48
46
  # Produces a String representing a semantic version identifier.
49
47
  #
@@ -62,16 +60,9 @@ module Faker
62
60
  # Faker::App.semantic_version(patch: 5..6) #=> "7.2.6"
63
61
  #
64
62
  # @faker.version 1.4.3
65
- def semantic_version(legacy_major = NOT_GIVEN, legacy_minor = NOT_GIVEN, legacy_patch = NOT_GIVEN, major: 0..9, minor: 0..9, patch: 1..9)
66
- warn_for_deprecated_arguments do |keywords|
67
- keywords << :major if legacy_major != NOT_GIVEN
68
- keywords << :minor if legacy_minor != NOT_GIVEN
69
- keywords << :patch if legacy_patch != NOT_GIVEN
70
- end
71
-
63
+ def semantic_version(major: 0..9, minor: 0..9, patch: 1..9)
72
64
  [major, minor, patch].map { |chunk| sample(Array(chunk)) }.join('.')
73
65
  end
74
- # rubocop:enable Metrics/ParameterLists
75
66
  end
76
67
  end
77
68
  end
@@ -6,8 +6,6 @@ module Faker
6
6
  # @private
7
7
  SUPPORTED_FORMATS = %w[png jpg bmp].freeze
8
8
 
9
- # rubocop:disable Metrics/ParameterLists
10
-
11
9
  ##
12
10
  # Produces a URL for an avatar from robohash.org
13
11
  #
@@ -38,15 +36,7 @@ module Faker
38
36
  # #=> "https://robohash.org/my-own-slug.bmp?size=50x50&set=set1&bgset=bg1"
39
37
  #
40
38
  # @faker.version 1.4.3
41
- def image(legacy_slug = NOT_GIVEN, legacy_size = NOT_GIVEN, legacy_format = NOT_GIVEN, legacy_set = NOT_GIVEN, legacy_bgset = NOT_GIVEN, slug: nil, size: '300x300', format: 'png', set: 'set1', bgset: nil)
42
- warn_for_deprecated_arguments do |keywords|
43
- keywords << :slug if legacy_slug != NOT_GIVEN
44
- keywords << :size if legacy_size != NOT_GIVEN
45
- keywords << :format if legacy_format != NOT_GIVEN
46
- keywords << :set if legacy_set != NOT_GIVEN
47
- keywords << :bgset if legacy_bgset != NOT_GIVEN
48
- end
49
-
39
+ def image(slug: nil, size: '300x300', format: 'png', set: 'set1', bgset: nil)
50
40
  raise ArgumentError, 'Size should be specified in format 300x300' unless size =~ /^[0-9]+x[0-9]+$/
51
41
  raise ArgumentError, "Supported formats are #{SUPPORTED_FORMATS.join(', ')}" unless SUPPORTED_FORMATS.include?(format)
52
42
 
@@ -54,7 +44,6 @@ module Faker
54
44
  bgset_query = "&bgset=#{bgset}" if bgset
55
45
  "https://robohash.org/#{slug}.#{format}?size=#{size}&set=#{set}#{bgset_query}"
56
46
  end
57
- # rubocop:enable Metrics/ParameterLists
58
47
  end
59
48
  end
60
49
  end
@@ -16,14 +16,10 @@ module Faker
16
16
  # Faker::Bank.account_number(digits: 13) #=> 673858237902
17
17
  #
18
18
  # @faker.version 1.9.1
19
- def account_number(legacy_digits = NOT_GIVEN, digits: 10)
20
- warn_for_deprecated_arguments do |keywords|
21
- keywords << :digits if legacy_digits != NOT_GIVEN
22
- end
23
-
19
+ def account_number(digits: 10)
24
20
  output = ''
25
21
 
26
- output += rand.to_s[2..-1] while output.length < digits
22
+ output += rand.to_s[2..] while output.length < digits
27
23
 
28
24
  output[0...digits]
29
25
  end
@@ -40,14 +36,10 @@ module Faker
40
36
  # Faker::Bank.iban(country_code: nil) #=> "DE45186738071857270067"
41
37
  #
42
38
  # @faker.version 1.7.0
43
- def iban(legacy_country_code = NOT_GIVEN, country_code: 'GB')
39
+ def iban(country_code: 'GB')
44
40
  # Each country has its own format for bank accounts
45
41
  # Many of them use letters in certain parts of the account
46
42
  # Using regex patterns we can create virtually any type of bank account
47
- warn_for_deprecated_arguments do |keywords|
48
- keywords << :country_code if legacy_country_code != NOT_GIVEN
49
- end
50
-
51
43
  country_code ||= iban_country_code
52
44
 
53
45
  begin
@@ -145,7 +137,7 @@ module Faker
145
137
  private
146
138
 
147
139
  def checksum(num_string)
148
- num_array = num_string.split('').map(&:to_i)
140
+ num_array = num_string.chars.map(&:to_i)
149
141
  (
150
142
  7 * (num_array[0] + num_array[3] + num_array[6]) +
151
143
  3 * (num_array[1] + num_array[4] + num_array[7]) +
@@ -166,15 +158,15 @@ module Faker
166
158
  end
167
159
 
168
160
  # Calculates the mandatory checksum in 3rd and 4th characters in IBAN format
169
- # source: https://en.wikipedia.org/wiki/International_Bank_Account_Number#Validating_the_IBAN
161
+ # source: https://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
170
162
  def iban_checksum(country_code, account)
171
163
  # Converts letters to numbers according the iban rules, A=10..Z=35
172
164
  account_to_number = "#{account}#{country_code}00".upcase.chars.map do |d|
173
165
  d =~ /[A-Z]/ ? (d.ord - 55).to_s : d
174
166
  end.join.to_i
175
167
 
176
- # This is answer to (iban_to_num + checksum) % 97 == 1
177
- checksum = (1 - account_to_number) % 97
168
+ # This is the correct answer to (iban_to_num + checksum) % 97 == 1
169
+ checksum = 98 - (account_to_number % 97)
178
170
 
179
171
  # Use leftpad to make the size always to 2
180
172
  checksum.to_s.rjust(2, '0')
@@ -194,8 +186,8 @@ module Faker
194
186
 
195
187
  def compile_fraction(routing_num)
196
188
  prefix = (1..50).to_a.map(&:to_s).sample
197
- numerator = routing_num.split('')[5..8].join.to_i.to_s
198
- denominator = routing_num.split('')[0..4].join.to_i.to_s
189
+ numerator = routing_num.chars[5..8].join.to_i.to_s
190
+ denominator = routing_num.chars[0..4].join.to_i.to_s
199
191
  "#{prefix}-#{numerator}/#{denominator}"
200
192
  end
201
193
 
@@ -15,10 +15,7 @@ module Faker
15
15
  # Faker::Boolean.boolean(true_ratio: 0.2) #=> false
16
16
  #
17
17
  # @faker.version 1.6.2
18
- def boolean(legacy_true_ratio = NOT_GIVEN, true_ratio: 0.5)
19
- warn_for_deprecated_arguments do |keywords|
20
- keywords << :true_ratio if legacy_true_ratio != NOT_GIVEN
21
- end
18
+ def boolean(true_ratio: 0.5)
22
19
  (rand < true_ratio)
23
20
  end
24
21
  end
@@ -18,12 +18,7 @@ module Faker
18
18
  # Faker::ChileRut.rut(min_rut: 20890156, fixed: true) #=> 20890156
19
19
  #
20
20
  # @faker.version 1.9.2
21
- def rut(legacy_min_rut = NOT_GIVEN, legacy_fixed = NOT_GIVEN, min_rut: 1, fixed: false)
22
- warn_for_deprecated_arguments do |keywords|
23
- keywords << :min_rut if legacy_min_rut != NOT_GIVEN
24
- keywords << :fixed if legacy_fixed != NOT_GIVEN
25
- end
26
-
21
+ def rut(min_rut: 1, fixed: false)
27
22
  @last_rut = fixed ? min_rut : rand_in_range(min_rut, 99_999_999)
28
23
  end
29
24
 
@@ -37,7 +32,7 @@ module Faker
37
32
  #
38
33
  # @faker.version 1.9.2
39
34
  def dv
40
- split_reversed_rut = @last_rut.to_s.reverse.split('')
35
+ split_reversed_rut = @last_rut.to_s.reverse.chars
41
36
  seq = [2, 3, 4, 5, 6, 7]
42
37
  i = 0
43
38
  digit_sum = split_reversed_rut.reduce(0) do |sum, n|
@@ -82,14 +77,13 @@ module Faker
82
77
  # Faker::ChileRut.full_rut(min_rut: 20890156) #=> "30686957-4"
83
78
  # Faker::ChileRut.full_rut(min_rut: 30686957, fixed: true) #=> "30686957-4"
84
79
  #
85
- # @faker.version 1.9.2
86
- def full_rut(legacy_min_rut = NOT_GIVEN, legacy_fixed = NOT_GIVEN, min_rut: 0, fixed: false)
87
- warn_for_deprecated_arguments do |keywords|
88
- keywords << :min_rut if legacy_min_rut != NOT_GIVEN
89
- keywords << :fixed if legacy_fixed != NOT_GIVEN
80
+ # @faker.version next
81
+ def full_rut(min_rut: 0, fixed: false, formatted: false)
82
+ if formatted
83
+ "#{rut(min_rut: min_rut, fixed: fixed).to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1.').reverse}-#{dv}"
84
+ else
85
+ "#{rut(min_rut: min_rut, fixed: fixed)}-#{dv}"
90
86
  end
91
-
92
- "#{rut(min_rut: min_rut, fixed: fixed)}-#{dv}"
93
87
  end
94
88
 
95
89
  attr_reader :last_rut
@@ -5,7 +5,7 @@ module Faker
5
5
  flexible :code
6
6
  class << self
7
7
  ##
8
- # Produces a random NPI (National Provider Identifer) code.
8
+ # Produces a random NPI (National Provider Identifier) code.
9
9
  #
10
10
  # @return [String]
11
11
  #
@@ -29,11 +29,7 @@ module Faker
29
29
  # Faker::Code.isbn #=> "170366802-2"
30
30
  #
31
31
  # @faker.version 2.2.0
32
- def isbn(legacy_base = NOT_GIVEN, base: 10)
33
- warn_for_deprecated_arguments do |keywords|
34
- keywords << :base if legacy_base != NOT_GIVEN
35
- end
36
-
32
+ def isbn(base: 10)
37
33
  case base
38
34
  when 10 then generate_base10_isbn
39
35
  when 13 then generate_base13_isbn
@@ -53,11 +49,7 @@ module Faker
53
49
  # Faker::Code.ean #=> "9941880131907"
54
50
  #
55
51
  # @faker.version 2.2.0
56
- def ean(legacy_base = NOT_GIVEN, base: 13)
57
- warn_for_deprecated_arguments do |keywords|
58
- keywords << :base if legacy_base != NOT_GIVEN
59
- end
60
-
52
+ def ean(base: 13)
61
53
  case base
62
54
  when 8 then generate_base8_ean
63
55
  when 13 then generate_base13_ean
@@ -99,15 +91,10 @@ module Faker
99
91
  # Faker::Code.nric #=> "S6372958B"
100
92
  #
101
93
  # @faker.version 2.2.0
102
- def nric(legacy_min_age = NOT_GIVEN, legacy_max_age = NOT_GIVEN, min_age: 18, max_age: 65)
103
- warn_for_deprecated_arguments do |keywords|
104
- keywords << :min_age if legacy_min_age != NOT_GIVEN
105
- keywords << :max_age if legacy_max_age != NOT_GIVEN
106
- end
107
-
94
+ def nric(min_age: 18, max_age: 65)
108
95
  birthyear = Date.birthday(min_age: min_age, max_age: max_age).year
109
96
  prefix = birthyear < 2000 ? 'S' : 'T'
110
- values = birthyear.to_s[-2..-1]
97
+ values = birthyear.to_s[-2..]
111
98
  values << regexify(/\d{5}/)
112
99
  check_alpha = generate_nric_check_alphabet(values, prefix)
113
100
  "#{prefix}#{values}#{check_alpha}"
@@ -206,7 +193,7 @@ module Faker
206
193
  str[len - 1] = (10 - (sum % 10)) % 10
207
194
 
208
195
  # Output the IMEI value.
209
- str.join('')
196
+ str.join
210
197
  end
211
198
 
212
199
  def generate_base10_isbn
@@ -222,20 +209,20 @@ module Faker
222
209
  end
223
210
 
224
211
  def sum(values)
225
- values.split(//).each_with_index.inject(0) do |sum, (value, index)|
212
+ values.chars.each_with_index.inject(0) do |sum, (value, index)|
226
213
  sum + yield(value, index)
227
214
  end
228
215
  end
229
216
 
230
217
  def generate_base8_ean
231
218
  values = regexify(/\d{7}/)
232
- check_digit = 10 - values.split(//).each_with_index.inject(0) { |s, (v, i)| s + v.to_i * EAN_CHECK_DIGIT8[i] } % 10
219
+ check_digit = 10 - values.chars.each_with_index.inject(0) { |s, (v, i)| s + v.to_i * EAN_CHECK_DIGIT8[i] } % 10
233
220
  values << (check_digit == 10 ? 0 : check_digit).to_s
234
221
  end
235
222
 
236
223
  def generate_base13_ean
237
224
  values = regexify(/\d{12}/)
238
- check_digit = 10 - values.split(//).each_with_index.inject(0) { |s, (v, i)| s + v.to_i * EAN_CHECK_DIGIT13[i] } % 10
225
+ check_digit = 10 - values.chars.each_with_index.inject(0) { |s, (v, i)| s + v.to_i * EAN_CHECK_DIGIT13[i] } % 10
239
226
  values << (check_digit == 10 ? 0 : check_digit).to_s
240
227
  end
241
228
 
@@ -243,13 +230,13 @@ module Faker
243
230
  EAN_CHECK_DIGIT13 = [1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3].freeze
244
231
 
245
232
  def rut_verificator_digit(rut)
246
- total = rut.to_s.rjust(8, '0').split(//).zip(%w[3 2 7 6 5 4 3 2]).collect { |a, b| a.to_i * b.to_i }.inject(:+)
233
+ total = rut.to_s.rjust(8, '0').chars.zip(%w[3 2 7 6 5 4 3 2]).collect { |a, b| a.to_i * b.to_i }.inject(:+)
247
234
  (11 - total % 11).to_s.gsub(/10/, 'k').gsub(/11/, '0')
248
235
  end
249
236
 
250
237
  def generate_nric_check_alphabet(values, prefix)
251
238
  weight = %w[2 7 6 5 4 3 2]
252
- total = values.split(//).zip(weight).collect { |a, b| a.to_i * b.to_i }.inject(:+)
239
+ total = values.chars.zip(weight).collect { |a, b| a.to_i * b.to_i }.inject(:+)
253
240
  total += 4 if prefix == 'T'
254
241
  %w[A B C D E F G H I Z J][10 - total % 11]
255
242
  end
@@ -3,17 +3,34 @@
3
3
  module Faker
4
4
  class Color < Base
5
5
  class << self
6
+ LIGHTNESS_LOOKUP = {
7
+ light: 0.8,
8
+ dark: 0.2
9
+ }.freeze
6
10
  ##
7
11
  # Produces a hex color code.
12
+ # Clients are able to specify the hue, saturation, or lightness of the required color.
13
+ # Alternatively a client can simply specify that they need a light or dark color.
14
+ #
15
+ # @param args [Hash, Symbol] Allows the client to specify what color should be return
8
16
  #
9
17
  # @return [String]
10
18
  #
11
19
  # @example
12
20
  # Faker::Color.hex_color #=> "#31a785"
21
+ # @example
22
+ # Faker::Color.hex_color(hue: 118, saturation: 1, lightness: 0.53) #=> "#048700"
23
+ # @example
24
+ # Faker::Color.hex_color(:light) #=> "#FFEE99"
25
+ # @example
26
+ # Faker::Color.hex_color(:dark) #=> "#665500"
13
27
  #
14
- # @faker.version 1.5.0
15
- def hex_color
16
- format('#%06x', (rand * 0xffffff))
28
+ # @faker.version next
29
+ def hex_color(args = nil)
30
+ hsl_hash = {}
31
+ hsl_hash = { lightness: LIGHTNESS_LOOKUP[args] } if %i[dark light].include?(args)
32
+ hsl_hash = args if args.is_a?(Hash)
33
+ hsl_to_hex(hsl_color(**hsl_hash))
17
34
  end
18
35
 
19
36
  ##
@@ -51,14 +68,28 @@ module Faker
51
68
  # Produces an array of floats representing an HSL color.
52
69
  # The array is in the form of `[hue, saturation, lightness]`.
53
70
  #
71
+ # @param hue [FLoat] Optional value to use for hue
72
+ # @param saturation [Float] Optional value to use for saturation
73
+ # @param lightness [Float] Optional value to use for lightness
54
74
  # @return [Array(Float, Float, Float)]
55
75
  #
56
76
  # @example
57
77
  # Faker::Color.hsl_color #=> [69.87, 0.66, 0.3]
78
+ # @example
79
+ # Faker::Color.hsl_color(hue: 70, saturation: 0.5, lightness: 0.8) #=> [70, 0.5, 0.8]
80
+ # @example
81
+ # Faker::Color.hsl_color(hue: 70) #=> [70, 0.66, 0.6]
82
+ # @example
83
+ # Faker::Color.hsl_color(saturation: 0.2) #=> [54, 0.2, 0.3]
84
+ # @example
85
+ # Faker::Color.hsl_color(lightness: 0.6) #=> [69.87, 0.66, 0.6]
58
86
  #
59
- # @faker.version 1.5.0
60
- def hsl_color
61
- [sample((0..360).to_a), rand.round(2), rand.round(2)]
87
+ # @faker.version next
88
+ def hsl_color(hue: nil, saturation: nil, lightness: nil)
89
+ valid_hue = hue || sample((0..360).to_a)
90
+ valid_saturation = saturation&.clamp(0, 1) || rand.round(2)
91
+ valid_lightness = lightness&.clamp(0, 1) || rand.round(2)
92
+ [valid_hue, valid_saturation, valid_lightness]
62
93
  end
63
94
 
64
95
  ##
@@ -74,6 +105,46 @@ module Faker
74
105
  def hsla_color
75
106
  hsl_color << rand.round(1)
76
107
  end
108
+
109
+ private
110
+
111
+ ##
112
+ # Produces a hex code representation of an HSL color
113
+ #
114
+ # @param a_hsl_color [Array(Float, Float, Float)] The array that represents the HSL color
115
+ #
116
+ # @return [String]
117
+ #
118
+ # @example
119
+ # hsl_to_hex([50, 100,80]) #=> #FFEE99
120
+ #
121
+ # @see https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB
122
+ # @see https://github.com/jpmckinney/color-generator/blob/master/lib/color-generator.rb
123
+ #
124
+ def hsl_to_hex(a_hsl_color)
125
+ h, s, l = a_hsl_color
126
+ c = (1 - (2 * l - 1).abs) * s
127
+ h_prime = h / 60
128
+ x = c * (1 - (h_prime % 2 - 1).abs)
129
+ m = l - 0.5 * c
130
+
131
+ rgb = case h_prime.to_i
132
+ when 0 # 0 <= H' < 1
133
+ [c, x, 0]
134
+ when 1 # 1 <= H' < 2
135
+ [x, c, 0]
136
+ when 2 # 2 <= H' < 3
137
+ [0, c, x]
138
+ when 3 # 3 <= H' < 4
139
+ [0, x, c]
140
+ when 4 # 4 <= H' < 5
141
+ [x, 0, c]
142
+ else # 5 <= H' < 6
143
+ [c, 0, x]
144
+ end.map { |value| ((value + m) * 255).round }
145
+
146
+ format('#%02x%02x%02x', rgb[0], rgb[1], rgb[2])
147
+ end
77
148
  end
78
149
  end
79
150
  end
@@ -27,11 +27,7 @@ module Faker
27
27
  # Faker::Commerce.promotion_code(digits: 2) #=> "AmazingPrice57"
28
28
  #
29
29
  # @faker.version 1.7.0
30
- def promotion_code(legacy_digits = NOT_GIVEN, digits: 6)
31
- warn_for_deprecated_arguments do |keywords|
32
- keywords << :digits if legacy_digits != NOT_GIVEN
33
- end
34
-
30
+ def promotion_code(digits: 6)
35
31
  [
36
32
  fetch('commerce.promotion_code.adjective'),
37
33
  fetch('commerce.promotion_code.noun'),
@@ -52,12 +48,7 @@ module Faker
52
48
  # Faker::Commerce.department(max: 2, fixed_amount: true) #=> "Books & Tools"
53
49
  #
54
50
  # @faker.version 1.2.0
55
- def department(legacy_max = NOT_GIVEN, legacy_fixed_amount = NOT_GIVEN, max: 3, fixed_amount: false)
56
- warn_for_deprecated_arguments do |keywords|
57
- keywords << :max if legacy_max != NOT_GIVEN
58
- keywords << :fixed_amount if legacy_fixed_amount != NOT_GIVEN
59
- end
60
-
51
+ def department(max: 3, fixed_amount: false)
61
52
  num = max if fixed_amount
62
53
  num ||= 1 + rand(max)
63
54
 
@@ -112,12 +103,7 @@ module Faker
112
103
  # Faker::Commerce.price(range: 0..10.0, as_string: true) #=> "2.18"
113
104
  #
114
105
  # @faker.version 1.2.0
115
- def price(legacy_range = NOT_GIVEN, legacy_as_string = NOT_GIVEN, range: 0..100.0, as_string: false)
116
- warn_for_deprecated_arguments do |keywords|
117
- keywords << :range if legacy_range != NOT_GIVEN
118
- keywords << :as_string if legacy_as_string != NOT_GIVEN
119
- end
120
-
106
+ def price(range: 0..100.0, as_string: false)
121
107
  price = (rand(range) * 100).floor / 100.0
122
108
  if as_string
123
109
  price_parts = price.to_s.split('.')