faker 2.11.0 → 2.18.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 (277) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +421 -13
  3. data/History.md +4 -4
  4. data/README.md +33 -3
  5. data/lib/faker.rb +28 -23
  6. data/lib/faker/blockchain/aeternity.rb +4 -4
  7. data/lib/faker/blockchain/bitcoin.rb +2 -2
  8. data/lib/faker/blockchain/tezos.rb +30 -2
  9. data/lib/faker/books/dune.rb +15 -2
  10. data/lib/faker/books/lovecraft.rb +8 -4
  11. data/lib/faker/creature/bird.rb +203 -0
  12. data/lib/faker/default/address.rb +35 -5
  13. data/lib/faker/default/app.rb +1 -1
  14. data/lib/faker/default/avatar.rb +1 -1
  15. data/lib/faker/default/bank.rb +96 -3
  16. data/lib/faker/default/barcode.rb +165 -0
  17. data/lib/faker/default/beer.rb +3 -3
  18. data/lib/faker/default/blood.rb +48 -0
  19. data/lib/faker/default/business.rb +1 -1
  20. data/lib/faker/default/camera.rb +46 -0
  21. data/lib/faker/default/cannabis.rb +10 -0
  22. data/lib/faker/default/chile_rut.rb +47 -3
  23. data/lib/faker/default/chuck_norris.rb +1 -0
  24. data/lib/faker/default/code.rb +98 -17
  25. data/lib/faker/default/commerce.rb +74 -11
  26. data/lib/faker/default/company.rb +96 -11
  27. data/lib/faker/default/compass.rb +135 -0
  28. data/lib/faker/default/computer.rb +63 -0
  29. data/lib/faker/default/construction.rb +54 -0
  30. data/lib/faker/default/cosmere.rb +90 -0
  31. data/lib/faker/default/crypto.rb +17 -4
  32. data/lib/faker/default/crypto_coin.rb +45 -0
  33. data/lib/faker/default/date.rb +16 -12
  34. data/lib/faker/default/driving_licence.rb +67 -1
  35. data/lib/faker/default/drone.rb +332 -0
  36. data/lib/faker/default/educator.rb +13 -0
  37. data/lib/faker/default/faker_adjective.rb +35 -0
  38. data/lib/faker/default/file.rb +53 -2
  39. data/lib/faker/default/finance.rb +45 -0
  40. data/lib/faker/default/food.rb +1 -1
  41. data/lib/faker/default/gender.rb +1 -1
  42. data/lib/faker/default/hipster.rb +107 -10
  43. data/lib/faker/default/id_number.rb +122 -2
  44. data/lib/faker/default/internet.rb +266 -12
  45. data/lib/faker/default/internet_http.rb +48 -0
  46. data/lib/faker/default/invoice.rb +33 -6
  47. data/lib/faker/default/json.rb +61 -5
  48. data/lib/faker/default/lorem.rb +160 -5
  49. data/lib/faker/default/lorem_flickr.rb +67 -7
  50. data/lib/faker/default/lorem_pixel.rb +23 -0
  51. data/lib/faker/default/markdown.rb +91 -0
  52. data/lib/faker/default/measurement.rb +93 -2
  53. data/lib/faker/default/military.rb +26 -0
  54. data/lib/faker/default/mountain.rb +33 -0
  55. data/lib/faker/default/name.rb +98 -0
  56. data/lib/faker/default/nhs.rb +19 -0
  57. data/lib/faker/default/number.rb +28 -13
  58. data/lib/faker/default/omniauth.rb +62 -14
  59. data/lib/faker/default/phone_number.rb +88 -5
  60. data/lib/faker/default/placeholdit.rb +23 -1
  61. data/lib/faker/default/relationship.rb +1 -1
  62. data/lib/faker/default/science.rb +26 -0
  63. data/lib/faker/default/slack_emoji.rb +81 -0
  64. data/lib/faker/default/south_africa.rb +90 -0
  65. data/lib/faker/default/space.rb +1 -1
  66. data/lib/faker/default/string.rb +20 -3
  67. data/lib/faker/default/stripe.rb +64 -3
  68. data/lib/faker/default/tea.rb +41 -0
  69. data/lib/faker/default/twitter.rb +35 -0
  70. data/lib/faker/default/types.rb +84 -3
  71. data/lib/faker/default/university.rb +45 -0
  72. data/lib/faker/default/vehicle.rb +184 -4
  73. data/lib/faker/default/verb.rb +45 -0
  74. data/lib/faker/default/world_cup.rb +4 -4
  75. data/lib/faker/fantasy/tolkien.rb +67 -0
  76. data/lib/faker/games/clash_of_clans.rb +48 -0
  77. data/lib/faker/games/control.rb +113 -0
  78. data/lib/faker/games/dnd.rb +136 -0
  79. data/lib/faker/games/elder_scrolls.rb +26 -0
  80. data/lib/faker/games/heroes.rb +13 -0
  81. data/lib/faker/games/heroes_of_the_storm.rb +16 -5
  82. data/lib/faker/games/minecraft.rb +113 -0
  83. data/lib/faker/games/street_fighter.rb +61 -0
  84. data/lib/faker/games/super_mario.rb +48 -0
  85. data/lib/faker/games/touhou.rb +75 -0
  86. data/lib/faker/games/warhammer_fantasy.rb +74 -0
  87. data/lib/faker/games/witcher.rb +39 -0
  88. data/lib/faker/games/world_of_warcraft.rb +26 -1
  89. data/lib/faker/japanese_media/conan.rb +48 -0
  90. data/lib/faker/japanese_media/doraemon.rb +48 -0
  91. data/lib/faker/japanese_media/dragon_ball.rb +26 -0
  92. data/lib/faker/japanese_media/naruto.rb +61 -0
  93. data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
  94. data/lib/faker/movies/departed.rb +49 -0
  95. data/lib/faker/movies/hobbit.rb +4 -4
  96. data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
  97. data/lib/faker/movies/lord_of_the_rings.rb +3 -3
  98. data/lib/faker/movies/movie.rb +13 -0
  99. data/lib/faker/movies/room.rb +63 -0
  100. data/lib/faker/movies/star_wars.rb +74 -2
  101. data/lib/faker/music/hiphop.rb +48 -0
  102. data/lib/faker/music/music.rb +12 -0
  103. data/lib/faker/music/opera.rb +237 -1
  104. data/lib/faker/music/pearl_jam.rb +50 -0
  105. data/lib/faker/music/phish.rb +27 -1
  106. data/lib/faker/music/prince.rb +64 -0
  107. data/lib/faker/music/rock_band.rb +12 -0
  108. data/lib/faker/music/rush.rb +37 -0
  109. data/lib/faker/music/show.rb +49 -0
  110. data/lib/faker/quotes/quote.rb +80 -1
  111. data/lib/faker/quotes/rajnikanth.rb +1 -0
  112. data/lib/faker/quotes/shakespeare.rb +70 -0
  113. data/lib/faker/sports/volleyball.rb +74 -0
  114. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +13 -0
  115. data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
  116. data/lib/faker/tv_shows/buffy.rb +17 -4
  117. data/lib/faker/tv_shows/dr_who.rb +1 -1
  118. data/lib/faker/tv_shows/final_space.rb +51 -0
  119. data/lib/faker/tv_shows/futurama.rb +65 -0
  120. data/lib/faker/tv_shows/simpsons.rb +14 -0
  121. data/lib/faker/tv_shows/suits.rb +37 -0
  122. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +17 -4
  123. data/lib/faker/version.rb +1 -1
  124. data/lib/helpers/base58.rb +1 -1
  125. data/lib/helpers/char.rb +22 -27
  126. data/lib/helpers/unique_generator.rb +0 -2
  127. data/lib/locales/de-AT.yml +4 -2
  128. data/lib/locales/de-CH.yml +1696 -1
  129. data/lib/locales/de.yml +4 -2
  130. data/lib/locales/en-AU.yml +50 -10
  131. data/lib/locales/en-CA.yml +2 -0
  132. data/lib/locales/en-GB.yml +1 -1
  133. data/lib/locales/en-IND.yml +2 -1
  134. data/lib/locales/en-MS.yml +2 -1
  135. data/lib/locales/en-NEP.yml +4 -1
  136. data/lib/locales/en-NZ.yml +3 -1
  137. data/lib/locales/en-PAK.yml +2 -1
  138. data/lib/locales/en-SG.yml +2 -1
  139. data/lib/locales/en-US.yml +37 -11
  140. data/lib/locales/en-au-ocker.yml +2 -1
  141. data/lib/locales/en.yml +0 -3
  142. data/lib/locales/en/address.yml +2 -0
  143. data/lib/locales/en/adjective.yml +179 -0
  144. data/lib/locales/en/animal.yml +1 -1
  145. data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
  146. data/lib/locales/en/bank.yml +1 -1
  147. data/lib/locales/en/barcode.yml +24 -0
  148. data/lib/locales/en/big_bang_theory.yml +38 -0
  149. data/lib/locales/en/bird.yml +1281 -0
  150. data/lib/locales/en/blood.yml +13 -0
  151. data/lib/locales/en/book.yml +487 -3
  152. data/lib/locales/en/buffy.yml +1 -1
  153. data/lib/locales/en/camera.yml +611 -0
  154. data/lib/locales/en/clash_of_clan.yml +101 -0
  155. data/lib/locales/en/company.yml +2 -2
  156. data/lib/locales/en/computer.yml +36 -0
  157. data/lib/locales/en/conan.yml +171 -0
  158. data/lib/locales/en/control.yml +247 -0
  159. data/lib/locales/en/demographic.yml +218 -5
  160. data/lib/locales/en/departed.yml +50 -0
  161. data/lib/locales/en/device.yml +112 -4
  162. data/lib/locales/en/dnd.yml +451 -0
  163. data/lib/locales/en/doraemon.yml +286 -0
  164. data/lib/locales/en/dota.yml +531 -63
  165. data/lib/locales/en/dragon_ball.yml +243 -1
  166. data/lib/locales/en/driving_license.yml +181 -0
  167. data/lib/locales/en/drone.yml +95 -0
  168. data/lib/locales/en/dune.yml +270 -131
  169. data/lib/locales/en/educator.yml +6 -0
  170. data/lib/locales/en/elder_scrolls.yml +583 -9
  171. data/lib/locales/en/fallout.yml +311 -133
  172. data/lib/locales/en/final_space.yml +37 -0
  173. data/lib/locales/en/finance.yml +53 -0
  174. data/lib/locales/en/football.yml +3 -3
  175. data/lib/locales/en/fresh_prince_of_bel_air.yml +1 -1
  176. data/lib/locales/en/futurama.yml +344 -0
  177. data/lib/locales/en/half_life.yml +84 -3
  178. data/lib/locales/en/heroes.yml +408 -3
  179. data/lib/locales/en/heroes_of_the_storm.yml +131 -4
  180. data/lib/locales/en/house.yml +1 -1
  181. data/lib/locales/en/how_to_train_your_dragon.yml +174 -0
  182. data/lib/locales/en/jack_handey.yml +54 -0
  183. data/lib/locales/en/league_of_legends.yml +285 -6
  184. data/lib/locales/en/lebowski.yml +1 -1
  185. data/lib/locales/en/lovecraft.yml +76 -6
  186. data/lib/locales/en/military.yml +179 -5
  187. data/lib/locales/en/minecraft.yml +663 -0
  188. data/lib/locales/en/mountain.yml +158 -0
  189. data/lib/locales/en/movie.yml +192 -1
  190. data/lib/locales/en/music.yml +461 -29
  191. data/lib/locales/en/myst.yml +87 -31
  192. data/lib/locales/en/name.yml +5 -4
  193. data/lib/locales/en/naruto.yml +231 -0
  194. data/lib/locales/en/one_piece.yml +2 -2
  195. data/lib/locales/en/opera.yml +168 -0
  196. data/lib/locales/en/overwatch.yml +2650 -2622
  197. data/lib/locales/en/pearl_jam.yml +213 -0
  198. data/lib/locales/en/phish.yml +392 -1
  199. data/lib/locales/en/pokemon.yml +417 -4
  200. data/lib/locales/en/prince.yml +227 -0
  201. data/lib/locales/en/quote.yml +692 -163
  202. data/lib/locales/en/rock_band.yml +1 -0
  203. data/lib/locales/en/room.yml +68 -0
  204. data/lib/locales/en/rush.yml +32 -0
  205. data/lib/locales/en/science.yml +355 -3
  206. data/lib/locales/en/shakespeare.yml +21 -24
  207. data/lib/locales/en/show.yml +597 -0
  208. data/lib/locales/en/simpsons.yml +668 -0
  209. data/lib/locales/en/source.yml +30 -0
  210. data/lib/locales/en/space.yml +1 -1
  211. data/lib/locales/en/star_trek.yml +1 -1
  212. data/lib/locales/en/star_wars.yml +568 -220
  213. data/lib/locales/en/street_fighter.yml +1524 -0
  214. data/lib/locales/en/studio_ghibli.yml +107 -0
  215. data/lib/locales/en/suits.yml +45 -0
  216. data/lib/locales/en/super_mario.yml +58 -0
  217. data/lib/locales/en/super_smash_bros.yml +18 -4
  218. data/lib/locales/en/tea.yml +172 -0
  219. data/lib/locales/en/tolkien.yml +2453 -0
  220. data/lib/locales/en/touhou.yml +839 -0
  221. data/lib/locales/en/volleyball.yml +501 -0
  222. data/lib/locales/en/warhammer_fantasy.yml +582 -0
  223. data/lib/locales/en/witcher.yml +426 -7
  224. data/lib/locales/en/world_of_warcraft.yml +122 -4
  225. data/lib/locales/en/zelda.yml +962 -4
  226. data/lib/locales/es-AR.yml +4603 -0
  227. data/lib/locales/es.yml +56 -0
  228. data/lib/locales/fi-FI.yml +1 -1
  229. data/lib/locales/fr-CA.yml +21 -5
  230. data/lib/locales/fr-CH.yml +2 -2
  231. data/lib/locales/fr.yml +1 -113
  232. data/lib/locales/fr/address.yml +21 -0
  233. data/lib/locales/fr/book.yml +7 -0
  234. data/lib/locales/fr/color.yml +4 -0
  235. data/lib/locales/fr/company.yml +17 -0
  236. data/lib/locales/fr/compass.yml +23 -0
  237. data/lib/locales/fr/demographic.yml +4 -0
  238. data/lib/locales/fr/gender.yml +6 -0
  239. data/lib/locales/fr/internet.yml +5 -0
  240. data/lib/locales/fr/lorem.yml +5 -0
  241. data/lib/locales/fr/measurement.yml +7 -0
  242. data/lib/locales/fr/name.yml +21 -0
  243. data/lib/locales/fr/phone_number.yml +7 -0
  244. data/lib/locales/fr/pokemon.yml +9 -0
  245. data/lib/locales/id.yml +3 -1
  246. data/lib/locales/it.yml +2 -1
  247. data/lib/locales/ja/README.md +13 -0
  248. data/lib/locales/ja/address.yml +17 -0
  249. data/lib/locales/ja/ancient.yml +4 -0
  250. data/lib/locales/ja/bank.yml +4 -0
  251. data/lib/locales/ja/book.yml +7 -0
  252. data/lib/locales/ja/coffee.yml +4 -0
  253. data/lib/locales/ja/color.yml +4 -0
  254. data/lib/locales/ja/commerce.yml +11 -0
  255. data/lib/locales/ja/company.yml +8 -0
  256. data/lib/locales/ja/creature.yml +9 -0
  257. data/lib/locales/ja/food.yml +4 -0
  258. data/lib/locales/ja/games.yml +18 -0
  259. data/lib/locales/ja/gender.yml +4 -0
  260. data/lib/locales/ja/lorem.yml +9 -0
  261. data/lib/locales/ja/name.yml +13 -0
  262. data/lib/locales/ja/phone_number.yml +7 -0
  263. data/lib/locales/ja/restaurant.yml +11 -0
  264. data/lib/locales/ja/space.yml +5 -0
  265. data/lib/locales/ja/subscription.yml +8 -0
  266. data/lib/locales/ja/university.yml +9 -0
  267. data/lib/locales/ko.yml +94 -2
  268. data/lib/locales/nb-NO.yml +4 -2
  269. data/lib/locales/pt-BR.yml +3 -1
  270. data/lib/locales/pt.yml +3 -1
  271. data/lib/locales/ru.yml +42 -1
  272. data/lib/locales/sk.yml +4 -2
  273. data/lib/locales/uk.yml +2 -0
  274. metadata +133 -24
  275. data/lib/locales/en/hobbit.yml +0 -19
  276. data/lib/locales/en/lord_of_the_rings.yml +0 -6
  277. data/lib/locales/ja.yml +0 -101
@@ -3,35 +3,91 @@
3
3
  module Faker
4
4
  class Internet < Base
5
5
  class << self
6
+ ##
7
+ # Returns the email address
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @param name [String]
12
+ # @param separators [Array]
13
+ # @param domain [String]
14
+ #
15
+ # @example
16
+ # Faker::Internet.email #=> "samsmith@faker.com"
17
+ # Faker::Internet.email(name: 'smith') #=> "smith@faker.com"
18
+ # Faker::Internet.email(name: 'sam smith', separators: ['-']) #=> "sam-smith@faker.com"
19
+ # Faker::Internet.email(name: 'sam smith', separators: ['-'], domain: 'gmail') #=> "sam-smith@gmail.com"
6
20
  def email(legacy_name = NOT_GIVEN, legacy_separators = NOT_GIVEN, name: nil, separators: nil, domain: nil)
7
21
  warn_for_deprecated_arguments do |keywords|
8
22
  keywords << :name if legacy_name != NOT_GIVEN
9
23
  keywords << :separators if legacy_separators != NOT_GIVEN
10
24
  end
11
25
 
12
- if separators
13
- [username(specifier: name, separators: separators), domain_name(domain: domain)].join('@')
14
- else
15
- [username(specifier: name), domain_name(domain: domain)].join('@')
16
- end
26
+ local_part = if separators
27
+ username(specifier: name, separators: separators)
28
+ else
29
+ username(specifier: name)
30
+ end
31
+
32
+ sanitized_local_part = sanitize_email_local_part(local_part)
33
+ construct_email(sanitized_local_part, domain_name(domain: domain))
17
34
  end
18
35
 
36
+ ##
37
+ # Returns the email address with doamin either gmail.com, yahoo.com or hotmail.com
38
+ #
39
+ # @return [String]
40
+ #
41
+ # @param name [String]
42
+ #
43
+ # @example
44
+ # Faker::Internet.free_email #=> "samsmith@gmail.com"
45
+ # Faker::Internet.free_email(name: 'smith') #=> "smith@yahoo.com"
19
46
  def free_email(legacy_name = NOT_GIVEN, name: nil)
20
47
  warn_for_deprecated_arguments do |keywords|
21
48
  keywords << :name if legacy_name != NOT_GIVEN
22
49
  end
23
50
 
24
- [username(specifier: name), fetch('internet.free_email')].join('@')
51
+ construct_email(
52
+ sanitize_email_local_part(username(specifier: name)),
53
+ fetch('internet.free_email')
54
+ )
25
55
  end
26
56
 
57
+ ##
58
+ # Returns the email address with fixed domain name as 'example'
59
+ #
60
+ # @return [String]
61
+ #
62
+ # @param name [String]
63
+ #
64
+ # @example
65
+ # Faker::Internet.safe_email #=> "samsmith@example.com"
66
+ # Faker::Internet.safe_email(name: 'smith') #=> "smith@example.net"
27
67
  def safe_email(legacy_name = NOT_GIVEN, name: nil)
28
68
  warn_for_deprecated_arguments do |keywords|
29
69
  keywords << :name if legacy_name != NOT_GIVEN
30
70
  end
31
71
 
32
- [username(specifier: name), 'example.' + sample(%w[org com net])].join('@')
72
+ construct_email(
73
+ sanitize_email_local_part(username(specifier: name)),
74
+ "example.#{sample(%w[org com net])}"
75
+ )
33
76
  end
34
77
 
78
+ ##
79
+ # Returns the username
80
+ #
81
+ # @return [String]
82
+ #
83
+ # @param specifier [Integer, Range] When int value passed it returns the username longer than specifier. Max value can be 10^6
84
+ # @param separator [Array]
85
+ #
86
+ # @wxample
87
+ # Faker::Internet.username(specifier: 10) #=> "lulu.goodwin"
88
+ # Faker::Internet.username(specifier: 5..10) #=> "morris"
89
+ # Faker::Internet.username(specifier: 5..10) #=> "berryberry"
90
+ # Faker::Internet.username(specifier: 20, separators: ['-']) #=> "nikki_sawaynnikki_saway"
35
91
  def username(legacy_specifier = NOT_GIVEN, legacy_separators = NOT_GIVEN, specifier: nil, separators: %w[. _])
36
92
  warn_for_deprecated_arguments do |keywords|
37
93
  keywords << :specifier if legacy_specifier != NOT_GIVEN
@@ -41,7 +97,8 @@ module Faker
41
97
  with_locale(:en) do
42
98
  return shuffle(specifier.scan(/[[:word:]]+/)).join(sample(separators)).downcase if specifier.respond_to?(:scan)
43
99
 
44
- if specifier.is_a?(Integer)
100
+ case specifier
101
+ when Integer
45
102
  # If specifier is Integer and has large value, Argument error exception is raised to overcome memory full error
46
103
  raise ArgumentError, 'Given argument is too large' if specifier > 10**6
47
104
 
@@ -53,7 +110,7 @@ module Faker
53
110
  break unless result.length < specifier && tries < 7
54
111
  end
55
112
  return result * (specifier / result.length + 1) if specifier.positive?
56
- elsif specifier.is_a?(Range)
113
+ when Range
57
114
  tries = 0
58
115
  result = nil
59
116
  loop do
@@ -98,7 +155,6 @@ module Faker
98
155
  #
99
156
  # @faker.version 2.1.3
100
157
  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
102
158
  warn_for_deprecated_arguments do |keywords|
103
159
  keywords << :min_length if legacy_min_length != NOT_GIVEN
104
160
  keywords << :max_length if legacy_max_length != NOT_GIVEN
@@ -106,7 +162,7 @@ module Faker
106
162
  keywords << :special_characters if legacy_special_characters != NOT_GIVEN
107
163
  end
108
164
 
109
- min_alpha = mix_case ? 2 : 0
165
+ min_alpha = mix_case && min_length > 1 ? 2 : 0
110
166
  temp = Lorem.characters(number: min_length, min_alpha: min_alpha)
111
167
  diff_length = max_length - min_length
112
168
 
@@ -134,7 +190,21 @@ module Faker
134
190
 
135
191
  temp
136
192
  end
193
+ # rubocop:enable Metrics/ParameterLists
137
194
 
195
+ ##
196
+ # Returns the domain name
197
+ #
198
+ # @return [String]
199
+ #
200
+ # @param subdomain [Bool] If true passed adds a subdomain in response
201
+ # @param domain [String]
202
+ #
203
+ # @example
204
+ # Faker::Internet.domain_name #=> "test.net"
205
+ # Faker::Internet.domain_name(subdomain: true) #=> "test.faker.io"
206
+ # Faker::Internet.domain_name(subdomain: true, domain: 'example') #=> "faker.example.com"
207
+ # Faker::Internet.domain_name(domain: 'faker') #=> "faker.org"
138
208
  def domain_name(legacy_subdomain = NOT_GIVEN, subdomain: false, domain: nil)
139
209
  warn_for_deprecated_arguments do |keywords|
140
210
  keywords << :subdomain if legacy_subdomain != NOT_GIVEN
@@ -157,6 +227,19 @@ module Faker
157
227
  end
158
228
  end
159
229
 
230
+ # rubocop:disable Style/AsciiComments
231
+
232
+ ##
233
+ # Fixes ä, ö, ü, ß characters in string passed with ae, oe, ue, ss resp.
234
+ #
235
+ # @return [String]
236
+ #
237
+ # @param string [String]
238
+ #
239
+ # @example
240
+ # Faker::Internet.fix_umlauts #=> ""
241
+ # Faker::Internet.fix_umlauts(string: 'faker') #=> "faker"
242
+ # Faker::Internet.fix_umlauts(string: 'faküer') #=> "fakueer"
160
243
  def fix_umlauts(legacy_string = NOT_GIVEN, string: '')
161
244
  warn_for_deprecated_arguments do |keywords|
162
245
  keywords << :string if legacy_string != NOT_GIVEN
@@ -164,15 +247,40 @@ module Faker
164
247
 
165
248
  Char.fix_umlauts(string)
166
249
  end
250
+ # rubocop:enable Style/AsciiComments
167
251
 
252
+ ##
253
+ # Returns the domain word for internet
254
+ #
255
+ # @return [String]
256
+ #
257
+ # @example
258
+ # Faker::Internet.domain_word #=> "senger"
168
259
  def domain_word
169
260
  with_locale(:en) { Char.prepare(Company.name.split(' ').first) }
170
261
  end
171
262
 
263
+ ## Returns the domain suffix e.g. com, org, co, biz, info etc.
264
+ #
265
+ # @return [String]
266
+ #
267
+ # @wxample
268
+ # Faker::Internet.domain_suffix #=> "com"
269
+ # Faker::Internet.domain_suffix #=> "biz"
172
270
  def domain_suffix
173
271
  fetch('internet.domain_suffix')
174
272
  end
175
273
 
274
+ ##
275
+ # Returns the MAC address
276
+ #
277
+ # @return [String]
278
+ #
279
+ # @example
280
+ # Faker::Internet.mac_address #=> "74:d0:c9:22:95:12"
281
+ # Faker::Internet.mac_address(prefix: 'a') #=> "0a:91:ce:24:89:3b"
282
+ # Faker::Internet.mac_address(prefix: 'aa') #=> "aa:38:a0:3e:e8:41"
283
+ # Faker::Internet.mac_address(prefix: 'aa:44') #=> "aa:44:30:88:6e:95"
176
284
  def mac_address(legacy_prefix = NOT_GIVEN, prefix: '')
177
285
  warn_for_deprecated_arguments do |keywords|
178
286
  keywords << :prefix if legacy_prefix != NOT_GIVEN
@@ -183,11 +291,25 @@ module Faker
183
291
  (prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':')
184
292
  end
185
293
 
294
+ ##
295
+ # Returns the IPv4 address
296
+ #
297
+ # @return [String]
298
+ #
299
+ # @example
300
+ # Faker::Internet.ip_v4_address #=> "97.117.128.93"
186
301
  def ip_v4_address
187
302
  [rand_in_range(0, 255), rand_in_range(0, 255),
188
303
  rand_in_range(0, 255), rand_in_range(0, 255)].join('.')
189
304
  end
190
305
 
306
+ ##
307
+ # Returns the private IPv4 address
308
+ #
309
+ # @return [String]
310
+ #
311
+ # @example
312
+ # Faker::Internet.private_ip_v4_address #=> "127.120.80.42"
191
313
  def private_ip_v4_address
192
314
  addr = nil
193
315
  loop do
@@ -197,6 +319,13 @@ module Faker
197
319
  addr
198
320
  end
199
321
 
322
+ ##
323
+ # Returns the public IPv4 address
324
+ #
325
+ # @return [String]
326
+ #
327
+ # @example
328
+ # Faker::Internet.public_ip_v4_address #=> "127.120.80.42"
200
329
  def public_ip_v4_address
201
330
  addr = nil
202
331
  loop do
@@ -206,6 +335,13 @@ module Faker
206
335
  addr
207
336
  end
208
337
 
338
+ ##
339
+ # Returns the private network regular expressions
340
+ #
341
+ # @return [Array]
342
+ #
343
+ # @example
344
+ # Faker::Internet.private_nets_regex #=> [/^10\./, /^100\.(6[4-9]|[7-9]\d|1[0-1]\d|12[0-7])\./, /^127\./, /^169\.254\./, /^172\.(1[6-9]|2\d|3[0-1])\./, /^192\.0\.0\./, /^192\.168\./, /^198\.(1[8-9])\./]
209
345
  def private_nets_regex
210
346
  [
211
347
  /^10\./, # 10.0.0.0 - 10.255.255.255
@@ -219,10 +355,25 @@ module Faker
219
355
  ]
220
356
  end
221
357
 
358
+ ##
359
+ # Returns lambda to check if address passed is private or not
360
+ #
361
+ # @return [Lambda]
362
+ #
363
+ # @example
364
+ # Faker::Internet.private_net_checker.call("127.120.80.42") #=> true
365
+ # Faker::Internet.private_net_checker.call("148.120.80.42") #=> false
222
366
  def private_net_checker
223
367
  ->(addr) { private_nets_regex.any? { |net| net =~ addr } }
224
368
  end
225
369
 
370
+ ##
371
+ # Returns the reserved network regular expressions
372
+ #
373
+ # @return [Array]
374
+ #
375
+ # @example
376
+ # Faker::Internet.reserved_nets_regex #=> [/^0\./, /^192\.0\.2\./, /^192\.88\.99\./, /^198\.51\.100\./, /^203\.0\.113\./, /^(22[4-9]|23\d)\./, /^(24\d|25[0-5])\./]
226
377
  def reserved_nets_regex
227
378
  [
228
379
  /^0\./, # 0.0.0.0 - 0.255.255.255
@@ -235,25 +386,69 @@ module Faker
235
386
  ]
236
387
  end
237
388
 
389
+ ##
390
+ # Returns lambda function to check address passed is reserverd or not
391
+ #
392
+ # @return [Lambda]
393
+ #
394
+ # @example
395
+ # Faker::Internet.reserved_net_checker.call('192.88.99.255') #=> true
396
+ # Faker::Internet.reserved_net_checker.call('192.88.199.255') #=> false
238
397
  def reserved_net_checker
239
398
  ->(addr) { (private_nets_regex + reserved_nets_regex).any? { |net| net =~ addr } }
240
399
  end
241
400
 
401
+ ##
402
+ # Returns Ipv4 address with CIDR, range from 1 to 31
403
+ #
404
+ # @return [String]
405
+ #
406
+ # @example
407
+ # Faker::Internet.ip_v4_cidr #=> "129.162.99.74/16"
408
+ # Faker::Internet.ip_v4_cidr #=> "129.162.99.74/24"
242
409
  def ip_v4_cidr
243
410
  "#{ip_v4_address}/#{rand(1..31)}"
244
411
  end
245
412
 
413
+ ##
414
+ # Returns Ipv6 address
415
+ #
416
+ # @return [String]
417
+ #
418
+ # @example
419
+ # Faker::Internet.ip_v6_address #=> "7754:76d4:c7aa:7646:ea68:1abb:4055:4343"
246
420
  def ip_v6_address
247
421
  (1..8).map { rand(65_536).to_s(16) }.join(':')
248
422
  end
249
423
 
424
+ ##
425
+ # Returns Ipv6 address with CIDR, range between 1 to 127
426
+ #
427
+ # @return [String]
428
+ #
429
+ # @example
430
+ # Faker::Internet.ip_v6_cidr #=> "beca:9b99:4bb6:9712:af2f:516f:8507:96e1/99"
250
431
  def ip_v6_cidr
251
432
  "#{ip_v6_address}/#{rand(1..127)}"
252
433
  end
253
434
 
254
435
  # rubocop:disable Metrics/ParameterLists
436
+
437
+ ##
438
+ # Returns URL
439
+ #
440
+ # @return [String]
441
+ #
442
+ # @param host [String]
443
+ # @param path [String]
444
+ # @param scheme [String]
445
+ #
446
+ # @example
447
+ # Faker::Internet.url #=> "http://sipes-okon.com/hung.macejkovic"
448
+ # Faker::Internet.url(host: 'faker') #=> "http://faker/shad"
449
+ # Faker::Internet.url(host: 'faker', path: '/fake_test_path') #=> "http://faker/fake_test_path"
450
+ # Faker::Internet.url(host: 'faker', path: '/fake_test_path', scheme: 'https') #=> "https://faker/fake_test_path"
255
451
  def url(legacy_host = NOT_GIVEN, legacy_path = NOT_GIVEN, legacy_scheme = NOT_GIVEN, host: domain_name, path: "/#{username}", scheme: 'http')
256
- # rubocop:enable Metrics/ParameterLists
257
452
  warn_for_deprecated_arguments do |keywords|
258
453
  keywords << :host if legacy_host != NOT_GIVEN
259
454
  keywords << :path if legacy_path != NOT_GIVEN
@@ -262,7 +457,21 @@ module Faker
262
457
 
263
458
  "#{scheme}://#{host}#{path}"
264
459
  end
460
+ # rubocop:enable Metrics/ParameterLists
265
461
 
462
+ ##
463
+ # Returns unique string in URL
464
+ #
465
+ # @return [String]
466
+ #
467
+ # @param words [String] Comma or period separated words list
468
+ # @param glue [String] Separator to add between words passed, default used are '-' or '_'
469
+ #
470
+ # @example
471
+ # Faker::Internet.slug #=> "repudiandae-sed"
472
+ # Faker::Internet.slug(words: 'test, faker') #=> "test-faker"
473
+ # Faker::Internet.slug(words: 'test. faker') #=> "test-faker"
474
+ # Faker::Internet.slug(words: 'test. faker', glue: '$') #=> "test$faker"
266
475
  def slug(legacy_words = NOT_GIVEN, legacy_glue = NOT_GIVEN, words: nil, glue: nil)
267
476
  warn_for_deprecated_arguments do |keywords|
268
477
  keywords << :words if legacy_words != NOT_GIVEN
@@ -273,10 +482,29 @@ module Faker
273
482
  (words || Faker::Lorem.words(number: 2).join(' ')).delete(',.').gsub(' ', glue).downcase
274
483
  end
275
484
 
485
+ ##
486
+ # Generates random token
487
+ #
488
+ # @return[String]
489
+ #
490
+ # @example
491
+ # Faker::Internet.device_token #=> "749f535671cf6b34d8e794d212d00c703b96274e07161b18b082d0d70ef1052f"
276
492
  def device_token
277
493
  shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join
278
494
  end
279
495
 
496
+ ##
497
+ # Generates the random browser identifier
498
+ #
499
+ # @return [String]
500
+ #
501
+ # @param vendor [String] Name of vendor, supported vendors are aol, chrome, firefox, internet_explorer, netscape, opera, safari
502
+ #
503
+ # @example
504
+ # Faker::Internet.user_agent #=> "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
505
+ # Faker::Internet.user_agent(vendor: 'chrome') #=> "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
506
+ # Faker::Internet.user_agent(vendor: 'safari') #=> "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"
507
+ # Faker::Internet.user_agent(vendor: 'faker') #=> "Mozilla/5.0 (Windows; U; Win 9x 4.90; SG; rv:1.9.2.4) Gecko/20101104 Netscape/9.1.0285"
280
508
  def user_agent(legacy_vendor = NOT_GIVEN, vendor: nil)
281
509
  warn_for_deprecated_arguments do |keywords|
282
510
  keywords << :vendor if legacy_vendor != NOT_GIVEN
@@ -287,6 +515,13 @@ module Faker
287
515
  sample(agents)
288
516
  end
289
517
 
518
+ ##
519
+ # Generated universally unique identifier
520
+ #
521
+ # @return [String]
522
+ #
523
+ # @example
524
+ # Faker::Internet.uuid #=> "8a6cdd40-6d78-4fdb-912b-190e3057197f"
290
525
  def uuid
291
526
  # borrowed from: https://github.com/ruby/ruby/blob/d48783bb0236db505fe1205d1d9822309de53a36/lib/securerandom.rb#L250
292
527
  ary = Faker::Config.random.bytes(16).unpack('NnnnnN')
@@ -325,6 +560,25 @@ module Faker
325
560
  end
326
561
 
327
562
  alias user_name username
563
+
564
+ private
565
+
566
+ def sanitize_email_local_part(local_part)
567
+ char_range = [
568
+ Array('0'..'9'),
569
+ Array('A'..'Z'),
570
+ Array('a'..'z'),
571
+ "!#$%&'*+-/=?^_`{|}~.".split(//)
572
+ ].flatten
573
+
574
+ local_part.split(//).map do |char|
575
+ char_range.include?(char) ? char : '#'
576
+ end.join
577
+ end
578
+
579
+ def construct_email(local_part, domain_name)
580
+ [local_part, domain_name].join('@')
581
+ end
328
582
  end
329
583
  end
330
584
  end