faker 2.10.2 → 2.15.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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +323 -0
  3. data/README.md +27 -2
  4. data/lib/faker.rb +57 -25
  5. data/lib/faker/blockchain/aeternity.rb +4 -4
  6. data/lib/faker/books/dune.rb +15 -2
  7. data/lib/faker/books/lovecraft.rb +8 -4
  8. data/lib/faker/default/address.rb +35 -5
  9. data/lib/faker/default/bank.rb +80 -3
  10. data/lib/faker/default/barcode.rb +154 -0
  11. data/lib/faker/default/beer.rb +3 -3
  12. data/lib/faker/default/blood.rb +48 -0
  13. data/lib/faker/default/business.rb +1 -1
  14. data/lib/faker/default/camera.rb +46 -0
  15. data/lib/faker/default/cannabis.rb +80 -0
  16. data/lib/faker/default/chile_rut.rb +47 -3
  17. data/lib/faker/default/code.rb +98 -17
  18. data/lib/faker/default/commerce.rb +74 -11
  19. data/lib/faker/default/company.rb +78 -11
  20. data/lib/faker/default/compass.rb +135 -0
  21. data/lib/faker/default/computer.rb +63 -0
  22. data/lib/faker/default/construction.rb +54 -0
  23. data/lib/faker/default/cosmere.rb +90 -0
  24. data/lib/faker/default/crypto_coin.rb +45 -0
  25. data/lib/faker/default/date.rb +16 -12
  26. data/lib/faker/default/driving_licence.rb +65 -0
  27. data/lib/faker/default/drone.rb +332 -0
  28. data/lib/faker/default/faker_adjective.rb +35 -0
  29. data/lib/faker/default/file.rb +49 -0
  30. data/lib/faker/default/finance.rb +45 -0
  31. data/lib/faker/default/food.rb +1 -1
  32. data/lib/faker/default/funny_name.rb +45 -0
  33. data/lib/faker/default/gender.rb +1 -1
  34. data/lib/faker/default/hipster.rb +101 -4
  35. data/lib/faker/default/id_number.rb +88 -2
  36. data/lib/faker/default/internet.rb +68 -10
  37. data/lib/faker/default/internet_http.rb +48 -0
  38. data/lib/faker/default/invoice.rb +33 -6
  39. data/lib/faker/default/json.rb +59 -4
  40. data/lib/faker/default/lorem.rb +2 -2
  41. data/lib/faker/default/lorem_flickr.rb +65 -0
  42. data/lib/faker/default/lorem_pixel.rb +22 -0
  43. data/lib/faker/default/markdown.rb +89 -0
  44. data/lib/faker/default/measurement.rb +93 -2
  45. data/lib/faker/default/military.rb +26 -0
  46. data/lib/faker/default/mountain.rb +33 -0
  47. data/lib/faker/default/name.rb +98 -0
  48. data/lib/faker/default/nhs.rb +19 -0
  49. data/lib/faker/default/number.rb +6 -8
  50. data/lib/faker/default/omniauth.rb +107 -52
  51. data/lib/faker/default/phone_number.rb +88 -5
  52. data/lib/faker/default/placeholdit.rb +21 -0
  53. data/lib/faker/default/relationship.rb +1 -1
  54. data/lib/faker/default/slack_emoji.rb +81 -0
  55. data/lib/faker/default/south_africa.rb +90 -0
  56. data/lib/faker/default/space.rb +1 -1
  57. data/lib/faker/default/string.rb +19 -3
  58. data/lib/faker/default/stripe.rb +64 -3
  59. data/lib/faker/default/twitter.rb +35 -0
  60. data/lib/faker/default/types.rb +80 -0
  61. data/lib/faker/default/university.rb +45 -0
  62. data/lib/faker/default/vehicle.rb +184 -4
  63. data/lib/faker/default/verb.rb +45 -0
  64. data/lib/faker/default/world_cup.rb +4 -4
  65. data/lib/faker/fantasy/tolkien.rb +67 -0
  66. data/lib/faker/games/clash_of_clans.rb +48 -0
  67. data/lib/faker/games/control.rb +113 -0
  68. data/lib/faker/games/dnd.rb +136 -0
  69. data/lib/faker/games/elder_scrolls.rb +26 -0
  70. data/lib/faker/games/heroes.rb +13 -0
  71. data/lib/faker/games/heroes_of_the_storm.rb +16 -5
  72. data/lib/faker/games/minecraft.rb +113 -0
  73. data/lib/faker/games/street_fighter.rb +61 -0
  74. data/lib/faker/games/super_mario.rb +48 -0
  75. data/lib/faker/games/warhammer_fantasy.rb +74 -0
  76. data/lib/faker/games/world_of_warcraft.rb +26 -1
  77. data/lib/faker/japanese_media/conan.rb +48 -0
  78. data/lib/faker/japanese_media/doraemon.rb +48 -0
  79. data/lib/faker/japanese_media/dragon_ball.rb +26 -0
  80. data/lib/faker/japanese_media/naruto.rb +61 -0
  81. data/lib/faker/japanese_media/studio_ghibli.rb +48 -0
  82. data/lib/faker/movies/departed.rb +49 -0
  83. data/lib/faker/movies/hobbit.rb +4 -4
  84. data/lib/faker/movies/how_to_train_your_dragon.rb +48 -0
  85. data/lib/faker/movies/lord_of_the_rings.rb +3 -3
  86. data/lib/faker/movies/movie.rb +13 -0
  87. data/lib/faker/movies/room.rb +63 -0
  88. data/lib/faker/movies/star_wars.rb +2 -2
  89. data/lib/faker/music/hiphop.rb +48 -0
  90. data/lib/faker/music/opera.rb +237 -1
  91. data/lib/faker/music/pearl_jam.rb +50 -0
  92. data/lib/faker/music/phish.rb +27 -1
  93. data/lib/faker/music/prince.rb +64 -0
  94. data/lib/faker/music/rush.rb +37 -0
  95. data/lib/faker/music/show.rb +49 -0
  96. data/lib/faker/quotes/chiquito.rb +80 -0
  97. data/lib/faker/quotes/quote.rb +80 -1
  98. data/lib/faker/quotes/rajnikanth.rb +26 -0
  99. data/lib/faker/quotes/shakespeare.rb +36 -0
  100. data/lib/faker/sports/volleyball.rb +74 -0
  101. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +13 -0
  102. data/lib/faker/tv_shows/big_bang_theory.rb +37 -0
  103. data/lib/faker/tv_shows/buffy.rb +17 -4
  104. data/lib/faker/tv_shows/dr_who.rb +1 -1
  105. data/lib/faker/tv_shows/final_space.rb +51 -0
  106. data/lib/faker/tv_shows/futurama.rb +65 -0
  107. data/lib/faker/tv_shows/simpsons.rb +14 -0
  108. data/lib/faker/tv_shows/suits.rb +37 -0
  109. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +17 -4
  110. data/lib/faker/version.rb +1 -1
  111. data/lib/helpers/base58.rb +1 -1
  112. data/lib/helpers/char.rb +22 -27
  113. data/lib/helpers/unique_generator.rb +3 -2
  114. data/lib/locales/de-AT.yml +4 -2
  115. data/lib/locales/de-CH.yml +1696 -1
  116. data/lib/locales/de.yml +4 -2
  117. data/lib/locales/en-AU.yml +50 -10
  118. data/lib/locales/en-CA.yml +2 -0
  119. data/lib/locales/en-GB.yml +1 -1
  120. data/lib/locales/en-IND.yml +2 -1
  121. data/lib/locales/en-MS.yml +2 -1
  122. data/lib/locales/en-NEP.yml +4 -1
  123. data/lib/locales/en-NZ.yml +3 -1
  124. data/lib/locales/en-PAK.yml +2 -1
  125. data/lib/locales/en-SG.yml +2 -1
  126. data/lib/locales/en-US.yml +36 -10
  127. data/lib/locales/en-au-ocker.yml +2 -1
  128. data/lib/locales/en.yml +0 -3
  129. data/lib/locales/en/address.yml +2 -0
  130. data/lib/locales/en/adjective.yml +179 -0
  131. data/lib/locales/en/animal.yml +1 -1
  132. data/lib/locales/en/aqua_teen_hunger_force.yml +33 -1
  133. data/lib/locales/en/bank.yml +1 -1
  134. data/lib/locales/en/barcode.yml +24 -0
  135. data/lib/locales/en/big_bang_theory.yml +38 -0
  136. data/lib/locales/en/blood.yml +13 -0
  137. data/lib/locales/en/buffy.yml +1 -1
  138. data/lib/locales/en/camera.yml +611 -0
  139. data/lib/locales/en/chiquito.yml +64 -0
  140. data/lib/locales/en/clash_of_clan.yml +101 -0
  141. data/lib/locales/en/company.yml +2 -2
  142. data/lib/locales/en/computer.yml +36 -0
  143. data/lib/locales/en/conan.yml +171 -0
  144. data/lib/locales/en/control.yml +247 -0
  145. data/lib/locales/en/demographic.yml +218 -5
  146. data/lib/locales/en/departed.yml +50 -0
  147. data/lib/locales/en/dnd.yml +451 -0
  148. data/lib/locales/en/doraemon.yml +286 -0
  149. data/lib/locales/en/dota.yml +531 -63
  150. data/lib/locales/en/dragon_ball.yml +243 -1
  151. data/lib/locales/en/driving_license.yml +181 -0
  152. data/lib/locales/en/drone.yml +95 -0
  153. data/lib/locales/en/dune.yml +401 -131
  154. data/lib/locales/en/elder_scrolls.yml +583 -9
  155. data/lib/locales/en/fallout.yml +311 -133
  156. data/lib/locales/en/final_space.yml +37 -0
  157. data/lib/locales/en/finance.yml +53 -0
  158. data/lib/locales/en/fresh_prince_of_bel_air.yml +1 -1
  159. data/lib/locales/en/futurama.yml +344 -0
  160. data/lib/locales/en/half_life.yml +84 -3
  161. data/lib/locales/en/heroes.yml +408 -3
  162. data/lib/locales/en/heroes_of_the_storm.yml +131 -4
  163. data/lib/locales/en/house.yml +1 -1
  164. data/lib/locales/en/how_to_train_your_dragon.yml +174 -0
  165. data/lib/locales/en/jack_handey.yml +54 -0
  166. data/lib/locales/en/league_of_legends.yml +285 -6
  167. data/lib/locales/en/military.yml +179 -5
  168. data/lib/locales/en/minecraft.yml +663 -0
  169. data/lib/locales/en/mountain.yml +158 -0
  170. data/lib/locales/en/movie.yml +192 -1
  171. data/lib/locales/en/music.yml +451 -29
  172. data/lib/locales/en/myst.yml +87 -31
  173. data/lib/locales/en/name.yml +6 -5
  174. data/lib/locales/en/naruto.yml +231 -0
  175. data/lib/locales/en/one_piece.yml +2 -2
  176. data/lib/locales/en/opera.yml +168 -0
  177. data/lib/locales/en/overwatch.yml +2650 -2622
  178. data/lib/locales/en/pearl_jam.yml +213 -0
  179. data/lib/locales/en/phish.yml +392 -1
  180. data/lib/locales/en/pokemon.yml +417 -4
  181. data/lib/locales/en/prince.yml +227 -0
  182. data/lib/locales/en/quote.yml +692 -163
  183. data/lib/locales/en/rajnikanth.yml +77 -0
  184. data/lib/locales/en/room.yml +68 -0
  185. data/lib/locales/en/rush.yml +32 -0
  186. data/lib/locales/en/show.yml +597 -0
  187. data/lib/locales/en/simpsons.yml +668 -0
  188. data/lib/locales/en/source.yml +30 -0
  189. data/lib/locales/en/star_trek.yml +1 -1
  190. data/lib/locales/en/star_wars.yml +568 -220
  191. data/lib/locales/en/street_fighter.yml +1524 -0
  192. data/lib/locales/en/studio_ghibli.yml +107 -0
  193. data/lib/locales/en/suits.yml +45 -0
  194. data/lib/locales/en/super_mario.yml +58 -0
  195. data/lib/locales/en/super_smash_bros.yml +16 -4
  196. data/lib/locales/en/tolkien.yml +2453 -0
  197. data/lib/locales/en/volleyball.yml +501 -0
  198. data/lib/locales/en/warhammer_fantasy.yml +582 -0
  199. data/lib/locales/en/witcher.yml +389 -7
  200. data/lib/locales/en/world_of_warcraft.yml +122 -4
  201. data/lib/locales/en/zelda.yml +962 -4
  202. data/lib/locales/es.yml +56 -0
  203. data/lib/locales/fi-FI.yml +1 -1
  204. data/lib/locales/fr-CA.yml +21 -5
  205. data/lib/locales/fr-CH.yml +2 -2
  206. data/lib/locales/fr.yml +8 -2
  207. data/lib/locales/id.yml +2 -1
  208. data/lib/locales/it.yml +2 -1
  209. data/lib/locales/ja.yml +5 -1
  210. data/lib/locales/ko.yml +94 -2
  211. data/lib/locales/nb-NO.yml +4 -2
  212. data/lib/locales/pt-BR.yml +2 -1
  213. data/lib/locales/pt.yml +3 -1
  214. data/lib/locales/ru.yml +3 -1
  215. data/lib/locales/sk.yml +4 -2
  216. data/lib/locales/uk.yml +2 -0
  217. metadata +89 -21
  218. data/lib/locales/en/hobbit.yml +0 -19
  219. data/lib/locales/en/lord_of_the_rings.yml +0 -6
@@ -93,7 +93,7 @@ module Faker
93
93
  #
94
94
  # @faker.version 1.7.0
95
95
  def measurement
96
- fetch('food.measurement_sizes') + ' ' + fetch('food.measurements')
96
+ "#{fetch('food.measurement_sizes')} #{fetch('food.measurements')}"
97
97
  end
98
98
 
99
99
  ##
@@ -5,10 +5,28 @@ module Faker
5
5
  flexible :funny_name
6
6
 
7
7
  class << self
8
+ ##
9
+ # Retrieves a funny name.
10
+ #
11
+ # @return [String]
12
+ #
13
+ # @example
14
+ # Faker::FunnyName.name #=> "Sam Pull"
15
+ #
16
+ # @faker.version 1.8.0
8
17
  def name
9
18
  fetch('funny_name.name')
10
19
  end
11
20
 
21
+ ##
22
+ # Retrieves a funny two word name.
23
+ #
24
+ # @return [String]
25
+ #
26
+ # @example
27
+ # Faker::FunnyName.two_word_name #=> "Shirley Knot"
28
+ #
29
+ # @faker.version 1.8.0
12
30
  def two_word_name
13
31
  two_word_names = fetch_all('funny_name.name').select do |name|
14
32
  name.count(' ') == 1
@@ -17,6 +35,15 @@ module Faker
17
35
  sample(two_word_names)
18
36
  end
19
37
 
38
+ ##
39
+ # Retrieves a funny three word name.
40
+ #
41
+ # @return [String]
42
+ #
43
+ # @example
44
+ # Faker::FunnyName.three_word_name #=> "Carson O. Gin"
45
+ #
46
+ # @faker.version 1.8.0
20
47
  def three_word_name
21
48
  three_word_names = fetch_all('funny_name.name').select do |name|
22
49
  name.count(' ') == 2
@@ -25,6 +52,15 @@ module Faker
25
52
  sample(three_word_names)
26
53
  end
27
54
 
55
+ ##
56
+ # Retrieves a funny four word name.
57
+ #
58
+ # @return [String]
59
+ #
60
+ # @example
61
+ # Faker::FunnyName.four_word_name #=> "Maude L. T. Ford"
62
+ #
63
+ # @faker.version 1.8.0
28
64
  def four_word_name
29
65
  four_word_names = fetch_all('funny_name.name').select do |name|
30
66
  name.count(' ') == 3
@@ -33,6 +69,15 @@ module Faker
33
69
  sample(four_word_names)
34
70
  end
35
71
 
72
+ ##
73
+ # Retrieves a funny name with an initial.
74
+ #
75
+ # @return [String]
76
+ #
77
+ # @example
78
+ # Faker::FunnyName.name_with_initial #=> "Heather N. Yonn"
79
+ #
80
+ # @faker.version 1.8.0
36
81
  def name_with_initial
37
82
  names_with_initials = fetch_all('funny_name.name').select do |name|
38
83
  name.count('.').positive?
@@ -37,7 +37,7 @@ module Faker
37
37
  # @example
38
38
  # Faker::Gender.short_binary_type #=> "f"
39
39
  #
40
- # @faker.version next
40
+ # @faker.version 2.13.0
41
41
  def short_binary_type
42
42
  fetch('gender.short_binary_types')
43
43
  end
@@ -3,11 +3,35 @@
3
3
  module Faker
4
4
  class Hipster < Base
5
5
  class << self
6
+ ##
7
+ # Produces a random hipster word.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::Hipster.word #=> "irony"
13
+ #
14
+ # @faker.version 1.6.0
6
15
  def word
7
16
  random_word = sample(translate('faker.hipster.words'))
8
17
  random_word =~ /\s/ ? word : random_word
9
18
  end
10
19
 
20
+ ##
21
+ # Produces a random hipster word.
22
+ #
23
+ # @param number [Integer] Specifies the number of words returned
24
+ # @param supplemental [Boolean] Specifies if the words are supplemental
25
+ # @param spaces_allowed [Boolean] Specifies if the words may contain spaces
26
+ # @return [Array<String>]
27
+ #
28
+ # @example
29
+ # Faker::Hipster.words #=> ["pug", "pitchfork", "chia"]
30
+ # Faker::Hipster.words(number: 4) #=> ["ugh", "cardigan", "poutine", "stumptown"]
31
+ # Faker::Hipster.words(number: 4, supplemental: true) #=> ["iste", "seitan", "normcore", "provident"]
32
+ # Faker::Hipster.words(number: 4, supplemental: true, spaces_allowed: true) #=> ["qui", "magni", "craft beer", "est"]
33
+ #
34
+ # @faker.version 1.6.0
11
35
  # rubocop:disable Metrics/ParameterLists
12
36
  def words(legacy_number = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, legacy_spaces_allowed = NOT_GIVEN, number: 3, supplemental: false, spaces_allowed: false)
13
37
  # rubocop:enable Metrics/ParameterLists
@@ -30,8 +54,27 @@ module Faker
30
54
  words.each_with_index { |w, i| words[i] = word if w =~ /\s/ }
31
55
  end
32
56
 
57
+ ##
58
+ # Produces a random hipster sentence.
59
+ #
60
+ # @param word_count [Integer] Specifies the number of words in the sentence
61
+ # @param supplemental [Boolean] Specifies if the words are supplemental
62
+ # @param random_words_to_add [Integer] Specifies the number of random words to add
63
+ # @param open_compounds_allowed [Boolean] Specifies if the generated sentence can contain words having additional spaces
64
+ # @return [String]
65
+ #
66
+ # @example
67
+ # Faker::Hipster.sentence #=> "Park iphone leggings put a bird on it."
68
+ # Faker::Hipster.sentence(word_count: 3) #=> "Pour-over swag godard."
69
+ # Faker::Hipster.sentence(word_count: 3, supplemental: true) #=> "Beard laboriosam sequi celiac."
70
+ # Faker::Hipster.sentence(word_count: 3, supplemental: false, random_words_to_add: 4) #=> "Bitters retro mustache aesthetic biodiesel 8-bit."
71
+ # Faker::Hipster.sentence(word_count: 3, supplemental: true, random_words_to_add: 4) #=> "Occaecati deleniti messenger bag meh crucifix autem."
72
+ # Faker::Hipster.sentence(word_count: 3, supplemental: true, random_words_to_add: 0, open_compounds_allowed: true) #=> "Kale chips nihil eos."
73
+ # Faker::Hipster.sentence(word_count: 3, supplemental: true, random_words_to_add: 0, open_compounds_allowed: false) #=> "Dreamcatcher umami fixie."
74
+ #
75
+ # @faker.version 1.6.0
33
76
  # rubocop:disable Metrics/ParameterLists
34
- def sentence(legacy_word_count = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, legacy_random_words_to_add = NOT_GIVEN, word_count: 4, supplemental: false, random_words_to_add: 6)
77
+ def sentence(legacy_word_count = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, legacy_random_words_to_add = NOT_GIVEN, word_count: 4, supplemental: false, random_words_to_add: 6, open_compounds_allowed: true)
35
78
  # rubocop:enable Metrics/ParameterLists
36
79
  warn_for_deprecated_arguments do |keywords|
37
80
  keywords << :word_count if legacy_word_count != NOT_GIVEN
@@ -39,9 +82,22 @@ module Faker
39
82
  keywords << :random_words_to_add if legacy_random_words_to_add != NOT_GIVEN
40
83
  end
41
84
 
42
- words(number: word_count + rand(random_words_to_add.to_i).to_i, supplemental: supplemental, spaces_allowed: true).join(' ').capitalize + '.'
85
+ "#{words(number: word_count + rand(random_words_to_add.to_i).to_i, supplemental: supplemental, spaces_allowed: open_compounds_allowed).join(' ').capitalize}."
43
86
  end
44
87
 
88
+ ##
89
+ # Produces random hipster sentences.
90
+ #
91
+ # @param number [Integer] Specifies the number of sentences returned
92
+ # @param supplemental [Boolean] Specifies if the words are supplemental
93
+ # @return [Array<String>]
94
+ #
95
+ # @example
96
+ # Faker::Hipster.sentences #=> ["Godard pitchfork vinegar chillwave everyday 90's whatever.", "Pour-over artisan distillery street waistcoat.", "Salvia yr leggings franzen blue bottle."]
97
+ # Faker::Hipster.sentences(number: 1) #=> ["Before they sold out pinterest venmo umami try-hard ugh hoodie artisan."]
98
+ # Faker::Hipster.sentences(number: 1, supplemental: true) #=> ["Et sustainable optio aesthetic et."]
99
+ #
100
+ # @faker.version 1.6.0
45
101
  def sentences(legacy_number = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, number: 3, supplemental: false)
46
102
  warn_for_deprecated_arguments do |keywords|
47
103
  keywords << :number if legacy_number != NOT_GIVEN
@@ -55,6 +111,22 @@ module Faker
55
111
  end
56
112
  end
57
113
 
114
+ ##
115
+ # Produces a random hipster paragraph.
116
+ #
117
+ # @param sentence_count [Integer] Specifies the number of sentences in the paragraph
118
+ # @param supplemental [Boolean] Specifies if the words are supplemental
119
+ # @param random_sentences_to_add [Boolean] Specifies the number of random sentences to add
120
+ # @return [String]
121
+ #
122
+ # @example
123
+ # Faker::Hipster.paragraph #=> "Migas fingerstache pbr&b tofu. Polaroid distillery typewriter echo tofu actually. Slow-carb fanny pack pickled direct trade scenester mlkshk plaid. Banjo venmo chambray cold-pressed typewriter. Fap skateboard intelligentsia."
124
+ # Faker::Hipster.paragraph(sentence_count: 2) #=> "Yolo tilde farm-to-table hashtag. Lomo kitsch disrupt forage +1."
125
+ # Faker::Hipster.paragraph(sentence_count: 2, supplemental: true) #=> "Typewriter iste ut viral kombucha voluptatem. Sint voluptates saepe. Direct trade irony chia excepturi yuccie. Biodiesel esse listicle et quam suscipit."
126
+ # Faker::Hipster.paragraph(sentence_count: 2, supplemental: false, random_sentences_to_add: 4) #=> "Selvage vhs chartreuse narwhal vinegar. Authentic vinyl truffaut carry vhs pop-up. Hammock everyday iphone locavore thundercats bitters vegan goth. Fashion axe banh mi shoreditch whatever artisan."
127
+ # Faker::Hipster.paragraph(sentence_count: 2, supplemental: true, random_sentences_to_add: 4) #=> "Deep v gluten-free unde waistcoat aperiam migas voluptas dolorum. Aut drinking illo sustainable sapiente. Direct trade fanny pack kale chips ennui semiotics."
128
+ #
129
+ # @faker.version 1.6.0
58
130
  # rubocop:disable Metrics/ParameterLists
59
131
  def paragraph(legacy_sentence_count = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, legacy_random_sentences_to_add = NOT_GIVEN, sentence_count: 3, supplemental: false, random_sentences_to_add: 3)
60
132
  # rubocop:enable Metrics/ParameterLists
@@ -67,6 +139,19 @@ module Faker
67
139
  sentences(number: resolve(sentence_count) + rand(random_sentences_to_add.to_i).to_i, supplemental: supplemental).join(' ')
68
140
  end
69
141
 
142
+ ##
143
+ # Produces random hipster paragraphs.
144
+ #
145
+ # @param number [Integer] Specifies the number of paragraphs
146
+ # @param supplemental [Boolean] Specifies if the words are supplemental
147
+ # @return [Array<String>]
148
+ #
149
+ # @example
150
+ # Faker::Hipster.paragraphs #=> ["Tilde microdosing blog cliche meggings. Intelligentsia five dollar toast forage yuccie. Master kitsch knausgaard. Try-hard everyday trust fund mumblecore.", "Normcore viral pickled. Listicle humblebrag swag tote bag. Taxidermy street hammock neutra butcher cred kale chips. Blog portland humblebrag trust fund irony.", "Single-origin coffee fixie cleanse tofu xoxo. Post-ironic tote bag ramps gluten-free locavore mumblecore hammock. Umami loko twee. Ugh kitsch before they sold out."]
151
+ # Faker::Hipster.paragraphs(number: 1) #=> ["Skateboard cronut synth +1 fashion axe. Pop-up polaroid skateboard asymmetrical. Ennui fingerstache shoreditch before they sold out. Tattooed pitchfork ramps. Photo booth yr messenger bag raw denim bespoke locavore lomo synth."]
152
+ # Faker::Hipster.paragraphs(number: 1, supplemental: true) #=> ["Quae direct trade pbr&b quo taxidermy autem loko. Umami quas ratione migas cardigan sriracha minima. Tenetur perspiciatis pickled sed eum doloribus truffaut. Excepturi dreamcatcher meditation."]
153
+ #
154
+ # @faker.version 1.6.0
70
155
  def paragraphs(legacy_number = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, number: 3, supplemental: false)
71
156
  warn_for_deprecated_arguments do |keywords|
72
157
  keywords << :number if legacy_number != NOT_GIVEN
@@ -80,6 +165,18 @@ module Faker
80
165
  end
81
166
  end
82
167
 
168
+ ##
169
+ # Produces a random hipster paragraph by characters.
170
+ #
171
+ # @param characters [Integer] Specifies the number of characters in the paragraph
172
+ # @param supplemental [Boolean] Specifies if the words are supplemental
173
+ # @return [String]
174
+ #
175
+ # @example
176
+ # Faker::Hipster.paragraph_by_chars #=> "Truffaut stumptown trust fund 8-bit messenger bag portland. Meh kombucha selvage swag biodiesel. Lomo kinfolk jean shorts asymmetrical diy. Wayfarers portland twee stumptown. Wes anderson biodiesel retro 90's pabst. Diy echo 90's mixtape semiotics. Cornho."
177
+ # Faker::Hipster.paragraph_by_chars(characters: 256, supplemental: false) #=> "Hella kogi blog narwhal sartorial selfies mustache schlitz. Bespoke normcore kitsch cred hella fixie. Park aesthetic fixie migas twee. Cliche mustache brunch tumblr fixie godard. Drinking pop-up synth hoodie dreamcatcher typewriter. Kitsch biodiesel green."
178
+ #
179
+ # @faker.version 1.6.0
83
180
  def paragraph_by_chars(legacy_characters = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, characters: 256, supplemental: false)
84
181
  warn_for_deprecated_arguments do |keywords|
85
182
  keywords << :characters if legacy_characters != NOT_GIVEN
@@ -88,9 +185,9 @@ module Faker
88
185
 
89
186
  paragraph = paragraph(sentence_count: 3, supplemental: supplemental)
90
187
 
91
- paragraph += ' ' + paragraph(sentence_count: 3, supplemental: supplemental) while paragraph.length < characters
188
+ paragraph += " #{paragraph(sentence_count: 3, supplemental: supplemental)}" while paragraph.length < characters
92
189
 
93
- paragraph[0...characters - 1] + '.'
190
+ "#{paragraph[0...characters - 1]}."
94
191
  end
95
192
  end
96
193
  end
@@ -19,10 +19,28 @@ module Faker
19
19
  CHILEAN_MODULO = 11
20
20
 
21
21
  class << self
22
+ ##
23
+ # Produces a random valid US Social Security number.
24
+ #
25
+ # @return [String]
26
+ #
27
+ # @example
28
+ # Faker::IDNumber.valid #=> "552-56-3593"
29
+ #
30
+ # @faker.version 1.6.0
22
31
  def valid
23
32
  _translate('valid')
24
33
  end
25
34
 
35
+ ##
36
+ # Produces a random invalid US Social Security number.
37
+ #
38
+ # @return [String]
39
+ #
40
+ # @example
41
+ # Faker::IDNumber.invalid #=> "311-72-0000"
42
+ #
43
+ # @faker.version 1.6.0
26
44
  def invalid
27
45
  _translate('invalid')
28
46
  end
@@ -33,6 +51,15 @@ module Faker
33
51
  INVALID_SSN.any? { |regex| regex =~ ssn } ? ssn_valid : ssn
34
52
  end
35
53
 
54
+ ##
55
+ # Produces a random Spanish citizen identifier (DNI).
56
+ #
57
+ # @return [String]
58
+ #
59
+ # @example
60
+ # Faker::IDNumber.spanish_citizen_number #=> "53290236-H"
61
+ #
62
+ # @faker.version 1.9.0
36
63
  def spanish_citizen_number
37
64
  num = Faker::Number.number(digits: 8)
38
65
  mod = num.to_i % 23
@@ -40,6 +67,15 @@ module Faker
40
67
  "#{num}-#{check}"
41
68
  end
42
69
 
70
+ ##
71
+ # Produces a random Spanish foreign born citizen identifier (NIE).
72
+ #
73
+ # @return [String]
74
+ #
75
+ # @example
76
+ # Faker::IDNumber.spanish_foreign_citizen_number #=> "Z-1600870-Y"
77
+ #
78
+ # @faker.version 1.9.0
43
79
  def spanish_foreign_citizen_number
44
80
  code = 'XYZ'
45
81
  digits = Faker::Number.number(digits: 7)
@@ -50,6 +86,16 @@ module Faker
50
86
  "#{prefix}-#{digits}-#{check}"
51
87
  end
52
88
 
89
+ ##
90
+ # Produces a random valid South African ID Number.
91
+ #
92
+ # @return [String]
93
+ #
94
+ # @example
95
+ # Faker::IDNumber.south_african_id_number #=> "8105128870184"
96
+ # Faker::IDNumber.valid_south_african_id_number #=> "8105128870184"
97
+ #
98
+ # @faker.version 1.9.2
53
99
  def valid_south_african_id_number
54
100
  id_number = [
55
101
  Faker::Date.birthday.strftime('%y%m%d'),
@@ -63,6 +109,15 @@ module Faker
63
109
 
64
110
  alias south_african_id_number valid_south_african_id_number
65
111
 
112
+ ##
113
+ # Produces a random invalid South African ID Number.
114
+ #
115
+ # @return [String]
116
+ #
117
+ # @example
118
+ # Faker::IDNumber.invalid_south_african_id_number #=> "1642972065088"
119
+ #
120
+ # @faker.version 1.9.2
66
121
  def invalid_south_african_id_number
67
122
  invalid_date_of_birth = [
68
123
  Faker::Number.number(digits: 2),
@@ -80,6 +135,17 @@ module Faker
80
135
  [id_number, south_african_id_checksum_digit(id_number)].join
81
136
  end
82
137
 
138
+ ##
139
+ # Produces a random Brazilian Citizen Number (CPF).
140
+ #
141
+ # @param formatted [Boolean] Specifies if the number is formatted with dividers.
142
+ # @return [String]
143
+ #
144
+ # @example
145
+ # Faker::IDNumber.brazilian_citizen_number #=> "53540542221"
146
+ # Faker::IDNumber.brazilian_citizen_number(formatted: true) #=> "535.405.422-21"
147
+ #
148
+ # @faker.version 1.9.2
83
149
  def brazilian_citizen_number(legacy_formatted = NOT_GIVEN, formatted: false)
84
150
  warn_for_deprecated_arguments do |keywords|
85
151
  keywords << :formatted if legacy_formatted != NOT_GIVEN
@@ -94,6 +160,17 @@ module Faker
94
160
 
95
161
  alias brazilian_cpf brazilian_citizen_number
96
162
 
163
+ ##
164
+ # Produces a random Brazilian ID Number (RG).
165
+ #
166
+ # @param formatted [Boolean] Specifies if the number is formatted with dividers.
167
+ # @return [String]
168
+ #
169
+ # @example
170
+ # Faker::IDNumber.brazilian_id #=> "493054029"
171
+ # Faker::IDNumber.brazilian_id(formatted: true) #=> "49.305.402-9"
172
+ #
173
+ # @faker.version 2.1.2
97
174
  def brazilian_id(legacy_formatted = NOT_GIVEN, formatted: false)
98
175
  warn_for_deprecated_arguments do |keywords|
99
176
  keywords << :formatted if legacy_formatted != NOT_GIVEN
@@ -107,11 +184,20 @@ module Faker
107
184
 
108
185
  alias brazilian_rg brazilian_id
109
186
 
187
+ ##
188
+ # Produces a random Chilean ID (Rut with 8 digits).
189
+ #
190
+ # @return [String]
191
+ #
192
+ # @example
193
+ # Faker::IDNumber.chilean_id #=> "15620613-K"
194
+ #
195
+ # @faker.version 2.1.2
110
196
  def chilean_id
111
197
  digits = Faker::Number.number(digits: 8)
112
198
  verification_code = chilean_verification_code(digits)
113
199
 
114
- digits.to_s + '-' + verification_code.to_s
200
+ "#{digits}-#{verification_code}"
115
201
  end
116
202
 
117
203
  private
@@ -170,7 +256,7 @@ module Faker
170
256
  end * 10
171
257
  end
172
258
 
173
- def brazilian_document_digit(checksum, id = false)
259
+ def brazilian_document_digit(checksum, id: false)
174
260
  remainder = checksum % 11
175
261
  id ? brazilian_id_digit(remainder) : brazilian_citizen_number_digit(remainder)
176
262
  end
@@ -9,11 +9,14 @@ module Faker
9
9
  keywords << :separators if legacy_separators != NOT_GIVEN
10
10
  end
11
11
 
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
12
+ local_part = if separators
13
+ username(specifier: name, separators: separators)
14
+ else
15
+ username(specifier: name)
16
+ end
17
+
18
+ sanitized_local_part = sanitize_email_local_part(local_part)
19
+ construct_email(sanitized_local_part, domain_name(domain: domain))
17
20
  end
18
21
 
19
22
  def free_email(legacy_name = NOT_GIVEN, name: nil)
@@ -21,7 +24,10 @@ module Faker
21
24
  keywords << :name if legacy_name != NOT_GIVEN
22
25
  end
23
26
 
24
- [username(specifier: name), fetch('internet.free_email')].join('@')
27
+ construct_email(
28
+ sanitize_email_local_part(username(specifier: name)),
29
+ fetch('internet.free_email')
30
+ )
25
31
  end
26
32
 
27
33
  def safe_email(legacy_name = NOT_GIVEN, name: nil)
@@ -29,7 +35,10 @@ module Faker
29
35
  keywords << :name if legacy_name != NOT_GIVEN
30
36
  end
31
37
 
32
- [username(specifier: name), 'example.' + sample(%w[org com net])].join('@')
38
+ construct_email(
39
+ sanitize_email_local_part(username(specifier: name)),
40
+ "example.#{sample(%w[org com net])}"
41
+ )
33
42
  end
34
43
 
35
44
  def username(legacy_specifier = NOT_GIVEN, legacy_separators = NOT_GIVEN, specifier: nil, separators: %w[. _])
@@ -41,7 +50,8 @@ module Faker
41
50
  with_locale(:en) do
42
51
  return shuffle(specifier.scan(/[[:word:]]+/)).join(sample(separators)).downcase if specifier.respond_to?(:scan)
43
52
 
44
- if specifier.is_a?(Integer)
53
+ case specifier
54
+ when Integer
45
55
  # If specifier is Integer and has large value, Argument error exception is raised to overcome memory full error
46
56
  raise ArgumentError, 'Given argument is too large' if specifier > 10**6
47
57
 
@@ -53,7 +63,7 @@ module Faker
53
63
  break unless result.length < specifier && tries < 7
54
64
  end
55
65
  return result * (specifier / result.length + 1) if specifier.positive?
56
- elsif specifier.is_a?(Range)
66
+ when Range
57
67
  tries = 0
58
68
  result = nil
59
69
  loop do
@@ -106,7 +116,7 @@ module Faker
106
116
  keywords << :special_characters if legacy_special_characters != NOT_GIVEN
107
117
  end
108
118
 
109
- min_alpha = mix_case ? 2 : 0
119
+ min_alpha = mix_case && min_length > 1 ? 2 : 0
110
120
  temp = Lorem.characters(number: min_length, min_alpha: min_alpha)
111
121
  diff_length = max_length - min_length
112
122
 
@@ -295,7 +305,55 @@ module Faker
295
305
  '%08x-%04x-%04x-%04x-%04x%08x' % ary # rubocop:disable Style/FormatString
296
306
  end
297
307
 
308
+ ##
309
+ # Produces a random string of alphabetic characters, (no digits)
310
+ #
311
+ # @param length [Integer] The length of the string to generate
312
+ # @param padding [Boolean] Toggles if a final equal '=' will be added.
313
+ # @param urlsafe [Boolean] Toggles charset to '-' and '_' instead of '+' and '/'.
314
+ #
315
+ # @return [String]
316
+ #
317
+ # @example
318
+ # Faker::Internet.base64
319
+ # #=> "r_hbZ2DSD-ZACzZT"
320
+ # @example
321
+ # Faker::Internet.base64(length: 4, padding: true, urlsafe: false)
322
+ # #=> "x1/R="
323
+ #
324
+ # @faker.version 2.11.0
325
+ def base64(length: 16, padding: false, urlsafe: true)
326
+ char_range = [
327
+ Array('0'..'9'),
328
+ Array('A'..'Z'),
329
+ Array('a'..'z'),
330
+ urlsafe ? %w[- _] : %w[+ /]
331
+ ].flatten
332
+ s = Array.new(length) { sample(char_range) }.join
333
+ s += '=' if padding
334
+ s
335
+ end
336
+
298
337
  alias user_name username
338
+
339
+ private
340
+
341
+ def sanitize_email_local_part(local_part)
342
+ char_range = [
343
+ Array('0'..'9'),
344
+ Array('A'..'Z'),
345
+ Array('a'..'z'),
346
+ "!#$%&'*+-/=?^_`{|}~.".split(//)
347
+ ].flatten
348
+
349
+ local_part.split(//).map do |char|
350
+ char_range.include?(char) ? char : '#'
351
+ end.join
352
+ end
353
+
354
+ def construct_email(local_part, domain_name)
355
+ [local_part, domain_name].join('@')
356
+ end
299
357
  end
300
358
  end
301
359
  end