faker 2.1.2 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +113 -7
  3. data/README.md +4 -4
  4. data/lib/faker.rb +56 -1
  5. data/lib/faker/blockchain/aeternity.rb +70 -0
  6. data/lib/faker/blockchain/bitcoin.rb +26 -0
  7. data/lib/faker/blockchain/ethereum.rb +10 -0
  8. data/lib/faker/blockchain/tezos.rb +62 -6
  9. data/lib/faker/books/book.rb +36 -0
  10. data/lib/faker/books/culture_series.rb +49 -0
  11. data/lib/faker/books/dune.rb +66 -5
  12. data/lib/faker/books/lovecraft.rb +210 -7
  13. data/lib/faker/creature/animal.rb +9 -0
  14. data/lib/faker/creature/cat.rb +27 -0
  15. data/lib/faker/creature/dog.rb +72 -0
  16. data/lib/faker/creature/horse.rb +18 -0
  17. data/lib/faker/default/address.rb +25 -5
  18. data/lib/faker/default/alphanumeric.rb +56 -7
  19. data/lib/faker/default/app.rb +54 -1
  20. data/lib/faker/default/appliance.rb +18 -0
  21. data/lib/faker/default/artist.rb +9 -0
  22. data/lib/faker/default/avatar.rb +42 -1
  23. data/lib/faker/default/bank.rb +10 -2
  24. data/lib/faker/default/boolean.rb +16 -1
  25. data/lib/faker/default/chile_rut.rb +12 -2
  26. data/lib/faker/default/code.rb +16 -3
  27. data/lib/faker/default/commerce.rb +17 -3
  28. data/lib/faker/default/company.rb +10 -2
  29. data/lib/faker/default/crypto_coin.rb +15 -3
  30. data/lib/faker/default/date.rb +37 -5
  31. data/lib/faker/default/demographic.rb +5 -1
  32. data/lib/faker/default/dessert.rb +27 -0
  33. data/lib/faker/default/device.rb +54 -0
  34. data/lib/faker/default/driving_licence.rb +10 -4
  35. data/lib/faker/default/electrical_components.rb +27 -0
  36. data/lib/faker/default/file.rb +19 -2
  37. data/lib/faker/default/fillmurray.rb +9 -1
  38. data/lib/faker/default/finance.rb +5 -1
  39. data/lib/faker/default/gender.rb +18 -0
  40. data/lib/faker/default/greek_philosophers.rb +18 -0
  41. data/lib/faker/default/hacker.rb +59 -1
  42. data/lib/faker/default/hipster.rb +45 -6
  43. data/lib/faker/default/house.rb +18 -0
  44. data/lib/faker/default/id_number.rb +11 -3
  45. data/lib/faker/default/industry_segments.rb +36 -0
  46. data/lib/faker/default/internet.rb +94 -13
  47. data/lib/faker/default/invoice.rb +16 -3
  48. data/lib/faker/default/json.rb +19 -2
  49. data/lib/faker/default/lorem.rb +81 -10
  50. data/lib/faker/default/lorem_flickr.rb +38 -5
  51. data/lib/faker/default/lorem_pixel.rb +10 -1
  52. data/lib/faker/default/markdown.rb +6 -1
  53. data/lib/faker/default/marketing.rb +9 -0
  54. data/lib/faker/default/measurement.rb +40 -8
  55. data/lib/faker/default/military.rb +45 -0
  56. data/lib/faker/default/name.rb +5 -1
  57. data/lib/faker/default/nato_phonetic_alphabet.rb +9 -0
  58. data/lib/faker/default/nhs.rb +5 -1
  59. data/lib/faker/default/number.rb +56 -11
  60. data/lib/faker/default/omniauth.rb +92 -9
  61. data/lib/faker/default/phone_number.rb +5 -1
  62. data/lib/faker/default/placeholdit.rb +11 -1
  63. data/lib/faker/default/programming_language.rb +18 -0
  64. data/lib/faker/default/relationship.rb +5 -1
  65. data/lib/faker/default/science.rb +27 -0
  66. data/lib/faker/default/source.rb +59 -3
  67. data/lib/faker/default/string.rb +5 -1
  68. data/lib/faker/default/stripe.rb +20 -4
  69. data/lib/faker/default/subscription.rb +45 -0
  70. data/lib/faker/default/superhero.rb +45 -0
  71. data/lib/faker/default/time.rb +37 -4
  72. data/lib/faker/default/twitter.rb +32 -18
  73. data/lib/faker/default/types.rb +27 -5
  74. data/lib/faker/default/vehicle.rb +17 -4
  75. data/lib/faker/default/world_cup.rb +11 -2
  76. data/lib/faker/games/dota.rb +52 -1
  77. data/lib/faker/games/elder_scrolls.rb +72 -0
  78. data/lib/faker/games/fallout.rb +37 -0
  79. data/lib/faker/games/game.rb +27 -0
  80. data/lib/faker/games/half_life.rb +27 -0
  81. data/lib/faker/games/heroes.rb +27 -0
  82. data/lib/faker/games/heroes_of_the_storm.rb +36 -0
  83. data/lib/faker/games/league_of_legends.rb +54 -0
  84. data/lib/faker/games/myst.rb +45 -0
  85. data/lib/faker/games/overwatch.rb +27 -0
  86. data/lib/faker/games/pokemon.rb +27 -0
  87. data/lib/faker/games/sonic_the_hedgehog.rb +27 -0
  88. data/lib/faker/games/super_smash_bros.rb +18 -0
  89. data/lib/faker/games/witcher.rb +54 -0
  90. data/lib/faker/games/world_of_warcraft.rb +18 -0
  91. data/lib/faker/games/zelda.rb +36 -0
  92. data/lib/faker/japanese_media/dragon_ball.rb +9 -0
  93. data/lib/faker/japanese_media/sword_art_online.rb +36 -0
  94. data/lib/faker/movies/hobbit.rb +37 -0
  95. data/lib/faker/movies/movie.rb +9 -0
  96. data/lib/faker/movies/star_wars.rb +6 -4
  97. data/lib/faker/music/grateful_dead.rb +18 -0
  98. data/lib/faker/music/phish.rb +9 -0
  99. data/lib/faker/music/rock_band.rb +9 -0
  100. data/lib/faker/tv_shows/breaking_bad.rb +18 -0
  101. data/lib/faker/version.rb +1 -1
  102. data/lib/locales/en-CA.yml +1 -1
  103. data/lib/locales/en/science.yml +1 -1
  104. data/lib/locales/ja.yml +8 -9
  105. metadata +31 -14
@@ -18,7 +18,16 @@ module Faker
18
18
  transport].freeze
19
19
 
20
20
  # rubocop:disable Metrics/ParameterLists
21
- def image(size: '300x300', is_gray: false, category: nil, number: nil, text: nil, secure: true)
21
+ def image(legacy_size = NOT_GIVEN, legacy_is_gray = NOT_GIVEN, legacy_category = NOT_GIVEN, legacy_number = NOT_GIVEN, legacy_text = NOT_GIVEN, legacy_secure = NOT_GIVEN, size: '300x300', is_gray: false, category: nil, number: nil, text: nil, secure: true)
22
+ warn_for_deprecated_arguments do |keywords|
23
+ keywords << :size if legacy_size != NOT_GIVEN
24
+ keywords << :is_gray if legacy_is_gray != NOT_GIVEN
25
+ keywords << :category if legacy_category != NOT_GIVEN
26
+ keywords << :number if legacy_number != NOT_GIVEN
27
+ keywords << :text if legacy_text != NOT_GIVEN
28
+ keywords << :secure if legacy_secure != NOT_GIVEN
29
+ end
30
+
22
31
  raise ArgumentError, 'Size should be specified in format 300x300' unless size =~ /^[0-9]+x[0-9]+$/
23
32
  raise ArgumentError, "Supported categories are #{SUPPORTED_CATEGORIES.join(', ')}" unless category.nil? || SUPPORTED_CATEGORIES.include?(category)
24
33
  raise ArgumentError, 'Category required when number is passed' if !number.nil? && category.nil?
@@ -59,7 +59,12 @@ module Faker
59
59
  send(method_list[rand(0..method_list.length - 1)])
60
60
  end
61
61
 
62
- def sandwich(sentences: 3, repeat: 1)
62
+ def sandwich(legacy_sentences = NOT_GIVEN, legacy_repeat = NOT_GIVEN, sentences: 3, repeat: 1)
63
+ warn_for_deprecated_arguments do |keywords|
64
+ keywords << :sentences if legacy_sentences != NOT_GIVEN
65
+ keywords << :repeat if legacy_repeat != NOT_GIVEN
66
+ end
67
+
63
68
  text_block = []
64
69
  text_block << headers
65
70
  repeat.times do
@@ -5,6 +5,15 @@ module Faker
5
5
  flexible :marketing
6
6
 
7
7
  class << self
8
+ ##
9
+ # Produces the name of a video game console or platform.
10
+ #
11
+ # @return [String]
12
+ #
13
+ # @example
14
+ # Faker::Marketing.buzzwords #=> "rubber meets the road"
15
+ #
16
+ # @faker.version 1.9.4
8
17
  def buzzwords
9
18
  fetch('marketing.buzzwords')
10
19
  end
@@ -6,35 +6,67 @@ module Faker
6
6
  ALL = 'all'
7
7
  NONE = 'none'
8
8
 
9
- def height(amount: rand(10))
9
+ def height(legacy_amount = NOT_GIVEN, amount: rand(10))
10
+ warn_for_deprecated_arguments do |keywords|
11
+ keywords << :amount if legacy_amount != NOT_GIVEN
12
+ end
13
+
10
14
  define_measurement_locale(amount, 'height')
11
15
  end
12
16
 
13
- def length(amount: rand(10))
17
+ def length(legacy_amount = NOT_GIVEN, amount: rand(10))
18
+ warn_for_deprecated_arguments do |keywords|
19
+ keywords << :amount if legacy_amount != NOT_GIVEN
20
+ end
21
+
14
22
  define_measurement_locale(amount, 'length')
15
23
  end
16
24
 
17
- def volume(amount: rand(10))
25
+ def volume(legacy_amount = NOT_GIVEN, amount: rand(10))
26
+ warn_for_deprecated_arguments do |keywords|
27
+ keywords << :amount if legacy_amount != NOT_GIVEN
28
+ end
29
+
18
30
  define_measurement_locale(amount, 'volume')
19
31
  end
20
32
 
21
- def weight(amount: rand(10))
33
+ def weight(legacy_amount = NOT_GIVEN, amount: rand(10))
34
+ warn_for_deprecated_arguments do |keywords|
35
+ keywords << :amount if legacy_amount != NOT_GIVEN
36
+ end
37
+
22
38
  define_measurement_locale(amount, 'weight')
23
39
  end
24
40
 
25
- def metric_height(amount: rand(10))
41
+ def metric_height(legacy_amount = NOT_GIVEN, amount: rand(10))
42
+ warn_for_deprecated_arguments do |keywords|
43
+ keywords << :amount if legacy_amount != NOT_GIVEN
44
+ end
45
+
26
46
  define_measurement_locale(amount, 'metric_height')
27
47
  end
28
48
 
29
- def metric_length(amount: rand(10))
49
+ def metric_length(legacy_amount = NOT_GIVEN, amount: rand(10))
50
+ warn_for_deprecated_arguments do |keywords|
51
+ keywords << :amount if legacy_amount != NOT_GIVEN
52
+ end
53
+
30
54
  define_measurement_locale(amount, 'metric_length')
31
55
  end
32
56
 
33
- def metric_volume(amount: rand(10))
57
+ def metric_volume(legacy_amount = NOT_GIVEN, amount: rand(10))
58
+ warn_for_deprecated_arguments do |keywords|
59
+ keywords << :amount if legacy_amount != NOT_GIVEN
60
+ end
61
+
34
62
  define_measurement_locale(amount, 'metric_volume')
35
63
  end
36
64
 
37
- def metric_weight(amount: rand(10))
65
+ def metric_weight(legacy_amount = NOT_GIVEN, amount: rand(10))
66
+ warn_for_deprecated_arguments do |keywords|
67
+ keywords << :amount if legacy_amount != NOT_GIVEN
68
+ end
69
+
38
70
  define_measurement_locale(amount, 'metric_weight')
39
71
  end
40
72
 
@@ -3,22 +3,67 @@
3
3
  module Faker
4
4
  class Military < Base
5
5
  class << self
6
+ ##
7
+ # Produces a rank in the U.S. Army.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::Military.army_rank #=> "Staff Sergeant"
13
+ #
14
+ # @faker.version 1.9.0
6
15
  def army_rank
7
16
  fetch('military.army_rank')
8
17
  end
9
18
 
19
+ ##
20
+ # Produces a rank in the U.S. Marines.
21
+ #
22
+ # @return [String]
23
+ #
24
+ # @example
25
+ # Faker::Military.marines_rank #=> "Gunnery Sergeant"
26
+ #
27
+ # @faker.version 1.9.0
10
28
  def marines_rank
11
29
  fetch('military.marines_rank')
12
30
  end
13
31
 
32
+ ##
33
+ # Produces a rank in the U.S. Navy.
34
+ #
35
+ # @return [String]
36
+ #
37
+ # @example
38
+ # Faker::Military.navy_rank #=> "Seaman"
39
+ #
40
+ # @faker.version 1.9.0
14
41
  def navy_rank
15
42
  fetch('military.navy_rank')
16
43
  end
17
44
 
45
+ ##
46
+ # Produces a rank in the U.S. Air Force.
47
+ #
48
+ # @return [String]
49
+ #
50
+ # @example
51
+ # Faker::Military.air_force_rank #=> "Captain"
52
+ #
53
+ # @faker.version 1.9.0
18
54
  def air_force_rank
19
55
  fetch('military.air_force_rank')
20
56
  end
21
57
 
58
+ ##
59
+ # Produces a U.S. Department of Defense Paygrade.
60
+ #
61
+ # @return [String]
62
+ #
63
+ # @example
64
+ # Faker::Military.dod_paygrade #=> "E-6"
65
+ #
66
+ # @faker.version 1.9.0
22
67
  def dod_paygrade
23
68
  fetch('military.dod_paygrade')
24
69
  end
@@ -46,7 +46,11 @@ module Faker
46
46
  fetch('name.suffix')
47
47
  end
48
48
 
49
- def initials(number: 3)
49
+ def initials(legacy_number = NOT_GIVEN, number: 3)
50
+ warn_for_deprecated_arguments do |keywords|
51
+ keywords << :number if legacy_number != NOT_GIVEN
52
+ end
53
+
50
54
  (0...number).map { rand(65..90).chr }.join
51
55
  end
52
56
  end
@@ -3,6 +3,15 @@
3
3
  module Faker
4
4
  class NatoPhoneticAlphabet < Base
5
5
  class << self
6
+ ##
7
+ # Produces a code word from the NATO phonetic alphabet.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::NatoPhoneticAlphabet.code_word #=> "Hotel"
13
+ #
14
+ # @faker.version 1.9.0
6
15
  def code_word
7
16
  fetch('nato_phonetic_alphabet.code_word')
8
17
  end
@@ -15,7 +15,11 @@ module Faker
15
15
  .join('')
16
16
  end
17
17
 
18
- def check_digit(number: 0)
18
+ def check_digit(legacy_number = NOT_GIVEN, number: 0)
19
+ warn_for_deprecated_arguments do |keywords|
20
+ keywords << :number if legacy_number != NOT_GIVEN
21
+ end
22
+
19
23
  sum = 0
20
24
  number.to_s.chars.each_with_index do |digit, idx|
21
25
  position = idx + 1
@@ -3,19 +3,31 @@
3
3
  module Faker
4
4
  class Number < Base
5
5
  class << self
6
- def number(digits: 10)
6
+ def number(legacy_digits = NOT_GIVEN, digits: 10)
7
+ warn_for_deprecated_arguments do |keywords|
8
+ keywords << :digits if legacy_digits != NOT_GIVEN
9
+ end
10
+
7
11
  return if digits < 1
8
- return 0 if digits == 1
12
+ return rand(0..9).round if digits == 1
9
13
 
10
14
  # Ensure the first digit is not zero
11
15
  ([non_zero_digit] + generate(digits - 1)).join.to_i
12
16
  end
13
17
 
14
- def leading_zero_number(digits: 10)
18
+ def leading_zero_number(legacy_digits = NOT_GIVEN, digits: 10)
19
+ warn_for_deprecated_arguments do |keywords|
20
+ keywords << :digits if legacy_digits != NOT_GIVEN
21
+ end
22
+
15
23
  '0' + (2..digits).collect { digit }.join
16
24
  end
17
25
 
18
- def decimal_part(digits: 10)
26
+ def decimal_part(legacy_digits = NOT_GIVEN, digits: 10)
27
+ warn_for_deprecated_arguments do |keywords|
28
+ keywords << :digits if legacy_digits != NOT_GIVEN
29
+ end
30
+
19
31
  num = ''
20
32
  if digits > 1
21
33
  num = non_zero_digit
@@ -24,7 +36,12 @@ module Faker
24
36
  leading_zero_number(digits: digits) + num.to_s
25
37
  end
26
38
 
27
- def decimal(l_digits: 5, r_digits: 2)
39
+ def decimal(legacy_l_digits = NOT_GIVEN, legacy_r_digits = NOT_GIVEN, l_digits: 5, r_digits: 2)
40
+ warn_for_deprecated_arguments do |keywords|
41
+ keywords << :l_digits if legacy_l_digits != NOT_GIVEN
42
+ keywords << :r_digits if legacy_r_digits != NOT_GIVEN
43
+ end
44
+
28
45
  l_d = number(digits: l_digits)
29
46
  r_d = if r_digits == 1
30
47
  generate(r_digits)
@@ -44,34 +61,62 @@ module Faker
44
61
  rand(10)
45
62
  end
46
63
 
47
- def hexadecimal(digits: 6)
64
+ def hexadecimal(legacy_digits = NOT_GIVEN, digits: 6)
65
+ warn_for_deprecated_arguments do |keywords|
66
+ keywords << :digits if legacy_digits != NOT_GIVEN
67
+ end
68
+
48
69
  hex = ''
49
70
  digits.times { hex += rand(15).to_s(16) }
50
71
  hex
51
72
  end
52
73
 
53
- def normal(mean: 1, standard_deviation: 1)
74
+ def normal(legacy_mean = NOT_GIVEN, legacy_standard_deviation = NOT_GIVEN, mean: 1, standard_deviation: 1)
75
+ warn_for_deprecated_arguments do |keywords|
76
+ keywords << :mean if legacy_mean != NOT_GIVEN
77
+ keywords << :standard_deviation if legacy_standard_deviation != NOT_GIVEN
78
+ end
79
+
54
80
  theta = 2 * Math::PI * rand
55
81
  rho = Math.sqrt(-2 * Math.log(1 - rand))
56
82
  scale = standard_deviation * rho
57
83
  mean + scale * Math.cos(theta)
58
84
  end
59
85
 
60
- def between(from: 1.00, to: 5000.00)
86
+ def between(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from: 1.00, to: 5000.00)
87
+ warn_for_deprecated_arguments do |keywords|
88
+ keywords << :from if legacy_from != NOT_GIVEN
89
+ keywords << :to if legacy_to != NOT_GIVEN
90
+ end
91
+
61
92
  Faker::Base.rand_in_range(from, to)
62
93
  end
63
94
 
64
- def within(range: 1.00..5000.00)
95
+ def within(legacy_range = NOT_GIVEN, range: 1.00..5000.00)
96
+ warn_for_deprecated_arguments do |keywords|
97
+ keywords << :range if legacy_range != NOT_GIVEN
98
+ end
99
+
65
100
  between(from: range.min, to: range.max)
66
101
  end
67
102
 
68
- def positive(from: 1.00, to: 5000.00)
103
+ def positive(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from: 1.00, to: 5000.00)
104
+ warn_for_deprecated_arguments do |keywords|
105
+ keywords << :from if legacy_from != NOT_GIVEN
106
+ keywords << :to if legacy_to != NOT_GIVEN
107
+ end
108
+
69
109
  random_number = between(from: from, to: to)
70
110
 
71
111
  greater_than_zero(random_number)
72
112
  end
73
113
 
74
- def negative(from: -5000.00, to: -1.00)
114
+ def negative(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from: -5000.00, to: -1.00)
115
+ warn_for_deprecated_arguments do |keywords|
116
+ keywords << :from if legacy_from != NOT_GIVEN
117
+ keywords << :to if legacy_to != NOT_GIVEN
118
+ end
119
+
75
120
  random_number = between(from: from, to: to)
76
121
 
77
122
  less_than_zero(random_number)
@@ -15,7 +15,15 @@ module Faker
15
15
  end
16
16
 
17
17
  class << self
18
- def google(name: nil, email: nil, uid: Number.number(digits: 9).to_s)
18
+ # rubocop:disable Metrics/ParameterLists
19
+ def google(legacy_name = NOT_GIVEN, legacy_email = NOT_GIVEN, legacy_uid = NOT_GIVEN, name: nil, email: nil, uid: Number.number(digits: 9).to_s)
20
+ # rubocop:enable Metrics/ParameterLists
21
+ warn_for_deprecated_arguments do |keywords|
22
+ keywords << :name if legacy_name != NOT_GIVEN
23
+ keywords << :email if legacy_email != NOT_GIVEN
24
+ keywords << :uid if legacy_uid != NOT_GIVEN
25
+ end
26
+
19
27
  auth = Omniauth.new(name: name, email: email)
20
28
  {
21
29
  provider: 'google_oauth2',
@@ -27,7 +35,7 @@ module Faker
27
35
  email: auth.email,
28
36
  image: image
29
37
  },
30
- credentials: {
38
+ credentials: {
31
39
  token: Crypto.md5,
32
40
  refresh_token: Crypto.md5,
33
41
  expires_at: Time.forward.to_i,
@@ -35,7 +43,7 @@ module Faker
35
43
  },
36
44
  extra: {
37
45
  raw_info: {
38
- sub: uid,
46
+ sub: uid,
39
47
  email: auth.email,
40
48
  email_verified: random_boolean.to_s,
41
49
  name: auth.name,
@@ -64,7 +72,16 @@ module Faker
64
72
  }
65
73
  end
66
74
 
67
- def facebook(name: nil, email: nil, username: nil, uid: Number.number(digits: 7).to_s)
75
+ # rubocop:disable Metrics/ParameterLists
76
+ def facebook(legacy_name = NOT_GIVEN, legacy_email = NOT_GIVEN, legacy_username = NOT_GIVEN, legacy_uid = NOT_GIVEN, name: nil, email: nil, username: nil, uid: Number.number(digits: 7).to_s)
77
+ # rubocop:enable Metrics/ParameterLists
78
+ warn_for_deprecated_arguments do |keywords|
79
+ keywords << :name if legacy_name != NOT_GIVEN
80
+ keywords << :email if legacy_email != NOT_GIVEN
81
+ keywords << :username if legacy_username != NOT_GIVEN
82
+ keywords << :uid if legacy_uid != NOT_GIVEN
83
+ end
84
+
68
85
  auth = Omniauth.new(name: name, email: email)
69
86
  username ||= "#{auth.first_name.downcase[0]}#{auth.last_name.downcase}"
70
87
  {
@@ -106,7 +123,15 @@ module Faker
106
123
  }
107
124
  end
108
125
 
109
- def twitter(name: nil, nickname: nil, uid: Number.number(digits: 6).to_s)
126
+ # rubocop:disable Metrics/ParameterLists
127
+ def twitter(legacy_name = NOT_GIVEN, legacy_nickname = NOT_GIVEN, legacy_uid = NOT_GIVEN, name: nil, nickname: nil, uid: Number.number(digits: 6).to_s)
128
+ # rubocop:enable Metrics/ParameterLists
129
+ warn_for_deprecated_arguments do |keywords|
130
+ keywords << :name if legacy_name != NOT_GIVEN
131
+ keywords << :nickname if legacy_nickname != NOT_GIVEN
132
+ keywords << :uid if legacy_uid != NOT_GIVEN
133
+ end
134
+
110
135
  auth = Omniauth.new(name: name)
111
136
  nickname ||= auth.name.downcase.delete(' ')
112
137
  location = city_state
@@ -179,7 +204,15 @@ module Faker
179
204
  }
180
205
  end
181
206
 
182
- def linkedin(name: nil, email: nil, uid: Number.number(digits: 6).to_s)
207
+ # rubocop:disable Metrics/ParameterLists
208
+ def linkedin(legacy_name = NOT_GIVEN, legacy_email = NOT_GIVEN, legacy_uid = NOT_GIVEN, name: nil, email: nil, uid: Number.number(digits: 6).to_s)
209
+ # rubocop:enable Metrics/ParameterLists
210
+ warn_for_deprecated_arguments do |keywords|
211
+ keywords << :name if legacy_name != NOT_GIVEN
212
+ keywords << :email if legacy_email != NOT_GIVEN
213
+ keywords << :uid if legacy_uid != NOT_GIVEN
214
+ end
215
+
183
216
  auth = Omniauth.new(name: name, email: email)
184
217
  first_name = auth.first_name.downcase
185
218
  last_name = auth.last_name.downcase
@@ -242,7 +275,15 @@ module Faker
242
275
  }
243
276
  end
244
277
 
245
- def github(name: nil, email: nil, uid: Number.number(digits: 8).to_s)
278
+ # rubocop:disable Metrics/ParameterLists
279
+ def github(legacy_name = NOT_GIVEN, legacy_email = NOT_GIVEN, legacy_uid = NOT_GIVEN, name: nil, email: nil, uid: Number.number(digits: 8).to_s)
280
+ # rubocop:enable Metrics/ParameterLists
281
+ warn_for_deprecated_arguments do |keywords|
282
+ keywords << :name if legacy_name != NOT_GIVEN
283
+ keywords << :email if legacy_email != NOT_GIVEN
284
+ keywords << :uid if legacy_uid != NOT_GIVEN
285
+ end
286
+
246
287
  auth = Omniauth.new(name: name, email: email)
247
288
  login = auth.name.downcase.tr(' ', '-')
248
289
  html_url = "https://github.com/#{login}"
@@ -261,7 +302,7 @@ module Faker
261
302
  },
262
303
  credentials: {
263
304
  token: Crypto.md5,
264
- expires: false
305
+ expires: false
265
306
  },
266
307
  extra: {
267
308
  raw_info: {
@@ -281,7 +322,7 @@ module Faker
281
322
  events_url: "#{api_url}/events{/privacy}",
282
323
  received_events_url: "#{api_url}/received_events",
283
324
  type: 'User',
284
- site_admin: random_boolean,
325
+ site_admin: random_boolean,
285
326
  name: auth.name,
286
327
  company: nil,
287
328
  blog: nil,
@@ -300,6 +341,48 @@ module Faker
300
341
  }
301
342
  end
302
343
 
344
+ ##
345
+ # Generate a mock Omniauth response from Apple
346
+ #
347
+ # @param name [String] A specific name to return in the response
348
+ # @param email [String] A specific email to return in the response
349
+ # @param uid [String] A specific UID to return in the response
350
+ #
351
+ # @return [Hash] An auth hash in the format provided by omniauth-apple
352
+ def apple(name: nil, email: nil, uid: nil)
353
+ uid ||= "#{Number.number(digits: 6)}.#{Number.hexadecimal(digits: 32)}.#{Number.number(digits: 4)}"
354
+ auth = Omniauth.new(name: name, email: email)
355
+ {
356
+ provider: 'apple',
357
+ uid: uid,
358
+ info: {
359
+ sub: uid,
360
+ email: auth.email,
361
+ first_name: auth.first_name,
362
+ last_name: auth.last_name
363
+ },
364
+ credentials: {
365
+ token: Crypto.md5,
366
+ refresh_token: Crypto.md5,
367
+ expires_at: Time.forward.to_i,
368
+ expires: true
369
+ },
370
+ extra: {
371
+ raw_info: {
372
+ iss: 'https://appleid.apple.com',
373
+ aud: 'CLIENT_ID',
374
+ exp: Time.forward.to_i,
375
+ iat: Time.forward.to_i,
376
+ sub: uid,
377
+ at_hash: Crypto.md5,
378
+ auth_time: Time.forward.to_i,
379
+ email: auth.email,
380
+ email_verified: true
381
+ }
382
+ }
383
+ }
384
+ end
385
+
303
386
  private
304
387
 
305
388
  def gender