faker 1.9.6 → 2.7.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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +386 -6
  3. data/README.md +12 -5
  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 +221 -18
  13. data/lib/faker/creature/animal.rb +10 -1
  14. data/lib/faker/creature/cat.rb +28 -1
  15. data/lib/faker/creature/dog.rb +73 -1
  16. data/lib/faker/creature/horse.rb +19 -1
  17. data/lib/faker/default/address.rb +25 -5
  18. data/lib/faker/default/alphanumeric.rb +58 -9
  19. data/lib/faker/default/app.rb +55 -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 +43 -1
  23. data/lib/faker/default/bank.rb +10 -2
  24. data/lib/faker/default/boolean.rb +16 -1
  25. data/lib/faker/default/cannabis.rb +4 -0
  26. data/lib/faker/default/chile_rut.rb +13 -3
  27. data/lib/faker/default/chuck_norris.rb +1 -1
  28. data/lib/faker/default/code.rb +18 -5
  29. data/lib/faker/default/commerce.rb +18 -4
  30. data/lib/faker/default/company.rb +11 -3
  31. data/lib/faker/default/crypto_coin.rb +21 -4
  32. data/lib/faker/default/date.rb +122 -9
  33. data/lib/faker/default/demographic.rb +5 -1
  34. data/lib/faker/default/dessert.rb +27 -0
  35. data/lib/faker/default/device.rb +56 -2
  36. data/lib/faker/default/driving_licence.rb +13 -7
  37. data/lib/faker/default/educator.rb +0 -3
  38. data/lib/faker/default/electrical_components.rb +27 -0
  39. data/lib/faker/default/file.rb +20 -3
  40. data/lib/faker/default/fillmurray.rb +10 -2
  41. data/lib/faker/default/finance.rb +5 -1
  42. data/lib/faker/default/gender.rb +18 -0
  43. data/lib/faker/default/greek_philosophers.rb +18 -0
  44. data/lib/faker/default/hacker.rb +59 -1
  45. data/lib/faker/default/hipster.rb +55 -16
  46. data/lib/faker/default/house.rb +18 -0
  47. data/lib/faker/default/id_number.rb +85 -11
  48. data/lib/faker/default/industry_segments.rb +36 -0
  49. data/lib/faker/default/internet.rb +107 -22
  50. data/lib/faker/default/invoice.rb +16 -3
  51. data/lib/faker/default/json.rb +19 -2
  52. data/lib/faker/default/lorem.rb +91 -20
  53. data/lib/faker/default/lorem_flickr.rb +38 -5
  54. data/lib/faker/default/lorem_pixel.rb +10 -1
  55. data/lib/faker/default/markdown.rb +12 -7
  56. data/lib/faker/default/marketing.rb +9 -0
  57. data/lib/faker/default/measurement.rb +40 -8
  58. data/lib/faker/default/military.rb +45 -0
  59. data/lib/faker/default/name.rb +6 -4
  60. data/lib/faker/default/nation.rb +48 -5
  61. data/lib/faker/default/nato_phonetic_alphabet.rb +9 -0
  62. data/lib/faker/default/nhs.rb +11 -7
  63. data/lib/faker/default/number.rb +202 -30
  64. data/lib/faker/default/omniauth.rb +98 -15
  65. data/lib/faker/default/phone_number.rb +5 -1
  66. data/lib/faker/default/placeholdit.rb +11 -1
  67. data/lib/faker/default/programming_language.rb +18 -0
  68. data/lib/faker/default/relationship.rb +5 -1
  69. data/lib/faker/default/restaurant.rb +54 -2
  70. data/lib/faker/default/science.rb +27 -0
  71. data/lib/faker/default/source.rb +59 -3
  72. data/lib/faker/default/south_africa.rb +1 -1
  73. data/lib/faker/default/space.rb +2 -2
  74. data/lib/faker/default/string.rb +5 -1
  75. data/lib/faker/default/stripe.rb +20 -4
  76. data/lib/faker/default/subscription.rb +45 -0
  77. data/lib/faker/default/superhero.rb +45 -0
  78. data/lib/faker/default/time.rb +133 -8
  79. data/lib/faker/default/twitter.rb +62 -48
  80. data/lib/faker/default/types.rb +29 -7
  81. data/lib/faker/default/vehicle.rb +19 -6
  82. data/lib/faker/default/world_cup.rb +61 -2
  83. data/lib/faker/games/dota.rb +53 -2
  84. data/lib/faker/games/elder_scrolls.rb +73 -1
  85. data/lib/faker/games/fallout.rb +38 -1
  86. data/lib/faker/games/game.rb +27 -0
  87. data/lib/faker/games/half_life.rb +28 -1
  88. data/lib/faker/games/heroes.rb +28 -1
  89. data/lib/faker/games/heroes_of_the_storm.rb +37 -1
  90. data/lib/faker/games/league_of_legends.rb +55 -1
  91. data/lib/faker/games/myst.rb +46 -1
  92. data/lib/faker/games/overwatch.rb +28 -1
  93. data/lib/faker/games/pokemon.rb +28 -1
  94. data/lib/faker/games/sonic_the_hedgehog.rb +28 -1
  95. data/lib/faker/games/super_smash_bros.rb +19 -1
  96. data/lib/faker/games/witcher.rb +55 -1
  97. data/lib/faker/games/world_of_warcraft.rb +19 -1
  98. data/lib/faker/games/zelda.rb +38 -2
  99. data/lib/faker/japanese_media/dragon_ball.rb +10 -1
  100. data/lib/faker/japanese_media/one_piece.rb +55 -1
  101. data/lib/faker/japanese_media/sword_art_online.rb +37 -1
  102. data/lib/faker/movies/back_to_the_future.rb +29 -1
  103. data/lib/faker/movies/ghostbusters.rb +29 -1
  104. data/lib/faker/movies/harry_potter.rb +55 -1
  105. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +70 -1
  106. data/lib/faker/movies/hobbit.rb +38 -1
  107. data/lib/faker/movies/lebowski.rb +28 -1
  108. data/lib/faker/movies/lord_of_the_rings.rb +29 -1
  109. data/lib/faker/movies/movie.rb +9 -0
  110. data/lib/faker/movies/princess_bride.rb +20 -1
  111. data/lib/faker/movies/star_wars.rb +101 -5
  112. data/lib/faker/movies/v_for_vendetta.rb +30 -1
  113. data/lib/faker/music/grateful_dead.rb +18 -0
  114. data/lib/faker/music/phish.rb +9 -0
  115. data/lib/faker/music/rock_band.rb +9 -0
  116. data/lib/faker/music/umphreys_mcgee.rb +9 -0
  117. data/lib/faker/sports/basketball.rb +36 -0
  118. data/lib/faker/sports/football.rb +45 -0
  119. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +10 -1
  120. data/lib/faker/tv_shows/bojack_horseman.rb +29 -1
  121. data/lib/faker/tv_shows/breaking_bad.rb +19 -1
  122. data/lib/faker/tv_shows/buffy.rb +46 -1
  123. data/lib/faker/tv_shows/community.rb +20 -1
  124. data/lib/faker/tv_shows/dr_who.rb +79 -3
  125. data/lib/faker/tv_shows/dumb_and_dumber.rb +29 -1
  126. data/lib/faker/tv_shows/family_guy.rb +29 -1
  127. data/lib/faker/tv_shows/friends.rb +28 -1
  128. data/lib/faker/tv_shows/game_of_thrones.rb +47 -1
  129. data/lib/faker/tv_shows/hey_arnold.rb +28 -1
  130. data/lib/faker/tv_shows/how_i_met_your_mother.rb +38 -1
  131. data/lib/faker/tv_shows/michael_scott.rb +14 -1
  132. data/lib/faker/tv_shows/new_girl.rb +20 -1
  133. data/lib/faker/tv_shows/parks_and_rec.rb +19 -1
  134. data/lib/faker/tv_shows/rick_and_morty.rb +29 -1
  135. data/lib/faker/tv_shows/ru_paul.rb +19 -1
  136. data/lib/faker/tv_shows/seinfeld.rb +29 -1
  137. data/lib/faker/tv_shows/silicon_valley.rb +76 -1
  138. data/lib/faker/tv_shows/simpsons.rb +29 -1
  139. data/lib/faker/tv_shows/south_park.rb +20 -1
  140. data/lib/faker/tv_shows/star_trek.rb +37 -1
  141. data/lib/faker/tv_shows/stargate.rb +29 -1
  142. data/lib/faker/tv_shows/stranger_things.rb +20 -1
  143. data/lib/faker/tv_shows/the_expanse.rb +37 -1
  144. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +29 -1
  145. data/lib/faker/tv_shows/the_it_crowd.rb +38 -1
  146. data/lib/faker/tv_shows/the_thick_of_it.rb +29 -1
  147. data/lib/faker/tv_shows/twin_peaks.rb +29 -1
  148. data/lib/faker/tv_shows/venture_bros.rb +39 -1
  149. data/lib/faker/version.rb +1 -1
  150. data/lib/locales/en-CA.yml +2 -1
  151. data/lib/locales/en-IND.yml +1 -1
  152. data/lib/locales/en-TH.yml +360 -0
  153. data/lib/locales/en.yml +4 -1
  154. data/lib/locales/en/address.yml +1 -4
  155. data/lib/locales/en/animal.yml +2 -2
  156. data/lib/locales/en/cannabis.yml +1 -0
  157. data/lib/locales/en/color.yml +1 -1
  158. data/lib/locales/en/dr_who.yml +1 -1
  159. data/lib/locales/en/science.yml +1 -1
  160. data/lib/locales/en/space.yml +1 -1
  161. data/lib/locales/en/super_smash_bros.yml +5 -0
  162. data/lib/locales/fr-CA.yml +1 -1
  163. data/lib/locales/ja.yml +12 -9
  164. data/lib/locales/th.yml +380 -0
  165. data/lib/locales/vi.yml +1 -1
  166. metadata +44 -27
  167. data/lib/faker/default/creature.rb +0 -6
  168. data/lib/faker/default/games.rb +0 -6
  169. data/lib/faker/default/japanese_media.rb +0 -6
  170. data/lib/faker/default/movies.rb +0 -6
  171. data/lib/faker/default/tv_shows.rb +0 -6
  172. data/lib/faker/deprecate/unreleased/football.rb +0 -35
  173. data/lib/faker/deprecate/unreleased/movies/grateful_dead.rb +0 -22
@@ -5,8 +5,6 @@ module Faker
5
5
  flexible :name
6
6
 
7
7
  class << self
8
- extend Gem::Deprecate
9
-
10
8
  def name
11
9
  parse('name.name')
12
10
  end
@@ -48,8 +46,12 @@ module Faker
48
46
  fetch('name.suffix')
49
47
  end
50
48
 
51
- def initials(character_count = 3)
52
- (0...character_count).map { rand(65..90).chr }.join
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
+
54
+ (0...number).map { rand(65..90).chr }.join
53
55
  end
54
56
  end
55
57
  end
@@ -4,27 +4,70 @@ module Faker
4
4
  class Nation < Base
5
5
  flexible :nation
6
6
  class << self
7
- # Fetch random nationality
7
+ ##
8
+ # Produces a random nationality.
9
+ #
10
+ # @return [String]
11
+ #
12
+ # @example
13
+ # Faker::Nation.nationality #=> "Nepalese"
14
+ #
15
+ # @faker.version 1.9.0
8
16
  def nationality
9
17
  fetch('nation.nationality')
10
18
  end
11
19
 
12
- # Fetch random national flag emoji
20
+ # rubocop:disable Style/AsciiComments
21
+
22
+ ##
23
+ # Produces a random national flag emoji.
24
+ #
25
+ # @return [String]
26
+ #
27
+ # @example
28
+ # Faker::Nation.flag #=> "🇫🇮"
29
+ #
30
+ # @faker.version 1.9.0
13
31
  def flag
14
32
  sample(translate('faker.nation.flag')).pack('C*').force_encoding('utf-8')
15
33
  end
34
+ # rubocop:enable Style/AsciiComments
16
35
 
17
- # Fetch random language
36
+ ##
37
+ # Produces a random national language.
38
+ #
39
+ # @return [String]
40
+ #
41
+ # @example
42
+ # Faker::Nation.language #=> "Nepali"
43
+ #
44
+ # @faker.version 1.9.0
18
45
  def language
19
46
  fetch('nation.language')
20
47
  end
21
48
 
22
- # Fetch random capital city
49
+ ##
50
+ # Produces a random capital city.
51
+ #
52
+ # @return [String]
53
+ #
54
+ # @example
55
+ # Faker::Nation.capital_city #=> "Kathmandu"
56
+ #
57
+ # @faker.version 1.9.0
23
58
  def capital_city
24
59
  fetch('nation.capital_city')
25
60
  end
26
61
 
27
- # Fetch random natinal sport
62
+ ##
63
+ # Produces a random national sport.
64
+ #
65
+ # @return [String]
66
+ #
67
+ # @example
68
+ # Faker::Nation.national_sport #=> "dandi biyo"
69
+ #
70
+ # @faker.version 1.9.0
28
71
  def national_sport
29
72
  fetch('team.sport')
30
73
  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
@@ -7,15 +7,19 @@ module Faker
7
7
  base_number = rand(400_000_001...499_999_999)
8
8
  # If the check digit is equivalent to 10, the number is invalid.
9
9
  # See https://en.wikipedia.org/wiki/NHS_number
10
- base_number -= 1 if check_digit(base_number) == 10
11
- "#{base_number}#{check_digit(base_number)}".to_s
12
- .chars
13
- .insert(3, ' ')
14
- .insert(7, ' ')
15
- .join('')
10
+ base_number -= 1 if check_digit(number: base_number) == 10
11
+ "#{base_number}#{check_digit(number: base_number)}".to_s
12
+ .chars
13
+ .insert(3, ' ')
14
+ .insert(7, ' ')
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,82 +3,257 @@
3
3
  module Faker
4
4
  class Number < Base
5
5
  class << self
6
- extend Gem::Deprecate
7
-
8
- def number(digits = 10)
9
- num = ''
10
-
11
- if digits > 1
12
- num = non_zero_digit
13
- digits -= 1
6
+ ##
7
+ # Produce a random number.
8
+ #
9
+ # @param digits [Integer] Number of digits that the generated number should have.
10
+ # @return [Integer]
11
+ #
12
+ # @example
13
+ # Faker::Number.number(digits: 10) #=> 1968353479
14
+ #
15
+ # @faker.version 1.0.0
16
+ def number(legacy_digits = NOT_GIVEN, digits: 10)
17
+ warn_for_deprecated_arguments do |keywords|
18
+ keywords << :digits if legacy_digits != NOT_GIVEN
14
19
  end
15
20
 
16
- num + (1..digits).collect { digit }.join
21
+ return if digits < 1
22
+ return rand(0..9).round if digits == 1
23
+
24
+ # Ensure the first digit is not zero
25
+ ([non_zero_digit] + generate(digits - 1)).join.to_i
17
26
  end
18
27
 
19
- def leading_zero_number(digits = 10)
28
+ ##
29
+ # Produce a random number with a leading zero.
30
+ #
31
+ # @param digits [Integer] Number of digits that the generated number should have.
32
+ # @return [String]
33
+ #
34
+ # @example
35
+ # Faker::Number.leading_zero_number(digits: 10) #=> "0669336915"
36
+ #
37
+ # @faker.version 1.0.0
38
+ def leading_zero_number(legacy_digits = NOT_GIVEN, digits: 10)
39
+ warn_for_deprecated_arguments do |keywords|
40
+ keywords << :digits if legacy_digits != NOT_GIVEN
41
+ end
42
+
20
43
  '0' + (2..digits).collect { digit }.join
21
44
  end
22
45
 
23
- def decimal_part(digits = 10)
46
+ ##
47
+ # Produce a number with a number of digits, preserves leading zeroes.
48
+ #
49
+ # @param digits [Integer] Number of digits that the generated number should have.
50
+ # @return [String]
51
+ #
52
+ # @example
53
+ # Faker::Number.decimal_part(digits: 2) #=> "09"
54
+ #
55
+ # @faker.version 1.0.0
56
+ def decimal_part(legacy_digits = NOT_GIVEN, digits: 10)
57
+ warn_for_deprecated_arguments do |keywords|
58
+ keywords << :digits if legacy_digits != NOT_GIVEN
59
+ end
60
+
24
61
  num = ''
25
62
  if digits > 1
26
63
  num = non_zero_digit
27
64
  digits -= 1
28
65
  end
29
- leading_zero_number(digits) + num
66
+ leading_zero_number(digits: digits) + num.to_s
30
67
  end
31
68
 
32
- def decimal(l_digits = 5, r_digits = 2)
33
- l_d = number(l_digits)
34
- r_d = decimal_part(r_digits)
69
+ ##
70
+ # Produces a float.
71
+ #
72
+ # @param l_digits [Integer] Number of digits that the generated decimal should have to the left of the decimal point.
73
+ # @param r_digits [Integer] Number of digits that the generated decimal should have to the right of the decimal point.
74
+ # @return [Float]
75
+ #
76
+ # @example
77
+ # Faker::Number.decimal(l_digits: 2) #=> 11.88
78
+ # Faker::Number.decimal(l_digits: 3, r_digits: 3) #=> 181.843
79
+ #
80
+ # @faker.version 1.0.0
81
+ def decimal(legacy_l_digits = NOT_GIVEN, legacy_r_digits = NOT_GIVEN, l_digits: 5, r_digits: 2)
82
+ warn_for_deprecated_arguments do |keywords|
83
+ keywords << :l_digits if legacy_l_digits != NOT_GIVEN
84
+ keywords << :r_digits if legacy_r_digits != NOT_GIVEN
85
+ end
35
86
 
36
- "#{l_d}.#{r_d}"
87
+ l_d = number(digits: l_digits)
88
+ r_d = if r_digits == 1
89
+ generate(r_digits)
90
+ else
91
+ # Ensure the last digit is not zero
92
+ # so it does not get truncated on converting to float
93
+ generate(r_digits - 1).join + non_zero_digit.to_s
94
+ end
95
+ "#{l_d}.#{r_d}".to_f
37
96
  end
38
97
 
98
+ ##
99
+ # Produces a non-zero single-digit integer.
100
+ #
101
+ # @return [Integer]
102
+ #
103
+ # @example
104
+ # Faker::Number.non_zero_digit #=> 8
105
+ #
106
+ # @faker.version 1.0.0
39
107
  def non_zero_digit
40
- rand(1..9).to_s
108
+ rand(1..9)
41
109
  end
42
110
 
111
+ ##
112
+ # Produces a single-digit integer.
113
+ #
114
+ # @return [Integer]
115
+ #
116
+ # @example
117
+ # Faker::Number.digit #=> 1
118
+ #
119
+ # @faker.version 1.0.0
43
120
  def digit
44
- rand(10).to_s
121
+ rand(10)
45
122
  end
46
123
 
47
- def hexadecimal(digits = 6)
124
+ ##
125
+ # Produces a number in hexadecimal format.
126
+ #
127
+ # @param digits [Integer] Number of digits in the he
128
+ # @return [String]
129
+ #
130
+ # @example
131
+ # Faker::Number.hexadecimal(digits: 3) #=> "e74"
132
+ #
133
+ # @faker.version 1.0.0
134
+ def hexadecimal(legacy_digits = NOT_GIVEN, digits: 6)
135
+ warn_for_deprecated_arguments do |keywords|
136
+ keywords << :digits if legacy_digits != NOT_GIVEN
137
+ end
138
+
48
139
  hex = ''
49
140
  digits.times { hex += rand(15).to_s(16) }
50
141
  hex
51
142
  end
52
143
 
53
- def normal(mean = 1, standard_deviation = 1)
144
+ ##
145
+ # Produces a float given a mean and standard deviation.
146
+ #
147
+ # @param mean [Integer]
148
+ # @param standard_deviation [Integer, Float]
149
+ # @return [Float]
150
+ #
151
+ # @example
152
+ # Faker::Number.normal(mean: 50, standard_deviation: 3.5) #=> 47.14669604069156
153
+ #
154
+ # @faker.version 1.0.0
155
+ def normal(legacy_mean = NOT_GIVEN, legacy_standard_deviation = NOT_GIVEN, mean: 1, standard_deviation: 1)
156
+ warn_for_deprecated_arguments do |keywords|
157
+ keywords << :mean if legacy_mean != NOT_GIVEN
158
+ keywords << :standard_deviation if legacy_standard_deviation != NOT_GIVEN
159
+ end
160
+
54
161
  theta = 2 * Math::PI * rand
55
162
  rho = Math.sqrt(-2 * Math.log(1 - rand))
56
163
  scale = standard_deviation * rho
57
164
  mean + scale * Math.cos(theta)
58
165
  end
59
166
 
60
- def between(from = 1.00, to = 5000.00)
167
+ ##
168
+ # Produces a number between two provided values. Boundaries are inclusive.
169
+ #
170
+ # @param from [Integer] The lowest number to include.
171
+ # @param to [Integer] The highest number to include.
172
+ # @return [Integer]
173
+ #
174
+ # @example
175
+ # Faker::Number.between(from: 1, to: 10) #=> 7
176
+ #
177
+ # @faker.version 1.0.0
178
+ def between(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from: 1.00, to: 5000.00)
179
+ warn_for_deprecated_arguments do |keywords|
180
+ keywords << :from if legacy_from != NOT_GIVEN
181
+ keywords << :to if legacy_to != NOT_GIVEN
182
+ end
183
+
61
184
  Faker::Base.rand_in_range(from, to)
62
185
  end
63
186
 
64
- def within(range = 1.00..5000.00)
65
- between(range.min, range.max)
187
+ ##
188
+ # Produces a number within two provided values. Boundaries are inclusive or exclusive depending on the range passed.
189
+ #
190
+ # @param range [Range] The range from which to generate a number.
191
+ # @return [Integer]
192
+ #
193
+ # @example
194
+ # Faker::Number.within(range: 1..10) #=> 7
195
+ #
196
+ # @faker.version 1.0.0
197
+ def within(legacy_range = NOT_GIVEN, range: 1.00..5000.00)
198
+ warn_for_deprecated_arguments do |keywords|
199
+ keywords << :range if legacy_range != NOT_GIVEN
200
+ end
201
+
202
+ between(from: range.min, to: range.max)
66
203
  end
67
204
 
68
- def positive(from = 1.00, to = 5000.00)
69
- random_number = between(from, to)
205
+ ##
206
+ # Produces a positive float.
207
+ #
208
+ # @param from [Integer] The lower boundary.
209
+ # @param to [Integer] The higher boundary.
210
+ # @return [Float]
211
+ #
212
+ # @example
213
+ # Faker::Number.positive #=> 235.59238499107653
214
+ #
215
+ # @faker.version 1.0.0
216
+ def positive(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from: 1.00, to: 5000.00)
217
+ warn_for_deprecated_arguments do |keywords|
218
+ keywords << :from if legacy_from != NOT_GIVEN
219
+ keywords << :to if legacy_to != NOT_GIVEN
220
+ end
221
+
222
+ random_number = between(from: from, to: to)
70
223
 
71
224
  greater_than_zero(random_number)
72
225
  end
73
226
 
74
- def negative(from = -5000.00, to = -1.00)
75
- random_number = between(from, to)
227
+ ##
228
+ # Produces a negative float.
229
+ #
230
+ # @param from [Integer] The lower boundary.
231
+ # @param to [Integer] The higher boundary.
232
+ # @return [Float]
233
+ #
234
+ # @example
235
+ # Faker::Number.negative #=> -4480.042585669558
236
+ #
237
+ # @faker.version 1.0.0
238
+ def negative(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from: -5000.00, to: -1.00)
239
+ warn_for_deprecated_arguments do |keywords|
240
+ keywords << :from if legacy_from != NOT_GIVEN
241
+ keywords << :to if legacy_to != NOT_GIVEN
242
+ end
243
+
244
+ random_number = between(from: from, to: to)
76
245
 
77
246
  less_than_zero(random_number)
78
247
  end
79
248
 
80
249
  private
81
250
 
251
+ def generate(count)
252
+ return [] if count.zero?
253
+
254
+ Array.new(count) { digit }
255
+ end
256
+
82
257
  def greater_than_zero(number)
83
258
  should_be(number, :>)
84
259
  end
@@ -94,9 +269,6 @@ module Faker
94
269
  number * -1
95
270
  end
96
271
  end
97
-
98
- deprecate :decimal_part, nil, 2019, 06
99
- deprecate :leading_zero_number, nil, 2019, 06
100
272
  end
101
273
  end
102
274
  end
@@ -10,12 +10,20 @@ module Faker
10
10
 
11
11
  def initialize(name: nil, email: nil)
12
12
  @name = name || "#{Name.first_name} #{Name.last_name}"
13
- @email = email || Internet.safe_email(self.name)
13
+ @email = email || Internet.safe_email(name: self.name)
14
14
  @first_name, @last_name = self.name.split
15
15
  end
16
16
 
17
17
  class << self
18
- def google(name: nil, email: nil, uid: Number.number(9))
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,
@@ -44,7 +52,7 @@ module Faker
44
52
  profile: "https://plus.google.com/#{uid}",
45
53
  picture: image,
46
54
  gender: gender,
47
- birthday: Date.backward(36_400).strftime('%Y-%m-%d'),
55
+ birthday: Date.backward(days: 36_400).strftime('%Y-%m-%d'),
48
56
  local: 'en',
49
57
  hd: "#{Company.name.downcase}.com"
50
58
  },
@@ -52,7 +60,7 @@ module Faker
52
60
  'iss' => 'accounts.google.com',
53
61
  'at_hash' => Crypto.md5,
54
62
  'email_verified' => true,
55
- 'sub' => Number.number(28).to_s,
63
+ 'sub' => Number.number(digits: 28).to_s,
56
64
  'azp' => 'APP_ID',
57
65
  'email' => auth.email,
58
66
  'aud' => 'APP_ID',
@@ -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(7))
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
  {
@@ -92,7 +109,7 @@ module Faker
92
109
  link: "http://www.facebook.com/#{username}",
93
110
  username: username,
94
111
  location: {
95
- id: Number.number(9),
112
+ id: Number.number(digits: 9).to_s,
96
113
  name: city_state
97
114
  },
98
115
  gender: gender,
@@ -106,7 +123,15 @@ module Faker
106
123
  }
107
124
  end
108
125
 
109
- def twitter(name: nil, nickname: nil, uid: Number.number(6))
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(6))
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(8))
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,
@@ -293,8 +334,50 @@ module Faker
293
334
  public_gists: random_number_from_range(1..1000),
294
335
  followers: random_number_from_range(1..1000),
295
336
  following: random_number_from_range(1..1000),
296
- created_at: Time.backward(36_400).iso8601,
297
- updated_at: Time.backward(2).iso8601
337
+ created_at: Time.backward(days: 36_400).iso8601,
338
+ updated_at: Time.backward(days: 2).iso8601
339
+ }
340
+ }
341
+ }
342
+ end
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
298
381
  }
299
382
  }
300
383
  }