faker 1.9.3 → 2.1.2

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 (234) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +279 -3
  3. data/README.md +26 -11
  4. data/bin/faker +5 -0
  5. data/lib/faker/blockchain/tezos.rb +10 -5
  6. data/lib/faker/books/dune.rb +2 -2
  7. data/lib/faker/books/lovecraft.rb +18 -18
  8. data/lib/faker/creature/animal.rb +1 -1
  9. data/lib/faker/creature/cat.rb +1 -1
  10. data/lib/faker/creature/dog.rb +1 -1
  11. data/lib/faker/creature/horse.rb +19 -0
  12. data/lib/faker/default/address.rb +3 -3
  13. data/lib/faker/default/alphanumeric.rb +4 -4
  14. data/lib/faker/default/avatar.rb +1 -1
  15. data/lib/faker/default/bank.rb +2 -2
  16. data/lib/faker/default/boolean.rb +1 -1
  17. data/lib/faker/default/cannabis.rb +4 -0
  18. data/lib/faker/default/chile_rut.rb +3 -3
  19. data/lib/faker/default/code.rb +5 -5
  20. data/lib/faker/default/coffee.rb +2 -0
  21. data/lib/faker/default/commerce.rb +4 -4
  22. data/lib/faker/default/company.rb +6 -2
  23. data/lib/faker/default/crypto_coin.rb +9 -4
  24. data/lib/faker/default/date.rb +9 -9
  25. data/lib/faker/default/demographic.rb +1 -1
  26. data/lib/faker/default/device.rb +2 -2
  27. data/lib/faker/default/driving_licence.rb +2 -2
  28. data/lib/faker/default/educator.rb +0 -3
  29. data/lib/faker/default/file.rb +11 -2
  30. data/lib/faker/default/fillmurray.rb +2 -2
  31. data/lib/faker/default/finance.rb +1 -1
  32. data/lib/faker/default/hipster.rb +16 -16
  33. data/lib/faker/default/id_number.rb +47 -10
  34. data/lib/faker/default/internet.rb +35 -22
  35. data/lib/faker/default/invoice.rb +3 -3
  36. data/lib/faker/default/json.rb +6 -6
  37. data/lib/faker/default/lorem.rb +20 -20
  38. data/lib/faker/default/lorem_flickr.rb +4 -4
  39. data/lib/faker/default/lorem_pixel.rb +1 -1
  40. data/lib/faker/default/markdown.rb +7 -7
  41. data/lib/faker/default/measurement.rb +8 -8
  42. data/lib/faker/default/name.rb +2 -4
  43. data/lib/faker/default/nhs.rb +7 -7
  44. data/lib/faker/default/number.rb +35 -27
  45. data/lib/faker/default/omniauth.rb +11 -11
  46. data/lib/faker/default/phone_number.rb +1 -1
  47. data/lib/faker/default/placeholdit.rb +1 -1
  48. data/lib/faker/default/relationship.rb +1 -1
  49. data/lib/faker/default/source.rb +2 -2
  50. data/lib/faker/default/south_africa.rb +1 -1
  51. data/lib/faker/default/space.rb +2 -2
  52. data/lib/faker/default/string.rb +1 -1
  53. data/lib/faker/default/stripe.rb +4 -4
  54. data/lib/faker/default/time.rb +23 -8
  55. data/lib/faker/default/twitter.rb +30 -30
  56. data/lib/faker/default/types.rb +7 -7
  57. data/lib/faker/default/vehicle.rb +5 -5
  58. data/lib/faker/default/world_cup.rb +2 -2
  59. data/lib/faker/games/dota.rb +1 -1
  60. data/lib/faker/games/elder_scrolls.rb +1 -1
  61. data/lib/faker/games/fallout.rb +1 -1
  62. data/lib/faker/games/game.rb +21 -0
  63. data/lib/faker/games/half_life.rb +1 -1
  64. data/lib/faker/games/heroes.rb +1 -1
  65. data/lib/faker/games/heroes_of_the_storm.rb +1 -1
  66. data/lib/faker/games/league_of_legends.rb +1 -1
  67. data/lib/faker/games/myst.rb +1 -1
  68. data/lib/faker/games/overwatch.rb +1 -1
  69. data/lib/faker/games/pokemon.rb +1 -1
  70. data/lib/faker/games/sonic_the_hedgehog.rb +1 -1
  71. data/lib/faker/games/super_smash_bros.rb +1 -1
  72. data/lib/faker/games/witcher.rb +1 -1
  73. data/lib/faker/games/world_of_warcraft.rb +1 -1
  74. data/lib/faker/games/zelda.rb +1 -1
  75. data/lib/faker/japanese_media/dragon_ball.rb +1 -1
  76. data/lib/faker/japanese_media/one_piece.rb +1 -1
  77. data/lib/faker/japanese_media/sword_art_online.rb +1 -1
  78. data/lib/faker/movies/back_to_the_future.rb +1 -1
  79. data/lib/faker/movies/ghostbusters.rb +1 -1
  80. data/lib/faker/movies/harry_potter.rb +1 -1
  81. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +1 -1
  82. data/lib/faker/movies/hobbit.rb +1 -1
  83. data/lib/faker/movies/lebowski.rb +1 -1
  84. data/lib/faker/movies/lord_of_the_rings.rb +1 -1
  85. data/lib/faker/movies/princess_bride.rb +1 -1
  86. data/lib/faker/movies/star_wars.rb +2 -2
  87. data/lib/faker/movies/v_for_vendetta.rb +1 -1
  88. data/lib/faker/{movies → music}/grateful_dead.rb +3 -1
  89. data/lib/faker/music/opera.rb +26 -0
  90. data/lib/faker/sports/basketball.rb +25 -0
  91. data/lib/faker/sports/football.rb +29 -0
  92. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +1 -1
  93. data/lib/faker/tv_shows/bojack_horseman.rb +1 -1
  94. data/lib/faker/tv_shows/breaking_bad.rb +1 -1
  95. data/lib/faker/tv_shows/buffy.rb +1 -1
  96. data/lib/faker/tv_shows/community.rb +1 -1
  97. data/lib/faker/tv_shows/dr_who.rb +1 -1
  98. data/lib/faker/tv_shows/dumb_and_dumber.rb +1 -1
  99. data/lib/faker/tv_shows/family_guy.rb +1 -1
  100. data/lib/faker/tv_shows/friends.rb +1 -1
  101. data/lib/faker/tv_shows/game_of_thrones.rb +1 -1
  102. data/lib/faker/tv_shows/hey_arnold.rb +1 -1
  103. data/lib/faker/tv_shows/how_i_met_your_mother.rb +1 -1
  104. data/lib/faker/tv_shows/michael_scott.rb +1 -1
  105. data/lib/faker/tv_shows/new_girl.rb +1 -1
  106. data/lib/faker/tv_shows/parks_and_rec.rb +1 -1
  107. data/lib/faker/tv_shows/rick_and_morty.rb +1 -1
  108. data/lib/faker/tv_shows/ru_paul.rb +1 -1
  109. data/lib/faker/tv_shows/seinfeld.rb +1 -1
  110. data/lib/faker/tv_shows/silicon_valley.rb +1 -1
  111. data/lib/faker/tv_shows/simpsons.rb +1 -1
  112. data/lib/faker/tv_shows/south_park.rb +1 -1
  113. data/lib/faker/tv_shows/star_trek.rb +1 -1
  114. data/lib/faker/tv_shows/stargate.rb +1 -1
  115. data/lib/faker/tv_shows/stranger_things.rb +1 -1
  116. data/lib/faker/tv_shows/the_expanse.rb +1 -1
  117. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +1 -1
  118. data/lib/faker/tv_shows/the_it_crowd.rb +1 -1
  119. data/lib/faker/tv_shows/the_thick_of_it.rb +1 -1
  120. data/lib/faker/tv_shows/twin_peaks.rb +1 -1
  121. data/lib/faker/tv_shows/venture_bros.rb +1 -1
  122. data/lib/faker/version.rb +1 -1
  123. data/lib/locales/en-AU.yml +1 -1
  124. data/lib/locales/en-IND.yml +1 -1
  125. data/lib/locales/en.yml +4 -1
  126. data/lib/locales/en/address.yml +1 -4
  127. data/lib/locales/en/animal.yml +2 -2
  128. data/lib/locales/en/basketball.yml +99 -0
  129. data/lib/locales/en/cannabis.yml +1 -0
  130. data/lib/locales/en/company.yml +1 -0
  131. data/lib/locales/en/crypto_coin.yml +22 -6
  132. data/lib/locales/en/dc_comics.yml +5 -5
  133. data/lib/locales/en/dota.yml +3 -1
  134. data/lib/locales/en/food.yml +1 -1
  135. data/lib/locales/en/game.yml +283 -0
  136. data/lib/locales/en/grateful_dead.yml +2 -1
  137. data/lib/locales/en/heroes_of_the_storm.yml +2 -2
  138. data/lib/locales/en/horse.yml +6 -0
  139. data/lib/locales/en/kpop.yml +1 -1
  140. data/lib/locales/en/league_of_legends.yml +2 -2
  141. data/lib/locales/en/music.yml +1 -1
  142. data/lib/locales/en/nation.yml +1 -1
  143. data/lib/locales/en/opera.yml +172 -0
  144. data/lib/locales/en/phish.yml +1 -1
  145. data/lib/locales/en/rupaul.yml +51 -21
  146. data/lib/locales/en/space.yml +2 -2
  147. data/lib/locales/en/stargate.yml +1 -2
  148. data/lib/locales/en/subscription.yml +1 -1
  149. data/lib/locales/en/super_smash_bros.yml +8 -0
  150. data/lib/locales/en/verbs.yml +2 -2
  151. data/lib/locales/fr-CA.yml +0 -5
  152. data/lib/locales/fr-CH.yml +0 -1
  153. data/lib/locales/fr.yml +1 -1
  154. data/lib/locales/hy.yml +47 -2
  155. data/lib/locales/ja.yml +16 -0
  156. data/lib/locales/pt-BR.yml +4 -1
  157. data/lib/locales/vi.yml +1 -1
  158. data/lib/locales/zh-CN.yml +3 -6
  159. data/lib/locales/zh-TW.yml +2 -2
  160. metadata +62 -110
  161. data/lib/faker/default/creature.rb +0 -6
  162. data/lib/faker/default/football.rb +0 -27
  163. data/lib/faker/default/games.rb +0 -6
  164. data/lib/faker/default/japanese_media.rb +0 -6
  165. data/lib/faker/default/movies.rb +0 -6
  166. data/lib/faker/default/tv_shows.rb +0 -6
  167. data/lib/faker/deprecate/aqua_teen_hunger_force.rb +0 -15
  168. data/lib/faker/deprecate/back_to_the_future.rb +0 -25
  169. data/lib/faker/deprecate/bitcoin.rb +0 -20
  170. data/lib/faker/deprecate/bojack_horseman.rb +0 -25
  171. data/lib/faker/deprecate/breaking_bad.rb +0 -20
  172. data/lib/faker/deprecate/buffy.rb +0 -35
  173. data/lib/faker/deprecate/cat.rb +0 -25
  174. data/lib/faker/deprecate/community.rb +0 -20
  175. data/lib/faker/deprecate/dog.rb +0 -50
  176. data/lib/faker/deprecate/dota.rb +0 -35
  177. data/lib/faker/deprecate/dr_who.rb +0 -45
  178. data/lib/faker/deprecate/dragon_ball.rb +0 -15
  179. data/lib/faker/deprecate/dumb_and_dumber.rb +0 -25
  180. data/lib/faker/deprecate/dune.rb +0 -35
  181. data/lib/faker/deprecate/elder_scrolls.rb +0 -50
  182. data/lib/faker/deprecate/ethereum.rb +0 -15
  183. data/lib/faker/deprecate/fallout.rb +0 -30
  184. data/lib/faker/deprecate/family_guy.rb +0 -25
  185. data/lib/faker/deprecate/famous_last_words.rb +0 -15
  186. data/lib/faker/deprecate/friends.rb +0 -25
  187. data/lib/faker/deprecate/game_of_thrones.rb +0 -35
  188. data/lib/faker/deprecate/harry_potter.rb +0 -40
  189. data/lib/faker/deprecate/heroes_of_the_storm.rb +0 -30
  190. data/lib/faker/deprecate/hey_arnold.rb +0 -25
  191. data/lib/faker/deprecate/hitchhikers_guide_to_the_galaxy.rb +0 -44
  192. data/lib/faker/deprecate/hobbit.rb +0 -30
  193. data/lib/faker/deprecate/how_i_met_your_mother.rb +0 -30
  194. data/lib/faker/deprecate/league_of_legends.rb +0 -40
  195. data/lib/faker/deprecate/lebowski.rb +0 -25
  196. data/lib/faker/deprecate/lord_of_the_rings.rb +0 -25
  197. data/lib/faker/deprecate/lovecraft.rb +0 -65
  198. data/lib/faker/deprecate/matz.rb +0 -15
  199. data/lib/faker/deprecate/michael_scott.rb +0 -15
  200. data/lib/faker/deprecate/most_interesting_man_in_the_world.rb +0 -15
  201. data/lib/faker/deprecate/myst.rb +0 -35
  202. data/lib/faker/deprecate/new_girl.rb +0 -20
  203. data/lib/faker/deprecate/one_piece.rb +0 -40
  204. data/lib/faker/deprecate/overwatch.rb +0 -25
  205. data/lib/faker/deprecate/parks_and_rec.rb +0 -20
  206. data/lib/faker/deprecate/pokemon.rb +0 -25
  207. data/lib/faker/deprecate/princess_bride.rb +0 -20
  208. data/lib/faker/deprecate/rick_and_morty.rb +0 -25
  209. data/lib/faker/deprecate/robin.rb +0 -15
  210. data/lib/faker/deprecate/rock_band.rb +0 -15
  211. data/lib/faker/deprecate/ru_paul.rb +0 -20
  212. data/lib/faker/deprecate/seinfeld.rb +0 -25
  213. data/lib/faker/deprecate/shakespeare.rb +0 -50
  214. data/lib/faker/deprecate/silicon_valley.rb +0 -50
  215. data/lib/faker/deprecate/simpsons.rb +0 -25
  216. data/lib/faker/deprecate/singular_siegler.rb +0 -15
  217. data/lib/faker/deprecate/south_park.rb +0 -20
  218. data/lib/faker/deprecate/star_trek.rb +0 -30
  219. data/lib/faker/deprecate/star_wars.rb +0 -95
  220. data/lib/faker/deprecate/stargate.rb +0 -25
  221. data/lib/faker/deprecate/stranger_things.rb +0 -20
  222. data/lib/faker/deprecate/sword_art_online.rb +0 -30
  223. data/lib/faker/deprecate/tezos.rb +0 -33
  224. data/lib/faker/deprecate/the_fresh_prince_of_bel_air.rb +0 -25
  225. data/lib/faker/deprecate/the_it_crowd.rb +0 -30
  226. data/lib/faker/deprecate/the_thick_of_it.rb +0 -25
  227. data/lib/faker/deprecate/twin_peaks.rb +0 -25
  228. data/lib/faker/deprecate/umphreys_mcgee.rb +0 -15
  229. data/lib/faker/deprecate/v_for_vendetta.rb +0 -25
  230. data/lib/faker/deprecate/venture_bros.rb +0 -30
  231. data/lib/faker/deprecate/witcher.rb +0 -40
  232. data/lib/faker/deprecate/world_of_warcraft.rb +0 -20
  233. data/lib/faker/deprecate/yoda.rb +0 -16
  234. data/lib/faker/deprecate/zelda.rb +0 -30
@@ -23,7 +23,7 @@ module Faker
23
23
  fetch('demographic.sex')
24
24
  end
25
25
 
26
- def height(unit = :metric)
26
+ def height(unit: :metric)
27
27
  case unit
28
28
  when :imperial
29
29
  inches = rand_in_range(57, 86)
@@ -4,7 +4,7 @@ module Faker
4
4
  class Device < Base
5
5
  class << self
6
6
  def build_number
7
- Faker::Number.between(1, 500)
7
+ Faker::Number.between(from: 1, to: 500)
8
8
  end
9
9
 
10
10
  def manufacturer
@@ -24,7 +24,7 @@ module Faker
24
24
  end
25
25
 
26
26
  def version
27
- Faker::Number.between(1, 1000)
27
+ Faker::Number.between(from: 1, to: 1000)
28
28
  end
29
29
  end
30
30
  end
@@ -9,7 +9,7 @@ module Faker
9
9
  def british_driving_licence(last_name: Faker::Name.last_name,
10
10
  initials: Faker::Name.initials,
11
11
  gender: random_gender,
12
- date_of_birth: Faker::Date.birthday(18, 65))
12
+ date_of_birth: Faker::Date.birthday(min_age: 18, max_age: 65))
13
13
  [
14
14
  gb_licence_padding(last_name, 5),
15
15
  gb_licence_year(date_of_birth, gender),
@@ -19,7 +19,7 @@ module Faker
19
19
  end
20
20
 
21
21
  def northern_irish_driving_licence
22
- Faker::Number.number(8)
22
+ Faker::Number.number(digits: 8).to_s
23
23
  end
24
24
 
25
25
  def uk_driving_licence(*args)
@@ -5,8 +5,6 @@ module Faker
5
5
  flexible :educator
6
6
 
7
7
  class << self
8
- extend Gem::Deprecate
9
-
10
8
  def university
11
9
  "#{parse('educator.name')} #{fetch('educator.tertiary.type')}"
12
10
  end
@@ -16,7 +14,6 @@ module Faker
16
14
  end
17
15
 
18
16
  alias course degree
19
- deprecate :course, :course_name, 2018, 10
20
17
 
21
18
  def subject
22
19
  fetch('educator.tertiary.degree.subject')
@@ -3,6 +3,15 @@
3
3
  module Faker
4
4
  class File < Base
5
5
  class << self
6
+ def dir(segment_count: 3, root: nil, directory_separator: '/')
7
+ Array
8
+ .new(segment_count) { Faker::Internet.slug }
9
+ .unshift(root)
10
+ .compact
11
+ .join(directory_separator)
12
+ .squeeze(directory_separator)
13
+ end
14
+
6
15
  def extension
7
16
  fetch('file.extension')
8
17
  end
@@ -11,8 +20,8 @@ module Faker
11
20
  fetch('file.mime_type')
12
21
  end
13
22
 
14
- def file_name(dir = nil, name = nil, ext = nil, directory_separator = '/')
15
- dir ||= Faker::Internet.slug
23
+ def file_name(dir: nil, name: nil, ext: nil, directory_separator: '/')
24
+ dir ||= dir(segment_count: 1)
16
25
  name ||= Faker::Lorem.word.downcase
17
26
  ext ||= extension
18
27
 
@@ -3,12 +3,12 @@
3
3
  module Faker
4
4
  class Fillmurray < Base
5
5
  class << self
6
- def image(grayscale = false, width = 200, height = 200)
6
+ def image(grayscale: false, width: 200, height: 200)
7
7
  raise ArgumentError, 'Width should be a number' unless width.to_s =~ /^\d+$/
8
8
  raise ArgumentError, 'Height should be a number' unless height.to_s =~ /^\d+$/
9
9
  raise ArgumentError, 'Grayscale should be a boolean' unless [true, false].include?(grayscale)
10
10
 
11
- grayscale == true ? "https://fillmurray.com/g/#{width}/#{height}" : "https://fillmurray.com/#{width}/#{height}"
11
+ "https://www.fillmurray.com#{'/g' if grayscale == true}/#{width}/#{height}"
12
12
  end
13
13
  end
14
14
  end
@@ -26,7 +26,7 @@ module Faker
26
26
  template.gsub('L', luhn_digit.to_s)
27
27
  end
28
28
 
29
- def vat_number(country = 'BR')
29
+ def vat_number(country: 'BR')
30
30
  numerify(fetch("finance.vat_number.#{country}"))
31
31
  rescue I18n::MissingTranslationData
32
32
  raise ArgumentError, "Could not find vat number for #{country}"
@@ -8,8 +8,8 @@ module Faker
8
8
  random_word =~ /\s/ ? word : random_word
9
9
  end
10
10
 
11
- def words(num = 3, supplemental = false, spaces_allowed = false)
12
- resolved_num = resolve(num)
11
+ def words(number: 3, supplemental: false, spaces_allowed: false)
12
+ resolved_num = resolve(number)
13
13
  word_list = (
14
14
  translate('faker.hipster.words') +
15
15
  (supplemental ? translate('faker.lorem.words') : [])
@@ -22,36 +22,36 @@ module Faker
22
22
  words.each_with_index { |w, i| words[i] = word if w =~ /\s/ }
23
23
  end
24
24
 
25
- def sentence(word_count = 4, supplemental = false, random_words_to_add = 6)
26
- words(word_count + rand(random_words_to_add.to_i).to_i, supplemental, true).join(' ').capitalize + '.'
25
+ def sentence(word_count: 4, supplemental: false, random_words_to_add: 6)
26
+ words(number: word_count + rand(random_words_to_add.to_i).to_i, supplemental: supplemental, spaces_allowed: true).join(' ').capitalize + '.'
27
27
  end
28
28
 
29
- def sentences(sentence_count = 3, supplemental = false)
29
+ def sentences(number: 3, supplemental: false)
30
30
  [].tap do |sentences|
31
- 1.upto(resolve(sentence_count)) do
32
- sentences << sentence(3, supplemental)
31
+ 1.upto(resolve(number)) do
32
+ sentences << sentence(word_count: 3, supplemental: supplemental)
33
33
  end
34
34
  end
35
35
  end
36
36
 
37
- def paragraph(sentence_count = 3, supplemental = false, random_sentences_to_add = 3)
38
- sentences(resolve(sentence_count) + rand(random_sentences_to_add.to_i).to_i, supplemental).join(' ')
37
+ def paragraph(sentence_count: 3, supplemental: false, random_sentences_to_add: 3)
38
+ sentences(number: resolve(sentence_count) + rand(random_sentences_to_add.to_i).to_i, supplemental: supplemental).join(' ')
39
39
  end
40
40
 
41
- def paragraphs(paragraph_count = 3, supplemental = false)
41
+ def paragraphs(number: 3, supplemental: false)
42
42
  [].tap do |paragraphs|
43
- 1.upto(resolve(paragraph_count)) do
44
- paragraphs << paragraph(3, supplemental)
43
+ 1.upto(resolve(number)) do
44
+ paragraphs << paragraph(sentence_count: 3, supplemental: supplemental)
45
45
  end
46
46
  end
47
47
  end
48
48
 
49
- def paragraph_by_chars(chars = 256, supplemental = false)
50
- paragraph = paragraph(3, supplemental)
49
+ def paragraph_by_chars(characters: 256, supplemental: false)
50
+ paragraph = paragraph(sentence_count: 3, supplemental: supplemental)
51
51
 
52
- paragraph += ' ' + paragraph(3, supplemental) while paragraph.length < chars
52
+ paragraph += ' ' + paragraph(sentence_count: 3, supplemental: supplemental) while paragraph.length < characters
53
53
 
54
- paragraph[0...chars - 1] + '.'
54
+ paragraph[0...characters - 1] + '.'
55
55
  end
56
56
  end
57
57
  end
@@ -12,6 +12,9 @@ module Faker
12
12
  ].freeze
13
13
  ZA_RACE_DIGIT = '8'
14
14
  ZA_CITIZENSHIP_DIGITS = %w[0 1].freeze
15
+ BRAZILIAN_ID_FORMAT = /(\d{1,2})(\d{3})(\d{3})([\dX])/
16
+ BRAZILIAN_ID_FROM = 10_000_000
17
+ BRAZILIAN_ID_TO = 99_999_999
15
18
 
16
19
  class << self
17
20
  def valid
@@ -29,7 +32,7 @@ module Faker
29
32
  end
30
33
 
31
34
  def spanish_citizen_number
32
- num = Faker::Number.number(8)
35
+ num = Faker::Number.number(digits: 8)
33
36
  mod = num.to_i % 23
34
37
  check = CHECKS[mod]
35
38
  "#{num}-#{check}"
@@ -37,7 +40,7 @@ module Faker
37
40
 
38
41
  def spanish_foreign_citizen_number
39
42
  code = 'XYZ'
40
- digits = Faker::Number.number(7)
43
+ digits = Faker::Number.number(digits: 7)
41
44
  prefix = code[rand(code.length)]
42
45
  prefix_val = 'XYZ'.index(prefix).to_s
43
46
  mod = "#{prefix_val}#{digits}".to_i % 23
@@ -48,7 +51,7 @@ module Faker
48
51
  def valid_south_african_id_number
49
52
  id_number = [
50
53
  Faker::Date.birthday.strftime('%y%m%d'),
51
- Faker::Number.number(4),
54
+ Faker::Number.number(digits: 4),
52
55
  ZA_CITIZENSHIP_DIGITS.sample(random: Faker::Config.random),
53
56
  ZA_RACE_DIGIT
54
57
  ].join
@@ -60,14 +63,14 @@ module Faker
60
63
 
61
64
  def invalid_south_african_id_number
62
65
  invalid_date_of_birth = [
63
- Faker::Number.number(2),
64
- Faker::Number.between(13, 99),
65
- Faker::Number.between(32, 99)
66
+ Faker::Number.number(digits: 2),
67
+ Faker::Number.between(from: 13, to: 99),
68
+ Faker::Number.between(from: 32, to: 99)
66
69
  ].map(&:to_s).join
67
70
 
68
71
  id_number = [
69
72
  invalid_date_of_birth,
70
- Faker::Number.number(4),
73
+ Faker::Number.number(digits: 4),
71
74
  ZA_CITIZENSHIP_DIGITS.sample(random: Faker::Config.random),
72
75
  ZA_RACE_DIGIT
73
76
  ].join
@@ -76,13 +79,24 @@ module Faker
76
79
  end
77
80
 
78
81
  def brazilian_citizen_number(formatted: false)
79
- digits = Faker::Number.leading_zero_number(9) until digits&.match(/(\d)((?!\1)\d)+/)
82
+ digits = Faker::Number.leading_zero_number(digits: 9) until digits&.match(/(\d)((?!\1)\d)+/)
80
83
  first_digit = brazilian_citizen_number_checksum_digit(digits)
81
84
  second_digit = brazilian_citizen_number_checksum_digit(digits + first_digit)
82
85
  number = [digits, first_digit, second_digit].join
83
86
  formatted ? format('%s.%s.%s-%s', *number.scan(/\d{2,3}/).flatten) : number
84
87
  end
85
88
 
89
+ alias brazilian_cpf brazilian_citizen_number
90
+
91
+ def brazilian_id(formatted: false)
92
+ digits = Faker::Number.between(to: BRAZILIAN_ID_FROM, from: BRAZILIAN_ID_TO).to_s
93
+ check_digit = brazilian_id_checksum_digit(digits)
94
+ number = [digits, check_digit].join
95
+ formatted ? format('%s.%s.%s-%s', *number.scan(BRAZILIAN_ID_FORMAT).flatten) : number
96
+ end
97
+
98
+ alias brazilian_rg brazilian_id
99
+
86
100
  private
87
101
 
88
102
  def south_african_id_checksum_digit(id_number)
@@ -104,13 +118,36 @@ module Faker
104
118
  end
105
119
 
106
120
  def brazilian_citizen_number_checksum_digit(digits)
107
- digit_sum = digits.chars.each_with_index.inject(0) do |acc, (digit, i)|
121
+ checksum = brazilian_document_checksum(digits)
122
+ brazilian_document_digit(checksum)
123
+ end
124
+
125
+ def brazilian_id_checksum_digit(digits)
126
+ checksum = brazilian_document_checksum(digits)
127
+ brazilian_document_digit(checksum, id: true)
128
+ end
129
+
130
+ def brazilian_document_checksum(digits)
131
+ digits.chars.each_with_index.inject(0) do |acc, (digit, i)|
108
132
  acc + digit.to_i * (digits.size + 1 - i)
109
133
  end * 10
110
- remainder = digit_sum % 11
134
+ end
135
+
136
+ def brazilian_document_digit(checksum, id = false)
137
+ remainder = checksum % 11
138
+ id ? brazilian_id_digit(remainder) : brazilian_citizen_number_digit(remainder)
139
+ end
140
+
141
+ def brazilian_citizen_number_digit(remainder)
111
142
  remainder == 10 ? '0' : remainder.to_s
112
143
  end
113
144
 
145
+ def brazilian_id_digit(remainder)
146
+ subtraction = 11 - remainder.to_i
147
+ digits = { 10 => 'X', 11 => '0' }
148
+ digits.include?(subtraction) ? digits[subtraction] : subtraction.to_s
149
+ end
150
+
114
151
  def _translate(key)
115
152
  parse("id_number.#{key}")
116
153
  end
@@ -3,23 +3,23 @@
3
3
  module Faker
4
4
  class Internet < Base
5
5
  class << self
6
- def email(name = nil, *separators)
6
+ def email(name: nil, separators: nil)
7
7
  if separators
8
- [username(name, separators), domain_name].join('@')
8
+ [username(specifier: name, separators: separators), domain_name].join('@')
9
9
  else
10
- [username(name), domain_name].join('@')
10
+ [username(specifier: name), domain_name].join('@')
11
11
  end
12
12
  end
13
13
 
14
- def free_email(name = nil)
15
- [username(name), fetch('internet.free_email')].join('@')
14
+ def free_email(name: nil)
15
+ [username(specifier: name), fetch('internet.free_email')].join('@')
16
16
  end
17
17
 
18
- def safe_email(name = nil)
19
- [username(name), 'example.' + sample(%w[org com net])].join('@')
18
+ def safe_email(name: nil)
19
+ [username(specifier: name), 'example.' + sample(%w[org com net])].join('@')
20
20
  end
21
21
 
22
- def username(specifier = nil, separators = %w[. _])
22
+ def username(specifier: nil, separators: %w[. _])
23
23
  with_locale(:en) do
24
24
  return shuffle(specifier.scan(/[[:word:]]+/)).join(sample(separators)).downcase if specifier.respond_to?(:scan)
25
25
 
@@ -30,7 +30,7 @@ module Faker
30
30
  tries = 0 # Don't try forever in case we get something like 1_000_000.
31
31
  result = nil
32
32
  loop do
33
- result = username(nil, separators)
33
+ result = username(specifier: nil, separators: separators)
34
34
  tries += 1
35
35
  break unless result.length < specifier && tries < 7
36
36
  end
@@ -39,7 +39,7 @@ module Faker
39
39
  tries = 0
40
40
  result = nil
41
41
  loop do
42
- result = username(specifier.min, separators)
42
+ result = username(specifier: specifier.min, separators: separators)
43
43
  tries += 1
44
44
  break unless !specifier.include?(result.length) && tries < 7
45
45
  end
@@ -55,12 +55,13 @@ module Faker
55
55
  end
56
56
  end
57
57
 
58
- def password(min_length = 8, max_length = 16, mix_case = true, special_chars = false)
59
- temp = Lorem.characters(min_length)
58
+ def password(min_length: 8, max_length: 16, mix_case: true, special_characters: false)
59
+ temp = Lorem.characters(number: min_length)
60
60
  diff_length = max_length - min_length
61
+
61
62
  if diff_length.positive?
62
63
  diff_rand = rand(diff_length + 1)
63
- temp += Lorem.characters(diff_rand)
64
+ temp += Lorem.characters(number: diff_rand)
64
65
  end
65
66
 
66
67
  if mix_case
@@ -69,7 +70,7 @@ module Faker
69
70
  end
70
71
  end
71
72
 
72
- if special_chars
73
+ if special_characters
73
74
  chars = %w[! @ # $ % ^ & *]
74
75
  rand(1..min_length).times do |i|
75
76
  temp[i] = chars[rand(chars.length)]
@@ -79,11 +80,15 @@ module Faker
79
80
  temp
80
81
  end
81
82
 
82
- def domain_name
83
- with_locale(:en) { [Char.prepare(domain_word), domain_suffix].join('.') }
83
+ def domain_name(subdomain: false)
84
+ with_locale(:en) do
85
+ domain_elements = [Char.prepare(domain_word), domain_suffix]
86
+ domain_elements.unshift(Char.prepare(domain_word)) if subdomain
87
+ domain_elements.join('.')
88
+ end
84
89
  end
85
90
 
86
- def fix_umlauts(string = '')
91
+ def fix_umlauts(string: '')
87
92
  Char.fix_umlauts(string)
88
93
  end
89
94
 
@@ -95,7 +100,7 @@ module Faker
95
100
  fetch('internet.domain_suffix')
96
101
  end
97
102
 
98
- def mac_address(prefix = '')
103
+ def mac_address(prefix: '')
99
104
  prefix_digits = prefix.split(':').map { |d| d.to_i(16) }
100
105
  address_digits = Array.new((6 - prefix_digits.size)) { rand(256) }
101
106
  (prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
@@ -169,25 +174,33 @@ module Faker
169
174
  "#{ip_v6_address}/#{rand(1..127)}"
170
175
  end
171
176
 
172
- def url(host = domain_name, path = "/#{username}", scheme = 'http')
177
+ def url(host: domain_name, path: "/#{username}", scheme: 'http')
173
178
  "#{scheme}://#{host}#{path}"
174
179
  end
175
180
 
176
- def slug(words = nil, glue = nil)
181
+ def slug(words: nil, glue: nil)
177
182
  glue ||= sample(%w[- _])
178
- (words || Faker::Lorem.words(2).join(' ')).delete(',.').gsub(' ', glue).downcase
183
+ (words || Faker::Lorem.words(number: 2).join(' ')).delete(',.').gsub(' ', glue).downcase
179
184
  end
180
185
 
181
186
  def device_token
182
187
  shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join
183
188
  end
184
189
 
185
- def user_agent(vendor = nil)
190
+ def user_agent(vendor: nil)
186
191
  agent_hash = translate('faker.internet.user_agent')
187
192
  agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)]
188
193
  sample(agents)
189
194
  end
190
195
 
196
+ def uuid
197
+ # borrowed from: https://github.com/ruby/ruby/blob/d48783bb0236db505fe1205d1d9822309de53a36/lib/securerandom.rb#L250
198
+ ary = Faker::Config.random.bytes(16).unpack('NnnnnN')
199
+ ary[2] = (ary[2] & 0x0fff) | 0x4000
200
+ ary[3] = (ary[3] & 0x3fff) | 0x8000
201
+ '%08x-%04x-%04x-%04x-%04x%08x' % ary # rubocop:disable Style/FormatString
202
+ end
203
+
191
204
  alias user_name username
192
205
  end
193
206
  end
@@ -6,13 +6,13 @@ module Faker
6
6
 
7
7
  class << self
8
8
  # Generate random amount between values with 2 decimals
9
- def amount_between(from = 0, to = 0)
9
+ def amount_between(from: 0, to: 0)
10
10
  Faker::Base.rand_in_range(from, to).round(2)
11
11
  end
12
12
 
13
13
  # International bank slip reference https://en.wikipedia.org/wiki/Creditor_Reference
14
14
  # ref is optional so that we can create unit tests
15
- def creditor_reference(ref = '')
15
+ def creditor_reference(ref: '')
16
16
  ref = reference if ref.empty?
17
17
 
18
18
  'RF' + iban_checksum('RF', ref) + ref
@@ -20,7 +20,7 @@ module Faker
20
20
 
21
21
  # Payment references have some rules in certain countries
22
22
  # ref is optional so that we can create unit tests
23
- def reference(ref = '')
23
+ def reference(ref: '')
24
24
  pattern = fetch('invoice.reference.pattern')
25
25
 
26
26
  ref = Base.regexify(/#{pattern}/) if ref.empty?