faker 2.4.0 → 2.8.1

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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +159 -0
  3. data/README.md +3 -0
  4. data/lib/faker/default/address.rb +202 -0
  5. data/lib/faker/default/ancient.rb +36 -0
  6. data/lib/faker/default/app.rb +2 -1
  7. data/lib/faker/default/avatar.rb +2 -1
  8. data/lib/faker/default/bank.rb +13 -7
  9. data/lib/faker/default/bossa_nova.rb +18 -0
  10. data/lib/faker/default/business.rb +27 -0
  11. data/lib/faker/default/chuck_norris.rb +12 -2
  12. data/lib/faker/default/coffee.rb +45 -0
  13. data/lib/faker/default/coin.rb +18 -0
  14. data/lib/faker/default/color.rb +48 -1
  15. data/lib/faker/default/crypto.rb +27 -0
  16. data/lib/faker/default/currency.rb +27 -0
  17. data/lib/faker/default/date.rb +83 -2
  18. data/lib/faker/default/demographic.rb +57 -0
  19. data/lib/faker/default/driving_licence.rb +2 -2
  20. data/lib/faker/default/educator.rb +60 -6
  21. data/lib/faker/default/esport.rb +45 -0
  22. data/lib/faker/default/fillmurray.rb +23 -1
  23. data/lib/faker/default/food.rb +65 -1
  24. data/lib/faker/default/id_number.rb +29 -0
  25. data/lib/faker/default/internet.rb +21 -8
  26. data/lib/faker/default/kpop.rb +54 -0
  27. data/lib/faker/default/nation.rb +48 -5
  28. data/lib/faker/default/number.rb +124 -0
  29. data/lib/faker/default/relationship.rb +45 -0
  30. data/lib/faker/default/restaurant.rb +54 -2
  31. data/lib/faker/default/space.rb +127 -0
  32. data/lib/faker/default/team.rb +45 -0
  33. data/lib/faker/default/time.rb +85 -8
  34. data/lib/faker/default/world_cup.rb +50 -0
  35. data/lib/faker/games/zelda.rb +1 -1
  36. data/lib/faker/japanese_media/one_piece.rb +54 -0
  37. data/lib/faker/movies/back_to_the_future.rb +28 -0
  38. data/lib/faker/movies/ghostbusters.rb +28 -0
  39. data/lib/faker/movies/harry_potter.rb +54 -0
  40. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +69 -0
  41. data/lib/faker/movies/lebowski.rb +27 -0
  42. data/lib/faker/movies/lord_of_the_rings.rb +28 -0
  43. data/lib/faker/movies/princess_bride.rb +19 -0
  44. data/lib/faker/movies/star_wars.rb +94 -0
  45. data/lib/faker/movies/v_for_vendetta.rb +29 -0
  46. data/lib/faker/music/umphreys_mcgee.rb +9 -0
  47. data/lib/faker/sports/basketball.rb +36 -0
  48. data/lib/faker/sports/football.rb +45 -0
  49. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +9 -0
  50. data/lib/faker/tv_shows/bojack_horseman.rb +28 -0
  51. data/lib/faker/tv_shows/buffy.rb +45 -0
  52. data/lib/faker/tv_shows/community.rb +19 -0
  53. data/lib/faker/tv_shows/dr_who.rb +78 -2
  54. data/lib/faker/tv_shows/dumb_and_dumber.rb +28 -0
  55. data/lib/faker/tv_shows/family_guy.rb +28 -0
  56. data/lib/faker/tv_shows/friends.rb +27 -0
  57. data/lib/faker/tv_shows/game_of_thrones.rb +46 -0
  58. data/lib/faker/tv_shows/hey_arnold.rb +27 -0
  59. data/lib/faker/tv_shows/how_i_met_your_mother.rb +37 -0
  60. data/lib/faker/tv_shows/michael_scott.rb +13 -0
  61. data/lib/faker/tv_shows/new_girl.rb +19 -0
  62. data/lib/faker/tv_shows/parks_and_rec.rb +18 -0
  63. data/lib/faker/tv_shows/rick_and_morty.rb +28 -0
  64. data/lib/faker/tv_shows/ru_paul.rb +18 -0
  65. data/lib/faker/tv_shows/seinfeld.rb +28 -0
  66. data/lib/faker/tv_shows/silicon_valley.rb +75 -0
  67. data/lib/faker/tv_shows/simpsons.rb +28 -0
  68. data/lib/faker/tv_shows/south_park.rb +19 -0
  69. data/lib/faker/tv_shows/star_trek.rb +36 -0
  70. data/lib/faker/tv_shows/stargate.rb +28 -0
  71. data/lib/faker/tv_shows/stranger_things.rb +19 -0
  72. data/lib/faker/tv_shows/the_expanse.rb +36 -0
  73. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +28 -0
  74. data/lib/faker/tv_shows/the_it_crowd.rb +37 -0
  75. data/lib/faker/tv_shows/the_thick_of_it.rb +28 -0
  76. data/lib/faker/tv_shows/twin_peaks.rb +28 -0
  77. data/lib/faker/tv_shows/venture_bros.rb +38 -0
  78. data/lib/faker/version.rb +1 -1
  79. data/lib/locales/en-CA.yml +1 -0
  80. data/lib/locales/en-TH.yml +360 -0
  81. data/lib/locales/en/color.yml +1 -1
  82. data/lib/locales/en/dr_who.yml +1 -1
  83. data/lib/locales/en/educator.yml +69 -6
  84. data/lib/locales/en/overwatch.yml +2617 -32
  85. data/lib/locales/en/super_smash_bros.yml +1 -0
  86. data/lib/locales/fr-CA.yml +1 -1
  87. data/lib/locales/ja.yml +6 -2
  88. data/lib/locales/pt-BR.yml +23 -2
  89. data/lib/locales/th.yml +380 -0
  90. metadata +22 -14
@@ -16,6 +16,8 @@ module Faker
16
16
  BRAZILIAN_ID_FROM = 10_000_000
17
17
  BRAZILIAN_ID_TO = 99_999_999
18
18
 
19
+ CHILEAN_MODULO = 11
20
+
19
21
  class << self
20
22
  def valid
21
23
  _translate('valid')
@@ -105,8 +107,35 @@ module Faker
105
107
 
106
108
  alias brazilian_rg brazilian_id
107
109
 
110
+ def chilean_id
111
+ digits = Faker::Number.number(digits: 8)
112
+ verification_code = chilean_verification_code(digits)
113
+
114
+ digits.to_s + '-' + verification_code.to_s
115
+ end
116
+
108
117
  private
109
118
 
119
+ def chilean_verification_code(digits)
120
+ # First digit is multiplied by 3, second by 2, and so on
121
+ multiplication_rule = [3, 2, 7, 6, 5, 4, 3, 2]
122
+ digits_splitted = digits.to_s.chars.map(&:to_i)
123
+
124
+ sum = digits_splitted.map.with_index { |digit, index| digit * multiplication_rule[index] }.reduce(:+)
125
+
126
+ modulo = sum.modulo(CHILEAN_MODULO)
127
+ difference = CHILEAN_MODULO - modulo
128
+
129
+ case difference
130
+ when 0..9
131
+ difference
132
+ when 10
133
+ 'K'
134
+ when 11
135
+ 0
136
+ end
137
+ end
138
+
110
139
  def south_african_id_checksum_digit(id_number)
111
140
  value_parts = id_number.chars
112
141
  even_digits = value_parts
@@ -3,16 +3,16 @@
3
3
  module Faker
4
4
  class Internet < Base
5
5
  class << self
6
- def email(legacy_name = NOT_GIVEN, legacy_separators = NOT_GIVEN, name: nil, separators: nil)
6
+ def email(legacy_name = NOT_GIVEN, legacy_separators = NOT_GIVEN, name: nil, separators: nil, domain: nil)
7
7
  warn_for_deprecated_arguments do |keywords|
8
8
  keywords << :name if legacy_name != NOT_GIVEN
9
9
  keywords << :separators if legacy_separators != NOT_GIVEN
10
10
  end
11
11
 
12
12
  if separators
13
- [username(specifier: name, separators: separators), domain_name].join('@')
13
+ [username(specifier: name, separators: separators), domain_name(domain: domain)].join('@')
14
14
  else
15
- [username(specifier: name), domain_name].join('@')
15
+ [username(specifier: name), domain_name(domain: domain)].join('@')
16
16
  end
17
17
  end
18
18
 
@@ -73,6 +73,8 @@ module Faker
73
73
  end
74
74
  end
75
75
 
76
+ # rubocop:disable Metrics/ParameterLists
77
+
76
78
  ##
77
79
  # Produces a randomized string of characters suitable for passwords
78
80
  #
@@ -95,8 +97,8 @@ module Faker
95
97
  # Faker::Internet.password(min_length: 10, max_length: 20, mix_case: true, special_characters: true) #=> "*%NkOnJsH4"
96
98
  #
97
99
  # @faker.version 2.1.3
98
- # rubocop:disable Metrics/ParameterLists
99
100
  def password(legacy_min_length = NOT_GIVEN, legacy_max_length = NOT_GIVEN, legacy_mix_case = NOT_GIVEN, legacy_special_characters = NOT_GIVEN, min_length: 8, max_length: 16, mix_case: true, special_characters: false)
101
+ # rubocop:enable Metrics/ParameterLists
100
102
  warn_for_deprecated_arguments do |keywords|
101
103
  keywords << :min_length if legacy_min_length != NOT_GIVEN
102
104
  keywords << :max_length if legacy_max_length != NOT_GIVEN
@@ -133,15 +135,25 @@ module Faker
133
135
  temp
134
136
  end
135
137
 
136
- def domain_name(legacy_subdomain = NOT_GIVEN, subdomain: false)
138
+ def domain_name(legacy_subdomain = NOT_GIVEN, subdomain: false, domain: nil)
137
139
  warn_for_deprecated_arguments do |keywords|
138
140
  keywords << :subdomain if legacy_subdomain != NOT_GIVEN
139
141
  end
140
142
 
141
143
  with_locale(:en) do
142
- domain_elements = [Char.prepare(domain_word), domain_suffix]
143
- domain_elements.unshift(Char.prepare(domain_word)) if subdomain
144
- domain_elements.join('.')
144
+ if domain
145
+ domain
146
+ .split('.')
147
+ .map { |domain_part| Char.prepare(domain_part) }
148
+ .tap do |domain_elements|
149
+ domain_elements << domain_suffix if domain_elements.length < 2
150
+ domain_elements.unshift(Char.prepare(domain_word)) if subdomain && domain_elements.length < 3
151
+ end.join('.')
152
+ else
153
+ [domain_word, domain_suffix].tap do |domain_elements|
154
+ domain_elements.unshift(Char.prepare(domain_word)) if subdomain
155
+ end.join('.')
156
+ end
145
157
  end
146
158
  end
147
159
 
@@ -239,6 +251,7 @@ module Faker
239
251
  "#{ip_v6_address}/#{rand(1..127)}"
240
252
  end
241
253
 
254
+ # rubocop:disable Metrics/ParameterLists
242
255
  def url(legacy_host = NOT_GIVEN, legacy_path = NOT_GIVEN, legacy_scheme = NOT_GIVEN, host: domain_name, path: "/#{username}", scheme: 'http')
243
256
  # rubocop:enable Metrics/ParameterLists
244
257
  warn_for_deprecated_arguments do |keywords|
@@ -3,26 +3,80 @@
3
3
  module Faker
4
4
  class Kpop < Base
5
5
  class << self
6
+ ##
7
+ # Produces the name of a 1990's 'OG' K-Pop group.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::Kpop.i_groups #=> "Seo Taiji and Boys"
13
+ #
14
+ # @faker.version 1.8.5
6
15
  def i_groups
7
16
  fetch('kpop.i_groups')
8
17
  end
9
18
 
19
+ ##
20
+ # Produces the name of a 2000's K-Pop group.
21
+ #
22
+ # @return [String]
23
+ #
24
+ # @example
25
+ # Faker::Kpop.ii_groups #=> "Girls' Generation"
26
+ #
27
+ # @faker.version 1.8.5
10
28
  def ii_groups
11
29
  fetch('kpop.ii_groups')
12
30
  end
13
31
 
32
+ ##
33
+ # Produces the name of a 2010's K-Pop group.
34
+ #
35
+ # @return [String]
36
+ #
37
+ # @example
38
+ # Faker::Kpop.iii_groups #=> "Trouble Maker"
39
+ #
40
+ # @faker.version 1.8.5
14
41
  def iii_groups
15
42
  fetch('kpop.iii_groups')
16
43
  end
17
44
 
45
+ ##
46
+ # Produces the name of a K-Pop girl group.
47
+ #
48
+ # @return [String]
49
+ #
50
+ # @example
51
+ # Faker::Kpop.girl_groups #=> "2NE1"
52
+ #
53
+ # @faker.version 1.8.5
18
54
  def girl_groups
19
55
  fetch('kpop.girl_groups')
20
56
  end
21
57
 
58
+ ##
59
+ # Produces the name of a K-Pop boy band.
60
+ #
61
+ # @return [String]
62
+ #
63
+ # @example
64
+ # Faker::Kpop.boy_bands #=> "Exo"
65
+ #
66
+ # @faker.version 1.8.5
22
67
  def boy_bands
23
68
  fetch('kpop.boy_bands')
24
69
  end
25
70
 
71
+ ##
72
+ # Produces the name of a solo K-Pop artist.
73
+ #
74
+ # @return [String]
75
+ #
76
+ # @example
77
+ # Faker::Kpop.solo #=> "T.O.P"
78
+ #
79
+ # @faker.version 1.8.5
26
80
  def solo
27
81
  fetch('kpop.solo')
28
82
  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,16 @@
3
3
  module Faker
4
4
  class Number < Base
5
5
  class << self
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
6
16
  def number(legacy_digits = NOT_GIVEN, digits: 10)
7
17
  warn_for_deprecated_arguments do |keywords|
8
18
  keywords << :digits if legacy_digits != NOT_GIVEN
@@ -15,6 +25,16 @@ module Faker
15
25
  ([non_zero_digit] + generate(digits - 1)).join.to_i
16
26
  end
17
27
 
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
18
38
  def leading_zero_number(legacy_digits = NOT_GIVEN, digits: 10)
19
39
  warn_for_deprecated_arguments do |keywords|
20
40
  keywords << :digits if legacy_digits != NOT_GIVEN
@@ -23,6 +43,16 @@ module Faker
23
43
  '0' + (2..digits).collect { digit }.join
24
44
  end
25
45
 
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
26
56
  def decimal_part(legacy_digits = NOT_GIVEN, digits: 10)
27
57
  warn_for_deprecated_arguments do |keywords|
28
58
  keywords << :digits if legacy_digits != NOT_GIVEN
@@ -36,6 +66,18 @@ module Faker
36
66
  leading_zero_number(digits: digits) + num.to_s
37
67
  end
38
68
 
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
39
81
  def decimal(legacy_l_digits = NOT_GIVEN, legacy_r_digits = NOT_GIVEN, l_digits: 5, r_digits: 2)
40
82
  warn_for_deprecated_arguments do |keywords|
41
83
  keywords << :l_digits if legacy_l_digits != NOT_GIVEN
@@ -53,14 +95,42 @@ module Faker
53
95
  "#{l_d}.#{r_d}".to_f
54
96
  end
55
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
56
107
  def non_zero_digit
57
108
  rand(1..9)
58
109
  end
59
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
60
120
  def digit
61
121
  rand(10)
62
122
  end
63
123
 
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
64
134
  def hexadecimal(legacy_digits = NOT_GIVEN, digits: 6)
65
135
  warn_for_deprecated_arguments do |keywords|
66
136
  keywords << :digits if legacy_digits != NOT_GIVEN
@@ -71,6 +141,17 @@ module Faker
71
141
  hex
72
142
  end
73
143
 
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
74
155
  def normal(legacy_mean = NOT_GIVEN, legacy_standard_deviation = NOT_GIVEN, mean: 1, standard_deviation: 1)
75
156
  warn_for_deprecated_arguments do |keywords|
76
157
  keywords << :mean if legacy_mean != NOT_GIVEN
@@ -83,6 +164,17 @@ module Faker
83
164
  mean + scale * Math.cos(theta)
84
165
  end
85
166
 
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
86
178
  def between(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from: 1.00, to: 5000.00)
87
179
  warn_for_deprecated_arguments do |keywords|
88
180
  keywords << :from if legacy_from != NOT_GIVEN
@@ -92,6 +184,16 @@ module Faker
92
184
  Faker::Base.rand_in_range(from, to)
93
185
  end
94
186
 
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
95
197
  def within(legacy_range = NOT_GIVEN, range: 1.00..5000.00)
96
198
  warn_for_deprecated_arguments do |keywords|
97
199
  keywords << :range if legacy_range != NOT_GIVEN
@@ -100,6 +202,17 @@ module Faker
100
202
  between(from: range.min, to: range.max)
101
203
  end
102
204
 
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
103
216
  def positive(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from: 1.00, to: 5000.00)
104
217
  warn_for_deprecated_arguments do |keywords|
105
218
  keywords << :from if legacy_from != NOT_GIVEN
@@ -111,6 +224,17 @@ module Faker
111
224
  greater_than_zero(random_number)
112
225
  end
113
226
 
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
114
238
  def negative(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from: -5000.00, to: -1.00)
115
239
  warn_for_deprecated_arguments do |keywords|
116
240
  keywords << :from if legacy_from != NOT_GIVEN